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

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