agentera 3.0.0-dev.7 → 3.0.0-dev.72

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 (723) 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 +2 -4
  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 +17 -8
  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 +3 -4
  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 +152 -93
  27. package/bundle/references/cli/trigger-schema-enrichment.md +57 -46
  28. package/bundle/references/cli/update-channels.yaml +4 -2
  29. package/bundle/references/cli/vocabulary-index.yaml +5 -7
  30. package/bundle/references/cli/vocabulary.md +51 -93
  31. package/bundle/references/meta/retained-reference-authority.yaml +151 -0
  32. package/bundle/skills/agentera/SKILL.md +183 -63
  33. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +27 -19
  34. package/bundle/skills/agentera/capabilities/audit/schemas/exit.yaml +2 -2
  35. package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +13 -35
  36. package/bundle/skills/agentera/capabilities/audit/schemas/validation.yaml +30 -11
  37. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +44 -21
  38. package/bundle/skills/agentera/capabilities/build/schemas/exit.yaml +8 -6
  39. package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +14 -36
  40. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +95 -21
  41. package/bundle/skills/agentera/capabilities/design/schemas/artifacts.yaml +6 -6
  42. package/bundle/skills/agentera/capabilities/design/schemas/exit.yaml +5 -5
  43. package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +5 -34
  44. package/bundle/skills/agentera/capabilities/design/schemas/validation.yaml +2 -2
  45. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +17 -13
  46. package/bundle/skills/agentera/capabilities/discuss/schemas/exit.yaml +2 -2
  47. package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +6 -40
  48. package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +72 -5
  49. package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +24 -17
  50. package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +5 -35
  51. package/bundle/skills/agentera/capabilities/document/schemas/validation.yaml +13 -13
  52. package/bundle/skills/agentera/capabilities/optimize/schemas/artifacts.yaml +10 -10
  53. package/bundle/skills/agentera/capabilities/optimize/schemas/exit.yaml +2 -2
  54. package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +4 -35
  55. package/bundle/skills/agentera/capabilities/optimize/schemas/validation.yaml +3 -3
  56. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +34 -22
  57. package/bundle/skills/agentera/capabilities/orchestrate/schemas/exit.yaml +9 -7
  58. package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +5 -37
  59. package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +38 -37
  60. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +20 -16
  61. package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +8 -31
  62. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +66 -6
  63. package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +9 -4
  64. package/bundle/skills/agentera/capabilities/profile/schemas/exit.yaml +4 -4
  65. package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +8 -37
  66. package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +61 -3
  67. package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +6 -6
  68. package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +5 -29
  69. package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +13 -12
  70. package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +7 -49
  71. package/bundle/skills/agentera/capabilities/vision/schemas/artifacts.yaml +8 -8
  72. package/bundle/skills/agentera/capabilities/vision/schemas/exit.yaml +7 -6
  73. package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +7 -39
  74. package/bundle/skills/agentera/capabilities/vision/schemas/validation.yaml +14 -16
  75. package/bundle/skills/agentera/capability_schema_contract.yaml +32 -32
  76. package/bundle/skills/agentera/protocol.yaml +4 -4
  77. package/bundle/skills/agentera/route-phrases.yaml +81 -0
  78. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +1 -0
  79. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +30 -12
  80. package/bundle/skills/agentera/schemas/artifacts/design.yaml +1 -0
  81. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +7 -12
  82. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +140 -9
  83. package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +82 -0
  84. package/bundle/skills/agentera/schemas/artifacts/health.yaml +56 -19
  85. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +18 -4
  86. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +457 -32
  87. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +131 -18
  88. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +302 -7
  89. package/dist/analytics/extractCorpus/cli.js +52 -11
  90. package/dist/analytics/extractCorpus/copilotSessions.js +6 -4
  91. package/dist/analytics/extractCorpus/core.js +40 -12
  92. package/dist/analytics/extractCorpus/corpus.js +39 -17
  93. package/dist/analytics/extractCorpus/coverageAudit.js +44 -45
  94. package/dist/analytics/extractCorpus/cursorSessions.js +6 -4
  95. package/dist/analytics/extractCorpus/evidenceTiers.js +603 -0
  96. package/dist/analytics/extractCorpus/extractCorpusParity.js +4 -4
  97. package/dist/analytics/extractCorpus/filesystemSources.js +1 -5
  98. package/dist/analytics/extractCorpus/index.js +3 -1
  99. package/dist/analytics/extractCorpus/jsonlSessions.js +24 -5
  100. package/dist/analytics/extractCorpus/sqliteCaps.js +0 -1
  101. package/dist/analytics/extractCorpus/sqliteSessions.js +0 -1
  102. package/dist/analytics/extractCorpus/tierReader.js +108 -0
  103. package/dist/analytics/extractCorpus.js +0 -1
  104. package/dist/analytics/glossaryAdviceResolution.js +166 -0
  105. package/dist/analytics/glossaryInputAcquisition.js +319 -0
  106. package/dist/analytics/personalGlossaryAdmission.js +133 -0
  107. package/dist/analytics/personalGlossaryProfile.js +219 -0
  108. package/dist/analytics/profileSignals.js +211 -0
  109. package/dist/analytics/usageStats.js +150 -23
  110. package/dist/audit/terminologyDrift.js +281 -0
  111. package/dist/bin/agentera.js +3 -2
  112. package/dist/capabilities/audit/instructions.js +16 -6
  113. package/dist/capabilities/build/instructions.js +59 -6
  114. package/dist/capabilities/design/instructions.js +3 -4
  115. package/dist/capabilities/discuss/instructions.js +29 -6
  116. package/dist/capabilities/document/instructions.js +11 -6
  117. package/dist/capabilities/index.js +16 -14
  118. package/dist/capabilities/optimize/instructions.js +14 -6
  119. package/dist/capabilities/orchestrate/instructions.js +42 -6
  120. package/dist/capabilities/plan/instructions.js +30 -3
  121. package/dist/capabilities/profile/instructions.js +70 -6
  122. package/dist/capabilities/research/instructions.js +4 -5
  123. package/dist/capabilities/status/instructions.js +15 -6
  124. package/dist/capabilities/status/startupInstructions.js +34 -0
  125. package/dist/capabilities/vision/instructions.js +3 -5
  126. package/dist/cli/appContext.js +14 -7
  127. package/dist/cli/argvalidate.js +0 -1
  128. package/dist/cli/capabilityContext/benchmark.js +5 -4
  129. package/dist/cli/capabilityContext/bespoke.js +14 -6
  130. package/dist/cli/capabilityContext/build.js +116 -42
  131. package/dist/cli/capabilityContext/closeout.js +30 -27
  132. package/dist/cli/capabilityContext/contract.js +18 -27
  133. package/dist/cli/capabilityContext/evidence.js +84 -77
  134. package/dist/cli/capabilityContext/index.js +0 -1
  135. package/dist/cli/capabilityContext/orchestration.js +42 -18
  136. package/dist/cli/capabilityContext/planState.js +89 -96
  137. package/dist/cli/capabilityContext/progress.js +51 -12
  138. package/dist/cli/capabilityContext/projectVerification.js +409 -0
  139. package/dist/cli/capabilityContext/shared.js +9 -20
  140. package/dist/cli/capabilityContext/slim.js +52 -8
  141. package/dist/cli/capabilityContext/startup.js +51 -114
  142. package/dist/cli/capabilityContext/startupAggregation.js +68 -0
  143. package/dist/cli/capabilityContext/types.js +26 -10
  144. package/dist/cli/capabilityContext.js +0 -1
  145. package/dist/cli/commands/appHome.js +0 -1
  146. package/dist/cli/commands/capability.js +2 -2
  147. package/dist/cli/commands/compact.js +163 -13
  148. package/dist/cli/commands/doctor.js +117 -11
  149. package/dist/cli/commands/durability.js +81 -0
  150. package/dist/cli/commands/glossaryAdvice.js +138 -0
  151. package/dist/cli/commands/lint.js +22 -8
  152. package/dist/cli/commands/personalGlossary.js +176 -0
  153. package/dist/cli/commands/prime/briefOrientation.js +746 -0
  154. package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
  155. package/dist/cli/commands/prime/bundleStatus.js +54 -4
  156. package/dist/cli/commands/prime/collectEntityOrientation.js +326 -0
  157. package/dist/cli/commands/prime/collectOrientationState.js +126 -63
  158. package/dist/cli/commands/prime/orientationOutput.js +267 -56
  159. package/dist/cli/commands/prime/types.js +0 -1
  160. package/dist/cli/commands/prime/v1Migration.js +0 -1
  161. package/dist/cli/commands/prime.js +76 -11
  162. package/dist/cli/commands/profileGrounding.js +55 -0
  163. package/dist/cli/commands/query.js +74 -52
  164. package/dist/cli/commands/report.js +73 -19
  165. package/dist/cli/commands/route.js +142 -0
  166. package/dist/cli/commands/schema.js +257 -138
  167. package/dist/cli/commands/state/decisions.js +40 -56
  168. package/dist/cli/commands/state/docs.js +58 -85
  169. package/dist/cli/commands/state/experimentRecords.js +151 -0
  170. package/dist/cli/commands/state/experiments.js +11 -65
  171. package/dist/cli/commands/state/get.js +129 -0
  172. package/dist/cli/commands/state/health.js +11 -113
  173. package/dist/cli/commands/state/index.js +6 -41
  174. package/dist/cli/commands/state/list.js +194 -0
  175. package/dist/cli/commands/state/objective.js +21 -65
  176. package/dist/cli/commands/state/plan.js +11 -170
  177. package/dist/cli/commands/state/planTasks.js +154 -0
  178. package/dist/cli/commands/state/plans.js +154 -0
  179. package/dist/cli/commands/state/progress.js +11 -45
  180. package/dist/cli/commands/state/shared.js +0 -1
  181. package/dist/cli/commands/state/todo.js +28 -107
  182. package/dist/cli/commands/state/write.js +433 -0
  183. package/dist/cli/commands/upgrade.js +146 -5
  184. package/dist/cli/commands/upgradeVerify.js +118 -0
  185. package/dist/cli/commands/validate.js +235 -136
  186. package/dist/cli/commands/verify.js +23 -8
  187. package/dist/cli/contracts/bundleStatus.js +0 -1
  188. package/dist/cli/contracts/orientationState.js +0 -1
  189. package/dist/cli/dispatch/argvParser.js +0 -1
  190. package/dist/cli/dispatch/check.js +84 -40
  191. package/dist/cli/dispatch/commands.js +3 -3
  192. package/dist/cli/dispatch/index.js +77 -52
  193. package/dist/cli/dispatch/lifecycle.js +117 -62
  194. package/dist/cli/dispatch/prime.js +37 -2
  195. package/dist/cli/dispatch/projections.js +17 -0
  196. package/dist/cli/dispatch/shared.js +1 -2
  197. package/dist/cli/dispatch/state.js +62 -66
  198. package/dist/cli/dispatch.js +0 -1
  199. package/dist/cli/errors.js +16 -17
  200. package/dist/cli/help.js +358 -39
  201. package/dist/cli/migrationRequired.js +122 -0
  202. package/dist/cli/orientation/attention.js +19 -19
  203. package/dist/cli/orientation/corpusCoverage.js +32 -1
  204. package/dist/cli/orientation.js +346 -129
  205. package/dist/cli/planArtifacts.js +350 -0
  206. package/dist/cli/planEvidence.js +157 -0
  207. package/dist/cli/planLifecycleState.js +36 -0
  208. package/dist/cli/planTaskIndex.js +11 -0
  209. package/dist/cli/preCutoverCommand.js +32 -0
  210. package/dist/cli/prime-blob.js +71 -3
  211. package/dist/cli/profileAcquisition.js +167 -0
  212. package/dist/cli/startupCompletenessContract.js +11 -8
  213. package/dist/cli/stateQuery.js +47 -12
  214. package/dist/cli/structured.js +0 -1
  215. package/dist/cli/todoMarkdown.js +25 -12
  216. package/dist/cli/todoReadinessSelection.js +192 -0
  217. package/dist/cli/todoSeverity.js +0 -1
  218. package/dist/core/atomicWriter.js +20 -0
  219. package/dist/core/developmentChannel.js +1 -0
  220. package/dist/core/developmentInvocation.js +374 -0
  221. package/dist/core/difflib.js +0 -1
  222. package/dist/core/envPaths.js +0 -1
  223. package/dist/core/jsonValue.js +0 -1
  224. package/dist/core/paths.js +0 -1
  225. package/dist/core/pyjson.js +0 -1
  226. package/dist/core/shell.js +4 -0
  227. package/dist/core/skillIdentity.js +23 -0
  228. package/dist/core/sourceRoot.js +9 -12
  229. package/dist/core/text.js +10 -0
  230. package/dist/core/toml.js +0 -1
  231. package/dist/core/yaml.js +8 -1
  232. package/dist/eval/evalSkills.js +13 -14
  233. package/dist/eval/hybridRouteEvaluation.js +155 -0
  234. package/dist/eval/semanticEval.js +0 -1
  235. package/dist/eval/semanticFixtures.js +0 -1
  236. package/dist/hooks/common.js +3 -56
  237. package/dist/hooks/compaction/apply.js +224 -47
  238. package/dist/hooks/compaction/dryRun.js +2 -1
  239. package/dist/hooks/compaction/index.js +5 -6
  240. package/dist/hooks/compaction/parse.js +73 -6
  241. package/dist/hooks/compaction/retention.js +28 -25
  242. package/dist/hooks/compaction/status.js +145 -26
  243. package/dist/hooks/compaction/types.js +0 -1
  244. package/dist/hooks/validateArtifact/agentFacing.js +0 -1
  245. package/dist/hooks/validateArtifact/index.js +6 -65
  246. package/dist/hooks/validateArtifact/markdown.js +9 -10
  247. package/dist/hooks/validateArtifact/schema.js +96 -9
  248. package/dist/hooks/validateArtifact/traversal.js +12 -11
  249. package/dist/hooks/validateArtifact/violations.js +5 -3
  250. package/dist/migrate/v2HandoffManifest.js +8 -3
  251. package/dist/registries/activationContract.js +2 -0
  252. package/dist/registries/activationTuples.js +108 -0
  253. package/dist/registries/artifactProtocolIds.js +2 -1
  254. package/dist/registries/artifactRegistry.js +207 -60
  255. package/dist/registries/artifactSchemaProjection.js +45 -0
  256. package/dist/registries/capabilityContract.js +5 -21
  257. package/dist/registries/evaluatorHandoffContract.js +0 -1
  258. package/dist/registries/evidenceTierContract.js +371 -0
  259. package/dist/registries/glossaryAdviceContract.js +79 -0
  260. package/dist/registries/glossaryCaveatContract.js +67 -0
  261. package/dist/registries/glossaryConsumerContractValidation.js +787 -0
  262. package/dist/registries/glossaryEntryContract.js +757 -0
  263. package/dist/registries/glossaryTermIdentity.js +17 -0
  264. package/dist/registries/glossaryTermOccurrence.js +20 -0
  265. package/dist/registries/hybridRoute.js +274 -0
  266. package/dist/registries/hybridRouteReceipt.js +221 -0
  267. package/dist/registries/packagePublication.js +273 -0
  268. package/dist/registries/packageRegistry.js +184 -209
  269. package/dist/registries/todoReadinessContract.js +448 -0
  270. package/dist/registries/triggerLoader.js +7 -44
  271. package/dist/registries/verbosityBudgetContract.js +205 -0
  272. package/dist/release/releaseMetadata.js +155 -5
  273. package/dist/runtime/lifecycleAdapterContract.js +457 -0
  274. package/dist/runtime/lifecycleAdapters.js +777 -0
  275. package/dist/runtime/lifecycleAuthority.js +453 -0
  276. package/dist/runtime/lifecycleOperationContract.js +123 -0
  277. package/dist/runtime/lifecycleOperations.js +634 -0
  278. package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
  279. package/dist/runtime/lifecyclePublication.js +415 -0
  280. package/dist/runtime/lifecycleSnapshot.js +438 -0
  281. package/dist/runtime/nativeResourceCleanup.js +502 -0
  282. package/dist/setup/opencode.js +20 -13
  283. package/dist/setup/opencodeConstants.js +1 -0
  284. package/dist/setup/sharedSkill.js +45 -0
  285. package/dist/setup/smokeChecks.js +14 -75
  286. package/dist/state/archiveDiscovery.js +580 -0
  287. package/dist/state/archivePublication.js +225 -0
  288. package/dist/state/archiveRecovery.js +237 -0
  289. package/dist/state/archiveReplay.js +53 -0
  290. package/dist/state/canonicalMigrationRecord.js +36 -0
  291. package/dist/state/changelog.js +221 -0
  292. package/dist/state/decisionEntities.js +367 -0
  293. package/dist/state/decisionLegacyValidation.js +215 -0
  294. package/dist/state/decisionMigrationProvenance.js +199 -0
  295. package/dist/state/decisionOverlay.js +254 -0
  296. package/dist/state/decisionRevision.js +256 -0
  297. package/dist/state/decisionRevisionMigration.js +89 -0
  298. package/dist/state/directRetrieval.js +323 -0
  299. package/dist/state/durability.js +324 -0
  300. package/dist/state/entityCutover.js +459 -0
  301. package/dist/state/entityCutoverGit.js +127 -0
  302. package/dist/state/entityGlossaryAuthority.js +13 -0
  303. package/dist/state/entityListProjection.js +187 -0
  304. package/dist/state/entityListRuntimeRegistry.js +85 -0
  305. package/dist/state/entityMigrationCausality.js +97 -0
  306. package/dist/state/entityMigrationIdentity.js +5 -0
  307. package/dist/state/entityMigrationPreview.js +840 -0
  308. package/dist/state/entityMigrationTodo.js +133 -0
  309. package/dist/state/entityPublicationContext.js +859 -0
  310. package/dist/state/entityRetrievalHelp.js +506 -0
  311. package/dist/state/entityStorage.js +899 -0
  312. package/dist/state/exactReplacementRecovery.js +18 -0
  313. package/dist/state/experimentArchive.js +63 -0
  314. package/dist/state/experimentIdentity.js +202 -0
  315. package/dist/state/healthEntities.js +262 -0
  316. package/dist/state/healthEntityValidation.js +18 -0
  317. package/dist/state/healthRepair.js +69 -0
  318. package/dist/state/installRoot.js +15 -7
  319. package/dist/state/legacyEntityCutoverEvidence.js +65 -0
  320. package/dist/state/legacyIdentity.js +47 -0
  321. package/dist/state/legacySummaryRecord.js +6 -0
  322. package/dist/state/listAccounting.js +54 -0
  323. package/dist/state/listClassification.js +17 -0
  324. package/dist/state/listCursor.js +42 -0
  325. package/dist/state/listRetrieval.js +781 -0
  326. package/dist/state/migrationSourceBinding.js +30 -0
  327. package/dist/state/objectiveExperimentEntities.js +322 -0
  328. package/dist/state/planEntities.js +1027 -0
  329. package/dist/state/planIdentity.js +47 -0
  330. package/dist/state/planLineageValidation.js +52 -0
  331. package/dist/state/planReplacementTransaction.js +475 -0
  332. package/dist/state/planRetrieval.js +313 -0
  333. package/dist/state/planTaskRetrieval.js +294 -0
  334. package/dist/state/progressEntities.js +512 -0
  335. package/dist/state/progressGlossaryCaveat.js +168 -0
  336. package/dist/state/progressPublicationOrder.js +19 -0
  337. package/dist/state/progressWritePolicy.js +33 -0
  338. package/dist/state/projectRoot.js +62 -0
  339. package/dist/state/projectionPolicy.js +190 -0
  340. package/dist/state/retrievalAuthority.js +156 -0
  341. package/dist/state/safeProjectFile.js +155 -0
  342. package/dist/state/startupAnalysis/benchmark.js +70 -9
  343. package/dist/state/startupAnalysis/contract.js +44 -10
  344. package/dist/state/startupAnalysis/helpers.js +1 -2
  345. package/dist/state/startupAnalysis/index.js +0 -1
  346. package/dist/state/startupAnalysis/metrics.js +0 -1
  347. package/dist/state/startupAnalysis/records.js +0 -1
  348. package/dist/state/startupAnalysis/report.js +0 -1
  349. package/dist/state/startupAnalysis/threshold.js +13 -1
  350. package/dist/state/startupAnalysis.js +0 -1
  351. package/dist/state/startupProjection.js +499 -0
  352. package/dist/state/stateMode.js +222 -0
  353. package/dist/state/stateStorageAuthority.js +47 -0
  354. package/dist/state/summaryEntityRead.js +25 -0
  355. package/dist/state/summaryMigrationProvenance.js +66 -0
  356. package/dist/state/summarySourceRowAuthority.js +36 -0
  357. package/dist/state/todoActivationSafety.js +58 -0
  358. package/dist/state/todoDocsEntities.js +1124 -0
  359. package/dist/state/todoDocsEntityValidation.js +158 -0
  360. package/dist/state/todoMarkdownProjection.js +51 -0
  361. package/dist/state/todoReconciliationActivation.js +182 -0
  362. package/dist/state/todoReconciliationInspection.js +171 -0
  363. package/dist/state/todoReconciliationRepair.js +318 -0
  364. package/dist/state/todoReconciliationTransaction.js +595 -0
  365. package/dist/state/write/assign.js +20 -0
  366. package/dist/state/write/candidateMutation.js +269 -0
  367. package/dist/state/write/errors.js +11 -0
  368. package/dist/state/write/experimentPublication.js +192 -0
  369. package/dist/state/write/explain.js +377 -0
  370. package/dist/state/write/fields.js +61 -0
  371. package/dist/state/write/glossaryPublication.js +263 -0
  372. package/dist/state/write/grammar.js +285 -0
  373. package/dist/state/write/helpers.js +29 -0
  374. package/dist/state/write/index.js +12 -0
  375. package/dist/state/write/input.js +391 -0
  376. package/dist/state/write/lock.js +837 -0
  377. package/dist/state/write/mutation.js +234 -0
  378. package/dist/state/write/operations.js +170 -0
  379. package/dist/state/write/planEvaluation.js +128 -0
  380. package/dist/state/write/planPublication.js +179 -0
  381. package/dist/state/write/runtimeOperations.js +146 -0
  382. package/dist/state/write/serialize.js +1 -0
  383. package/dist/state/write/transaction.js +57 -0
  384. package/dist/state/write/validate.js +7 -0
  385. package/dist/upgrade/appContentRefresh.js +77 -36
  386. package/dist/upgrade/appModel.js +0 -1
  387. package/dist/upgrade/atomicWriter.js +1 -0
  388. package/dist/upgrade/bundleEvidence.js +0 -1
  389. package/dist/upgrade/channels.js +6 -9
  390. package/dist/upgrade/compatibility.js +43 -17
  391. package/dist/upgrade/doctor.js +55 -32
  392. package/dist/upgrade/doctorClassifier.js +11 -1
  393. package/dist/upgrade/installedHooksRetirement.js +46 -40
  394. package/dist/upgrade/legacyAgentCleanup.js +187 -21
  395. package/dist/upgrade/lifecycleUpgrade.js +113 -0
  396. package/dist/upgrade/migrateArtifactsV2ToV3.js +334 -64
  397. package/dist/upgrade/migrationPublication.js +122 -0
  398. package/dist/upgrade/nextMajorDoctor.js +0 -1
  399. package/dist/upgrade/npxPlatformStatus.js +0 -1
  400. package/dist/upgrade/projectIntegration.js +121 -159
  401. package/dist/upgrade/projectIntegrationDecision.js +42 -85
  402. package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
  403. package/dist/upgrade/runtimeMigration.js +262 -453
  404. package/dist/upgrade/upgradeCommands.js +14 -1
  405. package/dist/upgrade/upgradeLock.js +85 -0
  406. package/dist/upgrade/upgradeOrchestrator.js +263 -59
  407. package/dist/upgrade/v3CapabilitySurface.js +2 -3
  408. package/dist/upgrade/versionResolution.js +0 -1
  409. package/dist/validate/activationArtifactEvidence.js +852 -0
  410. package/dist/validate/activationArtifactEvidenceTypes.js +12 -0
  411. package/dist/validate/activationConjunction.js +816 -0
  412. package/dist/validate/activationEvidenceManifest.js +531 -0
  413. package/dist/validate/activationPackageSemantics.js +29 -0
  414. package/dist/validate/appHomeContract.js +1 -7
  415. package/dist/validate/bootstrapAuthority.js +44 -0
  416. package/dist/validate/capability.js +11 -3
  417. package/dist/validate/crossCapability.js +14 -9
  418. package/dist/validate/retainedReferenceAuthority.js +879 -0
  419. package/dist/validate/selfAudit.js +39 -45
  420. package/dist/validate/v1LegacyCruft.js +131 -0
  421. package/dist/validate/vocabularyAuthority.js +8 -8
  422. package/package.json +41 -13
  423. package/bundle/references/adapters/cursor.md +0 -214
  424. package/bundle/references/adapters/opencode.md +0 -530
  425. package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
  426. package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
  427. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
  428. package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -554
  429. package/bundle/references/adapters/runtime-feature-parity.md +0 -189
  430. package/bundle/references/analysis/benchmark.md +0 -267
  431. package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
  432. package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
  433. package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -369
  434. package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -250
  435. package/bundle/references/cli/capability-tool-classification.yaml +0 -53
  436. package/bundle/references/cli/coexistence-probe.yaml +0 -13
  437. package/bundle/references/cli/parity-expected-actual-template.md +0 -30
  438. package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
  439. package/bundle/references/cli/single-name-protocol.yaml +0 -42
  440. package/bundle/references/cli/upgrade-repair-wording.md +0 -45
  441. package/bundle/references/cli/v3-handoff-manifest.schema.yaml +0 -98
  442. package/bundle/references/meta/documentation-inventory.md +0 -49
  443. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  444. package/bundle/skills/agentera/agents/audit.toml +0 -6
  445. package/bundle/skills/agentera/agents/build.toml +0 -6
  446. package/bundle/skills/agentera/agents/design.toml +0 -6
  447. package/bundle/skills/agentera/agents/discuss.toml +0 -6
  448. package/bundle/skills/agentera/agents/document.toml +0 -6
  449. package/bundle/skills/agentera/agents/optimize.toml +0 -6
  450. package/bundle/skills/agentera/agents/orchestrate.toml +0 -6
  451. package/bundle/skills/agentera/agents/plan.toml +0 -6
  452. package/bundle/skills/agentera/agents/profile.toml +0 -6
  453. package/bundle/skills/agentera/agents/research.toml +0 -6
  454. package/bundle/skills/agentera/agents/status.toml +0 -6
  455. package/bundle/skills/agentera/agents/vision.toml +0 -6
  456. package/bundle/skills/agentera/references/contract.md +0 -1048
  457. package/dist/analytics/extractCorpus/cli.js.map +0 -1
  458. package/dist/analytics/extractCorpus/copilotSessions.js.map +0 -1
  459. package/dist/analytics/extractCorpus/core.js.map +0 -1
  460. package/dist/analytics/extractCorpus/corpus.js.map +0 -1
  461. package/dist/analytics/extractCorpus/coverageAudit.js.map +0 -1
  462. package/dist/analytics/extractCorpus/cursorSessions.js.map +0 -1
  463. package/dist/analytics/extractCorpus/extractCorpusParity.js.map +0 -1
  464. package/dist/analytics/extractCorpus/filesystemSources.js.map +0 -1
  465. package/dist/analytics/extractCorpus/index.js.map +0 -1
  466. package/dist/analytics/extractCorpus/jsonlSessions.js.map +0 -1
  467. package/dist/analytics/extractCorpus/sqliteCaps.js.map +0 -1
  468. package/dist/analytics/extractCorpus/sqliteSessions.js.map +0 -1
  469. package/dist/analytics/extractCorpus.js.map +0 -1
  470. package/dist/analytics/usageStats.js.map +0 -1
  471. package/dist/bin/agentera.js.map +0 -1
  472. package/dist/capabilities/audit/instructions.js.map +0 -1
  473. package/dist/capabilities/build/instructions.js.map +0 -1
  474. package/dist/capabilities/design/instructions.js.map +0 -1
  475. package/dist/capabilities/discuss/instructions.js.map +0 -1
  476. package/dist/capabilities/document/instructions.js.map +0 -1
  477. package/dist/capabilities/dokumentera/instructions.js +0 -6
  478. package/dist/capabilities/dokumentera/instructions.js.map +0 -1
  479. package/dist/capabilities/hej/instructions.js +0 -6
  480. package/dist/capabilities/hej/instructions.js.map +0 -1
  481. package/dist/capabilities/index.js.map +0 -1
  482. package/dist/capabilities/inspektera/instructions.js +0 -6
  483. package/dist/capabilities/inspektera/instructions.js.map +0 -1
  484. package/dist/capabilities/inspirera/instructions.js +0 -6
  485. package/dist/capabilities/inspirera/instructions.js.map +0 -1
  486. package/dist/capabilities/optimera/instructions.js +0 -6
  487. package/dist/capabilities/optimera/instructions.js.map +0 -1
  488. package/dist/capabilities/optimize/instructions.js.map +0 -1
  489. package/dist/capabilities/orchestrate/instructions.js.map +0 -1
  490. package/dist/capabilities/orkestrera/instructions.js +0 -6
  491. package/dist/capabilities/orkestrera/instructions.js.map +0 -1
  492. package/dist/capabilities/plan/instructions.js.map +0 -1
  493. package/dist/capabilities/planera/instructions.js +0 -6
  494. package/dist/capabilities/planera/instructions.js.map +0 -1
  495. package/dist/capabilities/profile/instructions.js.map +0 -1
  496. package/dist/capabilities/profilera/instructions.js +0 -6
  497. package/dist/capabilities/profilera/instructions.js.map +0 -1
  498. package/dist/capabilities/realisera/instructions.js +0 -6
  499. package/dist/capabilities/realisera/instructions.js.map +0 -1
  500. package/dist/capabilities/research/instructions.js.map +0 -1
  501. package/dist/capabilities/resonera/instructions.js +0 -6
  502. package/dist/capabilities/resonera/instructions.js.map +0 -1
  503. package/dist/capabilities/status/instructions.js.map +0 -1
  504. package/dist/capabilities/vision/instructions.js.map +0 -1
  505. package/dist/capabilities/visionera/instructions.js +0 -6
  506. package/dist/capabilities/visionera/instructions.js.map +0 -1
  507. package/dist/capabilities/visualisera/instructions.js +0 -5
  508. package/dist/capabilities/visualisera/instructions.js.map +0 -1
  509. package/dist/cli/appContext.js.map +0 -1
  510. package/dist/cli/argvalidate.js.map +0 -1
  511. package/dist/cli/capabilityContext/benchmark.js.map +0 -1
  512. package/dist/cli/capabilityContext/bespoke.js.map +0 -1
  513. package/dist/cli/capabilityContext/build.js.map +0 -1
  514. package/dist/cli/capabilityContext/closeout.js.map +0 -1
  515. package/dist/cli/capabilityContext/contract.js.map +0 -1
  516. package/dist/cli/capabilityContext/evidence.js.map +0 -1
  517. package/dist/cli/capabilityContext/index.js.map +0 -1
  518. package/dist/cli/capabilityContext/orchestration.js.map +0 -1
  519. package/dist/cli/capabilityContext/planState.js.map +0 -1
  520. package/dist/cli/capabilityContext/progress.js.map +0 -1
  521. package/dist/cli/capabilityContext/realisera.js +0 -174
  522. package/dist/cli/capabilityContext/realisera.js.map +0 -1
  523. package/dist/cli/capabilityContext/shared.js.map +0 -1
  524. package/dist/cli/capabilityContext/slim.js.map +0 -1
  525. package/dist/cli/capabilityContext/startup.js.map +0 -1
  526. package/dist/cli/capabilityContext/types.js.map +0 -1
  527. package/dist/cli/capabilityContext.js.map +0 -1
  528. package/dist/cli/commands/appHome.js.map +0 -1
  529. package/dist/cli/commands/backfill.js +0 -84
  530. package/dist/cli/commands/backfill.js.map +0 -1
  531. package/dist/cli/commands/capability.js.map +0 -1
  532. package/dist/cli/commands/compact.js.map +0 -1
  533. package/dist/cli/commands/doctor.js.map +0 -1
  534. package/dist/cli/commands/lint.js.map +0 -1
  535. package/dist/cli/commands/prime/bundleStatus.js.map +0 -1
  536. package/dist/cli/commands/prime/collectOrientationState.js.map +0 -1
  537. package/dist/cli/commands/prime/orientationOutput.js.map +0 -1
  538. package/dist/cli/commands/prime/routeOutput.js +0 -50
  539. package/dist/cli/commands/prime/routeOutput.js.map +0 -1
  540. package/dist/cli/commands/prime/types.js.map +0 -1
  541. package/dist/cli/commands/prime/v1Migration.js.map +0 -1
  542. package/dist/cli/commands/prime.js.map +0 -1
  543. package/dist/cli/commands/query.js.map +0 -1
  544. package/dist/cli/commands/report.js.map +0 -1
  545. package/dist/cli/commands/schema.js.map +0 -1
  546. package/dist/cli/commands/state/decisions.js.map +0 -1
  547. package/dist/cli/commands/state/docs.js.map +0 -1
  548. package/dist/cli/commands/state/experiments.js.map +0 -1
  549. package/dist/cli/commands/state/health.js.map +0 -1
  550. package/dist/cli/commands/state/index.js.map +0 -1
  551. package/dist/cli/commands/state/objective.js.map +0 -1
  552. package/dist/cli/commands/state/plan.js.map +0 -1
  553. package/dist/cli/commands/state/progress.js.map +0 -1
  554. package/dist/cli/commands/state/shared.js.map +0 -1
  555. package/dist/cli/commands/state/todo.js.map +0 -1
  556. package/dist/cli/commands/state.js +0 -1023
  557. package/dist/cli/commands/state.js.map +0 -1
  558. package/dist/cli/commands/upgrade.js.map +0 -1
  559. package/dist/cli/commands/validate.js.map +0 -1
  560. package/dist/cli/commands/verify.js.map +0 -1
  561. package/dist/cli/contracts/bundleStatus.js.map +0 -1
  562. package/dist/cli/contracts/orientationState.js.map +0 -1
  563. package/dist/cli/dispatch/argvParser.js.map +0 -1
  564. package/dist/cli/dispatch/check.js.map +0 -1
  565. package/dist/cli/dispatch/commands.js.map +0 -1
  566. package/dist/cli/dispatch/index.js.map +0 -1
  567. package/dist/cli/dispatch/lifecycle.js.map +0 -1
  568. package/dist/cli/dispatch/prime.js.map +0 -1
  569. package/dist/cli/dispatch/shared.js.map +0 -1
  570. package/dist/cli/dispatch/state.js.map +0 -1
  571. package/dist/cli/dispatch.js.map +0 -1
  572. package/dist/cli/errors.js.map +0 -1
  573. package/dist/cli/help.js.map +0 -1
  574. package/dist/cli/orientation/attention.js.map +0 -1
  575. package/dist/cli/orientation/corpusCoverage.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/startupCompletenessContract.js.map +0 -1
  579. package/dist/cli/stateQuery.js.map +0 -1
  580. package/dist/cli/structured.js.map +0 -1
  581. package/dist/cli/todoMarkdown.js.map +0 -1
  582. package/dist/cli/todoSeverity.js.map +0 -1
  583. package/dist/core/difflib.js.map +0 -1
  584. package/dist/core/envPaths.js.map +0 -1
  585. package/dist/core/git.js +0 -43
  586. package/dist/core/git.js.map +0 -1
  587. package/dist/core/jsonValue.js.map +0 -1
  588. package/dist/core/paths.js.map +0 -1
  589. package/dist/core/pyjson.js.map +0 -1
  590. package/dist/core/sourceRoot.js.map +0 -1
  591. package/dist/core/toml.js.map +0 -1
  592. package/dist/core/yaml.js.map +0 -1
  593. package/dist/eval/evalSkills.js.map +0 -1
  594. package/dist/eval/semanticEval.js.map +0 -1
  595. package/dist/eval/semanticFixtures.js.map +0 -1
  596. package/dist/hooks/common.js.map +0 -1
  597. package/dist/hooks/compaction/apply.js.map +0 -1
  598. package/dist/hooks/compaction/dryRun.js.map +0 -1
  599. package/dist/hooks/compaction/index.js.map +0 -1
  600. package/dist/hooks/compaction/parse.js.map +0 -1
  601. package/dist/hooks/compaction/retention.js.map +0 -1
  602. package/dist/hooks/compaction/status.js.map +0 -1
  603. package/dist/hooks/compaction/todoResolved.js +0 -137
  604. package/dist/hooks/compaction/todoResolved.js.map +0 -1
  605. package/dist/hooks/compaction/types.js.map +0 -1
  606. package/dist/hooks/compaction.js +0 -935
  607. package/dist/hooks/compaction.js.map +0 -1
  608. package/dist/hooks/cursorPreToolUse.js +0 -19
  609. package/dist/hooks/cursorPreToolUse.js.map +0 -1
  610. package/dist/hooks/cursorSessionStart.js +0 -79
  611. package/dist/hooks/cursorSessionStart.js.map +0 -1
  612. package/dist/hooks/sessionStart.js +0 -216
  613. package/dist/hooks/sessionStart.js.map +0 -1
  614. package/dist/hooks/sessionStop.js +0 -206
  615. package/dist/hooks/sessionStop.js.map +0 -1
  616. package/dist/hooks/todoLayout.js +0 -177
  617. package/dist/hooks/todoLayout.js.map +0 -1
  618. package/dist/hooks/validateArtifact/agentFacing.js.map +0 -1
  619. package/dist/hooks/validateArtifact/index.js.map +0 -1
  620. package/dist/hooks/validateArtifact/markdown.js.map +0 -1
  621. package/dist/hooks/validateArtifact/runtime.js +0 -86
  622. package/dist/hooks/validateArtifact/runtime.js.map +0 -1
  623. package/dist/hooks/validateArtifact/schema.js.map +0 -1
  624. package/dist/hooks/validateArtifact/traversal.js.map +0 -1
  625. package/dist/hooks/validateArtifact/violations.js.map +0 -1
  626. package/dist/hooks/validateArtifact.js +0 -924
  627. package/dist/hooks/validateArtifact.js.map +0 -1
  628. package/dist/migrate/v2HandoffManifest.js.map +0 -1
  629. package/dist/registries/artifactProtocolIds.js.map +0 -1
  630. package/dist/registries/artifactRegistry.js.map +0 -1
  631. package/dist/registries/capabilityContract.js.map +0 -1
  632. package/dist/registries/evaluatorHandoffContract.js.map +0 -1
  633. package/dist/registries/packageRegistry.js.map +0 -1
  634. package/dist/registries/runtimeAdapterRegistry.js +0 -316
  635. package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
  636. package/dist/registries/triggerLoader.js.map +0 -1
  637. package/dist/release/releaseMetadata.js.map +0 -1
  638. package/dist/routing/index.js +0 -2
  639. package/dist/routing/index.js.map +0 -1
  640. package/dist/routing/routeEngine.js +0 -189
  641. package/dist/routing/routeEngine.js.map +0 -1
  642. package/dist/setup/codex/agents.js +0 -96
  643. package/dist/setup/codex/agents.js.map +0 -1
  644. package/dist/setup/codex/cli.js +0 -161
  645. package/dist/setup/codex/cli.js.map +0 -1
  646. package/dist/setup/codex/configToml.js +0 -639
  647. package/dist/setup/codex/configToml.js.map +0 -1
  648. package/dist/setup/codex/constants.js +0 -29
  649. package/dist/setup/codex/constants.js.map +0 -1
  650. package/dist/setup/codex/installRoot.js +0 -64
  651. package/dist/setup/codex/installRoot.js.map +0 -1
  652. package/dist/setup/codex/state.js +0 -270
  653. package/dist/setup/codex/state.js.map +0 -1
  654. package/dist/setup/codex.js +0 -12
  655. package/dist/setup/codex.js.map +0 -1
  656. package/dist/setup/copilot.js +0 -227
  657. package/dist/setup/copilot.js.map +0 -1
  658. package/dist/setup/cursor.js +0 -129
  659. package/dist/setup/cursor.js.map +0 -1
  660. package/dist/setup/cursorSurfaces.js +0 -67
  661. package/dist/setup/cursorSurfaces.js.map +0 -1
  662. package/dist/setup/doctor/core.js +0 -300
  663. package/dist/setup/doctor/core.js.map +0 -1
  664. package/dist/setup/doctor/diagnostics.js +0 -240
  665. package/dist/setup/doctor/diagnostics.js.map +0 -1
  666. package/dist/setup/doctor/opencode.js +0 -313
  667. package/dist/setup/doctor/opencode.js.map +0 -1
  668. package/dist/setup/doctor/report.js +0 -425
  669. package/dist/setup/doctor/report.js.map +0 -1
  670. package/dist/setup/doctor.js +0 -10
  671. package/dist/setup/doctor.js.map +0 -1
  672. package/dist/setup/opencode.js.map +0 -1
  673. package/dist/setup/smokeChecks.js.map +0 -1
  674. package/dist/state/installRoot.js.map +0 -1
  675. package/dist/state/progressCommit.js +0 -289
  676. package/dist/state/progressCommit.js.map +0 -1
  677. package/dist/state/startupAnalysis/benchmark.js.map +0 -1
  678. package/dist/state/startupAnalysis/contract.js.map +0 -1
  679. package/dist/state/startupAnalysis/helpers.js.map +0 -1
  680. package/dist/state/startupAnalysis/index.js.map +0 -1
  681. package/dist/state/startupAnalysis/metrics.js.map +0 -1
  682. package/dist/state/startupAnalysis/records.js.map +0 -1
  683. package/dist/state/startupAnalysis/report.js.map +0 -1
  684. package/dist/state/startupAnalysis/threshold.js.map +0 -1
  685. package/dist/state/startupAnalysis.js.map +0 -1
  686. package/dist/upgrade/appContentRefresh.js.map +0 -1
  687. package/dist/upgrade/appModel.js.map +0 -1
  688. package/dist/upgrade/bundleEvidence.js.map +0 -1
  689. package/dist/upgrade/channels.js.map +0 -1
  690. package/dist/upgrade/cliProbe.js +0 -22
  691. package/dist/upgrade/cliProbe.js.map +0 -1
  692. package/dist/upgrade/coexistenceProbe.js +0 -107
  693. package/dist/upgrade/coexistenceProbe.js.map +0 -1
  694. package/dist/upgrade/compatibility.js.map +0 -1
  695. package/dist/upgrade/doctor.js.map +0 -1
  696. package/dist/upgrade/doctorClassifier.js.map +0 -1
  697. package/dist/upgrade/installedHooksRetirement.js.map +0 -1
  698. package/dist/upgrade/legacyAgentCleanup.js.map +0 -1
  699. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -570
  700. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
  701. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
  702. package/dist/upgrade/nextMajorDoctor.js.map +0 -1
  703. package/dist/upgrade/npxPlatformStatus.js.map +0 -1
  704. package/dist/upgrade/projectIntegration.js.map +0 -1
  705. package/dist/upgrade/projectIntegrationDecision.js.map +0 -1
  706. package/dist/upgrade/runtimeMigration.js.map +0 -1
  707. package/dist/upgrade/upgradeCommands.js.map +0 -1
  708. package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
  709. package/dist/upgrade/v3CapabilitySurface.js.map +0 -1
  710. package/dist/upgrade/versionResolution.js.map +0 -1
  711. package/dist/validate/appHomeContract.js.map +0 -1
  712. package/dist/validate/capability.js.map +0 -1
  713. package/dist/validate/crossCapability.js.map +0 -1
  714. package/dist/validate/lifecycleAdapters/legacyPythonParity.js +0 -93
  715. package/dist/validate/lifecycleAdapters/legacyPythonParity.js.map +0 -1
  716. package/dist/validate/lifecycleAdapters/nodeFormChecks.js +0 -488
  717. package/dist/validate/lifecycleAdapters/nodeFormChecks.js.map +0 -1
  718. package/dist/validate/lifecycleAdapters/shared.js +0 -198
  719. package/dist/validate/lifecycleAdapters/shared.js.map +0 -1
  720. package/dist/validate/lifecycleAdapters.js +0 -62
  721. package/dist/validate/lifecycleAdapters.js.map +0 -1
  722. package/dist/validate/selfAudit.js.map +0 -1
  723. package/dist/validate/vocabularyAuthority.js.map +0 -1
@@ -0,0 +1,133 @@
1
+ import { personalGlossaryAdmissionContract } from "../registries/glossaryEntryContract.js";
2
+ import { readSignalTier, resolveEvidenceAnchor, } from "./extractCorpus/evidenceTiers.js";
3
+ import { assessTiers, recoveryForState } from "./extractCorpus/tierReader.js";
4
+ function trimMeaning(value) {
5
+ return value
6
+ .trim()
7
+ .replace(/[.!?]+$/, "")
8
+ .trim();
9
+ }
10
+ /** Classify only authority-supported explicit correction or clarification forms. */
11
+ export function classifyExplicitGlossaryLanguage(text) {
12
+ const correction = /\b(?:actually|not quite|instead|correction)\b[^`"']*([`"'])([^`"']+)\1\s+means\s+(.+)$/i.exec(text);
13
+ const clarification = /\bto clarify\b.*?\bprefer\s+([`"'])([^`"']+)\1\s+to mean\s+(.+)$/i.exec(text);
14
+ const match = correction ?? clarification;
15
+ if (!match)
16
+ return null;
17
+ const term = match[2].trim();
18
+ const meaning = trimMeaning(match[3]);
19
+ return term && meaning ? { term, meaning } : null;
20
+ }
21
+ function recordText(record) {
22
+ const data = record.data;
23
+ if (!data || typeof data !== "object" || Array.isArray(data))
24
+ return "";
25
+ const object = data;
26
+ for (const field of ["text", "prompt", "content"]) {
27
+ if (typeof object[field] === "string")
28
+ return object[field];
29
+ }
30
+ return "";
31
+ }
32
+ function semanticValues(record) {
33
+ const data = record.data;
34
+ if (!data || typeof data !== "object" || Array.isArray(data))
35
+ return [];
36
+ const object = data;
37
+ if (record.source_kind === "instruction_document") {
38
+ return typeof object.content === "string" ? [object.content] : [];
39
+ }
40
+ if (record.source_kind === "project_config_signal") {
41
+ return Array.isArray(object.signals)
42
+ ? object.signals.filter((value) => typeof value === "string")
43
+ : [];
44
+ }
45
+ return [];
46
+ }
47
+ function containsCompleteTerm(text, term) {
48
+ // Personal admission intentionally classifies case-insensitive prose signals;
49
+ // it is not project terminology's exact-case source occurrence contract.
50
+ const escaped = term.trim().replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
51
+ return escaped.length > 0 && new RegExp(`(^|[^a-z0-9])${escaped}(?=$|[^a-z0-9])`, "i").test(text);
52
+ }
53
+ function unavailable(state) {
54
+ return { state, status: "unavailable", candidates: [], recovery: recoveryForState(state) };
55
+ }
56
+ /**
57
+ * Admit personal glossary evidence from one bounded signal read and direct
58
+ * resolution of selected anchors only. Profile rendering and persistence are
59
+ * deliberately outside this partial producer boundary.
60
+ */
61
+ export function admitPersonalGlossaryEvidence(input, resolveAnchor = resolveEvidenceAnchor) {
62
+ const authority = personalGlossaryAdmissionContract();
63
+ const assessment = assessTiers(input.tiersDir, input.corpusPath);
64
+ if (!assessment.analyzable)
65
+ return unavailable(assessment.state);
66
+ const tier = readSignalTier(input.tiersDir);
67
+ if (!tier)
68
+ return unavailable("corrupt");
69
+ const explicitTypes = new Set(authority.explicitSignalTypes);
70
+ const inferredTypes = new Set(authority.inferredSignalTypes);
71
+ const inferredKinds = new Set(authority.inferredSourceKinds);
72
+ const selected = tier.records.filter((signal) => explicitTypes.has(signal.signal_type) ||
73
+ (input.requestedTerms.length > 0 &&
74
+ inferredTypes.has(signal.signal_type) &&
75
+ inferredKinds.has(signal.source_kind)));
76
+ const resolved = new Map();
77
+ for (const signal of selected) {
78
+ if (resolved.has(signal.evidence_anchor))
79
+ continue;
80
+ const record = resolveAnchor(signal.evidence_anchor, input.tiersDir);
81
+ if (record &&
82
+ record.source_id === signal.source_id &&
83
+ record.source_kind === signal.source_kind) {
84
+ resolved.set(signal.evidence_anchor, { signal, record });
85
+ }
86
+ }
87
+ const candidates = [];
88
+ for (const { signal, record } of resolved.values()) {
89
+ if (!explicitTypes.has(signal.signal_type))
90
+ continue;
91
+ const classified = classifyExplicitGlossaryLanguage(recordText(record));
92
+ if (!classified)
93
+ continue;
94
+ candidates.push({
95
+ kind: "personal_explicit_definition",
96
+ ...classified,
97
+ evidence: [
98
+ {
99
+ source_id: signal.source_id,
100
+ evidence_anchor: signal.evidence_anchor,
101
+ signal_type: signal.signal_type,
102
+ },
103
+ ],
104
+ });
105
+ }
106
+ for (const term of new Set(input.requestedTerms.map((value) => value.trim()).filter(Boolean))) {
107
+ const evidence = [...resolved.values()]
108
+ .filter(({ signal, record }) => inferredTypes.has(signal.signal_type) &&
109
+ inferredKinds.has(signal.source_kind) &&
110
+ semanticValues(record).some((value) => containsCompleteTerm(value, term)))
111
+ .map(({ signal }) => ({
112
+ source_id: signal.source_id,
113
+ evidence_anchor: signal.evidence_anchor,
114
+ source_kind: signal.source_kind,
115
+ }))
116
+ .filter((item, index, all) => all.findIndex((candidate) => candidate.source_id === item.source_id ||
117
+ candidate.evidence_anchor === item.evidence_anchor) === index)
118
+ .sort((left, right) => left.source_id.localeCompare(right.source_id));
119
+ if (evidence.length >= 2 &&
120
+ new Set(evidence.map((item) => item.source_id)).size >= 2 &&
121
+ new Set(evidence.map((item) => item.evidence_anchor)).size >= 2) {
122
+ candidates.push({ kind: "personal_inferred_usage", term, evidence: evidence.slice(0, 2) });
123
+ }
124
+ }
125
+ return candidates.length > 0
126
+ ? { state: assessment.state, status: "admitted", candidates, recovery: null }
127
+ : {
128
+ state: assessment.state,
129
+ status: "insufficient",
130
+ candidates: [],
131
+ recovery: authority.insufficientRecovery,
132
+ };
133
+ }
@@ -0,0 +1,219 @@
1
+ import fs from "node:fs";
2
+ import { loadProfileDecayParameters } from "../capabilities/profile/instructions.js";
3
+ import { writeFileAtomic } from "../core/atomicWriter.js";
4
+ import { GlossaryEntryBoundError, validateGlossaryEntry, } from "../registries/glossaryEntryContract.js";
5
+ import { unicodeCaselessExact } from "../registries/glossaryTermIdentity.js";
6
+ const START = "<!-- agentera:personal-glossary:start -->";
7
+ const END = "<!-- agentera:personal-glossary:end -->";
8
+ const HEADING = "## Glossary";
9
+ const SCHEMA_VERSION = "agentera.personalGlossarySection.v1";
10
+ const DECAY = loadProfileDecayParameters();
11
+ function compareText(left, right) {
12
+ return left < right ? -1 : left > right ? 1 : 0;
13
+ }
14
+ function calendarDate(value) {
15
+ if (!/^\d{4}-\d{2}-\d{2}$/.test(value))
16
+ throw new Error(`expected ISO calendar date, received '${value}'`);
17
+ const date = new Date(`${value}T00:00:00.000Z`);
18
+ if (Number.isNaN(date.getTime()) || date.toISOString().slice(0, 10) !== value) {
19
+ throw new Error(`expected ISO calendar date, received '${value}'`);
20
+ }
21
+ return date;
22
+ }
23
+ function daysBetween(from, to) {
24
+ const days = (calendarDate(to).getTime() - calendarDate(from).getTime()) / 86_400_000;
25
+ if (days < 0)
26
+ throw new Error(`as_of ${to} precedes last_confirmed_at ${from}`);
27
+ return days;
28
+ }
29
+ function count(text, token) {
30
+ return text.split(token).length - 1;
31
+ }
32
+ function persistedContext(entry) {
33
+ const retained = new Map();
34
+ for (const evidence of entry.provenance.evidence) {
35
+ retained.set(evidence.evidence_anchor, {
36
+ sourceId: evidence.source_id,
37
+ sourceKind: "source_kind" in evidence ? evidence.source_kind : "conversation_turn",
38
+ signalType: "signal_type" in evidence ? evidence.signal_type : "instruction",
39
+ });
40
+ }
41
+ return { retainedHistory: retained };
42
+ }
43
+ function validateEntry(entry, context) {
44
+ const errors = validateGlossaryEntry(entry, "personal", context);
45
+ if (errors.length > 0)
46
+ throw new Error(`invalid personal glossary entry '${String(entry.term)}': ${errors.join("; ")}`);
47
+ }
48
+ function validateUnique(entries, label) {
49
+ for (const [index, entry] of entries.entries()) {
50
+ if (entries.slice(0, index).some((candidate) => unicodeCaselessExact(candidate.term, entry.term))) {
51
+ throw new Error(`${label} contains duplicate Unicode caseless-exact term '${entry.term}'`);
52
+ }
53
+ }
54
+ }
55
+ function matchingIndex(entries, term) {
56
+ return entries.findIndex((entry) => unicodeCaselessExact(entry.term, term));
57
+ }
58
+ function confidenceBasisFor(document, term) {
59
+ const key = Object.keys(document.confidence_basis).find((candidate) => unicodeCaselessExact(candidate, term));
60
+ return key === undefined ? Number.NaN : document.confidence_basis[key];
61
+ }
62
+ function parseSection(profile, maxEntries = Number.POSITIVE_INFINITY) {
63
+ const starts = count(profile, START);
64
+ const ends = count(profile, END);
65
+ const headings = [...profile.matchAll(/^## Glossary\s*$/gm)].length;
66
+ if (starts === 0 && ends === 0 && headings === 0)
67
+ return { document: null, start: -1, end: -1 };
68
+ if (starts > 1 || ends > 1 || headings > 1 || (headings > 0 && starts === 0 && ends === 0))
69
+ throw new PersonalGlossaryBoundaryError("ambiguous");
70
+ if (starts !== 1 || ends !== 1 || headings !== 1)
71
+ throw new PersonalGlossaryBoundaryError("malformed");
72
+ const start = profile.indexOf(START);
73
+ const end = profile.indexOf(END, start) + END.length;
74
+ if (start < 0 || end < END.length || end <= start)
75
+ throw new Error("PROFILE.md Glossary section has malformed or ambiguous owned boundaries");
76
+ const owned = profile.slice(start, end);
77
+ const newline = "\\r?\\n";
78
+ const match = new RegExp(`^${START}${newline}${HEADING}${newline}${newline}\`\`\`json${newline}([\\s\\S]+)${newline}\`\`\`${newline}${END}$`).exec(owned);
79
+ if (!match)
80
+ throw new Error("PROFILE.md Glossary section is malformed");
81
+ let value;
82
+ try {
83
+ value = JSON.parse(match[1]);
84
+ }
85
+ catch {
86
+ throw new Error("PROFILE.md Glossary section contains invalid JSON");
87
+ }
88
+ if (!value || typeof value !== "object" || Array.isArray(value))
89
+ throw new Error("PROFILE.md Glossary section document is malformed");
90
+ const document = value;
91
+ if (JSON.stringify(Object.keys(document)) !== JSON.stringify(["schema_version", "as_of", "confidence_basis", "entries"]) || document.schema_version !== SCHEMA_VERSION || !Array.isArray(document.entries) || !document.confidence_basis || typeof document.confidence_basis !== "object" || Array.isArray(document.confidence_basis)) {
92
+ throw new Error("PROFILE.md Glossary section document is malformed");
93
+ }
94
+ if (document.entries.length > maxEntries)
95
+ throw new GlossaryEntryBoundError("personal glossary exceeds the consumer entry bound");
96
+ calendarDate(document.as_of);
97
+ validateUnique(document.entries, "existing personal glossary");
98
+ const basisKeys = Object.keys(document.confidence_basis);
99
+ if (basisKeys.length !== document.entries.length || basisKeys.some((key, index) => basisKeys.slice(0, index).some((candidate) => unicodeCaselessExact(candidate, key)) || matchingIndex(document.entries, key) < 0)) {
100
+ throw new Error("PROFILE.md Glossary section confidence basis is malformed");
101
+ }
102
+ for (const entry of document.entries) {
103
+ validateEntry(entry, persistedContext(entry));
104
+ const basis = confidenceBasisFor(document, entry.term);
105
+ if (!Number.isInteger(basis) || basis < 0 || basis > 100)
106
+ throw new Error("PROFILE.md Glossary section confidence basis is malformed");
107
+ daysBetween(entry.temporal.last_confirmed_at, document.as_of);
108
+ }
109
+ return { document, start, end };
110
+ }
111
+ export class PersonalGlossaryBoundaryError extends Error {
112
+ availability;
113
+ constructor(availability) {
114
+ super("PROFILE.md Glossary section has malformed or ambiguous owned boundaries");
115
+ this.availability = availability;
116
+ }
117
+ }
118
+ /** Parse only the owned glossary range and project only consumer-safe fields. */
119
+ export function personalGlossaryConsumerEntries(profile, maxEntries) {
120
+ const document = parseSection(profile, maxEntries).document;
121
+ return document?.entries.map(({ term, meaning }) => ({ term, meaning })) ?? null;
122
+ }
123
+ /** Return profile grounding with the validated owned glossary range excluded byte-for-byte. */
124
+ export function personalProfileGrounding(profile) {
125
+ const section = parseSection(profile);
126
+ return section.document === null
127
+ ? profile
128
+ : `${profile.slice(0, section.start)}${profile.slice(section.end)}`;
129
+ }
130
+ function orderedEntry(entry) {
131
+ return {
132
+ term: entry.term,
133
+ meaning: entry.meaning,
134
+ confidence: entry.confidence,
135
+ permanence: entry.permanence,
136
+ temporal: {
137
+ observed_at: entry.temporal.observed_at,
138
+ last_confirmed_at: entry.temporal.last_confirmed_at,
139
+ },
140
+ provenance: {
141
+ kind: entry.provenance.kind,
142
+ evidence: entry.provenance.evidence.map((item) => ({ ...item })),
143
+ },
144
+ };
145
+ }
146
+ function render(document) {
147
+ return `${START}\n${HEADING}\n\n\`\`\`json\n${JSON.stringify(document, null, 2)}\n\`\`\`\n${END}`;
148
+ }
149
+ export function updatePersonalGlossaryProfile(input) {
150
+ calendarDate(input.asOf);
151
+ const original = fs.readFileSync(input.profilePath, "utf8");
152
+ const section = parseSection(original);
153
+ if (section.document && calendarDate(input.asOf).getTime() < calendarDate(section.document.as_of).getTime()) {
154
+ throw new Error("personal glossary as_of cannot move backward");
155
+ }
156
+ validateUnique(input.freshEntries, "fresh personal glossary evidence");
157
+ for (const entry of input.freshEntries)
158
+ validateEntry(entry, input.retainedHistory);
159
+ const fresh = input.freshEntries;
160
+ const established = section.document?.entries ?? [];
161
+ const merged = [];
162
+ const confidenceBasis = new Map();
163
+ const usedFresh = new Set();
164
+ for (const previous of established) {
165
+ const freshIndex = matchingIndex(fresh, previous.term);
166
+ const current = freshIndex >= 0 ? fresh[freshIndex] : undefined;
167
+ if (freshIndex >= 0)
168
+ usedFresh.add(freshIndex);
169
+ let entry;
170
+ let entryBasis;
171
+ if (current) {
172
+ if (previous.meaning !== current.meaning || previous.provenance.kind !== current.provenance.kind) {
173
+ throw new Error(`personal glossary conflict for established term '${previous.term}'`);
174
+ }
175
+ daysBetween(previous.temporal.last_confirmed_at, input.asOf);
176
+ entryBasis = current.confidence;
177
+ entry = orderedEntry({
178
+ ...current,
179
+ term: previous.term,
180
+ permanence: previous.permanence,
181
+ temporal: { observed_at: previous.temporal.observed_at, last_confirmed_at: input.asOf },
182
+ });
183
+ }
184
+ else {
185
+ entryBasis = confidenceBasisFor(section.document, previous.term);
186
+ const days = daysBetween(previous.temporal.last_confirmed_at, input.asOf);
187
+ entry = orderedEntry({
188
+ ...previous,
189
+ confidence: Math.max(DECAY.floor, Math.round(entryBasis * Math.exp(-DECAY.lambdas[previous.permanence] * days))),
190
+ });
191
+ }
192
+ merged.push(entry);
193
+ confidenceBasis.set(entry.term, entryBasis);
194
+ }
195
+ for (const [index, current] of fresh.entries()) {
196
+ if (usedFresh.has(index))
197
+ continue;
198
+ const entryBasis = current.confidence;
199
+ if (calendarDate(current.temporal.observed_at).getTime() > calendarDate(input.asOf).getTime())
200
+ throw new Error(`observed_at for '${current.term}' is after as_of`);
201
+ const entry = orderedEntry({
202
+ ...current,
203
+ temporal: { observed_at: current.temporal.observed_at, last_confirmed_at: input.asOf },
204
+ });
205
+ merged.push(entry);
206
+ confidenceBasis.set(entry.term, entryBasis);
207
+ }
208
+ merged.sort((left, right) => compareText(left.term, right.term));
209
+ const orderedBasis = Object.fromEntries(merged.map((entry) => [entry.term, confidenceBasis.get(entry.term)]));
210
+ const document = { schema_version: SCHEMA_VERSION, as_of: input.asOf, confidence_basis: orderedBasis, entries: merged };
211
+ const rendered = render(document);
212
+ const candidate = section.document
213
+ ? `${original.slice(0, section.start)}${rendered}${original.slice(section.end)}`
214
+ : `${original}${original.endsWith("\n") ? "\n" : "\n\n"}${rendered}\n`;
215
+ const changed = candidate !== original;
216
+ if (changed && !input.dryRun)
217
+ writeFileAtomic(input.profilePath, candidate);
218
+ return { changed, profilePath: input.profilePath, entries: merged };
219
+ }
@@ -0,0 +1,211 @@
1
+ import path from "node:path";
2
+ import { PROFILE_SIGNAL_TYPES, profileSufficiency, } from "../registries/evidenceTierContract.js";
3
+ import { readCurrentPointer, readSignalTier, resolveEvidenceAnchor, } from "./extractCorpus/evidenceTiers.js";
4
+ import { assessTiers, recoveryForState, resolveTiersDir, } from "./extractCorpus/tierReader.js";
5
+ const PROFILE_TYPES_SET = new Set(PROFILE_SIGNAL_TYPES);
6
+ /** Resolve the absolute signal tier file path from the current generation. */
7
+ function signalTierPath(tiersDir) {
8
+ const pointer = readCurrentPointer(tiersDir);
9
+ if (!pointer)
10
+ return null;
11
+ return path.join(tiersDir, "generations", pointer.generation, "signal.json");
12
+ }
13
+ /** Resolve the co-located corpus path for legacy compatibility assessment. */
14
+ function corpusPathFromTiersDir(tiersDir) {
15
+ const idx = tiersDir.lastIndexOf(path.sep + "tiers");
16
+ if (idx === -1)
17
+ return undefined;
18
+ return path.join(tiersDir.slice(0, idx), "corpus.json");
19
+ }
20
+ /**
21
+ * Assess whether the retained profile-relevant signal distribution is
22
+ * sufficient against the contract threshold. The prior intended distribution
23
+ * is reconstructed from the signal tier's selection report (total per
24
+ * family); the retained distribution from the published signal records.
25
+ * No separate full-corpus read is needed — the selection report carries both.
26
+ *
27
+ * When the tier is uncapped, retained == total, so the bounded and intended
28
+ * distributions are identical and sufficiency is trivially met. When capped,
29
+ * the selection report's per-family total/retained is the authoritative prior
30
+ * distribution; the profile-relevant intended count is scaled from the
31
+ * retained profile-relevant count by the family's overall retention ratio.
32
+ */
33
+ export function assessProfileSufficiency(selection, signals, contractPath) {
34
+ const suff = profileSufficiency(contractPath);
35
+ const threshold = suff.minimumFamilyRetention;
36
+ const profileRetainedPerFamily = new Map();
37
+ for (const sig of signals) {
38
+ const family = sig.source_product || "unknown";
39
+ profileRetainedPerFamily.set(family, (profileRetainedPerFamily.get(family) ?? 0) + 1);
40
+ }
41
+ const profileIntendedPerFamily = new Map();
42
+ if (!selection.capped) {
43
+ // Uncapped: retained == intended, so the retained counts ARE the intended.
44
+ for (const [family, retained] of profileRetainedPerFamily) {
45
+ profileIntendedPerFamily.set(family, retained);
46
+ }
47
+ }
48
+ else {
49
+ // Capped: the selection report's per_family is the authoritative source
50
+ // of which families had records. For families with profile-relevant
51
+ // retained signals, scale the intended count by the family's overall
52
+ // retention ratio. For families where all records were capped
53
+ // (retained=0, total>0), flag them as insufficient — no data survived
54
+ // to contribute to the profile.
55
+ for (const sel of selection.per_family) {
56
+ if (sel.total === 0)
57
+ continue;
58
+ const profileRetained = profileRetainedPerFamily.get(sel.family) ?? 0;
59
+ if (sel.retained > 0 && profileRetained > 0) {
60
+ profileIntendedPerFamily.set(sel.family, Math.round(profileRetained * (sel.total / sel.retained)));
61
+ }
62
+ else if (sel.retained === 0 && sel.total > 0) {
63
+ // All records for this family were capped — insufficient by definition.
64
+ profileIntendedPerFamily.set(sel.family, sel.total);
65
+ }
66
+ // If sel.retained > 0 but profileRetained == 0, the family's retained
67
+ // records were simply non-profile-relevant; leave it as sufficient.
68
+ }
69
+ // Also include any family that appears in retained signals but not in the
70
+ // selection report (should not normally happen, but handle gracefully).
71
+ for (const [family, retained] of profileRetainedPerFamily) {
72
+ if (!profileIntendedPerFamily.has(family)) {
73
+ profileIntendedPerFamily.set(family, retained);
74
+ }
75
+ }
76
+ }
77
+ const perFamily = [];
78
+ const allFamilies = new Set([...profileIntendedPerFamily.keys(), ...profileRetainedPerFamily.keys()]);
79
+ for (const family of [...allFamilies].sort()) {
80
+ const intended = profileIntendedPerFamily.get(family) ?? 0;
81
+ const retained = profileRetainedPerFamily.get(family) ?? 0;
82
+ const retention = intended > 0 ? retained / intended : 1;
83
+ const sufficient = intended === 0 || retention >= threshold;
84
+ perFamily.push({ family, intended, retained, retention, sufficient });
85
+ }
86
+ const insufficientFamilies = perFamily.filter((f) => !f.sufficient);
87
+ const sufficient = !selection.capped || insufficientFamilies.length === 0;
88
+ const reason = sufficient
89
+ ? selection.capped
90
+ ? "signal tier capped but per-family retention meets threshold"
91
+ : "signal tier uncapped; bounded and intended distributions identical"
92
+ : `insufficient retention for families: ${insufficientFamilies.map((f) => `${f.family} (${f.retained}/${f.intended}, ${(f.retention * 100).toFixed(0)}%)`).join(", ")}`;
93
+ return { sufficient, reason, threshold, capped: selection.capped, per_family: perFamily };
94
+ }
95
+ /**
96
+ * Read the bounded signal tier and return profile-relevant signals with a
97
+ * sufficiency assessment. This is the bounded profile-synthesis input: it
98
+ * loads only the signal tier (bounded by construction), never the full-
99
+ * evidence shards. Each signal's `evidence_anchor` resolves to retained full
100
+ * evidence via resolveProfileEvidence.
101
+ */
102
+ export function readProfileSignals(tiersDir, corpusPath, contractPath) {
103
+ const assessment = assessTiers(tiersDir, corpusPath);
104
+ const recovery = recoveryForState(assessment.state);
105
+ const threshold = profileSufficiency(contractPath).minimumFamilyRetention;
106
+ if (!assessment.analyzable) {
107
+ return {
108
+ state: assessment.state,
109
+ tiers_dir: tiersDir,
110
+ signal_path: null,
111
+ signals: [],
112
+ profile_signal_count: 0,
113
+ sufficiency: {
114
+ sufficient: false,
115
+ reason: assessment.state === "missing"
116
+ ? "no evidence tiers published"
117
+ : assessment.state === "legacy"
118
+ ? "legacy monolithic state; refresh required"
119
+ : `tier state ${assessment.state}; ${recovery ?? "recovery unavailable"}`,
120
+ threshold,
121
+ capped: false,
122
+ per_family: [],
123
+ },
124
+ recovery,
125
+ };
126
+ }
127
+ const tier = readSignalTier(tiersDir);
128
+ if (!tier) {
129
+ return {
130
+ state: "corrupt",
131
+ tiers_dir: tiersDir,
132
+ signal_path: null,
133
+ signals: [],
134
+ profile_signal_count: 0,
135
+ sufficiency: {
136
+ sufficient: false,
137
+ reason: "signal tier unreadable or not found",
138
+ threshold,
139
+ capped: false,
140
+ per_family: [],
141
+ },
142
+ recovery,
143
+ };
144
+ }
145
+ const profileSignals = tier.records.filter((s) => PROFILE_TYPES_SET.has(s.signal_type));
146
+ const sufficiency = assessProfileSufficiency(tier.manifest.signal.selection, profileSignals, contractPath);
147
+ return {
148
+ state: assessment.state,
149
+ tiers_dir: tiersDir,
150
+ signal_path: signalTierPath(tiersDir),
151
+ signals: profileSignals,
152
+ profile_signal_count: profileSignals.length,
153
+ sufficiency,
154
+ recovery,
155
+ };
156
+ }
157
+ /**
158
+ * Resolve a synthesized claim's evidence anchor to its retained full-evidence
159
+ * record. Loads only the owning shard, never the whole tier. Returns null
160
+ * when the anchor does not resolve (the claim cannot be checked).
161
+ */
162
+ export function resolveProfileEvidence(anchor, tiersDir) {
163
+ return resolveEvidenceAnchor(anchor, tiersDir);
164
+ }
165
+ /**
166
+ * Lightweight status for profile_context — assesses the tiers, reads the
167
+ * signal tier, and computes sufficiency. The signal records are counted but
168
+ * not returned in the status payload (the synthesis step reads them via
169
+ * readProfileSignals or the signal_path). This status tells the agent
170
+ * whether synthesis can proceed and where to read.
171
+ */
172
+ export function profileSignalsStatus(env = process.env, platform = process.platform, contractPath) {
173
+ const tiersDir = resolveTiersDir(env, platform);
174
+ const corpusPath = corpusPathFromTiersDir(tiersDir);
175
+ const assessment = assessTiers(tiersDir, corpusPath);
176
+ const recovery = recoveryForState(assessment.state);
177
+ if (!assessment.analyzable) {
178
+ return {
179
+ state: assessment.state,
180
+ tiers_dir: tiersDir,
181
+ signal_path: null,
182
+ signal_count: 0,
183
+ profile_signal_count: 0,
184
+ sufficiency: null,
185
+ recovery,
186
+ };
187
+ }
188
+ const tier = readSignalTier(tiersDir);
189
+ if (!tier) {
190
+ return {
191
+ state: "corrupt",
192
+ tiers_dir: tiersDir,
193
+ signal_path: null,
194
+ signal_count: 0,
195
+ profile_signal_count: 0,
196
+ sufficiency: null,
197
+ recovery,
198
+ };
199
+ }
200
+ const profileSignals = tier.records.filter((s) => PROFILE_TYPES_SET.has(s.signal_type));
201
+ const sufficiency = assessProfileSufficiency(tier.manifest.signal.selection, profileSignals, contractPath);
202
+ return {
203
+ state: assessment.state,
204
+ tiers_dir: tiersDir,
205
+ signal_path: signalTierPath(tiersDir),
206
+ signal_count: tier.records.length,
207
+ profile_signal_count: profileSignals.length,
208
+ sufficiency,
209
+ recovery,
210
+ };
211
+ }