agentera 3.0.0-dev.5 → 3.0.0-dev.51

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 (598) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +119 -22
  3. package/bundle/CHANGELOG.md +1351 -0
  4. package/bundle/DESIGN.md +229 -0
  5. package/bundle/LICENSE +201 -0
  6. package/bundle/README.md +143 -0
  7. package/bundle/UPGRADE.md +236 -0
  8. package/bundle/extract-corpus-parity.json +21 -0
  9. package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
  10. package/bundle/references/adapters/package-publication.json +437 -0
  11. package/bundle/references/adapters/package-registry.yaml +435 -189
  12. package/bundle/references/adapters/package-surface-characterization.md +66 -35
  13. package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
  14. package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
  15. package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
  16. package/bundle/references/adapters/runtime-retired-resources.yaml +333 -0
  17. package/bundle/references/analysis/evidence-tier-authority.yaml +518 -0
  18. package/bundle/references/analysis/verification-policy.yaml +191 -0
  19. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +20 -10
  20. package/bundle/references/artifacts/glossary-entry-contract.yaml +1254 -0
  21. package/bundle/references/artifacts/state-storage-authority.yaml +3022 -0
  22. package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
  23. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +7 -8
  24. package/bundle/references/cli/capability-instruction-contract.yaml +11 -14
  25. package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
  26. package/bundle/references/cli/routing-model.md +155 -0
  27. package/bundle/references/cli/trigger-schema-enrichment.md +147 -0
  28. package/bundle/references/cli/update-channels.yaml +19 -1
  29. package/bundle/references/cli/vocabulary-index.yaml +20 -17
  30. package/bundle/references/cli/vocabulary.md +326 -361
  31. package/bundle/references/meta/retained-reference-authority.yaml +151 -0
  32. package/bundle/registry.json +13 -13
  33. package/bundle/skills/agentera/SKILL.md +224 -422
  34. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +84 -0
  35. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/exit.yaml +2 -2
  36. package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +25 -0
  37. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/validation.yaml +37 -18
  38. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +102 -0
  39. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +6 -5
  40. package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
  41. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +176 -0
  42. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/artifacts.yaml +12 -12
  43. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/exit.yaml +5 -5
  44. package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +16 -0
  45. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/validation.yaml +7 -7
  46. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +51 -0
  47. package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/exit.yaml +2 -2
  48. package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +20 -0
  49. package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +144 -0
  50. package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +80 -0
  51. package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +16 -0
  52. package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/validation.yaml +18 -18
  53. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/artifacts.yaml +18 -18
  54. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/exit.yaml +2 -2
  55. package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +16 -0
  56. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/validation.yaml +9 -9
  57. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +76 -0
  58. package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/exit.yaml +9 -7
  59. package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +23 -0
  60. package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +121 -0
  61. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +66 -0
  62. package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/exit.yaml +2 -2
  63. package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +23 -0
  64. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +121 -0
  65. package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +23 -0
  66. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +6 -5
  67. package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +20 -0
  68. package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +115 -0
  69. package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +24 -0
  70. package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +16 -0
  71. package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/validation.yaml +2 -2
  72. package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +73 -0
  73. package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +22 -0
  74. package/bundle/skills/agentera/capabilities/{hej → status}/schemas/validation.yaml +5 -5
  75. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/artifacts.yaml +16 -16
  76. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/exit.yaml +7 -6
  77. package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +23 -0
  78. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/validation.yaml +18 -20
  79. package/bundle/skills/agentera/capability_schema_contract.yaml +178 -34
  80. package/bundle/skills/agentera/protocol.yaml +31 -31
  81. package/bundle/skills/agentera/route-phrases.yaml +81 -0
  82. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +5 -4
  83. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +39 -21
  84. package/bundle/skills/agentera/schemas/artifacts/design.yaml +5 -4
  85. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +15 -19
  86. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +145 -14
  87. package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +82 -0
  88. package/bundle/skills/agentera/schemas/artifacts/health.yaml +58 -21
  89. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +22 -8
  90. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +458 -36
  91. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +128 -17
  92. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +342 -42
  93. package/bundle/skills/agentera/schemas/artifacts/vision.yaml +3 -3
  94. package/dist/analytics/extractCorpus/cli.js +190 -0
  95. package/dist/analytics/extractCorpus/copilotSessions.js +275 -0
  96. package/dist/analytics/extractCorpus/core.js +392 -0
  97. package/dist/analytics/extractCorpus/corpus.js +167 -0
  98. package/dist/analytics/extractCorpus/coverageAudit.js +260 -0
  99. package/dist/analytics/extractCorpus/cursorSessions.js +425 -0
  100. package/dist/analytics/extractCorpus/evidenceTiers.js +603 -0
  101. package/dist/analytics/extractCorpus/extractCorpusParity.js +105 -0
  102. package/dist/analytics/extractCorpus/filesystemSources.js +118 -0
  103. package/dist/analytics/extractCorpus/index.js +14 -0
  104. package/dist/analytics/extractCorpus/jsonlSessions.js +204 -0
  105. package/dist/analytics/extractCorpus/sqliteCaps.js +43 -0
  106. package/dist/analytics/extractCorpus/sqliteSessions.js +367 -0
  107. package/dist/analytics/extractCorpus/tierReader.js +108 -0
  108. package/dist/analytics/extractCorpus.js +2 -1791
  109. package/dist/analytics/glossaryAdviceResolution.js +166 -0
  110. package/dist/analytics/glossaryInputAcquisition.js +319 -0
  111. package/dist/analytics/personalGlossaryAdmission.js +133 -0
  112. package/dist/analytics/personalGlossaryProfile.js +219 -0
  113. package/dist/analytics/profileSignals.js +211 -0
  114. package/dist/analytics/usageStats.js +169 -42
  115. package/dist/audit/terminologyDrift.js +281 -0
  116. package/dist/bin/agentera.js +3 -2
  117. package/dist/capabilities/audit/instructions.js +16 -0
  118. package/dist/capabilities/build/instructions.js +56 -0
  119. package/dist/capabilities/design/instructions.js +4 -0
  120. package/dist/capabilities/discuss/instructions.js +29 -0
  121. package/dist/capabilities/document/instructions.js +11 -0
  122. package/dist/capabilities/index.js +29 -27
  123. package/dist/capabilities/optimize/instructions.js +14 -0
  124. package/dist/capabilities/orchestrate/instructions.js +42 -0
  125. package/dist/capabilities/plan/instructions.js +33 -0
  126. package/dist/capabilities/profile/instructions.js +70 -0
  127. package/dist/capabilities/research/instructions.js +5 -0
  128. package/dist/capabilities/status/instructions.js +15 -0
  129. package/dist/capabilities/status/startupInstructions.js +34 -0
  130. package/dist/capabilities/vision/instructions.js +4 -0
  131. package/dist/cli/appContext.js +30 -24
  132. package/dist/cli/argvalidate.js +0 -1
  133. package/dist/cli/capabilityContext/benchmark.js +565 -0
  134. package/dist/cli/capabilityContext/bespoke.js +44 -0
  135. package/dist/cli/capabilityContext/build.js +242 -0
  136. package/dist/cli/capabilityContext/closeout.js +233 -0
  137. package/dist/cli/capabilityContext/contract.js +179 -0
  138. package/dist/cli/capabilityContext/evidence.js +463 -0
  139. package/dist/cli/capabilityContext/index.js +3 -0
  140. package/dist/cli/capabilityContext/orchestration.js +131 -0
  141. package/dist/cli/capabilityContext/planState.js +260 -0
  142. package/dist/cli/capabilityContext/progress.js +142 -0
  143. package/dist/cli/capabilityContext/projectVerification.js +409 -0
  144. package/dist/cli/capabilityContext/shared.js +83 -0
  145. package/dist/cli/capabilityContext/slim.js +152 -0
  146. package/dist/cli/capabilityContext/startup.js +150 -0
  147. package/dist/cli/capabilityContext/startupAggregation.js +68 -0
  148. package/dist/cli/capabilityContext/types.js +56 -0
  149. package/dist/cli/capabilityContext.js +1 -2487
  150. package/dist/cli/commands/appHome.js +22 -0
  151. package/dist/cli/commands/capability.js +4 -4
  152. package/dist/cli/commands/compact.js +164 -14
  153. package/dist/cli/commands/doctor.js +122 -97
  154. package/dist/cli/commands/durability.js +81 -0
  155. package/dist/cli/commands/glossaryAdvice.js +138 -0
  156. package/dist/cli/commands/lint.js +26 -44
  157. package/dist/cli/commands/personalGlossary.js +176 -0
  158. package/dist/cli/commands/prime/briefOrientation.js +747 -0
  159. package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
  160. package/dist/cli/commands/prime/bundleStatus.js +190 -0
  161. package/dist/cli/commands/prime/collectEntityOrientation.js +326 -0
  162. package/dist/cli/commands/prime/collectOrientationState.js +212 -0
  163. package/dist/cli/commands/prime/orientationOutput.js +399 -0
  164. package/dist/cli/commands/prime/types.js +1 -0
  165. package/dist/cli/commands/prime/v1Migration.js +38 -0
  166. package/dist/cli/commands/prime.js +80 -558
  167. package/dist/cli/commands/profileGrounding.js +55 -0
  168. package/dist/cli/commands/query.js +78 -53
  169. package/dist/cli/commands/report.js +96 -25
  170. package/dist/cli/commands/route.js +142 -0
  171. package/dist/cli/commands/schema.js +266 -143
  172. package/dist/cli/commands/state/decisions.js +387 -0
  173. package/dist/cli/commands/state/docs.js +70 -0
  174. package/dist/cli/commands/state/experimentRecords.js +151 -0
  175. package/dist/cli/commands/state/experiments.js +14 -0
  176. package/dist/cli/commands/state/get.js +129 -0
  177. package/dist/cli/commands/state/health.js +14 -0
  178. package/dist/cli/commands/state/index.js +16 -0
  179. package/dist/cli/commands/state/list.js +194 -0
  180. package/dist/cli/commands/state/objective.js +25 -0
  181. package/dist/cli/commands/state/plan.js +14 -0
  182. package/dist/cli/commands/state/planTasks.js +154 -0
  183. package/dist/cli/commands/state/plans.js +154 -0
  184. package/dist/cli/commands/state/progress.js +13 -0
  185. package/dist/cli/commands/state/shared.js +14 -0
  186. package/dist/cli/commands/state/todo.js +42 -0
  187. package/dist/cli/commands/state/write.js +430 -0
  188. package/dist/cli/commands/upgrade.js +146 -5
  189. package/dist/cli/commands/upgradeVerify.js +118 -0
  190. package/dist/cli/commands/validate.js +272 -223
  191. package/dist/cli/commands/verify.js +24 -9
  192. package/dist/cli/contracts/bundleStatus.js +1 -0
  193. package/dist/cli/contracts/orientationState.js +1 -0
  194. package/dist/cli/dispatch/argvParser.js +32 -0
  195. package/dist/cli/dispatch/check.js +372 -0
  196. package/dist/cli/dispatch/commands.js +27 -0
  197. package/dist/cli/dispatch/index.js +207 -0
  198. package/dist/cli/dispatch/lifecycle.js +652 -0
  199. package/dist/cli/dispatch/prime.js +139 -0
  200. package/dist/cli/dispatch/projections.js +17 -0
  201. package/dist/cli/dispatch/shared.js +63 -0
  202. package/dist/cli/dispatch/state.js +140 -0
  203. package/dist/cli/dispatch.js +1 -1294
  204. package/dist/cli/errors.js +16 -17
  205. package/dist/cli/help.js +394 -43
  206. package/dist/cli/migrationRequired.js +87 -0
  207. package/dist/cli/orientation/attention.js +61 -0
  208. package/dist/cli/orientation/corpusCoverage.js +102 -0
  209. package/dist/cli/orientation.js +438 -170
  210. package/dist/cli/planArtifacts.js +350 -0
  211. package/dist/cli/planEvidence.js +157 -0
  212. package/dist/cli/planLifecycleState.js +36 -0
  213. package/dist/cli/planTaskIndex.js +11 -0
  214. package/dist/cli/preCutoverCommand.js +32 -0
  215. package/dist/cli/prime-blob.js +71 -3
  216. package/dist/cli/profileAcquisition.js +167 -0
  217. package/dist/cli/startupCompletenessContract.js +59 -0
  218. package/dist/cli/stateQuery.js +56 -14
  219. package/dist/cli/structured.js +0 -1
  220. package/dist/cli/todoMarkdown.js +25 -12
  221. package/dist/cli/todoReadinessSelection.js +192 -0
  222. package/dist/cli/todoSeverity.js +18 -0
  223. package/dist/core/atomicWriter.js +20 -0
  224. package/dist/core/developmentChannel.js +1 -0
  225. package/dist/core/developmentInvocation.js +374 -0
  226. package/dist/core/difflib.js +0 -1
  227. package/dist/core/envPaths.js +20 -0
  228. package/dist/core/jsonValue.js +5 -0
  229. package/dist/core/paths.js +0 -1
  230. package/dist/core/pyjson.js +67 -3
  231. package/dist/core/shell.js +4 -0
  232. package/dist/core/skillIdentity.js +23 -0
  233. package/dist/core/sourceRoot.js +9 -12
  234. package/dist/core/text.js +10 -0
  235. package/dist/core/toml.js +0 -1
  236. package/dist/core/yaml.js +8 -1
  237. package/dist/eval/evalSkills.js +30 -26
  238. package/dist/eval/hybridRouteEvaluation.js +155 -0
  239. package/dist/eval/semanticEval.js +43 -20
  240. package/dist/eval/semanticFixtures.js +16 -5
  241. package/dist/hooks/common.js +11 -79
  242. package/dist/hooks/compaction/apply.js +446 -0
  243. package/dist/hooks/compaction/dryRun.js +184 -0
  244. package/dist/hooks/compaction/index.js +22 -0
  245. package/dist/hooks/compaction/parse.js +325 -0
  246. package/dist/hooks/compaction/retention.js +202 -0
  247. package/dist/hooks/compaction/status.js +360 -0
  248. package/dist/hooks/compaction/types.js +5 -0
  249. package/dist/hooks/validateArtifact/agentFacing.js +9 -0
  250. package/dist/hooks/validateArtifact/index.js +92 -0
  251. package/dist/hooks/validateArtifact/markdown.js +145 -0
  252. package/dist/hooks/validateArtifact/schema.js +546 -0
  253. package/dist/hooks/validateArtifact/traversal.js +107 -0
  254. package/dist/hooks/validateArtifact/violations.js +107 -0
  255. package/dist/migrate/v2HandoffManifest.js +452 -0
  256. package/dist/registries/activationContract.js +2 -0
  257. package/dist/registries/activationTuples.js +107 -0
  258. package/dist/registries/artifactProtocolIds.js +78 -0
  259. package/dist/registries/artifactRegistry.js +224 -63
  260. package/dist/registries/artifactSchemaProjection.js +45 -0
  261. package/dist/registries/capabilityContract.js +129 -2
  262. package/dist/registries/evaluatorHandoffContract.js +2 -3
  263. package/dist/registries/evidenceTierContract.js +371 -0
  264. package/dist/registries/glossaryAdviceContract.js +79 -0
  265. package/dist/registries/glossaryCaveatContract.js +67 -0
  266. package/dist/registries/glossaryConsumerContractValidation.js +787 -0
  267. package/dist/registries/glossaryEntryContract.js +757 -0
  268. package/dist/registries/glossaryTermIdentity.js +17 -0
  269. package/dist/registries/glossaryTermOccurrence.js +20 -0
  270. package/dist/registries/hybridRoute.js +274 -0
  271. package/dist/registries/hybridRouteReceipt.js +221 -0
  272. package/dist/registries/packagePublication.js +229 -0
  273. package/dist/registries/packageRegistry.js +187 -211
  274. package/dist/registries/todoReadinessContract.js +448 -0
  275. package/dist/registries/triggerLoader.js +174 -0
  276. package/dist/registries/verbosityBudgetContract.js +205 -0
  277. package/dist/release/releaseMetadata.js +385 -0
  278. package/dist/runtime/lifecycleAdapterContract.js +457 -0
  279. package/dist/runtime/lifecycleAdapters.js +777 -0
  280. package/dist/runtime/lifecycleAuthority.js +453 -0
  281. package/dist/runtime/lifecycleOperationContract.js +123 -0
  282. package/dist/runtime/lifecycleOperations.js +634 -0
  283. package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
  284. package/dist/runtime/lifecyclePublication.js +415 -0
  285. package/dist/runtime/lifecycleSnapshot.js +438 -0
  286. package/dist/runtime/nativeResourceCleanup.js +502 -0
  287. package/dist/setup/opencode.js +20 -0
  288. package/dist/setup/opencodeConstants.js +1 -0
  289. package/dist/setup/sharedSkill.js +45 -0
  290. package/dist/setup/smokeChecks.js +21 -82
  291. package/dist/state/archiveDiscovery.js +580 -0
  292. package/dist/state/archivePublication.js +225 -0
  293. package/dist/state/archiveRecovery.js +237 -0
  294. package/dist/state/archiveReplay.js +53 -0
  295. package/dist/state/canonicalMigrationRecord.js +36 -0
  296. package/dist/state/changelog.js +221 -0
  297. package/dist/state/decisionEntities.js +367 -0
  298. package/dist/state/decisionLegacyValidation.js +215 -0
  299. package/dist/state/decisionMigrationProvenance.js +199 -0
  300. package/dist/state/decisionOverlay.js +254 -0
  301. package/dist/state/decisionRevision.js +256 -0
  302. package/dist/state/decisionRevisionMigration.js +89 -0
  303. package/dist/state/directRetrieval.js +323 -0
  304. package/dist/state/durability.js +324 -0
  305. package/dist/state/entityCutover.js +459 -0
  306. package/dist/state/entityCutoverGit.js +127 -0
  307. package/dist/state/entityGlossaryAuthority.js +13 -0
  308. package/dist/state/entityListProjection.js +187 -0
  309. package/dist/state/entityListRuntimeRegistry.js +85 -0
  310. package/dist/state/entityMigrationCausality.js +97 -0
  311. package/dist/state/entityMigrationIdentity.js +5 -0
  312. package/dist/state/entityMigrationPreview.js +846 -0
  313. package/dist/state/entityMigrationTodo.js +133 -0
  314. package/dist/state/entityPublicationContext.js +806 -0
  315. package/dist/state/entityRetrievalHelp.js +506 -0
  316. package/dist/state/entityStorage.js +899 -0
  317. package/dist/state/exactReplacementRecovery.js +18 -0
  318. package/dist/state/experimentArchive.js +63 -0
  319. package/dist/state/experimentIdentity.js +202 -0
  320. package/dist/state/healthEntities.js +262 -0
  321. package/dist/state/healthEntityValidation.js +18 -0
  322. package/dist/state/healthRepair.js +69 -0
  323. package/dist/state/installRoot.js +64 -25
  324. package/dist/state/legacyEntityCutoverEvidence.js +65 -0
  325. package/dist/state/legacyIdentity.js +47 -0
  326. package/dist/state/legacySummaryRecord.js +6 -0
  327. package/dist/state/listAccounting.js +54 -0
  328. package/dist/state/listClassification.js +17 -0
  329. package/dist/state/listCursor.js +42 -0
  330. package/dist/state/listRetrieval.js +781 -0
  331. package/dist/state/migrationSourceBinding.js +30 -0
  332. package/dist/state/objectiveExperimentEntities.js +322 -0
  333. package/dist/state/planEntities.js +982 -0
  334. package/dist/state/planIdentity.js +47 -0
  335. package/dist/state/planLineageValidation.js +52 -0
  336. package/dist/state/planReplacementTransaction.js +475 -0
  337. package/dist/state/planRetrieval.js +313 -0
  338. package/dist/state/planTaskRetrieval.js +294 -0
  339. package/dist/state/progressEntities.js +512 -0
  340. package/dist/state/progressGlossaryCaveat.js +168 -0
  341. package/dist/state/progressPublicationOrder.js +19 -0
  342. package/dist/state/projectRoot.js +62 -0
  343. package/dist/state/projectionPolicy.js +190 -0
  344. package/dist/state/retrievalAuthority.js +156 -0
  345. package/dist/state/safeProjectFile.js +155 -0
  346. package/dist/state/startupAnalysis/benchmark.js +432 -0
  347. package/dist/state/startupAnalysis/contract.js +160 -0
  348. package/dist/state/startupAnalysis/helpers.js +286 -0
  349. package/dist/state/startupAnalysis/index.js +6 -0
  350. package/dist/state/startupAnalysis/metrics.js +340 -0
  351. package/dist/state/startupAnalysis/records.js +198 -0
  352. package/dist/state/startupAnalysis/report.js +111 -0
  353. package/dist/state/startupAnalysis/threshold.js +512 -0
  354. package/dist/state/startupAnalysis.js +2 -1953
  355. package/dist/state/startupProjection.js +499 -0
  356. package/dist/state/stateMode.js +85 -0
  357. package/dist/state/stateStorageAuthority.js +47 -0
  358. package/dist/state/summaryEntityRead.js +25 -0
  359. package/dist/state/summaryMigrationProvenance.js +66 -0
  360. package/dist/state/summarySourceRowAuthority.js +36 -0
  361. package/dist/state/todoActivationSafety.js +58 -0
  362. package/dist/state/todoDocsEntities.js +1069 -0
  363. package/dist/state/todoDocsEntityValidation.js +158 -0
  364. package/dist/state/todoMarkdownProjection.js +51 -0
  365. package/dist/state/todoReconciliationActivation.js +140 -0
  366. package/dist/state/todoReconciliationInspection.js +169 -0
  367. package/dist/state/todoReconciliationRepair.js +170 -0
  368. package/dist/state/todoReconciliationTransaction.js +582 -0
  369. package/dist/state/write/assign.js +20 -0
  370. package/dist/state/write/candidateMutation.js +269 -0
  371. package/dist/state/write/errors.js +11 -0
  372. package/dist/state/write/experimentPublication.js +192 -0
  373. package/dist/state/write/explain.js +363 -0
  374. package/dist/state/write/fields.js +61 -0
  375. package/dist/state/write/glossaryPublication.js +263 -0
  376. package/dist/state/write/grammar.js +285 -0
  377. package/dist/state/write/helpers.js +29 -0
  378. package/dist/state/write/index.js +12 -0
  379. package/dist/state/write/input.js +367 -0
  380. package/dist/state/write/lock.js +837 -0
  381. package/dist/state/write/mutation.js +234 -0
  382. package/dist/state/write/operations.js +170 -0
  383. package/dist/state/write/planEvaluation.js +128 -0
  384. package/dist/state/write/planPublication.js +179 -0
  385. package/dist/state/write/runtimeOperations.js +144 -0
  386. package/dist/state/write/serialize.js +1 -0
  387. package/dist/state/write/transaction.js +52 -0
  388. package/dist/state/write/validate.js +7 -0
  389. package/dist/upgrade/appContentRefresh.js +383 -0
  390. package/dist/upgrade/appModel.js +8 -7
  391. package/dist/upgrade/atomicWriter.js +1 -0
  392. package/dist/upgrade/bundleEvidence.js +33 -0
  393. package/dist/upgrade/channels.js +12 -8
  394. package/dist/upgrade/compatibility.js +56 -21
  395. package/dist/upgrade/doctor.js +197 -192
  396. package/dist/upgrade/doctorClassifier.js +187 -0
  397. package/dist/upgrade/installedHooksRetirement.js +196 -0
  398. package/dist/upgrade/legacyAgentCleanup.js +282 -0
  399. package/dist/upgrade/lifecycleUpgrade.js +113 -0
  400. package/dist/upgrade/migrateArtifactsV2ToV3.js +367 -149
  401. package/dist/upgrade/migrationPublication.js +122 -0
  402. package/dist/upgrade/nextMajorDoctor.js +42 -8
  403. package/dist/upgrade/npxPlatformStatus.js +22 -0
  404. package/dist/upgrade/projectIntegration.js +145 -187
  405. package/dist/upgrade/projectIntegrationDecision.js +50 -0
  406. package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
  407. package/dist/upgrade/runtimeMigration.js +273 -363
  408. package/dist/upgrade/upgradeCommands.js +14 -1
  409. package/dist/upgrade/upgradeLock.js +85 -0
  410. package/dist/upgrade/upgradeOrchestrator.js +263 -59
  411. package/dist/upgrade/v3CapabilitySurface.js +14 -0
  412. package/dist/upgrade/versionResolution.js +8 -1
  413. package/dist/validate/activationArtifactEvidence.js +844 -0
  414. package/dist/validate/activationConjunction.js +816 -0
  415. package/dist/validate/activationEvidenceManifest.js +515 -0
  416. package/dist/validate/activationPackageSemantics.js +29 -0
  417. package/dist/validate/appHomeContract.js +5 -11
  418. package/dist/validate/bootstrapAuthority.js +44 -0
  419. package/dist/validate/capability.js +133 -12
  420. package/dist/validate/crossCapability.js +15 -10
  421. package/dist/validate/retainedReferenceAuthority.js +879 -0
  422. package/dist/validate/selfAudit.js +73 -37
  423. package/dist/validate/v1LegacyCruft.js +131 -0
  424. package/dist/validate/vocabularyAuthority.js +303 -0
  425. package/package.json +53 -27
  426. package/bundle/references/adapters/cursor.md +0 -213
  427. package/bundle/references/adapters/opencode.md +0 -530
  428. package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
  429. package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
  430. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
  431. package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -548
  432. package/bundle/references/adapters/runtime-feature-parity.md +0 -189
  433. package/bundle/references/analysis/benchmark.md +0 -267
  434. package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
  435. package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
  436. package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -355
  437. package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -278
  438. package/bundle/references/cli/capability-tool-classification.yaml +0 -53
  439. package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
  440. package/bundle/references/meta/documentation-inventory.md +0 -43
  441. package/bundle/references/v1-section-mapping.md +0 -47
  442. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  443. package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
  444. package/bundle/skills/agentera/agents/hej.toml +0 -6
  445. package/bundle/skills/agentera/agents/inspektera.toml +0 -6
  446. package/bundle/skills/agentera/agents/inspirera.toml +0 -6
  447. package/bundle/skills/agentera/agents/optimera.toml +0 -6
  448. package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
  449. package/bundle/skills/agentera/agents/planera.toml +0 -6
  450. package/bundle/skills/agentera/agents/profilera.toml +0 -6
  451. package/bundle/skills/agentera/agents/realisera.toml +0 -6
  452. package/bundle/skills/agentera/agents/resonera.toml +0 -6
  453. package/bundle/skills/agentera/agents/visionera.toml +0 -6
  454. package/bundle/skills/agentera/agents/visualisera.toml +0 -6
  455. package/bundle/skills/agentera/capabilities/dokumentera/schemas/artifacts.yaml +0 -73
  456. package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +0 -35
  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/schemas/artifacts.yaml +0 -76
  460. package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +0 -38
  461. package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +0 -24
  462. package/bundle/skills/agentera/capabilities/inspirera/schemas/triggers.yaml +0 -34
  463. package/bundle/skills/agentera/capabilities/optimera/schemas/triggers.yaml +0 -39
  464. package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +0 -64
  465. package/bundle/skills/agentera/capabilities/orkestrera/schemas/triggers.yaml +0 -42
  466. package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +0 -120
  467. package/bundle/skills/agentera/capabilities/planera/schemas/artifacts.yaml +0 -62
  468. package/bundle/skills/agentera/capabilities/planera/schemas/triggers.yaml +0 -34
  469. package/bundle/skills/agentera/capabilities/planera/schemas/validation.yaml +0 -61
  470. package/bundle/skills/agentera/capabilities/profilera/schemas/artifacts.yaml +0 -18
  471. package/bundle/skills/agentera/capabilities/profilera/schemas/triggers.yaml +0 -45
  472. package/bundle/skills/agentera/capabilities/profilera/schemas/validation.yaml +0 -57
  473. package/bundle/skills/agentera/capabilities/realisera/schemas/artifacts.yaml +0 -80
  474. package/bundle/skills/agentera/capabilities/realisera/schemas/triggers.yaml +0 -39
  475. package/bundle/skills/agentera/capabilities/realisera/schemas/validation.yaml +0 -110
  476. package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +0 -47
  477. package/bundle/skills/agentera/capabilities/resonera/schemas/triggers.yaml +0 -46
  478. package/bundle/skills/agentera/capabilities/resonera/schemas/validation.yaml +0 -77
  479. package/bundle/skills/agentera/capabilities/visionera/schemas/triggers.yaml +0 -41
  480. package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +0 -33
  481. package/bundle/skills/agentera/references/contract.md +0 -1039
  482. package/bundle/skills/hej/.claude-plugin/plugin.json +0 -6
  483. package/bundle/skills/hej/SKILL.md +0 -69
  484. package/bundle/skills/hej/agents/hej.toml +0 -11
  485. package/bundle/skills/hej/agents/openai.yaml +0 -8
  486. package/dist/analytics/extractCorpus.js.map +0 -1
  487. package/dist/analytics/usageStats.js.map +0 -1
  488. package/dist/bin/agentera.js.map +0 -1
  489. package/dist/capabilities/dokumentera/instructions.js +0 -6
  490. package/dist/capabilities/dokumentera/instructions.js.map +0 -1
  491. package/dist/capabilities/hej/instructions.js +0 -6
  492. package/dist/capabilities/hej/instructions.js.map +0 -1
  493. package/dist/capabilities/index.js.map +0 -1
  494. package/dist/capabilities/inspektera/instructions.js +0 -6
  495. package/dist/capabilities/inspektera/instructions.js.map +0 -1
  496. package/dist/capabilities/inspirera/instructions.js +0 -6
  497. package/dist/capabilities/inspirera/instructions.js.map +0 -1
  498. package/dist/capabilities/optimera/instructions.js +0 -6
  499. package/dist/capabilities/optimera/instructions.js.map +0 -1
  500. package/dist/capabilities/orkestrera/instructions.js +0 -6
  501. package/dist/capabilities/orkestrera/instructions.js.map +0 -1
  502. package/dist/capabilities/planera/instructions.js +0 -6
  503. package/dist/capabilities/planera/instructions.js.map +0 -1
  504. package/dist/capabilities/profilera/instructions.js +0 -6
  505. package/dist/capabilities/profilera/instructions.js.map +0 -1
  506. package/dist/capabilities/realisera/instructions.js +0 -6
  507. package/dist/capabilities/realisera/instructions.js.map +0 -1
  508. package/dist/capabilities/resonera/instructions.js +0 -6
  509. package/dist/capabilities/resonera/instructions.js.map +0 -1
  510. package/dist/capabilities/visionera/instructions.js +0 -6
  511. package/dist/capabilities/visionera/instructions.js.map +0 -1
  512. package/dist/capabilities/visualisera/instructions.js +0 -6
  513. package/dist/capabilities/visualisera/instructions.js.map +0 -1
  514. package/dist/cli/appContext.js.map +0 -1
  515. package/dist/cli/argvalidate.js.map +0 -1
  516. package/dist/cli/capabilityContext.js.map +0 -1
  517. package/dist/cli/commands/capability.js.map +0 -1
  518. package/dist/cli/commands/compact.js.map +0 -1
  519. package/dist/cli/commands/doctor.js.map +0 -1
  520. package/dist/cli/commands/lint.js.map +0 -1
  521. package/dist/cli/commands/prime.js.map +0 -1
  522. package/dist/cli/commands/query.js.map +0 -1
  523. package/dist/cli/commands/report.js.map +0 -1
  524. package/dist/cli/commands/schema.js.map +0 -1
  525. package/dist/cli/commands/state.js +0 -1023
  526. package/dist/cli/commands/state.js.map +0 -1
  527. package/dist/cli/commands/upgrade.js.map +0 -1
  528. package/dist/cli/commands/validate.js.map +0 -1
  529. package/dist/cli/commands/verify.js.map +0 -1
  530. package/dist/cli/dispatch.js.map +0 -1
  531. package/dist/cli/errors.js.map +0 -1
  532. package/dist/cli/help.js.map +0 -1
  533. package/dist/cli/orientation.js.map +0 -1
  534. package/dist/cli/prime-blob.js.map +0 -1
  535. package/dist/cli/stateQuery.js.map +0 -1
  536. package/dist/cli/structured.js.map +0 -1
  537. package/dist/cli/todoMarkdown.js.map +0 -1
  538. package/dist/core/difflib.js.map +0 -1
  539. package/dist/core/paths.js.map +0 -1
  540. package/dist/core/pyjson.js.map +0 -1
  541. package/dist/core/sourceRoot.js.map +0 -1
  542. package/dist/core/toml.js.map +0 -1
  543. package/dist/core/yaml.js.map +0 -1
  544. package/dist/eval/evalSkills.js.map +0 -1
  545. package/dist/eval/semanticEval.js.map +0 -1
  546. package/dist/eval/semanticFixtures.js.map +0 -1
  547. package/dist/hooks/common.js.map +0 -1
  548. package/dist/hooks/compaction.js +0 -935
  549. package/dist/hooks/compaction.js.map +0 -1
  550. package/dist/hooks/cursorPreToolUse.js +0 -19
  551. package/dist/hooks/cursorPreToolUse.js.map +0 -1
  552. package/dist/hooks/cursorSessionStart.js +0 -71
  553. package/dist/hooks/cursorSessionStart.js.map +0 -1
  554. package/dist/hooks/sessionStart.js +0 -209
  555. package/dist/hooks/sessionStart.js.map +0 -1
  556. package/dist/hooks/sessionStop.js +0 -212
  557. package/dist/hooks/sessionStop.js.map +0 -1
  558. package/dist/hooks/validateArtifact.js +0 -935
  559. package/dist/hooks/validateArtifact.js.map +0 -1
  560. package/dist/registries/artifactRegistry.js.map +0 -1
  561. package/dist/registries/capabilityContract.js.map +0 -1
  562. package/dist/registries/evaluatorHandoffContract.js.map +0 -1
  563. package/dist/registries/packageRegistry.js.map +0 -1
  564. package/dist/registries/runtimeAdapterRegistry.js +0 -315
  565. package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
  566. package/dist/setup/codex.js +0 -1197
  567. package/dist/setup/codex.js.map +0 -1
  568. package/dist/setup/copilot.js +0 -227
  569. package/dist/setup/copilot.js.map +0 -1
  570. package/dist/setup/cursor.js +0 -127
  571. package/dist/setup/cursor.js.map +0 -1
  572. package/dist/setup/doctor.js +0 -1297
  573. package/dist/setup/doctor.js.map +0 -1
  574. package/dist/setup/smokeChecks.js.map +0 -1
  575. package/dist/state/installRoot.js.map +0 -1
  576. package/dist/state/startupAnalysis.js.map +0 -1
  577. package/dist/upgrade/appModel.js.map +0 -1
  578. package/dist/upgrade/channels.js.map +0 -1
  579. package/dist/upgrade/compatibility.js.map +0 -1
  580. package/dist/upgrade/doctor.js.map +0 -1
  581. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -570
  582. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
  583. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
  584. package/dist/upgrade/nextMajorDoctor.js.map +0 -1
  585. package/dist/upgrade/projectIntegration.js.map +0 -1
  586. package/dist/upgrade/runtimeMigration.js.map +0 -1
  587. package/dist/upgrade/upgradeCommands.js.map +0 -1
  588. package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
  589. package/dist/upgrade/versionResolution.js.map +0 -1
  590. package/dist/validate/appHomeContract.js.map +0 -1
  591. package/dist/validate/capability.js.map +0 -1
  592. package/dist/validate/crossCapability.js.map +0 -1
  593. package/dist/validate/lifecycleAdapters.js +0 -772
  594. package/dist/validate/lifecycleAdapters.js.map +0 -1
  595. package/dist/validate/selfAudit.js.map +0 -1
  596. /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
  597. /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
  598. /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
@@ -0,0 +1,122 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { observeLifecyclePath, publishLifecycleResource, removeLifecycleResource, verifyLifecycleResourceAtPublication, withPinnedLifecycleDirectory, } from "../runtime/lifecyclePublication.js";
4
+ const evidenceByItem = new WeakMap();
5
+ const MIGRATION_EVIDENCE = Symbol.for("agentera.migrationMutationEvidence");
6
+ function evidenceFor(item) {
7
+ const existing = evidenceByItem.get(item) ?? item[MIGRATION_EVIDENCE];
8
+ if (existing)
9
+ return existing;
10
+ const created = { resources: {} };
11
+ evidenceByItem.set(item, created);
12
+ item[MIGRATION_EVIDENCE] = created;
13
+ return created;
14
+ }
15
+ function readEvidence(item) {
16
+ return evidenceByItem.get(item) ?? item[MIGRATION_EVIDENCE];
17
+ }
18
+ export function cloneMigrationItem(item) {
19
+ const clone = { ...item };
20
+ const evidence = readEvidence(item);
21
+ if (evidence) {
22
+ evidenceByItem.set(clone, evidence);
23
+ clone[MIGRATION_EVIDENCE] = evidence;
24
+ }
25
+ return clone;
26
+ }
27
+ function observationError(destination, observation, expectedKind) {
28
+ if (observation.unsafeReason)
29
+ return observation.unsafeReason;
30
+ if (!observation.parentComplete)
31
+ return `parent chain is incomplete for ${destination}`;
32
+ if (observation.kind !== expectedKind || !observation.identity || !observation.fingerprint) {
33
+ return `${destination} is not an observable ${expectedKind}`;
34
+ }
35
+ return null;
36
+ }
37
+ export function bindMigrationResource(item, role, destination, allowedRoots, kind) {
38
+ const observation = observeLifecyclePath(destination, allowedRoots);
39
+ const error = observationError(destination, observation, kind);
40
+ if (error)
41
+ return error;
42
+ evidenceFor(item).resources[role] = { destination, kind, observation };
43
+ return null;
44
+ }
45
+ function boundResource(item, role) {
46
+ const resource = readEvidence(item)?.resources[role];
47
+ if (!resource)
48
+ throw new Error(`migration ${role} publication evidence is missing`);
49
+ return resource;
50
+ }
51
+ export function verifyBoundMigrationResource(item, role) {
52
+ const resource = boundResource(item, role);
53
+ verifyLifecycleResourceAtPublication({ id: `${item.action}.${role}`, destination: resource.destination, kind: resource.kind }, resource.observation);
54
+ }
55
+ export function withBoundMigrationDirectory(item, role, callback, hook) {
56
+ const resource = boundResource(item, role);
57
+ if (resource.kind !== "directory")
58
+ throw new Error(`migration ${role} is not a directory`);
59
+ return withPinnedLifecycleDirectory({ id: `${item.action}.${role}`, destination: resource.destination, kind: "directory" }, resource.observation, callback, hook);
60
+ }
61
+ export function updateBoundMigrationFile(item, role, content) {
62
+ const resource = boundResource(item, role);
63
+ if (resource.kind !== "file")
64
+ throw new Error(`migration ${role} is not a file`);
65
+ publishLifecycleResource({ id: `${item.action}.${role}`, destination: resource.destination, kind: "file", content }, "update", resource.observation);
66
+ }
67
+ export function removeBoundMigrationResource(item, role) {
68
+ const resource = boundResource(item, role);
69
+ removeLifecycleResource({ id: `${item.action}.${role}`, destination: resource.destination, kind: resource.kind }, resource.observation);
70
+ }
71
+ function walkTree(root) {
72
+ const entries = [];
73
+ const walk = (destination) => {
74
+ const stat = fs.lstatSync(destination);
75
+ const kind = stat.isSymbolicLink()
76
+ ? "symlink"
77
+ : stat.isFile()
78
+ ? "file"
79
+ : stat.isDirectory()
80
+ ? "directory"
81
+ : (() => { throw new Error(`unsupported bundle entry type at ${destination}`); })();
82
+ entries.push({ destination, kind });
83
+ if (kind === "directory") {
84
+ for (const name of fs.readdirSync(destination).sort())
85
+ walk(path.join(destination, name));
86
+ }
87
+ };
88
+ walk(root);
89
+ return entries;
90
+ }
91
+ export function bindMigrationTree(item, root, allowedRoots) {
92
+ try {
93
+ const tree = walkTree(root).map(({ destination, kind }) => {
94
+ const observation = observeLifecyclePath(destination, allowedRoots);
95
+ const error = observationError(destination, observation, kind);
96
+ if (error)
97
+ throw new Error(error);
98
+ return { destination, kind, observation };
99
+ });
100
+ evidenceFor(item).tree = tree;
101
+ return null;
102
+ }
103
+ catch (error) {
104
+ return error.message;
105
+ }
106
+ }
107
+ export function removeBoundMigrationTree(item) {
108
+ const tree = readEvidence(item)?.tree;
109
+ if (!tree)
110
+ throw new Error("migration cleanup tree evidence is missing");
111
+ const current = walkTree(tree[0].destination);
112
+ if (current.length !== tree.length
113
+ || current.some((entry, index) => entry.destination !== tree[index]?.destination || entry.kind !== tree[index]?.kind)) {
114
+ throw new Error("managed app cleanup set changed after preview");
115
+ }
116
+ for (const entry of tree) {
117
+ verifyLifecycleResourceAtPublication({ id: `${item.action}.verify`, destination: entry.destination, kind: entry.kind }, entry.observation);
118
+ }
119
+ for (const entry of [...tree].reverse()) {
120
+ removeLifecycleResource({ id: `${item.action}.remove`, destination: entry.destination, kind: entry.kind }, entry.observation);
121
+ }
122
+ }
@@ -14,6 +14,7 @@ export const V1_NEXT_MAJOR_FALLBACK = {
14
14
  currentChannel: "stable",
15
15
  channel: "stable",
16
16
  version: "2.x",
17
+ announced: true,
17
18
  npmOnlyAdvisory: "",
18
19
  guideUrl: "https://github.com/jgabor/agentera/blob/main/UPGRADE.md#recommended-upgrade-v1--v2-stable-channel",
19
20
  previewCommand: "npx -y agentera@latest upgrade --dry-run",
@@ -45,12 +46,30 @@ function parseNextMajorBlock(raw) {
45
46
  concept: String(block.concept ?? "forward_successor_line").trim(),
46
47
  channel: channel,
47
48
  version,
49
+ announced: block.announced !== false,
48
50
  npmOnlyAdvisory: String(block.npm_only_advisory ?? "").trim(),
49
51
  guideUrl,
50
52
  previewCommand,
51
53
  irreversibleAdvisory,
52
54
  };
53
55
  }
56
+ let testSuccessorAnnouncedOverride = null;
57
+ /** Reset injectable successor announcement gate (tests). */
58
+ export function setSuccessorAnnouncedOverrideForTests(value) {
59
+ testSuccessorAnnouncedOverride = value;
60
+ }
61
+ /**
62
+ * True when the resolved channel's successor metadata exists and is announced
63
+ * for doctor/prime. Defaults to the stable channel so legacy callers that
64
+ * omit the argument behave identically to pre-fix behavior.
65
+ */
66
+ export function isStableSuccessorAnnounced(sourceRoot, channel = "stable") {
67
+ if (testSuccessorAnnouncedOverride !== null) {
68
+ return testSuccessorAnnouncedOverride;
69
+ }
70
+ const block = loadChannelNextMajor(sourceRoot, channel);
71
+ return block?.announced === true;
72
+ }
54
73
  export function loadChannelNextMajor(sourceRoot, channel) {
55
74
  const authority = loadUpdateChannelsAuthority(sourceRoot);
56
75
  const channels = authority.channels;
@@ -73,10 +92,23 @@ export function formatNextMajorDoctorLines(args) {
73
92
  args.block.irreversibleAdvisory,
74
93
  ];
75
94
  }
95
+ function installTrackSkipsSuccessorBlock(install, sourceRoot) {
96
+ if (install?.kind === "v3_self_contained_npm") {
97
+ return true;
98
+ }
99
+ if (install?.kind === "source_checkout" && cliDistributionMajor(sourceRoot) >= 3) {
100
+ return true;
101
+ }
102
+ return false;
103
+ }
76
104
  export function resolveNextMajorDoctorLines(ctx) {
77
105
  const env = ctx.env ?? process.env;
78
106
  const home = ctx.home;
79
107
  const sourceRoot = ctx.sourceRoot;
108
+ const install = ctx.install ?? null;
109
+ if (installTrackSkipsSuccessorBlock(install, sourceRoot)) {
110
+ return null;
111
+ }
80
112
  const selected = resolveSelectedChannel({
81
113
  channel: ctx.channel ?? null,
82
114
  env,
@@ -84,7 +116,10 @@ export function resolveNextMajorDoctorLines(ctx) {
84
116
  sourceRoot,
85
117
  });
86
118
  const currentChannel = selected.channel;
87
- const runningDistributionMajor = ctx.runningDistributionMajor ?? cliDistributionMajor(sourceRoot);
119
+ const successorChannel = install?.kind === "v2_managed_app_home" ? "stable" : currentChannel;
120
+ const displayChannel = install?.kind === "v2_managed_app_home" ? "stable" : currentChannel;
121
+ const runningDistributionMajor = ctx.runningDistributionMajor ??
122
+ (install?.kind === "v2_managed_app_home" ? 2 : cliDistributionMajor(sourceRoot));
88
123
  if (runningDistributionMajor === 1) {
89
124
  const block = V1_NEXT_MAJOR_FALLBACK;
90
125
  return formatNextMajorDoctorLines({
@@ -93,22 +128,22 @@ export function resolveNextMajorDoctorLines(ctx) {
93
128
  block,
94
129
  });
95
130
  }
96
- const authorityBlock = loadChannelNextMajor(sourceRoot, currentChannel);
97
- if (!authorityBlock) {
131
+ const authorityBlock = loadChannelNextMajor(sourceRoot, successorChannel);
132
+ if (!authorityBlock || !authorityBlock.announced) {
98
133
  return null;
99
134
  }
100
135
  const runningVersion = ctx.runningVersion ??
101
- (ctx.install
136
+ (install
102
137
  ? resolveRunningVersion({
103
- appHome: ctx.install.appHome,
138
+ appHome: install.appHome,
104
139
  sourceRoot,
105
- install: ctx.install,
140
+ install,
106
141
  })
107
142
  : null) ??
108
143
  `${runningDistributionMajor}.x`;
109
144
  return formatNextMajorDoctorLines({
110
145
  currentVersion: runningVersion,
111
- currentChannel,
146
+ currentChannel: displayChannel,
112
147
  block: authorityBlock,
113
148
  });
114
149
  }
@@ -118,4 +153,3 @@ export function prependNextMajorDoctorSection(text, sectionLines) {
118
153
  }
119
154
  return `${sectionLines.join("\n")}\n\n${text}`;
120
155
  }
121
- //# sourceMappingURL=nextMajorDoctor.js.map
@@ -0,0 +1,22 @@
1
+ import { expanduser } from "../core/paths.js";
2
+ import { resolvePlatformAppHome } from "./appModel.js";
3
+ import { buildDoctorStatus } from "./doctor.js";
4
+ /** Shared npx platform app-home resolution for prime and projectIntegration. */
5
+ export function resolveNpxPlatformStatus(opts) {
6
+ const env = { ...process.env, ...(opts.env ?? {}), HOME: expanduser(opts.home) };
7
+ const platformRoot = resolvePlatformAppHome(opts.home, env);
8
+ const doctorOpts = {
9
+ rootSource: "default",
10
+ sourceRoot: opts.sourceRoot,
11
+ home: opts.home,
12
+ project: opts.project,
13
+ expectedCommands: opts.expectedCommands ?? ["prime"],
14
+ skipNpxBundleShortCircuit: true,
15
+ env,
16
+ };
17
+ if (opts.expectedVersion !== undefined) {
18
+ doctorOpts.expectedVersion = opts.expectedVersion;
19
+ }
20
+ const platformStatus = buildDoctorStatus(platformRoot, doctorOpts);
21
+ return { platformRoot, platformStatus };
22
+ }
@@ -1,91 +1,38 @@
1
- import { expanduser, isFile, resolvePath } from "../core/paths.js";
1
+ import { resolvePath } from "../core/paths.js";
2
2
  import { isNpxBundleRoot } from "../core/sourceRoot.js";
3
- import { APP_MANUAL_REVIEW_NEEDED, APP_MIGRATION_NEEDED, APP_OUTDATED, APP_REPAIR_NEEDED, APP_UP_TO_DATE, buildDoctorStatus, } from "./doctor.js";
3
+ import { APP_MIGRATION_NEEDED, APP_MANUAL_REVIEW_NEEDED, APP_OUTDATED, APP_REPAIR_NEEDED, APP_UP_TO_DATE, } from "./doctor.js";
4
+ import { resolveNpxPlatformStatus } from "./npxPlatformStatus.js";
4
5
  import { classifyInstall, crossMajorBoundaryApplies } from "./compatibility.js";
5
6
  import { resolveInvokedUpdateChannel } from "./channels.js";
6
- import fs from "node:fs";
7
- import { detectV1ArtifactPairs, planRuntimeRewirePhase, } from "./migrateArtifactsV2ToV3.js";
8
- import { projectHasProjectLevelRuntimeHooks, textUsesPythonManagedEntrypoint, } from "./runtimeMigration.js";
9
- import { resolvePlatformAppHome } from "./appModel.js";
7
+ import { detectV1ArtifactPairs, planRuntimeRetirementPhase, } from "./migrateArtifactsV2ToV3.js";
8
+ import { projectHasProjectLevelRuntimeHooks, } from "./runtimeMigration.js";
9
+ import { isStableSuccessorAnnounced } from "./nextMajorDoctor.js";
10
10
  import { buildUpgradeCommands } from "./upgradeCommands.js";
11
- import { classifyUpgradeOutcome, shouldIncludeCrossMajorPlanItems, } from "./versionResolution.js";
12
- function migrationContext(args, channel) {
13
- const home = resolvePath(expanduser(args.home));
14
- const env = { ...(args.env ?? process.env), HOME: home };
15
- return {
16
- appHome: args.installRoot,
17
- project: resolvePath(args.project),
18
- home,
19
- sourceRoot: args.sourceRoot,
20
- channel: args.channel ?? channel.channel,
21
- env,
22
- };
11
+ import { classifyIntegrationScenario, integrationScenarioMessage, integrationExit, integrationPhase, } from "./projectIntegrationDecision.js";
12
+ import { classifyUpgradeOutcome, parseSemverMajor, resolveRunningVersion, shouldIncludeCrossMajorPlanItems, } from "./versionResolution.js";
13
+ const MAJOR_BOUNDARY_BLOCK_MESSAGE_PREFIX = "v3 successor line is not announced yet; v2 managed app files remain current on the";
14
+ function majorBoundaryBlockMessage(channelName) {
15
+ const label = channelName.trim() || "current";
16
+ return `${MAJOR_BOUNDARY_BLOCK_MESSAGE_PREFIX} ${label} channel`;
23
17
  }
24
- const RUNTIME_MIGRATION_ACTIONS = new Set([
25
- "rewire-runtime",
26
- "retire-hooks",
27
- "copy-plugin",
28
- "copy-agent",
29
- "copy-command",
30
- "link-skill",
31
- ]);
32
18
  function isPendingRuntimeMigrationItem(item) {
33
19
  if (item.status !== "pending" || item.action === "configure") {
34
20
  return false;
35
21
  }
36
- if (item.action === "retire-hooks") {
37
- return true;
38
- }
39
- if (item.action === "rewire-runtime") {
40
- if (!item.source) {
41
- return false;
42
- }
43
- try {
44
- return textUsesPythonManagedEntrypoint(fs.readFileSync(item.source, "utf8"));
45
- }
46
- catch {
47
- return false;
48
- }
49
- }
50
- return RUNTIME_MIGRATION_ACTIONS.has(item.action);
51
- }
52
- function isPythonManagedRewireItem(item) {
53
- if (item.action === "retire-hooks") {
54
- return item.status === "pending";
55
- }
56
- if (item.action !== "rewire-runtime" || item.status !== "pending" || !item.source) {
57
- return false;
58
- }
59
- try {
60
- return textUsesPythonManagedEntrypoint(fs.readFileSync(item.source, "utf8"));
61
- }
62
- catch {
63
- return false;
64
- }
22
+ return true;
65
23
  }
66
24
  function isGlobalStaleRuntimeItem(item, ctx) {
67
25
  const homeRoot = resolvePath(ctx.home);
68
26
  if (!item.source?.startsWith(homeRoot)) {
69
27
  return false;
70
28
  }
71
- if (item.action === "rewire-runtime" || item.action === "retire-hooks") {
29
+ if (item.action === "retire-hooks") {
72
30
  return true;
73
31
  }
74
- if (item.action === "copy-plugin" && item.target) {
75
- try {
76
- if (isFile(item.target)) {
77
- return textUsesPythonManagedEntrypoint(fs.readFileSync(item.target, "utf8"));
78
- }
79
- return item.source ? textUsesPythonManagedEntrypoint(fs.readFileSync(item.source, "utf8")) : false;
80
- }
81
- catch {
82
- return false;
83
- }
84
- }
85
32
  return false;
86
33
  }
87
- export function pendingRuntimeMigrationItems(ctx) {
88
- const phase = planRuntimeRewirePhase(ctx);
34
+ export function pendingRuntimeMigrationItems(ctx, resolvedChannel) {
35
+ const phase = planRuntimeRetirementPhase(ctx, resolvedChannel);
89
36
  const projectRoot = resolvePath(ctx.project);
90
37
  const hasProjectHooks = projectHasProjectLevelRuntimeHooks(ctx.project);
91
38
  return phase.items.filter((item) => {
@@ -98,11 +45,6 @@ export function pendingRuntimeMigrationItems(ctx) {
98
45
  return isGlobalStaleRuntimeItem(item, ctx);
99
46
  });
100
47
  }
101
- /** True when runtime hooks/config still need npm self-contained rewiring. */
102
- export function projectHasPendingRuntimeRewire(ctx) {
103
- const phase = planRuntimeRewirePhase(ctx);
104
- return phase.items.some((item) => isPythonManagedRewireItem(item));
105
- }
106
48
  function appNeedsUpgrade(bundleStatus) {
107
49
  return (bundleStatus === APP_OUTDATED ||
108
50
  bundleStatus === APP_REPAIR_NEEDED ||
@@ -114,27 +56,25 @@ function resolveIntegrationTargets(args) {
114
56
  installRoot: args.installRoot,
115
57
  bundleStatus: args.bundleStatus,
116
58
  crossMajorBoundary: args.crossMajorBoundary ?? false,
59
+ crossMajorBoundaryDetected: args.crossMajorBoundaryDetected ?? false,
117
60
  };
118
61
  }
119
- const platformRoot = resolvePlatformAppHome(args.home, args.env);
120
- const platformStatus = buildDoctorStatus(platformRoot, {
121
- rootSource: "default",
122
- sourceRoot: args.sourceRoot,
62
+ const { platformRoot, platformStatus } = resolveNpxPlatformStatus({
123
63
  home: args.home,
64
+ sourceRoot: args.sourceRoot,
124
65
  project: args.project,
125
- expectedCommands: ["prime"],
126
- probeCli: false,
127
- skipNpxBundleShortCircuit: true,
128
66
  env: args.env,
129
67
  });
130
68
  return {
131
69
  installRoot: platformRoot,
132
70
  bundleStatus: args.bundleStatus,
71
+ platformBundleStatus: platformStatus.status,
133
72
  crossMajorBoundary: Boolean(platformStatus.crossMajorBoundary),
73
+ crossMajorBoundaryDetected: Boolean(platformStatus.crossMajorBoundaryDetected),
134
74
  };
135
75
  }
136
76
  function commandChannel(args, channel, crossMajor, upgradeOutcome) {
137
- if (crossMajor && !shouldIncludeCrossMajorPlanItems(channel, upgradeOutcome)) {
77
+ if (crossMajor && upgradeOutcome && !shouldIncludeCrossMajorPlanItems(channel, upgradeOutcome)) {
138
78
  return resolveInvokedUpdateChannel({
139
79
  channel: "development",
140
80
  env: args.env,
@@ -144,131 +84,149 @@ function commandChannel(args, channel, crossMajor, upgradeOutcome) {
144
84
  }
145
85
  return channel;
146
86
  }
87
+ function appPhaseBlockers(bundleStatus, majorBoundaryBlock) {
88
+ const blockers = [];
89
+ if (bundleStatus === APP_MANUAL_REVIEW_NEEDED) {
90
+ blockers.push("app: manual review is required before choosing an app write path");
91
+ }
92
+ if (majorBoundaryBlock)
93
+ blockers.push(`app: ${majorBoundaryBlock}`);
94
+ return blockers;
95
+ }
96
+ function retryGuidance(exit) {
97
+ switch (exit.meaning) {
98
+ case "no_changes_needed":
99
+ return "No retry is needed; project integration is converged.";
100
+ case "preview_required":
101
+ return "Apply the approved preview, then retry Agentera to re-observe project integration.";
102
+ case "preview_and_blockers":
103
+ return "Resolve the reported blockers, apply the approved preview, then retry Agentera.";
104
+ case "manual_review_required":
105
+ return "Complete the manual review, then retry Agentera to re-observe project integration.";
106
+ }
107
+ }
147
108
  export function summarizeProjectIntegration(args) {
148
- const channel = resolveInvokedUpdateChannel({
109
+ const channel = args.resolvedChannel ?? resolveInvokedUpdateChannel({
149
110
  channel: args.channel ?? null,
150
111
  env: args.env,
151
112
  home: args.home,
152
113
  sourceRoot: args.sourceRoot,
153
114
  });
154
115
  const integrationTargets = resolveIntegrationTargets(args);
155
- const install = classifyInstall({ appHome: integrationTargets.installRoot, sourceRoot: args.sourceRoot });
156
- const crossMajor = args.crossMajorBoundary ??
157
- integrationTargets.crossMajorBoundary ??
116
+ const install = args.installClassification ?? classifyInstall({ appHome: integrationTargets.installRoot, sourceRoot: args.sourceRoot });
117
+ const crossMajorDetected = args.crossMajorBoundaryDetected ??
158
118
  crossMajorBoundaryApplies(install, args.sourceRoot);
159
- const upgradeOutcome = classifyUpgradeOutcome({
119
+ const successorAnnounced = args.successorAnnounced ?? isStableSuccessorAnnounced(args.sourceRoot, "stable");
120
+ const crossMajor = crossMajorDetected && successorAnnounced;
121
+ const runningMajor = crossMajorDetected
122
+ ? parseSemverMajor(resolveRunningVersion({
123
+ appHome: integrationTargets.installRoot,
124
+ sourceRoot: args.sourceRoot,
125
+ install,
126
+ })) ?? 0
127
+ : 0;
128
+ const majorBoundaryBlock = crossMajorDetected && !successorAnnounced && runningMajor > 0 && runningMajor < 3
129
+ ? majorBoundaryBlockMessage(channel.channel)
130
+ : null;
131
+ const upgradeOutcome = crossMajor
132
+ ? classifyUpgradeOutcome({
133
+ appHome: integrationTargets.installRoot,
134
+ sourceRoot: args.sourceRoot,
135
+ install,
136
+ channel,
137
+ })
138
+ : null;
139
+ const v1Artifacts = args.precomputedV1Artifacts ?? detectV1ArtifactPairs(args.project);
140
+ const pendingProjectMigration = pendingRuntimeMigrationItems({
160
141
  appHome: integrationTargets.installRoot,
142
+ project: args.project,
143
+ home: args.home,
144
+ force: false,
161
145
  sourceRoot: args.sourceRoot,
162
- install,
163
- channel,
146
+ channel: args.channel ?? null,
147
+ env: args.env,
148
+ }, channel);
149
+ const crossMajorMigration = crossMajor && upgradeOutcome !== null && shouldIncludeCrossMajorPlanItems(channel, upgradeOutcome);
150
+ const isNpx = isNpxBundleRoot(args.sourceRoot);
151
+ const classificationBundleStatus = isNpx && integrationTargets.platformBundleStatus !== undefined
152
+ ? integrationTargets.platformBundleStatus
153
+ : integrationTargets.bundleStatus;
154
+ const needsAppUpgrade = isNpx && integrationTargets.bundleStatus === APP_UP_TO_DATE
155
+ ? appNeedsUpgrade(integrationTargets.platformBundleStatus ?? APP_UP_TO_DATE)
156
+ : appNeedsUpgrade(classificationBundleStatus);
157
+ const appPending = v1Artifacts.length +
158
+ pendingProjectMigration.length +
159
+ (needsAppUpgrade ? 1 : 0) +
160
+ (crossMajorMigration ? 1 : 0);
161
+ const appBlockers = appPhaseBlockers(classificationBundleStatus, majorBoundaryBlock);
162
+ const appPhase = integrationPhase({
163
+ total: appPending + appBlockers.length,
164
+ pending: appPending,
165
+ blocked: appBlockers.length,
166
+ blockers: appBlockers,
164
167
  });
165
- const ctx = migrationContext({ ...args, installRoot: integrationTargets.installRoot }, channel);
166
- const v1Artifacts = detectV1ArtifactPairs(args.project);
167
- const pending = pendingRuntimeMigrationItems(ctx);
168
- const pendingRuntimes = [
169
- ...new Set(pending.map((item) => item.runtime).filter((runtime) => Boolean(runtime))),
170
- ];
171
- const crossMajorMigration = crossMajor && shouldIncludeCrossMajorPlanItems(channel, upgradeOutcome);
172
- const crossMajorNeedsPreview = crossMajor && !crossMajorMigration;
173
- const needsAppUpgrade = isNpxBundleRoot(args.sourceRoot) && args.bundleStatus === APP_UP_TO_DATE
174
- ? false
175
- : appNeedsUpgrade(integrationTargets.bundleStatus);
176
- const artifactsOnly = v1Artifacts.length > 0 && !crossMajorMigration && !crossMajorNeedsPreview && !needsAppUpgrade;
177
- const runtimeOnly = pending.length > 0 &&
178
- !artifactsOnly &&
179
- !crossMajorMigration &&
180
- !crossMajorNeedsPreview &&
181
- !needsAppUpgrade;
182
- if (integrationTargets.bundleStatus === APP_MANUAL_REVIEW_NEEDED &&
183
- pending.length === 0 &&
184
- v1Artifacts.length === 0 &&
185
- !crossMajor) {
186
- return {
187
- recommendation: "stay",
188
- message: "Agentera needs manual review for your app directory before this project can be upgraded safely.",
189
- pending_runtime: 0,
190
- pending_runtimes: [],
191
- pending_artifacts: 0,
192
- dry_run_command: null,
193
- apply_command: null,
194
- update_channel: channel.channel,
195
- };
196
- }
197
- if (!artifactsOnly &&
198
- !runtimeOnly &&
199
- !crossMajorMigration &&
200
- !crossMajorNeedsPreview &&
201
- !needsAppUpgrade &&
202
- integrationTargets.bundleStatus === APP_UP_TO_DATE &&
203
- pending.length === 0 &&
204
- v1Artifacts.length === 0) {
205
- return {
206
- recommendation: "stay",
207
- message: "This project matches your current Agentera install; no upgrade is needed.",
208
- pending_runtime: 0,
209
- pending_runtimes: [],
210
- pending_artifacts: 0,
211
- dry_run_command: null,
212
- apply_command: null,
213
- update_channel: channel.channel,
214
- };
215
- }
168
+ const hasUpgradeWork = appPending > 0;
169
+ const hasBlockers = appBlockers.length > 0;
170
+ const aggregateStatus = hasUpgradeWork
171
+ ? "upgrade"
172
+ : hasBlockers
173
+ ? "blocked"
174
+ : "stay";
175
+ const scenarioFacts = {
176
+ bundleStatus: classificationBundleStatus,
177
+ pendingArtifactCount: v1Artifacts.length + pendingProjectMigration.length,
178
+ crossMajor,
179
+ crossMajorMigration,
180
+ crossMajorNeedsPreview: Boolean(majorBoundaryBlock) || (crossMajor && !crossMajorMigration),
181
+ needsAppUpgrade,
182
+ };
183
+ const scenario = classifyIntegrationScenario(scenarioFacts);
184
+ const guidanceMessage = appBlockers.length > 0
185
+ ? appBlockers.join("; ")
186
+ : hasUpgradeWork
187
+ ? "Preview the app or project-state upgrade, then apply the approved command."
188
+ : "No app or project-state upgrade is required.";
189
+ const exit = integrationExit(hasUpgradeWork, appBlockers.length > 0);
216
190
  const cmdsChannel = commandChannel(args, channel, crossMajor, upgradeOutcome);
217
- const onlyPhases = artifactsOnly
218
- ? ["artifacts"]
219
- : runtimeOnly
220
- ? ["runtime"]
221
- : undefined;
222
- const installRootForCommands = crossMajorMigration || crossMajorNeedsPreview || needsAppUpgrade ? integrationTargets.installRoot : null;
223
- const cmds = buildUpgradeCommands({
224
- project: args.project,
225
- installRoot: installRootForCommands,
226
- channel: cmdsChannel,
227
- only: onlyPhases,
228
- cwdDefault: true,
229
- });
230
- let message;
231
- if (artifactsOnly) {
232
- message =
233
- "This project still uses v1 Markdown artifacts; preview migrating them to v2 YAML before continuing.";
234
- }
235
- else if (crossMajorMigration || crossMajorNeedsPreview) {
236
- message =
237
- "Your Agentera app copy is still on v2 while the CLI is on v3; preview the one-way v2→v3 migration before applying.";
238
- }
239
- else if (needsAppUpgrade) {
240
- message = "Your Agentera app copy is out of date; preview the repair or upgrade before applying.";
241
- }
242
- else if (pending.length > 0) {
243
- const runtimes = pendingRuntimes.length > 0 ? pendingRuntimes.join(", ") : "runtime configs";
244
- message = projectHasProjectLevelRuntimeHooks(args.project)
245
- ? `This project still uses older Agentera runtime wiring (${runtimes}); preview rewiring hooks to the current npm entrypoint.`
246
- : `Your user-level Agentera runtime wiring (${runtimes}) is stale; preview rewiring hooks to the current npm entrypoint.`;
247
- }
248
- else {
249
- message = "Preview Agentera upgrade changes for this project before applying.";
250
- }
191
+ const cmds = hasUpgradeWork
192
+ ? buildUpgradeCommands({
193
+ project: args.project,
194
+ installRoot: null,
195
+ channel: cmdsChannel,
196
+ only: null,
197
+ cwdDefault: true,
198
+ })
199
+ : null;
200
+ const message = hasUpgradeWork
201
+ ? `${integrationScenarioMessage(scenario, scenarioFacts)} ${guidanceMessage}`
202
+ : guidanceMessage;
251
203
  return {
252
- recommendation: "upgrade",
204
+ recommendation: aggregateStatus === "upgrade" ? "upgrade" : "stay",
253
205
  message,
254
- pending_runtime: pending.length,
255
- pending_runtimes: pendingRuntimes,
256
- pending_artifacts: v1Artifacts.length,
257
- dry_run_command: cmds.dryRunCommand,
258
- apply_command: cmds.applyCommand,
259
- update_channel: cmdsChannel.channel,
260
- upgrade_only: onlyPhases,
206
+ pending_artifacts: v1Artifacts.length + pendingProjectMigration.length,
207
+ dry_run_command: cmds?.dryRunCommand ?? null,
208
+ apply_command: cmds?.applyCommand ?? null,
209
+ update_channel: hasUpgradeWork ? cmdsChannel.channel : channel.channel,
210
+ major_boundary_block: majorBoundaryBlock,
211
+ phases: {
212
+ app: appPhase,
213
+ },
214
+ aggregate_status: aggregateStatus,
215
+ exit,
216
+ retry: {
217
+ command: args.retryCommand ?? null,
218
+ guidance: retryGuidance(exit),
219
+ },
261
220
  };
262
221
  }
263
222
  export function projectIntegrationAttention(summary) {
264
- if (summary.recommendation === "stay") {
223
+ if (summary.recommendation === "stay" && summary.aggregate_status === "stay") {
265
224
  return null;
266
225
  }
267
226
  const preview = summary.dry_run_command ? `\`${summary.dry_run_command}\`` : "the preview command";
268
- const prefix = summary.pending_artifacts > 0 ||
269
- (summary.pending_runtime > 0 && summary.upgrade_only?.includes("runtime"))
227
+ const prefix = summary.pending_artifacts > 0
270
228
  ? "normal"
271
229
  : "degraded";
272
- return `${prefix}: ${summary.message} Preview ${preview}.`;
230
+ const previewText = summary.dry_run_command ? ` Preview ${preview}.` : "";
231
+ return `${prefix}: ${summary.message}${previewText}`;
273
232
  }
274
- //# sourceMappingURL=projectIntegration.js.map