agentera 3.0.0-dev.6 → 3.0.0-dev.69

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (696) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +118 -22
  3. package/bundle/CHANGELOG.md +1361 -0
  4. package/bundle/DESIGN.md +229 -0
  5. package/bundle/LICENSE +201 -0
  6. package/bundle/README.md +143 -0
  7. package/bundle/UPGRADE.md +252 -0
  8. package/bundle/extract-corpus-parity.json +21 -0
  9. package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
  10. package/bundle/references/adapters/package-publication.json +488 -0
  11. package/bundle/references/adapters/package-registry.yaml +435 -188
  12. package/bundle/references/adapters/package-surface-characterization.md +66 -34
  13. package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
  14. package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
  15. package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
  16. package/bundle/references/adapters/runtime-retired-resources.yaml +333 -0
  17. package/bundle/references/analysis/evidence-tier-authority.yaml +518 -0
  18. package/bundle/references/analysis/verification-policy.yaml +266 -0
  19. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +20 -10
  20. package/bundle/references/artifacts/glossary-entry-contract.yaml +1254 -0
  21. package/bundle/references/artifacts/state-storage-authority.yaml +3061 -0
  22. package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
  23. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +7 -8
  24. package/bundle/references/cli/capability-instruction-contract.yaml +11 -14
  25. package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
  26. package/bundle/references/cli/routing-model.md +155 -0
  27. package/bundle/references/cli/trigger-schema-enrichment.md +147 -0
  28. package/bundle/references/cli/update-channels.yaml +19 -2
  29. package/bundle/references/cli/vocabulary-index.yaml +20 -17
  30. package/bundle/references/cli/vocabulary.md +325 -362
  31. package/bundle/references/meta/retained-reference-authority.yaml +151 -0
  32. package/bundle/registry.json +13 -13
  33. package/bundle/skills/agentera/SKILL.md +226 -422
  34. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +84 -0
  35. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/exit.yaml +2 -2
  36. package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +25 -0
  37. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/validation.yaml +37 -18
  38. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +103 -0
  39. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +8 -6
  40. package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
  41. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +184 -0
  42. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/artifacts.yaml +12 -12
  43. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/exit.yaml +5 -5
  44. package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +16 -0
  45. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/validation.yaml +7 -7
  46. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +51 -0
  47. package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/exit.yaml +2 -2
  48. package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +20 -0
  49. package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +144 -0
  50. package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +80 -0
  51. package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +16 -0
  52. package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/validation.yaml +18 -18
  53. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/artifacts.yaml +18 -18
  54. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/exit.yaml +2 -2
  55. package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +16 -0
  56. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/validation.yaml +9 -9
  57. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +76 -0
  58. package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/exit.yaml +9 -7
  59. package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +23 -0
  60. package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +121 -0
  61. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +66 -0
  62. package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/exit.yaml +2 -2
  63. package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +23 -0
  64. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +121 -0
  65. package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +23 -0
  66. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +6 -5
  67. package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +20 -0
  68. package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +115 -0
  69. package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +24 -0
  70. package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +16 -0
  71. package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/validation.yaml +2 -2
  72. package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +73 -0
  73. package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +22 -0
  74. package/bundle/skills/agentera/capabilities/{hej → status}/schemas/validation.yaml +5 -5
  75. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/artifacts.yaml +16 -16
  76. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/exit.yaml +7 -6
  77. package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +23 -0
  78. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/validation.yaml +18 -20
  79. package/bundle/skills/agentera/capability_schema_contract.yaml +178 -34
  80. package/bundle/skills/agentera/protocol.yaml +31 -31
  81. package/bundle/skills/agentera/route-phrases.yaml +81 -0
  82. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +5 -4
  83. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +39 -21
  84. package/bundle/skills/agentera/schemas/artifacts/design.yaml +5 -4
  85. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +15 -19
  86. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +145 -14
  87. package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +82 -0
  88. package/bundle/skills/agentera/schemas/artifacts/health.yaml +58 -21
  89. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +22 -8
  90. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +461 -36
  91. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +133 -20
  92. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +342 -42
  93. package/bundle/skills/agentera/schemas/artifacts/vision.yaml +3 -3
  94. package/dist/analytics/extractCorpus/cli.js +101 -12
  95. package/dist/analytics/extractCorpus/copilotSessions.js +53 -9
  96. package/dist/analytics/extractCorpus/core.js +59 -24
  97. package/dist/analytics/extractCorpus/corpus.js +58 -23
  98. package/dist/analytics/extractCorpus/coverageAudit.js +260 -0
  99. package/dist/analytics/extractCorpus/cursorSessions.js +12 -7
  100. package/dist/analytics/extractCorpus/evidenceTiers.js +603 -0
  101. package/dist/analytics/extractCorpus/extractCorpusParity.js +105 -0
  102. package/dist/analytics/extractCorpus/filesystemSources.js +1 -5
  103. package/dist/analytics/extractCorpus/index.js +6 -1
  104. package/dist/analytics/extractCorpus/jsonlSessions.js +24 -5
  105. package/dist/analytics/extractCorpus/sqliteCaps.js +43 -0
  106. package/dist/analytics/extractCorpus/sqliteSessions.js +98 -6
  107. package/dist/analytics/extractCorpus/tierReader.js +108 -0
  108. package/dist/analytics/extractCorpus.js +0 -1
  109. package/dist/analytics/glossaryAdviceResolution.js +166 -0
  110. package/dist/analytics/glossaryInputAcquisition.js +319 -0
  111. package/dist/analytics/personalGlossaryAdmission.js +133 -0
  112. package/dist/analytics/personalGlossaryProfile.js +219 -0
  113. package/dist/analytics/profileSignals.js +211 -0
  114. package/dist/analytics/usageStats.js +169 -42
  115. package/dist/audit/terminologyDrift.js +281 -0
  116. package/dist/bin/agentera.js +3 -2
  117. package/dist/capabilities/audit/instructions.js +16 -0
  118. package/dist/capabilities/build/instructions.js +59 -0
  119. package/dist/capabilities/design/instructions.js +4 -0
  120. package/dist/capabilities/discuss/instructions.js +29 -0
  121. package/dist/capabilities/document/instructions.js +11 -0
  122. package/dist/capabilities/index.js +29 -27
  123. package/dist/capabilities/optimize/instructions.js +14 -0
  124. package/dist/capabilities/orchestrate/instructions.js +42 -0
  125. package/dist/capabilities/plan/instructions.js +33 -0
  126. package/dist/capabilities/profile/instructions.js +70 -0
  127. package/dist/capabilities/research/instructions.js +5 -0
  128. package/dist/capabilities/status/instructions.js +15 -0
  129. package/dist/capabilities/status/startupInstructions.js +34 -0
  130. package/dist/capabilities/vision/instructions.js +4 -0
  131. package/dist/cli/appContext.js +30 -24
  132. package/dist/cli/argvalidate.js +0 -1
  133. package/dist/cli/capabilityContext/benchmark.js +25 -17
  134. package/dist/cli/capabilityContext/bespoke.js +31 -12
  135. package/dist/cli/capabilityContext/build.js +251 -0
  136. package/dist/cli/capabilityContext/closeout.js +33 -30
  137. package/dist/cli/capabilityContext/contract.js +39 -46
  138. package/dist/cli/capabilityContext/evidence.js +90 -73
  139. package/dist/cli/capabilityContext/index.js +1 -2
  140. package/dist/cli/capabilityContext/orchestration.js +45 -21
  141. package/dist/cli/capabilityContext/planState.js +93 -100
  142. package/dist/cli/capabilityContext/progress.js +60 -14
  143. package/dist/cli/capabilityContext/projectVerification.js +409 -0
  144. package/dist/cli/capabilityContext/shared.js +9 -20
  145. package/dist/cli/capabilityContext/slim.js +56 -10
  146. package/dist/cli/capabilityContext/startup.js +57 -115
  147. package/dist/cli/capabilityContext/startupAggregation.js +68 -0
  148. package/dist/cli/capabilityContext/types.js +37 -24
  149. package/dist/cli/capabilityContext.js +1 -2
  150. package/dist/cli/commands/appHome.js +22 -0
  151. package/dist/cli/commands/capability.js +4 -4
  152. package/dist/cli/commands/compact.js +163 -13
  153. package/dist/cli/commands/doctor.js +122 -114
  154. package/dist/cli/commands/durability.js +81 -0
  155. package/dist/cli/commands/glossaryAdvice.js +138 -0
  156. package/dist/cli/commands/lint.js +22 -8
  157. package/dist/cli/commands/personalGlossary.js +176 -0
  158. package/dist/cli/commands/prime/briefOrientation.js +746 -0
  159. package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
  160. package/dist/cli/commands/prime/bundleStatus.js +190 -0
  161. package/dist/cli/commands/prime/collectEntityOrientation.js +326 -0
  162. package/dist/cli/commands/prime/collectOrientationState.js +219 -0
  163. package/dist/cli/commands/prime/orientationOutput.js +421 -0
  164. package/dist/cli/commands/prime/types.js +1 -0
  165. package/dist/cli/commands/prime/v1Migration.js +38 -0
  166. package/dist/cli/commands/prime.js +80 -558
  167. package/dist/cli/commands/profileGrounding.js +55 -0
  168. package/dist/cli/commands/query.js +77 -52
  169. package/dist/cli/commands/report.js +88 -26
  170. package/dist/cli/commands/route.js +142 -0
  171. package/dist/cli/commands/schema.js +266 -142
  172. package/dist/cli/commands/state/decisions.js +51 -61
  173. package/dist/cli/commands/state/docs.js +63 -86
  174. package/dist/cli/commands/state/experimentRecords.js +151 -0
  175. package/dist/cli/commands/state/experiments.js +11 -64
  176. package/dist/cli/commands/state/get.js +129 -0
  177. package/dist/cli/commands/state/health.js +11 -111
  178. package/dist/cli/commands/state/index.js +6 -41
  179. package/dist/cli/commands/state/list.js +194 -0
  180. package/dist/cli/commands/state/objective.js +21 -64
  181. package/dist/cli/commands/state/plan.js +11 -169
  182. package/dist/cli/commands/state/planTasks.js +154 -0
  183. package/dist/cli/commands/state/plans.js +154 -0
  184. package/dist/cli/commands/state/progress.js +11 -45
  185. package/dist/cli/commands/state/shared.js +0 -1
  186. package/dist/cli/commands/state/todo.js +29 -108
  187. package/dist/cli/commands/state/write.js +433 -0
  188. package/dist/cli/commands/upgrade.js +146 -5
  189. package/dist/cli/commands/upgradeVerify.js +118 -0
  190. package/dist/cli/commands/validate.js +246 -211
  191. package/dist/cli/commands/verify.js +24 -9
  192. package/dist/cli/contracts/bundleStatus.js +1 -0
  193. package/dist/cli/contracts/orientationState.js +1 -0
  194. package/dist/cli/dispatch/argvParser.js +32 -0
  195. package/dist/cli/dispatch/check.js +94 -50
  196. package/dist/cli/dispatch/commands.js +27 -0
  197. package/dist/cli/dispatch/index.js +82 -52
  198. package/dist/cli/dispatch/lifecycle.js +268 -108
  199. package/dist/cli/dispatch/prime.js +68 -29
  200. package/dist/cli/dispatch/projections.js +17 -0
  201. package/dist/cli/dispatch/shared.js +1 -2
  202. package/dist/cli/dispatch/state.js +68 -77
  203. package/dist/cli/dispatch.js +0 -1
  204. package/dist/cli/errors.js +16 -17
  205. package/dist/cli/help.js +395 -41
  206. package/dist/cli/migrationRequired.js +122 -0
  207. package/dist/cli/orientation/attention.js +61 -0
  208. package/dist/cli/orientation/corpusCoverage.js +102 -0
  209. package/dist/cli/orientation.js +438 -170
  210. package/dist/cli/planArtifacts.js +350 -0
  211. package/dist/cli/planEvidence.js +157 -0
  212. package/dist/cli/planLifecycleState.js +36 -0
  213. package/dist/cli/planTaskIndex.js +11 -0
  214. package/dist/cli/preCutoverCommand.js +32 -0
  215. package/dist/cli/prime-blob.js +71 -3
  216. package/dist/cli/profileAcquisition.js +167 -0
  217. package/dist/cli/startupCompletenessContract.js +59 -0
  218. package/dist/cli/stateQuery.js +56 -14
  219. package/dist/cli/structured.js +0 -1
  220. package/dist/cli/todoMarkdown.js +25 -12
  221. package/dist/cli/todoReadinessSelection.js +192 -0
  222. package/dist/cli/todoSeverity.js +18 -0
  223. package/dist/core/atomicWriter.js +20 -0
  224. package/dist/core/developmentChannel.js +1 -0
  225. package/dist/core/developmentInvocation.js +374 -0
  226. package/dist/core/difflib.js +0 -1
  227. package/dist/core/envPaths.js +20 -0
  228. package/dist/core/jsonValue.js +5 -0
  229. package/dist/core/paths.js +0 -1
  230. package/dist/core/pyjson.js +67 -3
  231. package/dist/core/shell.js +4 -0
  232. package/dist/core/skillIdentity.js +23 -0
  233. package/dist/core/sourceRoot.js +9 -12
  234. package/dist/core/text.js +10 -0
  235. package/dist/core/toml.js +0 -1
  236. package/dist/core/yaml.js +8 -1
  237. package/dist/eval/evalSkills.js +30 -26
  238. package/dist/eval/hybridRouteEvaluation.js +155 -0
  239. package/dist/eval/semanticEval.js +43 -20
  240. package/dist/eval/semanticFixtures.js +16 -5
  241. package/dist/hooks/common.js +3 -56
  242. package/dist/hooks/compaction/apply.js +252 -50
  243. package/dist/hooks/compaction/dryRun.js +7 -4
  244. package/dist/hooks/compaction/index.js +5 -6
  245. package/dist/hooks/compaction/parse.js +201 -5
  246. package/dist/hooks/compaction/retention.js +30 -25
  247. package/dist/hooks/compaction/status.js +149 -32
  248. package/dist/hooks/compaction/types.js +0 -1
  249. package/dist/hooks/validateArtifact/agentFacing.js +0 -1
  250. package/dist/hooks/validateArtifact/index.js +7 -64
  251. package/dist/hooks/validateArtifact/markdown.js +57 -7
  252. package/dist/hooks/validateArtifact/schema.js +110 -19
  253. package/dist/hooks/validateArtifact/traversal.js +13 -11
  254. package/dist/hooks/validateArtifact/violations.js +7 -5
  255. package/dist/migrate/v2HandoffManifest.js +127 -8
  256. package/dist/registries/activationContract.js +2 -0
  257. package/dist/registries/activationTuples.js +108 -0
  258. package/dist/registries/artifactProtocolIds.js +2 -1
  259. package/dist/registries/artifactRegistry.js +224 -63
  260. package/dist/registries/artifactSchemaProjection.js +45 -0
  261. package/dist/registries/capabilityContract.js +129 -2
  262. package/dist/registries/evaluatorHandoffContract.js +2 -3
  263. package/dist/registries/evidenceTierContract.js +371 -0
  264. package/dist/registries/glossaryAdviceContract.js +79 -0
  265. package/dist/registries/glossaryCaveatContract.js +67 -0
  266. package/dist/registries/glossaryConsumerContractValidation.js +787 -0
  267. package/dist/registries/glossaryEntryContract.js +757 -0
  268. package/dist/registries/glossaryTermIdentity.js +17 -0
  269. package/dist/registries/glossaryTermOccurrence.js +20 -0
  270. package/dist/registries/hybridRoute.js +274 -0
  271. package/dist/registries/hybridRouteReceipt.js +221 -0
  272. package/dist/registries/packagePublication.js +273 -0
  273. package/dist/registries/packageRegistry.js +187 -211
  274. package/dist/registries/todoReadinessContract.js +448 -0
  275. package/dist/registries/triggerLoader.js +174 -0
  276. package/dist/registries/verbosityBudgetContract.js +205 -0
  277. package/dist/release/releaseMetadata.js +156 -6
  278. package/dist/runtime/lifecycleAdapterContract.js +457 -0
  279. package/dist/runtime/lifecycleAdapters.js +777 -0
  280. package/dist/runtime/lifecycleAuthority.js +453 -0
  281. package/dist/runtime/lifecycleOperationContract.js +123 -0
  282. package/dist/runtime/lifecycleOperations.js +634 -0
  283. package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
  284. package/dist/runtime/lifecyclePublication.js +415 -0
  285. package/dist/runtime/lifecycleSnapshot.js +438 -0
  286. package/dist/runtime/nativeResourceCleanup.js +502 -0
  287. package/dist/setup/opencode.js +20 -13
  288. package/dist/setup/opencodeConstants.js +1 -0
  289. package/dist/setup/sharedSkill.js +45 -0
  290. package/dist/setup/smokeChecks.js +21 -82
  291. package/dist/state/archiveDiscovery.js +580 -0
  292. package/dist/state/archivePublication.js +225 -0
  293. package/dist/state/archiveRecovery.js +237 -0
  294. package/dist/state/archiveReplay.js +53 -0
  295. package/dist/state/canonicalMigrationRecord.js +36 -0
  296. package/dist/state/changelog.js +221 -0
  297. package/dist/state/decisionEntities.js +367 -0
  298. package/dist/state/decisionLegacyValidation.js +215 -0
  299. package/dist/state/decisionMigrationProvenance.js +199 -0
  300. package/dist/state/decisionOverlay.js +254 -0
  301. package/dist/state/decisionRevision.js +256 -0
  302. package/dist/state/decisionRevisionMigration.js +89 -0
  303. package/dist/state/directRetrieval.js +323 -0
  304. package/dist/state/durability.js +324 -0
  305. package/dist/state/entityCutover.js +459 -0
  306. package/dist/state/entityCutoverGit.js +127 -0
  307. package/dist/state/entityGlossaryAuthority.js +13 -0
  308. package/dist/state/entityListProjection.js +187 -0
  309. package/dist/state/entityListRuntimeRegistry.js +85 -0
  310. package/dist/state/entityMigrationCausality.js +97 -0
  311. package/dist/state/entityMigrationIdentity.js +5 -0
  312. package/dist/state/entityMigrationPreview.js +840 -0
  313. package/dist/state/entityMigrationTodo.js +133 -0
  314. package/dist/state/entityPublicationContext.js +859 -0
  315. package/dist/state/entityRetrievalHelp.js +506 -0
  316. package/dist/state/entityStorage.js +899 -0
  317. package/dist/state/exactReplacementRecovery.js +18 -0
  318. package/dist/state/experimentArchive.js +63 -0
  319. package/dist/state/experimentIdentity.js +202 -0
  320. package/dist/state/healthEntities.js +262 -0
  321. package/dist/state/healthEntityValidation.js +18 -0
  322. package/dist/state/healthRepair.js +69 -0
  323. package/dist/state/installRoot.js +64 -25
  324. package/dist/state/legacyEntityCutoverEvidence.js +65 -0
  325. package/dist/state/legacyIdentity.js +47 -0
  326. package/dist/state/legacySummaryRecord.js +6 -0
  327. package/dist/state/listAccounting.js +54 -0
  328. package/dist/state/listClassification.js +17 -0
  329. package/dist/state/listCursor.js +42 -0
  330. package/dist/state/listRetrieval.js +781 -0
  331. package/dist/state/migrationSourceBinding.js +30 -0
  332. package/dist/state/objectiveExperimentEntities.js +322 -0
  333. package/dist/state/planEntities.js +1027 -0
  334. package/dist/state/planIdentity.js +47 -0
  335. package/dist/state/planLineageValidation.js +52 -0
  336. package/dist/state/planReplacementTransaction.js +475 -0
  337. package/dist/state/planRetrieval.js +313 -0
  338. package/dist/state/planTaskRetrieval.js +294 -0
  339. package/dist/state/progressEntities.js +512 -0
  340. package/dist/state/progressGlossaryCaveat.js +168 -0
  341. package/dist/state/progressPublicationOrder.js +19 -0
  342. package/dist/state/progressWritePolicy.js +33 -0
  343. package/dist/state/projectRoot.js +62 -0
  344. package/dist/state/projectionPolicy.js +190 -0
  345. package/dist/state/retrievalAuthority.js +156 -0
  346. package/dist/state/safeProjectFile.js +155 -0
  347. package/dist/state/startupAnalysis/benchmark.js +92 -27
  348. package/dist/state/startupAnalysis/contract.js +48 -10
  349. package/dist/state/startupAnalysis/helpers.js +27 -73
  350. package/dist/state/startupAnalysis/index.js +0 -1
  351. package/dist/state/startupAnalysis/metrics.js +25 -19
  352. package/dist/state/startupAnalysis/records.js +13 -10
  353. package/dist/state/startupAnalysis/report.js +26 -38
  354. package/dist/state/startupAnalysis/threshold.js +19 -7
  355. package/dist/state/startupAnalysis.js +0 -1
  356. package/dist/state/startupProjection.js +499 -0
  357. package/dist/state/stateMode.js +222 -0
  358. package/dist/state/stateStorageAuthority.js +47 -0
  359. package/dist/state/summaryEntityRead.js +25 -0
  360. package/dist/state/summaryMigrationProvenance.js +66 -0
  361. package/dist/state/summarySourceRowAuthority.js +36 -0
  362. package/dist/state/todoActivationSafety.js +58 -0
  363. package/dist/state/todoDocsEntities.js +1124 -0
  364. package/dist/state/todoDocsEntityValidation.js +158 -0
  365. package/dist/state/todoMarkdownProjection.js +51 -0
  366. package/dist/state/todoReconciliationActivation.js +182 -0
  367. package/dist/state/todoReconciliationInspection.js +171 -0
  368. package/dist/state/todoReconciliationRepair.js +318 -0
  369. package/dist/state/todoReconciliationTransaction.js +595 -0
  370. package/dist/state/write/assign.js +20 -0
  371. package/dist/state/write/candidateMutation.js +269 -0
  372. package/dist/state/write/errors.js +11 -0
  373. package/dist/state/write/experimentPublication.js +192 -0
  374. package/dist/state/write/explain.js +377 -0
  375. package/dist/state/write/fields.js +61 -0
  376. package/dist/state/write/glossaryPublication.js +263 -0
  377. package/dist/state/write/grammar.js +285 -0
  378. package/dist/state/write/helpers.js +29 -0
  379. package/dist/state/write/index.js +12 -0
  380. package/dist/state/write/input.js +391 -0
  381. package/dist/state/write/lock.js +837 -0
  382. package/dist/state/write/mutation.js +234 -0
  383. package/dist/state/write/operations.js +170 -0
  384. package/dist/state/write/planEvaluation.js +128 -0
  385. package/dist/state/write/planPublication.js +179 -0
  386. package/dist/state/write/runtimeOperations.js +146 -0
  387. package/dist/state/write/serialize.js +1 -0
  388. package/dist/state/write/transaction.js +57 -0
  389. package/dist/state/write/validate.js +7 -0
  390. package/dist/upgrade/appContentRefresh.js +383 -0
  391. package/dist/upgrade/appModel.js +8 -7
  392. package/dist/upgrade/atomicWriter.js +1 -0
  393. package/dist/upgrade/bundleEvidence.js +33 -0
  394. package/dist/upgrade/channels.js +12 -8
  395. package/dist/upgrade/compatibility.js +56 -21
  396. package/dist/upgrade/doctor.js +165 -199
  397. package/dist/upgrade/doctorClassifier.js +187 -0
  398. package/dist/upgrade/installedHooksRetirement.js +196 -0
  399. package/dist/upgrade/legacyAgentCleanup.js +282 -0
  400. package/dist/upgrade/lifecycleUpgrade.js +113 -0
  401. package/dist/upgrade/migrateArtifactsV2ToV3.js +375 -79
  402. package/dist/upgrade/migrationPublication.js +122 -0
  403. package/dist/upgrade/nextMajorDoctor.js +29 -10
  404. package/dist/upgrade/npxPlatformStatus.js +22 -0
  405. package/dist/upgrade/projectIntegration.js +145 -189
  406. package/dist/upgrade/projectIntegrationDecision.js +50 -0
  407. package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
  408. package/dist/upgrade/runtimeMigration.js +272 -373
  409. package/dist/upgrade/upgradeCommands.js +14 -1
  410. package/dist/upgrade/upgradeLock.js +85 -0
  411. package/dist/upgrade/upgradeOrchestrator.js +263 -59
  412. package/dist/upgrade/v3CapabilitySurface.js +2 -3
  413. package/dist/upgrade/versionResolution.js +2 -3
  414. package/dist/validate/activationArtifactEvidence.js +852 -0
  415. package/dist/validate/activationArtifactEvidenceTypes.js +12 -0
  416. package/dist/validate/activationConjunction.js +816 -0
  417. package/dist/validate/activationEvidenceManifest.js +531 -0
  418. package/dist/validate/activationPackageSemantics.js +29 -0
  419. package/dist/validate/appHomeContract.js +2 -8
  420. package/dist/validate/bootstrapAuthority.js +44 -0
  421. package/dist/validate/capability.js +133 -12
  422. package/dist/validate/crossCapability.js +15 -10
  423. package/dist/validate/retainedReferenceAuthority.js +879 -0
  424. package/dist/validate/selfAudit.js +39 -45
  425. package/dist/validate/v1LegacyCruft.js +131 -0
  426. package/dist/validate/vocabularyAuthority.js +18 -13
  427. package/package.json +60 -29
  428. package/bundle/references/adapters/cursor.md +0 -213
  429. package/bundle/references/adapters/opencode.md +0 -530
  430. package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
  431. package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
  432. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
  433. package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -548
  434. package/bundle/references/adapters/runtime-feature-parity.md +0 -189
  435. package/bundle/references/analysis/benchmark.md +0 -267
  436. package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
  437. package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
  438. package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -369
  439. package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -250
  440. package/bundle/references/cli/capability-tool-classification.yaml +0 -53
  441. package/bundle/references/cli/coexistence-probe.yaml +0 -9
  442. package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
  443. package/bundle/references/cli/single-name-protocol.yaml +0 -42
  444. package/bundle/references/cli/upgrade-repair-wording.md +0 -31
  445. package/bundle/references/cli/v3-handoff-manifest.schema.yaml +0 -98
  446. package/bundle/references/meta/documentation-inventory.md +0 -49
  447. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  448. package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
  449. package/bundle/skills/agentera/agents/hej.toml +0 -6
  450. package/bundle/skills/agentera/agents/inspektera.toml +0 -6
  451. package/bundle/skills/agentera/agents/inspirera.toml +0 -6
  452. package/bundle/skills/agentera/agents/optimera.toml +0 -6
  453. package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
  454. package/bundle/skills/agentera/agents/planera.toml +0 -6
  455. package/bundle/skills/agentera/agents/profilera.toml +0 -6
  456. package/bundle/skills/agentera/agents/realisera.toml +0 -6
  457. package/bundle/skills/agentera/agents/resonera.toml +0 -6
  458. package/bundle/skills/agentera/agents/visionera.toml +0 -6
  459. package/bundle/skills/agentera/agents/visualisera.toml +0 -6
  460. package/bundle/skills/agentera/capabilities/dokumentera/schemas/artifacts.yaml +0 -73
  461. package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +0 -35
  462. package/bundle/skills/agentera/capabilities/hej/schemas/artifacts.yaml +0 -69
  463. package/bundle/skills/agentera/capabilities/hej/schemas/triggers.yaml +0 -58
  464. package/bundle/skills/agentera/capabilities/inspektera/schemas/artifacts.yaml +0 -76
  465. package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +0 -38
  466. package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +0 -24
  467. package/bundle/skills/agentera/capabilities/inspirera/schemas/triggers.yaml +0 -34
  468. package/bundle/skills/agentera/capabilities/optimera/schemas/triggers.yaml +0 -39
  469. package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +0 -64
  470. package/bundle/skills/agentera/capabilities/orkestrera/schemas/triggers.yaml +0 -42
  471. package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +0 -120
  472. package/bundle/skills/agentera/capabilities/planera/schemas/artifacts.yaml +0 -62
  473. package/bundle/skills/agentera/capabilities/planera/schemas/triggers.yaml +0 -34
  474. package/bundle/skills/agentera/capabilities/planera/schemas/validation.yaml +0 -61
  475. package/bundle/skills/agentera/capabilities/profilera/schemas/artifacts.yaml +0 -18
  476. package/bundle/skills/agentera/capabilities/profilera/schemas/triggers.yaml +0 -45
  477. package/bundle/skills/agentera/capabilities/profilera/schemas/validation.yaml +0 -57
  478. package/bundle/skills/agentera/capabilities/realisera/schemas/artifacts.yaml +0 -80
  479. package/bundle/skills/agentera/capabilities/realisera/schemas/triggers.yaml +0 -39
  480. package/bundle/skills/agentera/capabilities/realisera/schemas/validation.yaml +0 -110
  481. package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +0 -47
  482. package/bundle/skills/agentera/capabilities/resonera/schemas/triggers.yaml +0 -46
  483. package/bundle/skills/agentera/capabilities/resonera/schemas/validation.yaml +0 -77
  484. package/bundle/skills/agentera/capabilities/visionera/schemas/triggers.yaml +0 -41
  485. package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +0 -33
  486. package/bundle/skills/agentera/references/contract.md +0 -1039
  487. package/dist/analytics/extractCorpus/cli.js.map +0 -1
  488. package/dist/analytics/extractCorpus/copilotSessions.js.map +0 -1
  489. package/dist/analytics/extractCorpus/core.js.map +0 -1
  490. package/dist/analytics/extractCorpus/corpus.js.map +0 -1
  491. package/dist/analytics/extractCorpus/cursorSessions.js.map +0 -1
  492. package/dist/analytics/extractCorpus/filesystemSources.js.map +0 -1
  493. package/dist/analytics/extractCorpus/index.js.map +0 -1
  494. package/dist/analytics/extractCorpus/jsonlSessions.js.map +0 -1
  495. package/dist/analytics/extractCorpus/sqliteSessions.js.map +0 -1
  496. package/dist/analytics/extractCorpus.js.map +0 -1
  497. package/dist/analytics/usageStats.js.map +0 -1
  498. package/dist/bin/agentera.js.map +0 -1
  499. package/dist/capabilities/dokumentera/instructions.js +0 -6
  500. package/dist/capabilities/dokumentera/instructions.js.map +0 -1
  501. package/dist/capabilities/hej/instructions.js +0 -6
  502. package/dist/capabilities/hej/instructions.js.map +0 -1
  503. package/dist/capabilities/index.js.map +0 -1
  504. package/dist/capabilities/inspektera/instructions.js +0 -6
  505. package/dist/capabilities/inspektera/instructions.js.map +0 -1
  506. package/dist/capabilities/inspirera/instructions.js +0 -6
  507. package/dist/capabilities/inspirera/instructions.js.map +0 -1
  508. package/dist/capabilities/optimera/instructions.js +0 -6
  509. package/dist/capabilities/optimera/instructions.js.map +0 -1
  510. package/dist/capabilities/orkestrera/instructions.js +0 -6
  511. package/dist/capabilities/orkestrera/instructions.js.map +0 -1
  512. package/dist/capabilities/planera/instructions.js +0 -6
  513. package/dist/capabilities/planera/instructions.js.map +0 -1
  514. package/dist/capabilities/profilera/instructions.js +0 -6
  515. package/dist/capabilities/profilera/instructions.js.map +0 -1
  516. package/dist/capabilities/realisera/instructions.js +0 -6
  517. package/dist/capabilities/realisera/instructions.js.map +0 -1
  518. package/dist/capabilities/resonera/instructions.js +0 -6
  519. package/dist/capabilities/resonera/instructions.js.map +0 -1
  520. package/dist/capabilities/visionera/instructions.js +0 -6
  521. package/dist/capabilities/visionera/instructions.js.map +0 -1
  522. package/dist/capabilities/visualisera/instructions.js +0 -6
  523. package/dist/capabilities/visualisera/instructions.js.map +0 -1
  524. package/dist/cli/appContext.js.map +0 -1
  525. package/dist/cli/argvalidate.js.map +0 -1
  526. package/dist/cli/capabilityContext/benchmark.js.map +0 -1
  527. package/dist/cli/capabilityContext/bespoke.js.map +0 -1
  528. package/dist/cli/capabilityContext/closeout.js.map +0 -1
  529. package/dist/cli/capabilityContext/contract.js.map +0 -1
  530. package/dist/cli/capabilityContext/evidence.js.map +0 -1
  531. package/dist/cli/capabilityContext/index.js.map +0 -1
  532. package/dist/cli/capabilityContext/orchestration.js.map +0 -1
  533. package/dist/cli/capabilityContext/planState.js.map +0 -1
  534. package/dist/cli/capabilityContext/progress.js.map +0 -1
  535. package/dist/cli/capabilityContext/realisera.js +0 -174
  536. package/dist/cli/capabilityContext/realisera.js.map +0 -1
  537. package/dist/cli/capabilityContext/shared.js.map +0 -1
  538. package/dist/cli/capabilityContext/slim.js.map +0 -1
  539. package/dist/cli/capabilityContext/startup.js.map +0 -1
  540. package/dist/cli/capabilityContext/types.js.map +0 -1
  541. package/dist/cli/capabilityContext.js.map +0 -1
  542. package/dist/cli/commands/backfill.js +0 -84
  543. package/dist/cli/commands/backfill.js.map +0 -1
  544. package/dist/cli/commands/capability.js.map +0 -1
  545. package/dist/cli/commands/compact.js.map +0 -1
  546. package/dist/cli/commands/doctor.js.map +0 -1
  547. package/dist/cli/commands/lint.js.map +0 -1
  548. package/dist/cli/commands/prime.js.map +0 -1
  549. package/dist/cli/commands/query.js.map +0 -1
  550. package/dist/cli/commands/report.js.map +0 -1
  551. package/dist/cli/commands/schema.js.map +0 -1
  552. package/dist/cli/commands/state/decisions.js.map +0 -1
  553. package/dist/cli/commands/state/docs.js.map +0 -1
  554. package/dist/cli/commands/state/experiments.js.map +0 -1
  555. package/dist/cli/commands/state/health.js.map +0 -1
  556. package/dist/cli/commands/state/index.js.map +0 -1
  557. package/dist/cli/commands/state/objective.js.map +0 -1
  558. package/dist/cli/commands/state/plan.js.map +0 -1
  559. package/dist/cli/commands/state/progress.js.map +0 -1
  560. package/dist/cli/commands/state/shared.js.map +0 -1
  561. package/dist/cli/commands/state/todo.js.map +0 -1
  562. package/dist/cli/commands/state.js +0 -1023
  563. package/dist/cli/commands/state.js.map +0 -1
  564. package/dist/cli/commands/upgrade.js.map +0 -1
  565. package/dist/cli/commands/validate.js.map +0 -1
  566. package/dist/cli/commands/verify.js.map +0 -1
  567. package/dist/cli/dispatch/check.js.map +0 -1
  568. package/dist/cli/dispatch/index.js.map +0 -1
  569. package/dist/cli/dispatch/lifecycle.js.map +0 -1
  570. package/dist/cli/dispatch/prime.js.map +0 -1
  571. package/dist/cli/dispatch/shared.js.map +0 -1
  572. package/dist/cli/dispatch/state.js.map +0 -1
  573. package/dist/cli/dispatch.js.map +0 -1
  574. package/dist/cli/errors.js.map +0 -1
  575. package/dist/cli/help.js.map +0 -1
  576. package/dist/cli/orientation.js.map +0 -1
  577. package/dist/cli/prime-blob.js.map +0 -1
  578. package/dist/cli/stateQuery.js.map +0 -1
  579. package/dist/cli/structured.js.map +0 -1
  580. package/dist/cli/todoMarkdown.js.map +0 -1
  581. package/dist/core/difflib.js.map +0 -1
  582. package/dist/core/git.js +0 -43
  583. package/dist/core/git.js.map +0 -1
  584. package/dist/core/paths.js.map +0 -1
  585. package/dist/core/pyjson.js.map +0 -1
  586. package/dist/core/sourceRoot.js.map +0 -1
  587. package/dist/core/toml.js.map +0 -1
  588. package/dist/core/yaml.js.map +0 -1
  589. package/dist/eval/evalSkills.js.map +0 -1
  590. package/dist/eval/semanticEval.js.map +0 -1
  591. package/dist/eval/semanticFixtures.js.map +0 -1
  592. package/dist/hooks/common.js.map +0 -1
  593. package/dist/hooks/compaction/apply.js.map +0 -1
  594. package/dist/hooks/compaction/dryRun.js.map +0 -1
  595. package/dist/hooks/compaction/index.js.map +0 -1
  596. package/dist/hooks/compaction/parse.js.map +0 -1
  597. package/dist/hooks/compaction/retention.js.map +0 -1
  598. package/dist/hooks/compaction/status.js.map +0 -1
  599. package/dist/hooks/compaction/types.js.map +0 -1
  600. package/dist/hooks/compaction.js +0 -935
  601. package/dist/hooks/compaction.js.map +0 -1
  602. package/dist/hooks/cursorPreToolUse.js +0 -19
  603. package/dist/hooks/cursorPreToolUse.js.map +0 -1
  604. package/dist/hooks/cursorSessionStart.js +0 -71
  605. package/dist/hooks/cursorSessionStart.js.map +0 -1
  606. package/dist/hooks/sessionStart.js +0 -209
  607. package/dist/hooks/sessionStart.js.map +0 -1
  608. package/dist/hooks/sessionStop.js +0 -203
  609. package/dist/hooks/sessionStop.js.map +0 -1
  610. package/dist/hooks/validateArtifact/agentFacing.js.map +0 -1
  611. package/dist/hooks/validateArtifact/index.js.map +0 -1
  612. package/dist/hooks/validateArtifact/markdown.js.map +0 -1
  613. package/dist/hooks/validateArtifact/runtime.js +0 -83
  614. package/dist/hooks/validateArtifact/runtime.js.map +0 -1
  615. package/dist/hooks/validateArtifact/schema.js.map +0 -1
  616. package/dist/hooks/validateArtifact/traversal.js.map +0 -1
  617. package/dist/hooks/validateArtifact/violations.js.map +0 -1
  618. package/dist/hooks/validateArtifact.js +0 -924
  619. package/dist/hooks/validateArtifact.js.map +0 -1
  620. package/dist/migrate/v2HandoffManifest.js.map +0 -1
  621. package/dist/registries/artifactProtocolIds.js.map +0 -1
  622. package/dist/registries/artifactRegistry.js.map +0 -1
  623. package/dist/registries/capabilityContract.js.map +0 -1
  624. package/dist/registries/evaluatorHandoffContract.js.map +0 -1
  625. package/dist/registries/packageRegistry.js.map +0 -1
  626. package/dist/registries/runtimeAdapterRegistry.js +0 -315
  627. package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
  628. package/dist/release/releaseMetadata.js.map +0 -1
  629. package/dist/setup/codex/agents.js +0 -96
  630. package/dist/setup/codex/agents.js.map +0 -1
  631. package/dist/setup/codex/cli.js +0 -161
  632. package/dist/setup/codex/cli.js.map +0 -1
  633. package/dist/setup/codex/configToml.js +0 -644
  634. package/dist/setup/codex/configToml.js.map +0 -1
  635. package/dist/setup/codex/constants.js +0 -29
  636. package/dist/setup/codex/constants.js.map +0 -1
  637. package/dist/setup/codex/installRoot.js +0 -64
  638. package/dist/setup/codex/installRoot.js.map +0 -1
  639. package/dist/setup/codex/state.js +0 -270
  640. package/dist/setup/codex/state.js.map +0 -1
  641. package/dist/setup/codex.js +0 -12
  642. package/dist/setup/codex.js.map +0 -1
  643. package/dist/setup/copilot.js +0 -227
  644. package/dist/setup/copilot.js.map +0 -1
  645. package/dist/setup/cursor.js +0 -127
  646. package/dist/setup/cursor.js.map +0 -1
  647. package/dist/setup/doctor/core.js +0 -300
  648. package/dist/setup/doctor/core.js.map +0 -1
  649. package/dist/setup/doctor/diagnostics.js +0 -247
  650. package/dist/setup/doctor/diagnostics.js.map +0 -1
  651. package/dist/setup/doctor/opencode.js +0 -281
  652. package/dist/setup/doctor/opencode.js.map +0 -1
  653. package/dist/setup/doctor/report.js +0 -474
  654. package/dist/setup/doctor/report.js.map +0 -1
  655. package/dist/setup/doctor.js +0 -10
  656. package/dist/setup/doctor.js.map +0 -1
  657. package/dist/setup/opencode.js.map +0 -1
  658. package/dist/setup/smokeChecks.js.map +0 -1
  659. package/dist/state/installRoot.js.map +0 -1
  660. package/dist/state/progressCommit.js +0 -289
  661. package/dist/state/progressCommit.js.map +0 -1
  662. package/dist/state/startupAnalysis/benchmark.js.map +0 -1
  663. package/dist/state/startupAnalysis/contract.js.map +0 -1
  664. package/dist/state/startupAnalysis/helpers.js.map +0 -1
  665. package/dist/state/startupAnalysis/index.js.map +0 -1
  666. package/dist/state/startupAnalysis/metrics.js.map +0 -1
  667. package/dist/state/startupAnalysis/records.js.map +0 -1
  668. package/dist/state/startupAnalysis/report.js.map +0 -1
  669. package/dist/state/startupAnalysis/threshold.js.map +0 -1
  670. package/dist/state/startupAnalysis.js.map +0 -1
  671. package/dist/upgrade/appModel.js.map +0 -1
  672. package/dist/upgrade/channels.js.map +0 -1
  673. package/dist/upgrade/coexistenceProbe.js +0 -83
  674. package/dist/upgrade/coexistenceProbe.js.map +0 -1
  675. package/dist/upgrade/compatibility.js.map +0 -1
  676. package/dist/upgrade/doctor.js.map +0 -1
  677. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -570
  678. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
  679. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
  680. package/dist/upgrade/nextMajorDoctor.js.map +0 -1
  681. package/dist/upgrade/projectIntegration.js.map +0 -1
  682. package/dist/upgrade/runtimeMigration.js.map +0 -1
  683. package/dist/upgrade/upgradeCommands.js.map +0 -1
  684. package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
  685. package/dist/upgrade/v3CapabilitySurface.js.map +0 -1
  686. package/dist/upgrade/versionResolution.js.map +0 -1
  687. package/dist/validate/appHomeContract.js.map +0 -1
  688. package/dist/validate/capability.js.map +0 -1
  689. package/dist/validate/crossCapability.js.map +0 -1
  690. package/dist/validate/lifecycleAdapters.js +0 -772
  691. package/dist/validate/lifecycleAdapters.js.map +0 -1
  692. package/dist/validate/selfAudit.js.map +0 -1
  693. package/dist/validate/vocabularyAuthority.js.map +0 -1
  694. /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
  695. /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
  696. /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
@@ -0,0 +1,263 @@
1
+ import crypto from "node:crypto";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { canonicalTerminologyJson, validateTerminologyProposal, } from "../../audit/terminologyDrift.js";
5
+ import { dumpYamlMapping, loadYamlMapping } from "../../core/yaml.js";
6
+ import { loadArtifactRecord, resolveArtifactPath, } from "../../registries/artifactRegistry.js";
7
+ import { GlossaryEntryBoundError, validateGlossaryEntry } from "../../registries/glossaryEntryContract.js";
8
+ import { unicodeCaselessExact } from "../../registries/glossaryTermIdentity.js";
9
+ import { containsGlossaryTerm } from "../../registries/glossaryTermOccurrence.js";
10
+ import { assertValidatedProjectRoot } from "../projectRoot.js";
11
+ import { reject } from "./errors.js";
12
+ import { withStateMutation } from "./mutation.js";
13
+ const REQUEST_VERSION = "agentera.glossaryPublicationRequest.v1";
14
+ const DOCUMENT_VERSION = "agentera.projectGlossary.v1";
15
+ const REQUEST_FIELDS = ["schema_version", "proposal", "confirmation"];
16
+ function mapping(value) {
17
+ return value !== null && typeof value === "object" && !Array.isArray(value);
18
+ }
19
+ function exactFields(value, allowed) {
20
+ return Object.keys(value).every((field) => allowed.includes(field));
21
+ }
22
+ function validTimestamp(value) {
23
+ if (typeof value !== "string")
24
+ return false;
25
+ const match = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.\d+)?(?:Z|[+-](\d{2}):(\d{2}))$/.exec(value);
26
+ if (!match || Number.isNaN(Date.parse(value)))
27
+ return false;
28
+ const [, year, month, day, hour, minute, second, offsetHour = "00", offsetMinute = "00"] = match;
29
+ const calendar = new Date(Date.UTC(Number(year), Number(month) - 1, Number(day)));
30
+ return calendar.getUTCFullYear() === Number(year)
31
+ && calendar.getUTCMonth() + 1 === Number(month)
32
+ && calendar.getUTCDate() === Number(day)
33
+ && Number(hour) <= 23
34
+ && Number(minute) <= 59
35
+ && Number(second) <= 59
36
+ && Number(offsetHour) <= 23
37
+ && Number(offsetMinute) <= 59;
38
+ }
39
+ function correction(message, classification = "schema_violation", recovery = "Rerun audit against current project files, obtain explicit user confirmation for the returned proposal_digest, and retry the same glossary publish command.") {
40
+ reject({
41
+ class: classification,
42
+ message,
43
+ recovery,
44
+ example: "agentera state glossary publish --input glossary-publication.yaml --format json",
45
+ });
46
+ }
47
+ function proposal(value) {
48
+ const validated = validateTerminologyProposal(value);
49
+ if (!validated.proposal) {
50
+ correction(`proposal is not canonical Audit output: ${validated.violations.join("; ")}`);
51
+ }
52
+ return validated.proposal;
53
+ }
54
+ function confirmation(value, digest) {
55
+ if (!mapping(value) || !exactFields(value, ["proposal_digest", "confirmed_by", "confirmed_at"])) {
56
+ correction("confirmation must contain only proposal_digest, confirmed_by, and confirmed_at");
57
+ }
58
+ if (value.confirmed_by !== "user") {
59
+ correction("confirmation.confirmed_by must be 'user'; generic consent or agent attribution is not approval");
60
+ }
61
+ if (!validTimestamp(value.confirmed_at)) {
62
+ correction("confirmation.confirmed_at must be a valid ISO 8601 timestamp with timezone");
63
+ }
64
+ if (value.proposal_digest !== digest) {
65
+ correction("confirmation.proposal_digest does not bind the submitted proposal");
66
+ }
67
+ return value;
68
+ }
69
+ function revalidateEvidence(root, proposalValue) {
70
+ const groups = [
71
+ { term: proposalValue.proposed_canonical_term, evidence: proposalValue.canonical_evidence },
72
+ ...proposalValue.variants,
73
+ ];
74
+ for (const group of groups) {
75
+ for (const record of group.evidence) {
76
+ assertValidatedProjectRoot(root);
77
+ const candidate = path.resolve(root.path, record.source_path);
78
+ let resolved;
79
+ try {
80
+ resolved = fs.realpathSync(candidate);
81
+ }
82
+ catch {
83
+ correction(`source evidence '${record.source_path}:${record.line}' is missing or unreadable`);
84
+ }
85
+ if (!resolved.startsWith(`${root.path}${path.sep}`) || !fs.statSync(resolved).isFile()) {
86
+ correction(`source evidence '${record.source_path}:${record.line}' escapes the project or is not a file`);
87
+ }
88
+ const canonicalPath = path.relative(root.path, resolved).split(path.sep).join(path.posix.sep);
89
+ if (canonicalPath !== record.source_path) {
90
+ correction(`source evidence '${record.source_path}:${record.line}' is not the canonical Audit-emitted project identity '${canonicalPath}:${record.line}'`);
91
+ }
92
+ const line = fs.readFileSync(resolved, "utf8").split(/\r?\n/)[record.line - 1];
93
+ const digest = line === undefined ? "" : crypto.createHash("sha256").update(line).digest("hex");
94
+ if (line === undefined || digest !== record.source_record_sha256 || !containsGlossaryTerm(line, group.term)) {
95
+ correction(`source evidence '${record.source_path}:${record.line}' is stale or no longer identifies '${group.term}'`);
96
+ }
97
+ }
98
+ }
99
+ }
100
+ function deriveEntry(proposalValue, confirmed) {
101
+ const source = proposalValue.canonical_evidence[0];
102
+ const date = confirmed.confirmed_at.slice(0, 10);
103
+ const entry = {
104
+ term: proposalValue.proposed_canonical_term,
105
+ meaning: proposalValue.concept,
106
+ confidence: proposalValue.confidence,
107
+ permanence: "stable",
108
+ temporal: { observed_at: date, last_confirmed_at: date },
109
+ provenance: {
110
+ kind: "project_file",
111
+ evidence: [{ source_path: source.source_path, source_record_sha256: source.source_record_sha256 }],
112
+ },
113
+ };
114
+ const violations = validateGlossaryEntry(entry, "project");
115
+ if (violations.length > 0)
116
+ correction(`derived project glossary entry is invalid: ${violations.join("; ")}`);
117
+ return entry;
118
+ }
119
+ function same(left, right) {
120
+ return canonicalTerminologyJson(left) === canonicalTerminologyJson(right);
121
+ }
122
+ function parseApproval(value, index) {
123
+ if (!mapping(value) || !exactFields(value, ["proposal_digest", "proposal", "confirmation"])) {
124
+ correction(`existing approvals[${index}] is malformed`, "conflict");
125
+ }
126
+ const proposed = proposal(value.proposal);
127
+ const confirmed = confirmation(value.confirmation, proposed.proposal_digest);
128
+ if (value.proposal_digest !== proposed.proposal_digest) {
129
+ correction(`existing approvals[${index}] has conflicting digest identity`, "conflict");
130
+ }
131
+ return {
132
+ approval: { proposal_digest: proposed.proposal_digest, proposal: proposed, confirmation: confirmed },
133
+ entry: deriveEntry(proposed, confirmed),
134
+ };
135
+ }
136
+ export function parseProjectGlossaryDocument(bytes, maxEntries = Number.POSITIVE_INFINITY) {
137
+ let value;
138
+ try {
139
+ value = loadYamlMapping(bytes);
140
+ }
141
+ catch (error) {
142
+ correction(`existing glossary document is malformed: ${error.message}`, "conflict");
143
+ }
144
+ if (!exactFields(value, ["schema_version", "approvals", "entries"]) || value.schema_version !== DOCUMENT_VERSION || !Array.isArray(value.approvals) || !Array.isArray(value.entries)) {
145
+ correction(`existing glossary document must use ${DOCUMENT_VERSION} with approvals and entries lists`, "conflict");
146
+ }
147
+ if (value.entries.length > maxEntries || value.approvals.length > maxEntries)
148
+ throw new GlossaryEntryBoundError("project glossary exceeds the consumer entry bound");
149
+ const approvals = value.approvals.map((item, index) => parseApproval(item, index));
150
+ const entries = value.entries;
151
+ if (entries.length !== approvals.length)
152
+ correction("existing glossary approvals and entries do not form complete publication pairs", "conflict");
153
+ const terminologyIdentities = [];
154
+ const digestIdentities = new Set();
155
+ for (const [index, item] of entries.entries()) {
156
+ if (!mapping(item))
157
+ correction(`existing entries[${index}] is malformed`, "conflict");
158
+ const violations = validateGlossaryEntry(item, "project");
159
+ if (violations.length > 0)
160
+ correction(`existing entries[${index}] is malformed: ${violations.join("; ")}`, "conflict");
161
+ if (!same(item, approvals[index].entry))
162
+ correction(`existing approval and entry at index ${index} do not match`, "conflict");
163
+ const canonical = String(item.term);
164
+ const digest = approvals[index].approval.proposal_digest;
165
+ if (digestIdentities.has(digest))
166
+ correction("existing glossary contains duplicate term or approval identity", "conflict");
167
+ digestIdentities.add(digest);
168
+ const terms = [canonical, ...approvals[index].approval.proposal.variants.map(({ term }) => term)];
169
+ for (const term of terms) {
170
+ const existing = terminologyIdentities.find((identity) => unicodeCaselessExact(identity.term, term));
171
+ if (existing) {
172
+ correction(`terminology identity collision for '${term}' between canonical sets '${existing.canonical}' and '${canonical}'`, "conflict", `Choose distinct canonical and variant terms for '${existing.canonical}' and '${canonical}', rerun audit, obtain confirmation for the corrected proposal, and retry the same glossary publish command.`);
173
+ }
174
+ terminologyIdentities.push({ term, canonical });
175
+ }
176
+ }
177
+ return {
178
+ schema_version: DOCUMENT_VERSION,
179
+ approvals: approvals.map(({ approval }) => approval),
180
+ entries: entries,
181
+ };
182
+ }
183
+ function validateCandidateBytes(bytes) {
184
+ return parseProjectGlossaryDocument(bytes);
185
+ }
186
+ export function loadProjectGlossaryDocument(projectRoot) {
187
+ const record = loadArtifactRecord("glossary");
188
+ if (!record)
189
+ correction("registered glossary artifact is unavailable");
190
+ const target = resolveArtifactPath(record, projectRoot);
191
+ if (!fs.existsSync(target))
192
+ return null;
193
+ return { path: target, document: parseProjectGlossaryDocument(fs.readFileSync(target, "utf8")) };
194
+ }
195
+ export function publishGlossary(req, root, options = {}) {
196
+ if (!req.input || !exactFields(req.input, REQUEST_FIELDS) || req.input.schema_version !== REQUEST_VERSION) {
197
+ correction(`publication request must use ${REQUEST_VERSION} and contain only proposal and confirmation`);
198
+ }
199
+ const proposed = proposal(req.input.proposal);
200
+ const confirmed = confirmation(req.input.confirmation, proposed.proposal_digest);
201
+ const entry = deriveEntry(proposed, confirmed);
202
+ const approval = {
203
+ proposal_digest: proposed.proposal_digest,
204
+ proposal: proposed,
205
+ confirmation: confirmed,
206
+ };
207
+ const record = loadArtifactRecord("glossary");
208
+ if (!record)
209
+ correction("registered glossary artifact is unavailable");
210
+ return withStateMutation(root.path, (transaction) => {
211
+ assertValidatedProjectRoot(root);
212
+ const target = resolveArtifactPath(record, root.path, { strictWrite: true });
213
+ const relativePath = path.relative(root.path, target).split(path.sep).join("/");
214
+ revalidateEvidence(root, proposed);
215
+ const previousBytes = fs.existsSync(target) ? fs.readFileSync(target, "utf8") : "";
216
+ const current = previousBytes
217
+ ? parseProjectGlossaryDocument(previousBytes)
218
+ : { schema_version: DOCUMENT_VERSION, approvals: [], entries: [] };
219
+ const approvalIndex = current.approvals.findIndex((item) => item.proposal_digest === proposed.proposal_digest);
220
+ const termIndex = current.entries.findIndex((item) => unicodeCaselessExact(String(item.term), proposed.proposed_canonical_term));
221
+ if (approvalIndex >= 0 || termIndex >= 0) {
222
+ if (approvalIndex === termIndex && approvalIndex >= 0 && same(current.approvals[approvalIndex], approval) && same(current.entries[termIndex], entry)) {
223
+ return {
224
+ schemaVersion: "agentera.stateWrite.v1",
225
+ status: "pass",
226
+ command: "state glossary publish",
227
+ artifact: "glossary",
228
+ path: relativePath,
229
+ operation: { dry_run: req.dryRun, changed: false, idempotent_replay: true },
230
+ candidate: current,
231
+ };
232
+ }
233
+ correction(`confirmed term '${proposed.proposed_canonical_term}' conflicts with existing approval or entry state`, "conflict");
234
+ }
235
+ const candidate = {
236
+ schema_version: DOCUMENT_VERSION,
237
+ approvals: [...current.approvals, approval],
238
+ entries: [...current.entries, entry],
239
+ };
240
+ const bytes = dumpYamlMapping(candidate);
241
+ validateCandidateBytes(bytes);
242
+ if (!req.dryRun) {
243
+ const stage = transaction.stageProjection(target, bytes);
244
+ try {
245
+ transaction.syncStaged(stage);
246
+ assertValidatedProjectRoot(root);
247
+ transaction.publishProjection(stage, target, previousBytes);
248
+ }
249
+ finally {
250
+ transaction.removeStage(stage);
251
+ }
252
+ }
253
+ return {
254
+ schemaVersion: "agentera.stateWrite.v1",
255
+ status: "pass",
256
+ command: "state glossary publish",
257
+ artifact: "glossary",
258
+ path: relativePath,
259
+ operation: { dry_run: req.dryRun, changed: true, idempotent_replay: false },
260
+ candidate,
261
+ };
262
+ }, options, root);
263
+ }
@@ -0,0 +1,285 @@
1
+ import crypto from "node:crypto";
2
+ import { projectRuntimeOperationExamples, projectRuntimeOperationRecovery, } from "../../core/developmentInvocation.js";
3
+ import { resolveSourceRoot } from "../../core/sourceRoot.js";
4
+ import { loadStateStorageAuthority } from "../stateStorageAuthority.js";
5
+ import { runtimeOperationSpec, runtimeOperationSpecs } from "./runtimeOperations.js";
6
+ export const MUTATION_CLASSES = [
7
+ "record_payload",
8
+ "simple_transition",
9
+ "batch_transaction",
10
+ ];
11
+ export const MUTATION_INPUT_MODES = [
12
+ "none",
13
+ "structured",
14
+ "flags_until_conversion",
15
+ ];
16
+ let cache;
17
+ function mapping(value) {
18
+ return value !== null && typeof value === "object" && !Array.isArray(value);
19
+ }
20
+ function requiredString(value, path) {
21
+ if (typeof value !== "string" || value.length === 0)
22
+ throw new Error(`invalid mutation grammar: ${path} must be a non-empty string`);
23
+ return value;
24
+ }
25
+ function strings(value, path) {
26
+ if (!Array.isArray(value) || value.some((item) => typeof item !== "string"))
27
+ throw new Error(`invalid mutation grammar: ${path} must be a string list`);
28
+ return [...value];
29
+ }
30
+ function clonePlain(value) {
31
+ if (Array.isArray(value))
32
+ return value.map(clonePlain);
33
+ if (mapping(value))
34
+ return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, clonePlain(item)]));
35
+ return value;
36
+ }
37
+ function fields(value, path) {
38
+ if (!Array.isArray(value))
39
+ throw new Error(`invalid mutation grammar: ${path} must be a list`);
40
+ const seenFlags = new Set();
41
+ const seenFields = new Set();
42
+ return value.map((raw, index) => {
43
+ const fieldPath = `${path}[${index}]`;
44
+ if (!mapping(raw))
45
+ throw new Error(`invalid mutation grammar: ${fieldPath} must be a mapping`);
46
+ const flag = requiredString(raw.flag, `${fieldPath}.flag`);
47
+ const field = requiredString(raw.field, `${fieldPath}.field`);
48
+ const kind = requiredString(raw.kind, `${fieldPath}.kind`);
49
+ if (!["string", "boolean", "integer", "string_list", "date", "datetime"].includes(kind))
50
+ throw new Error(`invalid mutation grammar: ${fieldPath}.kind '${kind}' is unsupported`);
51
+ if (seenFlags.has(flag) || seenFields.has(field))
52
+ throw new Error(`invalid mutation grammar: duplicate field ${flag}/${field} in ${path}`);
53
+ seenFlags.add(flag);
54
+ seenFields.add(field);
55
+ const validValues = raw.valid_values === undefined ? undefined : strings(raw.valid_values, `${fieldPath}.valid_values`);
56
+ const validValuesSource = raw.valid_values_source === undefined ? undefined : requiredString(raw.valid_values_source, `${fieldPath}.valid_values_source`);
57
+ if (validValues && validValuesSource)
58
+ throw new Error(`invalid mutation grammar: ${fieldPath} cannot declare both valid_values and valid_values_source`);
59
+ return {
60
+ flag,
61
+ field,
62
+ kind,
63
+ required: raw.required === true,
64
+ ...(raw.repeatable === true ? { repeatable: true } : {}),
65
+ ...(validValues ? { validValues } : {}),
66
+ ...(validValuesSource ? { validValuesSource } : {}),
67
+ ...(typeof raw.description === "string" ? { description: raw.description } : {}),
68
+ };
69
+ });
70
+ }
71
+ export function canonicalJson(value) {
72
+ if (Array.isArray(value))
73
+ return `[${value.map(canonicalJson).join(",")}]`;
74
+ if (mapping(value)) {
75
+ return `{${Object.keys(value).sort().map((key) => `${JSON.stringify(key)}:${canonicalJson(value[key])}`).join(",")}}`;
76
+ }
77
+ return JSON.stringify(value);
78
+ }
79
+ function digest(value) {
80
+ return crypto.createHash("sha256").update(canonicalJson(value)).digest("hex");
81
+ }
82
+ function parseOperation(raw, index) {
83
+ const p = `mutation_grammar.operations[${index}]`;
84
+ if (!mapping(raw))
85
+ throw new Error(`invalid mutation grammar: ${p} must be a mapping`);
86
+ const artifact = requiredString(raw.artifact, `${p}.artifact`);
87
+ const verb = requiredString(raw.verb, `${p}.verb`);
88
+ const runtime = runtimeOperationSpec(artifact, verb);
89
+ if (!runtime)
90
+ throw new Error(`invalid mutation grammar: ${p} operation '${artifact}.${verb}' is not code-owned`);
91
+ const mutationClass = requiredString(raw.class, `${p}.class`);
92
+ if (!MUTATION_CLASSES.includes(mutationClass))
93
+ throw new Error(`invalid mutation grammar: ${p}.class '${mutationClass}' is unsupported`);
94
+ if (!mapping(raw.input))
95
+ throw new Error(`invalid mutation grammar: ${p}.input must be a mapping`);
96
+ const inputMode = requiredString(raw.input.mode, `${p}.input.mode`);
97
+ if (!MUTATION_INPUT_MODES.includes(inputMode))
98
+ throw new Error(`invalid mutation grammar: ${p}.input.mode '${inputMode}' is unsupported`);
99
+ const input = {
100
+ mode: inputMode,
101
+ ...(raw.input.root === undefined ? {} : { root: requiredString(raw.input.root, `${p}.input.root`) }),
102
+ ...(raw.input.optional === true ? { optional: true } : {}),
103
+ sources: strings(raw.input.sources, `${p}.input.sources`),
104
+ ...(raw.input.structured_sources === undefined
105
+ ? (inputMode === "structured" ? { structuredSources: strings(raw.input.sources, `${p}.input.sources`) } : {})
106
+ : { structuredSources: strings(raw.input.structured_sources, `${p}.input.structured_sources`) }),
107
+ cliOwnedFields: strings(raw.input.cli_owned_fields, `${p}.input.cli_owned_fields`),
108
+ };
109
+ if (raw.input.optional !== undefined && raw.input.optional !== true)
110
+ throw new Error(`invalid mutation grammar: ${p}.input.optional must be true when present`);
111
+ if (inputMode === "structured" && (!input.root || input.sources.length === 0))
112
+ throw new Error(`invalid mutation grammar: ${p} structured input needs a root and source`);
113
+ if (inputMode === "none" && (input.sources.length > 0 || input.root !== undefined))
114
+ throw new Error(`invalid mutation grammar: ${p} none input cannot declare sources or a root`);
115
+ const operation = {
116
+ artifact,
117
+ verb,
118
+ mutationClass,
119
+ selectors: strings(raw.selectors, `${p}.selectors`),
120
+ preconditions: strings(raw.preconditions, `${p}.preconditions`),
121
+ ownedFields: strings(raw.owned_fields, `${p}.owned_fields`),
122
+ input,
123
+ recovery: projectRuntimeOperationRecovery(raw.recovery, artifact, verb),
124
+ examples: projectRuntimeOperationExamples(raw.examples, artifact, verb),
125
+ bounds: mapping(raw.bounds) ? clonePlain(raw.bounds) : (() => { throw new Error(`invalid mutation grammar: ${p}.bounds must be a mapping`); })(),
126
+ fields: fields(raw.fields, `${p}.fields`),
127
+ allowForce: raw.allow_force === true,
128
+ compacts: raw.compacts === true,
129
+ };
130
+ if (operation.examples.length === 0)
131
+ throw new Error(`invalid mutation grammar: ${p}.examples must not be empty`);
132
+ const selectors = new Set(operation.selectors);
133
+ for (const selector of selectors) {
134
+ if (!selector.startsWith("--"))
135
+ throw new Error(`invalid mutation grammar: ${p}.selectors must contain flags`);
136
+ }
137
+ return operation;
138
+ }
139
+ function runtimeFieldProjection(field) {
140
+ return {
141
+ flag: field.flag,
142
+ field: field.field,
143
+ kind: field.kind,
144
+ required: field.required === true,
145
+ repeatable: field.repeatable === true,
146
+ ...(field.validValuesSource
147
+ ? { valid_values_source: field.validValuesSource }
148
+ : field.validValues
149
+ ? { valid_values: field.validValues }
150
+ : {}),
151
+ };
152
+ }
153
+ function declaredFieldProjection(field) {
154
+ return runtimeFieldProjection(field);
155
+ }
156
+ function operationParityProjection(operation) {
157
+ return {
158
+ artifact: operation.artifact,
159
+ verb: operation.verb,
160
+ selectors: operation.selectors,
161
+ owned_fields: operation.ownedFields,
162
+ input: {
163
+ mode: operation.input.mode,
164
+ ...(operation.input.root ? { root: operation.input.root } : {}),
165
+ ...(operation.input.optional ? { optional: true } : {}),
166
+ sources: operation.input.sources,
167
+ structured_sources: operation.input.structuredSources ?? [],
168
+ cli_owned_fields: operation.input.cliOwnedFields,
169
+ },
170
+ fields: operation.fields.map(declaredFieldProjection),
171
+ recovery: operation.recovery,
172
+ examples: operation.examples,
173
+ projection: { format_values: runtimeOperationSpec(operation.artifact, operation.verb)?.projection.formatValues ?? [] },
174
+ allow_force: operation.allowForce,
175
+ compacts: operation.compacts,
176
+ bounds: operation.input.mode === "structured"
177
+ ? { max_input_utf8_bytes: operation.bounds.max_input_utf8_bytes }
178
+ : { max_input_utf8_bytes: 0 },
179
+ };
180
+ }
181
+ function runtimeParityProjection(operation) {
182
+ return {
183
+ artifact: operation.artifact,
184
+ verb: operation.verb,
185
+ selectors: operation.selectors,
186
+ owned_fields: operation.ownedFields,
187
+ input: {
188
+ mode: operation.inputMode,
189
+ ...(operation.inputRoot ? { root: operation.inputRoot } : {}),
190
+ ...(operation.inputOptional ? { optional: true } : {}),
191
+ sources: operation.inputSources,
192
+ structured_sources: operation.structuredInputSources,
193
+ cli_owned_fields: operation.cliOwnedFields,
194
+ },
195
+ fields: operation.fields.map(runtimeFieldProjection),
196
+ recovery: operation.projection.recovery.runtime,
197
+ examples: operation.projection.examples.map(({ runtime }) => runtime),
198
+ projection: { format_values: operation.projection.formatValues },
199
+ allow_force: operation.allowForce,
200
+ compacts: operation.compacts,
201
+ bounds: { max_input_utf8_bytes: operation.inputMaxBytes },
202
+ };
203
+ }
204
+ export function validateMutationGrammarParity(operations, authorityPath = "references/artifacts/state-storage-authority.yaml") {
205
+ const runtime = runtimeOperationSpecs();
206
+ const runtimeByKey = new Map(runtime.map((operation) => [`${operation.artifact}.${operation.verb}`, operation]));
207
+ const declaredByKey = new Map(operations.map((operation) => [`${operation.artifact}.${operation.verb}`, operation]));
208
+ const keys = [...new Set([...runtimeByKey.keys(), ...declaredByKey.keys()])].sort();
209
+ const mismatches = [];
210
+ for (const key of keys) {
211
+ const code = runtimeByKey.get(key);
212
+ const declared = declaredByKey.get(key);
213
+ if (!code || !declared) {
214
+ mismatches.push(`${key}: operation is ${code ? "missing from discovery" : "not code-owned"}`);
215
+ continue;
216
+ }
217
+ const expected = canonicalJson(runtimeParityProjection(code));
218
+ const actual = canonicalJson(operationParityProjection(declared));
219
+ if (expected !== actual)
220
+ mismatches.push(`${key}: discovery does not match code-owned runtime grammar`);
221
+ }
222
+ if (mismatches.length) {
223
+ throw new Error(`mutation grammar parity failure for '${authorityPath}': ${mismatches.join("; ")}`);
224
+ }
225
+ }
226
+ function parseGrammar(document, authority) {
227
+ const raw = document.mutation_grammar;
228
+ if (!mapping(raw))
229
+ throw new Error(`invalid mutation grammar in '${authority}': mutation_grammar is missing`);
230
+ const schemaVersion = requiredString(raw.schema_version, "mutation_grammar.schema_version");
231
+ if (schemaVersion !== "agentera.stateMutationGrammar.v1")
232
+ throw new Error(`invalid mutation grammar: unsupported schema version '${schemaVersion}'`);
233
+ const operationClasses = strings(raw.operation_classes, "mutation_grammar.operation_classes");
234
+ if (operationClasses.some((value) => !MUTATION_CLASSES.includes(value)))
235
+ throw new Error("invalid mutation grammar: operation_classes contains an unsupported class");
236
+ if (!mapping(raw.structured_input))
237
+ throw new Error("invalid mutation grammar: structured_input must be a mapping");
238
+ if (!Array.isArray(raw.operations))
239
+ throw new Error("invalid mutation grammar: operations must be a list");
240
+ const operations = raw.operations.map(parseOperation);
241
+ const seen = new Set();
242
+ for (const operation of operations) {
243
+ const key = `${operation.artifact}.${operation.verb}`;
244
+ if (seen.has(key))
245
+ throw new Error(`invalid mutation grammar: duplicate public mutation '${key}'`);
246
+ seen.add(key);
247
+ }
248
+ validateMutationGrammarParity(operations, authority);
249
+ const contract = {
250
+ schema_version: schemaVersion,
251
+ operation_classes: operationClasses,
252
+ structured_input: raw.structured_input,
253
+ operations,
254
+ };
255
+ return {
256
+ schemaVersion,
257
+ authority: "references/artifacts/state-storage-authority.yaml",
258
+ operationClasses,
259
+ structuredInput: clonePlain(raw.structured_input),
260
+ operations,
261
+ contractDigest: digest(contract),
262
+ };
263
+ }
264
+ export function loadMutationGrammar(sourceRoot = resolveSourceRoot()) {
265
+ const authority = loadStateStorageAuthority(sourceRoot);
266
+ if (cache?.revision === authority.revision)
267
+ return cache.grammar;
268
+ const grammar = parseGrammar(authority.document, authority.authorityPath);
269
+ cache = { revision: authority.revision, grammar };
270
+ return grammar;
271
+ }
272
+ export function mutationOperationsForArtifact(artifact, sourceRoot = resolveSourceRoot()) {
273
+ return loadMutationGrammar(sourceRoot).operations.filter((operation) => operation.artifact === artifact);
274
+ }
275
+ export function mutationGrammarPayload(sourceRoot = resolveSourceRoot()) {
276
+ const grammar = loadMutationGrammar(sourceRoot);
277
+ return {
278
+ schemaVersion: grammar.schemaVersion,
279
+ authority: grammar.authority,
280
+ contract_digest: grammar.contractDigest,
281
+ operation_classes: grammar.operationClasses,
282
+ structured_input: grammar.structuredInput,
283
+ operations: grammar.operations,
284
+ };
285
+ }
@@ -0,0 +1,29 @@
1
+ import { reject } from "./errors.js";
2
+ export function schemaViolation(violations) {
3
+ reject({ class: "schema_violation", message: violations[0], violations });
4
+ }
5
+ export function findByNumber(entries, number) {
6
+ return entries.find((entry) => Number(entry.number) === number);
7
+ }
8
+ /** Coerce an unknown value into a plain mapping, returning `{}` for non-objects. */
9
+ export function mapping(value) {
10
+ return value && typeof value === "object" && !Array.isArray(value)
11
+ ? value
12
+ : {};
13
+ }
14
+ /** Return the object-valued elements of `doc[key]`, dropping non-mapping entries. */
15
+ export function array(doc, key) {
16
+ return Array.isArray(doc[key])
17
+ ? doc[key].filter((v) => Boolean(v && typeof v === "object" && !Array.isArray(v)))
18
+ : [];
19
+ }
20
+ /** Traverse a dotted field path into a nested mapping, returning `undefined` on miss. */
21
+ export function mappingPath(entry, field) {
22
+ let value = entry;
23
+ for (const part of field.split(".")) {
24
+ if (!value || typeof value !== "object" || Array.isArray(value))
25
+ return undefined;
26
+ value = value[part];
27
+ }
28
+ return value;
29
+ }
@@ -0,0 +1,12 @@
1
+ export * from "./operations.js";
2
+ export * from "./fields.js";
3
+ export * from "./input.js";
4
+ export * from "./assign.js";
5
+ export * from "./explain.js";
6
+ export * from "./lock.js";
7
+ export * from "./mutation.js";
8
+ export * from "./transaction.js";
9
+ export * from "./validate.js";
10
+ export * from "./serialize.js";
11
+ export * from "./errors.js";
12
+ export * from "./glossaryPublication.js";