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,205 @@
1
+ import path from "node:path";
2
+ import { loadYamlMappingFile } from "../core/yaml.js";
3
+ import { resolveSourceRoot } from "../core/sourceRoot.js";
4
+ import { ARTIFACT_PROTOCOL_PATHS, normalizeArtifactProtocolId, } from "./artifactProtocolIds.js";
5
+ export class VerbosityBudgetContractError extends Error {
6
+ constructor(message) {
7
+ super(message);
8
+ this.name = "VerbosityBudgetContractError";
9
+ }
10
+ }
11
+ export function verbosityBudgetAuthorityPath() {
12
+ return path.join(resolveSourceRoot(), "references", "artifacts", "verbosity-budget-authority.yaml");
13
+ }
14
+ function mapping(value) {
15
+ return value !== null && typeof value === "object" && !Array.isArray(value)
16
+ ? value
17
+ : null;
18
+ }
19
+ function positiveNumber(value) {
20
+ return typeof value === "number" && Number.isFinite(value) && value > 0;
21
+ }
22
+ function readMapping(filePath, label) {
23
+ try {
24
+ return loadYamlMappingFile(filePath);
25
+ }
26
+ catch (error) {
27
+ throw new VerbosityBudgetContractError(`${label} ${filePath} is unreadable or malformed: ${error.message}`);
28
+ }
29
+ }
30
+ function loadContract(contractPath) {
31
+ const contract = readMapping(contractPath, "verbosity budget authority");
32
+ if (contract.schema_version !== "agentera.verbosityBudgetAuthority.v1") {
33
+ throw new VerbosityBudgetContractError(`verbosity budget authority ${contractPath} has unsupported schema_version`);
34
+ }
35
+ const authority = mapping(contract.authority);
36
+ const scope = mapping(contract.scope);
37
+ const supported = scope?.supported_artifacts;
38
+ if (!authority || typeof authority.schema_directory !== "string" || !Array.isArray(supported)) {
39
+ throw new VerbosityBudgetContractError(`verbosity budget authority ${contractPath} must declare authority.schema_directory and scope.supported_artifacts`);
40
+ }
41
+ const schemaDirectory = path.resolve(path.dirname(contractPath), authority.schema_directory);
42
+ const owners = new Map();
43
+ for (const raw of supported) {
44
+ const entry = mapping(raw);
45
+ const artifactId = entry?.artifact_id;
46
+ const schema = entry?.schema;
47
+ if (typeof artifactId !== "string" || normalizeArtifactProtocolId(artifactId) !== artifactId) {
48
+ throw new VerbosityBudgetContractError(`verbosity budget authority ${contractPath} contains an invalid artifact_id`);
49
+ }
50
+ if (typeof schema !== "string" || !schema.endsWith(".yaml") || path.basename(schema) !== schema) {
51
+ throw new VerbosityBudgetContractError(`verbosity budget authority ${contractPath} contains an invalid schema owner for ${artifactId}`);
52
+ }
53
+ if (owners.has(artifactId)) {
54
+ throw new VerbosityBudgetContractError(`verbosity budget authority ${contractPath} declares ambiguous owners for ${artifactId}`);
55
+ }
56
+ owners.set(artifactId, {
57
+ artifactId,
58
+ authorityPath: contractPath,
59
+ schemaPath: path.join(schemaDirectory, schema),
60
+ });
61
+ }
62
+ if (owners.size === 0) {
63
+ throw new VerbosityBudgetContractError(`verbosity budget authority ${contractPath} declares no supported artifacts`);
64
+ }
65
+ return { contractPath, owners };
66
+ }
67
+ function protocolIdForOwner(input) {
68
+ const normalized = normalizeArtifactProtocolId(input);
69
+ if (normalized)
70
+ return normalized;
71
+ const comparable = input.trim().replaceAll("\\", "/").toLowerCase();
72
+ for (const [artifactId, artifactPath] of Object.entries(ARTIFACT_PROTOCOL_PATHS)) {
73
+ const canonicalPath = artifactPath.toLowerCase();
74
+ if (comparable === canonicalPath || comparable === path.posix.basename(canonicalPath)) {
75
+ return artifactId;
76
+ }
77
+ }
78
+ return null;
79
+ }
80
+ export function resolveVerbosityBudgetOwner(artifact, contractPath = verbosityBudgetAuthorityPath()) {
81
+ const contract = loadContract(contractPath);
82
+ const artifactId = protocolIdForOwner(artifact);
83
+ const owner = artifactId ? contract.owners.get(artifactId) : undefined;
84
+ if (!owner) {
85
+ throw new VerbosityBudgetContractError(`unsupported artifact ${JSON.stringify(artifact)} in verbosity budget authority; ` +
86
+ `valid artifact_id values: ${[...contract.owners.keys()].sort().join(", ")}`);
87
+ }
88
+ return owner;
89
+ }
90
+ function invalidDimension(scope, declarationId, error) {
91
+ return {
92
+ scope,
93
+ classification: "invalid_declaration",
94
+ unit: null,
95
+ limit: null,
96
+ declarationId,
97
+ error,
98
+ };
99
+ }
100
+ function classifyDeclaration(raw, index) {
101
+ const declaration = mapping(raw);
102
+ if (!declaration)
103
+ return invalidDimension(`<entry:${index}>`, null, "budget declaration must be a mapping");
104
+ const scope = typeof declaration.scope === "string" && declaration.scope.trim()
105
+ ? declaration.scope.trim()
106
+ : `<entry:${index}>`;
107
+ const declarationId = typeof declaration.id === "string" ? declaration.id : null;
108
+ if (scope.startsWith("<entry:")) {
109
+ return invalidDimension(scope, declarationId, "budget declaration must define a non-empty scope");
110
+ }
111
+ const hasWords = Object.hasOwn(declaration, "max_words");
112
+ const hasTokens = Object.hasOwn(declaration, "token_budget");
113
+ if (Number(hasWords) + Number(hasTokens) !== 1) {
114
+ return invalidDimension(scope, declarationId, "budget declaration must define exactly one of max_words or token_budget");
115
+ }
116
+ if (hasWords) {
117
+ if (declaration.max_words === null) {
118
+ return { scope, classification: "explicit_no_limit", unit: "words", limit: null, declarationId };
119
+ }
120
+ if (positiveNumber(declaration.max_words)) {
121
+ return {
122
+ scope,
123
+ classification: "numeric_limit",
124
+ unit: "words",
125
+ limit: declaration.max_words,
126
+ declarationId,
127
+ };
128
+ }
129
+ return invalidDimension(scope, declarationId, "max_words must be a positive number or null");
130
+ }
131
+ if (positiveNumber(declaration.token_budget)) {
132
+ return {
133
+ scope,
134
+ classification: "non_word_unit",
135
+ unit: "tokens",
136
+ limit: declaration.token_budget,
137
+ declarationId,
138
+ };
139
+ }
140
+ return invalidDimension(scope, declarationId, "token_budget must be a positive number");
141
+ }
142
+ function isNonVerbosityBudgetEntry(raw) {
143
+ const declaration = mapping(raw);
144
+ return Boolean(declaration &&
145
+ typeof declaration.rule === "string" &&
146
+ !Object.hasOwn(declaration, "max_words") &&
147
+ !Object.hasOwn(declaration, "token_budget"));
148
+ }
149
+ export function inspectArtifactVerbosityBudget(artifact, contractPath = verbosityBudgetAuthorityPath()) {
150
+ const owner = resolveVerbosityBudgetOwner(artifact, contractPath);
151
+ let schema;
152
+ try {
153
+ schema = readMapping(owner.schemaPath, `verbosity budget owner for ${owner.artifactId}`);
154
+ }
155
+ catch (error) {
156
+ return {
157
+ ...owner,
158
+ dimensions: [invalidDimension("<authority>", null, error.message)],
159
+ };
160
+ }
161
+ const budget = mapping(schema.BUDGET);
162
+ if (!budget || Object.keys(budget).length === 0) {
163
+ return {
164
+ ...owner,
165
+ dimensions: [invalidDimension("<authority>", null, "owning schema must define a non-empty BUDGET mapping")],
166
+ };
167
+ }
168
+ const dimensions = Object.entries(budget)
169
+ .filter(([, declaration]) => !isNonVerbosityBudgetEntry(declaration))
170
+ .map(([index, declaration]) => classifyDeclaration(declaration, index));
171
+ if (dimensions.length === 0) {
172
+ return {
173
+ ...owner,
174
+ dimensions: [invalidDimension("<authority>", null, "owning schema defines no verbosity budget declarations")],
175
+ };
176
+ }
177
+ const counts = new Map();
178
+ for (const dimension of dimensions)
179
+ counts.set(dimension.scope, (counts.get(dimension.scope) ?? 0) + 1);
180
+ return {
181
+ ...owner,
182
+ dimensions: dimensions.map((dimension) => (counts.get(dimension.scope) ?? 0) > 1
183
+ ? invalidDimension(dimension.scope, dimension.declarationId, `duplicate budget scope ${dimension.scope}`)
184
+ : dimension),
185
+ };
186
+ }
187
+ export function validateVerbosityBudgetContract(contractPath = verbosityBudgetAuthorityPath()) {
188
+ let contract;
189
+ try {
190
+ contract = loadContract(contractPath);
191
+ }
192
+ catch (error) {
193
+ return [error.message];
194
+ }
195
+ const errors = [];
196
+ for (const artifactId of contract.owners.keys()) {
197
+ const inspected = inspectArtifactVerbosityBudget(artifactId, contractPath);
198
+ for (const dimension of inspected.dimensions) {
199
+ if (dimension.classification === "invalid_declaration") {
200
+ errors.push(`${artifactId}:${dimension.scope}: ${dimension.error}`);
201
+ }
202
+ }
203
+ }
204
+ return errors;
205
+ }
@@ -0,0 +1,385 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { spawnSync } from "node:child_process";
4
+ import { isDeepStrictEqual } from "node:util";
5
+ import { resolvePath } from "../core/paths.js";
6
+ import { resolveSourceRoot } from "../core/sourceRoot.js";
7
+ import { loadYamlMappingFile } from "../core/yaml.js";
8
+ export const RELEASE_METADATA_AUTHORITY_FILES = [
9
+ "registry.json",
10
+ "packages/cli/package.json",
11
+ "references/cli/update-channels.yaml",
12
+ ];
13
+ export const RELEASE_METADATA_ADVISORY_FILES = [
14
+ "packages/cli/bundle/.agentera-npx-bundle.json",
15
+ ];
16
+ export const RELEASE_PROVENANCE_PATHS = [
17
+ "packages/cli/src",
18
+ "packages/cli/scripts",
19
+ "packages/cli/README.md",
20
+ "packages/cli/tsconfig.json",
21
+ "skills",
22
+ "references",
23
+ "README.md",
24
+ "UPGRADE.md",
25
+ "CHANGELOG.md",
26
+ "DESIGN.md",
27
+ "LICENSE",
28
+ "registry.json",
29
+ "fixtures/routing/hybrid-corpus.yaml",
30
+ ];
31
+ export const RELEASE_PROVENANCE_EXCLUSIONS = [
32
+ "packages/cli/src/release/releaseMetadata.ts",
33
+ "references/adapters/package-surface-characterization.md",
34
+ ];
35
+ export const STABLE_SHIM_PROVENANCE_PATHS = [
36
+ "packages/cli/shim/bin",
37
+ "packages/cli/shim/lib",
38
+ "packages/cli/shim/README.md",
39
+ "packages/cli/shim/LICENSE",
40
+ ];
41
+ const SEMVER_CORE_RE = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/;
42
+ const SEMVER_STRICT_RE = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/;
43
+ const PRE_RELEASE_RE = /-(.+)$/;
44
+ const GIT_REF_HEX_RE = /^[0-9a-f]{40}$/i;
45
+ function rootDefault() {
46
+ return resolveSourceRoot();
47
+ }
48
+ function readJson(pathname) {
49
+ try {
50
+ return JSON.parse(fs.readFileSync(pathname, "utf8"));
51
+ }
52
+ catch {
53
+ return null;
54
+ }
55
+ }
56
+ function runGit(root, args) {
57
+ return spawnSync("git", ["-C", root, ...args], {
58
+ encoding: "utf8",
59
+ stdio: ["ignore", "pipe", "pipe"],
60
+ });
61
+ }
62
+ function normalizedPackageMetadata(value) {
63
+ const normalized = structuredClone(value);
64
+ delete normalized.version;
65
+ if (normalized.agentera && typeof normalized.agentera === "object" && !Array.isArray(normalized.agentera)) {
66
+ delete normalized.agentera.gitRef;
67
+ }
68
+ return normalized;
69
+ }
70
+ function validateGitRefProvenance(root, gitRef) {
71
+ const inside = runGit(root, ["rev-parse", "--is-inside-work-tree"]);
72
+ if (inside.status !== 0 || String(inside.stdout).trim() !== "true")
73
+ return [];
74
+ const commit = runGit(root, ["cat-file", "-e", `${gitRef}^{commit}`]);
75
+ if (commit.status !== 0) {
76
+ return [`packages/cli/package.json: agentera.gitRef ${JSON.stringify(gitRef)} is not a commit in the local repository`];
77
+ }
78
+ const pathspec = [
79
+ ...RELEASE_PROVENANCE_PATHS,
80
+ ...RELEASE_PROVENANCE_EXCLUSIONS.map((entry) => `:(exclude)${entry}`),
81
+ ];
82
+ const diff = runGit(root, ["diff", "--quiet", gitRef, "--", ...pathspec]);
83
+ if (diff.status !== 0) {
84
+ if (diff.status === 1) {
85
+ return [
86
+ `packages/cli/package.json: agentera.gitRef ${JSON.stringify(gitRef)} does not match the governed package source tree; ` +
87
+ "select the last substantive package-source commit, excluding approved release metadata",
88
+ ];
89
+ }
90
+ return [`packages/cli/package.json: unable to compare agentera.gitRef ${JSON.stringify(gitRef)} with the governed package source tree`];
91
+ }
92
+ const status = runGit(root, ["status", "--porcelain=v1", "--untracked-files=all", "--", ...pathspec]);
93
+ if (status.status !== 0 || String(status.stdout).trim() !== "") {
94
+ return [
95
+ "packages/cli/package.json: governed package source has uncommitted or untracked changes outside approved release metadata",
96
+ ];
97
+ }
98
+ const selectedPackage = runGit(root, ["show", `${gitRef}:packages/cli/package.json`]);
99
+ const currentPackage = readPackageJson(root);
100
+ try {
101
+ const selected = JSON.parse(String(selectedPackage.stdout));
102
+ if (selectedPackage.status !== 0 ||
103
+ currentPackage === null ||
104
+ !isDeepStrictEqual(normalizedPackageMetadata(selected), normalizedPackageMetadata(currentPackage))) {
105
+ return [
106
+ `packages/cli/package.json: package contract differs from agentera.gitRef ${JSON.stringify(gitRef)} ` +
107
+ "outside the permitted version and gitRef fields",
108
+ ];
109
+ }
110
+ }
111
+ catch {
112
+ return [`packages/cli/package.json: unable to read package contract from agentera.gitRef ${JSON.stringify(gitRef)}`];
113
+ }
114
+ return [];
115
+ }
116
+ export function validateStableShimGitRefProvenance(root, gitRef) {
117
+ const manifestPath = "packages/cli/shim/package.json";
118
+ const inside = runGit(root, ["rev-parse", "--is-inside-work-tree"]);
119
+ if (inside.status !== 0 || String(inside.stdout).trim() !== "true")
120
+ return [];
121
+ const commit = runGit(root, ["cat-file", "-e", `${gitRef}^{commit}`]);
122
+ if (commit.status !== 0) {
123
+ return [`${manifestPath}: agentera.gitRef ${JSON.stringify(gitRef)} is not a commit in the local repository`];
124
+ }
125
+ const diff = runGit(root, ["diff", "--quiet", gitRef, "--", ...STABLE_SHIM_PROVENANCE_PATHS]);
126
+ if (diff.status !== 0) {
127
+ return [
128
+ `${manifestPath}: agentera.gitRef ${JSON.stringify(gitRef)} does not match the stable shim packaged inputs; ` +
129
+ "select the last substantive shim-source commit",
130
+ ];
131
+ }
132
+ const status = runGit(root, [
133
+ "status",
134
+ "--porcelain=v1",
135
+ "--untracked-files=all",
136
+ "--",
137
+ manifestPath,
138
+ ...STABLE_SHIM_PROVENANCE_PATHS,
139
+ ]);
140
+ if (status.status !== 0 || String(status.stdout).trim() !== "") {
141
+ return [
142
+ `${manifestPath}: stable shim packaged inputs have uncommitted or untracked changes outside approved release metadata`,
143
+ ];
144
+ }
145
+ const selected = runGit(root, ["show", `${gitRef}:${manifestPath}`]);
146
+ const current = readJson(path.join(root, manifestPath));
147
+ try {
148
+ const selectedManifest = JSON.parse(String(selected.stdout));
149
+ if (selected.status !== 0 ||
150
+ current === null ||
151
+ !isDeepStrictEqual(normalizedPackageMetadata(selectedManifest), normalizedPackageMetadata(current))) {
152
+ return [
153
+ `${manifestPath}: package contract differs from agentera.gitRef ${JSON.stringify(gitRef)} ` +
154
+ "outside the permitted version and gitRef fields",
155
+ ];
156
+ }
157
+ }
158
+ catch {
159
+ return [`${manifestPath}: unable to read package contract from agentera.gitRef ${JSON.stringify(gitRef)}`];
160
+ }
161
+ return [];
162
+ }
163
+ function readRegistryVersion(root) {
164
+ const source = "registry.json";
165
+ const data = readJson(path.join(root, source));
166
+ if (data === null) {
167
+ return { version: null, source };
168
+ }
169
+ const skills = data.skills;
170
+ if (!Array.isArray(skills) || skills.length === 0) {
171
+ return { version: null, source };
172
+ }
173
+ const first = skills[0];
174
+ if (!first || typeof first !== "object") {
175
+ return { version: null, source };
176
+ }
177
+ const version = first.version;
178
+ return { version: typeof version === "string" ? version : null, source };
179
+ }
180
+ function readPackageJson(root) {
181
+ const candidate = path.join(root, "packages/cli/package.json");
182
+ if (!fs.existsSync(candidate)) {
183
+ return null;
184
+ }
185
+ return readJson(candidate);
186
+ }
187
+ function readUpdateChannels(root) {
188
+ const candidate = path.join(root, "references/cli/update-channels.yaml");
189
+ if (!fs.existsSync(candidate)) {
190
+ return null;
191
+ }
192
+ try {
193
+ return loadYamlMappingFile(candidate); // cast: YAML parse IO boundary
194
+ }
195
+ catch {
196
+ return null;
197
+ }
198
+ }
199
+ function readBundleSentinel(root) {
200
+ const source = "packages/cli/bundle/.agentera-npx-bundle.json";
201
+ const candidate = path.join(root, source);
202
+ if (!fs.existsSync(candidate)) {
203
+ return { version: null, source };
204
+ }
205
+ const data = readJson(candidate);
206
+ if (data === null) {
207
+ return { version: null, source };
208
+ }
209
+ const version = data.suiteVersion;
210
+ return { version: typeof version === "string" ? version : null, source };
211
+ }
212
+ /** Parse `X.Y.Z` core (ignore pre-release and build metadata). */
213
+ export function parseSemverCore(version) {
214
+ const match = SEMVER_CORE_RE.exec(version);
215
+ if (!match) {
216
+ return null;
217
+ }
218
+ const core = `${match[1]}.${match[2]}.${match[3]}`;
219
+ const preMatch = PRE_RELEASE_RE.exec(version);
220
+ return { core, preRelease: preMatch ? preMatch[1] : null };
221
+ }
222
+ function pickChannelDefaults(authority) {
223
+ if (authority === null) {
224
+ return { development: null, stable: null };
225
+ }
226
+ const versionResolution = authority.version_resolution;
227
+ const latestOnChannel = versionResolution?.latest_on_channel;
228
+ const defaults = (latestOnChannel?.offline_defaults ?? {});
229
+ return {
230
+ development: typeof defaults.development === "string" ? defaults.development : null,
231
+ stable: typeof defaults.stable === "string" ? defaults.stable : null,
232
+ };
233
+ }
234
+ export function readReleaseMetadata(root = rootDefault()) {
235
+ const resolved = resolvePath(root);
236
+ const registry = readRegistryVersion(resolved);
237
+ const pkg = readPackageJson(resolved);
238
+ const channels = readUpdateChannels(resolved);
239
+ const bundle = readBundleSentinel(resolved);
240
+ const topVersion = pkg && typeof pkg.version === "string" ? pkg.version : null;
241
+ const agenteraBlock = pkg && typeof pkg.agentera === "object" && pkg.agentera !== null
242
+ ? pkg.agentera
243
+ : null;
244
+ const suiteVersion = agenteraBlock && typeof agenteraBlock.suiteVersion === "string"
245
+ ? agenteraBlock.suiteVersion
246
+ : null;
247
+ const gitRef = agenteraBlock && typeof agenteraBlock.gitRef === "string"
248
+ ? agenteraBlock.gitRef
249
+ : null;
250
+ const { development, stable } = pickChannelDefaults(channels);
251
+ return {
252
+ authoritativeVersion: registry.version,
253
+ authoritativeSource: registry.source,
254
+ packageVersion: topVersion,
255
+ packageSuiteVersion: suiteVersion,
256
+ packageGitRef: gitRef,
257
+ developmentChannelDefault: development,
258
+ stableChannelDefault: stable,
259
+ bundleSuiteVersion: bundle.version,
260
+ };
261
+ }
262
+ /**
263
+ * Validate release-metadata coherence. Returns an empty array when the
264
+ * source-tree version surfaces agree on a single release train.
265
+ */
266
+ export function validateReleaseMetadata(root = rootDefault(), adapter = "development") {
267
+ if (adapter === "stable") {
268
+ const manifestPath = "packages/cli/shim/package.json";
269
+ const shim = readJson(path.join(resolvePath(root), manifestPath));
270
+ if (shim === null)
271
+ return [`${manifestPath}: missing or unreadable; cannot validate release-metadata`];
272
+ const agentera = shim.agentera;
273
+ const gitRef = agentera && typeof agentera === "object" && !Array.isArray(agentera)
274
+ ? agentera.gitRef
275
+ : null;
276
+ if (typeof gitRef !== "string" || !GIT_REF_HEX_RE.test(gitRef)) {
277
+ return [`${manifestPath}: agentera.gitRef must be a 40-character hex SHA for stable shim provenance`];
278
+ }
279
+ return validateStableShimGitRefProvenance(resolvePath(root), gitRef);
280
+ }
281
+ const errors = [];
282
+ const snap = readReleaseMetadata(root);
283
+ const rootLabel = path.basename(resolvePath(root)) || "repo root";
284
+ // 1. registry.json must publish a valid semver `skills[0].version`.
285
+ if (snap.authoritativeVersion === null) {
286
+ errors.push("registry.json: skills[0].version is required for release-metadata validation");
287
+ }
288
+ else {
289
+ const parsed = parseSemverCore(snap.authoritativeVersion);
290
+ if (parsed === null) {
291
+ errors.push(`registry.json: skills[0].version ${JSON.stringify(snap.authoritativeVersion)} is not a valid semver`);
292
+ }
293
+ else if (parsed.preRelease !== null) {
294
+ // registry.json is the suite authority and stays on the released core;
295
+ // pre-release suffixes belong only to packages/cli/package.json.
296
+ errors.push(`registry.json: skills[0].version must be a released core version (no pre-release suffix); got ${JSON.stringify(snap.authoritativeVersion)}`);
297
+ }
298
+ }
299
+ // 2. packages/cli/package.json must exist and parse.
300
+ if (snap.packageVersion === null && snap.packageSuiteVersion === null && snap.packageGitRef === null) {
301
+ errors.push("packages/cli/package.json: missing or unreadable; cannot validate release-metadata");
302
+ }
303
+ else {
304
+ // 2a. top-level `version` must be valid semver and share its core with registry.
305
+ if (snap.packageVersion === null) {
306
+ errors.push("packages/cli/package.json: top-level `version` is required");
307
+ }
308
+ else {
309
+ const parsed = parseSemverCore(snap.packageVersion);
310
+ if (parsed === null) {
311
+ errors.push(`packages/cli/package.json: top-level version ${JSON.stringify(snap.packageVersion)} is not a valid semver`);
312
+ }
313
+ else if (snap.authoritativeVersion !== null &&
314
+ parseSemverCore(snap.authoritativeVersion)?.core !== parsed.core) {
315
+ errors.push(`release-metadata divergence: registry.json skills[0].version core is ${JSON.stringify(parseSemverCore(snap.authoritativeVersion)?.core)} ` +
316
+ `but packages/cli/package.json top-level version core is ${JSON.stringify(parsed.core)}; ` +
317
+ `the npm package version must share its major.minor.patch with the registry suite version`);
318
+ }
319
+ }
320
+ // 2b. `agentera.suiteVersion` must match registry exactly.
321
+ if (snap.packageSuiteVersion === null) {
322
+ errors.push("packages/cli/package.json: `agentera.suiteVersion` is required");
323
+ }
324
+ else if (snap.authoritativeVersion !== null &&
325
+ snap.packageSuiteVersion !== snap.authoritativeVersion) {
326
+ errors.push(`release-metadata divergence: registry.json skills[0].version is ${JSON.stringify(snap.authoritativeVersion)} ` +
327
+ `but packages/cli/package.json agentera.suiteVersion is ${JSON.stringify(snap.packageSuiteVersion)}; ` +
328
+ `the agentera.suiteVersion mirror must equal the registry version exactly`);
329
+ }
330
+ else if (!SEMVER_STRICT_RE.test(snap.packageSuiteVersion)) {
331
+ errors.push(`packages/cli/package.json: agentera.suiteVersion ${JSON.stringify(snap.packageSuiteVersion)} is not a released core semver`);
332
+ }
333
+ // 2c. `agentera.gitRef` must identify the governed package source tree.
334
+ if (snap.packageGitRef === null || snap.packageGitRef === "") {
335
+ errors.push("packages/cli/package.json: `agentera.gitRef` is required for release-metadata validation");
336
+ }
337
+ else if (!GIT_REF_HEX_RE.test(snap.packageGitRef)) {
338
+ errors.push(`packages/cli/package.json: agentera.gitRef ${JSON.stringify(snap.packageGitRef)} must be a 40-character hex SHA; ` +
339
+ `short SHAs and branch names are not reproducible release references`);
340
+ }
341
+ else {
342
+ errors.push(...validateGitRefProvenance(resolvePath(root), snap.packageGitRef));
343
+ }
344
+ }
345
+ // 3. update-channels.yaml development default must equal the registry version.
346
+ if (snap.developmentChannelDefault === null) {
347
+ errors.push("references/cli/update-channels.yaml: version_resolution.latest_on_channel.offline_defaults.development is required");
348
+ }
349
+ else if (snap.authoritativeVersion !== null &&
350
+ snap.developmentChannelDefault !== snap.authoritativeVersion) {
351
+ errors.push(`release-metadata divergence: registry.json skills[0].version is ${JSON.stringify(snap.authoritativeVersion)} ` +
352
+ `but update-channels.yaml offline_defaults.development is ${JSON.stringify(snap.developmentChannelDefault)}; ` +
353
+ `the development channel default must match the registry version exactly`);
354
+ }
355
+ // 4. Stable channel default is informational on the @next branch; the
356
+ // validator surfaces it so maintainers can confirm the stable line still
357
+ // resolves to its declared 2.x version. A drift on the stable channel
358
+ // alone is not an error here — that lane is owned by the `main` branch
359
+ // compatibility boundary per `references/cli/update-channels.yaml`.
360
+ void snap.stableChannelDefault;
361
+ // 5. Advisory check on the local bundle sentinel.
362
+ if (snap.bundleSuiteVersion !== null) {
363
+ if (snap.authoritativeVersion !== null &&
364
+ snap.bundleSuiteVersion !== snap.authoritativeVersion) {
365
+ errors.push(`release-metadata drift (advisory): packages/cli/bundle/.agentera-npx-bundle.json suiteVersion is ${JSON.stringify(snap.bundleSuiteVersion)} ` +
366
+ `but registry.json skills[0].version is ${JSON.stringify(snap.authoritativeVersion)}; ` +
367
+ `run \`npm run bundle:data\` (or \`pnpm -C packages/cli run bundle:data\`) at ${rootLabel} to refresh the local bundle copy before publishing`);
368
+ }
369
+ }
370
+ return errors;
371
+ }
372
+ export function releaseMetadataMain(opts = {}) {
373
+ const root = resolvePath(opts.root ?? rootDefault());
374
+ const out = opts.out ?? ((line) => process.stdout.write(line + "\n"));
375
+ const err = opts.err ?? ((line) => process.stderr.write(line + "\n"));
376
+ const errors = validateReleaseMetadata(root, opts.adapter);
377
+ if (errors.length > 0) {
378
+ out("release-metadata validation failed:");
379
+ for (const message of errors)
380
+ out(`- ${message}`);
381
+ return 1;
382
+ }
383
+ out("release-metadata ok");
384
+ return 0;
385
+ }