agentera 3.0.0-dev.4 → 3.0.0-dev.41

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 (840) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +79 -22
  3. package/bundle/.agentera-npx-bundle.json +1 -1
  4. package/bundle/CHANGELOG.md +1261 -0
  5. package/bundle/DESIGN.md +229 -0
  6. package/bundle/LICENSE +201 -0
  7. package/bundle/README.md +136 -0
  8. package/bundle/UPGRADE.md +201 -0
  9. package/bundle/extract-corpus-parity.json +21 -0
  10. package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
  11. package/bundle/references/adapters/package-manifest-interface-model.yaml +42 -252
  12. package/bundle/references/adapters/package-publication.json +43 -0
  13. package/bundle/references/adapters/package-registry.yaml +20 -188
  14. package/bundle/references/adapters/package-surface-characterization.md +59 -48
  15. package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
  16. package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
  17. package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
  18. package/bundle/references/adapters/runtime-retired-resources.yaml +97 -0
  19. package/bundle/references/analysis/benchmark.md +10 -6
  20. package/bundle/references/analysis/evidence-tier-authority.yaml +518 -0
  21. package/bundle/references/analysis/startup-measurement-contract.yaml +37 -26
  22. package/bundle/references/analysis/verification-policy.yaml +143 -0
  23. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +20 -10
  24. package/bundle/references/artifacts/glossary-entry-contract.yaml +1254 -0
  25. package/bundle/references/artifacts/state-storage-authority.yaml +2930 -0
  26. package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
  27. package/bundle/references/cli/agent-ready-state-contract.yaml +133 -71
  28. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +7 -8
  29. package/bundle/references/cli/audience-namespace-cli-migration.yaml +73 -33
  30. package/bundle/references/cli/bundle-skill-vocabulary.yaml +12 -49
  31. package/bundle/references/cli/capability-instruction-contract.yaml +96 -58
  32. package/bundle/references/cli/capability-instruction-structure.md +144 -0
  33. package/bundle/references/cli/capability-tool-classification.yaml +14 -14
  34. package/bundle/references/cli/coexistence-probe.yaml +13 -0
  35. package/bundle/references/cli/hybrid-route-contract.yaml +416 -0
  36. package/bundle/references/cli/parity-expected-actual-template.md +30 -0
  37. package/bundle/references/cli/prime-consumer-compatibility.yaml +701 -0
  38. package/bundle/references/cli/routing-execution-vocabulary.yaml +16 -38
  39. package/bundle/references/cli/routing-model.md +139 -0
  40. package/bundle/references/cli/single-name-protocol.yaml +42 -0
  41. package/bundle/references/cli/trigger-schema-enrichment.md +140 -0
  42. package/bundle/references/cli/update-channels.yaml +35 -2
  43. package/bundle/references/cli/upgrade-repair-wording.md +25 -0
  44. package/bundle/references/cli/v3-handoff-manifest.schema.yaml +97 -0
  45. package/bundle/references/cli/vocabulary-index.yaml +23 -18
  46. package/bundle/references/cli/vocabulary.md +341 -328
  47. package/bundle/references/meta/documentation-inventory.md +10 -3
  48. package/bundle/registry.json +14 -14
  49. package/bundle/skills/agentera/SKILL.md +202 -408
  50. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +84 -0
  51. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/exit.yaml +2 -2
  52. package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +25 -0
  53. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/validation.yaml +37 -18
  54. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +102 -0
  55. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +6 -5
  56. package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
  57. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +176 -0
  58. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/artifacts.yaml +12 -12
  59. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/exit.yaml +5 -5
  60. package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +16 -0
  61. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/validation.yaml +7 -7
  62. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +51 -0
  63. package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/exit.yaml +2 -2
  64. package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +20 -0
  65. package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +144 -0
  66. package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +80 -0
  67. package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +16 -0
  68. package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/validation.yaml +18 -18
  69. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/artifacts.yaml +17 -17
  70. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/exit.yaml +2 -2
  71. package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +16 -0
  72. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/validation.yaml +9 -9
  73. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +76 -0
  74. package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/exit.yaml +9 -7
  75. package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +23 -0
  76. package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +121 -0
  77. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +66 -0
  78. package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/exit.yaml +2 -2
  79. package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +23 -0
  80. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +121 -0
  81. package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +23 -0
  82. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +6 -5
  83. package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +20 -0
  84. package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +115 -0
  85. package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +24 -0
  86. package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +16 -0
  87. package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/validation.yaml +2 -2
  88. package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +73 -0
  89. package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +22 -0
  90. package/bundle/skills/agentera/capabilities/{hej → status}/schemas/validation.yaml +5 -5
  91. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/artifacts.yaml +16 -16
  92. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/exit.yaml +7 -6
  93. package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +23 -0
  94. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/validation.yaml +18 -20
  95. package/bundle/skills/agentera/capability_schema_contract.yaml +200 -37
  96. package/bundle/skills/agentera/protocol.yaml +31 -31
  97. package/bundle/skills/agentera/references/contract.md +387 -329
  98. package/bundle/skills/agentera/route-phrases.yaml +81 -0
  99. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +5 -4
  100. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +40 -22
  101. package/bundle/skills/agentera/schemas/artifacts/design.yaml +5 -4
  102. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +15 -19
  103. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +145 -14
  104. package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +82 -0
  105. package/bundle/skills/agentera/schemas/artifacts/health.yaml +58 -21
  106. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +22 -8
  107. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +419 -33
  108. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +143 -53
  109. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +343 -31
  110. package/bundle/skills/agentera/schemas/artifacts/vision.yaml +3 -3
  111. package/dist/analytics/extractCorpus/cli.js +191 -0
  112. package/dist/analytics/extractCorpus/cli.js.map +1 -0
  113. package/dist/analytics/extractCorpus/copilotSessions.js +276 -0
  114. package/dist/analytics/extractCorpus/copilotSessions.js.map +1 -0
  115. package/dist/analytics/extractCorpus/core.js +393 -0
  116. package/dist/analytics/extractCorpus/core.js.map +1 -0
  117. package/dist/analytics/extractCorpus/corpus.js +168 -0
  118. package/dist/analytics/extractCorpus/corpus.js.map +1 -0
  119. package/dist/analytics/extractCorpus/coverageAudit.js +261 -0
  120. package/dist/analytics/extractCorpus/coverageAudit.js.map +1 -0
  121. package/dist/analytics/extractCorpus/cursorSessions.js +426 -0
  122. package/dist/analytics/extractCorpus/cursorSessions.js.map +1 -0
  123. package/dist/analytics/extractCorpus/evidenceTiers.js +604 -0
  124. package/dist/analytics/extractCorpus/evidenceTiers.js.map +1 -0
  125. package/dist/analytics/extractCorpus/extractCorpusParity.js +106 -0
  126. package/dist/analytics/extractCorpus/extractCorpusParity.js.map +1 -0
  127. package/dist/analytics/extractCorpus/filesystemSources.js +119 -0
  128. package/dist/analytics/extractCorpus/filesystemSources.js.map +1 -0
  129. package/dist/analytics/extractCorpus/index.js +15 -0
  130. package/dist/analytics/extractCorpus/index.js.map +1 -0
  131. package/dist/analytics/extractCorpus/jsonlSessions.js +205 -0
  132. package/dist/analytics/extractCorpus/jsonlSessions.js.map +1 -0
  133. package/dist/analytics/extractCorpus/sqliteCaps.js +44 -0
  134. package/dist/analytics/extractCorpus/sqliteCaps.js.map +1 -0
  135. package/dist/analytics/extractCorpus/sqliteSessions.js +368 -0
  136. package/dist/analytics/extractCorpus/sqliteSessions.js.map +1 -0
  137. package/dist/analytics/extractCorpus/tierReader.js +109 -0
  138. package/dist/analytics/extractCorpus/tierReader.js.map +1 -0
  139. package/dist/analytics/extractCorpus.js +2 -1790
  140. package/dist/analytics/extractCorpus.js.map +1 -1
  141. package/dist/analytics/glossaryAdviceResolution.js +167 -0
  142. package/dist/analytics/glossaryAdviceResolution.js.map +1 -0
  143. package/dist/analytics/glossaryInputAcquisition.js +320 -0
  144. package/dist/analytics/glossaryInputAcquisition.js.map +1 -0
  145. package/dist/analytics/personalGlossaryAdmission.js +134 -0
  146. package/dist/analytics/personalGlossaryAdmission.js.map +1 -0
  147. package/dist/analytics/personalGlossaryProfile.js +220 -0
  148. package/dist/analytics/personalGlossaryProfile.js.map +1 -0
  149. package/dist/analytics/profileSignals.js +212 -0
  150. package/dist/analytics/profileSignals.js.map +1 -0
  151. package/dist/analytics/usageStats.js +169 -41
  152. package/dist/analytics/usageStats.js.map +1 -1
  153. package/dist/audit/terminologyDrift.js +282 -0
  154. package/dist/audit/terminologyDrift.js.map +1 -0
  155. package/dist/bin/agentera.js +3 -1
  156. package/dist/bin/agentera.js.map +1 -1
  157. package/dist/capabilities/audit/instructions.js +17 -0
  158. package/dist/capabilities/audit/instructions.js.map +1 -0
  159. package/dist/capabilities/build/instructions.js +57 -0
  160. package/dist/capabilities/build/instructions.js.map +1 -0
  161. package/dist/capabilities/design/instructions.js +5 -0
  162. package/dist/capabilities/design/instructions.js.map +1 -0
  163. package/dist/capabilities/discuss/instructions.js +30 -0
  164. package/dist/capabilities/discuss/instructions.js.map +1 -0
  165. package/dist/capabilities/document/instructions.js +12 -0
  166. package/dist/capabilities/document/instructions.js.map +1 -0
  167. package/dist/capabilities/index.js +39 -0
  168. package/dist/capabilities/index.js.map +1 -0
  169. package/dist/capabilities/optimize/instructions.js +15 -0
  170. package/dist/capabilities/optimize/instructions.js.map +1 -0
  171. package/dist/capabilities/orchestrate/instructions.js +41 -0
  172. package/dist/capabilities/orchestrate/instructions.js.map +1 -0
  173. package/dist/capabilities/plan/instructions.js +33 -0
  174. package/dist/capabilities/plan/instructions.js.map +1 -0
  175. package/dist/capabilities/profile/instructions.js +71 -0
  176. package/dist/capabilities/profile/instructions.js.map +1 -0
  177. package/dist/capabilities/research/instructions.js +6 -0
  178. package/dist/capabilities/research/instructions.js.map +1 -0
  179. package/dist/capabilities/status/instructions.js +12 -0
  180. package/dist/capabilities/status/instructions.js.map +1 -0
  181. package/dist/capabilities/status/startupInstructions.js +39 -0
  182. package/dist/capabilities/status/startupInstructions.js.map +1 -0
  183. package/dist/capabilities/vision/instructions.js +5 -0
  184. package/dist/capabilities/vision/instructions.js.map +1 -0
  185. package/dist/cli/appContext.js +30 -23
  186. package/dist/cli/appContext.js.map +1 -1
  187. package/dist/cli/argvalidate.js.map +1 -1
  188. package/dist/cli/capabilityContext/benchmark.js +565 -0
  189. package/dist/cli/capabilityContext/benchmark.js.map +1 -0
  190. package/dist/cli/capabilityContext/bespoke.js +45 -0
  191. package/dist/cli/capabilityContext/bespoke.js.map +1 -0
  192. package/dist/cli/capabilityContext/build.js +244 -0
  193. package/dist/cli/capabilityContext/build.js.map +1 -0
  194. package/dist/cli/capabilityContext/closeout.js +235 -0
  195. package/dist/cli/capabilityContext/closeout.js.map +1 -0
  196. package/dist/cli/capabilityContext/contract.js +214 -0
  197. package/dist/cli/capabilityContext/contract.js.map +1 -0
  198. package/dist/cli/capabilityContext/evidence.js +465 -0
  199. package/dist/cli/capabilityContext/evidence.js.map +1 -0
  200. package/dist/cli/capabilityContext/index.js +4 -0
  201. package/dist/cli/capabilityContext/index.js.map +1 -0
  202. package/dist/cli/capabilityContext/orchestration.js +133 -0
  203. package/dist/cli/capabilityContext/orchestration.js.map +1 -0
  204. package/dist/cli/capabilityContext/planState.js +261 -0
  205. package/dist/cli/capabilityContext/planState.js.map +1 -0
  206. package/dist/cli/capabilityContext/progress.js +143 -0
  207. package/dist/cli/capabilityContext/progress.js.map +1 -0
  208. package/dist/cli/capabilityContext/projectVerification.js +410 -0
  209. package/dist/cli/capabilityContext/projectVerification.js.map +1 -0
  210. package/dist/cli/capabilityContext/shared.js +100 -0
  211. package/dist/cli/capabilityContext/shared.js.map +1 -0
  212. package/dist/cli/capabilityContext/slim.js +153 -0
  213. package/dist/cli/capabilityContext/slim.js.map +1 -0
  214. package/dist/cli/capabilityContext/startup.js +278 -0
  215. package/dist/cli/capabilityContext/startup.js.map +1 -0
  216. package/dist/cli/capabilityContext/types.js +56 -0
  217. package/dist/cli/capabilityContext/types.js.map +1 -0
  218. package/dist/cli/capabilityContext.js +1 -2420
  219. package/dist/cli/capabilityContext.js.map +1 -1
  220. package/dist/cli/commands/appHome.js +23 -0
  221. package/dist/cli/commands/appHome.js.map +1 -0
  222. package/dist/cli/commands/capability.js +3 -10
  223. package/dist/cli/commands/capability.js.map +1 -1
  224. package/dist/cli/commands/compact.js +41 -12
  225. package/dist/cli/commands/compact.js.map +1 -1
  226. package/dist/cli/commands/doctor.js +34 -99
  227. package/dist/cli/commands/doctor.js.map +1 -1
  228. package/dist/cli/commands/durability.js +82 -0
  229. package/dist/cli/commands/durability.js.map +1 -0
  230. package/dist/cli/commands/entityMigrate.js +132 -0
  231. package/dist/cli/commands/entityMigrate.js.map +1 -0
  232. package/dist/cli/commands/glossaryAdvice.js +139 -0
  233. package/dist/cli/commands/glossaryAdvice.js.map +1 -0
  234. package/dist/cli/commands/lint.js +26 -43
  235. package/dist/cli/commands/lint.js.map +1 -1
  236. package/dist/cli/commands/personalGlossary.js +177 -0
  237. package/dist/cli/commands/personalGlossary.js.map +1 -0
  238. package/dist/cli/commands/prime/briefOrientation.js +808 -0
  239. package/dist/cli/commands/prime/briefOrientation.js.map +1 -0
  240. package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
  241. package/dist/cli/commands/prime/buildExecutionRequest.js.map +1 -0
  242. package/dist/cli/commands/prime/bundleStatus.js +191 -0
  243. package/dist/cli/commands/prime/bundleStatus.js.map +1 -0
  244. package/dist/cli/commands/prime/collectEntityOrientation.js +291 -0
  245. package/dist/cli/commands/prime/collectEntityOrientation.js.map +1 -0
  246. package/dist/cli/commands/prime/collectOrientationState.js +178 -0
  247. package/dist/cli/commands/prime/collectOrientationState.js.map +1 -0
  248. package/dist/cli/commands/prime/orientationOutput.js +377 -0
  249. package/dist/cli/commands/prime/orientationOutput.js.map +1 -0
  250. package/dist/cli/commands/prime/types.js +2 -0
  251. package/dist/cli/commands/prime/types.js.map +1 -0
  252. package/dist/cli/commands/prime/v1Migration.js +39 -0
  253. package/dist/cli/commands/prime/v1Migration.js.map +1 -0
  254. package/dist/cli/commands/prime.js +96 -556
  255. package/dist/cli/commands/prime.js.map +1 -1
  256. package/dist/cli/commands/profileGrounding.js +56 -0
  257. package/dist/cli/commands/profileGrounding.js.map +1 -0
  258. package/dist/cli/commands/query.js +77 -52
  259. package/dist/cli/commands/query.js.map +1 -1
  260. package/dist/cli/commands/report.js +96 -24
  261. package/dist/cli/commands/report.js.map +1 -1
  262. package/dist/cli/commands/route.js +142 -0
  263. package/dist/cli/commands/route.js.map +1 -0
  264. package/dist/cli/commands/schema.js +258 -105
  265. package/dist/cli/commands/schema.js.map +1 -1
  266. package/dist/cli/commands/state/decisions.js +388 -0
  267. package/dist/cli/commands/state/decisions.js.map +1 -0
  268. package/dist/cli/commands/state/docs.js +71 -0
  269. package/dist/cli/commands/state/docs.js.map +1 -0
  270. package/dist/cli/commands/state/experimentRecords.js +152 -0
  271. package/dist/cli/commands/state/experimentRecords.js.map +1 -0
  272. package/dist/cli/commands/state/experiments.js +15 -0
  273. package/dist/cli/commands/state/experiments.js.map +1 -0
  274. package/dist/cli/commands/state/get.js +130 -0
  275. package/dist/cli/commands/state/get.js.map +1 -0
  276. package/dist/cli/commands/state/health.js +15 -0
  277. package/dist/cli/commands/state/health.js.map +1 -0
  278. package/dist/cli/commands/state/index.js +17 -0
  279. package/dist/cli/commands/state/index.js.map +1 -0
  280. package/dist/cli/commands/state/list.js +195 -0
  281. package/dist/cli/commands/state/list.js.map +1 -0
  282. package/dist/cli/commands/state/objective.js +26 -0
  283. package/dist/cli/commands/state/objective.js.map +1 -0
  284. package/dist/cli/commands/state/plan.js +15 -0
  285. package/dist/cli/commands/state/plan.js.map +1 -0
  286. package/dist/cli/commands/state/planTasks.js +155 -0
  287. package/dist/cli/commands/state/planTasks.js.map +1 -0
  288. package/dist/cli/commands/state/plans.js +155 -0
  289. package/dist/cli/commands/state/plans.js.map +1 -0
  290. package/dist/cli/commands/state/progress.js +14 -0
  291. package/dist/cli/commands/state/progress.js.map +1 -0
  292. package/dist/cli/commands/state/shared.js +15 -0
  293. package/dist/cli/commands/state/shared.js.map +1 -0
  294. package/dist/cli/commands/state/todo.js +43 -0
  295. package/dist/cli/commands/state/todo.js.map +1 -0
  296. package/dist/cli/commands/state/write.js +425 -0
  297. package/dist/cli/commands/state/write.js.map +1 -0
  298. package/dist/cli/commands/upgrade.js +146 -4
  299. package/dist/cli/commands/upgrade.js.map +1 -1
  300. package/dist/cli/commands/upgradeVerify.js +119 -0
  301. package/dist/cli/commands/upgradeVerify.js.map +1 -0
  302. package/dist/cli/commands/validate.js +173 -210
  303. package/dist/cli/commands/validate.js.map +1 -1
  304. package/dist/cli/commands/verify.js +24 -8
  305. package/dist/cli/commands/verify.js.map +1 -1
  306. package/dist/cli/contracts/bundleStatus.js +2 -0
  307. package/dist/cli/contracts/bundleStatus.js.map +1 -0
  308. package/dist/cli/contracts/orientationState.js +2 -0
  309. package/dist/cli/contracts/orientationState.js.map +1 -0
  310. package/dist/cli/dispatch/argvParser.js +33 -0
  311. package/dist/cli/dispatch/argvParser.js.map +1 -0
  312. package/dist/cli/dispatch/check.js +390 -0
  313. package/dist/cli/dispatch/check.js.map +1 -0
  314. package/dist/cli/dispatch/commands.js +27 -0
  315. package/dist/cli/dispatch/commands.js.map +1 -0
  316. package/dist/cli/dispatch/index.js +234 -0
  317. package/dist/cli/dispatch/index.js.map +1 -0
  318. package/dist/cli/dispatch/lifecycle.js +698 -0
  319. package/dist/cli/dispatch/lifecycle.js.map +1 -0
  320. package/dist/cli/dispatch/prime.js +140 -0
  321. package/dist/cli/dispatch/prime.js.map +1 -0
  322. package/dist/cli/dispatch/shared.js +64 -0
  323. package/dist/cli/dispatch/shared.js.map +1 -0
  324. package/dist/cli/dispatch/state.js +141 -0
  325. package/dist/cli/dispatch/state.js.map +1 -0
  326. package/dist/cli/dispatch.js +1 -995
  327. package/dist/cli/dispatch.js.map +1 -1
  328. package/dist/cli/errors.js +53 -0
  329. package/dist/cli/errors.js.map +1 -0
  330. package/dist/cli/help.js +356 -30
  331. package/dist/cli/help.js.map +1 -1
  332. package/dist/cli/migrationRequired.js +89 -0
  333. package/dist/cli/migrationRequired.js.map +1 -0
  334. package/dist/cli/orientation/attention.js +72 -0
  335. package/dist/cli/orientation/attention.js.map +1 -0
  336. package/dist/cli/orientation/corpusCoverage.js +103 -0
  337. package/dist/cli/orientation/corpusCoverage.js.map +1 -0
  338. package/dist/cli/orientation.js +443 -172
  339. package/dist/cli/orientation.js.map +1 -1
  340. package/dist/cli/planArtifacts.js +351 -0
  341. package/dist/cli/planArtifacts.js.map +1 -0
  342. package/dist/cli/planEvidence.js +158 -0
  343. package/dist/cli/planEvidence.js.map +1 -0
  344. package/dist/cli/planLifecycleState.js +36 -0
  345. package/dist/cli/planLifecycleState.js.map +1 -0
  346. package/dist/cli/planTaskIndex.js +12 -0
  347. package/dist/cli/planTaskIndex.js.map +1 -0
  348. package/dist/cli/prime-blob.js +70 -2
  349. package/dist/cli/prime-blob.js.map +1 -1
  350. package/dist/cli/profileAcquisition.js +168 -0
  351. package/dist/cli/profileAcquisition.js.map +1 -0
  352. package/dist/cli/startupCompletenessContract.js +60 -0
  353. package/dist/cli/startupCompletenessContract.js.map +1 -0
  354. package/dist/cli/stateQuery.js +63 -10
  355. package/dist/cli/stateQuery.js.map +1 -1
  356. package/dist/cli/structured.js.map +1 -1
  357. package/dist/cli/todoMarkdown.js +47 -0
  358. package/dist/cli/todoMarkdown.js.map +1 -0
  359. package/dist/cli/todoReadinessSelection.js +192 -0
  360. package/dist/cli/todoReadinessSelection.js.map +1 -0
  361. package/dist/cli/todoSeverity.js +19 -0
  362. package/dist/cli/todoSeverity.js.map +1 -0
  363. package/dist/core/atomicWriter.js +21 -0
  364. package/dist/core/atomicWriter.js.map +1 -0
  365. package/dist/core/difflib.js.map +1 -1
  366. package/dist/core/envPaths.js +21 -0
  367. package/dist/core/envPaths.js.map +1 -0
  368. package/dist/core/jsonValue.js +6 -0
  369. package/dist/core/jsonValue.js.map +1 -0
  370. package/dist/core/paths.js.map +1 -1
  371. package/dist/core/pyjson.js +67 -2
  372. package/dist/core/pyjson.js.map +1 -1
  373. package/dist/core/shell.js +5 -0
  374. package/dist/core/shell.js.map +1 -0
  375. package/dist/core/skillIdentity.js +24 -0
  376. package/dist/core/skillIdentity.js.map +1 -0
  377. package/dist/core/sourceRoot.js.map +1 -1
  378. package/dist/core/text.js +11 -0
  379. package/dist/core/text.js.map +1 -0
  380. package/dist/core/toml.js.map +1 -1
  381. package/dist/core/yaml.js +8 -0
  382. package/dist/core/yaml.js.map +1 -1
  383. package/dist/eval/evalSkills.js +30 -25
  384. package/dist/eval/evalSkills.js.map +1 -1
  385. package/dist/eval/hybridRouteEvaluation.js +156 -0
  386. package/dist/eval/hybridRouteEvaluation.js.map +1 -0
  387. package/dist/eval/semanticEval.js +43 -19
  388. package/dist/eval/semanticEval.js.map +1 -1
  389. package/dist/eval/semanticFixtures.js +16 -4
  390. package/dist/eval/semanticFixtures.js.map +1 -1
  391. package/dist/hooks/common.js +10 -27
  392. package/dist/hooks/common.js.map +1 -1
  393. package/dist/hooks/compaction/apply.js +447 -0
  394. package/dist/hooks/compaction/apply.js.map +1 -0
  395. package/dist/hooks/compaction/dryRun.js +185 -0
  396. package/dist/hooks/compaction/dryRun.js.map +1 -0
  397. package/dist/hooks/compaction/index.js +23 -0
  398. package/dist/hooks/compaction/index.js.map +1 -0
  399. package/dist/hooks/compaction/parse.js +326 -0
  400. package/dist/hooks/compaction/parse.js.map +1 -0
  401. package/dist/hooks/compaction/retention.js +203 -0
  402. package/dist/hooks/compaction/retention.js.map +1 -0
  403. package/dist/hooks/compaction/status.js +361 -0
  404. package/dist/hooks/compaction/status.js.map +1 -0
  405. package/dist/hooks/compaction/types.js +6 -0
  406. package/dist/hooks/compaction/types.js.map +1 -0
  407. package/dist/hooks/cursorPreToolUse.js +1 -1
  408. package/dist/hooks/cursorPreToolUse.js.map +1 -1
  409. package/dist/hooks/cursorSessionStart.js +14 -21
  410. package/dist/hooks/cursorSessionStart.js.map +1 -1
  411. package/dist/hooks/projectHookInput.js +26 -0
  412. package/dist/hooks/projectHookInput.js.map +1 -0
  413. package/dist/hooks/sessionStart.js +55 -170
  414. package/dist/hooks/sessionStart.js.map +1 -1
  415. package/dist/hooks/sessionStop.js +12 -26
  416. package/dist/hooks/sessionStop.js.map +1 -1
  417. package/dist/hooks/validateArtifact/agentFacing.js +10 -0
  418. package/dist/hooks/validateArtifact/agentFacing.js.map +1 -0
  419. package/dist/hooks/validateArtifact/index.js +151 -0
  420. package/dist/hooks/validateArtifact/index.js.map +1 -0
  421. package/dist/hooks/validateArtifact/markdown.js +146 -0
  422. package/dist/hooks/validateArtifact/markdown.js.map +1 -0
  423. package/dist/hooks/validateArtifact/runtime.js +86 -0
  424. package/dist/hooks/validateArtifact/runtime.js.map +1 -0
  425. package/dist/hooks/validateArtifact/schema.js +547 -0
  426. package/dist/hooks/validateArtifact/schema.js.map +1 -0
  427. package/dist/hooks/validateArtifact/traversal.js +108 -0
  428. package/dist/hooks/validateArtifact/traversal.js.map +1 -0
  429. package/dist/hooks/validateArtifact/violations.js +108 -0
  430. package/dist/hooks/validateArtifact/violations.js.map +1 -0
  431. package/dist/migrate/v2HandoffManifest.js +455 -0
  432. package/dist/migrate/v2HandoffManifest.js.map +1 -0
  433. package/dist/registries/artifactProtocolIds.js +79 -0
  434. package/dist/registries/artifactProtocolIds.js.map +1 -0
  435. package/dist/registries/artifactRegistry.js +224 -62
  436. package/dist/registries/artifactRegistry.js.map +1 -1
  437. package/dist/registries/artifactSchemaProjection.js +46 -0
  438. package/dist/registries/artifactSchemaProjection.js.map +1 -0
  439. package/dist/registries/capabilityContract.js +141 -12
  440. package/dist/registries/capabilityContract.js.map +1 -1
  441. package/dist/registries/evaluatorHandoffContract.js +171 -0
  442. package/dist/registries/evaluatorHandoffContract.js.map +1 -0
  443. package/dist/registries/evidenceTierContract.js +372 -0
  444. package/dist/registries/evidenceTierContract.js.map +1 -0
  445. package/dist/registries/glossaryAdviceContract.js +79 -0
  446. package/dist/registries/glossaryAdviceContract.js.map +1 -0
  447. package/dist/registries/glossaryCaveatContract.js +68 -0
  448. package/dist/registries/glossaryCaveatContract.js.map +1 -0
  449. package/dist/registries/glossaryConsumerContractValidation.js +788 -0
  450. package/dist/registries/glossaryConsumerContractValidation.js.map +1 -0
  451. package/dist/registries/glossaryEntryContract.js +757 -0
  452. package/dist/registries/glossaryEntryContract.js.map +1 -0
  453. package/dist/registries/glossaryTermIdentity.js +18 -0
  454. package/dist/registries/glossaryTermIdentity.js.map +1 -0
  455. package/dist/registries/glossaryTermOccurrence.js +21 -0
  456. package/dist/registries/glossaryTermOccurrence.js.map +1 -0
  457. package/dist/registries/hybridRoute.js +203 -0
  458. package/dist/registries/hybridRoute.js.map +1 -0
  459. package/dist/registries/hybridRouteReceipt.js +221 -0
  460. package/dist/registries/hybridRouteReceipt.js.map +1 -0
  461. package/dist/registries/packageRegistry.js +90 -230
  462. package/dist/registries/packageRegistry.js.map +1 -1
  463. package/dist/registries/todoReadinessContract.js +449 -0
  464. package/dist/registries/todoReadinessContract.js.map +1 -0
  465. package/dist/registries/triggerLoader.js +175 -0
  466. package/dist/registries/triggerLoader.js.map +1 -0
  467. package/dist/registries/verbosityBudgetContract.js +206 -0
  468. package/dist/registries/verbosityBudgetContract.js.map +1 -0
  469. package/dist/release/releaseMetadata.js +319 -0
  470. package/dist/release/releaseMetadata.js.map +1 -0
  471. package/dist/runtime/lifecycleAdapterContract.js +458 -0
  472. package/dist/runtime/lifecycleAdapterContract.js.map +1 -0
  473. package/dist/runtime/lifecycleAdapters.js +778 -0
  474. package/dist/runtime/lifecycleAdapters.js.map +1 -0
  475. package/dist/runtime/lifecycleAuthority.js +454 -0
  476. package/dist/runtime/lifecycleAuthority.js.map +1 -0
  477. package/dist/runtime/lifecycleOperationContract.js +114 -0
  478. package/dist/runtime/lifecycleOperationContract.js.map +1 -0
  479. package/dist/runtime/lifecycleOperations.js +635 -0
  480. package/dist/runtime/lifecycleOperations.js.map +1 -0
  481. package/dist/runtime/lifecycleOwnershipJournal.js +623 -0
  482. package/dist/runtime/lifecycleOwnershipJournal.js.map +1 -0
  483. package/dist/runtime/lifecyclePublication.js +416 -0
  484. package/dist/runtime/lifecyclePublication.js.map +1 -0
  485. package/dist/runtime/lifecycleSnapshot.js +439 -0
  486. package/dist/runtime/lifecycleSnapshot.js.map +1 -0
  487. package/dist/runtime/nativeResourceCleanup.js +317 -0
  488. package/dist/runtime/nativeResourceCleanup.js.map +1 -0
  489. package/dist/setup/codex/cli.js +130 -0
  490. package/dist/setup/codex/cli.js.map +1 -0
  491. package/dist/setup/codex/configToml.js +558 -0
  492. package/dist/setup/codex/configToml.js.map +1 -0
  493. package/dist/setup/codex/constants.js +14 -0
  494. package/dist/setup/codex/constants.js.map +1 -0
  495. package/dist/setup/codex/installRoot.js +64 -0
  496. package/dist/setup/codex/installRoot.js.map +1 -0
  497. package/dist/setup/codex/state.js +252 -0
  498. package/dist/setup/codex/state.js.map +1 -0
  499. package/dist/setup/codex.js +9 -1055
  500. package/dist/setup/codex.js.map +1 -1
  501. package/dist/setup/opencode.js +21 -0
  502. package/dist/setup/opencode.js.map +1 -0
  503. package/dist/setup/opencodeConstants.js +2 -0
  504. package/dist/setup/opencodeConstants.js.map +1 -0
  505. package/dist/setup/sharedSkill.js +46 -0
  506. package/dist/setup/sharedSkill.js.map +1 -0
  507. package/dist/setup/smokeChecks.js +24 -53
  508. package/dist/setup/smokeChecks.js.map +1 -1
  509. package/dist/state/archiveDiscovery.js +581 -0
  510. package/dist/state/archiveDiscovery.js.map +1 -0
  511. package/dist/state/archivePublication.js +226 -0
  512. package/dist/state/archivePublication.js.map +1 -0
  513. package/dist/state/archiveRecovery.js +238 -0
  514. package/dist/state/archiveRecovery.js.map +1 -0
  515. package/dist/state/archiveReplay.js +54 -0
  516. package/dist/state/archiveReplay.js.map +1 -0
  517. package/dist/state/canonicalMigrationRecord.js +37 -0
  518. package/dist/state/canonicalMigrationRecord.js.map +1 -0
  519. package/dist/state/changelog.js +222 -0
  520. package/dist/state/changelog.js.map +1 -0
  521. package/dist/state/decisionEntities.js +368 -0
  522. package/dist/state/decisionEntities.js.map +1 -0
  523. package/dist/state/decisionLegacyValidation.js +216 -0
  524. package/dist/state/decisionLegacyValidation.js.map +1 -0
  525. package/dist/state/decisionMigrationProvenance.js +200 -0
  526. package/dist/state/decisionMigrationProvenance.js.map +1 -0
  527. package/dist/state/decisionOverlay.js +255 -0
  528. package/dist/state/decisionOverlay.js.map +1 -0
  529. package/dist/state/decisionRevision.js +257 -0
  530. package/dist/state/decisionRevision.js.map +1 -0
  531. package/dist/state/decisionRevisionMigration.js +90 -0
  532. package/dist/state/decisionRevisionMigration.js.map +1 -0
  533. package/dist/state/directRetrieval.js +324 -0
  534. package/dist/state/directRetrieval.js.map +1 -0
  535. package/dist/state/durability.js +325 -0
  536. package/dist/state/durability.js.map +1 -0
  537. package/dist/state/entityCutover.js +294 -0
  538. package/dist/state/entityCutover.js.map +1 -0
  539. package/dist/state/entityCutoverGit.js +128 -0
  540. package/dist/state/entityCutoverGit.js.map +1 -0
  541. package/dist/state/entityGlossaryAuthority.js +14 -0
  542. package/dist/state/entityGlossaryAuthority.js.map +1 -0
  543. package/dist/state/entityListProjection.js +188 -0
  544. package/dist/state/entityListProjection.js.map +1 -0
  545. package/dist/state/entityListRuntimeRegistry.js +50 -0
  546. package/dist/state/entityListRuntimeRegistry.js.map +1 -0
  547. package/dist/state/entityMigrationCausality.js +99 -0
  548. package/dist/state/entityMigrationCausality.js.map +1 -0
  549. package/dist/state/entityMigrationIdentity.js +6 -0
  550. package/dist/state/entityMigrationIdentity.js.map +1 -0
  551. package/dist/state/entityMigrationPreview.js +884 -0
  552. package/dist/state/entityMigrationPreview.js.map +1 -0
  553. package/dist/state/entityPublicationContext.js +807 -0
  554. package/dist/state/entityPublicationContext.js.map +1 -0
  555. package/dist/state/entityRetrievalHelp.js +476 -0
  556. package/dist/state/entityRetrievalHelp.js.map +1 -0
  557. package/dist/state/entityStorage.js +897 -0
  558. package/dist/state/entityStorage.js.map +1 -0
  559. package/dist/state/exactReplacementRecovery.js +19 -0
  560. package/dist/state/exactReplacementRecovery.js.map +1 -0
  561. package/dist/state/experimentArchive.js +64 -0
  562. package/dist/state/experimentArchive.js.map +1 -0
  563. package/dist/state/experimentIdentity.js +203 -0
  564. package/dist/state/experimentIdentity.js.map +1 -0
  565. package/dist/state/healthEntities.js +263 -0
  566. package/dist/state/healthEntities.js.map +1 -0
  567. package/dist/state/healthEntityValidation.js +19 -0
  568. package/dist/state/healthEntityValidation.js.map +1 -0
  569. package/dist/state/healthRepair.js +70 -0
  570. package/dist/state/healthRepair.js.map +1 -0
  571. package/dist/state/installRoot.js +64 -24
  572. package/dist/state/installRoot.js.map +1 -1
  573. package/dist/state/legacyEntityCutoverEvidence.js +66 -0
  574. package/dist/state/legacyEntityCutoverEvidence.js.map +1 -0
  575. package/dist/state/legacyIdentity.js +48 -0
  576. package/dist/state/legacyIdentity.js.map +1 -0
  577. package/dist/state/legacySummaryRecord.js +7 -0
  578. package/dist/state/legacySummaryRecord.js.map +1 -0
  579. package/dist/state/listAccounting.js +55 -0
  580. package/dist/state/listAccounting.js.map +1 -0
  581. package/dist/state/listClassification.js +18 -0
  582. package/dist/state/listClassification.js.map +1 -0
  583. package/dist/state/listCursor.js +43 -0
  584. package/dist/state/listCursor.js.map +1 -0
  585. package/dist/state/listRetrieval.js +782 -0
  586. package/dist/state/listRetrieval.js.map +1 -0
  587. package/dist/state/migrationSourceBinding.js +31 -0
  588. package/dist/state/migrationSourceBinding.js.map +1 -0
  589. package/dist/state/objectiveExperimentEntities.js +323 -0
  590. package/dist/state/objectiveExperimentEntities.js.map +1 -0
  591. package/dist/state/planEntities.js +531 -0
  592. package/dist/state/planEntities.js.map +1 -0
  593. package/dist/state/planIdentity.js +48 -0
  594. package/dist/state/planIdentity.js.map +1 -0
  595. package/dist/state/planRetrieval.js +314 -0
  596. package/dist/state/planRetrieval.js.map +1 -0
  597. package/dist/state/planTaskRetrieval.js +295 -0
  598. package/dist/state/planTaskRetrieval.js.map +1 -0
  599. package/dist/state/progressEntities.js +513 -0
  600. package/dist/state/progressEntities.js.map +1 -0
  601. package/dist/state/progressGlossaryCaveat.js +169 -0
  602. package/dist/state/progressGlossaryCaveat.js.map +1 -0
  603. package/dist/state/progressPublicationOrder.js +20 -0
  604. package/dist/state/progressPublicationOrder.js.map +1 -0
  605. package/dist/state/projectRoot.js +63 -0
  606. package/dist/state/projectRoot.js.map +1 -0
  607. package/dist/state/projectionPolicy.js +191 -0
  608. package/dist/state/projectionPolicy.js.map +1 -0
  609. package/dist/state/retrievalAuthority.js +157 -0
  610. package/dist/state/retrievalAuthority.js.map +1 -0
  611. package/dist/state/safeProjectFile.js +156 -0
  612. package/dist/state/safeProjectFile.js.map +1 -0
  613. package/dist/state/startupAnalysis/benchmark.js +433 -0
  614. package/dist/state/startupAnalysis/benchmark.js.map +1 -0
  615. package/dist/state/startupAnalysis/contract.js +126 -0
  616. package/dist/state/startupAnalysis/contract.js.map +1 -0
  617. package/dist/state/startupAnalysis/helpers.js +287 -0
  618. package/dist/state/startupAnalysis/helpers.js.map +1 -0
  619. package/dist/state/startupAnalysis/index.js +7 -0
  620. package/dist/state/startupAnalysis/index.js.map +1 -0
  621. package/dist/state/startupAnalysis/metrics.js +341 -0
  622. package/dist/state/startupAnalysis/metrics.js.map +1 -0
  623. package/dist/state/startupAnalysis/records.js +199 -0
  624. package/dist/state/startupAnalysis/records.js.map +1 -0
  625. package/dist/state/startupAnalysis/report.js +112 -0
  626. package/dist/state/startupAnalysis/report.js.map +1 -0
  627. package/dist/state/startupAnalysis/threshold.js +513 -0
  628. package/dist/state/startupAnalysis/threshold.js.map +1 -0
  629. package/dist/state/startupAnalysis.js +2 -1952
  630. package/dist/state/startupAnalysis.js.map +1 -1
  631. package/dist/state/startupProjection.js +499 -0
  632. package/dist/state/startupProjection.js.map +1 -0
  633. package/dist/state/stateMode.js +86 -0
  634. package/dist/state/stateMode.js.map +1 -0
  635. package/dist/state/stateStorageAuthority.js +48 -0
  636. package/dist/state/stateStorageAuthority.js.map +1 -0
  637. package/dist/state/summaryEntityRead.js +26 -0
  638. package/dist/state/summaryEntityRead.js.map +1 -0
  639. package/dist/state/summaryMigrationProvenance.js +67 -0
  640. package/dist/state/summaryMigrationProvenance.js.map +1 -0
  641. package/dist/state/summarySourceRowAuthority.js +37 -0
  642. package/dist/state/summarySourceRowAuthority.js.map +1 -0
  643. package/dist/state/todoDocsEntities.js +986 -0
  644. package/dist/state/todoDocsEntities.js.map +1 -0
  645. package/dist/state/todoDocsEntityValidation.js +159 -0
  646. package/dist/state/todoDocsEntityValidation.js.map +1 -0
  647. package/dist/state/todoReconciliationActivation.js +63 -0
  648. package/dist/state/todoReconciliationActivation.js.map +1 -0
  649. package/dist/state/todoReconciliationTransaction.js +554 -0
  650. package/dist/state/todoReconciliationTransaction.js.map +1 -0
  651. package/dist/state/write/assign.js +21 -0
  652. package/dist/state/write/assign.js.map +1 -0
  653. package/dist/state/write/candidateMutation.js +270 -0
  654. package/dist/state/write/candidateMutation.js.map +1 -0
  655. package/dist/state/write/errors.js +12 -0
  656. package/dist/state/write/errors.js.map +1 -0
  657. package/dist/state/write/experimentPublication.js +193 -0
  658. package/dist/state/write/experimentPublication.js.map +1 -0
  659. package/dist/state/write/explain.js +333 -0
  660. package/dist/state/write/explain.js.map +1 -0
  661. package/dist/state/write/fields.js +62 -0
  662. package/dist/state/write/fields.js.map +1 -0
  663. package/dist/state/write/glossaryPublication.js +264 -0
  664. package/dist/state/write/glossaryPublication.js.map +1 -0
  665. package/dist/state/write/grammar.js +271 -0
  666. package/dist/state/write/grammar.js.map +1 -0
  667. package/dist/state/write/helpers.js +30 -0
  668. package/dist/state/write/helpers.js.map +1 -0
  669. package/dist/state/write/index.js +13 -0
  670. package/dist/state/write/index.js.map +1 -0
  671. package/dist/state/write/input.js +368 -0
  672. package/dist/state/write/input.js.map +1 -0
  673. package/dist/state/write/lock.js +838 -0
  674. package/dist/state/write/lock.js.map +1 -0
  675. package/dist/state/write/mutation.js +235 -0
  676. package/dist/state/write/mutation.js.map +1 -0
  677. package/dist/state/write/operations.js +170 -0
  678. package/dist/state/write/operations.js.map +1 -0
  679. package/dist/state/write/planEvaluation.js +129 -0
  680. package/dist/state/write/planEvaluation.js.map +1 -0
  681. package/dist/state/write/planPublication.js +180 -0
  682. package/dist/state/write/planPublication.js.map +1 -0
  683. package/dist/state/write/runtimeOperations.js +65 -0
  684. package/dist/state/write/runtimeOperations.js.map +1 -0
  685. package/dist/state/write/serialize.js +2 -0
  686. package/dist/state/write/serialize.js.map +1 -0
  687. package/dist/state/write/transaction.js +53 -0
  688. package/dist/state/write/transaction.js.map +1 -0
  689. package/dist/state/write/validate.js +8 -0
  690. package/dist/state/write/validate.js.map +1 -0
  691. package/dist/upgrade/appContentRefresh.js +384 -0
  692. package/dist/upgrade/appContentRefresh.js.map +1 -0
  693. package/dist/upgrade/appModel.js +8 -6
  694. package/dist/upgrade/appModel.js.map +1 -1
  695. package/dist/upgrade/atomicWriter.js +2 -0
  696. package/dist/upgrade/atomicWriter.js.map +1 -0
  697. package/dist/upgrade/bundleEvidence.js +34 -0
  698. package/dist/upgrade/bundleEvidence.js.map +1 -0
  699. package/dist/upgrade/channels.js +12 -7
  700. package/dist/upgrade/channels.js.map +1 -1
  701. package/dist/upgrade/coexistenceProbe.js +105 -0
  702. package/dist/upgrade/coexistenceProbe.js.map +1 -0
  703. package/dist/upgrade/compatibility.js +56 -20
  704. package/dist/upgrade/compatibility.js.map +1 -1
  705. package/dist/upgrade/doctor.js +197 -191
  706. package/dist/upgrade/doctor.js.map +1 -1
  707. package/dist/upgrade/doctorClassifier.js +188 -0
  708. package/dist/upgrade/doctorClassifier.js.map +1 -0
  709. package/dist/upgrade/installedHooksRetirement.js +197 -0
  710. package/dist/upgrade/installedHooksRetirement.js.map +1 -0
  711. package/dist/upgrade/legacyAgentCleanup.js +283 -0
  712. package/dist/upgrade/legacyAgentCleanup.js.map +1 -0
  713. package/dist/upgrade/lifecycleUpgrade.js +114 -0
  714. package/dist/upgrade/lifecycleUpgrade.js.map +1 -0
  715. package/dist/upgrade/migrateArtifactsV2ToV3.js +363 -137
  716. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +1 -1
  717. package/dist/upgrade/migrationPublication.js +123 -0
  718. package/dist/upgrade/migrationPublication.js.map +1 -0
  719. package/dist/upgrade/nextMajorDoctor.js +156 -0
  720. package/dist/upgrade/nextMajorDoctor.js.map +1 -0
  721. package/dist/upgrade/npxPlatformStatus.js +23 -0
  722. package/dist/upgrade/npxPlatformStatus.js.map +1 -0
  723. package/dist/upgrade/projectIntegration.js +142 -171
  724. package/dist/upgrade/projectIntegration.js.map +1 -1
  725. package/dist/upgrade/projectIntegrationDecision.js +51 -0
  726. package/dist/upgrade/projectIntegrationDecision.js.map +1 -0
  727. package/dist/upgrade/runtimeMigration.js +336 -281
  728. package/dist/upgrade/runtimeMigration.js.map +1 -1
  729. package/dist/upgrade/upgradeCommands.js +9 -0
  730. package/dist/upgrade/upgradeCommands.js.map +1 -1
  731. package/dist/upgrade/upgradeLock.js +86 -0
  732. package/dist/upgrade/upgradeLock.js.map +1 -0
  733. package/dist/upgrade/upgradeOrchestrator.js +217 -56
  734. package/dist/upgrade/upgradeOrchestrator.js.map +1 -1
  735. package/dist/upgrade/v3CapabilitySurface.js +15 -0
  736. package/dist/upgrade/v3CapabilitySurface.js.map +1 -0
  737. package/dist/upgrade/versionResolution.js +12 -4
  738. package/dist/upgrade/versionResolution.js.map +1 -1
  739. package/dist/validate/appHomeContract.js +5 -9
  740. package/dist/validate/appHomeContract.js.map +1 -1
  741. package/dist/validate/capability.js +144 -14
  742. package/dist/validate/capability.js.map +1 -1
  743. package/dist/validate/crossCapability.js +15 -9
  744. package/dist/validate/crossCapability.js.map +1 -1
  745. package/dist/validate/selfAudit.js +73 -36
  746. package/dist/validate/selfAudit.js.map +1 -1
  747. package/dist/validate/v1LegacyCruft.js +141 -0
  748. package/dist/validate/v1LegacyCruft.js.map +1 -0
  749. package/dist/validate/vocabularyAuthority.js +305 -0
  750. package/dist/validate/vocabularyAuthority.js.map +1 -0
  751. package/package.json +46 -27
  752. package/bundle/references/adapters/cursor.md +0 -213
  753. package/bundle/references/adapters/opencode.md +0 -530
  754. package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
  755. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
  756. package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -548
  757. package/bundle/references/adapters/runtime-feature-parity.md +0 -189
  758. package/bundle/references/v1-section-mapping.md +0 -47
  759. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  760. package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
  761. package/bundle/skills/agentera/agents/hej.toml +0 -6
  762. package/bundle/skills/agentera/agents/inspektera.toml +0 -6
  763. package/bundle/skills/agentera/agents/inspirera.toml +0 -6
  764. package/bundle/skills/agentera/agents/optimera.toml +0 -6
  765. package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
  766. package/bundle/skills/agentera/agents/planera.toml +0 -6
  767. package/bundle/skills/agentera/agents/profilera.toml +0 -6
  768. package/bundle/skills/agentera/agents/realisera.toml +0 -6
  769. package/bundle/skills/agentera/agents/resonera.toml +0 -6
  770. package/bundle/skills/agentera/agents/visionera.toml +0 -6
  771. package/bundle/skills/agentera/agents/visualisera.toml +0 -6
  772. package/bundle/skills/agentera/capabilities/dokumentera/instructions.md +0 -428
  773. package/bundle/skills/agentera/capabilities/dokumentera/schemas/artifacts.yaml +0 -73
  774. package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +0 -35
  775. package/bundle/skills/agentera/capabilities/hej/instructions.md +0 -331
  776. package/bundle/skills/agentera/capabilities/hej/schemas/artifacts.yaml +0 -69
  777. package/bundle/skills/agentera/capabilities/hej/schemas/triggers.yaml +0 -58
  778. package/bundle/skills/agentera/capabilities/inspektera/instructions.md +0 -514
  779. package/bundle/skills/agentera/capabilities/inspektera/schemas/artifacts.yaml +0 -76
  780. package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +0 -38
  781. package/bundle/skills/agentera/capabilities/inspirera/instructions.md +0 -280
  782. package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +0 -24
  783. package/bundle/skills/agentera/capabilities/inspirera/schemas/triggers.yaml +0 -34
  784. package/bundle/skills/agentera/capabilities/optimera/instructions.md +0 -437
  785. package/bundle/skills/agentera/capabilities/optimera/schemas/triggers.yaml +0 -39
  786. package/bundle/skills/agentera/capabilities/orkestrera/instructions.md +0 -433
  787. package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +0 -64
  788. package/bundle/skills/agentera/capabilities/orkestrera/schemas/triggers.yaml +0 -42
  789. package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +0 -107
  790. package/bundle/skills/agentera/capabilities/planera/instructions.md +0 -368
  791. package/bundle/skills/agentera/capabilities/planera/schemas/artifacts.yaml +0 -62
  792. package/bundle/skills/agentera/capabilities/planera/schemas/triggers.yaml +0 -34
  793. package/bundle/skills/agentera/capabilities/planera/schemas/validation.yaml +0 -61
  794. package/bundle/skills/agentera/capabilities/profilera/instructions.md +0 -419
  795. package/bundle/skills/agentera/capabilities/profilera/schemas/artifacts.yaml +0 -18
  796. package/bundle/skills/agentera/capabilities/profilera/schemas/triggers.yaml +0 -45
  797. package/bundle/skills/agentera/capabilities/profilera/schemas/validation.yaml +0 -57
  798. package/bundle/skills/agentera/capabilities/realisera/instructions.md +0 -403
  799. package/bundle/skills/agentera/capabilities/realisera/schemas/artifacts.yaml +0 -80
  800. package/bundle/skills/agentera/capabilities/realisera/schemas/triggers.yaml +0 -39
  801. package/bundle/skills/agentera/capabilities/realisera/schemas/validation.yaml +0 -110
  802. package/bundle/skills/agentera/capabilities/resonera/instructions.md +0 -329
  803. package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +0 -47
  804. package/bundle/skills/agentera/capabilities/resonera/schemas/triggers.yaml +0 -46
  805. package/bundle/skills/agentera/capabilities/resonera/schemas/validation.yaml +0 -77
  806. package/bundle/skills/agentera/capabilities/visionera/instructions.md +0 -309
  807. package/bundle/skills/agentera/capabilities/visionera/schemas/triggers.yaml +0 -41
  808. package/bundle/skills/agentera/capabilities/visualisera/instructions.md +0 -400
  809. package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +0 -33
  810. package/bundle/skills/hej/.claude-plugin/plugin.json +0 -6
  811. package/bundle/skills/hej/SKILL.md +0 -69
  812. package/bundle/skills/hej/agents/hej.toml +0 -11
  813. package/bundle/skills/hej/agents/openai.yaml +0 -8
  814. package/dist/cli/commands/backfill.js +0 -84
  815. package/dist/cli/commands/backfill.js.map +0 -1
  816. package/dist/cli/commands/state.js +0 -1012
  817. package/dist/cli/commands/state.js.map +0 -1
  818. package/dist/core/git.js +0 -43
  819. package/dist/core/git.js.map +0 -1
  820. package/dist/hooks/compaction.js +0 -935
  821. package/dist/hooks/compaction.js.map +0 -1
  822. package/dist/hooks/validateArtifact.js +0 -933
  823. package/dist/hooks/validateArtifact.js.map +0 -1
  824. package/dist/registries/runtimeAdapterRegistry.js +0 -315
  825. package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
  826. package/dist/setup/copilot.js +0 -227
  827. package/dist/setup/copilot.js.map +0 -1
  828. package/dist/setup/cursor.js +0 -127
  829. package/dist/setup/cursor.js.map +0 -1
  830. package/dist/setup/doctor.js +0 -1297
  831. package/dist/setup/doctor.js.map +0 -1
  832. package/dist/state/progressCommit.js +0 -289
  833. package/dist/state/progressCommit.js.map +0 -1
  834. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -571
  835. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
  836. package/dist/validate/lifecycleAdapters.js +0 -772
  837. package/dist/validate/lifecycleAdapters.js.map +0 -1
  838. /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
  839. /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
  840. /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
@@ -0,0 +1,807 @@
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { ExactReplacementConflictError, FileReplacementError } from "./exactReplacementRecovery.js";
5
+ import { assertValidatedProjectRoot } from "./projectRoot.js";
6
+ import { reject, StateWriteInputError } from "./write/errors.js";
7
+ const RECOVERY_IGNORE_BYTES = "*\n!.gitignore\n";
8
+ export const FILE_REPLACEMENT_RECOVERY_VERSION = "agentera.fileReplacementRecovery.v1";
9
+ export const FILE_REPLACEMENT_METADATA_NAME = "replacement.json";
10
+ function identity(stat) {
11
+ return {
12
+ dev: stat.dev,
13
+ ino: stat.ino,
14
+ type: stat.mode & BigInt(fs.constants.S_IFMT),
15
+ size: stat.size,
16
+ mtimeNs: stat.mtimeNs,
17
+ ctimeNs: stat.ctimeNs,
18
+ nlink: stat.nlink,
19
+ mode: stat.mode,
20
+ };
21
+ }
22
+ function sameIdentity(left, right) {
23
+ return left.dev === right.dev
24
+ && left.ino === right.ino
25
+ && left.type === right.type
26
+ && left.size === right.size
27
+ && left.mtimeNs === right.mtimeNs
28
+ && left.ctimeNs === right.ctimeNs
29
+ && left.nlink === right.nlink;
30
+ }
31
+ function sameDirectory(left, right) {
32
+ return right.isDirectory()
33
+ && !right.isSymbolicLink()
34
+ && left.dev === right.dev
35
+ && left.ino === right.ino;
36
+ }
37
+ function sha256(bytes) {
38
+ return createHash("sha256").update(bytes).digest("hex");
39
+ }
40
+ function publishedIdentity(file) {
41
+ return {
42
+ dev: file.identity.dev,
43
+ ino: file.identity.ino,
44
+ type: file.identity.type,
45
+ size: file.identity.size,
46
+ sha256: sha256(file.bytes),
47
+ };
48
+ }
49
+ function matchesPublished(file, expected) {
50
+ const observed = publishedIdentity(file);
51
+ return observed.dev === expected.dev
52
+ && observed.ino === expected.ino
53
+ && observed.type === expected.type
54
+ && observed.size === expected.size
55
+ && observed.sha256 === expected.sha256;
56
+ }
57
+ function matchesExpected(file, expected) {
58
+ return Buffer.isBuffer(expected) ? file.bytes.equals(expected) : matchesPublished(file, expected);
59
+ }
60
+ function sameStableFile(left, right) {
61
+ return sameIdentity(left.identity, right.identity) && left.bytes.equals(right.bytes);
62
+ }
63
+ function readStableFile(absolute, label) {
64
+ let before;
65
+ try {
66
+ before = fs.lstatSync(absolute, { bigint: true });
67
+ }
68
+ catch (error) {
69
+ throw new Error(`${label} is unavailable: ${error.message}`, { cause: error });
70
+ }
71
+ if (!before.isFile() || before.isSymbolicLink()) {
72
+ throw new Error(`${label} is not a safe regular file`);
73
+ }
74
+ let descriptor;
75
+ try {
76
+ descriptor = fs.openSync(absolute, fs.constants.O_RDONLY | (fs.constants.O_NOFOLLOW ?? 0));
77
+ const opened = fs.fstatSync(descriptor, { bigint: true });
78
+ if (!opened.isFile() || opened.isSymbolicLink() || opened.dev !== before.dev || opened.ino !== before.ino) {
79
+ throw new Error(`${label} changed while it was opened`);
80
+ }
81
+ const bytes = fs.readFileSync(descriptor);
82
+ const after = fs.fstatSync(descriptor, { bigint: true });
83
+ const pathname = fs.lstatSync(absolute, { bigint: true });
84
+ const openedIdentity = identity(opened);
85
+ if (!sameIdentity(openedIdentity, identity(after))
86
+ || !sameIdentity(openedIdentity, identity(pathname))
87
+ || BigInt(bytes.length) !== opened.size)
88
+ throw new Error(`${label} changed while its exact bytes were read`);
89
+ return { absolute, identity: identity(after), bytes };
90
+ }
91
+ finally {
92
+ if (descriptor !== undefined)
93
+ fs.closeSync(descriptor);
94
+ }
95
+ }
96
+ function readFileIfPresent(absolute, label) {
97
+ try {
98
+ fs.lstatSync(absolute);
99
+ }
100
+ catch (error) {
101
+ if (error.code === "ENOENT")
102
+ return null;
103
+ throw error;
104
+ }
105
+ return readStableFile(absolute, label);
106
+ }
107
+ function readStableDirectory(absolute, created = false) {
108
+ const stat = fs.lstatSync(absolute, { bigint: true });
109
+ if (!stat.isDirectory() || stat.isSymbolicLink()) {
110
+ throw new Error(`publication directory '${absolute}' is not a safe real directory`);
111
+ }
112
+ return { absolute, dev: stat.dev, ino: stat.ino, created };
113
+ }
114
+ function projectLocalPath(root, absolute, allowRoot = false) {
115
+ const resolved = path.resolve(absolute);
116
+ const relative = path.relative(root.path, resolved);
117
+ return resolved === absolute
118
+ && (allowRoot || relative.length > 0)
119
+ && relative !== ".."
120
+ && !relative.startsWith(`..${path.sep}`)
121
+ && !path.isAbsolute(relative);
122
+ }
123
+ /** Validate a recovery directory before listing or mutating anything through it. */
124
+ export function validateEntityRecoveryDirectory(root, absolute, targetDirectory, label, expected) {
125
+ assertValidatedProjectRoot(root);
126
+ if (!projectLocalPath(root, absolute) || !projectLocalPath(root, targetDirectory, true)) {
127
+ throw new FileReplacementError(`${label} must be a real project-local directory under the validated project root`);
128
+ }
129
+ let directory;
130
+ let target;
131
+ try {
132
+ directory = readStableDirectory(absolute);
133
+ target = readStableDirectory(targetDirectory);
134
+ if (fs.realpathSync(absolute) !== absolute || fs.realpathSync(targetDirectory) !== targetDirectory) {
135
+ throw new Error("a directory path traverses a symbolic link");
136
+ }
137
+ }
138
+ catch (error) {
139
+ throw new FileReplacementError(`${label} must be a real project-local non-symlink directory: ${error.message}`, error);
140
+ }
141
+ if (typeof process.getuid === "function") {
142
+ const stat = fs.lstatSync(directory.absolute, { bigint: true });
143
+ if ((stat.mode & 18n) !== 0n || stat.uid !== BigInt(process.getuid())) {
144
+ throw new FileReplacementError(`${label} must be owned by the current user and not group/world-writable`);
145
+ }
146
+ }
147
+ if (directory.dev !== target.dev) {
148
+ throw new FileReplacementError(`${label} must share the replacement target filesystem`);
149
+ }
150
+ if (expected && (directory.absolute !== expected.absolute
151
+ || directory.dev !== expected.dev
152
+ || directory.ino !== expected.ino)) {
153
+ throw new FileReplacementError(`${label} changed after its recovery boundary was validated`);
154
+ }
155
+ return { absolute: directory.absolute, dev: directory.dev, ino: directory.ino };
156
+ }
157
+ function syncDirectory(absolute) {
158
+ if (process.platform === "win32")
159
+ return;
160
+ let descriptor;
161
+ try {
162
+ descriptor = fs.openSync(absolute, fs.constants.O_RDONLY | (fs.constants.O_DIRECTORY ?? 0));
163
+ fs.fsyncSync(descriptor);
164
+ }
165
+ catch (error) {
166
+ if (!["EINVAL", "ENOTSUP", "ENOSYS"].includes(error.code ?? ""))
167
+ throw error;
168
+ }
169
+ finally {
170
+ if (descriptor !== undefined)
171
+ fs.closeSync(descriptor);
172
+ }
173
+ }
174
+ function syncDirectoryBestEffort(absolute) {
175
+ try {
176
+ syncDirectory(absolute);
177
+ }
178
+ catch { /* The canonical rename already linearized. */ }
179
+ }
180
+ function safeSegments(relativeTarget, label) {
181
+ const segments = relativeTarget.split(/[\\/]/).filter(Boolean);
182
+ if (segments.length < 1
183
+ || path.posix.isAbsolute(relativeTarget)
184
+ || path.win32.isAbsolute(relativeTarget)
185
+ || relativeTarget.includes("\0")
186
+ || segments.includes("..")
187
+ || segments.includes("."))
188
+ reject({
189
+ class: "unsupported_target",
190
+ message: `${label} '${relativeTarget}' is outside the validated project path grammar`,
191
+ recovery: "Use one project-relative path without symbolic, dot, parent, drive, UNC, or absolute segments; no state was changed.",
192
+ });
193
+ return segments;
194
+ }
195
+ function relativeDisplay(root, absolute) {
196
+ return path.relative(root, absolute).split(path.sep).join("/");
197
+ }
198
+ function removeExactFile(file) {
199
+ const current = readFileIfPresent(file.absolute, `attempt-owned file '${file.absolute}'`);
200
+ if (!current || !sameStableFile(file, current))
201
+ return false;
202
+ fs.unlinkSync(file.absolute);
203
+ return true;
204
+ }
205
+ function createDurableFile(absolute, bytes, mode = 0o600) {
206
+ let descriptor;
207
+ let opened;
208
+ try {
209
+ descriptor = fs.openSync(absolute, fs.constants.O_RDWR | fs.constants.O_CREAT | fs.constants.O_EXCL | (fs.constants.O_NOFOLLOW ?? 0), mode);
210
+ opened = identity(fs.fstatSync(descriptor, { bigint: true }));
211
+ fs.writeFileSync(descriptor, bytes);
212
+ if (typeof process.getuid === "function")
213
+ fs.fchmodSync(descriptor, mode);
214
+ fs.fsyncSync(descriptor);
215
+ }
216
+ catch (error) {
217
+ if (descriptor !== undefined) {
218
+ try {
219
+ fs.closeSync(descriptor);
220
+ }
221
+ catch { /* Preserve the primary failure. */ }
222
+ descriptor = undefined;
223
+ }
224
+ if (opened) {
225
+ try {
226
+ const current = readFileIfPresent(absolute, `failed stage '${absolute}'`);
227
+ if (current && sameIdentity(opened, current.identity))
228
+ fs.unlinkSync(absolute);
229
+ }
230
+ catch { /* Preserve changed or partially inspectable attempt state. */ }
231
+ }
232
+ throw error;
233
+ }
234
+ finally {
235
+ if (descriptor !== undefined)
236
+ fs.closeSync(descriptor);
237
+ }
238
+ return readStableFile(absolute, `durable stage '${absolute}'`);
239
+ }
240
+ function publicationConflict(markerPath) {
241
+ reject({
242
+ class: "conflict",
243
+ message: `state mode marker '${markerPath}' changed after entity mode detection; this is a conflict and cannot fall back to legacy state`,
244
+ syntax: "agentera state <artifact-id> <verb> ... --format json",
245
+ example: `restore the exact '${markerPath}' marker selected at command start and retry`,
246
+ });
247
+ }
248
+ /**
249
+ * Binds mutations to a validated project and exact entity-mode marker. Every
250
+ * pathname and byte identity is checked at declared boundaries. Publication
251
+ * linearizes through standard complete-file link or rename operations; a
252
+ * non-cooperating writer that races after the final successful check is outside
253
+ * the contract and is not represented as a cross-process compare-and-swap.
254
+ */
255
+ export class EntityPublicationContext {
256
+ projectRoot;
257
+ validatedRoot;
258
+ markerPath;
259
+ marker;
260
+ createdDirectories = new Map();
261
+ closed = false;
262
+ constructor(root, markerPath, expectedBytes) {
263
+ this.projectRoot = root.path;
264
+ this.validatedRoot = root;
265
+ this.markerPath = markerPath;
266
+ const markerAbsolute = path.join(root.path, ...safeSegments(markerPath, "state mode marker"));
267
+ this.marker = readStableFile(markerAbsolute, `state mode marker '${markerPath}'`);
268
+ if (!this.marker.bytes.equals(expectedBytes))
269
+ publicationConflict(markerPath);
270
+ this.assertValid();
271
+ }
272
+ static open(root, markerPath, expectedBytes) {
273
+ return new EntityPublicationContext(root, markerPath, expectedBytes);
274
+ }
275
+ pinnedPath(relativePath = "") {
276
+ if (this.closed)
277
+ throw new Error("entity publication context is closed");
278
+ if (!relativePath)
279
+ return this.projectRoot;
280
+ return path.join(this.projectRoot, ...safeSegments(relativePath, "entity publication path"));
281
+ }
282
+ assertValid() {
283
+ if (this.closed)
284
+ throw new Error("entity publication context is closed");
285
+ assertValidatedProjectRoot(this.validatedRoot);
286
+ let current;
287
+ try {
288
+ current = readStableFile(this.marker.absolute, `state mode marker '${this.markerPath}'`);
289
+ }
290
+ catch {
291
+ publicationConflict(this.markerPath);
292
+ }
293
+ if (!sameStableFile(this.marker, current))
294
+ publicationConflict(this.markerPath);
295
+ }
296
+ publishImmutable(relativeTarget, bytes) {
297
+ const segments = safeSegments(relativeTarget, "immutable entity target");
298
+ if (segments.length < 2)
299
+ throw new Error(`unsafe immutable entity target '${relativeTarget}'`);
300
+ const directories = [];
301
+ const target = path.join(this.projectRoot, ...segments);
302
+ let stage;
303
+ let published;
304
+ let publicationOwned = false;
305
+ try {
306
+ directories.push(...this.openDirectories(segments.slice(0, -1), true));
307
+ const directory = directories.at(-1)?.absolute ?? this.projectRoot;
308
+ const existing = readFileIfPresent(target, `immutable entity target '${relativeTarget}'`);
309
+ if (existing) {
310
+ this.removeCreatedDirectories(directories);
311
+ return null;
312
+ }
313
+ const stagePath = path.join(directory, `.${segments.at(-1)}.${process.pid}.${randomUUID()}.tmp`);
314
+ stage = createDurableFile(stagePath, bytes);
315
+ this.assertBoundary(directories, undefined, [stage]);
316
+ if (readFileIfPresent(target, `immutable entity target '${relativeTarget}'`)) {
317
+ removeExactFile(stage);
318
+ stage = undefined;
319
+ this.removeCreatedDirectories(directories);
320
+ return null;
321
+ }
322
+ try {
323
+ fs.linkSync(stage.absolute, target);
324
+ }
325
+ catch (error) {
326
+ if (error.code === "EEXIST") {
327
+ removeExactFile(stage);
328
+ stage = undefined;
329
+ this.removeCreatedDirectories(directories);
330
+ return null;
331
+ }
332
+ throw new FileReplacementError(`immutable publication for '${relativeTarget}' failed before effects`, error);
333
+ }
334
+ syncDirectory(directory);
335
+ stage = readStableFile(stage.absolute, `immutable publication stage '${relativeTarget}'`);
336
+ published = readStableFile(target, `published entity '${relativeTarget}'`);
337
+ if (!published.bytes.equals(Buffer.from(bytes)) || published.identity.ino !== stage.identity.ino || published.identity.dev !== stage.identity.dev) {
338
+ throw new ExactReplacementConflictError(`immutable entity target '${relativeTarget}' changed at its publication boundary`);
339
+ }
340
+ publicationOwned = true;
341
+ this.assertBoundary(directories, published, [stage]);
342
+ removeExactFile(stage);
343
+ stage = undefined;
344
+ syncDirectory(directory);
345
+ published = readStableFile(target, `published entity '${relativeTarget}'`);
346
+ this.assertBoundary(directories, published);
347
+ for (const entry of directories.filter(({ created }) => created)) {
348
+ this.createdDirectories.set(relativeDisplay(this.projectRoot, entry.absolute), entry);
349
+ }
350
+ return publishedIdentity(published);
351
+ }
352
+ catch (error) {
353
+ if (publicationOwned && published) {
354
+ if (stage) {
355
+ try {
356
+ if (removeExactFile(stage))
357
+ stage = undefined;
358
+ }
359
+ catch { /* Preserve changed attempt bytes. */ }
360
+ }
361
+ if (!stage) {
362
+ try {
363
+ const current = readFileIfPresent(target, `failed immutable publication '${relativeTarget}'`);
364
+ if (current && matchesPublished(current, publishedIdentity(published)))
365
+ removeExactFile(current);
366
+ }
367
+ catch { /* Preserve a changed successor. */ }
368
+ }
369
+ }
370
+ if (stage) {
371
+ try {
372
+ removeExactFile(stage);
373
+ }
374
+ catch { /* Preserve changed attempt bytes. */ }
375
+ }
376
+ this.removeCreatedDirectories(directories);
377
+ throw error;
378
+ }
379
+ }
380
+ publishPreowned(relativeTarget, relativeReceipt, expected) {
381
+ const targetSegments = safeSegments(relativeTarget, "preowned target");
382
+ const receiptSegments = safeSegments(relativeReceipt, "preowned receipt");
383
+ if (targetSegments.length < 2 || receiptSegments.length < 2)
384
+ throw new Error("unsafe preowned publication path");
385
+ this.assertValid();
386
+ const receipt = readStableFile(path.join(this.projectRoot, ...receiptSegments), `preowned receipt '${relativeReceipt}'`);
387
+ if (!matchesPublished(receipt, expected))
388
+ throw new Error(`preowned receipt '${relativeReceipt}' changed before publication`);
389
+ const directories = this.openDirectories(targetSegments.slice(0, -1), true);
390
+ const directory = directories.at(-1)?.absolute ?? this.projectRoot;
391
+ const target = path.join(directory, targetSegments.at(-1));
392
+ try {
393
+ this.assertBoundary(directories, undefined, [receipt]);
394
+ if (!readFileIfPresent(target, `preowned target '${relativeTarget}'`)) {
395
+ try {
396
+ fs.linkSync(receipt.absolute, target);
397
+ syncDirectory(directory);
398
+ }
399
+ catch (error) {
400
+ if (error.code !== "EEXIST")
401
+ throw error;
402
+ }
403
+ }
404
+ const published = readStableFile(target, `preowned target '${relativeTarget}'`);
405
+ if (!matchesPublished(published, expected) || published.identity.dev !== receipt.identity.dev || published.identity.ino !== receipt.identity.ino) {
406
+ throw new Error(`canonical target '${relativeTarget}' collides with migration ownership receipt; byte-identical replacement inodes are never adopted`);
407
+ }
408
+ this.assertBoundary(directories, published, [receipt]);
409
+ for (const entry of directories.filter(({ created }) => created)) {
410
+ this.createdDirectories.set(relativeDisplay(this.projectRoot, entry.absolute), entry);
411
+ }
412
+ return publishedIdentity(published);
413
+ }
414
+ catch (error) {
415
+ this.removeCreatedDirectories(directories);
416
+ throw error;
417
+ }
418
+ }
419
+ removeExact(relativeTarget, expected, verifyContext = true) {
420
+ const segments = safeSegments(relativeTarget, "exact removal target");
421
+ const directories = this.openDirectories(segments.slice(0, -1), false, true, verifyContext);
422
+ if (!directories)
423
+ return "absent";
424
+ const directory = directories.at(-1)?.absolute ?? this.projectRoot;
425
+ const target = path.join(directory, segments.at(-1));
426
+ const current = readFileIfPresent(target, `exact removal target '${relativeTarget}'`);
427
+ if (!current)
428
+ return "absent";
429
+ if (!matchesPublished(current, expected))
430
+ return "identity_mismatch";
431
+ this.assertBoundary(directories, current, [], verifyContext);
432
+ const confirmed = readStableFile(target, `exact removal target '${relativeTarget}'`);
433
+ if (!sameStableFile(current, confirmed))
434
+ return "identity_mismatch";
435
+ fs.unlinkSync(target);
436
+ syncDirectory(directory);
437
+ this.removeAttemptDirectories();
438
+ return "removed";
439
+ }
440
+ replaceExisting(relativeTarget, expectedBytes, bytes, maxEntityBytes) {
441
+ return this.replaceOwned(relativeTarget, expectedBytes, bytes, maxEntityBytes);
442
+ }
443
+ replaceVisible(relativeTarget, expectedBytes, bytes, maxEntityBytes) {
444
+ return this.replaceOwned(relativeTarget, expectedBytes, bytes, maxEntityBytes);
445
+ }
446
+ restoreExact(relativeTarget, expected, bytes, maxEntityBytes) {
447
+ return this.replaceOwned(relativeTarget, expected, bytes, maxEntityBytes, false);
448
+ }
449
+ restoreVisible(relativeTarget, expected, bytes, maxEntityBytes) {
450
+ return this.replaceOwned(relativeTarget, expected, bytes, maxEntityBytes, false);
451
+ }
452
+ close() {
453
+ this.closed = true;
454
+ }
455
+ replaceOwned(relativeTarget, expected, bytes, maxEntityBytes, verifyContext = true) {
456
+ const segments = safeSegments(relativeTarget, "recoverable replacement target");
457
+ const directories = this.openDirectories(segments.slice(0, -1), false, false, verifyContext);
458
+ if (!directories)
459
+ throw new FileReplacementError(`replacement target '${relativeTarget}' is absent before publication`);
460
+ const directory = directories.at(-1)?.absolute ?? this.projectRoot;
461
+ const target = path.join(directory, segments.at(-1));
462
+ const baseline = readStableFile(target, `replacement target '${relativeTarget}'`);
463
+ if (!matchesExpected(baseline, expected)) {
464
+ throw new ExactReplacementConflictError(`target '${relativeTarget}' ownership or bytes changed before replacement; the detected change was preserved`);
465
+ }
466
+ if (!Number.isSafeInteger(maxEntityBytes) || maxEntityBytes < 1 || baseline.bytes.length > maxEntityBytes) {
467
+ throw new FileReplacementError(`target '${relativeTarget}' exact ${baseline.bytes.length}-byte baseline exceeds the authority-owned ${maxEntityBytes}-byte recovery limit`);
468
+ }
469
+ const after = Buffer.from(bytes);
470
+ let recovery;
471
+ let backup;
472
+ let stage;
473
+ let metadata;
474
+ let committed;
475
+ let renameCompleted = false;
476
+ try {
477
+ recovery = this.createRecoveryAttempt(directory);
478
+ backup = createDurableFile(path.join(recovery.attempt.absolute, "original.previous"), baseline.bytes);
479
+ stage = createDurableFile(path.join(recovery.attempt.absolute, "replacement.tmp"), after, Number(baseline.identity.mode & 4095n));
480
+ metadata = createDurableFile(path.join(recovery.attempt.absolute, FILE_REPLACEMENT_METADATA_NAME), `${JSON.stringify({
481
+ schema_version: FILE_REPLACEMENT_RECOVERY_VERSION,
482
+ target_path: segments.join("/"),
483
+ before_sha256: sha256(baseline.bytes),
484
+ after_sha256: sha256(after),
485
+ })}\n`);
486
+ syncDirectory(recovery.attempt.absolute);
487
+ this.assertBoundary(directories, baseline, [backup, stage, metadata], verifyContext);
488
+ const boundaryTarget = readStableFile(target, `replacement target '${relativeTarget}'`);
489
+ if (!sameStableFile(boundaryTarget, baseline)) {
490
+ throw new ExactReplacementConflictError(`target '${relativeTarget}' changed at the final validation boundary; the detected change was preserved`);
491
+ }
492
+ try {
493
+ fs.renameSync(stage.absolute, target);
494
+ renameCompleted = true;
495
+ }
496
+ catch (error) {
497
+ throw new FileReplacementError(`complete-file replacement for '${relativeTarget}' failed before publication${error.code ? ` (${error.code})` : ""}`, error);
498
+ }
499
+ syncDirectory(directory);
500
+ syncDirectory(recovery.attempt.absolute);
501
+ const published = readStableFile(target, `published replacement '${relativeTarget}'`);
502
+ if (!published.bytes.equals(after)) {
503
+ throw new ExactReplacementConflictError(`target '${relativeTarget}' changed through the publication boundary`);
504
+ }
505
+ this.assertBoundary(directories, published, [backup, metadata], verifyContext);
506
+ committed = { previousBytes: baseline.bytes.toString("utf8"), publishedIdentity: publishedIdentity(published) };
507
+ this.cleanupCommittedReplacement(recovery.attempt.absolute, [backup, metadata]);
508
+ backup = undefined;
509
+ metadata = undefined;
510
+ stage = undefined;
511
+ return committed;
512
+ }
513
+ catch (error) {
514
+ if (committed)
515
+ return committed;
516
+ let current = null;
517
+ try {
518
+ current = readFileIfPresent(target, `replacement target '${relativeTarget}'`);
519
+ }
520
+ catch { /* Preserve all recovery evidence. */ }
521
+ if (!renameCompleted && error instanceof ExactReplacementConflictError) {
522
+ const retained = this.cleanupAttemptFiles([stage, backup, metadata]);
523
+ stage = undefined;
524
+ backup = undefined;
525
+ metadata = undefined;
526
+ if (retained.length) {
527
+ throw new ExactReplacementConflictError(`${error.message}; cleanup retained changed recovery roles`, retained);
528
+ }
529
+ throw error;
530
+ }
531
+ if (renameCompleted && current?.bytes.equals(after) && backup) {
532
+ try {
533
+ this.assertBoundary(directories, current, [backup], false);
534
+ fs.renameSync(backup.absolute, target);
535
+ backup = undefined;
536
+ syncDirectory(directory);
537
+ const restored = readStableFile(target, `restored replacement target '${relativeTarget}'`);
538
+ if (!restored.bytes.equals(baseline.bytes))
539
+ throw new Error("restored bytes do not match the exact baseline");
540
+ if (stage) {
541
+ try {
542
+ removeExactFile(stage);
543
+ }
544
+ catch { /* Preserve changed stage. */ }
545
+ stage = undefined;
546
+ }
547
+ if (metadata) {
548
+ try {
549
+ removeExactFile(metadata);
550
+ }
551
+ catch { /* Preserve changed metadata. */ }
552
+ metadata = undefined;
553
+ }
554
+ syncDirectoryBestEffort(recovery?.attempt.absolute ?? directory);
555
+ throw new FileReplacementError(`${error.message}; restored exact prior bytes at '${relativeTarget}'`, error);
556
+ }
557
+ catch (restoreError) {
558
+ if (restoreError instanceof FileReplacementError && restoreError.cause === error)
559
+ throw restoreError;
560
+ }
561
+ }
562
+ if (!renameCompleted && current && sameStableFile(current, baseline)) {
563
+ const retained = this.cleanupAttemptFiles([stage, backup, metadata]);
564
+ stage = undefined;
565
+ backup = undefined;
566
+ metadata = undefined;
567
+ if (retained.length) {
568
+ throw new ExactReplacementConflictError(`${error.message}; cleanup retained changed recovery roles`, retained);
569
+ }
570
+ if (error instanceof ExactReplacementConflictError || error instanceof FileReplacementError || error instanceof StateWriteInputError)
571
+ throw error;
572
+ throw new FileReplacementError(`${error.message}; target bytes remained unchanged`, error);
573
+ }
574
+ const retained = [backup, stage, metadata]
575
+ .filter((file) => Boolean(file && fs.existsSync(file.absolute)))
576
+ .map((file) => relativeDisplay(this.projectRoot, file.absolute));
577
+ throw new ExactReplacementConflictError(`${error.message}; recoverable publication did not report success and preserved the canonical target plus ${retained.length} bounded recovery role${retained.length === 1 ? "" : "s"}`, retained);
578
+ }
579
+ finally {
580
+ if (recovery)
581
+ this.closeRecoveryAttempt(recovery);
582
+ }
583
+ }
584
+ openDirectories(segments, create, missingIsAbsent = false, verifyContext = true) {
585
+ const directories = [];
586
+ let parent = this.projectRoot;
587
+ for (const segment of segments) {
588
+ if (verifyContext)
589
+ this.assertValid();
590
+ else
591
+ assertValidatedProjectRoot(this.validatedRoot);
592
+ const absolute = path.join(parent, segment);
593
+ let entry;
594
+ try {
595
+ entry = readStableDirectory(absolute);
596
+ }
597
+ catch (error) {
598
+ if (error.code === "ENOENT" || error.message.includes("ENOENT")) {
599
+ if (missingIsAbsent)
600
+ return null;
601
+ if (!create)
602
+ throw error;
603
+ this.assertBoundary(directories, undefined, [], verifyContext);
604
+ fs.mkdirSync(absolute, 0o700);
605
+ syncDirectory(parent);
606
+ entry = readStableDirectory(absolute, true);
607
+ }
608
+ else
609
+ throw error;
610
+ }
611
+ directories.push(entry);
612
+ parent = absolute;
613
+ }
614
+ return directories;
615
+ }
616
+ assertBoundary(directories, target, roles = [], verifyContext = true) {
617
+ if (verifyContext)
618
+ this.assertValid();
619
+ else
620
+ assertValidatedProjectRoot(this.validatedRoot);
621
+ for (const directory of directories) {
622
+ let current;
623
+ try {
624
+ current = fs.lstatSync(directory.absolute, { bigint: true });
625
+ }
626
+ catch {
627
+ throw new ExactReplacementConflictError(`publication directory '${relativeDisplay(this.projectRoot, directory.absolute)}' changed at a validation boundary`);
628
+ }
629
+ if (!sameDirectory(directory, current)) {
630
+ throw new ExactReplacementConflictError(`publication directory '${relativeDisplay(this.projectRoot, directory.absolute)}' changed at a validation boundary`);
631
+ }
632
+ }
633
+ if (target) {
634
+ const current = readFileIfPresent(target.absolute, `publication target '${relativeDisplay(this.projectRoot, target.absolute)}'`);
635
+ if (!current || !sameStableFile(target, current)) {
636
+ throw new ExactReplacementConflictError(`publication target '${relativeDisplay(this.projectRoot, target.absolute)}' changed at a validation boundary`);
637
+ }
638
+ }
639
+ for (const role of roles) {
640
+ const current = readFileIfPresent(role.absolute, `publication role '${relativeDisplay(this.projectRoot, role.absolute)}'`);
641
+ if (!current || !sameStableFile(role, current)) {
642
+ throw new ExactReplacementConflictError(`publication recovery role '${relativeDisplay(this.projectRoot, role.absolute)}' changed at a validation boundary`);
643
+ }
644
+ }
645
+ }
646
+ createRecoveryAttempt(targetDirectory) {
647
+ const agentera = readStableDirectory(path.join(this.projectRoot, ".agentera"));
648
+ const rootPath = path.join(agentera.absolute, ".entity-recovery");
649
+ let rootCreated = false;
650
+ let ignoreCreated = false;
651
+ let root;
652
+ let ignore;
653
+ let attempt;
654
+ try {
655
+ try {
656
+ root = readStableDirectory(rootPath);
657
+ }
658
+ catch (error) {
659
+ if (!error.message.includes("ENOENT")) {
660
+ throw new FileReplacementError(`private entity recovery root '.agentera/.entity-recovery' cannot be opened safely: ${error.message}`, error);
661
+ }
662
+ fs.mkdirSync(rootPath, 0o700);
663
+ rootCreated = true;
664
+ syncDirectory(agentera.absolute);
665
+ root = readStableDirectory(rootPath, true);
666
+ }
667
+ const trustedRoot = validateEntityRecoveryDirectory(this.validatedRoot, root.absolute, targetDirectory, "private entity recovery root '.agentera/.entity-recovery'", root);
668
+ root = { ...trustedRoot, created: rootCreated };
669
+ const ignorePath = path.join(root.absolute, ".gitignore");
670
+ const existingIgnore = readFileIfPresent(ignorePath, "private entity recovery ignore marker");
671
+ if (existingIgnore)
672
+ ignore = existingIgnore;
673
+ else {
674
+ ignore = createDurableFile(ignorePath, RECOVERY_IGNORE_BYTES);
675
+ ignoreCreated = true;
676
+ }
677
+ if (!ignore.bytes.equals(Buffer.from(RECOVERY_IGNORE_BYTES))) {
678
+ throw new FileReplacementError("private entity recovery ignore marker must contain the authoritative rules");
679
+ }
680
+ const ignoreStat = fs.lstatSync(ignore.absolute, { bigint: true });
681
+ if (typeof process.getuid === "function" && ((ignoreStat.mode & 18n) !== 0n || ignoreStat.uid !== BigInt(process.getuid()))) {
682
+ throw new FileReplacementError("private entity recovery ignore marker must be owner-controlled and not group/world-writable");
683
+ }
684
+ syncDirectory(root.absolute);
685
+ for (let index = 0; index < 8; index += 1) {
686
+ const attemptPath = path.join(root.absolute, `entity-${process.pid}-${randomUUID()}`);
687
+ try {
688
+ fs.mkdirSync(attemptPath, 0o700);
689
+ const opened = readStableDirectory(attemptPath, true);
690
+ attempt = opened;
691
+ const trusted = validateEntityRecoveryDirectory(this.validatedRoot, attemptPath, targetDirectory, `private entity recovery attempt '${relativeDisplay(this.projectRoot, attemptPath)}'`, opened);
692
+ attempt = { ...trusted, created: true };
693
+ break;
694
+ }
695
+ catch (error) {
696
+ if (error.code !== "EEXIST")
697
+ throw error;
698
+ }
699
+ }
700
+ if (!attempt)
701
+ throw new FileReplacementError("could not allocate a unique private entity recovery attempt after 8 tries");
702
+ syncDirectory(root.absolute);
703
+ return { root, attempt, ignore, relativePath: relativeDisplay(this.projectRoot, attempt.absolute) };
704
+ }
705
+ catch (error) {
706
+ if (attempt) {
707
+ try {
708
+ fs.rmdirSync(attempt.absolute);
709
+ }
710
+ catch { /* Preserve unexpected contents. */ }
711
+ }
712
+ if (ignore && ignoreCreated) {
713
+ try {
714
+ removeExactFile(ignore);
715
+ }
716
+ catch { /* Preserve changed marker. */ }
717
+ }
718
+ if (root && rootCreated) {
719
+ try {
720
+ fs.rmdirSync(root.absolute);
721
+ }
722
+ catch { /* Preserve non-empty root. */ }
723
+ }
724
+ throw error;
725
+ }
726
+ }
727
+ cleanupAttemptFiles(files) {
728
+ const retained = [];
729
+ for (const file of files) {
730
+ if (!file)
731
+ continue;
732
+ try {
733
+ if (!removeExactFile(file) && fs.existsSync(file.absolute))
734
+ retained.push(relativeDisplay(this.projectRoot, file.absolute));
735
+ }
736
+ catch {
737
+ retained.push(relativeDisplay(this.projectRoot, file.absolute));
738
+ }
739
+ }
740
+ return retained;
741
+ }
742
+ cleanupCommittedReplacement(directory, files) {
743
+ this.cleanupAttemptFiles(files);
744
+ syncDirectoryBestEffort(directory);
745
+ }
746
+ closeRecoveryAttempt(recovery) {
747
+ try {
748
+ fs.rmdirSync(recovery.attempt.absolute);
749
+ syncDirectoryBestEffort(recovery.root.absolute);
750
+ }
751
+ catch {
752
+ return;
753
+ }
754
+ try {
755
+ const names = fs.readdirSync(recovery.root.absolute);
756
+ if (names.length === 1 && names[0] === ".gitignore") {
757
+ removeExactFile(recovery.ignore);
758
+ syncDirectoryBestEffort(recovery.root.absolute);
759
+ }
760
+ if (fs.readdirSync(recovery.root.absolute).length === 0) {
761
+ fs.rmdirSync(recovery.root.absolute);
762
+ syncDirectoryBestEffort(path.dirname(recovery.root.absolute));
763
+ }
764
+ }
765
+ catch { /* Preserve non-empty or changed recovery authority. */ }
766
+ }
767
+ removeCreatedDirectories(directories) {
768
+ for (const directory of [...directories].reverse()) {
769
+ if (!directory.created)
770
+ continue;
771
+ try {
772
+ const current = fs.lstatSync(directory.absolute, { bigint: true });
773
+ if (!sameDirectory(directory, current))
774
+ continue;
775
+ fs.rmdirSync(directory.absolute);
776
+ syncDirectoryBestEffort(path.dirname(directory.absolute));
777
+ }
778
+ catch (error) {
779
+ if (!["ENOTEMPTY", "EEXIST", "ENOENT"].includes(error.code ?? ""))
780
+ throw error;
781
+ }
782
+ }
783
+ }
784
+ removeAttemptDirectories() {
785
+ const paths = [...this.createdDirectories].sort((left, right) => right[0].split("/").length - left[0].split("/").length);
786
+ for (const [relativePath, expected] of paths) {
787
+ try {
788
+ const current = fs.lstatSync(expected.absolute, { bigint: true });
789
+ if (!sameDirectory(expected, current)) {
790
+ this.createdDirectories.delete(relativePath);
791
+ continue;
792
+ }
793
+ fs.rmdirSync(expected.absolute);
794
+ syncDirectoryBestEffort(path.dirname(expected.absolute));
795
+ this.createdDirectories.delete(relativePath);
796
+ }
797
+ catch (error) {
798
+ const code = error.code ?? "";
799
+ if (code === "ENOENT")
800
+ this.createdDirectories.delete(relativePath);
801
+ else if (!["ENOTEMPTY", "EEXIST"].includes(code))
802
+ throw error;
803
+ }
804
+ }
805
+ }
806
+ }
807
+ //# sourceMappingURL=entityPublicationContext.js.map