agentera 3.0.0-dev.7 → 3.0.0-dev.74

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 (763) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +229 -22
  3. package/bundle/.agentera-build-source.json +8 -0
  4. package/bundle/CHANGELOG.md +1361 -0
  5. package/bundle/DESIGN.md +229 -0
  6. package/bundle/LICENSE +201 -0
  7. package/bundle/README.md +143 -0
  8. package/bundle/UPGRADE.md +252 -0
  9. package/bundle/extract-corpus-parity.json +2 -4
  10. package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
  11. package/bundle/references/adapters/package-publication.json +484 -0
  12. package/bundle/references/adapters/package-registry.yaml +439 -188
  13. package/bundle/references/adapters/package-surface-characterization.md +68 -34
  14. package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
  15. package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
  16. package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
  17. package/bundle/references/adapters/runtime-retired-resources.yaml +333 -0
  18. package/bundle/references/analysis/evidence-tier-authority.yaml +559 -0
  19. package/bundle/references/analysis/personal-glossary-evaluation-authority.yaml +175 -0
  20. package/bundle/references/analysis/personal-glossary-evaluation-corpus.yaml +291 -0
  21. package/bundle/references/analysis/personal-glossary-holdout.yaml +192 -0
  22. package/bundle/references/analysis/verification-policy.yaml +266 -0
  23. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +17 -8
  24. package/bundle/references/artifacts/glossary-entry-contract.yaml +2752 -0
  25. package/bundle/references/artifacts/state-storage-authority.yaml +3061 -0
  26. package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
  27. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +3 -4
  28. package/bundle/references/cli/capability-instruction-contract.yaml +11 -14
  29. package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
  30. package/bundle/references/cli/routing-model.md +152 -93
  31. package/bundle/references/cli/trigger-schema-enrichment.md +57 -46
  32. package/bundle/references/cli/update-channels.yaml +6 -4
  33. package/bundle/references/cli/vocabulary-index.yaml +5 -7
  34. package/bundle/references/cli/vocabulary.md +52 -94
  35. package/bundle/references/meta/retained-reference-authority.yaml +166 -0
  36. package/bundle/skills/agentera/SKILL.md +183 -63
  37. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +27 -19
  38. package/bundle/skills/agentera/capabilities/audit/schemas/exit.yaml +2 -2
  39. package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +13 -35
  40. package/bundle/skills/agentera/capabilities/audit/schemas/validation.yaml +30 -11
  41. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +44 -21
  42. package/bundle/skills/agentera/capabilities/build/schemas/exit.yaml +8 -6
  43. package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +14 -36
  44. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +95 -21
  45. package/bundle/skills/agentera/capabilities/design/schemas/artifacts.yaml +6 -6
  46. package/bundle/skills/agentera/capabilities/design/schemas/exit.yaml +5 -5
  47. package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +5 -34
  48. package/bundle/skills/agentera/capabilities/design/schemas/validation.yaml +2 -2
  49. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +17 -13
  50. package/bundle/skills/agentera/capabilities/discuss/schemas/exit.yaml +2 -2
  51. package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +6 -40
  52. package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +72 -5
  53. package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +24 -17
  54. package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +5 -35
  55. package/bundle/skills/agentera/capabilities/document/schemas/validation.yaml +13 -13
  56. package/bundle/skills/agentera/capabilities/optimize/schemas/artifacts.yaml +10 -10
  57. package/bundle/skills/agentera/capabilities/optimize/schemas/exit.yaml +2 -2
  58. package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +4 -35
  59. package/bundle/skills/agentera/capabilities/optimize/schemas/validation.yaml +3 -3
  60. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +34 -22
  61. package/bundle/skills/agentera/capabilities/orchestrate/schemas/exit.yaml +9 -7
  62. package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +5 -37
  63. package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +38 -37
  64. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +20 -16
  65. package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +8 -31
  66. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +66 -6
  67. package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +13 -4
  68. package/bundle/skills/agentera/capabilities/profile/schemas/exit.yaml +8 -5
  69. package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +8 -37
  70. package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +67 -3
  71. package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +6 -6
  72. package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +5 -29
  73. package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +13 -12
  74. package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +7 -49
  75. package/bundle/skills/agentera/capabilities/vision/schemas/artifacts.yaml +8 -8
  76. package/bundle/skills/agentera/capabilities/vision/schemas/exit.yaml +7 -6
  77. package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +7 -39
  78. package/bundle/skills/agentera/capabilities/vision/schemas/validation.yaml +14 -16
  79. package/bundle/skills/agentera/capability_schema_contract.yaml +32 -32
  80. package/bundle/skills/agentera/protocol.yaml +4 -4
  81. package/bundle/skills/agentera/route-phrases.yaml +81 -0
  82. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +1 -0
  83. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +30 -12
  84. package/bundle/skills/agentera/schemas/artifacts/design.yaml +1 -0
  85. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +7 -12
  86. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +140 -9
  87. package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +87 -0
  88. package/bundle/skills/agentera/schemas/artifacts/health.yaml +56 -19
  89. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +18 -4
  90. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +464 -32
  91. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +131 -18
  92. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +302 -7
  93. package/dist/.agentera-build-source.json +8 -0
  94. package/dist/analytics/extractCorpus/cli.js +52 -11
  95. package/dist/analytics/extractCorpus/copilotSessions.js +19 -8
  96. package/dist/analytics/extractCorpus/core.js +262 -14
  97. package/dist/analytics/extractCorpus/corpus.js +57 -18
  98. package/dist/analytics/extractCorpus/coverageAudit.js +44 -45
  99. package/dist/analytics/extractCorpus/cursorSessions.js +28 -8
  100. package/dist/analytics/extractCorpus/evidenceTiers.js +709 -0
  101. package/dist/analytics/extractCorpus/extractCorpusParity.js +4 -4
  102. package/dist/analytics/extractCorpus/filesystemSources.js +5 -5
  103. package/dist/analytics/extractCorpus/index.js +4 -2
  104. package/dist/analytics/extractCorpus/jsonlSessions.js +76 -8
  105. package/dist/analytics/extractCorpus/sqliteCaps.js +0 -1
  106. package/dist/analytics/extractCorpus/sqliteSessions.js +12 -4
  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 +113 -0
  112. package/dist/analytics/personalGlossaryCandidateProjection.js +692 -0
  113. package/dist/analytics/personalGlossaryCandidateProjectionExcerpts.js +144 -0
  114. package/dist/analytics/personalGlossaryCandidateReadView.js +23 -0
  115. package/dist/analytics/personalGlossaryCurrentGeneration.js +25 -0
  116. package/dist/analytics/personalGlossaryDecision.js +203 -0
  117. package/dist/analytics/personalGlossaryExplicit.js +788 -0
  118. package/dist/analytics/personalGlossaryExplicitMining.js +285 -0
  119. package/dist/analytics/personalGlossaryExplicitScope.js +41 -0
  120. package/dist/analytics/personalGlossaryExplicitSegments.js +418 -0
  121. package/dist/analytics/personalGlossaryExplicitTypes.js +26 -0
  122. package/dist/analytics/personalGlossaryLexicalClassifier.js +175 -0
  123. package/dist/analytics/personalGlossaryProfile.js +229 -0
  124. package/dist/analytics/personalGlossaryRecurrence.js +618 -0
  125. package/dist/analytics/personalGlossaryReviewRecordStorage.js +428 -0
  126. package/dist/analytics/personalGlossaryReviewRecords.js +332 -0
  127. package/dist/analytics/profileSignals.js +211 -0
  128. package/dist/analytics/usageStats.js +150 -23
  129. package/dist/audit/terminologyDrift.js +281 -0
  130. package/dist/bin/agentera.js +3 -2
  131. package/dist/capabilities/audit/instructions.js +16 -6
  132. package/dist/capabilities/build/instructions.js +59 -6
  133. package/dist/capabilities/design/instructions.js +3 -4
  134. package/dist/capabilities/discuss/instructions.js +29 -6
  135. package/dist/capabilities/document/instructions.js +11 -6
  136. package/dist/capabilities/index.js +20 -14
  137. package/dist/capabilities/optimize/instructions.js +14 -6
  138. package/dist/capabilities/orchestrate/instructions.js +42 -6
  139. package/dist/capabilities/plan/instructions.js +30 -3
  140. package/dist/capabilities/profile/instructions.js +104 -5
  141. package/dist/capabilities/research/instructions.js +4 -5
  142. package/dist/capabilities/status/instructions.js +15 -6
  143. package/dist/capabilities/status/startupInstructions.js +34 -0
  144. package/dist/capabilities/vision/instructions.js +3 -5
  145. package/dist/cli/appContext.js +14 -7
  146. package/dist/cli/argvalidate.js +0 -1
  147. package/dist/cli/capabilityContext/benchmark.js +5 -4
  148. package/dist/cli/capabilityContext/bespoke.js +14 -6
  149. package/dist/cli/capabilityContext/build.js +116 -42
  150. package/dist/cli/capabilityContext/closeout.js +30 -27
  151. package/dist/cli/capabilityContext/contract.js +18 -27
  152. package/dist/cli/capabilityContext/evidence.js +84 -77
  153. package/dist/cli/capabilityContext/index.js +0 -1
  154. package/dist/cli/capabilityContext/orchestration.js +42 -18
  155. package/dist/cli/capabilityContext/planState.js +89 -96
  156. package/dist/cli/capabilityContext/progress.js +51 -12
  157. package/dist/cli/capabilityContext/projectVerification.js +409 -0
  158. package/dist/cli/capabilityContext/shared.js +9 -20
  159. package/dist/cli/capabilityContext/slim.js +52 -8
  160. package/dist/cli/capabilityContext/startup.js +51 -114
  161. package/dist/cli/capabilityContext/startupAggregation.js +68 -0
  162. package/dist/cli/capabilityContext/types.js +26 -10
  163. package/dist/cli/capabilityContext.js +0 -1
  164. package/dist/cli/commands/appHome.js +0 -1
  165. package/dist/cli/commands/capability.js +2 -2
  166. package/dist/cli/commands/compact.js +163 -13
  167. package/dist/cli/commands/doctor.js +117 -11
  168. package/dist/cli/commands/durability.js +81 -0
  169. package/dist/cli/commands/glossaryAdvice.js +138 -0
  170. package/dist/cli/commands/lint.js +22 -8
  171. package/dist/cli/commands/personalGlossaryCandidateReads.js +744 -0
  172. package/dist/cli/commands/personalGlossaryDecision.js +349 -0
  173. package/dist/cli/commands/personalGlossaryPublish.js +484 -0
  174. package/dist/cli/commands/personalGlossaryReviewRecordReads.js +209 -0
  175. package/dist/cli/commands/personalGlossaryReviewRecords.js +623 -0
  176. package/dist/cli/commands/prime/briefOrientation.js +845 -0
  177. package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
  178. package/dist/cli/commands/prime/bundleStatus.js +54 -4
  179. package/dist/cli/commands/prime/collectEntityOrientation.js +326 -0
  180. package/dist/cli/commands/prime/collectOrientationState.js +126 -63
  181. package/dist/cli/commands/prime/orientationOutput.js +267 -56
  182. package/dist/cli/commands/prime/types.js +0 -1
  183. package/dist/cli/commands/prime/v1Migration.js +0 -1
  184. package/dist/cli/commands/prime.js +76 -11
  185. package/dist/cli/commands/profileGrounding.js +55 -0
  186. package/dist/cli/commands/query.js +74 -52
  187. package/dist/cli/commands/report.js +91 -21
  188. package/dist/cli/commands/route.js +142 -0
  189. package/dist/cli/commands/schema.js +436 -138
  190. package/dist/cli/commands/state/decisions.js +40 -56
  191. package/dist/cli/commands/state/docs.js +58 -85
  192. package/dist/cli/commands/state/experimentRecords.js +151 -0
  193. package/dist/cli/commands/state/experiments.js +11 -65
  194. package/dist/cli/commands/state/get.js +129 -0
  195. package/dist/cli/commands/state/health.js +11 -113
  196. package/dist/cli/commands/state/index.js +6 -41
  197. package/dist/cli/commands/state/list.js +194 -0
  198. package/dist/cli/commands/state/objective.js +21 -65
  199. package/dist/cli/commands/state/plan.js +11 -170
  200. package/dist/cli/commands/state/planTasks.js +154 -0
  201. package/dist/cli/commands/state/plans.js +154 -0
  202. package/dist/cli/commands/state/progress.js +11 -45
  203. package/dist/cli/commands/state/shared.js +0 -1
  204. package/dist/cli/commands/state/todo.js +28 -107
  205. package/dist/cli/commands/state/write.js +433 -0
  206. package/dist/cli/commands/upgrade.js +146 -5
  207. package/dist/cli/commands/upgradeVerify.js +118 -0
  208. package/dist/cli/commands/validate.js +235 -136
  209. package/dist/cli/commands/verify.js +73 -16
  210. package/dist/cli/contracts/bundleStatus.js +0 -1
  211. package/dist/cli/contracts/orientationState.js +0 -1
  212. package/dist/cli/dispatch/argvParser.js +0 -1
  213. package/dist/cli/dispatch/check.js +84 -40
  214. package/dist/cli/dispatch/commands.js +3 -3
  215. package/dist/cli/dispatch/index.js +77 -52
  216. package/dist/cli/dispatch/lifecycle.js +162 -62
  217. package/dist/cli/dispatch/prime.js +37 -2
  218. package/dist/cli/dispatch/projections.js +17 -0
  219. package/dist/cli/dispatch/shared.js +1 -2
  220. package/dist/cli/dispatch/state.js +62 -66
  221. package/dist/cli/dispatch.js +0 -1
  222. package/dist/cli/errors.js +16 -17
  223. package/dist/cli/help.js +404 -39
  224. package/dist/cli/migrationRequired.js +125 -0
  225. package/dist/cli/orientation/attention.js +19 -19
  226. package/dist/cli/orientation/corpusCoverage.js +32 -1
  227. package/dist/cli/orientation.js +346 -129
  228. package/dist/cli/planArtifacts.js +350 -0
  229. package/dist/cli/planEvidence.js +157 -0
  230. package/dist/cli/planLifecycleState.js +36 -0
  231. package/dist/cli/planTaskIndex.js +11 -0
  232. package/dist/cli/preCutoverCommand.js +32 -0
  233. package/dist/cli/prime-blob.js +71 -3
  234. package/dist/cli/profileAcquisition.js +167 -0
  235. package/dist/cli/startupCompletenessContract.js +11 -8
  236. package/dist/cli/stateQuery.js +47 -12
  237. package/dist/cli/structured.js +0 -1
  238. package/dist/cli/todoMarkdown.js +25 -12
  239. package/dist/cli/todoReadinessSelection.js +192 -0
  240. package/dist/cli/todoSeverity.js +0 -1
  241. package/dist/core/atomicWriter.js +23 -0
  242. package/dist/core/developmentChannel.js +1 -0
  243. package/dist/core/developmentInvocation.js +377 -0
  244. package/dist/core/difflib.js +0 -1
  245. package/dist/core/envPaths.js +0 -1
  246. package/dist/core/jsonValue.js +0 -1
  247. package/dist/core/paths.js +0 -1
  248. package/dist/core/pyjson.js +0 -1
  249. package/dist/core/shell.js +4 -0
  250. package/dist/core/skillIdentity.js +23 -0
  251. package/dist/core/sourceRoot.js +9 -12
  252. package/dist/core/text.js +10 -0
  253. package/dist/core/toml.js +0 -1
  254. package/dist/core/yaml.js +61 -2
  255. package/dist/eval/evalSkills.js +13 -14
  256. package/dist/eval/glossaryEvaluation.js +751 -0
  257. package/dist/eval/glossaryEvaluationProcess.js +29 -0
  258. package/dist/eval/glossaryEvaluationRunner.js +571 -0
  259. package/dist/eval/glossaryEvaluationSuccessReport.js +297 -0
  260. package/dist/eval/hybridRouteEvaluation.js +155 -0
  261. package/dist/eval/semanticEval.js +0 -1
  262. package/dist/eval/semanticFixtures.js +0 -1
  263. package/dist/hooks/common.js +3 -56
  264. package/dist/hooks/compaction/apply.js +224 -47
  265. package/dist/hooks/compaction/dryRun.js +2 -1
  266. package/dist/hooks/compaction/index.js +5 -6
  267. package/dist/hooks/compaction/parse.js +73 -6
  268. package/dist/hooks/compaction/retention.js +28 -25
  269. package/dist/hooks/compaction/status.js +145 -26
  270. package/dist/hooks/compaction/types.js +0 -1
  271. package/dist/hooks/validateArtifact/agentFacing.js +0 -1
  272. package/dist/hooks/validateArtifact/index.js +6 -65
  273. package/dist/hooks/validateArtifact/markdown.js +9 -10
  274. package/dist/hooks/validateArtifact/schema.js +96 -9
  275. package/dist/hooks/validateArtifact/traversal.js +12 -11
  276. package/dist/hooks/validateArtifact/violations.js +5 -3
  277. package/dist/migrate/v2HandoffManifest.js +8 -3
  278. package/dist/registries/activationContract.js +2 -0
  279. package/dist/registries/activationTuples.js +136 -0
  280. package/dist/registries/artifactProtocolIds.js +2 -1
  281. package/dist/registries/artifactRegistry.js +207 -60
  282. package/dist/registries/artifactSchemaProjection.js +45 -0
  283. package/dist/registries/capabilityContract.js +5 -21
  284. package/dist/registries/evaluatorHandoffContract.js +0 -1
  285. package/dist/registries/evidenceTierContract.js +375 -0
  286. package/dist/registries/explicitSegmentGrammarContract.js +619 -0
  287. package/dist/registries/glossaryAdviceContract.js +79 -0
  288. package/dist/registries/glossaryCandidateContractPaths.js +6 -0
  289. package/dist/registries/glossaryCandidateContracts.js +820 -0
  290. package/dist/registries/glossaryCandidateDecisionAuthority.js +119 -0
  291. package/dist/registries/glossaryCandidateDecisionContract.js +62 -0
  292. package/dist/registries/glossaryCandidateProjectionAuthority.js +197 -0
  293. package/dist/registries/glossaryCandidateProjectionContract.js +104 -0
  294. package/dist/registries/glossaryCaveatContract.js +67 -0
  295. package/dist/registries/glossaryConsumerContractValidation.js +787 -0
  296. package/dist/registries/glossaryEntryContract.js +759 -0
  297. package/dist/registries/glossaryEntryTemporal.js +12 -0
  298. package/dist/registries/glossaryMiningAuthority.js +764 -0
  299. package/dist/registries/glossaryProfileFullContract.js +24 -0
  300. package/dist/registries/glossaryReviewRecordsAuthority.js +426 -0
  301. package/dist/registries/glossaryReviewRecordsContract.js +129 -0
  302. package/dist/registries/glossaryTermIdentity.js +139 -0
  303. package/dist/registries/glossaryTermOccurrence.js +20 -0
  304. package/dist/registries/hybridRoute.js +274 -0
  305. package/dist/registries/hybridRouteReceipt.js +221 -0
  306. package/dist/registries/packagePublication.js +273 -0
  307. package/dist/registries/packageRegistry.js +184 -209
  308. package/dist/registries/personalGlossaryContracts.js +1 -0
  309. package/dist/registries/todoReadinessContract.js +448 -0
  310. package/dist/registries/triggerLoader.js +7 -44
  311. package/dist/registries/verbosityBudgetContract.js +205 -0
  312. package/dist/release/releaseMetadata.js +167 -10
  313. package/dist/runtime/lifecycleAdapterContract.js +457 -0
  314. package/dist/runtime/lifecycleAdapters.js +777 -0
  315. package/dist/runtime/lifecycleAuthority.js +453 -0
  316. package/dist/runtime/lifecycleOperationContract.js +123 -0
  317. package/dist/runtime/lifecycleOperations.js +634 -0
  318. package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
  319. package/dist/runtime/lifecyclePublication.js +415 -0
  320. package/dist/runtime/lifecycleSnapshot.js +438 -0
  321. package/dist/runtime/nativeResourceCleanup.js +502 -0
  322. package/dist/setup/opencode.js +20 -13
  323. package/dist/setup/opencodeConstants.js +1 -0
  324. package/dist/setup/sharedSkill.js +45 -0
  325. package/dist/setup/smokeChecks.js +14 -75
  326. package/dist/state/archiveDiscovery.js +580 -0
  327. package/dist/state/archivePublication.js +225 -0
  328. package/dist/state/archiveRecovery.js +237 -0
  329. package/dist/state/archiveReplay.js +53 -0
  330. package/dist/state/canonicalMigrationRecord.js +36 -0
  331. package/dist/state/changelog.js +221 -0
  332. package/dist/state/decisionEntities.js +367 -0
  333. package/dist/state/decisionLegacyValidation.js +215 -0
  334. package/dist/state/decisionMigrationProvenance.js +199 -0
  335. package/dist/state/decisionOverlay.js +254 -0
  336. package/dist/state/decisionRevision.js +256 -0
  337. package/dist/state/decisionRevisionMigration.js +89 -0
  338. package/dist/state/directRetrieval.js +323 -0
  339. package/dist/state/durability.js +324 -0
  340. package/dist/state/entityCutover.js +459 -0
  341. package/dist/state/entityCutoverGit.js +127 -0
  342. package/dist/state/entityGlossaryAuthority.js +13 -0
  343. package/dist/state/entityListProjection.js +187 -0
  344. package/dist/state/entityListRuntimeRegistry.js +85 -0
  345. package/dist/state/entityMigrationCausality.js +97 -0
  346. package/dist/state/entityMigrationIdentity.js +5 -0
  347. package/dist/state/entityMigrationPreview.js +840 -0
  348. package/dist/state/entityMigrationTodo.js +133 -0
  349. package/dist/state/entityPublicationContext.js +859 -0
  350. package/dist/state/entityRetrievalHelp.js +506 -0
  351. package/dist/state/entityStorage.js +899 -0
  352. package/dist/state/exactReplacementRecovery.js +18 -0
  353. package/dist/state/experimentArchive.js +63 -0
  354. package/dist/state/experimentIdentity.js +202 -0
  355. package/dist/state/healthEntities.js +262 -0
  356. package/dist/state/healthEntityValidation.js +18 -0
  357. package/dist/state/healthRepair.js +69 -0
  358. package/dist/state/installRoot.js +15 -7
  359. package/dist/state/legacyEntityCutoverEvidence.js +65 -0
  360. package/dist/state/legacyIdentity.js +47 -0
  361. package/dist/state/legacySummaryRecord.js +6 -0
  362. package/dist/state/listAccounting.js +54 -0
  363. package/dist/state/listClassification.js +17 -0
  364. package/dist/state/listCursor.js +42 -0
  365. package/dist/state/listRetrieval.js +781 -0
  366. package/dist/state/migrationSourceBinding.js +30 -0
  367. package/dist/state/objectiveExperimentEntities.js +322 -0
  368. package/dist/state/planEntities.js +1027 -0
  369. package/dist/state/planIdentity.js +47 -0
  370. package/dist/state/planLineageValidation.js +52 -0
  371. package/dist/state/planReplacementTransaction.js +475 -0
  372. package/dist/state/planRetrieval.js +313 -0
  373. package/dist/state/planTaskRetrieval.js +294 -0
  374. package/dist/state/progressEntities.js +512 -0
  375. package/dist/state/progressGlossaryCaveat.js +168 -0
  376. package/dist/state/progressPublicationOrder.js +19 -0
  377. package/dist/state/progressWritePolicy.js +33 -0
  378. package/dist/state/projectRoot.js +62 -0
  379. package/dist/state/projectionPolicy.js +190 -0
  380. package/dist/state/retrievalAuthority.js +156 -0
  381. package/dist/state/safeProjectFile.js +155 -0
  382. package/dist/state/startupAnalysis/benchmark.js +70 -9
  383. package/dist/state/startupAnalysis/contract.js +44 -10
  384. package/dist/state/startupAnalysis/helpers.js +1 -2
  385. package/dist/state/startupAnalysis/index.js +0 -1
  386. package/dist/state/startupAnalysis/metrics.js +0 -1
  387. package/dist/state/startupAnalysis/records.js +0 -1
  388. package/dist/state/startupAnalysis/report.js +0 -1
  389. package/dist/state/startupAnalysis/threshold.js +13 -1
  390. package/dist/state/startupAnalysis.js +0 -1
  391. package/dist/state/startupProjection.js +499 -0
  392. package/dist/state/stateMode.js +222 -0
  393. package/dist/state/stateStorageAuthority.js +47 -0
  394. package/dist/state/summaryEntityRead.js +25 -0
  395. package/dist/state/summaryMigrationProvenance.js +66 -0
  396. package/dist/state/summarySourceRowAuthority.js +36 -0
  397. package/dist/state/todoActivationSafety.js +58 -0
  398. package/dist/state/todoDocsEntities.js +1124 -0
  399. package/dist/state/todoDocsEntityValidation.js +158 -0
  400. package/dist/state/todoMarkdownProjection.js +51 -0
  401. package/dist/state/todoReconciliationActivation.js +182 -0
  402. package/dist/state/todoReconciliationInspection.js +171 -0
  403. package/dist/state/todoReconciliationRepair.js +318 -0
  404. package/dist/state/todoReconciliationTransaction.js +595 -0
  405. package/dist/state/write/assign.js +20 -0
  406. package/dist/state/write/candidateMutation.js +269 -0
  407. package/dist/state/write/errors.js +11 -0
  408. package/dist/state/write/experimentPublication.js +192 -0
  409. package/dist/state/write/explain.js +377 -0
  410. package/dist/state/write/fields.js +61 -0
  411. package/dist/state/write/glossaryPublication.js +263 -0
  412. package/dist/state/write/grammar.js +285 -0
  413. package/dist/state/write/helpers.js +29 -0
  414. package/dist/state/write/index.js +12 -0
  415. package/dist/state/write/input.js +391 -0
  416. package/dist/state/write/lock.js +837 -0
  417. package/dist/state/write/mutation.js +234 -0
  418. package/dist/state/write/operations.js +170 -0
  419. package/dist/state/write/planEvaluation.js +128 -0
  420. package/dist/state/write/planPublication.js +179 -0
  421. package/dist/state/write/runtimeOperations.js +146 -0
  422. package/dist/state/write/serialize.js +1 -0
  423. package/dist/state/write/transaction.js +57 -0
  424. package/dist/state/write/validate.js +7 -0
  425. package/dist/upgrade/appContentRefresh.js +77 -36
  426. package/dist/upgrade/appModel.js +0 -1
  427. package/dist/upgrade/atomicWriter.js +1 -0
  428. package/dist/upgrade/bundleEvidence.js +0 -1
  429. package/dist/upgrade/channels.js +6 -9
  430. package/dist/upgrade/compatibility.js +43 -17
  431. package/dist/upgrade/doctor.js +55 -32
  432. package/dist/upgrade/doctorClassifier.js +11 -1
  433. package/dist/upgrade/installedHooksRetirement.js +46 -40
  434. package/dist/upgrade/legacyAgentCleanup.js +187 -21
  435. package/dist/upgrade/lifecycleUpgrade.js +113 -0
  436. package/dist/upgrade/migrateArtifactsV2ToV3.js +334 -64
  437. package/dist/upgrade/migrationPublication.js +122 -0
  438. package/dist/upgrade/nextMajorDoctor.js +0 -1
  439. package/dist/upgrade/npxPlatformStatus.js +2 -2
  440. package/dist/upgrade/projectIntegration.js +128 -160
  441. package/dist/upgrade/projectIntegrationDecision.js +42 -85
  442. package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
  443. package/dist/upgrade/runtimeMigration.js +262 -453
  444. package/dist/upgrade/upgradeCommands.js +14 -1
  445. package/dist/upgrade/upgradeLock.js +85 -0
  446. package/dist/upgrade/upgradeOrchestrator.js +263 -59
  447. package/dist/upgrade/v3CapabilitySurface.js +2 -3
  448. package/dist/upgrade/versionResolution.js +0 -1
  449. package/dist/validate/activationArtifactEvidence.js +866 -0
  450. package/dist/validate/activationArtifactEvidenceTypes.js +12 -0
  451. package/dist/validate/activationConjunction.js +816 -0
  452. package/dist/validate/activationEvidenceManifest.js +610 -0
  453. package/dist/validate/activationPackageSemantics.js +29 -0
  454. package/dist/validate/appHomeContract.js +1 -7
  455. package/dist/validate/bootstrapAuthority.js +44 -0
  456. package/dist/validate/capability.js +11 -3
  457. package/dist/validate/crossCapability.js +14 -9
  458. package/dist/validate/retainedReferenceAuthority.js +879 -0
  459. package/dist/validate/selfAudit.js +39 -45
  460. package/dist/validate/v1LegacyCruft.js +131 -0
  461. package/dist/validate/vocabularyAuthority.js +8 -8
  462. package/package.json +39 -13
  463. package/bundle/references/adapters/cursor.md +0 -214
  464. package/bundle/references/adapters/opencode.md +0 -530
  465. package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
  466. package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
  467. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
  468. package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -554
  469. package/bundle/references/adapters/runtime-feature-parity.md +0 -189
  470. package/bundle/references/analysis/benchmark.md +0 -267
  471. package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
  472. package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
  473. package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -369
  474. package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -250
  475. package/bundle/references/cli/capability-tool-classification.yaml +0 -53
  476. package/bundle/references/cli/coexistence-probe.yaml +0 -13
  477. package/bundle/references/cli/parity-expected-actual-template.md +0 -30
  478. package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
  479. package/bundle/references/cli/single-name-protocol.yaml +0 -42
  480. package/bundle/references/cli/upgrade-repair-wording.md +0 -45
  481. package/bundle/references/cli/v3-handoff-manifest.schema.yaml +0 -98
  482. package/bundle/references/meta/documentation-inventory.md +0 -49
  483. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  484. package/bundle/skills/agentera/agents/audit.toml +0 -6
  485. package/bundle/skills/agentera/agents/build.toml +0 -6
  486. package/bundle/skills/agentera/agents/design.toml +0 -6
  487. package/bundle/skills/agentera/agents/discuss.toml +0 -6
  488. package/bundle/skills/agentera/agents/document.toml +0 -6
  489. package/bundle/skills/agentera/agents/optimize.toml +0 -6
  490. package/bundle/skills/agentera/agents/orchestrate.toml +0 -6
  491. package/bundle/skills/agentera/agents/plan.toml +0 -6
  492. package/bundle/skills/agentera/agents/profile.toml +0 -6
  493. package/bundle/skills/agentera/agents/research.toml +0 -6
  494. package/bundle/skills/agentera/agents/status.toml +0 -6
  495. package/bundle/skills/agentera/agents/vision.toml +0 -6
  496. package/bundle/skills/agentera/references/contract.md +0 -1048
  497. package/dist/analytics/extractCorpus/cli.js.map +0 -1
  498. package/dist/analytics/extractCorpus/copilotSessions.js.map +0 -1
  499. package/dist/analytics/extractCorpus/core.js.map +0 -1
  500. package/dist/analytics/extractCorpus/corpus.js.map +0 -1
  501. package/dist/analytics/extractCorpus/coverageAudit.js.map +0 -1
  502. package/dist/analytics/extractCorpus/cursorSessions.js.map +0 -1
  503. package/dist/analytics/extractCorpus/extractCorpusParity.js.map +0 -1
  504. package/dist/analytics/extractCorpus/filesystemSources.js.map +0 -1
  505. package/dist/analytics/extractCorpus/index.js.map +0 -1
  506. package/dist/analytics/extractCorpus/jsonlSessions.js.map +0 -1
  507. package/dist/analytics/extractCorpus/sqliteCaps.js.map +0 -1
  508. package/dist/analytics/extractCorpus/sqliteSessions.js.map +0 -1
  509. package/dist/analytics/extractCorpus.js.map +0 -1
  510. package/dist/analytics/usageStats.js.map +0 -1
  511. package/dist/bin/agentera.js.map +0 -1
  512. package/dist/capabilities/audit/instructions.js.map +0 -1
  513. package/dist/capabilities/build/instructions.js.map +0 -1
  514. package/dist/capabilities/design/instructions.js.map +0 -1
  515. package/dist/capabilities/discuss/instructions.js.map +0 -1
  516. package/dist/capabilities/document/instructions.js.map +0 -1
  517. package/dist/capabilities/dokumentera/instructions.js +0 -6
  518. package/dist/capabilities/dokumentera/instructions.js.map +0 -1
  519. package/dist/capabilities/hej/instructions.js +0 -6
  520. package/dist/capabilities/hej/instructions.js.map +0 -1
  521. package/dist/capabilities/index.js.map +0 -1
  522. package/dist/capabilities/inspektera/instructions.js +0 -6
  523. package/dist/capabilities/inspektera/instructions.js.map +0 -1
  524. package/dist/capabilities/inspirera/instructions.js +0 -6
  525. package/dist/capabilities/inspirera/instructions.js.map +0 -1
  526. package/dist/capabilities/optimera/instructions.js +0 -6
  527. package/dist/capabilities/optimera/instructions.js.map +0 -1
  528. package/dist/capabilities/optimize/instructions.js.map +0 -1
  529. package/dist/capabilities/orchestrate/instructions.js.map +0 -1
  530. package/dist/capabilities/orkestrera/instructions.js +0 -6
  531. package/dist/capabilities/orkestrera/instructions.js.map +0 -1
  532. package/dist/capabilities/plan/instructions.js.map +0 -1
  533. package/dist/capabilities/planera/instructions.js +0 -6
  534. package/dist/capabilities/planera/instructions.js.map +0 -1
  535. package/dist/capabilities/profile/instructions.js.map +0 -1
  536. package/dist/capabilities/profilera/instructions.js +0 -6
  537. package/dist/capabilities/profilera/instructions.js.map +0 -1
  538. package/dist/capabilities/realisera/instructions.js +0 -6
  539. package/dist/capabilities/realisera/instructions.js.map +0 -1
  540. package/dist/capabilities/research/instructions.js.map +0 -1
  541. package/dist/capabilities/resonera/instructions.js +0 -6
  542. package/dist/capabilities/resonera/instructions.js.map +0 -1
  543. package/dist/capabilities/status/instructions.js.map +0 -1
  544. package/dist/capabilities/vision/instructions.js.map +0 -1
  545. package/dist/capabilities/visionera/instructions.js +0 -6
  546. package/dist/capabilities/visionera/instructions.js.map +0 -1
  547. package/dist/capabilities/visualisera/instructions.js +0 -5
  548. package/dist/capabilities/visualisera/instructions.js.map +0 -1
  549. package/dist/cli/appContext.js.map +0 -1
  550. package/dist/cli/argvalidate.js.map +0 -1
  551. package/dist/cli/capabilityContext/benchmark.js.map +0 -1
  552. package/dist/cli/capabilityContext/bespoke.js.map +0 -1
  553. package/dist/cli/capabilityContext/build.js.map +0 -1
  554. package/dist/cli/capabilityContext/closeout.js.map +0 -1
  555. package/dist/cli/capabilityContext/contract.js.map +0 -1
  556. package/dist/cli/capabilityContext/evidence.js.map +0 -1
  557. package/dist/cli/capabilityContext/index.js.map +0 -1
  558. package/dist/cli/capabilityContext/orchestration.js.map +0 -1
  559. package/dist/cli/capabilityContext/planState.js.map +0 -1
  560. package/dist/cli/capabilityContext/progress.js.map +0 -1
  561. package/dist/cli/capabilityContext/realisera.js +0 -174
  562. package/dist/cli/capabilityContext/realisera.js.map +0 -1
  563. package/dist/cli/capabilityContext/shared.js.map +0 -1
  564. package/dist/cli/capabilityContext/slim.js.map +0 -1
  565. package/dist/cli/capabilityContext/startup.js.map +0 -1
  566. package/dist/cli/capabilityContext/types.js.map +0 -1
  567. package/dist/cli/capabilityContext.js.map +0 -1
  568. package/dist/cli/commands/appHome.js.map +0 -1
  569. package/dist/cli/commands/backfill.js +0 -84
  570. package/dist/cli/commands/backfill.js.map +0 -1
  571. package/dist/cli/commands/capability.js.map +0 -1
  572. package/dist/cli/commands/compact.js.map +0 -1
  573. package/dist/cli/commands/doctor.js.map +0 -1
  574. package/dist/cli/commands/lint.js.map +0 -1
  575. package/dist/cli/commands/prime/bundleStatus.js.map +0 -1
  576. package/dist/cli/commands/prime/collectOrientationState.js.map +0 -1
  577. package/dist/cli/commands/prime/orientationOutput.js.map +0 -1
  578. package/dist/cli/commands/prime/routeOutput.js +0 -50
  579. package/dist/cli/commands/prime/routeOutput.js.map +0 -1
  580. package/dist/cli/commands/prime/types.js.map +0 -1
  581. package/dist/cli/commands/prime/v1Migration.js.map +0 -1
  582. package/dist/cli/commands/prime.js.map +0 -1
  583. package/dist/cli/commands/query.js.map +0 -1
  584. package/dist/cli/commands/report.js.map +0 -1
  585. package/dist/cli/commands/schema.js.map +0 -1
  586. package/dist/cli/commands/state/decisions.js.map +0 -1
  587. package/dist/cli/commands/state/docs.js.map +0 -1
  588. package/dist/cli/commands/state/experiments.js.map +0 -1
  589. package/dist/cli/commands/state/health.js.map +0 -1
  590. package/dist/cli/commands/state/index.js.map +0 -1
  591. package/dist/cli/commands/state/objective.js.map +0 -1
  592. package/dist/cli/commands/state/plan.js.map +0 -1
  593. package/dist/cli/commands/state/progress.js.map +0 -1
  594. package/dist/cli/commands/state/shared.js.map +0 -1
  595. package/dist/cli/commands/state/todo.js.map +0 -1
  596. package/dist/cli/commands/state.js +0 -1023
  597. package/dist/cli/commands/state.js.map +0 -1
  598. package/dist/cli/commands/upgrade.js.map +0 -1
  599. package/dist/cli/commands/validate.js.map +0 -1
  600. package/dist/cli/commands/verify.js.map +0 -1
  601. package/dist/cli/contracts/bundleStatus.js.map +0 -1
  602. package/dist/cli/contracts/orientationState.js.map +0 -1
  603. package/dist/cli/dispatch/argvParser.js.map +0 -1
  604. package/dist/cli/dispatch/check.js.map +0 -1
  605. package/dist/cli/dispatch/commands.js.map +0 -1
  606. package/dist/cli/dispatch/index.js.map +0 -1
  607. package/dist/cli/dispatch/lifecycle.js.map +0 -1
  608. package/dist/cli/dispatch/prime.js.map +0 -1
  609. package/dist/cli/dispatch/shared.js.map +0 -1
  610. package/dist/cli/dispatch/state.js.map +0 -1
  611. package/dist/cli/dispatch.js.map +0 -1
  612. package/dist/cli/errors.js.map +0 -1
  613. package/dist/cli/help.js.map +0 -1
  614. package/dist/cli/orientation/attention.js.map +0 -1
  615. package/dist/cli/orientation/corpusCoverage.js.map +0 -1
  616. package/dist/cli/orientation.js.map +0 -1
  617. package/dist/cli/prime-blob.js.map +0 -1
  618. package/dist/cli/startupCompletenessContract.js.map +0 -1
  619. package/dist/cli/stateQuery.js.map +0 -1
  620. package/dist/cli/structured.js.map +0 -1
  621. package/dist/cli/todoMarkdown.js.map +0 -1
  622. package/dist/cli/todoSeverity.js.map +0 -1
  623. package/dist/core/difflib.js.map +0 -1
  624. package/dist/core/envPaths.js.map +0 -1
  625. package/dist/core/git.js +0 -43
  626. package/dist/core/git.js.map +0 -1
  627. package/dist/core/jsonValue.js.map +0 -1
  628. package/dist/core/paths.js.map +0 -1
  629. package/dist/core/pyjson.js.map +0 -1
  630. package/dist/core/sourceRoot.js.map +0 -1
  631. package/dist/core/toml.js.map +0 -1
  632. package/dist/core/yaml.js.map +0 -1
  633. package/dist/eval/evalSkills.js.map +0 -1
  634. package/dist/eval/semanticEval.js.map +0 -1
  635. package/dist/eval/semanticFixtures.js.map +0 -1
  636. package/dist/hooks/common.js.map +0 -1
  637. package/dist/hooks/compaction/apply.js.map +0 -1
  638. package/dist/hooks/compaction/dryRun.js.map +0 -1
  639. package/dist/hooks/compaction/index.js.map +0 -1
  640. package/dist/hooks/compaction/parse.js.map +0 -1
  641. package/dist/hooks/compaction/retention.js.map +0 -1
  642. package/dist/hooks/compaction/status.js.map +0 -1
  643. package/dist/hooks/compaction/todoResolved.js +0 -137
  644. package/dist/hooks/compaction/todoResolved.js.map +0 -1
  645. package/dist/hooks/compaction/types.js.map +0 -1
  646. package/dist/hooks/compaction.js +0 -935
  647. package/dist/hooks/compaction.js.map +0 -1
  648. package/dist/hooks/cursorPreToolUse.js +0 -19
  649. package/dist/hooks/cursorPreToolUse.js.map +0 -1
  650. package/dist/hooks/cursorSessionStart.js +0 -79
  651. package/dist/hooks/cursorSessionStart.js.map +0 -1
  652. package/dist/hooks/sessionStart.js +0 -216
  653. package/dist/hooks/sessionStart.js.map +0 -1
  654. package/dist/hooks/sessionStop.js +0 -206
  655. package/dist/hooks/sessionStop.js.map +0 -1
  656. package/dist/hooks/todoLayout.js +0 -177
  657. package/dist/hooks/todoLayout.js.map +0 -1
  658. package/dist/hooks/validateArtifact/agentFacing.js.map +0 -1
  659. package/dist/hooks/validateArtifact/index.js.map +0 -1
  660. package/dist/hooks/validateArtifact/markdown.js.map +0 -1
  661. package/dist/hooks/validateArtifact/runtime.js +0 -86
  662. package/dist/hooks/validateArtifact/runtime.js.map +0 -1
  663. package/dist/hooks/validateArtifact/schema.js.map +0 -1
  664. package/dist/hooks/validateArtifact/traversal.js.map +0 -1
  665. package/dist/hooks/validateArtifact/violations.js.map +0 -1
  666. package/dist/hooks/validateArtifact.js +0 -924
  667. package/dist/hooks/validateArtifact.js.map +0 -1
  668. package/dist/migrate/v2HandoffManifest.js.map +0 -1
  669. package/dist/registries/artifactProtocolIds.js.map +0 -1
  670. package/dist/registries/artifactRegistry.js.map +0 -1
  671. package/dist/registries/capabilityContract.js.map +0 -1
  672. package/dist/registries/evaluatorHandoffContract.js.map +0 -1
  673. package/dist/registries/packageRegistry.js.map +0 -1
  674. package/dist/registries/runtimeAdapterRegistry.js +0 -316
  675. package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
  676. package/dist/registries/triggerLoader.js.map +0 -1
  677. package/dist/release/releaseMetadata.js.map +0 -1
  678. package/dist/routing/index.js +0 -2
  679. package/dist/routing/index.js.map +0 -1
  680. package/dist/routing/routeEngine.js +0 -189
  681. package/dist/routing/routeEngine.js.map +0 -1
  682. package/dist/setup/codex/agents.js +0 -96
  683. package/dist/setup/codex/agents.js.map +0 -1
  684. package/dist/setup/codex/cli.js +0 -161
  685. package/dist/setup/codex/cli.js.map +0 -1
  686. package/dist/setup/codex/configToml.js +0 -639
  687. package/dist/setup/codex/configToml.js.map +0 -1
  688. package/dist/setup/codex/constants.js +0 -29
  689. package/dist/setup/codex/constants.js.map +0 -1
  690. package/dist/setup/codex/installRoot.js +0 -64
  691. package/dist/setup/codex/installRoot.js.map +0 -1
  692. package/dist/setup/codex/state.js +0 -270
  693. package/dist/setup/codex/state.js.map +0 -1
  694. package/dist/setup/codex.js +0 -12
  695. package/dist/setup/codex.js.map +0 -1
  696. package/dist/setup/copilot.js +0 -227
  697. package/dist/setup/copilot.js.map +0 -1
  698. package/dist/setup/cursor.js +0 -129
  699. package/dist/setup/cursor.js.map +0 -1
  700. package/dist/setup/cursorSurfaces.js +0 -67
  701. package/dist/setup/cursorSurfaces.js.map +0 -1
  702. package/dist/setup/doctor/core.js +0 -300
  703. package/dist/setup/doctor/core.js.map +0 -1
  704. package/dist/setup/doctor/diagnostics.js +0 -240
  705. package/dist/setup/doctor/diagnostics.js.map +0 -1
  706. package/dist/setup/doctor/opencode.js +0 -313
  707. package/dist/setup/doctor/opencode.js.map +0 -1
  708. package/dist/setup/doctor/report.js +0 -425
  709. package/dist/setup/doctor/report.js.map +0 -1
  710. package/dist/setup/doctor.js +0 -10
  711. package/dist/setup/doctor.js.map +0 -1
  712. package/dist/setup/opencode.js.map +0 -1
  713. package/dist/setup/smokeChecks.js.map +0 -1
  714. package/dist/state/installRoot.js.map +0 -1
  715. package/dist/state/progressCommit.js +0 -289
  716. package/dist/state/progressCommit.js.map +0 -1
  717. package/dist/state/startupAnalysis/benchmark.js.map +0 -1
  718. package/dist/state/startupAnalysis/contract.js.map +0 -1
  719. package/dist/state/startupAnalysis/helpers.js.map +0 -1
  720. package/dist/state/startupAnalysis/index.js.map +0 -1
  721. package/dist/state/startupAnalysis/metrics.js.map +0 -1
  722. package/dist/state/startupAnalysis/records.js.map +0 -1
  723. package/dist/state/startupAnalysis/report.js.map +0 -1
  724. package/dist/state/startupAnalysis/threshold.js.map +0 -1
  725. package/dist/state/startupAnalysis.js.map +0 -1
  726. package/dist/upgrade/appContentRefresh.js.map +0 -1
  727. package/dist/upgrade/appModel.js.map +0 -1
  728. package/dist/upgrade/bundleEvidence.js.map +0 -1
  729. package/dist/upgrade/channels.js.map +0 -1
  730. package/dist/upgrade/cliProbe.js +0 -22
  731. package/dist/upgrade/cliProbe.js.map +0 -1
  732. package/dist/upgrade/coexistenceProbe.js +0 -107
  733. package/dist/upgrade/coexistenceProbe.js.map +0 -1
  734. package/dist/upgrade/compatibility.js.map +0 -1
  735. package/dist/upgrade/doctor.js.map +0 -1
  736. package/dist/upgrade/doctorClassifier.js.map +0 -1
  737. package/dist/upgrade/installedHooksRetirement.js.map +0 -1
  738. package/dist/upgrade/legacyAgentCleanup.js.map +0 -1
  739. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -570
  740. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
  741. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
  742. package/dist/upgrade/nextMajorDoctor.js.map +0 -1
  743. package/dist/upgrade/npxPlatformStatus.js.map +0 -1
  744. package/dist/upgrade/projectIntegration.js.map +0 -1
  745. package/dist/upgrade/projectIntegrationDecision.js.map +0 -1
  746. package/dist/upgrade/runtimeMigration.js.map +0 -1
  747. package/dist/upgrade/upgradeCommands.js.map +0 -1
  748. package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
  749. package/dist/upgrade/v3CapabilitySurface.js.map +0 -1
  750. package/dist/upgrade/versionResolution.js.map +0 -1
  751. package/dist/validate/appHomeContract.js.map +0 -1
  752. package/dist/validate/capability.js.map +0 -1
  753. package/dist/validate/crossCapability.js.map +0 -1
  754. package/dist/validate/lifecycleAdapters/legacyPythonParity.js +0 -93
  755. package/dist/validate/lifecycleAdapters/legacyPythonParity.js.map +0 -1
  756. package/dist/validate/lifecycleAdapters/nodeFormChecks.js +0 -488
  757. package/dist/validate/lifecycleAdapters/nodeFormChecks.js.map +0 -1
  758. package/dist/validate/lifecycleAdapters/shared.js +0 -198
  759. package/dist/validate/lifecycleAdapters/shared.js.map +0 -1
  760. package/dist/validate/lifecycleAdapters.js +0 -62
  761. package/dist/validate/lifecycleAdapters.js.map +0 -1
  762. package/dist/validate/selfAudit.js.map +0 -1
  763. package/dist/validate/vocabularyAuthority.js.map +0 -1
@@ -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";