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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (598) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +119 -22
  3. package/bundle/CHANGELOG.md +1351 -0
  4. package/bundle/DESIGN.md +229 -0
  5. package/bundle/LICENSE +201 -0
  6. package/bundle/README.md +143 -0
  7. package/bundle/UPGRADE.md +236 -0
  8. package/bundle/extract-corpus-parity.json +21 -0
  9. package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
  10. package/bundle/references/adapters/package-publication.json +437 -0
  11. package/bundle/references/adapters/package-registry.yaml +435 -189
  12. package/bundle/references/adapters/package-surface-characterization.md +66 -35
  13. package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
  14. package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
  15. package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
  16. package/bundle/references/adapters/runtime-retired-resources.yaml +333 -0
  17. package/bundle/references/analysis/evidence-tier-authority.yaml +518 -0
  18. package/bundle/references/analysis/verification-policy.yaml +191 -0
  19. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +20 -10
  20. package/bundle/references/artifacts/glossary-entry-contract.yaml +1254 -0
  21. package/bundle/references/artifacts/state-storage-authority.yaml +3022 -0
  22. package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
  23. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +7 -8
  24. package/bundle/references/cli/capability-instruction-contract.yaml +11 -14
  25. package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
  26. package/bundle/references/cli/routing-model.md +155 -0
  27. package/bundle/references/cli/trigger-schema-enrichment.md +147 -0
  28. package/bundle/references/cli/update-channels.yaml +19 -1
  29. package/bundle/references/cli/vocabulary-index.yaml +20 -17
  30. package/bundle/references/cli/vocabulary.md +326 -361
  31. package/bundle/references/meta/retained-reference-authority.yaml +151 -0
  32. package/bundle/registry.json +13 -13
  33. package/bundle/skills/agentera/SKILL.md +224 -422
  34. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +84 -0
  35. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/exit.yaml +2 -2
  36. package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +25 -0
  37. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/validation.yaml +37 -18
  38. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +102 -0
  39. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +6 -5
  40. package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
  41. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +176 -0
  42. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/artifacts.yaml +12 -12
  43. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/exit.yaml +5 -5
  44. package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +16 -0
  45. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/validation.yaml +7 -7
  46. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +51 -0
  47. package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/exit.yaml +2 -2
  48. package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +20 -0
  49. package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +144 -0
  50. package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +80 -0
  51. package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +16 -0
  52. package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/validation.yaml +18 -18
  53. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/artifacts.yaml +18 -18
  54. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/exit.yaml +2 -2
  55. package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +16 -0
  56. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/validation.yaml +9 -9
  57. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +76 -0
  58. package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/exit.yaml +9 -7
  59. package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +23 -0
  60. package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +121 -0
  61. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +66 -0
  62. package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/exit.yaml +2 -2
  63. package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +23 -0
  64. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +121 -0
  65. package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +23 -0
  66. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +6 -5
  67. package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +20 -0
  68. package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +115 -0
  69. package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +24 -0
  70. package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +16 -0
  71. package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/validation.yaml +2 -2
  72. package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +73 -0
  73. package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +22 -0
  74. package/bundle/skills/agentera/capabilities/{hej → status}/schemas/validation.yaml +5 -5
  75. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/artifacts.yaml +16 -16
  76. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/exit.yaml +7 -6
  77. package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +23 -0
  78. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/validation.yaml +18 -20
  79. package/bundle/skills/agentera/capability_schema_contract.yaml +178 -34
  80. package/bundle/skills/agentera/protocol.yaml +31 -31
  81. package/bundle/skills/agentera/route-phrases.yaml +81 -0
  82. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +5 -4
  83. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +39 -21
  84. package/bundle/skills/agentera/schemas/artifacts/design.yaml +5 -4
  85. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +15 -19
  86. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +145 -14
  87. package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +82 -0
  88. package/bundle/skills/agentera/schemas/artifacts/health.yaml +58 -21
  89. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +22 -8
  90. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +458 -36
  91. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +128 -17
  92. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +342 -42
  93. package/bundle/skills/agentera/schemas/artifacts/vision.yaml +3 -3
  94. package/dist/analytics/extractCorpus/cli.js +190 -0
  95. package/dist/analytics/extractCorpus/copilotSessions.js +275 -0
  96. package/dist/analytics/extractCorpus/core.js +392 -0
  97. package/dist/analytics/extractCorpus/corpus.js +167 -0
  98. package/dist/analytics/extractCorpus/coverageAudit.js +260 -0
  99. package/dist/analytics/extractCorpus/cursorSessions.js +425 -0
  100. package/dist/analytics/extractCorpus/evidenceTiers.js +603 -0
  101. package/dist/analytics/extractCorpus/extractCorpusParity.js +105 -0
  102. package/dist/analytics/extractCorpus/filesystemSources.js +118 -0
  103. package/dist/analytics/extractCorpus/index.js +14 -0
  104. package/dist/analytics/extractCorpus/jsonlSessions.js +204 -0
  105. package/dist/analytics/extractCorpus/sqliteCaps.js +43 -0
  106. package/dist/analytics/extractCorpus/sqliteSessions.js +367 -0
  107. package/dist/analytics/extractCorpus/tierReader.js +108 -0
  108. package/dist/analytics/extractCorpus.js +2 -1791
  109. package/dist/analytics/glossaryAdviceResolution.js +166 -0
  110. package/dist/analytics/glossaryInputAcquisition.js +319 -0
  111. package/dist/analytics/personalGlossaryAdmission.js +133 -0
  112. package/dist/analytics/personalGlossaryProfile.js +219 -0
  113. package/dist/analytics/profileSignals.js +211 -0
  114. package/dist/analytics/usageStats.js +169 -42
  115. package/dist/audit/terminologyDrift.js +281 -0
  116. package/dist/bin/agentera.js +3 -2
  117. package/dist/capabilities/audit/instructions.js +16 -0
  118. package/dist/capabilities/build/instructions.js +56 -0
  119. package/dist/capabilities/design/instructions.js +4 -0
  120. package/dist/capabilities/discuss/instructions.js +29 -0
  121. package/dist/capabilities/document/instructions.js +11 -0
  122. package/dist/capabilities/index.js +29 -27
  123. package/dist/capabilities/optimize/instructions.js +14 -0
  124. package/dist/capabilities/orchestrate/instructions.js +42 -0
  125. package/dist/capabilities/plan/instructions.js +33 -0
  126. package/dist/capabilities/profile/instructions.js +70 -0
  127. package/dist/capabilities/research/instructions.js +5 -0
  128. package/dist/capabilities/status/instructions.js +15 -0
  129. package/dist/capabilities/status/startupInstructions.js +34 -0
  130. package/dist/capabilities/vision/instructions.js +4 -0
  131. package/dist/cli/appContext.js +30 -24
  132. package/dist/cli/argvalidate.js +0 -1
  133. package/dist/cli/capabilityContext/benchmark.js +565 -0
  134. package/dist/cli/capabilityContext/bespoke.js +44 -0
  135. package/dist/cli/capabilityContext/build.js +242 -0
  136. package/dist/cli/capabilityContext/closeout.js +233 -0
  137. package/dist/cli/capabilityContext/contract.js +179 -0
  138. package/dist/cli/capabilityContext/evidence.js +463 -0
  139. package/dist/cli/capabilityContext/index.js +3 -0
  140. package/dist/cli/capabilityContext/orchestration.js +131 -0
  141. package/dist/cli/capabilityContext/planState.js +260 -0
  142. package/dist/cli/capabilityContext/progress.js +142 -0
  143. package/dist/cli/capabilityContext/projectVerification.js +409 -0
  144. package/dist/cli/capabilityContext/shared.js +83 -0
  145. package/dist/cli/capabilityContext/slim.js +152 -0
  146. package/dist/cli/capabilityContext/startup.js +150 -0
  147. package/dist/cli/capabilityContext/startupAggregation.js +68 -0
  148. package/dist/cli/capabilityContext/types.js +56 -0
  149. package/dist/cli/capabilityContext.js +1 -2487
  150. package/dist/cli/commands/appHome.js +22 -0
  151. package/dist/cli/commands/capability.js +4 -4
  152. package/dist/cli/commands/compact.js +164 -14
  153. package/dist/cli/commands/doctor.js +122 -97
  154. package/dist/cli/commands/durability.js +81 -0
  155. package/dist/cli/commands/glossaryAdvice.js +138 -0
  156. package/dist/cli/commands/lint.js +26 -44
  157. package/dist/cli/commands/personalGlossary.js +176 -0
  158. package/dist/cli/commands/prime/briefOrientation.js +747 -0
  159. package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
  160. package/dist/cli/commands/prime/bundleStatus.js +190 -0
  161. package/dist/cli/commands/prime/collectEntityOrientation.js +326 -0
  162. package/dist/cli/commands/prime/collectOrientationState.js +212 -0
  163. package/dist/cli/commands/prime/orientationOutput.js +399 -0
  164. package/dist/cli/commands/prime/types.js +1 -0
  165. package/dist/cli/commands/prime/v1Migration.js +38 -0
  166. package/dist/cli/commands/prime.js +80 -558
  167. package/dist/cli/commands/profileGrounding.js +55 -0
  168. package/dist/cli/commands/query.js +78 -53
  169. package/dist/cli/commands/report.js +96 -25
  170. package/dist/cli/commands/route.js +142 -0
  171. package/dist/cli/commands/schema.js +266 -143
  172. package/dist/cli/commands/state/decisions.js +387 -0
  173. package/dist/cli/commands/state/docs.js +70 -0
  174. package/dist/cli/commands/state/experimentRecords.js +151 -0
  175. package/dist/cli/commands/state/experiments.js +14 -0
  176. package/dist/cli/commands/state/get.js +129 -0
  177. package/dist/cli/commands/state/health.js +14 -0
  178. package/dist/cli/commands/state/index.js +16 -0
  179. package/dist/cli/commands/state/list.js +194 -0
  180. package/dist/cli/commands/state/objective.js +25 -0
  181. package/dist/cli/commands/state/plan.js +14 -0
  182. package/dist/cli/commands/state/planTasks.js +154 -0
  183. package/dist/cli/commands/state/plans.js +154 -0
  184. package/dist/cli/commands/state/progress.js +13 -0
  185. package/dist/cli/commands/state/shared.js +14 -0
  186. package/dist/cli/commands/state/todo.js +42 -0
  187. package/dist/cli/commands/state/write.js +430 -0
  188. package/dist/cli/commands/upgrade.js +146 -5
  189. package/dist/cli/commands/upgradeVerify.js +118 -0
  190. package/dist/cli/commands/validate.js +272 -223
  191. package/dist/cli/commands/verify.js +24 -9
  192. package/dist/cli/contracts/bundleStatus.js +1 -0
  193. package/dist/cli/contracts/orientationState.js +1 -0
  194. package/dist/cli/dispatch/argvParser.js +32 -0
  195. package/dist/cli/dispatch/check.js +372 -0
  196. package/dist/cli/dispatch/commands.js +27 -0
  197. package/dist/cli/dispatch/index.js +207 -0
  198. package/dist/cli/dispatch/lifecycle.js +652 -0
  199. package/dist/cli/dispatch/prime.js +139 -0
  200. package/dist/cli/dispatch/projections.js +17 -0
  201. package/dist/cli/dispatch/shared.js +63 -0
  202. package/dist/cli/dispatch/state.js +140 -0
  203. package/dist/cli/dispatch.js +1 -1294
  204. package/dist/cli/errors.js +16 -17
  205. package/dist/cli/help.js +394 -43
  206. package/dist/cli/migrationRequired.js +87 -0
  207. package/dist/cli/orientation/attention.js +61 -0
  208. package/dist/cli/orientation/corpusCoverage.js +102 -0
  209. package/dist/cli/orientation.js +438 -170
  210. package/dist/cli/planArtifacts.js +350 -0
  211. package/dist/cli/planEvidence.js +157 -0
  212. package/dist/cli/planLifecycleState.js +36 -0
  213. package/dist/cli/planTaskIndex.js +11 -0
  214. package/dist/cli/preCutoverCommand.js +32 -0
  215. package/dist/cli/prime-blob.js +71 -3
  216. package/dist/cli/profileAcquisition.js +167 -0
  217. package/dist/cli/startupCompletenessContract.js +59 -0
  218. package/dist/cli/stateQuery.js +56 -14
  219. package/dist/cli/structured.js +0 -1
  220. package/dist/cli/todoMarkdown.js +25 -12
  221. package/dist/cli/todoReadinessSelection.js +192 -0
  222. package/dist/cli/todoSeverity.js +18 -0
  223. package/dist/core/atomicWriter.js +20 -0
  224. package/dist/core/developmentChannel.js +1 -0
  225. package/dist/core/developmentInvocation.js +374 -0
  226. package/dist/core/difflib.js +0 -1
  227. package/dist/core/envPaths.js +20 -0
  228. package/dist/core/jsonValue.js +5 -0
  229. package/dist/core/paths.js +0 -1
  230. package/dist/core/pyjson.js +67 -3
  231. package/dist/core/shell.js +4 -0
  232. package/dist/core/skillIdentity.js +23 -0
  233. package/dist/core/sourceRoot.js +9 -12
  234. package/dist/core/text.js +10 -0
  235. package/dist/core/toml.js +0 -1
  236. package/dist/core/yaml.js +8 -1
  237. package/dist/eval/evalSkills.js +30 -26
  238. package/dist/eval/hybridRouteEvaluation.js +155 -0
  239. package/dist/eval/semanticEval.js +43 -20
  240. package/dist/eval/semanticFixtures.js +16 -5
  241. package/dist/hooks/common.js +11 -79
  242. package/dist/hooks/compaction/apply.js +446 -0
  243. package/dist/hooks/compaction/dryRun.js +184 -0
  244. package/dist/hooks/compaction/index.js +22 -0
  245. package/dist/hooks/compaction/parse.js +325 -0
  246. package/dist/hooks/compaction/retention.js +202 -0
  247. package/dist/hooks/compaction/status.js +360 -0
  248. package/dist/hooks/compaction/types.js +5 -0
  249. package/dist/hooks/validateArtifact/agentFacing.js +9 -0
  250. package/dist/hooks/validateArtifact/index.js +92 -0
  251. package/dist/hooks/validateArtifact/markdown.js +145 -0
  252. package/dist/hooks/validateArtifact/schema.js +546 -0
  253. package/dist/hooks/validateArtifact/traversal.js +107 -0
  254. package/dist/hooks/validateArtifact/violations.js +107 -0
  255. package/dist/migrate/v2HandoffManifest.js +452 -0
  256. package/dist/registries/activationContract.js +2 -0
  257. package/dist/registries/activationTuples.js +107 -0
  258. package/dist/registries/artifactProtocolIds.js +78 -0
  259. package/dist/registries/artifactRegistry.js +224 -63
  260. package/dist/registries/artifactSchemaProjection.js +45 -0
  261. package/dist/registries/capabilityContract.js +129 -2
  262. package/dist/registries/evaluatorHandoffContract.js +2 -3
  263. package/dist/registries/evidenceTierContract.js +371 -0
  264. package/dist/registries/glossaryAdviceContract.js +79 -0
  265. package/dist/registries/glossaryCaveatContract.js +67 -0
  266. package/dist/registries/glossaryConsumerContractValidation.js +787 -0
  267. package/dist/registries/glossaryEntryContract.js +757 -0
  268. package/dist/registries/glossaryTermIdentity.js +17 -0
  269. package/dist/registries/glossaryTermOccurrence.js +20 -0
  270. package/dist/registries/hybridRoute.js +274 -0
  271. package/dist/registries/hybridRouteReceipt.js +221 -0
  272. package/dist/registries/packagePublication.js +229 -0
  273. package/dist/registries/packageRegistry.js +187 -211
  274. package/dist/registries/todoReadinessContract.js +448 -0
  275. package/dist/registries/triggerLoader.js +174 -0
  276. package/dist/registries/verbosityBudgetContract.js +205 -0
  277. package/dist/release/releaseMetadata.js +385 -0
  278. package/dist/runtime/lifecycleAdapterContract.js +457 -0
  279. package/dist/runtime/lifecycleAdapters.js +777 -0
  280. package/dist/runtime/lifecycleAuthority.js +453 -0
  281. package/dist/runtime/lifecycleOperationContract.js +123 -0
  282. package/dist/runtime/lifecycleOperations.js +634 -0
  283. package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
  284. package/dist/runtime/lifecyclePublication.js +415 -0
  285. package/dist/runtime/lifecycleSnapshot.js +438 -0
  286. package/dist/runtime/nativeResourceCleanup.js +502 -0
  287. package/dist/setup/opencode.js +20 -0
  288. package/dist/setup/opencodeConstants.js +1 -0
  289. package/dist/setup/sharedSkill.js +45 -0
  290. package/dist/setup/smokeChecks.js +21 -82
  291. package/dist/state/archiveDiscovery.js +580 -0
  292. package/dist/state/archivePublication.js +225 -0
  293. package/dist/state/archiveRecovery.js +237 -0
  294. package/dist/state/archiveReplay.js +53 -0
  295. package/dist/state/canonicalMigrationRecord.js +36 -0
  296. package/dist/state/changelog.js +221 -0
  297. package/dist/state/decisionEntities.js +367 -0
  298. package/dist/state/decisionLegacyValidation.js +215 -0
  299. package/dist/state/decisionMigrationProvenance.js +199 -0
  300. package/dist/state/decisionOverlay.js +254 -0
  301. package/dist/state/decisionRevision.js +256 -0
  302. package/dist/state/decisionRevisionMigration.js +89 -0
  303. package/dist/state/directRetrieval.js +323 -0
  304. package/dist/state/durability.js +324 -0
  305. package/dist/state/entityCutover.js +459 -0
  306. package/dist/state/entityCutoverGit.js +127 -0
  307. package/dist/state/entityGlossaryAuthority.js +13 -0
  308. package/dist/state/entityListProjection.js +187 -0
  309. package/dist/state/entityListRuntimeRegistry.js +85 -0
  310. package/dist/state/entityMigrationCausality.js +97 -0
  311. package/dist/state/entityMigrationIdentity.js +5 -0
  312. package/dist/state/entityMigrationPreview.js +846 -0
  313. package/dist/state/entityMigrationTodo.js +133 -0
  314. package/dist/state/entityPublicationContext.js +806 -0
  315. package/dist/state/entityRetrievalHelp.js +506 -0
  316. package/dist/state/entityStorage.js +899 -0
  317. package/dist/state/exactReplacementRecovery.js +18 -0
  318. package/dist/state/experimentArchive.js +63 -0
  319. package/dist/state/experimentIdentity.js +202 -0
  320. package/dist/state/healthEntities.js +262 -0
  321. package/dist/state/healthEntityValidation.js +18 -0
  322. package/dist/state/healthRepair.js +69 -0
  323. package/dist/state/installRoot.js +64 -25
  324. package/dist/state/legacyEntityCutoverEvidence.js +65 -0
  325. package/dist/state/legacyIdentity.js +47 -0
  326. package/dist/state/legacySummaryRecord.js +6 -0
  327. package/dist/state/listAccounting.js +54 -0
  328. package/dist/state/listClassification.js +17 -0
  329. package/dist/state/listCursor.js +42 -0
  330. package/dist/state/listRetrieval.js +781 -0
  331. package/dist/state/migrationSourceBinding.js +30 -0
  332. package/dist/state/objectiveExperimentEntities.js +322 -0
  333. package/dist/state/planEntities.js +982 -0
  334. package/dist/state/planIdentity.js +47 -0
  335. package/dist/state/planLineageValidation.js +52 -0
  336. package/dist/state/planReplacementTransaction.js +475 -0
  337. package/dist/state/planRetrieval.js +313 -0
  338. package/dist/state/planTaskRetrieval.js +294 -0
  339. package/dist/state/progressEntities.js +512 -0
  340. package/dist/state/progressGlossaryCaveat.js +168 -0
  341. package/dist/state/progressPublicationOrder.js +19 -0
  342. package/dist/state/projectRoot.js +62 -0
  343. package/dist/state/projectionPolicy.js +190 -0
  344. package/dist/state/retrievalAuthority.js +156 -0
  345. package/dist/state/safeProjectFile.js +155 -0
  346. package/dist/state/startupAnalysis/benchmark.js +432 -0
  347. package/dist/state/startupAnalysis/contract.js +160 -0
  348. package/dist/state/startupAnalysis/helpers.js +286 -0
  349. package/dist/state/startupAnalysis/index.js +6 -0
  350. package/dist/state/startupAnalysis/metrics.js +340 -0
  351. package/dist/state/startupAnalysis/records.js +198 -0
  352. package/dist/state/startupAnalysis/report.js +111 -0
  353. package/dist/state/startupAnalysis/threshold.js +512 -0
  354. package/dist/state/startupAnalysis.js +2 -1953
  355. package/dist/state/startupProjection.js +499 -0
  356. package/dist/state/stateMode.js +85 -0
  357. package/dist/state/stateStorageAuthority.js +47 -0
  358. package/dist/state/summaryEntityRead.js +25 -0
  359. package/dist/state/summaryMigrationProvenance.js +66 -0
  360. package/dist/state/summarySourceRowAuthority.js +36 -0
  361. package/dist/state/todoActivationSafety.js +58 -0
  362. package/dist/state/todoDocsEntities.js +1069 -0
  363. package/dist/state/todoDocsEntityValidation.js +158 -0
  364. package/dist/state/todoMarkdownProjection.js +51 -0
  365. package/dist/state/todoReconciliationActivation.js +140 -0
  366. package/dist/state/todoReconciliationInspection.js +169 -0
  367. package/dist/state/todoReconciliationRepair.js +170 -0
  368. package/dist/state/todoReconciliationTransaction.js +582 -0
  369. package/dist/state/write/assign.js +20 -0
  370. package/dist/state/write/candidateMutation.js +269 -0
  371. package/dist/state/write/errors.js +11 -0
  372. package/dist/state/write/experimentPublication.js +192 -0
  373. package/dist/state/write/explain.js +363 -0
  374. package/dist/state/write/fields.js +61 -0
  375. package/dist/state/write/glossaryPublication.js +263 -0
  376. package/dist/state/write/grammar.js +285 -0
  377. package/dist/state/write/helpers.js +29 -0
  378. package/dist/state/write/index.js +12 -0
  379. package/dist/state/write/input.js +367 -0
  380. package/dist/state/write/lock.js +837 -0
  381. package/dist/state/write/mutation.js +234 -0
  382. package/dist/state/write/operations.js +170 -0
  383. package/dist/state/write/planEvaluation.js +128 -0
  384. package/dist/state/write/planPublication.js +179 -0
  385. package/dist/state/write/runtimeOperations.js +144 -0
  386. package/dist/state/write/serialize.js +1 -0
  387. package/dist/state/write/transaction.js +52 -0
  388. package/dist/state/write/validate.js +7 -0
  389. package/dist/upgrade/appContentRefresh.js +383 -0
  390. package/dist/upgrade/appModel.js +8 -7
  391. package/dist/upgrade/atomicWriter.js +1 -0
  392. package/dist/upgrade/bundleEvidence.js +33 -0
  393. package/dist/upgrade/channels.js +12 -8
  394. package/dist/upgrade/compatibility.js +56 -21
  395. package/dist/upgrade/doctor.js +197 -192
  396. package/dist/upgrade/doctorClassifier.js +187 -0
  397. package/dist/upgrade/installedHooksRetirement.js +196 -0
  398. package/dist/upgrade/legacyAgentCleanup.js +282 -0
  399. package/dist/upgrade/lifecycleUpgrade.js +113 -0
  400. package/dist/upgrade/migrateArtifactsV2ToV3.js +367 -149
  401. package/dist/upgrade/migrationPublication.js +122 -0
  402. package/dist/upgrade/nextMajorDoctor.js +42 -8
  403. package/dist/upgrade/npxPlatformStatus.js +22 -0
  404. package/dist/upgrade/projectIntegration.js +145 -187
  405. package/dist/upgrade/projectIntegrationDecision.js +50 -0
  406. package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
  407. package/dist/upgrade/runtimeMigration.js +273 -363
  408. package/dist/upgrade/upgradeCommands.js +14 -1
  409. package/dist/upgrade/upgradeLock.js +85 -0
  410. package/dist/upgrade/upgradeOrchestrator.js +263 -59
  411. package/dist/upgrade/v3CapabilitySurface.js +14 -0
  412. package/dist/upgrade/versionResolution.js +8 -1
  413. package/dist/validate/activationArtifactEvidence.js +844 -0
  414. package/dist/validate/activationConjunction.js +816 -0
  415. package/dist/validate/activationEvidenceManifest.js +515 -0
  416. package/dist/validate/activationPackageSemantics.js +29 -0
  417. package/dist/validate/appHomeContract.js +5 -11
  418. package/dist/validate/bootstrapAuthority.js +44 -0
  419. package/dist/validate/capability.js +133 -12
  420. package/dist/validate/crossCapability.js +15 -10
  421. package/dist/validate/retainedReferenceAuthority.js +879 -0
  422. package/dist/validate/selfAudit.js +73 -37
  423. package/dist/validate/v1LegacyCruft.js +131 -0
  424. package/dist/validate/vocabularyAuthority.js +303 -0
  425. package/package.json +53 -27
  426. package/bundle/references/adapters/cursor.md +0 -213
  427. package/bundle/references/adapters/opencode.md +0 -530
  428. package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
  429. package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
  430. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
  431. package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -548
  432. package/bundle/references/adapters/runtime-feature-parity.md +0 -189
  433. package/bundle/references/analysis/benchmark.md +0 -267
  434. package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
  435. package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
  436. package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -355
  437. package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -278
  438. package/bundle/references/cli/capability-tool-classification.yaml +0 -53
  439. package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
  440. package/bundle/references/meta/documentation-inventory.md +0 -43
  441. package/bundle/references/v1-section-mapping.md +0 -47
  442. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  443. package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
  444. package/bundle/skills/agentera/agents/hej.toml +0 -6
  445. package/bundle/skills/agentera/agents/inspektera.toml +0 -6
  446. package/bundle/skills/agentera/agents/inspirera.toml +0 -6
  447. package/bundle/skills/agentera/agents/optimera.toml +0 -6
  448. package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
  449. package/bundle/skills/agentera/agents/planera.toml +0 -6
  450. package/bundle/skills/agentera/agents/profilera.toml +0 -6
  451. package/bundle/skills/agentera/agents/realisera.toml +0 -6
  452. package/bundle/skills/agentera/agents/resonera.toml +0 -6
  453. package/bundle/skills/agentera/agents/visionera.toml +0 -6
  454. package/bundle/skills/agentera/agents/visualisera.toml +0 -6
  455. package/bundle/skills/agentera/capabilities/dokumentera/schemas/artifacts.yaml +0 -73
  456. package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +0 -35
  457. package/bundle/skills/agentera/capabilities/hej/schemas/artifacts.yaml +0 -69
  458. package/bundle/skills/agentera/capabilities/hej/schemas/triggers.yaml +0 -58
  459. package/bundle/skills/agentera/capabilities/inspektera/schemas/artifacts.yaml +0 -76
  460. package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +0 -38
  461. package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +0 -24
  462. package/bundle/skills/agentera/capabilities/inspirera/schemas/triggers.yaml +0 -34
  463. package/bundle/skills/agentera/capabilities/optimera/schemas/triggers.yaml +0 -39
  464. package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +0 -64
  465. package/bundle/skills/agentera/capabilities/orkestrera/schemas/triggers.yaml +0 -42
  466. package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +0 -120
  467. package/bundle/skills/agentera/capabilities/planera/schemas/artifacts.yaml +0 -62
  468. package/bundle/skills/agentera/capabilities/planera/schemas/triggers.yaml +0 -34
  469. package/bundle/skills/agentera/capabilities/planera/schemas/validation.yaml +0 -61
  470. package/bundle/skills/agentera/capabilities/profilera/schemas/artifacts.yaml +0 -18
  471. package/bundle/skills/agentera/capabilities/profilera/schemas/triggers.yaml +0 -45
  472. package/bundle/skills/agentera/capabilities/profilera/schemas/validation.yaml +0 -57
  473. package/bundle/skills/agentera/capabilities/realisera/schemas/artifacts.yaml +0 -80
  474. package/bundle/skills/agentera/capabilities/realisera/schemas/triggers.yaml +0 -39
  475. package/bundle/skills/agentera/capabilities/realisera/schemas/validation.yaml +0 -110
  476. package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +0 -47
  477. package/bundle/skills/agentera/capabilities/resonera/schemas/triggers.yaml +0 -46
  478. package/bundle/skills/agentera/capabilities/resonera/schemas/validation.yaml +0 -77
  479. package/bundle/skills/agentera/capabilities/visionera/schemas/triggers.yaml +0 -41
  480. package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +0 -33
  481. package/bundle/skills/agentera/references/contract.md +0 -1039
  482. package/bundle/skills/hej/.claude-plugin/plugin.json +0 -6
  483. package/bundle/skills/hej/SKILL.md +0 -69
  484. package/bundle/skills/hej/agents/hej.toml +0 -11
  485. package/bundle/skills/hej/agents/openai.yaml +0 -8
  486. package/dist/analytics/extractCorpus.js.map +0 -1
  487. package/dist/analytics/usageStats.js.map +0 -1
  488. package/dist/bin/agentera.js.map +0 -1
  489. package/dist/capabilities/dokumentera/instructions.js +0 -6
  490. package/dist/capabilities/dokumentera/instructions.js.map +0 -1
  491. package/dist/capabilities/hej/instructions.js +0 -6
  492. package/dist/capabilities/hej/instructions.js.map +0 -1
  493. package/dist/capabilities/index.js.map +0 -1
  494. package/dist/capabilities/inspektera/instructions.js +0 -6
  495. package/dist/capabilities/inspektera/instructions.js.map +0 -1
  496. package/dist/capabilities/inspirera/instructions.js +0 -6
  497. package/dist/capabilities/inspirera/instructions.js.map +0 -1
  498. package/dist/capabilities/optimera/instructions.js +0 -6
  499. package/dist/capabilities/optimera/instructions.js.map +0 -1
  500. package/dist/capabilities/orkestrera/instructions.js +0 -6
  501. package/dist/capabilities/orkestrera/instructions.js.map +0 -1
  502. package/dist/capabilities/planera/instructions.js +0 -6
  503. package/dist/capabilities/planera/instructions.js.map +0 -1
  504. package/dist/capabilities/profilera/instructions.js +0 -6
  505. package/dist/capabilities/profilera/instructions.js.map +0 -1
  506. package/dist/capabilities/realisera/instructions.js +0 -6
  507. package/dist/capabilities/realisera/instructions.js.map +0 -1
  508. package/dist/capabilities/resonera/instructions.js +0 -6
  509. package/dist/capabilities/resonera/instructions.js.map +0 -1
  510. package/dist/capabilities/visionera/instructions.js +0 -6
  511. package/dist/capabilities/visionera/instructions.js.map +0 -1
  512. package/dist/capabilities/visualisera/instructions.js +0 -6
  513. package/dist/capabilities/visualisera/instructions.js.map +0 -1
  514. package/dist/cli/appContext.js.map +0 -1
  515. package/dist/cli/argvalidate.js.map +0 -1
  516. package/dist/cli/capabilityContext.js.map +0 -1
  517. package/dist/cli/commands/capability.js.map +0 -1
  518. package/dist/cli/commands/compact.js.map +0 -1
  519. package/dist/cli/commands/doctor.js.map +0 -1
  520. package/dist/cli/commands/lint.js.map +0 -1
  521. package/dist/cli/commands/prime.js.map +0 -1
  522. package/dist/cli/commands/query.js.map +0 -1
  523. package/dist/cli/commands/report.js.map +0 -1
  524. package/dist/cli/commands/schema.js.map +0 -1
  525. package/dist/cli/commands/state.js +0 -1023
  526. package/dist/cli/commands/state.js.map +0 -1
  527. package/dist/cli/commands/upgrade.js.map +0 -1
  528. package/dist/cli/commands/validate.js.map +0 -1
  529. package/dist/cli/commands/verify.js.map +0 -1
  530. package/dist/cli/dispatch.js.map +0 -1
  531. package/dist/cli/errors.js.map +0 -1
  532. package/dist/cli/help.js.map +0 -1
  533. package/dist/cli/orientation.js.map +0 -1
  534. package/dist/cli/prime-blob.js.map +0 -1
  535. package/dist/cli/stateQuery.js.map +0 -1
  536. package/dist/cli/structured.js.map +0 -1
  537. package/dist/cli/todoMarkdown.js.map +0 -1
  538. package/dist/core/difflib.js.map +0 -1
  539. package/dist/core/paths.js.map +0 -1
  540. package/dist/core/pyjson.js.map +0 -1
  541. package/dist/core/sourceRoot.js.map +0 -1
  542. package/dist/core/toml.js.map +0 -1
  543. package/dist/core/yaml.js.map +0 -1
  544. package/dist/eval/evalSkills.js.map +0 -1
  545. package/dist/eval/semanticEval.js.map +0 -1
  546. package/dist/eval/semanticFixtures.js.map +0 -1
  547. package/dist/hooks/common.js.map +0 -1
  548. package/dist/hooks/compaction.js +0 -935
  549. package/dist/hooks/compaction.js.map +0 -1
  550. package/dist/hooks/cursorPreToolUse.js +0 -19
  551. package/dist/hooks/cursorPreToolUse.js.map +0 -1
  552. package/dist/hooks/cursorSessionStart.js +0 -71
  553. package/dist/hooks/cursorSessionStart.js.map +0 -1
  554. package/dist/hooks/sessionStart.js +0 -209
  555. package/dist/hooks/sessionStart.js.map +0 -1
  556. package/dist/hooks/sessionStop.js +0 -212
  557. package/dist/hooks/sessionStop.js.map +0 -1
  558. package/dist/hooks/validateArtifact.js +0 -935
  559. package/dist/hooks/validateArtifact.js.map +0 -1
  560. package/dist/registries/artifactRegistry.js.map +0 -1
  561. package/dist/registries/capabilityContract.js.map +0 -1
  562. package/dist/registries/evaluatorHandoffContract.js.map +0 -1
  563. package/dist/registries/packageRegistry.js.map +0 -1
  564. package/dist/registries/runtimeAdapterRegistry.js +0 -315
  565. package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
  566. package/dist/setup/codex.js +0 -1197
  567. package/dist/setup/codex.js.map +0 -1
  568. package/dist/setup/copilot.js +0 -227
  569. package/dist/setup/copilot.js.map +0 -1
  570. package/dist/setup/cursor.js +0 -127
  571. package/dist/setup/cursor.js.map +0 -1
  572. package/dist/setup/doctor.js +0 -1297
  573. package/dist/setup/doctor.js.map +0 -1
  574. package/dist/setup/smokeChecks.js.map +0 -1
  575. package/dist/state/installRoot.js.map +0 -1
  576. package/dist/state/startupAnalysis.js.map +0 -1
  577. package/dist/upgrade/appModel.js.map +0 -1
  578. package/dist/upgrade/channels.js.map +0 -1
  579. package/dist/upgrade/compatibility.js.map +0 -1
  580. package/dist/upgrade/doctor.js.map +0 -1
  581. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -570
  582. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
  583. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
  584. package/dist/upgrade/nextMajorDoctor.js.map +0 -1
  585. package/dist/upgrade/projectIntegration.js.map +0 -1
  586. package/dist/upgrade/runtimeMigration.js.map +0 -1
  587. package/dist/upgrade/upgradeCommands.js.map +0 -1
  588. package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
  589. package/dist/upgrade/versionResolution.js.map +0 -1
  590. package/dist/validate/appHomeContract.js.map +0 -1
  591. package/dist/validate/capability.js.map +0 -1
  592. package/dist/validate/crossCapability.js.map +0 -1
  593. package/dist/validate/lifecycleAdapters.js +0 -772
  594. package/dist/validate/lifecycleAdapters.js.map +0 -1
  595. package/dist/validate/selfAudit.js.map +0 -1
  596. /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
  597. /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
  598. /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
@@ -0,0 +1,502 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { loadYamlMapping } from "../core/yaml.js";
4
+ import { resolveSourceRoot } from "../core/sourceRoot.js";
5
+ import { LIFECYCLE_OPERATION_CONTRACT_RELATIVE_PATH, LIFECYCLE_MANUAL_REVIEW_GUIDANCE, applyLifecycleOperations, createLifecycleOwnershipManifest, emptyLifecycleOwnershipLedger, planLifecycleOperations, validateLifecycleOwnershipLedger, } from "./lifecycleOperations.js";
6
+ import { LIFECYCLE_AUTHORITY_RELATIVE_PATH, NATIVE_RESOURCE_CLEANUP_CONTRACT_RELATIVE_PATH, loadLifecycleAuthority, } from "./lifecycleAuthority.js";
7
+ import { loadRuntimeLifecycleAdapterContract } from "./lifecycleAdapterContract.js";
8
+ import { loadLifecycleOperationContract } from "./lifecycleOperationContract.js";
9
+ const REQUIRED_RESOURCE_VOCABULARY = {
10
+ "claude.skill-link": "legacy_skill_link",
11
+ "codex.agent-descriptor": "capability_descriptor",
12
+ "opencode.plugin": "plugin",
13
+ "opencode.command": "command",
14
+ "legacy.primary-agent": "primary_agent",
15
+ "legacy.capability-agent": "capability_agent",
16
+ "opencode.stale-skill-link": "stale_skill_link",
17
+ "installed.hook": "installed_hook",
18
+ "agentera.registration": "registration",
19
+ };
20
+ const CUTOVER_DELETION_INVENTORY = [
21
+ ["packages/cli/src/migrate/v2HandoffManifest.ts", "tracked_v2_handoff_preflight"],
22
+ ["packages/cli/src/upgrade/appContentRefresh.ts", "v2_managed_app_content_refresh"],
23
+ ["packages/cli/src/upgrade/compatibility.ts", "v2_install_classification"],
24
+ ["packages/cli/src/upgrade/installedHooksRetirement.ts", "installed_v2_hook_retirement"],
25
+ ["packages/cli/src/upgrade/legacyAgentCleanup.ts", "v2_native_agent_retirement"],
26
+ ["packages/cli/src/upgrade/migrateArtifactsV2ToV3.ts", "v2_project_artifact_migration"],
27
+ ["packages/cli/src/upgrade/runtimeMigration.ts", "v2_native_hook_retirement"],
28
+ ["packages/cli/src/upgrade/versionResolution.ts", "cross_major_v2_upgrade_resolution"],
29
+ ["packages/cli/shim/lib/exec.mjs", "v2_shim_handoff"],
30
+ ["packages/cli/test/upgrade/fixtures/v2-*", "v2_migration_fixtures"],
31
+ ];
32
+ function isMapping(value) {
33
+ return value !== null && typeof value === "object" && !Array.isArray(value);
34
+ }
35
+ function stringList(value) {
36
+ return Array.isArray(value) && value.every((item) => typeof item === "string") ? value : [];
37
+ }
38
+ function requiredString(value, key) {
39
+ return typeof value[key] === "string" && value[key].length > 0;
40
+ }
41
+ function expandedDiagnosticIds(resource) {
42
+ if (typeof resource.id !== "string")
43
+ return [];
44
+ const names = stringList(resource.names);
45
+ if (!resource.id.includes("{name}"))
46
+ return [resource.id];
47
+ return names.map((name) => resource.id.replace("{name}", name));
48
+ }
49
+ export function validateNativeResourceCleanupContractData(value) {
50
+ if (!isMapping(value))
51
+ return ["native resource cleanup contract must be a YAML object"];
52
+ const errors = [];
53
+ if (value.schema_version !== "agentera.nativeResourceCleanup.v1") {
54
+ errors.push("schema_version must be agentera.nativeResourceCleanup.v1");
55
+ }
56
+ if (value.status !== "resource_retirement_contract") {
57
+ errors.push("status must be resource_retirement_contract");
58
+ }
59
+ if (value.decision !== "nksvqmnevm")
60
+ errors.push("decision must cite firm decision nksvqmnevm");
61
+ if (value.authority !== LIFECYCLE_AUTHORITY_RELATIVE_PATH) {
62
+ errors.push(`authority must point to ${LIFECYCLE_AUTHORITY_RELATIVE_PATH}`);
63
+ }
64
+ if (value.operation_contract !== LIFECYCLE_OPERATION_CONTRACT_RELATIVE_PATH) {
65
+ errors.push(`operation_contract must point to ${LIFECYCLE_OPERATION_CONTRACT_RELATIVE_PATH}`);
66
+ }
67
+ const policy = isMapping(value.policy) ? value.policy : {};
68
+ if (policy.host_inventory_exposure !== "evidence_only"
69
+ || policy.selection !== "native_agentera_resource_only"
70
+ || policy.preview !== "strictly_read_only"
71
+ || policy.apply_requires !== "explicit_approval"
72
+ || policy.ownership !== "matching_whole_resource_ledger_identity_and_fingerprint"
73
+ || policy.shared_configuration !== "action_required_without_key_level_ownership"
74
+ || policy.unsupported_platform_result !== "action_required") {
75
+ errors.push("policy must expose resource-only selection, pure preview, explicit approval, and fail-closed ownership");
76
+ }
77
+ const forbidden = stringList(policy.forbidden_ownership_evidence);
78
+ for (const evidence of ["value_equality", "managed_marker", "resource_name", "file_equality"]) {
79
+ if (!forbidden.includes(evidence))
80
+ errors.push(`policy must reject ${evidence} as ownership evidence`);
81
+ }
82
+ const hosts = Array.isArray(value.hosts) ? value.hosts : [];
83
+ const expectedHosts = {
84
+ codex: "supported",
85
+ cursor: "supported",
86
+ opencode: "supported",
87
+ copilot: "supported_disabled",
88
+ claude: "retired_historical",
89
+ };
90
+ const hostStatuses = new Map();
91
+ for (const host of hosts) {
92
+ if (!isMapping(host) || !requiredString(host, "id") || !requiredString(host, "display_name"))
93
+ continue;
94
+ if (!(host.support_status === "supported" || host.support_status === "supported_disabled" || host.support_status === "retired_historical"))
95
+ continue;
96
+ hostStatuses.set(host.id, host.support_status);
97
+ }
98
+ for (const [id, status] of Object.entries(expectedHosts)) {
99
+ if (hostStatuses.get(id) !== status)
100
+ errors.push(`hosts must retain ${id} as ${status}`);
101
+ }
102
+ const evidence = Array.isArray(value.accepted_host_evidence) ? value.accepted_host_evidence : [];
103
+ const proofByHost = new Map();
104
+ for (const item of evidence) {
105
+ if (isMapping(item) && requiredString(item, "host") && requiredString(item, "proof")) {
106
+ proofByHost.set(item.host, item.proof);
107
+ }
108
+ }
109
+ for (const host of ["codex", "cursor", "opencode", "copilot"]) {
110
+ if (!proofByHost.has(host))
111
+ errors.push(`accepted_host_evidence must retain ${host} proof`);
112
+ }
113
+ const vocabulary = Array.isArray(value.resource_vocabulary) ? value.resource_vocabulary : [];
114
+ const vocabularyById = new Map();
115
+ for (const entry of vocabulary) {
116
+ if (!isMapping(entry) || !requiredString(entry, "id"))
117
+ continue;
118
+ vocabularyById.set(entry.id, entry);
119
+ }
120
+ if (vocabulary.length !== Object.keys(REQUIRED_RESOURCE_VOCABULARY).length) {
121
+ errors.push("resource_vocabulary must declare every retired native resource class");
122
+ }
123
+ for (const [id, resourceClass] of Object.entries(REQUIRED_RESOURCE_VOCABULARY)) {
124
+ const entry = vocabularyById.get(id);
125
+ if (!entry || entry.resource_class !== resourceClass
126
+ || !(entry.migration_scope === "explicit_cleanup" || entry.migration_scope === "v2_upgrade_only")
127
+ || stringList(entry.resource_ids).length === 0
128
+ || !Array.isArray(entry.historical_ids)) {
129
+ errors.push(`resource_vocabulary must retain ${id} as ${resourceClass}`);
130
+ }
131
+ }
132
+ const registrationEvidence = stringList(vocabularyById.get("agentera.registration")?.identity_evidence);
133
+ if (registrationEvidence.length === 0) {
134
+ errors.push("agentera.registration must retain identity evidence for excluded template labels");
135
+ }
136
+ const declaredDiagnosticIds = new Map();
137
+ for (const [vocabularyId, entry] of vocabularyById) {
138
+ for (const resourceId of stringList(entry.resource_ids)) {
139
+ if (resourceId.includes("{")) {
140
+ errors.push(`resource_vocabulary ${vocabularyId} must declare exact resource IDs`);
141
+ continue;
142
+ }
143
+ if (declaredDiagnosticIds.has(resourceId)) {
144
+ errors.push(`resource_vocabulary must not duplicate ${resourceId}`);
145
+ continue;
146
+ }
147
+ declaredDiagnosticIds.set(resourceId, vocabularyId);
148
+ }
149
+ }
150
+ const diagnosticInventory = isMapping(value.diagnostic_inventory) ? value.diagnostic_inventory : null;
151
+ const maximumResources = diagnosticInventory?.maximum_resources;
152
+ const maximumFileBytes = diagnosticInventory?.maximum_file_bytes;
153
+ if (!Number.isInteger(maximumResources) || maximumResources < 1 || maximumResources > 256
154
+ || !Number.isInteger(maximumFileBytes) || maximumFileBytes < 1 || maximumFileBytes > 1024 * 1024) {
155
+ errors.push("diagnostic_inventory must declare bounded maximum_resources and maximum_file_bytes");
156
+ }
157
+ const diagnosticResources = Array.isArray(diagnosticInventory?.resources) ? diagnosticInventory.resources : [];
158
+ const diagnosticIds = new Map();
159
+ for (const resource of diagnosticResources) {
160
+ if (!isMapping(resource)
161
+ || !requiredString(resource, "id")
162
+ || !requiredString(resource, "vocabulary")
163
+ || !Array.isArray(resource.destinations)
164
+ || !stringList(resource.destinations).length
165
+ || (resource.names !== undefined && !Array.isArray(resource.names))
166
+ || (resource.contains !== undefined && !requiredString(resource, "contains"))) {
167
+ errors.push("diagnostic_inventory resources must declare bounded resource IDs and paths");
168
+ continue;
169
+ }
170
+ const vocabularyId = resource.vocabulary;
171
+ if (!vocabularyById.has(vocabularyId)) {
172
+ errors.push(`diagnostic_inventory references unknown vocabulary ${vocabularyId}`);
173
+ }
174
+ const template = resource.id;
175
+ const ids = expandedDiagnosticIds(resource);
176
+ if (template.includes("{") && (template.match(/\{name\}/g)?.length !== 1 || ids.length === 0)) {
177
+ errors.push(`diagnostic_inventory must expand ${template} with one or more names`);
178
+ }
179
+ for (const id of ids) {
180
+ const declaredVocabulary = declaredDiagnosticIds.get(id);
181
+ if (declaredVocabulary !== vocabularyId) {
182
+ errors.push(`diagnostic_inventory ${id} must map to its exact declared vocabulary identity`);
183
+ }
184
+ if (diagnosticIds.has(id)) {
185
+ errors.push(`diagnostic_inventory must not duplicate ${id}`);
186
+ }
187
+ else {
188
+ diagnosticIds.set(id, vocabularyId);
189
+ }
190
+ }
191
+ }
192
+ for (const id of declaredDiagnosticIds.keys()) {
193
+ if (!diagnosticIds.has(id))
194
+ errors.push(`diagnostic_inventory must define ${id}`);
195
+ }
196
+ const resources = Array.isArray(value.resources) ? value.resources : [];
197
+ if (resources.length !== 2)
198
+ errors.push("resources must declare the Claude link and Codex descriptor class");
199
+ const resourceById = new Map();
200
+ for (const resource of resources) {
201
+ if (!isMapping(resource) || !requiredString(resource, "id"))
202
+ continue;
203
+ resourceById.set(resource.id, resource);
204
+ }
205
+ const claude = resourceById.get("claude.agentera-skill-link");
206
+ if (!claude || claude.host !== "claude" || claude.kind !== "symlink" || claude.intent !== "remove"
207
+ || claude.destination !== "{home}/.claude/skills/agentera" || claude.ledger_status !== "legacy"
208
+ || claude.vocabulary !== "claude.skill-link" || !requiredString(claude, "durable_proof")) {
209
+ errors.push("Claude cleanup must remain the legacy-ledger Agentera skill symlink removal");
210
+ }
211
+ const codex = resourceById.get("codex.agent-descriptor");
212
+ const descriptors = codex ? stringList(codex.descriptors) : [];
213
+ const expectedDescriptors = ["status", "vision", "discuss", "research", "plan", "build", "optimize", "audit", "document", "profile", "design", "orchestrate"];
214
+ if (!codex || codex.host !== "codex" || codex.kind !== "file" || codex.intent !== "remove"
215
+ || codex.destination !== "{home}/.codex/agents/{descriptor}.toml" || codex.ledger_status !== "managed"
216
+ || codex.vocabulary !== "codex.agent-descriptor" || !requiredString(codex, "durable_proof")
217
+ || stringList(codex.historical_ids).join(",") !== "codex.agents.{descriptor}"
218
+ || descriptors.join(",") !== expectedDescriptors.join(",")) {
219
+ errors.push("Codex descriptors must be independently ledger-owned native files");
220
+ }
221
+ const configuration = Array.isArray(value.configuration_inventory) ? value.configuration_inventory : [];
222
+ const expectedKeys = [
223
+ "shell_environment_policy.set.AGENTERA_HOME",
224
+ "agents.max_depth",
225
+ "features.multi_agent_v2",
226
+ ];
227
+ if (configuration.length !== expectedKeys.length) {
228
+ errors.push("configuration_inventory must declare every Agentera-written Codex key");
229
+ }
230
+ for (const key of expectedKeys) {
231
+ const unit = configuration.find((item) => isMapping(item) && item.key === key);
232
+ if (!isMapping(unit) || !requiredString(unit, "id") || unit.host !== "codex" || unit.destination !== "{home}/.codex/config.toml"
233
+ || unit.durable_proof !== "key-level ownership ledger identity and fingerprint"
234
+ || unit.ownership_available !== false || unit.result_without_proof !== "action_required") {
235
+ errors.push(`configuration_inventory must preserve ${key} without key-level ownership`);
236
+ }
237
+ }
238
+ const deletionInventory = isMapping(value.cutover_deletion_inventory)
239
+ ? value.cutover_deletion_inventory
240
+ : null;
241
+ if (deletionInventory?.schema_version !== "agentera.v2CutoverDeletionInventory.v1"
242
+ || deletionInventory.approval_gate !== "approved_stable_cutover"
243
+ || deletionInventory.policy !== "delete_only_after_approved_stable_cutover") {
244
+ errors.push("cutover_deletion_inventory must be approval-gated v2 deletion inventory");
245
+ }
246
+ const deletionEntries = Array.isArray(deletionInventory?.entries)
247
+ ? deletionInventory.entries
248
+ : [];
249
+ const actualDeletionEntries = deletionEntries.flatMap((entry) => isMapping(entry) && typeof entry.path === "string" && typeof entry.responsibility === "string"
250
+ ? [[entry.path, entry.responsibility]]
251
+ : []);
252
+ if (JSON.stringify(actualDeletionEntries) !== JSON.stringify(CUTOVER_DELETION_INVENTORY)) {
253
+ errors.push("cutover_deletion_inventory must identify every quarantined v2 source, shim, and fixture path");
254
+ }
255
+ return errors;
256
+ }
257
+ function expandResource(resource, hostSupportStatus) {
258
+ const descriptorNames = stringList(resource.descriptors);
259
+ const ids = descriptorNames.length > 0
260
+ ? descriptorNames.map((name) => `${resource.id}.${name}`)
261
+ : [resource.id];
262
+ return ids.map((id, index) => ({
263
+ id,
264
+ historicalIds: stringList(resource.historical_ids).map((historicalId) => descriptorNames.length > 0
265
+ ? historicalId.replace("{descriptor}", descriptorNames[index])
266
+ : historicalId),
267
+ host: resource.host,
268
+ hostSupportStatus,
269
+ kind: resource.kind,
270
+ destination: descriptorNames.length > 0
271
+ ? resource.destination.replace("{descriptor}", descriptorNames[index])
272
+ : resource.destination,
273
+ ledgerStatus: resource.ledger_status,
274
+ durableProof: resource.durable_proof,
275
+ neverTouch: stringList(resource.never_touch),
276
+ safetyNote: resource.safety_note ?? "",
277
+ }));
278
+ }
279
+ export function loadNativeResourceCleanupContract(contractPath = path.join(resolveSourceRoot(), NATIVE_RESOURCE_CLEANUP_CONTRACT_RELATIVE_PATH)) {
280
+ const data = loadYamlMapping(fs.readFileSync(contractPath, "utf8"));
281
+ const errors = validateNativeResourceCleanupContractData(data);
282
+ if (errors.length > 0)
283
+ throw new Error(`Native resource cleanup contract validation failed: ${errors.join("; ")}`);
284
+ // The cleanup contract declares the authority and operation-contract paths.
285
+ // Load their adapter chain before using cleanup definitions so migration data
286
+ // cannot look valid while its declared compatibility contracts have drifted.
287
+ const authority = loadLifecycleAuthority();
288
+ loadRuntimeLifecycleAdapterContract(undefined, authority);
289
+ loadLifecycleOperationContract();
290
+ const statuses = new Map(data.hosts.map((host) => [
291
+ host.id,
292
+ host.support_status,
293
+ ]));
294
+ return {
295
+ sourcePath: contractPath,
296
+ resourceVocabulary: data.resource_vocabulary.map((entry) => ({
297
+ id: entry.id,
298
+ resourceClass: entry.resource_class,
299
+ migrationScope: entry.migration_scope,
300
+ resourceIds: stringList(entry.resource_ids),
301
+ historicalIds: stringList(entry.historical_ids),
302
+ })),
303
+ diagnosticMaximumResources: data.diagnostic_inventory.maximum_resources,
304
+ diagnosticMaximumFileBytes: data.diagnostic_inventory.maximum_file_bytes,
305
+ diagnosticResources: data.diagnostic_inventory.resources.map((entry) => ({
306
+ id: entry.id,
307
+ vocabulary: entry.vocabulary,
308
+ names: stringList(entry.names),
309
+ destinations: stringList(entry.destinations),
310
+ contains: typeof entry.contains === "string" ? entry.contains : null,
311
+ })),
312
+ resources: data.resources.flatMap((resource) => expandResource(resource, statuses.get(resource.host))),
313
+ configuration: data.configuration_inventory.map((unit) => ({
314
+ id: unit.id,
315
+ host: unit.host,
316
+ key: unit.key,
317
+ })),
318
+ };
319
+ }
320
+ export function nativeResourceCleanupIds(contract = loadNativeResourceCleanupContract()) {
321
+ return contract.resources.map((resource) => resource.id);
322
+ }
323
+ export function retiredResourceDiagnosticIds(contract = loadNativeResourceCleanupContract()) {
324
+ return contract.diagnosticResources.flatMap((resource) => resource.id.includes("{name}")
325
+ ? resource.names.map((name) => resource.id.replace("{name}", name))
326
+ : [resource.id]).sort();
327
+ }
328
+ export function nativeResourceCleanupHistoricalIds(contract = loadNativeResourceCleanupContract()) {
329
+ return contract.resources.flatMap((resource) => resource.historicalIds);
330
+ }
331
+ export function resolveNativeResourceCleanupId(resourceId, contract = loadNativeResourceCleanupContract()) {
332
+ const matches = contract.resources.filter((resource) => resource.id === resourceId || resource.historicalIds.includes(resourceId));
333
+ return matches.length === 1 ? matches[0] : null;
334
+ }
335
+ export function validateNativeResourceCleanupContractRoot(root = resolveSourceRoot()) {
336
+ const contractPath = path.join(root, NATIVE_RESOURCE_CLEANUP_CONTRACT_RELATIVE_PATH);
337
+ if (!fs.existsSync(contractPath)) {
338
+ return [`${NATIVE_RESOURCE_CLEANUP_CONTRACT_RELATIVE_PATH}: missing native resource cleanup contract`];
339
+ }
340
+ try {
341
+ return validateNativeResourceCleanupContractData(loadYamlMapping(fs.readFileSync(contractPath, "utf8"))).map((error) => `${NATIVE_RESOURCE_CLEANUP_CONTRACT_RELATIVE_PATH}: ${error}`);
342
+ }
343
+ catch (error) {
344
+ return [`${NATIVE_RESOURCE_CLEANUP_CONTRACT_RELATIVE_PATH}: could not parse contract: ${error.message}`];
345
+ }
346
+ }
347
+ function expandHome(template, home) {
348
+ if (!template.startsWith("{home}/") || template.includes("..")) {
349
+ throw new Error(`unsafe native resource destination template: ${template}`);
350
+ }
351
+ return path.join(path.resolve(home), template.slice("{home}/".length));
352
+ }
353
+ function ledgerDiagnostics(plan, resource) {
354
+ const ledger = plan.request.ledger ?? emptyLifecycleOwnershipLedger();
355
+ const planned = plan.operations[0];
356
+ if (planned?.action === "noop")
357
+ return [];
358
+ const records = ledger.records.filter((record) => record.resourceId === resource.id);
359
+ if (records.length !== 1)
360
+ return [`${resource.id}: cleanup requires exactly one ownership ledger record`];
361
+ const record = records[0];
362
+ if (record.status !== resource.ledgerStatus
363
+ || record.scope !== "whole"
364
+ || path.resolve(record.destination) !== path.resolve(plan.request.operations[0].destination)
365
+ || record.kind !== resource.kind
366
+ || record.identity === null
367
+ || record.fingerprint === null) {
368
+ return [`${resource.id}: cleanup requires matching whole-resource ${resource.ledgerStatus} ledger identity and fingerprint`];
369
+ }
370
+ return [];
371
+ }
372
+ function blockedPlan(plan, diagnostics, invalidLedger = false) {
373
+ const reason = `${diagnostics.join("; ")} ${LIFECYCLE_MANUAL_REVIEW_GUIDANCE}`;
374
+ return {
375
+ ...plan,
376
+ operations: plan.operations.map((operation) => operation.action === "noop" ? operation : {
377
+ ...operation,
378
+ ...(invalidLedger ? { state: "ambiguous_ownership", ownership: "ambiguous" } : {}),
379
+ action: "action_required",
380
+ reason,
381
+ }),
382
+ };
383
+ }
384
+ function configurationUnitsFor(contract, host) {
385
+ return contract.configuration
386
+ .filter((unit) => unit.host === host)
387
+ .map((unit) => ({
388
+ id: unit.id,
389
+ hostId: unit.host,
390
+ key: unit.key,
391
+ status: "action_required",
392
+ reason: "no durable key-level ownership ledger identity and fingerprint",
393
+ }));
394
+ }
395
+ function canonicalizeHistoricalOwnershipIds(ledger, resource) {
396
+ if (resource.historicalIds.length === 0)
397
+ return ledger;
398
+ return {
399
+ ...ledger,
400
+ records: ledger.records.map((record) => resource.historicalIds.includes(record.resourceId)
401
+ ? { ...record, resourceId: resource.id }
402
+ : record),
403
+ };
404
+ }
405
+ export function previewNativeResourceCleanup(opts) {
406
+ const contract = opts.contract ?? loadNativeResourceCleanupContract();
407
+ const resource = resolveNativeResourceCleanupId(opts.resourceId, contract);
408
+ if (!resource)
409
+ throw new Error(`unknown native Agentera resource cleanup id: ${opts.resourceId}`);
410
+ const operations = [{
411
+ id: resource.id,
412
+ destination: expandHome(resource.destination, opts.home),
413
+ kind: resource.kind,
414
+ intent: "remove",
415
+ required: true,
416
+ }];
417
+ const suppliedLedger = opts.ledger ?? emptyLifecycleOwnershipLedger();
418
+ const errors = validateLifecycleOwnershipLedger(suppliedLedger);
419
+ const ledger = errors.length === 0
420
+ ? canonicalizeHistoricalOwnershipIds(suppliedLedger, resource)
421
+ : emptyLifecycleOwnershipLedger();
422
+ const plan = planLifecycleOperations({
423
+ allowedRoots: [path.resolve(opts.home)],
424
+ operations,
425
+ manifest: createLifecycleOwnershipManifest(operations),
426
+ ledger,
427
+ });
428
+ const diagnostics = errors.length > 0
429
+ ? errors.map((error) => `invalid ownership ledger: ${error}`)
430
+ : ledgerDiagnostics(plan, resource);
431
+ return {
432
+ schemaVersion: "agentera.nativeResourceCleanupPreview.v1",
433
+ mode: "preview",
434
+ resourceId: resource.id,
435
+ hostId: resource.host,
436
+ hostSupportStatus: resource.hostSupportStatus,
437
+ ledgerStatus: resource.ledgerStatus,
438
+ approvalRequired: true,
439
+ ownershipRequirement: "matching_whole_resource_ledger",
440
+ ledgerAuthorization: diagnostics.length === 0 ? "match_or_absent_noop" : "blocked",
441
+ ledgerDiagnostics: diagnostics,
442
+ plan: diagnostics.length === 0 ? plan : blockedPlan(plan, diagnostics, errors.length > 0),
443
+ configurationUnits: configurationUnitsFor(contract, resource.host),
444
+ neverTouch: resource.neverTouch.map((entry) => expandHome(entry, opts.home)),
445
+ safetyNote: resource.safetyNote,
446
+ };
447
+ }
448
+ function approvalRequiredResult(preview) {
449
+ const operations = preview.plan.operations.map((operation) => ({
450
+ ...operation,
451
+ action: operation.action === "noop" || operation.action === "blocked_unowned" ? operation.action : "action_required",
452
+ status: operation.action === "noop" ? "noop" : operation.action === "blocked_unowned" ? "blocked_unowned" : "action_required",
453
+ dependencyCauses: [],
454
+ reason: operation.action === "noop" || operation.action === "blocked_unowned"
455
+ ? operation.reason
456
+ : "explicit cleanup approval is required",
457
+ }));
458
+ const summary = {
459
+ applied: 0,
460
+ noop: operations.filter((item) => item.status === "noop").length,
461
+ failed: 0,
462
+ blocked_unowned: operations.filter((item) => item.status === "blocked_unowned").length,
463
+ skipped_dependency: 0,
464
+ action_required: operations.filter((item) => item.status === "action_required").length,
465
+ };
466
+ return {
467
+ schemaVersion: "agentera.lifecycleApplyResult.v1",
468
+ status: operations.every((item) => item.status === "noop") ? "success" : "non_success",
469
+ operations,
470
+ summary,
471
+ requiredUnmet: operations.filter((item) => item.required && item.status !== "noop").map((item) => item.id),
472
+ ownershipLedger: preview.plan.request.ledger ?? emptyLifecycleOwnershipLedger(),
473
+ };
474
+ }
475
+ export function applyNativeResourceCleanup(preview, options) {
476
+ const resource = preview.plan.request.operations[0];
477
+ const definition = {
478
+ id: preview.resourceId,
479
+ historicalIds: [],
480
+ host: preview.hostId,
481
+ hostSupportStatus: preview.hostSupportStatus,
482
+ kind: resource.kind,
483
+ destination: resource.destination,
484
+ ledgerStatus: preview.ledgerStatus,
485
+ durableProof: "",
486
+ neverTouch: [],
487
+ safetyNote: "",
488
+ };
489
+ const diagnostics = ledgerDiagnostics(preview.plan, definition);
490
+ const authorized = preview.ledgerAuthorization === "match_or_absent_noop" && diagnostics.length === 0;
491
+ const result = options.approved && authorized
492
+ ? applyLifecycleOperations(preview.plan, options)
493
+ : approvalRequiredResult(preview);
494
+ return {
495
+ ...result,
496
+ resourceId: preview.resourceId,
497
+ hostId: preview.hostId,
498
+ hostSupportStatus: preview.hostSupportStatus,
499
+ approval: options.approved ? "approved" : "required",
500
+ configurationUnits: preview.configurationUnits,
501
+ };
502
+ }
@@ -0,0 +1,20 @@
1
+ import path from "node:path";
2
+ import { expanduser, resolvePath } from "../core/paths.js";
3
+ /** Migration-only resolver for previously installed OpenCode resources. */
4
+ export function opencodeConfigDir(home, env) {
5
+ const explicit = env.OPENCODE_CONFIG_DIR;
6
+ if (explicit)
7
+ return resolvePath(expanduser(explicit));
8
+ const xdg = env.XDG_CONFIG_HOME;
9
+ if (xdg)
10
+ return path.join(resolvePath(expanduser(xdg)), "opencode");
11
+ return path.join(home, ".config", "opencode");
12
+ }
13
+ /** Migration-only ownership marker reader. */
14
+ export function hasManagedMarker(text) {
15
+ const lines = text.split("\n");
16
+ if (lines[0] !== "---")
17
+ return false;
18
+ const closing = lines.indexOf("---", 1);
19
+ return closing !== -1 && lines.slice(1, closing).some((line) => line.trim() === "agentera_managed: true");
20
+ }
@@ -0,0 +1 @@
1
+ export const OPENCODE_SKILL_NAMES = ["agentera", "status"];
@@ -0,0 +1,45 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { pathExists } from "../core/paths.js";
4
+ import { declaresAgenteraSkill } from "../core/skillIdentity.js";
5
+ export const CANONICAL_SHARED_SKILL_PATH = "~/.agents/skills/agentera";
6
+ function isSymlink(target) {
7
+ try {
8
+ return fs.lstatSync(target).isSymbolicLink();
9
+ }
10
+ catch {
11
+ return false;
12
+ }
13
+ }
14
+ export function diagnoseCanonicalSkill(home) {
15
+ const target = path.join(home, CANONICAL_SHARED_SKILL_PATH.slice(2));
16
+ const skillFile = path.join(target, "SKILL.md");
17
+ if (fs.existsSync(skillFile) &&
18
+ declaresAgenteraSkill(fs.readFileSync(skillFile, "utf8").slice(0, 64 * 1024))) {
19
+ return {
20
+ name: "canonical_skill",
21
+ status: "pass",
22
+ message: "canonical shared Agentera skill resolves to SKILL.md",
23
+ source: null,
24
+ path: target,
25
+ gap: null,
26
+ details: [],
27
+ };
28
+ }
29
+ const details = [
30
+ `action: install or repair the shared Agentera skill at \`${CANONICAL_SHARED_SKILL_PATH}\``,
31
+ "action: use the Agentera CLI directly; runtime-native installation is retired",
32
+ ];
33
+ if (pathExists(target) || isSymlink(target)) {
34
+ details.unshift("existing target preserved; review and repair the shared-skill path manually");
35
+ }
36
+ return {
37
+ name: "canonical_skill",
38
+ status: "warn",
39
+ message: "canonical shared Agentera skill is missing or invalid",
40
+ source: null,
41
+ path: target,
42
+ gap: "skill_path_drift",
43
+ details,
44
+ };
45
+ }