agentera 3.0.0-dev.8 → 3.0.0-dev.81

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 (725) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +252 -22
  3. package/bundle/.agentera-build-source.json +8 -0
  4. package/bundle/CHANGELOG.md +1389 -0
  5. package/bundle/DESIGN.md +229 -0
  6. package/bundle/LICENSE +201 -0
  7. package/bundle/README.md +142 -0
  8. package/bundle/UPGRADE.md +275 -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 +443 -188
  13. package/bundle/references/adapters/package-surface-characterization.md +68 -34
  14. package/bundle/references/adapters/product-v1-reset.yaml +101 -0
  15. package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
  16. package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
  17. package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
  18. package/bundle/references/adapters/runtime-retired-resources.yaml +357 -0
  19. package/bundle/references/analysis/evidence-tier-authority.yaml +559 -0
  20. package/bundle/references/analysis/personal-glossary-evaluation-authority.yaml +175 -0
  21. package/bundle/references/analysis/personal-glossary-evaluation-corpus.yaml +291 -0
  22. package/bundle/references/analysis/personal-glossary-holdout.yaml +192 -0
  23. package/bundle/references/analysis/verification-policy.yaml +262 -0
  24. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +17 -8
  25. package/bundle/references/artifacts/glossary-entry-contract.yaml +2906 -0
  26. package/bundle/references/artifacts/state-storage-authority.yaml +3075 -0
  27. package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
  28. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +3 -4
  29. package/bundle/references/cli/capability-instruction-contract.yaml +11 -14
  30. package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
  31. package/bundle/references/cli/routing-model.md +152 -93
  32. package/bundle/references/cli/trigger-schema-enrichment.md +57 -46
  33. package/bundle/references/cli/update-channels.yaml +7 -5
  34. package/bundle/references/cli/vocabulary-index.yaml +7 -9
  35. package/bundle/references/cli/vocabulary.md +54 -97
  36. package/bundle/references/meta/retained-reference-authority.yaml +171 -0
  37. package/bundle/skills/agentera/SKILL.md +183 -63
  38. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +27 -19
  39. package/bundle/skills/agentera/capabilities/audit/schemas/exit.yaml +2 -2
  40. package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +13 -35
  41. package/bundle/skills/agentera/capabilities/audit/schemas/validation.yaml +30 -11
  42. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +44 -21
  43. package/bundle/skills/agentera/capabilities/build/schemas/exit.yaml +8 -6
  44. package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +14 -36
  45. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +95 -21
  46. package/bundle/skills/agentera/capabilities/design/schemas/artifacts.yaml +6 -6
  47. package/bundle/skills/agentera/capabilities/design/schemas/exit.yaml +5 -5
  48. package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +5 -34
  49. package/bundle/skills/agentera/capabilities/design/schemas/validation.yaml +2 -2
  50. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +17 -13
  51. package/bundle/skills/agentera/capabilities/discuss/schemas/exit.yaml +2 -2
  52. package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +6 -40
  53. package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +72 -5
  54. package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +24 -17
  55. package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +5 -35
  56. package/bundle/skills/agentera/capabilities/document/schemas/validation.yaml +13 -13
  57. package/bundle/skills/agentera/capabilities/optimize/schemas/artifacts.yaml +10 -10
  58. package/bundle/skills/agentera/capabilities/optimize/schemas/exit.yaml +2 -2
  59. package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +4 -35
  60. package/bundle/skills/agentera/capabilities/optimize/schemas/validation.yaml +3 -3
  61. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +34 -22
  62. package/bundle/skills/agentera/capabilities/orchestrate/schemas/exit.yaml +9 -7
  63. package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +5 -37
  64. package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +38 -37
  65. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +20 -16
  66. package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +8 -31
  67. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +66 -6
  68. package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +13 -4
  69. package/bundle/skills/agentera/capabilities/profile/schemas/exit.yaml +8 -5
  70. package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +8 -37
  71. package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +67 -3
  72. package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +6 -6
  73. package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +5 -29
  74. package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +13 -12
  75. package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +7 -49
  76. package/bundle/skills/agentera/capabilities/vision/schemas/artifacts.yaml +8 -8
  77. package/bundle/skills/agentera/capabilities/vision/schemas/exit.yaml +7 -6
  78. package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +7 -39
  79. package/bundle/skills/agentera/capabilities/vision/schemas/validation.yaml +14 -16
  80. package/bundle/skills/agentera/capability_schema_contract.yaml +32 -32
  81. package/bundle/skills/agentera/protocol.yaml +4 -4
  82. package/bundle/skills/agentera/route-phrases.yaml +81 -0
  83. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +1 -0
  84. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +29 -30
  85. package/bundle/skills/agentera/schemas/artifacts/design.yaml +1 -0
  86. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +7 -43
  87. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +140 -34
  88. package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +87 -0
  89. package/bundle/skills/agentera/schemas/artifacts/health.yaml +53 -51
  90. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +18 -35
  91. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +453 -55
  92. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +128 -39
  93. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +305 -7
  94. package/bundle/skills/agentera/schemas/artifacts/vision.yaml +0 -19
  95. package/dist/.agentera-build-source.json +8 -0
  96. package/dist/analytics/extractCorpus/cli.js +52 -11
  97. package/dist/analytics/extractCorpus/copilotSessions.js +19 -8
  98. package/dist/analytics/extractCorpus/core.js +262 -14
  99. package/dist/analytics/extractCorpus/corpus.js +57 -18
  100. package/dist/analytics/extractCorpus/coverageAudit.js +44 -45
  101. package/dist/analytics/extractCorpus/cursorSessions.js +28 -8
  102. package/dist/analytics/extractCorpus/evidenceTiers.js +709 -0
  103. package/dist/analytics/extractCorpus/extractCorpusParity.js +4 -4
  104. package/dist/analytics/extractCorpus/filesystemSources.js +5 -5
  105. package/dist/analytics/extractCorpus/index.js +4 -2
  106. package/dist/analytics/extractCorpus/jsonlSessions.js +76 -8
  107. package/dist/analytics/extractCorpus/sqliteCaps.js +0 -1
  108. package/dist/analytics/extractCorpus/sqliteSessions.js +12 -4
  109. package/dist/analytics/extractCorpus/tierReader.js +108 -0
  110. package/dist/analytics/extractCorpus.js +0 -1
  111. package/dist/analytics/glossaryAdviceResolution.js +166 -0
  112. package/dist/analytics/glossaryInputAcquisition.js +319 -0
  113. package/dist/analytics/personalGlossaryAdmission.js +113 -0
  114. package/dist/analytics/personalGlossaryCandidateProjection.js +788 -0
  115. package/dist/analytics/personalGlossaryCandidateProjectionExcerpts.js +144 -0
  116. package/dist/analytics/personalGlossaryCandidateProjectionModel.js +1 -0
  117. package/dist/analytics/personalGlossaryCandidateReadView.js +23 -0
  118. package/dist/analytics/personalGlossaryCurrentGeneration.js +25 -0
  119. package/dist/analytics/personalGlossaryDecision.js +203 -0
  120. package/dist/analytics/personalGlossaryExplicit.js +788 -0
  121. package/dist/analytics/personalGlossaryExplicitMining.js +285 -0
  122. package/dist/analytics/personalGlossaryExplicitScope.js +41 -0
  123. package/dist/analytics/personalGlossaryExplicitSegments.js +418 -0
  124. package/dist/analytics/personalGlossaryExplicitTypes.js +26 -0
  125. package/dist/analytics/personalGlossaryLexicalClassifier.js +175 -0
  126. package/dist/analytics/personalGlossaryProfile.js +229 -0
  127. package/dist/analytics/personalGlossaryRecurrence.js +618 -0
  128. package/dist/analytics/personalGlossaryRefreshProjection.js +351 -0
  129. package/dist/analytics/personalGlossaryReviewRecordStorage.js +428 -0
  130. package/dist/analytics/personalGlossaryReviewRecords.js +332 -0
  131. package/dist/analytics/profileSignals.js +211 -0
  132. package/dist/analytics/usageStats.js +150 -23
  133. package/dist/audit/terminologyDrift.js +281 -0
  134. package/dist/bin/agentera.js +3 -2
  135. package/dist/capabilities/audit/instructions.js +16 -6
  136. package/dist/capabilities/build/instructions.js +59 -6
  137. package/dist/capabilities/design/instructions.js +3 -4
  138. package/dist/capabilities/discuss/instructions.js +29 -6
  139. package/dist/capabilities/document/instructions.js +11 -6
  140. package/dist/capabilities/index.js +20 -14
  141. package/dist/capabilities/optimize/instructions.js +14 -6
  142. package/dist/capabilities/orchestrate/instructions.js +42 -6
  143. package/dist/capabilities/plan/instructions.js +30 -3
  144. package/dist/capabilities/profile/instructions.js +104 -5
  145. package/dist/capabilities/research/instructions.js +4 -5
  146. package/dist/capabilities/status/instructions.js +15 -6
  147. package/dist/capabilities/status/startupInstructions.js +34 -0
  148. package/dist/capabilities/vision/instructions.js +3 -5
  149. package/dist/cli/appContext.js +14 -7
  150. package/dist/cli/argvalidate.js +0 -1
  151. package/dist/cli/capabilityContext/benchmark.js +5 -4
  152. package/dist/cli/capabilityContext/bespoke.js +14 -6
  153. package/dist/cli/capabilityContext/build.js +116 -42
  154. package/dist/cli/capabilityContext/closeout.js +30 -27
  155. package/dist/cli/capabilityContext/contract.js +18 -27
  156. package/dist/cli/capabilityContext/evidence.js +84 -77
  157. package/dist/cli/capabilityContext/index.js +0 -1
  158. package/dist/cli/capabilityContext/orchestration.js +42 -18
  159. package/dist/cli/capabilityContext/planState.js +89 -96
  160. package/dist/cli/capabilityContext/progress.js +52 -12
  161. package/dist/cli/capabilityContext/projectVerification.js +409 -0
  162. package/dist/cli/capabilityContext/shared.js +9 -20
  163. package/dist/cli/capabilityContext/slim.js +52 -8
  164. package/dist/cli/capabilityContext/startup.js +51 -114
  165. package/dist/cli/capabilityContext/startupAggregation.js +68 -0
  166. package/dist/cli/capabilityContext/types.js +26 -10
  167. package/dist/cli/capabilityContext.js +0 -1
  168. package/dist/cli/commands/appHome.js +0 -1
  169. package/dist/cli/commands/capability.js +2 -2
  170. package/dist/cli/commands/compact.js +163 -13
  171. package/dist/cli/commands/doctor.js +162 -11
  172. package/dist/cli/commands/durability.js +81 -0
  173. package/dist/cli/commands/glossaryAdvice.js +138 -0
  174. package/dist/cli/commands/lint.js +22 -8
  175. package/dist/cli/commands/personalGlossaryCandidateReads.js +755 -0
  176. package/dist/cli/commands/personalGlossaryDecision.js +349 -0
  177. package/dist/cli/commands/personalGlossaryPublish.js +484 -0
  178. package/dist/cli/commands/personalGlossaryReviewRecordReads.js +209 -0
  179. package/dist/cli/commands/personalGlossaryReviewRecords.js +623 -0
  180. package/dist/cli/commands/prime/briefOrientation.js +845 -0
  181. package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
  182. package/dist/cli/commands/prime/bundleStatus.js +54 -4
  183. package/dist/cli/commands/prime/collectEntityOrientation.js +338 -0
  184. package/dist/cli/commands/prime/collectOrientationState.js +124 -68
  185. package/dist/cli/commands/prime/orientationOutput.js +271 -59
  186. package/dist/cli/commands/prime/types.js +0 -1
  187. package/dist/cli/commands/prime.js +89 -11
  188. package/dist/cli/commands/profileGrounding.js +55 -0
  189. package/dist/cli/commands/query.js +74 -52
  190. package/dist/cli/commands/report.js +187 -27
  191. package/dist/cli/commands/route.js +142 -0
  192. package/dist/cli/commands/schema.js +436 -138
  193. package/dist/cli/commands/state/decisions.js +40 -56
  194. package/dist/cli/commands/state/docs.js +58 -85
  195. package/dist/cli/commands/state/experimentRecords.js +151 -0
  196. package/dist/cli/commands/state/experiments.js +11 -65
  197. package/dist/cli/commands/state/get.js +129 -0
  198. package/dist/cli/commands/state/health.js +11 -113
  199. package/dist/cli/commands/state/index.js +6 -41
  200. package/dist/cli/commands/state/list.js +194 -0
  201. package/dist/cli/commands/state/objective.js +21 -65
  202. package/dist/cli/commands/state/plan.js +11 -170
  203. package/dist/cli/commands/state/planTasks.js +154 -0
  204. package/dist/cli/commands/state/plans.js +154 -0
  205. package/dist/cli/commands/state/progress.js +11 -45
  206. package/dist/cli/commands/state/shared.js +0 -1
  207. package/dist/cli/commands/state/todo.js +28 -107
  208. package/dist/cli/commands/state/write.js +459 -0
  209. package/dist/cli/commands/upgrade.js +176 -5
  210. package/dist/cli/commands/upgradeVerify.js +118 -0
  211. package/dist/cli/commands/validate.js +235 -136
  212. package/dist/cli/commands/verify.js +73 -16
  213. package/dist/cli/contracts/bundleStatus.js +0 -1
  214. package/dist/cli/contracts/orientationState.js +0 -1
  215. package/dist/cli/dispatch/argvParser.js +0 -1
  216. package/dist/cli/dispatch/check.js +84 -40
  217. package/dist/cli/dispatch/commands.js +3 -3
  218. package/dist/cli/dispatch/index.js +84 -52
  219. package/dist/cli/dispatch/lifecycle.js +182 -62
  220. package/dist/cli/dispatch/prime.js +37 -2
  221. package/dist/cli/dispatch/projections.js +17 -0
  222. package/dist/cli/dispatch/shared.js +1 -2
  223. package/dist/cli/dispatch/state.js +62 -66
  224. package/dist/cli/dispatch.js +0 -1
  225. package/dist/cli/errors.js +16 -17
  226. package/dist/cli/help.js +419 -41
  227. package/dist/cli/migrationRequired.js +125 -0
  228. package/dist/cli/orientation/attention.js +19 -22
  229. package/dist/cli/orientation/corpusCoverage.js +32 -1
  230. package/dist/cli/orientation.js +346 -129
  231. package/dist/cli/planArtifacts.js +350 -0
  232. package/dist/cli/planEvidence.js +157 -0
  233. package/dist/cli/planLifecycleState.js +36 -0
  234. package/dist/cli/planTaskIndex.js +11 -0
  235. package/dist/cli/preCutoverCommand.js +32 -0
  236. package/dist/cli/prime-blob.js +71 -3
  237. package/dist/cli/productV1Eol.js +55 -0
  238. package/dist/cli/profileAcquisition.js +167 -0
  239. package/dist/cli/startupCompletenessContract.js +11 -9
  240. package/dist/cli/stateQuery.js +47 -12
  241. package/dist/cli/structured.js +0 -1
  242. package/dist/cli/todoMarkdown.js +25 -12
  243. package/dist/cli/todoReadinessSelection.js +192 -0
  244. package/dist/cli/todoSeverity.js +0 -1
  245. package/dist/core/atomicWriter.js +23 -0
  246. package/dist/core/developmentChannel.js +1 -0
  247. package/dist/core/developmentInvocation.js +377 -0
  248. package/dist/core/difflib.js +0 -1
  249. package/dist/core/envPaths.js +0 -1
  250. package/dist/core/jsonValue.js +0 -1
  251. package/dist/core/paths.js +0 -1
  252. package/dist/core/pyjson.js +0 -1
  253. package/dist/core/shell.js +4 -0
  254. package/dist/core/skillIdentity.js +23 -0
  255. package/dist/core/sourceRoot.js +9 -12
  256. package/dist/core/text.js +10 -0
  257. package/dist/core/toml.js +0 -1
  258. package/dist/core/yaml.js +61 -2
  259. package/dist/eval/evalSkills.js +13 -14
  260. package/dist/eval/glossaryEvaluation.js +751 -0
  261. package/dist/eval/glossaryEvaluationProcess.js +29 -0
  262. package/dist/eval/glossaryEvaluationRunner.js +571 -0
  263. package/dist/eval/glossaryEvaluationSuccessReport.js +297 -0
  264. package/dist/eval/hybridRouteEvaluation.js +155 -0
  265. package/dist/eval/semanticEval.js +0 -1
  266. package/dist/eval/semanticFixtures.js +0 -1
  267. package/dist/hooks/common.js +3 -56
  268. package/dist/hooks/compaction/apply.js +224 -47
  269. package/dist/hooks/compaction/dryRun.js +2 -1
  270. package/dist/hooks/compaction/index.js +5 -6
  271. package/dist/hooks/compaction/parse.js +73 -6
  272. package/dist/hooks/compaction/retention.js +28 -25
  273. package/dist/hooks/compaction/status.js +145 -26
  274. package/dist/hooks/compaction/types.js +0 -1
  275. package/dist/hooks/validateArtifact/agentFacing.js +0 -1
  276. package/dist/hooks/validateArtifact/index.js +6 -65
  277. package/dist/hooks/validateArtifact/markdown.js +9 -10
  278. package/dist/hooks/validateArtifact/schema.js +96 -9
  279. package/dist/hooks/validateArtifact/traversal.js +12 -11
  280. package/dist/hooks/validateArtifact/violations.js +5 -3
  281. package/dist/migrate/v2HandoffManifest.js +8 -3
  282. package/dist/registries/activationContract.js +2 -0
  283. package/dist/registries/activationTuples.js +145 -0
  284. package/dist/registries/artifactProtocolIds.js +2 -1
  285. package/dist/registries/artifactRegistry.js +207 -60
  286. package/dist/registries/artifactSchemaProjection.js +45 -0
  287. package/dist/registries/capabilityContract.js +5 -21
  288. package/dist/registries/evaluatorHandoffContract.js +0 -1
  289. package/dist/registries/evidenceTierContract.js +375 -0
  290. package/dist/registries/explicitSegmentGrammarContract.js +619 -0
  291. package/dist/registries/glossaryAdviceContract.js +79 -0
  292. package/dist/registries/glossaryCandidateContractPaths.js +6 -0
  293. package/dist/registries/glossaryCandidateContracts.js +820 -0
  294. package/dist/registries/glossaryCandidateDecisionAuthority.js +119 -0
  295. package/dist/registries/glossaryCandidateDecisionContract.js +62 -0
  296. package/dist/registries/glossaryCandidateProjectionAuthority.js +345 -0
  297. package/dist/registries/glossaryCandidateProjectionContract.js +108 -0
  298. package/dist/registries/glossaryCaveatContract.js +67 -0
  299. package/dist/registries/glossaryConsumerContractValidation.js +787 -0
  300. package/dist/registries/glossaryEntryContract.js +759 -0
  301. package/dist/registries/glossaryEntryTemporal.js +12 -0
  302. package/dist/registries/glossaryMiningAuthority.js +764 -0
  303. package/dist/registries/glossaryProfileFullContract.js +24 -0
  304. package/dist/registries/glossaryReviewRecordsAuthority.js +426 -0
  305. package/dist/registries/glossaryReviewRecordsContract.js +129 -0
  306. package/dist/registries/glossaryTermIdentity.js +139 -0
  307. package/dist/registries/glossaryTermOccurrence.js +20 -0
  308. package/dist/registries/hybridRoute.js +274 -0
  309. package/dist/registries/hybridRouteReceipt.js +221 -0
  310. package/dist/registries/packagePublication.js +273 -0
  311. package/dist/registries/packageRegistry.js +184 -209
  312. package/dist/registries/personalGlossaryContracts.js +1 -0
  313. package/dist/registries/todoReadinessContract.js +448 -0
  314. package/dist/registries/triggerLoader.js +7 -44
  315. package/dist/registries/verbosityBudgetContract.js +205 -0
  316. package/dist/release/releaseMetadata.js +168 -11
  317. package/dist/runtime/lifecycleAdapterContract.js +457 -0
  318. package/dist/runtime/lifecycleAdapters.js +777 -0
  319. package/dist/runtime/lifecycleAuthority.js +453 -0
  320. package/dist/runtime/lifecycleOperationContract.js +123 -0
  321. package/dist/runtime/lifecycleOperations.js +634 -0
  322. package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
  323. package/dist/runtime/lifecyclePublication.js +415 -0
  324. package/dist/runtime/lifecycleSnapshot.js +438 -0
  325. package/dist/runtime/nativeResourceCleanup.js +618 -0
  326. package/dist/setup/opencode.js +20 -13
  327. package/dist/setup/opencodeConstants.js +1 -0
  328. package/dist/setup/sharedSkill.js +45 -0
  329. package/dist/setup/smokeChecks.js +14 -75
  330. package/dist/state/archiveDiscovery.js +580 -0
  331. package/dist/state/archivePublication.js +225 -0
  332. package/dist/state/archiveRecovery.js +237 -0
  333. package/dist/state/archiveReplay.js +53 -0
  334. package/dist/state/canonicalMigrationRecord.js +36 -0
  335. package/dist/state/changelog.js +221 -0
  336. package/dist/state/decisionEntities.js +367 -0
  337. package/dist/state/decisionLegacyValidation.js +215 -0
  338. package/dist/state/decisionMigrationProvenance.js +199 -0
  339. package/dist/state/decisionOverlay.js +254 -0
  340. package/dist/state/decisionRevision.js +256 -0
  341. package/dist/state/decisionRevisionMigration.js +89 -0
  342. package/dist/state/directRetrieval.js +323 -0
  343. package/dist/state/durability.js +324 -0
  344. package/dist/state/entityCutover.js +459 -0
  345. package/dist/state/entityCutoverGit.js +127 -0
  346. package/dist/state/entityGlossaryAuthority.js +13 -0
  347. package/dist/state/entityListProjection.js +187 -0
  348. package/dist/state/entityListRuntimeRegistry.js +85 -0
  349. package/dist/state/entityMigrationCausality.js +97 -0
  350. package/dist/state/entityMigrationIdentity.js +5 -0
  351. package/dist/state/entityMigrationPreview.js +840 -0
  352. package/dist/state/entityMigrationTodo.js +133 -0
  353. package/dist/state/entityPublicationContext.js +859 -0
  354. package/dist/state/entityRetrievalHelp.js +506 -0
  355. package/dist/state/entityStorage.js +894 -0
  356. package/dist/state/entityWriterLock.js +18 -0
  357. package/dist/state/exactReplacementRecovery.js +18 -0
  358. package/dist/state/experimentArchive.js +63 -0
  359. package/dist/state/experimentIdentity.js +202 -0
  360. package/dist/state/healthEntities.js +262 -0
  361. package/dist/state/healthEntityValidation.js +18 -0
  362. package/dist/state/healthRepair.js +69 -0
  363. package/dist/state/installRoot.js +15 -7
  364. package/dist/state/legacyEntityCutoverEvidence.js +65 -0
  365. package/dist/state/legacyIdentity.js +47 -0
  366. package/dist/state/legacySummaryRecord.js +6 -0
  367. package/dist/state/listAccounting.js +54 -0
  368. package/dist/state/listClassification.js +17 -0
  369. package/dist/state/listCursor.js +42 -0
  370. package/dist/state/listRetrieval.js +781 -0
  371. package/dist/state/migrationSourceBinding.js +30 -0
  372. package/dist/state/objectiveExperimentEntities.js +322 -0
  373. package/dist/state/planEntities.js +1027 -0
  374. package/dist/state/planIdentity.js +47 -0
  375. package/dist/state/planLineageValidation.js +52 -0
  376. package/dist/state/planReplacementTransaction.js +475 -0
  377. package/dist/state/planRetrieval.js +313 -0
  378. package/dist/state/planTaskRetrieval.js +294 -0
  379. package/dist/state/progressEntities.js +512 -0
  380. package/dist/state/progressGlossaryCaveat.js +168 -0
  381. package/dist/state/progressPublicationOrder.js +19 -0
  382. package/dist/state/progressWritePolicy.js +33 -0
  383. package/dist/state/projectRoot.js +62 -0
  384. package/dist/state/projectionPolicy.js +190 -0
  385. package/dist/state/retrievalAuthority.js +156 -0
  386. package/dist/state/safeProjectFile.js +155 -0
  387. package/dist/state/startupAnalysis/benchmark.js +70 -9
  388. package/dist/state/startupAnalysis/contract.js +44 -10
  389. package/dist/state/startupAnalysis/helpers.js +1 -2
  390. package/dist/state/startupAnalysis/index.js +0 -1
  391. package/dist/state/startupAnalysis/metrics.js +0 -1
  392. package/dist/state/startupAnalysis/records.js +0 -1
  393. package/dist/state/startupAnalysis/report.js +0 -1
  394. package/dist/state/startupAnalysis/threshold.js +13 -1
  395. package/dist/state/startupAnalysis.js +0 -1
  396. package/dist/state/startupProjection.js +499 -0
  397. package/dist/state/stateMode.js +222 -0
  398. package/dist/state/stateStorageAuthority.js +47 -0
  399. package/dist/state/summaryEntityRead.js +25 -0
  400. package/dist/state/summaryMigrationProvenance.js +66 -0
  401. package/dist/state/summarySourceRowAuthority.js +36 -0
  402. package/dist/state/todoActivationSafety.js +58 -0
  403. package/dist/state/todoCreateBatch.js +69 -0
  404. package/dist/state/todoDocsEntities.js +1339 -0
  405. package/dist/state/todoDocsEntityValidation.js +158 -0
  406. package/dist/state/todoMarkdownProjection.js +63 -0
  407. package/dist/state/todoReconciliationActivation.js +182 -0
  408. package/dist/state/todoReconciliationInspection.js +184 -0
  409. package/dist/state/todoReconciliationRepair.js +320 -0
  410. package/dist/state/todoReconciliationTransaction.js +628 -0
  411. package/dist/state/todoSeverityHeadings.js +71 -0
  412. package/dist/state/todoTransitionBatch.js +65 -0
  413. package/dist/state/todoUpdateBatch.js +50 -0
  414. package/dist/state/write/assign.js +20 -0
  415. package/dist/state/write/candidateMutation.js +269 -0
  416. package/dist/state/write/errors.js +11 -0
  417. package/dist/state/write/experimentPublication.js +192 -0
  418. package/dist/state/write/explain.js +380 -0
  419. package/dist/state/write/fields.js +61 -0
  420. package/dist/state/write/glossaryPublication.js +263 -0
  421. package/dist/state/write/grammar.js +285 -0
  422. package/dist/state/write/helpers.js +29 -0
  423. package/dist/state/write/index.js +12 -0
  424. package/dist/state/write/input.js +391 -0
  425. package/dist/state/write/lock.js +837 -0
  426. package/dist/state/write/mutation.js +234 -0
  427. package/dist/state/write/operations.js +170 -0
  428. package/dist/state/write/planEvaluation.js +128 -0
  429. package/dist/state/write/planPublication.js +179 -0
  430. package/dist/state/write/runtimeOperations.js +146 -0
  431. package/dist/state/write/serialize.js +1 -0
  432. package/dist/state/write/transaction.js +57 -0
  433. package/dist/state/write/validate.js +7 -0
  434. package/dist/upgrade/appContentRefresh.js +77 -36
  435. package/dist/upgrade/appModel.js +0 -1
  436. package/dist/upgrade/atomicWriter.js +1 -0
  437. package/dist/upgrade/bundleEvidence.js +0 -1
  438. package/dist/upgrade/channels.js +6 -9
  439. package/dist/upgrade/compatibility.js +43 -17
  440. package/dist/upgrade/doctor.js +55 -32
  441. package/dist/upgrade/doctorClassifier.js +11 -1
  442. package/dist/upgrade/installedHooksRetirement.js +46 -40
  443. package/dist/upgrade/legacyAgentCleanup.js +133 -34
  444. package/dist/upgrade/lifecycleUpgrade.js +126 -0
  445. package/dist/upgrade/migrateArtifactsV2ToV3.js +325 -82
  446. package/dist/upgrade/migrationPublication.js +122 -0
  447. package/dist/upgrade/nextMajorDoctor.js +0 -22
  448. package/dist/upgrade/npxPlatformStatus.js +2 -2
  449. package/dist/upgrade/productV1Reset.js +515 -0
  450. package/dist/upgrade/productV1ResetAuthority.js +139 -0
  451. package/dist/upgrade/projectIntegration.js +126 -134
  452. package/dist/upgrade/projectIntegrationDecision.js +21 -13
  453. package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
  454. package/dist/upgrade/runtimeMigration.js +210 -430
  455. package/dist/upgrade/upgradeCommands.js +14 -1
  456. package/dist/upgrade/upgradeLock.js +85 -0
  457. package/dist/upgrade/upgradeOrchestrator.js +257 -48
  458. package/dist/upgrade/v3CapabilitySurface.js +2 -3
  459. package/dist/upgrade/versionResolution.js +0 -1
  460. package/dist/validate/activationArtifactEvidence.js +866 -0
  461. package/dist/validate/activationArtifactEvidenceTypes.js +12 -0
  462. package/dist/validate/activationConjunction.js +816 -0
  463. package/dist/validate/activationEvidenceManifest.js +610 -0
  464. package/dist/validate/activationPackageSemantics.js +29 -0
  465. package/dist/validate/appHomeContract.js +1 -7
  466. package/dist/validate/bootstrapAuthority.js +44 -0
  467. package/dist/validate/capability.js +11 -3
  468. package/dist/validate/crossCapability.js +14 -9
  469. package/dist/validate/glossaryVariantGuard.js +96 -0
  470. package/dist/validate/retainedReferenceAuthority.js +879 -0
  471. package/dist/validate/selfAudit.js +39 -45
  472. package/dist/validate/vocabularyAuthority.js +8 -8
  473. package/package.json +39 -13
  474. package/bundle/references/adapters/cursor.md +0 -214
  475. package/bundle/references/adapters/opencode.md +0 -530
  476. package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
  477. package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
  478. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
  479. package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -554
  480. package/bundle/references/adapters/runtime-feature-parity.md +0 -189
  481. package/bundle/references/analysis/benchmark.md +0 -267
  482. package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
  483. package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
  484. package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -369
  485. package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -250
  486. package/bundle/references/cli/capability-tool-classification.yaml +0 -53
  487. package/bundle/references/cli/coexistence-probe.yaml +0 -13
  488. package/bundle/references/cli/parity-expected-actual-template.md +0 -30
  489. package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
  490. package/bundle/references/cli/single-name-protocol.yaml +0 -42
  491. package/bundle/references/cli/upgrade-repair-wording.md +0 -45
  492. package/bundle/references/cli/v3-handoff-manifest.schema.yaml +0 -98
  493. package/bundle/references/meta/documentation-inventory.md +0 -49
  494. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  495. package/bundle/skills/agentera/agents/audit.toml +0 -6
  496. package/bundle/skills/agentera/agents/build.toml +0 -6
  497. package/bundle/skills/agentera/agents/design.toml +0 -6
  498. package/bundle/skills/agentera/agents/discuss.toml +0 -6
  499. package/bundle/skills/agentera/agents/document.toml +0 -6
  500. package/bundle/skills/agentera/agents/optimize.toml +0 -6
  501. package/bundle/skills/agentera/agents/orchestrate.toml +0 -6
  502. package/bundle/skills/agentera/agents/plan.toml +0 -6
  503. package/bundle/skills/agentera/agents/profile.toml +0 -6
  504. package/bundle/skills/agentera/agents/research.toml +0 -6
  505. package/bundle/skills/agentera/agents/status.toml +0 -6
  506. package/bundle/skills/agentera/agents/vision.toml +0 -6
  507. package/bundle/skills/agentera/references/contract.md +0 -1048
  508. package/dist/analytics/extractCorpus/cli.js.map +0 -1
  509. package/dist/analytics/extractCorpus/copilotSessions.js.map +0 -1
  510. package/dist/analytics/extractCorpus/core.js.map +0 -1
  511. package/dist/analytics/extractCorpus/corpus.js.map +0 -1
  512. package/dist/analytics/extractCorpus/coverageAudit.js.map +0 -1
  513. package/dist/analytics/extractCorpus/cursorSessions.js.map +0 -1
  514. package/dist/analytics/extractCorpus/extractCorpusParity.js.map +0 -1
  515. package/dist/analytics/extractCorpus/filesystemSources.js.map +0 -1
  516. package/dist/analytics/extractCorpus/index.js.map +0 -1
  517. package/dist/analytics/extractCorpus/jsonlSessions.js.map +0 -1
  518. package/dist/analytics/extractCorpus/sqliteCaps.js.map +0 -1
  519. package/dist/analytics/extractCorpus/sqliteSessions.js.map +0 -1
  520. package/dist/analytics/extractCorpus.js.map +0 -1
  521. package/dist/analytics/usageStats.js.map +0 -1
  522. package/dist/bin/agentera.js.map +0 -1
  523. package/dist/capabilities/audit/instructions.js.map +0 -1
  524. package/dist/capabilities/build/instructions.js.map +0 -1
  525. package/dist/capabilities/design/instructions.js.map +0 -1
  526. package/dist/capabilities/discuss/instructions.js.map +0 -1
  527. package/dist/capabilities/document/instructions.js.map +0 -1
  528. package/dist/capabilities/index.js.map +0 -1
  529. package/dist/capabilities/optimize/instructions.js.map +0 -1
  530. package/dist/capabilities/orchestrate/instructions.js.map +0 -1
  531. package/dist/capabilities/plan/instructions.js.map +0 -1
  532. package/dist/capabilities/profile/instructions.js.map +0 -1
  533. package/dist/capabilities/research/instructions.js.map +0 -1
  534. package/dist/capabilities/status/instructions.js.map +0 -1
  535. package/dist/capabilities/vision/instructions.js.map +0 -1
  536. package/dist/cli/appContext.js.map +0 -1
  537. package/dist/cli/argvalidate.js.map +0 -1
  538. package/dist/cli/capabilityContext/benchmark.js.map +0 -1
  539. package/dist/cli/capabilityContext/bespoke.js.map +0 -1
  540. package/dist/cli/capabilityContext/build.js.map +0 -1
  541. package/dist/cli/capabilityContext/closeout.js.map +0 -1
  542. package/dist/cli/capabilityContext/contract.js.map +0 -1
  543. package/dist/cli/capabilityContext/evidence.js.map +0 -1
  544. package/dist/cli/capabilityContext/index.js.map +0 -1
  545. package/dist/cli/capabilityContext/orchestration.js.map +0 -1
  546. package/dist/cli/capabilityContext/planState.js.map +0 -1
  547. package/dist/cli/capabilityContext/progress.js.map +0 -1
  548. package/dist/cli/capabilityContext/shared.js.map +0 -1
  549. package/dist/cli/capabilityContext/slim.js.map +0 -1
  550. package/dist/cli/capabilityContext/startup.js.map +0 -1
  551. package/dist/cli/capabilityContext/types.js.map +0 -1
  552. package/dist/cli/capabilityContext.js.map +0 -1
  553. package/dist/cli/commands/appHome.js.map +0 -1
  554. package/dist/cli/commands/capability.js.map +0 -1
  555. package/dist/cli/commands/compact.js.map +0 -1
  556. package/dist/cli/commands/doctor.js.map +0 -1
  557. package/dist/cli/commands/lint.js.map +0 -1
  558. package/dist/cli/commands/prime/bundleStatus.js.map +0 -1
  559. package/dist/cli/commands/prime/collectOrientationState.js.map +0 -1
  560. package/dist/cli/commands/prime/orientationOutput.js.map +0 -1
  561. package/dist/cli/commands/prime/types.js.map +0 -1
  562. package/dist/cli/commands/prime/v1Migration.js +0 -39
  563. package/dist/cli/commands/prime/v1Migration.js.map +0 -1
  564. package/dist/cli/commands/prime.js.map +0 -1
  565. package/dist/cli/commands/query.js.map +0 -1
  566. package/dist/cli/commands/report.js.map +0 -1
  567. package/dist/cli/commands/schema.js.map +0 -1
  568. package/dist/cli/commands/state/decisions.js.map +0 -1
  569. package/dist/cli/commands/state/docs.js.map +0 -1
  570. package/dist/cli/commands/state/experiments.js.map +0 -1
  571. package/dist/cli/commands/state/health.js.map +0 -1
  572. package/dist/cli/commands/state/index.js.map +0 -1
  573. package/dist/cli/commands/state/objective.js.map +0 -1
  574. package/dist/cli/commands/state/plan.js.map +0 -1
  575. package/dist/cli/commands/state/progress.js.map +0 -1
  576. package/dist/cli/commands/state/shared.js.map +0 -1
  577. package/dist/cli/commands/state/todo.js.map +0 -1
  578. package/dist/cli/commands/upgrade.js.map +0 -1
  579. package/dist/cli/commands/validate.js.map +0 -1
  580. package/dist/cli/commands/verify.js.map +0 -1
  581. package/dist/cli/contracts/bundleStatus.js.map +0 -1
  582. package/dist/cli/contracts/orientationState.js.map +0 -1
  583. package/dist/cli/dispatch/argvParser.js.map +0 -1
  584. package/dist/cli/dispatch/check.js.map +0 -1
  585. package/dist/cli/dispatch/commands.js.map +0 -1
  586. package/dist/cli/dispatch/index.js.map +0 -1
  587. package/dist/cli/dispatch/lifecycle.js.map +0 -1
  588. package/dist/cli/dispatch/prime.js.map +0 -1
  589. package/dist/cli/dispatch/shared.js.map +0 -1
  590. package/dist/cli/dispatch/state.js.map +0 -1
  591. package/dist/cli/dispatch.js.map +0 -1
  592. package/dist/cli/errors.js.map +0 -1
  593. package/dist/cli/help.js.map +0 -1
  594. package/dist/cli/orientation/attention.js.map +0 -1
  595. package/dist/cli/orientation/corpusCoverage.js.map +0 -1
  596. package/dist/cli/orientation.js.map +0 -1
  597. package/dist/cli/prime-blob.js.map +0 -1
  598. package/dist/cli/startupCompletenessContract.js.map +0 -1
  599. package/dist/cli/stateQuery.js.map +0 -1
  600. package/dist/cli/structured.js.map +0 -1
  601. package/dist/cli/todoMarkdown.js.map +0 -1
  602. package/dist/cli/todoSeverity.js.map +0 -1
  603. package/dist/core/difflib.js.map +0 -1
  604. package/dist/core/envPaths.js.map +0 -1
  605. package/dist/core/jsonValue.js.map +0 -1
  606. package/dist/core/paths.js.map +0 -1
  607. package/dist/core/pyjson.js.map +0 -1
  608. package/dist/core/sourceRoot.js.map +0 -1
  609. package/dist/core/toml.js.map +0 -1
  610. package/dist/core/yaml.js.map +0 -1
  611. package/dist/eval/evalSkills.js.map +0 -1
  612. package/dist/eval/semanticEval.js.map +0 -1
  613. package/dist/eval/semanticFixtures.js.map +0 -1
  614. package/dist/hooks/common.js.map +0 -1
  615. package/dist/hooks/compaction/apply.js.map +0 -1
  616. package/dist/hooks/compaction/dryRun.js.map +0 -1
  617. package/dist/hooks/compaction/index.js.map +0 -1
  618. package/dist/hooks/compaction/parse.js.map +0 -1
  619. package/dist/hooks/compaction/retention.js.map +0 -1
  620. package/dist/hooks/compaction/status.js.map +0 -1
  621. package/dist/hooks/compaction/types.js.map +0 -1
  622. package/dist/hooks/cursorPreToolUse.js +0 -19
  623. package/dist/hooks/cursorPreToolUse.js.map +0 -1
  624. package/dist/hooks/cursorSessionStart.js +0 -79
  625. package/dist/hooks/cursorSessionStart.js.map +0 -1
  626. package/dist/hooks/sessionStart.js +0 -216
  627. package/dist/hooks/sessionStart.js.map +0 -1
  628. package/dist/hooks/sessionStop.js +0 -206
  629. package/dist/hooks/sessionStop.js.map +0 -1
  630. package/dist/hooks/validateArtifact/agentFacing.js.map +0 -1
  631. package/dist/hooks/validateArtifact/index.js.map +0 -1
  632. package/dist/hooks/validateArtifact/markdown.js.map +0 -1
  633. package/dist/hooks/validateArtifact/runtime.js +0 -86
  634. package/dist/hooks/validateArtifact/runtime.js.map +0 -1
  635. package/dist/hooks/validateArtifact/schema.js.map +0 -1
  636. package/dist/hooks/validateArtifact/traversal.js.map +0 -1
  637. package/dist/hooks/validateArtifact/violations.js.map +0 -1
  638. package/dist/migrate/v2HandoffManifest.js.map +0 -1
  639. package/dist/registries/artifactProtocolIds.js.map +0 -1
  640. package/dist/registries/artifactRegistry.js.map +0 -1
  641. package/dist/registries/capabilityContract.js.map +0 -1
  642. package/dist/registries/evaluatorHandoffContract.js.map +0 -1
  643. package/dist/registries/packageRegistry.js.map +0 -1
  644. package/dist/registries/runtimeAdapterRegistry.js +0 -316
  645. package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
  646. package/dist/registries/triggerLoader.js.map +0 -1
  647. package/dist/release/releaseMetadata.js.map +0 -1
  648. package/dist/setup/codex/agents.js +0 -96
  649. package/dist/setup/codex/agents.js.map +0 -1
  650. package/dist/setup/codex/cli.js +0 -161
  651. package/dist/setup/codex/cli.js.map +0 -1
  652. package/dist/setup/codex/configToml.js +0 -639
  653. package/dist/setup/codex/configToml.js.map +0 -1
  654. package/dist/setup/codex/constants.js +0 -29
  655. package/dist/setup/codex/constants.js.map +0 -1
  656. package/dist/setup/codex/installRoot.js +0 -64
  657. package/dist/setup/codex/installRoot.js.map +0 -1
  658. package/dist/setup/codex/state.js +0 -270
  659. package/dist/setup/codex/state.js.map +0 -1
  660. package/dist/setup/codex.js +0 -12
  661. package/dist/setup/codex.js.map +0 -1
  662. package/dist/setup/copilot.js +0 -227
  663. package/dist/setup/copilot.js.map +0 -1
  664. package/dist/setup/cursor.js +0 -129
  665. package/dist/setup/cursor.js.map +0 -1
  666. package/dist/setup/cursorSurfaces.js +0 -67
  667. package/dist/setup/cursorSurfaces.js.map +0 -1
  668. package/dist/setup/doctor/core.js +0 -300
  669. package/dist/setup/doctor/core.js.map +0 -1
  670. package/dist/setup/doctor/diagnostics.js +0 -240
  671. package/dist/setup/doctor/diagnostics.js.map +0 -1
  672. package/dist/setup/doctor/opencode.js +0 -313
  673. package/dist/setup/doctor/opencode.js.map +0 -1
  674. package/dist/setup/doctor/report.js +0 -425
  675. package/dist/setup/doctor/report.js.map +0 -1
  676. package/dist/setup/doctor.js +0 -10
  677. package/dist/setup/doctor.js.map +0 -1
  678. package/dist/setup/opencode.js.map +0 -1
  679. package/dist/setup/smokeChecks.js.map +0 -1
  680. package/dist/state/installRoot.js.map +0 -1
  681. package/dist/state/startupAnalysis/benchmark.js.map +0 -1
  682. package/dist/state/startupAnalysis/contract.js.map +0 -1
  683. package/dist/state/startupAnalysis/helpers.js.map +0 -1
  684. package/dist/state/startupAnalysis/index.js.map +0 -1
  685. package/dist/state/startupAnalysis/metrics.js.map +0 -1
  686. package/dist/state/startupAnalysis/records.js.map +0 -1
  687. package/dist/state/startupAnalysis/report.js.map +0 -1
  688. package/dist/state/startupAnalysis/threshold.js.map +0 -1
  689. package/dist/state/startupAnalysis.js.map +0 -1
  690. package/dist/upgrade/appContentRefresh.js.map +0 -1
  691. package/dist/upgrade/appModel.js.map +0 -1
  692. package/dist/upgrade/bundleEvidence.js.map +0 -1
  693. package/dist/upgrade/channels.js.map +0 -1
  694. package/dist/upgrade/coexistenceProbe.js +0 -107
  695. package/dist/upgrade/coexistenceProbe.js.map +0 -1
  696. package/dist/upgrade/compatibility.js.map +0 -1
  697. package/dist/upgrade/doctor.js.map +0 -1
  698. package/dist/upgrade/doctorClassifier.js.map +0 -1
  699. package/dist/upgrade/installedHooksRetirement.js.map +0 -1
  700. package/dist/upgrade/legacyAgentCleanup.js.map +0 -1
  701. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -570
  702. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
  703. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
  704. package/dist/upgrade/nextMajorDoctor.js.map +0 -1
  705. package/dist/upgrade/npxPlatformStatus.js.map +0 -1
  706. package/dist/upgrade/projectIntegration.js.map +0 -1
  707. package/dist/upgrade/projectIntegrationDecision.js.map +0 -1
  708. package/dist/upgrade/runtimeMigration.js.map +0 -1
  709. package/dist/upgrade/upgradeCommands.js.map +0 -1
  710. package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
  711. package/dist/upgrade/v3CapabilitySurface.js.map +0 -1
  712. package/dist/upgrade/versionResolution.js.map +0 -1
  713. package/dist/validate/appHomeContract.js.map +0 -1
  714. package/dist/validate/capability.js.map +0 -1
  715. package/dist/validate/crossCapability.js.map +0 -1
  716. package/dist/validate/lifecycleAdapters/legacyPythonParity.js +0 -93
  717. package/dist/validate/lifecycleAdapters/legacyPythonParity.js.map +0 -1
  718. package/dist/validate/lifecycleAdapters/nodeFormChecks.js +0 -488
  719. package/dist/validate/lifecycleAdapters/nodeFormChecks.js.map +0 -1
  720. package/dist/validate/lifecycleAdapters/shared.js +0 -198
  721. package/dist/validate/lifecycleAdapters/shared.js.map +0 -1
  722. package/dist/validate/lifecycleAdapters.js +0 -62
  723. package/dist/validate/lifecycleAdapters.js.map +0 -1
  724. package/dist/validate/selfAudit.js.map +0 -1
  725. package/dist/validate/vocabularyAuthority.js.map +0 -1
@@ -0,0 +1,879 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { resolvePath } from "../core/paths.js";
4
+ import { isNpxBundleRoot, resolveSourceRoot } from "../core/sourceRoot.js";
5
+ import { loadYamlMappingFile } from "../core/yaml.js";
6
+ const AUTHORITY_RELATIVE_PATH = "references/meta/retained-reference-authority.yaml";
7
+ const LIVE_ROOTS = ["references", "skills/agentera/references"];
8
+ const RETAINED_CLASSES = new Set(["current", "migration-only", "runbook"]);
9
+ const ABSENT_CLASSES = new Set(["historical", "delete"]);
10
+ const CONSUMPTION_KINDS = new Set(["loads"]);
11
+ const CONSUMER_KINDS = new Set(["runtime", "validator"]);
12
+ const READER_CALLS = [
13
+ "readFileSync",
14
+ "readFile",
15
+ "loadYamlMappingFile",
16
+ ];
17
+ function mapping(value) {
18
+ return value !== null && typeof value === "object" && !Array.isArray(value)
19
+ ? value
20
+ : null;
21
+ }
22
+ function isSafeRelativePath(value) {
23
+ return typeof value === "string"
24
+ && value.length > 0
25
+ && !path.isAbsolute(value)
26
+ && !value.split(/[\\/]/).includes("..");
27
+ }
28
+ function isReferencePath(value) {
29
+ if (!isSafeRelativePath(value))
30
+ return false;
31
+ return LIVE_ROOTS.some((root) => value === root || value.startsWith(root + "/"));
32
+ }
33
+ function isProductionModulePath(value) {
34
+ return isSafeRelativePath(value) && (/^packages\/cli\/src\/.+\.ts$/u.test(value)
35
+ || /^packages\/cli\/scripts\/.+\.mjs$/u.test(value));
36
+ }
37
+ function pathInside(root, candidate) {
38
+ const relative = path.relative(root, candidate);
39
+ return relative === "" || (!relative.startsWith(".." + path.sep) && relative !== ".." && !path.isAbsolute(relative));
40
+ }
41
+ /** Reject a path that escapes, or enters a source tree through, a symbolic link. */
42
+ function regularContainedFile(root, relative) {
43
+ if (!isSafeRelativePath(relative))
44
+ return null;
45
+ const resolvedRoot = resolvePath(root);
46
+ const candidate = path.resolve(resolvedRoot, relative);
47
+ if (!pathInside(resolvedRoot, candidate))
48
+ return null;
49
+ let current = resolvedRoot;
50
+ for (const part of relative.split(/[\\/]/)) {
51
+ current = path.join(current, part);
52
+ let stat;
53
+ try {
54
+ stat = fs.lstatSync(current);
55
+ }
56
+ catch {
57
+ return null;
58
+ }
59
+ if (stat.isSymbolicLink())
60
+ return null;
61
+ }
62
+ try {
63
+ if (!fs.statSync(candidate).isFile())
64
+ return null;
65
+ const realRoot = fs.realpathSync(resolvedRoot);
66
+ const realCandidate = fs.realpathSync(candidate);
67
+ return pathInside(realRoot, realCandidate) ? candidate : null;
68
+ }
69
+ catch {
70
+ return null;
71
+ }
72
+ }
73
+ function sourceWithoutComments(source) {
74
+ return source
75
+ .replace(/\/\*[\s\S]*?\*\//gu, "")
76
+ .replace(/(^|[^:\\])\/\/.*$/gmu, "$1");
77
+ }
78
+ function escapeRegExp(value) {
79
+ return value.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&");
80
+ }
81
+ function braceEnd(source, opening) {
82
+ let depth = 0;
83
+ let quote = "";
84
+ let escaped = false;
85
+ for (let index = opening; index < source.length; index += 1) {
86
+ const character = source[index];
87
+ if (quote) {
88
+ if (escaped)
89
+ escaped = false;
90
+ else if (character === "\\")
91
+ escaped = true;
92
+ else if (character === quote)
93
+ quote = "";
94
+ continue;
95
+ }
96
+ if (character === '"' || character === "'" || character === "`") {
97
+ quote = character;
98
+ continue;
99
+ }
100
+ if (character === "{")
101
+ depth += 1;
102
+ if (character === "}") {
103
+ depth -= 1;
104
+ if (depth === 0)
105
+ return index + 1;
106
+ }
107
+ }
108
+ return null;
109
+ }
110
+ function parenthesisEnd(source, opening) {
111
+ let depth = 0;
112
+ let quote = "";
113
+ let escaped = false;
114
+ for (let index = opening; index < source.length; index += 1) {
115
+ const character = source[index];
116
+ if (quote) {
117
+ if (escaped)
118
+ escaped = false;
119
+ else if (character === "\\")
120
+ escaped = true;
121
+ else if (character === quote)
122
+ quote = "";
123
+ continue;
124
+ }
125
+ if (character === '"' || character === "'" || character === "`") {
126
+ quote = character;
127
+ continue;
128
+ }
129
+ if (character === "(")
130
+ depth += 1;
131
+ if (character === ")") {
132
+ depth -= 1;
133
+ if (depth === 0)
134
+ return index;
135
+ }
136
+ }
137
+ return null;
138
+ }
139
+ function splitArguments(source) {
140
+ const argumentsList = [];
141
+ let start = 0;
142
+ let round = 0;
143
+ let square = 0;
144
+ let curly = 0;
145
+ let quote = "";
146
+ let escaped = false;
147
+ for (let index = 0; index < source.length; index += 1) {
148
+ const character = source[index];
149
+ if (quote) {
150
+ if (escaped)
151
+ escaped = false;
152
+ else if (character === "\\")
153
+ escaped = true;
154
+ else if (character === quote)
155
+ quote = "";
156
+ continue;
157
+ }
158
+ if (character === '"' || character === "'" || character === "`") {
159
+ quote = character;
160
+ continue;
161
+ }
162
+ if (character === "(")
163
+ round += 1;
164
+ else if (character === ")")
165
+ round -= 1;
166
+ else if (character === "[")
167
+ square += 1;
168
+ else if (character === "]")
169
+ square -= 1;
170
+ else if (character === "{")
171
+ curly += 1;
172
+ else if (character === "}")
173
+ curly -= 1;
174
+ else if (character === "," && round === 0 && square === 0 && curly === 0) {
175
+ argumentsList.push(source.slice(start, index).trim());
176
+ start = index + 1;
177
+ }
178
+ }
179
+ const finalArgument = source.slice(start).trim();
180
+ if (finalArgument)
181
+ argumentsList.push(finalArgument);
182
+ return argumentsList;
183
+ }
184
+ function namedCalls(source, names) {
185
+ const calls = [];
186
+ const re = new RegExp(`\\b(${names.map(escapeRegExp).join("|")})\\s*\\(`, "gu");
187
+ for (const match of source.matchAll(re)) {
188
+ if (match.index === undefined)
189
+ continue;
190
+ const opening = source.indexOf("(", match.index);
191
+ const closing = parenthesisEnd(source, opening);
192
+ if (closing === null)
193
+ continue;
194
+ calls.push({
195
+ name: match[1],
196
+ argumentsList: splitArguments(source.slice(opening + 1, closing)),
197
+ });
198
+ }
199
+ return calls;
200
+ }
201
+ function functionParameterLists(source) {
202
+ const lists = [];
203
+ const re = /function\s+([A-Za-z_$][A-Za-z0-9_$]*)\s*\(/gu;
204
+ for (const match of source.matchAll(re)) {
205
+ if (match.index === undefined)
206
+ continue;
207
+ const opening = match.index + match[0].length - 1;
208
+ const closing = parenthesisEnd(source, opening);
209
+ if (closing === null)
210
+ continue;
211
+ lists.push({
212
+ name: match[1],
213
+ parameters: source.slice(opening + 1, closing).split(","),
214
+ });
215
+ }
216
+ return lists;
217
+ }
218
+ function declarationSource(source, symbol) {
219
+ const escaped = escapeRegExp(symbol);
220
+ const functionMatch = new RegExp(`(?:export\\s+)?(?:async\\s+)?function\\s+${escaped}\\s*\\(`, "u").exec(source);
221
+ if (functionMatch && functionMatch.index !== undefined) {
222
+ const opening = source.indexOf("{", functionMatch.index + functionMatch[0].length);
223
+ const end = opening < 0 ? null : braceEnd(source, opening);
224
+ return end === null ? null : source.slice(functionMatch.index, end);
225
+ }
226
+ const valueMatch = new RegExp(`(?:export\\s+)?(?:const|let|var)\\s+${escaped}\\b`, "u").exec(source);
227
+ if (!valueMatch || valueMatch.index === undefined)
228
+ return null;
229
+ const end = source.indexOf(";", valueMatch.index);
230
+ return end < 0 ? source.slice(valueMatch.index) : source.slice(valueMatch.index, end + 1);
231
+ }
232
+ function declaredSymbols(source) {
233
+ const symbols = new Set();
234
+ for (const match of source.matchAll(/(?:export\s+)?(?:async\s+)?function\s+([A-Za-z_$][A-Za-z0-9_$]*)\s*\(/gu)) {
235
+ symbols.add(match[1]);
236
+ }
237
+ for (const match of source.matchAll(/(?:export\s+)?(?:const|let|var)\s+([A-Za-z_$][A-Za-z0-9_$]*)\b/gu)) {
238
+ symbols.add(match[1]);
239
+ }
240
+ return [...symbols];
241
+ }
242
+ function resolveImportedModule(root, importer, specifier) {
243
+ if (!specifier.startsWith("."))
244
+ return null;
245
+ const candidate = path.posix.normalize(path.posix.join(path.posix.dirname(importer), specifier));
246
+ const candidates = [
247
+ candidate,
248
+ candidate.replace(/\.js$/u, ".ts"),
249
+ candidate.replace(/\.mjs$/u, ".mjs"),
250
+ `${candidate}/index.ts`,
251
+ ];
252
+ for (const relative of candidates) {
253
+ if (!isProductionModulePath(relative))
254
+ continue;
255
+ if (regularContainedFile(root, relative))
256
+ return relative;
257
+ }
258
+ return null;
259
+ }
260
+ function importedSymbols(root, modulePath, source) {
261
+ const imports = new Map();
262
+ const re = /(?:import|export)\s*\{([^}]+)\}\s*from\s*["']([^"']+)["']/gu;
263
+ for (const match of source.matchAll(re)) {
264
+ const importedModule = resolveImportedModule(root, modulePath, match[2]);
265
+ if (!importedModule)
266
+ continue;
267
+ for (const item of match[1].split(",")) {
268
+ const parsed = /^\s*([A-Za-z_$][A-Za-z0-9_$]*)(?:\s+as\s+([A-Za-z_$][A-Za-z0-9_$]*))?\s*$/u.exec(item);
269
+ if (parsed)
270
+ imports.set(parsed[2] ?? parsed[1], { module: importedModule, symbol: parsed[1] });
271
+ }
272
+ }
273
+ return imports;
274
+ }
275
+ function sourceClosure(root, modulePath, symbol, referencePath) {
276
+ const fragments = [];
277
+ const visited = new Set();
278
+ const visit = (currentModule, currentSymbol) => {
279
+ const key = `${currentModule}:${currentSymbol}`;
280
+ if (visited.has(key))
281
+ return;
282
+ visited.add(key);
283
+ const absolute = regularContainedFile(root, currentModule);
284
+ if (!absolute)
285
+ return;
286
+ const source = sourceWithoutComments(fs.readFileSync(absolute, "utf8"));
287
+ const declaration = declarationSource(source, currentSymbol);
288
+ if (!declaration)
289
+ return;
290
+ fragments.push(declaration);
291
+ const imports = importedSymbols(root, currentModule, source);
292
+ for (const name of source.matchAll(/(?:export\s+)?(?:async\s+)?function\s+([A-Za-z_$][A-Za-z0-9_$]*)\s*\(/gu)) {
293
+ const local = name[1];
294
+ if (local !== currentSymbol && new RegExp(`\\b${escapeRegExp(local)}\\s*\\(`, "u").test(declaration)) {
295
+ visit(currentModule, local);
296
+ }
297
+ }
298
+ for (const [local, imported] of imports) {
299
+ const importedPath = regularContainedFile(root, imported.module);
300
+ const importedSource = importedPath ? sourceWithoutComments(fs.readFileSync(importedPath, "utf8")) : "";
301
+ const importedDeclaration = declarationSource(importedSource, imported.symbol);
302
+ if (importedDeclaration
303
+ && (new RegExp(`\\b${escapeRegExp(local)}\\s*\\(`, "u").test(declaration)
304
+ || referencePathExpression(importedDeclaration.replace(/^[^=]+=/u, "").replace(/;\s*$/u, ""), referencePath))) {
305
+ visit(imported.module, imported.symbol);
306
+ }
307
+ }
308
+ for (const local of declaredSymbols(source)) {
309
+ const localDeclaration = declarationSource(source, local);
310
+ if (localDeclaration && !/function\s+/u.test(localDeclaration)
311
+ && (referencePathExpression(localDeclaration.replace(/^[^=]+=/u, "").replace(/;\s*$/u, ""), referencePath)
312
+ || new RegExp(`\\b${escapeRegExp(local)}\\b`, "u").test(declaration))) {
313
+ fragments.push(localDeclaration);
314
+ }
315
+ }
316
+ };
317
+ visit(modulePath, symbol);
318
+ return fragments;
319
+ }
320
+ function exactStringLiteral(expression) {
321
+ const match = /^\s*(["'])([\s\S]*)\1\s*$/u.exec(expression);
322
+ return match ? match[2] : null;
323
+ }
324
+ function pathCallArguments(expression) {
325
+ const calls = [];
326
+ for (const match of expression.matchAll(/\bpath\.(?:join|resolve)\s*\(/gu)) {
327
+ if (match.index === undefined)
328
+ continue;
329
+ const opening = expression.indexOf("(", match.index);
330
+ const closing = parenthesisEnd(expression, opening);
331
+ if (closing !== null)
332
+ calls.push(splitArguments(expression.slice(opening + 1, closing)));
333
+ }
334
+ return calls;
335
+ }
336
+ /**
337
+ * Evaluate only the path forms used by production consumers. A match must be
338
+ * one exact literal/binding/provider, or literals joined inside one path call.
339
+ * Unrelated literals in an array, options argument, or surrounding expression
340
+ * never combine into a path.
341
+ */
342
+ function referencePathExpression(expression, referencePath, bindings = new Set(), providers = new Set()) {
343
+ const literal = exactStringLiteral(expression.replace(/\s+as\s+(?:const|any|unknown|string)\s*$/u, ""));
344
+ if (literal === referencePath)
345
+ return true;
346
+ const identifier = /^\s*([A-Za-z_$][A-Za-z0-9_$]*)\s*$/u.exec(expression)?.[1];
347
+ if (identifier && bindings.has(identifier))
348
+ return true;
349
+ if ([...providers].some((provider) => new RegExp(`^\\s*${escapeRegExp(provider)}\\s*\\([^)]*\\)\\s*$`, "u").test(expression))) {
350
+ return true;
351
+ }
352
+ for (const argumentsList of pathCallArguments(expression)) {
353
+ let suffix = [];
354
+ for (const argument of argumentsList) {
355
+ const argumentLiteral = exactStringLiteral(argument);
356
+ if (argumentLiteral !== null) {
357
+ suffix.push(argumentLiteral);
358
+ }
359
+ else if (referencePathExpression(argument, referencePath, bindings, providers)
360
+ || [...bindings].some((binding) => new RegExp(`^\\s*\\.\\.\\.\\s*${escapeRegExp(binding)}\\.split\\(\\s*["']/["']\\s*\\)\\s*$`, "u").test(argument))) {
361
+ suffix = [referencePath];
362
+ }
363
+ else {
364
+ // An unknown value can be a root prefix, but it breaks any previously
365
+ // accumulated literal path.
366
+ suffix = [];
367
+ }
368
+ }
369
+ if (path.posix.normalize(path.posix.join(...suffix)) === referencePath)
370
+ return true;
371
+ }
372
+ return false;
373
+ }
374
+ function returnExpressions(declaration) {
375
+ return [...declaration.matchAll(/\breturn\s+([^;\n}]+)/gu)].map((match) => match[1].trim());
376
+ }
377
+ function referenceFacts(fragments, referencePath) {
378
+ const bindings = new Set();
379
+ const providers = new Set();
380
+ const source = fragments.join("\n");
381
+ const declarations = [...source.matchAll(/(?:const|let|var)\s+([A-Za-z_$][A-Za-z0-9_$]*)\s*=\s*([^;]+);/gu)];
382
+ const functions = functionParameterLists(source);
383
+ const parameterNames = new Map(functions.map(({ name, parameters }) => [
384
+ name,
385
+ parameters.map((parameter) => /^\s*([A-Za-z_$][A-Za-z0-9_$]*)/u.exec(parameter)?.[1] ?? ""),
386
+ ]));
387
+ let changed = true;
388
+ while (changed) {
389
+ changed = false;
390
+ for (const match of declarations) {
391
+ const name = match[1];
392
+ if (!bindings.has(name) && referencePathExpression(match[2], referencePath, bindings, providers)) {
393
+ bindings.add(name);
394
+ changed = true;
395
+ }
396
+ }
397
+ for (const { name } of functions) {
398
+ if (providers.has(name))
399
+ continue;
400
+ const declaration = declarationSource(source, name);
401
+ if (declaration && returnExpressions(declaration).some((expression) => referencePathExpression(expression, referencePath, bindings, providers))) {
402
+ providers.add(name);
403
+ changed = true;
404
+ }
405
+ }
406
+ for (const call of namedCalls(source, [...parameterNames.keys()])) {
407
+ const parameters = parameterNames.get(call.name);
408
+ if (!parameters)
409
+ continue;
410
+ call.argumentsList.forEach((argument, index) => {
411
+ const parameter = parameters[index];
412
+ if (parameter && !bindings.has(parameter)
413
+ && referencePathExpression(argument, referencePath, bindings, providers)) {
414
+ bindings.add(parameter);
415
+ changed = true;
416
+ }
417
+ });
418
+ }
419
+ for (const functionParameters of functions) {
420
+ for (const parameter of functionParameters.parameters) {
421
+ const match = /^\s*([A-Za-z_$][A-Za-z0-9_$]*)[^=]*=([\s\S]+)$/u.exec(parameter);
422
+ if (match && !bindings.has(match[1])
423
+ && referencePathExpression(match[2], referencePath, bindings, providers)) {
424
+ bindings.add(match[1]);
425
+ changed = true;
426
+ }
427
+ }
428
+ }
429
+ }
430
+ return { bindings, providers };
431
+ }
432
+ function hasExactReadOrParse(fragments, referencePath) {
433
+ const source = fragments.join("\n");
434
+ const { bindings, providers } = referenceFacts(fragments, referencePath);
435
+ return namedCalls(source, READER_CALLS).some(({ argumentsList }) => {
436
+ const pathArgument = argumentsList[0];
437
+ return pathArgument !== undefined
438
+ && referencePathExpression(pathArgument, referencePath, bindings, providers);
439
+ });
440
+ }
441
+ function allProductionModules(root) {
442
+ const modules = [];
443
+ const visit = (relative) => {
444
+ const absolute = path.join(root, relative);
445
+ if (!fs.existsSync(absolute))
446
+ return;
447
+ const stat = fs.lstatSync(absolute);
448
+ if (stat.isSymbolicLink())
449
+ return;
450
+ if (stat.isDirectory()) {
451
+ for (const entry of fs.readdirSync(absolute, { withFileTypes: true }))
452
+ visit(path.posix.join(relative, entry.name));
453
+ return;
454
+ }
455
+ if (stat.isFile() && isProductionModulePath(relative))
456
+ modules.push(relative);
457
+ };
458
+ visit("packages/cli/src");
459
+ visit("packages/cli/scripts");
460
+ return modules;
461
+ }
462
+ function productionEntrypoints(root) {
463
+ const entrypoints = new Set();
464
+ if (regularContainedFile(root, "packages/cli/src/bin/agentera.ts")) {
465
+ entrypoints.add("packages/cli/src/bin/agentera.ts");
466
+ }
467
+ const packagePath = regularContainedFile(root, "packages/cli/package.json");
468
+ if (!packagePath)
469
+ return [...entrypoints];
470
+ try {
471
+ const packageJson = JSON.parse(fs.readFileSync(packagePath, "utf8"));
472
+ const scripts = mapping(packageJson.scripts);
473
+ for (const script of Object.values(scripts ?? {})) {
474
+ if (typeof script !== "string")
475
+ continue;
476
+ for (const match of script.matchAll(/(?:^|\s)(scripts\/[A-Za-z0-9_./-]+\.mjs)\b/gu)) {
477
+ const candidate = `packages/cli/${match[1]}`;
478
+ if (regularContainedFile(root, candidate))
479
+ entrypoints.add(candidate);
480
+ }
481
+ }
482
+ }
483
+ catch {
484
+ // The participant validation reports malformed package metadata through the runbook check.
485
+ }
486
+ return [...entrypoints];
487
+ }
488
+ function reachableProductionModules(root) {
489
+ const reachable = new Set();
490
+ const pending = productionEntrypoints(root);
491
+ while (pending.length > 0) {
492
+ const modulePath = pending.pop();
493
+ if (reachable.has(modulePath))
494
+ continue;
495
+ const absolute = regularContainedFile(root, modulePath);
496
+ if (!absolute)
497
+ continue;
498
+ reachable.add(modulePath);
499
+ const source = sourceWithoutComments(fs.readFileSync(absolute, "utf8"));
500
+ for (const match of source.matchAll(/(?:import|export)\s+(?:[^"']*?\s+from\s+)?["']([^"']+)["']/gu)) {
501
+ const dependency = resolveImportedModule(root, modulePath, match[1]);
502
+ if (dependency && !reachable.has(dependency))
503
+ pending.push(dependency);
504
+ }
505
+ }
506
+ return reachable;
507
+ }
508
+ function functionDeclarations(source) {
509
+ const declarations = [];
510
+ const re = /(?:export\s+)?(?:async\s+)?function\s+([A-Za-z_$][A-Za-z0-9_$]*)\s*\(/gu;
511
+ for (const match of source.matchAll(re)) {
512
+ if (match.index === undefined)
513
+ continue;
514
+ const opening = source.indexOf("{", match.index + match[0].length);
515
+ const end = opening < 0 ? null : braceEnd(source, opening);
516
+ if (end === null)
517
+ continue;
518
+ declarations.push({
519
+ name: match[1],
520
+ start: match.index,
521
+ end,
522
+ body: source.slice(opening + 1, end - 1),
523
+ });
524
+ }
525
+ return declarations;
526
+ }
527
+ function topLevelExecutionSource(source, declarations) {
528
+ const characters = [...source];
529
+ for (const declaration of declarations) {
530
+ for (let index = declaration.start; index < declaration.end; index += 1)
531
+ characters[index] = " ";
532
+ }
533
+ return characters.join("");
534
+ }
535
+ function symbolIsReachable(root, modulePath, symbol) {
536
+ const reachable = reachableProductionModules(root);
537
+ if (!reachable.has(modulePath))
538
+ return false;
539
+ const modules = new Map();
540
+ for (const candidate of reachable) {
541
+ const absolute = regularContainedFile(root, candidate);
542
+ if (!absolute)
543
+ continue;
544
+ const source = sourceWithoutComments(fs.readFileSync(absolute, "utf8"));
545
+ const declarations = functionDeclarations(source);
546
+ modules.set(candidate, {
547
+ source,
548
+ functions: new Map(declarations.map((declaration) => [declaration.name, declaration])),
549
+ imports: importedSymbols(root, candidate, source),
550
+ });
551
+ }
552
+ const target = modules.get(modulePath);
553
+ if (!target)
554
+ return false;
555
+ // A reachable module executes non-function declarations while loading.
556
+ // Declared functions require an actual call chain from module evaluation.
557
+ if (!target.functions.has(symbol))
558
+ return true;
559
+ const reachedFunctions = new Set();
560
+ const pending = [];
561
+ for (const [candidate, module] of modules) {
562
+ pending.push({
563
+ modulePath: candidate,
564
+ source: topLevelExecutionSource(module.source, [...module.functions.values()]),
565
+ });
566
+ }
567
+ while (pending.length > 0) {
568
+ const current = pending.pop();
569
+ const module = modules.get(current.modulePath);
570
+ if (!module)
571
+ continue;
572
+ const callableNames = [...new Set([...module.functions.keys(), ...module.imports.keys()])];
573
+ for (const call of namedCalls(current.source, callableNames)) {
574
+ const imported = module.imports.get(call.name);
575
+ let calledModule = imported?.module ?? current.modulePath;
576
+ let calledSymbol = imported?.symbol ?? call.name;
577
+ const forwarded = new Set();
578
+ while (!modules.get(calledModule)?.functions.has(calledSymbol)) {
579
+ const forwardingKey = `${calledModule}:${calledSymbol}`;
580
+ if (forwarded.has(forwardingKey))
581
+ break;
582
+ forwarded.add(forwardingKey);
583
+ const next = modules.get(calledModule)?.imports.get(calledSymbol);
584
+ if (!next)
585
+ break;
586
+ calledModule = next.module;
587
+ calledSymbol = next.symbol;
588
+ }
589
+ const key = `${calledModule}:${calledSymbol}`;
590
+ if (reachedFunctions.has(key))
591
+ continue;
592
+ const calledDeclaration = modules.get(calledModule)?.functions.get(calledSymbol);
593
+ if (!calledDeclaration)
594
+ continue;
595
+ reachedFunctions.add(key);
596
+ pending.push({ modulePath: calledModule, source: calledDeclaration.body });
597
+ }
598
+ }
599
+ return reachedFunctions.has(`${modulePath}:${symbol}`);
600
+ }
601
+ /** Whether a root has source files needed to audit source-only retained references. */
602
+ export function isRetainedReferenceSourceCheckout(root = resolveSourceRoot()) {
603
+ const resolved = resolvePath(root);
604
+ return !isNpxBundleRoot(resolved)
605
+ && regularContainedFile(resolved, "packages/cli/package.json") !== null
606
+ && regularContainedFile(resolved, "packages/cli/src/bin/agentera.ts") !== null
607
+ && regularContainedFile(resolved, AUTHORITY_RELATIVE_PATH) !== null;
608
+ }
609
+ function listLiveFiles(root, relative, errors) {
610
+ const absolute = path.join(root, relative);
611
+ if (!fs.existsSync(absolute))
612
+ return [];
613
+ const stat = fs.lstatSync(absolute);
614
+ if (stat.isSymbolicLink()) {
615
+ errors.push(`${relative}: live reference roots must not contain symlinks`);
616
+ return [];
617
+ }
618
+ if (stat.isFile())
619
+ return [relative.replace(/\\/gu, "/")];
620
+ if (!stat.isDirectory()) {
621
+ errors.push(`${relative}: live reference entry must be a regular file or directory`);
622
+ return [];
623
+ }
624
+ const files = [];
625
+ for (const entry of fs.readdirSync(absolute, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {
626
+ const child = path.posix.join(relative, entry.name);
627
+ if (entry.isSymbolicLink()) {
628
+ errors.push(`${child}: live reference roots must not contain symlinks`);
629
+ }
630
+ else if (entry.isDirectory() || entry.isFile()) {
631
+ files.push(...listLiveFiles(root, child, errors));
632
+ }
633
+ else {
634
+ errors.push(`${child}: live reference entry must be a regular file`);
635
+ }
636
+ }
637
+ return files;
638
+ }
639
+ function validateProductionParticipant(root, referencePath, label, raw, requireConsumption) {
640
+ const value = mapping(raw);
641
+ if (!value)
642
+ return [`${referencePath}: ${label} must be a mapping`];
643
+ const errors = [];
644
+ const modulePath = value.module;
645
+ const symbol = value.symbol;
646
+ if (!isProductionModulePath(modulePath)) {
647
+ errors.push(`${referencePath}: ${label}.module must name a contained production packages/cli src or scripts module`);
648
+ return errors;
649
+ }
650
+ if (typeof symbol !== "string" || !/^[A-Za-z_$][A-Za-z0-9_$]*$/u.test(symbol)) {
651
+ errors.push(`${referencePath}: ${label}.symbol must name a production symbol`);
652
+ return errors;
653
+ }
654
+ const absoluteModule = regularContainedFile(root, modulePath);
655
+ if (!absoluteModule) {
656
+ errors.push(`${referencePath}: ${label}.module must be a contained regular production file, not a symlink`);
657
+ return errors;
658
+ }
659
+ const source = sourceWithoutComments(fs.readFileSync(absoluteModule, "utf8"));
660
+ if (!declarationSource(source, symbol)) {
661
+ errors.push(`${referencePath}: ${label}.symbol is not declared by ${modulePath}`);
662
+ return errors;
663
+ }
664
+ if (!requireConsumption)
665
+ return errors;
666
+ const kind = value.kind;
667
+ const consumption = value.consumption;
668
+ if (!CONSUMER_KINDS.has(String(kind))) {
669
+ errors.push(`${referencePath}: ${label}.kind must be runtime or validator`);
670
+ }
671
+ if (!CONSUMPTION_KINDS.has(String(consumption))) {
672
+ errors.push(`${referencePath}: ${label}.consumption must be loads`);
673
+ return errors;
674
+ }
675
+ const fragments = sourceClosure(root, modulePath, symbol, referencePath);
676
+ if (!hasExactReadOrParse(fragments, referencePath)) {
677
+ errors.push(`${referencePath}: ${label} must read or parse the exact reference; unrelated reads and emitted strings do not count`);
678
+ }
679
+ if (!symbolIsReachable(root, modulePath, symbol)) {
680
+ errors.push(`${referencePath}: ${label}.symbol is not reachable from a production CLI or package-script entrypoint`);
681
+ }
682
+ return errors;
683
+ }
684
+ function validateTrackedCommand(root, referencePath, command) {
685
+ if (/[|;&><`$]/u.test(command)) {
686
+ return `${referencePath}: runbook command must be one noninteractive tracked command without shell composition`;
687
+ }
688
+ const pnpm = /^pnpm -C ([A-Za-z0-9_./-]+) run ([A-Za-z0-9:_-]+)$/u.exec(command);
689
+ if (pnpm) {
690
+ const packageDirectory = pnpm[1];
691
+ const packageJson = regularContainedFile(root, path.posix.join(packageDirectory, "package.json"));
692
+ if (!isSafeRelativePath(packageDirectory) || !packageJson) {
693
+ return `${referencePath}: runbook command package directory is not tracked`;
694
+ }
695
+ try {
696
+ const data = JSON.parse(fs.readFileSync(packageJson, "utf8"));
697
+ const scripts = mapping(data.scripts);
698
+ if (typeof scripts?.[pnpm[2]] !== "string") {
699
+ return `${referencePath}: runbook command script '${pnpm[2]}' is not tracked in ${packageDirectory}/package.json`;
700
+ }
701
+ }
702
+ catch (error) {
703
+ return `${referencePath}: runbook command package metadata is unreadable: ${error.message}`;
704
+ }
705
+ return null;
706
+ }
707
+ const node = /^node (packages\/cli\/dist\/bin\/agentera\.js)(?: [A-Za-z0-9_./:=,-]+)*$/u.exec(command);
708
+ if (node) {
709
+ try {
710
+ const packageJsonPath = regularContainedFile(root, "packages/cli/package.json");
711
+ if (!packageJsonPath)
712
+ throw new Error("packages/cli/package.json is not a regular file");
713
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));
714
+ const bin = mapping(packageJson.bin);
715
+ if (bin?.agentera !== "dist/bin/agentera.js") {
716
+ return `${referencePath}: runbook command must use the tracked agentera package bin`;
717
+ }
718
+ }
719
+ catch (error) {
720
+ return `${referencePath}: runbook command package metadata is unreadable: ${error.message}`;
721
+ }
722
+ return null;
723
+ }
724
+ return `${referencePath}: runbook command must use a tracked pnpm script or the local agentera bin`;
725
+ }
726
+ function validateRunbook(root, referencePath, raw) {
727
+ const errors = [];
728
+ const maintainer = raw.maintainer;
729
+ const sourceCheckout = raw.source_checkout_root;
730
+ const workingDirectory = raw.working_directory;
731
+ const command = raw.command;
732
+ if (typeof maintainer !== "string" || !maintainer.trim()) {
733
+ errors.push(`${referencePath}: runbook maintainer is required`);
734
+ }
735
+ if (sourceCheckout !== ".") {
736
+ errors.push(`${referencePath}: runbook source_checkout_root must be the source checkout root '.'`);
737
+ }
738
+ else if (!isRetainedReferenceSourceCheckout(root)) {
739
+ errors.push(`${referencePath}: runbook source_checkout_root is not a source checkout`);
740
+ }
741
+ if (!isSafeRelativePath(workingDirectory) && workingDirectory !== ".") {
742
+ errors.push(`${referencePath}: runbook working_directory must be root-relative`);
743
+ }
744
+ else if (!fs.existsSync(path.join(root, String(workingDirectory))) || !fs.statSync(path.join(root, String(workingDirectory))).isDirectory()) {
745
+ errors.push(`${referencePath}: runbook working_directory does not exist`);
746
+ }
747
+ if (typeof command !== "string" || !command.trim()) {
748
+ errors.push(`${referencePath}: runbook command is required`);
749
+ }
750
+ else {
751
+ const commandError = validateTrackedCommand(root, referencePath, command);
752
+ if (commandError)
753
+ errors.push(commandError);
754
+ }
755
+ const documentPath = regularContainedFile(root, referencePath);
756
+ if (!documentPath)
757
+ return errors;
758
+ const document = fs.readFileSync(documentPath, "utf8");
759
+ if (typeof maintainer === "string" && !document.includes(`- Maintainer: ${maintainer}`)) {
760
+ errors.push(`${referencePath}: runbook must visibly name its maintainer`);
761
+ }
762
+ if (sourceCheckout === "." && !document.includes("- Source checkout root: `.`")) {
763
+ errors.push(`${referencePath}: runbook must visibly name the source checkout root`);
764
+ }
765
+ if (typeof workingDirectory === "string" && !document.includes(`- Working directory: \`${workingDirectory}\``)) {
766
+ errors.push(`${referencePath}: runbook must visibly name its root-relative working directory`);
767
+ }
768
+ if (typeof command === "string" && !document.includes(`- Command: \`${command}\``)) {
769
+ errors.push(`${referencePath}: runbook must visibly name its exact command`);
770
+ }
771
+ return errors;
772
+ }
773
+ /** Validate the complete source-checkout retained-reference inventory. */
774
+ export function validateRetainedReferenceAuthority(root = resolveSourceRoot()) {
775
+ const resolvedRoot = resolvePath(root);
776
+ if (!isRetainedReferenceSourceCheckout(resolvedRoot)) {
777
+ return [
778
+ `${AUTHORITY_RELATIVE_PATH}: retained-reference validation requires a source checkout with packages/cli/src; ` +
779
+ "recovery: run it from the repository root after pnpm -C packages/cli build",
780
+ ];
781
+ }
782
+ const authorityPath = regularContainedFile(resolvedRoot, AUTHORITY_RELATIVE_PATH);
783
+ if (!authorityPath)
784
+ return [`${AUTHORITY_RELATIVE_PATH}: authority file must be a contained regular file`];
785
+ let authority;
786
+ try {
787
+ authority = loadYamlMappingFile(authorityPath);
788
+ }
789
+ catch (error) {
790
+ return [`${AUTHORITY_RELATIVE_PATH}: ${error.message}`];
791
+ }
792
+ const errors = [];
793
+ if (authority.schema_version !== "agentera.retainedReferenceAuthority.v1") {
794
+ errors.push(`${AUTHORITY_RELATIVE_PATH}: unsupported schema_version`);
795
+ }
796
+ if (!Array.isArray(authority.live_roots) || JSON.stringify(authority.live_roots) !== JSON.stringify(LIVE_ROOTS)) {
797
+ errors.push(`${AUTHORITY_RELATIVE_PATH}: live_roots must be ${LIVE_ROOTS.join(", ")}`);
798
+ }
799
+ if (!Array.isArray(authority.inventory)) {
800
+ return [...errors, `${AUTHORITY_RELATIVE_PATH}: inventory must be a list`];
801
+ }
802
+ const entries = new Map();
803
+ for (const [index, raw] of authority.inventory.entries()) {
804
+ const entry = mapping(raw);
805
+ if (!entry) {
806
+ errors.push(`${AUTHORITY_RELATIVE_PATH}: inventory[${index}] must be a mapping`);
807
+ continue;
808
+ }
809
+ const referencePath = entry.path;
810
+ const classification = entry.classification;
811
+ if (!isReferencePath(referencePath)) {
812
+ errors.push(`${AUTHORITY_RELATIVE_PATH}: inventory[${index}].path must stay in a live reference root`);
813
+ continue;
814
+ }
815
+ if (!RETAINED_CLASSES.has(String(classification)) && !ABSENT_CLASSES.has(String(classification))) {
816
+ errors.push(`${referencePath}: classification must be current, migration-only, runbook, historical, or delete`);
817
+ continue;
818
+ }
819
+ if (entries.has(referencePath)) {
820
+ errors.push(`${referencePath}: inventory paths must be unique`);
821
+ continue;
822
+ }
823
+ entries.set(referencePath, entry);
824
+ }
825
+ const liveFiles = new Set(LIVE_ROOTS.flatMap((liveRoot) => listLiveFiles(resolvedRoot, liveRoot, errors)));
826
+ for (const referencePath of [...liveFiles].sort()) {
827
+ const entry = entries.get(referencePath);
828
+ if (!entry) {
829
+ errors.push(`${referencePath}: live reference is absent from the retained-reference inventory`);
830
+ continue;
831
+ }
832
+ if (ABSENT_CLASSES.has(String(entry.classification))) {
833
+ errors.push(`${referencePath}: ${entry.classification} inventory entries must be absent from live roots`);
834
+ }
835
+ }
836
+ for (const [referencePath, entry] of entries) {
837
+ const classification = String(entry.classification);
838
+ if (RETAINED_CLASSES.has(classification) && !liveFiles.has(referencePath)) {
839
+ errors.push(`${referencePath}: retained ${classification} reference is missing from live roots`);
840
+ continue;
841
+ }
842
+ if (ABSENT_CLASSES.has(classification)) {
843
+ if (liveFiles.has(referencePath)) {
844
+ errors.push(`${referencePath}: ${classification} inventory entries must be absent from live roots`);
845
+ }
846
+ continue;
847
+ }
848
+ if (classification === "current" || classification === "migration-only") {
849
+ if (classification === "migration-only" && !/^references\/(?:adapters|cli)\//u.test(referencePath)) {
850
+ errors.push(`${referencePath}: migration-only references must remain in references/adapters or references/cli`);
851
+ }
852
+ errors.push(...validateProductionParticipant(resolvedRoot, referencePath, "production_owner", entry.production_owner, false));
853
+ if (!Array.isArray(entry.consumers) || entry.consumers.length === 0) {
854
+ errors.push(`${referencePath}: ${classification} references require a runtime or validator consumer`);
855
+ }
856
+ else {
857
+ for (const [index, consumer] of entry.consumers.entries()) {
858
+ errors.push(...validateProductionParticipant(resolvedRoot, referencePath, `consumers[${index}]`, consumer, true));
859
+ }
860
+ }
861
+ }
862
+ else if (classification === "runbook") {
863
+ errors.push(...validateRunbook(resolvedRoot, referencePath, entry));
864
+ }
865
+ }
866
+ return errors;
867
+ }
868
+ export function retainedReferenceAuthorityMain(opts = {}) {
869
+ const errors = validateRetainedReferenceAuthority(opts.root);
870
+ const out = opts.out ?? ((line) => process.stdout.write(line + "\n"));
871
+ if (errors.length > 0) {
872
+ out("retained reference authority validation failed:");
873
+ for (const error of errors)
874
+ out(`- ${error}`);
875
+ return 1;
876
+ }
877
+ out("retained reference authority ok");
878
+ return 0;
879
+ }