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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (696) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +118 -22
  3. package/bundle/CHANGELOG.md +1361 -0
  4. package/bundle/DESIGN.md +229 -0
  5. package/bundle/LICENSE +201 -0
  6. package/bundle/README.md +143 -0
  7. package/bundle/UPGRADE.md +252 -0
  8. package/bundle/extract-corpus-parity.json +21 -0
  9. package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
  10. package/bundle/references/adapters/package-publication.json +488 -0
  11. package/bundle/references/adapters/package-registry.yaml +435 -188
  12. package/bundle/references/adapters/package-surface-characterization.md +66 -34
  13. package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
  14. package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
  15. package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
  16. package/bundle/references/adapters/runtime-retired-resources.yaml +333 -0
  17. package/bundle/references/analysis/evidence-tier-authority.yaml +518 -0
  18. package/bundle/references/analysis/verification-policy.yaml +266 -0
  19. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +20 -10
  20. package/bundle/references/artifacts/glossary-entry-contract.yaml +1254 -0
  21. package/bundle/references/artifacts/state-storage-authority.yaml +3061 -0
  22. package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
  23. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +7 -8
  24. package/bundle/references/cli/capability-instruction-contract.yaml +11 -14
  25. package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
  26. package/bundle/references/cli/routing-model.md +155 -0
  27. package/bundle/references/cli/trigger-schema-enrichment.md +147 -0
  28. package/bundle/references/cli/update-channels.yaml +19 -2
  29. package/bundle/references/cli/vocabulary-index.yaml +20 -17
  30. package/bundle/references/cli/vocabulary.md +325 -362
  31. package/bundle/references/meta/retained-reference-authority.yaml +151 -0
  32. package/bundle/registry.json +13 -13
  33. package/bundle/skills/agentera/SKILL.md +226 -422
  34. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +84 -0
  35. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/exit.yaml +2 -2
  36. package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +25 -0
  37. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/validation.yaml +37 -18
  38. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +103 -0
  39. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +8 -6
  40. package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
  41. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +184 -0
  42. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/artifacts.yaml +12 -12
  43. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/exit.yaml +5 -5
  44. package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +16 -0
  45. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/validation.yaml +7 -7
  46. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +51 -0
  47. package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/exit.yaml +2 -2
  48. package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +20 -0
  49. package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +144 -0
  50. package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +80 -0
  51. package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +16 -0
  52. package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/validation.yaml +18 -18
  53. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/artifacts.yaml +18 -18
  54. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/exit.yaml +2 -2
  55. package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +16 -0
  56. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/validation.yaml +9 -9
  57. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +76 -0
  58. package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/exit.yaml +9 -7
  59. package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +23 -0
  60. package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +121 -0
  61. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +66 -0
  62. package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/exit.yaml +2 -2
  63. package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +23 -0
  64. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +121 -0
  65. package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +23 -0
  66. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +6 -5
  67. package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +20 -0
  68. package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +115 -0
  69. package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +24 -0
  70. package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +16 -0
  71. package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/validation.yaml +2 -2
  72. package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +73 -0
  73. package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +22 -0
  74. package/bundle/skills/agentera/capabilities/{hej → status}/schemas/validation.yaml +5 -5
  75. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/artifacts.yaml +16 -16
  76. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/exit.yaml +7 -6
  77. package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +23 -0
  78. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/validation.yaml +18 -20
  79. package/bundle/skills/agentera/capability_schema_contract.yaml +178 -34
  80. package/bundle/skills/agentera/protocol.yaml +31 -31
  81. package/bundle/skills/agentera/route-phrases.yaml +81 -0
  82. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +5 -4
  83. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +39 -21
  84. package/bundle/skills/agentera/schemas/artifacts/design.yaml +5 -4
  85. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +15 -19
  86. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +145 -14
  87. package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +82 -0
  88. package/bundle/skills/agentera/schemas/artifacts/health.yaml +58 -21
  89. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +22 -8
  90. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +461 -36
  91. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +133 -20
  92. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +342 -42
  93. package/bundle/skills/agentera/schemas/artifacts/vision.yaml +3 -3
  94. package/dist/analytics/extractCorpus/cli.js +101 -12
  95. package/dist/analytics/extractCorpus/copilotSessions.js +53 -9
  96. package/dist/analytics/extractCorpus/core.js +59 -24
  97. package/dist/analytics/extractCorpus/corpus.js +58 -23
  98. package/dist/analytics/extractCorpus/coverageAudit.js +260 -0
  99. package/dist/analytics/extractCorpus/cursorSessions.js +12 -7
  100. package/dist/analytics/extractCorpus/evidenceTiers.js +603 -0
  101. package/dist/analytics/extractCorpus/extractCorpusParity.js +105 -0
  102. package/dist/analytics/extractCorpus/filesystemSources.js +1 -5
  103. package/dist/analytics/extractCorpus/index.js +6 -1
  104. package/dist/analytics/extractCorpus/jsonlSessions.js +24 -5
  105. package/dist/analytics/extractCorpus/sqliteCaps.js +43 -0
  106. package/dist/analytics/extractCorpus/sqliteSessions.js +98 -6
  107. package/dist/analytics/extractCorpus/tierReader.js +108 -0
  108. package/dist/analytics/extractCorpus.js +0 -1
  109. package/dist/analytics/glossaryAdviceResolution.js +166 -0
  110. package/dist/analytics/glossaryInputAcquisition.js +319 -0
  111. package/dist/analytics/personalGlossaryAdmission.js +133 -0
  112. package/dist/analytics/personalGlossaryProfile.js +219 -0
  113. package/dist/analytics/profileSignals.js +211 -0
  114. package/dist/analytics/usageStats.js +169 -42
  115. package/dist/audit/terminologyDrift.js +281 -0
  116. package/dist/bin/agentera.js +3 -2
  117. package/dist/capabilities/audit/instructions.js +16 -0
  118. package/dist/capabilities/build/instructions.js +59 -0
  119. package/dist/capabilities/design/instructions.js +4 -0
  120. package/dist/capabilities/discuss/instructions.js +29 -0
  121. package/dist/capabilities/document/instructions.js +11 -0
  122. package/dist/capabilities/index.js +29 -27
  123. package/dist/capabilities/optimize/instructions.js +14 -0
  124. package/dist/capabilities/orchestrate/instructions.js +42 -0
  125. package/dist/capabilities/plan/instructions.js +33 -0
  126. package/dist/capabilities/profile/instructions.js +70 -0
  127. package/dist/capabilities/research/instructions.js +5 -0
  128. package/dist/capabilities/status/instructions.js +15 -0
  129. package/dist/capabilities/status/startupInstructions.js +34 -0
  130. package/dist/capabilities/vision/instructions.js +4 -0
  131. package/dist/cli/appContext.js +30 -24
  132. package/dist/cli/argvalidate.js +0 -1
  133. package/dist/cli/capabilityContext/benchmark.js +25 -17
  134. package/dist/cli/capabilityContext/bespoke.js +31 -12
  135. package/dist/cli/capabilityContext/build.js +251 -0
  136. package/dist/cli/capabilityContext/closeout.js +33 -30
  137. package/dist/cli/capabilityContext/contract.js +39 -46
  138. package/dist/cli/capabilityContext/evidence.js +90 -73
  139. package/dist/cli/capabilityContext/index.js +1 -2
  140. package/dist/cli/capabilityContext/orchestration.js +45 -21
  141. package/dist/cli/capabilityContext/planState.js +93 -100
  142. package/dist/cli/capabilityContext/progress.js +60 -14
  143. package/dist/cli/capabilityContext/projectVerification.js +409 -0
  144. package/dist/cli/capabilityContext/shared.js +9 -20
  145. package/dist/cli/capabilityContext/slim.js +56 -10
  146. package/dist/cli/capabilityContext/startup.js +57 -115
  147. package/dist/cli/capabilityContext/startupAggregation.js +68 -0
  148. package/dist/cli/capabilityContext/types.js +37 -24
  149. package/dist/cli/capabilityContext.js +1 -2
  150. package/dist/cli/commands/appHome.js +22 -0
  151. package/dist/cli/commands/capability.js +4 -4
  152. package/dist/cli/commands/compact.js +163 -13
  153. package/dist/cli/commands/doctor.js +122 -114
  154. package/dist/cli/commands/durability.js +81 -0
  155. package/dist/cli/commands/glossaryAdvice.js +138 -0
  156. package/dist/cli/commands/lint.js +22 -8
  157. package/dist/cli/commands/personalGlossary.js +176 -0
  158. package/dist/cli/commands/prime/briefOrientation.js +746 -0
  159. package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
  160. package/dist/cli/commands/prime/bundleStatus.js +190 -0
  161. package/dist/cli/commands/prime/collectEntityOrientation.js +326 -0
  162. package/dist/cli/commands/prime/collectOrientationState.js +219 -0
  163. package/dist/cli/commands/prime/orientationOutput.js +421 -0
  164. package/dist/cli/commands/prime/types.js +1 -0
  165. package/dist/cli/commands/prime/v1Migration.js +38 -0
  166. package/dist/cli/commands/prime.js +80 -558
  167. package/dist/cli/commands/profileGrounding.js +55 -0
  168. package/dist/cli/commands/query.js +77 -52
  169. package/dist/cli/commands/report.js +88 -26
  170. package/dist/cli/commands/route.js +142 -0
  171. package/dist/cli/commands/schema.js +266 -142
  172. package/dist/cli/commands/state/decisions.js +51 -61
  173. package/dist/cli/commands/state/docs.js +63 -86
  174. package/dist/cli/commands/state/experimentRecords.js +151 -0
  175. package/dist/cli/commands/state/experiments.js +11 -64
  176. package/dist/cli/commands/state/get.js +129 -0
  177. package/dist/cli/commands/state/health.js +11 -111
  178. package/dist/cli/commands/state/index.js +6 -41
  179. package/dist/cli/commands/state/list.js +194 -0
  180. package/dist/cli/commands/state/objective.js +21 -64
  181. package/dist/cli/commands/state/plan.js +11 -169
  182. package/dist/cli/commands/state/planTasks.js +154 -0
  183. package/dist/cli/commands/state/plans.js +154 -0
  184. package/dist/cli/commands/state/progress.js +11 -45
  185. package/dist/cli/commands/state/shared.js +0 -1
  186. package/dist/cli/commands/state/todo.js +29 -108
  187. package/dist/cli/commands/state/write.js +433 -0
  188. package/dist/cli/commands/upgrade.js +146 -5
  189. package/dist/cli/commands/upgradeVerify.js +118 -0
  190. package/dist/cli/commands/validate.js +246 -211
  191. package/dist/cli/commands/verify.js +24 -9
  192. package/dist/cli/contracts/bundleStatus.js +1 -0
  193. package/dist/cli/contracts/orientationState.js +1 -0
  194. package/dist/cli/dispatch/argvParser.js +32 -0
  195. package/dist/cli/dispatch/check.js +94 -50
  196. package/dist/cli/dispatch/commands.js +27 -0
  197. package/dist/cli/dispatch/index.js +82 -52
  198. package/dist/cli/dispatch/lifecycle.js +268 -108
  199. package/dist/cli/dispatch/prime.js +68 -29
  200. package/dist/cli/dispatch/projections.js +17 -0
  201. package/dist/cli/dispatch/shared.js +1 -2
  202. package/dist/cli/dispatch/state.js +68 -77
  203. package/dist/cli/dispatch.js +0 -1
  204. package/dist/cli/errors.js +16 -17
  205. package/dist/cli/help.js +395 -41
  206. package/dist/cli/migrationRequired.js +122 -0
  207. package/dist/cli/orientation/attention.js +61 -0
  208. package/dist/cli/orientation/corpusCoverage.js +102 -0
  209. package/dist/cli/orientation.js +438 -170
  210. package/dist/cli/planArtifacts.js +350 -0
  211. package/dist/cli/planEvidence.js +157 -0
  212. package/dist/cli/planLifecycleState.js +36 -0
  213. package/dist/cli/planTaskIndex.js +11 -0
  214. package/dist/cli/preCutoverCommand.js +32 -0
  215. package/dist/cli/prime-blob.js +71 -3
  216. package/dist/cli/profileAcquisition.js +167 -0
  217. package/dist/cli/startupCompletenessContract.js +59 -0
  218. package/dist/cli/stateQuery.js +56 -14
  219. package/dist/cli/structured.js +0 -1
  220. package/dist/cli/todoMarkdown.js +25 -12
  221. package/dist/cli/todoReadinessSelection.js +192 -0
  222. package/dist/cli/todoSeverity.js +18 -0
  223. package/dist/core/atomicWriter.js +20 -0
  224. package/dist/core/developmentChannel.js +1 -0
  225. package/dist/core/developmentInvocation.js +374 -0
  226. package/dist/core/difflib.js +0 -1
  227. package/dist/core/envPaths.js +20 -0
  228. package/dist/core/jsonValue.js +5 -0
  229. package/dist/core/paths.js +0 -1
  230. package/dist/core/pyjson.js +67 -3
  231. package/dist/core/shell.js +4 -0
  232. package/dist/core/skillIdentity.js +23 -0
  233. package/dist/core/sourceRoot.js +9 -12
  234. package/dist/core/text.js +10 -0
  235. package/dist/core/toml.js +0 -1
  236. package/dist/core/yaml.js +8 -1
  237. package/dist/eval/evalSkills.js +30 -26
  238. package/dist/eval/hybridRouteEvaluation.js +155 -0
  239. package/dist/eval/semanticEval.js +43 -20
  240. package/dist/eval/semanticFixtures.js +16 -5
  241. package/dist/hooks/common.js +3 -56
  242. package/dist/hooks/compaction/apply.js +252 -50
  243. package/dist/hooks/compaction/dryRun.js +7 -4
  244. package/dist/hooks/compaction/index.js +5 -6
  245. package/dist/hooks/compaction/parse.js +201 -5
  246. package/dist/hooks/compaction/retention.js +30 -25
  247. package/dist/hooks/compaction/status.js +149 -32
  248. package/dist/hooks/compaction/types.js +0 -1
  249. package/dist/hooks/validateArtifact/agentFacing.js +0 -1
  250. package/dist/hooks/validateArtifact/index.js +7 -64
  251. package/dist/hooks/validateArtifact/markdown.js +57 -7
  252. package/dist/hooks/validateArtifact/schema.js +110 -19
  253. package/dist/hooks/validateArtifact/traversal.js +13 -11
  254. package/dist/hooks/validateArtifact/violations.js +7 -5
  255. package/dist/migrate/v2HandoffManifest.js +127 -8
  256. package/dist/registries/activationContract.js +2 -0
  257. package/dist/registries/activationTuples.js +108 -0
  258. package/dist/registries/artifactProtocolIds.js +2 -1
  259. package/dist/registries/artifactRegistry.js +224 -63
  260. package/dist/registries/artifactSchemaProjection.js +45 -0
  261. package/dist/registries/capabilityContract.js +129 -2
  262. package/dist/registries/evaluatorHandoffContract.js +2 -3
  263. package/dist/registries/evidenceTierContract.js +371 -0
  264. package/dist/registries/glossaryAdviceContract.js +79 -0
  265. package/dist/registries/glossaryCaveatContract.js +67 -0
  266. package/dist/registries/glossaryConsumerContractValidation.js +787 -0
  267. package/dist/registries/glossaryEntryContract.js +757 -0
  268. package/dist/registries/glossaryTermIdentity.js +17 -0
  269. package/dist/registries/glossaryTermOccurrence.js +20 -0
  270. package/dist/registries/hybridRoute.js +274 -0
  271. package/dist/registries/hybridRouteReceipt.js +221 -0
  272. package/dist/registries/packagePublication.js +273 -0
  273. package/dist/registries/packageRegistry.js +187 -211
  274. package/dist/registries/todoReadinessContract.js +448 -0
  275. package/dist/registries/triggerLoader.js +174 -0
  276. package/dist/registries/verbosityBudgetContract.js +205 -0
  277. package/dist/release/releaseMetadata.js +156 -6
  278. package/dist/runtime/lifecycleAdapterContract.js +457 -0
  279. package/dist/runtime/lifecycleAdapters.js +777 -0
  280. package/dist/runtime/lifecycleAuthority.js +453 -0
  281. package/dist/runtime/lifecycleOperationContract.js +123 -0
  282. package/dist/runtime/lifecycleOperations.js +634 -0
  283. package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
  284. package/dist/runtime/lifecyclePublication.js +415 -0
  285. package/dist/runtime/lifecycleSnapshot.js +438 -0
  286. package/dist/runtime/nativeResourceCleanup.js +502 -0
  287. package/dist/setup/opencode.js +20 -13
  288. package/dist/setup/opencodeConstants.js +1 -0
  289. package/dist/setup/sharedSkill.js +45 -0
  290. package/dist/setup/smokeChecks.js +21 -82
  291. package/dist/state/archiveDiscovery.js +580 -0
  292. package/dist/state/archivePublication.js +225 -0
  293. package/dist/state/archiveRecovery.js +237 -0
  294. package/dist/state/archiveReplay.js +53 -0
  295. package/dist/state/canonicalMigrationRecord.js +36 -0
  296. package/dist/state/changelog.js +221 -0
  297. package/dist/state/decisionEntities.js +367 -0
  298. package/dist/state/decisionLegacyValidation.js +215 -0
  299. package/dist/state/decisionMigrationProvenance.js +199 -0
  300. package/dist/state/decisionOverlay.js +254 -0
  301. package/dist/state/decisionRevision.js +256 -0
  302. package/dist/state/decisionRevisionMigration.js +89 -0
  303. package/dist/state/directRetrieval.js +323 -0
  304. package/dist/state/durability.js +324 -0
  305. package/dist/state/entityCutover.js +459 -0
  306. package/dist/state/entityCutoverGit.js +127 -0
  307. package/dist/state/entityGlossaryAuthority.js +13 -0
  308. package/dist/state/entityListProjection.js +187 -0
  309. package/dist/state/entityListRuntimeRegistry.js +85 -0
  310. package/dist/state/entityMigrationCausality.js +97 -0
  311. package/dist/state/entityMigrationIdentity.js +5 -0
  312. package/dist/state/entityMigrationPreview.js +840 -0
  313. package/dist/state/entityMigrationTodo.js +133 -0
  314. package/dist/state/entityPublicationContext.js +859 -0
  315. package/dist/state/entityRetrievalHelp.js +506 -0
  316. package/dist/state/entityStorage.js +899 -0
  317. package/dist/state/exactReplacementRecovery.js +18 -0
  318. package/dist/state/experimentArchive.js +63 -0
  319. package/dist/state/experimentIdentity.js +202 -0
  320. package/dist/state/healthEntities.js +262 -0
  321. package/dist/state/healthEntityValidation.js +18 -0
  322. package/dist/state/healthRepair.js +69 -0
  323. package/dist/state/installRoot.js +64 -25
  324. package/dist/state/legacyEntityCutoverEvidence.js +65 -0
  325. package/dist/state/legacyIdentity.js +47 -0
  326. package/dist/state/legacySummaryRecord.js +6 -0
  327. package/dist/state/listAccounting.js +54 -0
  328. package/dist/state/listClassification.js +17 -0
  329. package/dist/state/listCursor.js +42 -0
  330. package/dist/state/listRetrieval.js +781 -0
  331. package/dist/state/migrationSourceBinding.js +30 -0
  332. package/dist/state/objectiveExperimentEntities.js +322 -0
  333. package/dist/state/planEntities.js +1027 -0
  334. package/dist/state/planIdentity.js +47 -0
  335. package/dist/state/planLineageValidation.js +52 -0
  336. package/dist/state/planReplacementTransaction.js +475 -0
  337. package/dist/state/planRetrieval.js +313 -0
  338. package/dist/state/planTaskRetrieval.js +294 -0
  339. package/dist/state/progressEntities.js +512 -0
  340. package/dist/state/progressGlossaryCaveat.js +168 -0
  341. package/dist/state/progressPublicationOrder.js +19 -0
  342. package/dist/state/progressWritePolicy.js +33 -0
  343. package/dist/state/projectRoot.js +62 -0
  344. package/dist/state/projectionPolicy.js +190 -0
  345. package/dist/state/retrievalAuthority.js +156 -0
  346. package/dist/state/safeProjectFile.js +155 -0
  347. package/dist/state/startupAnalysis/benchmark.js +92 -27
  348. package/dist/state/startupAnalysis/contract.js +48 -10
  349. package/dist/state/startupAnalysis/helpers.js +27 -73
  350. package/dist/state/startupAnalysis/index.js +0 -1
  351. package/dist/state/startupAnalysis/metrics.js +25 -19
  352. package/dist/state/startupAnalysis/records.js +13 -10
  353. package/dist/state/startupAnalysis/report.js +26 -38
  354. package/dist/state/startupAnalysis/threshold.js +19 -7
  355. package/dist/state/startupAnalysis.js +0 -1
  356. package/dist/state/startupProjection.js +499 -0
  357. package/dist/state/stateMode.js +222 -0
  358. package/dist/state/stateStorageAuthority.js +47 -0
  359. package/dist/state/summaryEntityRead.js +25 -0
  360. package/dist/state/summaryMigrationProvenance.js +66 -0
  361. package/dist/state/summarySourceRowAuthority.js +36 -0
  362. package/dist/state/todoActivationSafety.js +58 -0
  363. package/dist/state/todoDocsEntities.js +1124 -0
  364. package/dist/state/todoDocsEntityValidation.js +158 -0
  365. package/dist/state/todoMarkdownProjection.js +51 -0
  366. package/dist/state/todoReconciliationActivation.js +182 -0
  367. package/dist/state/todoReconciliationInspection.js +171 -0
  368. package/dist/state/todoReconciliationRepair.js +318 -0
  369. package/dist/state/todoReconciliationTransaction.js +595 -0
  370. package/dist/state/write/assign.js +20 -0
  371. package/dist/state/write/candidateMutation.js +269 -0
  372. package/dist/state/write/errors.js +11 -0
  373. package/dist/state/write/experimentPublication.js +192 -0
  374. package/dist/state/write/explain.js +377 -0
  375. package/dist/state/write/fields.js +61 -0
  376. package/dist/state/write/glossaryPublication.js +263 -0
  377. package/dist/state/write/grammar.js +285 -0
  378. package/dist/state/write/helpers.js +29 -0
  379. package/dist/state/write/index.js +12 -0
  380. package/dist/state/write/input.js +391 -0
  381. package/dist/state/write/lock.js +837 -0
  382. package/dist/state/write/mutation.js +234 -0
  383. package/dist/state/write/operations.js +170 -0
  384. package/dist/state/write/planEvaluation.js +128 -0
  385. package/dist/state/write/planPublication.js +179 -0
  386. package/dist/state/write/runtimeOperations.js +146 -0
  387. package/dist/state/write/serialize.js +1 -0
  388. package/dist/state/write/transaction.js +57 -0
  389. package/dist/state/write/validate.js +7 -0
  390. package/dist/upgrade/appContentRefresh.js +383 -0
  391. package/dist/upgrade/appModel.js +8 -7
  392. package/dist/upgrade/atomicWriter.js +1 -0
  393. package/dist/upgrade/bundleEvidence.js +33 -0
  394. package/dist/upgrade/channels.js +12 -8
  395. package/dist/upgrade/compatibility.js +56 -21
  396. package/dist/upgrade/doctor.js +165 -199
  397. package/dist/upgrade/doctorClassifier.js +187 -0
  398. package/dist/upgrade/installedHooksRetirement.js +196 -0
  399. package/dist/upgrade/legacyAgentCleanup.js +282 -0
  400. package/dist/upgrade/lifecycleUpgrade.js +113 -0
  401. package/dist/upgrade/migrateArtifactsV2ToV3.js +375 -79
  402. package/dist/upgrade/migrationPublication.js +122 -0
  403. package/dist/upgrade/nextMajorDoctor.js +29 -10
  404. package/dist/upgrade/npxPlatformStatus.js +22 -0
  405. package/dist/upgrade/projectIntegration.js +145 -189
  406. package/dist/upgrade/projectIntegrationDecision.js +50 -0
  407. package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
  408. package/dist/upgrade/runtimeMigration.js +272 -373
  409. package/dist/upgrade/upgradeCommands.js +14 -1
  410. package/dist/upgrade/upgradeLock.js +85 -0
  411. package/dist/upgrade/upgradeOrchestrator.js +263 -59
  412. package/dist/upgrade/v3CapabilitySurface.js +2 -3
  413. package/dist/upgrade/versionResolution.js +2 -3
  414. package/dist/validate/activationArtifactEvidence.js +852 -0
  415. package/dist/validate/activationArtifactEvidenceTypes.js +12 -0
  416. package/dist/validate/activationConjunction.js +816 -0
  417. package/dist/validate/activationEvidenceManifest.js +531 -0
  418. package/dist/validate/activationPackageSemantics.js +29 -0
  419. package/dist/validate/appHomeContract.js +2 -8
  420. package/dist/validate/bootstrapAuthority.js +44 -0
  421. package/dist/validate/capability.js +133 -12
  422. package/dist/validate/crossCapability.js +15 -10
  423. package/dist/validate/retainedReferenceAuthority.js +879 -0
  424. package/dist/validate/selfAudit.js +39 -45
  425. package/dist/validate/v1LegacyCruft.js +131 -0
  426. package/dist/validate/vocabularyAuthority.js +18 -13
  427. package/package.json +60 -29
  428. package/bundle/references/adapters/cursor.md +0 -213
  429. package/bundle/references/adapters/opencode.md +0 -530
  430. package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
  431. package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
  432. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
  433. package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -548
  434. package/bundle/references/adapters/runtime-feature-parity.md +0 -189
  435. package/bundle/references/analysis/benchmark.md +0 -267
  436. package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
  437. package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
  438. package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -369
  439. package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -250
  440. package/bundle/references/cli/capability-tool-classification.yaml +0 -53
  441. package/bundle/references/cli/coexistence-probe.yaml +0 -9
  442. package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
  443. package/bundle/references/cli/single-name-protocol.yaml +0 -42
  444. package/bundle/references/cli/upgrade-repair-wording.md +0 -31
  445. package/bundle/references/cli/v3-handoff-manifest.schema.yaml +0 -98
  446. package/bundle/references/meta/documentation-inventory.md +0 -49
  447. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  448. package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
  449. package/bundle/skills/agentera/agents/hej.toml +0 -6
  450. package/bundle/skills/agentera/agents/inspektera.toml +0 -6
  451. package/bundle/skills/agentera/agents/inspirera.toml +0 -6
  452. package/bundle/skills/agentera/agents/optimera.toml +0 -6
  453. package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
  454. package/bundle/skills/agentera/agents/planera.toml +0 -6
  455. package/bundle/skills/agentera/agents/profilera.toml +0 -6
  456. package/bundle/skills/agentera/agents/realisera.toml +0 -6
  457. package/bundle/skills/agentera/agents/resonera.toml +0 -6
  458. package/bundle/skills/agentera/agents/visionera.toml +0 -6
  459. package/bundle/skills/agentera/agents/visualisera.toml +0 -6
  460. package/bundle/skills/agentera/capabilities/dokumentera/schemas/artifacts.yaml +0 -73
  461. package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +0 -35
  462. package/bundle/skills/agentera/capabilities/hej/schemas/artifacts.yaml +0 -69
  463. package/bundle/skills/agentera/capabilities/hej/schemas/triggers.yaml +0 -58
  464. package/bundle/skills/agentera/capabilities/inspektera/schemas/artifacts.yaml +0 -76
  465. package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +0 -38
  466. package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +0 -24
  467. package/bundle/skills/agentera/capabilities/inspirera/schemas/triggers.yaml +0 -34
  468. package/bundle/skills/agentera/capabilities/optimera/schemas/triggers.yaml +0 -39
  469. package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +0 -64
  470. package/bundle/skills/agentera/capabilities/orkestrera/schemas/triggers.yaml +0 -42
  471. package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +0 -120
  472. package/bundle/skills/agentera/capabilities/planera/schemas/artifacts.yaml +0 -62
  473. package/bundle/skills/agentera/capabilities/planera/schemas/triggers.yaml +0 -34
  474. package/bundle/skills/agentera/capabilities/planera/schemas/validation.yaml +0 -61
  475. package/bundle/skills/agentera/capabilities/profilera/schemas/artifacts.yaml +0 -18
  476. package/bundle/skills/agentera/capabilities/profilera/schemas/triggers.yaml +0 -45
  477. package/bundle/skills/agentera/capabilities/profilera/schemas/validation.yaml +0 -57
  478. package/bundle/skills/agentera/capabilities/realisera/schemas/artifacts.yaml +0 -80
  479. package/bundle/skills/agentera/capabilities/realisera/schemas/triggers.yaml +0 -39
  480. package/bundle/skills/agentera/capabilities/realisera/schemas/validation.yaml +0 -110
  481. package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +0 -47
  482. package/bundle/skills/agentera/capabilities/resonera/schemas/triggers.yaml +0 -46
  483. package/bundle/skills/agentera/capabilities/resonera/schemas/validation.yaml +0 -77
  484. package/bundle/skills/agentera/capabilities/visionera/schemas/triggers.yaml +0 -41
  485. package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +0 -33
  486. package/bundle/skills/agentera/references/contract.md +0 -1039
  487. package/dist/analytics/extractCorpus/cli.js.map +0 -1
  488. package/dist/analytics/extractCorpus/copilotSessions.js.map +0 -1
  489. package/dist/analytics/extractCorpus/core.js.map +0 -1
  490. package/dist/analytics/extractCorpus/corpus.js.map +0 -1
  491. package/dist/analytics/extractCorpus/cursorSessions.js.map +0 -1
  492. package/dist/analytics/extractCorpus/filesystemSources.js.map +0 -1
  493. package/dist/analytics/extractCorpus/index.js.map +0 -1
  494. package/dist/analytics/extractCorpus/jsonlSessions.js.map +0 -1
  495. package/dist/analytics/extractCorpus/sqliteSessions.js.map +0 -1
  496. package/dist/analytics/extractCorpus.js.map +0 -1
  497. package/dist/analytics/usageStats.js.map +0 -1
  498. package/dist/bin/agentera.js.map +0 -1
  499. package/dist/capabilities/dokumentera/instructions.js +0 -6
  500. package/dist/capabilities/dokumentera/instructions.js.map +0 -1
  501. package/dist/capabilities/hej/instructions.js +0 -6
  502. package/dist/capabilities/hej/instructions.js.map +0 -1
  503. package/dist/capabilities/index.js.map +0 -1
  504. package/dist/capabilities/inspektera/instructions.js +0 -6
  505. package/dist/capabilities/inspektera/instructions.js.map +0 -1
  506. package/dist/capabilities/inspirera/instructions.js +0 -6
  507. package/dist/capabilities/inspirera/instructions.js.map +0 -1
  508. package/dist/capabilities/optimera/instructions.js +0 -6
  509. package/dist/capabilities/optimera/instructions.js.map +0 -1
  510. package/dist/capabilities/orkestrera/instructions.js +0 -6
  511. package/dist/capabilities/orkestrera/instructions.js.map +0 -1
  512. package/dist/capabilities/planera/instructions.js +0 -6
  513. package/dist/capabilities/planera/instructions.js.map +0 -1
  514. package/dist/capabilities/profilera/instructions.js +0 -6
  515. package/dist/capabilities/profilera/instructions.js.map +0 -1
  516. package/dist/capabilities/realisera/instructions.js +0 -6
  517. package/dist/capabilities/realisera/instructions.js.map +0 -1
  518. package/dist/capabilities/resonera/instructions.js +0 -6
  519. package/dist/capabilities/resonera/instructions.js.map +0 -1
  520. package/dist/capabilities/visionera/instructions.js +0 -6
  521. package/dist/capabilities/visionera/instructions.js.map +0 -1
  522. package/dist/capabilities/visualisera/instructions.js +0 -6
  523. package/dist/capabilities/visualisera/instructions.js.map +0 -1
  524. package/dist/cli/appContext.js.map +0 -1
  525. package/dist/cli/argvalidate.js.map +0 -1
  526. package/dist/cli/capabilityContext/benchmark.js.map +0 -1
  527. package/dist/cli/capabilityContext/bespoke.js.map +0 -1
  528. package/dist/cli/capabilityContext/closeout.js.map +0 -1
  529. package/dist/cli/capabilityContext/contract.js.map +0 -1
  530. package/dist/cli/capabilityContext/evidence.js.map +0 -1
  531. package/dist/cli/capabilityContext/index.js.map +0 -1
  532. package/dist/cli/capabilityContext/orchestration.js.map +0 -1
  533. package/dist/cli/capabilityContext/planState.js.map +0 -1
  534. package/dist/cli/capabilityContext/progress.js.map +0 -1
  535. package/dist/cli/capabilityContext/realisera.js +0 -174
  536. package/dist/cli/capabilityContext/realisera.js.map +0 -1
  537. package/dist/cli/capabilityContext/shared.js.map +0 -1
  538. package/dist/cli/capabilityContext/slim.js.map +0 -1
  539. package/dist/cli/capabilityContext/startup.js.map +0 -1
  540. package/dist/cli/capabilityContext/types.js.map +0 -1
  541. package/dist/cli/capabilityContext.js.map +0 -1
  542. package/dist/cli/commands/backfill.js +0 -84
  543. package/dist/cli/commands/backfill.js.map +0 -1
  544. package/dist/cli/commands/capability.js.map +0 -1
  545. package/dist/cli/commands/compact.js.map +0 -1
  546. package/dist/cli/commands/doctor.js.map +0 -1
  547. package/dist/cli/commands/lint.js.map +0 -1
  548. package/dist/cli/commands/prime.js.map +0 -1
  549. package/dist/cli/commands/query.js.map +0 -1
  550. package/dist/cli/commands/report.js.map +0 -1
  551. package/dist/cli/commands/schema.js.map +0 -1
  552. package/dist/cli/commands/state/decisions.js.map +0 -1
  553. package/dist/cli/commands/state/docs.js.map +0 -1
  554. package/dist/cli/commands/state/experiments.js.map +0 -1
  555. package/dist/cli/commands/state/health.js.map +0 -1
  556. package/dist/cli/commands/state/index.js.map +0 -1
  557. package/dist/cli/commands/state/objective.js.map +0 -1
  558. package/dist/cli/commands/state/plan.js.map +0 -1
  559. package/dist/cli/commands/state/progress.js.map +0 -1
  560. package/dist/cli/commands/state/shared.js.map +0 -1
  561. package/dist/cli/commands/state/todo.js.map +0 -1
  562. package/dist/cli/commands/state.js +0 -1023
  563. package/dist/cli/commands/state.js.map +0 -1
  564. package/dist/cli/commands/upgrade.js.map +0 -1
  565. package/dist/cli/commands/validate.js.map +0 -1
  566. package/dist/cli/commands/verify.js.map +0 -1
  567. package/dist/cli/dispatch/check.js.map +0 -1
  568. package/dist/cli/dispatch/index.js.map +0 -1
  569. package/dist/cli/dispatch/lifecycle.js.map +0 -1
  570. package/dist/cli/dispatch/prime.js.map +0 -1
  571. package/dist/cli/dispatch/shared.js.map +0 -1
  572. package/dist/cli/dispatch/state.js.map +0 -1
  573. package/dist/cli/dispatch.js.map +0 -1
  574. package/dist/cli/errors.js.map +0 -1
  575. package/dist/cli/help.js.map +0 -1
  576. package/dist/cli/orientation.js.map +0 -1
  577. package/dist/cli/prime-blob.js.map +0 -1
  578. package/dist/cli/stateQuery.js.map +0 -1
  579. package/dist/cli/structured.js.map +0 -1
  580. package/dist/cli/todoMarkdown.js.map +0 -1
  581. package/dist/core/difflib.js.map +0 -1
  582. package/dist/core/git.js +0 -43
  583. package/dist/core/git.js.map +0 -1
  584. package/dist/core/paths.js.map +0 -1
  585. package/dist/core/pyjson.js.map +0 -1
  586. package/dist/core/sourceRoot.js.map +0 -1
  587. package/dist/core/toml.js.map +0 -1
  588. package/dist/core/yaml.js.map +0 -1
  589. package/dist/eval/evalSkills.js.map +0 -1
  590. package/dist/eval/semanticEval.js.map +0 -1
  591. package/dist/eval/semanticFixtures.js.map +0 -1
  592. package/dist/hooks/common.js.map +0 -1
  593. package/dist/hooks/compaction/apply.js.map +0 -1
  594. package/dist/hooks/compaction/dryRun.js.map +0 -1
  595. package/dist/hooks/compaction/index.js.map +0 -1
  596. package/dist/hooks/compaction/parse.js.map +0 -1
  597. package/dist/hooks/compaction/retention.js.map +0 -1
  598. package/dist/hooks/compaction/status.js.map +0 -1
  599. package/dist/hooks/compaction/types.js.map +0 -1
  600. package/dist/hooks/compaction.js +0 -935
  601. package/dist/hooks/compaction.js.map +0 -1
  602. package/dist/hooks/cursorPreToolUse.js +0 -19
  603. package/dist/hooks/cursorPreToolUse.js.map +0 -1
  604. package/dist/hooks/cursorSessionStart.js +0 -71
  605. package/dist/hooks/cursorSessionStart.js.map +0 -1
  606. package/dist/hooks/sessionStart.js +0 -209
  607. package/dist/hooks/sessionStart.js.map +0 -1
  608. package/dist/hooks/sessionStop.js +0 -203
  609. package/dist/hooks/sessionStop.js.map +0 -1
  610. package/dist/hooks/validateArtifact/agentFacing.js.map +0 -1
  611. package/dist/hooks/validateArtifact/index.js.map +0 -1
  612. package/dist/hooks/validateArtifact/markdown.js.map +0 -1
  613. package/dist/hooks/validateArtifact/runtime.js +0 -83
  614. package/dist/hooks/validateArtifact/runtime.js.map +0 -1
  615. package/dist/hooks/validateArtifact/schema.js.map +0 -1
  616. package/dist/hooks/validateArtifact/traversal.js.map +0 -1
  617. package/dist/hooks/validateArtifact/violations.js.map +0 -1
  618. package/dist/hooks/validateArtifact.js +0 -924
  619. package/dist/hooks/validateArtifact.js.map +0 -1
  620. package/dist/migrate/v2HandoffManifest.js.map +0 -1
  621. package/dist/registries/artifactProtocolIds.js.map +0 -1
  622. package/dist/registries/artifactRegistry.js.map +0 -1
  623. package/dist/registries/capabilityContract.js.map +0 -1
  624. package/dist/registries/evaluatorHandoffContract.js.map +0 -1
  625. package/dist/registries/packageRegistry.js.map +0 -1
  626. package/dist/registries/runtimeAdapterRegistry.js +0 -315
  627. package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
  628. package/dist/release/releaseMetadata.js.map +0 -1
  629. package/dist/setup/codex/agents.js +0 -96
  630. package/dist/setup/codex/agents.js.map +0 -1
  631. package/dist/setup/codex/cli.js +0 -161
  632. package/dist/setup/codex/cli.js.map +0 -1
  633. package/dist/setup/codex/configToml.js +0 -644
  634. package/dist/setup/codex/configToml.js.map +0 -1
  635. package/dist/setup/codex/constants.js +0 -29
  636. package/dist/setup/codex/constants.js.map +0 -1
  637. package/dist/setup/codex/installRoot.js +0 -64
  638. package/dist/setup/codex/installRoot.js.map +0 -1
  639. package/dist/setup/codex/state.js +0 -270
  640. package/dist/setup/codex/state.js.map +0 -1
  641. package/dist/setup/codex.js +0 -12
  642. package/dist/setup/codex.js.map +0 -1
  643. package/dist/setup/copilot.js +0 -227
  644. package/dist/setup/copilot.js.map +0 -1
  645. package/dist/setup/cursor.js +0 -127
  646. package/dist/setup/cursor.js.map +0 -1
  647. package/dist/setup/doctor/core.js +0 -300
  648. package/dist/setup/doctor/core.js.map +0 -1
  649. package/dist/setup/doctor/diagnostics.js +0 -247
  650. package/dist/setup/doctor/diagnostics.js.map +0 -1
  651. package/dist/setup/doctor/opencode.js +0 -281
  652. package/dist/setup/doctor/opencode.js.map +0 -1
  653. package/dist/setup/doctor/report.js +0 -474
  654. package/dist/setup/doctor/report.js.map +0 -1
  655. package/dist/setup/doctor.js +0 -10
  656. package/dist/setup/doctor.js.map +0 -1
  657. package/dist/setup/opencode.js.map +0 -1
  658. package/dist/setup/smokeChecks.js.map +0 -1
  659. package/dist/state/installRoot.js.map +0 -1
  660. package/dist/state/progressCommit.js +0 -289
  661. package/dist/state/progressCommit.js.map +0 -1
  662. package/dist/state/startupAnalysis/benchmark.js.map +0 -1
  663. package/dist/state/startupAnalysis/contract.js.map +0 -1
  664. package/dist/state/startupAnalysis/helpers.js.map +0 -1
  665. package/dist/state/startupAnalysis/index.js.map +0 -1
  666. package/dist/state/startupAnalysis/metrics.js.map +0 -1
  667. package/dist/state/startupAnalysis/records.js.map +0 -1
  668. package/dist/state/startupAnalysis/report.js.map +0 -1
  669. package/dist/state/startupAnalysis/threshold.js.map +0 -1
  670. package/dist/state/startupAnalysis.js.map +0 -1
  671. package/dist/upgrade/appModel.js.map +0 -1
  672. package/dist/upgrade/channels.js.map +0 -1
  673. package/dist/upgrade/coexistenceProbe.js +0 -83
  674. package/dist/upgrade/coexistenceProbe.js.map +0 -1
  675. package/dist/upgrade/compatibility.js.map +0 -1
  676. package/dist/upgrade/doctor.js.map +0 -1
  677. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -570
  678. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
  679. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
  680. package/dist/upgrade/nextMajorDoctor.js.map +0 -1
  681. package/dist/upgrade/projectIntegration.js.map +0 -1
  682. package/dist/upgrade/runtimeMigration.js.map +0 -1
  683. package/dist/upgrade/upgradeCommands.js.map +0 -1
  684. package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
  685. package/dist/upgrade/v3CapabilitySurface.js.map +0 -1
  686. package/dist/upgrade/versionResolution.js.map +0 -1
  687. package/dist/validate/appHomeContract.js.map +0 -1
  688. package/dist/validate/capability.js.map +0 -1
  689. package/dist/validate/crossCapability.js.map +0 -1
  690. package/dist/validate/lifecycleAdapters.js +0 -772
  691. package/dist/validate/lifecycleAdapters.js.map +0 -1
  692. package/dist/validate/selfAudit.js.map +0 -1
  693. package/dist/validate/vocabularyAuthority.js.map +0 -1
  694. /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
  695. /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
  696. /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
@@ -0,0 +1,105 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { ADAPTER_VERSION, COPILOT_SPARSE_REMEDIATION, FAMILIES, MAX_SQLITE_ROWS, MAX_SQLITE_SESSIONS, MAX_TOOL_ARG_TEXT, RUNTIME_STORE_GLOBS, discoverRuntimeStore, } from "./core.js";
4
+ import { buildCorpus } from "./corpus.js";
5
+ import { runCoverageAudit } from "./coverageAudit.js";
6
+ import { extractOpencodeSessions } from "./sqliteSessions.js";
7
+ export const EXTRACT_CORPUS_PARITY_SCHEMA = "agentera-extract-corpus-parity-v1";
8
+ export function buildExtractCorpusParityManifest() {
9
+ return {
10
+ schema_version: EXTRACT_CORPUS_PARITY_SCHEMA,
11
+ adapter_version: ADAPTER_VERSION,
12
+ max_sqlite_sessions: MAX_SQLITE_SESSIONS,
13
+ max_sqlite_rows: MAX_SQLITE_ROWS,
14
+ max_tool_arg_text: MAX_TOOL_ARG_TEXT,
15
+ copilot_sparse_remediation: COPILOT_SPARSE_REMEDIATION,
16
+ runtime_store_globs: { ...RUNTIME_STORE_GLOBS },
17
+ families: [...FAMILIES],
18
+ };
19
+ }
20
+ function trackEarliest(current, candidate) {
21
+ if (!candidate)
22
+ return current;
23
+ if (current === null)
24
+ return candidate;
25
+ return candidate < current ? candidate : current;
26
+ }
27
+ function trackLatest(current, candidate) {
28
+ if (!candidate)
29
+ return current;
30
+ if (current === null)
31
+ return candidate;
32
+ return candidate > current ? candidate : current;
33
+ }
34
+ function boundsFromRecords(records) {
35
+ let earliest = null;
36
+ let latest = null;
37
+ for (const item of records) {
38
+ const ts = typeof item.timestamp === "string" ? item.timestamp : null;
39
+ earliest = trackEarliest(earliest, ts);
40
+ latest = trackLatest(latest, ts);
41
+ }
42
+ return { earliest, latest };
43
+ }
44
+ /** Production opencode parity snapshot compared with the generated independent Python oracle. */
45
+ export function opencodeParitySnapshot(dbPath) {
46
+ if (!fs.existsSync(dbPath)) {
47
+ throw new Error(`extract-corpus parity: missing opencode db at ${dbPath}`);
48
+ }
49
+ const audit = runCoverageAudit({
50
+ output: dbPath,
51
+ tierOutput: null,
52
+ projectRoot: [path.dirname(dbPath)],
53
+ codexSessionsDir: path.join(path.dirname(dbPath), "unused-codex"),
54
+ claudeProjectsDir: null,
55
+ opencodeConversationsDir: dbPath,
56
+ copilotConversationsDir: null,
57
+ cursorProjectsDir: null,
58
+ cursorChatsDir: null,
59
+ noCodex: true,
60
+ importSources: [],
61
+ noOpencode: false,
62
+ noCopilot: true,
63
+ noCursor: true,
64
+ acceptCoverageGap: false,
65
+ coverageAuditOnly: false,
66
+ format: "text",
67
+ }, {});
68
+ const coverageEntry = audit.runtimes.find((entry) => entry.runtime === "opencode");
69
+ const coverageProbe = {
70
+ record_count: 0,
71
+ earliest: coverageEntry?.earliest_session ?? null,
72
+ latest: coverageEntry?.latest_session ?? null,
73
+ };
74
+ const errors = [];
75
+ const extracted = extractOpencodeSessions(dbPath, errors);
76
+ const extractionBounds = boundsFromRecords(extracted);
77
+ const extractionProbe = {
78
+ record_count: extracted.length,
79
+ earliest: extractionBounds.earliest,
80
+ latest: extractionBounds.latest,
81
+ };
82
+ const corpus = buildCorpus({
83
+ projectRoots: [],
84
+ codexSessionsDir: null,
85
+ claudeProjectsDir: null,
86
+ opencodeConversationsDir: dbPath,
87
+ });
88
+ const runtimeStatus = corpus.metadata.runtime_statuses.find((status) => status.runtime === "opencode");
89
+ const recordCount = runtimeStatus?.record_count ?? extracted.length;
90
+ const discovery = discoverRuntimeStore("opencode", dbPath);
91
+ const discoveryShape = {
92
+ status: String(discovery.status),
93
+ file_count: typeof discovery.file_count === "number" ? discovery.file_count : null,
94
+ };
95
+ return {
96
+ record_count: recordCount,
97
+ earliest: coverageProbe.earliest,
98
+ latest: coverageProbe.latest,
99
+ probe_shapes: {
100
+ coverage: coverageProbe,
101
+ extraction: extractionProbe,
102
+ discovery: discoveryShape,
103
+ },
104
+ };
105
+ }
@@ -4,10 +4,7 @@ import { resolvePath } from "../../core/paths.js";
4
4
  import { isPlainObject, isoFromMtime, record, splitLines, } from "./core.js";
5
5
  export function extractInstructionDocuments(projectRoots, errors) {
6
6
  const records = [];
7
- const docNames = [
8
- ["AGENTS.md", "agents_md"],
9
- ["CLAUDE.md", "claude_md"],
10
- ];
7
+ const docNames = [["AGENTS.md", "agents_md"]];
11
8
  for (const root of projectRoots) {
12
9
  for (const [filename, docType] of docNames) {
13
10
  const p = path.join(root, filename);
@@ -119,4 +116,3 @@ export function extractProjectConfigSignals(projectRoots, errors) {
119
116
  }
120
117
  return records;
121
118
  }
122
- //# sourceMappingURL=filesystemSources.js.map
@@ -5,5 +5,10 @@ export { extractOpencodeSessions, PermissionDeniedError } from "./sqliteSessions
5
5
  export { extractCopilotSessions } from "./copilotSessions.js";
6
6
  export { resolveOpencodeDbPath, resolveCopilotStorePath, resolveCursorProjectsPath, resolveCursorChatsPath, cursorWorkspaceHash, cursorProjectDirSlug, extractCursorSessions, extractCursorAgentSessions, } from "./cursorSessions.js";
7
7
  export { ExtractionNotImplementedError, dedupeRecords, buildMetadata, buildCorpus } from "./corpus.js";
8
+ export { formatTruncationWarnings, resolveSqliteCaps, } from "./sqliteCaps.js";
9
+ export { COVERAGE_EXIT_FLAGGED, corpusEnvelopeCoverage, formatCoverageSummaryText, resolveRuntimeStoreConfigs, runCoverageAudit, } from "./coverageAudit.js";
8
10
  export { parseExtractArgs, extractCorpusMain } from "./cli.js";
9
- //# sourceMappingURL=index.js.map
11
+ export { TIER_SCHEMA_VERSION, CURRENT_POINTER_VERSION, defaultTiersDir, familyOf, deriveSignalRecords, shardFullEvidence, selectSignalsForBound, generationId, publishEvidenceTiers, readCurrentPointer, readCurrentGeneration, readSignalTier, getFullRecord, resolveEvidenceAnchor, evidenceTierCompatibility, iterTierRecords, readTierCorpusMetadata, } from "./evidenceTiers.js";
12
+ export { tiersDirForCorpusPath, resolveTiersDir, isAnalyzable, recoveryForState, assessTiers, readBoundedMetadata, iterBoundedRecords, legacyCorpusReadable, } from "./tierReader.js";
13
+ export { EXTRACT_CORPUS_PARITY_SCHEMA, buildExtractCorpusParityManifest, opencodeParitySnapshot, } from "./extractCorpusParity.js";
14
+ export { readProfileSignals, resolveProfileEvidence, profileSignalsStatus, assessProfileSufficiency, } from "../profileSignals.js";
@@ -111,7 +111,18 @@ export function extractClaudeProjectSessions(projectsDir, errors) {
111
111
  const cwd = event.cwd || event.workingDirectory || event.working_directory;
112
112
  if (typeof cwd === "string" && cwd)
113
113
  projectPath = cwd;
114
- const toolRecord = toolCallRecord({ event, fallbackTimestamp, projectPath, runtime: "claude-code", sourcePath: p, index, sessionId });
114
+ const toolRecord = toolCallRecord({
115
+ event,
116
+ fallbackTimestamp,
117
+ projectPath,
118
+ runtime: null,
119
+ sourceClass: "historical_import",
120
+ sourceProduct: "claude-code",
121
+ activeRuntime: false,
122
+ sourcePath: p,
123
+ index,
124
+ sessionId,
125
+ });
115
126
  if (toolRecord !== null) {
116
127
  records.push(toolRecord);
117
128
  continue;
@@ -124,7 +135,10 @@ export function extractClaudeProjectSessions(projectsDir, errors) {
124
135
  event,
125
136
  fallbackTimestamp,
126
137
  projectPath,
127
- runtime: "claude-code",
138
+ runtime: null,
139
+ sourceClass: "historical_import",
140
+ sourceProduct: "claude-code",
141
+ activeRuntime: false,
128
142
  sourcePath: p,
129
143
  index: index * 1000 + contentIndex,
130
144
  sessionId,
@@ -159,7 +173,10 @@ export function extractClaudeProjectSessions(projectsDir, errors) {
159
173
  sourceKind: "conversation_turn",
160
174
  timestamp,
161
175
  projectPath,
162
- runtime: "claude-code",
176
+ runtime: null,
177
+ sourceClass: "historical_import",
178
+ sourceProduct: "claude-code",
179
+ activeRuntime: false,
163
180
  sourceParts: [resolvePath(p), index, role, content.slice(0, 80)],
164
181
  sessionId,
165
182
  data,
@@ -171,7 +188,10 @@ export function extractClaudeProjectSessions(projectsDir, errors) {
171
188
  sourceKind: "history_prompt",
172
189
  timestamp,
173
190
  projectPath,
174
- runtime: "claude-code",
191
+ runtime: null,
192
+ sourceClass: "historical_import",
193
+ sourceProduct: "claude-code",
194
+ activeRuntime: false,
175
195
  sourceParts: [resolvePath(p), index, "history", content.slice(0, 120)],
176
196
  sessionId,
177
197
  data: { prompt: content, signal_type: sig },
@@ -182,4 +202,3 @@ export function extractClaudeProjectSessions(projectsDir, errors) {
182
202
  }
183
203
  return records;
184
204
  }
185
- //# sourceMappingURL=jsonlSessions.js.map
@@ -0,0 +1,43 @@
1
+ import { MAX_SQLITE_ROWS, MAX_SQLITE_SESSIONS, } from "./core.js";
2
+ function parsePositiveCap(value, fallback, label) {
3
+ if (value === undefined || value === "")
4
+ return fallback;
5
+ const parsed = Number.parseInt(value, 10);
6
+ if (!Number.isFinite(parsed) || parsed < 1) {
7
+ throw new Error(`extract-corpus: invalid ${label}: ${value}`);
8
+ }
9
+ return parsed;
10
+ }
11
+ export function resolveSqliteCaps(env = process.env, cliOverrides) {
12
+ return {
13
+ maxSessions: cliOverrides?.maxSessions ??
14
+ parsePositiveCap(env.AGENTERA_EXTRACT_MAX_SQLITE_SESSIONS, MAX_SQLITE_SESSIONS, "max sqlite sessions cap"),
15
+ maxRows: cliOverrides?.maxRows ??
16
+ parsePositiveCap(env.AGENTERA_EXTRACT_MAX_SQLITE_ROWS, MAX_SQLITE_ROWS, "max sqlite rows cap"),
17
+ };
18
+ }
19
+ export function formatTruncationWarnings(runtimeStatuses) {
20
+ const lines = [];
21
+ for (const status of runtimeStatuses) {
22
+ const truncatedAt = status.truncated_at;
23
+ if (typeof truncatedAt !== "string" || !truncatedAt)
24
+ continue;
25
+ const runtime = typeof status.runtime === "string" ? status.runtime : "unknown";
26
+ const cap = typeof status.truncation_cap === "string" ? status.truncation_cap : "cap";
27
+ const limit = status.truncation_limit ?? "?";
28
+ lines.push(` ${runtime}: truncated at ${truncatedAt} (${cap} limit=${limit})`);
29
+ }
30
+ if (lines.length === 0)
31
+ return "";
32
+ return ["SQLite extraction truncated (history beyond cap omitted):", ...lines].join("\n");
33
+ }
34
+ export function applyTruncationToStatus(status, truncation) {
35
+ if (!truncation)
36
+ return status;
37
+ return {
38
+ ...status,
39
+ truncated_at: truncation.truncatedAt,
40
+ truncation_cap: truncation.cap,
41
+ truncation_limit: truncation.limit,
42
+ };
43
+ }
@@ -1,8 +1,9 @@
1
1
  import fs from "node:fs";
2
2
  import { createRequire } from "node:module";
3
3
  import { resolvePath } from "../../core/paths.js";
4
- import { MAX_SQLITE_ROWS, MAX_SQLITE_SESSIONS, isoFromMtime, record, signalType, textFromContent, } from "./core.js";
4
+ import { isoFromMtime, record, signalType, textFromContent, } from "./core.js";
5
5
  import { isPlainObject, isFilePath, rglob } from "./core.js";
6
+ import { resolveSqliteCaps, } from "./sqliteCaps.js";
6
7
  const requireCjs = createRequire(import.meta.url);
7
8
  /** Mirrors Python raising PermissionError on a locked/busy store. */
8
9
  export class PermissionDeniedError extends Error {
@@ -63,7 +64,7 @@ export function qualified(alias, column, label) {
63
64
  const escaped = column.replace(/"/g, '""');
64
65
  return `${alias}."${escaped}" AS ${label}`;
65
66
  }
66
- function opencodeRows(conn) {
67
+ function resolveOpencodeSchema(conn) {
67
68
  const tables = new Set(conn.prepare("SELECT name FROM sqlite_master WHERE type = 'table'").all().map((r) => String(r.name)));
68
69
  for (const t of ["session", "message", "part"]) {
69
70
  if (!tables.has(t)) {
@@ -96,6 +97,29 @@ function opencodeRows(conn) {
96
97
  const partId = firstColumn(partCols, ["id", "part_id", "partID"]);
97
98
  const sortExpr = `COALESCE(m."${messageTime || messageId}", p."${partTime || partMessage}", s."${sessionTime || sessionId}")`;
98
99
  const recentSessionExpr = `s."${sessionUpdated || sessionTime || sessionId}"`;
100
+ return {
101
+ sessionId,
102
+ messageId,
103
+ messageSession,
104
+ partMessage,
105
+ messageData,
106
+ partData,
107
+ roleCol,
108
+ messageTime,
109
+ partTime,
110
+ sessionTime,
111
+ sessionUpdated,
112
+ projectCol,
113
+ messageText,
114
+ partText,
115
+ partType,
116
+ partId,
117
+ sortExpr,
118
+ recentSessionExpr,
119
+ };
120
+ }
121
+ function opencodeRows(conn, caps, schema) {
122
+ const { sessionId, messageId, messageSession, partMessage, messageData, partData, roleCol, messageTime, partTime, sessionTime, projectCol, messageText, partText, partType, partId, sortExpr, recentSessionExpr, } = schema;
99
123
  const query = `
100
124
  WITH recent_sessions AS (
101
125
  SELECT s."${sessionId}" AS recent_session_id
@@ -135,16 +159,81 @@ function opencodeRows(conn) {
135
159
  FROM recent
136
160
  ORDER BY sort_time, message_id, part_id
137
161
  `;
138
- return conn.prepare(query).all(MAX_SQLITE_SESSIONS, MAX_SQLITE_ROWS);
162
+ return conn.prepare(query).all(caps.maxSessions, caps.maxRows);
163
+ }
164
+ export function probeOpencodeTruncation(conn, caps, fallback) {
165
+ const schema = resolveOpencodeSchema(conn);
166
+ const { sessionId, sessionTime, sessionUpdated, recentSessionExpr } = schema;
167
+ const sessionTimeCol = sessionTime || sessionId;
168
+ const sessionCount = Number(conn.prepare("SELECT COUNT(*) AS c FROM session").get()?.c ?? 0);
169
+ if (sessionCount > caps.maxSessions) {
170
+ const query = `
171
+ SELECT MIN(session_ts) AS truncated_at
172
+ FROM (
173
+ SELECT s."${sessionTimeCol}" AS session_ts
174
+ FROM session s
175
+ ORDER BY ${recentSessionExpr} DESC,
176
+ s."${sessionId}" DESC
177
+ LIMIT -1 OFFSET ?
178
+ )
179
+ `;
180
+ const row = conn.prepare(query).get(caps.maxSessions);
181
+ const truncatedAt = sqliteTimestamp(row?.truncated_at, fallback);
182
+ return { truncatedAt, cap: "sessions", limit: caps.maxSessions };
183
+ }
184
+ const { messageId, messageSession, partMessage, roleCol, messageTime, partTime, messageData, partData, messageText, partText, partType, partId, sortExpr, } = schema;
185
+ const rowCountQuery = `
186
+ WITH recent_sessions AS (
187
+ SELECT s."${sessionId}" AS recent_session_id
188
+ FROM session s
189
+ ORDER BY ${recentSessionExpr} DESC,
190
+ s."${sessionId}" DESC
191
+ LIMIT ?
192
+ )
193
+ SELECT COUNT(*) AS c
194
+ FROM message m
195
+ JOIN session s ON m."${messageSession}" = s."${sessionId}"
196
+ JOIN recent_sessions rs ON rs.recent_session_id = s."${sessionId}"
197
+ LEFT JOIN part p ON p."${partMessage}" = m."${messageId}"
198
+ `;
199
+ const rowCount = Number(conn.prepare(rowCountQuery).get(caps.maxSessions)?.c ?? 0);
200
+ if (rowCount > caps.maxRows) {
201
+ const query = `
202
+ WITH recent_sessions AS (
203
+ SELECT s."${sessionId}" AS recent_session_id
204
+ FROM session s
205
+ ORDER BY ${recentSessionExpr} DESC,
206
+ s."${sessionId}" DESC
207
+ LIMIT ?
208
+ ),
209
+ ranked AS (
210
+ SELECT ${sortExpr} AS sort_time
211
+ FROM message m
212
+ JOIN session s ON m."${messageSession}" = s."${sessionId}"
213
+ JOIN recent_sessions rs ON rs.recent_session_id = s."${sessionId}"
214
+ LEFT JOIN part p ON p."${partMessage}" = m."${messageId}"
215
+ ORDER BY sort_time DESC,
216
+ m."${messageId}" DESC,
217
+ p."${partId || partMessage}" DESC
218
+ LIMIT -1 OFFSET ?
219
+ )
220
+ SELECT MIN(sort_time) AS truncated_at FROM ranked
221
+ `;
222
+ const row = conn.prepare(query).get(caps.maxSessions, caps.maxRows);
223
+ const truncatedAt = sqliteTimestamp(row?.truncated_at, fallback);
224
+ return { truncatedAt, cap: "rows", limit: caps.maxRows };
225
+ }
226
+ return null;
139
227
  }
140
228
  function opencodeDbCandidates(storePath) {
141
229
  if (isFilePath(storePath))
142
230
  return [storePath];
143
231
  return rglob(storePath, "opencode.db");
144
232
  }
145
- export function extractOpencodeSessions(storePath, errors) {
233
+ export function extractOpencodeSessions(storePath, errors, ctx) {
146
234
  if (storePath === null || !fs.existsSync(storePath))
147
235
  return [];
236
+ const caps = ctx?.sqliteCaps ?? resolveSqliteCaps();
148
237
  const records = [];
149
238
  for (const dbPath of opencodeDbCandidates(storePath).slice(0, 1)) {
150
239
  const fallbackTimestamp = isoFromMtime(dbPath);
@@ -152,7 +241,11 @@ export function extractOpencodeSessions(storePath, errors) {
152
241
  let conn = null;
153
242
  try {
154
243
  conn = openSqlite(dbPath);
155
- rows = opencodeRows(conn);
244
+ const truncation = probeOpencodeTruncation(conn, caps, fallbackTimestamp);
245
+ if (truncation && ctx)
246
+ ctx.truncation = truncation;
247
+ const schema = resolveOpencodeSchema(conn);
248
+ rows = opencodeRows(conn, caps, schema);
156
249
  }
157
250
  catch (exc) {
158
251
  const msg = exc.message || "";
@@ -272,4 +365,3 @@ export function extractOpencodeSessions(storePath, errors) {
272
365
  }
273
366
  return records;
274
367
  }
275
- //# sourceMappingURL=sqliteSessions.js.map
@@ -0,0 +1,108 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { compatibilityStates, evidenceTierBounds, } from "../../registries/evidenceTierContract.js";
4
+ import { defaultTiersDir, evidenceTierCompatibility, iterTierRecords, readSignalTier, readTierCorpusMetadata, } from "./evidenceTiers.js";
5
+ /**
6
+ * Bounded tier reader for analytics consumers (plan Task 3).
7
+ *
8
+ * Task 2 publishes bounded full-evidence shards and a bounded signal tier with
9
+ * an atomic generation pointer. This module is the consumer-side surface that
10
+ * projects the contract's compatibility states and recovery guidance, resolves
11
+ * the tiers directory from a corpus path, and exposes bounded reads (full-evidence
12
+ * records one shard at a time; metadata/signal reads without full records). It does
13
+ * not duplicate the tier map, source families, bounds, or compatibility outcomes —
14
+ * those are projected from `evidenceTierContract` and `evidenceTiers`.
15
+ *
16
+ * Consumers preserve their JSON output shape and exit codes. A non-current tier
17
+ * degrades with actionable, contract-projected recovery rather than indefinitely
18
+ * loading an oversized monolithic corpus envelope. `incomplete` is a degrade
19
+ * outcome: consumers analyze available sources and surface the coverage gap, so a
20
+ * host missing some runtimes still gets useful analysis instead of a hard failure.
21
+ */
22
+ /** A corpus path's co-located tiers directory (`<intermediate>/tiers`). */
23
+ export function tiersDirForCorpusPath(corpusPath) {
24
+ return path.join(path.dirname(corpusPath), "tiers");
25
+ }
26
+ /** Canonical tiers directory for the stats profile. */
27
+ export function resolveTiersDir(env = process.env, platform = process.platform) {
28
+ return defaultTiersDir(env, platform);
29
+ }
30
+ /** Whether a compatibility state still permits analysis of available sources. */
31
+ export function isAnalyzable(state) {
32
+ return state === "current" || state === "incomplete";
33
+ }
34
+ /**
35
+ * Actionable recovery guidance projected from the authority contract for a
36
+ * compatibility state. The contract owns the recovery text; this never
37
+ * duplicates it. Returns `null` for states that proceed (current/incomplete).
38
+ */
39
+ export function recoveryForState(state) {
40
+ if (state === "current" || state === "incomplete")
41
+ return null;
42
+ const states = compatibilityStates();
43
+ const def = states.find((s) => s.state_id === state);
44
+ return def?.recovery ?? null;
45
+ }
46
+ /**
47
+ * Assess the tiers directory against the contract's compatibility states. When a
48
+ * legacy corpus envelope is supplied, a missing tier with an existing envelope
49
+ * surfaces as `legacy` (refresh guidance) rather than a bare missing state.
50
+ */
51
+ export function assessTiers(tiersDir, corpusPath) {
52
+ const compat = evidenceTierCompatibility(tiersDir, corpusPath);
53
+ const assessment = {
54
+ state: compat.state,
55
+ analyzable: isAnalyzable(compat.state),
56
+ tiersDir,
57
+ corpusPath,
58
+ recovery: recoveryForState(compat.state) ?? undefined,
59
+ };
60
+ if (compat.state === "incomplete")
61
+ assessment.coverageGaps = compat.detail;
62
+ if (compat.state === "oversized")
63
+ assessment.artifact = compat.artifact;
64
+ if (compat.state === "current")
65
+ assessment.generation = compat.generation;
66
+ return assessment;
67
+ }
68
+ /**
69
+ * Read bounded metadata for signal-tier consumers (report status, prime
70
+ * coverage). Reads the manifest and the bounded signal tier only — never the
71
+ * full-evidence shards — so metadata consumers stay bounded at real scale. The
72
+ * signal tier is bounded by construction; a defensively oversized signal tier is
73
+ * reported as null so the caller degrades with the assessment's recovery.
74
+ */
75
+ export function readBoundedMetadata(tiersDir) {
76
+ const signal = readSignalTier(tiersDir);
77
+ const corpusMetadata = readTierCorpusMetadata(tiersDir);
78
+ const bounds = evidenceTierBounds();
79
+ if (signal && (signal.bytes > bounds.signalByteCap || signal.manifest.signal.bytes > bounds.signalByteCap)) {
80
+ return { corpusMetadata: null, signal: null, manifest: signal.manifest };
81
+ }
82
+ return { corpusMetadata, signal, manifest: signal?.manifest ?? null };
83
+ }
84
+ /**
85
+ * Iterate full-evidence records for the current generation, one bounded shard at
86
+ * a time. Full-record consumers (usage analytics, startup analysis) use this so
87
+ * they never materialize the monolithic corpus envelope. Returns `null` when no
88
+ * current generation exists; callers report the assessment instead.
89
+ */
90
+ export function iterBoundedRecords(tiersDir) {
91
+ return iterTierRecords(tiersDir);
92
+ }
93
+ /**
94
+ * Legacy fallback: a small monolithic corpus envelope may still be read for
95
+ * backward compatibility when no tiers were published. Oversized legacy state
96
+ * is never loaded whole — it returns `false` so the caller emits refresh guidance.
97
+ */
98
+ export function legacyCorpusReadable(corpusPath) {
99
+ if (!corpusPath || !fs.existsSync(corpusPath))
100
+ return false;
101
+ const bounds = evidenceTierBounds();
102
+ try {
103
+ return fs.statSync(corpusPath).size <= bounds.readerByteCap;
104
+ }
105
+ catch {
106
+ return false;
107
+ }
108
+ }
@@ -1,3 +1,2 @@
1
1
  /** Barrel: stable import path for corpus extraction (split across ./extractCorpus/). */
2
2
  export * from "./extractCorpus/index.js";
3
- //# sourceMappingURL=extractCorpus.js.map
@@ -0,0 +1,166 @@
1
+ import { glossaryAdviceContract, } from "../registries/glossaryAdviceContract.js";
2
+ import { unicodeCaselessExact } from "../registries/glossaryTermIdentity.js";
3
+ const RECOVERY = {
4
+ invalid_request: "Provide one non-empty bounded requested term and retry advice resolution.",
5
+ invalid_acquisition: "Reacquire bounded glossary inputs and retry advice resolution.",
6
+ invalid_host_review: "Provide one contract-declared relation to a valid acquired personal candidate and retry advice resolution.",
7
+ };
8
+ export class GlossaryAdviceInputError extends Error {
9
+ code;
10
+ constructor(code) {
11
+ super(RECOVERY[code]);
12
+ this.code = code;
13
+ this.name = "GlossaryAdviceInputError";
14
+ }
15
+ }
16
+ function hasOnlyKeys(value, expected) {
17
+ const keys = Object.keys(value).sort();
18
+ return (keys.length === expected.length &&
19
+ keys.every((key, index) => key === [...expected].sort()[index]));
20
+ }
21
+ function boundedNonEmpty(value, maxBytes) {
22
+ return (typeof value === "string" &&
23
+ value.trim().length > 0 &&
24
+ Buffer.byteLength(value, "utf8") <= maxBytes);
25
+ }
26
+ function validateEntries(source, owner, maxEntries, maxBytes) {
27
+ if (!Array.isArray(source.entries) || source.entries.length > maxEntries) {
28
+ throw new GlossaryAdviceInputError("invalid_acquisition");
29
+ }
30
+ const terms = [];
31
+ for (const candidate of source.entries) {
32
+ if (candidate === null ||
33
+ typeof candidate !== "object" ||
34
+ !hasOnlyKeys(candidate, ["term", "meaning", "owner"]) ||
35
+ candidate.owner !== owner ||
36
+ !boundedNonEmpty(candidate.term, maxBytes) ||
37
+ !boundedNonEmpty(candidate.meaning, maxBytes)) {
38
+ throw new GlossaryAdviceInputError("invalid_acquisition");
39
+ }
40
+ if (terms.some((term) => unicodeCaselessExact(term, candidate.term))) {
41
+ throw new GlossaryAdviceInputError("invalid_acquisition");
42
+ }
43
+ terms.push(candidate.term);
44
+ }
45
+ }
46
+ function validateSource(source, owner, maxEntries, maxBytes, availabilityStates) {
47
+ if (source === null ||
48
+ typeof source !== "object" ||
49
+ !hasOnlyKeys(source, ["owner", "availability", "entries", "gap_proving", "diagnostic"])) {
50
+ throw new GlossaryAdviceInputError("invalid_acquisition");
51
+ }
52
+ const candidate = source;
53
+ if (candidate.owner !== owner ||
54
+ !availabilityStates.includes(candidate.availability) ||
55
+ typeof candidate.gap_proving !== "boolean") {
56
+ throw new GlossaryAdviceInputError("invalid_acquisition");
57
+ }
58
+ validateEntries(candidate, owner, maxEntries, maxBytes);
59
+ const valid = ["absent", "valid_empty", "valid_present"].includes(candidate.availability);
60
+ const expectedGap = owner === "project" && ["absent", "valid_empty"].includes(candidate.availability);
61
+ if (valid) {
62
+ const expectedEntryPresence = candidate.availability === "valid_present";
63
+ if (candidate.diagnostic !== null ||
64
+ candidate.gap_proving !== expectedGap ||
65
+ expectedEntryPresence !== candidate.entries.length > 0) {
66
+ throw new GlossaryAdviceInputError("invalid_acquisition");
67
+ }
68
+ return;
69
+ }
70
+ const diagnostic = candidate.diagnostic;
71
+ if (candidate.entries.length !== 0 ||
72
+ candidate.gap_proving ||
73
+ diagnostic === null ||
74
+ typeof diagnostic !== "object" ||
75
+ !hasOnlyKeys(diagnostic, ["class", "recovery"]) ||
76
+ diagnostic.class !== candidate.availability ||
77
+ typeof diagnostic.recovery !== "string" ||
78
+ diagnostic.recovery.trim().length === 0) {
79
+ throw new GlossaryAdviceInputError("invalid_acquisition");
80
+ }
81
+ }
82
+ function validateAcquired(acquired, contract) {
83
+ if (acquired === null ||
84
+ typeof acquired !== "object" ||
85
+ !hasOnlyKeys(acquired, ["project", "personal"])) {
86
+ throw new GlossaryAdviceInputError("invalid_acquisition");
87
+ }
88
+ const candidate = acquired;
89
+ validateSource(candidate.project, "project", contract.maxEntries, contract.maxRequestedTermUtf8Bytes, contract.availabilityStates);
90
+ validateSource(candidate.personal, "personal", contract.maxEntries, contract.maxRequestedTermUtf8Bytes, contract.availabilityStates);
91
+ }
92
+ function exactEntry(entries, requestedTerm) {
93
+ return entries.find((candidate) => unicodeCaselessExact(candidate.term, requestedTerm));
94
+ }
95
+ function validatedHostReview(requestedTerm, personal, hostReview, contract) {
96
+ if (hostReview === undefined)
97
+ return undefined;
98
+ if (hostReview === null ||
99
+ typeof hostReview !== "object" ||
100
+ !hasOnlyKeys(hostReview, ["relation", "candidate_owner", "candidate_term"])) {
101
+ throw new GlossaryAdviceInputError("invalid_host_review");
102
+ }
103
+ const candidate = hostReview;
104
+ if (!contract.hostReviewRelations.includes(candidate.relation) ||
105
+ !contract.hostReviewCandidateOwners.includes(candidate.candidate_owner) ||
106
+ !boundedNonEmpty(candidate.candidate_term, contract.maxRequestedTermUtf8Bytes) ||
107
+ unicodeCaselessExact(candidate.candidate_term, requestedTerm) ||
108
+ !personal.entries.some((entry) => unicodeCaselessExact(entry.term, candidate.candidate_term))) {
109
+ throw new GlossaryAdviceInputError("invalid_host_review");
110
+ }
111
+ return candidate;
112
+ }
113
+ export function classifyGlossaryAdviceInputs(requestedTerm, acquired, hostReview) {
114
+ const projectExact = exactEntry(acquired.project.entries, requestedTerm);
115
+ const personalExact = exactEntry(acquired.personal.entries, requestedTerm);
116
+ const projectValid = ["absent", "valid_empty", "valid_present"].includes(acquired.project.availability);
117
+ const personalUsable = ["valid_empty", "valid_present"].includes(acquired.personal.availability);
118
+ return {
119
+ project_input: !projectValid ? "invalid" : projectExact ? "valid_exact" : "valid_gap",
120
+ personal_input: personalExact
121
+ ? "valid_exact"
122
+ : personalUsable
123
+ ? "valid_without_exact"
124
+ : "invalid",
125
+ exact_meaning: projectExact && personalExact
126
+ ? projectExact.meaning === personalExact.meaning
127
+ ? "equivalent"
128
+ : "divergent"
129
+ : "not_applicable",
130
+ inferred_candidate: hostReview ? "present" : "absent",
131
+ };
132
+ }
133
+ function matches(match, state) {
134
+ return Object.entries(state).every(([dimension, value]) => match[dimension]?.includes(value));
135
+ }
136
+ export function resolveGlossaryAdvice(requestedTerm, acquired, hostReview) {
137
+ const contract = glossaryAdviceContract();
138
+ if (!boundedNonEmpty(requestedTerm, contract.maxRequestedTermUtf8Bytes)) {
139
+ throw new GlossaryAdviceInputError("invalid_request");
140
+ }
141
+ validateAcquired(acquired, contract);
142
+ const review = validatedHostReview(requestedTerm, acquired.personal, hostReview, contract);
143
+ const state = classifyGlossaryAdviceInputs(requestedTerm, acquired, review);
144
+ const rows = contract.rows.filter((row) => matches(row.match, state));
145
+ if (rows.length !== 1)
146
+ throw new GlossaryAdviceInputError("invalid_acquisition");
147
+ const row = rows[0];
148
+ const selectedOwner = row.selectedOwner === "project" || row.selectedOwner === "personal" ? row.selectedOwner : null;
149
+ const selectedEntry = selectedOwner
150
+ ? exactEntry(acquired[selectedOwner].entries, requestedTerm)
151
+ : undefined;
152
+ const advisories = contract.advisories.filter((advisory) => advisory.primaryOutcome === row.name && matches(advisory.match, state));
153
+ if (advisories.length > 1)
154
+ throw new GlossaryAdviceInputError("invalid_acquisition");
155
+ const advisory = advisories[0];
156
+ return {
157
+ outcome: row.name,
158
+ applicable_meaning: selectedEntry?.meaning ?? null,
159
+ applicable_owner: selectedOwner,
160
+ review: advisory?.review ?? row.review,
161
+ tension: row.tension,
162
+ advisory: advisory
163
+ ? { reason: advisory.caveatReason, ownership_state: advisory.ownershipState }
164
+ : null,
165
+ };
166
+ }