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
@@ -0,0 +1,383 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { CAPABILITY_INSTRUCTIONS } from "../capabilities/index.js";
5
+ import { isFile, pathExists, resolvePath } from "../core/paths.js";
6
+ import { doctorRoots } from "./appModel.js";
7
+ import { hasBundleRootEvidence } from "./bundleEvidence.js";
8
+ import { INSTALLED_HOOKS_SURFACE_LABEL, applyInstalledHooksRetirementItems, detectStaleInstalledHooksSurface, planInstalledHooksRetirementItems, } from "./installedHooksRetirement.js";
9
+ import { bindMigrationResource, withBoundMigrationDirectory } from "./migrationPublication.js";
10
+ export const APP_CONTENT_REFRESH_ACTION = "refresh-app-content";
11
+ /**
12
+ * Top-level app-home entry names written and refreshed by {@link applyAppContentRefresh}.
13
+ * The cleanup gate treats these as refreshable managed app content (not user state,
14
+ * not genuinely unrecognized) so v3's own content surface is never flagged as a
15
+ * false-positive "unrecognized entries" block. Sourced here as the single authority;
16
+ * do not mirror this list in the gate or doctor.
17
+ */
18
+ export const MANAGED_APP_CONTENT_ROOT_ENTRIES = new Set([
19
+ "skills",
20
+ "references",
21
+ "registry.json",
22
+ "dist",
23
+ ]);
24
+ /** Stale-surface labels surfaced in upgrade dry-run (B6 / defect #11). */
25
+ export const APP_CONTENT_SURFACE_LABELS = [
26
+ "SKILL.md",
27
+ "protocol.yaml",
28
+ "capability_schema_contract.yaml",
29
+ "capabilities/*/schemas/*",
30
+ "references/",
31
+ "registry.json",
32
+ "dist/capabilities",
33
+ INSTALLED_HOOKS_SURFACE_LABEL,
34
+ ];
35
+ const V2_CAPABILITY_VERBS = [
36
+ "hej",
37
+ "visionera",
38
+ "resonera",
39
+ "inspirera",
40
+ "planera",
41
+ "realisera",
42
+ "optimera",
43
+ "inspektera",
44
+ "dokumentera",
45
+ "profilera",
46
+ "visualisera",
47
+ "orkestrera",
48
+ ];
49
+ const SKIP_COPY_PARTS = new Set(["__pycache__", ".pytest_cache", "node_modules"]);
50
+ const SKIP_COPY_SUFFIXES = [".pyc", ".pyo"];
51
+ function shouldSkipCopyEntry(name) {
52
+ if (SKIP_COPY_PARTS.has(name)) {
53
+ return true;
54
+ }
55
+ return SKIP_COPY_SUFFIXES.some((suffix) => name.endsWith(suffix));
56
+ }
57
+ function shouldSkipCapabilityFile(relFromSkills) {
58
+ return /capabilities\/[^/]+\/instructions\.md$/i.test(relFromSkills.replace(/\\/g, "/"));
59
+ }
60
+ function runtimeCompiledRoot() {
61
+ return path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
62
+ }
63
+ export function resolveAppContentSources(sourceRoot, compiledRoot = runtimeCompiledRoot()) {
64
+ const root = resolvePath(sourceRoot);
65
+ const candidate = path.join(resolvePath(compiledRoot), "capabilities");
66
+ const distCapabilities = pathExists(candidate) && fs.statSync(candidate).isDirectory() ? candidate : null;
67
+ return {
68
+ skillsDir: path.join(root, "skills"),
69
+ referencesDir: path.join(root, "references"),
70
+ registryJson: path.join(root, "registry.json"),
71
+ distCapabilities,
72
+ };
73
+ }
74
+ function readInstalledText(installedRoot, rel) {
75
+ const filePath = path.join(installedRoot, rel);
76
+ if (!isFile(filePath)) {
77
+ return null;
78
+ }
79
+ return fs.readFileSync(filePath, "utf8");
80
+ }
81
+ function filesEqual(left, right) {
82
+ if (!isFile(left) || !isFile(right)) {
83
+ return false;
84
+ }
85
+ return fs.readFileSync(left).equals(fs.readFileSync(right));
86
+ }
87
+ export function skillMdLooksV2(text) {
88
+ if (text.includes("packages/cli/src/capabilities") || text.includes("instructions.ts")) {
89
+ return false;
90
+ }
91
+ return V2_CAPABILITY_VERBS.some((verb) => new RegExp(`\\b${verb}\\b`).test(text));
92
+ }
93
+ export function contractLooksV2(text) {
94
+ return /\binstructions\.md\b/.test(text) && !/\binstructions\.ts\b/.test(text);
95
+ }
96
+ function installedRootForDetection(appHome) {
97
+ const roots = doctorRoots(appHome);
98
+ if (hasBundleRootEvidence(roots.activeBundleRoot)) {
99
+ return roots.activeBundleRoot;
100
+ }
101
+ if (isFile(path.join(roots.activeBundleRoot, "skills", "agentera", "SKILL.md"))) {
102
+ return roots.activeBundleRoot;
103
+ }
104
+ if (isFile(path.join(appHome, "skills", "agentera", "SKILL.md"))) {
105
+ return appHome;
106
+ }
107
+ return null;
108
+ }
109
+ function walkYamlFiles(dir) {
110
+ if (!pathExists(dir)) {
111
+ return [];
112
+ }
113
+ const out = [];
114
+ const walk = (current) => {
115
+ for (const entry of fs.readdirSync(current, { withFileTypes: true })) {
116
+ const full = path.join(current, entry.name);
117
+ if (entry.isDirectory()) {
118
+ walk(full);
119
+ }
120
+ else if (entry.isFile() && entry.name.endsWith(".yaml")) {
121
+ out.push(full);
122
+ }
123
+ }
124
+ };
125
+ walk(dir);
126
+ return out;
127
+ }
128
+ function capabilitySchemasStale(installedRoot, sources) {
129
+ const sourceSchemasRoot = path.join(sources.skillsDir, "agentera", "capabilities");
130
+ const installedSchemasRoot = path.join(installedRoot, "skills", "agentera", "capabilities");
131
+ if (!pathExists(sourceSchemasRoot)) {
132
+ return false;
133
+ }
134
+ for (const sourceFile of walkYamlFiles(sourceSchemasRoot)) {
135
+ const rel = path.relative(sourceSchemasRoot, sourceFile);
136
+ const installedFile = path.join(installedSchemasRoot, rel);
137
+ if (!filesEqual(sourceFile, installedFile)) {
138
+ return true;
139
+ }
140
+ }
141
+ return false;
142
+ }
143
+ function referencesStale(installedRoot, sources) {
144
+ if (!pathExists(sources.referencesDir)) {
145
+ return false;
146
+ }
147
+ const installedReferences = path.join(installedRoot, "references");
148
+ if (!pathExists(installedReferences)) {
149
+ return true;
150
+ }
151
+ const walk = (sourceDir, installedDir) => {
152
+ for (const entry of fs.readdirSync(sourceDir, { withFileTypes: true })) {
153
+ if (shouldSkipCopyEntry(entry.name)) {
154
+ continue;
155
+ }
156
+ const sourcePath = path.join(sourceDir, entry.name);
157
+ const installedPath = path.join(installedDir, entry.name);
158
+ if (entry.isDirectory()) {
159
+ if (!pathExists(installedPath) || !fs.statSync(installedPath).isDirectory()) {
160
+ return true;
161
+ }
162
+ if (walk(sourcePath, installedPath)) {
163
+ return true;
164
+ }
165
+ continue;
166
+ }
167
+ if (!filesEqual(sourcePath, installedPath)) {
168
+ return true;
169
+ }
170
+ }
171
+ return false;
172
+ };
173
+ return walk(sources.referencesDir, installedReferences);
174
+ }
175
+ function distCapabilitiesStale(installedRoot, sources) {
176
+ if (!sources.distCapabilities) {
177
+ return false;
178
+ }
179
+ const installedDist = path.join(installedRoot, "dist", "capabilities");
180
+ for (const capability of Object.keys(CAPABILITY_INSTRUCTIONS)) {
181
+ const sourceModule = path.join(sources.distCapabilities, capability, "instructions.js");
182
+ const installedModule = path.join(installedDist, capability, "instructions.js");
183
+ if (!filesEqual(sourceModule, installedModule)) {
184
+ return true;
185
+ }
186
+ }
187
+ return false;
188
+ }
189
+ /**
190
+ * Returns stale v2 app-content surface labels for gap detection during upgrade dry-run.
191
+ */
192
+ export function detectStaleAppContentSurfaces(appHome, sourceRoot, compiledRoot) {
193
+ const installedRoot = installedRootForDetection(appHome);
194
+ if (!installedRoot) {
195
+ return [];
196
+ }
197
+ const sources = resolveAppContentSources(sourceRoot, compiledRoot);
198
+ const stale = [];
199
+ const skillRel = path.join("skills", "agentera", "SKILL.md");
200
+ const skillSource = path.join(sources.skillsDir, "agentera", "SKILL.md");
201
+ const skillInstalled = path.join(installedRoot, skillRel);
202
+ const skillText = readInstalledText(installedRoot, skillRel);
203
+ if (!filesEqual(skillSource, skillInstalled) || (skillText !== null && skillMdLooksV2(skillText))) {
204
+ stale.push("SKILL.md");
205
+ }
206
+ const protocolRel = path.join("skills", "agentera", "protocol.yaml");
207
+ if (!filesEqual(path.join(sources.skillsDir, "agentera", "protocol.yaml"), path.join(installedRoot, protocolRel))) {
208
+ stale.push("protocol.yaml");
209
+ }
210
+ const contractRel = path.join("skills", "agentera", "capability_schema_contract.yaml");
211
+ const contractText = readInstalledText(installedRoot, contractRel);
212
+ if (!filesEqual(path.join(sources.skillsDir, "agentera", "capability_schema_contract.yaml"), path.join(installedRoot, contractRel)) ||
213
+ (contractText !== null && contractLooksV2(contractText))) {
214
+ stale.push("capability_schema_contract.yaml");
215
+ }
216
+ if (capabilitySchemasStale(installedRoot, sources)) {
217
+ stale.push("capabilities/*/schemas/*");
218
+ }
219
+ if (referencesStale(installedRoot, sources)) {
220
+ stale.push("references/");
221
+ }
222
+ if (!filesEqual(sources.registryJson, path.join(installedRoot, "registry.json"))) {
223
+ stale.push("registry.json");
224
+ }
225
+ if (distCapabilitiesStale(installedRoot, sources)) {
226
+ stale.push("dist/capabilities");
227
+ }
228
+ if (detectStaleInstalledHooksSurface(appHome)) {
229
+ stale.push(INSTALLED_HOOKS_SURFACE_LABEL);
230
+ }
231
+ return stale;
232
+ }
233
+ function copyFileEnsuringDir(source, target) {
234
+ fs.mkdirSync(path.dirname(target), { recursive: true });
235
+ fs.copyFileSync(source, target);
236
+ }
237
+ function copyTree(sourceDir, targetDir, relPrefix = "") {
238
+ fs.mkdirSync(targetDir, { recursive: true });
239
+ for (const entry of fs.readdirSync(sourceDir, { withFileTypes: true })) {
240
+ if (shouldSkipCopyEntry(entry.name)) {
241
+ continue;
242
+ }
243
+ const rel = relPrefix ? `${relPrefix}/${entry.name}` : entry.name;
244
+ if (shouldSkipCapabilityFile(rel)) {
245
+ continue;
246
+ }
247
+ const from = path.join(sourceDir, entry.name);
248
+ const to = path.join(targetDir, entry.name);
249
+ if (entry.isDirectory()) {
250
+ copyTree(from, to, rel);
251
+ }
252
+ else if (entry.isFile()) {
253
+ copyFileEnsuringDir(from, to);
254
+ }
255
+ }
256
+ }
257
+ export function refreshAppContentTargetRoot(appHome) {
258
+ return resolvePath(appHome);
259
+ }
260
+ function applyAppContentRefreshToTarget(targetRoot, sourceRoot, compiledRoot) {
261
+ const sources = resolveAppContentSources(sourceRoot, compiledRoot);
262
+ if (!pathExists(sources.skillsDir)) {
263
+ throw new Error(`app content refresh: missing source skills directory at ${sources.skillsDir}`);
264
+ }
265
+ if (!pathExists(sources.referencesDir)) {
266
+ throw new Error(`app content refresh: missing source references directory at ${sources.referencesDir}`);
267
+ }
268
+ if (!isFile(sources.registryJson)) {
269
+ throw new Error(`app content refresh: missing source registry.json at ${sources.registryJson}`);
270
+ }
271
+ copyTree(sources.skillsDir, path.join(targetRoot, "skills"), "skills");
272
+ copyTree(sources.referencesDir, path.join(targetRoot, "references"), "references");
273
+ copyFileEnsuringDir(sources.registryJson, path.join(targetRoot, "registry.json"));
274
+ if (sources.distCapabilities) {
275
+ copyTree(sources.distCapabilities, path.join(targetRoot, "dist", "capabilities"), "dist/capabilities");
276
+ }
277
+ }
278
+ export function applyAppContentRefresh(appHome, sourceRoot, compiledRoot) {
279
+ applyAppContentRefreshToTarget(refreshAppContentTargetRoot(appHome), sourceRoot, compiledRoot);
280
+ }
281
+ function refreshItemStatus(staleSurfaces) {
282
+ return staleSurfaces.length > 0 ? "pending" : "noop";
283
+ }
284
+ export function planAppContentRefreshItems(ctx) {
285
+ const sourceRoot = ctx.sourceRoot;
286
+ if (!sourceRoot) {
287
+ return [];
288
+ }
289
+ const appHome = resolvePath(ctx.appHome);
290
+ const resolvedSourceRoot = resolvePath(sourceRoot);
291
+ const installedRoot = installedRootForDetection(appHome);
292
+ if (!installedRoot) {
293
+ if (!pathExists(appHome)) {
294
+ return ctx.installAppContentIfMissing ? [{
295
+ status: "pending",
296
+ action: APP_CONTENT_REFRESH_ACTION,
297
+ runtime: "installed-app",
298
+ source: resolvedSourceRoot,
299
+ target: refreshAppContentTargetRoot(appHome),
300
+ message: "will install stable app content required by selected lifecycle repair",
301
+ }] : [];
302
+ }
303
+ const target = refreshAppContentTargetRoot(appHome);
304
+ const item = {
305
+ status: "pending",
306
+ action: APP_CONTENT_REFRESH_ACTION,
307
+ runtime: "installed-app",
308
+ source: resolvedSourceRoot,
309
+ target,
310
+ message: "install root has user data only; will install v3 app content (skills, references, registry, dist/capabilities)",
311
+ };
312
+ const evidenceError = bindMigrationResource(item, "target", target, [path.dirname(target)], "directory");
313
+ if (evidenceError) {
314
+ item.status = "blocked";
315
+ item.message = `app content refresh preserved the target: ${evidenceError}; review the unsafe path manually`;
316
+ }
317
+ return [item];
318
+ }
319
+ const staleSurfaces = detectStaleAppContentSurfaces(appHome, resolvedSourceRoot, ctx.compiledRoot);
320
+ const hookItems = planInstalledHooksRetirementItems(ctx);
321
+ if (staleSurfaces.length === 0 && hookItems.every((item) => item.status === "noop")) {
322
+ return [
323
+ {
324
+ status: "noop",
325
+ action: APP_CONTENT_REFRESH_ACTION,
326
+ source: installedRoot,
327
+ target: refreshAppContentTargetRoot(appHome),
328
+ message: "installed app content already matches v3 source surfaces",
329
+ },
330
+ ];
331
+ }
332
+ const targetRoot = refreshAppContentTargetRoot(appHome);
333
+ const refreshItems = staleSurfaces.map((surface) => {
334
+ const item = {
335
+ status: refreshItemStatus([surface]),
336
+ action: APP_CONTENT_REFRESH_ACTION,
337
+ runtime: "installed-app",
338
+ source: resolvedSourceRoot,
339
+ target: targetRoot,
340
+ message: `will refresh stale v2 surface ${surface} from sourceRoot into managed app home`,
341
+ preserved: [...APP_CONTENT_SURFACE_LABELS],
342
+ removedPreview: staleSurfaces,
343
+ };
344
+ const evidenceError = bindMigrationResource(item, "target", targetRoot, [path.dirname(targetRoot)], "directory");
345
+ if (evidenceError) {
346
+ item.status = "blocked";
347
+ item.message = `app content refresh preserved the target: ${evidenceError}; review the unsafe path manually`;
348
+ }
349
+ return item;
350
+ });
351
+ return [...refreshItems, ...hookItems.filter((item) => item.status !== "noop")];
352
+ }
353
+ export function applyAppContentRefreshItem(item, ctx, beforePublication) {
354
+ if (item.status !== "pending" || item.action !== APP_CONTENT_REFRESH_ACTION) {
355
+ return;
356
+ }
357
+ try {
358
+ const sourceRoot = resolvePath(ctx.sourceRoot ?? item.source ?? "");
359
+ withBoundMigrationDirectory(item, "target", (targetRoot) => applyAppContentRefreshToTarget(targetRoot, sourceRoot, ctx.compiledRoot), beforePublication);
360
+ item.status = "applied";
361
+ item.message = "refreshed installed app content from v3 sourceRoot";
362
+ }
363
+ catch (exc) {
364
+ item.status = "blocked";
365
+ item.message = `refresh-app-content preserved the target: ${exc.message}; rerun and review it manually`;
366
+ }
367
+ }
368
+ export function applyAppContentRefreshItems(items, ctx) {
369
+ applyInstalledHooksRetirementItems(items, ctx);
370
+ const pending = items.filter((item) => item.action === APP_CONTENT_REFRESH_ACTION && item.status === "pending");
371
+ if (pending.length === 0) {
372
+ return;
373
+ }
374
+ applyAppContentRefreshItem(pending[0], ctx);
375
+ if (pending[0]?.status === "applied") {
376
+ for (const item of pending.slice(1)) {
377
+ if (item.action === APP_CONTENT_REFRESH_ACTION) {
378
+ item.status = "applied";
379
+ item.message = "refreshed installed app content from v3 sourceRoot";
380
+ }
381
+ }
382
+ }
383
+ }
@@ -2,9 +2,11 @@ import fs from "node:fs";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
4
  import { expanduser, isFile, pathExists, resolvePath } from "../core/paths.js";
5
+ import { resolveProfileDirOverride } from "../core/envPaths.js";
5
6
  import { resolveSourceRoot } from "../core/sourceRoot.js";
6
7
  import { SOURCE_LABELS, classifyResolvedRoot, isForeignPlatformDefaultAppHome, resolveCandidate, } from "../state/installRoot.js";
7
8
  import { loadRegistry } from "../registries/packageRegistry.js";
9
+ import { hasBundleRootEvidence } from "./bundleEvidence.js";
8
10
  /**
9
11
  * App-home / app-model resolution used by doctor and upgrade. Faithful TS port
10
12
  * of the resolution layer in scripts/agentera_upgrade.py.
@@ -32,8 +34,8 @@ function sourceRootMissing(root) {
32
34
  }
33
35
  export function loadSuiteVersion(sourceRoot) {
34
36
  const record = loadRegistry().get("agentera");
35
- const authority = record.version_authority;
36
- const authorityPath = path.join(sourceRoot, authority.persisted_authority);
37
+ const authority = record.version_authority; // cast: parsed registry IO boundary
38
+ const authorityPath = path.join(sourceRoot, authority.persisted_authority); // cast: parsed registry IO boundary
37
39
  if (!isFile(authorityPath)) {
38
40
  return null;
39
41
  }
@@ -55,10 +57,6 @@ export function loadSuiteVersion(sourceRoot) {
55
57
  const version = first && typeof first === "object" ? first.version : null;
56
58
  return typeof version === "string" && version ? version : null;
57
59
  }
58
- function hasBundleRootEvidence(root) {
59
- return (isFile(path.join(root, "scripts", "agentera")) &&
60
- isFile(path.join(root, "skills", "agentera", "SKILL.md")));
61
- }
62
60
  export function doctorRoots(appHome) {
63
61
  const managedAppRoot = path.join(appHome, "app");
64
62
  let activeBundleRoot;
@@ -138,6 +136,10 @@ export function resolveInstallRoot(value, sourceRoot, home, env = process.env) {
138
136
  }
139
137
  return candidate;
140
138
  }
139
+ const profileDir = resolveProfileDirOverride(env);
140
+ if (profileDir) {
141
+ return resolvePath(profileDir);
142
+ }
141
143
  const def = env[DEFAULT_INSTALL_ROOT_ENV];
142
144
  if (def) {
143
145
  const candidate = resolvePath(def);
@@ -189,4 +191,3 @@ export function resolveActiveAppModel(value = null, opts = {}) {
189
191
  runtimeRoot: roots.runtimeRoot,
190
192
  };
191
193
  }
192
- //# sourceMappingURL=appModel.js.map
@@ -0,0 +1 @@
1
+ export { writeFileAtomic } from "../core/atomicWriter.js";
@@ -0,0 +1,33 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { isFile } from "../core/paths.js";
4
+ const HEAD_READ_BYTES = 2048;
5
+ export function readScriptHead(filePath) {
6
+ let fd;
7
+ try {
8
+ fd = fs.openSync(filePath, "r");
9
+ const buf = Buffer.alloc(HEAD_READ_BYTES);
10
+ const bytes = fs.readSync(fd, buf, 0, HEAD_READ_BYTES, 0);
11
+ return buf.slice(0, bytes).toString("utf8");
12
+ }
13
+ catch {
14
+ return null;
15
+ }
16
+ finally {
17
+ if (fd !== undefined) {
18
+ try {
19
+ fs.closeSync(fd);
20
+ }
21
+ catch { }
22
+ }
23
+ }
24
+ }
25
+ export function hasBundleRootEvidence(root) {
26
+ if (!isFile(path.join(root, "scripts", "agentera"))) {
27
+ return false;
28
+ }
29
+ if (!isFile(path.join(root, "skills", "agentera", "SKILL.md"))) {
30
+ return false;
31
+ }
32
+ return readScriptHead(path.join(root, "scripts", "agentera")) !== null;
33
+ }
@@ -2,9 +2,10 @@ import fs from "node:fs";
2
2
  import path from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
4
  import { expanduser } from "../core/paths.js";
5
- import { isNpxBundleRoot, resolveSourceRoot } from "../core/sourceRoot.js";
5
+ import { resolveSourceRoot } from "../core/sourceRoot.js";
6
6
  import { loadTomlFile, parseToml } from "../core/toml.js";
7
7
  import { loadYamlMappingFile } from "../core/yaml.js";
8
+ import { cliDistributionMajor } from "./compatibility.js";
8
9
  /**
9
10
  * Update channel resolution for upgrade, doctor, and prime.
10
11
  * Authority: references/cli/update-channels.yaml
@@ -57,7 +58,7 @@ function readConfigChannel(home) {
57
58
  }
58
59
  let mapping;
59
60
  try {
60
- mapping = loadTomlFile(configPath);
61
+ mapping = loadTomlFile(configPath); // cast: TOML parse IO boundary
61
62
  }
62
63
  catch {
63
64
  return null;
@@ -73,7 +74,7 @@ function readConfigChannel(home) {
73
74
  }
74
75
  export function loadUpdateChannelsAuthority(sourceRoot) {
75
76
  const authorityPath = path.join(authorityRootFor(sourceRoot), UPDATE_CHANNELS_AUTHORITY);
76
- return loadYamlMappingFile(authorityPath);
77
+ return loadYamlMappingFile(authorityPath); // cast: YAML parse IO boundary
77
78
  }
78
79
  function authorityForSourceRoot(authorityRoot) {
79
80
  if (cachedAuthority && cachedAuthorityRoot === authorityRoot) {
@@ -124,7 +125,7 @@ export function assertStableNpmUpdateCommand(channel, updateCommand, distTag) {
124
125
  if (distTag !== "latest") {
125
126
  throw new Error(`stable channel dist tag must be latest, got ${JSON.stringify(distTag)}`);
126
127
  }
127
- const forbidden = [/@next\b/i, /@3\.\d/i, /@3\.0\.0-dev/i, /-alpha/i, /-rc/i, /-beta/i];
128
+ const forbidden = [/@next\b/i, /@3\.\d/i, /@3\.0\.0-next/i, /-alpha/i, /-rc/i, /-beta/i];
128
129
  for (const pattern of forbidden) {
129
130
  if (pattern.test(updateCommand)) {
130
131
  throw new Error(`stable channel update command must not target 3.x pre-releases: ${updateCommand}`);
@@ -204,14 +205,18 @@ export function resolveUpdateChannel(args = {}) {
204
205
  export function resolveInvokedUpdateChannel(args = {}) {
205
206
  const env = args.env ?? process.env;
206
207
  const sourceRoot = args.sourceRoot ?? resolveSourceRoot(env);
207
- if (isNpxBundleRoot(sourceRoot)) {
208
+ const selected = resolveSelectedChannel({ ...args, sourceRoot });
209
+ if (selected.source !== "default") {
210
+ return resolveUpdateChannel({ ...args, sourceRoot });
211
+ }
212
+ if (cliDistributionMajor(sourceRoot) >= 3) {
208
213
  return resolveUpdateChannel({ ...args, channel: "development", sourceRoot });
209
214
  }
210
- return resolveUpdateChannel(args);
215
+ return resolveUpdateChannel({ ...args, channel: "stable", sourceRoot });
211
216
  }
212
217
  /** Parse `update.channel` from TOML text (tests). */
213
218
  export function parseConfigUpdateChannel(text) {
214
- const raw = readNestedKey(parseToml(text), CONFIG_CHANNEL_KEY);
219
+ const raw = readNestedKey(parseToml(text), CONFIG_CHANNEL_KEY); // cast: TOML parse IO boundary
215
220
  if (raw === undefined || raw === null) {
216
221
  return null;
217
222
  }
@@ -220,4 +225,3 @@ export function parseConfigUpdateChannel(text) {
220
225
  }
221
226
  return parseChannelValue(raw, "config_file");
222
227
  }
223
- //# sourceMappingURL=channels.js.map
@@ -6,6 +6,7 @@ import { BUNDLE_MARKER } from "../state/installRoot.js";
6
6
  import { doctorRoots, loadSuiteVersion } from "./appModel.js";
7
7
  import { resolveUpdateChannel } from "./channels.js";
8
8
  import { classifyUpgradeOutcome, shouldIncludeCrossMajorPlanItems, } from "./versionResolution.js";
9
+ import { hasBundleRootEvidence } from "./bundleEvidence.js";
9
10
  export { shouldIncludeCrossMajorPlanItems } from "./versionResolution.js";
10
11
  /**
11
12
  * v2/v3 install layout detection and cross-major upgrade guard rails.
@@ -18,16 +19,24 @@ export const STATUS_READY_TO_APPLY = "ready_to_apply";
18
19
  export const STATUS_APPLIED = "applied";
19
20
  export const UPGRADE_PREVIEW_SCHEMA = "agentera.upgrade.v2";
20
21
  export const STATUS_CONCEPT_MAJOR_BOUNDARY = "major_boundary_crossing";
22
+ export function projectInstallTrack(kind) {
23
+ switch (kind) {
24
+ case "v2_managed_app_home":
25
+ return "v2";
26
+ case "v3_self_contained_npm":
27
+ return "v3";
28
+ case "source_checkout":
29
+ return "source";
30
+ case "unknown_foreign":
31
+ return "unknown";
32
+ }
33
+ }
21
34
  const CROSS_MAJOR_ITEMS = [
22
35
  { phase: "artifacts", verb: "migrate", name: "v2_to_v3_artifacts" },
23
36
  { phase: "runtime", verb: "migrate", name: "v2_to_v3_runtime_rewire" },
24
37
  { phase: "cleanup", verb: "migrate", name: "v2_to_v3_app_home_cleanup" },
25
38
  ];
26
- function hasBundleRootEvidence(root) {
27
- return (isFile(path.join(root, "scripts", "agentera")) &&
28
- isFile(path.join(root, "skills", "agentera", "SKILL.md")));
29
- }
30
- function isSourceCheckoutRoot(sourceRoot) {
39
+ export function isSourceCheckoutRoot(sourceRoot) {
31
40
  return (pathExists(path.join(sourceRoot, ".git")) &&
32
41
  isFile(path.join(sourceRoot, "skills", "agentera", "SKILL.md")) &&
33
42
  isFile(path.join(sourceRoot, "registry.json")) &&
@@ -50,11 +59,38 @@ function hasV2ManagedEvidence(signals, activeBundleRoot) {
50
59
  hasBundleRootEvidence(activeBundleRoot) &&
51
60
  !signals.npxBundleSentinelAtActiveRoot);
52
61
  }
62
+ let distributionMajorWarned = false;
63
+ function readPackageJsonMajor(sourceRoot) {
64
+ const pkgPath = path.join(sourceRoot, "package.json");
65
+ if (!isFile(pkgPath)) {
66
+ return null;
67
+ }
68
+ try {
69
+ const data = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
70
+ const version = data?.version;
71
+ if (typeof version !== "string" || !version) {
72
+ return null;
73
+ }
74
+ const major = Number.parseInt(version.split(".")[0] ?? "", 10);
75
+ if (Number.isFinite(major) && major > 0) {
76
+ return major;
77
+ }
78
+ }
79
+ catch {
80
+ // Malformed package.json — fall through to diagnostic
81
+ }
82
+ return null;
83
+ }
53
84
  export function cliDistributionMajor(sourceRoot) {
54
85
  if (isSourceCheckoutRoot(sourceRoot)) {
55
86
  return 3;
56
87
  }
57
88
  if (isNpxBundleRoot(sourceRoot)) {
89
+ const version = loadSuiteVersion(sourceRoot);
90
+ const major = version ? Number.parseInt(version.split(".")[0] ?? "", 10) : Number.NaN;
91
+ if (Number.isFinite(major) && major > 0) {
92
+ return major;
93
+ }
58
94
  return 3;
59
95
  }
60
96
  const version = loadSuiteVersion(sourceRoot);
@@ -64,17 +100,28 @@ export function cliDistributionMajor(sourceRoot) {
64
100
  return major;
65
101
  }
66
102
  }
103
+ const pkgMajor = readPackageJsonMajor(sourceRoot);
104
+ if (pkgMajor !== null) {
105
+ return pkgMajor;
106
+ }
107
+ if (!distributionMajorWarned) {
108
+ distributionMajorWarned = true;
109
+ process.stderr.write(`agentera: could not determine distribution major version from registry.json or package.json at ${sourceRoot}; defaulting to 2\n`);
110
+ }
67
111
  return 2;
68
112
  }
113
+ export function __resetDistributionMajorWarnedForTests() {
114
+ distributionMajorWarned = false;
115
+ }
69
116
  export function classifyInstall(args) {
70
117
  const appHome = args.appHome;
71
118
  const sourceRoot = args.sourceRoot;
72
119
  const roots = doctorRoots(appHome);
73
120
  const activeBundleRoot = roots.activeBundleRoot;
74
121
  const signals = readSignals(appHome, sourceRoot, activeBundleRoot);
75
- if (isNpxBundleRoot(sourceRoot) || isNpxBundleRoot(activeBundleRoot) || isNpxBundleRoot(appHome)) {
122
+ if (hasV2ManagedEvidence(signals, activeBundleRoot)) {
76
123
  return {
77
- kind: "v3_self_contained_npm",
124
+ kind: "v2_managed_app_home",
78
125
  appHome,
79
126
  activeBundleRoot,
80
127
  managedAppRoot: roots.managedAppRoot,
@@ -82,9 +129,9 @@ export function classifyInstall(args) {
82
129
  signals,
83
130
  };
84
131
  }
85
- if (hasV2ManagedEvidence(signals, activeBundleRoot)) {
132
+ if (isNpxBundleRoot(sourceRoot) || isNpxBundleRoot(activeBundleRoot) || isNpxBundleRoot(appHome)) {
86
133
  return {
87
- kind: "v2_managed_app_home",
134
+ kind: "v3_self_contained_npm",
88
135
  appHome,
89
136
  activeBundleRoot,
90
137
  managedAppRoot: roots.managedAppRoot,
@@ -142,17 +189,6 @@ function groupItemsByPhase(items) {
142
189
  }
143
190
  return phases;
144
191
  }
145
- export function collectV3MigrationOperations(preview) {
146
- const out = [];
147
- for (const phase of preview.phases) {
148
- for (const item of phase.items) {
149
- if (item.verb === "migrate" && item.tag === MAJOR_BOUNDARY_ITEM_TAG) {
150
- out.push(item);
151
- }
152
- }
153
- }
154
- return out;
155
- }
156
192
  export function previewCrossMajorGuard(args) {
157
193
  const channel = resolveUpdateChannel(args);
158
194
  const install = classifyInstall({ appHome: args.appHome, sourceRoot: args.sourceRoot });
@@ -198,4 +234,3 @@ export function foreignLayoutHasUnexpectedEntries(root) {
198
234
  return false;
199
235
  }
200
236
  }
201
- //# sourceMappingURL=compatibility.js.map