avorelo 0.3.8 → 0.4.0-rc.2

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 (394) hide show
  1. package/LICENSE +16 -23
  2. package/README.md +62 -72
  3. package/bin/avorelo +9 -0
  4. package/package.json +147 -139
  5. package/scripts/README.md +40 -0
  6. package/scripts/avorelo-session-collision-guard.js +540 -0
  7. package/scripts/avorelo-workstream-preflight.js +918 -0
  8. package/scripts/cco-dashboard.js +346 -0
  9. package/scripts/cco-posttooluse.js +504 -0
  10. package/scripts/cco-pretooluse.js +381 -0
  11. package/scripts/cco-status.js +540 -0
  12. package/scripts/cco-stop.js +77 -0
  13. package/scripts/cco-userprompt-submit.js +83 -0
  14. package/scripts/lib/activation/account-state.js +37 -0
  15. package/scripts/lib/activation/activate-command.js +114 -0
  16. package/scripts/lib/activation/activation-runner.js +607 -0
  17. package/scripts/lib/activation/activation-self-healing.js +481 -0
  18. package/scripts/lib/activation/activation-state.js +96 -0
  19. package/scripts/lib/activation/activation-summary.js +241 -0
  20. package/scripts/lib/activation/adapters/claude-code.js +77 -0
  21. package/scripts/lib/activation/adapters/codex-cli.js +52 -0
  22. package/scripts/lib/activation/adapters/cursor.js +37 -0
  23. package/scripts/lib/activation/adapters/github-agent.js +39 -0
  24. package/scripts/lib/activation/adapters/terminal.js +42 -0
  25. package/scripts/lib/activation/adapters/vscode.js +39 -0
  26. package/scripts/lib/activation/adapters/windsurf.js +37 -0
  27. package/scripts/lib/activation/ai-surface-detector.js +151 -0
  28. package/scripts/lib/activation/connect-account.js +145 -0
  29. package/scripts/lib/activation/detect-environment.js +75 -0
  30. package/scripts/lib/activation/detect-hosts.js +62 -0
  31. package/scripts/lib/activation/format-activation-output.js +109 -0
  32. package/scripts/lib/activation/next-action.js +43 -0
  33. package/scripts/lib/activation/repair-engine.js +219 -0
  34. package/scripts/lib/activation/run-entry.js +346 -0
  35. package/scripts/lib/activation-distribution-readiness.js +507 -0
  36. package/scripts/lib/adapter-conformance.js +176 -0
  37. package/scripts/lib/adapter-readiness.js +428 -0
  38. package/scripts/lib/adapter-safety-boundaries.js +335 -0
  39. package/scripts/lib/adapter-technical-readiness-gate.js +205 -0
  40. package/scripts/lib/agent-access-governance.js +455 -0
  41. package/scripts/lib/agent-activation-readiness.js +878 -0
  42. package/scripts/lib/agent-enforcement.js +765 -0
  43. package/scripts/lib/agent-evolution-loop.js +479 -0
  44. package/scripts/lib/agent-policy-profile.js +210 -0
  45. package/scripts/lib/agent-security/action-evaluator.js +507 -0
  46. package/scripts/lib/agent-security/adapter-registry.js +98 -0
  47. package/scripts/lib/agent-security/auto-policy.js +139 -0
  48. package/scripts/lib/agent-security/bounded-scan.js +93 -0
  49. package/scripts/lib/agent-security/enforcement-adapter.js +174 -0
  50. package/scripts/lib/agent-security/enforcement-engine.js +1129 -0
  51. package/scripts/lib/agent-security/file-write-adapter.js +183 -0
  52. package/scripts/lib/agent-security/file-write-rules.js +178 -0
  53. package/scripts/lib/agent-security/index.js +3342 -0
  54. package/scripts/lib/agent-security/instruction-risk.js +181 -0
  55. package/scripts/lib/agent-security/mcp-action-adapter.js +185 -0
  56. package/scripts/lib/agent-security/mcp-action-rules.js +184 -0
  57. package/scripts/lib/agent-security/package-action-adapter.js +175 -0
  58. package/scripts/lib/agent-security/package-action-rules.js +233 -0
  59. package/scripts/lib/agent-security/performance.js +148 -0
  60. package/scripts/lib/agent-security/permission-minimizer.js +403 -0
  61. package/scripts/lib/agent-security/scan-cache.js +74 -0
  62. package/scripts/lib/agent-security/source-trust.js +146 -0
  63. package/scripts/lib/ai-efficiency-dogfood-pack.js +437 -0
  64. package/scripts/lib/ai-efficiency-eval.js +207 -0
  65. package/scripts/lib/ai-efficiency-guard-contract.js +209 -0
  66. package/scripts/lib/ai-efficiency-measured-value.js +106 -0
  67. package/scripts/lib/ai-install-prompt.js +293 -0
  68. package/scripts/lib/ai-task-inference.js +155 -0
  69. package/scripts/lib/ai-value-ledger.js +121 -0
  70. package/scripts/lib/ai-value-proof-table.js +151 -0
  71. package/scripts/lib/ai-work-efficiency-routing.js +623 -0
  72. package/scripts/lib/ai-workspace-hygiene.js +1499 -0
  73. package/scripts/lib/alpha-activation.js +520 -0
  74. package/scripts/lib/alpha-feedback.js +263 -0
  75. package/scripts/lib/alpha-readiness-gate.js +332 -0
  76. package/scripts/lib/anti-gaming.js +169 -0
  77. package/scripts/lib/artifact-health.js +431 -0
  78. package/scripts/lib/artifact-receipt-hygiene.js +619 -0
  79. package/scripts/lib/attribution.js +180 -0
  80. package/scripts/lib/audit.js +289 -0
  81. package/scripts/lib/avorelo-skill-registry.js +810 -0
  82. package/scripts/lib/batch-jobs.js +71 -0
  83. package/scripts/lib/brain-pack.js +578 -0
  84. package/scripts/lib/brand-boundary.js +424 -0
  85. package/scripts/lib/brand.js +74 -0
  86. package/scripts/lib/browser-capability.js +1048 -0
  87. package/scripts/lib/browser-proof-governed-workflow.js +1020 -0
  88. package/scripts/lib/browser-proof-preflight.js +321 -0
  89. package/scripts/lib/cache-readiness.js +296 -0
  90. package/scripts/lib/canonical-reentry.js +162 -0
  91. package/scripts/lib/capability-contract-validator.js +177 -0
  92. package/scripts/lib/capability-hygiene.js +504 -0
  93. package/scripts/lib/capability-intake-quarantine.js +789 -0
  94. package/scripts/lib/capability-kernel-registry.js +566 -0
  95. package/scripts/lib/capability-kernel.js +202 -0
  96. package/scripts/lib/capability-manifest.js +255 -0
  97. package/scripts/lib/capability-outcome-normalizer.js +104 -0
  98. package/scripts/lib/capability-packs.js +314 -0
  99. package/scripts/lib/capability-recommender.js +513 -0
  100. package/scripts/lib/capability-registry.js +1062 -0
  101. package/scripts/lib/carry-forward-surfacing.js +194 -0
  102. package/scripts/lib/ccusage-adapter.js +188 -0
  103. package/scripts/lib/claude-session-evidence/index.js +1027 -0
  104. package/scripts/lib/cli-output-sanitizer.js +118 -0
  105. package/scripts/lib/company-loop.js +1149 -0
  106. package/scripts/lib/config.js +641 -0
  107. package/scripts/lib/context-acquisition-plan.js +359 -0
  108. package/scripts/lib/context-authority-rules.js +138 -0
  109. package/scripts/lib/context-budget-guard.js +170 -0
  110. package/scripts/lib/context-budget-scanner.js +257 -0
  111. package/scripts/lib/context-budget.js +167 -0
  112. package/scripts/lib/context-claim-safety.js +116 -0
  113. package/scripts/lib/context-compiler.js +236 -0
  114. package/scripts/lib/context-optimizer.js +715 -0
  115. package/scripts/lib/context-packet.js +121 -0
  116. package/scripts/lib/context-receipt.js +57 -0
  117. package/scripts/lib/context-reduction-plan.js +179 -0
  118. package/scripts/lib/context-safety.js +88 -0
  119. package/scripts/lib/context-savings-engine.js +158 -0
  120. package/scripts/lib/context-source-registry.js +393 -0
  121. package/scripts/lib/context-task-profiles.js +147 -0
  122. package/scripts/lib/cost-abuse-guard.js +975 -0
  123. package/scripts/lib/cost-evidence.js +287 -0
  124. package/scripts/lib/cost-to-outcome-signals.js +639 -0
  125. package/scripts/lib/cross-host-install-plan.js +308 -0
  126. package/scripts/lib/cross-host-install-readiness.js +242 -0
  127. package/scripts/lib/cross-host-value-flow.js +268 -0
  128. package/scripts/lib/dashboard.js +1056 -0
  129. package/scripts/lib/data-permissions-guard.js +1187 -0
  130. package/scripts/lib/deployment-environment-guard.js +1236 -0
  131. package/scripts/lib/design-partner-feedback.js +346 -0
  132. package/scripts/lib/dogfood-evidence-freshness.js +567 -0
  133. package/scripts/lib/efficiency-receipt.js +354 -0
  134. package/scripts/lib/entitlements.js +100 -0
  135. package/scripts/lib/execution-packet.js +559 -0
  136. package/scripts/lib/execution-route-governor.js +179 -0
  137. package/scripts/lib/experimentation-events.js +547 -0
  138. package/scripts/lib/external-capability-compliance.js +107 -0
  139. package/scripts/lib/external-readiness/ai-visibility/ai-visibility-runner.js +322 -0
  140. package/scripts/lib/external-readiness/calibration/benchmark-site-catalog.js +121 -0
  141. package/scripts/lib/external-readiness/calibration/completion-gate.js +112 -0
  142. package/scripts/lib/external-readiness/calibration/real-site-benchmark-runner.js +284 -0
  143. package/scripts/lib/external-readiness/drift-detector.js +100 -0
  144. package/scripts/lib/external-readiness/endpoint-prober.js +332 -0
  145. package/scripts/lib/external-readiness/external-readiness-runner.js +112 -0
  146. package/scripts/lib/external-readiness/full-agent-readiness-scorer.js +220 -0
  147. package/scripts/lib/external-readiness/golden-path-runner.js +333 -0
  148. package/scripts/lib/external-readiness/inside-out-runner.js +118 -0
  149. package/scripts/lib/external-readiness/proof-receipt-writer.js +112 -0
  150. package/scripts/lib/external-readiness/safe-fix-executor.js +117 -0
  151. package/scripts/lib/external-readiness/skills/category-boundary-guard.js +30 -0
  152. package/scripts/lib/external-readiness/skills/pmm-positioning-guard.js +69 -0
  153. package/scripts/lib/external-readiness/skills/safe-fix-policy.js +35 -0
  154. package/scripts/lib/external-user-simulation.js +166 -0
  155. package/scripts/lib/failure-recovery-readiness.js +81 -0
  156. package/scripts/lib/failure-recovery.js +419 -0
  157. package/scripts/lib/feedback-intelligence.js +537 -0
  158. package/scripts/lib/feedback-signals.js +205 -0
  159. package/scripts/lib/file-integrity.js +68 -0
  160. package/scripts/lib/fsx.js +129 -0
  161. package/scripts/lib/full-readiness-gate.js +451 -0
  162. package/scripts/lib/governed-action-exposure-primitives.js +1514 -0
  163. package/scripts/lib/governed-exposure-planner.js +186 -0
  164. package/scripts/lib/governed-workspace-hygiene.js +946 -0
  165. package/scripts/lib/guard-suite-common.js +412 -0
  166. package/scripts/lib/guidance-builder.js +174 -0
  167. package/scripts/lib/hook-apply.js +1075 -0
  168. package/scripts/lib/hook-baseline.js +310 -0
  169. package/scripts/lib/hook-config-preview.js +275 -0
  170. package/scripts/lib/hook-contracts.js +290 -0
  171. package/scripts/lib/hook-safety-boundary-readiness.js +80 -0
  172. package/scripts/lib/host-capability-matrix.js +351 -0
  173. package/scripts/lib/host-support-context.js +254 -0
  174. package/scripts/lib/http-hook-action.js +538 -0
  175. package/scripts/lib/install-ai-readiness.js +84 -0
  176. package/scripts/lib/install-intake-risk.js +1051 -0
  177. package/scripts/lib/install-journey-intelligence.js +329 -0
  178. package/scripts/lib/intervention-guidance.js +57 -0
  179. package/scripts/lib/known-limitations.js +115 -0
  180. package/scripts/lib/l8-path-truth.js +146 -0
  181. package/scripts/lib/launch-hardening-gate.js +436 -0
  182. package/scripts/lib/launch-readiness.js +635 -0
  183. package/scripts/lib/learning-experimentation-foundation.js +1484 -0
  184. package/scripts/lib/learning-memory.js +686 -0
  185. package/scripts/lib/lifecycle-hooks.js +982 -0
  186. package/scripts/lib/local-package-smoke.js +436 -0
  187. package/scripts/lib/local-pricing.js +299 -0
  188. package/scripts/lib/mcp-enforcement.js +311 -0
  189. package/scripts/lib/mcp-least-privilege-policy.js +303 -0
  190. package/scripts/lib/mcp-tool-inventory.js +388 -0
  191. package/scripts/lib/mcp-tool-risk.js +0 -0
  192. package/scripts/lib/memory.js +335 -0
  193. package/scripts/lib/metrics.js +699 -0
  194. package/scripts/lib/micro-proof.js +133 -0
  195. package/scripts/lib/model-work-class-routing.js +79 -0
  196. package/scripts/lib/next-run-context.js +436 -0
  197. package/scripts/lib/next-run-continuity.js +1207 -0
  198. package/scripts/lib/observability-recovery-guard.js +1030 -0
  199. package/scripts/lib/operating-value.js +1662 -0
  200. package/scripts/lib/optimization-v3.js +122 -0
  201. package/scripts/lib/orchestration/adapters/_shared.js +49 -0
  202. package/scripts/lib/orchestration/adapters/aider.js +18 -0
  203. package/scripts/lib/orchestration/adapters/claude-code.js +35 -0
  204. package/scripts/lib/orchestration/adapters/codex.js +35 -0
  205. package/scripts/lib/orchestration/adapters/gemini-cli.js +18 -0
  206. package/scripts/lib/orchestration/adapters/git.js +25 -0
  207. package/scripts/lib/orchestration/adapters/index.js +31 -0
  208. package/scripts/lib/orchestration/adapters/lm-studio.js +18 -0
  209. package/scripts/lib/orchestration/adapters/ollama.js +18 -0
  210. package/scripts/lib/orchestration/adapters/opencode.js +18 -0
  211. package/scripts/lib/orchestration/adapters/openrouter.js +18 -0
  212. package/scripts/lib/orchestration/adapters/test-runner.js +25 -0
  213. package/scripts/lib/orchestration/cli.js +438 -0
  214. package/scripts/lib/orchestration/execution-manager.js +279 -0
  215. package/scripts/lib/orchestration/handoff.js +314 -0
  216. package/scripts/lib/orchestration/index.js +456 -0
  217. package/scripts/lib/orchestration/inventory.js +47 -0
  218. package/scripts/lib/orchestration/model-discovery.js +498 -0
  219. package/scripts/lib/orchestration/model-profiler.js +170 -0
  220. package/scripts/lib/orchestration/model-profiles.js +252 -0
  221. package/scripts/lib/orchestration/model-refresh-policy.js +72 -0
  222. package/scripts/lib/orchestration/proof-writer.js +349 -0
  223. package/scripts/lib/orchestration/provider-discovery/aider.js +49 -0
  224. package/scripts/lib/orchestration/provider-discovery/claude-code.js +56 -0
  225. package/scripts/lib/orchestration/provider-discovery/codex.js +49 -0
  226. package/scripts/lib/orchestration/provider-discovery/common.js +186 -0
  227. package/scripts/lib/orchestration/provider-discovery/gemini.js +106 -0
  228. package/scripts/lib/orchestration/provider-discovery/lm-studio.js +118 -0
  229. package/scripts/lib/orchestration/provider-discovery/models-dev.js +12 -0
  230. package/scripts/lib/orchestration/provider-discovery/ollama.js +100 -0
  231. package/scripts/lib/orchestration/provider-discovery/opencode.js +47 -0
  232. package/scripts/lib/orchestration/provider-discovery/openrouter.js +44 -0
  233. package/scripts/lib/orchestration/risk-classifier.js +130 -0
  234. package/scripts/lib/orchestration/routing-policy.js +486 -0
  235. package/scripts/lib/orchestration/settings.js +95 -0
  236. package/scripts/lib/orchestration/state.js +165 -0
  237. package/scripts/lib/orchestration/verification-manager.js +138 -0
  238. package/scripts/lib/outcome-evidence-stack.js +1083 -0
  239. package/scripts/lib/output-profiles.js +146 -0
  240. package/scripts/lib/package-content-audit.js +368 -0
  241. package/scripts/lib/package-runtime.js +278 -0
  242. package/scripts/lib/plan-surface.js +53 -0
  243. package/scripts/lib/plans.js +2327 -0
  244. package/scripts/lib/policy-provider.js +27 -0
  245. package/scripts/lib/prelaunch-activation-readiness.js +409 -0
  246. package/scripts/lib/prelaunch-evidence-store.js +816 -0
  247. package/scripts/lib/prelaunch-intelligence.js +869 -0
  248. package/scripts/lib/pricing-experiment.js +118 -0
  249. package/scripts/lib/pro-moment-events.js +77 -0
  250. package/scripts/lib/pro-moment-state.js +227 -0
  251. package/scripts/lib/pro-moments.js +1216 -0
  252. package/scripts/lib/product-home-receipt.js +1790 -0
  253. package/scripts/lib/product-learning-events.js +696 -0
  254. package/scripts/lib/production-confidence-control-tower.js +1209 -0
  255. package/scripts/lib/production-confidence.js +1858 -0
  256. package/scripts/lib/project-profile.js +555 -0
  257. package/scripts/lib/prompt-compiler-plan.js +94 -0
  258. package/scripts/lib/prompt-compiler.js +280 -0
  259. package/scripts/lib/prompt-lint.js +32 -0
  260. package/scripts/lib/prompt-suggestions.js +52 -0
  261. package/scripts/lib/proof-canonical.js +398 -0
  262. package/scripts/lib/proof-drilldown.js +383 -0
  263. package/scripts/lib/proof-e2e/promise-completion.js +141 -0
  264. package/scripts/lib/proof-e2e/promise-dashboard-claims.js +135 -0
  265. package/scripts/lib/proof-e2e/promise-local-proof.js +156 -0
  266. package/scripts/lib/proof-e2e/promise-provider-neutral.js +136 -0
  267. package/scripts/lib/proof-e2e/promise-registry.js +219 -0
  268. package/scripts/lib/proof-e2e/promise-security-trust.js +141 -0
  269. package/scripts/lib/proof-e2e/promise-skills-risk.js +163 -0
  270. package/scripts/lib/proof-e2e/promise-token-savings.js +112 -0
  271. package/scripts/lib/proof-e2e/promise-work-management.js +126 -0
  272. package/scripts/lib/proof-events.js +342 -0
  273. package/scripts/lib/proof-history.js +243 -0
  274. package/scripts/lib/proof-metrics.js +296 -0
  275. package/scripts/lib/proof-outcome-evidence.js +134 -0
  276. package/scripts/lib/proof-receipt.js +335 -0
  277. package/scripts/lib/proof-record.js +461 -0
  278. package/scripts/lib/proof-savings-report.js +1549 -0
  279. package/scripts/lib/public-activation-distribution-gate.js +266 -0
  280. package/scripts/lib/public-cli.js +5631 -0
  281. package/scripts/lib/public-distribution-truth.js +211 -0
  282. package/scripts/lib/public-distribution.js +73 -0
  283. package/scripts/lib/public-install-claim-checker.js +300 -0
  284. package/scripts/lib/publish-provenance-readiness.js +287 -0
  285. package/scripts/lib/readiness-delta.js +218 -0
  286. package/scripts/lib/readiness-evidence-closure.js +196 -0
  287. package/scripts/lib/reentry-memory-capture.js +241 -0
  288. package/scripts/lib/reentry-memory-retrieval.js +302 -0
  289. package/scripts/lib/reentry-memory-status.js +147 -0
  290. package/scripts/lib/reentry-memory-store.js +183 -0
  291. package/scripts/lib/reentry-state.js +66 -0
  292. package/scripts/lib/release-candidate-bundle.js +166 -0
  293. package/scripts/lib/remediation.js +81 -0
  294. package/scripts/lib/repo-map.js +391 -0
  295. package/scripts/lib/run-action-policy.js +104 -0
  296. package/scripts/lib/run-contract-receipt.js +48 -0
  297. package/scripts/lib/run-contract.js +288 -0
  298. package/scripts/lib/run-cost-to-verified-outcome.js +87 -0
  299. package/scripts/lib/run-improvements-lifecycle.js +330 -0
  300. package/scripts/lib/run-improvements.js +789 -0
  301. package/scripts/lib/run-proof-contract.js +116 -0
  302. package/scripts/lib/run-risk-classifier.js +131 -0
  303. package/scripts/lib/run-task-classifier.js +216 -0
  304. package/scripts/lib/runtime-decision-policy.js +387 -0
  305. package/scripts/lib/safe-path-engine.js +705 -0
  306. package/scripts/lib/safe-repair.js +877 -0
  307. package/scripts/lib/safe-run-controller.js +887 -0
  308. package/scripts/lib/scope-repair-before-approval.js +865 -0
  309. package/scripts/lib/score.js +262 -0
  310. package/scripts/lib/seamless-enforcement.js +329 -0
  311. package/scripts/lib/seamless-outcome.js +689 -0
  312. package/scripts/lib/seamless-reality-gate.js +5053 -0
  313. package/scripts/lib/security-confidence/activation-safety.js +78 -0
  314. package/scripts/lib/security-confidence/adapters/adapter-contract.js +125 -0
  315. package/scripts/lib/security-confidence/adapters/mock-claude-bughunter-adapter.js +36 -0
  316. package/scripts/lib/security-confidence/adapters/mock-decepticon-adapter.js +34 -0
  317. package/scripts/lib/security-confidence/adapters/mock-mcp-scan-adapter.js +35 -0
  318. package/scripts/lib/security-confidence/adapters/mock-snyk-agent-scan-adapter.js +35 -0
  319. package/scripts/lib/security-confidence/adapters/mock-tank-adapter.js +34 -0
  320. package/scripts/lib/security-confidence/adapters/reference-registry.js +63 -0
  321. package/scripts/lib/security-confidence/auth-rbac-plan.js +39 -0
  322. package/scripts/lib/security-confidence/component-inventory.js +151 -0
  323. package/scripts/lib/security-confidence/constants.js +191 -0
  324. package/scripts/lib/security-confidence/dependency-script-risk.js +95 -0
  325. package/scripts/lib/security-confidence/evidence-hygiene.js +127 -0
  326. package/scripts/lib/security-confidence/feature-impact-classifier.js +80 -0
  327. package/scripts/lib/security-confidence/file-utils.js +161 -0
  328. package/scripts/lib/security-confidence/finding-triage.js +90 -0
  329. package/scripts/lib/security-confidence/findings.js +115 -0
  330. package/scripts/lib/security-confidence/index.js +29 -0
  331. package/scripts/lib/security-confidence/permission-budget.js +93 -0
  332. package/scripts/lib/security-confidence/redaction.js +82 -0
  333. package/scripts/lib/security-confidence/redteam-fixtures.js +53 -0
  334. package/scripts/lib/security-confidence/reference-adoption.js +229 -0
  335. package/scripts/lib/security-confidence/reference-taxonomy.js +155 -0
  336. package/scripts/lib/security-confidence/report-quality.js +99 -0
  337. package/scripts/lib/security-confidence/report-writer.js +79 -0
  338. package/scripts/lib/security-confidence/risk-classifier.js +187 -0
  339. package/scripts/lib/security-confidence/runner.js +179 -0
  340. package/scripts/lib/security-confidence/schema.js +188 -0
  341. package/scripts/lib/security-confidence/secret-safety.js +74 -0
  342. package/scripts/lib/security-confidence/security-capability-router.js +98 -0
  343. package/scripts/lib/security-confidence/web-security-smoke-plan.js +46 -0
  344. package/scripts/lib/security-risk-classifier.js +511 -0
  345. package/scripts/lib/security-scan.js +396 -0
  346. package/scripts/lib/session-context-optimizer.js +1211 -0
  347. package/scripts/lib/session-timing.js +322 -0
  348. package/scripts/lib/skill-hygiene.js +805 -0
  349. package/scripts/lib/skill-packs.js +161 -0
  350. package/scripts/lib/skills-operating-layer-v1.js +1023 -0
  351. package/scripts/lib/skills-operating-layer.js +629 -0
  352. package/scripts/lib/smallest-safe-plan.js +214 -0
  353. package/scripts/lib/smart-routing-plan.js +115 -0
  354. package/scripts/lib/smart-work-routing.js +768 -0
  355. package/scripts/lib/source-catalog.js +1022 -0
  356. package/scripts/lib/status-value-summary.js +32 -0
  357. package/scripts/lib/supply-chain-dependency-guard.js +1333 -0
  358. package/scripts/lib/supply-chain-guard.js +219 -0
  359. package/scripts/lib/support-bundle.js +561 -0
  360. package/scripts/lib/support-redaction.js +66 -0
  361. package/scripts/lib/task-continuation.js +440 -0
  362. package/scripts/lib/test-helpers.js +15 -0
  363. package/scripts/lib/tier.js +38 -0
  364. package/scripts/lib/token-context-quality-gate.js +370 -0
  365. package/scripts/lib/token-cost-capture.js +187 -0
  366. package/scripts/lib/token-cost-evidence.js +862 -0
  367. package/scripts/lib/token-cost-intelligence.js +358 -0
  368. package/scripts/lib/token-efficiency-evidence.js +213 -0
  369. package/scripts/lib/token-efficiency-map.js +110 -0
  370. package/scripts/lib/token-evidence.js +703 -0
  371. package/scripts/lib/tokenish.js +17 -0
  372. package/scripts/lib/tool-output-sandbox.js +559 -0
  373. package/scripts/lib/trust-audit.js +136 -0
  374. package/scripts/lib/unified-events.js +396 -0
  375. package/scripts/lib/upgrade-interruption-recovery.js +407 -0
  376. package/scripts/lib/usage-ledger.js +201 -0
  377. package/scripts/lib/value-ledger.js +130 -0
  378. package/scripts/lib/value-proof-calibration.js +531 -0
  379. package/scripts/lib/visual-qa.js +231 -0
  380. package/scripts/lib/voice-alpha.js +29 -0
  381. package/scripts/lib/webhook-idempotency-guard.js +990 -0
  382. package/scripts/lib/work-aware-orchestration.js +976 -0
  383. package/scripts/lib/work-control-receipts.js +577 -0
  384. package/scripts/lib/work-ledger.js +1123 -0
  385. package/scripts/lib/work-panel-preview.js +352 -0
  386. package/scripts/lib/workflow-discipline.js +280 -0
  387. package/scripts/lib/workflow-intelligence-radar.js +804 -0
  388. package/scripts/lib/workflow-signals.js +419 -0
  389. package/scripts/lib/workspace-map.js +281 -0
  390. package/scripts/lib/workspace-registry.js +1367 -0
  391. package/scripts/lib/workspace-resolver.js +542 -0
  392. package/scripts/wuz-doctor.js +315 -0
  393. package/bin/avorelo.mjs +0 -7
  394. package/dist/avorelo.mjs +0 -24678
@@ -0,0 +1,209 @@
1
+ "use strict";
2
+
3
+ const fs = require("fs");
4
+ const path = require("path");
5
+ const { safeReadJson } = require("./fsx");
6
+
7
+ const GUARD_DESCRIPTORS = [
8
+ {
9
+ guardId: "data-guard",
10
+ commandName: "data-guard",
11
+ schemaVersion: null,
12
+ surfaces: ["cli", "hook", "agent"],
13
+ taskTypes: ["data-access", "data-mutation", "migration"],
14
+ routeHints: ["proof-required", "block-on-fail"],
15
+ proofExpectationLabel: "Data permissions verified before access",
16
+ statusSource: "report",
17
+ blockedBehavior: "halt-task",
18
+ warnBehavior: "surface-warning-continue",
19
+ evidenceRefSelector: "latestReport.evidence",
20
+ guardFile: "data-permissions-guard.js",
21
+ reportPath: ".claude/cco/reports/data-permissions-guard/latest-report.json",
22
+ },
23
+ {
24
+ guardId: "permissions-guard",
25
+ commandName: "permissions-guard",
26
+ schemaVersion: null,
27
+ surfaces: ["cli", "hook"],
28
+ taskTypes: ["permission-check", "access-control"],
29
+ routeHints: ["proof-required"],
30
+ proofExpectationLabel: "Permission boundaries enforced",
31
+ statusSource: "report",
32
+ blockedBehavior: "halt-task",
33
+ warnBehavior: "surface-warning-continue",
34
+ evidenceRefSelector: "latestReport.evidence",
35
+ guardFile: "data-permissions-guard.js",
36
+ reportPath: ".claude/cco/reports/data-permissions-guard/latest-report.json",
37
+ },
38
+ {
39
+ guardId: "deployment-guard",
40
+ commandName: "deployment-guard",
41
+ schemaVersion: null,
42
+ surfaces: ["cli", "hook", "agent"],
43
+ taskTypes: ["deploy", "release", "environment-check"],
44
+ routeHints: ["proof-required", "block-on-fail"],
45
+ proofExpectationLabel: "Deployment environment validated",
46
+ statusSource: "report",
47
+ blockedBehavior: "halt-task",
48
+ warnBehavior: "surface-warning-continue",
49
+ evidenceRefSelector: "latestReport.evidence",
50
+ guardFile: "deployment-environment-guard.js",
51
+ reportPath: ".claude/cco/reports/deployment-environment-guard/latest-report.json",
52
+ },
53
+ {
54
+ guardId: "supply-chain-guard",
55
+ commandName: "supply-chain-guard",
56
+ schemaVersion: "avorelo.supplyChainDependencyGuard.v1",
57
+ surfaces: ["cli", "hook"],
58
+ taskTypes: ["dependency-audit", "package-integrity"],
59
+ routeHints: ["proof-required"],
60
+ proofExpectationLabel: "Supply chain integrity verified",
61
+ statusSource: "report",
62
+ blockedBehavior: "halt-task",
63
+ warnBehavior: "log-and-continue",
64
+ evidenceRefSelector: "latestReport.evidence",
65
+ guardFile: "supply-chain-dependency-guard.js",
66
+ reportPath: ".claude/cco/reports/supply-chain-dependency-guard/latest-report.json",
67
+ },
68
+ {
69
+ guardId: "observability-recovery-guard",
70
+ commandName: "observability-recovery-guard",
71
+ schemaVersion: "avorelo.observabilityRecoveryGuard.v1",
72
+ surfaces: ["cli", "hook", "agent"],
73
+ taskTypes: ["observability", "recovery", "production_confidence"],
74
+ routeHints: ["proof-required", "block-on-fail"],
75
+ proofExpectationLabel: "Observability and recovery paths verified",
76
+ statusSource: "report",
77
+ blockedBehavior: "halt-task",
78
+ warnBehavior: "surface-warning-continue",
79
+ evidenceRefSelector: "latestReport.evidence",
80
+ guardFile: "observability-recovery-guard.js",
81
+ reportPath: ".claude/cco/reports/observability-recovery-guard/latest-report.json",
82
+ },
83
+ {
84
+ guardId: "cost-abuse-guard",
85
+ commandName: "cost-abuse-guard",
86
+ schemaVersion: "avorelo.costAbuseGuard.v1",
87
+ surfaces: ["cli", "hook", "agent"],
88
+ taskTypes: ["cost-control", "abuse-detection", "production_confidence"],
89
+ routeHints: ["proof-required", "block-on-fail"],
90
+ proofExpectationLabel: "Cost and abuse thresholds enforced",
91
+ statusSource: "report",
92
+ blockedBehavior: "halt-task",
93
+ warnBehavior: "surface-warning-continue",
94
+ evidenceRefSelector: "latestReport.evidence",
95
+ guardFile: "cost-abuse-guard.js",
96
+ reportPath: ".claude/cco/reports/cost-abuse-guard/latest-report.json",
97
+ },
98
+ {
99
+ guardId: "webhook-idempotency-guard",
100
+ commandName: "webhook-idempotency-guard",
101
+ schemaVersion: "avorelo.webhookIdempotencyGuard.v1",
102
+ surfaces: ["cli", "hook", "agent"],
103
+ taskTypes: ["webhook", "idempotency", "production_confidence"],
104
+ routeHints: ["proof-required", "block-on-fail"],
105
+ proofExpectationLabel: "Webhook idempotency contracts enforced",
106
+ statusSource: "report",
107
+ blockedBehavior: "halt-task",
108
+ warnBehavior: "surface-warning-continue",
109
+ evidenceRefSelector: "latestReport.evidence",
110
+ guardFile: "webhook-idempotency-guard.js",
111
+ reportPath: ".claude/cco/reports/webhook-idempotency-guard/latest-report.json",
112
+ },
113
+ ];
114
+
115
+ const FUTURE_REASON_CODES = {};
116
+
117
+ function resolveGuardState(descriptor, cwd) {
118
+ const libDir = path.resolve(__dirname);
119
+ const fileExists =
120
+ descriptor.guardFile &&
121
+ fs.existsSync(path.resolve(libDir, descriptor.guardFile));
122
+
123
+ let reportData = null;
124
+ if (descriptor.reportPath && cwd) {
125
+ reportData = safeReadJson(cwd, descriptor.reportPath);
126
+ }
127
+
128
+ const present = !!fileExists;
129
+ const runtimeVerified = present && reportData !== null;
130
+
131
+ return { present, runtimeVerified, reportData };
132
+ }
133
+
134
+ function buildGuardIntegrationContract(cwd) {
135
+ const reasonCodes = [];
136
+ let hasPresent = false;
137
+ let hasBlocked = false;
138
+ let hasContractOnly = false;
139
+
140
+ const guards = GUARD_DESCRIPTORS.map((descriptor) => {
141
+ const { present, runtimeVerified } = resolveGuardState(descriptor, cwd);
142
+
143
+ const entry = {
144
+ guardId: descriptor.guardId,
145
+ commandName: descriptor.commandName,
146
+ schemaVersion: descriptor.schemaVersion,
147
+ surfaces: descriptor.surfaces,
148
+ taskTypes: descriptor.taskTypes,
149
+ routeHints: descriptor.routeHints,
150
+ proofExpectationLabel: descriptor.proofExpectationLabel,
151
+ statusSource: descriptor.statusSource,
152
+ blockedBehavior: descriptor.blockedBehavior,
153
+ warnBehavior: descriptor.warnBehavior,
154
+ evidenceRefSelector: descriptor.evidenceRefSelector,
155
+ present,
156
+ runtimeVerified,
157
+ contractReady: true,
158
+ };
159
+
160
+ if (present && runtimeVerified) {
161
+ hasPresent = true;
162
+ reasonCodes.push("GUARD_PRESENT_RUNTIME_VERIFIED");
163
+ } else if (present && !runtimeVerified) {
164
+ hasPresent = true;
165
+ hasContractOnly = true;
166
+ reasonCodes.push("GUARD_CONTRACT_ONLY");
167
+ } else {
168
+ // Not present — contract placeholder
169
+ const futureCode = FUTURE_REASON_CODES[descriptor.guardId];
170
+ if (futureCode) {
171
+ reasonCodes.push(futureCode);
172
+ }
173
+ }
174
+
175
+ if (descriptor.blockedBehavior === "halt-task" && present) {
176
+ reasonCodes.push("GUARD_BLOCKED_PRESERVED");
177
+ }
178
+ if (
179
+ descriptor.warnBehavior === "surface-warning-continue" &&
180
+ present
181
+ ) {
182
+ reasonCodes.push("GUARD_WARN_PRESERVED");
183
+ }
184
+
185
+ return entry;
186
+ });
187
+
188
+ const presentGuards = guards.filter((g) => g.present);
189
+ let status;
190
+ if (presentGuards.length === 0) {
191
+ status = "no_data";
192
+ } else if (hasBlocked) {
193
+ status = "blocked";
194
+ } else if (hasContractOnly) {
195
+ status = "partial";
196
+ } else {
197
+ status = "ready";
198
+ }
199
+
200
+ reasonCodes.unshift("GUARD_CONTRACT_READY");
201
+
202
+ return {
203
+ status,
204
+ guards,
205
+ reasonCodes: [...new Set(reasonCodes)],
206
+ };
207
+ }
208
+
209
+ module.exports = { buildGuardIntegrationContract, GUARD_DESCRIPTORS };
@@ -0,0 +1,106 @@
1
+ 'use strict';
2
+
3
+ function safeLen(arr) {
4
+ return Array.isArray(arr) ? arr.length : 0;
5
+ }
6
+
7
+ function safeNum(v, fallback) {
8
+ return typeof v === 'number' && Number.isFinite(v) ? v : fallback;
9
+ }
10
+
11
+ const AVG_SUPPRESSED_BYTES = 500; // estimated per-ref average
12
+
13
+ function computeMeasuredLocalValue(contextBudget, governedExposure, tokenEfficiency, promptCompilerPlan) {
14
+ const cb = contextBudget || {};
15
+ const ge = governedExposure || {};
16
+ const pcp = promptCompilerPlan || {};
17
+
18
+ const availableContextRefsBefore = safeNum(cb.estimatedContextItems, 0);
19
+
20
+ const selectedContextRefsAfter = safeLen(ge.includeContextRefs);
21
+ const suppressedContextRefs = Math.max(0, availableContextRefsBefore - selectedContextRefsAfter);
22
+
23
+ const includedBytes = safeNum(cb.estimatedInputBytes, null);
24
+ const suppressedBytes = suppressedContextRefs > 0
25
+ ? { value: suppressedContextRefs * AVG_SUPPRESSED_BYTES, estimated: true }
26
+ : { value: 0, estimated: true };
27
+
28
+ const staleRefsSuppressed = safeNum(cb.staleContextCount, 0);
29
+ const duplicateRefsSuppressed = safeNum(cb.duplicateContextCount, 0);
30
+ const noisyRefsSuppressed = safeNum(cb.suppressedContextCount, 0);
31
+
32
+ const capabilityRefsExposed = safeLen(ge.exposedCapabilityRefs);
33
+ const capabilityRefsSuppressed = safeLen(ge.suppressedCapabilityRefs);
34
+ const capabilityRefsAvailable = capabilityRefsExposed + capabilityRefsSuppressed;
35
+
36
+ const toolRefsExposed = safeLen(ge.exposedToolRefs);
37
+ const toolRefsSuppressed = safeLen(ge.suppressedToolRefs);
38
+ const toolRefsAvailable = toolRefsExposed + toolRefsSuppressed;
39
+
40
+ const proofExpectationsAdded = safeLen(ge.proofExpectations);
41
+ const guardEvidenceRefsIncluded = safeLen(ge.guardEvidenceRefs);
42
+
43
+ const hasMeasuredRefs = availableContextRefsBefore > 0 || selectedContextRefsAfter > 0;
44
+ const hasMeasuredCaps = capabilityRefsAvailable > 0;
45
+ const hasMeasuredTools = toolRefsAvailable > 0;
46
+ const hasAnything = hasMeasuredRefs || hasMeasuredCaps || hasMeasuredTools || includedBytes !== null;
47
+
48
+ const status = hasAnything
49
+ ? (hasMeasuredRefs && hasMeasuredCaps ? 'measured' : 'partial')
50
+ : 'unavailable';
51
+
52
+ const measurementType = 'measured';
53
+
54
+ const publicClaimAllowed = status !== 'unavailable';
55
+
56
+ const caveat = status === 'unavailable'
57
+ ? 'No measured local data available. Token savings are heuristic estimates only.'
58
+ : 'Measured local context reduction in refs and capabilities. Token savings are heuristic estimates only.';
59
+
60
+ const reasonCodes = [];
61
+ if (status !== 'unavailable') {
62
+ reasonCodes.push('MEASURED_LOCAL_VALUE_AVAILABLE');
63
+ }
64
+ if (hasMeasuredRefs) {
65
+ reasonCodes.push('MEASURED_CONTEXT_REDUCTION');
66
+ }
67
+ if (suppressedContextRefs > 0) {
68
+ reasonCodes.push('MEASURED_REFS_SUPPRESSED');
69
+ }
70
+ if (suppressedBytes.value > 0) {
71
+ reasonCodes.push('MEASURED_BYTES_SUPPRESSED');
72
+ }
73
+ reasonCodes.push('HEURISTIC_TOKEN_VALUE_ONLY');
74
+ reasonCodes.push('DOLLAR_SAVINGS_UNAVAILABLE');
75
+ if (publicClaimAllowed) {
76
+ reasonCodes.push('PUBLIC_CLAIM_ALLOWED_MEASURED_LOCAL');
77
+ } else {
78
+ reasonCodes.push('PUBLIC_CLAIM_BLOCKED_HEURISTIC_ONLY');
79
+ }
80
+
81
+ return {
82
+ status,
83
+ availableContextRefsBefore,
84
+ selectedContextRefsAfter,
85
+ suppressedContextRefs,
86
+ includedBytes,
87
+ suppressedBytes,
88
+ staleRefsSuppressed,
89
+ duplicateRefsSuppressed,
90
+ noisyRefsSuppressed,
91
+ capabilityRefsAvailable,
92
+ capabilityRefsExposed,
93
+ capabilityRefsSuppressed,
94
+ toolRefsAvailable,
95
+ toolRefsExposed,
96
+ toolRefsSuppressed,
97
+ proofExpectationsAdded,
98
+ guardEvidenceRefsIncluded,
99
+ measurementType,
100
+ publicClaimAllowed,
101
+ caveat,
102
+ reasonCodes
103
+ };
104
+ }
105
+
106
+ module.exports = { computeMeasuredLocalValue };
@@ -0,0 +1,293 @@
1
+ "use strict";
2
+
3
+ // ── AI Install Prompt ─────────────────────────────────────────────────────────
4
+ //
5
+ // Contract: avorelo.aiInstallPrompt.v1
6
+ //
7
+ // Generates a safe, copy-pasteable one-prompt AI install experience.
8
+ // Inspired by PostHog install-with-AI pattern, adapted for Avorelo's
9
+ // approval-boundary requirements (hooks/MCP/tool governance require
10
+ // explicit user approval — never auto-applied).
11
+ //
12
+ // Rules:
13
+ // - Prompt never includes raw secrets, repo-specific sensitive data, or PII
14
+ // - Hook apply always requires explicit --yes approval from user
15
+ // - MCP config is never auto-modified
16
+ // - Global config is never modified
17
+ // - AI must stop on blockers and request explicit approval for config changes
18
+ // - Default output is compact; debug exposes internals
19
+
20
+ const fs = require("fs");
21
+ const path = require("path");
22
+ const { ensureCcoDirs, nowIso } = require("./fsx");
23
+ const { appendProductLearningEvent } = require("./product-learning-events");
24
+
25
+ const CONTRACT = "avorelo.aiInstallPrompt.v1";
26
+ const SCHEMA_VERSION = 1;
27
+
28
+ const PROMPT_DIR_REL = ".claude/cco/orchestration/ai-install";
29
+ const LATEST_PROMPT_REL = `${PROMPT_DIR_REL}/latest-prompt.json`;
30
+
31
+ // ── Helpers ───────────────────────────────────────────────────────────────────
32
+
33
+ const AVORELO_ROOT = path.resolve(__dirname, "../../");
34
+
35
+ function safeReadJson(absPath) {
36
+ try {
37
+ if (!fs.existsSync(absPath)) return null;
38
+ return JSON.parse(fs.readFileSync(absPath, "utf8").replace(/^/, ""));
39
+ } catch {
40
+ return null;
41
+ }
42
+ }
43
+
44
+ function safeReadJsonRel(cwd, rel) {
45
+ return safeReadJson(path.join(cwd, rel));
46
+ }
47
+
48
+ // ── Command sequence ──────────────────────────────────────────────────────────
49
+
50
+ // All commands are external-user commands (npx avorelo@latest ...), never
51
+ // repo-internal `node bin/avorelo ...`. Step 1 actually activates Avorelo and
52
+ // writes the canonical local state; the remaining steps verify and report.
53
+ function buildCommandSequence() {
54
+ return [
55
+ { step: 1, cmd: "npx avorelo@latest activate", purpose: "Activate Avorelo: safe local detection + self-healing setup, writes canonical state" },
56
+ { step: 2, cmd: "npx avorelo@latest status", purpose: "Verify activation is 'ready' (must not say 'not activated')" },
57
+ { step: 3, cmd: "npx avorelo@latest open", purpose: "Open local receipts and proof - confirm activation receipt exists" },
58
+ { step: 4, cmd: "npx avorelo@latest verify", purpose: "Validate activation state invariants" },
59
+ ];
60
+ }
61
+
62
+ // ── Approval boundaries ───────────────────────────────────────────────────────
63
+
64
+ function buildApprovalBoundaries() {
65
+ return [
66
+ {
67
+ surface: "hooks",
68
+ rule: "NEVER run `avorelo hooks apply --yes` without explicit user approval. Always show dry-run preview first.",
69
+ command: "npx avorelo@latest hooks apply --dry-run",
70
+ approvalCommand: "npx avorelo@latest hooks apply --yes",
71
+ },
72
+ {
73
+ surface: "mcp_config",
74
+ rule: "NEVER modify MCP config automatically. MCP governance is preview-only in this flow.",
75
+ command: null,
76
+ approvalCommand: null,
77
+ },
78
+ {
79
+ surface: "global_config",
80
+ rule: "NEVER modify global config files (e.g., ~/.claude/settings.json) without explicit user instruction.",
81
+ command: null,
82
+ approvalCommand: null,
83
+ },
84
+ {
85
+ surface: "destructive_commands",
86
+ rule: "NEVER run deploy, publish, rm -rf, database migrations, or production commands.",
87
+ command: null,
88
+ approvalCommand: null,
89
+ },
90
+ ];
91
+ }
92
+
93
+ // ── Safety rules ──────────────────────────────────────────────────────────────
94
+
95
+ function buildSafetyRules() {
96
+ return [
97
+ "Do not write product code before activation readiness checks complete.",
98
+ "Stop immediately if any command returns status: fail — show the safeNextAction and wait.",
99
+ "Do not bypass, skip, or override any approval boundary.",
100
+ "Do not expose, log, or include secrets, API keys, tokens, or PII in any output.",
101
+ "Do not run --yes on hook apply without the user reading the dry-run preview.",
102
+ "Do not modify global config or MCP server config.",
103
+ "Keep all output compact. Use --debug only if the user requests diagnostics.",
104
+ "The value summary must be evidence-backed — no exact cost savings claims.",
105
+ ];
106
+ }
107
+
108
+ // ── Prompt text ───────────────────────────────────────────────────────────────
109
+
110
+ function buildPromptText(commandSequence, approvalBoundaries, safetyRules) {
111
+ const steps = commandSequence.map((s) => ` ${s.step}. ${s.cmd}\n # ${s.purpose}`).join("\n");
112
+ const boundaries = approvalBoundaries.map((b) => ` - ${b.surface}: ${b.rule}`).join("\n");
113
+ const rules = safetyRules.map((r) => ` - ${r}`).join("\n");
114
+
115
+ return `You are activating Avorelo in this repo for me.
116
+
117
+ Run these exact commands in order, from the project root. Use the commands as
118
+ written (npx avorelo@latest ...). Do NOT invent setup steps, do NOT install
119
+ anything else, and do NOT use internal commands like \`node bin/avorelo\`.
120
+ Stop immediately if a step fails and report the reason plus one next action.
121
+
122
+ Steps:
123
+ ${steps}
124
+
125
+ Verify before reporting success:
126
+ - Step 1 output says activation is "ready" or "already active".
127
+ - Step 2 (status) does NOT say "not activated".
128
+ - Step 3 (open) shows at least one activation receipt.
129
+ - The activation state file exists under .avorelo/ in your project.
130
+ If any of these is not true, STOP and report what failed — do not claim success.
131
+
132
+ Approval boundaries (NEVER bypass these):
133
+ ${boundaries}
134
+
135
+ Safety rules:
136
+ ${rules}
137
+
138
+ Local-first: activation must not require signup. Do not create an account or ask
139
+ me to sign up to reach first value — everything runs locally with no account
140
+ required. Do not touch unrelated app code, do not deploy, do not publish.
141
+
142
+ After the steps complete, return a compact summary:
143
+ - Activation status (ready / already active / needs attention)
144
+ - What Avorelo set up automatically
145
+ - Where the status/state/receipts live
146
+ - One clear next action
147
+
148
+ Do not claim public launch readiness. Do not claim exact/guaranteed savings.
149
+ Keep output compact.`;
150
+ }
151
+
152
+ // ── Expected outputs ──────────────────────────────────────────────────────────
153
+
154
+ function buildExpectedOutputs() {
155
+ return [
156
+ { step: "activate", shape: "avorelo.activation.canonical.v1", keyField: "activated" },
157
+ { step: "status", shape: "avorelo status (activation: ready)", keyField: "activation.status" },
158
+ { step: "open", shape: "avorelo open (receipts and proof)", keyField: "activation.status" },
159
+ { step: "verify", shape: "avorelo verify (invariants pass)", keyField: "summary" },
160
+ ];
161
+ }
162
+
163
+ // ── Build prompt receipt ──────────────────────────────────────────────────────
164
+
165
+ function buildAiInstallPrompt(cwd, options = {}) {
166
+ const commandSequence = buildCommandSequence();
167
+ const approvalBoundaries = buildApprovalBoundaries();
168
+ const safetyRules = buildSafetyRules();
169
+ const promptText = buildPromptText(commandSequence, approvalBoundaries, safetyRules);
170
+ const expectedOutputs = buildExpectedOutputs();
171
+
172
+ // Check if activation module is available
173
+ let activationAvailable = false;
174
+ try {
175
+ require("./alpha-activation");
176
+ activationAvailable = true;
177
+ } catch {}
178
+
179
+ // Check if prelaunch readiness module is available
180
+ let prelaunchAvailable = false;
181
+ try {
182
+ require("./prelaunch-activation-readiness");
183
+ prelaunchAvailable = true;
184
+ } catch {}
185
+
186
+ const status = activationAvailable ? "ready" : "partial";
187
+
188
+ const receipt = {
189
+ contract: CONTRACT,
190
+ schemaVersion: SCHEMA_VERSION,
191
+ createdAt: nowIso(),
192
+ status,
193
+ promptText,
194
+ commandSequence,
195
+ approvalBoundaries,
196
+ safetyRules,
197
+ expectedOutputs,
198
+ nextAction: "Copy the promptText and paste it into Claude Code, Codex, Cursor, VS Code, or your AI coding agent.",
199
+ activationAvailable,
200
+ prelaunchAvailable,
201
+ redacted: true,
202
+ };
203
+
204
+ try {
205
+ appendProductLearningEvent(cwd, {
206
+ eventName: "ai_install_prompt_generated",
207
+ status: receipt.status,
208
+ activationAvailable,
209
+ prelaunchAvailable,
210
+ });
211
+ } catch {}
212
+
213
+ return receipt;
214
+ }
215
+
216
+ // ── Build install plan (metadata without full prompt text) ────────────────────
217
+
218
+ function buildAiInstallPlan(cwd, options = {}) {
219
+ return {
220
+ contract: CONTRACT,
221
+ schemaVersion: SCHEMA_VERSION,
222
+ createdAt: nowIso(),
223
+ stepCount: buildCommandSequence().length,
224
+ approvalBoundaryCount: buildApprovalBoundaries().length,
225
+ safetyRuleCount: buildSafetyRules().length,
226
+ summary: "One-prompt AI install: activate → readiness → launch-hardening → token/context → mcp → hooks → first-value → support → prelaunch-readiness → proof",
227
+ safeForAutoRun: false,
228
+ requiresExplicitApproval: ["hooks apply", "mcp config changes", "global config changes"],
229
+ redacted: true,
230
+ };
231
+ }
232
+
233
+ // ── Artifact I/O ──────────────────────────────────────────────────────────────
234
+
235
+ function writeAiInstallPromptReceipt(cwd, receipt) {
236
+ const dir = path.join(cwd, PROMPT_DIR_REL);
237
+ fs.mkdirSync(dir, { recursive: true });
238
+ const latest = path.join(cwd, LATEST_PROMPT_REL);
239
+ // Never write raw secrets. Receipt has redacted:true.
240
+ // Strip promptText from the stored artifact (keep it in-memory only) to avoid
241
+ // accidentally committing repo-sensitive context.
242
+ const stored = Object.assign({}, receipt, { promptText: "[see formatAiInstallPromptText]" });
243
+ fs.writeFileSync(latest, JSON.stringify(stored, null, 2), "utf8");
244
+ return latest;
245
+ }
246
+
247
+ // ── Surface / format ──────────────────────────────────────────────────────────
248
+
249
+ function buildAiInstallPromptSurface(cwd, options = {}) {
250
+ const receipt = buildAiInstallPrompt(cwd, options);
251
+ return { receipt };
252
+ }
253
+
254
+ function formatAiInstallPromptText(receipt, options = {}) {
255
+ const lines = [
256
+ `Install Avorelo with AI`,
257
+ ``,
258
+ `Copy this prompt into Claude Code, Codex, Cursor, VS Code, or your AI coding agent:`,
259
+ ``,
260
+ `─────────────────────────────────────────────────────────────`,
261
+ receipt.promptText,
262
+ `─────────────────────────────────────────────────────────────`,
263
+ ``,
264
+ `What it will do:`,
265
+ ` - Check project readiness.`,
266
+ ` - Run safe activation.`,
267
+ ` - Verify hooks and MCP/tool governance.`,
268
+ ` - Request approval before config changes.`,
269
+ ` - Run first-value verification.`,
270
+ ` - Produce a compact value summary.`,
271
+ ``,
272
+ `Next:`,
273
+ ` - Paste the prompt into your AI coding session.`,
274
+ ``,
275
+ `Note: Hook apply requires explicit approval. MCP config is not modified automatically.`,
276
+ ];
277
+ return lines.join("\n");
278
+ }
279
+
280
+ module.exports = {
281
+ buildAiInstallPrompt,
282
+ buildAiInstallPlan,
283
+ writeAiInstallPromptReceipt,
284
+ buildAiInstallPromptSurface,
285
+ formatAiInstallPromptText,
286
+ // exposed for testing
287
+ buildCommandSequence,
288
+ buildApprovalBoundaries,
289
+ buildSafetyRules,
290
+ buildPromptText,
291
+ CONTRACT,
292
+ LATEST_PROMPT_REL,
293
+ };