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
@@ -0,0 +1,453 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { resolveSourceRoot } from "../core/sourceRoot.js";
4
+ import { loadYamlMapping } from "../core/yaml.js";
5
+ import { validateLifecycleOperationContractRoot } from "./lifecycleOperationContract.js";
6
+ import { LIFECYCLE_OPERATION_CONTRACT_RELATIVE_PATH } from "./lifecycleOperations.js";
7
+ export const LIFECYCLE_AUTHORITY_RELATIVE_PATH = "references/adapters/runtime-lifecycle-authority.yaml";
8
+ export const LIFECYCLE_ADAPTER_CONTRACT_RELATIVE_PATH = "references/adapters/runtime-lifecycle-adapters.yaml";
9
+ export const NATIVE_RESOURCE_CLEANUP_CONTRACT_RELATIVE_PATH = "references/adapters/runtime-retired-resources.yaml";
10
+ const EXPECTED_EVIDENCE_FIELDS = ["host_present", "installed", "enabled", "trusted"];
11
+ export const LIFECYCLE_APPLICABILITY_VALUES = [
12
+ "required",
13
+ "conditional",
14
+ "not_applicable",
15
+ ];
16
+ export const LIFECYCLE_ACTION_CLASS_VALUES = [
17
+ "repairable_owned",
18
+ "manual_verification",
19
+ "unobservable_gap",
20
+ ];
21
+ export const LIFECYCLE_COMMAND_ELIGIBILITY_VALUES = [
22
+ "preview",
23
+ "apply",
24
+ "manual",
25
+ "diagnostic",
26
+ ];
27
+ const EVIDENCE_VALUES = new Set([
28
+ true,
29
+ false,
30
+ "unknown",
31
+ "denied",
32
+ "not_applicable",
33
+ ]);
34
+ const INVENTORY_DECLARATIONS = [
35
+ /^\s*["']?(?:active_runtimes|active_runtime_ids|active_runtime_order)["']?\s*:/,
36
+ /^\s*(?:export\s+)?const\s+(?:activeRuntimeIds|ACTIVE_RUNTIME_IDS)\s*=/,
37
+ ];
38
+ const INVENTORY_SCAN_EXTENSIONS = new Set([".json", ".ts", ".yaml", ".yml"]);
39
+ export class LifecycleAuthorityError extends Error {
40
+ constructor(message) {
41
+ super(message);
42
+ this.name = "LifecycleAuthorityError";
43
+ }
44
+ }
45
+ function isMapping(value) {
46
+ return value !== null && typeof value === "object" && !Array.isArray(value);
47
+ }
48
+ function stringField(value, key) {
49
+ return typeof value[key] === "string" ? value[key] : "";
50
+ }
51
+ function sourceError(sourcePath, location, message) {
52
+ return `${sourcePath}:${location}: ${message}`;
53
+ }
54
+ export function validateLifecycleAuthorityData(data, sourcePath = LIFECYCLE_AUTHORITY_RELATIVE_PATH) {
55
+ if (!isMapping(data))
56
+ return [sourceError(sourcePath, "1", "authority must be a YAML object")];
57
+ const errors = [];
58
+ if (data.status !== "migration_only_authority") {
59
+ errors.push(sourceError(sourcePath, "status", "must be migration_only_authority"));
60
+ }
61
+ if (data.schema_version !== "agentera.runtimeLifecycleAuthority.v1") {
62
+ errors.push(sourceError(sourcePath, "schema_version", "must be agentera.runtimeLifecycleAuthority.v1"));
63
+ }
64
+ if (data.decision !== 92) {
65
+ errors.push(sourceError(sourcePath, "decision", "must cite approved Decision 92"));
66
+ }
67
+ if (data.operation_contract !== LIFECYCLE_OPERATION_CONTRACT_RELATIVE_PATH) {
68
+ errors.push(sourceError(sourcePath, "operation_contract", `must point to ${LIFECYCLE_OPERATION_CONTRACT_RELATIVE_PATH}`));
69
+ }
70
+ if (data.adapter_contract !== LIFECYCLE_ADAPTER_CONTRACT_RELATIVE_PATH) {
71
+ errors.push(sourceError(sourcePath, "adapter_contract", `must point to ${LIFECYCLE_ADAPTER_CONTRACT_RELATIVE_PATH}`));
72
+ }
73
+ if (data.native_resource_cleanup_contract !== NATIVE_RESOURCE_CLEANUP_CONTRACT_RELATIVE_PATH) {
74
+ errors.push(sourceError(sourcePath, "native_resource_cleanup_contract", `must point to ${NATIVE_RESOURCE_CLEANUP_CONTRACT_RELATIVE_PATH}`));
75
+ }
76
+ const canonicalSkill = data.canonical_skill;
77
+ if (!isMapping(canonicalSkill) || canonicalSkill.path !== "~/.agents/skills/agentera") {
78
+ errors.push(sourceError(sourcePath, "canonical_skill.path", "must be ~/.agents/skills/agentera"));
79
+ }
80
+ if (!isMapping(canonicalSkill) || canonicalSkill.required_for_support_floor !== true) {
81
+ errors.push(sourceError(sourcePath, "canonical_skill.required_for_support_floor", "must be true"));
82
+ }
83
+ const projection = data.projection_contract;
84
+ if (!isMapping(projection) ||
85
+ projection.schema_version !== "agentera.runtimeLifecycleProjection.v1") {
86
+ errors.push(sourceError(sourcePath, "projection_contract.schema_version", "must be agentera.runtimeLifecycleProjection.v1"));
87
+ }
88
+ if (!isMapping(projection) || projection.snapshot_identity !== "deterministic_sha256") {
89
+ errors.push(sourceError(sourcePath, "projection_contract.snapshot_identity", "must be deterministic_sha256"));
90
+ }
91
+ if (!isMapping(projection) ||
92
+ JSON.stringify(projection.applicability) !== JSON.stringify(LIFECYCLE_APPLICABILITY_VALUES)) {
93
+ errors.push(sourceError(sourcePath, "projection_contract.applicability", `must be ${LIFECYCLE_APPLICABILITY_VALUES.join(", ")}`));
94
+ }
95
+ if (!isMapping(projection) ||
96
+ JSON.stringify(projection.action_classes) !== JSON.stringify(LIFECYCLE_ACTION_CLASS_VALUES)) {
97
+ errors.push(sourceError(sourcePath, "projection_contract.action_classes", `must be ${LIFECYCLE_ACTION_CLASS_VALUES.join(", ")}`));
98
+ }
99
+ if (!isMapping(projection) ||
100
+ JSON.stringify(projection.command_eligibility) !==
101
+ JSON.stringify(LIFECYCLE_COMMAND_ELIGIBILITY_VALUES)) {
102
+ errors.push(sourceError(sourcePath, "projection_contract.command_eligibility", `must be ${LIFECYCLE_COMMAND_ELIGIBILITY_VALUES.join(", ")}`));
103
+ }
104
+ if (!isMapping(projection) ||
105
+ projection.shared_resource_rule !== "selected_and_required_by_at_least_one_selected_runtime") {
106
+ errors.push(sourceError(sourcePath, "projection_contract.shared_resource_rule", "must require selection and at least one selected runtime"));
107
+ }
108
+ const evidence = data.evidence_contract;
109
+ const evidenceFields = isMapping(evidence) ? evidence.mandatory_fields : null;
110
+ if (JSON.stringify(evidenceFields) !== JSON.stringify(EXPECTED_EVIDENCE_FIELDS)) {
111
+ errors.push(sourceError(sourcePath, "evidence_contract.mandatory_fields", `must be ${EXPECTED_EVIDENCE_FIELDS.join(", ")}`));
112
+ }
113
+ const supportFloor = data.support_floor;
114
+ if (!isMapping(supportFloor) || supportFloor.unmet_blocks_release !== true) {
115
+ errors.push(sourceError(sourcePath, "support_floor.unmet_blocks_release", "must be true"));
116
+ }
117
+ if (!isMapping(supportFloor) ||
118
+ JSON.stringify(supportFloor.requirements) !==
119
+ JSON.stringify([
120
+ "canonical_shared_skill_detected",
121
+ "diagnosis_complete",
122
+ "mandatory_evidence_resolved",
123
+ ])) {
124
+ errors.push(sourceError(sourcePath, "support_floor.requirements", "must require canonical skill detection, complete diagnosis, and resolved mandatory evidence"));
125
+ }
126
+ const evidenceRules = isMapping(supportFloor) && isMapping(supportFloor.evidence_rules)
127
+ ? supportFloor.evidence_rules
128
+ : {};
129
+ if (evidenceRules.unknown_or_missing_mandatory_blocks !== true) {
130
+ errors.push(sourceError(sourcePath, "support_floor.evidence_rules.unknown_or_missing_mandatory_blocks", "must be true"));
131
+ }
132
+ if (evidenceRules.denied_mandatory_trust_blocks !== true) {
133
+ errors.push(sourceError(sourcePath, "support_floor.evidence_rules.denied_mandatory_trust_blocks", "must be true"));
134
+ }
135
+ if (JSON.stringify(evidenceRules.known_false_diagnoses_degraded) !==
136
+ JSON.stringify(["host_present", "installed", "enabled"])) {
137
+ errors.push(sourceError(sourcePath, "support_floor.evidence_rules.known_false_diagnoses_degraded", "must be host_present, installed, enabled"));
138
+ }
139
+ if (evidenceRules.not_applicable_scope !== "unobserved_conditional_surface_only") {
140
+ errors.push(sourceError(sourcePath, "support_floor.evidence_rules.not_applicable_scope", "must be unobserved_conditional_surface_only"));
141
+ }
142
+ const runtimes = data.active_runtimes;
143
+ if (!Array.isArray(runtimes)) {
144
+ return [...errors, sourceError(sourcePath, "active_runtimes", "must be a list")];
145
+ }
146
+ if (runtimes.length !== 0) {
147
+ errors.push(sourceError(sourcePath, "active_runtimes", "must be empty because repository-native runtime integrations are retired"));
148
+ }
149
+ const historicalInputs = data.historical_inputs;
150
+ if (!Array.isArray(historicalInputs) ||
151
+ historicalInputs.length !== 1 ||
152
+ !isMapping(historicalInputs[0]) ||
153
+ historicalInputs[0].id !== "claude" ||
154
+ JSON.stringify(historicalInputs[0].purposes) !== JSON.stringify(["consent_gated_historical_import"])) {
155
+ errors.push(sourceError(sourcePath, "historical_inputs", "must contain only claude for consent-gated historical import"));
156
+ }
157
+ const aliases = data.migration_aliases;
158
+ const cursorAgent = isMapping(aliases) ? aliases["cursor-agent"] : null;
159
+ if (!isMapping(cursorAgent) ||
160
+ cursorAgent.runtime_id !== "cursor" ||
161
+ cursorAgent.surface_id !== "cli") {
162
+ errors.push(sourceError(sourcePath, "migration_aliases.cursor-agent", "must route to runtime cursor surface cli"));
163
+ }
164
+ return errors;
165
+ }
166
+ export function loadLifecycleAuthority(authorityPath = path.join(resolveSourceRoot(), LIFECYCLE_AUTHORITY_RELATIVE_PATH)) {
167
+ const data = loadYamlMapping(fs.readFileSync(authorityPath, "utf8"));
168
+ const errors = validateLifecycleAuthorityData(data, authorityPath);
169
+ if (errors.length > 0) {
170
+ throw new LifecycleAuthorityError(`Runtime lifecycle authority validation failed: ${errors.join("; ")}`);
171
+ }
172
+ const canonicalSkill = data.canonical_skill;
173
+ const evidence = data.evidence_contract;
174
+ const supportFloor = data.support_floor;
175
+ const evidenceRules = supportFloor.evidence_rules;
176
+ const runtimes = data.active_runtimes.map((runtime) => ({
177
+ id: runtime.id,
178
+ displayName: runtime.display_name,
179
+ surfaces: runtime.surfaces.map((surface) => ({
180
+ id: surface.id,
181
+ displayName: surface.display_name,
182
+ presence: surface.presence,
183
+ })),
184
+ }));
185
+ return {
186
+ sourcePath: authorityPath,
187
+ canonicalSkillPath: canonicalSkill.path,
188
+ evidenceFields: evidence.mandatory_fields,
189
+ supportFloorPolicy: {
190
+ unknownOrMissingMandatoryBlocks: evidenceRules.unknown_or_missing_mandatory_blocks,
191
+ deniedMandatoryTrustBlocks: evidenceRules.denied_mandatory_trust_blocks,
192
+ knownFalseDiagnosesDegraded: evidenceRules.known_false_diagnoses_degraded,
193
+ notApplicableScope: evidenceRules.not_applicable_scope,
194
+ },
195
+ runtimes,
196
+ };
197
+ }
198
+ function inventoryDeclarations(root, canonicalPath) {
199
+ const declarations = [];
200
+ const visit = (entryPath) => {
201
+ if (!fs.existsSync(entryPath))
202
+ return;
203
+ const stat = fs.statSync(entryPath);
204
+ if (stat.isDirectory()) {
205
+ for (const name of fs.readdirSync(entryPath).sort())
206
+ visit(path.join(entryPath, name));
207
+ return;
208
+ }
209
+ if (!INVENTORY_SCAN_EXTENSIONS.has(path.extname(entryPath)) ||
210
+ path.resolve(entryPath) === canonicalPath) {
211
+ return;
212
+ }
213
+ fs.readFileSync(entryPath, "utf8")
214
+ .split(/\r\n|\r|\n/)
215
+ .forEach((line, index) => {
216
+ if (INVENTORY_DECLARATIONS.some((pattern) => pattern.test(line))) {
217
+ declarations.push(`${path.relative(root, entryPath)}:${index + 1}`);
218
+ }
219
+ });
220
+ };
221
+ visit(path.join(root, "references"));
222
+ visit(path.join(root, "packages", "cli", "src"));
223
+ return declarations;
224
+ }
225
+ export function validateLifecycleAuthorityRoot(root = resolveSourceRoot()) {
226
+ const authorityPath = path.join(root, LIFECYCLE_AUTHORITY_RELATIVE_PATH);
227
+ if (!fs.existsSync(authorityPath)) {
228
+ return [`${LIFECYCLE_AUTHORITY_RELATIVE_PATH}:1: missing runtime lifecycle authority`];
229
+ }
230
+ let data;
231
+ try {
232
+ data = loadYamlMapping(fs.readFileSync(authorityPath, "utf8"));
233
+ }
234
+ catch (error) {
235
+ return [
236
+ `${LIFECYCLE_AUTHORITY_RELATIVE_PATH}:1: could not parse authority: ${error.message}`,
237
+ ];
238
+ }
239
+ const errors = validateLifecycleAuthorityData(data, LIFECYCLE_AUTHORITY_RELATIVE_PATH);
240
+ errors.push(...validateLifecycleOperationContractRoot(root));
241
+ for (const location of inventoryDeclarations(root, path.resolve(authorityPath))) {
242
+ errors.push(`${location}: duplicate active runtime inventory; authority is ${LIFECYCLE_AUTHORITY_RELATIVE_PATH}:active_runtimes`);
243
+ }
244
+ return errors;
245
+ }
246
+ function observedSurfaceExpected(definition, observation, authority) {
247
+ if (definition.presence === "required")
248
+ return true;
249
+ if (observation?.applicability === "conditional")
250
+ return true;
251
+ if (observation?.applicability === "not_applicable")
252
+ return false;
253
+ const hostPresent = observation?.evidence?.host_present;
254
+ return (authority.supportFloorPolicy.notApplicableScope === "unobserved_conditional_surface_only" &&
255
+ observation !== undefined &&
256
+ hostPresent === true);
257
+ }
258
+ function mandatoryEvidenceViolation(field, value, surfaceId, authority) {
259
+ const location = `surfaces.${surfaceId}.${field}`;
260
+ if (value === undefined && authority.supportFloorPolicy.unknownOrMissingMandatoryBlocks) {
261
+ return {
262
+ code: "mandatory_evidence_missing",
263
+ detail: `${location} is required but missing`,
264
+ surfaceId,
265
+ field,
266
+ observed: "missing",
267
+ };
268
+ }
269
+ if (value === "unknown" && authority.supportFloorPolicy.unknownOrMissingMandatoryBlocks) {
270
+ return {
271
+ code: "mandatory_evidence_unknown",
272
+ detail: `${location} is required but unverified`,
273
+ surfaceId,
274
+ field,
275
+ observed: value,
276
+ };
277
+ }
278
+ if (field === "trusted" &&
279
+ authority.supportFloorPolicy.deniedMandatoryTrustBlocks &&
280
+ (value === "denied" || value === false)) {
281
+ return {
282
+ code: "mandatory_trust_denied",
283
+ detail: `${location} is required but trust is denied`,
284
+ surfaceId,
285
+ field,
286
+ observed: value,
287
+ };
288
+ }
289
+ if (value === "denied") {
290
+ return {
291
+ code: "mandatory_evidence_denied",
292
+ detail: `${location} is required but denied`,
293
+ surfaceId,
294
+ field,
295
+ observed: value,
296
+ };
297
+ }
298
+ if (value === "not_applicable") {
299
+ return {
300
+ code: "mandatory_evidence_not_applicable",
301
+ detail: `${location} cannot be not_applicable on an expected surface`,
302
+ surfaceId,
303
+ field,
304
+ observed: value,
305
+ };
306
+ }
307
+ if (value === false &&
308
+ !authority.supportFloorPolicy.knownFalseDiagnosesDegraded.includes(field)) {
309
+ return {
310
+ code: "mandatory_evidence_denied",
311
+ detail: `${location} is required but false is not a diagnosed degraded state for this field`,
312
+ surfaceId,
313
+ field,
314
+ observed: value,
315
+ };
316
+ }
317
+ return null;
318
+ }
319
+ function surfaceState(definition, observation, authority) {
320
+ const evidence = observation?.evidence ?? {};
321
+ const expected = observedSurfaceExpected(definition, observation, authority);
322
+ const applicability = definition.presence === "required" ? "required" : expected ? "conditional" : "not_applicable";
323
+ const missing = expected
324
+ ? authority.evidenceFields.filter((field) => evidence[field] === undefined)
325
+ : [];
326
+ const unmet = [...new Set([...(observation?.unmetMandatoryFields ?? []), ...missing])];
327
+ const diagnosisComplete = observation?.diagnosisComplete === true && unmet.length === 0;
328
+ const supportFloorViolations = expected
329
+ ? authority.evidenceFields.flatMap((field) => {
330
+ const violation = mandatoryEvidenceViolation(field, evidence[field], definition.id, authority);
331
+ return violation ? [violation] : [];
332
+ })
333
+ : [];
334
+ const releaseBlocking = supportFloorViolations.length > 0 || !diagnosisComplete;
335
+ let status;
336
+ if (!expected)
337
+ status = "not_applicable";
338
+ else if (supportFloorViolations.some((violation) => violation.code === "mandatory_trust_denied" ||
339
+ violation.code === "mandatory_evidence_denied" ||
340
+ violation.code === "mandatory_evidence_not_applicable"))
341
+ status = "blocked";
342
+ else if (!diagnosisComplete || supportFloorViolations.length > 0)
343
+ status = "unknown";
344
+ else if (Object.values(evidence).some((value) => value === false)) {
345
+ status = "degraded";
346
+ }
347
+ else
348
+ status = "ready";
349
+ return {
350
+ ...definition,
351
+ expected,
352
+ applicability,
353
+ status,
354
+ evidence,
355
+ diagnosisComplete,
356
+ unmetMandatoryFields: unmet,
357
+ releaseBlocking,
358
+ supportFloorViolations,
359
+ };
360
+ }
361
+ export function buildRuntimeLifecycleState(authority, observations) {
362
+ const duplicateObservationIds = observations
363
+ .map((observation) => observation.runtimeId)
364
+ .filter((id, index, ids) => ids.indexOf(id) !== index);
365
+ if (duplicateObservationIds.length > 0) {
366
+ throw new LifecycleAuthorityError(`duplicate lifecycle observations for runtime ${[...new Set(duplicateObservationIds)].join(", ")}`);
367
+ }
368
+ const activeIds = new Set(authority.runtimes.map((runtime) => runtime.id));
369
+ const unknown = observations.find((observation) => !activeIds.has(observation.runtimeId));
370
+ if (unknown) {
371
+ throw new LifecycleAuthorityError(`unknown active runtime observation ${unknown.runtimeId}; expected ${[...activeIds].join(", ")}`);
372
+ }
373
+ const runtimes = authority.runtimes.map((runtime) => {
374
+ const observation = observations.find((candidate) => candidate.runtimeId === runtime.id);
375
+ const observedSurfaces = observation?.surfaces ?? [];
376
+ const duplicateSurfaceIds = observedSurfaces
377
+ .map((surface) => surface.id)
378
+ .filter((id, index, ids) => ids.indexOf(id) !== index);
379
+ if (duplicateSurfaceIds.length > 0) {
380
+ throw new LifecycleAuthorityError(`${runtime.id}: duplicate lifecycle observations for surface ${[...new Set(duplicateSurfaceIds)].join(", ")}`);
381
+ }
382
+ const unknownSurface = observedSurfaces.find((surface) => !runtime.surfaces.some((definition) => definition.id === surface.id));
383
+ if (unknownSurface) {
384
+ throw new LifecycleAuthorityError(`${runtime.id}: unknown lifecycle surface ${unknownSurface.id}; expected ${runtime.surfaces.map((surface) => surface.id).join(", ")}`);
385
+ }
386
+ const surfaces = runtime.surfaces.map((definition) => surfaceState(definition, observedSurfaces.find((surface) => surface.id === definition.id), authority));
387
+ const canonicalSkillDetected = observation?.canonicalSkillDetected ?? "unknown";
388
+ const violations = [];
389
+ if (canonicalSkillDetected === "unknown") {
390
+ violations.push({
391
+ code: "canonical_skill_unknown",
392
+ detail: "canonical shared skill detection is required but unverified",
393
+ observed: canonicalSkillDetected,
394
+ });
395
+ }
396
+ else if (canonicalSkillDetected !== true) {
397
+ violations.push({
398
+ code: "canonical_skill_not_detected",
399
+ detail: "canonical shared skill is required but not detected",
400
+ observed: canonicalSkillDetected,
401
+ });
402
+ }
403
+ if (observation?.diagnosisComplete !== true) {
404
+ violations.push({
405
+ code: "diagnosis_incomplete",
406
+ detail: "required runtime lifecycle diagnosis is incomplete",
407
+ });
408
+ }
409
+ for (const surface of surfaces.filter((candidate) => candidate.expected)) {
410
+ violations.push(...surface.supportFloorViolations);
411
+ if (!surface.diagnosisComplete && observation?.diagnosisComplete === true) {
412
+ violations.push({
413
+ code: "diagnosis_incomplete",
414
+ detail: `required lifecycle diagnosis is incomplete for surface ${surface.id}`,
415
+ surfaceId: surface.id,
416
+ });
417
+ }
418
+ }
419
+ const uniqueViolations = violations.filter((violation, index, all) => all.findIndex((candidate) => candidate.code === violation.code &&
420
+ candidate.surfaceId === violation.surfaceId &&
421
+ candidate.field === violation.field) === index);
422
+ const unmet = uniqueViolations.map((violation) => [violation.code, violation.surfaceId, violation.field].filter(Boolean).join(":"));
423
+ const blocked = uniqueViolations.length > 0;
424
+ const degraded = surfaces.some((surface) => surface.expected && surface.status !== "ready");
425
+ return {
426
+ runtimeId: runtime.id,
427
+ displayName: runtime.displayName,
428
+ status: blocked ? "blocked" : degraded ? "degraded" : "ready",
429
+ canonicalSkill: {
430
+ path: authority.canonicalSkillPath,
431
+ detected: canonicalSkillDetected,
432
+ },
433
+ diagnosisComplete: observation?.diagnosisComplete === true,
434
+ surfaces,
435
+ supportFloor: {
436
+ met: !blocked,
437
+ releaseBlocking: blocked,
438
+ unmet,
439
+ violations: uniqueViolations,
440
+ },
441
+ };
442
+ });
443
+ return {
444
+ schemaVersion: "agentera.runtimeLifecycleState.v1",
445
+ authority: authority.sourcePath,
446
+ activeRuntimeIds: runtimes.map((runtime) => runtime.runtimeId),
447
+ runtimes,
448
+ releaseBlocked: runtimes.some((runtime) => runtime.supportFloor.releaseBlocking),
449
+ };
450
+ }
451
+ export function isLifecycleEvidenceValue(value) {
452
+ return EVIDENCE_VALUES.has(value);
453
+ }
@@ -0,0 +1,123 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { resolveSourceRoot } from "../core/sourceRoot.js";
4
+ import { loadYamlMapping } from "../core/yaml.js";
5
+ import { LIFECYCLE_APPLY_STATUSES, LIFECYCLE_OPERATION_CONTRACT_RELATIVE_PATH, LIFECYCLE_PLAN_ACTIONS, LIFECYCLE_RESOURCE_STATES, } from "./lifecycleOperations.js";
6
+ function sameList(value, expected) {
7
+ return Array.isArray(value) && JSON.stringify(value) === JSON.stringify(expected);
8
+ }
9
+ export function validateLifecycleOperationContractData(value) {
10
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
11
+ return ["operation contract must be a YAML object"];
12
+ }
13
+ const data = value;
14
+ const errors = [];
15
+ if (data.schema_version !== "agentera.lifecycleOperationContract.v1") {
16
+ errors.push("schema_version must be agentera.lifecycleOperationContract.v1");
17
+ }
18
+ if (data.status !== "migration_only_contract") {
19
+ errors.push("status must be migration_only_contract");
20
+ }
21
+ if (data.decision !== 92)
22
+ errors.push("decision must cite approved Decision 92");
23
+ if (!sameList(data.resource_states, LIFECYCLE_RESOURCE_STATES)) {
24
+ errors.push(`resource_states must be ${LIFECYCLE_RESOURCE_STATES.join(", ")}`);
25
+ }
26
+ if (!sameList(data.plan_actions, LIFECYCLE_PLAN_ACTIONS)) {
27
+ errors.push(`plan_actions must be ${LIFECYCLE_PLAN_ACTIONS.join(", ")}`);
28
+ }
29
+ if (!sameList(data.apply_results, LIFECYCLE_APPLY_STATUSES)) {
30
+ errors.push(`apply_results must be ${LIFECYCLE_APPLY_STATUSES.join(", ")}`);
31
+ }
32
+ const ownership = data.ownership;
33
+ if (ownership?.identity_rule !== "Managed and published pending-create records bind the filesystem device and inode observed at publication.") {
34
+ errors.push("ownership.identity_rule must bind records to publication identity");
35
+ }
36
+ if (typeof ownership?.removal_rule !== "string" || !ownership.removal_rule.includes("identity and fingerprint")) {
37
+ errors.push("ownership.removal_rule must require matching identity and fingerprint");
38
+ }
39
+ if (ownership?.manual_review_guidance !==
40
+ "The destination is not ledger-owned; review the collision manually. Agentera will not adopt it by name or equality.") {
41
+ errors.push("ownership.manual_review_guidance must provide the exact no-adoption review guidance");
42
+ }
43
+ if (typeof ownership?.journal_rule !== "string"
44
+ || !ownership.journal_rule.includes("append-only")
45
+ || !ownership.journal_rule.includes("atomically at final names")
46
+ || !ownership.journal_rule.includes("contiguous sequence-one hash chain")) {
47
+ errors.push("ownership.journal_rule must require atomic append-only publication and a strict contiguous hash chain");
48
+ }
49
+ const journalStatuses = ownership?.journal_statuses;
50
+ if (!journalStatuses
51
+ || !["absent", "clean", "recoverable_terminal_tail", "corrupt"]
52
+ .every((state) => typeof journalStatuses[state] === "string")
53
+ || !journalStatuses.recoverable_terminal_tail.includes("every mutation is blocked")
54
+ || !journalStatuses.corrupt.includes("digest mismatch")) {
55
+ errors.push("ownership.journal_statuses must define the four strict read and mutation states");
56
+ }
57
+ if (typeof ownership?.recovery_rule !== "string"
58
+ || !ownership.recovery_rule.includes("non-authoritative publication temporaries")
59
+ || !ownership.recovery_rule.includes("rolled-back prefix")
60
+ || !ownership.recovery_rule.includes("re-observes each resource")) {
61
+ errors.push("ownership.recovery_rule must ignore only publication temporaries, block rollback append, and re-observe resources");
62
+ }
63
+ const publication = data.publication_policy;
64
+ if (publication?.supported_platform !== "linux_proc_self_fd") {
65
+ errors.push("publication_policy.supported_platform must be linux_proc_self_fd");
66
+ }
67
+ if (publication?.unsupported_platform_result !== "action_required") {
68
+ errors.push("publication_policy.unsupported_platform_result must be action_required");
69
+ }
70
+ if (typeof publication?.apply_serialization !== "string"
71
+ || !publication.apply_serialization.includes("complete live preparation blocks contenders")
72
+ || !publication.apply_serialization.includes("Linux boot ID")
73
+ || !publication.apply_serialization.includes("process start ticks")) {
74
+ errors.push("publication_policy.apply_serialization must atomically publish a complete strong-identity lock");
75
+ }
76
+ if (typeof publication?.lock_recovery !== "string"
77
+ || !publication.lock_recovery.includes("Malformed or incomplete final locks fail closed")
78
+ || !publication.lock_recovery.includes("full identity and token")) {
79
+ errors.push("publication_policy.lock_recovery must fail closed and verify identity on stale recovery and release");
80
+ }
81
+ if (typeof publication?.journal_publication !== "string"
82
+ || !publication.journal_publication.includes("non-authoritative temporary name")
83
+ || !publication.journal_publication.includes("hard-linked atomically")) {
84
+ errors.push("publication_policy.journal_publication must atomically publish durable complete final events");
85
+ }
86
+ if (publication?.destructive_path_mutations !== "owned_removal_only") {
87
+ errors.push("publication_policy.destructive_path_mutations must be owned_removal_only");
88
+ }
89
+ if (typeof publication?.cleanup_rule !== "string" || !publication.cleanup_rule.includes("never unlinks")) {
90
+ errors.push("publication_policy.cleanup_rule must forbid unlinking colliding or replaced paths");
91
+ }
92
+ const nativePolicy = data.native_policy;
93
+ if (nativePolicy?.install_update_auth_trust_operations !== "forbidden") {
94
+ errors.push("native_policy.install_update_auth_trust_operations must be forbidden");
95
+ }
96
+ if (nativePolicy?.trust_is_observed_only !== true) {
97
+ errors.push("native_policy.trust_is_observed_only must be true");
98
+ }
99
+ return errors;
100
+ }
101
+ export function loadLifecycleOperationContract(contractPath = path.join(resolveSourceRoot(), LIFECYCLE_OPERATION_CONTRACT_RELATIVE_PATH)) {
102
+ const data = loadYamlMapping(fs.readFileSync(contractPath, "utf8"));
103
+ const errors = validateLifecycleOperationContractData(data);
104
+ if (errors.length > 0) {
105
+ throw new Error(`Lifecycle operation contract validation failed: ${errors.join("; ")}`);
106
+ }
107
+ return data;
108
+ }
109
+ export function validateLifecycleOperationContractRoot(root) {
110
+ const contractPath = path.join(root, LIFECYCLE_OPERATION_CONTRACT_RELATIVE_PATH);
111
+ if (!fs.existsSync(contractPath)) {
112
+ return [`${LIFECYCLE_OPERATION_CONTRACT_RELATIVE_PATH}:1: missing lifecycle operation contract`];
113
+ }
114
+ try {
115
+ loadLifecycleOperationContract(contractPath);
116
+ return [];
117
+ }
118
+ catch (error) {
119
+ return [
120
+ `${LIFECYCLE_OPERATION_CONTRACT_RELATIVE_PATH}: could not load contract: ${error.message}`,
121
+ ];
122
+ }
123
+ }