agentera 3.0.0-dev.7 → 3.0.0-dev.72

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