agentera 3.0.0-dev.7 → 3.0.0-dev.74

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 (763) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +229 -22
  3. package/bundle/.agentera-build-source.json +8 -0
  4. package/bundle/CHANGELOG.md +1361 -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 +252 -0
  9. package/bundle/extract-corpus-parity.json +2 -4
  10. package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
  11. package/bundle/references/adapters/package-publication.json +484 -0
  12. package/bundle/references/adapters/package-registry.yaml +439 -188
  13. package/bundle/references/adapters/package-surface-characterization.md +68 -34
  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 +559 -0
  19. package/bundle/references/analysis/personal-glossary-evaluation-authority.yaml +175 -0
  20. package/bundle/references/analysis/personal-glossary-evaluation-corpus.yaml +291 -0
  21. package/bundle/references/analysis/personal-glossary-holdout.yaml +192 -0
  22. package/bundle/references/analysis/verification-policy.yaml +266 -0
  23. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +17 -8
  24. package/bundle/references/artifacts/glossary-entry-contract.yaml +2752 -0
  25. package/bundle/references/artifacts/state-storage-authority.yaml +3061 -0
  26. package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
  27. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +3 -4
  28. package/bundle/references/cli/capability-instruction-contract.yaml +11 -14
  29. package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
  30. package/bundle/references/cli/routing-model.md +152 -93
  31. package/bundle/references/cli/trigger-schema-enrichment.md +57 -46
  32. package/bundle/references/cli/update-channels.yaml +6 -4
  33. package/bundle/references/cli/vocabulary-index.yaml +5 -7
  34. package/bundle/references/cli/vocabulary.md +52 -94
  35. package/bundle/references/meta/retained-reference-authority.yaml +166 -0
  36. package/bundle/skills/agentera/SKILL.md +183 -63
  37. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +27 -19
  38. package/bundle/skills/agentera/capabilities/audit/schemas/exit.yaml +2 -2
  39. package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +13 -35
  40. package/bundle/skills/agentera/capabilities/audit/schemas/validation.yaml +30 -11
  41. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +44 -21
  42. package/bundle/skills/agentera/capabilities/build/schemas/exit.yaml +8 -6
  43. package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +14 -36
  44. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +95 -21
  45. package/bundle/skills/agentera/capabilities/design/schemas/artifacts.yaml +6 -6
  46. package/bundle/skills/agentera/capabilities/design/schemas/exit.yaml +5 -5
  47. package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +5 -34
  48. package/bundle/skills/agentera/capabilities/design/schemas/validation.yaml +2 -2
  49. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +17 -13
  50. package/bundle/skills/agentera/capabilities/discuss/schemas/exit.yaml +2 -2
  51. package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +6 -40
  52. package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +72 -5
  53. package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +24 -17
  54. package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +5 -35
  55. package/bundle/skills/agentera/capabilities/document/schemas/validation.yaml +13 -13
  56. package/bundle/skills/agentera/capabilities/optimize/schemas/artifacts.yaml +10 -10
  57. package/bundle/skills/agentera/capabilities/optimize/schemas/exit.yaml +2 -2
  58. package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +4 -35
  59. package/bundle/skills/agentera/capabilities/optimize/schemas/validation.yaml +3 -3
  60. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +34 -22
  61. package/bundle/skills/agentera/capabilities/orchestrate/schemas/exit.yaml +9 -7
  62. package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +5 -37
  63. package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +38 -37
  64. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +20 -16
  65. package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +8 -31
  66. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +66 -6
  67. package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +13 -4
  68. package/bundle/skills/agentera/capabilities/profile/schemas/exit.yaml +8 -5
  69. package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +8 -37
  70. package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +67 -3
  71. package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +6 -6
  72. package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +5 -29
  73. package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +13 -12
  74. package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +7 -49
  75. package/bundle/skills/agentera/capabilities/vision/schemas/artifacts.yaml +8 -8
  76. package/bundle/skills/agentera/capabilities/vision/schemas/exit.yaml +7 -6
  77. package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +7 -39
  78. package/bundle/skills/agentera/capabilities/vision/schemas/validation.yaml +14 -16
  79. package/bundle/skills/agentera/capability_schema_contract.yaml +32 -32
  80. package/bundle/skills/agentera/protocol.yaml +4 -4
  81. package/bundle/skills/agentera/route-phrases.yaml +81 -0
  82. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +1 -0
  83. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +30 -12
  84. package/bundle/skills/agentera/schemas/artifacts/design.yaml +1 -0
  85. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +7 -12
  86. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +140 -9
  87. package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +87 -0
  88. package/bundle/skills/agentera/schemas/artifacts/health.yaml +56 -19
  89. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +18 -4
  90. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +464 -32
  91. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +131 -18
  92. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +302 -7
  93. package/dist/.agentera-build-source.json +8 -0
  94. package/dist/analytics/extractCorpus/cli.js +52 -11
  95. package/dist/analytics/extractCorpus/copilotSessions.js +19 -8
  96. package/dist/analytics/extractCorpus/core.js +262 -14
  97. package/dist/analytics/extractCorpus/corpus.js +57 -18
  98. package/dist/analytics/extractCorpus/coverageAudit.js +44 -45
  99. package/dist/analytics/extractCorpus/cursorSessions.js +28 -8
  100. package/dist/analytics/extractCorpus/evidenceTiers.js +709 -0
  101. package/dist/analytics/extractCorpus/extractCorpusParity.js +4 -4
  102. package/dist/analytics/extractCorpus/filesystemSources.js +5 -5
  103. package/dist/analytics/extractCorpus/index.js +4 -2
  104. package/dist/analytics/extractCorpus/jsonlSessions.js +76 -8
  105. package/dist/analytics/extractCorpus/sqliteCaps.js +0 -1
  106. package/dist/analytics/extractCorpus/sqliteSessions.js +12 -4
  107. package/dist/analytics/extractCorpus/tierReader.js +108 -0
  108. package/dist/analytics/extractCorpus.js +0 -1
  109. package/dist/analytics/glossaryAdviceResolution.js +166 -0
  110. package/dist/analytics/glossaryInputAcquisition.js +319 -0
  111. package/dist/analytics/personalGlossaryAdmission.js +113 -0
  112. package/dist/analytics/personalGlossaryCandidateProjection.js +692 -0
  113. package/dist/analytics/personalGlossaryCandidateProjectionExcerpts.js +144 -0
  114. package/dist/analytics/personalGlossaryCandidateReadView.js +23 -0
  115. package/dist/analytics/personalGlossaryCurrentGeneration.js +25 -0
  116. package/dist/analytics/personalGlossaryDecision.js +203 -0
  117. package/dist/analytics/personalGlossaryExplicit.js +788 -0
  118. package/dist/analytics/personalGlossaryExplicitMining.js +285 -0
  119. package/dist/analytics/personalGlossaryExplicitScope.js +41 -0
  120. package/dist/analytics/personalGlossaryExplicitSegments.js +418 -0
  121. package/dist/analytics/personalGlossaryExplicitTypes.js +26 -0
  122. package/dist/analytics/personalGlossaryLexicalClassifier.js +175 -0
  123. package/dist/analytics/personalGlossaryProfile.js +229 -0
  124. package/dist/analytics/personalGlossaryRecurrence.js +618 -0
  125. package/dist/analytics/personalGlossaryReviewRecordStorage.js +428 -0
  126. package/dist/analytics/personalGlossaryReviewRecords.js +332 -0
  127. package/dist/analytics/profileSignals.js +211 -0
  128. package/dist/analytics/usageStats.js +150 -23
  129. package/dist/audit/terminologyDrift.js +281 -0
  130. package/dist/bin/agentera.js +3 -2
  131. package/dist/capabilities/audit/instructions.js +16 -6
  132. package/dist/capabilities/build/instructions.js +59 -6
  133. package/dist/capabilities/design/instructions.js +3 -4
  134. package/dist/capabilities/discuss/instructions.js +29 -6
  135. package/dist/capabilities/document/instructions.js +11 -6
  136. package/dist/capabilities/index.js +20 -14
  137. package/dist/capabilities/optimize/instructions.js +14 -6
  138. package/dist/capabilities/orchestrate/instructions.js +42 -6
  139. package/dist/capabilities/plan/instructions.js +30 -3
  140. package/dist/capabilities/profile/instructions.js +104 -5
  141. package/dist/capabilities/research/instructions.js +4 -5
  142. package/dist/capabilities/status/instructions.js +15 -6
  143. package/dist/capabilities/status/startupInstructions.js +34 -0
  144. package/dist/capabilities/vision/instructions.js +3 -5
  145. package/dist/cli/appContext.js +14 -7
  146. package/dist/cli/argvalidate.js +0 -1
  147. package/dist/cli/capabilityContext/benchmark.js +5 -4
  148. package/dist/cli/capabilityContext/bespoke.js +14 -6
  149. package/dist/cli/capabilityContext/build.js +116 -42
  150. package/dist/cli/capabilityContext/closeout.js +30 -27
  151. package/dist/cli/capabilityContext/contract.js +18 -27
  152. package/dist/cli/capabilityContext/evidence.js +84 -77
  153. package/dist/cli/capabilityContext/index.js +0 -1
  154. package/dist/cli/capabilityContext/orchestration.js +42 -18
  155. package/dist/cli/capabilityContext/planState.js +89 -96
  156. package/dist/cli/capabilityContext/progress.js +51 -12
  157. package/dist/cli/capabilityContext/projectVerification.js +409 -0
  158. package/dist/cli/capabilityContext/shared.js +9 -20
  159. package/dist/cli/capabilityContext/slim.js +52 -8
  160. package/dist/cli/capabilityContext/startup.js +51 -114
  161. package/dist/cli/capabilityContext/startupAggregation.js +68 -0
  162. package/dist/cli/capabilityContext/types.js +26 -10
  163. package/dist/cli/capabilityContext.js +0 -1
  164. package/dist/cli/commands/appHome.js +0 -1
  165. package/dist/cli/commands/capability.js +2 -2
  166. package/dist/cli/commands/compact.js +163 -13
  167. package/dist/cli/commands/doctor.js +117 -11
  168. package/dist/cli/commands/durability.js +81 -0
  169. package/dist/cli/commands/glossaryAdvice.js +138 -0
  170. package/dist/cli/commands/lint.js +22 -8
  171. package/dist/cli/commands/personalGlossaryCandidateReads.js +744 -0
  172. package/dist/cli/commands/personalGlossaryDecision.js +349 -0
  173. package/dist/cli/commands/personalGlossaryPublish.js +484 -0
  174. package/dist/cli/commands/personalGlossaryReviewRecordReads.js +209 -0
  175. package/dist/cli/commands/personalGlossaryReviewRecords.js +623 -0
  176. package/dist/cli/commands/prime/briefOrientation.js +845 -0
  177. package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
  178. package/dist/cli/commands/prime/bundleStatus.js +54 -4
  179. package/dist/cli/commands/prime/collectEntityOrientation.js +326 -0
  180. package/dist/cli/commands/prime/collectOrientationState.js +126 -63
  181. package/dist/cli/commands/prime/orientationOutput.js +267 -56
  182. package/dist/cli/commands/prime/types.js +0 -1
  183. package/dist/cli/commands/prime/v1Migration.js +0 -1
  184. package/dist/cli/commands/prime.js +76 -11
  185. package/dist/cli/commands/profileGrounding.js +55 -0
  186. package/dist/cli/commands/query.js +74 -52
  187. package/dist/cli/commands/report.js +91 -21
  188. package/dist/cli/commands/route.js +142 -0
  189. package/dist/cli/commands/schema.js +436 -138
  190. package/dist/cli/commands/state/decisions.js +40 -56
  191. package/dist/cli/commands/state/docs.js +58 -85
  192. package/dist/cli/commands/state/experimentRecords.js +151 -0
  193. package/dist/cli/commands/state/experiments.js +11 -65
  194. package/dist/cli/commands/state/get.js +129 -0
  195. package/dist/cli/commands/state/health.js +11 -113
  196. package/dist/cli/commands/state/index.js +6 -41
  197. package/dist/cli/commands/state/list.js +194 -0
  198. package/dist/cli/commands/state/objective.js +21 -65
  199. package/dist/cli/commands/state/plan.js +11 -170
  200. package/dist/cli/commands/state/planTasks.js +154 -0
  201. package/dist/cli/commands/state/plans.js +154 -0
  202. package/dist/cli/commands/state/progress.js +11 -45
  203. package/dist/cli/commands/state/shared.js +0 -1
  204. package/dist/cli/commands/state/todo.js +28 -107
  205. package/dist/cli/commands/state/write.js +433 -0
  206. package/dist/cli/commands/upgrade.js +146 -5
  207. package/dist/cli/commands/upgradeVerify.js +118 -0
  208. package/dist/cli/commands/validate.js +235 -136
  209. package/dist/cli/commands/verify.js +73 -16
  210. package/dist/cli/contracts/bundleStatus.js +0 -1
  211. package/dist/cli/contracts/orientationState.js +0 -1
  212. package/dist/cli/dispatch/argvParser.js +0 -1
  213. package/dist/cli/dispatch/check.js +84 -40
  214. package/dist/cli/dispatch/commands.js +3 -3
  215. package/dist/cli/dispatch/index.js +77 -52
  216. package/dist/cli/dispatch/lifecycle.js +162 -62
  217. package/dist/cli/dispatch/prime.js +37 -2
  218. package/dist/cli/dispatch/projections.js +17 -0
  219. package/dist/cli/dispatch/shared.js +1 -2
  220. package/dist/cli/dispatch/state.js +62 -66
  221. package/dist/cli/dispatch.js +0 -1
  222. package/dist/cli/errors.js +16 -17
  223. package/dist/cli/help.js +404 -39
  224. package/dist/cli/migrationRequired.js +125 -0
  225. package/dist/cli/orientation/attention.js +19 -19
  226. package/dist/cli/orientation/corpusCoverage.js +32 -1
  227. package/dist/cli/orientation.js +346 -129
  228. package/dist/cli/planArtifacts.js +350 -0
  229. package/dist/cli/planEvidence.js +157 -0
  230. package/dist/cli/planLifecycleState.js +36 -0
  231. package/dist/cli/planTaskIndex.js +11 -0
  232. package/dist/cli/preCutoverCommand.js +32 -0
  233. package/dist/cli/prime-blob.js +71 -3
  234. package/dist/cli/profileAcquisition.js +167 -0
  235. package/dist/cli/startupCompletenessContract.js +11 -8
  236. package/dist/cli/stateQuery.js +47 -12
  237. package/dist/cli/structured.js +0 -1
  238. package/dist/cli/todoMarkdown.js +25 -12
  239. package/dist/cli/todoReadinessSelection.js +192 -0
  240. package/dist/cli/todoSeverity.js +0 -1
  241. package/dist/core/atomicWriter.js +23 -0
  242. package/dist/core/developmentChannel.js +1 -0
  243. package/dist/core/developmentInvocation.js +377 -0
  244. package/dist/core/difflib.js +0 -1
  245. package/dist/core/envPaths.js +0 -1
  246. package/dist/core/jsonValue.js +0 -1
  247. package/dist/core/paths.js +0 -1
  248. package/dist/core/pyjson.js +0 -1
  249. package/dist/core/shell.js +4 -0
  250. package/dist/core/skillIdentity.js +23 -0
  251. package/dist/core/sourceRoot.js +9 -12
  252. package/dist/core/text.js +10 -0
  253. package/dist/core/toml.js +0 -1
  254. package/dist/core/yaml.js +61 -2
  255. package/dist/eval/evalSkills.js +13 -14
  256. package/dist/eval/glossaryEvaluation.js +751 -0
  257. package/dist/eval/glossaryEvaluationProcess.js +29 -0
  258. package/dist/eval/glossaryEvaluationRunner.js +571 -0
  259. package/dist/eval/glossaryEvaluationSuccessReport.js +297 -0
  260. package/dist/eval/hybridRouteEvaluation.js +155 -0
  261. package/dist/eval/semanticEval.js +0 -1
  262. package/dist/eval/semanticFixtures.js +0 -1
  263. package/dist/hooks/common.js +3 -56
  264. package/dist/hooks/compaction/apply.js +224 -47
  265. package/dist/hooks/compaction/dryRun.js +2 -1
  266. package/dist/hooks/compaction/index.js +5 -6
  267. package/dist/hooks/compaction/parse.js +73 -6
  268. package/dist/hooks/compaction/retention.js +28 -25
  269. package/dist/hooks/compaction/status.js +145 -26
  270. package/dist/hooks/compaction/types.js +0 -1
  271. package/dist/hooks/validateArtifact/agentFacing.js +0 -1
  272. package/dist/hooks/validateArtifact/index.js +6 -65
  273. package/dist/hooks/validateArtifact/markdown.js +9 -10
  274. package/dist/hooks/validateArtifact/schema.js +96 -9
  275. package/dist/hooks/validateArtifact/traversal.js +12 -11
  276. package/dist/hooks/validateArtifact/violations.js +5 -3
  277. package/dist/migrate/v2HandoffManifest.js +8 -3
  278. package/dist/registries/activationContract.js +2 -0
  279. package/dist/registries/activationTuples.js +136 -0
  280. package/dist/registries/artifactProtocolIds.js +2 -1
  281. package/dist/registries/artifactRegistry.js +207 -60
  282. package/dist/registries/artifactSchemaProjection.js +45 -0
  283. package/dist/registries/capabilityContract.js +5 -21
  284. package/dist/registries/evaluatorHandoffContract.js +0 -1
  285. package/dist/registries/evidenceTierContract.js +375 -0
  286. package/dist/registries/explicitSegmentGrammarContract.js +619 -0
  287. package/dist/registries/glossaryAdviceContract.js +79 -0
  288. package/dist/registries/glossaryCandidateContractPaths.js +6 -0
  289. package/dist/registries/glossaryCandidateContracts.js +820 -0
  290. package/dist/registries/glossaryCandidateDecisionAuthority.js +119 -0
  291. package/dist/registries/glossaryCandidateDecisionContract.js +62 -0
  292. package/dist/registries/glossaryCandidateProjectionAuthority.js +197 -0
  293. package/dist/registries/glossaryCandidateProjectionContract.js +104 -0
  294. package/dist/registries/glossaryCaveatContract.js +67 -0
  295. package/dist/registries/glossaryConsumerContractValidation.js +787 -0
  296. package/dist/registries/glossaryEntryContract.js +759 -0
  297. package/dist/registries/glossaryEntryTemporal.js +12 -0
  298. package/dist/registries/glossaryMiningAuthority.js +764 -0
  299. package/dist/registries/glossaryProfileFullContract.js +24 -0
  300. package/dist/registries/glossaryReviewRecordsAuthority.js +426 -0
  301. package/dist/registries/glossaryReviewRecordsContract.js +129 -0
  302. package/dist/registries/glossaryTermIdentity.js +139 -0
  303. package/dist/registries/glossaryTermOccurrence.js +20 -0
  304. package/dist/registries/hybridRoute.js +274 -0
  305. package/dist/registries/hybridRouteReceipt.js +221 -0
  306. package/dist/registries/packagePublication.js +273 -0
  307. package/dist/registries/packageRegistry.js +184 -209
  308. package/dist/registries/personalGlossaryContracts.js +1 -0
  309. package/dist/registries/todoReadinessContract.js +448 -0
  310. package/dist/registries/triggerLoader.js +7 -44
  311. package/dist/registries/verbosityBudgetContract.js +205 -0
  312. package/dist/release/releaseMetadata.js +167 -10
  313. package/dist/runtime/lifecycleAdapterContract.js +457 -0
  314. package/dist/runtime/lifecycleAdapters.js +777 -0
  315. package/dist/runtime/lifecycleAuthority.js +453 -0
  316. package/dist/runtime/lifecycleOperationContract.js +123 -0
  317. package/dist/runtime/lifecycleOperations.js +634 -0
  318. package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
  319. package/dist/runtime/lifecyclePublication.js +415 -0
  320. package/dist/runtime/lifecycleSnapshot.js +438 -0
  321. package/dist/runtime/nativeResourceCleanup.js +502 -0
  322. package/dist/setup/opencode.js +20 -13
  323. package/dist/setup/opencodeConstants.js +1 -0
  324. package/dist/setup/sharedSkill.js +45 -0
  325. package/dist/setup/smokeChecks.js +14 -75
  326. package/dist/state/archiveDiscovery.js +580 -0
  327. package/dist/state/archivePublication.js +225 -0
  328. package/dist/state/archiveRecovery.js +237 -0
  329. package/dist/state/archiveReplay.js +53 -0
  330. package/dist/state/canonicalMigrationRecord.js +36 -0
  331. package/dist/state/changelog.js +221 -0
  332. package/dist/state/decisionEntities.js +367 -0
  333. package/dist/state/decisionLegacyValidation.js +215 -0
  334. package/dist/state/decisionMigrationProvenance.js +199 -0
  335. package/dist/state/decisionOverlay.js +254 -0
  336. package/dist/state/decisionRevision.js +256 -0
  337. package/dist/state/decisionRevisionMigration.js +89 -0
  338. package/dist/state/directRetrieval.js +323 -0
  339. package/dist/state/durability.js +324 -0
  340. package/dist/state/entityCutover.js +459 -0
  341. package/dist/state/entityCutoverGit.js +127 -0
  342. package/dist/state/entityGlossaryAuthority.js +13 -0
  343. package/dist/state/entityListProjection.js +187 -0
  344. package/dist/state/entityListRuntimeRegistry.js +85 -0
  345. package/dist/state/entityMigrationCausality.js +97 -0
  346. package/dist/state/entityMigrationIdentity.js +5 -0
  347. package/dist/state/entityMigrationPreview.js +840 -0
  348. package/dist/state/entityMigrationTodo.js +133 -0
  349. package/dist/state/entityPublicationContext.js +859 -0
  350. package/dist/state/entityRetrievalHelp.js +506 -0
  351. package/dist/state/entityStorage.js +899 -0
  352. package/dist/state/exactReplacementRecovery.js +18 -0
  353. package/dist/state/experimentArchive.js +63 -0
  354. package/dist/state/experimentIdentity.js +202 -0
  355. package/dist/state/healthEntities.js +262 -0
  356. package/dist/state/healthEntityValidation.js +18 -0
  357. package/dist/state/healthRepair.js +69 -0
  358. package/dist/state/installRoot.js +15 -7
  359. package/dist/state/legacyEntityCutoverEvidence.js +65 -0
  360. package/dist/state/legacyIdentity.js +47 -0
  361. package/dist/state/legacySummaryRecord.js +6 -0
  362. package/dist/state/listAccounting.js +54 -0
  363. package/dist/state/listClassification.js +17 -0
  364. package/dist/state/listCursor.js +42 -0
  365. package/dist/state/listRetrieval.js +781 -0
  366. package/dist/state/migrationSourceBinding.js +30 -0
  367. package/dist/state/objectiveExperimentEntities.js +322 -0
  368. package/dist/state/planEntities.js +1027 -0
  369. package/dist/state/planIdentity.js +47 -0
  370. package/dist/state/planLineageValidation.js +52 -0
  371. package/dist/state/planReplacementTransaction.js +475 -0
  372. package/dist/state/planRetrieval.js +313 -0
  373. package/dist/state/planTaskRetrieval.js +294 -0
  374. package/dist/state/progressEntities.js +512 -0
  375. package/dist/state/progressGlossaryCaveat.js +168 -0
  376. package/dist/state/progressPublicationOrder.js +19 -0
  377. package/dist/state/progressWritePolicy.js +33 -0
  378. package/dist/state/projectRoot.js +62 -0
  379. package/dist/state/projectionPolicy.js +190 -0
  380. package/dist/state/retrievalAuthority.js +156 -0
  381. package/dist/state/safeProjectFile.js +155 -0
  382. package/dist/state/startupAnalysis/benchmark.js +70 -9
  383. package/dist/state/startupAnalysis/contract.js +44 -10
  384. package/dist/state/startupAnalysis/helpers.js +1 -2
  385. package/dist/state/startupAnalysis/index.js +0 -1
  386. package/dist/state/startupAnalysis/metrics.js +0 -1
  387. package/dist/state/startupAnalysis/records.js +0 -1
  388. package/dist/state/startupAnalysis/report.js +0 -1
  389. package/dist/state/startupAnalysis/threshold.js +13 -1
  390. package/dist/state/startupAnalysis.js +0 -1
  391. package/dist/state/startupProjection.js +499 -0
  392. package/dist/state/stateMode.js +222 -0
  393. package/dist/state/stateStorageAuthority.js +47 -0
  394. package/dist/state/summaryEntityRead.js +25 -0
  395. package/dist/state/summaryMigrationProvenance.js +66 -0
  396. package/dist/state/summarySourceRowAuthority.js +36 -0
  397. package/dist/state/todoActivationSafety.js +58 -0
  398. package/dist/state/todoDocsEntities.js +1124 -0
  399. package/dist/state/todoDocsEntityValidation.js +158 -0
  400. package/dist/state/todoMarkdownProjection.js +51 -0
  401. package/dist/state/todoReconciliationActivation.js +182 -0
  402. package/dist/state/todoReconciliationInspection.js +171 -0
  403. package/dist/state/todoReconciliationRepair.js +318 -0
  404. package/dist/state/todoReconciliationTransaction.js +595 -0
  405. package/dist/state/write/assign.js +20 -0
  406. package/dist/state/write/candidateMutation.js +269 -0
  407. package/dist/state/write/errors.js +11 -0
  408. package/dist/state/write/experimentPublication.js +192 -0
  409. package/dist/state/write/explain.js +377 -0
  410. package/dist/state/write/fields.js +61 -0
  411. package/dist/state/write/glossaryPublication.js +263 -0
  412. package/dist/state/write/grammar.js +285 -0
  413. package/dist/state/write/helpers.js +29 -0
  414. package/dist/state/write/index.js +12 -0
  415. package/dist/state/write/input.js +391 -0
  416. package/dist/state/write/lock.js +837 -0
  417. package/dist/state/write/mutation.js +234 -0
  418. package/dist/state/write/operations.js +170 -0
  419. package/dist/state/write/planEvaluation.js +128 -0
  420. package/dist/state/write/planPublication.js +179 -0
  421. package/dist/state/write/runtimeOperations.js +146 -0
  422. package/dist/state/write/serialize.js +1 -0
  423. package/dist/state/write/transaction.js +57 -0
  424. package/dist/state/write/validate.js +7 -0
  425. package/dist/upgrade/appContentRefresh.js +77 -36
  426. package/dist/upgrade/appModel.js +0 -1
  427. package/dist/upgrade/atomicWriter.js +1 -0
  428. package/dist/upgrade/bundleEvidence.js +0 -1
  429. package/dist/upgrade/channels.js +6 -9
  430. package/dist/upgrade/compatibility.js +43 -17
  431. package/dist/upgrade/doctor.js +55 -32
  432. package/dist/upgrade/doctorClassifier.js +11 -1
  433. package/dist/upgrade/installedHooksRetirement.js +46 -40
  434. package/dist/upgrade/legacyAgentCleanup.js +187 -21
  435. package/dist/upgrade/lifecycleUpgrade.js +113 -0
  436. package/dist/upgrade/migrateArtifactsV2ToV3.js +334 -64
  437. package/dist/upgrade/migrationPublication.js +122 -0
  438. package/dist/upgrade/nextMajorDoctor.js +0 -1
  439. package/dist/upgrade/npxPlatformStatus.js +2 -2
  440. package/dist/upgrade/projectIntegration.js +128 -160
  441. package/dist/upgrade/projectIntegrationDecision.js +42 -85
  442. package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
  443. package/dist/upgrade/runtimeMigration.js +262 -453
  444. package/dist/upgrade/upgradeCommands.js +14 -1
  445. package/dist/upgrade/upgradeLock.js +85 -0
  446. package/dist/upgrade/upgradeOrchestrator.js +263 -59
  447. package/dist/upgrade/v3CapabilitySurface.js +2 -3
  448. package/dist/upgrade/versionResolution.js +0 -1
  449. package/dist/validate/activationArtifactEvidence.js +866 -0
  450. package/dist/validate/activationArtifactEvidenceTypes.js +12 -0
  451. package/dist/validate/activationConjunction.js +816 -0
  452. package/dist/validate/activationEvidenceManifest.js +610 -0
  453. package/dist/validate/activationPackageSemantics.js +29 -0
  454. package/dist/validate/appHomeContract.js +1 -7
  455. package/dist/validate/bootstrapAuthority.js +44 -0
  456. package/dist/validate/capability.js +11 -3
  457. package/dist/validate/crossCapability.js +14 -9
  458. package/dist/validate/retainedReferenceAuthority.js +879 -0
  459. package/dist/validate/selfAudit.js +39 -45
  460. package/dist/validate/v1LegacyCruft.js +131 -0
  461. package/dist/validate/vocabularyAuthority.js +8 -8
  462. package/package.json +39 -13
  463. package/bundle/references/adapters/cursor.md +0 -214
  464. package/bundle/references/adapters/opencode.md +0 -530
  465. package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
  466. package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
  467. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
  468. package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -554
  469. package/bundle/references/adapters/runtime-feature-parity.md +0 -189
  470. package/bundle/references/analysis/benchmark.md +0 -267
  471. package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
  472. package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
  473. package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -369
  474. package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -250
  475. package/bundle/references/cli/capability-tool-classification.yaml +0 -53
  476. package/bundle/references/cli/coexistence-probe.yaml +0 -13
  477. package/bundle/references/cli/parity-expected-actual-template.md +0 -30
  478. package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
  479. package/bundle/references/cli/single-name-protocol.yaml +0 -42
  480. package/bundle/references/cli/upgrade-repair-wording.md +0 -45
  481. package/bundle/references/cli/v3-handoff-manifest.schema.yaml +0 -98
  482. package/bundle/references/meta/documentation-inventory.md +0 -49
  483. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  484. package/bundle/skills/agentera/agents/audit.toml +0 -6
  485. package/bundle/skills/agentera/agents/build.toml +0 -6
  486. package/bundle/skills/agentera/agents/design.toml +0 -6
  487. package/bundle/skills/agentera/agents/discuss.toml +0 -6
  488. package/bundle/skills/agentera/agents/document.toml +0 -6
  489. package/bundle/skills/agentera/agents/optimize.toml +0 -6
  490. package/bundle/skills/agentera/agents/orchestrate.toml +0 -6
  491. package/bundle/skills/agentera/agents/plan.toml +0 -6
  492. package/bundle/skills/agentera/agents/profile.toml +0 -6
  493. package/bundle/skills/agentera/agents/research.toml +0 -6
  494. package/bundle/skills/agentera/agents/status.toml +0 -6
  495. package/bundle/skills/agentera/agents/vision.toml +0 -6
  496. package/bundle/skills/agentera/references/contract.md +0 -1048
  497. package/dist/analytics/extractCorpus/cli.js.map +0 -1
  498. package/dist/analytics/extractCorpus/copilotSessions.js.map +0 -1
  499. package/dist/analytics/extractCorpus/core.js.map +0 -1
  500. package/dist/analytics/extractCorpus/corpus.js.map +0 -1
  501. package/dist/analytics/extractCorpus/coverageAudit.js.map +0 -1
  502. package/dist/analytics/extractCorpus/cursorSessions.js.map +0 -1
  503. package/dist/analytics/extractCorpus/extractCorpusParity.js.map +0 -1
  504. package/dist/analytics/extractCorpus/filesystemSources.js.map +0 -1
  505. package/dist/analytics/extractCorpus/index.js.map +0 -1
  506. package/dist/analytics/extractCorpus/jsonlSessions.js.map +0 -1
  507. package/dist/analytics/extractCorpus/sqliteCaps.js.map +0 -1
  508. package/dist/analytics/extractCorpus/sqliteSessions.js.map +0 -1
  509. package/dist/analytics/extractCorpus.js.map +0 -1
  510. package/dist/analytics/usageStats.js.map +0 -1
  511. package/dist/bin/agentera.js.map +0 -1
  512. package/dist/capabilities/audit/instructions.js.map +0 -1
  513. package/dist/capabilities/build/instructions.js.map +0 -1
  514. package/dist/capabilities/design/instructions.js.map +0 -1
  515. package/dist/capabilities/discuss/instructions.js.map +0 -1
  516. package/dist/capabilities/document/instructions.js.map +0 -1
  517. package/dist/capabilities/dokumentera/instructions.js +0 -6
  518. package/dist/capabilities/dokumentera/instructions.js.map +0 -1
  519. package/dist/capabilities/hej/instructions.js +0 -6
  520. package/dist/capabilities/hej/instructions.js.map +0 -1
  521. package/dist/capabilities/index.js.map +0 -1
  522. package/dist/capabilities/inspektera/instructions.js +0 -6
  523. package/dist/capabilities/inspektera/instructions.js.map +0 -1
  524. package/dist/capabilities/inspirera/instructions.js +0 -6
  525. package/dist/capabilities/inspirera/instructions.js.map +0 -1
  526. package/dist/capabilities/optimera/instructions.js +0 -6
  527. package/dist/capabilities/optimera/instructions.js.map +0 -1
  528. package/dist/capabilities/optimize/instructions.js.map +0 -1
  529. package/dist/capabilities/orchestrate/instructions.js.map +0 -1
  530. package/dist/capabilities/orkestrera/instructions.js +0 -6
  531. package/dist/capabilities/orkestrera/instructions.js.map +0 -1
  532. package/dist/capabilities/plan/instructions.js.map +0 -1
  533. package/dist/capabilities/planera/instructions.js +0 -6
  534. package/dist/capabilities/planera/instructions.js.map +0 -1
  535. package/dist/capabilities/profile/instructions.js.map +0 -1
  536. package/dist/capabilities/profilera/instructions.js +0 -6
  537. package/dist/capabilities/profilera/instructions.js.map +0 -1
  538. package/dist/capabilities/realisera/instructions.js +0 -6
  539. package/dist/capabilities/realisera/instructions.js.map +0 -1
  540. package/dist/capabilities/research/instructions.js.map +0 -1
  541. package/dist/capabilities/resonera/instructions.js +0 -6
  542. package/dist/capabilities/resonera/instructions.js.map +0 -1
  543. package/dist/capabilities/status/instructions.js.map +0 -1
  544. package/dist/capabilities/vision/instructions.js.map +0 -1
  545. package/dist/capabilities/visionera/instructions.js +0 -6
  546. package/dist/capabilities/visionera/instructions.js.map +0 -1
  547. package/dist/capabilities/visualisera/instructions.js +0 -5
  548. package/dist/capabilities/visualisera/instructions.js.map +0 -1
  549. package/dist/cli/appContext.js.map +0 -1
  550. package/dist/cli/argvalidate.js.map +0 -1
  551. package/dist/cli/capabilityContext/benchmark.js.map +0 -1
  552. package/dist/cli/capabilityContext/bespoke.js.map +0 -1
  553. package/dist/cli/capabilityContext/build.js.map +0 -1
  554. package/dist/cli/capabilityContext/closeout.js.map +0 -1
  555. package/dist/cli/capabilityContext/contract.js.map +0 -1
  556. package/dist/cli/capabilityContext/evidence.js.map +0 -1
  557. package/dist/cli/capabilityContext/index.js.map +0 -1
  558. package/dist/cli/capabilityContext/orchestration.js.map +0 -1
  559. package/dist/cli/capabilityContext/planState.js.map +0 -1
  560. package/dist/cli/capabilityContext/progress.js.map +0 -1
  561. package/dist/cli/capabilityContext/realisera.js +0 -174
  562. package/dist/cli/capabilityContext/realisera.js.map +0 -1
  563. package/dist/cli/capabilityContext/shared.js.map +0 -1
  564. package/dist/cli/capabilityContext/slim.js.map +0 -1
  565. package/dist/cli/capabilityContext/startup.js.map +0 -1
  566. package/dist/cli/capabilityContext/types.js.map +0 -1
  567. package/dist/cli/capabilityContext.js.map +0 -1
  568. package/dist/cli/commands/appHome.js.map +0 -1
  569. package/dist/cli/commands/backfill.js +0 -84
  570. package/dist/cli/commands/backfill.js.map +0 -1
  571. package/dist/cli/commands/capability.js.map +0 -1
  572. package/dist/cli/commands/compact.js.map +0 -1
  573. package/dist/cli/commands/doctor.js.map +0 -1
  574. package/dist/cli/commands/lint.js.map +0 -1
  575. package/dist/cli/commands/prime/bundleStatus.js.map +0 -1
  576. package/dist/cli/commands/prime/collectOrientationState.js.map +0 -1
  577. package/dist/cli/commands/prime/orientationOutput.js.map +0 -1
  578. package/dist/cli/commands/prime/routeOutput.js +0 -50
  579. package/dist/cli/commands/prime/routeOutput.js.map +0 -1
  580. package/dist/cli/commands/prime/types.js.map +0 -1
  581. package/dist/cli/commands/prime/v1Migration.js.map +0 -1
  582. package/dist/cli/commands/prime.js.map +0 -1
  583. package/dist/cli/commands/query.js.map +0 -1
  584. package/dist/cli/commands/report.js.map +0 -1
  585. package/dist/cli/commands/schema.js.map +0 -1
  586. package/dist/cli/commands/state/decisions.js.map +0 -1
  587. package/dist/cli/commands/state/docs.js.map +0 -1
  588. package/dist/cli/commands/state/experiments.js.map +0 -1
  589. package/dist/cli/commands/state/health.js.map +0 -1
  590. package/dist/cli/commands/state/index.js.map +0 -1
  591. package/dist/cli/commands/state/objective.js.map +0 -1
  592. package/dist/cli/commands/state/plan.js.map +0 -1
  593. package/dist/cli/commands/state/progress.js.map +0 -1
  594. package/dist/cli/commands/state/shared.js.map +0 -1
  595. package/dist/cli/commands/state/todo.js.map +0 -1
  596. package/dist/cli/commands/state.js +0 -1023
  597. package/dist/cli/commands/state.js.map +0 -1
  598. package/dist/cli/commands/upgrade.js.map +0 -1
  599. package/dist/cli/commands/validate.js.map +0 -1
  600. package/dist/cli/commands/verify.js.map +0 -1
  601. package/dist/cli/contracts/bundleStatus.js.map +0 -1
  602. package/dist/cli/contracts/orientationState.js.map +0 -1
  603. package/dist/cli/dispatch/argvParser.js.map +0 -1
  604. package/dist/cli/dispatch/check.js.map +0 -1
  605. package/dist/cli/dispatch/commands.js.map +0 -1
  606. package/dist/cli/dispatch/index.js.map +0 -1
  607. package/dist/cli/dispatch/lifecycle.js.map +0 -1
  608. package/dist/cli/dispatch/prime.js.map +0 -1
  609. package/dist/cli/dispatch/shared.js.map +0 -1
  610. package/dist/cli/dispatch/state.js.map +0 -1
  611. package/dist/cli/dispatch.js.map +0 -1
  612. package/dist/cli/errors.js.map +0 -1
  613. package/dist/cli/help.js.map +0 -1
  614. package/dist/cli/orientation/attention.js.map +0 -1
  615. package/dist/cli/orientation/corpusCoverage.js.map +0 -1
  616. package/dist/cli/orientation.js.map +0 -1
  617. package/dist/cli/prime-blob.js.map +0 -1
  618. package/dist/cli/startupCompletenessContract.js.map +0 -1
  619. package/dist/cli/stateQuery.js.map +0 -1
  620. package/dist/cli/structured.js.map +0 -1
  621. package/dist/cli/todoMarkdown.js.map +0 -1
  622. package/dist/cli/todoSeverity.js.map +0 -1
  623. package/dist/core/difflib.js.map +0 -1
  624. package/dist/core/envPaths.js.map +0 -1
  625. package/dist/core/git.js +0 -43
  626. package/dist/core/git.js.map +0 -1
  627. package/dist/core/jsonValue.js.map +0 -1
  628. package/dist/core/paths.js.map +0 -1
  629. package/dist/core/pyjson.js.map +0 -1
  630. package/dist/core/sourceRoot.js.map +0 -1
  631. package/dist/core/toml.js.map +0 -1
  632. package/dist/core/yaml.js.map +0 -1
  633. package/dist/eval/evalSkills.js.map +0 -1
  634. package/dist/eval/semanticEval.js.map +0 -1
  635. package/dist/eval/semanticFixtures.js.map +0 -1
  636. package/dist/hooks/common.js.map +0 -1
  637. package/dist/hooks/compaction/apply.js.map +0 -1
  638. package/dist/hooks/compaction/dryRun.js.map +0 -1
  639. package/dist/hooks/compaction/index.js.map +0 -1
  640. package/dist/hooks/compaction/parse.js.map +0 -1
  641. package/dist/hooks/compaction/retention.js.map +0 -1
  642. package/dist/hooks/compaction/status.js.map +0 -1
  643. package/dist/hooks/compaction/todoResolved.js +0 -137
  644. package/dist/hooks/compaction/todoResolved.js.map +0 -1
  645. package/dist/hooks/compaction/types.js.map +0 -1
  646. package/dist/hooks/compaction.js +0 -935
  647. package/dist/hooks/compaction.js.map +0 -1
  648. package/dist/hooks/cursorPreToolUse.js +0 -19
  649. package/dist/hooks/cursorPreToolUse.js.map +0 -1
  650. package/dist/hooks/cursorSessionStart.js +0 -79
  651. package/dist/hooks/cursorSessionStart.js.map +0 -1
  652. package/dist/hooks/sessionStart.js +0 -216
  653. package/dist/hooks/sessionStart.js.map +0 -1
  654. package/dist/hooks/sessionStop.js +0 -206
  655. package/dist/hooks/sessionStop.js.map +0 -1
  656. package/dist/hooks/todoLayout.js +0 -177
  657. package/dist/hooks/todoLayout.js.map +0 -1
  658. package/dist/hooks/validateArtifact/agentFacing.js.map +0 -1
  659. package/dist/hooks/validateArtifact/index.js.map +0 -1
  660. package/dist/hooks/validateArtifact/markdown.js.map +0 -1
  661. package/dist/hooks/validateArtifact/runtime.js +0 -86
  662. package/dist/hooks/validateArtifact/runtime.js.map +0 -1
  663. package/dist/hooks/validateArtifact/schema.js.map +0 -1
  664. package/dist/hooks/validateArtifact/traversal.js.map +0 -1
  665. package/dist/hooks/validateArtifact/violations.js.map +0 -1
  666. package/dist/hooks/validateArtifact.js +0 -924
  667. package/dist/hooks/validateArtifact.js.map +0 -1
  668. package/dist/migrate/v2HandoffManifest.js.map +0 -1
  669. package/dist/registries/artifactProtocolIds.js.map +0 -1
  670. package/dist/registries/artifactRegistry.js.map +0 -1
  671. package/dist/registries/capabilityContract.js.map +0 -1
  672. package/dist/registries/evaluatorHandoffContract.js.map +0 -1
  673. package/dist/registries/packageRegistry.js.map +0 -1
  674. package/dist/registries/runtimeAdapterRegistry.js +0 -316
  675. package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
  676. package/dist/registries/triggerLoader.js.map +0 -1
  677. package/dist/release/releaseMetadata.js.map +0 -1
  678. package/dist/routing/index.js +0 -2
  679. package/dist/routing/index.js.map +0 -1
  680. package/dist/routing/routeEngine.js +0 -189
  681. package/dist/routing/routeEngine.js.map +0 -1
  682. package/dist/setup/codex/agents.js +0 -96
  683. package/dist/setup/codex/agents.js.map +0 -1
  684. package/dist/setup/codex/cli.js +0 -161
  685. package/dist/setup/codex/cli.js.map +0 -1
  686. package/dist/setup/codex/configToml.js +0 -639
  687. package/dist/setup/codex/configToml.js.map +0 -1
  688. package/dist/setup/codex/constants.js +0 -29
  689. package/dist/setup/codex/constants.js.map +0 -1
  690. package/dist/setup/codex/installRoot.js +0 -64
  691. package/dist/setup/codex/installRoot.js.map +0 -1
  692. package/dist/setup/codex/state.js +0 -270
  693. package/dist/setup/codex/state.js.map +0 -1
  694. package/dist/setup/codex.js +0 -12
  695. package/dist/setup/codex.js.map +0 -1
  696. package/dist/setup/copilot.js +0 -227
  697. package/dist/setup/copilot.js.map +0 -1
  698. package/dist/setup/cursor.js +0 -129
  699. package/dist/setup/cursor.js.map +0 -1
  700. package/dist/setup/cursorSurfaces.js +0 -67
  701. package/dist/setup/cursorSurfaces.js.map +0 -1
  702. package/dist/setup/doctor/core.js +0 -300
  703. package/dist/setup/doctor/core.js.map +0 -1
  704. package/dist/setup/doctor/diagnostics.js +0 -240
  705. package/dist/setup/doctor/diagnostics.js.map +0 -1
  706. package/dist/setup/doctor/opencode.js +0 -313
  707. package/dist/setup/doctor/opencode.js.map +0 -1
  708. package/dist/setup/doctor/report.js +0 -425
  709. package/dist/setup/doctor/report.js.map +0 -1
  710. package/dist/setup/doctor.js +0 -10
  711. package/dist/setup/doctor.js.map +0 -1
  712. package/dist/setup/opencode.js.map +0 -1
  713. package/dist/setup/smokeChecks.js.map +0 -1
  714. package/dist/state/installRoot.js.map +0 -1
  715. package/dist/state/progressCommit.js +0 -289
  716. package/dist/state/progressCommit.js.map +0 -1
  717. package/dist/state/startupAnalysis/benchmark.js.map +0 -1
  718. package/dist/state/startupAnalysis/contract.js.map +0 -1
  719. package/dist/state/startupAnalysis/helpers.js.map +0 -1
  720. package/dist/state/startupAnalysis/index.js.map +0 -1
  721. package/dist/state/startupAnalysis/metrics.js.map +0 -1
  722. package/dist/state/startupAnalysis/records.js.map +0 -1
  723. package/dist/state/startupAnalysis/report.js.map +0 -1
  724. package/dist/state/startupAnalysis/threshold.js.map +0 -1
  725. package/dist/state/startupAnalysis.js.map +0 -1
  726. package/dist/upgrade/appContentRefresh.js.map +0 -1
  727. package/dist/upgrade/appModel.js.map +0 -1
  728. package/dist/upgrade/bundleEvidence.js.map +0 -1
  729. package/dist/upgrade/channels.js.map +0 -1
  730. package/dist/upgrade/cliProbe.js +0 -22
  731. package/dist/upgrade/cliProbe.js.map +0 -1
  732. package/dist/upgrade/coexistenceProbe.js +0 -107
  733. package/dist/upgrade/coexistenceProbe.js.map +0 -1
  734. package/dist/upgrade/compatibility.js.map +0 -1
  735. package/dist/upgrade/doctor.js.map +0 -1
  736. package/dist/upgrade/doctorClassifier.js.map +0 -1
  737. package/dist/upgrade/installedHooksRetirement.js.map +0 -1
  738. package/dist/upgrade/legacyAgentCleanup.js.map +0 -1
  739. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -570
  740. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
  741. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
  742. package/dist/upgrade/nextMajorDoctor.js.map +0 -1
  743. package/dist/upgrade/npxPlatformStatus.js.map +0 -1
  744. package/dist/upgrade/projectIntegration.js.map +0 -1
  745. package/dist/upgrade/projectIntegrationDecision.js.map +0 -1
  746. package/dist/upgrade/runtimeMigration.js.map +0 -1
  747. package/dist/upgrade/upgradeCommands.js.map +0 -1
  748. package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
  749. package/dist/upgrade/v3CapabilitySurface.js.map +0 -1
  750. package/dist/upgrade/versionResolution.js.map +0 -1
  751. package/dist/validate/appHomeContract.js.map +0 -1
  752. package/dist/validate/capability.js.map +0 -1
  753. package/dist/validate/crossCapability.js.map +0 -1
  754. package/dist/validate/lifecycleAdapters/legacyPythonParity.js +0 -93
  755. package/dist/validate/lifecycleAdapters/legacyPythonParity.js.map +0 -1
  756. package/dist/validate/lifecycleAdapters/nodeFormChecks.js +0 -488
  757. package/dist/validate/lifecycleAdapters/nodeFormChecks.js.map +0 -1
  758. package/dist/validate/lifecycleAdapters/shared.js +0 -198
  759. package/dist/validate/lifecycleAdapters/shared.js.map +0 -1
  760. package/dist/validate/lifecycleAdapters.js +0 -62
  761. package/dist/validate/lifecycleAdapters.js.map +0 -1
  762. package/dist/validate/selfAudit.js.map +0 -1
  763. package/dist/validate/vocabularyAuthority.js.map +0 -1
@@ -0,0 +1,168 @@
1
+ import { glossaryCaveatPairAllowed, glossaryCaveatContract, } from "../registries/glossaryCaveatContract.js";
2
+ function mapping(value) {
3
+ return value !== null && typeof value === "object" && !Array.isArray(value);
4
+ }
5
+ function boundedString(value, contract) {
6
+ return (typeof value === "string" &&
7
+ value.length > 0 &&
8
+ Buffer.byteLength(value, "utf8") <= contract.maxStringUtf8Bytes);
9
+ }
10
+ function isProjectionSource(entity, contract) {
11
+ return entity.artifact === contract.primeSourceArtifact && entity.boundary === contract.primeSourceBoundary;
12
+ }
13
+ export function validateProgressGlossaryCaveat(record, contract = glossaryCaveatContract()) {
14
+ if (!Object.prototype.hasOwnProperty.call(record, "glossary_caveat")) {
15
+ return { status: "absent", caveat: null, violations: [] };
16
+ }
17
+ const value = record.glossary_caveat;
18
+ const violations = [];
19
+ if (!mapping(value)) {
20
+ return {
21
+ status: "invalid",
22
+ caveat: null,
23
+ violations: ["glossary_caveat must be one privacy-safe mapping"],
24
+ };
25
+ }
26
+ const keys = Object.keys(value);
27
+ if (keys.length !== contract.fields.length ||
28
+ keys.some((field) => !contract.fields.includes(field))) {
29
+ violations.push("glossary_caveat must contain exactly the authority-declared fields");
30
+ }
31
+ if (contract.fields.some((field) => !(field in value))) {
32
+ violations.push("glossary_caveat requires every authority-declared field");
33
+ }
34
+ for (const field of ["caveat_id", "event", "capability", "reason", "ownership_state"])
35
+ if (!boundedString(value[field], contract))
36
+ violations.push("glossary_caveat string fields must be non-empty and bounded");
37
+ if (!contract.idPattern.test(typeof value.caveat_id === "string" ? value.caveat_id : ""))
38
+ violations.push("glossary_caveat caveat_id must be one opaque ID");
39
+ if (!contract.events.includes(typeof value.event === "string" ? value.event : ""))
40
+ violations.push("glossary_caveat event is outside the bounded vocabulary");
41
+ if (!contract.capabilities.includes(typeof value.capability === "string" ? value.capability : ""))
42
+ violations.push("glossary_caveat capability is outside the bounded vocabulary");
43
+ if (value.capability !== contract.primeSourceCapability)
44
+ violations.push("glossary_caveat capability does not own prime projection evidence");
45
+ if (!contract.reasons.includes(typeof value.reason === "string" ? value.reason : ""))
46
+ violations.push("glossary_caveat reason is outside the bounded vocabulary");
47
+ if (!contract.ownershipStates.includes(typeof value.ownership_state === "string" ? value.ownership_state : ""))
48
+ violations.push("glossary_caveat ownership_state is outside the bounded vocabulary");
49
+ if (typeof value.reason === "string" &&
50
+ typeof value.ownership_state === "string" &&
51
+ !glossaryCaveatPairAllowed(contract, value.reason, value.ownership_state))
52
+ violations.push("glossary_caveat reason and ownership_state pair is not allowed");
53
+ const transition = value.transition_id;
54
+ if (!(transition === null || boundedString(transition, contract)))
55
+ violations.push("glossary_caveat transition_id must be null or one bounded opaque ID");
56
+ if (typeof transition === "string" && !contract.idPattern.test(transition))
57
+ violations.push("glossary_caveat transition_id must be one opaque ID");
58
+ if ((value.event === "current" || value.event === "resolved") && transition !== null)
59
+ violations.push("current and resolved glossary_caveat events require null transition_id");
60
+ if (value.event === "superseded" &&
61
+ (typeof transition !== "string" || transition === value.caveat_id))
62
+ violations.push("superseded glossary_caveat requires one different successor ID");
63
+ if (violations.length)
64
+ return { status: "invalid", caveat: null, violations: [...new Set(violations)] };
65
+ return { status: "valid", caveat: value, violations: [] };
66
+ }
67
+ export function glossaryCaveatLifecycleInvalidEntities(entities, contract = glossaryCaveatContract()) {
68
+ const rows = entities.flatMap((entity) => {
69
+ if (entity.classification !== "valid" || !entity.record)
70
+ return [];
71
+ const result = validateProgressGlossaryCaveat(entity.record, contract);
72
+ return result.status === "valid" ? [{ entity, caveat: result.caveat }] : [];
73
+ });
74
+ const invalid = new Set();
75
+ const byId = new Map();
76
+ for (const row of rows)
77
+ byId.set(row.caveat.caveat_id, [...(byId.get(row.caveat.caveat_id) ?? []), row]);
78
+ const transitions = new Map();
79
+ for (const [id, matches] of byId) {
80
+ const current = matches.filter(({ caveat }) => caveat.event === "current");
81
+ const terminal = matches.filter(({ caveat }) => caveat.event !== "current");
82
+ if (current.length !== 1) {
83
+ matches.forEach(({ entity }) => invalid.add(entity));
84
+ continue;
85
+ }
86
+ if (terminal.length > 1) {
87
+ terminal.forEach(({ entity }) => invalid.add(entity));
88
+ continue;
89
+ }
90
+ if (terminal.length && current.length === 1) {
91
+ const base = current[0].caveat;
92
+ for (const row of terminal) {
93
+ if (row.caveat.capability !== base.capability ||
94
+ row.caveat.reason !== base.reason ||
95
+ row.caveat.ownership_state !== base.ownership_state) {
96
+ invalid.add(row.entity);
97
+ continue;
98
+ }
99
+ if (row.caveat.event === "superseded") {
100
+ const target = byId.get(row.caveat.transition_id) ?? [];
101
+ if (target.filter(({ caveat }) => caveat.event === "current").length !== 1) {
102
+ invalid.add(row.entity);
103
+ }
104
+ else
105
+ transitions.set(id, { target: row.caveat.transition_id, entity: row.entity });
106
+ }
107
+ }
108
+ }
109
+ }
110
+ for (const start of transitions.keys()) {
111
+ const seen = new Set();
112
+ let cursor = start;
113
+ while (cursor && !seen.has(cursor)) {
114
+ seen.add(cursor);
115
+ cursor = transitions.get(cursor)?.target;
116
+ }
117
+ if (cursor)
118
+ for (const id of seen) {
119
+ const transition = transitions.get(id);
120
+ if (transition)
121
+ invalid.add(transition.entity);
122
+ }
123
+ }
124
+ return invalid;
125
+ }
126
+ /** Project only validated lifecycle state; opaque identities never leave this module. */
127
+ export function projectCurrentGlossaryCaveats(entities, contract = glossaryCaveatContract()) {
128
+ const byId = new Map();
129
+ for (const entity of entities) {
130
+ if (entity.classification !== "valid" ||
131
+ !entity.record ||
132
+ !isProjectionSource(entity, contract))
133
+ continue;
134
+ const result = validateProgressGlossaryCaveat(entity.record, contract);
135
+ if (result.status !== "valid")
136
+ continue;
137
+ byId.set(result.caveat.caveat_id, [
138
+ ...(byId.get(result.caveat.caveat_id) ?? []),
139
+ result.caveat,
140
+ ]);
141
+ }
142
+ let currentCount = 0;
143
+ for (const events of byId.values()) {
144
+ if (events.some(({ event }) => event === "current") &&
145
+ !events.some(({ event }) => event !== "current"))
146
+ currentCount += 1;
147
+ }
148
+ return {
149
+ currentCount,
150
+ attention: currentCount > 0 && contract.primeAttentionText ? contract.primeAttentionText : null,
151
+ publicAttentionLimit: contract.primePublicAttentionLimit,
152
+ reservedGlossarySlots: contract.primeReservedGlossarySlots,
153
+ };
154
+ }
155
+ export function applyGlossaryCaveatLifecycleValidation(projectRoot, entities, issues, contract) {
156
+ for (const entity of glossaryCaveatLifecycleInvalidEntities(entities.filter((candidate) => isProjectionSource(candidate, contract)), contract)) {
157
+ entity.classification = "malformed";
158
+ issues.push({
159
+ code: "malformed_entity",
160
+ path: entity.relativePath,
161
+ id: entity.id ?? undefined,
162
+ artifact: entity.artifact ?? undefined,
163
+ boundary: entity.boundary ?? undefined,
164
+ message: `entity '${entity.relativePath}' has an invalid glossary caveat lifecycle relation`,
165
+ recovery: `repair '${entity.relativePath}' using the Build-owned progress glossary caveat lifecycle; rerun agentera check validate state --cwd ${JSON.stringify(projectRoot)}`,
166
+ });
167
+ }
168
+ }
@@ -0,0 +1,19 @@
1
+ export const PROGRESS_PUBLICATION_ORDER_FIELD = "publication_order";
2
+ export function progressPublicationOrder(record) {
3
+ const value = record?.[PROGRESS_PUBLICATION_ORDER_FIELD];
4
+ return Number.isSafeInteger(value) && Number(value) > 0 ? Number(value) : null;
5
+ }
6
+ export function progressPublicationOrderViolations(record) {
7
+ if (!(PROGRESS_PUBLICATION_ORDER_FIELD in record))
8
+ return [];
9
+ return progressPublicationOrder(record) === null
10
+ ? ["publication_order must be a positive safe integer when present"]
11
+ : [];
12
+ }
13
+ export function nextProgressPublicationOrder(records) {
14
+ const maximum = records.reduce((current, record) => Math.max(current, progressPublicationOrder(record) ?? 0), 0);
15
+ if (maximum >= Number.MAX_SAFE_INTEGER) {
16
+ throw new Error("progress publication order is exhausted; preserve state and request repair before retrying");
17
+ }
18
+ return maximum + 1;
19
+ }
@@ -0,0 +1,33 @@
1
+ const APPEND_GUIDANCE = "Append progress only for durable project truth that future work needs, a required glossary_caveat lifecycle event, or a plan-completion sweep. Glossary caveats and plan-completion sweeps require a record; an ordinary build or release attempt with no durable project truth change, and an outcome future work does not need as a milestone, require no progress append.";
2
+ const RECEIPT_GUIDANCE = "Qualification and publication receipts own timings, integrity, digests, retries, and replay; do not duplicate receipt detail in progress.";
3
+ const PROGRESS_WRITE_POLICY = {
4
+ schemaVersion: "agentera.progressWritePolicy.v1",
5
+ append: {
6
+ mode: "conditional",
7
+ allowed_when: [
8
+ "durable_project_truth_needed_by_future_work",
9
+ "required_glossary_caveat",
10
+ "plan_completion_sweep",
11
+ ],
12
+ required_when: [
13
+ "required_glossary_caveat",
14
+ "plan_completion_sweep",
15
+ ],
16
+ no_append_required_when: [
17
+ "ordinary_build_or_release_attempt_without_durable_project_truth_change",
18
+ "durable_outcome_not_needed_by_future_work",
19
+ ],
20
+ guidance: APPEND_GUIDANCE,
21
+ },
22
+ receipt_detail: {
23
+ owners: ["qualification_receipt", "publication_receipt"],
24
+ fields: ["timings", "integrity", "digests", "retries", "replay"],
25
+ guidance: RECEIPT_GUIDANCE,
26
+ },
27
+ };
28
+ export function progressWritePolicy() {
29
+ return structuredClone(PROGRESS_WRITE_POLICY);
30
+ }
31
+ export function progressWriteGuidance() {
32
+ return [APPEND_GUIDANCE, RECEIPT_GUIDANCE];
33
+ }
@@ -0,0 +1,62 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ function directoryPrefixes(absolute) {
4
+ const parsed = path.parse(absolute);
5
+ const segments = absolute.slice(parsed.root.length).split(path.sep).filter(Boolean);
6
+ return [parsed.root, ...segments.map((_, index) => path.join(parsed.root, ...segments.slice(0, index + 1)))];
7
+ }
8
+ export function assertValidatedProjectRoot(root) {
9
+ const stable = root.identities.every((identity) => {
10
+ try {
11
+ const current = fs.lstatSync(identity.absolute, { bigint: true });
12
+ return identity.type === "directory"
13
+ && current.isDirectory()
14
+ && !current.isSymbolicLink()
15
+ && current.dev === identity.dev
16
+ && current.ino === identity.ino;
17
+ }
18
+ catch {
19
+ return false;
20
+ }
21
+ });
22
+ if (!stable) {
23
+ throw new Error(`project root '${root.path}' changed after validation; restore the exact real directory and retry`);
24
+ }
25
+ }
26
+ export function validateRealProjectRoot(projectRoot) {
27
+ const root = path.resolve(projectRoot);
28
+ let stat;
29
+ try {
30
+ stat = fs.lstatSync(root, { bigint: true });
31
+ }
32
+ catch {
33
+ throw new Error(`project root '${root}' does not exist; choose an existing, real directory and retry`);
34
+ }
35
+ if (stat.isSymbolicLink()) {
36
+ throw new Error(`project root '${root}' is a symbolic link; choose an existing, real directory and retry`);
37
+ }
38
+ if (!stat.isDirectory()) {
39
+ throw new Error(`project root '${root}' is not a directory; choose an existing, real directory and retry`);
40
+ }
41
+ try {
42
+ if (fs.realpathSync(root) !== root) {
43
+ throw new Error(`project root '${root}' traverses a symbolic link; choose an existing, real directory and retry`);
44
+ }
45
+ }
46
+ catch (error) {
47
+ if (error instanceof Error && error.message.startsWith("project root '"))
48
+ throw error;
49
+ throw new Error(`project root '${root}' cannot be resolved safely; choose an existing, real directory and retry`);
50
+ }
51
+ const identities = directoryPrefixes(root).map((absolute) => {
52
+ const current = fs.lstatSync(absolute, { bigint: true });
53
+ return { absolute, dev: current.dev, ino: current.ino, type: "directory" };
54
+ });
55
+ const validated = { path: root, identities };
56
+ const rootIdentity = identities.at(-1);
57
+ if (rootIdentity.dev !== stat.dev || rootIdentity.ino !== stat.ino) {
58
+ throw new Error(`project root '${root}' changed during validation; restore the exact real directory and retry`);
59
+ }
60
+ assertValidatedProjectRoot(validated);
61
+ return validated;
62
+ }
@@ -0,0 +1,190 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import YAML from "yaml";
4
+ import { loadYamlMapping } from "../core/yaml.js";
5
+ import { resolveSourceRoot } from "../core/sourceRoot.js";
6
+ import { entityListFamily } from "./entityRetrievalHelp.js";
7
+ const AUTHORITY_RELATIVE_PATH = "references/artifacts/state-storage-authority.yaml";
8
+ const AUTHORITY_SCHEMA_VERSION = "agentera.stateStorageAuthority.v1";
9
+ const NUMBERED_ARTIFACTS = new Set(["progress", "decisions", "health"]);
10
+ function canonicalRetrieval(family) {
11
+ const list = `agentera state ${family.commandTokens.join(" ")} list --format json`;
12
+ return { available: true, command: list, list, get: family.get };
13
+ }
14
+ function mapping(value) {
15
+ return value !== null && typeof value === "object" && !Array.isArray(value)
16
+ ? value
17
+ : {};
18
+ }
19
+ function positiveInteger(value, field) {
20
+ if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 1) {
21
+ throw new Error(`state storage authority field '${field}' must be a positive integer`);
22
+ }
23
+ return value;
24
+ }
25
+ export function loadProjectionPolicy(sourceRoot = resolveSourceRoot()) {
26
+ const authorityPath = path.join(sourceRoot, AUTHORITY_RELATIVE_PATH);
27
+ const authority = loadYamlMapping(fs.readFileSync(authorityPath, "utf8"));
28
+ if (authority.schema_version !== AUTHORITY_SCHEMA_VERSION) {
29
+ throw new Error(`state storage authority schema_version must be ${AUTHORITY_SCHEMA_VERSION}`);
30
+ }
31
+ const capacity = mapping(mapping(authority.projections).current).default_capacity;
32
+ const activeEntries = positiveInteger(mapping(capacity).active_entries, "projections.current.default_capacity.active_entries");
33
+ const summaryEntries = positiveInteger(mapping(capacity).summary_entries, "projections.current.default_capacity.summary_entries");
34
+ const totalEntries = positiveInteger(mapping(capacity).total_entries, "projections.current.default_capacity.total_entries");
35
+ if (activeEntries + summaryEntries !== totalEntries) {
36
+ throw new Error("state storage authority projection capacity must equal active plus summary entries");
37
+ }
38
+ const maxUtf8Bytes = positiveInteger(mapping(mapping(authority.budgets).projection).max_utf8_bytes, "budgets.projection.max_utf8_bytes");
39
+ return { activeEntries, summaryEntries, totalEntries, maxUtf8Bytes };
40
+ }
41
+ export function projectionRetrieval(command) {
42
+ if (NUMBERED_ARTIFACTS.has(command)) {
43
+ return canonicalRetrieval(entityListFamily(command));
44
+ }
45
+ if (command === "plan") {
46
+ const tasks = entityListFamily("plan_tasks");
47
+ const plans = entityListFamily("plans");
48
+ return {
49
+ available: true,
50
+ list: `agentera state ${tasks.commandTokens.join(" ")} list --format json`,
51
+ get: tasks.get,
52
+ plans_list: `agentera state ${plans.commandTokens.join(" ")} list --format json`,
53
+ plans_get: plans.get,
54
+ };
55
+ }
56
+ return {
57
+ available: false,
58
+ reason: "unsupported_numbered_retrieval",
59
+ artifact_id: command,
60
+ };
61
+ }
62
+ export function projectionOmission(command, count, reason, options = {}) {
63
+ return {
64
+ omitted: options.forceOmitted ?? count > 0,
65
+ omitted_count: count,
66
+ omission_reason: reason,
67
+ retrieval: projectionRetrieval(command),
68
+ omission_provenance: options.provenance ?? null,
69
+ };
70
+ }
71
+ export function serializedProjectionBytes(value, format) {
72
+ const serialized = format === "yaml" ? YAML.stringify(value, { sortMapEntries: false }) : JSON.stringify(value, null, 2) + "\n";
73
+ return Buffer.byteLength(serialized, "utf8");
74
+ }
75
+ function entryNumber(value, index) {
76
+ if (!value || typeof value !== "object" || Array.isArray(value))
77
+ return [Number.POSITIVE_INFINITY, index];
78
+ const object = value;
79
+ const candidates = [object.entry_number, object.number];
80
+ for (const candidate of candidates) {
81
+ if (typeof candidate === "number" && Number.isSafeInteger(candidate))
82
+ return [candidate, index];
83
+ if (typeof candidate === "string" && /^[1-9][0-9]*$/.test(candidate))
84
+ return [Number(candidate), index];
85
+ }
86
+ const stableId = object.stable_id;
87
+ if (typeof stableId === "string") {
88
+ const match = /:(\d+)$/.exec(stableId);
89
+ if (match)
90
+ return [Number(match[1]), index];
91
+ }
92
+ return [Number.POSITIVE_INFINITY, index];
93
+ }
94
+ function omissionCount(value) {
95
+ const count = value.omitted_count;
96
+ return typeof count === "number" && Number.isSafeInteger(count) && count > 0 ? count : 0;
97
+ }
98
+ function boundedValue(value, itemKey, items, omittedCount, command) {
99
+ const result = { ...value, [itemKey]: items };
100
+ const existingCounts = result.counts;
101
+ if (itemKey === "entries" && existingCounts && typeof existingCounts === "object" && !Array.isArray(existingCounts)) {
102
+ result.counts = {
103
+ ...existingCounts,
104
+ entries: items.length + omittedCount,
105
+ returned_entries: items.length,
106
+ };
107
+ }
108
+ return {
109
+ ...result,
110
+ ...projectionOmission(command, omittedCount, "projection_byte_budget", { forceOmitted: true }),
111
+ };
112
+ }
113
+ function minimalBudgetedProjection(command, omittedCount, policy, format) {
114
+ const omission = projectionOmission(command, omittedCount, "projection_required_fields_exceed_budget", {
115
+ forceOmitted: true,
116
+ provenance: {
117
+ source: "current_projection",
118
+ detail_availability: "unavailable",
119
+ compatibility: "degraded",
120
+ archive_verified: false,
121
+ omitted_count: omittedCount,
122
+ },
123
+ });
124
+ const fallback = {
125
+ command,
126
+ status: "degraded",
127
+ entries: [],
128
+ counts: { entries: omittedCount, returned_entries: 0 },
129
+ source: { artifact: command, detail_availability: "unavailable", source: "current_projection" },
130
+ ...omission,
131
+ error: {
132
+ class: "projection_output_budget",
133
+ message: "optional projection detail was omitted because required output fields exceeded the authority byte budget",
134
+ syntax: `agentera state ${command} --format json`,
135
+ example: `agentera state ${command} --format json`,
136
+ recovery: omission.retrieval.available === true
137
+ ? String(omission.retrieval.command ?? omission.retrieval.list)
138
+ : "No direct retrieval route is declared for this artifact; use its supported state command.",
139
+ },
140
+ };
141
+ if (serializedProjectionBytes(fallback, format) <= policy.maxUtf8Bytes)
142
+ return fallback;
143
+ const minimal = {
144
+ command,
145
+ status: "degraded",
146
+ omitted: true,
147
+ omitted_count: omittedCount,
148
+ omission_reason: "projection_output_budget",
149
+ retrieval: omission.retrieval,
150
+ };
151
+ if (serializedProjectionBytes(minimal, format) > policy.maxUtf8Bytes) {
152
+ throw new Error(`projection output budget ${policy.maxUtf8Bytes} bytes is too small for required omission metadata`);
153
+ }
154
+ return minimal;
155
+ }
156
+ /**
157
+ * Bound a structured projection without truncating strings or splitting UTF-8.
158
+ * Entries are removed oldest-first by numeric identity; every removal is
159
+ * declared in the response and points at the future direct-get surface.
160
+ */
161
+ export function boundStructuredProjection(value, command, format, policy = loadProjectionPolicy()) {
162
+ if (serializedProjectionBytes(value, format) <= policy.maxUtf8Bytes)
163
+ return value;
164
+ const itemKey = Array.isArray(value.entries)
165
+ ? "entries"
166
+ : Array.isArray(value.operations)
167
+ ? "operations"
168
+ : null;
169
+ if (itemKey === null)
170
+ return minimalBudgetedProjection(command, 0, policy, format);
171
+ const items = value[itemKey];
172
+ const removalOrder = items
173
+ .map((item, index) => ({ index, key: entryNumber(item, index) }))
174
+ .sort((left, right) => left.key[0] - right.key[0] || left.key[1] - right.key[1]);
175
+ let omitted = omissionCount(value);
176
+ let retained = [...items];
177
+ for (const candidate of removalOrder) {
178
+ if (serializedProjectionBytes(boundedValue(value, itemKey, retained, omitted, command), format) <= policy.maxUtf8Bytes) {
179
+ return boundedValue(value, itemKey, retained, omitted, command);
180
+ }
181
+ const retainedIndex = retained.indexOf(items[candidate.index]);
182
+ if (retainedIndex >= 0)
183
+ retained.splice(retainedIndex, 1);
184
+ omitted += 1;
185
+ }
186
+ let result = boundedValue(value, itemKey, retained, omitted, command);
187
+ if (serializedProjectionBytes(result, format) <= policy.maxUtf8Bytes)
188
+ return result;
189
+ return minimalBudgetedProjection(command, omitted, policy, format);
190
+ }
@@ -0,0 +1,156 @@
1
+ import { createHash } from "node:crypto";
2
+ import { resolveSourceRoot } from "../core/sourceRoot.js";
3
+ import { validateEntityListHelp } from "./entityRetrievalHelp.js";
4
+ import { loadStateStorageAuthority } from "./stateStorageAuthority.js";
5
+ export const STATE_RETRIEVAL_AUTHORITY_PATH = "references/artifacts/state-storage-authority.yaml";
6
+ export const STATE_RETRIEVAL_SCHEMA_VERSION = "agentera.entityPublicRetrieval.v1";
7
+ const POLICY_SCHEMA_VERSION = "agentera.entityPublicRetrievalPolicy.v1";
8
+ const FAILURE_CLASSES = [
9
+ "invalid_request",
10
+ "unsupported_artifact",
11
+ "not_found",
12
+ "ambiguous",
13
+ "corrupt",
14
+ "incomplete",
15
+ "cursor_invalid",
16
+ "cursor_snapshot_unavailable",
17
+ "unsupported_state",
18
+ ];
19
+ function mapping(value) {
20
+ return value !== null && typeof value === "object" && !Array.isArray(value)
21
+ ? value
22
+ : {};
23
+ }
24
+ function strings(value) {
25
+ return Array.isArray(value) && value.every((item) => typeof item === "string")
26
+ ? value
27
+ : [];
28
+ }
29
+ function requireNonEmpty(record, field, prefix, errors) {
30
+ if (typeof record[field] !== "string" || String(record[field]).trim() === "") {
31
+ errors.push(`${prefix}.${field}`);
32
+ }
33
+ }
34
+ export function deriveLegacyPlanIdentity(canonicalJson) {
35
+ return `legacy-plan:${createHash("sha256").update(canonicalJson, "utf8").digest("hex")}`;
36
+ }
37
+ /** Validate the canonical archive projection against its owning archive contract. */
38
+ export function validateExperimentPublicationParity(value) {
39
+ const errors = [];
40
+ const retrieval = mapping(mapping(value.entity_target).public_retrieval);
41
+ const archivePolicy = mapping(mapping(mapping(retrieval.policy).archive_policy).experiments);
42
+ const archive = mapping(value.experiment_archival);
43
+ const layout = mapping(archive.layout);
44
+ const publication = mapping(archive.publication);
45
+ const projection = mapping(archive.projection);
46
+ const prefix = "entity_target.public_retrieval.policy.archive_policy.experiments";
47
+ if (archivePolicy.owner !== "experiment_archival" || archive.status !== "implemented") {
48
+ errors.push(`${prefix}.owner`);
49
+ }
50
+ if (archivePolicy.storage_scope !== "objective_directory" || archivePolicy.storage_scope !== layout.ownership) {
51
+ errors.push(`${prefix}.storage_scope`);
52
+ }
53
+ if (archivePolicy.publication_order !== "archive_before_projection" || publication.archive_before_projection !== true) {
54
+ errors.push(`${prefix}.publication_order`);
55
+ }
56
+ if (archivePolicy.projection_policy !== "uniform_10_40_50" || archivePolicy.projection_policy !== projection.policy) {
57
+ errors.push(`${prefix}.projection_policy`);
58
+ }
59
+ return errors;
60
+ }
61
+ /** Validate the sole active public retrieval projection and its unique policy. */
62
+ export function validateStateRetrievalAuthority(value) {
63
+ const errors = validateEntityListHelp(value);
64
+ const retrieval = mapping(mapping(value.entity_target).public_retrieval);
65
+ const policy = mapping(retrieval.policy);
66
+ const prefix = "entity_target.public_retrieval";
67
+ if (retrieval.schema_version !== STATE_RETRIEVAL_SCHEMA_VERSION)
68
+ errors.push(`${prefix}.schema_version`);
69
+ if (retrieval.status !== "final")
70
+ errors.push(`${prefix}.status`);
71
+ if (policy.schema_version !== POLICY_SCHEMA_VERSION)
72
+ errors.push(`${prefix}.policy.schema_version`);
73
+ const identity = mapping(mapping(value.entity_target).identity);
74
+ if (identity.accepted_pattern !== "^[a-z]{10}$")
75
+ errors.push(`${prefix}.identity.accepted_pattern`);
76
+ const envelope = mapping(policy.envelope);
77
+ for (const field of ["schemaVersion", "command", "status", "entries", "counts", "filters", "snapshot", "source", "source_contract"]) {
78
+ if (!strings(envelope.required_fields).includes(field))
79
+ errors.push(`${prefix}.policy.envelope.required_fields.${field}`);
80
+ }
81
+ const projection = mapping(envelope.bounded_summary_projection);
82
+ if (projection.cardinality_owner !== "summary_rows_after_filters_and_cursor") {
83
+ errors.push(`${prefix}.policy.envelope.bounded_summary_projection.cardinality_owner`);
84
+ }
85
+ const degradation = mapping(projection.optional_detail_degradation);
86
+ for (const field of ["reason", "detail_omitted_count", "omitted_fields", "recovery"]) {
87
+ if (!strings(degradation.required_metadata).includes(field)) {
88
+ errors.push(`${prefix}.policy.envelope.bounded_summary_projection.optional_detail_degradation.required_metadata.${field}`);
89
+ }
90
+ }
91
+ if (degradation.row_omission !== "forbidden" || degradation.scalar_truncation !== "forbidden") {
92
+ errors.push(`${prefix}.policy.envelope.bounded_summary_projection.optional_detail_degradation.loss`);
93
+ }
94
+ const cursor = mapping(policy.cursor);
95
+ for (const field of ["vocabulary", "response_field", "binding", "invalid_behavior", "unavailable_behavior"]) {
96
+ if (!(field in cursor))
97
+ errors.push(`${prefix}.policy.cursor.${field}`);
98
+ }
99
+ const omission = mapping(policy.omission);
100
+ for (const field of ["omitted", "omitted_count", "omission_reason", "retrieval"]) {
101
+ if (!strings(omission.required_when_candidates_remain).includes(field)) {
102
+ errors.push(`${prefix}.policy.omission.required_when_candidates_remain.${field}`);
103
+ }
104
+ }
105
+ requireNonEmpty(omission, "semantics", `${prefix}.policy.omission`, errors);
106
+ const output = mapping(policy.output_bounds);
107
+ if (!Number.isSafeInteger(output.maximum_limit) || Number(output.maximum_limit) < 1 || Number(output.maximum_limit) > 100) {
108
+ errors.push(`${prefix}.policy.output_bounds.maximum_limit`);
109
+ }
110
+ if (!Number.isSafeInteger(output.max_serialized_utf8_bytes) || Number(output.max_serialized_utf8_bytes) < 1_024) {
111
+ errors.push(`${prefix}.policy.output_bounds.max_serialized_utf8_bytes`);
112
+ }
113
+ if (output.scalar_truncation !== "forbidden")
114
+ errors.push(`${prefix}.policy.output_bounds.scalar_truncation`);
115
+ if (output.row_omission_under_byte_pressure !== "forbidden")
116
+ errors.push(`${prefix}.policy.output_bounds.row_omission_under_byte_pressure`);
117
+ const failures = mapping(policy.failures);
118
+ for (const field of ["class", "message", "syntax", "example", "recovery"]) {
119
+ if (!strings(failures.required_fields).includes(field))
120
+ errors.push(`${prefix}.policy.failures.required_fields.${field}`);
121
+ }
122
+ const classes = mapping(failures.classes);
123
+ for (const name of FAILURE_CLASSES)
124
+ requireNonEmpty(classes, name, `${prefix}.policy.failures.classes`, errors);
125
+ const planArchive = mapping(mapping(policy.archive_policy).plan);
126
+ for (const field of ["owner", "diagnostics", "unselected_diagnostics"]) {
127
+ requireNonEmpty(planArchive, field, `${prefix}.policy.archive_policy.plan`, errors);
128
+ }
129
+ errors.push(...validateExperimentPublicationParity(value));
130
+ return [...new Set(errors)];
131
+ }
132
+ export function loadStateRetrievalAuthority(sourceRoot = resolveSourceRoot()) {
133
+ const authority = loadStateStorageAuthority(sourceRoot);
134
+ const errors = validateStateRetrievalAuthority(authority.document);
135
+ if (errors.length > 0)
136
+ throw new Error(`invalid state retrieval authority: ${errors.join(", ")}`);
137
+ return {
138
+ authority: STATE_RETRIEVAL_AUTHORITY_PATH,
139
+ retrieval: mapping(mapping(authority.document.entity_target).public_retrieval),
140
+ };
141
+ }
142
+ export function stateRetrievalCommands(sourceRoot = resolveSourceRoot()) {
143
+ return mapping(loadStateRetrievalAuthority(sourceRoot).retrieval.commands);
144
+ }
145
+ export function entityPublicRetrieval(sourceRoot = resolveSourceRoot()) {
146
+ return loadStateRetrievalAuthority(sourceRoot).retrieval;
147
+ }
148
+ export function startupSurfaceBudget(surface, sourceRoot = resolveSourceRoot()) {
149
+ const authority = loadStateStorageAuthority(sourceRoot);
150
+ const surfaces = mapping(mapping(mapping(authority.document.budgets).startup).surfaces);
151
+ const budget = Number(mapping(surfaces[surface]).max_utf8_bytes);
152
+ if (!Number.isSafeInteger(budget) || budget < 1) {
153
+ throw new Error(`state storage authority '${authority.authorityPath}' has no positive startup budget for '${surface}'`);
154
+ }
155
+ return budget;
156
+ }