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
@@ -1,18 +1,68 @@
1
1
  import fs from "node:fs";
2
2
  import path from "node:path";
3
- import { expanduser, isFile, pathExists, resolvePath } from "../core/paths.js";
3
+ import { isLifecycleOwnershipStateDirectory } from "../runtime/lifecycleOwnershipJournal.js";
4
+ import { expanduser, pathExists, resolvePath } from "../core/paths.js";
4
5
  import { SOURCE_LABELS, classifyResolvedRoot } from "../state/installRoot.js";
5
6
  import { doctorRoots, loadSuiteVersion } from "./appModel.js";
6
7
  import { isNpxBundleRoot } from "../core/sourceRoot.js";
7
- import { resolveUpdateChannel } from "./channels.js";
8
- import { classifyInstall, crossMajorBoundaryApplies } from "./compatibility.js";
8
+ import { resolveInvokedUpdateChannel } from "./channels.js";
9
+ import { classifyInstall, cliDistributionMajor, crossMajorBoundaryApplies, isSourceCheckoutRoot, projectInstallTrack, } from "./compatibility.js";
10
+ import { isStableSuccessorAnnounced } from "./nextMajorDoctor.js";
9
11
  import { buildUpgradeCommands, commandText } from "./upgradeCommands.js";
12
+ import { parseSemverMajor } from "./versionResolution.js";
13
+ import { classifyInstallRootStatus } from "./doctorClassifier.js";
14
+ import { hasBundleRootEvidence } from "./bundleEvidence.js";
15
+ function inferInvokingCliRuntime(sourceRoot, env) {
16
+ const explicit = (env.AGENTERA_CLI_RUNTIME ?? "").trim().toLowerCase();
17
+ if (explicit === "js" || explicit === "node") {
18
+ return "js";
19
+ }
20
+ if (explicit === "python" || explicit === "uv") {
21
+ return "python";
22
+ }
23
+ const argv0 = process.argv0 ?? "";
24
+ if (/\bnode\b/i.test(argv0)) {
25
+ return "js";
26
+ }
27
+ if (/\bpython\d*\b/i.test(argv0) || /\buv\b/i.test(argv0)) {
28
+ return "python";
29
+ }
30
+ if (cliDistributionMajor(sourceRoot) >= 3) {
31
+ return "js";
32
+ }
33
+ return "unknown";
34
+ }
35
+ function buildInvokingCliRetryCommand(sourceRoot, channel, env, expectedCommand) {
36
+ const runtime = inferInvokingCliRuntime(sourceRoot, env);
37
+ if (runtime !== "js") {
38
+ return null;
39
+ }
40
+ return commandText([...channel.updateCommand.trim().split(/\s+/).slice(0, 3), expectedCommand]);
41
+ }
42
+ /**
43
+ * Doctor status build. Faithful TS port of build_doctor_status /
44
+ * public_doctor_status from scripts/agentera_upgrade.py.
45
+ *
46
+ * The classification -> root_status/signals/status logic matches Python exactly.
47
+ * The emitted command strings use the TS-CLI invocation form (npx/node) rather
48
+ * than the Python uvx/uv form; the final wording is settled in Phase 8 packaging.
49
+ */
10
50
  export const APP_UP_TO_DATE = "up_to_date";
11
51
  export const APP_OUTDATED = "outdated";
12
52
  export const APP_REPAIR_NEEDED = "repair_needed";
13
53
  export const APP_MIGRATION_NEEDED = "migration_needed";
14
54
  export const APP_MANUAL_REVIEW_NEEDED = "manual_review_needed";
15
55
  export const EXPECTED_STATE_COMMANDS = ["prime"];
56
+ /** Operation noun for doctor/prime copy derived from aggregate lifecycle status. */
57
+ export function appLifecycleActionNoun(status) {
58
+ if (status === APP_OUTDATED) {
59
+ return "update";
60
+ }
61
+ if (status === APP_MIGRATION_NEEDED) {
62
+ return "migration";
63
+ }
64
+ return "repair";
65
+ }
16
66
  export const BUNDLE_MARKER = ".agentera-bundle.json";
17
67
  /** Agentera user state preserved during v2→v3 managed app-home cleanup. */
18
68
  export const AGENTERA_USER_STATE_NAMES = new Set([
@@ -29,6 +79,7 @@ export const ROOT_USER_STATE_FILE_NAMES = new Set([
29
79
  "TODO.md",
30
80
  "CHANGELOG.md",
31
81
  "DESIGN.md",
82
+ "v3-handoff.json",
32
83
  ]);
33
84
  export const ROOT_USER_STATE_DIR_NAMES = new Set([
34
85
  "history",
@@ -37,10 +88,6 @@ export const ROOT_USER_STATE_DIR_NAMES = new Set([
37
88
  "intermediate",
38
89
  "sessions",
39
90
  ]);
40
- function hasBundleRootEvidence(root) {
41
- return (isFile(path.join(root, "scripts", "agentera")) &&
42
- isFile(path.join(root, "skills", "agentera", "SKILL.md")));
43
- }
44
91
  function legacyDefaultAppHome(home) {
45
92
  return resolvePath(path.join(expanduser(home), ".agents", "agentera"));
46
93
  }
@@ -60,7 +107,12 @@ function agenteraUserStateDirIsRecognized(p) {
60
107
  if (AGENTERA_USER_STATE_NAMES.has(entry) && st.isFile()) {
61
108
  continue;
62
109
  }
63
- if (entry === "optimera" && st.isDirectory()) {
110
+ if ((entry === "optimize" || entry === "optimera") && st.isDirectory()) {
111
+ // "optimera" is the v2 stable legacy objective dir name; keep it
112
+ // recognized so v2->v3 migration preserves legacy objective state.
113
+ continue;
114
+ }
115
+ if (entry === "runtime-lifecycle" && isLifecycleOwnershipStateDirectory(full)) {
64
116
  continue;
65
117
  }
66
118
  return false;
@@ -105,34 +157,19 @@ function sourceKey(rootSource) {
105
157
  }
106
158
  return "explicit";
107
159
  }
108
- function recoverableStaleDefaultSignal(appHome, roots) {
109
- return {
110
- status: APP_REPAIR_NEEDED,
111
- kind: "recoverable_stale_default",
112
- message: "Agentera found an old app directory and can repair it without asking you to edit shell settings",
113
- deprecatedDefaultAppHome: appHome,
114
- managedAppRoot: roots.managedAppRoot,
115
- };
116
- }
117
- function userDataOnlySignal(appHome, roots) {
118
- return {
119
- status: APP_REPAIR_NEEDED,
120
- kind: "user_data_only_app_home",
121
- message: "This Agentera directory only has your Agentera data, so Agentera can safely add fresh app files under app/",
122
- appHome,
123
- managedAppRoot: roots.managedAppRoot,
124
- };
125
- }
126
- function blockedRootRecoveryMessage(_rootSource) {
127
- return "choose a different Agentera directory, or use --force only if you checked this directory and want Agentera to replace files there";
128
- }
129
160
  export function buildDoctorStatus(installRoot, opts) {
130
161
  const rootSource = opts.rootSource;
131
162
  const sourceRoot = opts.sourceRoot;
132
163
  const home = opts.home;
133
164
  const project = opts.project;
134
165
  const expectedCommands = opts.expectedCommands ?? EXPECTED_STATE_COMMANDS;
135
- const probeCli = opts.probeCli ?? true;
166
+ const env = { ...(opts.env ?? process.env), HOME: home };
167
+ const channel = opts.resolvedChannel ?? resolveInvokedUpdateChannel({
168
+ channel: opts.channel ?? null,
169
+ env,
170
+ home,
171
+ sourceRoot,
172
+ });
136
173
  // Fully self-contained npx bundle: the bundle IS the app and is always current
137
174
  // (its version is the package version), so there is no install/upgrade step.
138
175
  // Report it as the authoritative, up-to-date app home. (Sentinel-gated; never
@@ -147,22 +184,56 @@ export function buildDoctorStatus(installRoot, opts) {
147
184
  appHomeSource: "bundled app",
148
185
  managedAppRoot: sourceRoot,
149
186
  userDataRoot: sourceRoot,
150
- activeBundleRoot: sourceRoot,
187
+ activeAppRoot: sourceRoot,
151
188
  authoritativeRoot: sourceRoot,
152
189
  skillRoot: path.join(sourceRoot, "skills", "agentera"),
153
190
  runtimeRoot: sourceRoot,
154
191
  sourceRoot,
155
192
  installRoot: sourceRoot,
156
193
  installRootSource: "bundled app",
157
- home,
158
- project,
159
194
  rootStatus: "bundled",
195
+ installKind: "v3_self_contained_npm",
160
196
  markerVersion: bundleExpected,
161
197
  signals: [],
162
198
  dryRunCommand: null,
163
199
  applyCommand: null,
164
- retryCommand: commandText(["npx", "-y", "agentera", expectedCommands[0] ?? "prime"]),
165
- approval: "no action needed: self-contained app bundle is current",
200
+ retryCommand: commandText([
201
+ ...channel.updateCommand.trim().split(/\s+/).slice(0, 3),
202
+ expectedCommands[0] ?? "prime",
203
+ ]),
204
+ updateChannel: channel.channel,
205
+ };
206
+ }
207
+ // Source checkout: the CLI invocation IS the app, so the install root is
208
+ // user state only and never needs upgrade gating. Narrowed to the default
209
+ // app home AND an existing install root so an explicit --install-root, a
210
+ // missing default app home (still a real diagnostic), and AGENTERA_HOME
211
+ // overrides all keep their existing inspection behavior.
212
+ if (isSourceCheckoutRoot(sourceRoot) && rootSource === SOURCE_LABELS.default && pathExists(installRoot)) {
213
+ const checkoutExpected = opts.expectedVersion || loadSuiteVersion(sourceRoot) || "unknown";
214
+ return {
215
+ schemaVersion: "agentera.bundleStatus.v1",
216
+ status: APP_UP_TO_DATE,
217
+ expectedVersion: checkoutExpected,
218
+ appHome: installRoot,
219
+ appHomeSource: rootSource,
220
+ managedAppRoot: installRoot,
221
+ userDataRoot: installRoot,
222
+ activeAppRoot: installRoot,
223
+ authoritativeRoot: installRoot,
224
+ skillRoot: path.join(sourceRoot, "skills", "agentera"),
225
+ runtimeRoot: sourceRoot,
226
+ sourceRoot,
227
+ installRoot,
228
+ installRootSource: rootSource,
229
+ rootStatus: "source",
230
+ installKind: "source_checkout",
231
+ markerVersion: null,
232
+ signals: [],
233
+ dryRunCommand: null,
234
+ applyCommand: null,
235
+ retryCommand: null,
236
+ updateChannel: channel.channel,
166
237
  };
167
238
  }
168
239
  const expected = opts.expectedVersion || loadSuiteVersion(sourceRoot) || "unknown";
@@ -173,141 +244,56 @@ export function buildDoctorStatus(installRoot, opts) {
173
244
  expectedVersion: expected,
174
245
  });
175
246
  const markerVersion = classification.current_version;
176
- const signals = [];
177
- let blocked = false;
178
247
  const recoverableStaleDefault = isRecoverableStaleDefaultAppHome(installRoot, rootSource, home);
179
248
  const legacyBundleRoot = activeBundleRoot === installRoot &&
180
249
  hasBundleRootEvidence(installRoot) &&
181
250
  !pathExists(path.join(installRoot, ".git"));
182
- let rootStatus;
183
- if (classification.kind === "missing_default") {
184
- rootStatus = "missing";
185
- signals.push({
186
- status: APP_REPAIR_NEEDED,
187
- kind: "missing_bundle",
188
- message: "Agentera is not installed in the normal directory yet",
189
- });
190
- }
191
- else if (classification.kind === "missing_explicit_or_environment" && recoverableStaleDefault) {
192
- rootStatus = "missing";
193
- signals.push(recoverableStaleDefaultSignal(installRoot, roots));
194
- }
195
- else if (classification.kind === "missing_explicit_or_environment") {
196
- rootStatus = "missing";
197
- blocked = true;
198
- signals.push({
199
- status: APP_MANUAL_REVIEW_NEEDED,
200
- kind: "invalid_install_root",
201
- message: "Agentera was told to use a directory that does not exist. " +
202
- "Choose an existing Agentera directory, or install into the normal Agentera directory.",
203
- });
204
- }
205
- else if (classification.kind === "file_valued_root") {
206
- rootStatus = "invalid";
207
- blocked = true;
208
- signals.push({
209
- status: APP_MANUAL_REVIEW_NEEDED,
210
- kind: "invalid_install_root",
211
- message: `Agentera was told to use a file instead of a directory; ${blockedRootRecoveryMessage(rootSource)}`,
212
- });
213
- }
214
- else if ((classification.kind === "invalid_bundle" || classification.kind === "unmanaged_directory") &&
215
- recoverableStaleDefault) {
216
- rootStatus = "stale_default";
217
- signals.push(recoverableStaleDefaultSignal(installRoot, roots));
218
- }
219
- else if (classification.kind === "unmanaged_directory" && appHomeIsUserDataOnly(installRoot)) {
220
- rootStatus = "user_data_only";
221
- signals.push(userDataOnlySignal(installRoot, roots));
222
- }
223
- else if (classification.kind === "unmanaged_directory") {
224
- rootStatus = "unmanaged";
225
- blocked = true;
226
- signals.push({
227
- status: APP_MANUAL_REVIEW_NEEDED,
228
- kind: "unmanaged_install_root",
229
- message: `This directory already has files Agentera does not recognize, so Agentera will not change it automatically; ${blockedRootRecoveryMessage(rootSource)}`,
230
- });
231
- }
232
- else if (classification.kind === "invalid_bundle") {
233
- rootStatus = "invalid";
234
- blocked = true;
235
- signals.push({
236
- status: APP_MANUAL_REVIEW_NEEDED,
237
- kind: "invalid_bundle",
238
- message: `This directory looks like a broken Agentera install; ${blockedRootRecoveryMessage(rootSource)}`,
239
- });
251
+ const userDataOnly = classification.kind === "unmanaged_directory" && appHomeIsUserDataOnly(installRoot);
252
+ const classified = classifyInstallRootStatus({
253
+ installRoot,
254
+ rootSource,
255
+ roots,
256
+ classification,
257
+ expected,
258
+ markerVersion,
259
+ recoverableStaleDefault,
260
+ legacyBundleRoot,
261
+ userDataOnly,
262
+ project,
263
+ expectedCommands,
264
+ });
265
+ const rootStatus = classified.rootStatus;
266
+ const signals = classified.signals;
267
+ const blocked = classified.blocked;
268
+ const install = classifyInstall({ appHome: installRoot, sourceRoot });
269
+ const crossMajorDetected = crossMajorBoundaryApplies(install, sourceRoot);
270
+ const successorAnnounced = isStableSuccessorAnnounced(sourceRoot, "stable");
271
+ if (opts.observation) {
272
+ opts.observation.install = install;
273
+ opts.observation.successorAnnounced = successorAnnounced;
240
274
  }
241
- else {
242
- rootStatus = "managed";
243
- if (legacyBundleRoot) {
244
- signals.push({
245
- status: APP_MIGRATION_NEEDED,
246
- kind: APP_MIGRATION_NEEDED,
247
- message: "Agentera app files are in the old place and can be moved into app/",
248
- legacyBundleRoot: installRoot,
249
- managedAppRoot: roots.managedAppRoot,
250
- });
251
- }
252
- const reason = classification.diagnostic.evidence.reason;
253
- if (classification.kind === "managed_stale" && reason === "missing_marker") {
254
- if (recoverableStaleDefault) {
255
- signals.push(recoverableStaleDefaultSignal(installRoot, roots));
275
+ const crossMajorBoundary = crossMajorDetected && successorAnnounced;
276
+ let crossMajorPending = false;
277
+ if (crossMajorDetected && !successorAnnounced) {
278
+ for (const signal of signals) {
279
+ if (signal.kind !== "version_mismatch") {
280
+ continue;
256
281
  }
257
- signals.push({
258
- status: APP_REPAIR_NEEDED,
259
- kind: "missing_marker",
260
- message: "Agentera cannot prove these app files are current, so it should repair them",
261
- });
262
- }
263
- else if (classification.kind === "managed_stale" && reason === "version_mismatch") {
264
- if (recoverableStaleDefault) {
265
- signals.push(recoverableStaleDefaultSignal(installRoot, roots));
282
+ const actualMajor = parseSemverMajor(String(signal.actual ?? markerVersion ?? "")) ?? 0;
283
+ const expectedMajor = parseSemverMajor(String(signal.expected ?? expected)) ?? 0;
284
+ if (actualMajor > 0 && actualMajor < 3 && expectedMajor >= 3) {
285
+ crossMajorPending = true;
286
+ signals.push({
287
+ status: APP_MANUAL_REVIEW_NEEDED,
288
+ kind: "cross_major_pending",
289
+ expected: signal.expected,
290
+ actual: signal.actual,
291
+ message: `Agentera app files are on v${actualMajor}.x while the CLI is on v${expectedMajor}.x; the v${expectedMajor} successor line is not announced yet, so no upgrade is offered`,
292
+ });
293
+ break;
266
294
  }
267
- signals.push({
268
- status: APP_OUTDATED,
269
- kind: "version_mismatch",
270
- expected,
271
- actual: markerVersion,
272
- message: "Agentera app files are valid but need an update to the expected version",
273
- });
274
- }
275
- const probe = probeCli
276
- ? (opts.probeRunner ?? defaultProbe)({
277
- bundleRoot: activeBundleRoot,
278
- appHome: installRoot,
279
- project,
280
- expectedCommands,
281
- })
282
- : { ok: true };
283
- if (!probe.ok) {
284
- let kind = "cli_probe_unavailable";
285
- if (probe.returnCode !== null && probe.returnCode !== undefined && probe.returnCode !== 0) {
286
- kind = "cli_probe_failed";
287
- }
288
- else if (probe.missingCommands && probe.missingCommands.length > 0) {
289
- kind = "missing_command";
290
- }
291
- signals.push({
292
- status: APP_REPAIR_NEEDED,
293
- kind,
294
- message: probe.message,
295
- returnCode: probe.returnCode ?? null,
296
- missingCommands: probe.missingCommands ?? [],
297
- stdoutTail: probe.stdoutTail ?? [],
298
- stderrTail: probe.stderrTail ?? [],
299
- });
300
295
  }
301
296
  }
302
- const env = { ...(opts.env ?? process.env), HOME: home };
303
- const channel = resolveUpdateChannel({
304
- channel: opts.channel ?? null,
305
- env,
306
- home,
307
- sourceRoot,
308
- });
309
- const install = classifyInstall({ appHome: installRoot, sourceRoot });
310
- const crossMajorBoundary = crossMajorBoundaryApplies(install, sourceRoot);
311
297
  const upgradeCommands = buildUpgradeCommands({
312
298
  project,
313
299
  installRoot,
@@ -318,11 +304,13 @@ export function buildDoctorStatus(installRoot, opts) {
318
304
  ? APP_MANUAL_REVIEW_NEEDED
319
305
  : signals.some((s) => s.kind === APP_MIGRATION_NEEDED)
320
306
  ? APP_MIGRATION_NEEDED
321
- : signals.some((s) => s.status === APP_REPAIR_NEEDED)
322
- ? APP_REPAIR_NEEDED
323
- : signals.some((s) => s.status === APP_OUTDATED)
324
- ? APP_OUTDATED
325
- : APP_UP_TO_DATE;
307
+ : crossMajorPending
308
+ ? APP_MANUAL_REVIEW_NEEDED
309
+ : signals.some((s) => s.status === APP_REPAIR_NEEDED)
310
+ ? APP_REPAIR_NEEDED
311
+ : signals.some((s) => s.status === APP_OUTDATED)
312
+ ? APP_OUTDATED
313
+ : APP_UP_TO_DATE;
326
314
  return {
327
315
  schemaVersion: "agentera.bundleStatus.v1",
328
316
  status,
@@ -331,44 +319,61 @@ export function buildDoctorStatus(installRoot, opts) {
331
319
  appHomeSource: rootSource,
332
320
  managedAppRoot: roots.managedAppRoot,
333
321
  userDataRoot: installRoot,
334
- activeBundleRoot,
322
+ activeAppRoot: activeBundleRoot,
335
323
  authoritativeRoot: roots.managedAppRoot,
336
324
  skillRoot: roots.skillRoot,
337
325
  runtimeRoot: roots.runtimeRoot,
338
326
  sourceRoot,
339
327
  installRoot,
340
328
  installRootSource: rootSource,
341
- home,
342
- project,
343
329
  rootStatus,
330
+ installKind: install.kind,
344
331
  markerVersion,
345
332
  signals,
346
- dryRunCommand: blocked || status === APP_UP_TO_DATE ? null : upgradeCommands.dryRunCommand,
347
- applyCommand: blocked || status === APP_UP_TO_DATE ? null : upgradeCommands.applyCommand,
333
+ dryRunCommand: blocked || crossMajorPending || status === APP_UP_TO_DATE
334
+ ? null
335
+ : upgradeCommands.dryRunCommand,
336
+ applyCommand: blocked || crossMajorPending || status === APP_UP_TO_DATE
337
+ ? null
338
+ : upgradeCommands.applyCommand,
348
339
  updateChannel: channel.channel,
340
+ crossMajorBoundaryDetected: crossMajorDetected,
349
341
  crossMajorBoundary,
350
- retryCommand: commandText([
351
- "node",
352
- path.join(activeBundleRoot, "scripts", "agentera"),
353
- expectedCommands[0] ?? "prime",
354
- ]),
355
- approval: `approve app files repair for ${installRoot}`,
342
+ retryCommand: buildInvokingCliRetryCommand(sourceRoot, channel, env, expectedCommands[0] ?? "prime"),
356
343
  };
357
344
  }
358
- /** Default CLI probe placeholder (wired to the bundled TS CLI in Phase 8). */
359
- const defaultProbe = ({ expectedCommands }) => ({
360
- ok: false,
361
- command: null,
362
- returnCode: null,
363
- stdoutTail: [],
364
- stderrTail: [],
365
- missingCommands: [...expectedCommands],
366
- message: "CLI probe not yet wired to the bundled TS CLI",
367
- });
368
345
  export function publicDoctorStatus(status) {
369
- const pub = JSON.parse(JSON.stringify(status));
370
- delete pub.installRoot;
371
- delete pub.installRootSource;
372
- return pub;
346
+ const { installRoot: _installRoot, installRootSource: _installRootSource, installKind: _installKind, rootStatus: _rootStatus, platformAppHome, cliApp, ...rest } = status;
347
+ const result = { ...rest };
348
+ if (platformAppHome) {
349
+ const { rootStatus: _prs, ...platform } = platformAppHome;
350
+ result.platformAppHome = platform;
351
+ }
352
+ if (cliApp) {
353
+ const { rootStatus: _crs, ...cli } = cliApp;
354
+ result.cliApp = cli;
355
+ }
356
+ return result;
357
+ }
358
+ /** Oracle-pinned keys for `agentera doctor --format json` (parity-remaining-families.json). */
359
+ export const DOCTOR_PARITY_JSON_KEYS = [
360
+ "status",
361
+ "expectedVersion",
362
+ "appHome",
363
+ "managedAppRoot",
364
+ "userDataRoot",
365
+ "signals",
366
+ "dryRunCommand",
367
+ "applyCommand",
368
+ "retryCommand",
369
+ ];
370
+ /** Public doctor JSON envelope: command label plus oracle structural keys only. */
371
+ export function doctorParityJsonEnvelope(status) {
372
+ const pub = publicDoctorStatus(status);
373
+ const out = { command: "doctor", install_track: projectInstallTrack(status.installKind) };
374
+ for (const key of DOCTOR_PARITY_JSON_KEYS) {
375
+ if (key in pub)
376
+ out[key] = pub[key];
377
+ }
378
+ return out;
373
379
  }
374
- //# sourceMappingURL=doctor.js.map
@@ -0,0 +1,187 @@
1
+ import { APP_MANUAL_REVIEW_NEEDED, APP_MIGRATION_NEEDED, APP_OUTDATED, APP_REPAIR_NEEDED, } from "./doctor.js";
2
+ function blockedRootRecoveryMessage(_rootSource) {
3
+ return "choose a different Agentera directory, or use --force only if you checked this directory and want Agentera to replace files there";
4
+ }
5
+ function recoverableStaleDefaultSignal(appHome, roots) {
6
+ return {
7
+ status: APP_REPAIR_NEEDED,
8
+ kind: "recoverable_stale_default",
9
+ message: "Agentera found an old app directory and can repair it without asking you to edit shell settings",
10
+ deprecatedDefaultAppHome: appHome,
11
+ managedAppRoot: roots.managedAppRoot,
12
+ };
13
+ }
14
+ function userDataOnlySignal(appHome, roots) {
15
+ return {
16
+ status: APP_REPAIR_NEEDED,
17
+ kind: "user_data_only_app_home",
18
+ message: "This Agentera directory only has your Agentera data, so Agentera can safely add fresh app files under app/",
19
+ appHome,
20
+ managedAppRoot: roots.managedAppRoot,
21
+ };
22
+ }
23
+ function classifyMissingDefault(_ctx) {
24
+ return {
25
+ rootStatus: "missing",
26
+ blocked: false,
27
+ signals: [
28
+ {
29
+ status: APP_REPAIR_NEEDED,
30
+ kind: "missing_bundle",
31
+ message: "Agentera is not installed in the normal directory yet",
32
+ },
33
+ ],
34
+ };
35
+ }
36
+ function classifyMissingExplicitOrEnvironment(ctx) {
37
+ if (ctx.recoverableStaleDefault) {
38
+ return {
39
+ rootStatus: "missing",
40
+ blocked: false,
41
+ signals: [recoverableStaleDefaultSignal(ctx.installRoot, ctx.roots)],
42
+ };
43
+ }
44
+ return {
45
+ rootStatus: "missing",
46
+ blocked: true,
47
+ signals: [
48
+ {
49
+ status: APP_MANUAL_REVIEW_NEEDED,
50
+ kind: "invalid_install_root",
51
+ message: "Agentera was told to use a directory that does not exist. " +
52
+ "Choose an existing Agentera directory, or install into the normal Agentera directory.",
53
+ },
54
+ ],
55
+ };
56
+ }
57
+ function classifyFileValuedRoot(ctx) {
58
+ return {
59
+ rootStatus: "invalid",
60
+ blocked: true,
61
+ signals: [
62
+ {
63
+ status: APP_MANUAL_REVIEW_NEEDED,
64
+ kind: "invalid_install_root",
65
+ message: `Agentera was told to use a file instead of a directory; ${blockedRootRecoveryMessage(ctx.rootSource)}`,
66
+ },
67
+ ],
68
+ };
69
+ }
70
+ function classifyInvalidBundle(ctx) {
71
+ if (ctx.recoverableStaleDefault) {
72
+ return {
73
+ rootStatus: "stale_default",
74
+ blocked: false,
75
+ signals: [recoverableStaleDefaultSignal(ctx.installRoot, ctx.roots)],
76
+ };
77
+ }
78
+ return {
79
+ rootStatus: "invalid",
80
+ blocked: true,
81
+ signals: [
82
+ {
83
+ status: APP_MANUAL_REVIEW_NEEDED,
84
+ kind: "invalid_bundle",
85
+ message: `This directory looks like a broken Agentera install; ${blockedRootRecoveryMessage(ctx.rootSource)}`,
86
+ },
87
+ ],
88
+ };
89
+ }
90
+ function classifyUnmanagedDirectory(ctx) {
91
+ if (ctx.recoverableStaleDefault) {
92
+ return {
93
+ rootStatus: "stale_default",
94
+ blocked: false,
95
+ signals: [recoverableStaleDefaultSignal(ctx.installRoot, ctx.roots)],
96
+ };
97
+ }
98
+ if (ctx.userDataOnly) {
99
+ return {
100
+ rootStatus: "user_data_only",
101
+ blocked: false,
102
+ signals: [userDataOnlySignal(ctx.installRoot, ctx.roots)],
103
+ };
104
+ }
105
+ return {
106
+ rootStatus: "unmanaged",
107
+ blocked: true,
108
+ signals: [
109
+ {
110
+ status: APP_MANUAL_REVIEW_NEEDED,
111
+ kind: "unmanaged_install_root",
112
+ message: `This directory already has files Agentera does not recognize, so Agentera will not change it automatically; ${blockedRootRecoveryMessage(ctx.rootSource)}`,
113
+ },
114
+ ],
115
+ };
116
+ }
117
+ function appendManagedStaleSignals(ctx, signals) {
118
+ const reason = ctx.classification.diagnostic.evidence.reason;
119
+ if (ctx.classification.kind !== "managed_stale") {
120
+ return;
121
+ }
122
+ if (reason === "missing_marker") {
123
+ if (ctx.recoverableStaleDefault) {
124
+ signals.push(recoverableStaleDefaultSignal(ctx.installRoot, ctx.roots));
125
+ }
126
+ signals.push({
127
+ status: APP_REPAIR_NEEDED,
128
+ kind: "missing_marker",
129
+ message: "Agentera app files need repair",
130
+ });
131
+ }
132
+ else if (reason === "corrupt_marker") {
133
+ if (ctx.recoverableStaleDefault) {
134
+ signals.push(recoverableStaleDefaultSignal(ctx.installRoot, ctx.roots));
135
+ }
136
+ const markerPath = String(ctx.classification.diagnostic.evidence.markerPath);
137
+ signals.push({
138
+ status: APP_REPAIR_NEEDED,
139
+ kind: "corrupt_bundle_marker",
140
+ message: `bundle marker file is corrupt: ${markerPath}`,
141
+ });
142
+ }
143
+ else if (reason === "version_mismatch") {
144
+ if (ctx.recoverableStaleDefault) {
145
+ signals.push(recoverableStaleDefaultSignal(ctx.installRoot, ctx.roots));
146
+ }
147
+ signals.push({
148
+ status: APP_OUTDATED,
149
+ kind: "version_mismatch",
150
+ expected: ctx.expected,
151
+ actual: ctx.markerVersion,
152
+ message: "Agentera app files are valid but need an update to the expected version",
153
+ });
154
+ }
155
+ }
156
+ function classifyManaged(ctx) {
157
+ const signals = [];
158
+ if (ctx.legacyBundleRoot) {
159
+ signals.push({
160
+ status: APP_MIGRATION_NEEDED,
161
+ kind: APP_MIGRATION_NEEDED,
162
+ message: "Agentera app files are in the old place and can be moved into app/",
163
+ legacyAppRoot: ctx.installRoot,
164
+ managedAppRoot: ctx.roots.managedAppRoot,
165
+ });
166
+ }
167
+ appendManagedStaleSignals(ctx, signals);
168
+ return {
169
+ rootStatus: "managed",
170
+ blocked: false,
171
+ signals,
172
+ };
173
+ }
174
+ const ROOT_CLASSIFIERS = {
175
+ missing_default: classifyMissingDefault,
176
+ missing_explicit_or_environment: classifyMissingExplicitOrEnvironment,
177
+ file_valued_root: classifyFileValuedRoot,
178
+ invalid_bundle: classifyInvalidBundle,
179
+ unmanaged_directory: classifyUnmanagedDirectory,
180
+ managed_fresh: classifyManaged,
181
+ managed_stale: classifyManaged,
182
+ };
183
+ export function classifyInstallRootStatus(ctx) {
184
+ const kind = ctx.classification.kind;
185
+ const classifier = ROOT_CLASSIFIERS[kind] ?? classifyManaged;
186
+ return classifier(ctx);
187
+ }