agentera 3.0.0-dev.6 → 3.0.0-dev.69

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