agentera 3.0.0-dev.5 → 3.0.0-dev.51

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 (598) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +119 -22
  3. package/bundle/CHANGELOG.md +1351 -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 +236 -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 +437 -0
  11. package/bundle/references/adapters/package-registry.yaml +435 -189
  12. package/bundle/references/adapters/package-surface-characterization.md +66 -35
  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 +191 -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 +3022 -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 -1
  29. package/bundle/references/cli/vocabulary-index.yaml +20 -17
  30. package/bundle/references/cli/vocabulary.md +326 -361
  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 +224 -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 +102 -0
  39. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +6 -5
  40. package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
  41. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +176 -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 +458 -36
  91. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +128 -17
  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 +190 -0
  95. package/dist/analytics/extractCorpus/copilotSessions.js +275 -0
  96. package/dist/analytics/extractCorpus/core.js +392 -0
  97. package/dist/analytics/extractCorpus/corpus.js +167 -0
  98. package/dist/analytics/extractCorpus/coverageAudit.js +260 -0
  99. package/dist/analytics/extractCorpus/cursorSessions.js +425 -0
  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 +118 -0
  103. package/dist/analytics/extractCorpus/index.js +14 -0
  104. package/dist/analytics/extractCorpus/jsonlSessions.js +204 -0
  105. package/dist/analytics/extractCorpus/sqliteCaps.js +43 -0
  106. package/dist/analytics/extractCorpus/sqliteSessions.js +367 -0
  107. package/dist/analytics/extractCorpus/tierReader.js +108 -0
  108. package/dist/analytics/extractCorpus.js +2 -1791
  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 +56 -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 +565 -0
  134. package/dist/cli/capabilityContext/bespoke.js +44 -0
  135. package/dist/cli/capabilityContext/build.js +242 -0
  136. package/dist/cli/capabilityContext/closeout.js +233 -0
  137. package/dist/cli/capabilityContext/contract.js +179 -0
  138. package/dist/cli/capabilityContext/evidence.js +463 -0
  139. package/dist/cli/capabilityContext/index.js +3 -0
  140. package/dist/cli/capabilityContext/orchestration.js +131 -0
  141. package/dist/cli/capabilityContext/planState.js +260 -0
  142. package/dist/cli/capabilityContext/progress.js +142 -0
  143. package/dist/cli/capabilityContext/projectVerification.js +409 -0
  144. package/dist/cli/capabilityContext/shared.js +83 -0
  145. package/dist/cli/capabilityContext/slim.js +152 -0
  146. package/dist/cli/capabilityContext/startup.js +150 -0
  147. package/dist/cli/capabilityContext/startupAggregation.js +68 -0
  148. package/dist/cli/capabilityContext/types.js +56 -0
  149. package/dist/cli/capabilityContext.js +1 -2487
  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 +164 -14
  153. package/dist/cli/commands/doctor.js +122 -97
  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 +26 -44
  157. package/dist/cli/commands/personalGlossary.js +176 -0
  158. package/dist/cli/commands/prime/briefOrientation.js +747 -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 +212 -0
  163. package/dist/cli/commands/prime/orientationOutput.js +399 -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 +78 -53
  169. package/dist/cli/commands/report.js +96 -25
  170. package/dist/cli/commands/route.js +142 -0
  171. package/dist/cli/commands/schema.js +266 -143
  172. package/dist/cli/commands/state/decisions.js +387 -0
  173. package/dist/cli/commands/state/docs.js +70 -0
  174. package/dist/cli/commands/state/experimentRecords.js +151 -0
  175. package/dist/cli/commands/state/experiments.js +14 -0
  176. package/dist/cli/commands/state/get.js +129 -0
  177. package/dist/cli/commands/state/health.js +14 -0
  178. package/dist/cli/commands/state/index.js +16 -0
  179. package/dist/cli/commands/state/list.js +194 -0
  180. package/dist/cli/commands/state/objective.js +25 -0
  181. package/dist/cli/commands/state/plan.js +14 -0
  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 +13 -0
  185. package/dist/cli/commands/state/shared.js +14 -0
  186. package/dist/cli/commands/state/todo.js +42 -0
  187. package/dist/cli/commands/state/write.js +430 -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 +272 -223
  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 +372 -0
  196. package/dist/cli/dispatch/commands.js +27 -0
  197. package/dist/cli/dispatch/index.js +207 -0
  198. package/dist/cli/dispatch/lifecycle.js +652 -0
  199. package/dist/cli/dispatch/prime.js +139 -0
  200. package/dist/cli/dispatch/projections.js +17 -0
  201. package/dist/cli/dispatch/shared.js +63 -0
  202. package/dist/cli/dispatch/state.js +140 -0
  203. package/dist/cli/dispatch.js +1 -1294
  204. package/dist/cli/errors.js +16 -17
  205. package/dist/cli/help.js +394 -43
  206. package/dist/cli/migrationRequired.js +87 -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 +11 -79
  242. package/dist/hooks/compaction/apply.js +446 -0
  243. package/dist/hooks/compaction/dryRun.js +184 -0
  244. package/dist/hooks/compaction/index.js +22 -0
  245. package/dist/hooks/compaction/parse.js +325 -0
  246. package/dist/hooks/compaction/retention.js +202 -0
  247. package/dist/hooks/compaction/status.js +360 -0
  248. package/dist/hooks/compaction/types.js +5 -0
  249. package/dist/hooks/validateArtifact/agentFacing.js +9 -0
  250. package/dist/hooks/validateArtifact/index.js +92 -0
  251. package/dist/hooks/validateArtifact/markdown.js +145 -0
  252. package/dist/hooks/validateArtifact/schema.js +546 -0
  253. package/dist/hooks/validateArtifact/traversal.js +107 -0
  254. package/dist/hooks/validateArtifact/violations.js +107 -0
  255. package/dist/migrate/v2HandoffManifest.js +452 -0
  256. package/dist/registries/activationContract.js +2 -0
  257. package/dist/registries/activationTuples.js +107 -0
  258. package/dist/registries/artifactProtocolIds.js +78 -0
  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 +229 -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 +385 -0
  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 -0
  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 +846 -0
  313. package/dist/state/entityMigrationTodo.js +133 -0
  314. package/dist/state/entityPublicationContext.js +806 -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 +982 -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/projectRoot.js +62 -0
  343. package/dist/state/projectionPolicy.js +190 -0
  344. package/dist/state/retrievalAuthority.js +156 -0
  345. package/dist/state/safeProjectFile.js +155 -0
  346. package/dist/state/startupAnalysis/benchmark.js +432 -0
  347. package/dist/state/startupAnalysis/contract.js +160 -0
  348. package/dist/state/startupAnalysis/helpers.js +286 -0
  349. package/dist/state/startupAnalysis/index.js +6 -0
  350. package/dist/state/startupAnalysis/metrics.js +340 -0
  351. package/dist/state/startupAnalysis/records.js +198 -0
  352. package/dist/state/startupAnalysis/report.js +111 -0
  353. package/dist/state/startupAnalysis/threshold.js +512 -0
  354. package/dist/state/startupAnalysis.js +2 -1953
  355. package/dist/state/startupProjection.js +499 -0
  356. package/dist/state/stateMode.js +85 -0
  357. package/dist/state/stateStorageAuthority.js +47 -0
  358. package/dist/state/summaryEntityRead.js +25 -0
  359. package/dist/state/summaryMigrationProvenance.js +66 -0
  360. package/dist/state/summarySourceRowAuthority.js +36 -0
  361. package/dist/state/todoActivationSafety.js +58 -0
  362. package/dist/state/todoDocsEntities.js +1069 -0
  363. package/dist/state/todoDocsEntityValidation.js +158 -0
  364. package/dist/state/todoMarkdownProjection.js +51 -0
  365. package/dist/state/todoReconciliationActivation.js +140 -0
  366. package/dist/state/todoReconciliationInspection.js +169 -0
  367. package/dist/state/todoReconciliationRepair.js +170 -0
  368. package/dist/state/todoReconciliationTransaction.js +582 -0
  369. package/dist/state/write/assign.js +20 -0
  370. package/dist/state/write/candidateMutation.js +269 -0
  371. package/dist/state/write/errors.js +11 -0
  372. package/dist/state/write/experimentPublication.js +192 -0
  373. package/dist/state/write/explain.js +363 -0
  374. package/dist/state/write/fields.js +61 -0
  375. package/dist/state/write/glossaryPublication.js +263 -0
  376. package/dist/state/write/grammar.js +285 -0
  377. package/dist/state/write/helpers.js +29 -0
  378. package/dist/state/write/index.js +12 -0
  379. package/dist/state/write/input.js +367 -0
  380. package/dist/state/write/lock.js +837 -0
  381. package/dist/state/write/mutation.js +234 -0
  382. package/dist/state/write/operations.js +170 -0
  383. package/dist/state/write/planEvaluation.js +128 -0
  384. package/dist/state/write/planPublication.js +179 -0
  385. package/dist/state/write/runtimeOperations.js +144 -0
  386. package/dist/state/write/serialize.js +1 -0
  387. package/dist/state/write/transaction.js +52 -0
  388. package/dist/state/write/validate.js +7 -0
  389. package/dist/upgrade/appContentRefresh.js +383 -0
  390. package/dist/upgrade/appModel.js +8 -7
  391. package/dist/upgrade/atomicWriter.js +1 -0
  392. package/dist/upgrade/bundleEvidence.js +33 -0
  393. package/dist/upgrade/channels.js +12 -8
  394. package/dist/upgrade/compatibility.js +56 -21
  395. package/dist/upgrade/doctor.js +197 -192
  396. package/dist/upgrade/doctorClassifier.js +187 -0
  397. package/dist/upgrade/installedHooksRetirement.js +196 -0
  398. package/dist/upgrade/legacyAgentCleanup.js +282 -0
  399. package/dist/upgrade/lifecycleUpgrade.js +113 -0
  400. package/dist/upgrade/migrateArtifactsV2ToV3.js +367 -149
  401. package/dist/upgrade/migrationPublication.js +122 -0
  402. package/dist/upgrade/nextMajorDoctor.js +42 -8
  403. package/dist/upgrade/npxPlatformStatus.js +22 -0
  404. package/dist/upgrade/projectIntegration.js +145 -187
  405. package/dist/upgrade/projectIntegrationDecision.js +50 -0
  406. package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
  407. package/dist/upgrade/runtimeMigration.js +273 -363
  408. package/dist/upgrade/upgradeCommands.js +14 -1
  409. package/dist/upgrade/upgradeLock.js +85 -0
  410. package/dist/upgrade/upgradeOrchestrator.js +263 -59
  411. package/dist/upgrade/v3CapabilitySurface.js +14 -0
  412. package/dist/upgrade/versionResolution.js +8 -1
  413. package/dist/validate/activationArtifactEvidence.js +844 -0
  414. package/dist/validate/activationConjunction.js +816 -0
  415. package/dist/validate/activationEvidenceManifest.js +515 -0
  416. package/dist/validate/activationPackageSemantics.js +29 -0
  417. package/dist/validate/appHomeContract.js +5 -11
  418. package/dist/validate/bootstrapAuthority.js +44 -0
  419. package/dist/validate/capability.js +133 -12
  420. package/dist/validate/crossCapability.js +15 -10
  421. package/dist/validate/retainedReferenceAuthority.js +879 -0
  422. package/dist/validate/selfAudit.js +73 -37
  423. package/dist/validate/v1LegacyCruft.js +131 -0
  424. package/dist/validate/vocabularyAuthority.js +303 -0
  425. package/package.json +53 -27
  426. package/bundle/references/adapters/cursor.md +0 -213
  427. package/bundle/references/adapters/opencode.md +0 -530
  428. package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
  429. package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
  430. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
  431. package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -548
  432. package/bundle/references/adapters/runtime-feature-parity.md +0 -189
  433. package/bundle/references/analysis/benchmark.md +0 -267
  434. package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
  435. package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
  436. package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -355
  437. package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -278
  438. package/bundle/references/cli/capability-tool-classification.yaml +0 -53
  439. package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
  440. package/bundle/references/meta/documentation-inventory.md +0 -43
  441. package/bundle/references/v1-section-mapping.md +0 -47
  442. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  443. package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
  444. package/bundle/skills/agentera/agents/hej.toml +0 -6
  445. package/bundle/skills/agentera/agents/inspektera.toml +0 -6
  446. package/bundle/skills/agentera/agents/inspirera.toml +0 -6
  447. package/bundle/skills/agentera/agents/optimera.toml +0 -6
  448. package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
  449. package/bundle/skills/agentera/agents/planera.toml +0 -6
  450. package/bundle/skills/agentera/agents/profilera.toml +0 -6
  451. package/bundle/skills/agentera/agents/realisera.toml +0 -6
  452. package/bundle/skills/agentera/agents/resonera.toml +0 -6
  453. package/bundle/skills/agentera/agents/visionera.toml +0 -6
  454. package/bundle/skills/agentera/agents/visualisera.toml +0 -6
  455. package/bundle/skills/agentera/capabilities/dokumentera/schemas/artifacts.yaml +0 -73
  456. package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +0 -35
  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/schemas/artifacts.yaml +0 -76
  460. package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +0 -38
  461. package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +0 -24
  462. package/bundle/skills/agentera/capabilities/inspirera/schemas/triggers.yaml +0 -34
  463. package/bundle/skills/agentera/capabilities/optimera/schemas/triggers.yaml +0 -39
  464. package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +0 -64
  465. package/bundle/skills/agentera/capabilities/orkestrera/schemas/triggers.yaml +0 -42
  466. package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +0 -120
  467. package/bundle/skills/agentera/capabilities/planera/schemas/artifacts.yaml +0 -62
  468. package/bundle/skills/agentera/capabilities/planera/schemas/triggers.yaml +0 -34
  469. package/bundle/skills/agentera/capabilities/planera/schemas/validation.yaml +0 -61
  470. package/bundle/skills/agentera/capabilities/profilera/schemas/artifacts.yaml +0 -18
  471. package/bundle/skills/agentera/capabilities/profilera/schemas/triggers.yaml +0 -45
  472. package/bundle/skills/agentera/capabilities/profilera/schemas/validation.yaml +0 -57
  473. package/bundle/skills/agentera/capabilities/realisera/schemas/artifacts.yaml +0 -80
  474. package/bundle/skills/agentera/capabilities/realisera/schemas/triggers.yaml +0 -39
  475. package/bundle/skills/agentera/capabilities/realisera/schemas/validation.yaml +0 -110
  476. package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +0 -47
  477. package/bundle/skills/agentera/capabilities/resonera/schemas/triggers.yaml +0 -46
  478. package/bundle/skills/agentera/capabilities/resonera/schemas/validation.yaml +0 -77
  479. package/bundle/skills/agentera/capabilities/visionera/schemas/triggers.yaml +0 -41
  480. package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +0 -33
  481. package/bundle/skills/agentera/references/contract.md +0 -1039
  482. package/bundle/skills/hej/.claude-plugin/plugin.json +0 -6
  483. package/bundle/skills/hej/SKILL.md +0 -69
  484. package/bundle/skills/hej/agents/hej.toml +0 -11
  485. package/bundle/skills/hej/agents/openai.yaml +0 -8
  486. package/dist/analytics/extractCorpus.js.map +0 -1
  487. package/dist/analytics/usageStats.js.map +0 -1
  488. package/dist/bin/agentera.js.map +0 -1
  489. package/dist/capabilities/dokumentera/instructions.js +0 -6
  490. package/dist/capabilities/dokumentera/instructions.js.map +0 -1
  491. package/dist/capabilities/hej/instructions.js +0 -6
  492. package/dist/capabilities/hej/instructions.js.map +0 -1
  493. package/dist/capabilities/index.js.map +0 -1
  494. package/dist/capabilities/inspektera/instructions.js +0 -6
  495. package/dist/capabilities/inspektera/instructions.js.map +0 -1
  496. package/dist/capabilities/inspirera/instructions.js +0 -6
  497. package/dist/capabilities/inspirera/instructions.js.map +0 -1
  498. package/dist/capabilities/optimera/instructions.js +0 -6
  499. package/dist/capabilities/optimera/instructions.js.map +0 -1
  500. package/dist/capabilities/orkestrera/instructions.js +0 -6
  501. package/dist/capabilities/orkestrera/instructions.js.map +0 -1
  502. package/dist/capabilities/planera/instructions.js +0 -6
  503. package/dist/capabilities/planera/instructions.js.map +0 -1
  504. package/dist/capabilities/profilera/instructions.js +0 -6
  505. package/dist/capabilities/profilera/instructions.js.map +0 -1
  506. package/dist/capabilities/realisera/instructions.js +0 -6
  507. package/dist/capabilities/realisera/instructions.js.map +0 -1
  508. package/dist/capabilities/resonera/instructions.js +0 -6
  509. package/dist/capabilities/resonera/instructions.js.map +0 -1
  510. package/dist/capabilities/visionera/instructions.js +0 -6
  511. package/dist/capabilities/visionera/instructions.js.map +0 -1
  512. package/dist/capabilities/visualisera/instructions.js +0 -6
  513. package/dist/capabilities/visualisera/instructions.js.map +0 -1
  514. package/dist/cli/appContext.js.map +0 -1
  515. package/dist/cli/argvalidate.js.map +0 -1
  516. package/dist/cli/capabilityContext.js.map +0 -1
  517. package/dist/cli/commands/capability.js.map +0 -1
  518. package/dist/cli/commands/compact.js.map +0 -1
  519. package/dist/cli/commands/doctor.js.map +0 -1
  520. package/dist/cli/commands/lint.js.map +0 -1
  521. package/dist/cli/commands/prime.js.map +0 -1
  522. package/dist/cli/commands/query.js.map +0 -1
  523. package/dist/cli/commands/report.js.map +0 -1
  524. package/dist/cli/commands/schema.js.map +0 -1
  525. package/dist/cli/commands/state.js +0 -1023
  526. package/dist/cli/commands/state.js.map +0 -1
  527. package/dist/cli/commands/upgrade.js.map +0 -1
  528. package/dist/cli/commands/validate.js.map +0 -1
  529. package/dist/cli/commands/verify.js.map +0 -1
  530. package/dist/cli/dispatch.js.map +0 -1
  531. package/dist/cli/errors.js.map +0 -1
  532. package/dist/cli/help.js.map +0 -1
  533. package/dist/cli/orientation.js.map +0 -1
  534. package/dist/cli/prime-blob.js.map +0 -1
  535. package/dist/cli/stateQuery.js.map +0 -1
  536. package/dist/cli/structured.js.map +0 -1
  537. package/dist/cli/todoMarkdown.js.map +0 -1
  538. package/dist/core/difflib.js.map +0 -1
  539. package/dist/core/paths.js.map +0 -1
  540. package/dist/core/pyjson.js.map +0 -1
  541. package/dist/core/sourceRoot.js.map +0 -1
  542. package/dist/core/toml.js.map +0 -1
  543. package/dist/core/yaml.js.map +0 -1
  544. package/dist/eval/evalSkills.js.map +0 -1
  545. package/dist/eval/semanticEval.js.map +0 -1
  546. package/dist/eval/semanticFixtures.js.map +0 -1
  547. package/dist/hooks/common.js.map +0 -1
  548. package/dist/hooks/compaction.js +0 -935
  549. package/dist/hooks/compaction.js.map +0 -1
  550. package/dist/hooks/cursorPreToolUse.js +0 -19
  551. package/dist/hooks/cursorPreToolUse.js.map +0 -1
  552. package/dist/hooks/cursorSessionStart.js +0 -71
  553. package/dist/hooks/cursorSessionStart.js.map +0 -1
  554. package/dist/hooks/sessionStart.js +0 -209
  555. package/dist/hooks/sessionStart.js.map +0 -1
  556. package/dist/hooks/sessionStop.js +0 -212
  557. package/dist/hooks/sessionStop.js.map +0 -1
  558. package/dist/hooks/validateArtifact.js +0 -935
  559. package/dist/hooks/validateArtifact.js.map +0 -1
  560. package/dist/registries/artifactRegistry.js.map +0 -1
  561. package/dist/registries/capabilityContract.js.map +0 -1
  562. package/dist/registries/evaluatorHandoffContract.js.map +0 -1
  563. package/dist/registries/packageRegistry.js.map +0 -1
  564. package/dist/registries/runtimeAdapterRegistry.js +0 -315
  565. package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
  566. package/dist/setup/codex.js +0 -1197
  567. package/dist/setup/codex.js.map +0 -1
  568. package/dist/setup/copilot.js +0 -227
  569. package/dist/setup/copilot.js.map +0 -1
  570. package/dist/setup/cursor.js +0 -127
  571. package/dist/setup/cursor.js.map +0 -1
  572. package/dist/setup/doctor.js +0 -1297
  573. package/dist/setup/doctor.js.map +0 -1
  574. package/dist/setup/smokeChecks.js.map +0 -1
  575. package/dist/state/installRoot.js.map +0 -1
  576. package/dist/state/startupAnalysis.js.map +0 -1
  577. package/dist/upgrade/appModel.js.map +0 -1
  578. package/dist/upgrade/channels.js.map +0 -1
  579. package/dist/upgrade/compatibility.js.map +0 -1
  580. package/dist/upgrade/doctor.js.map +0 -1
  581. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -570
  582. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
  583. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
  584. package/dist/upgrade/nextMajorDoctor.js.map +0 -1
  585. package/dist/upgrade/projectIntegration.js.map +0 -1
  586. package/dist/upgrade/runtimeMigration.js.map +0 -1
  587. package/dist/upgrade/upgradeCommands.js.map +0 -1
  588. package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
  589. package/dist/upgrade/versionResolution.js.map +0 -1
  590. package/dist/validate/appHomeContract.js.map +0 -1
  591. package/dist/validate/capability.js.map +0 -1
  592. package/dist/validate/crossCapability.js.map +0 -1
  593. package/dist/validate/lifecycleAdapters.js +0 -772
  594. package/dist/validate/lifecycleAdapters.js.map +0 -1
  595. package/dist/validate/selfAudit.js.map +0 -1
  596. /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
  597. /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
  598. /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
@@ -2,19 +2,24 @@ import fs from "node:fs";
2
2
  import path from "node:path";
3
3
  import { spawnSync } from "node:child_process";
4
4
  import { resolveSourceRoot } from "../core/sourceRoot.js";
5
+ /**
6
+ * Tier 2 eval runner for agentera skill smoke testing. Faithful TS port of
7
+ * scripts/eval_skills.py. Crash/error detection only; output correctness is not
8
+ * evaluated. `which`/`run` are injectable for deterministic testing.
9
+ */
5
10
  export const TRIGGER_PROMPTS = {
6
- dokumentera: "Audit the documentation for this project.",
7
- hej: "Start a new session and give me a status briefing on this project.",
8
- inspektera: "Run a codebase health audit.",
9
- inspirera: "Analyze https://example.com and map patterns to this project.",
10
- optimera: "Optimize test suite execution time.",
11
- orkestrera: "Execute the next cycle of the current plan.",
12
- planera: "Plan the next feature for this project.",
13
- profilera: "Generate a decision profile from session history.",
14
- realisera: "Run one autonomous development cycle.",
15
- resonera: "Deliberate on whether to add a new dependency.",
16
- visionera: "Create a vision document for this project.",
17
- visualisera: "Create a visual identity system for this project.",
11
+ document: "Audit the documentation for this project.",
12
+ status: "Start a new session and give me a status briefing on this project.",
13
+ audit: "Run a codebase health audit.",
14
+ research: "Analyze https://example.com and map patterns to this project.",
15
+ optimize: "Optimize test suite execution time.",
16
+ orchestrate: "Execute the next cycle of the current plan.",
17
+ plan: "Plan the next feature for this project.",
18
+ profile: "Generate a decision profile from session history.",
19
+ build: "Run one autonomous development cycle.",
20
+ discuss: "Deliberate on whether to add a new dependency.",
21
+ vision: "Create a vision document for this project.",
22
+ design: "Create a visual identity system for this project.",
18
23
  };
19
24
  export const DEFAULT_TIMEOUT = 120;
20
25
  export const DEFAULT_PARALLEL = 1;
@@ -36,7 +41,11 @@ export function detectRuntime(explicit, opts = {}) {
36
41
  const which = opts.which ?? realWhich;
37
42
  const err = opts.err ?? ((line) => process.stderr.write(line + "\n"));
38
43
  if (explicit && explicit !== "auto") {
39
- if (explicit === "cursor-agent") {
44
+ if (explicit !== "opencode" && explicit !== "cursor") {
45
+ err(`ERROR: '${explicit}' is not an active eval runtime; choose opencode or cursor.`);
46
+ throw new ExitError(1);
47
+ }
48
+ if (explicit === "cursor") {
40
49
  if (which("cursor-agent") === null && which("agent") === null) {
41
50
  err("ERROR: 'cursor-agent' not found on PATH. Install Cursor Agent CLI " +
42
51
  "and ensure the binary is accessible.");
@@ -45,17 +54,14 @@ export function detectRuntime(explicit, opts = {}) {
45
54
  }
46
55
  return explicit;
47
56
  }
48
- const hasClaude = which("claude") !== null;
49
57
  const hasOpencode = which("opencode") !== null;
50
58
  const hasCursorAgent = which("cursor-agent") !== null || which("agent") !== null;
51
- if (hasClaude)
52
- return "claude";
53
59
  if (hasOpencode)
54
60
  return "opencode";
55
61
  if (hasCursorAgent)
56
- return "cursor-agent";
57
- err("ERROR: Neither 'claude', 'opencode', nor 'cursor-agent' found on PATH. " +
58
- "Install a supported runtime host and ensure the binary is accessible.");
62
+ return "cursor";
63
+ err("ERROR: Neither the OpenCode nor Cursor eval surface was found on PATH. " +
64
+ "Install an active eval runtime host and ensure the binary is accessible.");
59
65
  throw new ExitError(1);
60
66
  }
61
67
  export function parseFrontmatterName(text) {
@@ -103,7 +109,7 @@ const realRun = (cmd, opts) => {
103
109
  timedOut: result.signal === "SIGTERM" && result.error !== undefined,
104
110
  };
105
111
  };
106
- export function invokeSkill(name, prompt, timeout, runtime = "claude", opts = {}) {
112
+ export function invokeSkill(name, prompt, timeout, runtime = "opencode", opts = {}) {
107
113
  const which = opts.which ?? realWhich;
108
114
  const run = opts.run ?? realRun;
109
115
  const repoRoot = opts.repoRoot ?? resolveSourceRoot();
@@ -113,14 +119,13 @@ export function invokeSkill(name, prompt, timeout, runtime = "claude", opts = {}
113
119
  cmd = ["opencode", "run", "--prompt"];
114
120
  stdinPrompt = prompt;
115
121
  }
116
- else if (runtime === "cursor-agent") {
122
+ else if (runtime === "cursor") {
117
123
  const binary = which("cursor-agent") ? "cursor-agent" : "agent";
118
124
  cmd = [binary, "-p", "--output-format", "json", "--force", prompt];
119
125
  stdinPrompt = null;
120
126
  }
121
127
  else {
122
- cmd = ["claude", "-p", "--output-format", "json"];
123
- stdinPrompt = prompt;
128
+ throw new ExitError(1, `unsupported active eval runtime: ${runtime}`);
124
129
  }
125
130
  const start = Date.now();
126
131
  let error = null;
@@ -163,7 +168,7 @@ export function invokeSkill(name, prompt, timeout, runtime = "claude", opts = {}
163
168
  error,
164
169
  };
165
170
  }
166
- export function runSkills(skills, timeout, _parallel, runtime = "claude", opts = {}) {
171
+ export function runSkills(skills, timeout, _parallel, runtime = "opencode", opts = {}) {
167
172
  // Parallelism in the Python runner is a maintainer perf detail; the smoke
168
173
  // semantics (one result per skill, original order) are preserved sequentially.
169
174
  return skills.map((entry) => invokeSkill(entry.name, entry.prompt, timeout, runtime, opts));
@@ -179,7 +184,7 @@ export function buildReport(results) {
179
184
  results,
180
185
  };
181
186
  }
182
- export function buildDryRun(skills, runtime = "claude", runtimeSource = "auto-detected") {
187
+ export function buildDryRun(skills, runtime = "opencode", runtimeSource = "auto-detected") {
183
188
  return {
184
189
  mode: "dry-run",
185
190
  runtime: `${runtime} (${runtimeSource})`,
@@ -255,4 +260,3 @@ export function parseArgs(argv) {
255
260
  }
256
261
  return args;
257
262
  }
258
- //# sourceMappingURL=evalSkills.js.map
@@ -0,0 +1,155 @@
1
+ import crypto from "node:crypto";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { loadYamlMapping } from "../core/yaml.js";
5
+ import { resolveSourceRoot } from "../core/sourceRoot.js";
6
+ import { resolveRouteRequest } from "../registries/hybridRoute.js";
7
+ import { validateRouteReceiptSubmission } from "../registries/hybridRouteReceipt.js";
8
+ function mapping(value, source) {
9
+ if (value === null || typeof value !== "object" || Array.isArray(value))
10
+ throw new Error(`${source} must be a mapping`);
11
+ return value;
12
+ }
13
+ function requiredString(value, source) {
14
+ if (typeof value !== "string" || !value)
15
+ throw new Error(`${source} must be a non-empty string`);
16
+ return value;
17
+ }
18
+ function cases(value, source) {
19
+ if (!Array.isArray(value))
20
+ throw new Error(`${source} must be a list`);
21
+ return value;
22
+ }
23
+ function elapsedMs(start) {
24
+ return Number(process.hrtime.bigint() - start) / 1_000_000;
25
+ }
26
+ function percentile(values) {
27
+ if (values.length === 0)
28
+ return null;
29
+ const sorted = [...values].sort((left, right) => left - right);
30
+ return sorted[Math.ceil(sorted.length * 0.95) - 1];
31
+ }
32
+ function hashFile(file) {
33
+ return crypto.createHash("sha256").update(fs.readFileSync(file)).digest("hex");
34
+ }
35
+ function nullableFixtureReceipt(receipt) {
36
+ return {
37
+ version: null,
38
+ request_sha256: null,
39
+ semantic_capsule_sha256: null,
40
+ outcome: null,
41
+ capability: null,
42
+ compound: null,
43
+ question: null,
44
+ remainder_span: null,
45
+ ...receipt,
46
+ };
47
+ }
48
+ /** Runs the complete frozen synthetic conformance corpus without invoking a semantic host. */
49
+ export function evaluateHybridRoute(sourceRoot = resolveSourceRoot()) {
50
+ const contractPath = path.join(sourceRoot, "references/cli/hybrid-route-contract.yaml");
51
+ const corpusPath = path.join(sourceRoot, "fixtures/routing/hybrid-corpus.yaml");
52
+ const phrasePath = path.join(sourceRoot, "skills/agentera/route-phrases.yaml");
53
+ const skillPath = path.join(sourceRoot, "skills/agentera/SKILL.md");
54
+ const contract = loadYamlMapping(fs.readFileSync(contractPath, "utf8"));
55
+ const corpus = loadYamlMapping(fs.readFileSync(corpusPath, "utf8"));
56
+ const evaluation = mapping(contract.evaluation, "contract.evaluation");
57
+ const targetGates = mapping(evaluation.target_gates, "contract.evaluation.target_gates");
58
+ const routeCases = cases(corpus.route_cases, "corpus.route_cases");
59
+ const receiptCases = cases(corpus.receipt_cases, "corpus.receipt_cases");
60
+ const results = [];
61
+ const deterministicTimings = [];
62
+ const receiptTimings = [];
63
+ for (const routeCase of routeCases) {
64
+ const start = process.hrtime.bigint();
65
+ const observed = resolveRouteRequest(routeCase.request, sourceRoot);
66
+ const elapsed = elapsedMs(start);
67
+ deterministicTimings.push(elapsed);
68
+ const passed = observed.outcome === routeCase.expected.phase1
69
+ && (observed.outcome !== "deterministic_selection" || (observed.tier === routeCase.expected.tier && observed.capability === routeCase.expected.capability));
70
+ const harmfulMisroute = observed.outcome === "deterministic_selection"
71
+ && (routeCase.expected.phase1 !== "deterministic_selection" || observed.capability !== routeCase.expected.capability);
72
+ results.push({
73
+ case_id: routeCase.id,
74
+ partition: routeCase.partition,
75
+ evaluation_tier: "deterministic",
76
+ routing_tier: observed.outcome === "deterministic_selection" ? observed.tier : "deterministic_abstention",
77
+ expected_outcome: routeCase.expected.phase1,
78
+ observed_outcome: observed.outcome,
79
+ ...(observed.outcome === "deterministic_selection" ? { capability: observed.capability } : {}),
80
+ status: passed ? "pass" : "fail",
81
+ ...(passed ? {} : { failure_tier: "deterministic" }),
82
+ harmful_misroute: harmfulMisroute,
83
+ elapsed_ms: elapsed,
84
+ });
85
+ }
86
+ for (const receiptCase of receiptCases) {
87
+ const start = process.hrtime.bigint();
88
+ let terminal = "invalid_receipt";
89
+ try {
90
+ const receipt = receiptCase.valid ? nullableFixtureReceipt(receiptCase.receipt) : receiptCase.receipt;
91
+ terminal = validateRouteReceiptSubmission({ request: receiptCase.request, receipt }, sourceRoot).outcome;
92
+ }
93
+ catch {
94
+ terminal = "invalid_receipt";
95
+ }
96
+ const elapsed = elapsedMs(start);
97
+ receiptTimings.push(elapsed);
98
+ const passed = terminal === receiptCase.expected_terminal;
99
+ const harmfulMisroute = terminal === "selected" && receiptCase.expected_terminal !== "selected";
100
+ results.push({
101
+ case_id: receiptCase.id,
102
+ partition: receiptCase.partition,
103
+ evaluation_tier: "receipt_validation",
104
+ routing_tier: "semantic_receipt_validation",
105
+ expected_outcome: receiptCase.expected_terminal,
106
+ observed_outcome: terminal,
107
+ status: passed ? "pass" : "fail",
108
+ ...(passed ? {} : { failure_tier: "receipt_validation" }),
109
+ harmful_misroute: harmfulMisroute,
110
+ elapsed_ms: elapsed,
111
+ });
112
+ }
113
+ const failed = results.filter(({ status }) => status === "fail");
114
+ const harmfulMisroutes = results.filter((result) => result.harmful_misroute === true).length;
115
+ return {
116
+ schemaVersion: "agentera.hybrid_route_evaluation.v1",
117
+ status: failed.length === 0 ? "pass" : "fail",
118
+ authority: {
119
+ contract_version: requiredString(contract.schema_version, "contract.schema_version"),
120
+ protocol_sha256: hashFile(contractPath),
121
+ phrase_authority_sha256: hashFile(phrasePath),
122
+ shared_skill_sha256: hashFile(skillPath),
123
+ },
124
+ corpus: {
125
+ schema_version: requiredString(corpus.schema_version, "corpus.schema_version"),
126
+ content_sha256: hashFile(corpusPath),
127
+ partitions: corpus.partitions,
128
+ case_count: results.length,
129
+ },
130
+ results,
131
+ aggregate_metrics: {
132
+ passed: results.length - failed.length,
133
+ failed: failed.length,
134
+ harmful_misroutes: {
135
+ scope: "deterministic_and_receipt_validation_conformance",
136
+ target: targetGates.harmful_misroutes,
137
+ observed: harmfulMisroutes,
138
+ status: harmfulMisroutes === 0 ? "pass" : "fail",
139
+ taxonomy: evaluation.harmful_misroute_taxonomy,
140
+ },
141
+ },
142
+ model_context: {
143
+ status: "unmeasured",
144
+ reason: "host_dependent",
145
+ samples: 0,
146
+ distributions: {},
147
+ },
148
+ latency: {
149
+ deterministic_phase1: { sample_count: deterministicTimings.length, p95_ms: percentile(deterministicTimings), target: targetGates.deterministic_phase1_p95 },
150
+ receipt_validation: { sample_count: receiptTimings.length, p95_ms: percentile(receiptTimings), target: targetGates.receipt_validation_p95 },
151
+ semantic_model: { status: "unmeasured", reason: "host_dependent" },
152
+ end_to_end: { status: "unmeasured", reason: "host_dependent" },
153
+ },
154
+ };
155
+ }
@@ -45,7 +45,9 @@ export function buildReport(results) {
45
45
  function checkOutputFacts(fixture) {
46
46
  const facts = [];
47
47
  const expected = fixture.expectedFacts;
48
- (expected.required_output ?? []).forEach((text, index) => {
48
+ const requiredOutput = expected.required_output;
49
+ const requiredOutputArr = Array.isArray(requiredOutput) ? requiredOutput : []; // cast: JSON.parse fixture IO boundary
50
+ requiredOutputArr.forEach((text, index) => {
49
51
  const found = fixture.capturedOutput.includes(text);
50
52
  facts.push({
51
53
  fact: `required_output[${index}]`,
@@ -53,7 +55,9 @@ function checkOutputFacts(fixture) {
53
55
  detail: `captured output ${found ? "contains" : "does not contain"} ${pyRepr(text)}`,
54
56
  });
55
57
  });
56
- (expected.forbidden_output ?? []).forEach((text, index) => {
58
+ const forbiddenOutput = expected.forbidden_output;
59
+ const forbiddenOutputArr = Array.isArray(forbiddenOutput) ? forbiddenOutput : []; // cast: JSON.parse fixture IO boundary
60
+ forbiddenOutputArr.forEach((text, index) => {
57
61
  const found = fixture.capturedOutput.includes(text);
58
62
  facts.push({
59
63
  fact: `forbidden_output[${index}]`,
@@ -61,7 +65,8 @@ function checkOutputFacts(fixture) {
61
65
  detail: `captured output ${found ? "contains forbidden" : "omits forbidden"} ${pyRepr(text)}`,
62
66
  });
63
67
  });
64
- const writes = expected.artifact_expectations?.writes;
68
+ const artifactExpectations = expected.artifact_expectations; // cast: JSON.parse fixture IO boundary
69
+ const writes = artifactExpectations?.writes;
65
70
  if (writes === "none") {
66
71
  facts.push({
67
72
  fact: "artifact_expectations.writes",
@@ -74,9 +79,12 @@ function checkOutputFacts(fixture) {
74
79
  function checkToolTraceFacts(fixture) {
75
80
  const facts = [];
76
81
  const expected = fixture.expectedFacts;
77
- const callList = fixture.toolTrace.calls ?? [];
82
+ const rawCalls = fixture.toolTrace.calls;
83
+ const callList = Array.isArray(rawCalls) ? rawCalls : []; // cast: JSON.parse fixture IO boundary
78
84
  const calls = callList.join("\n");
79
- (expected.required_tool_calls ?? []).forEach((text, index) => {
85
+ const requiredToolCalls = expected.required_tool_calls;
86
+ const requiredToolCallsArr = Array.isArray(requiredToolCalls) ? requiredToolCalls : []; // cast: JSON.parse fixture IO boundary
87
+ requiredToolCallsArr.forEach((text, index) => {
80
88
  const found = calls.includes(text);
81
89
  facts.push({
82
90
  fact: `required_tool_calls[${index}]`,
@@ -84,7 +92,9 @@ function checkToolTraceFacts(fixture) {
84
92
  detail: `tool trace ${found ? "contains" : "does not contain"} ${pyRepr(text)}`,
85
93
  });
86
94
  });
87
- (expected.forbidden_tool_calls ?? []).forEach((text, index) => {
95
+ const forbiddenToolCalls = expected.forbidden_tool_calls;
96
+ const forbiddenToolCallsArr = Array.isArray(forbiddenToolCalls) ? forbiddenToolCalls : []; // cast: JSON.parse fixture IO boundary
97
+ forbiddenToolCallsArr.forEach((text, index) => {
88
98
  const found = calls.includes(text);
89
99
  facts.push({
90
100
  fact: `forbidden_tool_calls[${index}]`,
@@ -92,31 +102,43 @@ function checkToolTraceFacts(fixture) {
92
102
  detail: `tool trace ${found ? "contains forbidden" : "omits forbidden"} ${pyRepr(text)}`,
93
103
  });
94
104
  });
95
- for (const [text, expectedCount] of Object.entries(expected.tool_call_counts ?? {})) {
96
- const actual = callList.filter((call) => call.includes(text)).length;
97
- facts.push({
98
- fact: `tool_call_counts[${text}]`,
99
- status: actual === expectedCount ? "pass" : "fail",
100
- detail: `tool trace contains ${actual} call(s) matching ${pyRepr(text)}; expected ${expectedCount}`,
101
- });
105
+ const toolCallCounts = expected.tool_call_counts;
106
+ if (toolCallCounts && typeof toolCallCounts === "object" && !Array.isArray(toolCallCounts)) {
107
+ for (const [text, expectedCount] of Object.entries(toolCallCounts)) { // cast: JSON.parse fixture IO boundary
108
+ const actual = callList.filter((call) => call.includes(text)).length;
109
+ facts.push({
110
+ fact: `tool_call_counts[${text}]`,
111
+ status: actual === expectedCount ? "pass" : "fail",
112
+ detail: `tool trace contains ${actual} call(s) matching ${pyRepr(text)}; expected ${expectedCount}`,
113
+ });
114
+ }
102
115
  }
103
116
  return facts;
104
117
  }
105
118
  function checkSeededArtifactFacts(fixture) {
106
119
  const facts = [];
107
120
  const byPath = {};
108
- for (const item of fixture.seededState.files ?? []) {
109
- if (item && typeof item === "object" && typeof item.path === "string") {
110
- byPath[item.path] = item.content;
121
+ const rawFiles = fixture.seededState.files;
122
+ const filesArr = Array.isArray(rawFiles) ? rawFiles : [];
123
+ for (const item of filesArr) {
124
+ if (item && typeof item === "object" && !Array.isArray(item)) {
125
+ const obj = item; // cast: JSON.parse fixture IO boundary
126
+ const path = obj.path;
127
+ if (typeof path === "string") {
128
+ byPath[path] = obj.content; // cast: JSON.parse fixture IO boundary
129
+ }
111
130
  }
112
131
  }
113
- (fixture.expectedFacts.required_artifacts ?? []).forEach((expected, index) => {
132
+ const requiredArtifacts = fixture.expectedFacts.required_artifacts;
133
+ const requiredArtifactsArr = Array.isArray(requiredArtifacts) ? requiredArtifacts : [];
134
+ requiredArtifactsArr.forEach((expected, index) => {
114
135
  const factName = `required_artifacts[${index}]`;
115
136
  if (!expected || typeof expected !== "object" || Array.isArray(expected)) {
116
137
  facts.push({ fact: factName, status: "fail", detail: "expected artifact fact must be an object" });
117
138
  return;
118
139
  }
119
- const path = expected.path;
140
+ const expectedObj = expected; // cast: JSON.parse fixture IO boundary
141
+ const path = expectedObj.path;
120
142
  if (typeof path !== "string" || !path.trim()) {
121
143
  facts.push({ fact: factName, status: "fail", detail: "expected artifact fact must name a path" });
122
144
  return;
@@ -126,7 +148,9 @@ function checkSeededArtifactFacts(fixture) {
126
148
  facts.push({ fact: factName, status: "fail", detail: `seeded artifact ${pyRepr(path)} is missing` });
127
149
  return;
128
150
  }
129
- const missing = (expected.contains ?? []).filter((text) => !content.includes(text));
151
+ const containsRaw = expectedObj.contains;
152
+ const containsArr = Array.isArray(containsRaw) ? containsRaw : []; // cast: JSON.parse fixture IO boundary
153
+ const missing = containsArr.filter((text) => !content.includes(text));
130
154
  if (missing.length > 0) {
131
155
  facts.push({ fact: factName, status: "fail", detail: `seeded artifact ${pyRepr(path)} lacks ${pyRepr(missing[0])}` });
132
156
  }
@@ -145,4 +169,3 @@ export function main(argv = [], out = (l) => process.stdout.write(l)) {
145
169
  out(pyJsonIndent(report) + "\n");
146
170
  return report.status === "pass" ? 0 : 1;
147
171
  }
148
- //# sourceMappingURL=semanticEval.js.map
@@ -1,4 +1,8 @@
1
1
  import fs from "node:fs";
2
+ /**
3
+ * Semantic fixture contract validation for offline skill evals. Faithful TS
4
+ * port of scripts/semantic_fixtures.py. Defines the fixture shape only.
5
+ */
2
6
  export const REQUIRED_SECTIONS = [
3
7
  "Prompt",
4
8
  "Seeded Project State",
@@ -113,10 +117,18 @@ function validateExpectedFacts(sectionText) {
113
117
  errors.push(...validateStringList(d, "required_tool_calls", false));
114
118
  errors.push(...validateStringList(d, "forbidden_tool_calls", false));
115
119
  errors.push(...validateToolCallCounts(d.tool_call_counts));
116
- const hasOutputFact = Boolean(d.required_output?.length || d.forbidden_output?.length);
117
- const hasToolFact = Boolean(d.required_tool_calls?.length ||
118
- d.forbidden_tool_calls?.length ||
119
- (d.tool_call_counts && Object.keys(d.tool_call_counts).length));
120
+ const requiredOutput = d.required_output;
121
+ const forbiddenOutput = d.forbidden_output;
122
+ const hasOutputFact = Boolean((Array.isArray(requiredOutput) || typeof requiredOutput === "string" ? requiredOutput.length : 0) ||
123
+ (Array.isArray(forbiddenOutput) || typeof forbiddenOutput === "string" ? forbiddenOutput.length : 0));
124
+ const requiredToolCalls = d.required_tool_calls;
125
+ const forbiddenToolCalls = d.forbidden_tool_calls;
126
+ const toolCallCounts = d.tool_call_counts;
127
+ const hasToolFact = Boolean((Array.isArray(requiredToolCalls) || typeof requiredToolCalls === "string" ? requiredToolCalls.length : 0) ||
128
+ (Array.isArray(forbiddenToolCalls) || typeof forbiddenToolCalls === "string" ? forbiddenToolCalls.length : 0) ||
129
+ (toolCallCounts && typeof toolCallCounts === "object" && !Array.isArray(toolCallCounts)
130
+ ? Object.keys(toolCallCounts).length
131
+ : 0));
120
132
  const hasArtifactFact = "artifact_expectations" in d;
121
133
  if (!hasOutputFact && !hasToolFact && !hasArtifactFact) {
122
134
  errors.push("malformed section: Expected Facts: must declare at least one expected fact");
@@ -224,4 +236,3 @@ export function pyRepr(value) {
224
236
  }
225
237
  return "'" + value.replace(/\\/g, "\\\\").replace(/'/g, "\\'") + "'";
226
238
  }
227
- //# sourceMappingURL=semanticFixtures.js.map
@@ -1,18 +1,13 @@
1
- import crypto from "node:crypto";
2
1
  import fs from "node:fs";
3
- import os from "node:os";
4
2
  import path from "node:path";
5
- import { expanduser, resolvePath } from "../core/paths.js";
6
- import { resolveCandidate } from "../state/installRoot.js";
3
+ import { ARTIFACT_PROTOCOL_PATHS, normalizeArtifactMappingKeys, normalizeArtifactProtocolId, } from "../registries/artifactProtocolIds.js";
7
4
  /**
8
- * Shared utilities for agentera hooks. Faithful TS port of hooks/common.py:
9
- * compaction retention caps, runtime-local session bookmark paths, and artifact
10
- * path resolution.
5
+ * Shared utilities for compaction retention caps and artifact path resolution.
11
6
  */
12
7
  export { loadYamlMapping, loadYamlMappingFile, } from "../core/yaml.js";
13
8
  export const MAX_FULL_ENTRIES = 10;
14
9
  export const MAX_ONELINE_ENTRIES = 40;
15
- export const MAX_TOTAL_ENTRIES = MAX_FULL_ENTRIES + MAX_ONELINE_ENTRIES;
10
+ export const MAX_TOTAL_ENTRIES = 50;
16
11
  export function applyRetentionCaps(fullEntries, archiveEntries, opts = {}) {
17
12
  const maxFull = opts.maxFull ?? MAX_FULL_ENTRIES;
18
13
  const maxOneline = opts.maxOneline ?? MAX_ONELINE_ENTRIES;
@@ -20,63 +15,7 @@ export function applyRetentionCaps(fullEntries, archiveEntries, opts = {}) {
20
15
  const cappedArchive = archiveEntries.slice(0, maxOneline);
21
16
  return [...fullEntries.slice(0, maxFull), ...cappedArchive].slice(0, maxTotal);
22
17
  }
23
- export function resolveAgenteraDataHome(env = process.env, home = os.homedir()) {
24
- const configured = env.AGENTERA_HOME;
25
- if (configured) {
26
- return expanduser(configured);
27
- }
28
- const [root] = resolveCandidate(null, { env, home });
29
- return root;
30
- }
31
- export function resolveSessionPath(projectRoot, env = process.env, home = os.homedir()) {
32
- const dataHome = resolveAgenteraDataHome(env, home);
33
- const resolved = resolvePath(projectRoot);
34
- const digest = crypto.createHash("sha256").update(resolved, "utf8").digest("hex").slice(0, 16);
35
- const name = path.basename(projectRoot);
36
- const slug = name.replace(/[^A-Za-z0-9_.-]+/g, "-").replace(/^[.-]+|[.-]+$/g, "") || "project";
37
- return path.join(dataHome, "sessions", `${slug}-${digest}`, "session.yaml");
38
- }
39
- export function sessionBookmarkToOneline(entry) {
40
- return {
41
- timestamp: String(entry.timestamp ?? ""),
42
- artifacts: [],
43
- summary: String(entry.summary ?? ""),
44
- kind: "oneline",
45
- };
46
- }
47
- export function compactSessionBookmarkEntries(entries, opts = {}) {
48
- const maxFull = opts.maxFull ?? MAX_FULL_ENTRIES;
49
- const maxOneline = opts.maxOneline ?? MAX_ONELINE_ENTRIES;
50
- const maxTotal = opts.maxTotal ?? MAX_TOTAL_ENTRIES;
51
- const convert = opts.toOneline ?? sessionBookmarkToOneline;
52
- const ordered = [...entries].sort((a, b) => {
53
- const ta = String(a.timestamp ?? "");
54
- const tb = String(b.timestamp ?? "");
55
- return ta < tb ? 1 : ta > tb ? -1 : 0;
56
- });
57
- const full = [];
58
- const archive = [];
59
- for (const entry of ordered) {
60
- if (entry.kind === "full" && full.length < maxFull) {
61
- full.push(entry);
62
- }
63
- else {
64
- archive.push(convert(entry));
65
- }
66
- }
67
- return applyRetentionCaps(full, archive, { maxFull, maxOneline, maxTotal });
68
- }
69
- export const DEFAULT_ARTIFACT_PATHS = {
70
- "VISION.md": ".agentera/vision.yaml",
71
- "TODO.md": "TODO.md",
72
- "CHANGELOG.md": "CHANGELOG.md",
73
- "DECISIONS.md": ".agentera/decisions.yaml",
74
- "PLAN.md": ".agentera/plan.yaml",
75
- "PROGRESS.md": ".agentera/progress.yaml",
76
- "HEALTH.md": ".agentera/health.yaml",
77
- "DOCS.md": ".agentera/docs.yaml",
78
- "DESIGN.md": "DESIGN.md",
79
- };
18
+ export const DEFAULT_ARTIFACT_PATHS = { ...ARTIFACT_PROTOCOL_PATHS };
80
19
  function stripQuotes(value) {
81
20
  return value.replace(/^['"]|['"]$/g, "");
82
21
  }
@@ -106,7 +45,7 @@ export function parseDocsYamlMapping(docsText) {
106
45
  current = null;
107
46
  }
108
47
  }
109
- return mapping;
48
+ return normalizeArtifactMappingKeys(mapping);
110
49
  }
111
50
  export function parseArtifactMapping(docsText) {
112
51
  const mapping = {};
@@ -130,29 +69,22 @@ export function parseArtifactMapping(docsText) {
130
69
  break;
131
70
  }
132
71
  }
133
- return mapping;
72
+ return normalizeArtifactMappingKeys(mapping);
134
73
  }
135
74
  export function resolveArtifactPath(projectRoot, artifact, overrides = null) {
136
- if (overrides && artifact in overrides) {
137
- return path.join(projectRoot, overrides[artifact]);
75
+ const artifactId = normalizeArtifactProtocolId(artifact) ?? artifact;
76
+ if (overrides && artifactId in overrides) {
77
+ return path.join(projectRoot, overrides[artifactId]);
138
78
  }
139
- return path.join(projectRoot, DEFAULT_ARTIFACT_PATHS[artifact] ?? `.agentera/${artifact}`);
79
+ return path.join(projectRoot, DEFAULT_ARTIFACT_PATHS[artifactId] ?? `.agentera/${artifactId}.yaml`);
140
80
  }
141
81
  export function loadArtifactOverrides(projectRoot) {
142
- const yamlPath = path.join(projectRoot, ".agentera", "docs.yaml");
82
+ const yamlPath = path.join(projectRoot, ARTIFACT_PROTOCOL_PATHS.docs);
143
83
  if (fs.existsSync(yamlPath)) {
144
84
  const mapping = parseDocsYamlMapping(fs.readFileSync(yamlPath, "utf8"));
145
85
  if (Object.keys(mapping).length > 0) {
146
86
  return mapping;
147
87
  }
148
88
  }
149
- const docsPath = path.join(projectRoot, ".agentera", "DOCS.md");
150
- if (fs.existsSync(docsPath)) {
151
- const mapping = parseArtifactMapping(fs.readFileSync(docsPath, "utf8"));
152
- if (Object.keys(mapping).length > 0) {
153
- return mapping;
154
- }
155
- }
156
89
  return null;
157
90
  }
158
- //# sourceMappingURL=common.js.map