agentera 3.0.0-dev.8 → 3.0.0-dev.81

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 (725) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +252 -22
  3. package/bundle/.agentera-build-source.json +8 -0
  4. package/bundle/CHANGELOG.md +1389 -0
  5. package/bundle/DESIGN.md +229 -0
  6. package/bundle/LICENSE +201 -0
  7. package/bundle/README.md +142 -0
  8. package/bundle/UPGRADE.md +275 -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 +443 -188
  13. package/bundle/references/adapters/package-surface-characterization.md +68 -34
  14. package/bundle/references/adapters/product-v1-reset.yaml +101 -0
  15. package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
  16. package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
  17. package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
  18. package/bundle/references/adapters/runtime-retired-resources.yaml +357 -0
  19. package/bundle/references/analysis/evidence-tier-authority.yaml +559 -0
  20. package/bundle/references/analysis/personal-glossary-evaluation-authority.yaml +175 -0
  21. package/bundle/references/analysis/personal-glossary-evaluation-corpus.yaml +291 -0
  22. package/bundle/references/analysis/personal-glossary-holdout.yaml +192 -0
  23. package/bundle/references/analysis/verification-policy.yaml +262 -0
  24. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +17 -8
  25. package/bundle/references/artifacts/glossary-entry-contract.yaml +2906 -0
  26. package/bundle/references/artifacts/state-storage-authority.yaml +3075 -0
  27. package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
  28. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +3 -4
  29. package/bundle/references/cli/capability-instruction-contract.yaml +11 -14
  30. package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
  31. package/bundle/references/cli/routing-model.md +152 -93
  32. package/bundle/references/cli/trigger-schema-enrichment.md +57 -46
  33. package/bundle/references/cli/update-channels.yaml +7 -5
  34. package/bundle/references/cli/vocabulary-index.yaml +7 -9
  35. package/bundle/references/cli/vocabulary.md +54 -97
  36. package/bundle/references/meta/retained-reference-authority.yaml +171 -0
  37. package/bundle/skills/agentera/SKILL.md +183 -63
  38. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +27 -19
  39. package/bundle/skills/agentera/capabilities/audit/schemas/exit.yaml +2 -2
  40. package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +13 -35
  41. package/bundle/skills/agentera/capabilities/audit/schemas/validation.yaml +30 -11
  42. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +44 -21
  43. package/bundle/skills/agentera/capabilities/build/schemas/exit.yaml +8 -6
  44. package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +14 -36
  45. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +95 -21
  46. package/bundle/skills/agentera/capabilities/design/schemas/artifacts.yaml +6 -6
  47. package/bundle/skills/agentera/capabilities/design/schemas/exit.yaml +5 -5
  48. package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +5 -34
  49. package/bundle/skills/agentera/capabilities/design/schemas/validation.yaml +2 -2
  50. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +17 -13
  51. package/bundle/skills/agentera/capabilities/discuss/schemas/exit.yaml +2 -2
  52. package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +6 -40
  53. package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +72 -5
  54. package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +24 -17
  55. package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +5 -35
  56. package/bundle/skills/agentera/capabilities/document/schemas/validation.yaml +13 -13
  57. package/bundle/skills/agentera/capabilities/optimize/schemas/artifacts.yaml +10 -10
  58. package/bundle/skills/agentera/capabilities/optimize/schemas/exit.yaml +2 -2
  59. package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +4 -35
  60. package/bundle/skills/agentera/capabilities/optimize/schemas/validation.yaml +3 -3
  61. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +34 -22
  62. package/bundle/skills/agentera/capabilities/orchestrate/schemas/exit.yaml +9 -7
  63. package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +5 -37
  64. package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +38 -37
  65. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +20 -16
  66. package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +8 -31
  67. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +66 -6
  68. package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +13 -4
  69. package/bundle/skills/agentera/capabilities/profile/schemas/exit.yaml +8 -5
  70. package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +8 -37
  71. package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +67 -3
  72. package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +6 -6
  73. package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +5 -29
  74. package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +13 -12
  75. package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +7 -49
  76. package/bundle/skills/agentera/capabilities/vision/schemas/artifacts.yaml +8 -8
  77. package/bundle/skills/agentera/capabilities/vision/schemas/exit.yaml +7 -6
  78. package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +7 -39
  79. package/bundle/skills/agentera/capabilities/vision/schemas/validation.yaml +14 -16
  80. package/bundle/skills/agentera/capability_schema_contract.yaml +32 -32
  81. package/bundle/skills/agentera/protocol.yaml +4 -4
  82. package/bundle/skills/agentera/route-phrases.yaml +81 -0
  83. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +1 -0
  84. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +29 -30
  85. package/bundle/skills/agentera/schemas/artifacts/design.yaml +1 -0
  86. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +7 -43
  87. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +140 -34
  88. package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +87 -0
  89. package/bundle/skills/agentera/schemas/artifacts/health.yaml +53 -51
  90. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +18 -35
  91. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +453 -55
  92. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +128 -39
  93. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +305 -7
  94. package/bundle/skills/agentera/schemas/artifacts/vision.yaml +0 -19
  95. package/dist/.agentera-build-source.json +8 -0
  96. package/dist/analytics/extractCorpus/cli.js +52 -11
  97. package/dist/analytics/extractCorpus/copilotSessions.js +19 -8
  98. package/dist/analytics/extractCorpus/core.js +262 -14
  99. package/dist/analytics/extractCorpus/corpus.js +57 -18
  100. package/dist/analytics/extractCorpus/coverageAudit.js +44 -45
  101. package/dist/analytics/extractCorpus/cursorSessions.js +28 -8
  102. package/dist/analytics/extractCorpus/evidenceTiers.js +709 -0
  103. package/dist/analytics/extractCorpus/extractCorpusParity.js +4 -4
  104. package/dist/analytics/extractCorpus/filesystemSources.js +5 -5
  105. package/dist/analytics/extractCorpus/index.js +4 -2
  106. package/dist/analytics/extractCorpus/jsonlSessions.js +76 -8
  107. package/dist/analytics/extractCorpus/sqliteCaps.js +0 -1
  108. package/dist/analytics/extractCorpus/sqliteSessions.js +12 -4
  109. package/dist/analytics/extractCorpus/tierReader.js +108 -0
  110. package/dist/analytics/extractCorpus.js +0 -1
  111. package/dist/analytics/glossaryAdviceResolution.js +166 -0
  112. package/dist/analytics/glossaryInputAcquisition.js +319 -0
  113. package/dist/analytics/personalGlossaryAdmission.js +113 -0
  114. package/dist/analytics/personalGlossaryCandidateProjection.js +788 -0
  115. package/dist/analytics/personalGlossaryCandidateProjectionExcerpts.js +144 -0
  116. package/dist/analytics/personalGlossaryCandidateProjectionModel.js +1 -0
  117. package/dist/analytics/personalGlossaryCandidateReadView.js +23 -0
  118. package/dist/analytics/personalGlossaryCurrentGeneration.js +25 -0
  119. package/dist/analytics/personalGlossaryDecision.js +203 -0
  120. package/dist/analytics/personalGlossaryExplicit.js +788 -0
  121. package/dist/analytics/personalGlossaryExplicitMining.js +285 -0
  122. package/dist/analytics/personalGlossaryExplicitScope.js +41 -0
  123. package/dist/analytics/personalGlossaryExplicitSegments.js +418 -0
  124. package/dist/analytics/personalGlossaryExplicitTypes.js +26 -0
  125. package/dist/analytics/personalGlossaryLexicalClassifier.js +175 -0
  126. package/dist/analytics/personalGlossaryProfile.js +229 -0
  127. package/dist/analytics/personalGlossaryRecurrence.js +618 -0
  128. package/dist/analytics/personalGlossaryRefreshProjection.js +351 -0
  129. package/dist/analytics/personalGlossaryReviewRecordStorage.js +428 -0
  130. package/dist/analytics/personalGlossaryReviewRecords.js +332 -0
  131. package/dist/analytics/profileSignals.js +211 -0
  132. package/dist/analytics/usageStats.js +150 -23
  133. package/dist/audit/terminologyDrift.js +281 -0
  134. package/dist/bin/agentera.js +3 -2
  135. package/dist/capabilities/audit/instructions.js +16 -6
  136. package/dist/capabilities/build/instructions.js +59 -6
  137. package/dist/capabilities/design/instructions.js +3 -4
  138. package/dist/capabilities/discuss/instructions.js +29 -6
  139. package/dist/capabilities/document/instructions.js +11 -6
  140. package/dist/capabilities/index.js +20 -14
  141. package/dist/capabilities/optimize/instructions.js +14 -6
  142. package/dist/capabilities/orchestrate/instructions.js +42 -6
  143. package/dist/capabilities/plan/instructions.js +30 -3
  144. package/dist/capabilities/profile/instructions.js +104 -5
  145. package/dist/capabilities/research/instructions.js +4 -5
  146. package/dist/capabilities/status/instructions.js +15 -6
  147. package/dist/capabilities/status/startupInstructions.js +34 -0
  148. package/dist/capabilities/vision/instructions.js +3 -5
  149. package/dist/cli/appContext.js +14 -7
  150. package/dist/cli/argvalidate.js +0 -1
  151. package/dist/cli/capabilityContext/benchmark.js +5 -4
  152. package/dist/cli/capabilityContext/bespoke.js +14 -6
  153. package/dist/cli/capabilityContext/build.js +116 -42
  154. package/dist/cli/capabilityContext/closeout.js +30 -27
  155. package/dist/cli/capabilityContext/contract.js +18 -27
  156. package/dist/cli/capabilityContext/evidence.js +84 -77
  157. package/dist/cli/capabilityContext/index.js +0 -1
  158. package/dist/cli/capabilityContext/orchestration.js +42 -18
  159. package/dist/cli/capabilityContext/planState.js +89 -96
  160. package/dist/cli/capabilityContext/progress.js +52 -12
  161. package/dist/cli/capabilityContext/projectVerification.js +409 -0
  162. package/dist/cli/capabilityContext/shared.js +9 -20
  163. package/dist/cli/capabilityContext/slim.js +52 -8
  164. package/dist/cli/capabilityContext/startup.js +51 -114
  165. package/dist/cli/capabilityContext/startupAggregation.js +68 -0
  166. package/dist/cli/capabilityContext/types.js +26 -10
  167. package/dist/cli/capabilityContext.js +0 -1
  168. package/dist/cli/commands/appHome.js +0 -1
  169. package/dist/cli/commands/capability.js +2 -2
  170. package/dist/cli/commands/compact.js +163 -13
  171. package/dist/cli/commands/doctor.js +162 -11
  172. package/dist/cli/commands/durability.js +81 -0
  173. package/dist/cli/commands/glossaryAdvice.js +138 -0
  174. package/dist/cli/commands/lint.js +22 -8
  175. package/dist/cli/commands/personalGlossaryCandidateReads.js +755 -0
  176. package/dist/cli/commands/personalGlossaryDecision.js +349 -0
  177. package/dist/cli/commands/personalGlossaryPublish.js +484 -0
  178. package/dist/cli/commands/personalGlossaryReviewRecordReads.js +209 -0
  179. package/dist/cli/commands/personalGlossaryReviewRecords.js +623 -0
  180. package/dist/cli/commands/prime/briefOrientation.js +845 -0
  181. package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
  182. package/dist/cli/commands/prime/bundleStatus.js +54 -4
  183. package/dist/cli/commands/prime/collectEntityOrientation.js +338 -0
  184. package/dist/cli/commands/prime/collectOrientationState.js +124 -68
  185. package/dist/cli/commands/prime/orientationOutput.js +271 -59
  186. package/dist/cli/commands/prime/types.js +0 -1
  187. package/dist/cli/commands/prime.js +89 -11
  188. package/dist/cli/commands/profileGrounding.js +55 -0
  189. package/dist/cli/commands/query.js +74 -52
  190. package/dist/cli/commands/report.js +187 -27
  191. package/dist/cli/commands/route.js +142 -0
  192. package/dist/cli/commands/schema.js +436 -138
  193. package/dist/cli/commands/state/decisions.js +40 -56
  194. package/dist/cli/commands/state/docs.js +58 -85
  195. package/dist/cli/commands/state/experimentRecords.js +151 -0
  196. package/dist/cli/commands/state/experiments.js +11 -65
  197. package/dist/cli/commands/state/get.js +129 -0
  198. package/dist/cli/commands/state/health.js +11 -113
  199. package/dist/cli/commands/state/index.js +6 -41
  200. package/dist/cli/commands/state/list.js +194 -0
  201. package/dist/cli/commands/state/objective.js +21 -65
  202. package/dist/cli/commands/state/plan.js +11 -170
  203. package/dist/cli/commands/state/planTasks.js +154 -0
  204. package/dist/cli/commands/state/plans.js +154 -0
  205. package/dist/cli/commands/state/progress.js +11 -45
  206. package/dist/cli/commands/state/shared.js +0 -1
  207. package/dist/cli/commands/state/todo.js +28 -107
  208. package/dist/cli/commands/state/write.js +459 -0
  209. package/dist/cli/commands/upgrade.js +176 -5
  210. package/dist/cli/commands/upgradeVerify.js +118 -0
  211. package/dist/cli/commands/validate.js +235 -136
  212. package/dist/cli/commands/verify.js +73 -16
  213. package/dist/cli/contracts/bundleStatus.js +0 -1
  214. package/dist/cli/contracts/orientationState.js +0 -1
  215. package/dist/cli/dispatch/argvParser.js +0 -1
  216. package/dist/cli/dispatch/check.js +84 -40
  217. package/dist/cli/dispatch/commands.js +3 -3
  218. package/dist/cli/dispatch/index.js +84 -52
  219. package/dist/cli/dispatch/lifecycle.js +182 -62
  220. package/dist/cli/dispatch/prime.js +37 -2
  221. package/dist/cli/dispatch/projections.js +17 -0
  222. package/dist/cli/dispatch/shared.js +1 -2
  223. package/dist/cli/dispatch/state.js +62 -66
  224. package/dist/cli/dispatch.js +0 -1
  225. package/dist/cli/errors.js +16 -17
  226. package/dist/cli/help.js +419 -41
  227. package/dist/cli/migrationRequired.js +125 -0
  228. package/dist/cli/orientation/attention.js +19 -22
  229. package/dist/cli/orientation/corpusCoverage.js +32 -1
  230. package/dist/cli/orientation.js +346 -129
  231. package/dist/cli/planArtifacts.js +350 -0
  232. package/dist/cli/planEvidence.js +157 -0
  233. package/dist/cli/planLifecycleState.js +36 -0
  234. package/dist/cli/planTaskIndex.js +11 -0
  235. package/dist/cli/preCutoverCommand.js +32 -0
  236. package/dist/cli/prime-blob.js +71 -3
  237. package/dist/cli/productV1Eol.js +55 -0
  238. package/dist/cli/profileAcquisition.js +167 -0
  239. package/dist/cli/startupCompletenessContract.js +11 -9
  240. package/dist/cli/stateQuery.js +47 -12
  241. package/dist/cli/structured.js +0 -1
  242. package/dist/cli/todoMarkdown.js +25 -12
  243. package/dist/cli/todoReadinessSelection.js +192 -0
  244. package/dist/cli/todoSeverity.js +0 -1
  245. package/dist/core/atomicWriter.js +23 -0
  246. package/dist/core/developmentChannel.js +1 -0
  247. package/dist/core/developmentInvocation.js +377 -0
  248. package/dist/core/difflib.js +0 -1
  249. package/dist/core/envPaths.js +0 -1
  250. package/dist/core/jsonValue.js +0 -1
  251. package/dist/core/paths.js +0 -1
  252. package/dist/core/pyjson.js +0 -1
  253. package/dist/core/shell.js +4 -0
  254. package/dist/core/skillIdentity.js +23 -0
  255. package/dist/core/sourceRoot.js +9 -12
  256. package/dist/core/text.js +10 -0
  257. package/dist/core/toml.js +0 -1
  258. package/dist/core/yaml.js +61 -2
  259. package/dist/eval/evalSkills.js +13 -14
  260. package/dist/eval/glossaryEvaluation.js +751 -0
  261. package/dist/eval/glossaryEvaluationProcess.js +29 -0
  262. package/dist/eval/glossaryEvaluationRunner.js +571 -0
  263. package/dist/eval/glossaryEvaluationSuccessReport.js +297 -0
  264. package/dist/eval/hybridRouteEvaluation.js +155 -0
  265. package/dist/eval/semanticEval.js +0 -1
  266. package/dist/eval/semanticFixtures.js +0 -1
  267. package/dist/hooks/common.js +3 -56
  268. package/dist/hooks/compaction/apply.js +224 -47
  269. package/dist/hooks/compaction/dryRun.js +2 -1
  270. package/dist/hooks/compaction/index.js +5 -6
  271. package/dist/hooks/compaction/parse.js +73 -6
  272. package/dist/hooks/compaction/retention.js +28 -25
  273. package/dist/hooks/compaction/status.js +145 -26
  274. package/dist/hooks/compaction/types.js +0 -1
  275. package/dist/hooks/validateArtifact/agentFacing.js +0 -1
  276. package/dist/hooks/validateArtifact/index.js +6 -65
  277. package/dist/hooks/validateArtifact/markdown.js +9 -10
  278. package/dist/hooks/validateArtifact/schema.js +96 -9
  279. package/dist/hooks/validateArtifact/traversal.js +12 -11
  280. package/dist/hooks/validateArtifact/violations.js +5 -3
  281. package/dist/migrate/v2HandoffManifest.js +8 -3
  282. package/dist/registries/activationContract.js +2 -0
  283. package/dist/registries/activationTuples.js +145 -0
  284. package/dist/registries/artifactProtocolIds.js +2 -1
  285. package/dist/registries/artifactRegistry.js +207 -60
  286. package/dist/registries/artifactSchemaProjection.js +45 -0
  287. package/dist/registries/capabilityContract.js +5 -21
  288. package/dist/registries/evaluatorHandoffContract.js +0 -1
  289. package/dist/registries/evidenceTierContract.js +375 -0
  290. package/dist/registries/explicitSegmentGrammarContract.js +619 -0
  291. package/dist/registries/glossaryAdviceContract.js +79 -0
  292. package/dist/registries/glossaryCandidateContractPaths.js +6 -0
  293. package/dist/registries/glossaryCandidateContracts.js +820 -0
  294. package/dist/registries/glossaryCandidateDecisionAuthority.js +119 -0
  295. package/dist/registries/glossaryCandidateDecisionContract.js +62 -0
  296. package/dist/registries/glossaryCandidateProjectionAuthority.js +345 -0
  297. package/dist/registries/glossaryCandidateProjectionContract.js +108 -0
  298. package/dist/registries/glossaryCaveatContract.js +67 -0
  299. package/dist/registries/glossaryConsumerContractValidation.js +787 -0
  300. package/dist/registries/glossaryEntryContract.js +759 -0
  301. package/dist/registries/glossaryEntryTemporal.js +12 -0
  302. package/dist/registries/glossaryMiningAuthority.js +764 -0
  303. package/dist/registries/glossaryProfileFullContract.js +24 -0
  304. package/dist/registries/glossaryReviewRecordsAuthority.js +426 -0
  305. package/dist/registries/glossaryReviewRecordsContract.js +129 -0
  306. package/dist/registries/glossaryTermIdentity.js +139 -0
  307. package/dist/registries/glossaryTermOccurrence.js +20 -0
  308. package/dist/registries/hybridRoute.js +274 -0
  309. package/dist/registries/hybridRouteReceipt.js +221 -0
  310. package/dist/registries/packagePublication.js +273 -0
  311. package/dist/registries/packageRegistry.js +184 -209
  312. package/dist/registries/personalGlossaryContracts.js +1 -0
  313. package/dist/registries/todoReadinessContract.js +448 -0
  314. package/dist/registries/triggerLoader.js +7 -44
  315. package/dist/registries/verbosityBudgetContract.js +205 -0
  316. package/dist/release/releaseMetadata.js +168 -11
  317. package/dist/runtime/lifecycleAdapterContract.js +457 -0
  318. package/dist/runtime/lifecycleAdapters.js +777 -0
  319. package/dist/runtime/lifecycleAuthority.js +453 -0
  320. package/dist/runtime/lifecycleOperationContract.js +123 -0
  321. package/dist/runtime/lifecycleOperations.js +634 -0
  322. package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
  323. package/dist/runtime/lifecyclePublication.js +415 -0
  324. package/dist/runtime/lifecycleSnapshot.js +438 -0
  325. package/dist/runtime/nativeResourceCleanup.js +618 -0
  326. package/dist/setup/opencode.js +20 -13
  327. package/dist/setup/opencodeConstants.js +1 -0
  328. package/dist/setup/sharedSkill.js +45 -0
  329. package/dist/setup/smokeChecks.js +14 -75
  330. package/dist/state/archiveDiscovery.js +580 -0
  331. package/dist/state/archivePublication.js +225 -0
  332. package/dist/state/archiveRecovery.js +237 -0
  333. package/dist/state/archiveReplay.js +53 -0
  334. package/dist/state/canonicalMigrationRecord.js +36 -0
  335. package/dist/state/changelog.js +221 -0
  336. package/dist/state/decisionEntities.js +367 -0
  337. package/dist/state/decisionLegacyValidation.js +215 -0
  338. package/dist/state/decisionMigrationProvenance.js +199 -0
  339. package/dist/state/decisionOverlay.js +254 -0
  340. package/dist/state/decisionRevision.js +256 -0
  341. package/dist/state/decisionRevisionMigration.js +89 -0
  342. package/dist/state/directRetrieval.js +323 -0
  343. package/dist/state/durability.js +324 -0
  344. package/dist/state/entityCutover.js +459 -0
  345. package/dist/state/entityCutoverGit.js +127 -0
  346. package/dist/state/entityGlossaryAuthority.js +13 -0
  347. package/dist/state/entityListProjection.js +187 -0
  348. package/dist/state/entityListRuntimeRegistry.js +85 -0
  349. package/dist/state/entityMigrationCausality.js +97 -0
  350. package/dist/state/entityMigrationIdentity.js +5 -0
  351. package/dist/state/entityMigrationPreview.js +840 -0
  352. package/dist/state/entityMigrationTodo.js +133 -0
  353. package/dist/state/entityPublicationContext.js +859 -0
  354. package/dist/state/entityRetrievalHelp.js +506 -0
  355. package/dist/state/entityStorage.js +894 -0
  356. package/dist/state/entityWriterLock.js +18 -0
  357. package/dist/state/exactReplacementRecovery.js +18 -0
  358. package/dist/state/experimentArchive.js +63 -0
  359. package/dist/state/experimentIdentity.js +202 -0
  360. package/dist/state/healthEntities.js +262 -0
  361. package/dist/state/healthEntityValidation.js +18 -0
  362. package/dist/state/healthRepair.js +69 -0
  363. package/dist/state/installRoot.js +15 -7
  364. package/dist/state/legacyEntityCutoverEvidence.js +65 -0
  365. package/dist/state/legacyIdentity.js +47 -0
  366. package/dist/state/legacySummaryRecord.js +6 -0
  367. package/dist/state/listAccounting.js +54 -0
  368. package/dist/state/listClassification.js +17 -0
  369. package/dist/state/listCursor.js +42 -0
  370. package/dist/state/listRetrieval.js +781 -0
  371. package/dist/state/migrationSourceBinding.js +30 -0
  372. package/dist/state/objectiveExperimentEntities.js +322 -0
  373. package/dist/state/planEntities.js +1027 -0
  374. package/dist/state/planIdentity.js +47 -0
  375. package/dist/state/planLineageValidation.js +52 -0
  376. package/dist/state/planReplacementTransaction.js +475 -0
  377. package/dist/state/planRetrieval.js +313 -0
  378. package/dist/state/planTaskRetrieval.js +294 -0
  379. package/dist/state/progressEntities.js +512 -0
  380. package/dist/state/progressGlossaryCaveat.js +168 -0
  381. package/dist/state/progressPublicationOrder.js +19 -0
  382. package/dist/state/progressWritePolicy.js +33 -0
  383. package/dist/state/projectRoot.js +62 -0
  384. package/dist/state/projectionPolicy.js +190 -0
  385. package/dist/state/retrievalAuthority.js +156 -0
  386. package/dist/state/safeProjectFile.js +155 -0
  387. package/dist/state/startupAnalysis/benchmark.js +70 -9
  388. package/dist/state/startupAnalysis/contract.js +44 -10
  389. package/dist/state/startupAnalysis/helpers.js +1 -2
  390. package/dist/state/startupAnalysis/index.js +0 -1
  391. package/dist/state/startupAnalysis/metrics.js +0 -1
  392. package/dist/state/startupAnalysis/records.js +0 -1
  393. package/dist/state/startupAnalysis/report.js +0 -1
  394. package/dist/state/startupAnalysis/threshold.js +13 -1
  395. package/dist/state/startupAnalysis.js +0 -1
  396. package/dist/state/startupProjection.js +499 -0
  397. package/dist/state/stateMode.js +222 -0
  398. package/dist/state/stateStorageAuthority.js +47 -0
  399. package/dist/state/summaryEntityRead.js +25 -0
  400. package/dist/state/summaryMigrationProvenance.js +66 -0
  401. package/dist/state/summarySourceRowAuthority.js +36 -0
  402. package/dist/state/todoActivationSafety.js +58 -0
  403. package/dist/state/todoCreateBatch.js +69 -0
  404. package/dist/state/todoDocsEntities.js +1339 -0
  405. package/dist/state/todoDocsEntityValidation.js +158 -0
  406. package/dist/state/todoMarkdownProjection.js +63 -0
  407. package/dist/state/todoReconciliationActivation.js +182 -0
  408. package/dist/state/todoReconciliationInspection.js +184 -0
  409. package/dist/state/todoReconciliationRepair.js +320 -0
  410. package/dist/state/todoReconciliationTransaction.js +628 -0
  411. package/dist/state/todoSeverityHeadings.js +71 -0
  412. package/dist/state/todoTransitionBatch.js +65 -0
  413. package/dist/state/todoUpdateBatch.js +50 -0
  414. package/dist/state/write/assign.js +20 -0
  415. package/dist/state/write/candidateMutation.js +269 -0
  416. package/dist/state/write/errors.js +11 -0
  417. package/dist/state/write/experimentPublication.js +192 -0
  418. package/dist/state/write/explain.js +380 -0
  419. package/dist/state/write/fields.js +61 -0
  420. package/dist/state/write/glossaryPublication.js +263 -0
  421. package/dist/state/write/grammar.js +285 -0
  422. package/dist/state/write/helpers.js +29 -0
  423. package/dist/state/write/index.js +12 -0
  424. package/dist/state/write/input.js +391 -0
  425. package/dist/state/write/lock.js +837 -0
  426. package/dist/state/write/mutation.js +234 -0
  427. package/dist/state/write/operations.js +170 -0
  428. package/dist/state/write/planEvaluation.js +128 -0
  429. package/dist/state/write/planPublication.js +179 -0
  430. package/dist/state/write/runtimeOperations.js +146 -0
  431. package/dist/state/write/serialize.js +1 -0
  432. package/dist/state/write/transaction.js +57 -0
  433. package/dist/state/write/validate.js +7 -0
  434. package/dist/upgrade/appContentRefresh.js +77 -36
  435. package/dist/upgrade/appModel.js +0 -1
  436. package/dist/upgrade/atomicWriter.js +1 -0
  437. package/dist/upgrade/bundleEvidence.js +0 -1
  438. package/dist/upgrade/channels.js +6 -9
  439. package/dist/upgrade/compatibility.js +43 -17
  440. package/dist/upgrade/doctor.js +55 -32
  441. package/dist/upgrade/doctorClassifier.js +11 -1
  442. package/dist/upgrade/installedHooksRetirement.js +46 -40
  443. package/dist/upgrade/legacyAgentCleanup.js +133 -34
  444. package/dist/upgrade/lifecycleUpgrade.js +126 -0
  445. package/dist/upgrade/migrateArtifactsV2ToV3.js +325 -82
  446. package/dist/upgrade/migrationPublication.js +122 -0
  447. package/dist/upgrade/nextMajorDoctor.js +0 -22
  448. package/dist/upgrade/npxPlatformStatus.js +2 -2
  449. package/dist/upgrade/productV1Reset.js +515 -0
  450. package/dist/upgrade/productV1ResetAuthority.js +139 -0
  451. package/dist/upgrade/projectIntegration.js +126 -134
  452. package/dist/upgrade/projectIntegrationDecision.js +21 -13
  453. package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
  454. package/dist/upgrade/runtimeMigration.js +210 -430
  455. package/dist/upgrade/upgradeCommands.js +14 -1
  456. package/dist/upgrade/upgradeLock.js +85 -0
  457. package/dist/upgrade/upgradeOrchestrator.js +257 -48
  458. package/dist/upgrade/v3CapabilitySurface.js +2 -3
  459. package/dist/upgrade/versionResolution.js +0 -1
  460. package/dist/validate/activationArtifactEvidence.js +866 -0
  461. package/dist/validate/activationArtifactEvidenceTypes.js +12 -0
  462. package/dist/validate/activationConjunction.js +816 -0
  463. package/dist/validate/activationEvidenceManifest.js +610 -0
  464. package/dist/validate/activationPackageSemantics.js +29 -0
  465. package/dist/validate/appHomeContract.js +1 -7
  466. package/dist/validate/bootstrapAuthority.js +44 -0
  467. package/dist/validate/capability.js +11 -3
  468. package/dist/validate/crossCapability.js +14 -9
  469. package/dist/validate/glossaryVariantGuard.js +96 -0
  470. package/dist/validate/retainedReferenceAuthority.js +879 -0
  471. package/dist/validate/selfAudit.js +39 -45
  472. package/dist/validate/vocabularyAuthority.js +8 -8
  473. package/package.json +39 -13
  474. package/bundle/references/adapters/cursor.md +0 -214
  475. package/bundle/references/adapters/opencode.md +0 -530
  476. package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
  477. package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
  478. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
  479. package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -554
  480. package/bundle/references/adapters/runtime-feature-parity.md +0 -189
  481. package/bundle/references/analysis/benchmark.md +0 -267
  482. package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
  483. package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
  484. package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -369
  485. package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -250
  486. package/bundle/references/cli/capability-tool-classification.yaml +0 -53
  487. package/bundle/references/cli/coexistence-probe.yaml +0 -13
  488. package/bundle/references/cli/parity-expected-actual-template.md +0 -30
  489. package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
  490. package/bundle/references/cli/single-name-protocol.yaml +0 -42
  491. package/bundle/references/cli/upgrade-repair-wording.md +0 -45
  492. package/bundle/references/cli/v3-handoff-manifest.schema.yaml +0 -98
  493. package/bundle/references/meta/documentation-inventory.md +0 -49
  494. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  495. package/bundle/skills/agentera/agents/audit.toml +0 -6
  496. package/bundle/skills/agentera/agents/build.toml +0 -6
  497. package/bundle/skills/agentera/agents/design.toml +0 -6
  498. package/bundle/skills/agentera/agents/discuss.toml +0 -6
  499. package/bundle/skills/agentera/agents/document.toml +0 -6
  500. package/bundle/skills/agentera/agents/optimize.toml +0 -6
  501. package/bundle/skills/agentera/agents/orchestrate.toml +0 -6
  502. package/bundle/skills/agentera/agents/plan.toml +0 -6
  503. package/bundle/skills/agentera/agents/profile.toml +0 -6
  504. package/bundle/skills/agentera/agents/research.toml +0 -6
  505. package/bundle/skills/agentera/agents/status.toml +0 -6
  506. package/bundle/skills/agentera/agents/vision.toml +0 -6
  507. package/bundle/skills/agentera/references/contract.md +0 -1048
  508. package/dist/analytics/extractCorpus/cli.js.map +0 -1
  509. package/dist/analytics/extractCorpus/copilotSessions.js.map +0 -1
  510. package/dist/analytics/extractCorpus/core.js.map +0 -1
  511. package/dist/analytics/extractCorpus/corpus.js.map +0 -1
  512. package/dist/analytics/extractCorpus/coverageAudit.js.map +0 -1
  513. package/dist/analytics/extractCorpus/cursorSessions.js.map +0 -1
  514. package/dist/analytics/extractCorpus/extractCorpusParity.js.map +0 -1
  515. package/dist/analytics/extractCorpus/filesystemSources.js.map +0 -1
  516. package/dist/analytics/extractCorpus/index.js.map +0 -1
  517. package/dist/analytics/extractCorpus/jsonlSessions.js.map +0 -1
  518. package/dist/analytics/extractCorpus/sqliteCaps.js.map +0 -1
  519. package/dist/analytics/extractCorpus/sqliteSessions.js.map +0 -1
  520. package/dist/analytics/extractCorpus.js.map +0 -1
  521. package/dist/analytics/usageStats.js.map +0 -1
  522. package/dist/bin/agentera.js.map +0 -1
  523. package/dist/capabilities/audit/instructions.js.map +0 -1
  524. package/dist/capabilities/build/instructions.js.map +0 -1
  525. package/dist/capabilities/design/instructions.js.map +0 -1
  526. package/dist/capabilities/discuss/instructions.js.map +0 -1
  527. package/dist/capabilities/document/instructions.js.map +0 -1
  528. package/dist/capabilities/index.js.map +0 -1
  529. package/dist/capabilities/optimize/instructions.js.map +0 -1
  530. package/dist/capabilities/orchestrate/instructions.js.map +0 -1
  531. package/dist/capabilities/plan/instructions.js.map +0 -1
  532. package/dist/capabilities/profile/instructions.js.map +0 -1
  533. package/dist/capabilities/research/instructions.js.map +0 -1
  534. package/dist/capabilities/status/instructions.js.map +0 -1
  535. package/dist/capabilities/vision/instructions.js.map +0 -1
  536. package/dist/cli/appContext.js.map +0 -1
  537. package/dist/cli/argvalidate.js.map +0 -1
  538. package/dist/cli/capabilityContext/benchmark.js.map +0 -1
  539. package/dist/cli/capabilityContext/bespoke.js.map +0 -1
  540. package/dist/cli/capabilityContext/build.js.map +0 -1
  541. package/dist/cli/capabilityContext/closeout.js.map +0 -1
  542. package/dist/cli/capabilityContext/contract.js.map +0 -1
  543. package/dist/cli/capabilityContext/evidence.js.map +0 -1
  544. package/dist/cli/capabilityContext/index.js.map +0 -1
  545. package/dist/cli/capabilityContext/orchestration.js.map +0 -1
  546. package/dist/cli/capabilityContext/planState.js.map +0 -1
  547. package/dist/cli/capabilityContext/progress.js.map +0 -1
  548. package/dist/cli/capabilityContext/shared.js.map +0 -1
  549. package/dist/cli/capabilityContext/slim.js.map +0 -1
  550. package/dist/cli/capabilityContext/startup.js.map +0 -1
  551. package/dist/cli/capabilityContext/types.js.map +0 -1
  552. package/dist/cli/capabilityContext.js.map +0 -1
  553. package/dist/cli/commands/appHome.js.map +0 -1
  554. package/dist/cli/commands/capability.js.map +0 -1
  555. package/dist/cli/commands/compact.js.map +0 -1
  556. package/dist/cli/commands/doctor.js.map +0 -1
  557. package/dist/cli/commands/lint.js.map +0 -1
  558. package/dist/cli/commands/prime/bundleStatus.js.map +0 -1
  559. package/dist/cli/commands/prime/collectOrientationState.js.map +0 -1
  560. package/dist/cli/commands/prime/orientationOutput.js.map +0 -1
  561. package/dist/cli/commands/prime/types.js.map +0 -1
  562. package/dist/cli/commands/prime/v1Migration.js +0 -39
  563. package/dist/cli/commands/prime/v1Migration.js.map +0 -1
  564. package/dist/cli/commands/prime.js.map +0 -1
  565. package/dist/cli/commands/query.js.map +0 -1
  566. package/dist/cli/commands/report.js.map +0 -1
  567. package/dist/cli/commands/schema.js.map +0 -1
  568. package/dist/cli/commands/state/decisions.js.map +0 -1
  569. package/dist/cli/commands/state/docs.js.map +0 -1
  570. package/dist/cli/commands/state/experiments.js.map +0 -1
  571. package/dist/cli/commands/state/health.js.map +0 -1
  572. package/dist/cli/commands/state/index.js.map +0 -1
  573. package/dist/cli/commands/state/objective.js.map +0 -1
  574. package/dist/cli/commands/state/plan.js.map +0 -1
  575. package/dist/cli/commands/state/progress.js.map +0 -1
  576. package/dist/cli/commands/state/shared.js.map +0 -1
  577. package/dist/cli/commands/state/todo.js.map +0 -1
  578. package/dist/cli/commands/upgrade.js.map +0 -1
  579. package/dist/cli/commands/validate.js.map +0 -1
  580. package/dist/cli/commands/verify.js.map +0 -1
  581. package/dist/cli/contracts/bundleStatus.js.map +0 -1
  582. package/dist/cli/contracts/orientationState.js.map +0 -1
  583. package/dist/cli/dispatch/argvParser.js.map +0 -1
  584. package/dist/cli/dispatch/check.js.map +0 -1
  585. package/dist/cli/dispatch/commands.js.map +0 -1
  586. package/dist/cli/dispatch/index.js.map +0 -1
  587. package/dist/cli/dispatch/lifecycle.js.map +0 -1
  588. package/dist/cli/dispatch/prime.js.map +0 -1
  589. package/dist/cli/dispatch/shared.js.map +0 -1
  590. package/dist/cli/dispatch/state.js.map +0 -1
  591. package/dist/cli/dispatch.js.map +0 -1
  592. package/dist/cli/errors.js.map +0 -1
  593. package/dist/cli/help.js.map +0 -1
  594. package/dist/cli/orientation/attention.js.map +0 -1
  595. package/dist/cli/orientation/corpusCoverage.js.map +0 -1
  596. package/dist/cli/orientation.js.map +0 -1
  597. package/dist/cli/prime-blob.js.map +0 -1
  598. package/dist/cli/startupCompletenessContract.js.map +0 -1
  599. package/dist/cli/stateQuery.js.map +0 -1
  600. package/dist/cli/structured.js.map +0 -1
  601. package/dist/cli/todoMarkdown.js.map +0 -1
  602. package/dist/cli/todoSeverity.js.map +0 -1
  603. package/dist/core/difflib.js.map +0 -1
  604. package/dist/core/envPaths.js.map +0 -1
  605. package/dist/core/jsonValue.js.map +0 -1
  606. package/dist/core/paths.js.map +0 -1
  607. package/dist/core/pyjson.js.map +0 -1
  608. package/dist/core/sourceRoot.js.map +0 -1
  609. package/dist/core/toml.js.map +0 -1
  610. package/dist/core/yaml.js.map +0 -1
  611. package/dist/eval/evalSkills.js.map +0 -1
  612. package/dist/eval/semanticEval.js.map +0 -1
  613. package/dist/eval/semanticFixtures.js.map +0 -1
  614. package/dist/hooks/common.js.map +0 -1
  615. package/dist/hooks/compaction/apply.js.map +0 -1
  616. package/dist/hooks/compaction/dryRun.js.map +0 -1
  617. package/dist/hooks/compaction/index.js.map +0 -1
  618. package/dist/hooks/compaction/parse.js.map +0 -1
  619. package/dist/hooks/compaction/retention.js.map +0 -1
  620. package/dist/hooks/compaction/status.js.map +0 -1
  621. package/dist/hooks/compaction/types.js.map +0 -1
  622. package/dist/hooks/cursorPreToolUse.js +0 -19
  623. package/dist/hooks/cursorPreToolUse.js.map +0 -1
  624. package/dist/hooks/cursorSessionStart.js +0 -79
  625. package/dist/hooks/cursorSessionStart.js.map +0 -1
  626. package/dist/hooks/sessionStart.js +0 -216
  627. package/dist/hooks/sessionStart.js.map +0 -1
  628. package/dist/hooks/sessionStop.js +0 -206
  629. package/dist/hooks/sessionStop.js.map +0 -1
  630. package/dist/hooks/validateArtifact/agentFacing.js.map +0 -1
  631. package/dist/hooks/validateArtifact/index.js.map +0 -1
  632. package/dist/hooks/validateArtifact/markdown.js.map +0 -1
  633. package/dist/hooks/validateArtifact/runtime.js +0 -86
  634. package/dist/hooks/validateArtifact/runtime.js.map +0 -1
  635. package/dist/hooks/validateArtifact/schema.js.map +0 -1
  636. package/dist/hooks/validateArtifact/traversal.js.map +0 -1
  637. package/dist/hooks/validateArtifact/violations.js.map +0 -1
  638. package/dist/migrate/v2HandoffManifest.js.map +0 -1
  639. package/dist/registries/artifactProtocolIds.js.map +0 -1
  640. package/dist/registries/artifactRegistry.js.map +0 -1
  641. package/dist/registries/capabilityContract.js.map +0 -1
  642. package/dist/registries/evaluatorHandoffContract.js.map +0 -1
  643. package/dist/registries/packageRegistry.js.map +0 -1
  644. package/dist/registries/runtimeAdapterRegistry.js +0 -316
  645. package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
  646. package/dist/registries/triggerLoader.js.map +0 -1
  647. package/dist/release/releaseMetadata.js.map +0 -1
  648. package/dist/setup/codex/agents.js +0 -96
  649. package/dist/setup/codex/agents.js.map +0 -1
  650. package/dist/setup/codex/cli.js +0 -161
  651. package/dist/setup/codex/cli.js.map +0 -1
  652. package/dist/setup/codex/configToml.js +0 -639
  653. package/dist/setup/codex/configToml.js.map +0 -1
  654. package/dist/setup/codex/constants.js +0 -29
  655. package/dist/setup/codex/constants.js.map +0 -1
  656. package/dist/setup/codex/installRoot.js +0 -64
  657. package/dist/setup/codex/installRoot.js.map +0 -1
  658. package/dist/setup/codex/state.js +0 -270
  659. package/dist/setup/codex/state.js.map +0 -1
  660. package/dist/setup/codex.js +0 -12
  661. package/dist/setup/codex.js.map +0 -1
  662. package/dist/setup/copilot.js +0 -227
  663. package/dist/setup/copilot.js.map +0 -1
  664. package/dist/setup/cursor.js +0 -129
  665. package/dist/setup/cursor.js.map +0 -1
  666. package/dist/setup/cursorSurfaces.js +0 -67
  667. package/dist/setup/cursorSurfaces.js.map +0 -1
  668. package/dist/setup/doctor/core.js +0 -300
  669. package/dist/setup/doctor/core.js.map +0 -1
  670. package/dist/setup/doctor/diagnostics.js +0 -240
  671. package/dist/setup/doctor/diagnostics.js.map +0 -1
  672. package/dist/setup/doctor/opencode.js +0 -313
  673. package/dist/setup/doctor/opencode.js.map +0 -1
  674. package/dist/setup/doctor/report.js +0 -425
  675. package/dist/setup/doctor/report.js.map +0 -1
  676. package/dist/setup/doctor.js +0 -10
  677. package/dist/setup/doctor.js.map +0 -1
  678. package/dist/setup/opencode.js.map +0 -1
  679. package/dist/setup/smokeChecks.js.map +0 -1
  680. package/dist/state/installRoot.js.map +0 -1
  681. package/dist/state/startupAnalysis/benchmark.js.map +0 -1
  682. package/dist/state/startupAnalysis/contract.js.map +0 -1
  683. package/dist/state/startupAnalysis/helpers.js.map +0 -1
  684. package/dist/state/startupAnalysis/index.js.map +0 -1
  685. package/dist/state/startupAnalysis/metrics.js.map +0 -1
  686. package/dist/state/startupAnalysis/records.js.map +0 -1
  687. package/dist/state/startupAnalysis/report.js.map +0 -1
  688. package/dist/state/startupAnalysis/threshold.js.map +0 -1
  689. package/dist/state/startupAnalysis.js.map +0 -1
  690. package/dist/upgrade/appContentRefresh.js.map +0 -1
  691. package/dist/upgrade/appModel.js.map +0 -1
  692. package/dist/upgrade/bundleEvidence.js.map +0 -1
  693. package/dist/upgrade/channels.js.map +0 -1
  694. package/dist/upgrade/coexistenceProbe.js +0 -107
  695. package/dist/upgrade/coexistenceProbe.js.map +0 -1
  696. package/dist/upgrade/compatibility.js.map +0 -1
  697. package/dist/upgrade/doctor.js.map +0 -1
  698. package/dist/upgrade/doctorClassifier.js.map +0 -1
  699. package/dist/upgrade/installedHooksRetirement.js.map +0 -1
  700. package/dist/upgrade/legacyAgentCleanup.js.map +0 -1
  701. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -570
  702. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
  703. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
  704. package/dist/upgrade/nextMajorDoctor.js.map +0 -1
  705. package/dist/upgrade/npxPlatformStatus.js.map +0 -1
  706. package/dist/upgrade/projectIntegration.js.map +0 -1
  707. package/dist/upgrade/projectIntegrationDecision.js.map +0 -1
  708. package/dist/upgrade/runtimeMigration.js.map +0 -1
  709. package/dist/upgrade/upgradeCommands.js.map +0 -1
  710. package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
  711. package/dist/upgrade/v3CapabilitySurface.js.map +0 -1
  712. package/dist/upgrade/versionResolution.js.map +0 -1
  713. package/dist/validate/appHomeContract.js.map +0 -1
  714. package/dist/validate/capability.js.map +0 -1
  715. package/dist/validate/crossCapability.js.map +0 -1
  716. package/dist/validate/lifecycleAdapters/legacyPythonParity.js +0 -93
  717. package/dist/validate/lifecycleAdapters/legacyPythonParity.js.map +0 -1
  718. package/dist/validate/lifecycleAdapters/nodeFormChecks.js +0 -488
  719. package/dist/validate/lifecycleAdapters/nodeFormChecks.js.map +0 -1
  720. package/dist/validate/lifecycleAdapters/shared.js +0 -198
  721. package/dist/validate/lifecycleAdapters/shared.js.map +0 -1
  722. package/dist/validate/lifecycleAdapters.js +0 -62
  723. package/dist/validate/lifecycleAdapters.js.map +0 -1
  724. package/dist/validate/selfAudit.js.map +0 -1
  725. package/dist/validate/vocabularyAuthority.js.map +0 -1
@@ -0,0 +1,139 @@
1
+ import { createHash } from "node:crypto";
2
+ function escapeRegExp(value) {
3
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
4
+ }
5
+ /**
6
+ * Locale-independent Unicode caseless-exact equality with no normalization.
7
+ *
8
+ * ECMAScript's `iu` matching supplies Unicode simple case folding. Escaping
9
+ * makes the bounded term literal, while the anchors and terminal lookahead
10
+ * prevent regex syntax and final-line-terminator behavior from widening exact
11
+ * matching. NFC/NFD, accent, and compatibility normalization are intentionally
12
+ * absent, so differently encoded strings remain distinct unless Unicode case
13
+ * folding itself relates them.
14
+ */
15
+ export function unicodeCaselessExact(left, right) {
16
+ const literal = escapeRegExp(left);
17
+ return new RegExp(`^(?:${literal})$(?![\\s\\S])`, "iu").test(right);
18
+ }
19
+ function compareCodePoints(left, right) {
20
+ const leftCodePoint = left.codePointAt(0) ?? 0;
21
+ const rightCodePoint = right.codePointAt(0) ?? 0;
22
+ return leftCodePoint - rightCodePoint;
23
+ }
24
+ export function compareGlossaryUnicodeStrings(left, right) {
25
+ const leftScalars = [...left];
26
+ const rightScalars = [...right];
27
+ for (let index = 0; index < Math.min(leftScalars.length, rightScalars.length); index += 1) {
28
+ const comparison = compareCodePoints(leftScalars[index], rightScalars[index]);
29
+ if (comparison !== 0)
30
+ return comparison;
31
+ }
32
+ return leftScalars.length - rightScalars.length;
33
+ }
34
+ function singleScalar(value) {
35
+ return [...value].length === 1 ? value : null;
36
+ }
37
+ /**
38
+ * Build the same simple-case equivalence key used by the stable identity.
39
+ * Lowercase mapping is the primary Unicode simple-fold projection. A
40
+ * lowercased uppercase mapping is admitted only when the existing equality
41
+ * matcher confirms it, which avoids transitive casing mistakes such as
42
+ * treating ASCII `I` and dotless `ı` as equal.
43
+ */
44
+ function unicodeSimpleCaseFoldKey(value) {
45
+ return [...value]
46
+ .map((character) => {
47
+ const lower = singleScalar(character.toLowerCase()) ?? character;
48
+ const upper = singleScalar(character.toUpperCase());
49
+ const upperLower = upper === null ? null : singleScalar(upper.toLowerCase());
50
+ if (upperLower !== null && unicodeCaselessExact(character, upperLower)) {
51
+ return upperLower;
52
+ }
53
+ return lower;
54
+ })
55
+ .join("");
56
+ }
57
+ function sha256Utf8(value) {
58
+ return createHash("sha256").update(value, "utf8").digest("hex");
59
+ }
60
+ function requireNonEmpty(value, field) {
61
+ if (typeof value !== "string" || value.trim().length === 0) {
62
+ throw new TypeError(`${field} must be a non-empty string`);
63
+ }
64
+ return value;
65
+ }
66
+ /**
67
+ * Return a content-addressed identity for one Unicode caseless-exact term.
68
+ * The original spelling is not changed or stored in the identity key.
69
+ */
70
+ export function stableGlossaryTermIdentity(term) {
71
+ const value = requireNonEmpty(term, "term");
72
+ const key = unicodeSimpleCaseFoldKey(value);
73
+ return sha256Utf8(JSON.stringify({
74
+ schema_version: "agentera.personalGlossaryTermIdentity.v1",
75
+ key,
76
+ }));
77
+ }
78
+ export const GLOSSARY_CANDIDATE_SCOPES = ["personal", "project", "ambiguous"];
79
+ export function isGlossaryCandidateScope(value) {
80
+ return GLOSSARY_CANDIDATE_SCOPES.includes(value);
81
+ }
82
+ export function canonicalGlossaryJson(value) {
83
+ if (value === undefined)
84
+ throw new TypeError("canonical JSON cannot contain undefined");
85
+ if (value === null || typeof value !== "object")
86
+ return JSON.stringify(value);
87
+ if (Array.isArray(value))
88
+ return `[${value.map(canonicalGlossaryJson).join(",")}]`;
89
+ const record = value;
90
+ return `{${Object.keys(record)
91
+ .sort(compareGlossaryUnicodeStrings)
92
+ .map((key) => `${JSON.stringify(key)}:${canonicalGlossaryJson(record[key])}`)
93
+ .join(",")}}`;
94
+ }
95
+ export function glossaryCanonicalSha256(value) {
96
+ return sha256Utf8(canonicalGlossaryJson(value));
97
+ }
98
+ /**
99
+ * Return a content-addressed candidate revision without mining or publishing.
100
+ * Evidence order is not semantic, but every evidence identity remains bound.
101
+ */
102
+ export function glossaryCandidateRevision(input) {
103
+ const stableTermIdentity = requireNonEmpty(input.stable_term_identity, "stable_term_identity");
104
+ const meaning = requireNonEmpty(input.meaning, "meaning");
105
+ const policyVersion = requireNonEmpty(input.policy_version, "policy_version");
106
+ const generation = requireNonEmpty(input.generation, "generation");
107
+ if (!Array.isArray(input.evidence))
108
+ throw new TypeError("evidence must be a list");
109
+ if (!isGlossaryCandidateScope(input.scope)) {
110
+ throw new TypeError("scope must be personal, project, or ambiguous");
111
+ }
112
+ const evidence = input.evidence.map((item) => {
113
+ requireNonEmpty(item.source_id, "evidence.source_id");
114
+ requireNonEmpty(item.evidence_anchor, "evidence.evidence_anchor");
115
+ return item;
116
+ });
117
+ const canonicalEvidence = new Set();
118
+ for (const item of evidence) {
119
+ const canonical = canonicalGlossaryJson(item);
120
+ if (canonicalEvidence.has(canonical)) {
121
+ throw new TypeError("evidence must not contain duplicate canonical evidence records");
122
+ }
123
+ canonicalEvidence.add(canonical);
124
+ }
125
+ evidence.sort((left, right) => {
126
+ const leftCanonical = canonicalGlossaryJson(left);
127
+ const rightCanonical = canonicalGlossaryJson(right);
128
+ return compareGlossaryUnicodeStrings(leftCanonical, rightCanonical);
129
+ });
130
+ return sha256Utf8(canonicalGlossaryJson({
131
+ schema_version: "agentera.personalGlossaryCandidateRevision.v1",
132
+ stable_term_identity: stableTermIdentity,
133
+ meaning,
134
+ scope: input.scope,
135
+ evidence,
136
+ policy_version: policyVersion,
137
+ generation,
138
+ }));
139
+ }
@@ -0,0 +1,20 @@
1
+ const IDENTIFIER_CONTINUATION = "[\\p{ID_Continue}$\\u200C\\u200D]";
2
+ const identifierContinuation = new RegExp(`^${IDENTIFIER_CONTINUATION}$`, "u");
3
+ function escapeRegExp(value) {
4
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
5
+ }
6
+ /**
7
+ * Find one exact-case, non-normalizing glossary term occurrence on a source line.
8
+ * Boundaries follow ECMAScript identifier continuation: Unicode ID_Continue,
9
+ * `$`, ZWNJ (U+200C), and ZWJ (U+200D).
10
+ */
11
+ export function containsGlossaryTerm(line, term) {
12
+ const characters = [...term];
13
+ const prefix = identifierContinuation.test(characters[0] ?? "")
14
+ ? `(?<!${IDENTIFIER_CONTINUATION})`
15
+ : "";
16
+ const suffix = identifierContinuation.test(characters.at(-1) ?? "")
17
+ ? `(?!${IDENTIFIER_CONTINUATION})`
18
+ : "";
19
+ return new RegExp(`${prefix}${escapeRegExp(term)}${suffix}`, "u").test(line);
20
+ }
@@ -0,0 +1,274 @@
1
+ import crypto from "node:crypto";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { loadYamlMapping } from "../core/yaml.js";
5
+ import { canonicalRecordJson } from "../state/archiveDiscovery.js";
6
+ import { resolveSourceRoot } from "../core/sourceRoot.js";
7
+ import { loadCapabilitySchemaContract } from "./capabilityContract.js";
8
+ import { loadTriggerModel } from "./triggerLoader.js";
9
+ export class HybridRouteRegistryError extends Error {
10
+ errors;
11
+ constructor(errors) {
12
+ super(errors.join("; "));
13
+ this.errors = errors;
14
+ }
15
+ }
16
+ function normalized(value) {
17
+ return value.normalize("NFKC").toLowerCase().trim().replace(/\s+/gu, " ");
18
+ }
19
+ function byteOffset(value, utf16Offset) {
20
+ return Buffer.byteLength(value.slice(0, utf16Offset), "utf8");
21
+ }
22
+ function sourceSeparatorOffset(value) {
23
+ let offset = 0;
24
+ for (const character of value) {
25
+ if ([":", "-", "—"].includes(character.normalize("NFKC")))
26
+ return offset;
27
+ offset += character.length;
28
+ }
29
+ return undefined;
30
+ }
31
+ function sourcePath(root, relativePath) {
32
+ return path.join(root, ...relativePath.split("/"));
33
+ }
34
+ function readMapping(root, relativePath) {
35
+ try {
36
+ return loadYamlMapping(fs.readFileSync(sourcePath(root, relativePath), "utf8"));
37
+ }
38
+ catch (error) {
39
+ throw new HybridRouteRegistryError([`${relativePath} is not readable or valid: ${error.message}`]);
40
+ }
41
+ }
42
+ function contractMapping(value, field) {
43
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
44
+ throw new HybridRouteRegistryError([`hybrid route contract ${field} must be a mapping`]);
45
+ }
46
+ return value;
47
+ }
48
+ function contractString(value, field) {
49
+ if (typeof value !== "string" || !value) {
50
+ throw new HybridRouteRegistryError([`hybrid route contract ${field} must be a non-empty string`]);
51
+ }
52
+ return value;
53
+ }
54
+ function contractStrings(value, field) {
55
+ if (!Array.isArray(value) || value.some((entry) => typeof entry !== "string")) {
56
+ throw new HybridRouteRegistryError([`hybrid route contract ${field} must be a string list`]);
57
+ }
58
+ return value;
59
+ }
60
+ function routeReceiptContract(contract, semanticCapsuleSha) {
61
+ const protocol = contractMapping(contract.protocol, "protocol");
62
+ const receipt = contractMapping(protocol.receipt, "protocol.receipt");
63
+ const cliSeam = contractMapping(receipt.cli_seam, "protocol.receipt.cli_seam");
64
+ const authority = contractMapping(receipt.validation_authority, "protocol.receipt.validation_authority");
65
+ const hostOutput = contractMapping(authority.host_output_shape, "protocol.receipt.validation_authority.host_output_shape");
66
+ const normalization = contractMapping(authority.host_to_cli_normalization, "protocol.receipt.validation_authority.host_to_cli_normalization");
67
+ const projection = contractMapping(normalization.projection, "protocol.receipt.validation_authority.host_to_cli_normalization.projection");
68
+ const requestBoundFields = contractMapping(authority.request_bound_fields, "protocol.receipt.validation_authority.request_bound_fields");
69
+ const discovery = contractMapping(contractMapping(protocol.response, "protocol.response").semantic_required, "protocol.response.semantic_required");
70
+ const receiptDiscovery = contractMapping(discovery.receipt_contract, "protocol.response.semantic_required.receipt_contract");
71
+ const example = contractMapping(receiptDiscovery.stdin_example, "protocol.response.semantic_required.receipt_contract.stdin_example");
72
+ const exampleReceipt = contractMapping(example.receipt, "protocol.response.semantic_required.receipt_contract.stdin_example.receipt");
73
+ const compound = contractMapping(contractMapping(contract.compound_intent, "compound_intent").semantic, "compound_intent.semantic");
74
+ const exampleRequest = contractString(example.request, "protocol.response.semantic_required.receipt_contract.stdin_example.request");
75
+ const version = contractString(receipt.version, "protocol.receipt.version");
76
+ const schemaVersion = contractString(receiptDiscovery.schema_version, "protocol.response.semantic_required.receipt_contract.schema_version");
77
+ if (version !== "agentera.route_receipt.v1" || schemaVersion !== "agentera.route_receipt_contract.v1") {
78
+ throw new HybridRouteRegistryError(["hybrid route receipt discovery declares an unsupported version"]);
79
+ }
80
+ return {
81
+ schemaVersion: "agentera.route_receipt_contract.v1",
82
+ version: "agentera.route_receipt.v1",
83
+ command: contractString(cliSeam.command, "protocol.receipt.cli_seam.command"),
84
+ stdin_command: contractString(receiptDiscovery.stdin_command, "protocol.response.semantic_required.receipt_contract.stdin_command"),
85
+ input_schema: contractMapping(receiptDiscovery.input_schema, "protocol.response.semantic_required.receipt_contract.input_schema"),
86
+ nullable_schema: contractMapping(hostOutput.schema, "protocol.receipt.validation_authority.host_output_shape.schema"),
87
+ outcomes: contractStrings(receipt.outcomes, "protocol.receipt.outcomes"),
88
+ outcome_rules: contractMapping(projection.outcome_rules, "protocol.receipt.validation_authority.host_to_cli_normalization.projection.outcome_rules"),
89
+ compound,
90
+ remainder_span: contractMapping(requestBoundFields.remainder_span, "protocol.receipt.validation_authority.request_bound_fields.remainder_span"),
91
+ stdin_example: {
92
+ input: {
93
+ request: exampleRequest,
94
+ receipt: {
95
+ version,
96
+ request_sha256: crypto.createHash("sha256").update(exampleRequest, "utf8").digest("hex"),
97
+ semantic_capsule_sha256: semanticCapsuleSha,
98
+ ...exampleReceipt,
99
+ },
100
+ },
101
+ },
102
+ };
103
+ }
104
+ function phrasesFrom(root, contract) {
105
+ const raw = readMapping(root, "skills/agentera/route-phrases.yaml");
106
+ const entries = raw.phrases;
107
+ if (!Array.isArray(entries))
108
+ throw new HybridRouteRegistryError(["route phrase registry phrases must be a list"]);
109
+ const capabilities = new Set(contract.routeAliases.primaryAliases.map(({ capability }) => capability));
110
+ const errors = [];
111
+ const seen = new Set();
112
+ const directNames = new Set([
113
+ ...capabilities,
114
+ ...contract.routeAliases.primaryAliases.map(({ alias }) => alias),
115
+ ].map(normalized));
116
+ const phrases = [];
117
+ for (const [index, value] of entries.entries()) {
118
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
119
+ errors.push(`phrases[${index}] must be a mapping`);
120
+ continue;
121
+ }
122
+ const entry = value;
123
+ const { id, capability, phrase, status } = entry;
124
+ if (![id, capability, phrase, status].every((field) => typeof field === "string" && field)) {
125
+ errors.push(`phrases[${index}] requires non-empty id, capability, phrase, and status`);
126
+ continue;
127
+ }
128
+ const normalizedPhrase = normalized(phrase);
129
+ if (!normalizedPhrase) {
130
+ errors.push(`phrases[${index}] phrase must contain text`);
131
+ continue;
132
+ }
133
+ if (seen.has(normalizedPhrase))
134
+ errors.push(`phrase collision: ${id}`);
135
+ seen.add(normalizedPhrase);
136
+ if (!capabilities.has(capability))
137
+ errors.push(`phrases[${index}] capability does not resolve`);
138
+ if (directNames.has(normalizedPhrase) || directNames.has(normalizedPhrase.split(" ")[0])) {
139
+ errors.push(`phrases[${index}] conflicts with direct-route grammar`);
140
+ }
141
+ phrases.push({ id: id, capability: capability, phrase: phrase, status: status });
142
+ }
143
+ if (errors.length > 0)
144
+ throw new HybridRouteRegistryError(errors);
145
+ return phrases;
146
+ }
147
+ function phraseMatch(request, phrase) {
148
+ const phraseTokens = normalized(phrase.phrase).split(" ");
149
+ const sourceTokens = [...request.matchAll(/\S+/gu)];
150
+ if (sourceTokens.length < phraseTokens.length)
151
+ return undefined;
152
+ for (let index = 0; index < phraseTokens.length - 1; index += 1) {
153
+ if (normalized(sourceTokens[index][0]) !== phraseTokens[index])
154
+ return undefined;
155
+ }
156
+ const finalToken = sourceTokens[phraseTokens.length - 1];
157
+ const separator = sourceSeparatorOffset(finalToken[0]);
158
+ const finalEnd = separator ?? finalToken[0].length;
159
+ if (normalized(finalToken[0].slice(0, finalEnd)) !== phraseTokens.at(-1))
160
+ return undefined;
161
+ return {
162
+ start: byteOffset(request, sourceTokens[0].index),
163
+ end: byteOffset(request, finalToken.index + finalEnd),
164
+ };
165
+ }
166
+ function deterministic(capability, tier, recognizedSpan, request, provenance) {
167
+ return {
168
+ schemaVersion: "agentera.route_response.v1",
169
+ outcome: "deterministic_selection",
170
+ capability,
171
+ tier,
172
+ recognized_span: recognizedSpan,
173
+ topic_span: { start: recognizedSpan.end, end: Buffer.byteLength(request, "utf8") },
174
+ provenance,
175
+ };
176
+ }
177
+ function directRoute(request, contract) {
178
+ const match = /^(\s*\/agentera)(?:\s+([^\s]+))?/u.exec(request);
179
+ if (!match)
180
+ return undefined;
181
+ const prefixEnd = match[1].length;
182
+ const name = match[2];
183
+ if (!name) {
184
+ if (request.slice(prefixEnd).trim())
185
+ return undefined;
186
+ const start = request.search(/\S/u);
187
+ return deterministic("status", "bare", { start: byteOffset(request, start), end: byteOffset(request, prefixEnd) }, request, { tier: "bare" });
188
+ }
189
+ const normalizedName = normalized(name);
190
+ const alias = contract.routeAliases.primaryAliases.find(({ alias: value, capability }) => normalized(value) === normalizedName || normalized(capability) === normalizedName);
191
+ if (!alias)
192
+ return undefined;
193
+ const nameStart = request.indexOf(name, prefixEnd);
194
+ return deterministic(alias.capability, "direct", {
195
+ start: byteOffset(request, request.search(/\S/u)),
196
+ end: byteOffset(request, nameStart + name.length),
197
+ }, request, { tier: "direct", route_alias: alias.alias });
198
+ }
199
+ function semanticCapsule(model, contractVersion) {
200
+ return {
201
+ contract_version: contractVersion,
202
+ capabilities: [...model.capabilities.values()].map(({ capability, triggers }) => ({
203
+ capability,
204
+ triggers: triggers.map((trigger) => ({
205
+ id: trigger.id,
206
+ description: trigger.description,
207
+ priority: trigger.priority,
208
+ disambiguates_against: trigger.disambiguatesAgainst.map(({ capability: target, hint }) => ({ capability: target, hint })),
209
+ })),
210
+ })),
211
+ };
212
+ }
213
+ /** Hash the exact bounded semantic classification capsule presented to the host. */
214
+ export function semanticCapsuleSha256(capsule) {
215
+ return crypto.createHash("sha256").update(canonicalRecordJson(capsule), "utf8").digest("hex");
216
+ }
217
+ /** Returns the complete receipt guide that semantic abstention exposes to hosts. */
218
+ export function describeRouteReceipt(sourceRoot = resolveSourceRoot()) {
219
+ const response = resolveRouteRequest("make implementation plan", sourceRoot);
220
+ if (response.outcome !== "semantic_required") {
221
+ throw new HybridRouteRegistryError(["route receipt example must remain deterministically abstained"]);
222
+ }
223
+ return response.receipt_contract;
224
+ }
225
+ /** Resolve only the contract's deterministic request phase; semantic selection remains host-owned. */
226
+ export function resolveRouteRequest(request, sourceRoot = resolveSourceRoot()) {
227
+ if (typeof request !== "string")
228
+ throw new TypeError("request must be a string");
229
+ const contractRaw = readMapping(sourceRoot, "references/cli/hybrid-route-contract.yaml");
230
+ const contractVersion = contractRaw.schema_version;
231
+ if (typeof contractVersion !== "string" || !contractVersion) {
232
+ throw new HybridRouteRegistryError(["hybrid route contract schema_version must be a non-empty string"]);
233
+ }
234
+ let capabilityContract;
235
+ try {
236
+ capabilityContract = loadCapabilitySchemaContract(sourcePath(sourceRoot, "skills/agentera/capability_schema_contract.yaml"));
237
+ }
238
+ catch (error) {
239
+ throw new HybridRouteRegistryError([`capability route authority is invalid: ${error.message}`]);
240
+ }
241
+ const phrases = phrasesFrom(sourceRoot, capabilityContract);
242
+ const direct = directRoute(request, capabilityContract);
243
+ if (direct)
244
+ return direct;
245
+ for (const phrase of phrases) {
246
+ if (phrase.status !== "active")
247
+ continue;
248
+ const recognizedSpan = phraseMatch(request, phrase);
249
+ if (recognizedSpan) {
250
+ return deterministic(phrase.capability, "phrase", recognizedSpan, request, {
251
+ tier: "phrase",
252
+ phrase_id: phrase.id,
253
+ });
254
+ }
255
+ }
256
+ let triggerModel;
257
+ try {
258
+ triggerModel = loadTriggerModel(capabilityContract, { sourceRoot });
259
+ }
260
+ catch (error) {
261
+ throw new HybridRouteRegistryError([`semantic intent authority is invalid: ${error.message}`]);
262
+ }
263
+ const semantic_capsule = semanticCapsule(triggerModel, contractVersion);
264
+ const semantic_capsule_sha256 = semanticCapsuleSha256(semantic_capsule);
265
+ return {
266
+ schemaVersion: "agentera.route_response.v1",
267
+ outcome: "semantic_required",
268
+ request_sha256: crypto.createHash("sha256").update(request, "utf8").digest("hex"),
269
+ semantic_capsule,
270
+ semantic_capsule_sha256,
271
+ receipt_contract: routeReceiptContract(contractRaw, semantic_capsule_sha256),
272
+ provenance: { tier: "deterministic_abstention", contract: contractVersion },
273
+ };
274
+ }
@@ -0,0 +1,221 @@
1
+ import crypto from "node:crypto";
2
+ import path from "node:path";
3
+ import { resolveSourceRoot } from "../core/sourceRoot.js";
4
+ import { preCutoverCommand } from "../cli/preCutoverCommand.js";
5
+ import { loadCapabilitySchemaContract } from "./capabilityContract.js";
6
+ import { resolveRouteRequest } from "./hybridRoute.js";
7
+ export class RouteReceiptValidationError extends Error {
8
+ field;
9
+ constructor(field, message) {
10
+ super(message);
11
+ this.field = field;
12
+ }
13
+ }
14
+ function isMapping(value) {
15
+ return value !== null && typeof value === "object" && !Array.isArray(value);
16
+ }
17
+ function hasOnlyKeys(value, keys, field) {
18
+ for (const key of Object.keys(value)) {
19
+ if (!keys.includes(key))
20
+ throw new RouteReceiptValidationError(`${field}.${key}`, "contains an unsupported field");
21
+ }
22
+ }
23
+ function requires(value, key, field) {
24
+ if (!(key in value))
25
+ throw new RouteReceiptValidationError(`${field}.${key}`, "is required");
26
+ return value[key];
27
+ }
28
+ function validUtf8String(value, field) {
29
+ if (typeof value !== "string" || Buffer.from(value, "utf8").toString("utf8") !== value) {
30
+ throw new RouteReceiptValidationError(field, "must be a valid UTF-8 string");
31
+ }
32
+ return value;
33
+ }
34
+ function codePointLength(value) {
35
+ return [...value].length;
36
+ }
37
+ function nullableHostShape(receipt, capabilities) {
38
+ if (!isMapping(receipt))
39
+ throw new RouteReceiptValidationError("receipt", "must be a nullable host receipt mapping");
40
+ const keys = ["version", "request_sha256", "semantic_capsule_sha256", "outcome", "capability", "compound", "question", "remainder_span"];
41
+ hasOnlyKeys(receipt, keys, "receipt");
42
+ for (const key of keys)
43
+ requires(receipt, key, "receipt");
44
+ if (receipt.version !== "agentera.route_receipt.v1")
45
+ throw new RouteReceiptValidationError("receipt.version", "must be agentera.route_receipt.v1");
46
+ validUtf8String(receipt.request_sha256, "receipt.request_sha256");
47
+ validUtf8String(receipt.semantic_capsule_sha256, "receipt.semantic_capsule_sha256");
48
+ if (!["select", "clarify", "no_match"].includes(receipt.outcome)) {
49
+ throw new RouteReceiptValidationError("receipt.outcome", "must be select, clarify, or no_match");
50
+ }
51
+ if (receipt.capability !== null && (typeof receipt.capability !== "string" || !capabilities.has(receipt.capability))) {
52
+ throw new RouteReceiptValidationError("receipt.capability", "must be a canonical capability or null");
53
+ }
54
+ if (receipt.compound !== null && receipt.compound !== "none" && receipt.compound !== "preserve") {
55
+ throw new RouteReceiptValidationError("receipt.compound", "must be none, preserve, or null");
56
+ }
57
+ if (receipt.question !== null) {
58
+ const question = validUtf8String(receipt.question, "receipt.question");
59
+ if (codePointLength(question) > 280)
60
+ throw new RouteReceiptValidationError("receipt.question", "must be at most 280 characters");
61
+ }
62
+ if (receipt.remainder_span !== null) {
63
+ if (!isMapping(receipt.remainder_span))
64
+ throw new RouteReceiptValidationError("receipt.remainder_span", "must be a span mapping or null");
65
+ hasOnlyKeys(receipt.remainder_span, ["start", "end"], "receipt.remainder_span");
66
+ for (const key of ["start", "end"]) {
67
+ if (!Number.isInteger(receipt.remainder_span[key]))
68
+ throw new RouteReceiptValidationError(`receipt.remainder_span.${key}`, "must be an integer");
69
+ }
70
+ }
71
+ return receipt;
72
+ }
73
+ /** Projects the required nullable host shape without changing any non-null value. */
74
+ function normalizeHostReceipt(hostReceipt) {
75
+ const outcome = hostReceipt.outcome;
76
+ const requireNonNull = (keys) => {
77
+ for (const key of keys)
78
+ if (hostReceipt[key] === null)
79
+ throw new RouteReceiptValidationError(`receipt.${key}`, "must not be null for this outcome");
80
+ };
81
+ const requireNull = (keys) => {
82
+ for (const key of keys)
83
+ if (hostReceipt[key] !== null)
84
+ throw new RouteReceiptValidationError(`receipt.${key}`, "must be null for this outcome");
85
+ };
86
+ if (outcome === "select") {
87
+ requireNonNull(["version", "request_sha256", "semantic_capsule_sha256", "outcome", "capability", "compound"]);
88
+ requireNull(["question"]);
89
+ if (hostReceipt.compound === "none")
90
+ requireNull(["remainder_span"]);
91
+ else
92
+ requireNonNull(["remainder_span"]);
93
+ }
94
+ else if (outcome === "clarify") {
95
+ requireNonNull(["version", "request_sha256", "semantic_capsule_sha256", "outcome", "question"]);
96
+ requireNull(["capability", "compound", "remainder_span"]);
97
+ }
98
+ else {
99
+ requireNonNull(["version", "request_sha256", "semantic_capsule_sha256", "outcome"]);
100
+ requireNull(["capability", "compound", "question", "remainder_span"]);
101
+ }
102
+ return Object.fromEntries(Object.entries(hostReceipt).filter(([, value]) => value !== null));
103
+ }
104
+ function exactUtf8Suffix(request, span) {
105
+ const bytes = Buffer.from(request, "utf8");
106
+ if (span.start < 0 || span.end <= span.start || span.end !== bytes.length) {
107
+ throw new RouteReceiptValidationError("receipt.remainder_span", "must be a non-empty suffix ending at the original request byte length");
108
+ }
109
+ try {
110
+ const text = new TextDecoder("utf-8", { fatal: true }).decode(bytes.subarray(span.start, span.end));
111
+ if (!Buffer.from(text, "utf8").equals(bytes.subarray(span.start, span.end))) {
112
+ throw new RouteReceiptValidationError("receipt.remainder_span", "must preserve exact UTF-8 request bytes");
113
+ }
114
+ return text;
115
+ }
116
+ catch (error) {
117
+ if (error instanceof RouteReceiptValidationError)
118
+ throw error;
119
+ throw new RouteReceiptValidationError("receipt.remainder_span", "must start and end on UTF-8 code-point boundaries");
120
+ }
121
+ }
122
+ function authoritativeReceipt(receipt, request, capabilities) {
123
+ hasOnlyKeys(receipt, ["version", "request_sha256", "semantic_capsule_sha256", "outcome", "capability", "compound", "question", "remainder_span"], "receipt");
124
+ if (receipt.version !== "agentera.route_receipt.v1")
125
+ throw new RouteReceiptValidationError("receipt.version", "is unsupported");
126
+ if (typeof receipt.request_sha256 !== "string" || !/^[a-f0-9]{64}$/u.test(receipt.request_sha256)) {
127
+ throw new RouteReceiptValidationError("receipt.request_sha256", "must be a lowercase SHA-256 digest");
128
+ }
129
+ if (typeof receipt.semantic_capsule_sha256 !== "string" || !/^[a-f0-9]{64}$/u.test(receipt.semantic_capsule_sha256)) {
130
+ throw new RouteReceiptValidationError("receipt.semantic_capsule_sha256", "must be a lowercase SHA-256 digest");
131
+ }
132
+ const digest = crypto.createHash("sha256").update(request, "utf8").digest("hex");
133
+ if (receipt.request_sha256 !== digest)
134
+ throw new RouteReceiptValidationError("receipt.request_sha256", "does not match the supplied request");
135
+ if (receipt.outcome === "select") {
136
+ if (typeof receipt.capability !== "string" || !capabilities.has(receipt.capability))
137
+ throw new RouteReceiptValidationError("receipt.capability", "must name a canonical capability");
138
+ if (receipt.compound !== "none" && receipt.compound !== "preserve")
139
+ throw new RouteReceiptValidationError("receipt.compound", "must be none or preserve");
140
+ if ("question" in receipt)
141
+ throw new RouteReceiptValidationError("receipt.question", "is forbidden for select");
142
+ if (receipt.compound === "none" && "remainder_span" in receipt)
143
+ throw new RouteReceiptValidationError("receipt.remainder_span", "is forbidden when compound is none");
144
+ if (receipt.compound === "preserve" && !("remainder_span" in receipt))
145
+ throw new RouteReceiptValidationError("receipt.remainder_span", "is required when compound is preserve");
146
+ }
147
+ else if (receipt.outcome === "clarify") {
148
+ const question = validUtf8String(receipt.question, "receipt.question");
149
+ if (!question || codePointLength(question) > 280)
150
+ throw new RouteReceiptValidationError("receipt.question", "must be a non-empty question of at most 280 characters");
151
+ for (const key of ["capability", "compound", "remainder_span"])
152
+ if (key in receipt)
153
+ throw new RouteReceiptValidationError(`receipt.${key}`, "is forbidden for clarify");
154
+ }
155
+ else if (receipt.outcome === "no_match") {
156
+ for (const key of ["capability", "compound", "question", "remainder_span"])
157
+ if (key in receipt)
158
+ throw new RouteReceiptValidationError(`receipt.${key}`, "is forbidden for no_match");
159
+ }
160
+ else {
161
+ throw new RouteReceiptValidationError("receipt.outcome", "must be select, clarify, or no_match");
162
+ }
163
+ if (receipt.remainder_span !== undefined) {
164
+ if (!isMapping(receipt.remainder_span) || !Number.isInteger(receipt.remainder_span.start) || !Number.isInteger(receipt.remainder_span.end)) {
165
+ throw new RouteReceiptValidationError("receipt.remainder_span", "must contain integer start and end values");
166
+ }
167
+ return exactUtf8Suffix(request, receipt.remainder_span);
168
+ }
169
+ return undefined;
170
+ }
171
+ function requireSemanticAuthorization(request, receipt, sourceRoot) {
172
+ try {
173
+ const phaseOne = resolveRouteRequest(request, sourceRoot);
174
+ if (phaseOne.outcome !== "semantic_required" || phaseOne.request_sha256 !== receipt.request_sha256) {
175
+ throw new RouteReceiptValidationError("receipt.request_sha256", "is not bound to a semantic_required route response");
176
+ }
177
+ if (phaseOne.semantic_capsule_sha256 !== receipt.semantic_capsule_sha256) {
178
+ throw new RouteReceiptValidationError("receipt.semantic_capsule_sha256", "does not match the current semantic capsule");
179
+ }
180
+ }
181
+ catch (error) {
182
+ if (error instanceof RouteReceiptValidationError)
183
+ throw error;
184
+ throw new RouteReceiptValidationError("receipt", "could not be authorized by the deterministic route authority");
185
+ }
186
+ }
187
+ export function validateRouteReceiptSubmission(input, sourceRoot = resolveSourceRoot()) {
188
+ if (!isMapping(input))
189
+ throw new RouteReceiptValidationError("input", "must be a mapping with request and receipt");
190
+ hasOnlyKeys(input, ["request", "receipt"], "input");
191
+ const request = validUtf8String(requires(input, "request", "input"), "input.request");
192
+ const hostReceipt = requires(input, "receipt", "input");
193
+ const contract = loadCapabilitySchemaContract(path.join(sourceRoot, "skills/agentera/capability_schema_contract.yaml"));
194
+ const capabilities = new Set(contract.routeAliases.primaryAliases.map(({ capability }) => capability));
195
+ const receipt = normalizeHostReceipt(nullableHostShape(hostReceipt, capabilities));
196
+ const deferredText = authoritativeReceipt(receipt, request, capabilities);
197
+ requireSemanticAuthorization(request, receipt, sourceRoot);
198
+ if (receipt.outcome === "clarify") {
199
+ return {
200
+ schemaVersion: "agentera.route_receipt_result.v1",
201
+ outcome: "clarification",
202
+ question: receipt.question,
203
+ route_provenance: { source: "semantic_receipt", receipt_version: "agentera.route_receipt.v1" },
204
+ };
205
+ }
206
+ const capability = receipt.outcome === "no_match" ? "status" : receipt.capability;
207
+ const startupCommand = preCutoverCommand(`prime --context ${capability} --format json`);
208
+ const span = receipt.remainder_span;
209
+ return {
210
+ schemaVersion: "agentera.route_receipt_result.v1",
211
+ outcome: receipt.outcome === "no_match" ? "status_fallback" : "selected",
212
+ capability,
213
+ ...(span ? { deferred_intent: { remainder_span: span, text: deferredText } } : {}),
214
+ route_provenance: {
215
+ source: "semantic_receipt",
216
+ receipt_version: "agentera.route_receipt.v1",
217
+ startup_command: startupCommand,
218
+ ...(receipt.outcome === "no_match" ? { status_reason: "no_match" } : {}),
219
+ },
220
+ };
221
+ }