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,219 @@
1
+ "use strict";
2
+
3
+ const fs = require("fs");
4
+ const path = require("path");
5
+ const {
6
+ ensureCcoDirs,
7
+ ensureProjectConfig,
8
+ safeReadJson,
9
+ safeWriteJson,
10
+ nowIso,
11
+ } = require("../fsx");
12
+ const { attemptAutoRecovery } = require("../upgrade-interruption-recovery");
13
+
14
+ const CONTEXT_PACK_REL = ".claude/cco/state/context-pack.json";
15
+ const ONBOARDING_REL = ".claude/cco/state/onboarding.json";
16
+
17
+ function buildDefaultOnboardingState() {
18
+ return {
19
+ status: "completed",
20
+ createdAt: nowIso(),
21
+ completedAt: nowIso(),
22
+ stepsCompleted: ["activation"],
23
+ hasSeenDashboard: false,
24
+ hasSeenStatus: true,
25
+ hasCompletedSession: false,
26
+ };
27
+ }
28
+
29
+ function buildContextPack(cwd, context) {
30
+ return {
31
+ version: 1,
32
+ generatedAt: nowIso(),
33
+ project: {
34
+ cwd: context.project.cwd,
35
+ gitDetected: context.project.gitDetected,
36
+ repoRoot: context.project.repoRoot,
37
+ packageJsonDetected: context.project.packageJsonDetected,
38
+ },
39
+ commands: {
40
+ status: "avorelo status --text",
41
+ audit: "avorelo audit",
42
+ activate: "npx avorelo@latest activate",
43
+ },
44
+ hosts: (context.detectedHosts || [])
45
+ .filter((host) => host.detected)
46
+ .map((host) => ({
47
+ id: host.id,
48
+ label: host.label,
49
+ depth: host.depth,
50
+ })),
51
+ };
52
+ }
53
+
54
+ function localFilesReady(cwd) {
55
+ return (
56
+ fs.existsSync(path.join(cwd, ".claude", "cco", "config.json")) &&
57
+ fs.existsSync(path.join(cwd, ".claude", "cco", "state", "onboarding.json")) &&
58
+ fs.existsSync(path.join(cwd, ".claude", "cco", "state", "context-pack.json"))
59
+ );
60
+ }
61
+
62
+ function runRepairEngine(cwd, context, options = {}) {
63
+ const repairEnabled = options.repair !== false;
64
+ const repairsAttempted = [];
65
+ const manualFixesRequired = [];
66
+ const issues = [];
67
+ let localSetupReady = false;
68
+
69
+ if (!context.environment.nodeDetected) {
70
+ issues.push({ id: "node_missing", classification: "blocking", reason: "Node.js is required to run Avorelo." });
71
+ manualFixesRequired.push({
72
+ id: "install_node",
73
+ label: "Install Node.js",
74
+ command: "https://nodejs.org/",
75
+ reason: "Avorelo activation requires Node.js in PATH.",
76
+ blocking: true,
77
+ });
78
+ }
79
+
80
+ if (!context.environment.npmDetected) {
81
+ issues.push({ id: "npm_missing", classification: "blocking", reason: "npm is required for the activation entrypoint." });
82
+ manualFixesRequired.push({
83
+ id: "install_npm",
84
+ label: "Restore npm in PATH",
85
+ command: null,
86
+ reason: "Avorelo activation uses npm/npx for the primary install and verification path.",
87
+ blocking: true,
88
+ });
89
+ }
90
+
91
+ if (repairEnabled && manualFixesRequired.every((fix) => !fix.blocking)) {
92
+ try {
93
+ ensureCcoDirs(cwd);
94
+ repairsAttempted.push({
95
+ id: "ensure_cco_dirs",
96
+ status: "applied",
97
+ reason: "Prepared local Avorelo directories.",
98
+ });
99
+ } catch (error) {
100
+ manualFixesRequired.push({
101
+ id: "fix_local_write_access",
102
+ label: "Restore local write access",
103
+ command: null,
104
+ reason: `Avorelo could not create project-local state: ${error.message}`,
105
+ blocking: true,
106
+ });
107
+ issues.push({ id: "write_access", classification: "blocking", reason: error.message });
108
+ }
109
+ }
110
+
111
+ if (repairEnabled && manualFixesRequired.every((fix) => !fix.blocking)) {
112
+ ensureProjectConfig(cwd);
113
+ repairsAttempted.push({
114
+ id: "ensure_project_config",
115
+ status: "applied",
116
+ reason: "Normalized project-local Avorelo config.",
117
+ });
118
+
119
+ const originalConsoleError = console.error;
120
+ let recovery;
121
+ try {
122
+ console.error = () => {};
123
+ recovery = attemptAutoRecovery(cwd);
124
+ } finally {
125
+ console.error = originalConsoleError;
126
+ }
127
+ if (recovery.success) {
128
+ repairsAttempted.push({
129
+ id: "upgrade_marker_repair",
130
+ status: "applied",
131
+ reason: recovery.recoveryType,
132
+ });
133
+ }
134
+
135
+ if (!safeReadJson(cwd, ONBOARDING_REL, null)) {
136
+ safeWriteJson(cwd, ONBOARDING_REL, buildDefaultOnboardingState());
137
+ repairsAttempted.push({
138
+ id: "create_onboarding_state",
139
+ status: "applied",
140
+ reason: "Created onboarding state for activation.",
141
+ });
142
+ }
143
+ } else if (!repairEnabled && !safeReadJson(cwd, ONBOARDING_REL, null)) {
144
+ issues.push({ id: "missing_onboarding_state", classification: "recoverable", reason: "Onboarding state is missing." });
145
+ manualFixesRequired.push({
146
+ id: "run_activation_with_repair",
147
+ label: "Run activation with repair enabled",
148
+ command: "npx avorelo@latest activate --repair",
149
+ reason: "Avorelo can recreate missing local state automatically when repair is enabled.",
150
+ blocking: false,
151
+ });
152
+ }
153
+
154
+ if (repairEnabled && manualFixesRequired.every((fix) => !fix.blocking)) {
155
+ const contextPack = buildContextPack(cwd, context);
156
+ safeWriteJson(cwd, CONTEXT_PACK_REL, contextPack);
157
+ repairsAttempted.push({
158
+ id: "generate_context_pack",
159
+ status: "applied",
160
+ reason: "Generated a reusable local context pack.",
161
+ });
162
+ }
163
+
164
+ const hostConfiguration = [];
165
+ if (repairEnabled && Array.isArray(context.detectedHosts)) {
166
+ context.detectedHosts
167
+ .filter((host) => host.detected && host.canAutoConfigure && typeof host.configureIfSafe === "function")
168
+ .forEach((host) => {
169
+ try {
170
+ const result = host.configureIfSafe(cwd, { contextPackRel: CONTEXT_PACK_REL });
171
+ hostConfiguration.push({
172
+ id: host.id,
173
+ applied: result?.applied === true,
174
+ integrationId: result?.integrationId || null,
175
+ });
176
+ if (result?.applied) {
177
+ repairsAttempted.push({
178
+ id: `configure_${host.id}`,
179
+ status: "applied",
180
+ reason: `Prepared ${host.label} project-local artifacts.`,
181
+ });
182
+ }
183
+ } catch (error) {
184
+ issues.push({
185
+ id: `${host.id}_configure_failed`,
186
+ classification: "optional",
187
+ reason: error.message,
188
+ });
189
+ }
190
+ });
191
+ }
192
+
193
+ localSetupReady = manualFixesRequired.every((fix) => !fix.blocking) && localFilesReady(cwd);
194
+
195
+ if (!context.project.gitDetected) {
196
+ issues.push({
197
+ id: "git_repo_not_detected",
198
+ classification: "optional",
199
+ reason: "Git repo not detected. Avorelo still runs in local mode.",
200
+ });
201
+ }
202
+
203
+ return {
204
+ repairEnabled,
205
+ localSetupReady,
206
+ issues,
207
+ repairsAttempted,
208
+ manualFixesRequired,
209
+ hostConfiguration,
210
+ contextPackRel: CONTEXT_PACK_REL,
211
+ };
212
+ }
213
+
214
+ module.exports = {
215
+ CONTEXT_PACK_REL,
216
+ buildDefaultOnboardingState,
217
+ buildContextPack,
218
+ runRepairEngine,
219
+ };
@@ -0,0 +1,346 @@
1
+ "use strict";
2
+
3
+ // ── Activation Always-On Run Entry v1 ─────────────────────────────────────────
4
+ //
5
+ // Contract: avorelo.runEntry.v1
6
+ //
7
+ // Installs a durable, local-first "run entry" contract into a project when it is
8
+ // activated, so future supported AI coding sessions know to start with Avorelo
9
+ // (Session Collision Guard before edits/pushes, Workstream Preflight before new
10
+ // work) without the user repeating those instructions every session.
11
+ //
12
+ // What it installs into the TARGET project (cwd):
13
+ // 1. A marker-bracketed "Avorelo Run Entry" block in AGENTS.md (created if
14
+ // missing; the block is upserted in place; all user content outside the
15
+ // markers is preserved).
16
+ // 2. A machine-readable contract record at
17
+ // .claude/cco/run-entry/run-entry.json (for verify/repair/idempotency).
18
+ // 3. run-entry metadata on the canonical activation state
19
+ // .claude/cco/state/activation.json (runEntry.*).
20
+ //
21
+ // Honesty boundary: this makes Avorelo the default starting layer for SUPPORTED
22
+ // local sessions that read project instruction files. It does NOT and cannot
23
+ // force arbitrary external AI tools to obey unless they read these instructions
24
+ // or run through an Avorelo entrypoint. No runtime enforcement is added here.
25
+ //
26
+ // Safety: only local files under the target project are written. No git
27
+ // mutations, no push/merge, no deploy/publish, no package-lock writes, no hooks.
28
+
29
+ const fs = require("fs");
30
+ const path = require("path");
31
+ const { safeReadJson, safeWriteJson, safeWriteText, nowIso } = require("../fsx");
32
+ const {
33
+ ACTIVATION_STATE_REL,
34
+ readActivationState,
35
+ writeActivationState,
36
+ } = require("./activation-state");
37
+
38
+ const RUN_ENTRY_CONTRACT = "avorelo.runEntry.v1";
39
+ const RUN_ENTRY_SCHEMA_VERSION = 1;
40
+ const BLOCK_SCHEMA_VERSION = 1;
41
+
42
+ const RUN_ENTRY_DIR_REL = ".claude/cco/run-entry";
43
+ const RUN_ENTRY_CONTRACT_REL = `${RUN_ENTRY_DIR_REL}/run-entry.json`;
44
+ const INSTRUCTION_SURFACE_REL = "AGENTS.md";
45
+
46
+ const GUARD_SCRIPT_REL = "scripts/avorelo-session-collision-guard.js";
47
+ const PREFLIGHT_SCRIPT_REL = "scripts/avorelo-workstream-preflight.js";
48
+
49
+ const BLOCK_START = `<!-- AVORELO:RUN-ENTRY:START schemaVersion=${BLOCK_SCHEMA_VERSION} (managed by Avorelo; edit only outside these markers) -->`;
50
+ const BLOCK_END = "<!-- AVORELO:RUN-ENTRY:END -->";
51
+ // Version-agnostic matcher so an older managed block is detected and upgraded.
52
+ const BLOCK_RE = /<!-- AVORELO:RUN-ENTRY:START[\s\S]*?<!-- AVORELO:RUN-ENTRY:END -->/;
53
+
54
+ // The Avorelo installation root (where scripts/lib lives) — used only to read
55
+ // the Avorelo package version, never written to.
56
+ const AVORELO_ROOT = path.resolve(__dirname, "../../..");
57
+
58
+ function readAvoreloVersion() {
59
+ try {
60
+ const pkg = JSON.parse(fs.readFileSync(path.join(AVORELO_ROOT, "package.json"), "utf8"));
61
+ return typeof pkg.version === "string" ? pkg.version : null;
62
+ } catch {
63
+ return null;
64
+ }
65
+ }
66
+
67
+ // ── Instruction block ─────────────────────────────────────────────────────────
68
+
69
+ function buildInstructionBlock() {
70
+ return [
71
+ BLOCK_START,
72
+ "## Avorelo Run Entry (v1)",
73
+ "",
74
+ "This project is activated with Avorelo. Supported AI coding sessions should start here.",
75
+ "Avorelo manages the content between these markers; put your own notes outside them.",
76
+ "",
77
+ "1. Before editing files, run:",
78
+ " `node scripts/avorelo-session-collision-guard.js`",
79
+ "2. If the result is not `safe_to_continue`, stop and report. Do not edit or push.",
80
+ "3. Before starting a new workstream, run:",
81
+ " `node scripts/avorelo-workstream-preflight.js \"<workstream>\"`",
82
+ "4. If the shared clone is dirty, work in a clean isolated git worktree.",
83
+ "5. Do not push, force-push, or merge without explicit user approval.",
84
+ "6. Do not claim deploy / publish / production unless it actually happened.",
85
+ "7. Use Avorelo validators and dogfood artifacts for proof.",
86
+ "",
87
+ "Fail open when advisory data is missing; stop and report on dirty or collision risk.",
88
+ "Note: external tools that ignore project instructions may still need manual routing.",
89
+ "(If Avorelo is installed as a package, run the guard/preflight via the packaged scripts.)",
90
+ BLOCK_END,
91
+ ].join("\n");
92
+ }
93
+
94
+ // ── Guard / preflight availability (advisory) ─────────────────────────────────
95
+
96
+ function detectScript(cwd, relPath) {
97
+ const local = path.join(cwd, relPath);
98
+ if (fs.existsSync(local)) return { available: true, path: relPath };
99
+ const packaged = path.join(cwd, "node_modules", "avorelo", relPath);
100
+ if (fs.existsSync(packaged)) return { available: true, path: `node_modules/avorelo/${relPath}` };
101
+ return { available: false, path: null };
102
+ }
103
+
104
+ function detectGuardPreflight(cwd) {
105
+ return {
106
+ guard: detectScript(cwd, GUARD_SCRIPT_REL),
107
+ preflight: detectScript(cwd, PREFLIGHT_SCRIPT_REL),
108
+ };
109
+ }
110
+
111
+ // ── Instruction surface upsert (preserves user content) ───────────────────────
112
+
113
+ function safeReadText(absPath) {
114
+ try {
115
+ return fs.existsSync(absPath) ? fs.readFileSync(absPath, "utf8") : null;
116
+ } catch {
117
+ return null;
118
+ }
119
+ }
120
+
121
+ function upsertInstructionSurface(cwd) {
122
+ const absPath = path.join(cwd, INSTRUCTION_SURFACE_REL);
123
+ const desiredBlock = buildInstructionBlock();
124
+ const existing = safeReadText(absPath);
125
+
126
+ if (existing === null) {
127
+ const content = `# AGENTS\n\n${desiredBlock}\n`;
128
+ safeWriteText(cwd, INSTRUCTION_SURFACE_REL, content);
129
+ return { surface: INSTRUCTION_SURFACE_REL, action: "created" };
130
+ }
131
+
132
+ if (BLOCK_RE.test(existing)) {
133
+ const current = existing.match(BLOCK_RE)[0];
134
+ if (current === desiredBlock) {
135
+ return { surface: INSTRUCTION_SURFACE_REL, action: "unchanged" };
136
+ }
137
+ // Upgrade the managed block in place; everything else is preserved verbatim.
138
+ const updated = existing.replace(BLOCK_RE, desiredBlock);
139
+ safeWriteText(cwd, INSTRUCTION_SURFACE_REL, updated);
140
+ return { surface: INSTRUCTION_SURFACE_REL, action: "updated" };
141
+ }
142
+
143
+ // File exists but has no managed block: append it, preserving user content.
144
+ const sep = existing.endsWith("\n") ? "\n" : "\n\n";
145
+ safeWriteText(cwd, INSTRUCTION_SURFACE_REL, `${existing}${sep}${desiredBlock}\n`);
146
+ return { surface: INSTRUCTION_SURFACE_REL, action: "installed" };
147
+ }
148
+
149
+ function instructionSurfaceHasBlock(cwd) {
150
+ const existing = safeReadText(path.join(cwd, INSTRUCTION_SURFACE_REL));
151
+ if (existing === null) return { exists: false, hasBlock: false, current: false };
152
+ const match = existing.match(BLOCK_RE);
153
+ return {
154
+ exists: true,
155
+ hasBlock: Boolean(match),
156
+ current: Boolean(match) && match[0] === buildInstructionBlock(),
157
+ };
158
+ }
159
+
160
+ // ── Contract record ───────────────────────────────────────────────────────────
161
+
162
+ function writeContractRecord(cwd, availability) {
163
+ const existing = safeReadJson(cwd, RUN_ENTRY_CONTRACT_REL, null);
164
+ const installedAt = existing && existing.installedAt ? existing.installedAt : nowIso();
165
+
166
+ // Meaningful (timestamp-independent) content, used to decide if a write is needed
167
+ // so re-activation is truly idempotent and does not report a phantom repair.
168
+ const meaningful = {
169
+ schemaVersion: RUN_ENTRY_SCHEMA_VERSION,
170
+ contract: RUN_ENTRY_CONTRACT,
171
+ blockSchemaVersion: BLOCK_SCHEMA_VERSION,
172
+ instructionSurfaces: [INSTRUCTION_SURFACE_REL],
173
+ guardScript: GUARD_SCRIPT_REL,
174
+ preflightScript: PREFLIGHT_SCRIPT_REL,
175
+ guardAvailable: availability.guard.available,
176
+ preflightAvailable: availability.preflight.available,
177
+ };
178
+
179
+ if (existing) {
180
+ const existingMeaningful = {
181
+ schemaVersion: existing.schemaVersion,
182
+ contract: existing.contract,
183
+ blockSchemaVersion: existing.blockSchemaVersion,
184
+ instructionSurfaces: existing.instructionSurfaces,
185
+ guardScript: existing.guardScript,
186
+ preflightScript: existing.preflightScript,
187
+ guardAvailable: existing.guardAvailable,
188
+ preflightAvailable: existing.preflightAvailable,
189
+ };
190
+ if (JSON.stringify(existingMeaningful) === JSON.stringify(meaningful)) {
191
+ return { file: RUN_ENTRY_CONTRACT_REL, action: "unchanged", record: existing };
192
+ }
193
+ }
194
+
195
+ const record = { ...meaningful, contract: RUN_ENTRY_CONTRACT, installedAt, updatedAt: nowIso() };
196
+ const action = !existing
197
+ ? "created"
198
+ : existing.schemaVersion !== RUN_ENTRY_SCHEMA_VERSION
199
+ ? "upgraded"
200
+ : "updated";
201
+ safeWriteJson(cwd, RUN_ENTRY_CONTRACT_REL, record);
202
+ return { file: RUN_ENTRY_CONTRACT_REL, action, record };
203
+ }
204
+
205
+ // ── Activation state run-entry metadata ───────────────────────────────────────
206
+
207
+ function updateActivationStateRunEntry(cwd, info) {
208
+ // Only annotate an existing state file; never fabricate full activation state
209
+ // here (that is owned by the activation flow). If no state exists yet, a
210
+ // minimal record is still written so verify/repair has something to read.
211
+ const state = readActivationState(cwd);
212
+ state.runEntry = {
213
+ installed: true,
214
+ schemaVersion: RUN_ENTRY_SCHEMA_VERSION,
215
+ installedAt: state.runEntry && state.runEntry.installedAt ? state.runEntry.installedAt : nowIso(),
216
+ updatedAt: nowIso(),
217
+ activationSource: info.activationSource || "unknown",
218
+ avoreloVersion: info.avoreloVersion || null,
219
+ installedRunEntryContract: true,
220
+ installedInstructionSurfaces: [INSTRUCTION_SURFACE_REL],
221
+ lastVerificationResult: info.lastVerificationResult || null,
222
+ };
223
+ state.updatedAt = nowIso();
224
+ writeActivationState(cwd, state);
225
+ return state.runEntry;
226
+ }
227
+
228
+ // ── Install / repair (idempotent) ─────────────────────────────────────────────
229
+
230
+ function installRunEntry(cwd, options = {}) {
231
+ const availability = detectGuardPreflight(cwd);
232
+ const surface = upsertInstructionSurface(cwd);
233
+ const contract = writeContractRecord(cwd, availability);
234
+
235
+ const verification = verifyRunEntry(cwd, { availability });
236
+
237
+ const runEntryState = updateActivationStateRunEntry(cwd, {
238
+ activationSource: options.activationSource || "cli",
239
+ avoreloVersion: readAvoreloVersion(),
240
+ lastVerificationResult: verification.ok ? "pass" : "repaired",
241
+ });
242
+
243
+ // Classify per-file actions for a compact, honest summary.
244
+ const created = [];
245
+ const updated = [];
246
+ const unchanged = [];
247
+ for (const item of [surface, { surface: contract.file, action: contract.action }]) {
248
+ if (item.action === "created") created.push(item.surface);
249
+ else if (item.action === "installed" || item.action === "updated" || item.action === "upgraded") updated.push(item.surface);
250
+ else unchanged.push(item.surface);
251
+ }
252
+
253
+ return {
254
+ contract: RUN_ENTRY_CONTRACT,
255
+ schemaVersion: RUN_ENTRY_SCHEMA_VERSION,
256
+ installedInstructionSurfaces: [INSTRUCTION_SURFACE_REL],
257
+ contractPath: RUN_ENTRY_CONTRACT_REL,
258
+ created,
259
+ updated,
260
+ unchanged,
261
+ guardAvailable: availability.guard.available,
262
+ preflightAvailable: availability.preflight.available,
263
+ verification,
264
+ runEntryState,
265
+ };
266
+ }
267
+
268
+ // ── Verify ────────────────────────────────────────────────────────────────────
269
+ //
270
+ // Required local contract files: the instruction surface block + the contract
271
+ // record. These fail/repair if missing. Guard/preflight availability is
272
+ // ADVISORY (fail open) because a package-installed project may expose them at a
273
+ // different path or not at all.
274
+
275
+ function verifyRunEntry(cwd, options = {}) {
276
+ const availability = options.availability || detectGuardPreflight(cwd);
277
+ const surfaceState = instructionSurfaceHasBlock(cwd);
278
+ const contractExists = safeReadJson(cwd, RUN_ENTRY_CONTRACT_REL, null) !== null;
279
+ const stateExists = fs.existsSync(path.join(cwd, ACTIVATION_STATE_REL));
280
+
281
+ const checks = {
282
+ activationStateExists: stateExists,
283
+ runEntryContractExists: contractExists,
284
+ instructionSurfaceExists: surfaceState.exists,
285
+ instructionSurfaceHasBlock: surfaceState.hasBlock,
286
+ instructionSurfaceCurrent: surfaceState.current,
287
+ guardAvailable: availability.guard.available, // advisory
288
+ preflightAvailable: availability.preflight.available, // advisory
289
+ };
290
+
291
+ // Only required local contract files gate ok; advisory availability does not.
292
+ const missingRequired = [];
293
+ if (!checks.runEntryContractExists) missingRequired.push(RUN_ENTRY_CONTRACT_REL);
294
+ if (!checks.instructionSurfaceHasBlock) missingRequired.push(`${INSTRUCTION_SURFACE_REL} (run-entry block)`);
295
+
296
+ const advisory = [];
297
+ if (!checks.guardAvailable) advisory.push(GUARD_SCRIPT_REL);
298
+ if (!checks.preflightAvailable) advisory.push(PREFLIGHT_SCRIPT_REL);
299
+
300
+ return {
301
+ ok: missingRequired.length === 0,
302
+ checks,
303
+ missingRequired,
304
+ advisoryMissing: advisory,
305
+ repairCommand: "npx avorelo@latest activate",
306
+ };
307
+ }
308
+
309
+ // ── Compact summary line(s) for activation output ─────────────────────────────
310
+
311
+ function formatRunEntrySummary(result) {
312
+ const lines = [];
313
+ lines.push("Run entry:");
314
+ lines.push(` + Instruction surface: ${result.installedInstructionSurfaces.join(", ")}`);
315
+ lines.push(` + Contract: ${result.contractPath}`);
316
+ const changed = [...result.created, ...result.updated];
317
+ if (changed.length) {
318
+ lines.push(` + Installed/repaired: ${changed.join(", ")}`);
319
+ } else {
320
+ lines.push(" + Already up to date (idempotent)");
321
+ }
322
+ lines.push(` + Session Collision Guard available: ${result.guardAvailable ? "yes" : "no (advisory)"}`);
323
+ lines.push(` + Workstream Preflight available: ${result.preflightAvailable ? "yes" : "no (advisory)"}`);
324
+ return lines.join("\n");
325
+ }
326
+
327
+ module.exports = {
328
+ RUN_ENTRY_CONTRACT,
329
+ RUN_ENTRY_SCHEMA_VERSION,
330
+ BLOCK_SCHEMA_VERSION,
331
+ RUN_ENTRY_DIR_REL,
332
+ RUN_ENTRY_CONTRACT_REL,
333
+ INSTRUCTION_SURFACE_REL,
334
+ GUARD_SCRIPT_REL,
335
+ PREFLIGHT_SCRIPT_REL,
336
+ BLOCK_START,
337
+ BLOCK_END,
338
+ buildInstructionBlock,
339
+ detectGuardPreflight,
340
+ upsertInstructionSurface,
341
+ instructionSurfaceHasBlock,
342
+ writeContractRecord,
343
+ installRunEntry,
344
+ verifyRunEntry,
345
+ formatRunEntrySummary,
346
+ };