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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (585) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +108 -22
  3. package/bundle/.agentera-npx-bundle.json +1 -1
  4. package/bundle/CHANGELOG.md +1351 -0
  5. package/bundle/DESIGN.md +229 -0
  6. package/bundle/LICENSE +201 -0
  7. package/bundle/README.md +143 -0
  8. package/bundle/UPGRADE.md +236 -0
  9. package/bundle/extract-corpus-parity.json +21 -0
  10. package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
  11. package/bundle/references/adapters/package-publication.json +437 -0
  12. package/bundle/references/adapters/package-registry.yaml +434 -189
  13. package/bundle/references/adapters/package-surface-characterization.md +66 -35
  14. package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
  15. package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
  16. package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
  17. package/bundle/references/adapters/runtime-retired-resources.yaml +333 -0
  18. package/bundle/references/analysis/evidence-tier-authority.yaml +518 -0
  19. package/bundle/references/analysis/verification-policy.yaml +191 -0
  20. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +20 -10
  21. package/bundle/references/artifacts/glossary-entry-contract.yaml +1254 -0
  22. package/bundle/references/artifacts/state-storage-authority.yaml +2982 -0
  23. package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
  24. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +7 -8
  25. package/bundle/references/cli/capability-instruction-contract.yaml +97 -59
  26. package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
  27. package/bundle/references/cli/routing-model.md +155 -0
  28. package/bundle/references/cli/trigger-schema-enrichment.md +147 -0
  29. package/bundle/references/cli/update-channels.yaml +35 -2
  30. package/bundle/references/cli/vocabulary-index.yaml +23 -20
  31. package/bundle/references/cli/vocabulary.md +337 -366
  32. package/bundle/references/meta/retained-reference-authority.yaml +151 -0
  33. package/bundle/registry.json +14 -14
  34. package/bundle/skills/agentera/SKILL.md +218 -408
  35. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +84 -0
  36. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/exit.yaml +2 -2
  37. package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +25 -0
  38. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/validation.yaml +37 -18
  39. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +102 -0
  40. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +6 -5
  41. package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
  42. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +176 -0
  43. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/artifacts.yaml +12 -12
  44. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/exit.yaml +5 -5
  45. package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +16 -0
  46. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/validation.yaml +7 -7
  47. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +51 -0
  48. package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/exit.yaml +2 -2
  49. package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +20 -0
  50. package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +144 -0
  51. package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +80 -0
  52. package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +16 -0
  53. package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/validation.yaml +18 -18
  54. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/artifacts.yaml +18 -18
  55. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/exit.yaml +2 -2
  56. package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +16 -0
  57. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/validation.yaml +9 -9
  58. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +76 -0
  59. package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/exit.yaml +9 -7
  60. package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +23 -0
  61. package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +121 -0
  62. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +66 -0
  63. package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/exit.yaml +2 -2
  64. package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +23 -0
  65. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +121 -0
  66. package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +23 -0
  67. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +6 -5
  68. package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +20 -0
  69. package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +115 -0
  70. package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +24 -0
  71. package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +16 -0
  72. package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/validation.yaml +2 -2
  73. package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +73 -0
  74. package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +22 -0
  75. package/bundle/skills/agentera/capabilities/{hej → status}/schemas/validation.yaml +5 -5
  76. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/artifacts.yaml +16 -16
  77. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/exit.yaml +7 -6
  78. package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +23 -0
  79. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/validation.yaml +18 -20
  80. package/bundle/skills/agentera/capability_schema_contract.yaml +200 -37
  81. package/bundle/skills/agentera/protocol.yaml +31 -31
  82. package/bundle/skills/agentera/route-phrases.yaml +81 -0
  83. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +5 -4
  84. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +40 -22
  85. package/bundle/skills/agentera/schemas/artifacts/design.yaml +5 -4
  86. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +15 -19
  87. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +145 -14
  88. package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +82 -0
  89. package/bundle/skills/agentera/schemas/artifacts/health.yaml +58 -21
  90. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +22 -8
  91. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +421 -33
  92. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +143 -53
  93. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +345 -31
  94. package/bundle/skills/agentera/schemas/artifacts/vision.yaml +3 -3
  95. package/dist/analytics/extractCorpus/cli.js +190 -0
  96. package/dist/analytics/extractCorpus/copilotSessions.js +275 -0
  97. package/dist/analytics/extractCorpus/core.js +392 -0
  98. package/dist/analytics/extractCorpus/corpus.js +167 -0
  99. package/dist/analytics/extractCorpus/coverageAudit.js +260 -0
  100. package/dist/analytics/extractCorpus/cursorSessions.js +425 -0
  101. package/dist/analytics/extractCorpus/evidenceTiers.js +603 -0
  102. package/dist/analytics/extractCorpus/extractCorpusParity.js +105 -0
  103. package/dist/analytics/extractCorpus/filesystemSources.js +118 -0
  104. package/dist/analytics/extractCorpus/index.js +14 -0
  105. package/dist/analytics/extractCorpus/jsonlSessions.js +204 -0
  106. package/dist/analytics/extractCorpus/sqliteCaps.js +43 -0
  107. package/dist/analytics/extractCorpus/sqliteSessions.js +367 -0
  108. package/dist/analytics/extractCorpus/tierReader.js +108 -0
  109. package/dist/analytics/extractCorpus.js +2 -1791
  110. package/dist/analytics/glossaryAdviceResolution.js +166 -0
  111. package/dist/analytics/glossaryInputAcquisition.js +319 -0
  112. package/dist/analytics/personalGlossaryAdmission.js +133 -0
  113. package/dist/analytics/personalGlossaryProfile.js +219 -0
  114. package/dist/analytics/profileSignals.js +211 -0
  115. package/dist/analytics/usageStats.js +169 -42
  116. package/dist/audit/terminologyDrift.js +281 -0
  117. package/dist/bin/agentera.js +3 -2
  118. package/dist/capabilities/audit/instructions.js +16 -0
  119. package/dist/capabilities/build/instructions.js +56 -0
  120. package/dist/capabilities/design/instructions.js +4 -0
  121. package/dist/capabilities/discuss/instructions.js +29 -0
  122. package/dist/capabilities/document/instructions.js +11 -0
  123. package/dist/capabilities/index.js +40 -0
  124. package/dist/capabilities/optimize/instructions.js +14 -0
  125. package/dist/capabilities/orchestrate/instructions.js +40 -0
  126. package/dist/capabilities/plan/instructions.js +32 -0
  127. package/dist/capabilities/profile/instructions.js +70 -0
  128. package/dist/capabilities/research/instructions.js +5 -0
  129. package/dist/capabilities/status/instructions.js +11 -0
  130. package/dist/capabilities/status/startupInstructions.js +34 -0
  131. package/dist/capabilities/vision/instructions.js +4 -0
  132. package/dist/cli/appContext.js +30 -24
  133. package/dist/cli/argvalidate.js +0 -1
  134. package/dist/cli/capabilityContext/benchmark.js +565 -0
  135. package/dist/cli/capabilityContext/bespoke.js +44 -0
  136. package/dist/cli/capabilityContext/build.js +242 -0
  137. package/dist/cli/capabilityContext/closeout.js +233 -0
  138. package/dist/cli/capabilityContext/contract.js +179 -0
  139. package/dist/cli/capabilityContext/evidence.js +463 -0
  140. package/dist/cli/capabilityContext/index.js +3 -0
  141. package/dist/cli/capabilityContext/orchestration.js +131 -0
  142. package/dist/cli/capabilityContext/planState.js +260 -0
  143. package/dist/cli/capabilityContext/progress.js +142 -0
  144. package/dist/cli/capabilityContext/projectVerification.js +409 -0
  145. package/dist/cli/capabilityContext/shared.js +83 -0
  146. package/dist/cli/capabilityContext/slim.js +152 -0
  147. package/dist/cli/capabilityContext/startup.js +150 -0
  148. package/dist/cli/capabilityContext/startupAggregation.js +68 -0
  149. package/dist/cli/capabilityContext/types.js +56 -0
  150. package/dist/cli/capabilityContext.js +1 -2421
  151. package/dist/cli/commands/appHome.js +22 -0
  152. package/dist/cli/commands/capability.js +5 -12
  153. package/dist/cli/commands/compact.js +41 -13
  154. package/dist/cli/commands/doctor.js +127 -97
  155. package/dist/cli/commands/durability.js +81 -0
  156. package/dist/cli/commands/glossaryAdvice.js +138 -0
  157. package/dist/cli/commands/lint.js +26 -44
  158. package/dist/cli/commands/personalGlossary.js +176 -0
  159. package/dist/cli/commands/prime/briefOrientation.js +747 -0
  160. package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
  161. package/dist/cli/commands/prime/bundleStatus.js +190 -0
  162. package/dist/cli/commands/prime/collectEntityOrientation.js +311 -0
  163. package/dist/cli/commands/prime/collectOrientationState.js +212 -0
  164. package/dist/cli/commands/prime/orientationOutput.js +397 -0
  165. package/dist/cli/commands/prime/types.js +1 -0
  166. package/dist/cli/commands/prime/v1Migration.js +38 -0
  167. package/dist/cli/commands/prime.js +80 -558
  168. package/dist/cli/commands/profileGrounding.js +55 -0
  169. package/dist/cli/commands/query.js +78 -53
  170. package/dist/cli/commands/report.js +96 -25
  171. package/dist/cli/commands/route.js +142 -0
  172. package/dist/cli/commands/schema.js +266 -143
  173. package/dist/cli/commands/state/decisions.js +387 -0
  174. package/dist/cli/commands/state/docs.js +70 -0
  175. package/dist/cli/commands/state/experimentRecords.js +151 -0
  176. package/dist/cli/commands/state/experiments.js +14 -0
  177. package/dist/cli/commands/state/get.js +129 -0
  178. package/dist/cli/commands/state/health.js +14 -0
  179. package/dist/cli/commands/state/index.js +16 -0
  180. package/dist/cli/commands/state/list.js +194 -0
  181. package/dist/cli/commands/state/objective.js +25 -0
  182. package/dist/cli/commands/state/plan.js +14 -0
  183. package/dist/cli/commands/state/planTasks.js +154 -0
  184. package/dist/cli/commands/state/plans.js +154 -0
  185. package/dist/cli/commands/state/progress.js +13 -0
  186. package/dist/cli/commands/state/shared.js +14 -0
  187. package/dist/cli/commands/state/todo.js +42 -0
  188. package/dist/cli/commands/state/write.js +434 -0
  189. package/dist/cli/commands/upgrade.js +146 -5
  190. package/dist/cli/commands/upgradeVerify.js +118 -0
  191. package/dist/cli/commands/validate.js +272 -213
  192. package/dist/cli/commands/verify.js +24 -9
  193. package/dist/cli/contracts/bundleStatus.js +1 -0
  194. package/dist/cli/contracts/orientationState.js +1 -0
  195. package/dist/cli/dispatch/argvParser.js +32 -0
  196. package/dist/cli/dispatch/check.js +372 -0
  197. package/dist/cli/dispatch/commands.js +27 -0
  198. package/dist/cli/dispatch/index.js +207 -0
  199. package/dist/cli/dispatch/lifecycle.js +652 -0
  200. package/dist/cli/dispatch/prime.js +139 -0
  201. package/dist/cli/dispatch/projections.js +17 -0
  202. package/dist/cli/dispatch/shared.js +63 -0
  203. package/dist/cli/dispatch/state.js +140 -0
  204. package/dist/cli/dispatch.js +1 -996
  205. package/dist/cli/errors.js +52 -0
  206. package/dist/cli/help.js +390 -43
  207. package/dist/cli/migrationRequired.js +87 -0
  208. package/dist/cli/orientation/attention.js +59 -0
  209. package/dist/cli/orientation/corpusCoverage.js +102 -0
  210. package/dist/cli/orientation.js +444 -173
  211. package/dist/cli/planArtifacts.js +350 -0
  212. package/dist/cli/planEvidence.js +157 -0
  213. package/dist/cli/planLifecycleState.js +36 -0
  214. package/dist/cli/planTaskIndex.js +11 -0
  215. package/dist/cli/preCutoverCommand.js +32 -0
  216. package/dist/cli/prime-blob.js +71 -3
  217. package/dist/cli/profileAcquisition.js +167 -0
  218. package/dist/cli/startupCompletenessContract.js +59 -0
  219. package/dist/cli/stateQuery.js +63 -14
  220. package/dist/cli/structured.js +0 -1
  221. package/dist/cli/todoMarkdown.js +46 -0
  222. package/dist/cli/todoReadinessSelection.js +192 -0
  223. package/dist/cli/todoSeverity.js +18 -0
  224. package/dist/core/atomicWriter.js +20 -0
  225. package/dist/core/developmentChannel.js +1 -0
  226. package/dist/core/developmentInvocation.js +374 -0
  227. package/dist/core/difflib.js +0 -1
  228. package/dist/core/envPaths.js +20 -0
  229. package/dist/core/jsonValue.js +5 -0
  230. package/dist/core/paths.js +0 -1
  231. package/dist/core/pyjson.js +67 -3
  232. package/dist/core/shell.js +4 -0
  233. package/dist/core/skillIdentity.js +23 -0
  234. package/dist/core/sourceRoot.js +9 -12
  235. package/dist/core/text.js +10 -0
  236. package/dist/core/toml.js +0 -1
  237. package/dist/core/yaml.js +8 -1
  238. package/dist/eval/evalSkills.js +30 -26
  239. package/dist/eval/hybridRouteEvaluation.js +155 -0
  240. package/dist/eval/semanticEval.js +43 -20
  241. package/dist/eval/semanticFixtures.js +16 -5
  242. package/dist/hooks/common.js +11 -81
  243. package/dist/hooks/compaction/apply.js +446 -0
  244. package/dist/hooks/compaction/dryRun.js +184 -0
  245. package/dist/hooks/compaction/index.js +22 -0
  246. package/dist/hooks/compaction/parse.js +325 -0
  247. package/dist/hooks/compaction/retention.js +202 -0
  248. package/dist/hooks/compaction/status.js +360 -0
  249. package/dist/hooks/compaction/types.js +5 -0
  250. package/dist/hooks/validateArtifact/agentFacing.js +9 -0
  251. package/dist/hooks/validateArtifact/index.js +92 -0
  252. package/dist/hooks/validateArtifact/markdown.js +145 -0
  253. package/dist/hooks/validateArtifact/schema.js +546 -0
  254. package/dist/hooks/validateArtifact/traversal.js +107 -0
  255. package/dist/hooks/validateArtifact/violations.js +107 -0
  256. package/dist/migrate/v2HandoffManifest.js +452 -0
  257. package/dist/registries/activationContract.js +2 -0
  258. package/dist/registries/activationTuples.js +106 -0
  259. package/dist/registries/artifactProtocolIds.js +78 -0
  260. package/dist/registries/artifactRegistry.js +224 -63
  261. package/dist/registries/artifactSchemaProjection.js +45 -0
  262. package/dist/registries/capabilityContract.js +141 -13
  263. package/dist/registries/evaluatorHandoffContract.js +170 -0
  264. package/dist/registries/evidenceTierContract.js +371 -0
  265. package/dist/registries/glossaryAdviceContract.js +79 -0
  266. package/dist/registries/glossaryCaveatContract.js +67 -0
  267. package/dist/registries/glossaryConsumerContractValidation.js +787 -0
  268. package/dist/registries/glossaryEntryContract.js +757 -0
  269. package/dist/registries/glossaryTermIdentity.js +17 -0
  270. package/dist/registries/glossaryTermOccurrence.js +20 -0
  271. package/dist/registries/hybridRoute.js +274 -0
  272. package/dist/registries/hybridRouteReceipt.js +221 -0
  273. package/dist/registries/packagePublication.js +229 -0
  274. package/dist/registries/packageRegistry.js +187 -211
  275. package/dist/registries/todoReadinessContract.js +448 -0
  276. package/dist/registries/triggerLoader.js +174 -0
  277. package/dist/registries/verbosityBudgetContract.js +205 -0
  278. package/dist/release/releaseMetadata.js +385 -0
  279. package/dist/runtime/lifecycleAdapterContract.js +457 -0
  280. package/dist/runtime/lifecycleAdapters.js +777 -0
  281. package/dist/runtime/lifecycleAuthority.js +453 -0
  282. package/dist/runtime/lifecycleOperationContract.js +123 -0
  283. package/dist/runtime/lifecycleOperations.js +634 -0
  284. package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
  285. package/dist/runtime/lifecyclePublication.js +415 -0
  286. package/dist/runtime/lifecycleSnapshot.js +438 -0
  287. package/dist/runtime/nativeResourceCleanup.js +502 -0
  288. package/dist/setup/opencode.js +20 -0
  289. package/dist/setup/opencodeConstants.js +1 -0
  290. package/dist/setup/sharedSkill.js +45 -0
  291. package/dist/setup/smokeChecks.js +21 -82
  292. package/dist/state/archiveDiscovery.js +580 -0
  293. package/dist/state/archivePublication.js +225 -0
  294. package/dist/state/archiveRecovery.js +237 -0
  295. package/dist/state/archiveReplay.js +53 -0
  296. package/dist/state/canonicalMigrationRecord.js +36 -0
  297. package/dist/state/changelog.js +221 -0
  298. package/dist/state/decisionEntities.js +367 -0
  299. package/dist/state/decisionLegacyValidation.js +215 -0
  300. package/dist/state/decisionMigrationProvenance.js +199 -0
  301. package/dist/state/decisionOverlay.js +254 -0
  302. package/dist/state/decisionRevision.js +256 -0
  303. package/dist/state/decisionRevisionMigration.js +89 -0
  304. package/dist/state/directRetrieval.js +323 -0
  305. package/dist/state/durability.js +324 -0
  306. package/dist/state/entityCutover.js +459 -0
  307. package/dist/state/entityCutoverGit.js +127 -0
  308. package/dist/state/entityGlossaryAuthority.js +13 -0
  309. package/dist/state/entityListProjection.js +187 -0
  310. package/dist/state/entityListRuntimeRegistry.js +85 -0
  311. package/dist/state/entityMigrationCausality.js +97 -0
  312. package/dist/state/entityMigrationIdentity.js +5 -0
  313. package/dist/state/entityMigrationPreview.js +846 -0
  314. package/dist/state/entityMigrationTodo.js +133 -0
  315. package/dist/state/entityPublicationContext.js +806 -0
  316. package/dist/state/entityRetrievalHelp.js +506 -0
  317. package/dist/state/entityStorage.js +896 -0
  318. package/dist/state/exactReplacementRecovery.js +18 -0
  319. package/dist/state/experimentArchive.js +63 -0
  320. package/dist/state/experimentIdentity.js +202 -0
  321. package/dist/state/healthEntities.js +262 -0
  322. package/dist/state/healthEntityValidation.js +18 -0
  323. package/dist/state/healthRepair.js +69 -0
  324. package/dist/state/installRoot.js +64 -25
  325. package/dist/state/legacyEntityCutoverEvidence.js +65 -0
  326. package/dist/state/legacyIdentity.js +47 -0
  327. package/dist/state/legacySummaryRecord.js +6 -0
  328. package/dist/state/listAccounting.js +54 -0
  329. package/dist/state/listClassification.js +17 -0
  330. package/dist/state/listCursor.js +42 -0
  331. package/dist/state/listRetrieval.js +781 -0
  332. package/dist/state/migrationSourceBinding.js +30 -0
  333. package/dist/state/objectiveExperimentEntities.js +322 -0
  334. package/dist/state/planEntities.js +530 -0
  335. package/dist/state/planIdentity.js +47 -0
  336. package/dist/state/planRetrieval.js +313 -0
  337. package/dist/state/planTaskRetrieval.js +294 -0
  338. package/dist/state/progressEntities.js +512 -0
  339. package/dist/state/progressGlossaryCaveat.js +168 -0
  340. package/dist/state/progressPublicationOrder.js +19 -0
  341. package/dist/state/projectRoot.js +62 -0
  342. package/dist/state/projectionPolicy.js +190 -0
  343. package/dist/state/retrievalAuthority.js +156 -0
  344. package/dist/state/safeProjectFile.js +155 -0
  345. package/dist/state/startupAnalysis/benchmark.js +432 -0
  346. package/dist/state/startupAnalysis/contract.js +160 -0
  347. package/dist/state/startupAnalysis/helpers.js +286 -0
  348. package/dist/state/startupAnalysis/index.js +6 -0
  349. package/dist/state/startupAnalysis/metrics.js +340 -0
  350. package/dist/state/startupAnalysis/records.js +198 -0
  351. package/dist/state/startupAnalysis/report.js +111 -0
  352. package/dist/state/startupAnalysis/threshold.js +512 -0
  353. package/dist/state/startupAnalysis.js +2 -1953
  354. package/dist/state/startupProjection.js +499 -0
  355. package/dist/state/stateMode.js +85 -0
  356. package/dist/state/stateStorageAuthority.js +47 -0
  357. package/dist/state/summaryEntityRead.js +25 -0
  358. package/dist/state/summaryMigrationProvenance.js +66 -0
  359. package/dist/state/summarySourceRowAuthority.js +36 -0
  360. package/dist/state/todoDocsEntities.js +1064 -0
  361. package/dist/state/todoDocsEntityValidation.js +158 -0
  362. package/dist/state/todoMarkdownProjection.js +51 -0
  363. package/dist/state/todoReconciliationActivation.js +132 -0
  364. package/dist/state/todoReconciliationInspection.js +173 -0
  365. package/dist/state/todoReconciliationRepair.js +170 -0
  366. package/dist/state/todoReconciliationTransaction.js +582 -0
  367. package/dist/state/write/assign.js +20 -0
  368. package/dist/state/write/candidateMutation.js +269 -0
  369. package/dist/state/write/errors.js +11 -0
  370. package/dist/state/write/experimentPublication.js +192 -0
  371. package/dist/state/write/explain.js +332 -0
  372. package/dist/state/write/fields.js +61 -0
  373. package/dist/state/write/glossaryPublication.js +263 -0
  374. package/dist/state/write/grammar.js +280 -0
  375. package/dist/state/write/helpers.js +29 -0
  376. package/dist/state/write/index.js +12 -0
  377. package/dist/state/write/input.js +367 -0
  378. package/dist/state/write/lock.js +837 -0
  379. package/dist/state/write/mutation.js +234 -0
  380. package/dist/state/write/operations.js +169 -0
  381. package/dist/state/write/planEvaluation.js +128 -0
  382. package/dist/state/write/planPublication.js +179 -0
  383. package/dist/state/write/runtimeOperations.js +142 -0
  384. package/dist/state/write/serialize.js +1 -0
  385. package/dist/state/write/transaction.js +52 -0
  386. package/dist/state/write/validate.js +7 -0
  387. package/dist/upgrade/appContentRefresh.js +383 -0
  388. package/dist/upgrade/appModel.js +8 -7
  389. package/dist/upgrade/atomicWriter.js +1 -0
  390. package/dist/upgrade/bundleEvidence.js +33 -0
  391. package/dist/upgrade/channels.js +12 -8
  392. package/dist/upgrade/compatibility.js +56 -21
  393. package/dist/upgrade/doctor.js +197 -192
  394. package/dist/upgrade/doctorClassifier.js +187 -0
  395. package/dist/upgrade/installedHooksRetirement.js +196 -0
  396. package/dist/upgrade/legacyAgentCleanup.js +282 -0
  397. package/dist/upgrade/lifecycleUpgrade.js +113 -0
  398. package/dist/upgrade/migrateArtifactsV2ToV3.js +367 -149
  399. package/dist/upgrade/migrationPublication.js +122 -0
  400. package/dist/upgrade/nextMajorDoctor.js +155 -0
  401. package/dist/upgrade/npxPlatformStatus.js +22 -0
  402. package/dist/upgrade/projectIntegration.js +145 -187
  403. package/dist/upgrade/projectIntegrationDecision.js +50 -0
  404. package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
  405. package/dist/upgrade/runtimeMigration.js +278 -352
  406. package/dist/upgrade/upgradeCommands.js +14 -1
  407. package/dist/upgrade/upgradeLock.js +85 -0
  408. package/dist/upgrade/upgradeOrchestrator.js +263 -59
  409. package/dist/upgrade/v3CapabilitySurface.js +14 -0
  410. package/dist/upgrade/versionResolution.js +12 -5
  411. package/dist/validate/activationArtifactEvidence.js +844 -0
  412. package/dist/validate/activationConjunction.js +816 -0
  413. package/dist/validate/activationEvidenceManifest.js +515 -0
  414. package/dist/validate/activationPackageSemantics.js +29 -0
  415. package/dist/validate/appHomeContract.js +5 -11
  416. package/dist/validate/bootstrapAuthority.js +44 -0
  417. package/dist/validate/capability.js +144 -15
  418. package/dist/validate/crossCapability.js +15 -10
  419. package/dist/validate/retainedReferenceAuthority.js +879 -0
  420. package/dist/validate/selfAudit.js +73 -37
  421. package/dist/validate/v1LegacyCruft.js +131 -0
  422. package/dist/validate/vocabularyAuthority.js +303 -0
  423. package/package.json +53 -27
  424. package/bundle/references/adapters/cursor.md +0 -213
  425. package/bundle/references/adapters/opencode.md +0 -530
  426. package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
  427. package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
  428. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
  429. package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -548
  430. package/bundle/references/adapters/runtime-feature-parity.md +0 -189
  431. package/bundle/references/analysis/benchmark.md +0 -267
  432. package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
  433. package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
  434. package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -355
  435. package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -278
  436. package/bundle/references/cli/capability-tool-classification.yaml +0 -53
  437. package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
  438. package/bundle/references/meta/documentation-inventory.md +0 -43
  439. package/bundle/references/v1-section-mapping.md +0 -47
  440. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  441. package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
  442. package/bundle/skills/agentera/agents/hej.toml +0 -6
  443. package/bundle/skills/agentera/agents/inspektera.toml +0 -6
  444. package/bundle/skills/agentera/agents/inspirera.toml +0 -6
  445. package/bundle/skills/agentera/agents/optimera.toml +0 -6
  446. package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
  447. package/bundle/skills/agentera/agents/planera.toml +0 -6
  448. package/bundle/skills/agentera/agents/profilera.toml +0 -6
  449. package/bundle/skills/agentera/agents/realisera.toml +0 -6
  450. package/bundle/skills/agentera/agents/resonera.toml +0 -6
  451. package/bundle/skills/agentera/agents/visionera.toml +0 -6
  452. package/bundle/skills/agentera/agents/visualisera.toml +0 -6
  453. package/bundle/skills/agentera/capabilities/dokumentera/instructions.md +0 -428
  454. package/bundle/skills/agentera/capabilities/dokumentera/schemas/artifacts.yaml +0 -73
  455. package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +0 -35
  456. package/bundle/skills/agentera/capabilities/hej/instructions.md +0 -331
  457. package/bundle/skills/agentera/capabilities/hej/schemas/artifacts.yaml +0 -69
  458. package/bundle/skills/agentera/capabilities/hej/schemas/triggers.yaml +0 -58
  459. package/bundle/skills/agentera/capabilities/inspektera/instructions.md +0 -514
  460. package/bundle/skills/agentera/capabilities/inspektera/schemas/artifacts.yaml +0 -76
  461. package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +0 -38
  462. package/bundle/skills/agentera/capabilities/inspirera/instructions.md +0 -280
  463. package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +0 -24
  464. package/bundle/skills/agentera/capabilities/inspirera/schemas/triggers.yaml +0 -34
  465. package/bundle/skills/agentera/capabilities/optimera/instructions.md +0 -437
  466. package/bundle/skills/agentera/capabilities/optimera/schemas/triggers.yaml +0 -39
  467. package/bundle/skills/agentera/capabilities/orkestrera/instructions.md +0 -433
  468. package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +0 -64
  469. package/bundle/skills/agentera/capabilities/orkestrera/schemas/triggers.yaml +0 -42
  470. package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +0 -107
  471. package/bundle/skills/agentera/capabilities/planera/instructions.md +0 -368
  472. package/bundle/skills/agentera/capabilities/planera/schemas/artifacts.yaml +0 -62
  473. package/bundle/skills/agentera/capabilities/planera/schemas/triggers.yaml +0 -34
  474. package/bundle/skills/agentera/capabilities/planera/schemas/validation.yaml +0 -61
  475. package/bundle/skills/agentera/capabilities/profilera/instructions.md +0 -419
  476. package/bundle/skills/agentera/capabilities/profilera/schemas/artifacts.yaml +0 -18
  477. package/bundle/skills/agentera/capabilities/profilera/schemas/triggers.yaml +0 -45
  478. package/bundle/skills/agentera/capabilities/profilera/schemas/validation.yaml +0 -57
  479. package/bundle/skills/agentera/capabilities/realisera/instructions.md +0 -403
  480. package/bundle/skills/agentera/capabilities/realisera/schemas/artifacts.yaml +0 -80
  481. package/bundle/skills/agentera/capabilities/realisera/schemas/triggers.yaml +0 -39
  482. package/bundle/skills/agentera/capabilities/realisera/schemas/validation.yaml +0 -110
  483. package/bundle/skills/agentera/capabilities/resonera/instructions.md +0 -329
  484. package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +0 -47
  485. package/bundle/skills/agentera/capabilities/resonera/schemas/triggers.yaml +0 -46
  486. package/bundle/skills/agentera/capabilities/resonera/schemas/validation.yaml +0 -77
  487. package/bundle/skills/agentera/capabilities/visionera/instructions.md +0 -309
  488. package/bundle/skills/agentera/capabilities/visionera/schemas/triggers.yaml +0 -41
  489. package/bundle/skills/agentera/capabilities/visualisera/instructions.md +0 -400
  490. package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +0 -33
  491. package/bundle/skills/agentera/references/contract.md +0 -1039
  492. package/bundle/skills/hej/.claude-plugin/plugin.json +0 -6
  493. package/bundle/skills/hej/SKILL.md +0 -69
  494. package/bundle/skills/hej/agents/hej.toml +0 -11
  495. package/bundle/skills/hej/agents/openai.yaml +0 -8
  496. package/dist/analytics/extractCorpus.js.map +0 -1
  497. package/dist/analytics/usageStats.js.map +0 -1
  498. package/dist/bin/agentera.js.map +0 -1
  499. package/dist/cli/appContext.js.map +0 -1
  500. package/dist/cli/argvalidate.js.map +0 -1
  501. package/dist/cli/capabilityContext.js.map +0 -1
  502. package/dist/cli/commands/backfill.js +0 -84
  503. package/dist/cli/commands/backfill.js.map +0 -1
  504. package/dist/cli/commands/capability.js.map +0 -1
  505. package/dist/cli/commands/compact.js.map +0 -1
  506. package/dist/cli/commands/doctor.js.map +0 -1
  507. package/dist/cli/commands/lint.js.map +0 -1
  508. package/dist/cli/commands/prime.js.map +0 -1
  509. package/dist/cli/commands/query.js.map +0 -1
  510. package/dist/cli/commands/report.js.map +0 -1
  511. package/dist/cli/commands/schema.js.map +0 -1
  512. package/dist/cli/commands/state.js +0 -1012
  513. package/dist/cli/commands/state.js.map +0 -1
  514. package/dist/cli/commands/upgrade.js.map +0 -1
  515. package/dist/cli/commands/validate.js.map +0 -1
  516. package/dist/cli/commands/verify.js.map +0 -1
  517. package/dist/cli/dispatch.js.map +0 -1
  518. package/dist/cli/help.js.map +0 -1
  519. package/dist/cli/orientation.js.map +0 -1
  520. package/dist/cli/prime-blob.js.map +0 -1
  521. package/dist/cli/stateQuery.js.map +0 -1
  522. package/dist/cli/structured.js.map +0 -1
  523. package/dist/core/difflib.js.map +0 -1
  524. package/dist/core/git.js +0 -43
  525. package/dist/core/git.js.map +0 -1
  526. package/dist/core/paths.js.map +0 -1
  527. package/dist/core/pyjson.js.map +0 -1
  528. package/dist/core/sourceRoot.js.map +0 -1
  529. package/dist/core/toml.js.map +0 -1
  530. package/dist/core/yaml.js.map +0 -1
  531. package/dist/eval/evalSkills.js.map +0 -1
  532. package/dist/eval/semanticEval.js.map +0 -1
  533. package/dist/eval/semanticFixtures.js.map +0 -1
  534. package/dist/hooks/common.js.map +0 -1
  535. package/dist/hooks/compaction.js +0 -935
  536. package/dist/hooks/compaction.js.map +0 -1
  537. package/dist/hooks/cursorPreToolUse.js +0 -19
  538. package/dist/hooks/cursorPreToolUse.js.map +0 -1
  539. package/dist/hooks/cursorSessionStart.js +0 -71
  540. package/dist/hooks/cursorSessionStart.js.map +0 -1
  541. package/dist/hooks/sessionStart.js +0 -209
  542. package/dist/hooks/sessionStart.js.map +0 -1
  543. package/dist/hooks/sessionStop.js +0 -212
  544. package/dist/hooks/sessionStop.js.map +0 -1
  545. package/dist/hooks/validateArtifact.js +0 -933
  546. package/dist/hooks/validateArtifact.js.map +0 -1
  547. package/dist/registries/artifactRegistry.js.map +0 -1
  548. package/dist/registries/capabilityContract.js.map +0 -1
  549. package/dist/registries/packageRegistry.js.map +0 -1
  550. package/dist/registries/runtimeAdapterRegistry.js +0 -315
  551. package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
  552. package/dist/setup/codex.js +0 -1056
  553. package/dist/setup/codex.js.map +0 -1
  554. package/dist/setup/copilot.js +0 -227
  555. package/dist/setup/copilot.js.map +0 -1
  556. package/dist/setup/cursor.js +0 -127
  557. package/dist/setup/cursor.js.map +0 -1
  558. package/dist/setup/doctor.js +0 -1297
  559. package/dist/setup/doctor.js.map +0 -1
  560. package/dist/setup/smokeChecks.js.map +0 -1
  561. package/dist/state/installRoot.js.map +0 -1
  562. package/dist/state/progressCommit.js +0 -289
  563. package/dist/state/progressCommit.js.map +0 -1
  564. package/dist/state/startupAnalysis.js.map +0 -1
  565. package/dist/upgrade/appModel.js.map +0 -1
  566. package/dist/upgrade/channels.js.map +0 -1
  567. package/dist/upgrade/compatibility.js.map +0 -1
  568. package/dist/upgrade/doctor.js.map +0 -1
  569. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -571
  570. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
  571. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
  572. package/dist/upgrade/projectIntegration.js.map +0 -1
  573. package/dist/upgrade/runtimeMigration.js.map +0 -1
  574. package/dist/upgrade/upgradeCommands.js.map +0 -1
  575. package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
  576. package/dist/upgrade/versionResolution.js.map +0 -1
  577. package/dist/validate/appHomeContract.js.map +0 -1
  578. package/dist/validate/capability.js.map +0 -1
  579. package/dist/validate/crossCapability.js.map +0 -1
  580. package/dist/validate/lifecycleAdapters.js +0 -772
  581. package/dist/validate/lifecycleAdapters.js.map +0 -1
  582. package/dist/validate/selfAudit.js.map +0 -1
  583. /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
  584. /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
  585. /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
@@ -0,0 +1,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
+ }