@event4u/agent-config 2.26.0 → 3.0.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 (771) hide show
  1. package/.agent-src/commands/agent-handoff.md +15 -3
  2. package/.agent-src/commands/agent-status.md +12 -0
  3. package/.agent-src/commands/agents/audit.md +12 -0
  4. package/.agent-src/commands/agents/init.md +12 -0
  5. package/.agent-src/commands/agents/optimize.md +12 -0
  6. package/.agent-src/commands/agents/user/accept.md +12 -0
  7. package/.agent-src/commands/agents/user/init.md +12 -0
  8. package/.agent-src/commands/agents/user/review.md +12 -0
  9. package/.agent-src/commands/agents/user/show.md +12 -0
  10. package/.agent-src/commands/agents/user/update.md +12 -0
  11. package/.agent-src/commands/agents/user.md +12 -0
  12. package/.agent-src/commands/agents.md +12 -0
  13. package/.agent-src/commands/analyze-reference-repo.md +15 -3
  14. package/.agent-src/commands/bug-fix.md +12 -0
  15. package/.agent-src/commands/bug-investigate.md +13 -1
  16. package/.agent-src/commands/challenge-me/vision.md +12 -0
  17. package/.agent-src/commands/challenge-me/with-docs.md +12 -0
  18. package/.agent-src/commands/challenge-me.md +12 -0
  19. package/.agent-src/commands/chat-history/import.md +16 -4
  20. package/.agent-src/commands/chat-history/learn.md +15 -3
  21. package/.agent-src/commands/chat-history/show.md +17 -5
  22. package/.agent-src/commands/chat-history.md +14 -2
  23. package/.agent-src/commands/check-current-md.md +12 -0
  24. package/.agent-src/commands/commit/in-chunks.md +12 -0
  25. package/.agent-src/commands/commit.md +12 -0
  26. package/.agent-src/commands/compress.md +12 -0
  27. package/.agent-src/commands/context/create.md +17 -5
  28. package/.agent-src/commands/context/refactor.md +15 -3
  29. package/.agent-src/commands/context.md +12 -0
  30. package/.agent-src/commands/cost-report.md +12 -0
  31. package/.agent-src/commands/council/analysis.md +15 -3
  32. package/.agent-src/commands/council/debate.md +17 -5
  33. package/.agent-src/commands/council/default.md +17 -5
  34. package/.agent-src/commands/council/design.md +12 -0
  35. package/.agent-src/commands/council/optimize.md +12 -0
  36. package/.agent-src/commands/council/pr.md +12 -0
  37. package/.agent-src/commands/council.md +13 -1
  38. package/.agent-src/commands/create-pr/description-only.md +12 -0
  39. package/.agent-src/commands/create-pr.md +39 -0
  40. package/.agent-src/commands/e2e-heal.md +12 -0
  41. package/.agent-src/commands/e2e-plan.md +12 -0
  42. package/.agent-src/commands/estimate-ticket.md +12 -0
  43. package/.agent-src/commands/feature/dev.md +13 -1
  44. package/.agent-src/commands/feature/explore.md +12 -0
  45. package/.agent-src/commands/feature/plan.md +14 -2
  46. package/.agent-src/commands/feature/refactor.md +12 -0
  47. package/.agent-src/commands/feature/roadmap.md +12 -0
  48. package/.agent-src/commands/feature.md +12 -0
  49. package/.agent-src/commands/fix/ci.md +12 -0
  50. package/.agent-src/commands/fix/portability.md +12 -0
  51. package/.agent-src/commands/fix/pr-bot-comments.md +12 -0
  52. package/.agent-src/commands/fix/pr-comments.md +12 -0
  53. package/.agent-src/commands/fix/pr-developer-comments.md +12 -0
  54. package/.agent-src/commands/fix/refs.md +12 -0
  55. package/.agent-src/commands/fix/seeder.md +12 -0
  56. package/.agent-src/commands/fix.md +12 -0
  57. package/.agent-src/commands/ghostwriter/delete.md +20 -8
  58. package/.agent-src/commands/ghostwriter/fetch.md +19 -7
  59. package/.agent-src/commands/ghostwriter/list.md +19 -7
  60. package/.agent-src/commands/ghostwriter/show.md +14 -2
  61. package/.agent-src/commands/ghostwriter/write.md +15 -3
  62. package/.agent-src/commands/ghostwriter.md +14 -2
  63. package/.agent-src/commands/grill-me.md +12 -0
  64. package/.agent-src/commands/implement-ticket.md +12 -0
  65. package/.agent-src/commands/jira-ticket.md +12 -0
  66. package/.agent-src/commands/judge/on-diff.md +12 -0
  67. package/.agent-src/commands/judge/solo.md +12 -0
  68. package/.agent-src/commands/judge/steps.md +12 -0
  69. package/.agent-src/commands/judge.md +12 -0
  70. package/.agent-src/commands/memory/add.md +12 -0
  71. package/.agent-src/commands/memory/learn-low-impact.md +18 -6
  72. package/.agent-src/commands/memory/load.md +12 -0
  73. package/.agent-src/commands/memory/mine-session.md +12 -0
  74. package/.agent-src/commands/memory/promote.md +12 -0
  75. package/.agent-src/commands/memory/propose.md +12 -0
  76. package/.agent-src/commands/memory.md +12 -0
  77. package/.agent-src/commands/mode.md +12 -0
  78. package/.agent-src/commands/module/create.md +12 -0
  79. package/.agent-src/commands/module/explore.md +13 -1
  80. package/.agent-src/commands/module.md +12 -0
  81. package/.agent-src/commands/optimize/agents-dir.md +14 -2
  82. package/.agent-src/commands/optimize/augmentignore.md +12 -0
  83. package/.agent-src/commands/optimize/rtk.md +12 -0
  84. package/.agent-src/commands/optimize/skills.md +12 -0
  85. package/.agent-src/commands/optimize-prompt.md +12 -0
  86. package/.agent-src/commands/optimize.md +12 -0
  87. package/.agent-src/commands/orchestrate.md +13 -1
  88. package/.agent-src/commands/override/create.md +12 -0
  89. package/.agent-src/commands/override/manage.md +12 -0
  90. package/.agent-src/commands/override.md +12 -0
  91. package/.agent-src/commands/package-reset.md +12 -0
  92. package/.agent-src/commands/package-test.md +12 -0
  93. package/.agent-src/commands/post-as/ghostwriter.md +12 -0
  94. package/.agent-src/commands/post-as/me.md +13 -1
  95. package/.agent-src/commands/post-as.md +12 -0
  96. package/.agent-src/commands/prepare-for-review.md +12 -0
  97. package/.agent-src/commands/project-analyze.md +27 -15
  98. package/.agent-src/commands/project-health.md +13 -1
  99. package/.agent-src/commands/quality-fix.md +12 -0
  100. package/.agent-src/commands/refine-ticket.md +12 -0
  101. package/.agent-src/commands/research/deep.md +12 -0
  102. package/.agent-src/commands/research/report.md +12 -0
  103. package/.agent-src/commands/research.md +12 -0
  104. package/.agent-src/commands/review-changes.md +12 -0
  105. package/.agent-src/commands/review-routing.md +12 -0
  106. package/.agent-src/commands/roadmap/ai-council.md +15 -3
  107. package/.agent-src/commands/roadmap/create.md +13 -1
  108. package/.agent-src/commands/roadmap/process-full.md +12 -0
  109. package/.agent-src/commands/roadmap/process-phase.md +12 -0
  110. package/.agent-src/commands/roadmap/process-step.md +12 -0
  111. package/.agent-src/commands/roadmap.md +12 -0
  112. package/.agent-src/commands/rule-compliance-audit.md +12 -0
  113. package/.agent-src/commands/set-cost-profile.md +12 -0
  114. package/.agent-src/commands/sync-agent-settings.md +12 -0
  115. package/.agent-src/commands/sync-gitignore/fix.md +32 -13
  116. package/.agent-src/commands/sync-gitignore.md +13 -1
  117. package/.agent-src/commands/tests/create.md +12 -0
  118. package/.agent-src/commands/tests/execute.md +12 -0
  119. package/.agent-src/commands/tests.md +12 -0
  120. package/.agent-src/commands/threat-model.md +12 -0
  121. package/.agent-src/commands/update-form-request-messages.md +12 -0
  122. package/.agent-src/commands/upstream-contribute.md +12 -0
  123. package/.agent-src/commands/video/from-script.md +12 -0
  124. package/.agent-src/commands/video/scene.md +12 -0
  125. package/.agent-src/commands/video/stitch.md +13 -1
  126. package/.agent-src/commands/video/storyboard.md +12 -0
  127. package/.agent-src/commands/video.md +12 -0
  128. package/.agent-src/commands/work.md +12 -0
  129. package/.agent-src/contexts/augment-infrastructure.md +2 -2
  130. package/.agent-src/contexts/authority/scope-mechanics.md +11 -0
  131. package/.agent-src/contexts/contracts/agents-md-anatomy.md +1 -1
  132. package/.agent-src/contexts/documentation-hierarchy.md +2 -2
  133. package/.agent-src/contexts/execution/roadmap-process-loop.md +19 -0
  134. package/.agent-src/ghostwriter/README.md +2 -2
  135. package/.agent-src/ghostwriter/fictional-fixture-v1.md +1 -1
  136. package/.agent-src/personas/README.md +1 -1
  137. package/.agent-src/personas/advisors/contrarian.md +1 -1
  138. package/.agent-src/personas/advisors/executor.md +1 -1
  139. package/.agent-src/personas/advisors/expansionist.md +1 -1
  140. package/.agent-src/personas/advisors/first-principles.md +1 -1
  141. package/.agent-src/personas/advisors/outsider.md +1 -1
  142. package/.agent-src/rules/agent-authority.md +12 -0
  143. package/.agent-src/rules/analysis-skill-routing.md +12 -0
  144. package/.agent-src/rules/architecture.md +13 -1
  145. package/.agent-src/rules/artifact-drafting-protocol.md +13 -1
  146. package/.agent-src/rules/artifact-engagement-recording.md +13 -1
  147. package/.agent-src/rules/ask-when-uncertain.md +12 -0
  148. package/.agent-src/rules/augment-edit-discipline.md +13 -1
  149. package/.agent-src/rules/augment-source-of-truth.md +13 -1
  150. package/.agent-src/rules/autonomous-execution.md +13 -1
  151. package/.agent-src/rules/caveman-speak.md +13 -1
  152. package/.agent-src/rules/cli-output-handling.md +13 -1
  153. package/.agent-src/rules/command-suggestion-policy.md +13 -1
  154. package/.agent-src/rules/commit-conventions.md +13 -1
  155. package/.agent-src/rules/commit-policy.md +12 -0
  156. package/.agent-src/rules/context-hygiene.md +15 -3
  157. package/.agent-src/rules/copilot-routing.md +13 -1
  158. package/.agent-src/rules/devcontainer-routing.md +13 -1
  159. package/.agent-src/rules/direct-answers.md +12 -0
  160. package/.agent-src/rules/docker-commands.md +13 -1
  161. package/.agent-src/rules/domain-adoption-policy.md +17 -5
  162. package/.agent-src/rules/domain-safety-disclaimer.md +13 -1
  163. package/.agent-src/rules/domain-safety-pii.md +13 -1
  164. package/.agent-src/rules/domain-safety-retention.md +13 -1
  165. package/.agent-src/rules/downstream-changes.md +13 -1
  166. package/.agent-src/rules/external-reference-deep-dive.md +13 -1
  167. package/.agent-src/rules/fast-path-marker-visibility.md +21 -1
  168. package/.agent-src/rules/framework-neutrality-in-generic-skills.md +13 -1
  169. package/.agent-src/rules/git-history-discipline.md +13 -1
  170. package/.agent-src/rules/guidelines.md +12 -0
  171. package/.agent-src/rules/improve-before-implement.md +13 -1
  172. package/.agent-src/rules/invite-challenge.md +13 -1
  173. package/.agent-src/rules/language-and-tone.md +12 -0
  174. package/.agent-src/rules/laravel-routing.md +13 -1
  175. package/.agent-src/rules/laravel-translations.md +13 -1
  176. package/.agent-src/rules/low-impact-corpus-privacy-floor.md +17 -5
  177. package/.agent-src/rules/markdown-safe-codeblocks.md +13 -1
  178. package/.agent-src/rules/media-governance-routing.md +27 -15
  179. package/.agent-src/rules/minimal-safe-diff.md +13 -1
  180. package/.agent-src/rules/missing-tool-handling.md +13 -1
  181. package/.agent-src/rules/model-recommendation.md +13 -1
  182. package/.agent-src/rules/no-attribution-footers.md +13 -1
  183. package/.agent-src/rules/no-cheap-questions.md +12 -0
  184. package/.agent-src/rules/no-roadmap-references.md +28 -16
  185. package/.agent-src/rules/non-destructive-by-default.md +12 -0
  186. package/.agent-src/rules/onboarding-gate.md +19 -6
  187. package/.agent-src/rules/package-ci-checks.md +12 -0
  188. package/.agent-src/rules/persona-governance.md +13 -1
  189. package/.agent-src/rules/php-coding.md +13 -1
  190. package/.agent-src/rules/preservation-guard.md +13 -1
  191. package/.agent-src/rules/provider-lifecycle-discipline.md +14 -2
  192. package/.agent-src/rules/reviewer-awareness.md +13 -1
  193. package/.agent-src/rules/roadmap-ci-steps-policy.md +13 -1
  194. package/.agent-src/rules/roadmap-progress-sync.md +18 -1
  195. package/.agent-src/rules/role-mode-adherence.md +13 -1
  196. package/.agent-src/rules/rule-type-governance.md +13 -1
  197. package/.agent-src/rules/runtime-safety.md +13 -1
  198. package/.agent-src/rules/scope-control.md +12 -0
  199. package/.agent-src/rules/security-sensitive-stop.md +13 -1
  200. package/.agent-src/rules/size-enforcement.md +12 -0
  201. package/.agent-src/rules/skill-improvement-trigger.md +13 -1
  202. package/.agent-src/rules/skill-quality.md +13 -1
  203. package/.agent-src/rules/slash-command-routing-policy.md +13 -1
  204. package/.agent-src/rules/symfony-routing.md +13 -1
  205. package/.agent-src/rules/think-before-action.md +13 -1
  206. package/.agent-src/rules/token-efficiency.md +13 -1
  207. package/.agent-src/rules/token-optimizer-maintenance.md +12 -0
  208. package/.agent-src/rules/tool-safety.md +13 -1
  209. package/.agent-src/rules/ui-audit-gate.md +13 -1
  210. package/.agent-src/rules/upstream-proposal.md +13 -1
  211. package/.agent-src/rules/user-interaction.md +13 -1
  212. package/.agent-src/rules/user-interrupt-priority.md +12 -0
  213. package/.agent-src/rules/verify-before-complete.md +12 -0
  214. package/.agent-src/skills/accessibility-auditor/SKILL.md +12 -0
  215. package/.agent-src/skills/activation-design/SKILL.md +12 -0
  216. package/.agent-src/skills/adr-create/SKILL.md +12 -0
  217. package/.agent-src/skills/adversarial-review/SKILL.md +12 -0
  218. package/.agent-src/skills/agent-docs-writing/SKILL.md +16 -4
  219. package/.agent-src/skills/agents-md-thin-root/SKILL.md +14 -2
  220. package/.agent-src/skills/ai-council/SKILL.md +28 -15
  221. package/.agent-src/skills/analysis-autonomous-mode/SKILL.md +12 -0
  222. package/.agent-src/skills/analysis-skill-router/SKILL.md +12 -0
  223. package/.agent-src/skills/api-design/SKILL.md +13 -3
  224. package/.agent-src/skills/api-endpoint/SKILL.md +12 -0
  225. package/.agent-src/skills/api-testing/SKILL.md +12 -0
  226. package/.agent-src/skills/architecture-review-lens/SKILL.md +12 -0
  227. package/.agent-src/skills/artisan-commands/SKILL.md +12 -0
  228. package/.agent-src/skills/async-python-patterns/SKILL.md +13 -1
  229. package/.agent-src/skills/authz-review/SKILL.md +12 -2
  230. package/.agent-src/skills/aws-infrastructure/SKILL.md +12 -0
  231. package/.agent-src/skills/blade-ui/SKILL.md +12 -0
  232. package/.agent-src/skills/blast-radius-analyzer/SKILL.md +12 -0
  233. package/.agent-src/skills/bug-analyzer/SKILL.md +14 -2
  234. package/.agent-src/skills/build-buy-partner/SKILL.md +12 -0
  235. package/.agent-src/skills/canvas-design/SKILL.md +12 -0
  236. package/.agent-src/skills/character-consistency/SKILL.md +23 -11
  237. package/.agent-src/skills/check-refs/SKILL.md +12 -0
  238. package/.agent-src/skills/churn-prevention/SKILL.md +12 -0
  239. package/.agent-src/skills/code-refactoring/SKILL.md +16 -4
  240. package/.agent-src/skills/code-review/SKILL.md +12 -0
  241. package/.agent-src/skills/command-routing/SKILL.md +12 -0
  242. package/.agent-src/skills/command-writing/SKILL.md +14 -2
  243. package/.agent-src/skills/comp-banding/SKILL.md +12 -0
  244. package/.agent-src/skills/competitive-moat-analysis/SKILL.md +12 -2
  245. package/.agent-src/skills/competitive-positioning/SKILL.md +12 -2
  246. package/.agent-src/skills/composer-packages/SKILL.md +12 -0
  247. package/.agent-src/skills/compress-memory/SKILL.md +12 -0
  248. package/.agent-src/skills/content-funnel-design/SKILL.md +12 -2
  249. package/.agent-src/skills/context-authoring/SKILL.md +18 -6
  250. package/.agent-src/skills/context-document/SKILL.md +17 -5
  251. package/.agent-src/skills/contracts-cognition/SKILL.md +12 -2
  252. package/.agent-src/skills/conventional-commits-writing/SKILL.md +12 -0
  253. package/.agent-src/skills/copilot-agents-optimization/SKILL.md +13 -1
  254. package/.agent-src/skills/copilot-config/SKILL.md +12 -0
  255. package/.agent-src/skills/customer-research/SKILL.md +12 -0
  256. package/.agent-src/skills/dashboard-design/SKILL.md +12 -0
  257. package/.agent-src/skills/data-flow-mapper/SKILL.md +12 -0
  258. package/.agent-src/skills/data-handling-judgment/SKILL.md +12 -2
  259. package/.agent-src/skills/database/SKILL.md +14 -2
  260. package/.agent-src/skills/dcf-modeling/SKILL.md +12 -2
  261. package/.agent-src/skills/deal-qualification-meddic/SKILL.md +12 -2
  262. package/.agent-src/skills/decision-record/SKILL.md +12 -0
  263. package/.agent-src/skills/deep-reading-analyst/SKILL.md +12 -0
  264. package/.agent-src/skills/defense-in-depth/SKILL.md +13 -1
  265. package/.agent-src/skills/dependency-upgrade/SKILL.md +12 -0
  266. package/.agent-src/skills/description-assist/SKILL.md +12 -0
  267. package/.agent-src/skills/design-review/SKILL.md +12 -0
  268. package/.agent-src/skills/devcontainer/SKILL.md +12 -0
  269. package/.agent-src/skills/developer-like-execution/SKILL.md +12 -0
  270. package/.agent-src/skills/discovery-interview/SKILL.md +12 -2
  271. package/.agent-src/skills/doc-coauthoring/SKILL.md +12 -0
  272. package/.agent-src/skills/docker/SKILL.md +12 -0
  273. package/.agent-src/skills/editorial-calendar/SKILL.md +12 -2
  274. package/.agent-src/skills/eloquent/SKILL.md +12 -0
  275. package/.agent-src/skills/eloquent/evals/triggers.json +1 -1
  276. package/.agent-src/skills/error-handling-patterns/SKILL.md +13 -1
  277. package/.agent-src/skills/estimate-ticket/SKILL.md +12 -0
  278. package/.agent-src/skills/existing-ui-audit/SKILL.md +12 -0
  279. package/.agent-src/skills/expansion-playbook/SKILL.md +12 -0
  280. package/.agent-src/skills/fe-design/SKILL.md +12 -0
  281. package/.agent-src/skills/feature-planning/SKILL.md +12 -0
  282. package/.agent-src/skills/file-editor/SKILL.md +12 -0
  283. package/.agent-src/skills/finishing-a-development-branch/SKILL.md +12 -0
  284. package/.agent-src/skills/flux/SKILL.md +12 -0
  285. package/.agent-src/skills/forecast-accuracy/SKILL.md +12 -2
  286. package/.agent-src/skills/forecasting/SKILL.md +12 -2
  287. package/.agent-src/skills/form-handler/SKILL.md +12 -0
  288. package/.agent-src/skills/fundraising-narrative/SKILL.md +12 -2
  289. package/.agent-src/skills/funnel-analysis/SKILL.md +12 -0
  290. package/.agent-src/skills/git-workflow/SKILL.md +12 -0
  291. package/.agent-src/skills/github-ci/SKILL.md +12 -0
  292. package/.agent-src/skills/grafana/SKILL.md +12 -0
  293. package/.agent-src/skills/gtm-launch/SKILL.md +12 -2
  294. package/.agent-src/skills/guideline-writing/SKILL.md +12 -0
  295. package/.agent-src/skills/hiring-loop-design/SKILL.md +12 -0
  296. package/.agent-src/skills/incident-commander/SKILL.md +12 -2
  297. package/.agent-src/skills/jira-integration/SKILL.md +12 -0
  298. package/.agent-src/skills/jobs-events/SKILL.md +12 -0
  299. package/.agent-src/skills/judge-bug-hunter/SKILL.md +12 -0
  300. package/.agent-src/skills/judge-code-quality/SKILL.md +12 -0
  301. package/.agent-src/skills/judge-security-auditor/SKILL.md +12 -0
  302. package/.agent-src/skills/judge-test-coverage/SKILL.md +12 -0
  303. package/.agent-src/skills/laravel/SKILL.md +12 -0
  304. package/.agent-src/skills/laravel-api-endpoint/SKILL.md +15 -3
  305. package/.agent-src/skills/laravel-dto/SKILL.md +14 -2
  306. package/.agent-src/skills/laravel-horizon/SKILL.md +12 -0
  307. package/.agent-src/skills/laravel-mail/SKILL.md +12 -0
  308. package/.agent-src/skills/laravel-middleware/SKILL.md +12 -0
  309. package/.agent-src/skills/laravel-migration/SKILL.md +12 -0
  310. package/.agent-src/skills/laravel-notifications/SKILL.md +12 -0
  311. package/.agent-src/skills/laravel-pennant/SKILL.md +12 -0
  312. package/.agent-src/skills/laravel-pulse/SKILL.md +12 -0
  313. package/.agent-src/skills/laravel-reverb/SKILL.md +12 -0
  314. package/.agent-src/skills/laravel-scheduling/SKILL.md +12 -0
  315. package/.agent-src/skills/laravel-validation/SKILL.md +12 -0
  316. package/.agent-src/skills/laravel-websocket/SKILL.md +12 -0
  317. package/.agent-src/skills/launch-readiness/SKILL.md +12 -2
  318. package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +15 -3
  319. package/.agent-src/skills/lint-skills/SKILL.md +12 -0
  320. package/.agent-src/skills/livewire/SKILL.md +12 -0
  321. package/.agent-src/skills/livewire-architect/SKILL.md +12 -0
  322. package/.agent-src/skills/logging-monitoring/SKILL.md +12 -0
  323. package/.agent-src/skills/market-entry-analysis/SKILL.md +12 -0
  324. package/.agent-src/skills/markitdown/SKILL.md +14 -2
  325. package/.agent-src/skills/mcp/SKILL.md +12 -0
  326. package/.agent-src/skills/mcp-builder/SKILL.md +14 -2
  327. package/.agent-src/skills/md-language-check/SKILL.md +13 -1
  328. package/.agent-src/skills/memory-consolidation/SKILL.md +12 -0
  329. package/.agent-src/skills/merge-conflicts/SKILL.md +12 -0
  330. package/.agent-src/skills/messaging-architecture/SKILL.md +12 -2
  331. package/.agent-src/skills/migration-architect/SKILL.md +12 -0
  332. package/.agent-src/skills/mobile-e2e-strategy/SKILL.md +12 -0
  333. package/.agent-src/skills/module-management/SKILL.md +12 -0
  334. package/.agent-src/skills/motion-choreographer/SKILL.md +16 -4
  335. package/.agent-src/skills/multi-tenancy/SKILL.md +14 -2
  336. package/.agent-src/skills/nextjs-patterns/SKILL.md +12 -0
  337. package/.agent-src/skills/okr-tree-modeling/SKILL.md +12 -2
  338. package/.agent-src/skills/onboarding-design/SKILL.md +12 -0
  339. package/.agent-src/skills/onboarding-program/SKILL.md +12 -0
  340. package/.agent-src/skills/one-on-one-cadence/SKILL.md +12 -0
  341. package/.agent-src/skills/openapi/SKILL.md +13 -1
  342. package/.agent-src/skills/org-design/SKILL.md +12 -0
  343. package/.agent-src/skills/override-management/SKILL.md +12 -0
  344. package/.agent-src/skills/perf-feedback-craft/SKILL.md +12 -0
  345. package/.agent-src/skills/performance/SKILL.md +12 -0
  346. package/.agent-src/skills/performance-analysis/SKILL.md +12 -0
  347. package/.agent-src/skills/persona-writing/SKILL.md +12 -0
  348. package/.agent-src/skills/pest-testing/SKILL.md +12 -0
  349. package/.agent-src/skills/php-coder/SKILL.md +12 -0
  350. package/.agent-src/skills/php-debugging/SKILL.md +12 -0
  351. package/.agent-src/skills/php-service/SKILL.md +12 -0
  352. package/.agent-src/skills/pipeline-strategy/SKILL.md +12 -2
  353. package/.agent-src/skills/pixar-storyteller/SKILL.md +17 -5
  354. package/.agent-src/skills/playwright-architect/SKILL.md +12 -2
  355. package/.agent-src/skills/playwright-testing/SKILL.md +12 -0
  356. package/.agent-src/skills/po-discovery/SKILL.md +12 -0
  357. package/.agent-src/skills/positioning-strategy/SKILL.md +12 -0
  358. package/.agent-src/skills/privacy-review/SKILL.md +12 -2
  359. package/.agent-src/skills/project-analysis-core/SKILL.md +12 -0
  360. package/.agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +12 -0
  361. package/.agent-src/skills/project-analysis-laravel/SKILL.md +12 -0
  362. package/.agent-src/skills/project-analysis-nextjs/SKILL.md +12 -0
  363. package/.agent-src/skills/project-analysis-node-express/SKILL.md +12 -0
  364. package/.agent-src/skills/project-analysis-react/SKILL.md +12 -0
  365. package/.agent-src/skills/project-analysis-symfony/SKILL.md +12 -0
  366. package/.agent-src/skills/project-analysis-zend-laminas/SKILL.md +12 -0
  367. package/.agent-src/skills/project-analyzer/SKILL.md +30 -18
  368. package/.agent-src/skills/project-docs/SKILL.md +25 -13
  369. package/.agent-src/skills/prompt-engineering-patterns/SKILL.md +13 -1
  370. package/.agent-src/skills/prompt-optimizer/SKILL.md +13 -1
  371. package/.agent-src/skills/quality-tools/SKILL.md +12 -2
  372. package/.agent-src/skills/react-native-setup/SKILL.md +12 -0
  373. package/.agent-src/skills/react-shadcn-ui/SKILL.md +12 -0
  374. package/.agent-src/skills/readme-reviewer/SKILL.md +12 -0
  375. package/.agent-src/skills/readme-writing/SKILL.md +12 -0
  376. package/.agent-src/skills/readme-writing-package/SKILL.md +12 -0
  377. package/.agent-src/skills/receiving-code-review/SKILL.md +12 -0
  378. package/.agent-src/skills/refine-prompt/SKILL.md +13 -1
  379. package/.agent-src/skills/refine-ticket/SKILL.md +14 -2
  380. package/.agent-src/skills/refine-ticket/detection-map.yml +2 -2
  381. package/.agent-src/skills/release-comms/SKILL.md +12 -2
  382. package/.agent-src/skills/repomix-packer/SKILL.md +13 -1
  383. package/.agent-src/skills/requesting-code-review/SKILL.md +12 -0
  384. package/.agent-src/skills/retention-loops/SKILL.md +12 -0
  385. package/.agent-src/skills/review-routing/SKILL.md +12 -0
  386. package/.agent-src/skills/rice-prioritization/SKILL.md +12 -0
  387. package/.agent-src/skills/risk-officer/SKILL.md +12 -0
  388. package/.agent-src/skills/roadmap-management/SKILL.md +12 -0
  389. package/.agent-src/skills/roadmap-writing/SKILL.md +12 -0
  390. package/.agent-src/skills/rtk-output-filtering/SKILL.md +12 -0
  391. package/.agent-src/skills/rule-refactor/SKILL.md +15 -3
  392. package/.agent-src/skills/rule-writing/SKILL.md +13 -1
  393. package/.agent-src/skills/runway-cognition/SKILL.md +12 -2
  394. package/.agent-src/skills/scenario-modeling/SKILL.md +12 -2
  395. package/.agent-src/skills/scene-expander/SKILL.md +18 -6
  396. package/.agent-src/skills/script-writing/SKILL.md +13 -1
  397. package/.agent-src/skills/secrets-management/SKILL.md +13 -3
  398. package/.agent-src/skills/security/SKILL.md +12 -0
  399. package/.agent-src/skills/security-audit/SKILL.md +12 -0
  400. package/.agent-src/skills/sentry-integration/SKILL.md +12 -0
  401. package/.agent-src/skills/sequential-thinking/SKILL.md +12 -0
  402. package/.agent-src/skills/skill-improvement-pipeline/SKILL.md +12 -0
  403. package/.agent-src/skills/skill-management/SKILL.md +12 -0
  404. package/.agent-src/skills/skill-reviewer/SKILL.md +12 -0
  405. package/.agent-src/skills/skill-writing/SKILL.md +12 -0
  406. package/.agent-src/skills/sql-writing/SKILL.md +12 -0
  407. package/.agent-src/skills/stakeholder-tradeoff/SKILL.md +12 -0
  408. package/.agent-src/skills/subagent-orchestration/SKILL.md +13 -1
  409. package/.agent-src/skills/symfony-workflow/SKILL.md +12 -0
  410. package/.agent-src/skills/systematic-debugging/SKILL.md +12 -0
  411. package/.agent-src/skills/tailwind-engineer/SKILL.md +12 -0
  412. package/.agent-src/skills/tech-debt-tracker/SKILL.md +12 -2
  413. package/.agent-src/skills/technical-specification/SKILL.md +12 -0
  414. package/.agent-src/skills/terraform/SKILL.md +12 -0
  415. package/.agent-src/skills/terragrunt/SKILL.md +12 -0
  416. package/.agent-src/skills/test-driven-development/SKILL.md +12 -0
  417. package/.agent-src/skills/test-performance/SKILL.md +13 -1
  418. package/.agent-src/skills/testing-anti-patterns/SKILL.md +13 -1
  419. package/.agent-src/skills/threat-modeling/SKILL.md +12 -0
  420. package/.agent-src/skills/throughput-vs-morale-tradeoff/SKILL.md +12 -0
  421. package/.agent-src/skills/token-optimizer/SKILL.md +12 -0
  422. package/.agent-src/skills/traefik/SKILL.md +12 -0
  423. package/.agent-src/skills/ui-component-architect/SKILL.md +12 -0
  424. package/.agent-src/skills/unit-economics-modeling/SKILL.md +12 -2
  425. package/.agent-src/skills/universal-project-analysis/SKILL.md +12 -0
  426. package/.agent-src/skills/upstream-contribute/SKILL.md +12 -0
  427. package/.agent-src/skills/using-git-worktrees/SKILL.md +12 -0
  428. package/.agent-src/skills/validate-feature-fit/SKILL.md +12 -0
  429. package/.agent-src/skills/verify-completion-evidence/SKILL.md +12 -0
  430. package/.agent-src/skills/video-director/SKILL.md +18 -6
  431. package/.agent-src/skills/vision-articulation/SKILL.md +12 -0
  432. package/.agent-src/skills/voc-extract/SKILL.md +12 -2
  433. package/.agent-src/skills/voice-and-tone-design/SKILL.md +12 -2
  434. package/.agent-src/templates/agent-settings.md +5 -5
  435. package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  436. package/.agent-src/templates/agents/memory/ownership.example.yml +1 -1
  437. package/.agent-src/templates/agents/proposal.example.md +12 -0
  438. package/.agent-src/templates/command.md +1 -1
  439. package/.agent-src/templates/contexts/auth-model.md +2 -2
  440. package/.agent-src/templates/contexts/data-sensitivity.md +3 -3
  441. package/.agent-src/templates/contexts/deployment-order.md +2 -2
  442. package/.agent-src/templates/contexts/observability.md +3 -3
  443. package/.agent-src/templates/contexts/tenant-boundaries.md +3 -3
  444. package/.agent-src/templates/contexts.md +1 -1
  445. package/.agent-src/templates/rule.md +1 -1
  446. package/.agent-src/templates/scripts/work_engine/_lib/agent_settings.py +3 -3
  447. package/.agent-src/templates/scripts/work_engine/cli.py +6 -6
  448. package/.agent-src/templates/scripts/work_engine/emitters.py +29 -4
  449. package/.agent-src/templates/scripts/work_engine/hooks/builtin/decision_trace.py +3 -3
  450. package/.agent-src/templates/scripts/work_engine/state.py +53 -0
  451. package/.agent-src/templates/skill-archive-note.md +4 -4
  452. package/.claude-plugin/marketplace.json +1 -2
  453. package/AGENTS.md +5 -4
  454. package/CHANGELOG.md +170 -90
  455. package/CONTRIBUTING.md +61 -0
  456. package/README.md +23 -20
  457. package/config/agent-settings.template.yml +11 -1
  458. package/config/discovery/packs.yml +142 -0
  459. package/config/discovery/unassigned-artefacts.yml +66 -0
  460. package/config/discovery/workspaces.yml +59 -0
  461. package/config/gitignore-block.txt +17 -20
  462. package/dist/cli/agent-config.js +199 -0
  463. package/dist/cli/agent-config.js.map +1 -0
  464. package/dist/cli/bash/runBash.js +40 -0
  465. package/dist/cli/bash/runBash.js.map +1 -0
  466. package/dist/cli/commands/doctorShell.js +91 -0
  467. package/dist/cli/commands/doctorShell.js.map +1 -0
  468. package/dist/cli/commands/packs.js +59 -0
  469. package/dist/cli/commands/packs.js.map +1 -0
  470. package/dist/cli/commands/settings.js +35 -0
  471. package/dist/cli/commands/settings.js.map +1 -0
  472. package/dist/cli/commands/uiServe.js +110 -0
  473. package/dist/cli/commands/uiServe.js.map +1 -0
  474. package/dist/cli/commands/versions.js +64 -0
  475. package/dist/cli/commands/versions.js.map +1 -0
  476. package/dist/cli/commands/workspaces.js +58 -0
  477. package/dist/cli/commands/workspaces.js.map +1 -0
  478. package/dist/cli/discovery/loadManifest.js +62 -0
  479. package/dist/cli/discovery/loadManifest.js.map +1 -0
  480. package/dist/cli/log/logger.js +41 -0
  481. package/dist/cli/log/logger.js.map +1 -0
  482. package/dist/cli/paths.js +60 -0
  483. package/dist/cli/paths.js.map +1 -0
  484. package/dist/cli/python/resolvePython.js +38 -0
  485. package/dist/cli/python/resolvePython.js.map +1 -0
  486. package/dist/cli/registry.js +75 -0
  487. package/dist/cli/registry.js.map +1 -0
  488. package/dist/discovery/discovery-manifest.json +9195 -0
  489. package/dist/discovery/discovery-manifest.json.sha256 +1 -0
  490. package/dist/discovery/discovery-manifest.summary.md +93 -0
  491. package/dist/mcp/awesome-mcp-servers.row.md +1 -0
  492. package/dist/mcp/mcp-cloudflare-catalogue.json +27 -0
  493. package/dist/mcp/registry-manifest.json +63 -0
  494. package/dist/server/app.js +117 -0
  495. package/dist/server/app.js.map +1 -0
  496. package/dist/server/io/atomicMultiWrite.js +202 -0
  497. package/dist/server/io/atomicMultiWrite.js.map +1 -0
  498. package/dist/server/io/atomicWrite.js +79 -0
  499. package/dist/server/io/atomicWrite.js.map +1 -0
  500. package/dist/server/io/substituteTemplate.js +87 -0
  501. package/dist/server/io/substituteTemplate.js.map +1 -0
  502. package/dist/server/io/yamlIO.js +140 -0
  503. package/dist/server/io/yamlIO.js.map +1 -0
  504. package/dist/server/port.js +97 -0
  505. package/dist/server/port.js.map +1 -0
  506. package/dist/server/routes/discovery.js +72 -0
  507. package/dist/server/routes/discovery.js.map +1 -0
  508. package/dist/server/routes/ping.js +49 -0
  509. package/dist/server/routes/ping.js.map +1 -0
  510. package/dist/server/routes/schema.js +41 -0
  511. package/dist/server/routes/schema.js.map +1 -0
  512. package/dist/server/routes/settings.js +155 -0
  513. package/dist/server/routes/settings.js.map +1 -0
  514. package/dist/server/routes/userMd.js +117 -0
  515. package/dist/server/routes/userMd.js.map +1 -0
  516. package/dist/server/routes/wizard.js +138 -0
  517. package/dist/server/routes/wizard.js.map +1 -0
  518. package/dist/server/schemas/settings.js +138 -0
  519. package/dist/server/schemas/settings.js.map +1 -0
  520. package/dist/server/token.js +68 -0
  521. package/dist/server/token.js.map +1 -0
  522. package/dist/server/writeRoot.js +67 -0
  523. package/dist/server/writeRoot.js.map +1 -0
  524. package/dist/server/writeRoot.test.js +73 -0
  525. package/dist/server/writeRoot.test.js.map +1 -0
  526. package/dist/shared/userMd/formAdapter.js +105 -0
  527. package/dist/shared/userMd/formAdapter.js.map +1 -0
  528. package/dist/shared/userMd/schema.js +118 -0
  529. package/dist/shared/userMd/schema.js.map +1 -0
  530. package/dist/shared/userMd/utils.js +74 -0
  531. package/dist/shared/userMd/utils.js.map +1 -0
  532. package/dist/ui/assets/index-BTRcKDlB.js +39 -0
  533. package/dist/ui/assets/index-BTRcKDlB.js.map +1 -0
  534. package/dist/ui/assets/index-Dqfhmg-d.css +1 -0
  535. package/dist/ui/index.html +14 -0
  536. package/docs/adrs/caveman/0001-default-off-until-bench.md +2 -2
  537. package/docs/adrs/cost/0001-hard-stop-hook.md +1 -1
  538. package/docs/adrs/schema/0001-json-schema-frontmatter.md +4 -4
  539. package/docs/adrs/schema/README.md +1 -1
  540. package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +2 -2
  541. package/docs/architecture/setup-vs-settings-shared-surface.md +114 -0
  542. package/docs/architecture.md +2 -1
  543. package/docs/archive/CHANGELOG-pre-2.2.0.md +7 -7
  544. package/docs/archive/CHANGELOG-pre-3.0.0.md +130 -0
  545. package/docs/catalog.md +66 -78
  546. package/docs/contracts/STABILITY.md +1 -1
  547. package/docs/contracts/adr-architectural-consensus-mechanism.md +5 -5
  548. package/docs/contracts/adr-chat-history-split.md +1 -1
  549. package/docs/contracts/adr-implement-ticket-runtime.md +1 -1
  550. package/docs/contracts/adr-install-user-type-axis.md +1 -1
  551. package/docs/contracts/adr-mcp-runtime.md +2 -2
  552. package/docs/contracts/agent-user-schema.md +11 -2
  553. package/docs/contracts/ai-council-config.md +13 -13
  554. package/docs/contracts/audit-log-v1.md +2 -2
  555. package/docs/contracts/command-clusters.md +2 -2
  556. package/docs/contracts/compression-default-kill-criterion.md +3 -3
  557. package/docs/contracts/decision-trace-v1.md +5 -5
  558. package/docs/contracts/discovery-manifest.schema.json +146 -0
  559. package/docs/contracts/explain-trace.schema.json +144 -0
  560. package/docs/contracts/file-ownership-matrix.json +117 -341
  561. package/docs/contracts/file-ownership-matrix.md +1 -1
  562. package/docs/contracts/ghostwriter-schema.md +3 -3
  563. package/docs/contracts/hook-architecture-v1.md +10 -10
  564. package/docs/contracts/kernel-membership.md +4 -4
  565. package/docs/contracts/linter-structural-model.md +3 -3
  566. package/docs/contracts/load-context-schema.md +5 -5
  567. package/docs/contracts/local-server-api.md +134 -0
  568. package/docs/contracts/low-impact-corpus-format.md +1 -1
  569. package/docs/contracts/mcp-cloud-scope.md +2 -2
  570. package/docs/contracts/mcp-discovery-phase-notice.md +1 -1
  571. package/docs/contracts/mcp-phase-1-scope.md +5 -4
  572. package/docs/contracts/mcp-registry-manifest.schema.json +129 -0
  573. package/docs/contracts/mcp-tool-stub-envelope.md +1 -1
  574. package/docs/contracts/memory-visibility-v1.md +2 -2
  575. package/docs/contracts/multi-tool-projection-fidelity.md +3 -3
  576. package/docs/contracts/namespace.md +1 -1
  577. package/docs/contracts/one-off-script-lifecycle.md +1 -1
  578. package/docs/contracts/package-self-orientation.md +1 -1
  579. package/docs/contracts/provider-lifecycle.md +2 -2
  580. package/docs/contracts/router-blending.md +1 -1
  581. package/docs/contracts/rule-classification.md +2 -2
  582. package/docs/contracts/settings-api.md +160 -0
  583. package/docs/contracts/settings-gui-agent-mode.schema.json +128 -0
  584. package/docs/contracts/tier-3-contrib-plugin.md +1 -1
  585. package/docs/contracts/universal-skills.md +1 -1
  586. package/docs/contracts/write-engine.md +1 -1
  587. package/docs/customization.md +137 -11
  588. package/docs/decisions/ADR-001-kernel-swap-deferred.md +1 -1
  589. package/docs/decisions/ADR-002-kernel-bucket-overrides.md +1 -1
  590. package/docs/decisions/ADR-004-rule-governance-pruning.md +8 -8
  591. package/docs/decisions/ADR-006-skill-tools-python-pilot.md +5 -5
  592. package/docs/decisions/ADR-007-agent-discovery-scopes.md +4 -4
  593. package/docs/decisions/ADR-008-installed-tools-manifest.md +2 -2
  594. package/docs/decisions/ADR-010-profile-pack-preset-boundary.md +2 -2
  595. package/docs/decisions/ADR-011-domain-pack-readiness.md +4 -4
  596. package/docs/decisions/ADR-012-typescript-cli-shell.md +162 -0
  597. package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +210 -0
  598. package/docs/decisions/ADR-014-gui-framework-choice.md +136 -0
  599. package/docs/decisions/ADR-rule-kernel-and-router.md +2 -2
  600. package/docs/decisions/INDEX.md +3 -0
  601. package/docs/distribution/mcp-submission-checklist.md +95 -0
  602. package/docs/distribution/topics-equivalents-decay-policy.md +51 -0
  603. package/docs/examples/agent-user.example.md +3 -1
  604. package/docs/getting-started.md +5 -4
  605. package/docs/guidelines/agent-infra/ask-when-uncertain-demos.md +1 -1
  606. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +10 -1
  607. package/docs/guidelines/agent-infra/rule-type-governance.md +2 -2
  608. package/docs/guidelines/agent-infra/tool-integration.md +1 -1
  609. package/docs/guidelines/php/api-design.md +1 -1
  610. package/docs/guidelines/prompt-templates.md +2 -2
  611. package/docs/hook-payload-capture.md +3 -3
  612. package/docs/installation.md +12 -4
  613. package/docs/migrations/commands-1.15.0.md +3 -3
  614. package/docs/parity/bench-ruflo.json +1 -1
  615. package/docs/parity/ruflo.md +3 -3
  616. package/docs/profiles.md +1 -1
  617. package/docs/quality.md +2 -2
  618. package/docs/recruits/_template.md +3 -3
  619. package/docs/setup/enterprise-and-offline.md +3 -3
  620. package/docs/setup/mcp-server-docker.md +5 -3
  621. package/docs/skills-catalog.md +62 -18
  622. package/docs/wizard.md +121 -0
  623. package/llms.txt +61 -17
  624. package/package.json +46 -3
  625. package/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
  626. package/scripts/_archive/README.md +2 -2
  627. package/scripts/_archive/_p4_migrate.py +1 -1
  628. package/scripts/_cli/cmd_doctor.py +5 -5
  629. package/scripts/_cli/cmd_explain.py +106 -2
  630. package/scripts/_cli/cmd_migrate.py +2 -2
  631. package/scripts/_cli/explain_last/__init__.py +122 -0
  632. package/scripts/_cli/explain_last/assumptions.py +59 -0
  633. package/scripts/_cli/explain_last/council.py +105 -0
  634. package/scripts/_cli/explain_last/halt.py +44 -0
  635. package/scripts/_cli/explain_last/inputs.py +125 -0
  636. package/scripts/_cli/explain_last/memory.py +94 -0
  637. package/scripts/_cli/explain_last/provider.py +52 -0
  638. package/scripts/_cli/explain_last/render.py +52 -0
  639. package/scripts/_cli/explain_last/route.py +58 -0
  640. package/scripts/_cli/explain_last/scrubber.py +105 -0
  641. package/scripts/_cli/explain_last/sections/__init__.py +35 -0
  642. package/scripts/_cli/explain_last/sections/assumptions.py +21 -0
  643. package/scripts/_cli/explain_last/sections/council.py +27 -0
  644. package/scripts/_cli/explain_last/sections/halt.py +31 -0
  645. package/scripts/_cli/explain_last/sections/header.py +24 -0
  646. package/scripts/_cli/explain_last/sections/inputs.py +27 -0
  647. package/scripts/_cli/explain_last/sections/memory.py +21 -0
  648. package/scripts/_cli/explain_last/sections/pack.py +16 -0
  649. package/scripts/_cli/explain_last/sections/provider.py +26 -0
  650. package/scripts/_cli/explain_last/sections/route.py +22 -0
  651. package/scripts/_cli/explain_last/state_loader.py +76 -0
  652. package/scripts/_dispatch.bash +954 -0
  653. package/scripts/_lib/agent_settings.py +3 -3
  654. package/scripts/_lib/agents_overlay.py +3 -3
  655. package/scripts/_phase4_bucket.py +210 -0
  656. package/scripts/agent-config +35 -943
  657. package/scripts/ai-video/adapters/higgsfield.sh +1 -1
  658. package/scripts/ai-video/adapters/sora.sh +1 -1
  659. package/scripts/ai-video/test-pipeline.sh +2 -2
  660. package/scripts/ai_council/_default_prices.py +5 -5
  661. package/scripts/ai_council/advisors.py +1 -1
  662. package/scripts/ai_council/clients.py +2 -2
  663. package/scripts/ai_council/compile_corpus.py +9 -8
  664. package/scripts/ai_council/config.py +3 -3
  665. package/scripts/ai_council/events_log.py +8 -4
  666. package/scripts/ai_council/low_impact_corpus.py +1 -1
  667. package/scripts/ai_council/low_impact_intake.py +1 -1
  668. package/scripts/ai_council/one_off_archive/2026-05/_one_off_budget_v2_audit.py +2 -2
  669. package/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_optimization.py +1 -1
  670. package/scripts/ai_council/one_off_archive/2026-05/_one_off_tier_retrofit.py +3 -3
  671. package/scripts/ai_council/pricing.py +8 -7
  672. package/scripts/ai_council/probation_gate.py +1 -1
  673. package/scripts/ai_council/redact_low_impact_entry.py +1 -1
  674. package/scripts/ai_council/session.py +13 -13
  675. package/scripts/ai_council/shadow_dispatch.py +2 -2
  676. package/scripts/annotate_discovery.py +149 -0
  677. package/scripts/audit_adr_coverage.py +1 -1
  678. package/scripts/audit_auto_rules.py +2 -2
  679. package/scripts/audit_cloud_compatibility.py +1 -1
  680. package/scripts/audit_command_surface.py +2 -2
  681. package/scripts/audit_likelihood.py +4 -4
  682. package/scripts/audit_overlap.py +3 -3
  683. package/scripts/audit_user_type_axis.py +1 -1
  684. package/scripts/build_discovery_manifest.py +302 -0
  685. package/scripts/build_mcp_registry_manifest.py +181 -0
  686. package/scripts/build_rule_trigger_matrix.py +2 -2
  687. package/scripts/capture_showcase_session.py +1 -1
  688. package/scripts/chat_history.py +5 -5
  689. package/scripts/check_always_budget.py +7 -2
  690. package/scripts/check_council_layout.py +26 -20
  691. package/scripts/check_council_references.py +10 -10
  692. package/scripts/check_discovery_determinism.py +70 -0
  693. package/scripts/check_kernel_rule_bundle.py +2 -2
  694. package/scripts/check_no_roadmap_refs.py +2 -2
  695. package/scripts/check_one_off_location.py +1 -1
  696. package/scripts/check_public_links.py +2 -2
  697. package/scripts/check_references.py +14 -21
  698. package/scripts/check_release_includes_discovery.py +61 -0
  699. package/scripts/ci_summary.py +2 -2
  700. package/scripts/ci_time_ratio.py +1 -1
  701. package/scripts/command_suggester/__init__.py +1 -1
  702. package/scripts/context_hygiene_hook.py +2 -2
  703. package/scripts/council_cli.py +22 -22
  704. package/scripts/council_prune.py +3 -3
  705. package/scripts/extract_audit_patterns.py +2 -2
  706. package/scripts/gen_discovery_baseline.py +127 -0
  707. package/scripts/generate_ownership_matrix.py +1 -1
  708. package/scripts/hook_manifest.yaml +5 -5
  709. package/scripts/hooks/cline-dispatcher.sh +1 -1
  710. package/scripts/hooks/cowork-dispatcher.sh +1 -1
  711. package/scripts/hooks/dispatch_hook.py +3 -3
  712. package/scripts/hooks/gemini-dispatcher.sh +1 -1
  713. package/scripts/hooks/replay_hook.py +1 -1
  714. package/scripts/hooks/state_io.py +5 -5
  715. package/scripts/hooks_doctor.py +4 -4
  716. package/scripts/install-hooks.sh +2 -2
  717. package/scripts/install.py +3 -3
  718. package/scripts/install.sh +120 -18
  719. package/scripts/inventory_frontmatter.py +1 -1
  720. package/scripts/lint_agents_layout.py +103 -0
  721. package/scripts/lint_archived_skills.py +3 -3
  722. package/scripts/lint_artefact_frontmatter.py +180 -0
  723. package/scripts/lint_discovery_manifest.py +136 -0
  724. package/scripts/lint_discovery_vocabulary.py +148 -0
  725. package/scripts/lint_explain_trace.py +80 -0
  726. package/scripts/lint_framework_leakage_allowlist.json +63 -62
  727. package/scripts/lint_ghostwriter_source.py +1 -1
  728. package/scripts/lint_load_context.py +3 -3
  729. package/scripts/lint_mcp_registry_manifest.py +69 -0
  730. package/scripts/lint_media_policy_linkage.py +6 -6
  731. package/scripts/lint_positioning.py +143 -0
  732. package/scripts/lint_rule_tiers.py +2 -2
  733. package/scripts/lint_skill_tools.py +1 -1
  734. package/scripts/lint_topics_yaml.py +89 -0
  735. package/scripts/mcp_server/consumer_tool_catalog.json +3 -3
  736. package/scripts/mcp_server/telemetry.py +2 -2
  737. package/scripts/mcp_server/tools.py +27 -11
  738. package/scripts/mcp_telemetry_health.py +2 -2
  739. package/scripts/mcp_telemetry_store.py +1 -1
  740. package/scripts/measure_augment_budget.py +3 -3
  741. package/scripts/measure_density.py +2 -2
  742. package/scripts/measure_frugality_savings.py +3 -3
  743. package/scripts/measure_roadmap_trajectory.py +1 -1
  744. package/scripts/measure_rule_budget.py +3 -3
  745. package/scripts/memory_report.py +1 -1
  746. package/scripts/migrate_command_suggestions.py +3 -3
  747. package/scripts/minimal_safe_diff_hook.py +1 -1
  748. package/scripts/onboarding_gate_hook.py +4 -4
  749. package/scripts/prepack-check.mjs +62 -0
  750. package/scripts/probe_projection_fidelity.py +2 -2
  751. package/scripts/refine_ticket_detect.py +1 -1
  752. package/scripts/schemas/command.schema.json +41 -1
  753. package/scripts/schemas/persona.schema.json +1 -1
  754. package/scripts/schemas/rule.schema.json +44 -4
  755. package/scripts/schemas/skill.schema.json +41 -1
  756. package/scripts/score_skill_selection.py +1 -1
  757. package/scripts/skill_collision_clusters.py +1 -1
  758. package/scripts/skill_linter.py +2 -2
  759. package/scripts/skill_overlap.py +1 -1
  760. package/scripts/skill_tools/run_block_d_eval.py +1 -1
  761. package/scripts/skill_usage_collect.py +3 -3
  762. package/scripts/skill_usage_report.py +3 -3
  763. package/scripts/smoke_quickstart.py +1 -1
  764. package/scripts/spotcheck_thin_root.py +1 -1
  765. package/scripts/sync_github_metadata.py +147 -0
  766. package/scripts/sync_gitignore.py +15 -5
  767. package/scripts/update_prices.py +4 -3
  768. package/scripts/verify_before_complete_hook.py +1 -1
  769. package/scripts/verify_roadmap_closure.py +1 -1
  770. package/templates/agent-user.md +35 -0
  771. package/.agent-src/commands/onboard.md +0 -467
@@ -0,0 +1 @@
1
+ 8eb370ada0d403b9d94a186773b0766c9f7dae9cf144278e5392a3c3e07893fb discovery-manifest.json
@@ -0,0 +1,93 @@
1
+ # Discovery Manifest — Summary
2
+
3
+ - Generated: `2026-05-21T07:20:57Z`
4
+ - Scanner: `9dad9aa8b222`
5
+ - Artefacts: **419**
6
+ - Unassigned: **0**
7
+
8
+ ## `engineering` — Engineering
9
+
10
+ > Code, tests, CI, reviews, architecture.
11
+
12
+ | Pack | Artefacts |
13
+ |---|---|
14
+ | `engineering-base` — Engineering Base | 83 |
15
+ | `php` — PHP | 6 |
16
+ | `laravel` — Laravel | 25 |
17
+ | `symfony` — Symfony | 3 |
18
+ | `javascript` — JavaScript | 0 |
19
+ | `typescript` — TypeScript | 1 |
20
+ | `react` — React | 3 |
21
+ | `nextjs` — Next.js | 2 |
22
+ | `python` — Python | 1 |
23
+
24
+ ## `product` — Product
25
+
26
+ > Discovery, roadmaps, prioritisation, AC tightening.
27
+
28
+ | Pack | Artefacts |
29
+ |---|---|
30
+ | `product-basic` — Product Basic | 11 |
31
+ | `product-discovery` — Product Discovery | 4 |
32
+
33
+ ## `finance` — Finance / CFO
34
+
35
+ > Cashflow, forecasting, DCF, board reporting.
36
+
37
+ | Pack | Artefacts |
38
+ |---|---|
39
+ | `finance-basic` — Finance Basic | 3 |
40
+ | `finance-advanced` — Finance Advanced | 2 |
41
+
42
+ ## `founder` — Founder
43
+
44
+ > Strategy, fundraising, vision, board narrative.
45
+
46
+ | Pack | Artefacts |
47
+ |---|---|
48
+ | `founder-strategy` — Founder — Strategy | 7 |
49
+ | `finance-basic` — Finance Basic | 3 |
50
+ | `gtm-marketing` — GTM — Marketing | 8 |
51
+
52
+ ## `gtm` — Go-to-Market
53
+
54
+ > Sales pipeline, marketing, positioning, launch.
55
+
56
+ | Pack | Artefacts |
57
+ |---|---|
58
+ | `gtm-sales` — GTM — Sales | 4 |
59
+ | `gtm-marketing` — GTM — Marketing | 8 |
60
+
61
+ ## `ops` — Operations
62
+
63
+ > Hiring, comp, perf, org design, runbooks.
64
+
65
+ | Pack | Artefacts |
66
+ |---|---|
67
+ | `ops-people` — Operations — People | 8 |
68
+
69
+ ## `small-business` — Small Business
70
+
71
+ > Self-employed / SMB-shaped owner workflows.
72
+
73
+ | Pack | Artefacts |
74
+ |---|---|
75
+ | `small-business` — Small Business | 0 |
76
+ | `ai-video` — AI Video | 6 |
77
+
78
+ ## `construction` — Construction
79
+
80
+ > Trade-business workflows (planning, quotes).
81
+
82
+ | Pack | Artefacts |
83
+ |---|---|
84
+ | `construction` — Construction | 0 |
85
+
86
+ ## `agent-config-maintainer` — Maintainer
87
+
88
+ > Skills/rules/commands that maintain this package.
89
+
90
+ | Pack | Artefacts |
91
+ |---|---|
92
+ | `meta` — Meta | 242 |
93
+
@@ -0,0 +1 @@
1
+ | [@event4u/agent-config](https://github.com/event4u-app/agent-config#readme) | Universal AI Agent OS — audited skills, governance rules, commands, and templates for AI coding tools (Claude Code, Cursor, Windsurf, Copilot). | 20 tools (stdio, worker) | `pip install agent-config[mcp] && ./agent-config mcp:run` |
@@ -0,0 +1,27 @@
1
+ {
2
+ "description": "Universal AI Agent OS \u2014 audited skills, governance rules, commands, and templates for AI coding tools (Claude Code, Cursor, Windsurf, Copilot).",
3
+ "homepage": "https://github.com/event4u-app/agent-config#readme",
4
+ "install_hint_stdio": "pip install agent-config[mcp] && ./agent-config mcp:run",
5
+ "name": "agent-config-mcp",
6
+ "repository": "https://github.com/event4u-app/agent-config",
7
+ "tools_count": 20,
8
+ "topics": [
9
+ "agent-governance",
10
+ "ai-agent",
11
+ "ai-video",
12
+ "claude-code",
13
+ "copilot",
14
+ "cursor",
15
+ "llm",
16
+ "mcp",
17
+ "prompt-engineering",
18
+ "python",
19
+ "skills",
20
+ "typescript",
21
+ "windsurf"
22
+ ],
23
+ "transports": [
24
+ "stdio",
25
+ "worker"
26
+ ]
27
+ }
@@ -0,0 +1,63 @@
1
+ {
2
+ "discovery": {
3
+ "artefact_count": 419,
4
+ "scanner_version": "9dad9aa8b222"
5
+ },
6
+ "generated_at": "2026-05-21",
7
+ "package": {
8
+ "description": "Universal AI Agent OS \u2014 audited skills, governance rules, commands, and templates for AI coding tools (Claude Code, Cursor, Windsurf, Copilot).",
9
+ "homepage": "https://github.com/event4u-app/agent-config#readme",
10
+ "name": "@event4u/agent-config",
11
+ "repository": "https://github.com/event4u-app/agent-config",
12
+ "version": "3.0.0"
13
+ },
14
+ "registries": [
15
+ {
16
+ "id": "awesome-mcp-servers",
17
+ "label": "punkpeye/awesome-mcp-servers",
18
+ "last_verified": null,
19
+ "listing_format": "markdown-row",
20
+ "pr_url": null,
21
+ "rendered_payload": "dist/mcp/awesome-mcp-servers.row.md",
22
+ "status": "pending",
23
+ "submission_url": "https://github.com/punkpeye/awesome-mcp-servers",
24
+ "submitted_at": null
25
+ },
26
+ {
27
+ "id": "mcp-cloudflare-catalogue",
28
+ "label": "Cloudflare MCP catalogue",
29
+ "last_verified": null,
30
+ "listing_format": "json-entry",
31
+ "pr_url": null,
32
+ "rendered_payload": "dist/mcp/mcp-cloudflare-catalogue.json",
33
+ "status": "pending",
34
+ "submission_url": "https://github.com/cloudflare/mcp-server-cloudflare",
35
+ "submitted_at": null
36
+ }
37
+ ],
38
+ "server": {
39
+ "install_hint_stdio": "pip install agent-config[mcp] && ./agent-config mcp:run",
40
+ "name": "agent-config-mcp",
41
+ "tools_count": 20,
42
+ "transports": [
43
+ "stdio",
44
+ "worker"
45
+ ]
46
+ },
47
+ "topics": [
48
+ "agent-governance",
49
+ "ai-agent",
50
+ "ai-video",
51
+ "claude-code",
52
+ "copilot",
53
+ "cursor",
54
+ "llm",
55
+ "mcp",
56
+ "prompt-engineering",
57
+ "python",
58
+ "skills",
59
+ "typescript",
60
+ "windsurf"
61
+ ],
62
+ "version": 1
63
+ }
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Fastify app factory for the local server.
3
+ *
4
+ * Security stance — council security-engineer mandate:
5
+ *
6
+ * 1. Bind to 127.0.0.1 only (enforced by the caller in
7
+ * `src/cli/commands/uiServe.ts`).
8
+ * 2. `Host` header must be `127.0.0.1:<port>` or
9
+ * `localhost:<port>`. Rejected with HTTP 421 otherwise.
10
+ * 3. `Origin` header (when present) must be the same origin as
11
+ * the server. Rejected with HTTP 403 otherwise.
12
+ * 4. `/api/*` routes require `Authorization: Bearer <token>` or
13
+ * a `token=<token>` query parameter. Rejected with HTTP 401
14
+ * otherwise. The token is minted per process by
15
+ * `src/server/token.ts`.
16
+ *
17
+ * Static files under `/` (the Vite UI bundle) are served without
18
+ * auth so the browser can bootstrap. The UI then includes the token
19
+ * on every API call.
20
+ */
21
+ import Fastify from 'fastify';
22
+ import fastifyStatic from '@fastify/static';
23
+ import { tokensMatch } from './token.js';
24
+ import { pingRoute } from './routes/ping.js';
25
+ import { discoveryRoute } from './routes/discovery.js';
26
+ import { schemaRoute } from './routes/schema.js';
27
+ import { settingsRoute } from './routes/settings.js';
28
+ import { userMdRoute } from './routes/userMd.js';
29
+ import { wizardRoute } from './routes/wizard.js';
30
+ import { replayPendingCommits } from './io/atomicMultiWrite.js';
31
+ import { PACKAGE_ROOT } from '../cli/paths.js';
32
+ const ALLOWED_HOSTS = (port) => new Set([`127.0.0.1:${port}`, `localhost:${port}`]);
33
+ const ALLOWED_ORIGINS = (port) => new Set([`http://127.0.0.1:${port}`, `http://localhost:${port}`]);
34
+ function extractToken(authHeader, queryToken) {
35
+ if (typeof authHeader === 'string' && authHeader.startsWith('Bearer ')) {
36
+ return authHeader.slice('Bearer '.length).trim();
37
+ }
38
+ if (typeof queryToken === 'string' && queryToken.length > 0)
39
+ return queryToken;
40
+ return null;
41
+ }
42
+ export async function createApp(opts) {
43
+ const app = Fastify({
44
+ logger: { level: opts.logLevel ?? (process.env.AGENT_CONFIG_LOG ?? 'warn') },
45
+ });
46
+ const allowedHosts = ALLOWED_HOSTS(opts.expectedPort);
47
+ const allowedOrigins = ALLOWED_ORIGINS(opts.expectedPort);
48
+ // Host-header guard (CSRF defence-in-depth — runs on every request).
49
+ app.addHook('onRequest', async (request, reply) => {
50
+ const host = request.headers.host;
51
+ if (typeof host !== 'string' || !allowedHosts.has(host)) {
52
+ await reply.code(421).send({ error: 'Misdirected Request: invalid Host header' });
53
+ return reply;
54
+ }
55
+ return undefined;
56
+ });
57
+ // Origin allow-list (browser-issued requests only — server-to-server
58
+ // skips this header).
59
+ app.addHook('onRequest', async (request, reply) => {
60
+ const origin = request.headers.origin;
61
+ if (typeof origin === 'string' && !allowedOrigins.has(origin)) {
62
+ await reply.code(403).send({ error: 'Forbidden: origin not allowed' });
63
+ return reply;
64
+ }
65
+ return undefined;
66
+ });
67
+ // Bearer-token gate for /api/*. Static UI files are NOT gated so
68
+ // the browser can bootstrap and read the token from the page URL.
69
+ app.addHook('onRequest', async (request, reply) => {
70
+ if (!request.url.startsWith('/api/'))
71
+ return undefined;
72
+ const query = request.query;
73
+ const queryToken = typeof query?.['token'] === 'string' ? query['token'] : undefined;
74
+ const provided = extractToken(request.headers.authorization, queryToken);
75
+ if (provided === null || !tokensMatch(provided, opts.token)) {
76
+ await reply.code(401).send({ error: 'Unauthorized: missing or invalid token' });
77
+ return reply;
78
+ }
79
+ return undefined;
80
+ });
81
+ await app.register(fastifyStatic, {
82
+ root: opts.uiDistDir,
83
+ prefix: '/',
84
+ decorateReply: false,
85
+ });
86
+ const packageRoot = opts.packageRoot ?? PACKAGE_ROOT;
87
+ const dryRun = opts.dryRun === true;
88
+ const writeRoot = opts.writeRoot ?? opts.projectRoot;
89
+ if (writeRoot === undefined) {
90
+ throw new Error('createApp: writeRoot (or projectRoot) is required');
91
+ }
92
+ const legacyReadRoot = opts.legacyReadRoot ?? null;
93
+ const mode = opts.mode ?? 'global';
94
+ await app.register(pingRoute({ writeRoot, mode, dryRun }));
95
+ await app.register(discoveryRoute(opts.discoveryManifestPath ? { manifestPath: opts.discoveryManifestPath } : {}));
96
+ await app.register(schemaRoute());
97
+ await app.register(settingsRoute({ writeRoot, legacyReadRoot, dryRun }));
98
+ await app.register(userMdRoute({ writeRoot, legacyReadRoot, dryRun }));
99
+ await app.register(wizardRoute({ writeRoot, packageRoot, dryRun }));
100
+ // Boot-time 2PC replay — finishes or aborts any wizard commit that
101
+ // crashed mid-rename. Idempotent; failures are logged and ignored so
102
+ // a corrupt marker never blocks server start. Skipped in dry-run: a
103
+ // crashed real run must not be auto-finished by a maintainer preview.
104
+ if (opts.skipReplay !== true && !dryRun) {
105
+ try {
106
+ const result = await replayPendingCommits(writeRoot);
107
+ if (result.completed.length > 0 || result.aborted.length > 0) {
108
+ app.log.warn({ completed: result.completed, aborted: result.aborted }, '2PC replay: pending wizard commits resolved');
109
+ }
110
+ }
111
+ catch (err) {
112
+ app.log.error({ err }, '2PC replay: unexpected error (ignored)');
113
+ }
114
+ }
115
+ return app;
116
+ }
117
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,202 @@
1
+ /**
2
+ * Multi-file atomic write with a 2PC intent marker.
3
+ *
4
+ * The wizard commits `.agent-settings.yml` and `.agent-user.md` in one
5
+ * gesture. A crash between the two renames would leave the project in a
6
+ * mixed state — settings new, user-md stale, or vice versa — which the
7
+ * council's HIGH-severity finding flagged as the worst case.
8
+ *
9
+ * Protocol (write phase):
10
+ * 1. Write every payload to its `<target>.tmp-<txnId>` sibling, fsync.
11
+ * 2. Write a `state/wizard-intent-<txnId>.json` marker listing the
12
+ * `{tmp,target}` pairs. fsync the marker.
13
+ * 3. For each pair: rename tmp → target.
14
+ * 4. Unlink the marker.
15
+ *
16
+ * Crash recovery (replay on next boot, `replayPendingCommits`):
17
+ * - Marker present + every `tmp` exists → finish the renames, unlink.
18
+ * - Marker present + any `tmp` missing → assume aborted mid-prepare:
19
+ * unlink the leftover tmps and the marker (target untouched).
20
+ *
21
+ * State dir lives under `<writeRoot>/state/` — in package-sandbox mode
22
+ * `writeRoot` is `<repo>/agents/`, so the marker dir is the gitignored
23
+ * `agents/runtime/state/` already shipped by the package gitignore template. In
24
+ * global mode `writeRoot` is `~/.event4u/agent-config/` and the marker
25
+ * dir lives outside any project tree.
26
+ */
27
+ import { promises as fs } from 'node:fs';
28
+ import { randomUUID } from 'node:crypto';
29
+ import { dirname, join } from 'node:path';
30
+ import { tempPathFor } from './atomicWrite.js';
31
+ const DEFAULT_MODE = 0o600;
32
+ const STATE_SUBDIR = 'state';
33
+ function markerPath(writeRoot, txnId) {
34
+ return join(writeRoot, STATE_SUBDIR, `wizard-intent-${txnId}.json`);
35
+ }
36
+ async function fsyncFile(path) {
37
+ const handle = await fs.open(path, 'r+');
38
+ try {
39
+ await handle.sync();
40
+ }
41
+ finally {
42
+ await handle.close();
43
+ }
44
+ }
45
+ async function writeJsonFsync(path, body) {
46
+ await fs.mkdir(dirname(path), { recursive: true });
47
+ const handle = await fs.open(path, 'w', 0o600);
48
+ try {
49
+ await handle.writeFile(JSON.stringify(body, null, 2));
50
+ await handle.sync();
51
+ }
52
+ finally {
53
+ await handle.close();
54
+ }
55
+ }
56
+ /**
57
+ * Commit every payload atomically. Resolves only after the marker has
58
+ * been unlinked — meaning every rename succeeded. On error, the caller
59
+ * sees the original files untouched; replay handles any leftover tmps.
60
+ */
61
+ export async function commitMulti(payloads, opts) {
62
+ if (payloads.length === 0) {
63
+ throw new Error('commitMulti: at least one payload required');
64
+ }
65
+ const txnId = opts.txnId ?? randomUUID();
66
+ const entries = payloads.map((p) => ({
67
+ tmp: tempPathFor(p.target, txnId),
68
+ target: p.target,
69
+ mode: p.mode ?? DEFAULT_MODE,
70
+ }));
71
+ // Phase 1: write every tmp with fsync.
72
+ for (let i = 0; i < payloads.length; i++) {
73
+ const payload = payloads[i];
74
+ const entry = entries[i];
75
+ const { contents } = payload;
76
+ const { tmp, mode } = entry;
77
+ const handle = await fs.open(tmp, 'w', mode);
78
+ try {
79
+ const buf = typeof contents === 'string' ? Buffer.from(contents, 'utf8') : contents;
80
+ await handle.writeFile(buf);
81
+ await handle.sync();
82
+ }
83
+ finally {
84
+ await handle.close();
85
+ }
86
+ }
87
+ // Phase 2: write intent marker, fsync.
88
+ const marker = {
89
+ version: 1,
90
+ txnId,
91
+ createdAt: new Date().toISOString(),
92
+ entries,
93
+ };
94
+ const mPath = markerPath(opts.writeRoot, txnId);
95
+ await writeJsonFsync(mPath, marker);
96
+ // Phase 3: rename every tmp → target. A crash here is recoverable
97
+ // because the marker still points at every pending rename.
98
+ try {
99
+ for (const entry of entries) {
100
+ try {
101
+ await fs.rename(entry.tmp, entry.target);
102
+ }
103
+ catch (err) {
104
+ if (err.code === 'EPERM') {
105
+ await fs.unlink(entry.target).catch(() => undefined);
106
+ await fs.rename(entry.tmp, entry.target);
107
+ }
108
+ else {
109
+ throw err;
110
+ }
111
+ }
112
+ await fs.chmod(entry.target, entry.mode).catch(() => undefined);
113
+ }
114
+ }
115
+ catch (err) {
116
+ // Mid-commit failure: leave the marker for replay, surface the error.
117
+ throw err;
118
+ }
119
+ // Phase 4: marker no longer needed.
120
+ await fs.unlink(mPath).catch(() => undefined);
121
+ await fsyncFile(dirname(mPath)).catch(() => undefined);
122
+ return { txnId };
123
+ }
124
+ /**
125
+ * Replay pending commit-intent markers at boot. For each marker:
126
+ * - Every tmp exists → finish the renames (commit was in-flight).
127
+ * - Any tmp missing → assume aborted; unlink leftover tmps and the
128
+ * marker (target was never touched).
129
+ *
130
+ * Idempotent: safe to call on every server start. Never throws on a
131
+ * single corrupted marker — that marker is skipped and reported via
132
+ * the returned arrays so the caller can log and continue.
133
+ */
134
+ export async function replayPendingCommits(writeRoot) {
135
+ const stateDir = join(writeRoot, STATE_SUBDIR);
136
+ let names;
137
+ try {
138
+ names = await fs.readdir(stateDir);
139
+ }
140
+ catch (err) {
141
+ if (err.code === 'ENOENT')
142
+ return { completed: [], aborted: [] };
143
+ throw err;
144
+ }
145
+ const completed = [];
146
+ const aborted = [];
147
+ for (const name of names) {
148
+ if (!name.startsWith('wizard-intent-') || !name.endsWith('.json'))
149
+ continue;
150
+ const mPath = join(stateDir, name);
151
+ let marker;
152
+ try {
153
+ const raw = await fs.readFile(mPath, 'utf8');
154
+ marker = JSON.parse(raw);
155
+ if (marker.version !== 1 || !Array.isArray(marker.entries))
156
+ throw new Error('bad marker');
157
+ }
158
+ catch {
159
+ aborted.push(name);
160
+ await fs.unlink(mPath).catch(() => undefined);
161
+ continue;
162
+ }
163
+ const presence = await Promise.all(marker.entries.map(async (e) => fs
164
+ .stat(e.tmp)
165
+ .then(() => true)
166
+ .catch(() => false)));
167
+ const allTmpsPresent = presence.every(Boolean);
168
+ if (allTmpsPresent) {
169
+ try {
170
+ for (const entry of marker.entries) {
171
+ try {
172
+ await fs.rename(entry.tmp, entry.target);
173
+ }
174
+ catch (err) {
175
+ if (err.code === 'EPERM') {
176
+ await fs.unlink(entry.target).catch(() => undefined);
177
+ await fs.rename(entry.tmp, entry.target);
178
+ }
179
+ else {
180
+ throw err;
181
+ }
182
+ }
183
+ await fs.chmod(entry.target, entry.mode).catch(() => undefined);
184
+ }
185
+ await fs.unlink(mPath).catch(() => undefined);
186
+ completed.push(marker.txnId);
187
+ }
188
+ catch {
189
+ aborted.push(marker.txnId);
190
+ }
191
+ }
192
+ else {
193
+ for (const entry of marker.entries) {
194
+ await fs.unlink(entry.tmp).catch(() => undefined);
195
+ }
196
+ await fs.unlink(mPath).catch(() => undefined);
197
+ aborted.push(marker.txnId);
198
+ }
199
+ }
200
+ return { completed, aborted };
201
+ }
202
+ //# sourceMappingURL=atomicMultiWrite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomicMultiWrite.js","sourceRoot":"","sources":["../../../src/server/io/atomicMultiWrite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Single-file atomic write.
3
+ *
4
+ * Phase 1 of `unified-setup-and-settings-gui` (roadmap step 1.3). The wizard
5
+ * and settings editor MUST never leave a half-written `.agent-settings.yml`
6
+ * or `.agent-user.md` on disk. The contract is: after `writeAtomic` resolves,
7
+ * the target file either holds the new contents in full, or — on any error
8
+ * — the file is untouched (the prior contents survive).
9
+ *
10
+ * Implementation: write to a `<target>.tmp-<pid>-<rand>` sibling, fsync the
11
+ * file descriptor (so the new bytes hit the platter before the rename),
12
+ * `fs.rename` over the target (atomic on POSIX, link-then-unlink fallback
13
+ * on Windows when `rename` raises EPERM), then chmod the final path to the
14
+ * caller-requested mode (default 0600 — council security mandate).
15
+ *
16
+ * Caller is responsible for ensuring the parent directory exists; the
17
+ * helper does not auto-mkdir to avoid masking misrouted writes.
18
+ */
19
+ import { promises as fs } from 'node:fs';
20
+ import { randomBytes } from 'node:crypto';
21
+ import { dirname, join } from 'node:path';
22
+ const DEFAULT_MODE = 0o600;
23
+ function tmpName(target, suffix) {
24
+ const dir = dirname(target);
25
+ const base = target.slice(dir.length + 1);
26
+ const tag = suffix ?? `${process.pid}-${randomBytes(6).toString('hex')}`;
27
+ return join(dir, `${base}.tmp-${tag}`);
28
+ }
29
+ /**
30
+ * Write `contents` to `target` atomically. After resolve, the target
31
+ * file holds the new bytes in full or — on any thrown error — was
32
+ * never touched. The temp file is best-effort unlinked on failure.
33
+ */
34
+ export async function writeAtomic(target, contents, opts = {}) {
35
+ const tmp = tmpName(target, opts.suffix);
36
+ const mode = opts.mode ?? DEFAULT_MODE;
37
+ let handle = null;
38
+ try {
39
+ handle = await fs.open(tmp, 'w', mode);
40
+ const buffer = typeof contents === 'string' ? Buffer.from(contents, 'utf8') : contents;
41
+ await handle.writeFile(buffer);
42
+ await handle.sync();
43
+ await handle.close();
44
+ handle = null;
45
+ try {
46
+ await fs.rename(tmp, target);
47
+ }
48
+ catch (err) {
49
+ // Windows: rename over an existing file can raise EPERM; fall
50
+ // back to link-unlink-rename.
51
+ if (err.code === 'EPERM') {
52
+ await fs.unlink(target).catch(() => undefined);
53
+ await fs.rename(tmp, target);
54
+ }
55
+ else {
56
+ throw err;
57
+ }
58
+ }
59
+ // chmod after rename — on some platforms (Windows, certain mounts)
60
+ // a non-default umask survives the open(); explicit chmod is the
61
+ // only portable knob.
62
+ await fs.chmod(target, mode).catch(() => undefined);
63
+ }
64
+ catch (err) {
65
+ if (handle)
66
+ await handle.close().catch(() => undefined);
67
+ await fs.unlink(tmp).catch(() => undefined);
68
+ throw err;
69
+ }
70
+ }
71
+ /**
72
+ * `<target>.tmp-*` sibling name generator — exported for the multi-write
73
+ * 2PC machinery which needs to write the same temp filename twice (prepare
74
+ * + commit) under one transaction id.
75
+ */
76
+ export function tempPathFor(target, txnId) {
77
+ return tmpName(target, txnId);
78
+ }
79
+ //# sourceMappingURL=atomicWrite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomicWrite.js","sourceRoot":"","sources":["../../../src/server/io/atomicWrite.ts"],"names":[],"mappings":"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"}