agentera 3.0.0-dev.4 → 3.0.0-dev.46

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 (585) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +108 -22
  3. package/bundle/.agentera-npx-bundle.json +1 -1
  4. package/bundle/CHANGELOG.md +1351 -0
  5. package/bundle/DESIGN.md +229 -0
  6. package/bundle/LICENSE +201 -0
  7. package/bundle/README.md +143 -0
  8. package/bundle/UPGRADE.md +236 -0
  9. package/bundle/extract-corpus-parity.json +21 -0
  10. package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
  11. package/bundle/references/adapters/package-publication.json +437 -0
  12. package/bundle/references/adapters/package-registry.yaml +434 -189
  13. package/bundle/references/adapters/package-surface-characterization.md +66 -35
  14. package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
  15. package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
  16. package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
  17. package/bundle/references/adapters/runtime-retired-resources.yaml +333 -0
  18. package/bundle/references/analysis/evidence-tier-authority.yaml +518 -0
  19. package/bundle/references/analysis/verification-policy.yaml +191 -0
  20. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +20 -10
  21. package/bundle/references/artifacts/glossary-entry-contract.yaml +1254 -0
  22. package/bundle/references/artifacts/state-storage-authority.yaml +2982 -0
  23. package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
  24. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +7 -8
  25. package/bundle/references/cli/capability-instruction-contract.yaml +97 -59
  26. package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
  27. package/bundle/references/cli/routing-model.md +155 -0
  28. package/bundle/references/cli/trigger-schema-enrichment.md +147 -0
  29. package/bundle/references/cli/update-channels.yaml +35 -2
  30. package/bundle/references/cli/vocabulary-index.yaml +23 -20
  31. package/bundle/references/cli/vocabulary.md +337 -366
  32. package/bundle/references/meta/retained-reference-authority.yaml +151 -0
  33. package/bundle/registry.json +14 -14
  34. package/bundle/skills/agentera/SKILL.md +218 -408
  35. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +84 -0
  36. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/exit.yaml +2 -2
  37. package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +25 -0
  38. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/validation.yaml +37 -18
  39. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +102 -0
  40. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +6 -5
  41. package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
  42. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +176 -0
  43. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/artifacts.yaml +12 -12
  44. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/exit.yaml +5 -5
  45. package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +16 -0
  46. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/validation.yaml +7 -7
  47. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +51 -0
  48. package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/exit.yaml +2 -2
  49. package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +20 -0
  50. package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +144 -0
  51. package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +80 -0
  52. package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +16 -0
  53. package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/validation.yaml +18 -18
  54. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/artifacts.yaml +18 -18
  55. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/exit.yaml +2 -2
  56. package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +16 -0
  57. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/validation.yaml +9 -9
  58. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +76 -0
  59. package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/exit.yaml +9 -7
  60. package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +23 -0
  61. package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +121 -0
  62. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +66 -0
  63. package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/exit.yaml +2 -2
  64. package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +23 -0
  65. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +121 -0
  66. package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +23 -0
  67. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +6 -5
  68. package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +20 -0
  69. package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +115 -0
  70. package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +24 -0
  71. package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +16 -0
  72. package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/validation.yaml +2 -2
  73. package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +73 -0
  74. package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +22 -0
  75. package/bundle/skills/agentera/capabilities/{hej → status}/schemas/validation.yaml +5 -5
  76. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/artifacts.yaml +16 -16
  77. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/exit.yaml +7 -6
  78. package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +23 -0
  79. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/validation.yaml +18 -20
  80. package/bundle/skills/agentera/capability_schema_contract.yaml +200 -37
  81. package/bundle/skills/agentera/protocol.yaml +31 -31
  82. package/bundle/skills/agentera/route-phrases.yaml +81 -0
  83. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +5 -4
  84. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +40 -22
  85. package/bundle/skills/agentera/schemas/artifacts/design.yaml +5 -4
  86. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +15 -19
  87. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +145 -14
  88. package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +82 -0
  89. package/bundle/skills/agentera/schemas/artifacts/health.yaml +58 -21
  90. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +22 -8
  91. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +421 -33
  92. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +143 -53
  93. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +345 -31
  94. package/bundle/skills/agentera/schemas/artifacts/vision.yaml +3 -3
  95. package/dist/analytics/extractCorpus/cli.js +190 -0
  96. package/dist/analytics/extractCorpus/copilotSessions.js +275 -0
  97. package/dist/analytics/extractCorpus/core.js +392 -0
  98. package/dist/analytics/extractCorpus/corpus.js +167 -0
  99. package/dist/analytics/extractCorpus/coverageAudit.js +260 -0
  100. package/dist/analytics/extractCorpus/cursorSessions.js +425 -0
  101. package/dist/analytics/extractCorpus/evidenceTiers.js +603 -0
  102. package/dist/analytics/extractCorpus/extractCorpusParity.js +105 -0
  103. package/dist/analytics/extractCorpus/filesystemSources.js +118 -0
  104. package/dist/analytics/extractCorpus/index.js +14 -0
  105. package/dist/analytics/extractCorpus/jsonlSessions.js +204 -0
  106. package/dist/analytics/extractCorpus/sqliteCaps.js +43 -0
  107. package/dist/analytics/extractCorpus/sqliteSessions.js +367 -0
  108. package/dist/analytics/extractCorpus/tierReader.js +108 -0
  109. package/dist/analytics/extractCorpus.js +2 -1791
  110. package/dist/analytics/glossaryAdviceResolution.js +166 -0
  111. package/dist/analytics/glossaryInputAcquisition.js +319 -0
  112. package/dist/analytics/personalGlossaryAdmission.js +133 -0
  113. package/dist/analytics/personalGlossaryProfile.js +219 -0
  114. package/dist/analytics/profileSignals.js +211 -0
  115. package/dist/analytics/usageStats.js +169 -42
  116. package/dist/audit/terminologyDrift.js +281 -0
  117. package/dist/bin/agentera.js +3 -2
  118. package/dist/capabilities/audit/instructions.js +16 -0
  119. package/dist/capabilities/build/instructions.js +56 -0
  120. package/dist/capabilities/design/instructions.js +4 -0
  121. package/dist/capabilities/discuss/instructions.js +29 -0
  122. package/dist/capabilities/document/instructions.js +11 -0
  123. package/dist/capabilities/index.js +40 -0
  124. package/dist/capabilities/optimize/instructions.js +14 -0
  125. package/dist/capabilities/orchestrate/instructions.js +40 -0
  126. package/dist/capabilities/plan/instructions.js +32 -0
  127. package/dist/capabilities/profile/instructions.js +70 -0
  128. package/dist/capabilities/research/instructions.js +5 -0
  129. package/dist/capabilities/status/instructions.js +11 -0
  130. package/dist/capabilities/status/startupInstructions.js +34 -0
  131. package/dist/capabilities/vision/instructions.js +4 -0
  132. package/dist/cli/appContext.js +30 -24
  133. package/dist/cli/argvalidate.js +0 -1
  134. package/dist/cli/capabilityContext/benchmark.js +565 -0
  135. package/dist/cli/capabilityContext/bespoke.js +44 -0
  136. package/dist/cli/capabilityContext/build.js +242 -0
  137. package/dist/cli/capabilityContext/closeout.js +233 -0
  138. package/dist/cli/capabilityContext/contract.js +179 -0
  139. package/dist/cli/capabilityContext/evidence.js +463 -0
  140. package/dist/cli/capabilityContext/index.js +3 -0
  141. package/dist/cli/capabilityContext/orchestration.js +131 -0
  142. package/dist/cli/capabilityContext/planState.js +260 -0
  143. package/dist/cli/capabilityContext/progress.js +142 -0
  144. package/dist/cli/capabilityContext/projectVerification.js +409 -0
  145. package/dist/cli/capabilityContext/shared.js +83 -0
  146. package/dist/cli/capabilityContext/slim.js +152 -0
  147. package/dist/cli/capabilityContext/startup.js +150 -0
  148. package/dist/cli/capabilityContext/startupAggregation.js +68 -0
  149. package/dist/cli/capabilityContext/types.js +56 -0
  150. package/dist/cli/capabilityContext.js +1 -2421
  151. package/dist/cli/commands/appHome.js +22 -0
  152. package/dist/cli/commands/capability.js +5 -12
  153. package/dist/cli/commands/compact.js +41 -13
  154. package/dist/cli/commands/doctor.js +127 -97
  155. package/dist/cli/commands/durability.js +81 -0
  156. package/dist/cli/commands/glossaryAdvice.js +138 -0
  157. package/dist/cli/commands/lint.js +26 -44
  158. package/dist/cli/commands/personalGlossary.js +176 -0
  159. package/dist/cli/commands/prime/briefOrientation.js +747 -0
  160. package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
  161. package/dist/cli/commands/prime/bundleStatus.js +190 -0
  162. package/dist/cli/commands/prime/collectEntityOrientation.js +311 -0
  163. package/dist/cli/commands/prime/collectOrientationState.js +212 -0
  164. package/dist/cli/commands/prime/orientationOutput.js +397 -0
  165. package/dist/cli/commands/prime/types.js +1 -0
  166. package/dist/cli/commands/prime/v1Migration.js +38 -0
  167. package/dist/cli/commands/prime.js +80 -558
  168. package/dist/cli/commands/profileGrounding.js +55 -0
  169. package/dist/cli/commands/query.js +78 -53
  170. package/dist/cli/commands/report.js +96 -25
  171. package/dist/cli/commands/route.js +142 -0
  172. package/dist/cli/commands/schema.js +266 -143
  173. package/dist/cli/commands/state/decisions.js +387 -0
  174. package/dist/cli/commands/state/docs.js +70 -0
  175. package/dist/cli/commands/state/experimentRecords.js +151 -0
  176. package/dist/cli/commands/state/experiments.js +14 -0
  177. package/dist/cli/commands/state/get.js +129 -0
  178. package/dist/cli/commands/state/health.js +14 -0
  179. package/dist/cli/commands/state/index.js +16 -0
  180. package/dist/cli/commands/state/list.js +194 -0
  181. package/dist/cli/commands/state/objective.js +25 -0
  182. package/dist/cli/commands/state/plan.js +14 -0
  183. package/dist/cli/commands/state/planTasks.js +154 -0
  184. package/dist/cli/commands/state/plans.js +154 -0
  185. package/dist/cli/commands/state/progress.js +13 -0
  186. package/dist/cli/commands/state/shared.js +14 -0
  187. package/dist/cli/commands/state/todo.js +42 -0
  188. package/dist/cli/commands/state/write.js +434 -0
  189. package/dist/cli/commands/upgrade.js +146 -5
  190. package/dist/cli/commands/upgradeVerify.js +118 -0
  191. package/dist/cli/commands/validate.js +272 -213
  192. package/dist/cli/commands/verify.js +24 -9
  193. package/dist/cli/contracts/bundleStatus.js +1 -0
  194. package/dist/cli/contracts/orientationState.js +1 -0
  195. package/dist/cli/dispatch/argvParser.js +32 -0
  196. package/dist/cli/dispatch/check.js +372 -0
  197. package/dist/cli/dispatch/commands.js +27 -0
  198. package/dist/cli/dispatch/index.js +207 -0
  199. package/dist/cli/dispatch/lifecycle.js +652 -0
  200. package/dist/cli/dispatch/prime.js +139 -0
  201. package/dist/cli/dispatch/projections.js +17 -0
  202. package/dist/cli/dispatch/shared.js +63 -0
  203. package/dist/cli/dispatch/state.js +140 -0
  204. package/dist/cli/dispatch.js +1 -996
  205. package/dist/cli/errors.js +52 -0
  206. package/dist/cli/help.js +390 -43
  207. package/dist/cli/migrationRequired.js +87 -0
  208. package/dist/cli/orientation/attention.js +59 -0
  209. package/dist/cli/orientation/corpusCoverage.js +102 -0
  210. package/dist/cli/orientation.js +444 -173
  211. package/dist/cli/planArtifacts.js +350 -0
  212. package/dist/cli/planEvidence.js +157 -0
  213. package/dist/cli/planLifecycleState.js +36 -0
  214. package/dist/cli/planTaskIndex.js +11 -0
  215. package/dist/cli/preCutoverCommand.js +32 -0
  216. package/dist/cli/prime-blob.js +71 -3
  217. package/dist/cli/profileAcquisition.js +167 -0
  218. package/dist/cli/startupCompletenessContract.js +59 -0
  219. package/dist/cli/stateQuery.js +63 -14
  220. package/dist/cli/structured.js +0 -1
  221. package/dist/cli/todoMarkdown.js +46 -0
  222. package/dist/cli/todoReadinessSelection.js +192 -0
  223. package/dist/cli/todoSeverity.js +18 -0
  224. package/dist/core/atomicWriter.js +20 -0
  225. package/dist/core/developmentChannel.js +1 -0
  226. package/dist/core/developmentInvocation.js +374 -0
  227. package/dist/core/difflib.js +0 -1
  228. package/dist/core/envPaths.js +20 -0
  229. package/dist/core/jsonValue.js +5 -0
  230. package/dist/core/paths.js +0 -1
  231. package/dist/core/pyjson.js +67 -3
  232. package/dist/core/shell.js +4 -0
  233. package/dist/core/skillIdentity.js +23 -0
  234. package/dist/core/sourceRoot.js +9 -12
  235. package/dist/core/text.js +10 -0
  236. package/dist/core/toml.js +0 -1
  237. package/dist/core/yaml.js +8 -1
  238. package/dist/eval/evalSkills.js +30 -26
  239. package/dist/eval/hybridRouteEvaluation.js +155 -0
  240. package/dist/eval/semanticEval.js +43 -20
  241. package/dist/eval/semanticFixtures.js +16 -5
  242. package/dist/hooks/common.js +11 -81
  243. package/dist/hooks/compaction/apply.js +446 -0
  244. package/dist/hooks/compaction/dryRun.js +184 -0
  245. package/dist/hooks/compaction/index.js +22 -0
  246. package/dist/hooks/compaction/parse.js +325 -0
  247. package/dist/hooks/compaction/retention.js +202 -0
  248. package/dist/hooks/compaction/status.js +360 -0
  249. package/dist/hooks/compaction/types.js +5 -0
  250. package/dist/hooks/validateArtifact/agentFacing.js +9 -0
  251. package/dist/hooks/validateArtifact/index.js +92 -0
  252. package/dist/hooks/validateArtifact/markdown.js +145 -0
  253. package/dist/hooks/validateArtifact/schema.js +546 -0
  254. package/dist/hooks/validateArtifact/traversal.js +107 -0
  255. package/dist/hooks/validateArtifact/violations.js +107 -0
  256. package/dist/migrate/v2HandoffManifest.js +452 -0
  257. package/dist/registries/activationContract.js +2 -0
  258. package/dist/registries/activationTuples.js +106 -0
  259. package/dist/registries/artifactProtocolIds.js +78 -0
  260. package/dist/registries/artifactRegistry.js +224 -63
  261. package/dist/registries/artifactSchemaProjection.js +45 -0
  262. package/dist/registries/capabilityContract.js +141 -13
  263. package/dist/registries/evaluatorHandoffContract.js +170 -0
  264. package/dist/registries/evidenceTierContract.js +371 -0
  265. package/dist/registries/glossaryAdviceContract.js +79 -0
  266. package/dist/registries/glossaryCaveatContract.js +67 -0
  267. package/dist/registries/glossaryConsumerContractValidation.js +787 -0
  268. package/dist/registries/glossaryEntryContract.js +757 -0
  269. package/dist/registries/glossaryTermIdentity.js +17 -0
  270. package/dist/registries/glossaryTermOccurrence.js +20 -0
  271. package/dist/registries/hybridRoute.js +274 -0
  272. package/dist/registries/hybridRouteReceipt.js +221 -0
  273. package/dist/registries/packagePublication.js +229 -0
  274. package/dist/registries/packageRegistry.js +187 -211
  275. package/dist/registries/todoReadinessContract.js +448 -0
  276. package/dist/registries/triggerLoader.js +174 -0
  277. package/dist/registries/verbosityBudgetContract.js +205 -0
  278. package/dist/release/releaseMetadata.js +385 -0
  279. package/dist/runtime/lifecycleAdapterContract.js +457 -0
  280. package/dist/runtime/lifecycleAdapters.js +777 -0
  281. package/dist/runtime/lifecycleAuthority.js +453 -0
  282. package/dist/runtime/lifecycleOperationContract.js +123 -0
  283. package/dist/runtime/lifecycleOperations.js +634 -0
  284. package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
  285. package/dist/runtime/lifecyclePublication.js +415 -0
  286. package/dist/runtime/lifecycleSnapshot.js +438 -0
  287. package/dist/runtime/nativeResourceCleanup.js +502 -0
  288. package/dist/setup/opencode.js +20 -0
  289. package/dist/setup/opencodeConstants.js +1 -0
  290. package/dist/setup/sharedSkill.js +45 -0
  291. package/dist/setup/smokeChecks.js +21 -82
  292. package/dist/state/archiveDiscovery.js +580 -0
  293. package/dist/state/archivePublication.js +225 -0
  294. package/dist/state/archiveRecovery.js +237 -0
  295. package/dist/state/archiveReplay.js +53 -0
  296. package/dist/state/canonicalMigrationRecord.js +36 -0
  297. package/dist/state/changelog.js +221 -0
  298. package/dist/state/decisionEntities.js +367 -0
  299. package/dist/state/decisionLegacyValidation.js +215 -0
  300. package/dist/state/decisionMigrationProvenance.js +199 -0
  301. package/dist/state/decisionOverlay.js +254 -0
  302. package/dist/state/decisionRevision.js +256 -0
  303. package/dist/state/decisionRevisionMigration.js +89 -0
  304. package/dist/state/directRetrieval.js +323 -0
  305. package/dist/state/durability.js +324 -0
  306. package/dist/state/entityCutover.js +459 -0
  307. package/dist/state/entityCutoverGit.js +127 -0
  308. package/dist/state/entityGlossaryAuthority.js +13 -0
  309. package/dist/state/entityListProjection.js +187 -0
  310. package/dist/state/entityListRuntimeRegistry.js +85 -0
  311. package/dist/state/entityMigrationCausality.js +97 -0
  312. package/dist/state/entityMigrationIdentity.js +5 -0
  313. package/dist/state/entityMigrationPreview.js +846 -0
  314. package/dist/state/entityMigrationTodo.js +133 -0
  315. package/dist/state/entityPublicationContext.js +806 -0
  316. package/dist/state/entityRetrievalHelp.js +506 -0
  317. package/dist/state/entityStorage.js +896 -0
  318. package/dist/state/exactReplacementRecovery.js +18 -0
  319. package/dist/state/experimentArchive.js +63 -0
  320. package/dist/state/experimentIdentity.js +202 -0
  321. package/dist/state/healthEntities.js +262 -0
  322. package/dist/state/healthEntityValidation.js +18 -0
  323. package/dist/state/healthRepair.js +69 -0
  324. package/dist/state/installRoot.js +64 -25
  325. package/dist/state/legacyEntityCutoverEvidence.js +65 -0
  326. package/dist/state/legacyIdentity.js +47 -0
  327. package/dist/state/legacySummaryRecord.js +6 -0
  328. package/dist/state/listAccounting.js +54 -0
  329. package/dist/state/listClassification.js +17 -0
  330. package/dist/state/listCursor.js +42 -0
  331. package/dist/state/listRetrieval.js +781 -0
  332. package/dist/state/migrationSourceBinding.js +30 -0
  333. package/dist/state/objectiveExperimentEntities.js +322 -0
  334. package/dist/state/planEntities.js +530 -0
  335. package/dist/state/planIdentity.js +47 -0
  336. package/dist/state/planRetrieval.js +313 -0
  337. package/dist/state/planTaskRetrieval.js +294 -0
  338. package/dist/state/progressEntities.js +512 -0
  339. package/dist/state/progressGlossaryCaveat.js +168 -0
  340. package/dist/state/progressPublicationOrder.js +19 -0
  341. package/dist/state/projectRoot.js +62 -0
  342. package/dist/state/projectionPolicy.js +190 -0
  343. package/dist/state/retrievalAuthority.js +156 -0
  344. package/dist/state/safeProjectFile.js +155 -0
  345. package/dist/state/startupAnalysis/benchmark.js +432 -0
  346. package/dist/state/startupAnalysis/contract.js +160 -0
  347. package/dist/state/startupAnalysis/helpers.js +286 -0
  348. package/dist/state/startupAnalysis/index.js +6 -0
  349. package/dist/state/startupAnalysis/metrics.js +340 -0
  350. package/dist/state/startupAnalysis/records.js +198 -0
  351. package/dist/state/startupAnalysis/report.js +111 -0
  352. package/dist/state/startupAnalysis/threshold.js +512 -0
  353. package/dist/state/startupAnalysis.js +2 -1953
  354. package/dist/state/startupProjection.js +499 -0
  355. package/dist/state/stateMode.js +85 -0
  356. package/dist/state/stateStorageAuthority.js +47 -0
  357. package/dist/state/summaryEntityRead.js +25 -0
  358. package/dist/state/summaryMigrationProvenance.js +66 -0
  359. package/dist/state/summarySourceRowAuthority.js +36 -0
  360. package/dist/state/todoDocsEntities.js +1064 -0
  361. package/dist/state/todoDocsEntityValidation.js +158 -0
  362. package/dist/state/todoMarkdownProjection.js +51 -0
  363. package/dist/state/todoReconciliationActivation.js +132 -0
  364. package/dist/state/todoReconciliationInspection.js +173 -0
  365. package/dist/state/todoReconciliationRepair.js +170 -0
  366. package/dist/state/todoReconciliationTransaction.js +582 -0
  367. package/dist/state/write/assign.js +20 -0
  368. package/dist/state/write/candidateMutation.js +269 -0
  369. package/dist/state/write/errors.js +11 -0
  370. package/dist/state/write/experimentPublication.js +192 -0
  371. package/dist/state/write/explain.js +332 -0
  372. package/dist/state/write/fields.js +61 -0
  373. package/dist/state/write/glossaryPublication.js +263 -0
  374. package/dist/state/write/grammar.js +280 -0
  375. package/dist/state/write/helpers.js +29 -0
  376. package/dist/state/write/index.js +12 -0
  377. package/dist/state/write/input.js +367 -0
  378. package/dist/state/write/lock.js +837 -0
  379. package/dist/state/write/mutation.js +234 -0
  380. package/dist/state/write/operations.js +169 -0
  381. package/dist/state/write/planEvaluation.js +128 -0
  382. package/dist/state/write/planPublication.js +179 -0
  383. package/dist/state/write/runtimeOperations.js +142 -0
  384. package/dist/state/write/serialize.js +1 -0
  385. package/dist/state/write/transaction.js +52 -0
  386. package/dist/state/write/validate.js +7 -0
  387. package/dist/upgrade/appContentRefresh.js +383 -0
  388. package/dist/upgrade/appModel.js +8 -7
  389. package/dist/upgrade/atomicWriter.js +1 -0
  390. package/dist/upgrade/bundleEvidence.js +33 -0
  391. package/dist/upgrade/channels.js +12 -8
  392. package/dist/upgrade/compatibility.js +56 -21
  393. package/dist/upgrade/doctor.js +197 -192
  394. package/dist/upgrade/doctorClassifier.js +187 -0
  395. package/dist/upgrade/installedHooksRetirement.js +196 -0
  396. package/dist/upgrade/legacyAgentCleanup.js +282 -0
  397. package/dist/upgrade/lifecycleUpgrade.js +113 -0
  398. package/dist/upgrade/migrateArtifactsV2ToV3.js +367 -149
  399. package/dist/upgrade/migrationPublication.js +122 -0
  400. package/dist/upgrade/nextMajorDoctor.js +155 -0
  401. package/dist/upgrade/npxPlatformStatus.js +22 -0
  402. package/dist/upgrade/projectIntegration.js +145 -187
  403. package/dist/upgrade/projectIntegrationDecision.js +50 -0
  404. package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
  405. package/dist/upgrade/runtimeMigration.js +278 -352
  406. package/dist/upgrade/upgradeCommands.js +14 -1
  407. package/dist/upgrade/upgradeLock.js +85 -0
  408. package/dist/upgrade/upgradeOrchestrator.js +263 -59
  409. package/dist/upgrade/v3CapabilitySurface.js +14 -0
  410. package/dist/upgrade/versionResolution.js +12 -5
  411. package/dist/validate/activationArtifactEvidence.js +844 -0
  412. package/dist/validate/activationConjunction.js +816 -0
  413. package/dist/validate/activationEvidenceManifest.js +515 -0
  414. package/dist/validate/activationPackageSemantics.js +29 -0
  415. package/dist/validate/appHomeContract.js +5 -11
  416. package/dist/validate/bootstrapAuthority.js +44 -0
  417. package/dist/validate/capability.js +144 -15
  418. package/dist/validate/crossCapability.js +15 -10
  419. package/dist/validate/retainedReferenceAuthority.js +879 -0
  420. package/dist/validate/selfAudit.js +73 -37
  421. package/dist/validate/v1LegacyCruft.js +131 -0
  422. package/dist/validate/vocabularyAuthority.js +303 -0
  423. package/package.json +53 -27
  424. package/bundle/references/adapters/cursor.md +0 -213
  425. package/bundle/references/adapters/opencode.md +0 -530
  426. package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
  427. package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
  428. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
  429. package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -548
  430. package/bundle/references/adapters/runtime-feature-parity.md +0 -189
  431. package/bundle/references/analysis/benchmark.md +0 -267
  432. package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
  433. package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
  434. package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -355
  435. package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -278
  436. package/bundle/references/cli/capability-tool-classification.yaml +0 -53
  437. package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
  438. package/bundle/references/meta/documentation-inventory.md +0 -43
  439. package/bundle/references/v1-section-mapping.md +0 -47
  440. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  441. package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
  442. package/bundle/skills/agentera/agents/hej.toml +0 -6
  443. package/bundle/skills/agentera/agents/inspektera.toml +0 -6
  444. package/bundle/skills/agentera/agents/inspirera.toml +0 -6
  445. package/bundle/skills/agentera/agents/optimera.toml +0 -6
  446. package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
  447. package/bundle/skills/agentera/agents/planera.toml +0 -6
  448. package/bundle/skills/agentera/agents/profilera.toml +0 -6
  449. package/bundle/skills/agentera/agents/realisera.toml +0 -6
  450. package/bundle/skills/agentera/agents/resonera.toml +0 -6
  451. package/bundle/skills/agentera/agents/visionera.toml +0 -6
  452. package/bundle/skills/agentera/agents/visualisera.toml +0 -6
  453. package/bundle/skills/agentera/capabilities/dokumentera/instructions.md +0 -428
  454. package/bundle/skills/agentera/capabilities/dokumentera/schemas/artifacts.yaml +0 -73
  455. package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +0 -35
  456. package/bundle/skills/agentera/capabilities/hej/instructions.md +0 -331
  457. package/bundle/skills/agentera/capabilities/hej/schemas/artifacts.yaml +0 -69
  458. package/bundle/skills/agentera/capabilities/hej/schemas/triggers.yaml +0 -58
  459. package/bundle/skills/agentera/capabilities/inspektera/instructions.md +0 -514
  460. package/bundle/skills/agentera/capabilities/inspektera/schemas/artifacts.yaml +0 -76
  461. package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +0 -38
  462. package/bundle/skills/agentera/capabilities/inspirera/instructions.md +0 -280
  463. package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +0 -24
  464. package/bundle/skills/agentera/capabilities/inspirera/schemas/triggers.yaml +0 -34
  465. package/bundle/skills/agentera/capabilities/optimera/instructions.md +0 -437
  466. package/bundle/skills/agentera/capabilities/optimera/schemas/triggers.yaml +0 -39
  467. package/bundle/skills/agentera/capabilities/orkestrera/instructions.md +0 -433
  468. package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +0 -64
  469. package/bundle/skills/agentera/capabilities/orkestrera/schemas/triggers.yaml +0 -42
  470. package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +0 -107
  471. package/bundle/skills/agentera/capabilities/planera/instructions.md +0 -368
  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/instructions.md +0 -419
  476. package/bundle/skills/agentera/capabilities/profilera/schemas/artifacts.yaml +0 -18
  477. package/bundle/skills/agentera/capabilities/profilera/schemas/triggers.yaml +0 -45
  478. package/bundle/skills/agentera/capabilities/profilera/schemas/validation.yaml +0 -57
  479. package/bundle/skills/agentera/capabilities/realisera/instructions.md +0 -403
  480. package/bundle/skills/agentera/capabilities/realisera/schemas/artifacts.yaml +0 -80
  481. package/bundle/skills/agentera/capabilities/realisera/schemas/triggers.yaml +0 -39
  482. package/bundle/skills/agentera/capabilities/realisera/schemas/validation.yaml +0 -110
  483. package/bundle/skills/agentera/capabilities/resonera/instructions.md +0 -329
  484. package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +0 -47
  485. package/bundle/skills/agentera/capabilities/resonera/schemas/triggers.yaml +0 -46
  486. package/bundle/skills/agentera/capabilities/resonera/schemas/validation.yaml +0 -77
  487. package/bundle/skills/agentera/capabilities/visionera/instructions.md +0 -309
  488. package/bundle/skills/agentera/capabilities/visionera/schemas/triggers.yaml +0 -41
  489. package/bundle/skills/agentera/capabilities/visualisera/instructions.md +0 -400
  490. package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +0 -33
  491. package/bundle/skills/agentera/references/contract.md +0 -1039
  492. package/bundle/skills/hej/.claude-plugin/plugin.json +0 -6
  493. package/bundle/skills/hej/SKILL.md +0 -69
  494. package/bundle/skills/hej/agents/hej.toml +0 -11
  495. package/bundle/skills/hej/agents/openai.yaml +0 -8
  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/cli/appContext.js.map +0 -1
  500. package/dist/cli/argvalidate.js.map +0 -1
  501. package/dist/cli/capabilityContext.js.map +0 -1
  502. package/dist/cli/commands/backfill.js +0 -84
  503. package/dist/cli/commands/backfill.js.map +0 -1
  504. package/dist/cli/commands/capability.js.map +0 -1
  505. package/dist/cli/commands/compact.js.map +0 -1
  506. package/dist/cli/commands/doctor.js.map +0 -1
  507. package/dist/cli/commands/lint.js.map +0 -1
  508. package/dist/cli/commands/prime.js.map +0 -1
  509. package/dist/cli/commands/query.js.map +0 -1
  510. package/dist/cli/commands/report.js.map +0 -1
  511. package/dist/cli/commands/schema.js.map +0 -1
  512. package/dist/cli/commands/state.js +0 -1012
  513. package/dist/cli/commands/state.js.map +0 -1
  514. package/dist/cli/commands/upgrade.js.map +0 -1
  515. package/dist/cli/commands/validate.js.map +0 -1
  516. package/dist/cli/commands/verify.js.map +0 -1
  517. package/dist/cli/dispatch.js.map +0 -1
  518. package/dist/cli/help.js.map +0 -1
  519. package/dist/cli/orientation.js.map +0 -1
  520. package/dist/cli/prime-blob.js.map +0 -1
  521. package/dist/cli/stateQuery.js.map +0 -1
  522. package/dist/cli/structured.js.map +0 -1
  523. package/dist/core/difflib.js.map +0 -1
  524. package/dist/core/git.js +0 -43
  525. package/dist/core/git.js.map +0 -1
  526. package/dist/core/paths.js.map +0 -1
  527. package/dist/core/pyjson.js.map +0 -1
  528. package/dist/core/sourceRoot.js.map +0 -1
  529. package/dist/core/toml.js.map +0 -1
  530. package/dist/core/yaml.js.map +0 -1
  531. package/dist/eval/evalSkills.js.map +0 -1
  532. package/dist/eval/semanticEval.js.map +0 -1
  533. package/dist/eval/semanticFixtures.js.map +0 -1
  534. package/dist/hooks/common.js.map +0 -1
  535. package/dist/hooks/compaction.js +0 -935
  536. package/dist/hooks/compaction.js.map +0 -1
  537. package/dist/hooks/cursorPreToolUse.js +0 -19
  538. package/dist/hooks/cursorPreToolUse.js.map +0 -1
  539. package/dist/hooks/cursorSessionStart.js +0 -71
  540. package/dist/hooks/cursorSessionStart.js.map +0 -1
  541. package/dist/hooks/sessionStart.js +0 -209
  542. package/dist/hooks/sessionStart.js.map +0 -1
  543. package/dist/hooks/sessionStop.js +0 -212
  544. package/dist/hooks/sessionStop.js.map +0 -1
  545. package/dist/hooks/validateArtifact.js +0 -933
  546. package/dist/hooks/validateArtifact.js.map +0 -1
  547. package/dist/registries/artifactRegistry.js.map +0 -1
  548. package/dist/registries/capabilityContract.js.map +0 -1
  549. package/dist/registries/packageRegistry.js.map +0 -1
  550. package/dist/registries/runtimeAdapterRegistry.js +0 -315
  551. package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
  552. package/dist/setup/codex.js +0 -1056
  553. package/dist/setup/codex.js.map +0 -1
  554. package/dist/setup/copilot.js +0 -227
  555. package/dist/setup/copilot.js.map +0 -1
  556. package/dist/setup/cursor.js +0 -127
  557. package/dist/setup/cursor.js.map +0 -1
  558. package/dist/setup/doctor.js +0 -1297
  559. package/dist/setup/doctor.js.map +0 -1
  560. package/dist/setup/smokeChecks.js.map +0 -1
  561. package/dist/state/installRoot.js.map +0 -1
  562. package/dist/state/progressCommit.js +0 -289
  563. package/dist/state/progressCommit.js.map +0 -1
  564. package/dist/state/startupAnalysis.js.map +0 -1
  565. package/dist/upgrade/appModel.js.map +0 -1
  566. package/dist/upgrade/channels.js.map +0 -1
  567. package/dist/upgrade/compatibility.js.map +0 -1
  568. package/dist/upgrade/doctor.js.map +0 -1
  569. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -571
  570. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
  571. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
  572. package/dist/upgrade/projectIntegration.js.map +0 -1
  573. package/dist/upgrade/runtimeMigration.js.map +0 -1
  574. package/dist/upgrade/upgradeCommands.js.map +0 -1
  575. package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
  576. package/dist/upgrade/versionResolution.js.map +0 -1
  577. package/dist/validate/appHomeContract.js.map +0 -1
  578. package/dist/validate/capability.js.map +0 -1
  579. package/dist/validate/crossCapability.js.map +0 -1
  580. package/dist/validate/lifecycleAdapters.js +0 -772
  581. package/dist/validate/lifecycleAdapters.js.map +0 -1
  582. package/dist/validate/selfAudit.js.map +0 -1
  583. /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
  584. /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
  585. /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
@@ -0,0 +1,438 @@
1
+ schema_version: agentera.hybrid_route_contract.v3
2
+ status: normative
3
+ purpose: >-
4
+ Define the portable, two-phase request-to-capability route contract. The CLI
5
+ implements deterministic resolution and receipt validation; the host supplies
6
+ open-ended semantic judgment only after deterministic abstention.
7
+ ownership:
8
+ cli: >-
9
+ The CLI owns request validation, deterministic terminal selections, receipt
10
+ validation, and all startup authorization.
11
+ host: >-
12
+ The portable shared skill is the only host integration. A host may make a
13
+ semantic judgment only after semantic_required and must submit a receipt.
14
+ prohibited: [runtime_specific_adapter, host_bypasses_receipt_validation]
15
+ phrase_registry: skills/agentera/route-phrases.yaml
16
+ semantic_intent: references/cli/trigger-schema-enrichment.md
17
+ evaluation_corpus: fixtures/routing/hybrid-corpus.yaml
18
+
19
+ protocol:
20
+ request:
21
+ version: agentera.route_request.v1
22
+ required_fields: [request]
23
+ request: >-
24
+ The transient, unmodified user message. It is accepted for routing and is
25
+ never persisted by this protocol.
26
+ cli_seam:
27
+ command: npx -y agentera@next route request --input PATH --format json
28
+ input: >-
29
+ A YAML or JSON mapping supplied by --input PATH or --input -. The request
30
+ field is never accepted in argv; --input - reads it from stdin.
31
+ output: >-
32
+ The versioned route response is emitted as JSON on stdout. Diagnostics do
33
+ not include request or topic text, and routing writes no state or report.
34
+ exit_codes: { ok: 0, invalid_input: 2, authority_conflict: 2 }
35
+ response:
36
+ version: agentera.route_response.v1
37
+ outcomes: [deterministic_selection, semantic_required]
38
+ deterministic_selection:
39
+ required_fields: [capability, tier, recognized_span, topic_span, provenance]
40
+ tiers: [bare, direct, phrase]
41
+ semantic_required:
42
+ required_fields: [request_sha256, semantic_capsule, semantic_capsule_sha256, receipt_contract, provenance]
43
+ semantic_capsule: >-
44
+ The active trigger intent documentation and contract version needed for
45
+ a host judgment. It contains no state-derived next_action and no raw
46
+ request text beyond the host's transient input.
47
+ semantic_capsule_sha256: >-
48
+ SHA-256 of the contract-owned canonical JSON representation of exactly
49
+ semantic_capsule. The host returns this value unchanged in its receipt.
50
+ semantic_capsule_canonicalization:
51
+ source: semantic_capsule
52
+ serialization: >-
53
+ UTF-8 JSON with recursively lexicographically sorted object keys and
54
+ no insignificant whitespace; array order is the order presented in
55
+ semantic_capsule.
56
+ included_inputs: [contract_version, capabilities, capability, triggers, id, description, priority, disambiguates_against, hint]
57
+ excluded_inputs: [request, request_sha256, provenance, diagnostics, next_action, phrase_registry, raw_trigger_matchers]
58
+ binding: >-
59
+ The digest binds the bounded classification inputs presented to the
60
+ host, not route diagnostics, state, private raw request duplication,
61
+ or any authority the host did not see.
62
+ receipt_contract:
63
+ schema_version: agentera.route_receipt_contract.v1
64
+ purpose: >-
65
+ A self-describing semantic-receipt guide returned only with deterministic
66
+ abstention. It contains the exact nullable receipt schema, legal outcomes,
67
+ nullability, compound and span rules, and one current stdin round trip.
68
+ stdin_command: npx -y agentera@next route receipt --input - --format json
69
+ input_schema:
70
+ type: object
71
+ additionalProperties: false
72
+ required: [request, receipt]
73
+ properties:
74
+ request: { type: string }
75
+ receipt: { $ref: '#/nullable_schema' }
76
+ stdin_example:
77
+ request: make implementation plan
78
+ receipt:
79
+ outcome: select
80
+ capability: plan
81
+ compound: none
82
+ question: null
83
+ remainder_span: null
84
+ receipt:
85
+ version: agentera.route_receipt.v1
86
+ required_fields: [version, request_sha256, semantic_capsule_sha256, outcome]
87
+ cli_seam:
88
+ command: npx -y agentera@next route receipt --input PATH --format json
89
+ input: >-
90
+ A YAML or JSON mapping supplied by --input PATH or --input -. It has the
91
+ transient original request in request and the complete nullable host output
92
+ in receipt. Neither field is accepted in argv or persisted.
93
+ output: >-
94
+ JSON startup authorization only: selected capability, one clarification,
95
+ or explicit status fallback. A preserved remainder includes its exact span
96
+ and transient text for the receiving host; diagnostics never echo input.
97
+ exit_codes: { ok: 0, invalid_input: 2, invalid_receipt: 64 }
98
+ outcomes: [select, clarify, no_match]
99
+ select:
100
+ required_fields: [capability, compound]
101
+ forbidden_fields: [question]
102
+ clarify:
103
+ required_fields: [question]
104
+ forbidden_fields: [capability, compound, remainder_span]
105
+ no_match:
106
+ forbidden_fields: [capability, question, compound, remainder_span]
107
+ validation_authority:
108
+ name: agentera.route_receipt_schema.v1
109
+ dialect: json_schema_draft_2020_12
110
+ canonical_capability_source: &canonical_capability_source skills/agentera/capability_schema_contract.yaml#route_aliases.primary_aliases
111
+ request_binding: sha256_of_original_utf8_request_bytes
112
+ semantic_capsule_binding: sha256_of_canonical_semantic_required.semantic_capsule
113
+ request_bound_fields:
114
+ remainder_span:
115
+ encoding: utf8_bytes
116
+ relation: 0 <= start < end = original_request_utf8_byte_length
117
+ exact_suffix: >-
118
+ start and end are UTF-8 code-point boundaries. The suffix bytes decode
119
+ with fatal UTF-8 handling and are returned unchanged, without
120
+ truncation or replacement characters.
121
+ schema: &agentera_route_receipt_schema
122
+ type: object
123
+ additionalProperties: false
124
+ required: [version, request_sha256, semantic_capsule_sha256, outcome]
125
+ properties:
126
+ version: { const: agentera.route_receipt.v1 }
127
+ request_sha256: { type: string, pattern: '^[a-f0-9]{64}$' }
128
+ semantic_capsule_sha256: { type: string, pattern: '^[a-f0-9]{64}$' }
129
+ outcome: { enum: [select, clarify, no_match] }
130
+ capability: { type: string }
131
+ compound: { enum: [none, preserve] }
132
+ question: { type: string, minLength: 1, maxLength: 280 }
133
+ remainder_span:
134
+ type: object
135
+ additionalProperties: false
136
+ required: [start, end]
137
+ properties:
138
+ start: { type: integer, minimum: 0 }
139
+ end: { type: integer, minimum: 0 }
140
+ allOf:
141
+ - if: { properties: { outcome: { const: select } }, required: [outcome] }
142
+ then:
143
+ required: [capability, compound]
144
+ not: { required: [question] }
145
+ - if: { properties: { outcome: { const: clarify } }, required: [outcome] }
146
+ then:
147
+ required: [question]
148
+ allOf:
149
+ - not: { required: [capability] }
150
+ - not: { required: [compound] }
151
+ - not: { required: [remainder_span] }
152
+ - if: { properties: { outcome: { const: no_match } }, required: [outcome] }
153
+ then:
154
+ allOf:
155
+ - not: { required: [capability] }
156
+ - not: { required: [question] }
157
+ - not: { required: [compound] }
158
+ - not: { required: [remainder_span] }
159
+ - if:
160
+ properties: { outcome: { const: select }, compound: { const: preserve } }
161
+ required: [outcome, compound]
162
+ then: { required: [remainder_span] }
163
+ - if:
164
+ properties: { outcome: { const: select }, compound: { const: none } }
165
+ required: [outcome, compound]
166
+ then: { not: { required: [remainder_span] } }
167
+ host_output_shape:
168
+ name: agentera_route_receipt
169
+ purpose: >-
170
+ The portable nullable host receipt shape. It validates the complete
171
+ receipt object only; the CLI receipt schema remains authoritative for
172
+ outcome relationships, request binding, and capability authorization.
173
+ canonical_capability_values_source: *canonical_capability_source
174
+ schema: &agentera_route_receipt_host_schema
175
+ type: object
176
+ additionalProperties: false
177
+ required: [version, request_sha256, semantic_capsule_sha256, outcome, capability, compound, question, remainder_span]
178
+ properties:
179
+ version: { type: string, enum: [agentera.route_receipt.v1] }
180
+ request_sha256: { type: string, pattern: '^[a-f0-9]{64}$' }
181
+ semantic_capsule_sha256: { type: string, pattern: '^[a-f0-9]{64}$' }
182
+ outcome: { type: string, enum: [select, clarify, no_match] }
183
+ capability:
184
+ type: [string, "null"]
185
+ enum: [status, vision, discuss, research, plan, build, optimize, audit, document, profile, design, orchestrate, null]
186
+ compound:
187
+ type: [string, "null"]
188
+ enum: [none, preserve, null]
189
+ question: { type: [string, "null"], maxLength: 280 }
190
+ remainder_span:
191
+ type: [object, "null"]
192
+ additionalProperties: false
193
+ required: [start, end]
194
+ properties:
195
+ start: { type: integer }
196
+ end: { type: integer }
197
+ host_to_cli_normalization:
198
+ name: agentera.route_receipt_host_to_cli.v1
199
+ purpose: >-
200
+ Project the host-required nullable shape into the authoritative CLI
201
+ receipt shape without changing any non-null value.
202
+ input:
203
+ first_step: >-
204
+ Validate the unmodified host receipt against host_output_shape.schema.
205
+ Reject it on any host-shape failure before projecting any field.
206
+ accepted_keys: [version, request_sha256, semantic_capsule_sha256, outcome, capability, compound, question, remainder_span]
207
+ projection:
208
+ operation: >-
209
+ Copy every non-null field unchanged, including its exact string bytes
210
+ and numeric values; remove only a null field listed as inapplicable by
211
+ the matching outcome rule.
212
+ outcome_rules:
213
+ select:
214
+ required_non_null: [version, request_sha256, semantic_capsule_sha256, outcome, capability, compound]
215
+ removable_nulls:
216
+ question: always
217
+ remainder_span: when_compound_none
218
+ clarify:
219
+ required_non_null: [version, request_sha256, semantic_capsule_sha256, outcome, question]
220
+ removable_nulls:
221
+ capability: always
222
+ compound: always
223
+ remainder_span: always
224
+ no_match:
225
+ required_non_null: [version, request_sha256, semantic_capsule_sha256, outcome]
226
+ removable_nulls:
227
+ capability: always
228
+ compound: always
229
+ question: always
230
+ remainder_span: always
231
+ rejection:
232
+ unsupported_key: reject
233
+ unexpected_null: reject
234
+ projection_bypass: reject
235
+ downstream_validation: >-
236
+ Pass only the projected receipt to agentera.route_receipt_schema.v1, then
237
+ rerun deterministic routing against the supplied request and source
238
+ authority, require semantic_required with the same request digest and
239
+ semantic_capsule_sha256, then apply canonical-capability, request-digest,
240
+ semantic-capsule, span, and startup-authorization checks. Normalization
241
+ does not authorize startup and does not weaken any CLI cross-field rule.
242
+ request_binding: >-
243
+ The host sends the original request transiently beside the receipt. The
244
+ CLI recomputes SHA-256 over its UTF-8 bytes and requires an exact match to
245
+ request_sha256. No session, nonce, or receipt is stored.
246
+ validation_result:
247
+ terminal_outcomes: [selected, clarification, status_fallback, invalid_receipt]
248
+ startup_authorization:
249
+ selected: selected capability only
250
+ clarification: none
251
+ status_fallback: status only
252
+ invalid_receipt: none
253
+ invalid_receipt_exit: 64
254
+ result_schema:
255
+ version: agentera.route_receipt_result.v1
256
+ selected: >-
257
+ Emits the selected canonical capability, bounded semantic-receipt
258
+ provenance, and npx -y agentera@next prime --context <capability> --format json as
259
+ the existing startup path. It authorizes that capability only.
260
+ clarification: >-
261
+ Emits exactly one validated question and semantic-receipt provenance; it
262
+ authorizes no startup.
263
+ status_fallback: >-
264
+ Emits status with status_reason no_match and the existing status startup
265
+ path. It is not a readiness classification.
266
+
267
+ precedence:
268
+ - order: 1
269
+ name: bare
270
+ condition: /agentera with no additional text
271
+ response: deterministic_selection
272
+ capability: status
273
+ tier: bare
274
+ - order: 2
275
+ name: direct
276
+ condition: >-
277
+ An explicit canonical capability name, or a primary alias, before any
278
+ topic under the existing direct-route grammar.
279
+ response: deterministic_selection
280
+ tier: direct
281
+ - order: 3
282
+ name: curated_phrase
283
+ condition: >-
284
+ A globally unique active phrase from the phrase registry exactly matches
285
+ the normalized leading token sequence.
286
+ response: deterministic_selection
287
+ tier: phrase
288
+ - order: 4
289
+ name: deterministic_abstention
290
+ condition: Any request not selected by orders 1 through 3.
291
+ response: semantic_required
292
+ rule: >-
293
+ The deterministic tier does not infer meaning, score candidates, match
294
+ substrings, or use regexes, thresholds, bands, state, or next_action.
295
+ - order: 5
296
+ name: semantic_receipt
297
+ condition: A valid receipt for a semantic_required response.
298
+ response: select, clarify, or no_match as validated below
299
+
300
+ receipt_semantics:
301
+ select:
302
+ result: selected
303
+ startup: The selected capability starts after validation.
304
+ clarify:
305
+ result: clarification
306
+ startup: No capability starts; the host asks exactly the supplied question.
307
+ no_match:
308
+ result: status_fallback
309
+ startup: Status starts for orientation only, after validation.
310
+ invalid_receipt:
311
+ result: invalid_receipt
312
+ startup: No capability starts; return a bounded correction naming the invalid field.
313
+
314
+ compound_intent:
315
+ principle: >-
316
+ A route selects at most one capability. Remainder is preserved and is never
317
+ silently chained, dispatched, or executed.
318
+ deterministic: >-
319
+ A direct or phrase route passes its exact topic_span to the selected
320
+ capability without classifying it as a follow-on request.
321
+ semantic:
322
+ dispositions: [none, preserve]
323
+ clarification: >-
324
+ clarify is a receipt outcome only, never a compound disposition. It is used
325
+ when one primary capability cannot safely be named.
326
+ preserve: >-
327
+ A select receipt with compound=preserve MUST include a non-empty
328
+ remainder_span inside the original request. The CLI carries that exact
329
+ original slice as deferred intent; it does not start another capability.
330
+ clarify: >-
331
+ Independent or consequential requests that cannot safely name one primary
332
+ capability require a clarify receipt, not a select receipt.
333
+
334
+ phrase_matching:
335
+ comparison_view: >-
336
+ Decode the request as valid UTF-8, then split it into source tokens at
337
+ Unicode whitespace. Apply Unicode NFKC and locale-independent Unicode case
338
+ folding to each source-token comparison segment; join phrase segments with
339
+ one ASCII space. The final source token may be partitioned at its first
340
+ permitted separator; only its prefix participates in phrase comparison.
341
+ leading_only: >-
342
+ The registry phrase must equal the first normalized comparison-token
343
+ sequence. For every source token except the final phrase token, the whole
344
+ normalized token must match. The final phrase token either matches whole or
345
+ ends immediately before its first permitted separator. A permitted separator
346
+ is a source code point whose NFKC form is exactly `:`, `-`, or `—`; it is
347
+ not consumed and need not be followed by whitespace. No other attached
348
+ punctuation terminates a token. Quotation, negation, a phrase later in a
349
+ sentence, and a partial token abstain.
350
+ recognized_span: >-
351
+ Return half-open UTF-8 byte offsets from the first matched source token
352
+ through the final matched-token prefix. The exact original bytes between
353
+ source tokens, including whitespace, belong to this span; leading whitespace
354
+ and a separator do not. Decoding that byte slice reproduces the recognized
355
+ text exactly.
356
+ topic_span: >-
357
+ The topic is the exact original UTF-8 byte slice from recognized_span.end to
358
+ request_byte_length. It begins at the permitted separator when one ended the
359
+ final phrase token, otherwise at the end of that token. It preserves every
360
+ separator, whitespace character, and remainder byte; it is not normalized,
361
+ trimmed, or interpreted.
362
+ example:
363
+ request: " HELP\tME decide: migrate the store"
364
+ normalized_leading_phrase: help me decide
365
+ recognized_span: { utf8_start: 2, utf8_end: 16, text: "HELP\tME decide" }
366
+ topic_span: { utf8_start: 16, utf8_end: 35, text: ": migrate the store" }
367
+
368
+ phrase_ownership:
369
+ active_phrase_source: skills/agentera/route-phrases.yaml
370
+ collision_rule: >-
371
+ Every normalized phrase is globally unique across every registry entry,
372
+ including deprecated entries. A collision fails validation; precedence must
373
+ never choose a phrase owner.
374
+ direct_route_rule: >-
375
+ A phrase must not duplicate a canonical capability name or primary alias and
376
+ must not begin with one under the direct-route grammar. Direct routes always
377
+ retain order-2 precedence.
378
+ trigger_rule: >-
379
+ Trigger descriptions are semantic documentation only. They neither create
380
+ phrase ownership nor alter phrase precedence.
381
+
382
+ privacy:
383
+ default_persistence: forbidden
384
+ transient_data: [request, topic, receipt, request_sha256, semantic_capsule_sha256]
385
+ retained_evaluation_evidence: >-
386
+ Retain only corpus version, case ID, partition, expected and observed
387
+ outcome, capability ID, tier, timing, model profile, and aggregate metrics.
388
+ Do not retain raw private request text, topic text, receipt question, or
389
+ semantic rationale by default.
390
+ permitted_corpus_text: >-
391
+ Frozen corpus text is synthetic or explicitly consented, and each corpus
392
+ declares its text provenance. Private production prompts are never imported.
393
+
394
+ evaluation:
395
+ conformance_owner: packages/cli/test/registries/hybridRouteContract.test.ts
396
+ visible_corpus_entrypoint: npx -y agentera@next route evaluate --format json
397
+ visible_corpus_exit_codes: { pass: 0, failed_evaluation: 1, authority_conflict: 2 }
398
+ visible_corpus_output: >-
399
+ agentera.hybrid_route_evaluation.v1 reports only case IDs, partitions,
400
+ expected/observed outcomes, routing tier, capability ID, timings, authority
401
+ hashes, and aggregate metrics. It never writes a report or emits request,
402
+ topic, receipt-question, or rationale text.
403
+ corpus_partitions: { development: frozen, adversarial: frozen }
404
+ corpus_scope: >-
405
+ The frozen synthetic development and adversarial corpus is the sole
406
+ implementation conformance corpus. It has no hidden, sealed, or vendor-host
407
+ companion corpus.
408
+ semantic_host: >-
409
+ A host may make the semantic judgment and submit the portable nullable host
410
+ receipt shape. Host selection, model quality, and latency are host-dependent
411
+ and unmeasured by this offline evaluator; no host invocation is required.
412
+ local_latency_caveat: >-
413
+ Deterministic and receipt-validation p95 values are run-specific local
414
+ conformance measurements, not semantic-host or end-to-end latency claims.
415
+ target_gates:
416
+ deterministic_phase1_p95: 25_ms
417
+ receipt_validation_p95: 25_ms
418
+ harmful_misroutes: 0
419
+ deterministic_fixture_accuracy: 100_percent
420
+ harmful_misroute_taxonomy:
421
+ - wrong_capability_starts_a_state_changing_or_destructive_flow
422
+ - a_compound_remainder_is_executed_or_chained_without_user_consent
423
+ - a_no_match_or_clarify_request_starts_non_status_work
424
+ - private_request_text_is_persisted_or_exported
425
+ execution_status: >-
426
+ Offline implementation acceptance requires frozen deterministic and
427
+ receipt-validation conformance only. The visible corpus proves protocol
428
+ conformance, not semantic generalization. Semantic host quality and latency
429
+ are explicitly unmeasured and do not block implementation acceptance.
430
+
431
+ deprecations:
432
+ decision_76: >-
433
+ Superseded by Decision mpulyomlyl only for the order-3 curated literal fast
434
+ path. Decision 76 continues to assign open-ended language and ambiguity
435
+ judgment to the LLM host; legacy trigger patterns, regexes, scores,
436
+ thresholds, and bands stay retired.
437
+ legacy_matchers: prohibited_from_active_routing
438
+ route_contract_changes: Require a new schema_version and a new frozen corpus version.
@@ -0,0 +1,155 @@
1
+ # Hybrid routing model
2
+
3
+ The portable shared skill and CLI use one hybrid cascade. Explicit routes and
4
+ curated, globally unique literal phrases provide deterministic tiers; open-ended
5
+ language remains host-owned. The normative protocol is
6
+ [`hybrid-route-contract.yaml`](./hybrid-route-contract.yaml); this page is a
7
+ reader-oriented model, not a second contract.
8
+
9
+ Decision 76 remains in force for natural-language judgment. Decision mpulyomlyl supersedes it only for the curated literal fast path: there is still no scoring engine, no confidence threshold, and no borderline band. Legacy trigger patterns, regexes, thresholds, and bands do not route requests.
10
+
11
+ ## Cascade and precedence
12
+
13
+ 1. **Bare `/agentera`.** With no added text, select status deterministically.
14
+ 2. **Explicit direct route.** A canonical capability name or primary alias uses
15
+ the established direct-route grammar and passes its remaining text as topic.
16
+ 3. **Curated leading phrase.** Match one active phrase from
17
+ [`skills/agentera/route-phrases.yaml`](../../skills/agentera/route-phrases.yaml)
18
+ only when it is the exact normalized leading phrase. It selects that phrase's
19
+ sole owner and preserves the original remainder as topic.
20
+ 4. **Deterministic abstention.** Every other request returns
21
+ `semantic_required`. This tier never guesses from trigger prose, substrings,
22
+ regexes, scores, thresholds, bands, state, or `next_action`.
23
+ 5. **Validated semantic receipt.** The host makes an LLM-native semantic
24
+ judgment and submits `select`, `clarify`, or `no_match`; the CLI validates it
25
+ before capability startup. `select` starts one selected capability, `clarify` starts none, and `no_match` must route to status for orientation only after no capability matches.
26
+
27
+ The direct grammar has precedence over phrase matching. A phrase collision is a
28
+ registry validation error, not a tie to resolve at runtime.
29
+
30
+ ## Phase one: route request
31
+
32
+ `agentera.route_request.v1` takes the transient original request. Its response
33
+ is exactly one of:
34
+
35
+ - `deterministic_selection`: a `bare`, `direct`, or `phrase` selection with
36
+ capability, provenance, recognized span, and topic span.
37
+ - `semantic_required`: a request digest, semantic intent capsule, and canonical
38
+ capsule digest. It does not start a capability.
39
+
40
+ The request itself is not persisted. The semantic capsule contains active
41
+ trigger `description`, `priority`, and `disambiguates_against` documentation,
42
+ not executable matcher inputs. Its digest is SHA-256 over contract-owned
43
+ canonical JSON (recursively sorted object keys, no insignificant whitespace,
44
+ and the presented array order) for exactly that capsule. It excludes private
45
+ request text, request digests, diagnostics, state, and matcher authorities the
46
+ host did not see.
47
+
48
+ ## Phase two: semantic receipt
49
+
50
+ For `semantic_required`, the host sends the same transient original request and
51
+ the complete nullable host receipt to
52
+ `npx -y agentera@next route receipt --input - --format json`. The receipt binds
53
+ to the SHA-256 of the request's UTF-8 bytes and the
54
+ `semantic_capsule_sha256` returned in phase one. The CLI first validates the
55
+ unmodified host shape, removes only contract-listed nulls, then reruns
56
+ deterministic routing and accepts the receipt only when the same request still
57
+ produces `semantic_required` with both bound digests. It then validates the
58
+ projected CLI receipt with canonical-capability binding and request-bound span
59
+ rules:
60
+
61
+ Every `semantic_required` response includes a `receipt_contract` with the exact
62
+ `agentera.route_receipt.v1` nullable schema, legal outcomes, outcome nullability,
63
+ compound and `remainder_span` rules, and a current runnable stdin example. The
64
+ same guide appears in `npx -y agentera@next route receipt --help`; a host does not need to
65
+ inspect implementation or contract files to construct its receipt. The example
66
+ uses a fixed public request, never the transient request being classified.
67
+
68
+ | Receipt | Required result | Startup |
69
+ | --- | --- | --- |
70
+ | `select` | one canonical capability and `none` or `preserve` compound disposition | selected capability only |
71
+ | `clarify` | one non-empty question | none |
72
+ | `no_match` | no capability or question | status only |
73
+ | invalid | bounded field-level correction, exit 64 | none |
74
+
75
+ The resulting `selected` or `status_fallback` authorization contains bounded
76
+ route provenance and the existing
77
+ `npx -y agentera@next prime --context <capability> --format json` startup path.
78
+ A `clarification` contains exactly one bounded
79
+ question and no startup. This is intentionally a shared CLI contract, not a
80
+ runtime-specific adapter. The portable shared skill is the sole host integration
81
+ surface.
82
+
83
+ ## Phrase, span, and topic behavior
84
+
85
+ The phrase registry owns stable IDs, capability ownership, literal phrases,
86
+ global collision detection, and deprecation. Per-capability trigger schemas
87
+ never create phrase ownership. Matching uses the contract's normalized token
88
+ view (Unicode NFKC, case folding, whitespace normalization) while returning
89
+ source UTF-8 byte offsets and exact slices from the original request. A `:`,
90
+ `-`, or `—` that terminates the final phrase token is recognized in the
91
+ comparison view but starts the preserved topic slice; other attached
92
+ punctuation abstains.
93
+
94
+ For example, `HELP\tME decide: migrate the store` recognizes only
95
+ `HELP\tME decide`; its topic is the exact original `: migrate the store`.
96
+ The separator is deliberately preserved. Quoted, negated, later-in-sentence,
97
+ partial, and unregistered wording abstains; it belongs to the semantic phase.
98
+
99
+ ## Selection, ambiguity, and compounds
100
+
101
+ The LLM host owns semantic selection and genuine consequential ambiguity. It
102
+ consults trigger intent documentation, then chooses one of `select`, `clarify`,
103
+ or `no_match`. A compound request never authorizes implicit chaining:
104
+
105
+ - A direct or phrase selection preserves its entire original remainder as one
106
+ topic without interpreting it as follow-on work.
107
+ - A semantic `select` may mark one original, UTF-8 code-point-aligned trailing
108
+ remainder span `preserve`; it is deferred intent, not a second startup.
109
+ `clarify` is an outcome, never a compound disposition.
110
+ - Independent or consequential compound intent uses the `clarify` outcome when
111
+ one primary capability cannot be named safely.
112
+
113
+ `next_action` informs readiness only after classification and cannot override the message intent. It never classifies a request.
114
+
115
+ ## Evaluation and privacy
116
+
117
+ The visible frozen development and adversarial regression data live in
118
+ [`fixtures/routing/hybrid-corpus.yaml`](../../fixtures/routing/hybrid-corpus.yaml).
119
+ They use synthetic or explicitly consented text only and are the sole frozen
120
+ implementation conformance corpus; no sealed holdout, credential, privacy
121
+ approval, or provider-host benchmark is required.
122
+ Retained evaluation evidence contains IDs, partition, outcome, tier,
123
+ capability, timing, and aggregate metrics; private raw request
124
+ text, topic text, receipt questions, and semantic rationale are absent by
125
+ default.
126
+
127
+ The portable host receipt shape has all fields required, using nullable fields
128
+ for outcome-inapplicable values; the bounded host-to-CLI normalization seam first
129
+ validates that unmodified shape, removes only contract-listed nulls, and preserves
130
+ every non-null value unchanged. The CLI schema then separately validates outcome
131
+ relationships, request binding, spans, canonical capabilities, and startup authorization.
132
+ Normalization never authorizes startup or weakens a cross-field rule.
133
+ The evaluator reports separate, run-specific local deterministic and
134
+ receipt-validation p95 values. They prove protocol conformance for this visible
135
+ corpus, not semantic generalization or an end-to-end latency commitment. Semantic
136
+ model quality and latency remain host-dependent and unmeasured; it makes no live
137
+ model calls.
138
+
139
+ ## Ownership boundaries
140
+
141
+ - `references/cli/hybrid-route-contract.yaml` owns protocol, outcome vocabulary,
142
+ precedence, span rules, privacy, evaluation gates, and deprecations.
143
+ - `skills/agentera/route-phrases.yaml` owns the deterministic phrase inventory.
144
+ - `references/cli/trigger-schema-enrichment.md` owns semantic trigger intent
145
+ documentation only.
146
+ - `packages/cli/src/eval/hybridRouteEvaluation.ts` evaluates the frozen offline
147
+ conformance corpus; its tests verify the evaluator and protocol structure.
148
+ - `skills/agentera/SKILL.md` remains the thin portable host integration surface.
149
+
150
+ ## Maintenance
151
+
152
+ - Maintainer: Agentera CLI maintainers
153
+ - Source checkout root: `.`
154
+ - Working directory: `.`
155
+ - Command: `node packages/cli/dist/bin/agentera.js route evaluate --format json`