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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (696) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +118 -22
  3. package/bundle/CHANGELOG.md +1361 -0
  4. package/bundle/DESIGN.md +229 -0
  5. package/bundle/LICENSE +201 -0
  6. package/bundle/README.md +143 -0
  7. package/bundle/UPGRADE.md +252 -0
  8. package/bundle/extract-corpus-parity.json +21 -0
  9. package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
  10. package/bundle/references/adapters/package-publication.json +488 -0
  11. package/bundle/references/adapters/package-registry.yaml +435 -188
  12. package/bundle/references/adapters/package-surface-characterization.md +66 -34
  13. package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
  14. package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
  15. package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
  16. package/bundle/references/adapters/runtime-retired-resources.yaml +333 -0
  17. package/bundle/references/analysis/evidence-tier-authority.yaml +518 -0
  18. package/bundle/references/analysis/verification-policy.yaml +266 -0
  19. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +20 -10
  20. package/bundle/references/artifacts/glossary-entry-contract.yaml +1254 -0
  21. package/bundle/references/artifacts/state-storage-authority.yaml +3061 -0
  22. package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
  23. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +7 -8
  24. package/bundle/references/cli/capability-instruction-contract.yaml +11 -14
  25. package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
  26. package/bundle/references/cli/routing-model.md +155 -0
  27. package/bundle/references/cli/trigger-schema-enrichment.md +147 -0
  28. package/bundle/references/cli/update-channels.yaml +19 -2
  29. package/bundle/references/cli/vocabulary-index.yaml +20 -17
  30. package/bundle/references/cli/vocabulary.md +325 -362
  31. package/bundle/references/meta/retained-reference-authority.yaml +151 -0
  32. package/bundle/registry.json +13 -13
  33. package/bundle/skills/agentera/SKILL.md +226 -422
  34. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +84 -0
  35. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/exit.yaml +2 -2
  36. package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +25 -0
  37. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/validation.yaml +37 -18
  38. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +103 -0
  39. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +8 -6
  40. package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
  41. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +184 -0
  42. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/artifacts.yaml +12 -12
  43. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/exit.yaml +5 -5
  44. package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +16 -0
  45. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/validation.yaml +7 -7
  46. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +51 -0
  47. package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/exit.yaml +2 -2
  48. package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +20 -0
  49. package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +144 -0
  50. package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +80 -0
  51. package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +16 -0
  52. package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/validation.yaml +18 -18
  53. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/artifacts.yaml +18 -18
  54. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/exit.yaml +2 -2
  55. package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +16 -0
  56. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/validation.yaml +9 -9
  57. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +76 -0
  58. package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/exit.yaml +9 -7
  59. package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +23 -0
  60. package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +121 -0
  61. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +66 -0
  62. package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/exit.yaml +2 -2
  63. package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +23 -0
  64. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +121 -0
  65. package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +23 -0
  66. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +6 -5
  67. package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +20 -0
  68. package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +115 -0
  69. package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +24 -0
  70. package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +16 -0
  71. package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/validation.yaml +2 -2
  72. package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +73 -0
  73. package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +22 -0
  74. package/bundle/skills/agentera/capabilities/{hej → status}/schemas/validation.yaml +5 -5
  75. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/artifacts.yaml +16 -16
  76. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/exit.yaml +7 -6
  77. package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +23 -0
  78. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/validation.yaml +18 -20
  79. package/bundle/skills/agentera/capability_schema_contract.yaml +178 -34
  80. package/bundle/skills/agentera/protocol.yaml +31 -31
  81. package/bundle/skills/agentera/route-phrases.yaml +81 -0
  82. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +5 -4
  83. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +39 -21
  84. package/bundle/skills/agentera/schemas/artifacts/design.yaml +5 -4
  85. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +15 -19
  86. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +145 -14
  87. package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +82 -0
  88. package/bundle/skills/agentera/schemas/artifacts/health.yaml +58 -21
  89. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +22 -8
  90. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +461 -36
  91. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +133 -20
  92. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +342 -42
  93. package/bundle/skills/agentera/schemas/artifacts/vision.yaml +3 -3
  94. package/dist/analytics/extractCorpus/cli.js +101 -12
  95. package/dist/analytics/extractCorpus/copilotSessions.js +53 -9
  96. package/dist/analytics/extractCorpus/core.js +59 -24
  97. package/dist/analytics/extractCorpus/corpus.js +58 -23
  98. package/dist/analytics/extractCorpus/coverageAudit.js +260 -0
  99. package/dist/analytics/extractCorpus/cursorSessions.js +12 -7
  100. package/dist/analytics/extractCorpus/evidenceTiers.js +603 -0
  101. package/dist/analytics/extractCorpus/extractCorpusParity.js +105 -0
  102. package/dist/analytics/extractCorpus/filesystemSources.js +1 -5
  103. package/dist/analytics/extractCorpus/index.js +6 -1
  104. package/dist/analytics/extractCorpus/jsonlSessions.js +24 -5
  105. package/dist/analytics/extractCorpus/sqliteCaps.js +43 -0
  106. package/dist/analytics/extractCorpus/sqliteSessions.js +98 -6
  107. package/dist/analytics/extractCorpus/tierReader.js +108 -0
  108. package/dist/analytics/extractCorpus.js +0 -1
  109. package/dist/analytics/glossaryAdviceResolution.js +166 -0
  110. package/dist/analytics/glossaryInputAcquisition.js +319 -0
  111. package/dist/analytics/personalGlossaryAdmission.js +133 -0
  112. package/dist/analytics/personalGlossaryProfile.js +219 -0
  113. package/dist/analytics/profileSignals.js +211 -0
  114. package/dist/analytics/usageStats.js +169 -42
  115. package/dist/audit/terminologyDrift.js +281 -0
  116. package/dist/bin/agentera.js +3 -2
  117. package/dist/capabilities/audit/instructions.js +16 -0
  118. package/dist/capabilities/build/instructions.js +59 -0
  119. package/dist/capabilities/design/instructions.js +4 -0
  120. package/dist/capabilities/discuss/instructions.js +29 -0
  121. package/dist/capabilities/document/instructions.js +11 -0
  122. package/dist/capabilities/index.js +29 -27
  123. package/dist/capabilities/optimize/instructions.js +14 -0
  124. package/dist/capabilities/orchestrate/instructions.js +42 -0
  125. package/dist/capabilities/plan/instructions.js +33 -0
  126. package/dist/capabilities/profile/instructions.js +70 -0
  127. package/dist/capabilities/research/instructions.js +5 -0
  128. package/dist/capabilities/status/instructions.js +15 -0
  129. package/dist/capabilities/status/startupInstructions.js +34 -0
  130. package/dist/capabilities/vision/instructions.js +4 -0
  131. package/dist/cli/appContext.js +30 -24
  132. package/dist/cli/argvalidate.js +0 -1
  133. package/dist/cli/capabilityContext/benchmark.js +25 -17
  134. package/dist/cli/capabilityContext/bespoke.js +31 -12
  135. package/dist/cli/capabilityContext/build.js +251 -0
  136. package/dist/cli/capabilityContext/closeout.js +33 -30
  137. package/dist/cli/capabilityContext/contract.js +39 -46
  138. package/dist/cli/capabilityContext/evidence.js +90 -73
  139. package/dist/cli/capabilityContext/index.js +1 -2
  140. package/dist/cli/capabilityContext/orchestration.js +45 -21
  141. package/dist/cli/capabilityContext/planState.js +93 -100
  142. package/dist/cli/capabilityContext/progress.js +60 -14
  143. package/dist/cli/capabilityContext/projectVerification.js +409 -0
  144. package/dist/cli/capabilityContext/shared.js +9 -20
  145. package/dist/cli/capabilityContext/slim.js +56 -10
  146. package/dist/cli/capabilityContext/startup.js +57 -115
  147. package/dist/cli/capabilityContext/startupAggregation.js +68 -0
  148. package/dist/cli/capabilityContext/types.js +37 -24
  149. package/dist/cli/capabilityContext.js +1 -2
  150. package/dist/cli/commands/appHome.js +22 -0
  151. package/dist/cli/commands/capability.js +4 -4
  152. package/dist/cli/commands/compact.js +163 -13
  153. package/dist/cli/commands/doctor.js +122 -114
  154. package/dist/cli/commands/durability.js +81 -0
  155. package/dist/cli/commands/glossaryAdvice.js +138 -0
  156. package/dist/cli/commands/lint.js +22 -8
  157. package/dist/cli/commands/personalGlossary.js +176 -0
  158. package/dist/cli/commands/prime/briefOrientation.js +746 -0
  159. package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
  160. package/dist/cli/commands/prime/bundleStatus.js +190 -0
  161. package/dist/cli/commands/prime/collectEntityOrientation.js +326 -0
  162. package/dist/cli/commands/prime/collectOrientationState.js +219 -0
  163. package/dist/cli/commands/prime/orientationOutput.js +421 -0
  164. package/dist/cli/commands/prime/types.js +1 -0
  165. package/dist/cli/commands/prime/v1Migration.js +38 -0
  166. package/dist/cli/commands/prime.js +80 -558
  167. package/dist/cli/commands/profileGrounding.js +55 -0
  168. package/dist/cli/commands/query.js +77 -52
  169. package/dist/cli/commands/report.js +88 -26
  170. package/dist/cli/commands/route.js +142 -0
  171. package/dist/cli/commands/schema.js +266 -142
  172. package/dist/cli/commands/state/decisions.js +51 -61
  173. package/dist/cli/commands/state/docs.js +63 -86
  174. package/dist/cli/commands/state/experimentRecords.js +151 -0
  175. package/dist/cli/commands/state/experiments.js +11 -64
  176. package/dist/cli/commands/state/get.js +129 -0
  177. package/dist/cli/commands/state/health.js +11 -111
  178. package/dist/cli/commands/state/index.js +6 -41
  179. package/dist/cli/commands/state/list.js +194 -0
  180. package/dist/cli/commands/state/objective.js +21 -64
  181. package/dist/cli/commands/state/plan.js +11 -169
  182. package/dist/cli/commands/state/planTasks.js +154 -0
  183. package/dist/cli/commands/state/plans.js +154 -0
  184. package/dist/cli/commands/state/progress.js +11 -45
  185. package/dist/cli/commands/state/shared.js +0 -1
  186. package/dist/cli/commands/state/todo.js +29 -108
  187. package/dist/cli/commands/state/write.js +433 -0
  188. package/dist/cli/commands/upgrade.js +146 -5
  189. package/dist/cli/commands/upgradeVerify.js +118 -0
  190. package/dist/cli/commands/validate.js +246 -211
  191. package/dist/cli/commands/verify.js +24 -9
  192. package/dist/cli/contracts/bundleStatus.js +1 -0
  193. package/dist/cli/contracts/orientationState.js +1 -0
  194. package/dist/cli/dispatch/argvParser.js +32 -0
  195. package/dist/cli/dispatch/check.js +94 -50
  196. package/dist/cli/dispatch/commands.js +27 -0
  197. package/dist/cli/dispatch/index.js +82 -52
  198. package/dist/cli/dispatch/lifecycle.js +268 -108
  199. package/dist/cli/dispatch/prime.js +68 -29
  200. package/dist/cli/dispatch/projections.js +17 -0
  201. package/dist/cli/dispatch/shared.js +1 -2
  202. package/dist/cli/dispatch/state.js +68 -77
  203. package/dist/cli/dispatch.js +0 -1
  204. package/dist/cli/errors.js +16 -17
  205. package/dist/cli/help.js +395 -41
  206. package/dist/cli/migrationRequired.js +122 -0
  207. package/dist/cli/orientation/attention.js +61 -0
  208. package/dist/cli/orientation/corpusCoverage.js +102 -0
  209. package/dist/cli/orientation.js +438 -170
  210. package/dist/cli/planArtifacts.js +350 -0
  211. package/dist/cli/planEvidence.js +157 -0
  212. package/dist/cli/planLifecycleState.js +36 -0
  213. package/dist/cli/planTaskIndex.js +11 -0
  214. package/dist/cli/preCutoverCommand.js +32 -0
  215. package/dist/cli/prime-blob.js +71 -3
  216. package/dist/cli/profileAcquisition.js +167 -0
  217. package/dist/cli/startupCompletenessContract.js +59 -0
  218. package/dist/cli/stateQuery.js +56 -14
  219. package/dist/cli/structured.js +0 -1
  220. package/dist/cli/todoMarkdown.js +25 -12
  221. package/dist/cli/todoReadinessSelection.js +192 -0
  222. package/dist/cli/todoSeverity.js +18 -0
  223. package/dist/core/atomicWriter.js +20 -0
  224. package/dist/core/developmentChannel.js +1 -0
  225. package/dist/core/developmentInvocation.js +374 -0
  226. package/dist/core/difflib.js +0 -1
  227. package/dist/core/envPaths.js +20 -0
  228. package/dist/core/jsonValue.js +5 -0
  229. package/dist/core/paths.js +0 -1
  230. package/dist/core/pyjson.js +67 -3
  231. package/dist/core/shell.js +4 -0
  232. package/dist/core/skillIdentity.js +23 -0
  233. package/dist/core/sourceRoot.js +9 -12
  234. package/dist/core/text.js +10 -0
  235. package/dist/core/toml.js +0 -1
  236. package/dist/core/yaml.js +8 -1
  237. package/dist/eval/evalSkills.js +30 -26
  238. package/dist/eval/hybridRouteEvaluation.js +155 -0
  239. package/dist/eval/semanticEval.js +43 -20
  240. package/dist/eval/semanticFixtures.js +16 -5
  241. package/dist/hooks/common.js +3 -56
  242. package/dist/hooks/compaction/apply.js +252 -50
  243. package/dist/hooks/compaction/dryRun.js +7 -4
  244. package/dist/hooks/compaction/index.js +5 -6
  245. package/dist/hooks/compaction/parse.js +201 -5
  246. package/dist/hooks/compaction/retention.js +30 -25
  247. package/dist/hooks/compaction/status.js +149 -32
  248. package/dist/hooks/compaction/types.js +0 -1
  249. package/dist/hooks/validateArtifact/agentFacing.js +0 -1
  250. package/dist/hooks/validateArtifact/index.js +7 -64
  251. package/dist/hooks/validateArtifact/markdown.js +57 -7
  252. package/dist/hooks/validateArtifact/schema.js +110 -19
  253. package/dist/hooks/validateArtifact/traversal.js +13 -11
  254. package/dist/hooks/validateArtifact/violations.js +7 -5
  255. package/dist/migrate/v2HandoffManifest.js +127 -8
  256. package/dist/registries/activationContract.js +2 -0
  257. package/dist/registries/activationTuples.js +108 -0
  258. package/dist/registries/artifactProtocolIds.js +2 -1
  259. package/dist/registries/artifactRegistry.js +224 -63
  260. package/dist/registries/artifactSchemaProjection.js +45 -0
  261. package/dist/registries/capabilityContract.js +129 -2
  262. package/dist/registries/evaluatorHandoffContract.js +2 -3
  263. package/dist/registries/evidenceTierContract.js +371 -0
  264. package/dist/registries/glossaryAdviceContract.js +79 -0
  265. package/dist/registries/glossaryCaveatContract.js +67 -0
  266. package/dist/registries/glossaryConsumerContractValidation.js +787 -0
  267. package/dist/registries/glossaryEntryContract.js +757 -0
  268. package/dist/registries/glossaryTermIdentity.js +17 -0
  269. package/dist/registries/glossaryTermOccurrence.js +20 -0
  270. package/dist/registries/hybridRoute.js +274 -0
  271. package/dist/registries/hybridRouteReceipt.js +221 -0
  272. package/dist/registries/packagePublication.js +273 -0
  273. package/dist/registries/packageRegistry.js +187 -211
  274. package/dist/registries/todoReadinessContract.js +448 -0
  275. package/dist/registries/triggerLoader.js +174 -0
  276. package/dist/registries/verbosityBudgetContract.js +205 -0
  277. package/dist/release/releaseMetadata.js +156 -6
  278. package/dist/runtime/lifecycleAdapterContract.js +457 -0
  279. package/dist/runtime/lifecycleAdapters.js +777 -0
  280. package/dist/runtime/lifecycleAuthority.js +453 -0
  281. package/dist/runtime/lifecycleOperationContract.js +123 -0
  282. package/dist/runtime/lifecycleOperations.js +634 -0
  283. package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
  284. package/dist/runtime/lifecyclePublication.js +415 -0
  285. package/dist/runtime/lifecycleSnapshot.js +438 -0
  286. package/dist/runtime/nativeResourceCleanup.js +502 -0
  287. package/dist/setup/opencode.js +20 -13
  288. package/dist/setup/opencodeConstants.js +1 -0
  289. package/dist/setup/sharedSkill.js +45 -0
  290. package/dist/setup/smokeChecks.js +21 -82
  291. package/dist/state/archiveDiscovery.js +580 -0
  292. package/dist/state/archivePublication.js +225 -0
  293. package/dist/state/archiveRecovery.js +237 -0
  294. package/dist/state/archiveReplay.js +53 -0
  295. package/dist/state/canonicalMigrationRecord.js +36 -0
  296. package/dist/state/changelog.js +221 -0
  297. package/dist/state/decisionEntities.js +367 -0
  298. package/dist/state/decisionLegacyValidation.js +215 -0
  299. package/dist/state/decisionMigrationProvenance.js +199 -0
  300. package/dist/state/decisionOverlay.js +254 -0
  301. package/dist/state/decisionRevision.js +256 -0
  302. package/dist/state/decisionRevisionMigration.js +89 -0
  303. package/dist/state/directRetrieval.js +323 -0
  304. package/dist/state/durability.js +324 -0
  305. package/dist/state/entityCutover.js +459 -0
  306. package/dist/state/entityCutoverGit.js +127 -0
  307. package/dist/state/entityGlossaryAuthority.js +13 -0
  308. package/dist/state/entityListProjection.js +187 -0
  309. package/dist/state/entityListRuntimeRegistry.js +85 -0
  310. package/dist/state/entityMigrationCausality.js +97 -0
  311. package/dist/state/entityMigrationIdentity.js +5 -0
  312. package/dist/state/entityMigrationPreview.js +840 -0
  313. package/dist/state/entityMigrationTodo.js +133 -0
  314. package/dist/state/entityPublicationContext.js +859 -0
  315. package/dist/state/entityRetrievalHelp.js +506 -0
  316. package/dist/state/entityStorage.js +899 -0
  317. package/dist/state/exactReplacementRecovery.js +18 -0
  318. package/dist/state/experimentArchive.js +63 -0
  319. package/dist/state/experimentIdentity.js +202 -0
  320. package/dist/state/healthEntities.js +262 -0
  321. package/dist/state/healthEntityValidation.js +18 -0
  322. package/dist/state/healthRepair.js +69 -0
  323. package/dist/state/installRoot.js +64 -25
  324. package/dist/state/legacyEntityCutoverEvidence.js +65 -0
  325. package/dist/state/legacyIdentity.js +47 -0
  326. package/dist/state/legacySummaryRecord.js +6 -0
  327. package/dist/state/listAccounting.js +54 -0
  328. package/dist/state/listClassification.js +17 -0
  329. package/dist/state/listCursor.js +42 -0
  330. package/dist/state/listRetrieval.js +781 -0
  331. package/dist/state/migrationSourceBinding.js +30 -0
  332. package/dist/state/objectiveExperimentEntities.js +322 -0
  333. package/dist/state/planEntities.js +1027 -0
  334. package/dist/state/planIdentity.js +47 -0
  335. package/dist/state/planLineageValidation.js +52 -0
  336. package/dist/state/planReplacementTransaction.js +475 -0
  337. package/dist/state/planRetrieval.js +313 -0
  338. package/dist/state/planTaskRetrieval.js +294 -0
  339. package/dist/state/progressEntities.js +512 -0
  340. package/dist/state/progressGlossaryCaveat.js +168 -0
  341. package/dist/state/progressPublicationOrder.js +19 -0
  342. package/dist/state/progressWritePolicy.js +33 -0
  343. package/dist/state/projectRoot.js +62 -0
  344. package/dist/state/projectionPolicy.js +190 -0
  345. package/dist/state/retrievalAuthority.js +156 -0
  346. package/dist/state/safeProjectFile.js +155 -0
  347. package/dist/state/startupAnalysis/benchmark.js +92 -27
  348. package/dist/state/startupAnalysis/contract.js +48 -10
  349. package/dist/state/startupAnalysis/helpers.js +27 -73
  350. package/dist/state/startupAnalysis/index.js +0 -1
  351. package/dist/state/startupAnalysis/metrics.js +25 -19
  352. package/dist/state/startupAnalysis/records.js +13 -10
  353. package/dist/state/startupAnalysis/report.js +26 -38
  354. package/dist/state/startupAnalysis/threshold.js +19 -7
  355. package/dist/state/startupAnalysis.js +0 -1
  356. package/dist/state/startupProjection.js +499 -0
  357. package/dist/state/stateMode.js +222 -0
  358. package/dist/state/stateStorageAuthority.js +47 -0
  359. package/dist/state/summaryEntityRead.js +25 -0
  360. package/dist/state/summaryMigrationProvenance.js +66 -0
  361. package/dist/state/summarySourceRowAuthority.js +36 -0
  362. package/dist/state/todoActivationSafety.js +58 -0
  363. package/dist/state/todoDocsEntities.js +1124 -0
  364. package/dist/state/todoDocsEntityValidation.js +158 -0
  365. package/dist/state/todoMarkdownProjection.js +51 -0
  366. package/dist/state/todoReconciliationActivation.js +182 -0
  367. package/dist/state/todoReconciliationInspection.js +171 -0
  368. package/dist/state/todoReconciliationRepair.js +318 -0
  369. package/dist/state/todoReconciliationTransaction.js +595 -0
  370. package/dist/state/write/assign.js +20 -0
  371. package/dist/state/write/candidateMutation.js +269 -0
  372. package/dist/state/write/errors.js +11 -0
  373. package/dist/state/write/experimentPublication.js +192 -0
  374. package/dist/state/write/explain.js +377 -0
  375. package/dist/state/write/fields.js +61 -0
  376. package/dist/state/write/glossaryPublication.js +263 -0
  377. package/dist/state/write/grammar.js +285 -0
  378. package/dist/state/write/helpers.js +29 -0
  379. package/dist/state/write/index.js +12 -0
  380. package/dist/state/write/input.js +391 -0
  381. package/dist/state/write/lock.js +837 -0
  382. package/dist/state/write/mutation.js +234 -0
  383. package/dist/state/write/operations.js +170 -0
  384. package/dist/state/write/planEvaluation.js +128 -0
  385. package/dist/state/write/planPublication.js +179 -0
  386. package/dist/state/write/runtimeOperations.js +146 -0
  387. package/dist/state/write/serialize.js +1 -0
  388. package/dist/state/write/transaction.js +57 -0
  389. package/dist/state/write/validate.js +7 -0
  390. package/dist/upgrade/appContentRefresh.js +383 -0
  391. package/dist/upgrade/appModel.js +8 -7
  392. package/dist/upgrade/atomicWriter.js +1 -0
  393. package/dist/upgrade/bundleEvidence.js +33 -0
  394. package/dist/upgrade/channels.js +12 -8
  395. package/dist/upgrade/compatibility.js +56 -21
  396. package/dist/upgrade/doctor.js +165 -199
  397. package/dist/upgrade/doctorClassifier.js +187 -0
  398. package/dist/upgrade/installedHooksRetirement.js +196 -0
  399. package/dist/upgrade/legacyAgentCleanup.js +282 -0
  400. package/dist/upgrade/lifecycleUpgrade.js +113 -0
  401. package/dist/upgrade/migrateArtifactsV2ToV3.js +375 -79
  402. package/dist/upgrade/migrationPublication.js +122 -0
  403. package/dist/upgrade/nextMajorDoctor.js +29 -10
  404. package/dist/upgrade/npxPlatformStatus.js +22 -0
  405. package/dist/upgrade/projectIntegration.js +145 -189
  406. package/dist/upgrade/projectIntegrationDecision.js +50 -0
  407. package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
  408. package/dist/upgrade/runtimeMigration.js +272 -373
  409. package/dist/upgrade/upgradeCommands.js +14 -1
  410. package/dist/upgrade/upgradeLock.js +85 -0
  411. package/dist/upgrade/upgradeOrchestrator.js +263 -59
  412. package/dist/upgrade/v3CapabilitySurface.js +2 -3
  413. package/dist/upgrade/versionResolution.js +2 -3
  414. package/dist/validate/activationArtifactEvidence.js +852 -0
  415. package/dist/validate/activationArtifactEvidenceTypes.js +12 -0
  416. package/dist/validate/activationConjunction.js +816 -0
  417. package/dist/validate/activationEvidenceManifest.js +531 -0
  418. package/dist/validate/activationPackageSemantics.js +29 -0
  419. package/dist/validate/appHomeContract.js +2 -8
  420. package/dist/validate/bootstrapAuthority.js +44 -0
  421. package/dist/validate/capability.js +133 -12
  422. package/dist/validate/crossCapability.js +15 -10
  423. package/dist/validate/retainedReferenceAuthority.js +879 -0
  424. package/dist/validate/selfAudit.js +39 -45
  425. package/dist/validate/v1LegacyCruft.js +131 -0
  426. package/dist/validate/vocabularyAuthority.js +18 -13
  427. package/package.json +60 -29
  428. package/bundle/references/adapters/cursor.md +0 -213
  429. package/bundle/references/adapters/opencode.md +0 -530
  430. package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
  431. package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
  432. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
  433. package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -548
  434. package/bundle/references/adapters/runtime-feature-parity.md +0 -189
  435. package/bundle/references/analysis/benchmark.md +0 -267
  436. package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
  437. package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
  438. package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -369
  439. package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -250
  440. package/bundle/references/cli/capability-tool-classification.yaml +0 -53
  441. package/bundle/references/cli/coexistence-probe.yaml +0 -9
  442. package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
  443. package/bundle/references/cli/single-name-protocol.yaml +0 -42
  444. package/bundle/references/cli/upgrade-repair-wording.md +0 -31
  445. package/bundle/references/cli/v3-handoff-manifest.schema.yaml +0 -98
  446. package/bundle/references/meta/documentation-inventory.md +0 -49
  447. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  448. package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
  449. package/bundle/skills/agentera/agents/hej.toml +0 -6
  450. package/bundle/skills/agentera/agents/inspektera.toml +0 -6
  451. package/bundle/skills/agentera/agents/inspirera.toml +0 -6
  452. package/bundle/skills/agentera/agents/optimera.toml +0 -6
  453. package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
  454. package/bundle/skills/agentera/agents/planera.toml +0 -6
  455. package/bundle/skills/agentera/agents/profilera.toml +0 -6
  456. package/bundle/skills/agentera/agents/realisera.toml +0 -6
  457. package/bundle/skills/agentera/agents/resonera.toml +0 -6
  458. package/bundle/skills/agentera/agents/visionera.toml +0 -6
  459. package/bundle/skills/agentera/agents/visualisera.toml +0 -6
  460. package/bundle/skills/agentera/capabilities/dokumentera/schemas/artifacts.yaml +0 -73
  461. package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +0 -35
  462. package/bundle/skills/agentera/capabilities/hej/schemas/artifacts.yaml +0 -69
  463. package/bundle/skills/agentera/capabilities/hej/schemas/triggers.yaml +0 -58
  464. package/bundle/skills/agentera/capabilities/inspektera/schemas/artifacts.yaml +0 -76
  465. package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +0 -38
  466. package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +0 -24
  467. package/bundle/skills/agentera/capabilities/inspirera/schemas/triggers.yaml +0 -34
  468. package/bundle/skills/agentera/capabilities/optimera/schemas/triggers.yaml +0 -39
  469. package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +0 -64
  470. package/bundle/skills/agentera/capabilities/orkestrera/schemas/triggers.yaml +0 -42
  471. package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +0 -120
  472. package/bundle/skills/agentera/capabilities/planera/schemas/artifacts.yaml +0 -62
  473. package/bundle/skills/agentera/capabilities/planera/schemas/triggers.yaml +0 -34
  474. package/bundle/skills/agentera/capabilities/planera/schemas/validation.yaml +0 -61
  475. package/bundle/skills/agentera/capabilities/profilera/schemas/artifacts.yaml +0 -18
  476. package/bundle/skills/agentera/capabilities/profilera/schemas/triggers.yaml +0 -45
  477. package/bundle/skills/agentera/capabilities/profilera/schemas/validation.yaml +0 -57
  478. package/bundle/skills/agentera/capabilities/realisera/schemas/artifacts.yaml +0 -80
  479. package/bundle/skills/agentera/capabilities/realisera/schemas/triggers.yaml +0 -39
  480. package/bundle/skills/agentera/capabilities/realisera/schemas/validation.yaml +0 -110
  481. package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +0 -47
  482. package/bundle/skills/agentera/capabilities/resonera/schemas/triggers.yaml +0 -46
  483. package/bundle/skills/agentera/capabilities/resonera/schemas/validation.yaml +0 -77
  484. package/bundle/skills/agentera/capabilities/visionera/schemas/triggers.yaml +0 -41
  485. package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +0 -33
  486. package/bundle/skills/agentera/references/contract.md +0 -1039
  487. package/dist/analytics/extractCorpus/cli.js.map +0 -1
  488. package/dist/analytics/extractCorpus/copilotSessions.js.map +0 -1
  489. package/dist/analytics/extractCorpus/core.js.map +0 -1
  490. package/dist/analytics/extractCorpus/corpus.js.map +0 -1
  491. package/dist/analytics/extractCorpus/cursorSessions.js.map +0 -1
  492. package/dist/analytics/extractCorpus/filesystemSources.js.map +0 -1
  493. package/dist/analytics/extractCorpus/index.js.map +0 -1
  494. package/dist/analytics/extractCorpus/jsonlSessions.js.map +0 -1
  495. package/dist/analytics/extractCorpus/sqliteSessions.js.map +0 -1
  496. package/dist/analytics/extractCorpus.js.map +0 -1
  497. package/dist/analytics/usageStats.js.map +0 -1
  498. package/dist/bin/agentera.js.map +0 -1
  499. package/dist/capabilities/dokumentera/instructions.js +0 -6
  500. package/dist/capabilities/dokumentera/instructions.js.map +0 -1
  501. package/dist/capabilities/hej/instructions.js +0 -6
  502. package/dist/capabilities/hej/instructions.js.map +0 -1
  503. package/dist/capabilities/index.js.map +0 -1
  504. package/dist/capabilities/inspektera/instructions.js +0 -6
  505. package/dist/capabilities/inspektera/instructions.js.map +0 -1
  506. package/dist/capabilities/inspirera/instructions.js +0 -6
  507. package/dist/capabilities/inspirera/instructions.js.map +0 -1
  508. package/dist/capabilities/optimera/instructions.js +0 -6
  509. package/dist/capabilities/optimera/instructions.js.map +0 -1
  510. package/dist/capabilities/orkestrera/instructions.js +0 -6
  511. package/dist/capabilities/orkestrera/instructions.js.map +0 -1
  512. package/dist/capabilities/planera/instructions.js +0 -6
  513. package/dist/capabilities/planera/instructions.js.map +0 -1
  514. package/dist/capabilities/profilera/instructions.js +0 -6
  515. package/dist/capabilities/profilera/instructions.js.map +0 -1
  516. package/dist/capabilities/realisera/instructions.js +0 -6
  517. package/dist/capabilities/realisera/instructions.js.map +0 -1
  518. package/dist/capabilities/resonera/instructions.js +0 -6
  519. package/dist/capabilities/resonera/instructions.js.map +0 -1
  520. package/dist/capabilities/visionera/instructions.js +0 -6
  521. package/dist/capabilities/visionera/instructions.js.map +0 -1
  522. package/dist/capabilities/visualisera/instructions.js +0 -6
  523. package/dist/capabilities/visualisera/instructions.js.map +0 -1
  524. package/dist/cli/appContext.js.map +0 -1
  525. package/dist/cli/argvalidate.js.map +0 -1
  526. package/dist/cli/capabilityContext/benchmark.js.map +0 -1
  527. package/dist/cli/capabilityContext/bespoke.js.map +0 -1
  528. package/dist/cli/capabilityContext/closeout.js.map +0 -1
  529. package/dist/cli/capabilityContext/contract.js.map +0 -1
  530. package/dist/cli/capabilityContext/evidence.js.map +0 -1
  531. package/dist/cli/capabilityContext/index.js.map +0 -1
  532. package/dist/cli/capabilityContext/orchestration.js.map +0 -1
  533. package/dist/cli/capabilityContext/planState.js.map +0 -1
  534. package/dist/cli/capabilityContext/progress.js.map +0 -1
  535. package/dist/cli/capabilityContext/realisera.js +0 -174
  536. package/dist/cli/capabilityContext/realisera.js.map +0 -1
  537. package/dist/cli/capabilityContext/shared.js.map +0 -1
  538. package/dist/cli/capabilityContext/slim.js.map +0 -1
  539. package/dist/cli/capabilityContext/startup.js.map +0 -1
  540. package/dist/cli/capabilityContext/types.js.map +0 -1
  541. package/dist/cli/capabilityContext.js.map +0 -1
  542. package/dist/cli/commands/backfill.js +0 -84
  543. package/dist/cli/commands/backfill.js.map +0 -1
  544. package/dist/cli/commands/capability.js.map +0 -1
  545. package/dist/cli/commands/compact.js.map +0 -1
  546. package/dist/cli/commands/doctor.js.map +0 -1
  547. package/dist/cli/commands/lint.js.map +0 -1
  548. package/dist/cli/commands/prime.js.map +0 -1
  549. package/dist/cli/commands/query.js.map +0 -1
  550. package/dist/cli/commands/report.js.map +0 -1
  551. package/dist/cli/commands/schema.js.map +0 -1
  552. package/dist/cli/commands/state/decisions.js.map +0 -1
  553. package/dist/cli/commands/state/docs.js.map +0 -1
  554. package/dist/cli/commands/state/experiments.js.map +0 -1
  555. package/dist/cli/commands/state/health.js.map +0 -1
  556. package/dist/cli/commands/state/index.js.map +0 -1
  557. package/dist/cli/commands/state/objective.js.map +0 -1
  558. package/dist/cli/commands/state/plan.js.map +0 -1
  559. package/dist/cli/commands/state/progress.js.map +0 -1
  560. package/dist/cli/commands/state/shared.js.map +0 -1
  561. package/dist/cli/commands/state/todo.js.map +0 -1
  562. package/dist/cli/commands/state.js +0 -1023
  563. package/dist/cli/commands/state.js.map +0 -1
  564. package/dist/cli/commands/upgrade.js.map +0 -1
  565. package/dist/cli/commands/validate.js.map +0 -1
  566. package/dist/cli/commands/verify.js.map +0 -1
  567. package/dist/cli/dispatch/check.js.map +0 -1
  568. package/dist/cli/dispatch/index.js.map +0 -1
  569. package/dist/cli/dispatch/lifecycle.js.map +0 -1
  570. package/dist/cli/dispatch/prime.js.map +0 -1
  571. package/dist/cli/dispatch/shared.js.map +0 -1
  572. package/dist/cli/dispatch/state.js.map +0 -1
  573. package/dist/cli/dispatch.js.map +0 -1
  574. package/dist/cli/errors.js.map +0 -1
  575. package/dist/cli/help.js.map +0 -1
  576. package/dist/cli/orientation.js.map +0 -1
  577. package/dist/cli/prime-blob.js.map +0 -1
  578. package/dist/cli/stateQuery.js.map +0 -1
  579. package/dist/cli/structured.js.map +0 -1
  580. package/dist/cli/todoMarkdown.js.map +0 -1
  581. package/dist/core/difflib.js.map +0 -1
  582. package/dist/core/git.js +0 -43
  583. package/dist/core/git.js.map +0 -1
  584. package/dist/core/paths.js.map +0 -1
  585. package/dist/core/pyjson.js.map +0 -1
  586. package/dist/core/sourceRoot.js.map +0 -1
  587. package/dist/core/toml.js.map +0 -1
  588. package/dist/core/yaml.js.map +0 -1
  589. package/dist/eval/evalSkills.js.map +0 -1
  590. package/dist/eval/semanticEval.js.map +0 -1
  591. package/dist/eval/semanticFixtures.js.map +0 -1
  592. package/dist/hooks/common.js.map +0 -1
  593. package/dist/hooks/compaction/apply.js.map +0 -1
  594. package/dist/hooks/compaction/dryRun.js.map +0 -1
  595. package/dist/hooks/compaction/index.js.map +0 -1
  596. package/dist/hooks/compaction/parse.js.map +0 -1
  597. package/dist/hooks/compaction/retention.js.map +0 -1
  598. package/dist/hooks/compaction/status.js.map +0 -1
  599. package/dist/hooks/compaction/types.js.map +0 -1
  600. package/dist/hooks/compaction.js +0 -935
  601. package/dist/hooks/compaction.js.map +0 -1
  602. package/dist/hooks/cursorPreToolUse.js +0 -19
  603. package/dist/hooks/cursorPreToolUse.js.map +0 -1
  604. package/dist/hooks/cursorSessionStart.js +0 -71
  605. package/dist/hooks/cursorSessionStart.js.map +0 -1
  606. package/dist/hooks/sessionStart.js +0 -209
  607. package/dist/hooks/sessionStart.js.map +0 -1
  608. package/dist/hooks/sessionStop.js +0 -203
  609. package/dist/hooks/sessionStop.js.map +0 -1
  610. package/dist/hooks/validateArtifact/agentFacing.js.map +0 -1
  611. package/dist/hooks/validateArtifact/index.js.map +0 -1
  612. package/dist/hooks/validateArtifact/markdown.js.map +0 -1
  613. package/dist/hooks/validateArtifact/runtime.js +0 -83
  614. package/dist/hooks/validateArtifact/runtime.js.map +0 -1
  615. package/dist/hooks/validateArtifact/schema.js.map +0 -1
  616. package/dist/hooks/validateArtifact/traversal.js.map +0 -1
  617. package/dist/hooks/validateArtifact/violations.js.map +0 -1
  618. package/dist/hooks/validateArtifact.js +0 -924
  619. package/dist/hooks/validateArtifact.js.map +0 -1
  620. package/dist/migrate/v2HandoffManifest.js.map +0 -1
  621. package/dist/registries/artifactProtocolIds.js.map +0 -1
  622. package/dist/registries/artifactRegistry.js.map +0 -1
  623. package/dist/registries/capabilityContract.js.map +0 -1
  624. package/dist/registries/evaluatorHandoffContract.js.map +0 -1
  625. package/dist/registries/packageRegistry.js.map +0 -1
  626. package/dist/registries/runtimeAdapterRegistry.js +0 -315
  627. package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
  628. package/dist/release/releaseMetadata.js.map +0 -1
  629. package/dist/setup/codex/agents.js +0 -96
  630. package/dist/setup/codex/agents.js.map +0 -1
  631. package/dist/setup/codex/cli.js +0 -161
  632. package/dist/setup/codex/cli.js.map +0 -1
  633. package/dist/setup/codex/configToml.js +0 -644
  634. package/dist/setup/codex/configToml.js.map +0 -1
  635. package/dist/setup/codex/constants.js +0 -29
  636. package/dist/setup/codex/constants.js.map +0 -1
  637. package/dist/setup/codex/installRoot.js +0 -64
  638. package/dist/setup/codex/installRoot.js.map +0 -1
  639. package/dist/setup/codex/state.js +0 -270
  640. package/dist/setup/codex/state.js.map +0 -1
  641. package/dist/setup/codex.js +0 -12
  642. package/dist/setup/codex.js.map +0 -1
  643. package/dist/setup/copilot.js +0 -227
  644. package/dist/setup/copilot.js.map +0 -1
  645. package/dist/setup/cursor.js +0 -127
  646. package/dist/setup/cursor.js.map +0 -1
  647. package/dist/setup/doctor/core.js +0 -300
  648. package/dist/setup/doctor/core.js.map +0 -1
  649. package/dist/setup/doctor/diagnostics.js +0 -247
  650. package/dist/setup/doctor/diagnostics.js.map +0 -1
  651. package/dist/setup/doctor/opencode.js +0 -281
  652. package/dist/setup/doctor/opencode.js.map +0 -1
  653. package/dist/setup/doctor/report.js +0 -474
  654. package/dist/setup/doctor/report.js.map +0 -1
  655. package/dist/setup/doctor.js +0 -10
  656. package/dist/setup/doctor.js.map +0 -1
  657. package/dist/setup/opencode.js.map +0 -1
  658. package/dist/setup/smokeChecks.js.map +0 -1
  659. package/dist/state/installRoot.js.map +0 -1
  660. package/dist/state/progressCommit.js +0 -289
  661. package/dist/state/progressCommit.js.map +0 -1
  662. package/dist/state/startupAnalysis/benchmark.js.map +0 -1
  663. package/dist/state/startupAnalysis/contract.js.map +0 -1
  664. package/dist/state/startupAnalysis/helpers.js.map +0 -1
  665. package/dist/state/startupAnalysis/index.js.map +0 -1
  666. package/dist/state/startupAnalysis/metrics.js.map +0 -1
  667. package/dist/state/startupAnalysis/records.js.map +0 -1
  668. package/dist/state/startupAnalysis/report.js.map +0 -1
  669. package/dist/state/startupAnalysis/threshold.js.map +0 -1
  670. package/dist/state/startupAnalysis.js.map +0 -1
  671. package/dist/upgrade/appModel.js.map +0 -1
  672. package/dist/upgrade/channels.js.map +0 -1
  673. package/dist/upgrade/coexistenceProbe.js +0 -83
  674. package/dist/upgrade/coexistenceProbe.js.map +0 -1
  675. package/dist/upgrade/compatibility.js.map +0 -1
  676. package/dist/upgrade/doctor.js.map +0 -1
  677. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -570
  678. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
  679. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
  680. package/dist/upgrade/nextMajorDoctor.js.map +0 -1
  681. package/dist/upgrade/projectIntegration.js.map +0 -1
  682. package/dist/upgrade/runtimeMigration.js.map +0 -1
  683. package/dist/upgrade/upgradeCommands.js.map +0 -1
  684. package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
  685. package/dist/upgrade/v3CapabilitySurface.js.map +0 -1
  686. package/dist/upgrade/versionResolution.js.map +0 -1
  687. package/dist/validate/appHomeContract.js.map +0 -1
  688. package/dist/validate/capability.js.map +0 -1
  689. package/dist/validate/crossCapability.js.map +0 -1
  690. package/dist/validate/lifecycleAdapters.js +0 -772
  691. package/dist/validate/lifecycleAdapters.js.map +0 -1
  692. package/dist/validate/selfAudit.js.map +0 -1
  693. package/dist/validate/vocabularyAuthority.js.map +0 -1
  694. /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
  695. /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
  696. /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
@@ -1,20 +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";
9
10
  import { isStableSuccessorAnnounced } from "./nextMajorDoctor.js";
10
11
  import { buildUpgradeCommands, commandText } from "./upgradeCommands.js";
11
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
+ */
12
50
  export const APP_UP_TO_DATE = "up_to_date";
13
51
  export const APP_OUTDATED = "outdated";
14
52
  export const APP_REPAIR_NEEDED = "repair_needed";
15
53
  export const APP_MIGRATION_NEEDED = "migration_needed";
16
54
  export const APP_MANUAL_REVIEW_NEEDED = "manual_review_needed";
17
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
+ }
18
66
  export const BUNDLE_MARKER = ".agentera-bundle.json";
19
67
  /** Agentera user state preserved during v2→v3 managed app-home cleanup. */
20
68
  export const AGENTERA_USER_STATE_NAMES = new Set([
@@ -31,6 +79,7 @@ export const ROOT_USER_STATE_FILE_NAMES = new Set([
31
79
  "TODO.md",
32
80
  "CHANGELOG.md",
33
81
  "DESIGN.md",
82
+ "v3-handoff.json",
34
83
  ]);
35
84
  export const ROOT_USER_STATE_DIR_NAMES = new Set([
36
85
  "history",
@@ -39,10 +88,6 @@ export const ROOT_USER_STATE_DIR_NAMES = new Set([
39
88
  "intermediate",
40
89
  "sessions",
41
90
  ]);
42
- function hasBundleRootEvidence(root) {
43
- return (isFile(path.join(root, "scripts", "agentera")) &&
44
- isFile(path.join(root, "skills", "agentera", "SKILL.md")));
45
- }
46
91
  function legacyDefaultAppHome(home) {
47
92
  return resolvePath(path.join(expanduser(home), ".agents", "agentera"));
48
93
  }
@@ -62,7 +107,12 @@ function agenteraUserStateDirIsRecognized(p) {
62
107
  if (AGENTERA_USER_STATE_NAMES.has(entry) && st.isFile()) {
63
108
  continue;
64
109
  }
65
- 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)) {
66
116
  continue;
67
117
  }
68
118
  return false;
@@ -107,34 +157,19 @@ function sourceKey(rootSource) {
107
157
  }
108
158
  return "explicit";
109
159
  }
110
- function recoverableStaleDefaultSignal(appHome, roots) {
111
- return {
112
- status: APP_REPAIR_NEEDED,
113
- kind: "recoverable_stale_default",
114
- message: "Agentera found an old app directory and can repair it without asking you to edit shell settings",
115
- deprecatedDefaultAppHome: appHome,
116
- managedAppRoot: roots.managedAppRoot,
117
- };
118
- }
119
- function userDataOnlySignal(appHome, roots) {
120
- return {
121
- status: APP_REPAIR_NEEDED,
122
- kind: "user_data_only_app_home",
123
- message: "This Agentera directory only has your Agentera data, so Agentera can safely add fresh app files under app/",
124
- appHome,
125
- managedAppRoot: roots.managedAppRoot,
126
- };
127
- }
128
- function blockedRootRecoveryMessage(_rootSource) {
129
- return "choose a different Agentera directory, or use --force only if you checked this directory and want Agentera to replace files there";
130
- }
131
160
  export function buildDoctorStatus(installRoot, opts) {
132
161
  const rootSource = opts.rootSource;
133
162
  const sourceRoot = opts.sourceRoot;
134
163
  const home = opts.home;
135
164
  const project = opts.project;
136
165
  const expectedCommands = opts.expectedCommands ?? EXPECTED_STATE_COMMANDS;
137
- 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
+ });
138
173
  // Fully self-contained npx bundle: the bundle IS the app and is always current
139
174
  // (its version is the package version), so there is no install/upgrade step.
140
175
  // Report it as the authoritative, up-to-date app home. (Sentinel-gated; never
@@ -149,22 +184,56 @@ export function buildDoctorStatus(installRoot, opts) {
149
184
  appHomeSource: "bundled app",
150
185
  managedAppRoot: sourceRoot,
151
186
  userDataRoot: sourceRoot,
152
- activeBundleRoot: sourceRoot,
187
+ activeAppRoot: sourceRoot,
153
188
  authoritativeRoot: sourceRoot,
154
189
  skillRoot: path.join(sourceRoot, "skills", "agentera"),
155
190
  runtimeRoot: sourceRoot,
156
191
  sourceRoot,
157
192
  installRoot: sourceRoot,
158
193
  installRootSource: "bundled app",
159
- home,
160
- project,
161
194
  rootStatus: "bundled",
195
+ installKind: "v3_self_contained_npm",
162
196
  markerVersion: bundleExpected,
163
197
  signals: [],
164
198
  dryRunCommand: null,
165
199
  applyCommand: null,
166
- retryCommand: commandText(["npx", "-y", "agentera", expectedCommands[0] ?? "prime"]),
167
- 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,
168
237
  };
169
238
  }
170
239
  const expected = opts.expectedVersion || loadSuiteVersion(sourceRoot) || "unknown";
@@ -175,153 +244,53 @@ export function buildDoctorStatus(installRoot, opts) {
175
244
  expectedVersion: expected,
176
245
  });
177
246
  const markerVersion = classification.current_version;
178
- const signals = [];
179
- let blocked = false;
180
247
  const recoverableStaleDefault = isRecoverableStaleDefaultAppHome(installRoot, rootSource, home);
181
248
  const legacyBundleRoot = activeBundleRoot === installRoot &&
182
249
  hasBundleRootEvidence(installRoot) &&
183
250
  !pathExists(path.join(installRoot, ".git"));
184
- let rootStatus;
185
- if (classification.kind === "missing_default") {
186
- rootStatus = "missing";
187
- signals.push({
188
- status: APP_REPAIR_NEEDED,
189
- kind: "missing_bundle",
190
- message: "Agentera is not installed in the normal directory yet",
191
- });
192
- }
193
- else if (classification.kind === "missing_explicit_or_environment" && recoverableStaleDefault) {
194
- rootStatus = "missing";
195
- signals.push(recoverableStaleDefaultSignal(installRoot, roots));
196
- }
197
- else if (classification.kind === "missing_explicit_or_environment") {
198
- rootStatus = "missing";
199
- blocked = true;
200
- signals.push({
201
- status: APP_MANUAL_REVIEW_NEEDED,
202
- kind: "invalid_install_root",
203
- message: "Agentera was told to use a directory that does not exist. " +
204
- "Choose an existing Agentera directory, or install into the normal Agentera directory.",
205
- });
206
- }
207
- else if (classification.kind === "file_valued_root") {
208
- rootStatus = "invalid";
209
- blocked = true;
210
- signals.push({
211
- status: APP_MANUAL_REVIEW_NEEDED,
212
- kind: "invalid_install_root",
213
- message: `Agentera was told to use a file instead of a directory; ${blockedRootRecoveryMessage(rootSource)}`,
214
- });
215
- }
216
- else if ((classification.kind === "invalid_bundle" || classification.kind === "unmanaged_directory") &&
217
- recoverableStaleDefault) {
218
- rootStatus = "stale_default";
219
- signals.push(recoverableStaleDefaultSignal(installRoot, roots));
220
- }
221
- else if (classification.kind === "unmanaged_directory" && appHomeIsUserDataOnly(installRoot)) {
222
- rootStatus = "user_data_only";
223
- signals.push(userDataOnlySignal(installRoot, roots));
224
- }
225
- else if (classification.kind === "unmanaged_directory") {
226
- rootStatus = "unmanaged";
227
- blocked = true;
228
- signals.push({
229
- status: APP_MANUAL_REVIEW_NEEDED,
230
- kind: "unmanaged_install_root",
231
- message: `This directory already has files Agentera does not recognize, so Agentera will not change it automatically; ${blockedRootRecoveryMessage(rootSource)}`,
232
- });
233
- }
234
- else if (classification.kind === "invalid_bundle") {
235
- rootStatus = "invalid";
236
- blocked = true;
237
- signals.push({
238
- status: APP_MANUAL_REVIEW_NEEDED,
239
- kind: "invalid_bundle",
240
- message: `This directory looks like a broken Agentera install; ${blockedRootRecoveryMessage(rootSource)}`,
241
- });
242
- }
243
- else {
244
- rootStatus = "managed";
245
- if (legacyBundleRoot) {
246
- signals.push({
247
- status: APP_MIGRATION_NEEDED,
248
- kind: APP_MIGRATION_NEEDED,
249
- message: "Agentera app files are in the old place and can be moved into app/",
250
- legacyBundleRoot: installRoot,
251
- managedAppRoot: roots.managedAppRoot,
252
- });
253
- }
254
- const reason = classification.diagnostic.evidence.reason;
255
- if (classification.kind === "managed_stale" && reason === "missing_marker") {
256
- if (recoverableStaleDefault) {
257
- signals.push(recoverableStaleDefaultSignal(installRoot, roots));
258
- }
259
- signals.push({
260
- status: APP_REPAIR_NEEDED,
261
- kind: "missing_marker",
262
- message: "Agentera app files need repair",
263
- });
264
- }
265
- else if (classification.kind === "managed_stale" && reason === "version_mismatch") {
266
- if (recoverableStaleDefault) {
267
- signals.push(recoverableStaleDefaultSignal(installRoot, roots));
268
- }
269
- signals.push({
270
- status: APP_OUTDATED,
271
- kind: "version_mismatch",
272
- expected,
273
- actual: markerVersion,
274
- message: "Agentera app files are valid but need an update to the expected version",
275
- });
276
- }
277
- const probe = probeCli
278
- ? (opts.probeRunner ?? defaultProbe)({
279
- bundleRoot: activeBundleRoot,
280
- appHome: installRoot,
281
- project,
282
- expectedCommands,
283
- })
284
- : { ok: true };
285
- if (!probe.ok) {
286
- let kind = "cli_probe_unavailable";
287
- if (probe.returnCode !== null && probe.returnCode !== undefined && probe.returnCode !== 0) {
288
- kind = "cli_probe_failed";
289
- }
290
- else if (probe.missingCommands && probe.missingCommands.length > 0) {
291
- kind = "missing_command";
292
- }
293
- signals.push({
294
- status: APP_REPAIR_NEEDED,
295
- kind,
296
- message: probe.message,
297
- returnCode: probe.returnCode ?? null,
298
- missingCommands: probe.missingCommands ?? [],
299
- stdoutTail: probe.stdoutTail ?? [],
300
- stderrTail: probe.stderrTail ?? [],
301
- });
302
- }
303
- }
304
- const env = { ...(opts.env ?? process.env), HOME: home };
305
- const channel = resolveUpdateChannel({
306
- channel: opts.channel ?? null,
307
- env,
308
- home,
309
- sourceRoot,
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,
310
264
  });
265
+ const rootStatus = classified.rootStatus;
266
+ const signals = classified.signals;
267
+ const blocked = classified.blocked;
311
268
  const install = classifyInstall({ appHome: installRoot, sourceRoot });
312
269
  const crossMajorDetected = crossMajorBoundaryApplies(install, sourceRoot);
313
- const successorAnnounced = isStableSuccessorAnnounced(sourceRoot);
270
+ const successorAnnounced = isStableSuccessorAnnounced(sourceRoot, "stable");
271
+ if (opts.observation) {
272
+ opts.observation.install = install;
273
+ opts.observation.successorAnnounced = successorAnnounced;
274
+ }
314
275
  const crossMajorBoundary = crossMajorDetected && successorAnnounced;
276
+ let crossMajorPending = false;
315
277
  if (crossMajorDetected && !successorAnnounced) {
316
- for (let i = signals.length - 1; i >= 0; i--) {
317
- const signal = signals[i];
278
+ for (const signal of signals) {
318
279
  if (signal.kind !== "version_mismatch") {
319
280
  continue;
320
281
  }
321
282
  const actualMajor = parseSemverMajor(String(signal.actual ?? markerVersion ?? "")) ?? 0;
322
283
  const expectedMajor = parseSemverMajor(String(signal.expected ?? expected)) ?? 0;
323
284
  if (actualMajor > 0 && actualMajor < 3 && expectedMajor >= 3) {
324
- signals.splice(i, 1);
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;
325
294
  }
326
295
  }
327
296
  }
@@ -335,11 +304,13 @@ export function buildDoctorStatus(installRoot, opts) {
335
304
  ? APP_MANUAL_REVIEW_NEEDED
336
305
  : signals.some((s) => s.kind === APP_MIGRATION_NEEDED)
337
306
  ? APP_MIGRATION_NEEDED
338
- : signals.some((s) => s.status === APP_REPAIR_NEEDED)
339
- ? APP_REPAIR_NEEDED
340
- : signals.some((s) => s.status === APP_OUTDATED)
341
- ? APP_OUTDATED
342
- : 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;
343
314
  return {
344
315
  schemaVersion: "agentera.bundleStatus.v1",
345
316
  status,
@@ -348,45 +319,41 @@ export function buildDoctorStatus(installRoot, opts) {
348
319
  appHomeSource: rootSource,
349
320
  managedAppRoot: roots.managedAppRoot,
350
321
  userDataRoot: installRoot,
351
- activeBundleRoot,
322
+ activeAppRoot: activeBundleRoot,
352
323
  authoritativeRoot: roots.managedAppRoot,
353
324
  skillRoot: roots.skillRoot,
354
325
  runtimeRoot: roots.runtimeRoot,
355
326
  sourceRoot,
356
327
  installRoot,
357
328
  installRootSource: rootSource,
358
- home,
359
- project,
360
329
  rootStatus,
330
+ installKind: install.kind,
361
331
  markerVersion,
362
332
  signals,
363
- dryRunCommand: blocked || status === APP_UP_TO_DATE ? null : upgradeCommands.dryRunCommand,
364
- 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,
365
339
  updateChannel: channel.channel,
340
+ crossMajorBoundaryDetected: crossMajorDetected,
366
341
  crossMajorBoundary,
367
- retryCommand: commandText([
368
- "node",
369
- path.join(activeBundleRoot, "scripts", "agentera"),
370
- expectedCommands[0] ?? "prime",
371
- ]),
372
- approval: `approve app files repair for ${installRoot}`,
342
+ retryCommand: buildInvokingCliRetryCommand(sourceRoot, channel, env, expectedCommands[0] ?? "prime"),
373
343
  };
374
344
  }
375
- /** Default CLI probe placeholder (wired to the bundled TS CLI in Phase 8). */
376
- const defaultProbe = ({ expectedCommands }) => ({
377
- ok: false,
378
- command: null,
379
- returnCode: null,
380
- stdoutTail: [],
381
- stderrTail: [],
382
- missingCommands: [...expectedCommands],
383
- message: "CLI probe not yet wired to the bundled TS CLI",
384
- });
385
345
  export function publicDoctorStatus(status) {
386
- const pub = JSON.parse(JSON.stringify(status));
387
- delete pub.installRoot;
388
- delete pub.installRootSource;
389
- 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;
390
357
  }
391
358
  /** Oracle-pinned keys for `agentera doctor --format json` (parity-remaining-families.json). */
392
359
  export const DOCTOR_PARITY_JSON_KEYS = [
@@ -403,11 +370,10 @@ export const DOCTOR_PARITY_JSON_KEYS = [
403
370
  /** Public doctor JSON envelope: command label plus oracle structural keys only. */
404
371
  export function doctorParityJsonEnvelope(status) {
405
372
  const pub = publicDoctorStatus(status);
406
- const out = { command: "doctor" };
373
+ const out = { command: "doctor", install_track: projectInstallTrack(status.installKind) };
407
374
  for (const key of DOCTOR_PARITY_JSON_KEYS) {
408
375
  if (key in pub)
409
376
  out[key] = pub[key];
410
377
  }
411
378
  return out;
412
379
  }
413
- //# 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
+ }