agentera 3.0.0-dev.4 → 3.0.0-dev.46

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 (585) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +108 -22
  3. package/bundle/.agentera-npx-bundle.json +1 -1
  4. package/bundle/CHANGELOG.md +1351 -0
  5. package/bundle/DESIGN.md +229 -0
  6. package/bundle/LICENSE +201 -0
  7. package/bundle/README.md +143 -0
  8. package/bundle/UPGRADE.md +236 -0
  9. package/bundle/extract-corpus-parity.json +21 -0
  10. package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
  11. package/bundle/references/adapters/package-publication.json +437 -0
  12. package/bundle/references/adapters/package-registry.yaml +434 -189
  13. package/bundle/references/adapters/package-surface-characterization.md +66 -35
  14. package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
  15. package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
  16. package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
  17. package/bundle/references/adapters/runtime-retired-resources.yaml +333 -0
  18. package/bundle/references/analysis/evidence-tier-authority.yaml +518 -0
  19. package/bundle/references/analysis/verification-policy.yaml +191 -0
  20. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +20 -10
  21. package/bundle/references/artifacts/glossary-entry-contract.yaml +1254 -0
  22. package/bundle/references/artifacts/state-storage-authority.yaml +2982 -0
  23. package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
  24. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +7 -8
  25. package/bundle/references/cli/capability-instruction-contract.yaml +97 -59
  26. package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
  27. package/bundle/references/cli/routing-model.md +155 -0
  28. package/bundle/references/cli/trigger-schema-enrichment.md +147 -0
  29. package/bundle/references/cli/update-channels.yaml +35 -2
  30. package/bundle/references/cli/vocabulary-index.yaml +23 -20
  31. package/bundle/references/cli/vocabulary.md +337 -366
  32. package/bundle/references/meta/retained-reference-authority.yaml +151 -0
  33. package/bundle/registry.json +14 -14
  34. package/bundle/skills/agentera/SKILL.md +218 -408
  35. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +84 -0
  36. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/exit.yaml +2 -2
  37. package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +25 -0
  38. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/validation.yaml +37 -18
  39. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +102 -0
  40. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +6 -5
  41. package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
  42. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +176 -0
  43. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/artifacts.yaml +12 -12
  44. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/exit.yaml +5 -5
  45. package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +16 -0
  46. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/validation.yaml +7 -7
  47. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +51 -0
  48. package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/exit.yaml +2 -2
  49. package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +20 -0
  50. package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +144 -0
  51. package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +80 -0
  52. package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +16 -0
  53. package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/validation.yaml +18 -18
  54. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/artifacts.yaml +18 -18
  55. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/exit.yaml +2 -2
  56. package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +16 -0
  57. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/validation.yaml +9 -9
  58. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +76 -0
  59. package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/exit.yaml +9 -7
  60. package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +23 -0
  61. package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +121 -0
  62. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +66 -0
  63. package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/exit.yaml +2 -2
  64. package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +23 -0
  65. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +121 -0
  66. package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +23 -0
  67. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +6 -5
  68. package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +20 -0
  69. package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +115 -0
  70. package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +24 -0
  71. package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +16 -0
  72. package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/validation.yaml +2 -2
  73. package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +73 -0
  74. package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +22 -0
  75. package/bundle/skills/agentera/capabilities/{hej → status}/schemas/validation.yaml +5 -5
  76. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/artifacts.yaml +16 -16
  77. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/exit.yaml +7 -6
  78. package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +23 -0
  79. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/validation.yaml +18 -20
  80. package/bundle/skills/agentera/capability_schema_contract.yaml +200 -37
  81. package/bundle/skills/agentera/protocol.yaml +31 -31
  82. package/bundle/skills/agentera/route-phrases.yaml +81 -0
  83. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +5 -4
  84. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +40 -22
  85. package/bundle/skills/agentera/schemas/artifacts/design.yaml +5 -4
  86. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +15 -19
  87. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +145 -14
  88. package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +82 -0
  89. package/bundle/skills/agentera/schemas/artifacts/health.yaml +58 -21
  90. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +22 -8
  91. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +421 -33
  92. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +143 -53
  93. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +345 -31
  94. package/bundle/skills/agentera/schemas/artifacts/vision.yaml +3 -3
  95. package/dist/analytics/extractCorpus/cli.js +190 -0
  96. package/dist/analytics/extractCorpus/copilotSessions.js +275 -0
  97. package/dist/analytics/extractCorpus/core.js +392 -0
  98. package/dist/analytics/extractCorpus/corpus.js +167 -0
  99. package/dist/analytics/extractCorpus/coverageAudit.js +260 -0
  100. package/dist/analytics/extractCorpus/cursorSessions.js +425 -0
  101. package/dist/analytics/extractCorpus/evidenceTiers.js +603 -0
  102. package/dist/analytics/extractCorpus/extractCorpusParity.js +105 -0
  103. package/dist/analytics/extractCorpus/filesystemSources.js +118 -0
  104. package/dist/analytics/extractCorpus/index.js +14 -0
  105. package/dist/analytics/extractCorpus/jsonlSessions.js +204 -0
  106. package/dist/analytics/extractCorpus/sqliteCaps.js +43 -0
  107. package/dist/analytics/extractCorpus/sqliteSessions.js +367 -0
  108. package/dist/analytics/extractCorpus/tierReader.js +108 -0
  109. package/dist/analytics/extractCorpus.js +2 -1791
  110. package/dist/analytics/glossaryAdviceResolution.js +166 -0
  111. package/dist/analytics/glossaryInputAcquisition.js +319 -0
  112. package/dist/analytics/personalGlossaryAdmission.js +133 -0
  113. package/dist/analytics/personalGlossaryProfile.js +219 -0
  114. package/dist/analytics/profileSignals.js +211 -0
  115. package/dist/analytics/usageStats.js +169 -42
  116. package/dist/audit/terminologyDrift.js +281 -0
  117. package/dist/bin/agentera.js +3 -2
  118. package/dist/capabilities/audit/instructions.js +16 -0
  119. package/dist/capabilities/build/instructions.js +56 -0
  120. package/dist/capabilities/design/instructions.js +4 -0
  121. package/dist/capabilities/discuss/instructions.js +29 -0
  122. package/dist/capabilities/document/instructions.js +11 -0
  123. package/dist/capabilities/index.js +40 -0
  124. package/dist/capabilities/optimize/instructions.js +14 -0
  125. package/dist/capabilities/orchestrate/instructions.js +40 -0
  126. package/dist/capabilities/plan/instructions.js +32 -0
  127. package/dist/capabilities/profile/instructions.js +70 -0
  128. package/dist/capabilities/research/instructions.js +5 -0
  129. package/dist/capabilities/status/instructions.js +11 -0
  130. package/dist/capabilities/status/startupInstructions.js +34 -0
  131. package/dist/capabilities/vision/instructions.js +4 -0
  132. package/dist/cli/appContext.js +30 -24
  133. package/dist/cli/argvalidate.js +0 -1
  134. package/dist/cli/capabilityContext/benchmark.js +565 -0
  135. package/dist/cli/capabilityContext/bespoke.js +44 -0
  136. package/dist/cli/capabilityContext/build.js +242 -0
  137. package/dist/cli/capabilityContext/closeout.js +233 -0
  138. package/dist/cli/capabilityContext/contract.js +179 -0
  139. package/dist/cli/capabilityContext/evidence.js +463 -0
  140. package/dist/cli/capabilityContext/index.js +3 -0
  141. package/dist/cli/capabilityContext/orchestration.js +131 -0
  142. package/dist/cli/capabilityContext/planState.js +260 -0
  143. package/dist/cli/capabilityContext/progress.js +142 -0
  144. package/dist/cli/capabilityContext/projectVerification.js +409 -0
  145. package/dist/cli/capabilityContext/shared.js +83 -0
  146. package/dist/cli/capabilityContext/slim.js +152 -0
  147. package/dist/cli/capabilityContext/startup.js +150 -0
  148. package/dist/cli/capabilityContext/startupAggregation.js +68 -0
  149. package/dist/cli/capabilityContext/types.js +56 -0
  150. package/dist/cli/capabilityContext.js +1 -2421
  151. package/dist/cli/commands/appHome.js +22 -0
  152. package/dist/cli/commands/capability.js +5 -12
  153. package/dist/cli/commands/compact.js +41 -13
  154. package/dist/cli/commands/doctor.js +127 -97
  155. package/dist/cli/commands/durability.js +81 -0
  156. package/dist/cli/commands/glossaryAdvice.js +138 -0
  157. package/dist/cli/commands/lint.js +26 -44
  158. package/dist/cli/commands/personalGlossary.js +176 -0
  159. package/dist/cli/commands/prime/briefOrientation.js +747 -0
  160. package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
  161. package/dist/cli/commands/prime/bundleStatus.js +190 -0
  162. package/dist/cli/commands/prime/collectEntityOrientation.js +311 -0
  163. package/dist/cli/commands/prime/collectOrientationState.js +212 -0
  164. package/dist/cli/commands/prime/orientationOutput.js +397 -0
  165. package/dist/cli/commands/prime/types.js +1 -0
  166. package/dist/cli/commands/prime/v1Migration.js +38 -0
  167. package/dist/cli/commands/prime.js +80 -558
  168. package/dist/cli/commands/profileGrounding.js +55 -0
  169. package/dist/cli/commands/query.js +78 -53
  170. package/dist/cli/commands/report.js +96 -25
  171. package/dist/cli/commands/route.js +142 -0
  172. package/dist/cli/commands/schema.js +266 -143
  173. package/dist/cli/commands/state/decisions.js +387 -0
  174. package/dist/cli/commands/state/docs.js +70 -0
  175. package/dist/cli/commands/state/experimentRecords.js +151 -0
  176. package/dist/cli/commands/state/experiments.js +14 -0
  177. package/dist/cli/commands/state/get.js +129 -0
  178. package/dist/cli/commands/state/health.js +14 -0
  179. package/dist/cli/commands/state/index.js +16 -0
  180. package/dist/cli/commands/state/list.js +194 -0
  181. package/dist/cli/commands/state/objective.js +25 -0
  182. package/dist/cli/commands/state/plan.js +14 -0
  183. package/dist/cli/commands/state/planTasks.js +154 -0
  184. package/dist/cli/commands/state/plans.js +154 -0
  185. package/dist/cli/commands/state/progress.js +13 -0
  186. package/dist/cli/commands/state/shared.js +14 -0
  187. package/dist/cli/commands/state/todo.js +42 -0
  188. package/dist/cli/commands/state/write.js +434 -0
  189. package/dist/cli/commands/upgrade.js +146 -5
  190. package/dist/cli/commands/upgradeVerify.js +118 -0
  191. package/dist/cli/commands/validate.js +272 -213
  192. package/dist/cli/commands/verify.js +24 -9
  193. package/dist/cli/contracts/bundleStatus.js +1 -0
  194. package/dist/cli/contracts/orientationState.js +1 -0
  195. package/dist/cli/dispatch/argvParser.js +32 -0
  196. package/dist/cli/dispatch/check.js +372 -0
  197. package/dist/cli/dispatch/commands.js +27 -0
  198. package/dist/cli/dispatch/index.js +207 -0
  199. package/dist/cli/dispatch/lifecycle.js +652 -0
  200. package/dist/cli/dispatch/prime.js +139 -0
  201. package/dist/cli/dispatch/projections.js +17 -0
  202. package/dist/cli/dispatch/shared.js +63 -0
  203. package/dist/cli/dispatch/state.js +140 -0
  204. package/dist/cli/dispatch.js +1 -996
  205. package/dist/cli/errors.js +52 -0
  206. package/dist/cli/help.js +390 -43
  207. package/dist/cli/migrationRequired.js +87 -0
  208. package/dist/cli/orientation/attention.js +59 -0
  209. package/dist/cli/orientation/corpusCoverage.js +102 -0
  210. package/dist/cli/orientation.js +444 -173
  211. package/dist/cli/planArtifacts.js +350 -0
  212. package/dist/cli/planEvidence.js +157 -0
  213. package/dist/cli/planLifecycleState.js +36 -0
  214. package/dist/cli/planTaskIndex.js +11 -0
  215. package/dist/cli/preCutoverCommand.js +32 -0
  216. package/dist/cli/prime-blob.js +71 -3
  217. package/dist/cli/profileAcquisition.js +167 -0
  218. package/dist/cli/startupCompletenessContract.js +59 -0
  219. package/dist/cli/stateQuery.js +63 -14
  220. package/dist/cli/structured.js +0 -1
  221. package/dist/cli/todoMarkdown.js +46 -0
  222. package/dist/cli/todoReadinessSelection.js +192 -0
  223. package/dist/cli/todoSeverity.js +18 -0
  224. package/dist/core/atomicWriter.js +20 -0
  225. package/dist/core/developmentChannel.js +1 -0
  226. package/dist/core/developmentInvocation.js +374 -0
  227. package/dist/core/difflib.js +0 -1
  228. package/dist/core/envPaths.js +20 -0
  229. package/dist/core/jsonValue.js +5 -0
  230. package/dist/core/paths.js +0 -1
  231. package/dist/core/pyjson.js +67 -3
  232. package/dist/core/shell.js +4 -0
  233. package/dist/core/skillIdentity.js +23 -0
  234. package/dist/core/sourceRoot.js +9 -12
  235. package/dist/core/text.js +10 -0
  236. package/dist/core/toml.js +0 -1
  237. package/dist/core/yaml.js +8 -1
  238. package/dist/eval/evalSkills.js +30 -26
  239. package/dist/eval/hybridRouteEvaluation.js +155 -0
  240. package/dist/eval/semanticEval.js +43 -20
  241. package/dist/eval/semanticFixtures.js +16 -5
  242. package/dist/hooks/common.js +11 -81
  243. package/dist/hooks/compaction/apply.js +446 -0
  244. package/dist/hooks/compaction/dryRun.js +184 -0
  245. package/dist/hooks/compaction/index.js +22 -0
  246. package/dist/hooks/compaction/parse.js +325 -0
  247. package/dist/hooks/compaction/retention.js +202 -0
  248. package/dist/hooks/compaction/status.js +360 -0
  249. package/dist/hooks/compaction/types.js +5 -0
  250. package/dist/hooks/validateArtifact/agentFacing.js +9 -0
  251. package/dist/hooks/validateArtifact/index.js +92 -0
  252. package/dist/hooks/validateArtifact/markdown.js +145 -0
  253. package/dist/hooks/validateArtifact/schema.js +546 -0
  254. package/dist/hooks/validateArtifact/traversal.js +107 -0
  255. package/dist/hooks/validateArtifact/violations.js +107 -0
  256. package/dist/migrate/v2HandoffManifest.js +452 -0
  257. package/dist/registries/activationContract.js +2 -0
  258. package/dist/registries/activationTuples.js +106 -0
  259. package/dist/registries/artifactProtocolIds.js +78 -0
  260. package/dist/registries/artifactRegistry.js +224 -63
  261. package/dist/registries/artifactSchemaProjection.js +45 -0
  262. package/dist/registries/capabilityContract.js +141 -13
  263. package/dist/registries/evaluatorHandoffContract.js +170 -0
  264. package/dist/registries/evidenceTierContract.js +371 -0
  265. package/dist/registries/glossaryAdviceContract.js +79 -0
  266. package/dist/registries/glossaryCaveatContract.js +67 -0
  267. package/dist/registries/glossaryConsumerContractValidation.js +787 -0
  268. package/dist/registries/glossaryEntryContract.js +757 -0
  269. package/dist/registries/glossaryTermIdentity.js +17 -0
  270. package/dist/registries/glossaryTermOccurrence.js +20 -0
  271. package/dist/registries/hybridRoute.js +274 -0
  272. package/dist/registries/hybridRouteReceipt.js +221 -0
  273. package/dist/registries/packagePublication.js +229 -0
  274. package/dist/registries/packageRegistry.js +187 -211
  275. package/dist/registries/todoReadinessContract.js +448 -0
  276. package/dist/registries/triggerLoader.js +174 -0
  277. package/dist/registries/verbosityBudgetContract.js +205 -0
  278. package/dist/release/releaseMetadata.js +385 -0
  279. package/dist/runtime/lifecycleAdapterContract.js +457 -0
  280. package/dist/runtime/lifecycleAdapters.js +777 -0
  281. package/dist/runtime/lifecycleAuthority.js +453 -0
  282. package/dist/runtime/lifecycleOperationContract.js +123 -0
  283. package/dist/runtime/lifecycleOperations.js +634 -0
  284. package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
  285. package/dist/runtime/lifecyclePublication.js +415 -0
  286. package/dist/runtime/lifecycleSnapshot.js +438 -0
  287. package/dist/runtime/nativeResourceCleanup.js +502 -0
  288. package/dist/setup/opencode.js +20 -0
  289. package/dist/setup/opencodeConstants.js +1 -0
  290. package/dist/setup/sharedSkill.js +45 -0
  291. package/dist/setup/smokeChecks.js +21 -82
  292. package/dist/state/archiveDiscovery.js +580 -0
  293. package/dist/state/archivePublication.js +225 -0
  294. package/dist/state/archiveRecovery.js +237 -0
  295. package/dist/state/archiveReplay.js +53 -0
  296. package/dist/state/canonicalMigrationRecord.js +36 -0
  297. package/dist/state/changelog.js +221 -0
  298. package/dist/state/decisionEntities.js +367 -0
  299. package/dist/state/decisionLegacyValidation.js +215 -0
  300. package/dist/state/decisionMigrationProvenance.js +199 -0
  301. package/dist/state/decisionOverlay.js +254 -0
  302. package/dist/state/decisionRevision.js +256 -0
  303. package/dist/state/decisionRevisionMigration.js +89 -0
  304. package/dist/state/directRetrieval.js +323 -0
  305. package/dist/state/durability.js +324 -0
  306. package/dist/state/entityCutover.js +459 -0
  307. package/dist/state/entityCutoverGit.js +127 -0
  308. package/dist/state/entityGlossaryAuthority.js +13 -0
  309. package/dist/state/entityListProjection.js +187 -0
  310. package/dist/state/entityListRuntimeRegistry.js +85 -0
  311. package/dist/state/entityMigrationCausality.js +97 -0
  312. package/dist/state/entityMigrationIdentity.js +5 -0
  313. package/dist/state/entityMigrationPreview.js +846 -0
  314. package/dist/state/entityMigrationTodo.js +133 -0
  315. package/dist/state/entityPublicationContext.js +806 -0
  316. package/dist/state/entityRetrievalHelp.js +506 -0
  317. package/dist/state/entityStorage.js +896 -0
  318. package/dist/state/exactReplacementRecovery.js +18 -0
  319. package/dist/state/experimentArchive.js +63 -0
  320. package/dist/state/experimentIdentity.js +202 -0
  321. package/dist/state/healthEntities.js +262 -0
  322. package/dist/state/healthEntityValidation.js +18 -0
  323. package/dist/state/healthRepair.js +69 -0
  324. package/dist/state/installRoot.js +64 -25
  325. package/dist/state/legacyEntityCutoverEvidence.js +65 -0
  326. package/dist/state/legacyIdentity.js +47 -0
  327. package/dist/state/legacySummaryRecord.js +6 -0
  328. package/dist/state/listAccounting.js +54 -0
  329. package/dist/state/listClassification.js +17 -0
  330. package/dist/state/listCursor.js +42 -0
  331. package/dist/state/listRetrieval.js +781 -0
  332. package/dist/state/migrationSourceBinding.js +30 -0
  333. package/dist/state/objectiveExperimentEntities.js +322 -0
  334. package/dist/state/planEntities.js +530 -0
  335. package/dist/state/planIdentity.js +47 -0
  336. package/dist/state/planRetrieval.js +313 -0
  337. package/dist/state/planTaskRetrieval.js +294 -0
  338. package/dist/state/progressEntities.js +512 -0
  339. package/dist/state/progressGlossaryCaveat.js +168 -0
  340. package/dist/state/progressPublicationOrder.js +19 -0
  341. package/dist/state/projectRoot.js +62 -0
  342. package/dist/state/projectionPolicy.js +190 -0
  343. package/dist/state/retrievalAuthority.js +156 -0
  344. package/dist/state/safeProjectFile.js +155 -0
  345. package/dist/state/startupAnalysis/benchmark.js +432 -0
  346. package/dist/state/startupAnalysis/contract.js +160 -0
  347. package/dist/state/startupAnalysis/helpers.js +286 -0
  348. package/dist/state/startupAnalysis/index.js +6 -0
  349. package/dist/state/startupAnalysis/metrics.js +340 -0
  350. package/dist/state/startupAnalysis/records.js +198 -0
  351. package/dist/state/startupAnalysis/report.js +111 -0
  352. package/dist/state/startupAnalysis/threshold.js +512 -0
  353. package/dist/state/startupAnalysis.js +2 -1953
  354. package/dist/state/startupProjection.js +499 -0
  355. package/dist/state/stateMode.js +85 -0
  356. package/dist/state/stateStorageAuthority.js +47 -0
  357. package/dist/state/summaryEntityRead.js +25 -0
  358. package/dist/state/summaryMigrationProvenance.js +66 -0
  359. package/dist/state/summarySourceRowAuthority.js +36 -0
  360. package/dist/state/todoDocsEntities.js +1064 -0
  361. package/dist/state/todoDocsEntityValidation.js +158 -0
  362. package/dist/state/todoMarkdownProjection.js +51 -0
  363. package/dist/state/todoReconciliationActivation.js +132 -0
  364. package/dist/state/todoReconciliationInspection.js +173 -0
  365. package/dist/state/todoReconciliationRepair.js +170 -0
  366. package/dist/state/todoReconciliationTransaction.js +582 -0
  367. package/dist/state/write/assign.js +20 -0
  368. package/dist/state/write/candidateMutation.js +269 -0
  369. package/dist/state/write/errors.js +11 -0
  370. package/dist/state/write/experimentPublication.js +192 -0
  371. package/dist/state/write/explain.js +332 -0
  372. package/dist/state/write/fields.js +61 -0
  373. package/dist/state/write/glossaryPublication.js +263 -0
  374. package/dist/state/write/grammar.js +280 -0
  375. package/dist/state/write/helpers.js +29 -0
  376. package/dist/state/write/index.js +12 -0
  377. package/dist/state/write/input.js +367 -0
  378. package/dist/state/write/lock.js +837 -0
  379. package/dist/state/write/mutation.js +234 -0
  380. package/dist/state/write/operations.js +169 -0
  381. package/dist/state/write/planEvaluation.js +128 -0
  382. package/dist/state/write/planPublication.js +179 -0
  383. package/dist/state/write/runtimeOperations.js +142 -0
  384. package/dist/state/write/serialize.js +1 -0
  385. package/dist/state/write/transaction.js +52 -0
  386. package/dist/state/write/validate.js +7 -0
  387. package/dist/upgrade/appContentRefresh.js +383 -0
  388. package/dist/upgrade/appModel.js +8 -7
  389. package/dist/upgrade/atomicWriter.js +1 -0
  390. package/dist/upgrade/bundleEvidence.js +33 -0
  391. package/dist/upgrade/channels.js +12 -8
  392. package/dist/upgrade/compatibility.js +56 -21
  393. package/dist/upgrade/doctor.js +197 -192
  394. package/dist/upgrade/doctorClassifier.js +187 -0
  395. package/dist/upgrade/installedHooksRetirement.js +196 -0
  396. package/dist/upgrade/legacyAgentCleanup.js +282 -0
  397. package/dist/upgrade/lifecycleUpgrade.js +113 -0
  398. package/dist/upgrade/migrateArtifactsV2ToV3.js +367 -149
  399. package/dist/upgrade/migrationPublication.js +122 -0
  400. package/dist/upgrade/nextMajorDoctor.js +155 -0
  401. package/dist/upgrade/npxPlatformStatus.js +22 -0
  402. package/dist/upgrade/projectIntegration.js +145 -187
  403. package/dist/upgrade/projectIntegrationDecision.js +50 -0
  404. package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
  405. package/dist/upgrade/runtimeMigration.js +278 -352
  406. package/dist/upgrade/upgradeCommands.js +14 -1
  407. package/dist/upgrade/upgradeLock.js +85 -0
  408. package/dist/upgrade/upgradeOrchestrator.js +263 -59
  409. package/dist/upgrade/v3CapabilitySurface.js +14 -0
  410. package/dist/upgrade/versionResolution.js +12 -5
  411. package/dist/validate/activationArtifactEvidence.js +844 -0
  412. package/dist/validate/activationConjunction.js +816 -0
  413. package/dist/validate/activationEvidenceManifest.js +515 -0
  414. package/dist/validate/activationPackageSemantics.js +29 -0
  415. package/dist/validate/appHomeContract.js +5 -11
  416. package/dist/validate/bootstrapAuthority.js +44 -0
  417. package/dist/validate/capability.js +144 -15
  418. package/dist/validate/crossCapability.js +15 -10
  419. package/dist/validate/retainedReferenceAuthority.js +879 -0
  420. package/dist/validate/selfAudit.js +73 -37
  421. package/dist/validate/v1LegacyCruft.js +131 -0
  422. package/dist/validate/vocabularyAuthority.js +303 -0
  423. package/package.json +53 -27
  424. package/bundle/references/adapters/cursor.md +0 -213
  425. package/bundle/references/adapters/opencode.md +0 -530
  426. package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
  427. package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
  428. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
  429. package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -548
  430. package/bundle/references/adapters/runtime-feature-parity.md +0 -189
  431. package/bundle/references/analysis/benchmark.md +0 -267
  432. package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
  433. package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
  434. package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -355
  435. package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -278
  436. package/bundle/references/cli/capability-tool-classification.yaml +0 -53
  437. package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
  438. package/bundle/references/meta/documentation-inventory.md +0 -43
  439. package/bundle/references/v1-section-mapping.md +0 -47
  440. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  441. package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
  442. package/bundle/skills/agentera/agents/hej.toml +0 -6
  443. package/bundle/skills/agentera/agents/inspektera.toml +0 -6
  444. package/bundle/skills/agentera/agents/inspirera.toml +0 -6
  445. package/bundle/skills/agentera/agents/optimera.toml +0 -6
  446. package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
  447. package/bundle/skills/agentera/agents/planera.toml +0 -6
  448. package/bundle/skills/agentera/agents/profilera.toml +0 -6
  449. package/bundle/skills/agentera/agents/realisera.toml +0 -6
  450. package/bundle/skills/agentera/agents/resonera.toml +0 -6
  451. package/bundle/skills/agentera/agents/visionera.toml +0 -6
  452. package/bundle/skills/agentera/agents/visualisera.toml +0 -6
  453. package/bundle/skills/agentera/capabilities/dokumentera/instructions.md +0 -428
  454. package/bundle/skills/agentera/capabilities/dokumentera/schemas/artifacts.yaml +0 -73
  455. package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +0 -35
  456. package/bundle/skills/agentera/capabilities/hej/instructions.md +0 -331
  457. package/bundle/skills/agentera/capabilities/hej/schemas/artifacts.yaml +0 -69
  458. package/bundle/skills/agentera/capabilities/hej/schemas/triggers.yaml +0 -58
  459. package/bundle/skills/agentera/capabilities/inspektera/instructions.md +0 -514
  460. package/bundle/skills/agentera/capabilities/inspektera/schemas/artifacts.yaml +0 -76
  461. package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +0 -38
  462. package/bundle/skills/agentera/capabilities/inspirera/instructions.md +0 -280
  463. package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +0 -24
  464. package/bundle/skills/agentera/capabilities/inspirera/schemas/triggers.yaml +0 -34
  465. package/bundle/skills/agentera/capabilities/optimera/instructions.md +0 -437
  466. package/bundle/skills/agentera/capabilities/optimera/schemas/triggers.yaml +0 -39
  467. package/bundle/skills/agentera/capabilities/orkestrera/instructions.md +0 -433
  468. package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +0 -64
  469. package/bundle/skills/agentera/capabilities/orkestrera/schemas/triggers.yaml +0 -42
  470. package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +0 -107
  471. package/bundle/skills/agentera/capabilities/planera/instructions.md +0 -368
  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/instructions.md +0 -419
  476. package/bundle/skills/agentera/capabilities/profilera/schemas/artifacts.yaml +0 -18
  477. package/bundle/skills/agentera/capabilities/profilera/schemas/triggers.yaml +0 -45
  478. package/bundle/skills/agentera/capabilities/profilera/schemas/validation.yaml +0 -57
  479. package/bundle/skills/agentera/capabilities/realisera/instructions.md +0 -403
  480. package/bundle/skills/agentera/capabilities/realisera/schemas/artifacts.yaml +0 -80
  481. package/bundle/skills/agentera/capabilities/realisera/schemas/triggers.yaml +0 -39
  482. package/bundle/skills/agentera/capabilities/realisera/schemas/validation.yaml +0 -110
  483. package/bundle/skills/agentera/capabilities/resonera/instructions.md +0 -329
  484. package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +0 -47
  485. package/bundle/skills/agentera/capabilities/resonera/schemas/triggers.yaml +0 -46
  486. package/bundle/skills/agentera/capabilities/resonera/schemas/validation.yaml +0 -77
  487. package/bundle/skills/agentera/capabilities/visionera/instructions.md +0 -309
  488. package/bundle/skills/agentera/capabilities/visionera/schemas/triggers.yaml +0 -41
  489. package/bundle/skills/agentera/capabilities/visualisera/instructions.md +0 -400
  490. package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +0 -33
  491. package/bundle/skills/agentera/references/contract.md +0 -1039
  492. package/bundle/skills/hej/.claude-plugin/plugin.json +0 -6
  493. package/bundle/skills/hej/SKILL.md +0 -69
  494. package/bundle/skills/hej/agents/hej.toml +0 -11
  495. package/bundle/skills/hej/agents/openai.yaml +0 -8
  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/cli/appContext.js.map +0 -1
  500. package/dist/cli/argvalidate.js.map +0 -1
  501. package/dist/cli/capabilityContext.js.map +0 -1
  502. package/dist/cli/commands/backfill.js +0 -84
  503. package/dist/cli/commands/backfill.js.map +0 -1
  504. package/dist/cli/commands/capability.js.map +0 -1
  505. package/dist/cli/commands/compact.js.map +0 -1
  506. package/dist/cli/commands/doctor.js.map +0 -1
  507. package/dist/cli/commands/lint.js.map +0 -1
  508. package/dist/cli/commands/prime.js.map +0 -1
  509. package/dist/cli/commands/query.js.map +0 -1
  510. package/dist/cli/commands/report.js.map +0 -1
  511. package/dist/cli/commands/schema.js.map +0 -1
  512. package/dist/cli/commands/state.js +0 -1012
  513. package/dist/cli/commands/state.js.map +0 -1
  514. package/dist/cli/commands/upgrade.js.map +0 -1
  515. package/dist/cli/commands/validate.js.map +0 -1
  516. package/dist/cli/commands/verify.js.map +0 -1
  517. package/dist/cli/dispatch.js.map +0 -1
  518. package/dist/cli/help.js.map +0 -1
  519. package/dist/cli/orientation.js.map +0 -1
  520. package/dist/cli/prime-blob.js.map +0 -1
  521. package/dist/cli/stateQuery.js.map +0 -1
  522. package/dist/cli/structured.js.map +0 -1
  523. package/dist/core/difflib.js.map +0 -1
  524. package/dist/core/git.js +0 -43
  525. package/dist/core/git.js.map +0 -1
  526. package/dist/core/paths.js.map +0 -1
  527. package/dist/core/pyjson.js.map +0 -1
  528. package/dist/core/sourceRoot.js.map +0 -1
  529. package/dist/core/toml.js.map +0 -1
  530. package/dist/core/yaml.js.map +0 -1
  531. package/dist/eval/evalSkills.js.map +0 -1
  532. package/dist/eval/semanticEval.js.map +0 -1
  533. package/dist/eval/semanticFixtures.js.map +0 -1
  534. package/dist/hooks/common.js.map +0 -1
  535. package/dist/hooks/compaction.js +0 -935
  536. package/dist/hooks/compaction.js.map +0 -1
  537. package/dist/hooks/cursorPreToolUse.js +0 -19
  538. package/dist/hooks/cursorPreToolUse.js.map +0 -1
  539. package/dist/hooks/cursorSessionStart.js +0 -71
  540. package/dist/hooks/cursorSessionStart.js.map +0 -1
  541. package/dist/hooks/sessionStart.js +0 -209
  542. package/dist/hooks/sessionStart.js.map +0 -1
  543. package/dist/hooks/sessionStop.js +0 -212
  544. package/dist/hooks/sessionStop.js.map +0 -1
  545. package/dist/hooks/validateArtifact.js +0 -933
  546. package/dist/hooks/validateArtifact.js.map +0 -1
  547. package/dist/registries/artifactRegistry.js.map +0 -1
  548. package/dist/registries/capabilityContract.js.map +0 -1
  549. package/dist/registries/packageRegistry.js.map +0 -1
  550. package/dist/registries/runtimeAdapterRegistry.js +0 -315
  551. package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
  552. package/dist/setup/codex.js +0 -1056
  553. package/dist/setup/codex.js.map +0 -1
  554. package/dist/setup/copilot.js +0 -227
  555. package/dist/setup/copilot.js.map +0 -1
  556. package/dist/setup/cursor.js +0 -127
  557. package/dist/setup/cursor.js.map +0 -1
  558. package/dist/setup/doctor.js +0 -1297
  559. package/dist/setup/doctor.js.map +0 -1
  560. package/dist/setup/smokeChecks.js.map +0 -1
  561. package/dist/state/installRoot.js.map +0 -1
  562. package/dist/state/progressCommit.js +0 -289
  563. package/dist/state/progressCommit.js.map +0 -1
  564. package/dist/state/startupAnalysis.js.map +0 -1
  565. package/dist/upgrade/appModel.js.map +0 -1
  566. package/dist/upgrade/channels.js.map +0 -1
  567. package/dist/upgrade/compatibility.js.map +0 -1
  568. package/dist/upgrade/doctor.js.map +0 -1
  569. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -571
  570. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
  571. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
  572. package/dist/upgrade/projectIntegration.js.map +0 -1
  573. package/dist/upgrade/runtimeMigration.js.map +0 -1
  574. package/dist/upgrade/upgradeCommands.js.map +0 -1
  575. package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
  576. package/dist/upgrade/versionResolution.js.map +0 -1
  577. package/dist/validate/appHomeContract.js.map +0 -1
  578. package/dist/validate/capability.js.map +0 -1
  579. package/dist/validate/crossCapability.js.map +0 -1
  580. package/dist/validate/lifecycleAdapters.js +0 -772
  581. package/dist/validate/lifecycleAdapters.js.map +0 -1
  582. package/dist/validate/selfAudit.js.map +0 -1
  583. /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
  584. /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
  585. /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
@@ -1,16 +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
- import { AGENTERA_USER_STATE_NAMES, ROOT_USER_STATE_DIR_NAMES, ROOT_USER_STATE_FILE_NAMES, } from "./doctor.js";
7
- import { applyV1ArtifactsPhase, planV1ArtifactsPhase, } from "./migrateArtifactsV1ToV2.js";
8
- import { applyRuntimeMigrationItems, planRuntimeMigrationItems, resolveNpxHookCommands, rewireRuntimeText, } from "./runtimeMigration.js";
11
+ import { AGENTERA_USER_STATE_NAMES, } from "./doctor.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";
9
18
  /**
10
19
  * v2→v3 migration phases: artifacts (noop for YAML), runtime rewire, cleanup.
11
- * v1 Markdown→YAML migration stays separate (prime.ts V1_ARTIFACT_PAIRS).
12
20
  */
13
- export const MIGRATION_STATUSES = ["pending", "applied", "noop", "blocked", "failed", "skipped"];
21
+ export const MIGRATION_STATUSES = ["pending", "applied", "noop", "blocked", "failed"];
14
22
  export const V1_ARTIFACT_PAIRS = [
15
23
  [".agentera/PROGRESS.md", ".agentera/progress.yaml"],
16
24
  [".agentera/PLAN.md", ".agentera/plan.yaml"],
@@ -19,15 +27,133 @@ export const V1_ARTIFACT_PAIRS = [
19
27
  [".agentera/DOCS.md", ".agentera/docs.yaml"],
20
28
  ["VISION.md", ".agentera/vision.yaml"],
21
29
  ];
22
- /** Default development-channel npm entrypoint for tests and legacy imports. */
23
- export const NPX_CLI_ENTRYPOINT = "npx -y agentera@next";
24
- export const NPX_HOOK_VALIDATE = `${NPX_CLI_ENTRYPOINT} hook validate-artifact`;
25
- export const NPX_HOOK_CURSOR_SESSION_START = `${NPX_CLI_ENTRYPOINT} hook cursor-session-start`;
26
- export const NPX_HOOK_CURSOR_SESSION_STOP = `${NPX_CLI_ENTRYPOINT} hook session-stop`;
27
- export const NPX_HOOK_CURSOR_PRE_TOOL = `${NPX_CLI_ENTRYPOINT} hook cursor-pre-tool-use`;
28
- 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
+ }
29
155
  function emptySummary() {
30
- 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 };
31
157
  }
32
158
  export function summarizePhase(name, items, message = "") {
33
159
  const summary = emptySummary();
@@ -47,9 +173,6 @@ export function summarizePhase(name, items, message = "") {
47
173
  else if (summary.applied > 0) {
48
174
  status = "applied";
49
175
  }
50
- else if (summary.skipped > 0 && summary.noop === 0 && summary.applied === 0) {
51
- status = "skipped";
52
- }
53
176
  else {
54
177
  status = "noop";
55
178
  }
@@ -96,35 +219,88 @@ export function planArtifactsPhase(project) {
96
219
  ]);
97
220
  }
98
221
  const v1Pairs = detectV1ArtifactPairs(root);
99
- if (v1Pairs.length > 0) {
100
- return planV1ArtifactsPhase(root);
101
- }
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
+ }));
102
228
  const yamlArtifacts = listV2YamlArtifacts(root);
103
- if (yamlArtifacts.length === 0) {
229
+ const lifecycleItems = lifecyclePlanArtifacts(root);
230
+ if (yamlArtifacts.length === 0 && v1Items.length === 0 && lifecycleItems.length === 0) {
104
231
  return summarizePhase("artifacts", [], "no project artifacts found");
105
232
  }
106
- const items = yamlArtifacts.map((source) => ({
107
- status: "noop",
108
- action: "preserve",
109
- source,
110
- message: "v2 YAML artifact preserved; no v2→v3 schema migration required",
111
- }));
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
+ ];
112
244
  return summarizePhase("artifacts", items);
113
245
  }
114
- export function applyArtifactsPhase(phase, project, force = false) {
246
+ export function applyArtifactsPhase(phase, project, _force = false) {
115
247
  const root = resolvePath(project);
116
- const hasV1Migration = phase.items.some((item) => item.action === "migrate");
117
- if (hasV1Migration) {
118
- applyV1ArtifactsPhase(phase, root, force);
119
- 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";
120
284
  }
121
- 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;
122
288
  }
123
- export function planRuntimeRewirePhase(ctx) {
289
+ export function planRuntimeRetirementPhase(ctx, _resolvedChannel) {
124
290
  const items = planRuntimeMigrationItems(ctx);
125
- 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" : "");
126
302
  }
127
- export function applyRuntimeRewirePhase(phase, ctx) {
303
+ export function applyRuntimeRetirementPhase(phase, ctx) {
128
304
  if (ctx) {
129
305
  applyRuntimeMigrationItems(phase.items, ctx);
130
306
  }
@@ -139,60 +315,74 @@ export function applyRuntimeRewirePhase(phase, ctx) {
139
315
  phase.status = updated.status;
140
316
  phase.summary = updated.summary;
141
317
  }
142
- function agenteraUserStateDirIsRecognized(dir) {
143
- if (!pathExists(dir) || !fs.statSync(dir).isDirectory()) {
144
- return false;
145
- }
146
- for (const entry of fs.readdirSync(dir)) {
147
- const full = path.join(dir, entry);
148
- const st = fs.statSync(full);
149
- if (AGENTERA_USER_STATE_NAMES.has(entry) && st.isFile()) {
150
- continue;
151
- }
152
- if (entry === "optimera" && st.isDirectory()) {
153
- continue;
154
- }
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))
155
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";
156
326
  }
157
- return true;
158
- }
159
- function isPreservedUserStateEntry(appHome, entry) {
160
- const full = path.join(appHome, entry);
161
- if (!pathExists(full)) {
327
+ catch {
162
328
  return false;
163
329
  }
164
- const st = fs.statSync(full);
165
- if (ROOT_USER_STATE_FILE_NAMES.has(entry) && st.isFile()) {
166
- return true;
167
- }
168
- if (ROOT_USER_STATE_DIR_NAMES.has(entry) && st.isDirectory()) {
169
- return true;
170
- }
171
- if (entry === ".agentera" && agenteraUserStateDirIsRecognized(full)) {
172
- return true;
173
- }
174
- return false;
175
330
  }
176
- function listPreservedUserStatePaths(appHome) {
177
- const preserved = [];
178
- for (const entry of listPreservedUserState(appHome)) {
179
- const full = path.join(appHome, entry);
180
- preserved.push(full);
181
- if (entry === ".agentera" && pathExists(full) && fs.statSync(full).isDirectory()) {
182
- for (const name of AGENTERA_USER_STATE_NAMES) {
183
- const nested = path.join(full, name);
184
- if (isFile(nested)) {
185
- preserved.push(nested);
186
- }
187
- }
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);
188
370
  }
189
- }
190
- return preserved.sort();
191
- }
192
- function hasManagedBundleEvidence(managedAppRoot) {
193
- return (isFile(path.join(managedAppRoot, BUNDLE_MARKER)) ||
194
- (isFile(path.join(managedAppRoot, "scripts", "agentera")) &&
195
- isFile(path.join(managedAppRoot, "skills", "agentera", "SKILL.md"))));
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();
196
386
  }
197
387
  function listManagedBundlePreview(managedAppRoot, limit = 20) {
198
388
  if (!pathExists(managedAppRoot)) {
@@ -218,88 +408,117 @@ function listManagedBundlePreview(managedAppRoot, limit = 20) {
218
408
  walk(managedAppRoot, "");
219
409
  return out;
220
410
  }
221
- function appHomeHasUnrecognizedEntries(appHome) {
222
- if (!pathExists(appHome)) {
223
- return [];
224
- }
225
- const unknown = [];
226
- for (const entry of fs.readdirSync(appHome)) {
227
- if (entry === "app") {
228
- continue;
229
- }
230
- if (!isPreservedUserStateEntry(appHome, entry)) {
231
- unknown.push(entry);
232
- }
233
- }
234
- return unknown;
235
- }
236
411
  export function planCleanupPhase(ctx) {
237
412
  const appHome = resolvePath(ctx.appHome);
238
413
  const roots = doctorRoots(appHome);
239
414
  const managedAppRoot = roots.managedAppRoot;
240
- const preserved = listPreservedUserStatePaths(appHome);
241
- const unknown = appHomeHasUnrecognizedEntries(appHome);
415
+ const preflight = resolveMigrationUserStatePreflight(appHome, {
416
+ home: ctx.home,
417
+ env: ctx.env,
418
+ });
419
+ const preserved = preflight.preservedAbsolutePaths;
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
+ ];
242
446
  if (unknown.length > 0 && !ctx.force) {
243
- return summarizePhase("cleanup", [
244
- {
245
- status: "blocked",
246
- action: "remove-managed-app-home",
247
- source: appHome,
248
- preserved,
249
- message: "app home contains unrecognized entries outside preserved user state; cleanup blocked without --force",
250
- },
251
- ]);
252
- }
253
- if (!hasManagedBundleEvidence(managedAppRoot)) {
254
- 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);
255
455
  }
256
- const removedPreview = listManagedBundlePreview(managedAppRoot);
257
- return summarizePhase("cleanup", [
258
- {
259
- status: "pending",
456
+ if (appRootUnknown.length > 0) {
457
+ items.push({
458
+ status: "blocked",
260
459
  action: "remove-managed-app-home",
261
460
  source: managedAppRoot,
262
461
  target: appHome,
263
- preserved,
264
- removedPreview,
265
- message: "will remove managed Python app-home bundle under app/ while preserving user state at app-home root",
266
- },
267
- ]);
268
- }
269
- function listPreservedUserState(appHome) {
270
- if (!pathExists(appHome)) {
271
- 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);
272
466
  }
273
- const preserved = [];
274
- for (const entry of fs.readdirSync(appHome)) {
275
- if (entry === "app") {
276
- continue;
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);
277
477
  }
278
- if (isPreservedUserStateEntry(appHome, entry)) {
279
- preserved.push(entry);
478
+ if (items.length === 0) {
479
+ return summarizePhase("cleanup", [], "no managed Python app-home bundle to remove");
280
480
  }
481
+ return summarizePhase("cleanup", items);
281
482
  }
282
- return preserved.sort();
283
- }
284
- function removeDirectoryRecursive(dir) {
285
- if (!pathExists(dir)) {
286
- return;
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`;
287
497
  }
288
- fs.rmSync(dir, { recursive: true, force: true });
498
+ items.push(cleanupItem);
499
+ return summarizePhase("cleanup", items);
289
500
  }
290
- 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
+ }
291
507
  for (const item of phase.items) {
292
- if (item.status !== "pending" || !item.source) {
508
+ if (item.status !== "pending" || item.action !== "remove-managed-app-home" || !item.source) {
293
509
  continue;
294
510
  }
295
511
  try {
296
- 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);
297
516
  item.status = "applied";
298
517
  item.message = "managed Python app-home bundle removed; user state preserved";
299
518
  }
300
519
  catch (exc) {
301
- item.status = "failed";
302
- 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`;
303
522
  }
304
523
  }
305
524
  const updated = summarizePhase("cleanup", phase.items, phase.message);
@@ -309,25 +528,24 @@ export function applyCleanupPhase(phase) {
309
528
  export function dryRunMigration(ctx) {
310
529
  return {
311
530
  artifacts: planArtifactsPhase(ctx.project),
312
- runtime: planRuntimeRewirePhase(ctx),
531
+ runtime: planRuntimeRetirementPhase(ctx),
313
532
  cleanup: planCleanupPhase(ctx),
314
533
  };
315
534
  }
316
535
  export function applyMigrationPhases(ctx, preview, only = ["artifacts", "runtime", "cleanup"]) {
317
536
  const result = {
318
- artifacts: { ...preview.artifacts, items: preview.artifacts.items.map((item) => ({ ...item })) },
319
- runtime: { ...preview.runtime, items: preview.runtime.items.map((item) => ({ ...item })) },
320
- 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) },
321
540
  };
322
541
  if (only.includes("artifacts")) {
323
542
  applyArtifactsPhase(result.artifacts, ctx.project, ctx.force);
324
543
  }
325
544
  if (only.includes("runtime")) {
326
- applyRuntimeRewirePhase(result.runtime, ctx);
545
+ applyRuntimeRetirementPhase(result.runtime, ctx);
327
546
  }
328
547
  if (only.includes("cleanup")) {
329
- applyCleanupPhase(result.cleanup);
548
+ applyCleanupPhase(result.cleanup, ctx);
330
549
  }
331
550
  return result;
332
551
  }
333
- //# sourceMappingURL=migrateArtifactsV2ToV3.js.map