agentera 3.0.0-dev.8 → 3.0.0-dev.81

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 (725) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +252 -22
  3. package/bundle/.agentera-build-source.json +8 -0
  4. package/bundle/CHANGELOG.md +1389 -0
  5. package/bundle/DESIGN.md +229 -0
  6. package/bundle/LICENSE +201 -0
  7. package/bundle/README.md +142 -0
  8. package/bundle/UPGRADE.md +275 -0
  9. package/bundle/extract-corpus-parity.json +2 -4
  10. package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
  11. package/bundle/references/adapters/package-publication.json +484 -0
  12. package/bundle/references/adapters/package-registry.yaml +443 -188
  13. package/bundle/references/adapters/package-surface-characterization.md +68 -34
  14. package/bundle/references/adapters/product-v1-reset.yaml +101 -0
  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 +357 -0
  19. package/bundle/references/analysis/evidence-tier-authority.yaml +559 -0
  20. package/bundle/references/analysis/personal-glossary-evaluation-authority.yaml +175 -0
  21. package/bundle/references/analysis/personal-glossary-evaluation-corpus.yaml +291 -0
  22. package/bundle/references/analysis/personal-glossary-holdout.yaml +192 -0
  23. package/bundle/references/analysis/verification-policy.yaml +262 -0
  24. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +17 -8
  25. package/bundle/references/artifacts/glossary-entry-contract.yaml +2906 -0
  26. package/bundle/references/artifacts/state-storage-authority.yaml +3075 -0
  27. package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
  28. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +3 -4
  29. package/bundle/references/cli/capability-instruction-contract.yaml +11 -14
  30. package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
  31. package/bundle/references/cli/routing-model.md +152 -93
  32. package/bundle/references/cli/trigger-schema-enrichment.md +57 -46
  33. package/bundle/references/cli/update-channels.yaml +7 -5
  34. package/bundle/references/cli/vocabulary-index.yaml +7 -9
  35. package/bundle/references/cli/vocabulary.md +54 -97
  36. package/bundle/references/meta/retained-reference-authority.yaml +171 -0
  37. package/bundle/skills/agentera/SKILL.md +183 -63
  38. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +27 -19
  39. package/bundle/skills/agentera/capabilities/audit/schemas/exit.yaml +2 -2
  40. package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +13 -35
  41. package/bundle/skills/agentera/capabilities/audit/schemas/validation.yaml +30 -11
  42. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +44 -21
  43. package/bundle/skills/agentera/capabilities/build/schemas/exit.yaml +8 -6
  44. package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +14 -36
  45. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +95 -21
  46. package/bundle/skills/agentera/capabilities/design/schemas/artifacts.yaml +6 -6
  47. package/bundle/skills/agentera/capabilities/design/schemas/exit.yaml +5 -5
  48. package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +5 -34
  49. package/bundle/skills/agentera/capabilities/design/schemas/validation.yaml +2 -2
  50. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +17 -13
  51. package/bundle/skills/agentera/capabilities/discuss/schemas/exit.yaml +2 -2
  52. package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +6 -40
  53. package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +72 -5
  54. package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +24 -17
  55. package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +5 -35
  56. package/bundle/skills/agentera/capabilities/document/schemas/validation.yaml +13 -13
  57. package/bundle/skills/agentera/capabilities/optimize/schemas/artifacts.yaml +10 -10
  58. package/bundle/skills/agentera/capabilities/optimize/schemas/exit.yaml +2 -2
  59. package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +4 -35
  60. package/bundle/skills/agentera/capabilities/optimize/schemas/validation.yaml +3 -3
  61. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +34 -22
  62. package/bundle/skills/agentera/capabilities/orchestrate/schemas/exit.yaml +9 -7
  63. package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +5 -37
  64. package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +38 -37
  65. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +20 -16
  66. package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +8 -31
  67. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +66 -6
  68. package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +13 -4
  69. package/bundle/skills/agentera/capabilities/profile/schemas/exit.yaml +8 -5
  70. package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +8 -37
  71. package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +67 -3
  72. package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +6 -6
  73. package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +5 -29
  74. package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +13 -12
  75. package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +7 -49
  76. package/bundle/skills/agentera/capabilities/vision/schemas/artifacts.yaml +8 -8
  77. package/bundle/skills/agentera/capabilities/vision/schemas/exit.yaml +7 -6
  78. package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +7 -39
  79. package/bundle/skills/agentera/capabilities/vision/schemas/validation.yaml +14 -16
  80. package/bundle/skills/agentera/capability_schema_contract.yaml +32 -32
  81. package/bundle/skills/agentera/protocol.yaml +4 -4
  82. package/bundle/skills/agentera/route-phrases.yaml +81 -0
  83. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +1 -0
  84. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +29 -30
  85. package/bundle/skills/agentera/schemas/artifacts/design.yaml +1 -0
  86. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +7 -43
  87. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +140 -34
  88. package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +87 -0
  89. package/bundle/skills/agentera/schemas/artifacts/health.yaml +53 -51
  90. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +18 -35
  91. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +453 -55
  92. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +128 -39
  93. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +305 -7
  94. package/bundle/skills/agentera/schemas/artifacts/vision.yaml +0 -19
  95. package/dist/.agentera-build-source.json +8 -0
  96. package/dist/analytics/extractCorpus/cli.js +52 -11
  97. package/dist/analytics/extractCorpus/copilotSessions.js +19 -8
  98. package/dist/analytics/extractCorpus/core.js +262 -14
  99. package/dist/analytics/extractCorpus/corpus.js +57 -18
  100. package/dist/analytics/extractCorpus/coverageAudit.js +44 -45
  101. package/dist/analytics/extractCorpus/cursorSessions.js +28 -8
  102. package/dist/analytics/extractCorpus/evidenceTiers.js +709 -0
  103. package/dist/analytics/extractCorpus/extractCorpusParity.js +4 -4
  104. package/dist/analytics/extractCorpus/filesystemSources.js +5 -5
  105. package/dist/analytics/extractCorpus/index.js +4 -2
  106. package/dist/analytics/extractCorpus/jsonlSessions.js +76 -8
  107. package/dist/analytics/extractCorpus/sqliteCaps.js +0 -1
  108. package/dist/analytics/extractCorpus/sqliteSessions.js +12 -4
  109. package/dist/analytics/extractCorpus/tierReader.js +108 -0
  110. package/dist/analytics/extractCorpus.js +0 -1
  111. package/dist/analytics/glossaryAdviceResolution.js +166 -0
  112. package/dist/analytics/glossaryInputAcquisition.js +319 -0
  113. package/dist/analytics/personalGlossaryAdmission.js +113 -0
  114. package/dist/analytics/personalGlossaryCandidateProjection.js +788 -0
  115. package/dist/analytics/personalGlossaryCandidateProjectionExcerpts.js +144 -0
  116. package/dist/analytics/personalGlossaryCandidateProjectionModel.js +1 -0
  117. package/dist/analytics/personalGlossaryCandidateReadView.js +23 -0
  118. package/dist/analytics/personalGlossaryCurrentGeneration.js +25 -0
  119. package/dist/analytics/personalGlossaryDecision.js +203 -0
  120. package/dist/analytics/personalGlossaryExplicit.js +788 -0
  121. package/dist/analytics/personalGlossaryExplicitMining.js +285 -0
  122. package/dist/analytics/personalGlossaryExplicitScope.js +41 -0
  123. package/dist/analytics/personalGlossaryExplicitSegments.js +418 -0
  124. package/dist/analytics/personalGlossaryExplicitTypes.js +26 -0
  125. package/dist/analytics/personalGlossaryLexicalClassifier.js +175 -0
  126. package/dist/analytics/personalGlossaryProfile.js +229 -0
  127. package/dist/analytics/personalGlossaryRecurrence.js +618 -0
  128. package/dist/analytics/personalGlossaryRefreshProjection.js +351 -0
  129. package/dist/analytics/personalGlossaryReviewRecordStorage.js +428 -0
  130. package/dist/analytics/personalGlossaryReviewRecords.js +332 -0
  131. package/dist/analytics/profileSignals.js +211 -0
  132. package/dist/analytics/usageStats.js +150 -23
  133. package/dist/audit/terminologyDrift.js +281 -0
  134. package/dist/bin/agentera.js +3 -2
  135. package/dist/capabilities/audit/instructions.js +16 -6
  136. package/dist/capabilities/build/instructions.js +59 -6
  137. package/dist/capabilities/design/instructions.js +3 -4
  138. package/dist/capabilities/discuss/instructions.js +29 -6
  139. package/dist/capabilities/document/instructions.js +11 -6
  140. package/dist/capabilities/index.js +20 -14
  141. package/dist/capabilities/optimize/instructions.js +14 -6
  142. package/dist/capabilities/orchestrate/instructions.js +42 -6
  143. package/dist/capabilities/plan/instructions.js +30 -3
  144. package/dist/capabilities/profile/instructions.js +104 -5
  145. package/dist/capabilities/research/instructions.js +4 -5
  146. package/dist/capabilities/status/instructions.js +15 -6
  147. package/dist/capabilities/status/startupInstructions.js +34 -0
  148. package/dist/capabilities/vision/instructions.js +3 -5
  149. package/dist/cli/appContext.js +14 -7
  150. package/dist/cli/argvalidate.js +0 -1
  151. package/dist/cli/capabilityContext/benchmark.js +5 -4
  152. package/dist/cli/capabilityContext/bespoke.js +14 -6
  153. package/dist/cli/capabilityContext/build.js +116 -42
  154. package/dist/cli/capabilityContext/closeout.js +30 -27
  155. package/dist/cli/capabilityContext/contract.js +18 -27
  156. package/dist/cli/capabilityContext/evidence.js +84 -77
  157. package/dist/cli/capabilityContext/index.js +0 -1
  158. package/dist/cli/capabilityContext/orchestration.js +42 -18
  159. package/dist/cli/capabilityContext/planState.js +89 -96
  160. package/dist/cli/capabilityContext/progress.js +52 -12
  161. package/dist/cli/capabilityContext/projectVerification.js +409 -0
  162. package/dist/cli/capabilityContext/shared.js +9 -20
  163. package/dist/cli/capabilityContext/slim.js +52 -8
  164. package/dist/cli/capabilityContext/startup.js +51 -114
  165. package/dist/cli/capabilityContext/startupAggregation.js +68 -0
  166. package/dist/cli/capabilityContext/types.js +26 -10
  167. package/dist/cli/capabilityContext.js +0 -1
  168. package/dist/cli/commands/appHome.js +0 -1
  169. package/dist/cli/commands/capability.js +2 -2
  170. package/dist/cli/commands/compact.js +163 -13
  171. package/dist/cli/commands/doctor.js +162 -11
  172. package/dist/cli/commands/durability.js +81 -0
  173. package/dist/cli/commands/glossaryAdvice.js +138 -0
  174. package/dist/cli/commands/lint.js +22 -8
  175. package/dist/cli/commands/personalGlossaryCandidateReads.js +755 -0
  176. package/dist/cli/commands/personalGlossaryDecision.js +349 -0
  177. package/dist/cli/commands/personalGlossaryPublish.js +484 -0
  178. package/dist/cli/commands/personalGlossaryReviewRecordReads.js +209 -0
  179. package/dist/cli/commands/personalGlossaryReviewRecords.js +623 -0
  180. package/dist/cli/commands/prime/briefOrientation.js +845 -0
  181. package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
  182. package/dist/cli/commands/prime/bundleStatus.js +54 -4
  183. package/dist/cli/commands/prime/collectEntityOrientation.js +338 -0
  184. package/dist/cli/commands/prime/collectOrientationState.js +124 -68
  185. package/dist/cli/commands/prime/orientationOutput.js +271 -59
  186. package/dist/cli/commands/prime/types.js +0 -1
  187. package/dist/cli/commands/prime.js +89 -11
  188. package/dist/cli/commands/profileGrounding.js +55 -0
  189. package/dist/cli/commands/query.js +74 -52
  190. package/dist/cli/commands/report.js +187 -27
  191. package/dist/cli/commands/route.js +142 -0
  192. package/dist/cli/commands/schema.js +436 -138
  193. package/dist/cli/commands/state/decisions.js +40 -56
  194. package/dist/cli/commands/state/docs.js +58 -85
  195. package/dist/cli/commands/state/experimentRecords.js +151 -0
  196. package/dist/cli/commands/state/experiments.js +11 -65
  197. package/dist/cli/commands/state/get.js +129 -0
  198. package/dist/cli/commands/state/health.js +11 -113
  199. package/dist/cli/commands/state/index.js +6 -41
  200. package/dist/cli/commands/state/list.js +194 -0
  201. package/dist/cli/commands/state/objective.js +21 -65
  202. package/dist/cli/commands/state/plan.js +11 -170
  203. package/dist/cli/commands/state/planTasks.js +154 -0
  204. package/dist/cli/commands/state/plans.js +154 -0
  205. package/dist/cli/commands/state/progress.js +11 -45
  206. package/dist/cli/commands/state/shared.js +0 -1
  207. package/dist/cli/commands/state/todo.js +28 -107
  208. package/dist/cli/commands/state/write.js +459 -0
  209. package/dist/cli/commands/upgrade.js +176 -5
  210. package/dist/cli/commands/upgradeVerify.js +118 -0
  211. package/dist/cli/commands/validate.js +235 -136
  212. package/dist/cli/commands/verify.js +73 -16
  213. package/dist/cli/contracts/bundleStatus.js +0 -1
  214. package/dist/cli/contracts/orientationState.js +0 -1
  215. package/dist/cli/dispatch/argvParser.js +0 -1
  216. package/dist/cli/dispatch/check.js +84 -40
  217. package/dist/cli/dispatch/commands.js +3 -3
  218. package/dist/cli/dispatch/index.js +84 -52
  219. package/dist/cli/dispatch/lifecycle.js +182 -62
  220. package/dist/cli/dispatch/prime.js +37 -2
  221. package/dist/cli/dispatch/projections.js +17 -0
  222. package/dist/cli/dispatch/shared.js +1 -2
  223. package/dist/cli/dispatch/state.js +62 -66
  224. package/dist/cli/dispatch.js +0 -1
  225. package/dist/cli/errors.js +16 -17
  226. package/dist/cli/help.js +419 -41
  227. package/dist/cli/migrationRequired.js +125 -0
  228. package/dist/cli/orientation/attention.js +19 -22
  229. package/dist/cli/orientation/corpusCoverage.js +32 -1
  230. package/dist/cli/orientation.js +346 -129
  231. package/dist/cli/planArtifacts.js +350 -0
  232. package/dist/cli/planEvidence.js +157 -0
  233. package/dist/cli/planLifecycleState.js +36 -0
  234. package/dist/cli/planTaskIndex.js +11 -0
  235. package/dist/cli/preCutoverCommand.js +32 -0
  236. package/dist/cli/prime-blob.js +71 -3
  237. package/dist/cli/productV1Eol.js +55 -0
  238. package/dist/cli/profileAcquisition.js +167 -0
  239. package/dist/cli/startupCompletenessContract.js +11 -9
  240. package/dist/cli/stateQuery.js +47 -12
  241. package/dist/cli/structured.js +0 -1
  242. package/dist/cli/todoMarkdown.js +25 -12
  243. package/dist/cli/todoReadinessSelection.js +192 -0
  244. package/dist/cli/todoSeverity.js +0 -1
  245. package/dist/core/atomicWriter.js +23 -0
  246. package/dist/core/developmentChannel.js +1 -0
  247. package/dist/core/developmentInvocation.js +377 -0
  248. package/dist/core/difflib.js +0 -1
  249. package/dist/core/envPaths.js +0 -1
  250. package/dist/core/jsonValue.js +0 -1
  251. package/dist/core/paths.js +0 -1
  252. package/dist/core/pyjson.js +0 -1
  253. package/dist/core/shell.js +4 -0
  254. package/dist/core/skillIdentity.js +23 -0
  255. package/dist/core/sourceRoot.js +9 -12
  256. package/dist/core/text.js +10 -0
  257. package/dist/core/toml.js +0 -1
  258. package/dist/core/yaml.js +61 -2
  259. package/dist/eval/evalSkills.js +13 -14
  260. package/dist/eval/glossaryEvaluation.js +751 -0
  261. package/dist/eval/glossaryEvaluationProcess.js +29 -0
  262. package/dist/eval/glossaryEvaluationRunner.js +571 -0
  263. package/dist/eval/glossaryEvaluationSuccessReport.js +297 -0
  264. package/dist/eval/hybridRouteEvaluation.js +155 -0
  265. package/dist/eval/semanticEval.js +0 -1
  266. package/dist/eval/semanticFixtures.js +0 -1
  267. package/dist/hooks/common.js +3 -56
  268. package/dist/hooks/compaction/apply.js +224 -47
  269. package/dist/hooks/compaction/dryRun.js +2 -1
  270. package/dist/hooks/compaction/index.js +5 -6
  271. package/dist/hooks/compaction/parse.js +73 -6
  272. package/dist/hooks/compaction/retention.js +28 -25
  273. package/dist/hooks/compaction/status.js +145 -26
  274. package/dist/hooks/compaction/types.js +0 -1
  275. package/dist/hooks/validateArtifact/agentFacing.js +0 -1
  276. package/dist/hooks/validateArtifact/index.js +6 -65
  277. package/dist/hooks/validateArtifact/markdown.js +9 -10
  278. package/dist/hooks/validateArtifact/schema.js +96 -9
  279. package/dist/hooks/validateArtifact/traversal.js +12 -11
  280. package/dist/hooks/validateArtifact/violations.js +5 -3
  281. package/dist/migrate/v2HandoffManifest.js +8 -3
  282. package/dist/registries/activationContract.js +2 -0
  283. package/dist/registries/activationTuples.js +145 -0
  284. package/dist/registries/artifactProtocolIds.js +2 -1
  285. package/dist/registries/artifactRegistry.js +207 -60
  286. package/dist/registries/artifactSchemaProjection.js +45 -0
  287. package/dist/registries/capabilityContract.js +5 -21
  288. package/dist/registries/evaluatorHandoffContract.js +0 -1
  289. package/dist/registries/evidenceTierContract.js +375 -0
  290. package/dist/registries/explicitSegmentGrammarContract.js +619 -0
  291. package/dist/registries/glossaryAdviceContract.js +79 -0
  292. package/dist/registries/glossaryCandidateContractPaths.js +6 -0
  293. package/dist/registries/glossaryCandidateContracts.js +820 -0
  294. package/dist/registries/glossaryCandidateDecisionAuthority.js +119 -0
  295. package/dist/registries/glossaryCandidateDecisionContract.js +62 -0
  296. package/dist/registries/glossaryCandidateProjectionAuthority.js +345 -0
  297. package/dist/registries/glossaryCandidateProjectionContract.js +108 -0
  298. package/dist/registries/glossaryCaveatContract.js +67 -0
  299. package/dist/registries/glossaryConsumerContractValidation.js +787 -0
  300. package/dist/registries/glossaryEntryContract.js +759 -0
  301. package/dist/registries/glossaryEntryTemporal.js +12 -0
  302. package/dist/registries/glossaryMiningAuthority.js +764 -0
  303. package/dist/registries/glossaryProfileFullContract.js +24 -0
  304. package/dist/registries/glossaryReviewRecordsAuthority.js +426 -0
  305. package/dist/registries/glossaryReviewRecordsContract.js +129 -0
  306. package/dist/registries/glossaryTermIdentity.js +139 -0
  307. package/dist/registries/glossaryTermOccurrence.js +20 -0
  308. package/dist/registries/hybridRoute.js +274 -0
  309. package/dist/registries/hybridRouteReceipt.js +221 -0
  310. package/dist/registries/packagePublication.js +273 -0
  311. package/dist/registries/packageRegistry.js +184 -209
  312. package/dist/registries/personalGlossaryContracts.js +1 -0
  313. package/dist/registries/todoReadinessContract.js +448 -0
  314. package/dist/registries/triggerLoader.js +7 -44
  315. package/dist/registries/verbosityBudgetContract.js +205 -0
  316. package/dist/release/releaseMetadata.js +168 -11
  317. package/dist/runtime/lifecycleAdapterContract.js +457 -0
  318. package/dist/runtime/lifecycleAdapters.js +777 -0
  319. package/dist/runtime/lifecycleAuthority.js +453 -0
  320. package/dist/runtime/lifecycleOperationContract.js +123 -0
  321. package/dist/runtime/lifecycleOperations.js +634 -0
  322. package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
  323. package/dist/runtime/lifecyclePublication.js +415 -0
  324. package/dist/runtime/lifecycleSnapshot.js +438 -0
  325. package/dist/runtime/nativeResourceCleanup.js +618 -0
  326. package/dist/setup/opencode.js +20 -13
  327. package/dist/setup/opencodeConstants.js +1 -0
  328. package/dist/setup/sharedSkill.js +45 -0
  329. package/dist/setup/smokeChecks.js +14 -75
  330. package/dist/state/archiveDiscovery.js +580 -0
  331. package/dist/state/archivePublication.js +225 -0
  332. package/dist/state/archiveRecovery.js +237 -0
  333. package/dist/state/archiveReplay.js +53 -0
  334. package/dist/state/canonicalMigrationRecord.js +36 -0
  335. package/dist/state/changelog.js +221 -0
  336. package/dist/state/decisionEntities.js +367 -0
  337. package/dist/state/decisionLegacyValidation.js +215 -0
  338. package/dist/state/decisionMigrationProvenance.js +199 -0
  339. package/dist/state/decisionOverlay.js +254 -0
  340. package/dist/state/decisionRevision.js +256 -0
  341. package/dist/state/decisionRevisionMigration.js +89 -0
  342. package/dist/state/directRetrieval.js +323 -0
  343. package/dist/state/durability.js +324 -0
  344. package/dist/state/entityCutover.js +459 -0
  345. package/dist/state/entityCutoverGit.js +127 -0
  346. package/dist/state/entityGlossaryAuthority.js +13 -0
  347. package/dist/state/entityListProjection.js +187 -0
  348. package/dist/state/entityListRuntimeRegistry.js +85 -0
  349. package/dist/state/entityMigrationCausality.js +97 -0
  350. package/dist/state/entityMigrationIdentity.js +5 -0
  351. package/dist/state/entityMigrationPreview.js +840 -0
  352. package/dist/state/entityMigrationTodo.js +133 -0
  353. package/dist/state/entityPublicationContext.js +859 -0
  354. package/dist/state/entityRetrievalHelp.js +506 -0
  355. package/dist/state/entityStorage.js +894 -0
  356. package/dist/state/entityWriterLock.js +18 -0
  357. package/dist/state/exactReplacementRecovery.js +18 -0
  358. package/dist/state/experimentArchive.js +63 -0
  359. package/dist/state/experimentIdentity.js +202 -0
  360. package/dist/state/healthEntities.js +262 -0
  361. package/dist/state/healthEntityValidation.js +18 -0
  362. package/dist/state/healthRepair.js +69 -0
  363. package/dist/state/installRoot.js +15 -7
  364. package/dist/state/legacyEntityCutoverEvidence.js +65 -0
  365. package/dist/state/legacyIdentity.js +47 -0
  366. package/dist/state/legacySummaryRecord.js +6 -0
  367. package/dist/state/listAccounting.js +54 -0
  368. package/dist/state/listClassification.js +17 -0
  369. package/dist/state/listCursor.js +42 -0
  370. package/dist/state/listRetrieval.js +781 -0
  371. package/dist/state/migrationSourceBinding.js +30 -0
  372. package/dist/state/objectiveExperimentEntities.js +322 -0
  373. package/dist/state/planEntities.js +1027 -0
  374. package/dist/state/planIdentity.js +47 -0
  375. package/dist/state/planLineageValidation.js +52 -0
  376. package/dist/state/planReplacementTransaction.js +475 -0
  377. package/dist/state/planRetrieval.js +313 -0
  378. package/dist/state/planTaskRetrieval.js +294 -0
  379. package/dist/state/progressEntities.js +512 -0
  380. package/dist/state/progressGlossaryCaveat.js +168 -0
  381. package/dist/state/progressPublicationOrder.js +19 -0
  382. package/dist/state/progressWritePolicy.js +33 -0
  383. package/dist/state/projectRoot.js +62 -0
  384. package/dist/state/projectionPolicy.js +190 -0
  385. package/dist/state/retrievalAuthority.js +156 -0
  386. package/dist/state/safeProjectFile.js +155 -0
  387. package/dist/state/startupAnalysis/benchmark.js +70 -9
  388. package/dist/state/startupAnalysis/contract.js +44 -10
  389. package/dist/state/startupAnalysis/helpers.js +1 -2
  390. package/dist/state/startupAnalysis/index.js +0 -1
  391. package/dist/state/startupAnalysis/metrics.js +0 -1
  392. package/dist/state/startupAnalysis/records.js +0 -1
  393. package/dist/state/startupAnalysis/report.js +0 -1
  394. package/dist/state/startupAnalysis/threshold.js +13 -1
  395. package/dist/state/startupAnalysis.js +0 -1
  396. package/dist/state/startupProjection.js +499 -0
  397. package/dist/state/stateMode.js +222 -0
  398. package/dist/state/stateStorageAuthority.js +47 -0
  399. package/dist/state/summaryEntityRead.js +25 -0
  400. package/dist/state/summaryMigrationProvenance.js +66 -0
  401. package/dist/state/summarySourceRowAuthority.js +36 -0
  402. package/dist/state/todoActivationSafety.js +58 -0
  403. package/dist/state/todoCreateBatch.js +69 -0
  404. package/dist/state/todoDocsEntities.js +1339 -0
  405. package/dist/state/todoDocsEntityValidation.js +158 -0
  406. package/dist/state/todoMarkdownProjection.js +63 -0
  407. package/dist/state/todoReconciliationActivation.js +182 -0
  408. package/dist/state/todoReconciliationInspection.js +184 -0
  409. package/dist/state/todoReconciliationRepair.js +320 -0
  410. package/dist/state/todoReconciliationTransaction.js +628 -0
  411. package/dist/state/todoSeverityHeadings.js +71 -0
  412. package/dist/state/todoTransitionBatch.js +65 -0
  413. package/dist/state/todoUpdateBatch.js +50 -0
  414. package/dist/state/write/assign.js +20 -0
  415. package/dist/state/write/candidateMutation.js +269 -0
  416. package/dist/state/write/errors.js +11 -0
  417. package/dist/state/write/experimentPublication.js +192 -0
  418. package/dist/state/write/explain.js +380 -0
  419. package/dist/state/write/fields.js +61 -0
  420. package/dist/state/write/glossaryPublication.js +263 -0
  421. package/dist/state/write/grammar.js +285 -0
  422. package/dist/state/write/helpers.js +29 -0
  423. package/dist/state/write/index.js +12 -0
  424. package/dist/state/write/input.js +391 -0
  425. package/dist/state/write/lock.js +837 -0
  426. package/dist/state/write/mutation.js +234 -0
  427. package/dist/state/write/operations.js +170 -0
  428. package/dist/state/write/planEvaluation.js +128 -0
  429. package/dist/state/write/planPublication.js +179 -0
  430. package/dist/state/write/runtimeOperations.js +146 -0
  431. package/dist/state/write/serialize.js +1 -0
  432. package/dist/state/write/transaction.js +57 -0
  433. package/dist/state/write/validate.js +7 -0
  434. package/dist/upgrade/appContentRefresh.js +77 -36
  435. package/dist/upgrade/appModel.js +0 -1
  436. package/dist/upgrade/atomicWriter.js +1 -0
  437. package/dist/upgrade/bundleEvidence.js +0 -1
  438. package/dist/upgrade/channels.js +6 -9
  439. package/dist/upgrade/compatibility.js +43 -17
  440. package/dist/upgrade/doctor.js +55 -32
  441. package/dist/upgrade/doctorClassifier.js +11 -1
  442. package/dist/upgrade/installedHooksRetirement.js +46 -40
  443. package/dist/upgrade/legacyAgentCleanup.js +133 -34
  444. package/dist/upgrade/lifecycleUpgrade.js +126 -0
  445. package/dist/upgrade/migrateArtifactsV2ToV3.js +325 -82
  446. package/dist/upgrade/migrationPublication.js +122 -0
  447. package/dist/upgrade/nextMajorDoctor.js +0 -22
  448. package/dist/upgrade/npxPlatformStatus.js +2 -2
  449. package/dist/upgrade/productV1Reset.js +515 -0
  450. package/dist/upgrade/productV1ResetAuthority.js +139 -0
  451. package/dist/upgrade/projectIntegration.js +126 -134
  452. package/dist/upgrade/projectIntegrationDecision.js +21 -13
  453. package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
  454. package/dist/upgrade/runtimeMigration.js +210 -430
  455. package/dist/upgrade/upgradeCommands.js +14 -1
  456. package/dist/upgrade/upgradeLock.js +85 -0
  457. package/dist/upgrade/upgradeOrchestrator.js +257 -48
  458. package/dist/upgrade/v3CapabilitySurface.js +2 -3
  459. package/dist/upgrade/versionResolution.js +0 -1
  460. package/dist/validate/activationArtifactEvidence.js +866 -0
  461. package/dist/validate/activationArtifactEvidenceTypes.js +12 -0
  462. package/dist/validate/activationConjunction.js +816 -0
  463. package/dist/validate/activationEvidenceManifest.js +610 -0
  464. package/dist/validate/activationPackageSemantics.js +29 -0
  465. package/dist/validate/appHomeContract.js +1 -7
  466. package/dist/validate/bootstrapAuthority.js +44 -0
  467. package/dist/validate/capability.js +11 -3
  468. package/dist/validate/crossCapability.js +14 -9
  469. package/dist/validate/glossaryVariantGuard.js +96 -0
  470. package/dist/validate/retainedReferenceAuthority.js +879 -0
  471. package/dist/validate/selfAudit.js +39 -45
  472. package/dist/validate/vocabularyAuthority.js +8 -8
  473. package/package.json +39 -13
  474. package/bundle/references/adapters/cursor.md +0 -214
  475. package/bundle/references/adapters/opencode.md +0 -530
  476. package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
  477. package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
  478. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
  479. package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -554
  480. package/bundle/references/adapters/runtime-feature-parity.md +0 -189
  481. package/bundle/references/analysis/benchmark.md +0 -267
  482. package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
  483. package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
  484. package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -369
  485. package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -250
  486. package/bundle/references/cli/capability-tool-classification.yaml +0 -53
  487. package/bundle/references/cli/coexistence-probe.yaml +0 -13
  488. package/bundle/references/cli/parity-expected-actual-template.md +0 -30
  489. package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
  490. package/bundle/references/cli/single-name-protocol.yaml +0 -42
  491. package/bundle/references/cli/upgrade-repair-wording.md +0 -45
  492. package/bundle/references/cli/v3-handoff-manifest.schema.yaml +0 -98
  493. package/bundle/references/meta/documentation-inventory.md +0 -49
  494. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  495. package/bundle/skills/agentera/agents/audit.toml +0 -6
  496. package/bundle/skills/agentera/agents/build.toml +0 -6
  497. package/bundle/skills/agentera/agents/design.toml +0 -6
  498. package/bundle/skills/agentera/agents/discuss.toml +0 -6
  499. package/bundle/skills/agentera/agents/document.toml +0 -6
  500. package/bundle/skills/agentera/agents/optimize.toml +0 -6
  501. package/bundle/skills/agentera/agents/orchestrate.toml +0 -6
  502. package/bundle/skills/agentera/agents/plan.toml +0 -6
  503. package/bundle/skills/agentera/agents/profile.toml +0 -6
  504. package/bundle/skills/agentera/agents/research.toml +0 -6
  505. package/bundle/skills/agentera/agents/status.toml +0 -6
  506. package/bundle/skills/agentera/agents/vision.toml +0 -6
  507. package/bundle/skills/agentera/references/contract.md +0 -1048
  508. package/dist/analytics/extractCorpus/cli.js.map +0 -1
  509. package/dist/analytics/extractCorpus/copilotSessions.js.map +0 -1
  510. package/dist/analytics/extractCorpus/core.js.map +0 -1
  511. package/dist/analytics/extractCorpus/corpus.js.map +0 -1
  512. package/dist/analytics/extractCorpus/coverageAudit.js.map +0 -1
  513. package/dist/analytics/extractCorpus/cursorSessions.js.map +0 -1
  514. package/dist/analytics/extractCorpus/extractCorpusParity.js.map +0 -1
  515. package/dist/analytics/extractCorpus/filesystemSources.js.map +0 -1
  516. package/dist/analytics/extractCorpus/index.js.map +0 -1
  517. package/dist/analytics/extractCorpus/jsonlSessions.js.map +0 -1
  518. package/dist/analytics/extractCorpus/sqliteCaps.js.map +0 -1
  519. package/dist/analytics/extractCorpus/sqliteSessions.js.map +0 -1
  520. package/dist/analytics/extractCorpus.js.map +0 -1
  521. package/dist/analytics/usageStats.js.map +0 -1
  522. package/dist/bin/agentera.js.map +0 -1
  523. package/dist/capabilities/audit/instructions.js.map +0 -1
  524. package/dist/capabilities/build/instructions.js.map +0 -1
  525. package/dist/capabilities/design/instructions.js.map +0 -1
  526. package/dist/capabilities/discuss/instructions.js.map +0 -1
  527. package/dist/capabilities/document/instructions.js.map +0 -1
  528. package/dist/capabilities/index.js.map +0 -1
  529. package/dist/capabilities/optimize/instructions.js.map +0 -1
  530. package/dist/capabilities/orchestrate/instructions.js.map +0 -1
  531. package/dist/capabilities/plan/instructions.js.map +0 -1
  532. package/dist/capabilities/profile/instructions.js.map +0 -1
  533. package/dist/capabilities/research/instructions.js.map +0 -1
  534. package/dist/capabilities/status/instructions.js.map +0 -1
  535. package/dist/capabilities/vision/instructions.js.map +0 -1
  536. package/dist/cli/appContext.js.map +0 -1
  537. package/dist/cli/argvalidate.js.map +0 -1
  538. package/dist/cli/capabilityContext/benchmark.js.map +0 -1
  539. package/dist/cli/capabilityContext/bespoke.js.map +0 -1
  540. package/dist/cli/capabilityContext/build.js.map +0 -1
  541. package/dist/cli/capabilityContext/closeout.js.map +0 -1
  542. package/dist/cli/capabilityContext/contract.js.map +0 -1
  543. package/dist/cli/capabilityContext/evidence.js.map +0 -1
  544. package/dist/cli/capabilityContext/index.js.map +0 -1
  545. package/dist/cli/capabilityContext/orchestration.js.map +0 -1
  546. package/dist/cli/capabilityContext/planState.js.map +0 -1
  547. package/dist/cli/capabilityContext/progress.js.map +0 -1
  548. package/dist/cli/capabilityContext/shared.js.map +0 -1
  549. package/dist/cli/capabilityContext/slim.js.map +0 -1
  550. package/dist/cli/capabilityContext/startup.js.map +0 -1
  551. package/dist/cli/capabilityContext/types.js.map +0 -1
  552. package/dist/cli/capabilityContext.js.map +0 -1
  553. package/dist/cli/commands/appHome.js.map +0 -1
  554. package/dist/cli/commands/capability.js.map +0 -1
  555. package/dist/cli/commands/compact.js.map +0 -1
  556. package/dist/cli/commands/doctor.js.map +0 -1
  557. package/dist/cli/commands/lint.js.map +0 -1
  558. package/dist/cli/commands/prime/bundleStatus.js.map +0 -1
  559. package/dist/cli/commands/prime/collectOrientationState.js.map +0 -1
  560. package/dist/cli/commands/prime/orientationOutput.js.map +0 -1
  561. package/dist/cli/commands/prime/types.js.map +0 -1
  562. package/dist/cli/commands/prime/v1Migration.js +0 -39
  563. package/dist/cli/commands/prime/v1Migration.js.map +0 -1
  564. package/dist/cli/commands/prime.js.map +0 -1
  565. package/dist/cli/commands/query.js.map +0 -1
  566. package/dist/cli/commands/report.js.map +0 -1
  567. package/dist/cli/commands/schema.js.map +0 -1
  568. package/dist/cli/commands/state/decisions.js.map +0 -1
  569. package/dist/cli/commands/state/docs.js.map +0 -1
  570. package/dist/cli/commands/state/experiments.js.map +0 -1
  571. package/dist/cli/commands/state/health.js.map +0 -1
  572. package/dist/cli/commands/state/index.js.map +0 -1
  573. package/dist/cli/commands/state/objective.js.map +0 -1
  574. package/dist/cli/commands/state/plan.js.map +0 -1
  575. package/dist/cli/commands/state/progress.js.map +0 -1
  576. package/dist/cli/commands/state/shared.js.map +0 -1
  577. package/dist/cli/commands/state/todo.js.map +0 -1
  578. package/dist/cli/commands/upgrade.js.map +0 -1
  579. package/dist/cli/commands/validate.js.map +0 -1
  580. package/dist/cli/commands/verify.js.map +0 -1
  581. package/dist/cli/contracts/bundleStatus.js.map +0 -1
  582. package/dist/cli/contracts/orientationState.js.map +0 -1
  583. package/dist/cli/dispatch/argvParser.js.map +0 -1
  584. package/dist/cli/dispatch/check.js.map +0 -1
  585. package/dist/cli/dispatch/commands.js.map +0 -1
  586. package/dist/cli/dispatch/index.js.map +0 -1
  587. package/dist/cli/dispatch/lifecycle.js.map +0 -1
  588. package/dist/cli/dispatch/prime.js.map +0 -1
  589. package/dist/cli/dispatch/shared.js.map +0 -1
  590. package/dist/cli/dispatch/state.js.map +0 -1
  591. package/dist/cli/dispatch.js.map +0 -1
  592. package/dist/cli/errors.js.map +0 -1
  593. package/dist/cli/help.js.map +0 -1
  594. package/dist/cli/orientation/attention.js.map +0 -1
  595. package/dist/cli/orientation/corpusCoverage.js.map +0 -1
  596. package/dist/cli/orientation.js.map +0 -1
  597. package/dist/cli/prime-blob.js.map +0 -1
  598. package/dist/cli/startupCompletenessContract.js.map +0 -1
  599. package/dist/cli/stateQuery.js.map +0 -1
  600. package/dist/cli/structured.js.map +0 -1
  601. package/dist/cli/todoMarkdown.js.map +0 -1
  602. package/dist/cli/todoSeverity.js.map +0 -1
  603. package/dist/core/difflib.js.map +0 -1
  604. package/dist/core/envPaths.js.map +0 -1
  605. package/dist/core/jsonValue.js.map +0 -1
  606. package/dist/core/paths.js.map +0 -1
  607. package/dist/core/pyjson.js.map +0 -1
  608. package/dist/core/sourceRoot.js.map +0 -1
  609. package/dist/core/toml.js.map +0 -1
  610. package/dist/core/yaml.js.map +0 -1
  611. package/dist/eval/evalSkills.js.map +0 -1
  612. package/dist/eval/semanticEval.js.map +0 -1
  613. package/dist/eval/semanticFixtures.js.map +0 -1
  614. package/dist/hooks/common.js.map +0 -1
  615. package/dist/hooks/compaction/apply.js.map +0 -1
  616. package/dist/hooks/compaction/dryRun.js.map +0 -1
  617. package/dist/hooks/compaction/index.js.map +0 -1
  618. package/dist/hooks/compaction/parse.js.map +0 -1
  619. package/dist/hooks/compaction/retention.js.map +0 -1
  620. package/dist/hooks/compaction/status.js.map +0 -1
  621. package/dist/hooks/compaction/types.js.map +0 -1
  622. package/dist/hooks/cursorPreToolUse.js +0 -19
  623. package/dist/hooks/cursorPreToolUse.js.map +0 -1
  624. package/dist/hooks/cursorSessionStart.js +0 -79
  625. package/dist/hooks/cursorSessionStart.js.map +0 -1
  626. package/dist/hooks/sessionStart.js +0 -216
  627. package/dist/hooks/sessionStart.js.map +0 -1
  628. package/dist/hooks/sessionStop.js +0 -206
  629. package/dist/hooks/sessionStop.js.map +0 -1
  630. package/dist/hooks/validateArtifact/agentFacing.js.map +0 -1
  631. package/dist/hooks/validateArtifact/index.js.map +0 -1
  632. package/dist/hooks/validateArtifact/markdown.js.map +0 -1
  633. package/dist/hooks/validateArtifact/runtime.js +0 -86
  634. package/dist/hooks/validateArtifact/runtime.js.map +0 -1
  635. package/dist/hooks/validateArtifact/schema.js.map +0 -1
  636. package/dist/hooks/validateArtifact/traversal.js.map +0 -1
  637. package/dist/hooks/validateArtifact/violations.js.map +0 -1
  638. package/dist/migrate/v2HandoffManifest.js.map +0 -1
  639. package/dist/registries/artifactProtocolIds.js.map +0 -1
  640. package/dist/registries/artifactRegistry.js.map +0 -1
  641. package/dist/registries/capabilityContract.js.map +0 -1
  642. package/dist/registries/evaluatorHandoffContract.js.map +0 -1
  643. package/dist/registries/packageRegistry.js.map +0 -1
  644. package/dist/registries/runtimeAdapterRegistry.js +0 -316
  645. package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
  646. package/dist/registries/triggerLoader.js.map +0 -1
  647. package/dist/release/releaseMetadata.js.map +0 -1
  648. package/dist/setup/codex/agents.js +0 -96
  649. package/dist/setup/codex/agents.js.map +0 -1
  650. package/dist/setup/codex/cli.js +0 -161
  651. package/dist/setup/codex/cli.js.map +0 -1
  652. package/dist/setup/codex/configToml.js +0 -639
  653. package/dist/setup/codex/configToml.js.map +0 -1
  654. package/dist/setup/codex/constants.js +0 -29
  655. package/dist/setup/codex/constants.js.map +0 -1
  656. package/dist/setup/codex/installRoot.js +0 -64
  657. package/dist/setup/codex/installRoot.js.map +0 -1
  658. package/dist/setup/codex/state.js +0 -270
  659. package/dist/setup/codex/state.js.map +0 -1
  660. package/dist/setup/codex.js +0 -12
  661. package/dist/setup/codex.js.map +0 -1
  662. package/dist/setup/copilot.js +0 -227
  663. package/dist/setup/copilot.js.map +0 -1
  664. package/dist/setup/cursor.js +0 -129
  665. package/dist/setup/cursor.js.map +0 -1
  666. package/dist/setup/cursorSurfaces.js +0 -67
  667. package/dist/setup/cursorSurfaces.js.map +0 -1
  668. package/dist/setup/doctor/core.js +0 -300
  669. package/dist/setup/doctor/core.js.map +0 -1
  670. package/dist/setup/doctor/diagnostics.js +0 -240
  671. package/dist/setup/doctor/diagnostics.js.map +0 -1
  672. package/dist/setup/doctor/opencode.js +0 -313
  673. package/dist/setup/doctor/opencode.js.map +0 -1
  674. package/dist/setup/doctor/report.js +0 -425
  675. package/dist/setup/doctor/report.js.map +0 -1
  676. package/dist/setup/doctor.js +0 -10
  677. package/dist/setup/doctor.js.map +0 -1
  678. package/dist/setup/opencode.js.map +0 -1
  679. package/dist/setup/smokeChecks.js.map +0 -1
  680. package/dist/state/installRoot.js.map +0 -1
  681. package/dist/state/startupAnalysis/benchmark.js.map +0 -1
  682. package/dist/state/startupAnalysis/contract.js.map +0 -1
  683. package/dist/state/startupAnalysis/helpers.js.map +0 -1
  684. package/dist/state/startupAnalysis/index.js.map +0 -1
  685. package/dist/state/startupAnalysis/metrics.js.map +0 -1
  686. package/dist/state/startupAnalysis/records.js.map +0 -1
  687. package/dist/state/startupAnalysis/report.js.map +0 -1
  688. package/dist/state/startupAnalysis/threshold.js.map +0 -1
  689. package/dist/state/startupAnalysis.js.map +0 -1
  690. package/dist/upgrade/appContentRefresh.js.map +0 -1
  691. package/dist/upgrade/appModel.js.map +0 -1
  692. package/dist/upgrade/bundleEvidence.js.map +0 -1
  693. package/dist/upgrade/channels.js.map +0 -1
  694. package/dist/upgrade/coexistenceProbe.js +0 -107
  695. package/dist/upgrade/coexistenceProbe.js.map +0 -1
  696. package/dist/upgrade/compatibility.js.map +0 -1
  697. package/dist/upgrade/doctor.js.map +0 -1
  698. package/dist/upgrade/doctorClassifier.js.map +0 -1
  699. package/dist/upgrade/installedHooksRetirement.js.map +0 -1
  700. package/dist/upgrade/legacyAgentCleanup.js.map +0 -1
  701. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -570
  702. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
  703. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
  704. package/dist/upgrade/nextMajorDoctor.js.map +0 -1
  705. package/dist/upgrade/npxPlatformStatus.js.map +0 -1
  706. package/dist/upgrade/projectIntegration.js.map +0 -1
  707. package/dist/upgrade/projectIntegrationDecision.js.map +0 -1
  708. package/dist/upgrade/runtimeMigration.js.map +0 -1
  709. package/dist/upgrade/upgradeCommands.js.map +0 -1
  710. package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
  711. package/dist/upgrade/v3CapabilitySurface.js.map +0 -1
  712. package/dist/upgrade/versionResolution.js.map +0 -1
  713. package/dist/validate/appHomeContract.js.map +0 -1
  714. package/dist/validate/capability.js.map +0 -1
  715. package/dist/validate/crossCapability.js.map +0 -1
  716. package/dist/validate/lifecycleAdapters/legacyPythonParity.js +0 -93
  717. package/dist/validate/lifecycleAdapters/legacyPythonParity.js.map +0 -1
  718. package/dist/validate/lifecycleAdapters/nodeFormChecks.js +0 -488
  719. package/dist/validate/lifecycleAdapters/nodeFormChecks.js.map +0 -1
  720. package/dist/validate/lifecycleAdapters/shared.js +0 -198
  721. package/dist/validate/lifecycleAdapters/shared.js.map +0 -1
  722. package/dist/validate/lifecycleAdapters.js +0 -62
  723. package/dist/validate/lifecycleAdapters.js.map +0 -1
  724. package/dist/validate/selfAudit.js.map +0 -1
  725. package/dist/validate/vocabularyAuthority.js.map +0 -1
@@ -1,36 +1,151 @@
1
1
  import fs from "node:fs";
2
2
  import path from "node:path";
3
+ import YAML from "yaml";
3
4
  import { isFile, pathExists, resolvePath } from "../core/paths.js";
5
+ import { loadYamlMapping } from "../core/yaml.js";
6
+ import { loadArtifactRecord, resolveArtifactPath } from "../registries/artifactRegistry.js";
4
7
  import { BUNDLE_MARKER } from "../state/installRoot.js";
8
+ import { hasBundleRootEvidence } from "./bundleEvidence.js";
9
+ import { applyAppContentRefreshItems, planAppContentRefreshItems, } from "./appContentRefresh.js";
5
10
  import { doctorRoots } from "./appModel.js";
6
11
  import { AGENTERA_USER_STATE_NAMES, } from "./doctor.js";
7
- import { applyV1ArtifactsPhase, planV1ArtifactsPhase, } from "./migrateArtifactsV1ToV2.js";
8
12
  import { appHomeHasUnrecognizedEntriesWithPreflight, handoffCatalogMessage, resolveMigrationUserStatePreflight, } from "../migrate/v2HandoffManifest.js";
9
- import { applyAppContentRefreshItems, planAppContentRefreshItems, } from "./appContentRefresh.js";
10
13
  import { applyLegacyAgentCleanupItems, planLegacyAgentCleanupItems, planLegacyCapabilityAgentCleanupItems, } from "./legacyAgentCleanup.js";
11
- import { applyRuntimeMigrationItems, planRuntimeMigrationItems, resolveNpxHookCommands, rewireRuntimeText, } from "./runtimeMigration.js";
14
+ import { applyRuntimeMigrationItems, planRuntimeMigrationItems, } from "./runtimeMigration.js";
15
+ import { writeFileAtomic } from "./atomicWriter.js";
16
+ import { bindMigrationTree, cloneMigrationItem, removeBoundMigrationTree } from "./migrationPublication.js";
17
+ import { applyInstalledHooksRetirementItems, planInstalledHooksRetirementItems, } from "./installedHooksRetirement.js";
12
18
  /**
13
19
  * v2→v3 migration phases: artifacts (noop for YAML), runtime rewire, cleanup.
14
- * v1 Markdown→YAML migration uses detectV1ArtifactPairs (shared with prime).
15
20
  */
16
- export const MIGRATION_STATUSES = ["pending", "applied", "noop", "blocked", "failed", "skipped"];
17
- export const V1_ARTIFACT_PAIRS = [
18
- [".agentera/PROGRESS.md", ".agentera/progress.yaml"],
19
- [".agentera/PLAN.md", ".agentera/plan.yaml"],
20
- [".agentera/DECISIONS.md", ".agentera/decisions.yaml"],
21
- [".agentera/HEALTH.md", ".agentera/health.yaml"],
22
- [".agentera/DOCS.md", ".agentera/docs.yaml"],
23
- ["VISION.md", ".agentera/vision.yaml"],
24
- ];
25
- /** Default development-channel npm entrypoint for tests and legacy imports. */
26
- export const NPX_CLI_ENTRYPOINT = "npx -y agentera@next";
27
- export const NPX_HOOK_VALIDATE = `${NPX_CLI_ENTRYPOINT} hook validate-artifact`;
28
- export const NPX_HOOK_CURSOR_SESSION_START = `${NPX_CLI_ENTRYPOINT} hook cursor-session-start`;
29
- export const NPX_HOOK_CURSOR_SESSION_STOP = `${NPX_CLI_ENTRYPOINT} hook session-stop`;
30
- export const NPX_HOOK_CURSOR_PRE_TOOL = `${NPX_CLI_ENTRYPOINT} hook cursor-pre-tool-use`;
31
- export { rewireRuntimeText, resolveNpxHookCommands };
21
+ export const MIGRATION_STATUSES = ["pending", "applied", "noop", "blocked", "failed"];
22
+ const PLAN_ARCHIVE_FILE = /^PLAN-.+\.ya?ml$/i;
23
+ const PLAN_LIFECYCLE_ACTION = "normalize-plan-lifecycle";
24
+ function isMapping(value) {
25
+ return value !== null && typeof value === "object" && !Array.isArray(value);
26
+ }
27
+ function relativeToProject(project, artifactPath) {
28
+ return path.relative(project, artifactPath);
29
+ }
30
+ function planTaskList(data) {
31
+ if (Array.isArray(data.tasks))
32
+ return data.tasks;
33
+ if (Array.isArray(data.entries))
34
+ return data.entries;
35
+ return null;
36
+ }
37
+ function completedTasksOnly(tasks) {
38
+ return tasks.every((task) => isMapping(task) && (task.status === "complete" || task.status === "completed"));
39
+ }
40
+ function rewritePlanStatus(text, status) {
41
+ const document = YAML.parseDocument(text);
42
+ if (document.errors.length > 0) {
43
+ throw new Error(document.errors.map((error) => error.message).join("; "));
44
+ }
45
+ document.setIn(["header", "status"], status);
46
+ return document.toString();
47
+ }
48
+ function lifecycleMigrationItem(project, artifactPath) {
49
+ const source = relativeToProject(project, artifactPath);
50
+ try {
51
+ const text = fs.readFileSync(artifactPath, "utf8");
52
+ const data = loadYamlMapping(text);
53
+ const header = isMapping(data.header) ? data.header : null;
54
+ const tasks = planTaskList(data);
55
+ if (!header || tasks === null) {
56
+ return {
57
+ status: "blocked",
58
+ action: PLAN_LIFECYCLE_ACTION,
59
+ source,
60
+ target: source,
61
+ message: "plan requires a header mapping and a tasks or entries array before lifecycle migration",
62
+ };
63
+ }
64
+ const status = typeof header.status === "string" ? header.status : "";
65
+ if (status === "open" || status === "complete") {
66
+ return {
67
+ status: "noop",
68
+ action: PLAN_LIFECYCLE_ACTION,
69
+ source,
70
+ target: source,
71
+ preserved: ["all plan fields"],
72
+ message: "plan lifecycle is already canonical",
73
+ };
74
+ }
75
+ if (status !== "active" && status !== "completed") {
76
+ return {
77
+ status: "blocked",
78
+ action: PLAN_LIFECYCLE_ACTION,
79
+ source,
80
+ target: source,
81
+ message: `plan header.status must be active, completed, open, or complete; received ${status || "missing"}`,
82
+ };
83
+ }
84
+ const collisions = [];
85
+ const targetStatus = status === "active" || !completedTasksOnly(tasks)
86
+ ? "open"
87
+ : "complete";
88
+ if (status === "completed" && targetStatus === "open") {
89
+ collisions.push("header.status=completed conflicts with unfinished task evidence; preserving task evidence and migrating status to open");
90
+ }
91
+ return {
92
+ status: "pending",
93
+ action: PLAN_LIFECYCLE_ACTION,
94
+ source,
95
+ target: source,
96
+ preserved: ["all plan fields except header.status"],
97
+ ...(collisions.length > 0 ? { collisions } : {}),
98
+ newText: rewritePlanStatus(text, targetStatus),
99
+ message: `will migrate plan lifecycle ${status} to ${targetStatus}`,
100
+ };
101
+ }
102
+ catch (error) {
103
+ return {
104
+ status: "blocked",
105
+ action: PLAN_LIFECYCLE_ACTION,
106
+ source,
107
+ target: source,
108
+ message: `cannot migrate plan lifecycle: ${error.message}`,
109
+ };
110
+ }
111
+ }
112
+ function lifecyclePlanArtifacts(project) {
113
+ const root = resolvePath(project);
114
+ let activePath;
115
+ try {
116
+ const record = loadArtifactRecord("plan");
117
+ if (!record)
118
+ throw new Error("plan artifact is not registered");
119
+ activePath = resolveArtifactPath(record, root, { strictWrite: true });
120
+ }
121
+ catch (error) {
122
+ return [{
123
+ status: "blocked",
124
+ action: PLAN_LIFECYCLE_ACTION,
125
+ message: `cannot resolve docs-mapped plan path: ${error.message}`,
126
+ }];
127
+ }
128
+ const artifacts = isFile(activePath) ? [activePath] : [];
129
+ const archiveDirectory = path.join(path.dirname(activePath), "archive");
130
+ try {
131
+ for (const name of fs.readdirSync(archiveDirectory).sort()) {
132
+ if (!PLAN_ARCHIVE_FILE.test(name))
133
+ continue;
134
+ const archivePath = path.join(archiveDirectory, name);
135
+ if (isFile(archivePath))
136
+ artifacts.push(archivePath);
137
+ }
138
+ }
139
+ catch {
140
+ // A missing archive directory is normal before the first archive.
141
+ }
142
+ return artifacts.map((artifactPath) => lifecycleMigrationItem(root, artifactPath));
143
+ }
144
+ export function hasPendingPlanLifecycleMigration(project) {
145
+ return lifecyclePlanArtifacts(project).some((item) => item.status === "pending");
146
+ }
32
147
  function emptySummary() {
33
- return { pending: 0, applied: 0, noop: 0, blocked: 0, failed: 0, skipped: 0 };
148
+ return { pending: 0, applied: 0, noop: 0, blocked: 0, failed: 0 };
34
149
  }
35
150
  export function summarizePhase(name, items, message = "") {
36
151
  const summary = emptySummary();
@@ -50,24 +165,11 @@ export function summarizePhase(name, items, message = "") {
50
165
  else if (summary.applied > 0) {
51
166
  status = "applied";
52
167
  }
53
- else if (summary.skipped > 0 && summary.noop === 0 && summary.applied === 0) {
54
- status = "skipped";
55
- }
56
168
  else {
57
169
  status = "noop";
58
170
  }
59
171
  return { name, status, summary, items, message };
60
172
  }
61
- export function detectV1ArtifactPairs(project) {
62
- const root = resolvePath(project);
63
- const found = [];
64
- for (const [md, yaml] of V1_ARTIFACT_PAIRS) {
65
- if (isFile(path.join(root, md)) && !isFile(path.join(root, yaml))) {
66
- found.push(md);
67
- }
68
- }
69
- return found;
70
- }
71
173
  function listV2YamlArtifacts(project) {
72
174
  const root = resolvePath(project);
73
175
  const agenteraDir = path.join(root, ".agentera");
@@ -98,36 +200,81 @@ export function planArtifactsPhase(project) {
98
200
  },
99
201
  ]);
100
202
  }
101
- const v1Pairs = detectV1ArtifactPairs(root);
102
- if (v1Pairs.length > 0) {
103
- return planV1ArtifactsPhase(root);
104
- }
105
203
  const yamlArtifacts = listV2YamlArtifacts(root);
106
- if (yamlArtifacts.length === 0) {
204
+ const lifecycleItems = lifecyclePlanArtifacts(root);
205
+ if (yamlArtifacts.length === 0 && lifecycleItems.length === 0) {
107
206
  return summarizePhase("artifacts", [], "no project artifacts found");
108
207
  }
109
- const items = yamlArtifacts.map((source) => ({
110
- status: "noop",
111
- action: "preserve",
112
- source,
113
- message: "v2 YAML artifact preserved; no v2→v3 schema migration required",
114
- }));
208
+ const lifecycleSources = new Set(lifecycleItems.flatMap((item) => item.source ? [item.source] : []));
209
+ const items = [
210
+ ...yamlArtifacts.filter((source) => !lifecycleSources.has(source)).map((source) => ({
211
+ status: "noop",
212
+ action: "preserve",
213
+ source,
214
+ message: "v2 YAML artifact preserved; no v2→v3 schema migration required",
215
+ })),
216
+ ...lifecycleItems,
217
+ ];
115
218
  return summarizePhase("artifacts", items);
116
219
  }
117
- export function applyArtifactsPhase(phase, project, force = false) {
220
+ export function applyArtifactsPhase(phase, project, _force = false) {
118
221
  const root = resolvePath(project);
119
- const hasV1Migration = phase.items.some((item) => item.action === "migrate");
120
- if (hasV1Migration) {
121
- applyV1ArtifactsPhase(phase, root, force);
122
- return;
222
+ for (const item of phase.items) {
223
+ if (item.status !== "pending" || item.action !== PLAN_LIFECYCLE_ACTION || !item.source)
224
+ continue;
225
+ const sourcePath = path.join(root, item.source);
226
+ const current = lifecycleMigrationItem(root, sourcePath);
227
+ if (current.status !== "pending") {
228
+ item.status = current.status;
229
+ item.message = current.message;
230
+ item.collisions = current.collisions;
231
+ continue;
232
+ }
233
+ if (current.newText !== item.newText) {
234
+ item.status = "blocked";
235
+ item.message = "plan changed after migration preview; rerun dry-run before applying";
236
+ continue;
237
+ }
238
+ try {
239
+ writeFileAtomic(sourcePath, current.newText, "utf8");
240
+ item.status = "applied";
241
+ item.message = "migrated plan lifecycle without changing retained evidence";
242
+ }
243
+ catch (error) {
244
+ item.status = "failed";
245
+ item.message = `plan lifecycle migration failed: ${error.message}`;
246
+ }
123
247
  }
124
- phase.status = summarizePhase("artifacts", phase.items, phase.message).status;
248
+ const updated = summarizePhase("artifacts", phase.items, phase.message);
249
+ phase.status = updated.status;
250
+ phase.summary = updated.summary;
125
251
  }
126
- export function planRuntimeRewirePhase(ctx) {
252
+ export function delegatePlanLifecycleToEntityCutover(phase) {
253
+ for (const item of phase.items) {
254
+ if (item.status !== "pending" || item.action !== PLAN_LIFECYCLE_ACTION)
255
+ continue;
256
+ item.status = "noop";
257
+ item.message = "entity cutover normalizes plan lifecycle while retaining the legacy source as recovery evidence";
258
+ }
259
+ const updated = summarizePhase("artifacts", phase.items, phase.message);
260
+ phase.status = updated.status;
261
+ phase.summary = updated.summary;
262
+ }
263
+ export function planRuntimeRetirementPhase(ctx, _resolvedChannel) {
127
264
  const items = planRuntimeMigrationItems(ctx);
128
- return summarizePhase("runtime", items, items.length === 0 ? "no runtime configs with Python managed app-home references found" : "");
265
+ const blockedPaths = new Set(items
266
+ .filter((item) => item.status === "blocked")
267
+ .flatMap((item) => [item.source, item.target])
268
+ .filter((value) => typeof value === "string"));
269
+ for (const item of items) {
270
+ if (item.status !== "pending" || ![item.source, item.target].some((value) => value && blockedPaths.has(value)))
271
+ continue;
272
+ item.status = "blocked";
273
+ item.message = "action required before Agentera can modify this runtime resource";
274
+ }
275
+ return summarizePhase("runtime", items, items.length === 0 ? "no retired native Agentera hooks found" : "");
129
276
  }
130
- export function applyRuntimeRewirePhase(phase, ctx) {
277
+ export function applyRuntimeRetirementPhase(phase, ctx) {
131
278
  if (ctx) {
132
279
  applyRuntimeMigrationItems(phase.items, ctx);
133
280
  }
@@ -144,13 +291,72 @@ export function applyRuntimeRewirePhase(phase, ctx) {
144
291
  }
145
292
  /** Whether `app/` under app-home still carries a managed bundle worth removing during v2→v3 cleanup. */
146
293
  export function hasManagedBundleEvidence(managedAppRoot) {
147
- // v3 npm-managed installs write BUNDLE_MARKER at pack/refresh time.
148
- if (isFile(path.join(managedAppRoot, BUNDLE_MARKER))) {
149
- return true;
294
+ const marker = path.join(managedAppRoot, BUNDLE_MARKER);
295
+ if (!isFile(marker))
296
+ return false;
297
+ try {
298
+ const parsed = JSON.parse(fs.readFileSync(marker, "utf8"));
299
+ return parsed.schemaVersion === "agentera.bundle.v1" && typeof parsed.version === "string";
300
+ }
301
+ catch {
302
+ return false;
150
303
  }
151
- // Legacy v2 Python-managed installs lacked the marker but always shipped this pair.
152
- return (isFile(path.join(managedAppRoot, "scripts", "agentera")) &&
153
- isFile(path.join(managedAppRoot, "skills", "agentera", "SKILL.md")));
304
+ }
305
+ const SUPPORTED_V2_BUNDLE_INVENTORY_BY_MAJOR = {
306
+ "2": {
307
+ [BUNDLE_MARKER]: "file",
308
+ "registry.json": "file",
309
+ scripts: "directory",
310
+ "scripts/agentera": "file",
311
+ skills: "directory",
312
+ "skills/agentera": "directory",
313
+ "skills/agentera/SKILL.md": "file",
314
+ },
315
+ };
316
+ function markedBundleInventoryViolations(managedAppRoot) {
317
+ let version;
318
+ try {
319
+ const marker = JSON.parse(fs.readFileSync(path.join(managedAppRoot, BUNDLE_MARKER), "utf8"));
320
+ version = typeof marker.version === "string" ? marker.version : "";
321
+ }
322
+ catch {
323
+ return ["bundle marker is unreadable"];
324
+ }
325
+ const inventory = SUPPORTED_V2_BUNDLE_INVENTORY_BY_MAJOR[version.split(".")[0] ?? ""];
326
+ if (!inventory)
327
+ return [`bundle version ${version || "missing"} has no supported cleanup inventory`];
328
+ const actual = new Map();
329
+ const walk = (directory, prefix = "") => {
330
+ for (const name of fs.readdirSync(directory).sort()) {
331
+ const destination = path.join(directory, name);
332
+ const relative = prefix ? `${prefix}/${name}` : name;
333
+ const stat = fs.lstatSync(destination);
334
+ const kind = stat.isSymbolicLink()
335
+ ? "symlink"
336
+ : stat.isFile()
337
+ ? "file"
338
+ : stat.isDirectory()
339
+ ? "directory"
340
+ : "other";
341
+ actual.set(relative, kind);
342
+ if (kind === "directory")
343
+ walk(destination, relative);
344
+ }
345
+ };
346
+ walk(managedAppRoot);
347
+ const violations = [];
348
+ for (const [relative, kind] of actual) {
349
+ const expected = inventory[relative];
350
+ if (!expected)
351
+ violations.push(`unknown ${kind} ${relative}`);
352
+ else if (expected !== kind)
353
+ violations.push(`${relative} must be ${expected}, found ${kind}`);
354
+ }
355
+ for (const [relative, kind] of Object.entries(inventory)) {
356
+ if (!actual.has(relative))
357
+ violations.push(`missing ${kind} ${relative}`);
358
+ }
359
+ return violations.sort();
154
360
  }
155
361
  function listManagedBundlePreview(managedAppRoot, limit = 20) {
156
362
  if (!pathExists(managedAppRoot)) {
@@ -185,7 +391,17 @@ export function planCleanupPhase(ctx) {
185
391
  env: ctx.env,
186
392
  });
187
393
  const preserved = preflight.preservedAbsolutePaths;
188
- const unknown = appHomeHasUnrecognizedEntriesWithPreflight(appHome, preflight);
394
+ const installedHookItems = planInstalledHooksRetirementItems(ctx).filter((item) => item.status !== "noop"
395
+ && item.source !== undefined
396
+ && !item.source.startsWith(`${managedAppRoot}${path.sep}`));
397
+ const hasOwnedRootHooks = installedHookItems.some((item) => item.source?.startsWith(`${path.join(appHome, "hooks")}${path.sep}`));
398
+ const unknown = appHomeHasUnrecognizedEntriesWithPreflight(appHome, preflight)
399
+ .filter((name) => !(name === "hooks" && hasOwnedRootHooks));
400
+ const managedBundle = hasManagedBundleEvidence(managedAppRoot);
401
+ const refreshAuthorized = managedBundle
402
+ || hasBundleRootEvidence(roots.activeBundleRoot)
403
+ || (pathExists(appHome) && fs.readdirSync(appHome).length === 0);
404
+ const appRootUnknown = managedBundle ? markedBundleInventoryViolations(managedAppRoot) : [];
189
405
  const items = [
190
406
  ...preflight.handoffCatalog.map((entry) => ({
191
407
  status: "noop",
@@ -194,9 +410,12 @@ export function planCleanupPhase(ctx) {
194
410
  preserved: entry.entries,
195
411
  message: handoffCatalogMessage(entry),
196
412
  })),
197
- ...planAppContentRefreshItems(ctx),
198
413
  ...planLegacyAgentCleanupItems(ctx),
199
414
  ...planLegacyCapabilityAgentCleanupItems(ctx),
415
+ ...installedHookItems,
416
+ ...(refreshAuthorized
417
+ ? planAppContentRefreshItems(ctx).filter((item) => item.action === "refresh-app-content")
418
+ : []),
200
419
  ];
201
420
  if (unknown.length > 0 && !ctx.force) {
202
421
  items.push({
@@ -204,18 +423,39 @@ export function planCleanupPhase(ctx) {
204
423
  action: "remove-managed-app-home",
205
424
  source: appHome,
206
425
  preserved,
207
- message: "app home contains unrecognized entries outside preserved user state; cleanup blocked without --force",
426
+ message: `app home has unrecognized entries (not preserved user state or managed app content): ${unknown.join(", ")}; cleanup blocked without --force`,
427
+ });
428
+ return summarizePhase("cleanup", items);
429
+ }
430
+ if (appRootUnknown.length > 0) {
431
+ items.push({
432
+ status: "blocked",
433
+ action: "remove-managed-app-home",
434
+ source: managedAppRoot,
435
+ target: appHome,
436
+ preserved: [managedAppRoot],
437
+ message: `managed app bundle does not match the supported v2 recursive inventory (${appRootUnknown.slice(0, 10).join(", ")}${appRootUnknown.length > 10 ? `; ${appRootUnknown.length - 10} more` : ""}); cleanup preserved the entire app directory for manual review`,
208
438
  });
209
439
  return summarizePhase("cleanup", items);
210
440
  }
211
- if (!hasManagedBundleEvidence(managedAppRoot)) {
441
+ if (!managedBundle) {
442
+ if (pathExists(managedAppRoot)) {
443
+ items.push({
444
+ status: "blocked",
445
+ action: "remove-managed-app-home",
446
+ source: managedAppRoot,
447
+ target: appHome,
448
+ message: `app directory preserved because ${BUNDLE_MARKER} ownership evidence is missing or invalid; review it manually`,
449
+ });
450
+ return summarizePhase("cleanup", items);
451
+ }
212
452
  if (items.length === 0) {
213
453
  return summarizePhase("cleanup", [], "no managed Python app-home bundle to remove");
214
454
  }
215
455
  return summarizePhase("cleanup", items);
216
456
  }
217
457
  const removedPreview = listManagedBundlePreview(managedAppRoot);
218
- items.push({
458
+ const cleanupItem = {
219
459
  status: "pending",
220
460
  action: "remove-managed-app-home",
221
461
  source: managedAppRoot,
@@ -223,32 +463,36 @@ export function planCleanupPhase(ctx) {
223
463
  preserved,
224
464
  removedPreview,
225
465
  message: "will remove managed Python app-home bundle under app/ while preserving user state at app-home root",
226
- });
227
- return summarizePhase("cleanup", items);
228
- }
229
- function removeDirectoryRecursive(dir) {
230
- if (!pathExists(dir)) {
231
- return;
466
+ };
467
+ const evidenceError = bindMigrationTree(cleanupItem, managedAppRoot, [appHome]);
468
+ if (evidenceError) {
469
+ cleanupItem.status = "blocked";
470
+ cleanupItem.message = `managed app cleanup preserved the bundle: ${evidenceError}; review the unsafe path manually`;
232
471
  }
233
- fs.rmSync(dir, { recursive: true, force: true });
472
+ items.push(cleanupItem);
473
+ return summarizePhase("cleanup", items);
234
474
  }
235
475
  export function applyCleanupPhase(phase, ctx) {
236
476
  if (ctx) {
477
+ applyLegacyAgentCleanupItems(phase.items, ctx);
478
+ applyInstalledHooksRetirementItems(phase.items, ctx);
237
479
  applyAppContentRefreshItems(phase.items, ctx);
238
480
  }
239
- applyLegacyAgentCleanupItems(phase.items);
240
481
  for (const item of phase.items) {
241
482
  if (item.status !== "pending" || item.action !== "remove-managed-app-home" || !item.source) {
242
483
  continue;
243
484
  }
244
485
  try {
245
- removeDirectoryRecursive(item.source);
486
+ if (process.env.NODE_ENV === "test" && process.env.AGENTERA_FAULT_INJECT_V2_CLEANUP_FAILURE === "1") {
487
+ throw new Error("simulated post-marker cleanup failure");
488
+ }
489
+ removeBoundMigrationTree(item);
246
490
  item.status = "applied";
247
491
  item.message = "managed Python app-home bundle removed; user state preserved";
248
492
  }
249
493
  catch (exc) {
250
- item.status = "failed";
251
- item.message = `cleanup failed: ${exc.message}`;
494
+ item.status = "blocked";
495
+ item.message = `cleanup preserved the managed app bundle: ${exc.message}; rerun migration and review it manually`;
252
496
  }
253
497
  }
254
498
  const updated = summarizePhase("cleanup", phase.items, phase.message);
@@ -258,25 +502,24 @@ export function applyCleanupPhase(phase, ctx) {
258
502
  export function dryRunMigration(ctx) {
259
503
  return {
260
504
  artifacts: planArtifactsPhase(ctx.project),
261
- runtime: planRuntimeRewirePhase(ctx),
505
+ runtime: planRuntimeRetirementPhase(ctx),
262
506
  cleanup: planCleanupPhase(ctx),
263
507
  };
264
508
  }
265
509
  export function applyMigrationPhases(ctx, preview, only = ["artifacts", "runtime", "cleanup"]) {
266
510
  const result = {
267
- artifacts: { ...preview.artifacts, items: preview.artifacts.items.map((item) => ({ ...item })) },
268
- runtime: { ...preview.runtime, items: preview.runtime.items.map((item) => ({ ...item })) },
269
- cleanup: { ...preview.cleanup, items: preview.cleanup.items.map((item) => ({ ...item })) },
511
+ artifacts: { ...preview.artifacts, items: preview.artifacts.items.map(cloneMigrationItem) },
512
+ runtime: { ...preview.runtime, items: preview.runtime.items.map(cloneMigrationItem) },
513
+ cleanup: { ...preview.cleanup, items: preview.cleanup.items.map(cloneMigrationItem) },
270
514
  };
271
515
  if (only.includes("artifacts")) {
272
516
  applyArtifactsPhase(result.artifacts, ctx.project, ctx.force);
273
517
  }
274
518
  if (only.includes("runtime")) {
275
- applyRuntimeRewirePhase(result.runtime, ctx);
519
+ applyRuntimeRetirementPhase(result.runtime, ctx);
276
520
  }
277
521
  if (only.includes("cleanup")) {
278
522
  applyCleanupPhase(result.cleanup, ctx);
279
523
  }
280
524
  return result;
281
525
  }
282
- //# sourceMappingURL=migrateArtifactsV2ToV3.js.map
@@ -0,0 +1,122 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { observeLifecyclePath, publishLifecycleResource, removeLifecycleResource, verifyLifecycleResourceAtPublication, withPinnedLifecycleDirectory, } from "../runtime/lifecyclePublication.js";
4
+ const evidenceByItem = new WeakMap();
5
+ const MIGRATION_EVIDENCE = Symbol.for("agentera.migrationMutationEvidence");
6
+ function evidenceFor(item) {
7
+ const existing = evidenceByItem.get(item) ?? item[MIGRATION_EVIDENCE];
8
+ if (existing)
9
+ return existing;
10
+ const created = { resources: {} };
11
+ evidenceByItem.set(item, created);
12
+ item[MIGRATION_EVIDENCE] = created;
13
+ return created;
14
+ }
15
+ function readEvidence(item) {
16
+ return evidenceByItem.get(item) ?? item[MIGRATION_EVIDENCE];
17
+ }
18
+ export function cloneMigrationItem(item) {
19
+ const clone = { ...item };
20
+ const evidence = readEvidence(item);
21
+ if (evidence) {
22
+ evidenceByItem.set(clone, evidence);
23
+ clone[MIGRATION_EVIDENCE] = evidence;
24
+ }
25
+ return clone;
26
+ }
27
+ function observationError(destination, observation, expectedKind) {
28
+ if (observation.unsafeReason)
29
+ return observation.unsafeReason;
30
+ if (!observation.parentComplete)
31
+ return `parent chain is incomplete for ${destination}`;
32
+ if (observation.kind !== expectedKind || !observation.identity || !observation.fingerprint) {
33
+ return `${destination} is not an observable ${expectedKind}`;
34
+ }
35
+ return null;
36
+ }
37
+ export function bindMigrationResource(item, role, destination, allowedRoots, kind) {
38
+ const observation = observeLifecyclePath(destination, allowedRoots);
39
+ const error = observationError(destination, observation, kind);
40
+ if (error)
41
+ return error;
42
+ evidenceFor(item).resources[role] = { destination, kind, observation };
43
+ return null;
44
+ }
45
+ function boundResource(item, role) {
46
+ const resource = readEvidence(item)?.resources[role];
47
+ if (!resource)
48
+ throw new Error(`migration ${role} publication evidence is missing`);
49
+ return resource;
50
+ }
51
+ export function verifyBoundMigrationResource(item, role) {
52
+ const resource = boundResource(item, role);
53
+ verifyLifecycleResourceAtPublication({ id: `${item.action}.${role}`, destination: resource.destination, kind: resource.kind }, resource.observation);
54
+ }
55
+ export function withBoundMigrationDirectory(item, role, callback, hook) {
56
+ const resource = boundResource(item, role);
57
+ if (resource.kind !== "directory")
58
+ throw new Error(`migration ${role} is not a directory`);
59
+ return withPinnedLifecycleDirectory({ id: `${item.action}.${role}`, destination: resource.destination, kind: "directory" }, resource.observation, callback, hook);
60
+ }
61
+ export function updateBoundMigrationFile(item, role, content) {
62
+ const resource = boundResource(item, role);
63
+ if (resource.kind !== "file")
64
+ throw new Error(`migration ${role} is not a file`);
65
+ publishLifecycleResource({ id: `${item.action}.${role}`, destination: resource.destination, kind: "file", content }, "update", resource.observation);
66
+ }
67
+ export function removeBoundMigrationResource(item, role) {
68
+ const resource = boundResource(item, role);
69
+ removeLifecycleResource({ id: `${item.action}.${role}`, destination: resource.destination, kind: resource.kind }, resource.observation);
70
+ }
71
+ function walkTree(root) {
72
+ const entries = [];
73
+ const walk = (destination) => {
74
+ const stat = fs.lstatSync(destination);
75
+ const kind = stat.isSymbolicLink()
76
+ ? "symlink"
77
+ : stat.isFile()
78
+ ? "file"
79
+ : stat.isDirectory()
80
+ ? "directory"
81
+ : (() => { throw new Error(`unsupported bundle entry type at ${destination}`); })();
82
+ entries.push({ destination, kind });
83
+ if (kind === "directory") {
84
+ for (const name of fs.readdirSync(destination).sort())
85
+ walk(path.join(destination, name));
86
+ }
87
+ };
88
+ walk(root);
89
+ return entries;
90
+ }
91
+ export function bindMigrationTree(item, root, allowedRoots) {
92
+ try {
93
+ const tree = walkTree(root).map(({ destination, kind }) => {
94
+ const observation = observeLifecyclePath(destination, allowedRoots);
95
+ const error = observationError(destination, observation, kind);
96
+ if (error)
97
+ throw new Error(error);
98
+ return { destination, kind, observation };
99
+ });
100
+ evidenceFor(item).tree = tree;
101
+ return null;
102
+ }
103
+ catch (error) {
104
+ return error.message;
105
+ }
106
+ }
107
+ export function removeBoundMigrationTree(item) {
108
+ const tree = readEvidence(item)?.tree;
109
+ if (!tree)
110
+ throw new Error("migration cleanup tree evidence is missing");
111
+ const current = walkTree(tree[0].destination);
112
+ if (current.length !== tree.length
113
+ || current.some((entry, index) => entry.destination !== tree[index]?.destination || entry.kind !== tree[index]?.kind)) {
114
+ throw new Error("managed app cleanup set changed after preview");
115
+ }
116
+ for (const entry of tree) {
117
+ verifyLifecycleResourceAtPublication({ id: `${item.action}.verify`, destination: entry.destination, kind: entry.kind }, entry.observation);
118
+ }
119
+ for (const entry of [...tree].reverse()) {
120
+ removeLifecycleResource({ id: `${item.action}.remove`, destination: entry.destination, kind: entry.kind }, entry.observation);
121
+ }
122
+ }