agentera 3.0.0-dev.4 → 3.0.0-dev.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (585) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +108 -22
  3. package/bundle/.agentera-npx-bundle.json +1 -1
  4. package/bundle/CHANGELOG.md +1351 -0
  5. package/bundle/DESIGN.md +229 -0
  6. package/bundle/LICENSE +201 -0
  7. package/bundle/README.md +143 -0
  8. package/bundle/UPGRADE.md +236 -0
  9. package/bundle/extract-corpus-parity.json +21 -0
  10. package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
  11. package/bundle/references/adapters/package-publication.json +437 -0
  12. package/bundle/references/adapters/package-registry.yaml +434 -189
  13. package/bundle/references/adapters/package-surface-characterization.md +66 -35
  14. package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
  15. package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
  16. package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
  17. package/bundle/references/adapters/runtime-retired-resources.yaml +333 -0
  18. package/bundle/references/analysis/evidence-tier-authority.yaml +518 -0
  19. package/bundle/references/analysis/verification-policy.yaml +191 -0
  20. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +20 -10
  21. package/bundle/references/artifacts/glossary-entry-contract.yaml +1254 -0
  22. package/bundle/references/artifacts/state-storage-authority.yaml +2982 -0
  23. package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
  24. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +7 -8
  25. package/bundle/references/cli/capability-instruction-contract.yaml +97 -59
  26. package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
  27. package/bundle/references/cli/routing-model.md +155 -0
  28. package/bundle/references/cli/trigger-schema-enrichment.md +147 -0
  29. package/bundle/references/cli/update-channels.yaml +35 -2
  30. package/bundle/references/cli/vocabulary-index.yaml +23 -20
  31. package/bundle/references/cli/vocabulary.md +337 -366
  32. package/bundle/references/meta/retained-reference-authority.yaml +151 -0
  33. package/bundle/registry.json +14 -14
  34. package/bundle/skills/agentera/SKILL.md +218 -408
  35. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +84 -0
  36. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/exit.yaml +2 -2
  37. package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +25 -0
  38. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/validation.yaml +37 -18
  39. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +102 -0
  40. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +6 -5
  41. package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
  42. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +176 -0
  43. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/artifacts.yaml +12 -12
  44. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/exit.yaml +5 -5
  45. package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +16 -0
  46. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/validation.yaml +7 -7
  47. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +51 -0
  48. package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/exit.yaml +2 -2
  49. package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +20 -0
  50. package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +144 -0
  51. package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +80 -0
  52. package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +16 -0
  53. package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/validation.yaml +18 -18
  54. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/artifacts.yaml +18 -18
  55. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/exit.yaml +2 -2
  56. package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +16 -0
  57. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/validation.yaml +9 -9
  58. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +76 -0
  59. package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/exit.yaml +9 -7
  60. package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +23 -0
  61. package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +121 -0
  62. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +66 -0
  63. package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/exit.yaml +2 -2
  64. package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +23 -0
  65. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +121 -0
  66. package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +23 -0
  67. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +6 -5
  68. package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +20 -0
  69. package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +115 -0
  70. package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +24 -0
  71. package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +16 -0
  72. package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/validation.yaml +2 -2
  73. package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +73 -0
  74. package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +22 -0
  75. package/bundle/skills/agentera/capabilities/{hej → status}/schemas/validation.yaml +5 -5
  76. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/artifacts.yaml +16 -16
  77. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/exit.yaml +7 -6
  78. package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +23 -0
  79. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/validation.yaml +18 -20
  80. package/bundle/skills/agentera/capability_schema_contract.yaml +200 -37
  81. package/bundle/skills/agentera/protocol.yaml +31 -31
  82. package/bundle/skills/agentera/route-phrases.yaml +81 -0
  83. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +5 -4
  84. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +40 -22
  85. package/bundle/skills/agentera/schemas/artifacts/design.yaml +5 -4
  86. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +15 -19
  87. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +145 -14
  88. package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +82 -0
  89. package/bundle/skills/agentera/schemas/artifacts/health.yaml +58 -21
  90. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +22 -8
  91. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +421 -33
  92. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +143 -53
  93. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +345 -31
  94. package/bundle/skills/agentera/schemas/artifacts/vision.yaml +3 -3
  95. package/dist/analytics/extractCorpus/cli.js +190 -0
  96. package/dist/analytics/extractCorpus/copilotSessions.js +275 -0
  97. package/dist/analytics/extractCorpus/core.js +392 -0
  98. package/dist/analytics/extractCorpus/corpus.js +167 -0
  99. package/dist/analytics/extractCorpus/coverageAudit.js +260 -0
  100. package/dist/analytics/extractCorpus/cursorSessions.js +425 -0
  101. package/dist/analytics/extractCorpus/evidenceTiers.js +603 -0
  102. package/dist/analytics/extractCorpus/extractCorpusParity.js +105 -0
  103. package/dist/analytics/extractCorpus/filesystemSources.js +118 -0
  104. package/dist/analytics/extractCorpus/index.js +14 -0
  105. package/dist/analytics/extractCorpus/jsonlSessions.js +204 -0
  106. package/dist/analytics/extractCorpus/sqliteCaps.js +43 -0
  107. package/dist/analytics/extractCorpus/sqliteSessions.js +367 -0
  108. package/dist/analytics/extractCorpus/tierReader.js +108 -0
  109. package/dist/analytics/extractCorpus.js +2 -1791
  110. package/dist/analytics/glossaryAdviceResolution.js +166 -0
  111. package/dist/analytics/glossaryInputAcquisition.js +319 -0
  112. package/dist/analytics/personalGlossaryAdmission.js +133 -0
  113. package/dist/analytics/personalGlossaryProfile.js +219 -0
  114. package/dist/analytics/profileSignals.js +211 -0
  115. package/dist/analytics/usageStats.js +169 -42
  116. package/dist/audit/terminologyDrift.js +281 -0
  117. package/dist/bin/agentera.js +3 -2
  118. package/dist/capabilities/audit/instructions.js +16 -0
  119. package/dist/capabilities/build/instructions.js +56 -0
  120. package/dist/capabilities/design/instructions.js +4 -0
  121. package/dist/capabilities/discuss/instructions.js +29 -0
  122. package/dist/capabilities/document/instructions.js +11 -0
  123. package/dist/capabilities/index.js +40 -0
  124. package/dist/capabilities/optimize/instructions.js +14 -0
  125. package/dist/capabilities/orchestrate/instructions.js +40 -0
  126. package/dist/capabilities/plan/instructions.js +32 -0
  127. package/dist/capabilities/profile/instructions.js +70 -0
  128. package/dist/capabilities/research/instructions.js +5 -0
  129. package/dist/capabilities/status/instructions.js +11 -0
  130. package/dist/capabilities/status/startupInstructions.js +34 -0
  131. package/dist/capabilities/vision/instructions.js +4 -0
  132. package/dist/cli/appContext.js +30 -24
  133. package/dist/cli/argvalidate.js +0 -1
  134. package/dist/cli/capabilityContext/benchmark.js +565 -0
  135. package/dist/cli/capabilityContext/bespoke.js +44 -0
  136. package/dist/cli/capabilityContext/build.js +242 -0
  137. package/dist/cli/capabilityContext/closeout.js +233 -0
  138. package/dist/cli/capabilityContext/contract.js +179 -0
  139. package/dist/cli/capabilityContext/evidence.js +463 -0
  140. package/dist/cli/capabilityContext/index.js +3 -0
  141. package/dist/cli/capabilityContext/orchestration.js +131 -0
  142. package/dist/cli/capabilityContext/planState.js +260 -0
  143. package/dist/cli/capabilityContext/progress.js +142 -0
  144. package/dist/cli/capabilityContext/projectVerification.js +409 -0
  145. package/dist/cli/capabilityContext/shared.js +83 -0
  146. package/dist/cli/capabilityContext/slim.js +152 -0
  147. package/dist/cli/capabilityContext/startup.js +150 -0
  148. package/dist/cli/capabilityContext/startupAggregation.js +68 -0
  149. package/dist/cli/capabilityContext/types.js +56 -0
  150. package/dist/cli/capabilityContext.js +1 -2421
  151. package/dist/cli/commands/appHome.js +22 -0
  152. package/dist/cli/commands/capability.js +5 -12
  153. package/dist/cli/commands/compact.js +41 -13
  154. package/dist/cli/commands/doctor.js +127 -97
  155. package/dist/cli/commands/durability.js +81 -0
  156. package/dist/cli/commands/glossaryAdvice.js +138 -0
  157. package/dist/cli/commands/lint.js +26 -44
  158. package/dist/cli/commands/personalGlossary.js +176 -0
  159. package/dist/cli/commands/prime/briefOrientation.js +747 -0
  160. package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
  161. package/dist/cli/commands/prime/bundleStatus.js +190 -0
  162. package/dist/cli/commands/prime/collectEntityOrientation.js +311 -0
  163. package/dist/cli/commands/prime/collectOrientationState.js +212 -0
  164. package/dist/cli/commands/prime/orientationOutput.js +397 -0
  165. package/dist/cli/commands/prime/types.js +1 -0
  166. package/dist/cli/commands/prime/v1Migration.js +38 -0
  167. package/dist/cli/commands/prime.js +80 -558
  168. package/dist/cli/commands/profileGrounding.js +55 -0
  169. package/dist/cli/commands/query.js +78 -53
  170. package/dist/cli/commands/report.js +96 -25
  171. package/dist/cli/commands/route.js +142 -0
  172. package/dist/cli/commands/schema.js +266 -143
  173. package/dist/cli/commands/state/decisions.js +387 -0
  174. package/dist/cli/commands/state/docs.js +70 -0
  175. package/dist/cli/commands/state/experimentRecords.js +151 -0
  176. package/dist/cli/commands/state/experiments.js +14 -0
  177. package/dist/cli/commands/state/get.js +129 -0
  178. package/dist/cli/commands/state/health.js +14 -0
  179. package/dist/cli/commands/state/index.js +16 -0
  180. package/dist/cli/commands/state/list.js +194 -0
  181. package/dist/cli/commands/state/objective.js +25 -0
  182. package/dist/cli/commands/state/plan.js +14 -0
  183. package/dist/cli/commands/state/planTasks.js +154 -0
  184. package/dist/cli/commands/state/plans.js +154 -0
  185. package/dist/cli/commands/state/progress.js +13 -0
  186. package/dist/cli/commands/state/shared.js +14 -0
  187. package/dist/cli/commands/state/todo.js +42 -0
  188. package/dist/cli/commands/state/write.js +434 -0
  189. package/dist/cli/commands/upgrade.js +146 -5
  190. package/dist/cli/commands/upgradeVerify.js +118 -0
  191. package/dist/cli/commands/validate.js +272 -213
  192. package/dist/cli/commands/verify.js +24 -9
  193. package/dist/cli/contracts/bundleStatus.js +1 -0
  194. package/dist/cli/contracts/orientationState.js +1 -0
  195. package/dist/cli/dispatch/argvParser.js +32 -0
  196. package/dist/cli/dispatch/check.js +372 -0
  197. package/dist/cli/dispatch/commands.js +27 -0
  198. package/dist/cli/dispatch/index.js +207 -0
  199. package/dist/cli/dispatch/lifecycle.js +652 -0
  200. package/dist/cli/dispatch/prime.js +139 -0
  201. package/dist/cli/dispatch/projections.js +17 -0
  202. package/dist/cli/dispatch/shared.js +63 -0
  203. package/dist/cli/dispatch/state.js +140 -0
  204. package/dist/cli/dispatch.js +1 -996
  205. package/dist/cli/errors.js +52 -0
  206. package/dist/cli/help.js +390 -43
  207. package/dist/cli/migrationRequired.js +87 -0
  208. package/dist/cli/orientation/attention.js +59 -0
  209. package/dist/cli/orientation/corpusCoverage.js +102 -0
  210. package/dist/cli/orientation.js +444 -173
  211. package/dist/cli/planArtifacts.js +350 -0
  212. package/dist/cli/planEvidence.js +157 -0
  213. package/dist/cli/planLifecycleState.js +36 -0
  214. package/dist/cli/planTaskIndex.js +11 -0
  215. package/dist/cli/preCutoverCommand.js +32 -0
  216. package/dist/cli/prime-blob.js +71 -3
  217. package/dist/cli/profileAcquisition.js +167 -0
  218. package/dist/cli/startupCompletenessContract.js +59 -0
  219. package/dist/cli/stateQuery.js +63 -14
  220. package/dist/cli/structured.js +0 -1
  221. package/dist/cli/todoMarkdown.js +46 -0
  222. package/dist/cli/todoReadinessSelection.js +192 -0
  223. package/dist/cli/todoSeverity.js +18 -0
  224. package/dist/core/atomicWriter.js +20 -0
  225. package/dist/core/developmentChannel.js +1 -0
  226. package/dist/core/developmentInvocation.js +374 -0
  227. package/dist/core/difflib.js +0 -1
  228. package/dist/core/envPaths.js +20 -0
  229. package/dist/core/jsonValue.js +5 -0
  230. package/dist/core/paths.js +0 -1
  231. package/dist/core/pyjson.js +67 -3
  232. package/dist/core/shell.js +4 -0
  233. package/dist/core/skillIdentity.js +23 -0
  234. package/dist/core/sourceRoot.js +9 -12
  235. package/dist/core/text.js +10 -0
  236. package/dist/core/toml.js +0 -1
  237. package/dist/core/yaml.js +8 -1
  238. package/dist/eval/evalSkills.js +30 -26
  239. package/dist/eval/hybridRouteEvaluation.js +155 -0
  240. package/dist/eval/semanticEval.js +43 -20
  241. package/dist/eval/semanticFixtures.js +16 -5
  242. package/dist/hooks/common.js +11 -81
  243. package/dist/hooks/compaction/apply.js +446 -0
  244. package/dist/hooks/compaction/dryRun.js +184 -0
  245. package/dist/hooks/compaction/index.js +22 -0
  246. package/dist/hooks/compaction/parse.js +325 -0
  247. package/dist/hooks/compaction/retention.js +202 -0
  248. package/dist/hooks/compaction/status.js +360 -0
  249. package/dist/hooks/compaction/types.js +5 -0
  250. package/dist/hooks/validateArtifact/agentFacing.js +9 -0
  251. package/dist/hooks/validateArtifact/index.js +92 -0
  252. package/dist/hooks/validateArtifact/markdown.js +145 -0
  253. package/dist/hooks/validateArtifact/schema.js +546 -0
  254. package/dist/hooks/validateArtifact/traversal.js +107 -0
  255. package/dist/hooks/validateArtifact/violations.js +107 -0
  256. package/dist/migrate/v2HandoffManifest.js +452 -0
  257. package/dist/registries/activationContract.js +2 -0
  258. package/dist/registries/activationTuples.js +106 -0
  259. package/dist/registries/artifactProtocolIds.js +78 -0
  260. package/dist/registries/artifactRegistry.js +224 -63
  261. package/dist/registries/artifactSchemaProjection.js +45 -0
  262. package/dist/registries/capabilityContract.js +141 -13
  263. package/dist/registries/evaluatorHandoffContract.js +170 -0
  264. package/dist/registries/evidenceTierContract.js +371 -0
  265. package/dist/registries/glossaryAdviceContract.js +79 -0
  266. package/dist/registries/glossaryCaveatContract.js +67 -0
  267. package/dist/registries/glossaryConsumerContractValidation.js +787 -0
  268. package/dist/registries/glossaryEntryContract.js +757 -0
  269. package/dist/registries/glossaryTermIdentity.js +17 -0
  270. package/dist/registries/glossaryTermOccurrence.js +20 -0
  271. package/dist/registries/hybridRoute.js +274 -0
  272. package/dist/registries/hybridRouteReceipt.js +221 -0
  273. package/dist/registries/packagePublication.js +229 -0
  274. package/dist/registries/packageRegistry.js +187 -211
  275. package/dist/registries/todoReadinessContract.js +448 -0
  276. package/dist/registries/triggerLoader.js +174 -0
  277. package/dist/registries/verbosityBudgetContract.js +205 -0
  278. package/dist/release/releaseMetadata.js +385 -0
  279. package/dist/runtime/lifecycleAdapterContract.js +457 -0
  280. package/dist/runtime/lifecycleAdapters.js +777 -0
  281. package/dist/runtime/lifecycleAuthority.js +453 -0
  282. package/dist/runtime/lifecycleOperationContract.js +123 -0
  283. package/dist/runtime/lifecycleOperations.js +634 -0
  284. package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
  285. package/dist/runtime/lifecyclePublication.js +415 -0
  286. package/dist/runtime/lifecycleSnapshot.js +438 -0
  287. package/dist/runtime/nativeResourceCleanup.js +502 -0
  288. package/dist/setup/opencode.js +20 -0
  289. package/dist/setup/opencodeConstants.js +1 -0
  290. package/dist/setup/sharedSkill.js +45 -0
  291. package/dist/setup/smokeChecks.js +21 -82
  292. package/dist/state/archiveDiscovery.js +580 -0
  293. package/dist/state/archivePublication.js +225 -0
  294. package/dist/state/archiveRecovery.js +237 -0
  295. package/dist/state/archiveReplay.js +53 -0
  296. package/dist/state/canonicalMigrationRecord.js +36 -0
  297. package/dist/state/changelog.js +221 -0
  298. package/dist/state/decisionEntities.js +367 -0
  299. package/dist/state/decisionLegacyValidation.js +215 -0
  300. package/dist/state/decisionMigrationProvenance.js +199 -0
  301. package/dist/state/decisionOverlay.js +254 -0
  302. package/dist/state/decisionRevision.js +256 -0
  303. package/dist/state/decisionRevisionMigration.js +89 -0
  304. package/dist/state/directRetrieval.js +323 -0
  305. package/dist/state/durability.js +324 -0
  306. package/dist/state/entityCutover.js +459 -0
  307. package/dist/state/entityCutoverGit.js +127 -0
  308. package/dist/state/entityGlossaryAuthority.js +13 -0
  309. package/dist/state/entityListProjection.js +187 -0
  310. package/dist/state/entityListRuntimeRegistry.js +85 -0
  311. package/dist/state/entityMigrationCausality.js +97 -0
  312. package/dist/state/entityMigrationIdentity.js +5 -0
  313. package/dist/state/entityMigrationPreview.js +846 -0
  314. package/dist/state/entityMigrationTodo.js +133 -0
  315. package/dist/state/entityPublicationContext.js +806 -0
  316. package/dist/state/entityRetrievalHelp.js +506 -0
  317. package/dist/state/entityStorage.js +896 -0
  318. package/dist/state/exactReplacementRecovery.js +18 -0
  319. package/dist/state/experimentArchive.js +63 -0
  320. package/dist/state/experimentIdentity.js +202 -0
  321. package/dist/state/healthEntities.js +262 -0
  322. package/dist/state/healthEntityValidation.js +18 -0
  323. package/dist/state/healthRepair.js +69 -0
  324. package/dist/state/installRoot.js +64 -25
  325. package/dist/state/legacyEntityCutoverEvidence.js +65 -0
  326. package/dist/state/legacyIdentity.js +47 -0
  327. package/dist/state/legacySummaryRecord.js +6 -0
  328. package/dist/state/listAccounting.js +54 -0
  329. package/dist/state/listClassification.js +17 -0
  330. package/dist/state/listCursor.js +42 -0
  331. package/dist/state/listRetrieval.js +781 -0
  332. package/dist/state/migrationSourceBinding.js +30 -0
  333. package/dist/state/objectiveExperimentEntities.js +322 -0
  334. package/dist/state/planEntities.js +530 -0
  335. package/dist/state/planIdentity.js +47 -0
  336. package/dist/state/planRetrieval.js +313 -0
  337. package/dist/state/planTaskRetrieval.js +294 -0
  338. package/dist/state/progressEntities.js +512 -0
  339. package/dist/state/progressGlossaryCaveat.js +168 -0
  340. package/dist/state/progressPublicationOrder.js +19 -0
  341. package/dist/state/projectRoot.js +62 -0
  342. package/dist/state/projectionPolicy.js +190 -0
  343. package/dist/state/retrievalAuthority.js +156 -0
  344. package/dist/state/safeProjectFile.js +155 -0
  345. package/dist/state/startupAnalysis/benchmark.js +432 -0
  346. package/dist/state/startupAnalysis/contract.js +160 -0
  347. package/dist/state/startupAnalysis/helpers.js +286 -0
  348. package/dist/state/startupAnalysis/index.js +6 -0
  349. package/dist/state/startupAnalysis/metrics.js +340 -0
  350. package/dist/state/startupAnalysis/records.js +198 -0
  351. package/dist/state/startupAnalysis/report.js +111 -0
  352. package/dist/state/startupAnalysis/threshold.js +512 -0
  353. package/dist/state/startupAnalysis.js +2 -1953
  354. package/dist/state/startupProjection.js +499 -0
  355. package/dist/state/stateMode.js +85 -0
  356. package/dist/state/stateStorageAuthority.js +47 -0
  357. package/dist/state/summaryEntityRead.js +25 -0
  358. package/dist/state/summaryMigrationProvenance.js +66 -0
  359. package/dist/state/summarySourceRowAuthority.js +36 -0
  360. package/dist/state/todoDocsEntities.js +1064 -0
  361. package/dist/state/todoDocsEntityValidation.js +158 -0
  362. package/dist/state/todoMarkdownProjection.js +51 -0
  363. package/dist/state/todoReconciliationActivation.js +132 -0
  364. package/dist/state/todoReconciliationInspection.js +173 -0
  365. package/dist/state/todoReconciliationRepair.js +170 -0
  366. package/dist/state/todoReconciliationTransaction.js +582 -0
  367. package/dist/state/write/assign.js +20 -0
  368. package/dist/state/write/candidateMutation.js +269 -0
  369. package/dist/state/write/errors.js +11 -0
  370. package/dist/state/write/experimentPublication.js +192 -0
  371. package/dist/state/write/explain.js +332 -0
  372. package/dist/state/write/fields.js +61 -0
  373. package/dist/state/write/glossaryPublication.js +263 -0
  374. package/dist/state/write/grammar.js +280 -0
  375. package/dist/state/write/helpers.js +29 -0
  376. package/dist/state/write/index.js +12 -0
  377. package/dist/state/write/input.js +367 -0
  378. package/dist/state/write/lock.js +837 -0
  379. package/dist/state/write/mutation.js +234 -0
  380. package/dist/state/write/operations.js +169 -0
  381. package/dist/state/write/planEvaluation.js +128 -0
  382. package/dist/state/write/planPublication.js +179 -0
  383. package/dist/state/write/runtimeOperations.js +142 -0
  384. package/dist/state/write/serialize.js +1 -0
  385. package/dist/state/write/transaction.js +52 -0
  386. package/dist/state/write/validate.js +7 -0
  387. package/dist/upgrade/appContentRefresh.js +383 -0
  388. package/dist/upgrade/appModel.js +8 -7
  389. package/dist/upgrade/atomicWriter.js +1 -0
  390. package/dist/upgrade/bundleEvidence.js +33 -0
  391. package/dist/upgrade/channels.js +12 -8
  392. package/dist/upgrade/compatibility.js +56 -21
  393. package/dist/upgrade/doctor.js +197 -192
  394. package/dist/upgrade/doctorClassifier.js +187 -0
  395. package/dist/upgrade/installedHooksRetirement.js +196 -0
  396. package/dist/upgrade/legacyAgentCleanup.js +282 -0
  397. package/dist/upgrade/lifecycleUpgrade.js +113 -0
  398. package/dist/upgrade/migrateArtifactsV2ToV3.js +367 -149
  399. package/dist/upgrade/migrationPublication.js +122 -0
  400. package/dist/upgrade/nextMajorDoctor.js +155 -0
  401. package/dist/upgrade/npxPlatformStatus.js +22 -0
  402. package/dist/upgrade/projectIntegration.js +145 -187
  403. package/dist/upgrade/projectIntegrationDecision.js +50 -0
  404. package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
  405. package/dist/upgrade/runtimeMigration.js +278 -352
  406. package/dist/upgrade/upgradeCommands.js +14 -1
  407. package/dist/upgrade/upgradeLock.js +85 -0
  408. package/dist/upgrade/upgradeOrchestrator.js +263 -59
  409. package/dist/upgrade/v3CapabilitySurface.js +14 -0
  410. package/dist/upgrade/versionResolution.js +12 -5
  411. package/dist/validate/activationArtifactEvidence.js +844 -0
  412. package/dist/validate/activationConjunction.js +816 -0
  413. package/dist/validate/activationEvidenceManifest.js +515 -0
  414. package/dist/validate/activationPackageSemantics.js +29 -0
  415. package/dist/validate/appHomeContract.js +5 -11
  416. package/dist/validate/bootstrapAuthority.js +44 -0
  417. package/dist/validate/capability.js +144 -15
  418. package/dist/validate/crossCapability.js +15 -10
  419. package/dist/validate/retainedReferenceAuthority.js +879 -0
  420. package/dist/validate/selfAudit.js +73 -37
  421. package/dist/validate/v1LegacyCruft.js +131 -0
  422. package/dist/validate/vocabularyAuthority.js +303 -0
  423. package/package.json +53 -27
  424. package/bundle/references/adapters/cursor.md +0 -213
  425. package/bundle/references/adapters/opencode.md +0 -530
  426. package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
  427. package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
  428. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
  429. package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -548
  430. package/bundle/references/adapters/runtime-feature-parity.md +0 -189
  431. package/bundle/references/analysis/benchmark.md +0 -267
  432. package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
  433. package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
  434. package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -355
  435. package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -278
  436. package/bundle/references/cli/capability-tool-classification.yaml +0 -53
  437. package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
  438. package/bundle/references/meta/documentation-inventory.md +0 -43
  439. package/bundle/references/v1-section-mapping.md +0 -47
  440. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  441. package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
  442. package/bundle/skills/agentera/agents/hej.toml +0 -6
  443. package/bundle/skills/agentera/agents/inspektera.toml +0 -6
  444. package/bundle/skills/agentera/agents/inspirera.toml +0 -6
  445. package/bundle/skills/agentera/agents/optimera.toml +0 -6
  446. package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
  447. package/bundle/skills/agentera/agents/planera.toml +0 -6
  448. package/bundle/skills/agentera/agents/profilera.toml +0 -6
  449. package/bundle/skills/agentera/agents/realisera.toml +0 -6
  450. package/bundle/skills/agentera/agents/resonera.toml +0 -6
  451. package/bundle/skills/agentera/agents/visionera.toml +0 -6
  452. package/bundle/skills/agentera/agents/visualisera.toml +0 -6
  453. package/bundle/skills/agentera/capabilities/dokumentera/instructions.md +0 -428
  454. package/bundle/skills/agentera/capabilities/dokumentera/schemas/artifacts.yaml +0 -73
  455. package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +0 -35
  456. package/bundle/skills/agentera/capabilities/hej/instructions.md +0 -331
  457. package/bundle/skills/agentera/capabilities/hej/schemas/artifacts.yaml +0 -69
  458. package/bundle/skills/agentera/capabilities/hej/schemas/triggers.yaml +0 -58
  459. package/bundle/skills/agentera/capabilities/inspektera/instructions.md +0 -514
  460. package/bundle/skills/agentera/capabilities/inspektera/schemas/artifacts.yaml +0 -76
  461. package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +0 -38
  462. package/bundle/skills/agentera/capabilities/inspirera/instructions.md +0 -280
  463. package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +0 -24
  464. package/bundle/skills/agentera/capabilities/inspirera/schemas/triggers.yaml +0 -34
  465. package/bundle/skills/agentera/capabilities/optimera/instructions.md +0 -437
  466. package/bundle/skills/agentera/capabilities/optimera/schemas/triggers.yaml +0 -39
  467. package/bundle/skills/agentera/capabilities/orkestrera/instructions.md +0 -433
  468. package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +0 -64
  469. package/bundle/skills/agentera/capabilities/orkestrera/schemas/triggers.yaml +0 -42
  470. package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +0 -107
  471. package/bundle/skills/agentera/capabilities/planera/instructions.md +0 -368
  472. package/bundle/skills/agentera/capabilities/planera/schemas/artifacts.yaml +0 -62
  473. package/bundle/skills/agentera/capabilities/planera/schemas/triggers.yaml +0 -34
  474. package/bundle/skills/agentera/capabilities/planera/schemas/validation.yaml +0 -61
  475. package/bundle/skills/agentera/capabilities/profilera/instructions.md +0 -419
  476. package/bundle/skills/agentera/capabilities/profilera/schemas/artifacts.yaml +0 -18
  477. package/bundle/skills/agentera/capabilities/profilera/schemas/triggers.yaml +0 -45
  478. package/bundle/skills/agentera/capabilities/profilera/schemas/validation.yaml +0 -57
  479. package/bundle/skills/agentera/capabilities/realisera/instructions.md +0 -403
  480. package/bundle/skills/agentera/capabilities/realisera/schemas/artifacts.yaml +0 -80
  481. package/bundle/skills/agentera/capabilities/realisera/schemas/triggers.yaml +0 -39
  482. package/bundle/skills/agentera/capabilities/realisera/schemas/validation.yaml +0 -110
  483. package/bundle/skills/agentera/capabilities/resonera/instructions.md +0 -329
  484. package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +0 -47
  485. package/bundle/skills/agentera/capabilities/resonera/schemas/triggers.yaml +0 -46
  486. package/bundle/skills/agentera/capabilities/resonera/schemas/validation.yaml +0 -77
  487. package/bundle/skills/agentera/capabilities/visionera/instructions.md +0 -309
  488. package/bundle/skills/agentera/capabilities/visionera/schemas/triggers.yaml +0 -41
  489. package/bundle/skills/agentera/capabilities/visualisera/instructions.md +0 -400
  490. package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +0 -33
  491. package/bundle/skills/agentera/references/contract.md +0 -1039
  492. package/bundle/skills/hej/.claude-plugin/plugin.json +0 -6
  493. package/bundle/skills/hej/SKILL.md +0 -69
  494. package/bundle/skills/hej/agents/hej.toml +0 -11
  495. package/bundle/skills/hej/agents/openai.yaml +0 -8
  496. package/dist/analytics/extractCorpus.js.map +0 -1
  497. package/dist/analytics/usageStats.js.map +0 -1
  498. package/dist/bin/agentera.js.map +0 -1
  499. package/dist/cli/appContext.js.map +0 -1
  500. package/dist/cli/argvalidate.js.map +0 -1
  501. package/dist/cli/capabilityContext.js.map +0 -1
  502. package/dist/cli/commands/backfill.js +0 -84
  503. package/dist/cli/commands/backfill.js.map +0 -1
  504. package/dist/cli/commands/capability.js.map +0 -1
  505. package/dist/cli/commands/compact.js.map +0 -1
  506. package/dist/cli/commands/doctor.js.map +0 -1
  507. package/dist/cli/commands/lint.js.map +0 -1
  508. package/dist/cli/commands/prime.js.map +0 -1
  509. package/dist/cli/commands/query.js.map +0 -1
  510. package/dist/cli/commands/report.js.map +0 -1
  511. package/dist/cli/commands/schema.js.map +0 -1
  512. package/dist/cli/commands/state.js +0 -1012
  513. package/dist/cli/commands/state.js.map +0 -1
  514. package/dist/cli/commands/upgrade.js.map +0 -1
  515. package/dist/cli/commands/validate.js.map +0 -1
  516. package/dist/cli/commands/verify.js.map +0 -1
  517. package/dist/cli/dispatch.js.map +0 -1
  518. package/dist/cli/help.js.map +0 -1
  519. package/dist/cli/orientation.js.map +0 -1
  520. package/dist/cli/prime-blob.js.map +0 -1
  521. package/dist/cli/stateQuery.js.map +0 -1
  522. package/dist/cli/structured.js.map +0 -1
  523. package/dist/core/difflib.js.map +0 -1
  524. package/dist/core/git.js +0 -43
  525. package/dist/core/git.js.map +0 -1
  526. package/dist/core/paths.js.map +0 -1
  527. package/dist/core/pyjson.js.map +0 -1
  528. package/dist/core/sourceRoot.js.map +0 -1
  529. package/dist/core/toml.js.map +0 -1
  530. package/dist/core/yaml.js.map +0 -1
  531. package/dist/eval/evalSkills.js.map +0 -1
  532. package/dist/eval/semanticEval.js.map +0 -1
  533. package/dist/eval/semanticFixtures.js.map +0 -1
  534. package/dist/hooks/common.js.map +0 -1
  535. package/dist/hooks/compaction.js +0 -935
  536. package/dist/hooks/compaction.js.map +0 -1
  537. package/dist/hooks/cursorPreToolUse.js +0 -19
  538. package/dist/hooks/cursorPreToolUse.js.map +0 -1
  539. package/dist/hooks/cursorSessionStart.js +0 -71
  540. package/dist/hooks/cursorSessionStart.js.map +0 -1
  541. package/dist/hooks/sessionStart.js +0 -209
  542. package/dist/hooks/sessionStart.js.map +0 -1
  543. package/dist/hooks/sessionStop.js +0 -212
  544. package/dist/hooks/sessionStop.js.map +0 -1
  545. package/dist/hooks/validateArtifact.js +0 -933
  546. package/dist/hooks/validateArtifact.js.map +0 -1
  547. package/dist/registries/artifactRegistry.js.map +0 -1
  548. package/dist/registries/capabilityContract.js.map +0 -1
  549. package/dist/registries/packageRegistry.js.map +0 -1
  550. package/dist/registries/runtimeAdapterRegistry.js +0 -315
  551. package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
  552. package/dist/setup/codex.js +0 -1056
  553. package/dist/setup/codex.js.map +0 -1
  554. package/dist/setup/copilot.js +0 -227
  555. package/dist/setup/copilot.js.map +0 -1
  556. package/dist/setup/cursor.js +0 -127
  557. package/dist/setup/cursor.js.map +0 -1
  558. package/dist/setup/doctor.js +0 -1297
  559. package/dist/setup/doctor.js.map +0 -1
  560. package/dist/setup/smokeChecks.js.map +0 -1
  561. package/dist/state/installRoot.js.map +0 -1
  562. package/dist/state/progressCommit.js +0 -289
  563. package/dist/state/progressCommit.js.map +0 -1
  564. package/dist/state/startupAnalysis.js.map +0 -1
  565. package/dist/upgrade/appModel.js.map +0 -1
  566. package/dist/upgrade/channels.js.map +0 -1
  567. package/dist/upgrade/compatibility.js.map +0 -1
  568. package/dist/upgrade/doctor.js.map +0 -1
  569. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -571
  570. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
  571. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
  572. package/dist/upgrade/projectIntegration.js.map +0 -1
  573. package/dist/upgrade/runtimeMigration.js.map +0 -1
  574. package/dist/upgrade/upgradeCommands.js.map +0 -1
  575. package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
  576. package/dist/upgrade/versionResolution.js.map +0 -1
  577. package/dist/validate/appHomeContract.js.map +0 -1
  578. package/dist/validate/capability.js.map +0 -1
  579. package/dist/validate/crossCapability.js.map +0 -1
  580. package/dist/validate/lifecycleAdapters.js +0 -772
  581. package/dist/validate/lifecycleAdapters.js.map +0 -1
  582. package/dist/validate/selfAudit.js.map +0 -1
  583. /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
  584. /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
  585. /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
@@ -0,0 +1,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
+ }