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,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
+ }