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
@@ -10,7 +10,7 @@ import path from "node:path";
10
10
  import { parseYaml } from "../../core/yaml.js";
11
11
  import { resolveSourceRoot } from "../../core/sourceRoot.js";
12
12
  import { loadYamlMapping } from "../../core/yaml.js";
13
- import { expectedSequenceOrder, isMapping, sequenceInOrder, validationRuleSeverity, validateDecisionAlternatives, validateDecisionSatisfaction, validateFullPlanContract, validatePlanKnownFields, validateSequences, validateSingletonGroup, collectSingletonGroups, wordCount, } from "./schema.js";
13
+ import { expectedSequenceOrder, isMapping, sequenceInOrder, validationRuleSeverity, validateDecisionAlternatives, validateDecisionSatisfaction, validateFullPlanContract, validatePlanDependencies, validatePlanKnownFields, validateSequences, validateSingletonGroup, collectSingletonGroups, wordCount, } from "./schema.js";
14
14
  function schemasDirDefault() {
15
15
  return path.join(resolveSourceRoot(), "skills", "agentera", "schemas", "artifacts");
16
16
  }
@@ -42,6 +42,7 @@ export function validateYamlContent(content, schema, name) {
42
42
  if (name === "plan") {
43
43
  validatePlanKnownFields(data, schema, violations);
44
44
  validateFullPlanContract(data, violations);
45
+ validatePlanDependencies(data, violations);
45
46
  }
46
47
  validateSequences(data, schema, name, violations);
47
48
  if (name === "decisions") {
@@ -70,7 +71,9 @@ export function validateYamlContent(content, schema, name) {
70
71
  if (rule.includes("unique") && rule.includes("number")) {
71
72
  for (const [key, val] of Object.entries(data)) {
72
73
  if (Array.isArray(val)) {
73
- const nums = val.filter((e) => isMapping(e) && "number" in e).map((e) => e.number);
74
+ const nums = val
75
+ .filter((e) => isMapping(e) && "number" in e)
76
+ .map((e) => e.number);
74
77
  if (nums.length > 0) {
75
78
  if (nums.length !== new Set(nums).size) {
76
79
  violations.push(`${name}: duplicate numbers in '${key}'`);
@@ -102,4 +105,3 @@ export function validateYamlContent(content, schema, name) {
102
105
  return violations;
103
106
  }
104
107
  export { loadYamlMapping, schemasDirDefault };
105
- //# sourceMappingURL=violations.js.map
@@ -1,12 +1,12 @@
1
1
  import fs from "node:fs";
2
2
  import path from "node:path";
3
+ import { isLifecycleOwnershipStateDirectory } from "../runtime/lifecycleOwnershipJournal.js";
3
4
  import { AGENTERA_PROFILE_DIR_ENV, PROFILERA_PROFILE_DIR_ENV, resolveProfileDirOverride, } from "../core/envPaths.js";
4
5
  import { expanduser, isFile, pathExists, resolvePath } from "../core/paths.js";
5
6
  import { opencodeConfigDir } from "../setup/opencode.js";
6
7
  import { doctorRoots, loadSuiteVersion } from "../upgrade/appModel.js";
8
+ import { MANAGED_APP_CONTENT_ROOT_ENTRIES } from "../upgrade/appContentRefresh.js";
7
9
  import { AGENTERA_USER_STATE_NAMES, ROOT_USER_STATE_DIR_NAMES, ROOT_USER_STATE_FILE_NAMES, } from "../upgrade/doctor.js";
8
- /** Contract authority: references/cli/v3-handoff-manifest.schema.yaml */
9
- export const V2_HANDOFF_MANIFEST_SCHEMA_REL = "references/cli/v3-handoff-manifest.schema.yaml";
10
10
  export const V2_HANDOFF_MANIFEST_FILENAME = "v3-handoff.json";
11
11
  export const V2_HANDOFF_SCHEMA_VERSION = "agentera.v3_handoff_manifest.v1";
12
12
  export const READER_PREFLIGHT_BUDGET_MS = 100;
@@ -154,6 +154,9 @@ function agenteraUserStateDirIsRecognized(dir) {
154
154
  // recognized so v2->v3 migration preserves legacy objective state.
155
155
  continue;
156
156
  }
157
+ if (entry === "runtime-lifecycle" && isLifecycleOwnershipStateDirectory(full)) {
158
+ continue;
159
+ }
157
160
  return false;
158
161
  }
159
162
  return true;
@@ -405,6 +408,9 @@ export function appHomeHasUnrecognizedEntriesWithPreflight(appHome, preflight) {
405
408
  if (entry === "app" || entry === V2_HANDOFF_MANIFEST_FILENAME) {
406
409
  continue;
407
410
  }
411
+ if (MANAGED_APP_CONTENT_ROOT_ENTRIES.has(entry)) {
412
+ continue;
413
+ }
408
414
  if (preflight.source === "manifest" && preflight.manifest) {
409
415
  if (isManifestCatalogEntryPreserved(preflight.manifest, entry)) {
410
416
  continue;
@@ -444,4 +450,3 @@ export function bundleMarkerFreshnessContext(appHome, sourceRoot) {
444
450
  bundleMarkerMtimeMs: fs.statSync(markerPath).mtimeMs,
445
451
  };
446
452
  }
447
- //# sourceMappingURL=v2HandoffManifest.js.map
@@ -0,0 +1,2 @@
1
+ export { ACTIVATION_CENSUS_AUTHORITY, ACTIVATION_CHECK_IDS, ACTIVATION_CLASSES, ACTIVATION_CLASS_AUTHORITIES, ACTIVATION_DIMENSIONS, ACTIVATION_EVIDENCE_SOURCES, } from "./packagePublication.js";
2
+ export { ACTIVATION_CANONICAL_TUPLES, ACTIVATION_TUPLE_AUTHORITY, canonicalTupleJson, digestCanonicalTuples, } from "./activationTuples.js";
@@ -0,0 +1,136 @@
1
+ import { createHash } from "node:crypto";
2
+ import { gunzipSync } from "node:zlib";
3
+ // This compressed literal is the immutable, code-owned tuple catalog. It expands
4
+ // only into exact tuple records; no production loader participates in authority.
5
+ const CATALOG = [
6
+ "H4sIAAAAAAACA+1dW3PiOBZ+319B8TyGqd23bO1DOs32ZDed9JJMV01NpihhC1DHWG7JZsJMzX9fyTdssEEm7uYcwUsugI4/fd/R",
7
+ "7egg/fpb71+9X//W6/3Zd30iZf9K/Wb9H/oyFjPi0gnz1EuhYEuqXuS/B1RMQhIt9IvEfSFzKoeqwFAKN/ntManedhdDly+XJPDk",
8
+ "IJJFQbleTrk/4eov6lM34kKZeX/7+On66ean0Xjy9PBpcjf6PLqb3Dx8/Hh9//5xU7QoEMS+r+BRZT1ibvHGhM0mJFjn77sk4AFz",
9
+ "iT9xuRDqE4wHGnMQLnvOTa+MvRdRGV1JHguX9hwn+TepC1GlVkSXvOHBlzhIjAz027pSf/1wiDUShs6CX4hrTZzHE8QX2trRFkv1",
10
+ "iAtrbVkL54J4F97a8raigs3WF9pa0iZoyEV0oa0lbTIipcpfWDNkzV0olBfaWtLms+DSQtuSplzNfbmwdkS/dpl7tGXta0zFZerR",
11
+ "uoXypXrOpWdrPdMlPvMuzfSIuS6PL6y1dzcm9VMvtLUMGjHpxvKyRmi/IJWUCHdxIa4lcaFPLq20LWnTmPnehbWWrPEwYkv2x2Us",
12
+ "bb0FE3vsMuE9Yv8lXtJLDKT9kCD4jPmXZtra4ahk88tg2npYUNM29WFxWZse4o6EZMp8Fq3r4m+xwaIhN8DUi2mZIQsU9XHy3MNE",
13
+ "lj9sA2+mi9Qyb2mZ8+bNeJVaJi4rdN7Mma9Ty9Tlpc6bO7Olapk3XeK8OTNcqZZJS4qcN2vmK9UycXmp8+bOcLFaJi4pcuYjqvFi",
14
+ "tTKkZqXOfFwwXa9Whoa00Jl7neGKteJzSZkzHx/aLFkrQ8Sm4DkwKGIFJ0kdrzZYLiIy9elALoigniNfmO87aWhgP5mZwaHPZtRd",
15
+ "uz69jqMFF0qigwz6nHh3O8VquNwL71tTnFcw+10AbsnwgivT6jOxQUpw/shAqbqiY5oiuvEpCeLQiNb7upLKPZSflxI1SoWq8FBx",
16
+ "yj36CpfSDB0SRgWNmGpgV+pZQUQFGehejvi+anMLzl8GSXWSP+XgizQI1JyA9yPqYIs6sZAKeyjoJOKKzFjSQbhGqVFTTexSSlKp",
17
+ "Q5cT9Z6IcEtVUxVbteKhLVLlNbFEKRuak73tyIIGZG3LyVORJ8rpmCqGtfU01AOrSoLOWRKb0Cv6JREvNAp99fGsJ0eh0OE6WKFO",
18
+ "6MdzFgzArkZbobdCEaFscUEFVk128CNTJY0mDfLKZUE7nwUvkLXYixqbAtpx0qo4HpWuYKHCPDDbDzylBvtx26GCWR4APBVy3Hao",
19
+ "YLjfBk+GArglOhjmrwEUokBuiRKmeQ8ApdhAt0ML46wneFqUoFuiRYsMA4ByVNDboYhR9ik8KTLYlmhgmOkFUIYCuR1KGOexw5Oi",
20
+ "BN0OLQy//QNPiQK4HToYfpsIng4FcGw6JDH9tD5FDA00/w2AUfMOPr5XhxYz4/BjeXVoMTOOIG5XCxc15whidPV4UbOOIR7XABg3",
21
+ "7y9JNTBNYKqYMbO/oF/QsJ5ixcw2C2RIX1C5egUydu7Vq8iozxFjZj7ZosBEfAkwet6h72o1AEbNO5IdrGbMuNl/0RVB1d+UIWPm",
22
+ "HvxOYQ1Y7HxjcvQNXtSsI9iLrcdrAeuYvL2EGDPzghKfSUzMlxHjZh5BrkEDYOS88wCXwxeAMfOOIJ+jFi5mzhHkbtTCxc85pg6m",
23
+ "jBg58zG22UwVMzL2eUgDnXyFKFepGTJy7qHnKzXgxc06+JylBry4WYeft9QEGDnv8HOXGhEjZx5B/lIzZOzco8hh2osatwLA85hq",
24
+ "0eJmHEcu0z7Q+PkHn8+0BzNu9jHkNDVDtoB74HlNzZCRc48jt2kvauwKYMhv2gcaN//Qc5zq4eLnHJfDo8102q4H/FynRsRWMI/L",
25
+ "6/FmPG3VBEXO0x7M2NmHn/fUDBk99zzA5vhYs5+2KgI//6kJMG7e4edANQG2gXdcnQ3iTKjdmsT4Zjl2ZEO5fKmAe7jyoWpAY+cf",
26
+ "y75hFS9W1rPrL1A5/S5mrOxvrljApUA9bgtUQDTdr0MNTgE6o0LhrdEge0MOiUdC5UBymD3dCeOprzAmN8Ecvmk1OTdSFd4UchSH",
27
+ "gSTpZdDLLwfE+PTzu7vbm+un24f7yc3D/dP4+uapnv9WiI9UIlDKVmQYekzxPmXBsLgq54vsuQvqvvTyK796yjcIC6jnbEAqyWZc",
28
+ "LEnUSwB1oUt2Rc96sCZL/3ATST+dXG+fvjfOy5u0j/zDbaXYBmmBDgHx15LJIV0xT7/kRIwKhxSXjbeVI7fzpMzkPY6RJqOagof0",
29
+ "MQRvkUwrKtgs74pCrjoGE4mybiwpvHb0VtXhrktr0laHPegs0CC7+nDzV9EfOEwj0aWcpQLst241ucVWvdj1VqFDKrXHb5Noc59L",
30
+ "SVRdFQD10837prZS5XZG2oxxD1cpdZ13UJ/040xVO1ABm7TSU07q6Gv69KjbcjBKCqc/H1MLBd9GzeqxrqSxSgeg26SS6u2nXKrK",
31
+ "OdPYm9PoDbOGwtS7xJJxs0rye90o7wk/V80Yi3a4Jvh10w8nYajWdNmyyllxl0xjn5hOunN8w01B85aVF/68W/aATCbA7ZDHJSGZ",
32
+ "Ml/7ob5/WcQJzpZDVdWQbkn0NRqGgs8FlfKgTlRVMybq759I4PHZ7CGOwlhNMb7GTFD97RH5b8GXhhPDFpWyQ8HFeiqYMstjNQgc",
33
+ "PcVIrYy1kYN66b1wf0WTD2uVqDQRZS9OO6SIQ23fcRckCKgvTUXwKZE0//1RgVNWiIEKOqhQKWOgQgNEO/jfdNKq3evLWKCPMU2A",
34
+ "bZNjsPRwyJACtSjWmQW2SzOZ/C3D3ikLkBflr9PireJs463o+pYN05Do4brYLVzLpc6Ocq2WpHc7xd4gk4VL0uba8lDhOGIWvSPY",
35
+ "Q26oVWO7ayx+vIDNVbJQyWxj0hHZXmbLnvK7bqEeUQsLN/KyD+pZraaKCvZHune5O+0omVkqbMNdgE39bEMwaKXqzttv6+2HbMf8",
36
+ "Ty/1WDDP4vtgtGiAZgfnajU/n1PhSPXAJXFoIJi70DEUWPwfgIlfi5aEHlwU5abGuaX2a6Nxo4kDghnXBbZsyTbJrmTEu8ojlYb7",
37
+ "PAqSqvSdwpgtbIy3UEf3T7dPv0zubh+fJuOf1T8fR5Px6IP6d/xLnQglYN+V26Sex7LpUTfJX4dHZxkZHj4XlPjRAhyZBSw8TOpv",
38
+ "TANs5BkqXDxOIiJfYJJZQMPDKJ9+0Y9fUXCElpHh4ZO+hmpJlewdgmO0ig0PpxH3ODgyM1CIZkfcBTgxSkGhYPF3teKgxZR9QMKQ",
39
+ "Bp4ho0nZPERWxEcPZyhsl3gMaUnFmgn7BhYiTovpMTBSa3ChZDXde4fHaoELp68uYbrqEp2n6rkztP60Agkbl7AafBUSNi4ljRzD",
40
+ "LzN+Tz4rsNBxGqtKSurBctEyKoxeqv+A6qpVbNjYVRC48JwsX9jkOJ3vyW8dOnSjv3AX5lGo7zT8F5iwsemqFT+w8b+AhIjLdKcB",
41
+ "2Mx0GxQiPouQLjAHrcGFklVY0/4aXIhYLQXLB8mpFHIBhdh6aIi41bFzYF1AFRI2LmE1/CokbFwmC2uqT3co5SdBYHQLGDpeoa35",
42
+ "d1BhYzT7OiQoPjeY8LGpDwQDRmYGCdP+CHclsLG9Cgkbl8A27yqQEHGZnygDbTJfgwsaq5nNbV7VTETvOF6J7SOZTnCQXXKEo/z1",
43
+ "x98GGaq9NPb/fO5rkM/9q+d+cc6drvpz/4fnfv755O0dy8lHUraeM0WeU6qK48A2r6tORxb//9Vvd26k8qFeeozZVS5BO2WUEWfz",
44
+ "kZOJ01qSCrjsnwZ5cIoiY9WrOEsiXqg4pTJFv5AA+vwNdap9EiLV0jNiZ4IHkUIbnVa2Eoz2/V3aoRVDwvDxv7d3d4Olt6tZzWMQ",
45
+ "KDaNA8+nqWDy9GNSW2G2Zci4RMH55gtRMA61bTMJyMvg5p94y5MO9ePR9fuPo0PfpaxQXxTBzHwczgXxqDOPmXdSAX7+9GF8/b6d",
46
+ "ApsymCXQJ0vNqc/np6T/5qfr+w+ju4cPrQQol8IsgUclmwen5P/96PH2w30r8osimJn3mUsDedKe5+72ZnT/ODInPiuAe8A9feij",
47
+ "Er/oKOyBSoPsRI1N+pujHhrGJ52DzthrFAtlOEOXH0KZIjt8bEFFKgNjKAVUK1AdHaXeVRC+OqmcAIIixUU8zgZWy8bVaOKQTs/9",
48
+ "4lM7Wj33SZJOk7xbKPbcfxcz33MKMnv/eXy476U09phUWun9zR4JvJ509eGbXo8FvWhBe/Q1OeBJvZBR+M9edktNcaJKL0dBZY9F",
49
+ "sudR9YLQJQT3Ylc9YUpdEkvaC3he2OXhWtlW/MrBc/8E3pTVK2sfjiLAZCv/G3pULaCWLtVs47v5VPrMnhKQsjA6J9+iSxZpz9o9",
50
+ "gDo/8Fm7TXqSanTSgccY4TEh3kZ7KIefZlF1NFsn2DlTn0/BCVqD7mgxt23ZJ+SC+iFECTe43iJeZsU+2ZZsnm6cZ6fxexA1bAD5",
51
+ "FkHrTNqnLlcaBVF67iRAXXfgvUXRqjELR0qfBMXRv8l9QiBHzAaUbxo562zaJ3CSIfS/mFalgSLsNrq3CFqxZZ+QOqd0TInHAirl",
52
+ "Y1IzoB3wPqRvEbjRrl1i11+vM07X7dD0NgB7rOSHTNvXxHcvw5rSwF3oaCDEdn4Q7lsa+37jZ6G9juIh0X0DtWPNM8PnoLfrc0lV",
53
+ "F4dD8irablUv2T4L4WvuaQEsfAVtx8JvbJ+D8Pll8DiEr6LtVviS7XMQngt3QZUcYGNoRpC7dYHtB5yDH8gFARoc34+1W+ULy+cg",
54
+ "ebQOqcSheAlqt4Lnhs+iiUdERHF4PZ8rQRH19024O276dU+x0C34UrHmyRIDIL2gCeabRK81arHGSUoGaHlLCDtRNrdnsahfoe6g",
55
+ "1SHsRNSv1u6kFVXUGdmwW2oJYSei5vbsE9VjUnHgLoDmcTYgfIuoO/YsFrW4Uxq0sFsoOxG3bNP2SVM52+ohjkKgeyFGmLubWNU+",
56
+ "wXpXcLmvKzdKLrN6gJ1x2Ap6h46x50HW+0eyMzx6pW6c59tSiaG72IO7Q89oeor9bqGEneHqLuohd+kMuw+wyw8qh+QBE3wX27HK",
57
+ "blk6g+A5ikj5NwiLn01yowz5C8WS2lgC23ViY276HFQHG5/ZC7Vbxe2N2DRu8aHa9fyGW51ntHYvTTnBfrOsDfLuV+41z7HYOaS7",
58
+ "UAyC9oIyxE7kLgzarGty1npytjxobbdgdqNv2aj1Gs9phEDiAmWHCqc2rRcY7uS8EWeHIls8La9W1GcSQ0PewOxQ5Myo9RondxDB",
59
+ "13gDs0ONM6MWa5wdWQ1a4ArGTtTdWLRf2s/JEzAIXEbapcyFXYvFXsFXedW1vCt7dc3TtiCnqXWXnGZ3zmFy1RrofMMSwk5yDXN7",
60
+ "FosK9ssZdQg7EdXeL2cUVZRQdxfqEHYiqrRyt0BfAlA+62lUXAoATdxDSI8Vea9du8TerNTfc1cmOawM3jej96E8VuRGm7AFnnIe",
61
+ "6fMZwm2Js9tyr9JT3g/Kl19eOywMXsfRgoutL8XW6lcU+UiUA7wWBWuvVtmGdeTNvLV0RVRGmeWe4yT/JhXMHvquinMQZUm+bSk1",
62
+ "vf/1e3Naaux4SE3a3ZXrUxKAIbSKCR2Zq78DYzIBhI7GkIiIER8YlxtU+PzyH9D88h+4aCSuS8Nk3pZcMPE15uofx5+BoXUPQPQ0",
63
+ "uwI4zQlAtDQDJRcppQoGXy5p4Cm/yHJc4RFcDxIj3R7XQCF3yDUI8RMNsUuuQYiXaKj0Iu6VV1SsnR9hdsYFNkxBGfolff5V+pcz",
64
+ "JQJQaKYBHXaCnYC+RrBZziFiplrNiqY+YG8u8OEnGXi/UQWJmW59fXPAnTVcrksIUft16DP1M68oXNfexomZ9CWTkgVzJ90ehEv6",
65
+ "Dk7MpAvKhUcF9eDyXYaImWoarJzf1QdDCrhHqYLETLc2Cp/vLZSo/VuRiMDBqyhxryblAj7hWygxE64oJBIu0zk8zBTP4iDFA5bl",
66
+ "EkLUa0llAPKsr8CHmWSXL0MuGWyHroJEvYKM/YiFkKN+JYSo4yPxVEYsimE79hZK1J5NfB1uoF66OwrYwXeA2kG7uyBBQH0MxG+g",
67
+ "wqD+t/8DfpAaejqfAQA=",
68
+ ].join("");
69
+ // Emitted producers carry `reason`, while generated files carry
70
+ // `command_authority_reason`. This immutable patch catalog intentionally updates
71
+ // the M6 tuple payload without consulting the mutable package registry loader.
72
+ const EMITTED_REASON_CATALOG = "H4sIAAAAAAACA8VYXXPrJhD9K0ye6+v3+9Z8zPShHbfx7X1HsJaYYFAAqfZ0+t+7fEhCsRNbTiy/xAIUnbMLu3uWf+9gK5wD/r2m7IWWYJdMiqU1bMloTQshhRM4KRSH3Tdn777fPehtLcEB6V/Yk0JzfItQxYl11LimJkxvtzi2pKbWElcZ3ZQV/gKxFTXASW1gwRqnWzD4srLONMxpk76iG8NgmUgR3bi6ccQyquy3u18+II2/tRFbWBRSF28IIzUnGAnrpGwEp4pB4AdHGYpESmi1QAv3Oc1Ps6xA1pHfb/hEYEc9y/fdlfx5wIF11vkPJgroQwNv2XlaCvhJYltRGuptfobXRiB0ZPkHZZVQQAwwv2V7shEgcXt7PmgC4H7SQmbO1Urue2twxx/ihj9EY05y0UaAcoHNmEW2MAuRWlL1u9gA2zMJawSGMR/Zrc3Cxh9k+KvBXRizePVTww7VRlsYmNhrUHGa62egHOGtXYMEdrhZP1aPK2TlcM9aKq/uIQOlsB7MLqt9YQR/xqiAZ2AgaheZhRnvKD/VpyzauAoPltt/zmchLCtqSQEVbYU2aHNKDawC9nI6NwyZ9UErBzu3LECxakvNS0ppWertVmY5eUeYNUKmFHHvHz2+X7gRHSbxzKO3k5/S6Nak8NdQ5g42r1u4ES9oBcfjk3LZUxrd2FnaYJQgYJb1V/nUjenFchx5rVNpHjb0NpzcvgYbKf3AR042VMoC/5dw2NBGuvm9FFPqr2WJ2TjbyXWXalsqZOc0ny+5sF+nK1IGboHQRACmZuCkXjPTjgRvBJtVEfXEgoqNnP4MgrajwwUtlbaodL/Kicdl7lRPvg56JUiXnvCsbjO+8uci4Hpuu7j8YyzU1LEq77oe0xw2S/156756VYHXk+klbiTUq+GZ+YwDIO8QVgG+qxhDf5BozR+dOJReED8ph/li9baXidOjVuZ2VIOMewowqfXDgpvLOhOnvixOJhNEN20OfHjvZ2ftBguhljiBZc7QVHKxSc9AcMn3XlooR+qmkMKidiF8iN+0ya6i+MdQZYUTLcioBqlQFnlSw7Oev+M9vRAPDIelRS+gKKPcx+8CdrU2LgeOb2AHyRsG5rKWxdb6JWWL+zjIpVLCsGMfJI8duCBu6wU0shz6jhvCG9fyQhJCY/XTfdjfPG0LfxSPuADsxU44moWy2MkuMPJEGa4Vrk7KYhBsU+isw3MfER8D/oOtebgrnBoUPbK3b8k1S1r5EZ8W0ejzGHwWuoQUkE87bPoWODwTeLg8uRT6TRhEqzt73o2A+NqE8z8GRStcpxbsfLb6O6lkqr95uj5sU5cGM2nE/DsOzoZN4uli1J9gxGY/xm79nGAjUXE9Im3G4Od05MlR1dXS4Thn1fX9opbYnH+ae+kbdHvq//xjj3fEGjxBaEYwf9QcRvTzMQ/6uw8wuwvMqRh2qAOhJJzA6PPkhwg+hvKL1yccN5lk85NClQT6+VMHpDMPd64FdfKIDEnAJ/igskV/PRKvorEAMyzT0+LjMD/89z8hk4jWPxsAAA==";
73
+ const decodedCatalog = gunzipSync(Buffer.from(CATALOG, "base64")).toString("utf8");
74
+ const emittedReasons = JSON.parse(gunzipSync(Buffer.from(EMITTED_REASON_CATALOG, "base64")).toString("utf8"));
75
+ const rawTuples = JSON.parse(decodedCatalog.slice(decodedCatalog.indexOf("[", 2)).replace(/,\s*]$/, "]"));
76
+ const addedTuples = [
77
+ { class: "state", surface_id: "write:plan.replace", owner_path: "packages/cli/src/state/write/runtimeOperations.ts", owner_symbol_or_selector: "runtimeOperationSpecs", owner_selector: "plan.replace", semantic_selector_if_any: null, canonical_correction: "node packages/cli/dist/bin/agentera.js check validate state --format json" },
78
+ { class: "state", surface_id: "write:todo.activate", owner_path: "packages/cli/src/state/write/runtimeOperations.ts", owner_symbol_or_selector: "runtimeOperationSpecs", owner_selector: "todo.activate", semantic_selector_if_any: null, canonical_correction: "node packages/cli/dist/bin/agentera.js check validate state --format json" },
79
+ { class: "state", surface_id: "write:todo.correct-owners", owner_path: "packages/cli/src/state/write/runtimeOperations.ts", owner_symbol_or_selector: "runtimeOperationSpecs", owner_selector: "todo.correct-owners", semantic_selector_if_any: null, canonical_correction: "node packages/cli/dist/bin/agentera.js check validate state --format json" },
80
+ { class: "state", surface_id: "write:todo.repair", owner_path: "packages/cli/src/state/write/runtimeOperations.ts", owner_symbol_or_selector: "runtimeOperationSpecs", owner_selector: "todo.repair", semantic_selector_if_any: null, canonical_correction: "node packages/cli/dist/bin/agentera.js check validate state --format json" },
81
+ { class: "package", surface_id: "emitted:packages/cli/src/cli/commands/doctor.ts", owner_path: "packages/cli/src/registries/packageRegistry.ts", owner_symbol_or_selector: "loadRegistry", owner_selector: "packages/cli/src/cli/commands/doctor.ts", semantic_selector_if_any: JSON.stringify({ path: "packages/cli/src/cli/commands/doctor.ts", selector: null, format: null, classification: null, reason: "Doctor project-state signals publish bounded reconciliation preview and apply guidance." }), canonical_correction: "pnpm -C packages/cli run verify:package" },
82
+ { class: "package", surface_id: "emitted:packages/cli/src/state/todoReconciliationInspection.ts", owner_path: "packages/cli/src/registries/packageRegistry.ts", owner_symbol_or_selector: "loadRegistry", owner_selector: "packages/cli/src/state/todoReconciliationInspection.ts", semantic_selector_if_any: JSON.stringify({ path: "packages/cli/src/state/todoReconciliationInspection.ts", selector: null, format: null, classification: null, reason: "TODO reconciliation inspection publishes bounded preview and effect-bound apply guidance." }), canonical_correction: "pnpm -C packages/cli run verify:package" },
83
+ { class: "package", surface_id: "generated:build-source-identity", owner_path: "packages/cli/src/registries/packageRegistry.ts", owner_symbol_or_selector: "loadRegistry", owner_selector: ".agentera-build-source.json", semantic_selector_if_any: JSON.stringify({ path: ".agentera-build-source.json", selector: null, format: "json", classification: "active", reason: "Build-generated source identity binds constructed dist and bundle output to one Git commit, tree, and exact working-tree digest; no source copy exists." }), canonical_correction: "pnpm -C packages/cli run verify:package" },
84
+ {
85
+ class: "reference",
86
+ surface_id: "references/analysis/personal-glossary-evaluation-authority.yaml",
87
+ owner_path: "packages/cli/src/eval/glossaryEvaluation.ts",
88
+ owner_symbol_or_selector: "loadGlossaryEvaluationAuthority",
89
+ owner_selector: "references/analysis/personal-glossary-evaluation-authority.yaml",
90
+ semantic_selector_if_any: null,
91
+ canonical_correction: "node packages/cli/dist/bin/agentera.js check validate retained-references --format json",
92
+ },
93
+ {
94
+ class: "reference",
95
+ surface_id: "references/analysis/personal-glossary-holdout.yaml",
96
+ owner_path: "packages/cli/src/eval/glossaryEvaluation.ts",
97
+ owner_symbol_or_selector: "loadGlossaryEvaluationHoldout",
98
+ owner_selector: "references/analysis/personal-glossary-holdout.yaml",
99
+ semantic_selector_if_any: null,
100
+ canonical_correction: "node packages/cli/dist/bin/agentera.js check validate retained-references --format json",
101
+ },
102
+ {
103
+ class: "reference",
104
+ surface_id: "references/analysis/personal-glossary-evaluation-corpus.yaml",
105
+ owner_path: "packages/cli/src/eval/glossaryEvaluation.ts",
106
+ owner_symbol_or_selector: "loadGlossaryEvaluationBehaviorFixture",
107
+ owner_selector: "references/analysis/personal-glossary-evaluation-corpus.yaml",
108
+ semantic_selector_if_any: null,
109
+ canonical_correction: "node packages/cli/dist/bin/agentera.js check validate retained-references --format json",
110
+ },
111
+ ];
112
+ const tuples = [...rawTuples, ...addedTuples].map((tuple) => {
113
+ const reason = emittedReasons[tuple.surface_id];
114
+ if (tuple.class !== "package" || reason === undefined || tuple.semantic_selector_if_any === null)
115
+ return tuple;
116
+ const semantic = JSON.parse(tuple.semantic_selector_if_any);
117
+ return { ...tuple, semantic_selector_if_any: JSON.stringify({ ...semantic, reason }) };
118
+ });
119
+ export const ACTIVATION_CANONICAL_TUPLES = Object.freeze(tuples.map((tuple) => Object.freeze(tuple)));
120
+ export const ACTIVATION_TUPLE_AUTHORITY = Object.freeze({
121
+ algorithm: "sha256(sorted_canonical_json_tuples_joined_by_lf)",
122
+ classes: {
123
+ cli: { count: 27, sha256: "9d0db6cafe592da30ea3469c91dc514bdd1b3b22e8229a0519e680cbcb01c2fa" },
124
+ capability: { count: 12, sha256: "892e6e5e2a57b41064bc44fa2946453225f1b1195aff77aad05365fd0a1071c2" },
125
+ runtime: { count: 81, sha256: "99b2abff3ebff889b54b1781c563ab4b32609a479c4e90d6aad854f48fba7edc" },
126
+ reference: { count: 25, sha256: "2a40b8a8585933417a6e66a350c9ad68050288600cdac1e7f44b914e7022565c" },
127
+ state: { count: 38, sha256: "697de8dcd13ac521124c35058ba222aa5cb6cae546f00bb54652ceaca4b662aa" },
128
+ package: { count: 67, sha256: "5dbe325af5ffb29a1ea50534070d08fcff647d4d9ef5654b4ce03d76eeaa8adb" },
129
+ bootstrap: { count: 34, sha256: "9a7dd7e27110d85cf5c08835fdd8f08119e75579858e63bc6d396c733961d0bc" },
130
+ },
131
+ total: { count: 284, sha256: "6b0d109f9d833598dcd1ec5b21cbc57e80ee8f21a0e5b61ca8aa420c6d32eb60" },
132
+ });
133
+ export function canonicalTupleJson(value) { return JSON.stringify(value); }
134
+ export function digestCanonicalTuples(values) {
135
+ return createHash("sha256").update(values.map(canonicalTupleJson).sort().join("\n"), "utf8").digest("hex");
136
+ }
@@ -14,6 +14,7 @@ export const ARTIFACT_PROTOCOL_PATHS = {
14
14
  todo: "TODO.md",
15
15
  changelog: "CHANGELOG.md",
16
16
  design: "DESIGN.md",
17
+ glossary: ".agentera/glossary.yaml",
17
18
  };
18
19
  export const HUMAN_FACING_ARTIFACT_IDS = new Set(["todo", "changelog", "design"]);
19
20
  export const TRACKED_ARTIFACT_IDS = [
@@ -37,6 +38,7 @@ export const VALIDATE_ARTIFACT_PROTOCOL_IDS = [
37
38
  "progress",
38
39
  "todo",
39
40
  "vision",
41
+ "glossary",
40
42
  ];
41
43
  function artifactProtocolStem(input) {
42
44
  const lower = input.trim().toLowerCase();
@@ -74,4 +76,3 @@ export function normalizeArtifactMappingKeys(mapping) {
74
76
  }
75
77
  return out;
76
78
  }
77
- //# sourceMappingURL=artifactProtocolIds.js.map
@@ -6,6 +6,7 @@ import { resolveProfileDirOverride } from "../core/envPaths.js";
6
6
  import { resolvePath } from "../core/paths.js";
7
7
  import { resolveSourceRoot } from "../core/sourceRoot.js";
8
8
  import { resolveCandidate } from "../state/installRoot.js";
9
+ import { ARTIFACT_PROTOCOL_PATHS } from "./artifactProtocolIds.js";
9
10
  function sourceRoot() {
10
11
  return resolveSourceRoot();
11
12
  }
@@ -37,12 +38,11 @@ export function normalizePath(p) {
37
38
  s = s.replace(/<objective-name>/g, "<name>");
38
39
  return s.trim();
39
40
  }
40
- const CONTROL_CHAR_RE = /[\x00-\x1f\x7f]/;
41
41
  const URI_SCHEME_RE = /^[A-Za-z][A-Za-z0-9+.-]*:/;
42
42
  const ENCODED_TRAVERSAL_RE = /%(?:2e|2f|5c)/i;
43
43
  const WINDOWS_DRIVE_RE = /^[A-Za-z]:[\\/]/;
44
44
  function rejectUnsafeArtifactPath(p, artifactId) {
45
- if (CONTROL_CHAR_RE.test(p)) {
45
+ if ([...p].some((char) => char.charCodeAt(0) <= 31 || char.charCodeAt(0) === 127)) {
46
46
  throw new Error(`artifact '${artifactId}' path contains control characters`);
47
47
  }
48
48
  if (ENCODED_TRAVERSAL_RE.test(p)) {
@@ -69,34 +69,140 @@ function projectPath(projectRoot, artifactPath, artifactId) {
69
69
  return resolved;
70
70
  }
71
71
  export const EXPECTED_ARTIFACT_SCHEMA_VERSION = "1.0.0";
72
- function schemaMetas(dir) {
73
- const metas = new Map();
72
+ function readSchemaMeta(file) {
73
+ const meta = loadYaml(file).meta;
74
+ if (!meta || typeof meta !== "object" || Array.isArray(meta)) {
75
+ return null;
76
+ }
77
+ return meta;
78
+ }
79
+ function warnMalformedSchemaMeta(name) {
80
+ process.stderr.write(`warning: artifact schema ${name} is missing meta; expected v3 schema version ${EXPECTED_ARTIFACT_SCHEMA_VERSION}\n`);
81
+ }
82
+ function warnSchemaVersionMismatch(meta, name) {
83
+ const version = String(meta.version ?? "").trim();
84
+ if (!version || version !== EXPECTED_ARTIFACT_SCHEMA_VERSION) {
85
+ const reported = version || "(missing)";
86
+ process.stderr.write(`warning: artifact schema ${name} version ${reported} does not match expected v3 schema version ${EXPECTED_ARTIFACT_SCHEMA_VERSION}\n`);
87
+ }
88
+ }
89
+ function listSchemaFiles(dir) {
74
90
  if (!fs.existsSync(dir) || !fs.statSync(dir).isDirectory()) {
75
- return metas;
91
+ return [];
76
92
  }
77
- const files = fs
93
+ return fs
78
94
  .readdirSync(dir)
79
95
  .filter((name) => name.endsWith(".yaml"))
80
96
  .sort();
81
- for (const name of files) {
82
- const meta = loadYaml(path.join(dir, name)).meta;
83
- if (!meta || typeof meta !== "object" || Array.isArray(meta)) {
84
- process.stderr.write(`warning: artifact schema ${name} is missing meta; expected v3 schema version ${EXPECTED_ARTIFACT_SCHEMA_VERSION}\n`);
97
+ }
98
+ /**
99
+ * Full schema-meta index over an artifact schemas directory. Emits malformed-meta
100
+ * and version-mismatch warnings for every schema file; the full loader relies on
101
+ * this strict coverage to surface drift across the whole identity set.
102
+ */
103
+ function schemaMetas(dir) {
104
+ const metas = new Map();
105
+ for (const name of listSchemaFiles(dir)) {
106
+ const meta = readSchemaMeta(path.join(dir, name));
107
+ if (!meta) {
108
+ warnMalformedSchemaMeta(name);
85
109
  continue;
86
110
  }
87
- const m = meta;
88
- const version = String(m.version ?? "").trim();
89
- if (!version || version !== EXPECTED_ARTIFACT_SCHEMA_VERSION) {
90
- const reported = version || "(missing)";
91
- process.stderr.write(`warning: artifact schema ${name} version ${reported} does not match expected v3 schema version ${EXPECTED_ARTIFACT_SCHEMA_VERSION}\n`);
92
- }
93
- const artifactId = String(m.name ?? "").trim();
111
+ warnSchemaVersionMismatch(meta, name);
112
+ const artifactId = String(meta.name ?? "").trim();
94
113
  if (artifactId) {
95
- metas.set(artifactId, m);
114
+ metas.set(artifactId, meta);
96
115
  }
97
116
  }
98
117
  return metas;
99
118
  }
119
+ /**
120
+ * Targeted schema-meta lookup for a single artifact identity. Walks the schemas
121
+ * directory only to find the file whose `meta.name` matches `artifactId`, and
122
+ * emits warnings only for that schema. Unrelated malformed or version-mismatched
123
+ * schemas in the same directory stay silent so callers resolving a single
124
+ * identity (e.g. `profile`) don't fan out noise across the required-identity set.
125
+ */
126
+ function loadSchemaMetaForArtifact(dir, artifactId) {
127
+ for (const name of listSchemaFiles(dir)) {
128
+ let meta;
129
+ try {
130
+ meta = readSchemaMeta(path.join(dir, name));
131
+ }
132
+ catch {
133
+ continue;
134
+ }
135
+ if (!meta)
136
+ continue;
137
+ if (String(meta.name ?? "").trim() !== artifactId)
138
+ continue;
139
+ warnSchemaVersionMismatch(meta, name);
140
+ return meta;
141
+ }
142
+ return null;
143
+ }
144
+ function findRequiredIdentity(model, artifactId) {
145
+ const identities = (model.required_artifact_identities ?? {});
146
+ for (const [scope, identityList] of Object.entries(identities)) {
147
+ if (!Array.isArray(identityList))
148
+ continue;
149
+ for (const identity of identityList) {
150
+ if (!identity || typeof identity !== "object" || Array.isArray(identity))
151
+ continue;
152
+ const id = identity;
153
+ if (String(id.artifact_id ?? "").trim() === artifactId) {
154
+ return { scope, identity: id };
155
+ }
156
+ }
157
+ }
158
+ return null;
159
+ }
160
+ function findSpecialCase(model, artifactId) {
161
+ const specialCases = (model.explicit_special_cases ?? []);
162
+ for (const special of specialCases) {
163
+ if (!special || typeof special !== "object" || Array.isArray(special))
164
+ continue;
165
+ const sp = special;
166
+ if (String(sp.artifact_id ?? "").trim() === artifactId) {
167
+ return sp;
168
+ }
169
+ }
170
+ return null;
171
+ }
172
+ function buildRequiredRecord(scope, identity, meta) {
173
+ const template = identity.path_template;
174
+ return {
175
+ artifactId: String(identity.artifact_id ?? "").trim(),
176
+ displayName: String(identity.display_name ?? "").trim(),
177
+ defaultPath: normalizePath(String(identity.default_path ?? meta.path ?? "")),
178
+ producers: asSet(meta.producer),
179
+ consumers: asSet(meta.consumers),
180
+ artifactType: String(meta.artifact_type ?? "").trim(),
181
+ scope: String(scope),
182
+ pathTemplate: template && typeof template === "object" && !Array.isArray(template)
183
+ ? template
184
+ : null,
185
+ docsYamlCanOverridePath: true,
186
+ implementationStatus: String(meta.implementation_status ?? "implemented").trim(),
187
+ };
188
+ }
189
+ function buildSpecialCaseRecord(sp) {
190
+ const template = sp.path_template;
191
+ return {
192
+ artifactId: String(sp.artifact_id ?? "").trim(),
193
+ displayName: String(sp.display_name ?? "").trim(),
194
+ defaultPath: normalizePath(String(sp.default_path ?? "")),
195
+ producers: asSet(sp.producers),
196
+ consumers: asSet(sp.consumers),
197
+ artifactType: String(sp.artifact_type ?? "").trim(),
198
+ scope: String(sp.scope ?? "").trim(),
199
+ pathTemplate: template && typeof template === "object" && !Array.isArray(template)
200
+ ? template
201
+ : null,
202
+ docsYamlCanOverridePath: Boolean(sp.docs_yaml_can_override_path),
203
+ implementationStatus: String(sp.implementation_status ?? "implemented").trim(),
204
+ };
205
+ }
100
206
  export function loadArtifactRegistry(artifactSchemasDirPath = artifactSchemasDir(), registryModelPathArg = registryModelPath()) {
101
207
  const model = loadYaml(registryModelPathArg);
102
208
  const metas = schemaMetas(artifactSchemasDirPath);
@@ -120,20 +226,7 @@ export function loadArtifactRegistry(artifactSchemasDirPath = artifactSchemasDir
120
226
  process.stderr.write(`warning: required artifact identity '${artifactId}' has no matching schema file in ${artifactSchemasDirPath}\n`);
121
227
  continue;
122
228
  }
123
- const template = id.path_template;
124
- records.set(artifactId, {
125
- artifactId,
126
- displayName: String(id.display_name ?? "").trim(),
127
- defaultPath: normalizePath(String(id.default_path ?? meta.path ?? "")),
128
- producers: asSet(meta.producer),
129
- consumers: asSet(meta.consumers),
130
- artifactType: String(meta.artifact_type ?? "").trim(),
131
- scope: String(scope),
132
- pathTemplate: template && typeof template === "object" && !Array.isArray(template)
133
- ? template
134
- : null,
135
- docsYamlCanOverridePath: true,
136
- });
229
+ records.set(artifactId, buildRequiredRecord(scope, id, meta));
137
230
  }
138
231
  }
139
232
  const specialCases = (model.explicit_special_cases ?? []);
@@ -146,57 +239,109 @@ export function loadArtifactRegistry(artifactSchemasDirPath = artifactSchemasDir
146
239
  if (!artifactId) {
147
240
  continue;
148
241
  }
149
- const template = sp.path_template;
150
- records.set(artifactId, {
151
- artifactId,
152
- displayName: String(sp.display_name ?? "").trim(),
153
- defaultPath: normalizePath(String(sp.default_path ?? "")),
154
- producers: asSet(sp.producers),
155
- consumers: asSet(sp.consumers),
156
- artifactType: String(sp.artifact_type ?? "").trim(),
157
- scope: String(sp.scope ?? "").trim(),
158
- pathTemplate: template && typeof template === "object" && !Array.isArray(template)
159
- ? template
160
- : null,
161
- docsYamlCanOverridePath: Boolean(sp.docs_yaml_can_override_path),
162
- });
242
+ records.set(artifactId, buildSpecialCaseRecord(sp));
163
243
  }
164
244
  return records;
165
245
  }
166
- export function loadDocsPathOverrides(projectRoot) {
167
- const docsPath = path.join(projectRoot, ".agentera", "docs.yaml");
168
- if (!fs.existsSync(docsPath)) {
169
- return {};
246
+ /**
247
+ * Targeted lookup of a single artifact record. Resolves against the same
248
+ * model/schema authority as `loadArtifactRegistry` but inspects only the
249
+ * requested identity, so a special case such as `profile` loads without
250
+ * walking or warning about unrelated required schemas. A requested required
251
+ * identity still warns and returns `undefined` when its matching schema file is
252
+ * missing from the schemas directory.
253
+ */
254
+ export function loadArtifactRecord(artifactId, artifactSchemasDirPath = artifactSchemasDir(), registryModelPathArg = registryModelPath()) {
255
+ const model = loadYaml(registryModelPathArg);
256
+ const specialCase = findSpecialCase(model, artifactId);
257
+ if (specialCase) {
258
+ return buildSpecialCaseRecord(specialCase);
259
+ }
260
+ const required = findRequiredIdentity(model, artifactId);
261
+ if (!required) {
262
+ return undefined;
170
263
  }
264
+ const meta = loadSchemaMetaForArtifact(artifactSchemasDirPath, artifactId);
265
+ if (!meta) {
266
+ process.stderr.write(`warning: required artifact identity '${artifactId}' has no matching schema file in ${artifactSchemasDirPath}\n`);
267
+ return undefined;
268
+ }
269
+ return buildRequiredRecord(required.scope, required.identity, meta);
270
+ }
271
+ export function docsPathOverridesFromBytes(bytes, strict = false) {
171
272
  let data;
172
273
  try {
173
- data = loadYamlMapping(fs.readFileSync(docsPath, "utf8"));
274
+ data = loadYamlMapping(bytes.toString());
174
275
  }
175
276
  catch (exc) {
277
+ if (strict)
278
+ throw new Error(`failed to load docs path overrides: ${exc.message}`);
176
279
  process.stderr.write(`warning: failed to load docs path overrides: ${exc.message}\n`);
177
280
  return {};
178
281
  }
179
282
  const mapping = data.mapping;
180
283
  if (!Array.isArray(mapping)) {
284
+ if (strict && mapping !== undefined)
285
+ throw new Error("failed to load docs path overrides: mapping must be a list");
181
286
  return {};
182
287
  }
183
288
  const overrides = {};
184
289
  for (const entry of mapping) {
185
290
  if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
291
+ if (strict)
292
+ throw new Error("failed to load docs path overrides: every mapping entry must be a mapping");
186
293
  continue;
187
294
  }
188
295
  const e = entry;
189
- const artifact = e.artifact;
190
- const p = e.path;
191
- if (typeof artifact === "string" && typeof p === "string") {
192
- overrides[artifact] = p;
193
- }
296
+ if (typeof e.artifact === "string" && typeof e.path === "string")
297
+ overrides[e.artifact] = e.path;
298
+ else if (strict)
299
+ throw new Error("failed to load docs path overrides: every mapping entry requires string artifact and path fields");
194
300
  }
195
301
  return overrides;
196
302
  }
197
- export function resolveArtifactPath(record, projectRoot, activeObjectiveName = null, env = process.env) {
303
+ export function loadDocsPathOverrides(projectRoot, strict = false) {
304
+ const docsPath = path.join(projectRoot, ARTIFACT_PROTOCOL_PATHS.docs);
305
+ if (!fs.existsSync(docsPath)) {
306
+ return {};
307
+ }
308
+ let bytes;
309
+ try {
310
+ bytes = fs.readFileSync(docsPath);
311
+ }
312
+ catch (exc) {
313
+ if (strict)
314
+ throw new Error(`failed to load docs path overrides: ${exc.message}`);
315
+ process.stderr.write(`warning: failed to load docs path overrides: ${exc.message}\n`);
316
+ return {};
317
+ }
318
+ return docsPathOverridesFromBytes(bytes, strict);
319
+ }
320
+ function nearestExistingAncestor(p) {
321
+ let current = p;
322
+ while (!fs.existsSync(current)) {
323
+ const parent = path.dirname(current);
324
+ if (parent === current)
325
+ break;
326
+ current = parent;
327
+ }
328
+ return fs.realpathSync.native(current);
329
+ }
330
+ export function assertRealpathBoundary(projectRoot, artifactPath, artifactId) {
331
+ const projectReal = nearestExistingAncestor(resolvePath(projectRoot));
332
+ const ancestorReal = nearestExistingAncestor(artifactPath);
333
+ const rel = path.relative(projectReal, ancestorReal);
334
+ if (rel !== "" && (rel.startsWith("..") || path.isAbsolute(rel))) {
335
+ throw new Error(`artifact '${artifactId}' path escapes the project boundary`);
336
+ }
337
+ }
338
+ export function resolveArtifactPath(record, projectRoot, activeObjectiveNameOrOptions = null, env = process.env) {
339
+ const options = typeof activeObjectiveNameOrOptions === "object" && activeObjectiveNameOrOptions !== null
340
+ ? activeObjectiveNameOrOptions
341
+ : { activeObjectiveName: activeObjectiveNameOrOptions };
342
+ const activeObjectiveName = options.activeObjectiveName ?? null;
198
343
  let artifactPath = record.defaultPath;
199
- const overrides = loadDocsPathOverrides(projectRoot);
344
+ const overrides = options.docsPathOverrides ?? loadDocsPathOverrides(projectRoot, options.strictWrite === true);
200
345
  if (record.docsYamlCanOverridePath && record.displayName in overrides) {
201
346
  artifactPath = overrides[record.displayName];
202
347
  }
@@ -215,6 +360,8 @@ export function resolveArtifactPath(record, projectRoot, activeObjectiveName = n
215
360
  return path.join(base, suffix);
216
361
  }
217
362
  }
218
- return projectPath(projectRoot, artifactPath, record.artifactId);
363
+ const resolved = projectPath(projectRoot, artifactPath, record.artifactId);
364
+ if (options.strictWrite)
365
+ assertRealpathBoundary(projectRoot, resolved, record.artifactId);
366
+ return resolved;
219
367
  }
220
- //# sourceMappingURL=artifactRegistry.js.map
@@ -0,0 +1,45 @@
1
+ const FIELD_SKIP = new Set([
2
+ "meta",
3
+ "GROUP_PREFIXES",
4
+ "BUDGET",
5
+ "COMPACTION",
6
+ "VALIDATION",
7
+ "ARCHIVE",
8
+ "CONVENTION",
9
+ "CONVENTIONS",
10
+ ]);
11
+ function mapping(value) {
12
+ return Boolean(value && typeof value === "object" && !Array.isArray(value));
13
+ }
14
+ export function artifactSchemaFieldDescription(entry, group) {
15
+ return {
16
+ id: entry.id ?? null,
17
+ group,
18
+ field: entry.field ?? null,
19
+ ...(typeof entry.path === "string" ? { path: entry.path } : {}),
20
+ type: entry.type ?? "unknown",
21
+ required: "required" in entry ? entry.required : "unknown",
22
+ format: entry.format ?? null,
23
+ validation: entry.validation ?? [],
24
+ ...(entry.accepted_forms !== undefined ? { accepted_forms: structuredClone(entry.accepted_forms) } : {}),
25
+ ...(entry.normalization !== undefined ? { normalization: structuredClone(entry.normalization) } : {}),
26
+ ...(entry.write_operations !== undefined ? { write_operations: structuredClone(entry.write_operations) } : {}),
27
+ };
28
+ }
29
+ export function describeArtifactSchemaFields(schema) {
30
+ const fields = [];
31
+ for (const [group, value] of Object.entries(schema)) {
32
+ if (FIELD_SKIP.has(group) || !mapping(value))
33
+ continue;
34
+ for (const entry of Object.values(value)) {
35
+ if (mapping(entry) && "field" in entry)
36
+ fields.push(artifactSchemaFieldDescription(entry, group));
37
+ }
38
+ }
39
+ return fields;
40
+ }
41
+ export function artifactSchemaFieldsForOperation(schema, verb) {
42
+ if (!schema)
43
+ return [];
44
+ return describeArtifactSchemaFields(schema).filter((field) => Array.isArray(field.write_operations) && field.write_operations.includes(verb));
45
+ }