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
@@ -2,9 +2,11 @@ import fs from "node:fs";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
4
  import { loadYamlMapping } from "../core/yaml.js";
5
+ import { resolveProfileDirOverride } from "../core/envPaths.js";
5
6
  import { resolvePath } from "../core/paths.js";
6
7
  import { resolveSourceRoot } from "../core/sourceRoot.js";
7
8
  import { resolveCandidate } from "../state/installRoot.js";
9
+ import { ARTIFACT_PROTOCOL_PATHS } from "./artifactProtocolIds.js";
8
10
  function sourceRoot() {
9
11
  return resolveSourceRoot();
10
12
  }
@@ -36,12 +38,11 @@ export function normalizePath(p) {
36
38
  s = s.replace(/<objective-name>/g, "<name>");
37
39
  return s.trim();
38
40
  }
39
- const CONTROL_CHAR_RE = /[\x00-\x1f\x7f]/;
40
41
  const URI_SCHEME_RE = /^[A-Za-z][A-Za-z0-9+.-]*:/;
41
42
  const ENCODED_TRAVERSAL_RE = /%(?:2e|2f|5c)/i;
42
43
  const WINDOWS_DRIVE_RE = /^[A-Za-z]:[\\/]/;
43
44
  function rejectUnsafeArtifactPath(p, artifactId) {
44
- if (CONTROL_CHAR_RE.test(p)) {
45
+ if ([...p].some((char) => char.charCodeAt(0) <= 31 || char.charCodeAt(0) === 127)) {
45
46
  throw new Error(`artifact '${artifactId}' path contains control characters`);
46
47
  }
47
48
  if (ENCODED_TRAVERSAL_RE.test(p)) {
@@ -67,28 +68,141 @@ function projectPath(projectRoot, artifactPath, artifactId) {
67
68
  }
68
69
  return resolved;
69
70
  }
70
- function schemaMetas(dir) {
71
- const metas = new Map();
71
+ export const EXPECTED_ARTIFACT_SCHEMA_VERSION = "1.0.0";
72
+ function readSchemaMeta(file) {
73
+ const meta = loadYaml(file).meta;
74
+ if (!meta || typeof meta !== "object" || Array.isArray(meta)) {
75
+ return null;
76
+ }
77
+ return meta;
78
+ }
79
+ function warnMalformedSchemaMeta(name) {
80
+ process.stderr.write(`warning: artifact schema ${name} is missing meta; expected v3 schema version ${EXPECTED_ARTIFACT_SCHEMA_VERSION}\n`);
81
+ }
82
+ function warnSchemaVersionMismatch(meta, name) {
83
+ const version = String(meta.version ?? "").trim();
84
+ if (!version || version !== EXPECTED_ARTIFACT_SCHEMA_VERSION) {
85
+ const reported = version || "(missing)";
86
+ process.stderr.write(`warning: artifact schema ${name} version ${reported} does not match expected v3 schema version ${EXPECTED_ARTIFACT_SCHEMA_VERSION}\n`);
87
+ }
88
+ }
89
+ function listSchemaFiles(dir) {
72
90
  if (!fs.existsSync(dir) || !fs.statSync(dir).isDirectory()) {
73
- return metas;
91
+ return [];
74
92
  }
75
- const files = fs
93
+ return fs
76
94
  .readdirSync(dir)
77
95
  .filter((name) => name.endsWith(".yaml"))
78
96
  .sort();
79
- for (const name of files) {
80
- const meta = loadYaml(path.join(dir, name)).meta;
81
- if (!meta || typeof meta !== "object" || Array.isArray(meta)) {
97
+ }
98
+ /**
99
+ * Full schema-meta index over an artifact schemas directory. Emits malformed-meta
100
+ * and version-mismatch warnings for every schema file; the full loader relies on
101
+ * this strict coverage to surface drift across the whole identity set.
102
+ */
103
+ function schemaMetas(dir) {
104
+ const metas = new Map();
105
+ for (const name of listSchemaFiles(dir)) {
106
+ const meta = readSchemaMeta(path.join(dir, name));
107
+ if (!meta) {
108
+ warnMalformedSchemaMeta(name);
82
109
  continue;
83
110
  }
84
- const m = meta;
85
- const artifactId = String(m.name ?? "").trim();
111
+ warnSchemaVersionMismatch(meta, name);
112
+ const artifactId = String(meta.name ?? "").trim();
86
113
  if (artifactId) {
87
- metas.set(artifactId, m);
114
+ metas.set(artifactId, meta);
88
115
  }
89
116
  }
90
117
  return metas;
91
118
  }
119
+ /**
120
+ * Targeted schema-meta lookup for a single artifact identity. Walks the schemas
121
+ * directory only to find the file whose `meta.name` matches `artifactId`, and
122
+ * emits warnings only for that schema. Unrelated malformed or version-mismatched
123
+ * schemas in the same directory stay silent so callers resolving a single
124
+ * identity (e.g. `profile`) don't fan out noise across the required-identity set.
125
+ */
126
+ function loadSchemaMetaForArtifact(dir, artifactId) {
127
+ for (const name of listSchemaFiles(dir)) {
128
+ let meta;
129
+ try {
130
+ meta = readSchemaMeta(path.join(dir, name));
131
+ }
132
+ catch {
133
+ continue;
134
+ }
135
+ if (!meta)
136
+ continue;
137
+ if (String(meta.name ?? "").trim() !== artifactId)
138
+ continue;
139
+ warnSchemaVersionMismatch(meta, name);
140
+ return meta;
141
+ }
142
+ return null;
143
+ }
144
+ function findRequiredIdentity(model, artifactId) {
145
+ const identities = (model.required_artifact_identities ?? {});
146
+ for (const [scope, identityList] of Object.entries(identities)) {
147
+ if (!Array.isArray(identityList))
148
+ continue;
149
+ for (const identity of identityList) {
150
+ if (!identity || typeof identity !== "object" || Array.isArray(identity))
151
+ continue;
152
+ const id = identity;
153
+ if (String(id.artifact_id ?? "").trim() === artifactId) {
154
+ return { scope, identity: id };
155
+ }
156
+ }
157
+ }
158
+ return null;
159
+ }
160
+ function findSpecialCase(model, artifactId) {
161
+ const specialCases = (model.explicit_special_cases ?? []);
162
+ for (const special of specialCases) {
163
+ if (!special || typeof special !== "object" || Array.isArray(special))
164
+ continue;
165
+ const sp = special;
166
+ if (String(sp.artifact_id ?? "").trim() === artifactId) {
167
+ return sp;
168
+ }
169
+ }
170
+ return null;
171
+ }
172
+ function buildRequiredRecord(scope, identity, meta) {
173
+ const template = identity.path_template;
174
+ return {
175
+ artifactId: String(identity.artifact_id ?? "").trim(),
176
+ displayName: String(identity.display_name ?? "").trim(),
177
+ defaultPath: normalizePath(String(identity.default_path ?? meta.path ?? "")),
178
+ producers: asSet(meta.producer),
179
+ consumers: asSet(meta.consumers),
180
+ artifactType: String(meta.artifact_type ?? "").trim(),
181
+ scope: String(scope),
182
+ pathTemplate: template && typeof template === "object" && !Array.isArray(template)
183
+ ? template
184
+ : null,
185
+ docsYamlCanOverridePath: true,
186
+ implementationStatus: String(meta.implementation_status ?? "implemented").trim(),
187
+ };
188
+ }
189
+ function buildSpecialCaseRecord(sp) {
190
+ const template = sp.path_template;
191
+ return {
192
+ artifactId: String(sp.artifact_id ?? "").trim(),
193
+ displayName: String(sp.display_name ?? "").trim(),
194
+ defaultPath: normalizePath(String(sp.default_path ?? "")),
195
+ producers: asSet(sp.producers),
196
+ consumers: asSet(sp.consumers),
197
+ artifactType: String(sp.artifact_type ?? "").trim(),
198
+ scope: String(sp.scope ?? "").trim(),
199
+ pathTemplate: template && typeof template === "object" && !Array.isArray(template)
200
+ ? template
201
+ : null,
202
+ docsYamlCanOverridePath: Boolean(sp.docs_yaml_can_override_path),
203
+ implementationStatus: String(sp.implementation_status ?? "implemented").trim(),
204
+ };
205
+ }
92
206
  export function loadArtifactRegistry(artifactSchemasDirPath = artifactSchemasDir(), registryModelPathArg = registryModelPath()) {
93
207
  const model = loadYaml(registryModelPathArg);
94
208
  const metas = schemaMetas(artifactSchemasDirPath);
@@ -104,24 +218,15 @@ export function loadArtifactRegistry(artifactSchemasDirPath = artifactSchemasDir
104
218
  }
105
219
  const id = identity;
106
220
  const artifactId = String(id.artifact_id ?? "").trim();
221
+ if (!artifactId) {
222
+ continue;
223
+ }
107
224
  const meta = metas.get(artifactId);
108
- if (!artifactId || !meta) {
225
+ if (!meta) {
226
+ process.stderr.write(`warning: required artifact identity '${artifactId}' has no matching schema file in ${artifactSchemasDirPath}\n`);
109
227
  continue;
110
228
  }
111
- const template = id.path_template;
112
- records.set(artifactId, {
113
- artifactId,
114
- displayName: String(id.display_name ?? "").trim(),
115
- defaultPath: normalizePath(String(id.default_path ?? meta.path ?? "")),
116
- producers: asSet(meta.producer),
117
- consumers: asSet(meta.consumers),
118
- artifactType: String(meta.artifact_type ?? "").trim(),
119
- scope: String(scope),
120
- pathTemplate: template && typeof template === "object" && !Array.isArray(template)
121
- ? template
122
- : null,
123
- docsYamlCanOverridePath: true,
124
- });
229
+ records.set(artifactId, buildRequiredRecord(scope, id, meta));
125
230
  }
126
231
  }
127
232
  const specialCases = (model.explicit_special_cases ?? []);
@@ -134,73 +239,129 @@ export function loadArtifactRegistry(artifactSchemasDirPath = artifactSchemasDir
134
239
  if (!artifactId) {
135
240
  continue;
136
241
  }
137
- const template = sp.path_template;
138
- records.set(artifactId, {
139
- artifactId,
140
- displayName: String(sp.display_name ?? "").trim(),
141
- defaultPath: normalizePath(String(sp.default_path ?? "")),
142
- producers: asSet(sp.producers),
143
- consumers: asSet(sp.consumers),
144
- artifactType: String(sp.artifact_type ?? "").trim(),
145
- scope: String(sp.scope ?? "").trim(),
146
- pathTemplate: template && typeof template === "object" && !Array.isArray(template)
147
- ? template
148
- : null,
149
- docsYamlCanOverridePath: Boolean(sp.docs_yaml_can_override_path),
150
- });
242
+ records.set(artifactId, buildSpecialCaseRecord(sp));
151
243
  }
152
244
  return records;
153
245
  }
154
- export function loadDocsPathOverrides(projectRoot) {
155
- const docsPath = path.join(projectRoot, ".agentera", "docs.yaml");
156
- if (!fs.existsSync(docsPath)) {
157
- return {};
246
+ /**
247
+ * Targeted lookup of a single artifact record. Resolves against the same
248
+ * model/schema authority as `loadArtifactRegistry` but inspects only the
249
+ * requested identity, so a special case such as `profile` loads without
250
+ * walking or warning about unrelated required schemas. A requested required
251
+ * identity still warns and returns `undefined` when its matching schema file is
252
+ * missing from the schemas directory.
253
+ */
254
+ export function loadArtifactRecord(artifactId, artifactSchemasDirPath = artifactSchemasDir(), registryModelPathArg = registryModelPath()) {
255
+ const model = loadYaml(registryModelPathArg);
256
+ const specialCase = findSpecialCase(model, artifactId);
257
+ if (specialCase) {
258
+ return buildSpecialCaseRecord(specialCase);
259
+ }
260
+ const required = findRequiredIdentity(model, artifactId);
261
+ if (!required) {
262
+ return undefined;
158
263
  }
264
+ const meta = loadSchemaMetaForArtifact(artifactSchemasDirPath, artifactId);
265
+ if (!meta) {
266
+ process.stderr.write(`warning: required artifact identity '${artifactId}' has no matching schema file in ${artifactSchemasDirPath}\n`);
267
+ return undefined;
268
+ }
269
+ return buildRequiredRecord(required.scope, required.identity, meta);
270
+ }
271
+ export function docsPathOverridesFromBytes(bytes, strict = false) {
159
272
  let data;
160
273
  try {
161
- data = loadYamlMapping(fs.readFileSync(docsPath, "utf8"));
274
+ data = loadYamlMapping(bytes.toString());
162
275
  }
163
276
  catch (exc) {
277
+ if (strict)
278
+ throw new Error(`failed to load docs path overrides: ${exc.message}`);
164
279
  process.stderr.write(`warning: failed to load docs path overrides: ${exc.message}\n`);
165
280
  return {};
166
281
  }
167
282
  const mapping = data.mapping;
168
283
  if (!Array.isArray(mapping)) {
284
+ if (strict && mapping !== undefined)
285
+ throw new Error("failed to load docs path overrides: mapping must be a list");
169
286
  return {};
170
287
  }
171
288
  const overrides = {};
172
289
  for (const entry of mapping) {
173
290
  if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
291
+ if (strict)
292
+ throw new Error("failed to load docs path overrides: every mapping entry must be a mapping");
174
293
  continue;
175
294
  }
176
295
  const e = entry;
177
- const artifact = e.artifact;
178
- const p = e.path;
179
- if (typeof artifact === "string" && typeof p === "string") {
180
- overrides[artifact] = p;
181
- }
296
+ if (typeof e.artifact === "string" && typeof e.path === "string")
297
+ overrides[e.artifact] = e.path;
298
+ else if (strict)
299
+ throw new Error("failed to load docs path overrides: every mapping entry requires string artifact and path fields");
182
300
  }
183
301
  return overrides;
184
302
  }
185
- export function resolveArtifactPath(record, projectRoot, activeObjectiveName = null, env = process.env) {
303
+ export function loadDocsPathOverrides(projectRoot, strict = false) {
304
+ const docsPath = path.join(projectRoot, ARTIFACT_PROTOCOL_PATHS.docs);
305
+ if (!fs.existsSync(docsPath)) {
306
+ return {};
307
+ }
308
+ let bytes;
309
+ try {
310
+ bytes = fs.readFileSync(docsPath);
311
+ }
312
+ catch (exc) {
313
+ if (strict)
314
+ throw new Error(`failed to load docs path overrides: ${exc.message}`);
315
+ process.stderr.write(`warning: failed to load docs path overrides: ${exc.message}\n`);
316
+ return {};
317
+ }
318
+ return docsPathOverridesFromBytes(bytes, strict);
319
+ }
320
+ function nearestExistingAncestor(p) {
321
+ let current = p;
322
+ while (!fs.existsSync(current)) {
323
+ const parent = path.dirname(current);
324
+ if (parent === current)
325
+ break;
326
+ current = parent;
327
+ }
328
+ return fs.realpathSync.native(current);
329
+ }
330
+ export function assertRealpathBoundary(projectRoot, artifactPath, artifactId) {
331
+ const projectReal = nearestExistingAncestor(resolvePath(projectRoot));
332
+ const ancestorReal = nearestExistingAncestor(artifactPath);
333
+ const rel = path.relative(projectReal, ancestorReal);
334
+ if (rel !== "" && (rel.startsWith("..") || path.isAbsolute(rel))) {
335
+ throw new Error(`artifact '${artifactId}' path escapes the project boundary`);
336
+ }
337
+ }
338
+ export function resolveArtifactPath(record, projectRoot, activeObjectiveNameOrOptions = null, env = process.env) {
339
+ const options = typeof activeObjectiveNameOrOptions === "object" && activeObjectiveNameOrOptions !== null
340
+ ? activeObjectiveNameOrOptions
341
+ : { activeObjectiveName: activeObjectiveNameOrOptions };
342
+ const activeObjectiveName = options.activeObjectiveName ?? null;
186
343
  let artifactPath = record.defaultPath;
187
- const overrides = loadDocsPathOverrides(projectRoot);
344
+ const overrides = options.docsPathOverrides ?? loadDocsPathOverrides(projectRoot, options.strictWrite === true);
188
345
  if (record.docsYamlCanOverridePath && record.displayName in overrides) {
189
346
  artifactPath = overrides[record.displayName];
190
347
  }
191
348
  if (artifactPath.includes("<name>") && activeObjectiveName) {
192
349
  artifactPath = artifactPath.replace(/<name>/g, activeObjectiveName);
193
350
  }
194
- const profilePrefix = "$PROFILERA_PROFILE_DIR/";
195
- if (artifactPath.startsWith(profilePrefix)) {
196
- const explicit = env.PROFILERA_PROFILE_DIR;
197
- const suffix = artifactPath.slice(profilePrefix.length);
198
- if (explicit) {
199
- return path.join(explicit, suffix);
351
+ const profileDirPrefixes = ["$AGENTERA_PROFILE_DIR/", "$PROFILERA_PROFILE_DIR/"];
352
+ for (const prefix of profileDirPrefixes) {
353
+ if (artifactPath.startsWith(prefix)) {
354
+ const suffix = artifactPath.slice(prefix.length);
355
+ const explicit = resolveProfileDirOverride(env);
356
+ if (explicit) {
357
+ return path.join(explicit, suffix);
358
+ }
359
+ const [base] = resolveCandidate(null, { env, home: os.homedir() });
360
+ return path.join(base, suffix);
200
361
  }
201
- const [base] = resolveCandidate(null, { env, home: os.homedir() });
202
- return path.join(base, suffix);
203
362
  }
204
- return projectPath(projectRoot, artifactPath, record.artifactId);
363
+ const resolved = projectPath(projectRoot, artifactPath, record.artifactId);
364
+ if (options.strictWrite)
365
+ assertRealpathBoundary(projectRoot, resolved, record.artifactId);
366
+ return resolved;
205
367
  }
206
- //# sourceMappingURL=artifactRegistry.js.map
@@ -0,0 +1,45 @@
1
+ const FIELD_SKIP = new Set([
2
+ "meta",
3
+ "GROUP_PREFIXES",
4
+ "BUDGET",
5
+ "COMPACTION",
6
+ "VALIDATION",
7
+ "ARCHIVE",
8
+ "CONVENTION",
9
+ "CONVENTIONS",
10
+ ]);
11
+ function mapping(value) {
12
+ return Boolean(value && typeof value === "object" && !Array.isArray(value));
13
+ }
14
+ export function artifactSchemaFieldDescription(entry, group) {
15
+ return {
16
+ id: entry.id ?? null,
17
+ group,
18
+ field: entry.field ?? null,
19
+ ...(typeof entry.path === "string" ? { path: entry.path } : {}),
20
+ type: entry.type ?? "unknown",
21
+ required: "required" in entry ? entry.required : "unknown",
22
+ format: entry.format ?? null,
23
+ validation: entry.validation ?? [],
24
+ ...(entry.accepted_forms !== undefined ? { accepted_forms: structuredClone(entry.accepted_forms) } : {}),
25
+ ...(entry.normalization !== undefined ? { normalization: structuredClone(entry.normalization) } : {}),
26
+ ...(entry.write_operations !== undefined ? { write_operations: structuredClone(entry.write_operations) } : {}),
27
+ };
28
+ }
29
+ export function describeArtifactSchemaFields(schema) {
30
+ const fields = [];
31
+ for (const [group, value] of Object.entries(schema)) {
32
+ if (FIELD_SKIP.has(group) || !mapping(value))
33
+ continue;
34
+ for (const entry of Object.values(value)) {
35
+ if (mapping(entry) && "field" in entry)
36
+ fields.push(artifactSchemaFieldDescription(entry, group));
37
+ }
38
+ }
39
+ return fields;
40
+ }
41
+ export function artifactSchemaFieldsForOperation(schema, verb) {
42
+ if (!schema)
43
+ return [];
44
+ return describeArtifactSchemaFields(schema).filter((field) => Array.isArray(field.write_operations) && field.write_operations.includes(verb));
45
+ }
@@ -11,6 +11,7 @@ export const BOOTSTRAP_RULE_SECTIONS = [
11
11
  "FIELD_RULES",
12
12
  "PRIMITIVE_REFERENCE_FIELDS",
13
13
  "ROUTE_ALIASES",
14
+ "TRIGGER_ENRICHMENT",
14
15
  ];
15
16
  export class ContractBootstrapError extends Error {
16
17
  errors;
@@ -26,7 +27,7 @@ function isMapping(value) {
26
27
  export function loadCapabilitySchemaContract(contractPath) {
27
28
  let data;
28
29
  try {
29
- data = loadYamlMapping(fs.readFileSync(contractPath, "utf8"));
30
+ data = loadYamlMapping(fs.readFileSync(contractPath, "utf8")); // cast: YAML parse IO boundary
30
31
  }
31
32
  catch (exc) {
32
33
  throw new ContractBootstrapError([
@@ -100,8 +101,47 @@ export function buildCapabilitySchemaContract(data, contractPath) {
100
101
  capability: entry.capability,
101
102
  })),
102
103
  },
104
+ triggerEnrichment: buildTriggerEnrichmentRules(data),
103
105
  };
104
106
  }
107
+ function buildTriggerEnrichmentRules(data) {
108
+ const enrichment = data.TRIGGER_ENRICHMENT;
109
+ const fields = enrichment.fields;
110
+ const primaryAliases = data.ROUTE_ALIASES.primary_aliases;
111
+ const allowedCapabilityIds = primaryAliases.map((entry) => entry.capability);
112
+ return {
113
+ spec: enrichment.spec,
114
+ fields: Object.fromEntries(Object.entries(fields).map(([name, raw]) => [name, buildEnrichmentFieldRule(raw)])),
115
+ allowedCapabilityIds,
116
+ };
117
+ }
118
+ function buildEnrichmentFieldRule(raw) {
119
+ const rule = {
120
+ type: raw.type,
121
+ required: Boolean(raw.required),
122
+ default: raw.default,
123
+ };
124
+ if (typeof raw.min === "number")
125
+ rule.min = raw.min;
126
+ if (typeof raw.max === "number")
127
+ rule.max = raw.max;
128
+ if (raw.each_must_be_valid_regex === true)
129
+ rule.eachMustBeValidRegex = true;
130
+ if (isMapping(raw.entries)) {
131
+ const entries = {};
132
+ for (const [entryName, entryRaw] of Object.entries(raw.entries)) {
133
+ const e = entryRaw;
134
+ entries[entryName] = {
135
+ type: e.type,
136
+ required: Boolean(e.required),
137
+ nonEmpty: e.non_empty === true,
138
+ enumSource: typeof e.enum_source === "string" ? e.enum_source : "",
139
+ };
140
+ }
141
+ rule.entries = entries;
142
+ }
143
+ return rule;
144
+ }
105
145
  function requiredGroupsOf(data, sourceLabel, errors) {
106
146
  const groups = data.REQUIRED_GROUPS;
107
147
  if (!Array.isArray(groups) ||
@@ -154,6 +194,7 @@ function checkRuleSections(data, sourceLabel, errors) {
154
194
  checkTriggerPriorityRules(data, sourceLabel, errors);
155
195
  checkPrimitiveReferenceRules(data, sourceLabel, errors);
156
196
  checkRouteAliasRules(data, sourceLabel, errors);
197
+ checkTriggerEnrichmentRules(data, sourceLabel, errors);
157
198
  }
158
199
  function checkDirectoryRules(data, sourceLabel, errors) {
159
200
  const directory = data.DIRECTORY_REQUIREMENTS;
@@ -308,4 +349,90 @@ function checkSelfGroups(data, sourceLabel, requiredGroups, errors) {
308
349
  }
309
350
  }
310
351
  }
311
- //# sourceMappingURL=capabilityContract.js.map
352
+ /**
353
+ * Required integer range field inside TRIGGER_ENRICHMENT compatibility rules.
354
+ */
355
+ function checkEnrichmentIntegerField(value, label, sourceLabel, errors) {
356
+ if (typeof value !== "number" || !Number.isInteger(value) || value < 0 || value > 100) {
357
+ errors.push(`bootstrap [error]: ${label} in ${sourceLabel} must be an integer in range 0..100`);
358
+ }
359
+ }
360
+ function checkTriggerEnrichmentRules(data, sourceLabel, errors) {
361
+ const enrichment = data.TRIGGER_ENRICHMENT;
362
+ if (!isMapping(enrichment)) {
363
+ errors.push(`bootstrap [error]: TRIGGER_ENRICHMENT in ${sourceLabel} must be present as a mapping`);
364
+ return;
365
+ }
366
+ if (typeof enrichment.spec !== "string" || !enrichment.spec) {
367
+ errors.push(`bootstrap [error]: TRIGGER_ENRICHMENT.spec in ${sourceLabel} must be a non-empty string`);
368
+ }
369
+ const fields = enrichment.fields;
370
+ if (!isMapping(fields)) {
371
+ errors.push(`bootstrap [error]: TRIGGER_ENRICHMENT.fields in ${sourceLabel} must be a mapping`);
372
+ return;
373
+ }
374
+ // Legacy fields remain shape-validated for compatibility, but are not
375
+ // carried into the active semantic trigger model.
376
+ const expected = {
377
+ patterns: "list_of_strings",
378
+ confidence_threshold: "integer",
379
+ borderline_band: "integer",
380
+ patterns_regex: "list_of_strings",
381
+ disambiguates_against: "list_of_mappings",
382
+ };
383
+ for (const [fieldName, expectedType] of Object.entries(expected)) {
384
+ if (!isMapping(fields[fieldName])) {
385
+ errors.push(`bootstrap [error]: TRIGGER_ENRICHMENT.fields.${fieldName} in ${sourceLabel} must be a mapping`);
386
+ continue;
387
+ }
388
+ if (fields[fieldName].type !== expectedType) {
389
+ errors.push(`bootstrap [error]: TRIGGER_ENRICHMENT.fields.${fieldName}.type in ${sourceLabel} must be ${expectedType}`);
390
+ }
391
+ if (fields[fieldName].required !== false) {
392
+ errors.push(`bootstrap [error]: TRIGGER_ENRICHMENT.fields.${fieldName}.required in ${sourceLabel} must be false (enrichment is opt-in)`);
393
+ }
394
+ const min = fields[fieldName].min;
395
+ const max = fields[fieldName].max;
396
+ if (expectedType === "integer") {
397
+ if (typeof min !== "number" || min !== 0) {
398
+ errors.push(`bootstrap [error]: TRIGGER_ENRICHMENT.fields.${fieldName}.min in ${sourceLabel} must be 0`);
399
+ }
400
+ if (typeof max !== "number" || max !== 100) {
401
+ errors.push(`bootstrap [error]: TRIGGER_ENRICHMENT.fields.${fieldName}.max in ${sourceLabel} must be 100`);
402
+ }
403
+ }
404
+ if (fieldName === "patterns_regex" && fields[fieldName].each_must_be_valid_regex !== true) {
405
+ errors.push(`bootstrap [error]: TRIGGER_ENRICHMENT.fields.${fieldName}.each_must_be_valid_regex in ${sourceLabel} must be true`);
406
+ }
407
+ }
408
+ // disambiguates_against.entries capability/hint shape
409
+ const disambig = isMapping(fields.disambiguates_against) ? fields.disambiguates_against : null;
410
+ const entriesList = disambig && isMapping(disambig.entries) ? disambig.entries : null;
411
+ if (disambig && !entriesList) {
412
+ errors.push(`bootstrap [error]: TRIGGER_ENRICHMENT.fields.disambiguates_against.entries in ${sourceLabel} must be a mapping`);
413
+ }
414
+ if (entriesList) {
415
+ if (!isMapping(entriesList.capability)) {
416
+ errors.push(`bootstrap [error]: TRIGGER_ENRICHMENT.fields.disambiguates_against.entries.capability in ${sourceLabel} must be a mapping`);
417
+ }
418
+ else {
419
+ if (entriesList.capability.required !== true) {
420
+ errors.push(`bootstrap [error]: TRIGGER_ENRICHMENT.fields.disambiguates_against.entries.capability.required in ${sourceLabel} must be true`);
421
+ }
422
+ if (entriesList.capability.enum_source !== "ROUTE_ALIASES.primary_aliases.capability") {
423
+ errors.push(`bootstrap [error]: TRIGGER_ENRICHMENT.fields.disambiguates_against.entries.capability.enum_source in ${sourceLabel} must be ROUTE_ALIASES.primary_aliases.capability`);
424
+ }
425
+ }
426
+ if (!isMapping(entriesList.hint)) {
427
+ errors.push(`bootstrap [error]: TRIGGER_ENRICHMENT.fields.disambiguates_against.entries.hint in ${sourceLabel} must be a mapping`);
428
+ }
429
+ else {
430
+ if (entriesList.hint.required !== true) {
431
+ errors.push(`bootstrap [error]: TRIGGER_ENRICHMENT.fields.disambiguates_against.entries.hint.required in ${sourceLabel} must be true`);
432
+ }
433
+ if (entriesList.hint.non_empty !== true) {
434
+ errors.push(`bootstrap [error]: TRIGGER_ENRICHMENT.fields.disambiguates_against.entries.hint.non_empty in ${sourceLabel} must be true`);
435
+ }
436
+ }
437
+ }
438
+ }
@@ -3,7 +3,7 @@ import { execSync } from "node:child_process";
3
3
  import path from "node:path";
4
4
  import { loadYamlMapping } from "../core/yaml.js";
5
5
  /**
6
- * Evaluator-handoff contract loader and inspektera evaluation report validator.
6
+ * Evaluator-handoff contract loader and audit evaluation report validator.
7
7
  * Authority: references/cli/capability-instruction-contract.yaml#evaluator_handoff
8
8
  */
9
9
  export const EVALUATOR_HANDOFF_REPORT_SCHEMA_VERSION = "agentera.inspekteraEvaluationReport.v1";
@@ -17,7 +17,7 @@ export function defaultEvaluatorHandoffContractPath(repoRoot) {
17
17
  return path.join(repoRoot, "references", "cli", "capability-instruction-contract.yaml");
18
18
  }
19
19
  export function loadEvaluatorHandoffContract(contractPath) {
20
- const data = loadYamlMapping(fs.readFileSync(contractPath, "utf8"));
20
+ const data = loadYamlMapping(fs.readFileSync(contractPath, "utf8")); // cast: YAML parse IO boundary
21
21
  const handoff = data.evaluator_handoff;
22
22
  if (!isMapping(handoff)) {
23
23
  throw new Error(`evaluator_handoff section missing in ${contractPath}`);
@@ -168,4 +168,3 @@ export function evaluatorHandoffOutputRequirements(contract) {
168
168
  schema_authority: "references/cli/capability-instruction-contract.yaml#evaluator_handoff",
169
169
  };
170
170
  }
171
- //# sourceMappingURL=evaluatorHandoffContract.js.map