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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (723) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +118 -22
  3. package/bundle/CHANGELOG.md +1361 -0
  4. package/bundle/DESIGN.md +229 -0
  5. package/bundle/LICENSE +201 -0
  6. package/bundle/README.md +143 -0
  7. package/bundle/UPGRADE.md +252 -0
  8. package/bundle/extract-corpus-parity.json +2 -4
  9. package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
  10. package/bundle/references/adapters/package-publication.json +488 -0
  11. package/bundle/references/adapters/package-registry.yaml +435 -188
  12. package/bundle/references/adapters/package-surface-characterization.md +66 -34
  13. package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
  14. package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
  15. package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
  16. package/bundle/references/adapters/runtime-retired-resources.yaml +333 -0
  17. package/bundle/references/analysis/evidence-tier-authority.yaml +518 -0
  18. package/bundle/references/analysis/verification-policy.yaml +266 -0
  19. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +17 -8
  20. package/bundle/references/artifacts/glossary-entry-contract.yaml +1254 -0
  21. package/bundle/references/artifacts/state-storage-authority.yaml +3061 -0
  22. package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
  23. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +3 -4
  24. package/bundle/references/cli/capability-instruction-contract.yaml +11 -14
  25. package/bundle/references/cli/hybrid-route-contract.yaml +438 -0
  26. package/bundle/references/cli/routing-model.md +152 -93
  27. package/bundle/references/cli/trigger-schema-enrichment.md +57 -46
  28. package/bundle/references/cli/update-channels.yaml +4 -2
  29. package/bundle/references/cli/vocabulary-index.yaml +5 -7
  30. package/bundle/references/cli/vocabulary.md +51 -93
  31. package/bundle/references/meta/retained-reference-authority.yaml +151 -0
  32. package/bundle/skills/agentera/SKILL.md +183 -63
  33. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +27 -19
  34. package/bundle/skills/agentera/capabilities/audit/schemas/exit.yaml +2 -2
  35. package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +13 -35
  36. package/bundle/skills/agentera/capabilities/audit/schemas/validation.yaml +30 -11
  37. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +44 -21
  38. package/bundle/skills/agentera/capabilities/build/schemas/exit.yaml +8 -6
  39. package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +14 -36
  40. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +95 -21
  41. package/bundle/skills/agentera/capabilities/design/schemas/artifacts.yaml +6 -6
  42. package/bundle/skills/agentera/capabilities/design/schemas/exit.yaml +5 -5
  43. package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +5 -34
  44. package/bundle/skills/agentera/capabilities/design/schemas/validation.yaml +2 -2
  45. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +17 -13
  46. package/bundle/skills/agentera/capabilities/discuss/schemas/exit.yaml +2 -2
  47. package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +6 -40
  48. package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +72 -5
  49. package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +24 -17
  50. package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +5 -35
  51. package/bundle/skills/agentera/capabilities/document/schemas/validation.yaml +13 -13
  52. package/bundle/skills/agentera/capabilities/optimize/schemas/artifacts.yaml +10 -10
  53. package/bundle/skills/agentera/capabilities/optimize/schemas/exit.yaml +2 -2
  54. package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +4 -35
  55. package/bundle/skills/agentera/capabilities/optimize/schemas/validation.yaml +3 -3
  56. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +34 -22
  57. package/bundle/skills/agentera/capabilities/orchestrate/schemas/exit.yaml +9 -7
  58. package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +5 -37
  59. package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +38 -37
  60. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +20 -16
  61. package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +8 -31
  62. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +66 -6
  63. package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +9 -4
  64. package/bundle/skills/agentera/capabilities/profile/schemas/exit.yaml +4 -4
  65. package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +8 -37
  66. package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +61 -3
  67. package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +6 -6
  68. package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +5 -29
  69. package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +13 -12
  70. package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +7 -49
  71. package/bundle/skills/agentera/capabilities/vision/schemas/artifacts.yaml +8 -8
  72. package/bundle/skills/agentera/capabilities/vision/schemas/exit.yaml +7 -6
  73. package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +7 -39
  74. package/bundle/skills/agentera/capabilities/vision/schemas/validation.yaml +14 -16
  75. package/bundle/skills/agentera/capability_schema_contract.yaml +32 -32
  76. package/bundle/skills/agentera/protocol.yaml +4 -4
  77. package/bundle/skills/agentera/route-phrases.yaml +81 -0
  78. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +1 -0
  79. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +30 -12
  80. package/bundle/skills/agentera/schemas/artifacts/design.yaml +1 -0
  81. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +7 -12
  82. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +140 -9
  83. package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +82 -0
  84. package/bundle/skills/agentera/schemas/artifacts/health.yaml +56 -19
  85. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +18 -4
  86. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +457 -32
  87. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +131 -18
  88. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +302 -7
  89. package/dist/analytics/extractCorpus/cli.js +52 -11
  90. package/dist/analytics/extractCorpus/copilotSessions.js +6 -4
  91. package/dist/analytics/extractCorpus/core.js +40 -12
  92. package/dist/analytics/extractCorpus/corpus.js +39 -17
  93. package/dist/analytics/extractCorpus/coverageAudit.js +44 -45
  94. package/dist/analytics/extractCorpus/cursorSessions.js +6 -4
  95. package/dist/analytics/extractCorpus/evidenceTiers.js +603 -0
  96. package/dist/analytics/extractCorpus/extractCorpusParity.js +4 -4
  97. package/dist/analytics/extractCorpus/filesystemSources.js +1 -5
  98. package/dist/analytics/extractCorpus/index.js +3 -1
  99. package/dist/analytics/extractCorpus/jsonlSessions.js +24 -5
  100. package/dist/analytics/extractCorpus/sqliteCaps.js +0 -1
  101. package/dist/analytics/extractCorpus/sqliteSessions.js +0 -1
  102. package/dist/analytics/extractCorpus/tierReader.js +108 -0
  103. package/dist/analytics/extractCorpus.js +0 -1
  104. package/dist/analytics/glossaryAdviceResolution.js +166 -0
  105. package/dist/analytics/glossaryInputAcquisition.js +319 -0
  106. package/dist/analytics/personalGlossaryAdmission.js +133 -0
  107. package/dist/analytics/personalGlossaryProfile.js +219 -0
  108. package/dist/analytics/profileSignals.js +211 -0
  109. package/dist/analytics/usageStats.js +150 -23
  110. package/dist/audit/terminologyDrift.js +281 -0
  111. package/dist/bin/agentera.js +3 -2
  112. package/dist/capabilities/audit/instructions.js +16 -6
  113. package/dist/capabilities/build/instructions.js +59 -6
  114. package/dist/capabilities/design/instructions.js +3 -4
  115. package/dist/capabilities/discuss/instructions.js +29 -6
  116. package/dist/capabilities/document/instructions.js +11 -6
  117. package/dist/capabilities/index.js +16 -14
  118. package/dist/capabilities/optimize/instructions.js +14 -6
  119. package/dist/capabilities/orchestrate/instructions.js +42 -6
  120. package/dist/capabilities/plan/instructions.js +30 -3
  121. package/dist/capabilities/profile/instructions.js +70 -6
  122. package/dist/capabilities/research/instructions.js +4 -5
  123. package/dist/capabilities/status/instructions.js +15 -6
  124. package/dist/capabilities/status/startupInstructions.js +34 -0
  125. package/dist/capabilities/vision/instructions.js +3 -5
  126. package/dist/cli/appContext.js +14 -7
  127. package/dist/cli/argvalidate.js +0 -1
  128. package/dist/cli/capabilityContext/benchmark.js +5 -4
  129. package/dist/cli/capabilityContext/bespoke.js +14 -6
  130. package/dist/cli/capabilityContext/build.js +116 -42
  131. package/dist/cli/capabilityContext/closeout.js +30 -27
  132. package/dist/cli/capabilityContext/contract.js +18 -27
  133. package/dist/cli/capabilityContext/evidence.js +84 -77
  134. package/dist/cli/capabilityContext/index.js +0 -1
  135. package/dist/cli/capabilityContext/orchestration.js +42 -18
  136. package/dist/cli/capabilityContext/planState.js +89 -96
  137. package/dist/cli/capabilityContext/progress.js +51 -12
  138. package/dist/cli/capabilityContext/projectVerification.js +409 -0
  139. package/dist/cli/capabilityContext/shared.js +9 -20
  140. package/dist/cli/capabilityContext/slim.js +52 -8
  141. package/dist/cli/capabilityContext/startup.js +51 -114
  142. package/dist/cli/capabilityContext/startupAggregation.js +68 -0
  143. package/dist/cli/capabilityContext/types.js +26 -10
  144. package/dist/cli/capabilityContext.js +0 -1
  145. package/dist/cli/commands/appHome.js +0 -1
  146. package/dist/cli/commands/capability.js +2 -2
  147. package/dist/cli/commands/compact.js +163 -13
  148. package/dist/cli/commands/doctor.js +117 -11
  149. package/dist/cli/commands/durability.js +81 -0
  150. package/dist/cli/commands/glossaryAdvice.js +138 -0
  151. package/dist/cli/commands/lint.js +22 -8
  152. package/dist/cli/commands/personalGlossary.js +176 -0
  153. package/dist/cli/commands/prime/briefOrientation.js +746 -0
  154. package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
  155. package/dist/cli/commands/prime/bundleStatus.js +54 -4
  156. package/dist/cli/commands/prime/collectEntityOrientation.js +326 -0
  157. package/dist/cli/commands/prime/collectOrientationState.js +126 -63
  158. package/dist/cli/commands/prime/orientationOutput.js +267 -56
  159. package/dist/cli/commands/prime/types.js +0 -1
  160. package/dist/cli/commands/prime/v1Migration.js +0 -1
  161. package/dist/cli/commands/prime.js +76 -11
  162. package/dist/cli/commands/profileGrounding.js +55 -0
  163. package/dist/cli/commands/query.js +74 -52
  164. package/dist/cli/commands/report.js +73 -19
  165. package/dist/cli/commands/route.js +142 -0
  166. package/dist/cli/commands/schema.js +257 -138
  167. package/dist/cli/commands/state/decisions.js +40 -56
  168. package/dist/cli/commands/state/docs.js +58 -85
  169. package/dist/cli/commands/state/experimentRecords.js +151 -0
  170. package/dist/cli/commands/state/experiments.js +11 -65
  171. package/dist/cli/commands/state/get.js +129 -0
  172. package/dist/cli/commands/state/health.js +11 -113
  173. package/dist/cli/commands/state/index.js +6 -41
  174. package/dist/cli/commands/state/list.js +194 -0
  175. package/dist/cli/commands/state/objective.js +21 -65
  176. package/dist/cli/commands/state/plan.js +11 -170
  177. package/dist/cli/commands/state/planTasks.js +154 -0
  178. package/dist/cli/commands/state/plans.js +154 -0
  179. package/dist/cli/commands/state/progress.js +11 -45
  180. package/dist/cli/commands/state/shared.js +0 -1
  181. package/dist/cli/commands/state/todo.js +28 -107
  182. package/dist/cli/commands/state/write.js +433 -0
  183. package/dist/cli/commands/upgrade.js +146 -5
  184. package/dist/cli/commands/upgradeVerify.js +118 -0
  185. package/dist/cli/commands/validate.js +235 -136
  186. package/dist/cli/commands/verify.js +23 -8
  187. package/dist/cli/contracts/bundleStatus.js +0 -1
  188. package/dist/cli/contracts/orientationState.js +0 -1
  189. package/dist/cli/dispatch/argvParser.js +0 -1
  190. package/dist/cli/dispatch/check.js +84 -40
  191. package/dist/cli/dispatch/commands.js +3 -3
  192. package/dist/cli/dispatch/index.js +77 -52
  193. package/dist/cli/dispatch/lifecycle.js +117 -62
  194. package/dist/cli/dispatch/prime.js +37 -2
  195. package/dist/cli/dispatch/projections.js +17 -0
  196. package/dist/cli/dispatch/shared.js +1 -2
  197. package/dist/cli/dispatch/state.js +62 -66
  198. package/dist/cli/dispatch.js +0 -1
  199. package/dist/cli/errors.js +16 -17
  200. package/dist/cli/help.js +358 -39
  201. package/dist/cli/migrationRequired.js +122 -0
  202. package/dist/cli/orientation/attention.js +19 -19
  203. package/dist/cli/orientation/corpusCoverage.js +32 -1
  204. package/dist/cli/orientation.js +346 -129
  205. package/dist/cli/planArtifacts.js +350 -0
  206. package/dist/cli/planEvidence.js +157 -0
  207. package/dist/cli/planLifecycleState.js +36 -0
  208. package/dist/cli/planTaskIndex.js +11 -0
  209. package/dist/cli/preCutoverCommand.js +32 -0
  210. package/dist/cli/prime-blob.js +71 -3
  211. package/dist/cli/profileAcquisition.js +167 -0
  212. package/dist/cli/startupCompletenessContract.js +11 -8
  213. package/dist/cli/stateQuery.js +47 -12
  214. package/dist/cli/structured.js +0 -1
  215. package/dist/cli/todoMarkdown.js +25 -12
  216. package/dist/cli/todoReadinessSelection.js +192 -0
  217. package/dist/cli/todoSeverity.js +0 -1
  218. package/dist/core/atomicWriter.js +20 -0
  219. package/dist/core/developmentChannel.js +1 -0
  220. package/dist/core/developmentInvocation.js +374 -0
  221. package/dist/core/difflib.js +0 -1
  222. package/dist/core/envPaths.js +0 -1
  223. package/dist/core/jsonValue.js +0 -1
  224. package/dist/core/paths.js +0 -1
  225. package/dist/core/pyjson.js +0 -1
  226. package/dist/core/shell.js +4 -0
  227. package/dist/core/skillIdentity.js +23 -0
  228. package/dist/core/sourceRoot.js +9 -12
  229. package/dist/core/text.js +10 -0
  230. package/dist/core/toml.js +0 -1
  231. package/dist/core/yaml.js +8 -1
  232. package/dist/eval/evalSkills.js +13 -14
  233. package/dist/eval/hybridRouteEvaluation.js +155 -0
  234. package/dist/eval/semanticEval.js +0 -1
  235. package/dist/eval/semanticFixtures.js +0 -1
  236. package/dist/hooks/common.js +3 -56
  237. package/dist/hooks/compaction/apply.js +224 -47
  238. package/dist/hooks/compaction/dryRun.js +2 -1
  239. package/dist/hooks/compaction/index.js +5 -6
  240. package/dist/hooks/compaction/parse.js +73 -6
  241. package/dist/hooks/compaction/retention.js +28 -25
  242. package/dist/hooks/compaction/status.js +145 -26
  243. package/dist/hooks/compaction/types.js +0 -1
  244. package/dist/hooks/validateArtifact/agentFacing.js +0 -1
  245. package/dist/hooks/validateArtifact/index.js +6 -65
  246. package/dist/hooks/validateArtifact/markdown.js +9 -10
  247. package/dist/hooks/validateArtifact/schema.js +96 -9
  248. package/dist/hooks/validateArtifact/traversal.js +12 -11
  249. package/dist/hooks/validateArtifact/violations.js +5 -3
  250. package/dist/migrate/v2HandoffManifest.js +8 -3
  251. package/dist/registries/activationContract.js +2 -0
  252. package/dist/registries/activationTuples.js +108 -0
  253. package/dist/registries/artifactProtocolIds.js +2 -1
  254. package/dist/registries/artifactRegistry.js +207 -60
  255. package/dist/registries/artifactSchemaProjection.js +45 -0
  256. package/dist/registries/capabilityContract.js +5 -21
  257. package/dist/registries/evaluatorHandoffContract.js +0 -1
  258. package/dist/registries/evidenceTierContract.js +371 -0
  259. package/dist/registries/glossaryAdviceContract.js +79 -0
  260. package/dist/registries/glossaryCaveatContract.js +67 -0
  261. package/dist/registries/glossaryConsumerContractValidation.js +787 -0
  262. package/dist/registries/glossaryEntryContract.js +757 -0
  263. package/dist/registries/glossaryTermIdentity.js +17 -0
  264. package/dist/registries/glossaryTermOccurrence.js +20 -0
  265. package/dist/registries/hybridRoute.js +274 -0
  266. package/dist/registries/hybridRouteReceipt.js +221 -0
  267. package/dist/registries/packagePublication.js +273 -0
  268. package/dist/registries/packageRegistry.js +184 -209
  269. package/dist/registries/todoReadinessContract.js +448 -0
  270. package/dist/registries/triggerLoader.js +7 -44
  271. package/dist/registries/verbosityBudgetContract.js +205 -0
  272. package/dist/release/releaseMetadata.js +155 -5
  273. package/dist/runtime/lifecycleAdapterContract.js +457 -0
  274. package/dist/runtime/lifecycleAdapters.js +777 -0
  275. package/dist/runtime/lifecycleAuthority.js +453 -0
  276. package/dist/runtime/lifecycleOperationContract.js +123 -0
  277. package/dist/runtime/lifecycleOperations.js +634 -0
  278. package/dist/runtime/lifecycleOwnershipJournal.js +622 -0
  279. package/dist/runtime/lifecyclePublication.js +415 -0
  280. package/dist/runtime/lifecycleSnapshot.js +438 -0
  281. package/dist/runtime/nativeResourceCleanup.js +502 -0
  282. package/dist/setup/opencode.js +20 -13
  283. package/dist/setup/opencodeConstants.js +1 -0
  284. package/dist/setup/sharedSkill.js +45 -0
  285. package/dist/setup/smokeChecks.js +14 -75
  286. package/dist/state/archiveDiscovery.js +580 -0
  287. package/dist/state/archivePublication.js +225 -0
  288. package/dist/state/archiveRecovery.js +237 -0
  289. package/dist/state/archiveReplay.js +53 -0
  290. package/dist/state/canonicalMigrationRecord.js +36 -0
  291. package/dist/state/changelog.js +221 -0
  292. package/dist/state/decisionEntities.js +367 -0
  293. package/dist/state/decisionLegacyValidation.js +215 -0
  294. package/dist/state/decisionMigrationProvenance.js +199 -0
  295. package/dist/state/decisionOverlay.js +254 -0
  296. package/dist/state/decisionRevision.js +256 -0
  297. package/dist/state/decisionRevisionMigration.js +89 -0
  298. package/dist/state/directRetrieval.js +323 -0
  299. package/dist/state/durability.js +324 -0
  300. package/dist/state/entityCutover.js +459 -0
  301. package/dist/state/entityCutoverGit.js +127 -0
  302. package/dist/state/entityGlossaryAuthority.js +13 -0
  303. package/dist/state/entityListProjection.js +187 -0
  304. package/dist/state/entityListRuntimeRegistry.js +85 -0
  305. package/dist/state/entityMigrationCausality.js +97 -0
  306. package/dist/state/entityMigrationIdentity.js +5 -0
  307. package/dist/state/entityMigrationPreview.js +840 -0
  308. package/dist/state/entityMigrationTodo.js +133 -0
  309. package/dist/state/entityPublicationContext.js +859 -0
  310. package/dist/state/entityRetrievalHelp.js +506 -0
  311. package/dist/state/entityStorage.js +899 -0
  312. package/dist/state/exactReplacementRecovery.js +18 -0
  313. package/dist/state/experimentArchive.js +63 -0
  314. package/dist/state/experimentIdentity.js +202 -0
  315. package/dist/state/healthEntities.js +262 -0
  316. package/dist/state/healthEntityValidation.js +18 -0
  317. package/dist/state/healthRepair.js +69 -0
  318. package/dist/state/installRoot.js +15 -7
  319. package/dist/state/legacyEntityCutoverEvidence.js +65 -0
  320. package/dist/state/legacyIdentity.js +47 -0
  321. package/dist/state/legacySummaryRecord.js +6 -0
  322. package/dist/state/listAccounting.js +54 -0
  323. package/dist/state/listClassification.js +17 -0
  324. package/dist/state/listCursor.js +42 -0
  325. package/dist/state/listRetrieval.js +781 -0
  326. package/dist/state/migrationSourceBinding.js +30 -0
  327. package/dist/state/objectiveExperimentEntities.js +322 -0
  328. package/dist/state/planEntities.js +1027 -0
  329. package/dist/state/planIdentity.js +47 -0
  330. package/dist/state/planLineageValidation.js +52 -0
  331. package/dist/state/planReplacementTransaction.js +475 -0
  332. package/dist/state/planRetrieval.js +313 -0
  333. package/dist/state/planTaskRetrieval.js +294 -0
  334. package/dist/state/progressEntities.js +512 -0
  335. package/dist/state/progressGlossaryCaveat.js +168 -0
  336. package/dist/state/progressPublicationOrder.js +19 -0
  337. package/dist/state/progressWritePolicy.js +33 -0
  338. package/dist/state/projectRoot.js +62 -0
  339. package/dist/state/projectionPolicy.js +190 -0
  340. package/dist/state/retrievalAuthority.js +156 -0
  341. package/dist/state/safeProjectFile.js +155 -0
  342. package/dist/state/startupAnalysis/benchmark.js +70 -9
  343. package/dist/state/startupAnalysis/contract.js +44 -10
  344. package/dist/state/startupAnalysis/helpers.js +1 -2
  345. package/dist/state/startupAnalysis/index.js +0 -1
  346. package/dist/state/startupAnalysis/metrics.js +0 -1
  347. package/dist/state/startupAnalysis/records.js +0 -1
  348. package/dist/state/startupAnalysis/report.js +0 -1
  349. package/dist/state/startupAnalysis/threshold.js +13 -1
  350. package/dist/state/startupAnalysis.js +0 -1
  351. package/dist/state/startupProjection.js +499 -0
  352. package/dist/state/stateMode.js +222 -0
  353. package/dist/state/stateStorageAuthority.js +47 -0
  354. package/dist/state/summaryEntityRead.js +25 -0
  355. package/dist/state/summaryMigrationProvenance.js +66 -0
  356. package/dist/state/summarySourceRowAuthority.js +36 -0
  357. package/dist/state/todoActivationSafety.js +58 -0
  358. package/dist/state/todoDocsEntities.js +1124 -0
  359. package/dist/state/todoDocsEntityValidation.js +158 -0
  360. package/dist/state/todoMarkdownProjection.js +51 -0
  361. package/dist/state/todoReconciliationActivation.js +182 -0
  362. package/dist/state/todoReconciliationInspection.js +171 -0
  363. package/dist/state/todoReconciliationRepair.js +318 -0
  364. package/dist/state/todoReconciliationTransaction.js +595 -0
  365. package/dist/state/write/assign.js +20 -0
  366. package/dist/state/write/candidateMutation.js +269 -0
  367. package/dist/state/write/errors.js +11 -0
  368. package/dist/state/write/experimentPublication.js +192 -0
  369. package/dist/state/write/explain.js +377 -0
  370. package/dist/state/write/fields.js +61 -0
  371. package/dist/state/write/glossaryPublication.js +263 -0
  372. package/dist/state/write/grammar.js +285 -0
  373. package/dist/state/write/helpers.js +29 -0
  374. package/dist/state/write/index.js +12 -0
  375. package/dist/state/write/input.js +391 -0
  376. package/dist/state/write/lock.js +837 -0
  377. package/dist/state/write/mutation.js +234 -0
  378. package/dist/state/write/operations.js +170 -0
  379. package/dist/state/write/planEvaluation.js +128 -0
  380. package/dist/state/write/planPublication.js +179 -0
  381. package/dist/state/write/runtimeOperations.js +146 -0
  382. package/dist/state/write/serialize.js +1 -0
  383. package/dist/state/write/transaction.js +57 -0
  384. package/dist/state/write/validate.js +7 -0
  385. package/dist/upgrade/appContentRefresh.js +77 -36
  386. package/dist/upgrade/appModel.js +0 -1
  387. package/dist/upgrade/atomicWriter.js +1 -0
  388. package/dist/upgrade/bundleEvidence.js +0 -1
  389. package/dist/upgrade/channels.js +6 -9
  390. package/dist/upgrade/compatibility.js +43 -17
  391. package/dist/upgrade/doctor.js +55 -32
  392. package/dist/upgrade/doctorClassifier.js +11 -1
  393. package/dist/upgrade/installedHooksRetirement.js +46 -40
  394. package/dist/upgrade/legacyAgentCleanup.js +187 -21
  395. package/dist/upgrade/lifecycleUpgrade.js +113 -0
  396. package/dist/upgrade/migrateArtifactsV2ToV3.js +334 -64
  397. package/dist/upgrade/migrationPublication.js +122 -0
  398. package/dist/upgrade/nextMajorDoctor.js +0 -1
  399. package/dist/upgrade/npxPlatformStatus.js +0 -1
  400. package/dist/upgrade/projectIntegration.js +121 -159
  401. package/dist/upgrade/projectIntegrationDecision.js +42 -85
  402. package/dist/upgrade/retiredResourceDiagnostics.js +117 -0
  403. package/dist/upgrade/runtimeMigration.js +262 -453
  404. package/dist/upgrade/upgradeCommands.js +14 -1
  405. package/dist/upgrade/upgradeLock.js +85 -0
  406. package/dist/upgrade/upgradeOrchestrator.js +263 -59
  407. package/dist/upgrade/v3CapabilitySurface.js +2 -3
  408. package/dist/upgrade/versionResolution.js +0 -1
  409. package/dist/validate/activationArtifactEvidence.js +852 -0
  410. package/dist/validate/activationArtifactEvidenceTypes.js +12 -0
  411. package/dist/validate/activationConjunction.js +816 -0
  412. package/dist/validate/activationEvidenceManifest.js +531 -0
  413. package/dist/validate/activationPackageSemantics.js +29 -0
  414. package/dist/validate/appHomeContract.js +1 -7
  415. package/dist/validate/bootstrapAuthority.js +44 -0
  416. package/dist/validate/capability.js +11 -3
  417. package/dist/validate/crossCapability.js +14 -9
  418. package/dist/validate/retainedReferenceAuthority.js +879 -0
  419. package/dist/validate/selfAudit.js +39 -45
  420. package/dist/validate/v1LegacyCruft.js +131 -0
  421. package/dist/validate/vocabularyAuthority.js +8 -8
  422. package/package.json +41 -13
  423. package/bundle/references/adapters/cursor.md +0 -214
  424. package/bundle/references/adapters/opencode.md +0 -530
  425. package/bundle/references/adapters/package-manifest-interface-model.yaml +0 -337
  426. package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
  427. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
  428. package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -554
  429. package/bundle/references/adapters/runtime-feature-parity.md +0 -189
  430. package/bundle/references/analysis/benchmark.md +0 -267
  431. package/bundle/references/analysis/startup-measurement-contract.yaml +0 -424
  432. package/bundle/references/cli/agent-ready-state-contract.yaml +0 -953
  433. package/bundle/references/cli/audience-namespace-cli-migration.yaml +0 -369
  434. package/bundle/references/cli/bundle-skill-vocabulary.yaml +0 -250
  435. package/bundle/references/cli/capability-tool-classification.yaml +0 -53
  436. package/bundle/references/cli/coexistence-probe.yaml +0 -13
  437. package/bundle/references/cli/parity-expected-actual-template.md +0 -30
  438. package/bundle/references/cli/routing-execution-vocabulary.yaml +0 -281
  439. package/bundle/references/cli/single-name-protocol.yaml +0 -42
  440. package/bundle/references/cli/upgrade-repair-wording.md +0 -45
  441. package/bundle/references/cli/v3-handoff-manifest.schema.yaml +0 -98
  442. package/bundle/references/meta/documentation-inventory.md +0 -49
  443. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  444. package/bundle/skills/agentera/agents/audit.toml +0 -6
  445. package/bundle/skills/agentera/agents/build.toml +0 -6
  446. package/bundle/skills/agentera/agents/design.toml +0 -6
  447. package/bundle/skills/agentera/agents/discuss.toml +0 -6
  448. package/bundle/skills/agentera/agents/document.toml +0 -6
  449. package/bundle/skills/agentera/agents/optimize.toml +0 -6
  450. package/bundle/skills/agentera/agents/orchestrate.toml +0 -6
  451. package/bundle/skills/agentera/agents/plan.toml +0 -6
  452. package/bundle/skills/agentera/agents/profile.toml +0 -6
  453. package/bundle/skills/agentera/agents/research.toml +0 -6
  454. package/bundle/skills/agentera/agents/status.toml +0 -6
  455. package/bundle/skills/agentera/agents/vision.toml +0 -6
  456. package/bundle/skills/agentera/references/contract.md +0 -1048
  457. package/dist/analytics/extractCorpus/cli.js.map +0 -1
  458. package/dist/analytics/extractCorpus/copilotSessions.js.map +0 -1
  459. package/dist/analytics/extractCorpus/core.js.map +0 -1
  460. package/dist/analytics/extractCorpus/corpus.js.map +0 -1
  461. package/dist/analytics/extractCorpus/coverageAudit.js.map +0 -1
  462. package/dist/analytics/extractCorpus/cursorSessions.js.map +0 -1
  463. package/dist/analytics/extractCorpus/extractCorpusParity.js.map +0 -1
  464. package/dist/analytics/extractCorpus/filesystemSources.js.map +0 -1
  465. package/dist/analytics/extractCorpus/index.js.map +0 -1
  466. package/dist/analytics/extractCorpus/jsonlSessions.js.map +0 -1
  467. package/dist/analytics/extractCorpus/sqliteCaps.js.map +0 -1
  468. package/dist/analytics/extractCorpus/sqliteSessions.js.map +0 -1
  469. package/dist/analytics/extractCorpus.js.map +0 -1
  470. package/dist/analytics/usageStats.js.map +0 -1
  471. package/dist/bin/agentera.js.map +0 -1
  472. package/dist/capabilities/audit/instructions.js.map +0 -1
  473. package/dist/capabilities/build/instructions.js.map +0 -1
  474. package/dist/capabilities/design/instructions.js.map +0 -1
  475. package/dist/capabilities/discuss/instructions.js.map +0 -1
  476. package/dist/capabilities/document/instructions.js.map +0 -1
  477. package/dist/capabilities/dokumentera/instructions.js +0 -6
  478. package/dist/capabilities/dokumentera/instructions.js.map +0 -1
  479. package/dist/capabilities/hej/instructions.js +0 -6
  480. package/dist/capabilities/hej/instructions.js.map +0 -1
  481. package/dist/capabilities/index.js.map +0 -1
  482. package/dist/capabilities/inspektera/instructions.js +0 -6
  483. package/dist/capabilities/inspektera/instructions.js.map +0 -1
  484. package/dist/capabilities/inspirera/instructions.js +0 -6
  485. package/dist/capabilities/inspirera/instructions.js.map +0 -1
  486. package/dist/capabilities/optimera/instructions.js +0 -6
  487. package/dist/capabilities/optimera/instructions.js.map +0 -1
  488. package/dist/capabilities/optimize/instructions.js.map +0 -1
  489. package/dist/capabilities/orchestrate/instructions.js.map +0 -1
  490. package/dist/capabilities/orkestrera/instructions.js +0 -6
  491. package/dist/capabilities/orkestrera/instructions.js.map +0 -1
  492. package/dist/capabilities/plan/instructions.js.map +0 -1
  493. package/dist/capabilities/planera/instructions.js +0 -6
  494. package/dist/capabilities/planera/instructions.js.map +0 -1
  495. package/dist/capabilities/profile/instructions.js.map +0 -1
  496. package/dist/capabilities/profilera/instructions.js +0 -6
  497. package/dist/capabilities/profilera/instructions.js.map +0 -1
  498. package/dist/capabilities/realisera/instructions.js +0 -6
  499. package/dist/capabilities/realisera/instructions.js.map +0 -1
  500. package/dist/capabilities/research/instructions.js.map +0 -1
  501. package/dist/capabilities/resonera/instructions.js +0 -6
  502. package/dist/capabilities/resonera/instructions.js.map +0 -1
  503. package/dist/capabilities/status/instructions.js.map +0 -1
  504. package/dist/capabilities/vision/instructions.js.map +0 -1
  505. package/dist/capabilities/visionera/instructions.js +0 -6
  506. package/dist/capabilities/visionera/instructions.js.map +0 -1
  507. package/dist/capabilities/visualisera/instructions.js +0 -5
  508. package/dist/capabilities/visualisera/instructions.js.map +0 -1
  509. package/dist/cli/appContext.js.map +0 -1
  510. package/dist/cli/argvalidate.js.map +0 -1
  511. package/dist/cli/capabilityContext/benchmark.js.map +0 -1
  512. package/dist/cli/capabilityContext/bespoke.js.map +0 -1
  513. package/dist/cli/capabilityContext/build.js.map +0 -1
  514. package/dist/cli/capabilityContext/closeout.js.map +0 -1
  515. package/dist/cli/capabilityContext/contract.js.map +0 -1
  516. package/dist/cli/capabilityContext/evidence.js.map +0 -1
  517. package/dist/cli/capabilityContext/index.js.map +0 -1
  518. package/dist/cli/capabilityContext/orchestration.js.map +0 -1
  519. package/dist/cli/capabilityContext/planState.js.map +0 -1
  520. package/dist/cli/capabilityContext/progress.js.map +0 -1
  521. package/dist/cli/capabilityContext/realisera.js +0 -174
  522. package/dist/cli/capabilityContext/realisera.js.map +0 -1
  523. package/dist/cli/capabilityContext/shared.js.map +0 -1
  524. package/dist/cli/capabilityContext/slim.js.map +0 -1
  525. package/dist/cli/capabilityContext/startup.js.map +0 -1
  526. package/dist/cli/capabilityContext/types.js.map +0 -1
  527. package/dist/cli/capabilityContext.js.map +0 -1
  528. package/dist/cli/commands/appHome.js.map +0 -1
  529. package/dist/cli/commands/backfill.js +0 -84
  530. package/dist/cli/commands/backfill.js.map +0 -1
  531. package/dist/cli/commands/capability.js.map +0 -1
  532. package/dist/cli/commands/compact.js.map +0 -1
  533. package/dist/cli/commands/doctor.js.map +0 -1
  534. package/dist/cli/commands/lint.js.map +0 -1
  535. package/dist/cli/commands/prime/bundleStatus.js.map +0 -1
  536. package/dist/cli/commands/prime/collectOrientationState.js.map +0 -1
  537. package/dist/cli/commands/prime/orientationOutput.js.map +0 -1
  538. package/dist/cli/commands/prime/routeOutput.js +0 -50
  539. package/dist/cli/commands/prime/routeOutput.js.map +0 -1
  540. package/dist/cli/commands/prime/types.js.map +0 -1
  541. package/dist/cli/commands/prime/v1Migration.js.map +0 -1
  542. package/dist/cli/commands/prime.js.map +0 -1
  543. package/dist/cli/commands/query.js.map +0 -1
  544. package/dist/cli/commands/report.js.map +0 -1
  545. package/dist/cli/commands/schema.js.map +0 -1
  546. package/dist/cli/commands/state/decisions.js.map +0 -1
  547. package/dist/cli/commands/state/docs.js.map +0 -1
  548. package/dist/cli/commands/state/experiments.js.map +0 -1
  549. package/dist/cli/commands/state/health.js.map +0 -1
  550. package/dist/cli/commands/state/index.js.map +0 -1
  551. package/dist/cli/commands/state/objective.js.map +0 -1
  552. package/dist/cli/commands/state/plan.js.map +0 -1
  553. package/dist/cli/commands/state/progress.js.map +0 -1
  554. package/dist/cli/commands/state/shared.js.map +0 -1
  555. package/dist/cli/commands/state/todo.js.map +0 -1
  556. package/dist/cli/commands/state.js +0 -1023
  557. package/dist/cli/commands/state.js.map +0 -1
  558. package/dist/cli/commands/upgrade.js.map +0 -1
  559. package/dist/cli/commands/validate.js.map +0 -1
  560. package/dist/cli/commands/verify.js.map +0 -1
  561. package/dist/cli/contracts/bundleStatus.js.map +0 -1
  562. package/dist/cli/contracts/orientationState.js.map +0 -1
  563. package/dist/cli/dispatch/argvParser.js.map +0 -1
  564. package/dist/cli/dispatch/check.js.map +0 -1
  565. package/dist/cli/dispatch/commands.js.map +0 -1
  566. package/dist/cli/dispatch/index.js.map +0 -1
  567. package/dist/cli/dispatch/lifecycle.js.map +0 -1
  568. package/dist/cli/dispatch/prime.js.map +0 -1
  569. package/dist/cli/dispatch/shared.js.map +0 -1
  570. package/dist/cli/dispatch/state.js.map +0 -1
  571. package/dist/cli/dispatch.js.map +0 -1
  572. package/dist/cli/errors.js.map +0 -1
  573. package/dist/cli/help.js.map +0 -1
  574. package/dist/cli/orientation/attention.js.map +0 -1
  575. package/dist/cli/orientation/corpusCoverage.js.map +0 -1
  576. package/dist/cli/orientation.js.map +0 -1
  577. package/dist/cli/prime-blob.js.map +0 -1
  578. package/dist/cli/startupCompletenessContract.js.map +0 -1
  579. package/dist/cli/stateQuery.js.map +0 -1
  580. package/dist/cli/structured.js.map +0 -1
  581. package/dist/cli/todoMarkdown.js.map +0 -1
  582. package/dist/cli/todoSeverity.js.map +0 -1
  583. package/dist/core/difflib.js.map +0 -1
  584. package/dist/core/envPaths.js.map +0 -1
  585. package/dist/core/git.js +0 -43
  586. package/dist/core/git.js.map +0 -1
  587. package/dist/core/jsonValue.js.map +0 -1
  588. package/dist/core/paths.js.map +0 -1
  589. package/dist/core/pyjson.js.map +0 -1
  590. package/dist/core/sourceRoot.js.map +0 -1
  591. package/dist/core/toml.js.map +0 -1
  592. package/dist/core/yaml.js.map +0 -1
  593. package/dist/eval/evalSkills.js.map +0 -1
  594. package/dist/eval/semanticEval.js.map +0 -1
  595. package/dist/eval/semanticFixtures.js.map +0 -1
  596. package/dist/hooks/common.js.map +0 -1
  597. package/dist/hooks/compaction/apply.js.map +0 -1
  598. package/dist/hooks/compaction/dryRun.js.map +0 -1
  599. package/dist/hooks/compaction/index.js.map +0 -1
  600. package/dist/hooks/compaction/parse.js.map +0 -1
  601. package/dist/hooks/compaction/retention.js.map +0 -1
  602. package/dist/hooks/compaction/status.js.map +0 -1
  603. package/dist/hooks/compaction/todoResolved.js +0 -137
  604. package/dist/hooks/compaction/todoResolved.js.map +0 -1
  605. package/dist/hooks/compaction/types.js.map +0 -1
  606. package/dist/hooks/compaction.js +0 -935
  607. package/dist/hooks/compaction.js.map +0 -1
  608. package/dist/hooks/cursorPreToolUse.js +0 -19
  609. package/dist/hooks/cursorPreToolUse.js.map +0 -1
  610. package/dist/hooks/cursorSessionStart.js +0 -79
  611. package/dist/hooks/cursorSessionStart.js.map +0 -1
  612. package/dist/hooks/sessionStart.js +0 -216
  613. package/dist/hooks/sessionStart.js.map +0 -1
  614. package/dist/hooks/sessionStop.js +0 -206
  615. package/dist/hooks/sessionStop.js.map +0 -1
  616. package/dist/hooks/todoLayout.js +0 -177
  617. package/dist/hooks/todoLayout.js.map +0 -1
  618. package/dist/hooks/validateArtifact/agentFacing.js.map +0 -1
  619. package/dist/hooks/validateArtifact/index.js.map +0 -1
  620. package/dist/hooks/validateArtifact/markdown.js.map +0 -1
  621. package/dist/hooks/validateArtifact/runtime.js +0 -86
  622. package/dist/hooks/validateArtifact/runtime.js.map +0 -1
  623. package/dist/hooks/validateArtifact/schema.js.map +0 -1
  624. package/dist/hooks/validateArtifact/traversal.js.map +0 -1
  625. package/dist/hooks/validateArtifact/violations.js.map +0 -1
  626. package/dist/hooks/validateArtifact.js +0 -924
  627. package/dist/hooks/validateArtifact.js.map +0 -1
  628. package/dist/migrate/v2HandoffManifest.js.map +0 -1
  629. package/dist/registries/artifactProtocolIds.js.map +0 -1
  630. package/dist/registries/artifactRegistry.js.map +0 -1
  631. package/dist/registries/capabilityContract.js.map +0 -1
  632. package/dist/registries/evaluatorHandoffContract.js.map +0 -1
  633. package/dist/registries/packageRegistry.js.map +0 -1
  634. package/dist/registries/runtimeAdapterRegistry.js +0 -316
  635. package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
  636. package/dist/registries/triggerLoader.js.map +0 -1
  637. package/dist/release/releaseMetadata.js.map +0 -1
  638. package/dist/routing/index.js +0 -2
  639. package/dist/routing/index.js.map +0 -1
  640. package/dist/routing/routeEngine.js +0 -189
  641. package/dist/routing/routeEngine.js.map +0 -1
  642. package/dist/setup/codex/agents.js +0 -96
  643. package/dist/setup/codex/agents.js.map +0 -1
  644. package/dist/setup/codex/cli.js +0 -161
  645. package/dist/setup/codex/cli.js.map +0 -1
  646. package/dist/setup/codex/configToml.js +0 -639
  647. package/dist/setup/codex/configToml.js.map +0 -1
  648. package/dist/setup/codex/constants.js +0 -29
  649. package/dist/setup/codex/constants.js.map +0 -1
  650. package/dist/setup/codex/installRoot.js +0 -64
  651. package/dist/setup/codex/installRoot.js.map +0 -1
  652. package/dist/setup/codex/state.js +0 -270
  653. package/dist/setup/codex/state.js.map +0 -1
  654. package/dist/setup/codex.js +0 -12
  655. package/dist/setup/codex.js.map +0 -1
  656. package/dist/setup/copilot.js +0 -227
  657. package/dist/setup/copilot.js.map +0 -1
  658. package/dist/setup/cursor.js +0 -129
  659. package/dist/setup/cursor.js.map +0 -1
  660. package/dist/setup/cursorSurfaces.js +0 -67
  661. package/dist/setup/cursorSurfaces.js.map +0 -1
  662. package/dist/setup/doctor/core.js +0 -300
  663. package/dist/setup/doctor/core.js.map +0 -1
  664. package/dist/setup/doctor/diagnostics.js +0 -240
  665. package/dist/setup/doctor/diagnostics.js.map +0 -1
  666. package/dist/setup/doctor/opencode.js +0 -313
  667. package/dist/setup/doctor/opencode.js.map +0 -1
  668. package/dist/setup/doctor/report.js +0 -425
  669. package/dist/setup/doctor/report.js.map +0 -1
  670. package/dist/setup/doctor.js +0 -10
  671. package/dist/setup/doctor.js.map +0 -1
  672. package/dist/setup/opencode.js.map +0 -1
  673. package/dist/setup/smokeChecks.js.map +0 -1
  674. package/dist/state/installRoot.js.map +0 -1
  675. package/dist/state/progressCommit.js +0 -289
  676. package/dist/state/progressCommit.js.map +0 -1
  677. package/dist/state/startupAnalysis/benchmark.js.map +0 -1
  678. package/dist/state/startupAnalysis/contract.js.map +0 -1
  679. package/dist/state/startupAnalysis/helpers.js.map +0 -1
  680. package/dist/state/startupAnalysis/index.js.map +0 -1
  681. package/dist/state/startupAnalysis/metrics.js.map +0 -1
  682. package/dist/state/startupAnalysis/records.js.map +0 -1
  683. package/dist/state/startupAnalysis/report.js.map +0 -1
  684. package/dist/state/startupAnalysis/threshold.js.map +0 -1
  685. package/dist/state/startupAnalysis.js.map +0 -1
  686. package/dist/upgrade/appContentRefresh.js.map +0 -1
  687. package/dist/upgrade/appModel.js.map +0 -1
  688. package/dist/upgrade/bundleEvidence.js.map +0 -1
  689. package/dist/upgrade/channels.js.map +0 -1
  690. package/dist/upgrade/cliProbe.js +0 -22
  691. package/dist/upgrade/cliProbe.js.map +0 -1
  692. package/dist/upgrade/coexistenceProbe.js +0 -107
  693. package/dist/upgrade/coexistenceProbe.js.map +0 -1
  694. package/dist/upgrade/compatibility.js.map +0 -1
  695. package/dist/upgrade/doctor.js.map +0 -1
  696. package/dist/upgrade/doctorClassifier.js.map +0 -1
  697. package/dist/upgrade/installedHooksRetirement.js.map +0 -1
  698. package/dist/upgrade/legacyAgentCleanup.js.map +0 -1
  699. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -570
  700. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
  701. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +0 -1
  702. package/dist/upgrade/nextMajorDoctor.js.map +0 -1
  703. package/dist/upgrade/npxPlatformStatus.js.map +0 -1
  704. package/dist/upgrade/projectIntegration.js.map +0 -1
  705. package/dist/upgrade/projectIntegrationDecision.js.map +0 -1
  706. package/dist/upgrade/runtimeMigration.js.map +0 -1
  707. package/dist/upgrade/upgradeCommands.js.map +0 -1
  708. package/dist/upgrade/upgradeOrchestrator.js.map +0 -1
  709. package/dist/upgrade/v3CapabilitySurface.js.map +0 -1
  710. package/dist/upgrade/versionResolution.js.map +0 -1
  711. package/dist/validate/appHomeContract.js.map +0 -1
  712. package/dist/validate/capability.js.map +0 -1
  713. package/dist/validate/crossCapability.js.map +0 -1
  714. package/dist/validate/lifecycleAdapters/legacyPythonParity.js +0 -93
  715. package/dist/validate/lifecycleAdapters/legacyPythonParity.js.map +0 -1
  716. package/dist/validate/lifecycleAdapters/nodeFormChecks.js +0 -488
  717. package/dist/validate/lifecycleAdapters/nodeFormChecks.js.map +0 -1
  718. package/dist/validate/lifecycleAdapters/shared.js +0 -198
  719. package/dist/validate/lifecycleAdapters/shared.js.map +0 -1
  720. package/dist/validate/lifecycleAdapters.js +0 -62
  721. package/dist/validate/lifecycleAdapters.js.map +0 -1
  722. package/dist/validate/selfAudit.js.map +0 -1
  723. package/dist/validate/vocabularyAuthority.js.map +0 -1
@@ -1,16 +1,11 @@
1
1
  import fs from "node:fs";
2
- import os from "node:os";
3
2
  import path from "node:path";
3
+ import { createHash } from "node:crypto";
4
4
  import { isFile, pathExists, resolvePath } from "../core/paths.js";
5
- import { AGENTERA_PROFILE_DIR_ENV, PROFILERA_PROFILE_DIR_ENV } from "../core/envPaths.js";
6
- import { resolveSourceRoot } from "../core/sourceRoot.js";
7
- import { registryModelPath } from "../registries/artifactRegistry.js";
8
- import { loadRegistry } from "../registries/runtimeAdapterRegistry.js";
9
- import { codexCopiedHooksAreAgenteraOnly, codexPluginHooksEnabled, retireCodexCopiedHookTrust, } from "../setup/codex.js";
10
- import { hasManagedMarker, opencodeCommandTemplate, opencodeConfigDir, } from "../setup/opencode.js";
11
- import { resolveUpdateChannel } from "./channels.js";
12
- import { applyInstalledHooksRetirementItems, planInstalledHooksRetirementItems, textReferencesV2InstalledHooks, } from "./installedHooksRetirement.js";
13
- import { projectUsesV3CapabilityInstructionModules } from "./v3CapabilitySurface.js";
5
+ import { hasManagedMarker, opencodeConfigDir, } from "../setup/opencode.js";
6
+ import { OPENCODE_SKILL_NAMES } from "../setup/opencodeConstants.js";
7
+ import { doctorRoots } from "./appModel.js";
8
+ import { bindMigrationResource, removeBoundMigrationResource, verifyBoundMigrationResource, } from "./migrationPublication.js";
14
9
  const PYTHON_MANAGED_PATTERNS = [
15
10
  /hooks\/validate_artifact\.py/,
16
11
  /hooks\/cursor_session_start\.py/,
@@ -26,15 +21,6 @@ const PYTHON_MANAGED_PATTERNS = [
26
21
  /cursor_pre_tool_use\.py/,
27
22
  /cursor_session_stop\.py/,
28
23
  ];
29
- const RUNTIME_MIGRATION_ACTIONS = new Set([
30
- "rewire-runtime",
31
- "rewire-env-var",
32
- "retire-hooks",
33
- "copy-plugin",
34
- "copy-agent",
35
- "copy-command",
36
- "link-skill",
37
- ]);
38
24
  export function projectHasProjectLevelRuntimeHooks(project) {
39
25
  const root = resolvePath(project);
40
26
  const candidates = [
@@ -46,382 +32,234 @@ export function projectHasProjectLevelRuntimeHooks(project) {
46
32
  return candidates.some((candidate) => isFile(candidate) || pathExists(candidate));
47
33
  }
48
34
  const OPENCODE_COMMAND_NAMES = ["agentera"];
49
- const OPENCODE_SKILL_NAMES = ["agentera", "status"];
50
- const CURSOR_AGENT_MARKER = "<!-- agentera: managed -->";
51
- export function resolveNpxHookCommands(ctx) {
52
- const env = ctx.env ?? process.env;
53
- const home = ctx.home ?? env.HOME ?? os.homedir();
54
- const sourceRoot = ctx.sourceRoot ?? resolveSourceRoot(env);
55
- const channel = resolveUpdateChannel({
56
- channel: ctx.channel ?? null,
57
- env,
58
- home,
59
- sourceRoot,
60
- });
61
- const cliEntrypoint = channel.updateCommand.trim();
62
- return {
63
- cliEntrypoint,
64
- validate: `${cliEntrypoint} hook validate-artifact`,
65
- cursorSessionStart: `${cliEntrypoint} hook cursor-session-start`,
66
- cursorSessionStop: `${cliEntrypoint} hook session-stop`,
67
- cursorPreTool: `${cliEntrypoint} hook cursor-pre-tool-use`,
68
- };
69
- }
70
35
  export function textUsesPythonManagedEntrypoint(text) {
71
36
  if (/AGENTERA_HOME\s*=/.test(text)) {
72
37
  return true;
73
38
  }
74
39
  return PYTHON_MANAGED_PATTERNS.some((pattern) => pattern.test(text));
75
40
  }
76
- const V3_NPX_ENTRYPOINT = /\bnpx\s+-y\s+agentera\b/;
77
- export function textUsesV3NpmEntrypoint(text) {
78
- return V3_NPX_ENTRYPOINT.test(text);
79
- }
80
- export function textUsesProfileraProfileDir(text) {
81
- return text.includes(PROFILERA_PROFILE_DIR_ENV);
82
- }
83
- export function rewireRuntimeText(text, runtime, commands) {
84
- let next = text;
85
- next = next.replace(/uv run\s+\\?"?\$\{AGENTERA_HOME\}\/hooks\/validate_artifact\.py\\?"?/g, commands.validate);
86
- next = next.replace(/uv run\s+\\?"?\$\{AGENTERA_HOME\}\/app\/hooks\/validate_artifact\.py\\?"?/g, commands.validate);
87
- next = next.replace(/uv run\s+\\?"?\$\{PLUGIN_ROOT\}\/hooks\/validate_artifact\.py\\?"?/g, commands.validate);
88
- next = next.replace(/uv run\s+hooks\/validate_artifact\.py/g, commands.validate);
89
- if (next.includes("validate_artifact.py")) {
90
- next = next.replace(/["']?[^"'\n]*hooks\/validate_artifact\.py[^"'\n]*["']?/g, `"${commands.validate}"`);
41
+ const RETIRED_NPX_HOOK = /\bnpx\s+-y\s+agentera(?:@(?:next|latest))?\s+hook\s+/;
42
+ const V2_AGENTERA_HOOK = /(?:\buv(?:x|\s+run)\b[^"'\n]*(?:\$\{(?:AGENTERA_HOME|PLUGIN_ROOT)\}|hooks\/)\/[^"'\n]*\.py|\$\{AGENTERA_HOME\}\/(?:app\/scripts|(?:app\/)?hooks)\/[^"'\n]*\.py)/;
43
+ function retiredHookCommands(value, commands = []) {
44
+ if (Array.isArray(value)) {
45
+ for (const entry of value)
46
+ retiredHookCommands(entry, commands);
91
47
  }
92
- next = next.replace(/["']?[^"'\n]*cursor_session_start\.py[^"'\n]*["']?/g, `"${commands.cursorSessionStart}"`);
93
- next = next.replace(/["']?[^"'\n]*cursor_pre_tool_use\.py[^"'\n]*["']?/g, `"${commands.cursorPreTool}"`);
94
- next = next.replace(/["']?[^"'\n]*cursor_session_stop\.py[^"'\n]*["']?/g, `"${commands.cursorSessionStop}"`);
95
- next = next.replace(/["']?[^"'\n]*\/app\/scripts\/agentera[^"'\n]*["']?/g, `"${commands.cliEntrypoint}"`);
96
- next = next.replace(/["']?[^"'\n]*scripts\/agentera[^"'\n]*["']?/g, `"${commands.cliEntrypoint}"`);
97
- next = next.replace(/npx -y agentera hook /g, `${commands.cliEntrypoint} hook `);
98
- next = next.replace(/npx -y agentera@latest hook /g, `${commands.cliEntrypoint} hook `);
99
- if (runtime === "codex") {
100
- next = next.replace(/AGENTERA_HOME\s*=\s*"[^"]*"/g, "");
101
- next = next.replace(/AGENTERA_HOME\s*=\s*'[^']*'/g, "");
102
- next = next.replace(/set\s*=\s*\{\s*,/g, "set = {");
103
- next = next.replace(/,\s*,/g, ",");
104
- next = next.replace(/,\s*\}/g, " }");
105
- next = next.replace(/set\s*=\s*\{\s*\}/g, "set = { }");
48
+ else if (value !== null && typeof value === "object") {
49
+ for (const [key, entry] of Object.entries(value)) {
50
+ if (key === "command" && typeof entry === "string")
51
+ commands.push(entry);
52
+ else
53
+ retiredHookCommands(entry, commands);
54
+ }
106
55
  }
107
- return next;
56
+ return commands;
108
57
  }
109
- export function rewireProfileraEnvVar(text) {
110
- return text.replaceAll(PROFILERA_PROFILE_DIR_ENV, AGENTERA_PROFILE_DIR_ENV);
58
+ function isRetiredAgenteraHookCommand(command) {
59
+ return V2_AGENTERA_HOOK.test(command) || RETIRED_NPX_HOOK.test(command);
111
60
  }
112
- function needsChannelNpxRewire(text, cliEntrypoint) {
113
- if (/npx -y agentera hook /.test(text) && !text.includes(cliEntrypoint)) {
114
- return true;
61
+ /**
62
+ * Native hook files have no durable per-entry ownership record. Remove only a
63
+ * file whose every command is a retired Agentera invocation; mixed files are
64
+ * preserved for the owner to review rather than surgically rewritten.
65
+ */
66
+ export function wholeResourceProvesV2HookOwnership(text) {
67
+ let document;
68
+ try {
69
+ document = JSON.parse(text);
115
70
  }
116
- if (/npx -y agentera@latest hook /.test(text) && !text.includes(cliEntrypoint)) {
117
- return true;
71
+ catch {
72
+ return false;
118
73
  }
119
- return false;
74
+ const commands = retiredHookCommands(document);
75
+ return commands.length > 0 && commands.every(isRetiredAgenteraHookCommand);
120
76
  }
121
- function pushRewireItem(items, runtime, filePath, commands) {
122
- const text = fs.readFileSync(filePath, "utf8");
123
- const needsBare = needsChannelNpxRewire(text, commands.cliEntrypoint);
124
- if (!textUsesPythonManagedEntrypoint(text) && !textReferencesV2InstalledHooks(text) && !needsBare) {
125
- if (textUsesV3NpmEntrypoint(text)) {
126
- items.push({
127
- status: "noop",
128
- action: "rewire-runtime",
129
- runtime,
130
- source: filePath,
131
- message: "runtime config already references npm self-contained entrypoint",
132
- });
133
- }
134
- else {
135
- items.push({
136
- status: "blocked",
137
- action: "rewire-runtime",
138
- runtime,
139
- source: filePath,
140
- message: "runtime config has neither v2 Python patterns nor v3 npm entrypoint; manual review needed",
141
- });
142
- }
143
- return;
144
- }
145
- const newText = rewireRuntimeText(text, runtime, commands);
146
- const status = newText === text ? "blocked" : "pending";
147
- items.push({
148
- status,
149
- action: "rewire-runtime",
150
- runtime,
151
- source: filePath,
152
- target: filePath,
153
- newText,
154
- message: status === "pending"
155
- ? "will rewire runtime config from Python managed app-home to npm self-contained entrypoint"
156
- : "runtime config uses Python managed paths but could not be rewritten safely",
157
- });
77
+ function textContainsRetiredAgenteraHook(text) {
78
+ return textUsesPythonManagedEntrypoint(text) || RETIRED_NPX_HOOK.test(text);
158
79
  }
159
- function pushEnvVarRewireItem(items, runtime, filePath) {
80
+ function pushRetireHookItem(items, runtime, filePath, allowedRoot) {
160
81
  const text = fs.readFileSync(filePath, "utf8");
161
- if (!textUsesProfileraProfileDir(text)) {
82
+ if (!textContainsRetiredAgenteraHook(text)) {
162
83
  return;
163
84
  }
164
- const newText = rewireProfileraEnvVar(text);
165
- const status = newText === text ? "noop" : "pending";
166
- items.push({
167
- status,
168
- action: "rewire-env-var",
85
+ const item = {
86
+ status: wholeResourceProvesV2HookOwnership(text) ? "pending" : "blocked",
87
+ action: "retire-hooks",
169
88
  runtime,
170
89
  source: filePath,
171
- target: filePath,
172
- newText,
173
- message: status === "pending"
174
- ? "will rewire PROFILERA_PROFILE_DIR to AGENTERA_PROFILE_DIR"
175
- : "PROFILERA_PROFILE_DIR reference already migrated",
176
- });
177
- }
178
- function hasCursorManagedAgentMarker(text) {
179
- return text.includes(CURSOR_AGENT_MARKER);
180
- }
181
- function copyIfChanged(source, target) {
182
- if (!isFile(source)) {
183
- return false;
90
+ message: wholeResourceProvesV2HookOwnership(text)
91
+ ? "will remove whole-resource-proven retired Agentera hook"
92
+ : "retired Agentera hook preserved: complete resource ownership is unproven; review and remove it manually",
93
+ };
94
+ if (item.status === "blocked") {
95
+ items.push(item);
96
+ return;
184
97
  }
185
- if (isFile(target)) {
186
- const before = fs.readFileSync(source);
187
- const after = fs.readFileSync(target);
188
- if (before.equals(after)) {
189
- return false;
190
- }
98
+ const evidenceError = bindMigrationResource(item, "source", filePath, [allowedRoot], "file");
99
+ if (evidenceError) {
100
+ item.status = "blocked";
101
+ item.message = `retired Agentera hook preserved: ${evidenceError}; review the unsafe path manually`;
191
102
  }
192
- fs.mkdirSync(path.dirname(target), { recursive: true });
193
- fs.copyFileSync(source, target);
194
- return true;
103
+ items.push(item);
195
104
  }
196
- function planCodexItems(items, home, project, commands, force) {
105
+ function planCodexItems(items, home, project) {
197
106
  for (const root of [project, home]) {
198
107
  const hooksPath = path.join(root, ".codex", "hooks", "codex-hooks.json");
199
- const configPath = path.join(root, ".codex", "config.toml");
200
108
  if (isFile(hooksPath)) {
201
- pushRewireItem(items, "codex", hooksPath, commands);
202
- }
203
- if (isFile(configPath)) {
204
- pushRewireItem(items, "codex", configPath, commands);
205
- const configText = fs.readFileSync(configPath, "utf8");
206
- const pluginHooks = codexPluginHooksEnabled(configText);
207
- if (pluginHooks && isFile(hooksPath)) {
208
- let hooksText;
209
- try {
210
- hooksText = fs.readFileSync(hooksPath, "utf8");
211
- }
212
- catch {
213
- hooksText = "";
214
- }
215
- if (codexCopiedHooksAreAgenteraOnly(hooksText)) {
216
- items.push({
217
- status: "pending",
218
- action: "retire-hooks",
219
- runtime: "codex",
220
- source: hooksPath,
221
- target: configPath,
222
- message: "will remove Agentera-owned copied Codex hooks because plugin hooks are enabled",
223
- });
224
- }
225
- else if (hooksText.includes("validate_artifact") || hooksText.includes("hook validate-artifact")) {
226
- items.push({
227
- status: force ? "pending" : "blocked",
228
- action: "retire-hooks",
229
- runtime: "codex",
230
- source: hooksPath,
231
- target: configPath,
232
- message: "plugin hooks are enabled, but copied hook target needs manual review before retirement",
233
- });
234
- }
235
- }
109
+ pushRetireHookItem(items, "codex", hooksPath, root);
236
110
  }
237
111
  }
238
112
  }
239
- function planCursorItems(items, home, project, sourceRoot, commands) {
240
- for (const hooksPath of [
241
- path.join(project, ".cursor", "hooks.json"),
242
- path.join(home, ".cursor", "hooks.json"),
113
+ function planCursorItems(items, home, project) {
114
+ for (const [root, hooksPath] of [
115
+ [project, path.join(project, ".cursor", "hooks.json")],
116
+ [home, path.join(home, ".cursor", "hooks.json")],
243
117
  ]) {
244
118
  if (isFile(hooksPath)) {
245
- pushRewireItem(items, "cursor", hooksPath, commands);
119
+ pushRetireHookItem(items, "cursor", hooksPath, root);
246
120
  }
247
121
  }
248
- const agentsSource = path.join(sourceRoot, ".cursor", "agents");
249
- const pluginSource = path.join(sourceRoot, ".cursor-plugin", "plugin.json");
250
- for (const root of [project]) {
251
- const agentsDir = path.join(root, ".cursor", "agents");
252
- if (isFile(pluginSource) && root === project) {
253
- const pluginTarget = path.join(root, ".cursor-plugin", "plugin.json");
254
- if (!isFile(pluginTarget)) {
255
- items.push({
256
- status: "pending",
257
- action: "copy-plugin",
258
- runtime: "cursor",
259
- source: pluginSource,
260
- target: pluginTarget,
261
- message: "will copy managed Cursor plugin manifest",
262
- });
263
- }
264
- else if (!fs.readFileSync(pluginSource).equals(fs.readFileSync(pluginTarget))) {
265
- items.push({
266
- status: "pending",
267
- action: "copy-plugin",
268
- runtime: "cursor",
269
- source: pluginSource,
270
- target: pluginTarget,
271
- message: "will refresh managed Cursor plugin manifest",
272
- });
273
- }
122
+ }
123
+ function symlinkOwnership(linkPath, managedSkillsRoot) {
124
+ let stat;
125
+ let target;
126
+ try {
127
+ stat = fs.lstatSync(linkPath);
128
+ if (!stat.isSymbolicLink())
129
+ return null;
130
+ target = fs.readlinkSync(linkPath);
131
+ }
132
+ catch {
133
+ return null;
134
+ }
135
+ const resolvedTarget = path.resolve(path.dirname(linkPath), target);
136
+ const relative = path.relative(managedSkillsRoot, resolvedTarget);
137
+ if (relative === "" || relative.startsWith("..") || path.isAbsolute(relative))
138
+ return null;
139
+ return {
140
+ kind: "managed-app-symlink",
141
+ identity: `${stat.dev}:${stat.ino}`,
142
+ fingerprint: `sha256:${createHash("sha256").update(target).digest("hex")}`,
143
+ root: managedSkillsRoot,
144
+ };
145
+ }
146
+ export function planStaleCommandCleanupItems(ctx, items) {
147
+ const env = ctx.env ?? process.env;
148
+ const home = resolvePath(ctx.home);
149
+ const commandsDir = path.join(opencodeConfigDir(home, env), "commands");
150
+ if (!pathExists(commandsDir) || !fs.statSync(commandsDir).isDirectory()) {
151
+ return;
152
+ }
153
+ const currentNames = new Set(OPENCODE_COMMAND_NAMES);
154
+ for (const entry of fs.readdirSync(commandsDir)) {
155
+ if (!entry.endsWith(".md")) {
156
+ continue;
274
157
  }
275
- const skipInTreeCursorAgents = root === project && projectUsesV3CapabilityInstructionModules(project);
276
- if (skipInTreeCursorAgents) {
277
- items.push({
278
- status: "skipped",
279
- action: "copy-agent",
280
- runtime: "cursor",
281
- target: agentsDir,
282
- message: "v3 capability instruction modules present; in-tree .cursor/agents/ uses prime --context and is not overwritten",
283
- });
158
+ const filePath = path.join(commandsDir, entry);
159
+ if (!isFile(filePath)) {
160
+ continue;
284
161
  }
285
- else if (pathExists(agentsSource)) {
286
- const CURSOR_MANAGED_AGENT = "agentera.md";
287
- const src = path.join(agentsSource, CURSOR_MANAGED_AGENT);
288
- if (isFile(src)) {
289
- const dst = path.join(agentsDir, CURSOR_MANAGED_AGENT);
290
- if (!isFile(dst)) {
291
- items.push({
292
- status: "pending",
293
- action: "copy-agent",
294
- runtime: "cursor",
295
- source: src,
296
- target: dst,
297
- message: "will copy managed Cursor Agentera agent",
298
- });
299
- }
300
- else {
301
- const dstText = fs.readFileSync(dst, "utf8");
302
- const srcText = fs.readFileSync(src, "utf8");
303
- if (hasCursorManagedAgentMarker(dstText) && dstText !== srcText) {
304
- items.push({
305
- status: "pending",
306
- action: "copy-agent",
307
- runtime: "cursor",
308
- source: src,
309
- target: dst,
310
- message: "will refresh stale managed Cursor Agentera agent",
311
- });
312
- }
313
- }
314
- }
162
+ const body = fs.readFileSync(filePath, "utf8");
163
+ if (!hasManagedMarker(body)) {
164
+ continue;
165
+ }
166
+ const name = entry.slice(0, -3);
167
+ if (currentNames.has(name)) {
168
+ continue;
169
+ }
170
+ const item = {
171
+ status: "pending",
172
+ action: "remove-stale-command",
173
+ runtime: "opencode",
174
+ source: filePath,
175
+ message: `will remove stale managed command ${path.basename(filePath)}`,
176
+ };
177
+ const evidenceError = bindMigrationResource(item, "source", filePath, [home], "file");
178
+ if (evidenceError) {
179
+ item.status = "blocked";
180
+ item.message = `stale command preserved: ${evidenceError}; review the unsafe path manually`;
315
181
  }
182
+ items.push(item);
316
183
  }
317
184
  }
318
- function planOpencodeItems(items, home, sourceRoot, env, commands) {
319
- const configDir = opencodeConfigDir(home, env);
320
- const pluginSource = path.join(sourceRoot, ".opencode", "plugins", "agentera.js");
321
- const pluginTarget = path.join(configDir, "plugins", "agentera.js");
322
- if (isFile(pluginSource)) {
323
- const needsCopy = !isFile(pluginTarget) ||
324
- textUsesPythonManagedEntrypoint(fs.readFileSync(pluginTarget, "utf8")) ||
325
- needsChannelNpxRewire(fs.readFileSync(pluginTarget, "utf8"), commands.cliEntrypoint);
185
+ export function planStaleSkillCleanupItems(ctx, items) {
186
+ const env = ctx.env ?? process.env;
187
+ const home = resolvePath(ctx.home);
188
+ const skillsDir = path.join(opencodeConfigDir(home, env), "skills");
189
+ let skillsDirectory;
190
+ try {
191
+ skillsDirectory = fs.lstatSync(skillsDir);
192
+ }
193
+ catch {
194
+ return;
195
+ }
196
+ if (!skillsDirectory.isDirectory()) {
326
197
  items.push({
327
- status: needsCopy ? "pending" : "noop",
328
- action: "copy-plugin",
198
+ status: "blocked",
199
+ action: "remove-stale-skill",
329
200
  runtime: "opencode",
330
- source: pluginSource,
331
- target: pluginTarget,
332
- message: needsCopy
333
- ? "will copy current Agentera OpenCode plugin to native plugin path"
334
- : "OpenCode plugin already current at native plugin path",
201
+ source: skillsDir,
202
+ message: `preserved ${skillsDir}: the legacy skills path is not a real directory; replace the unsafe path or review it manually`,
335
203
  });
204
+ return;
336
205
  }
337
- const commandsSourceDir = path.join(sourceRoot, ".opencode", "commands");
338
- const commandsTargetDir = path.join(configDir, "commands");
339
- for (const name of OPENCODE_COMMAND_NAMES) {
340
- const src = path.join(commandsSourceDir, `${name}.md`);
341
- const expected = opencodeCommandTemplate(name);
342
- const dst = path.join(commandsTargetDir, `${name}.md`);
343
- if (isFile(src)) {
344
- const needsCopy = !isFile(dst) || (hasManagedMarker(fs.readFileSync(dst, "utf8")) && fs.readFileSync(dst, "utf8") !== expected);
345
- items.push({
346
- status: needsCopy ? "pending" : "noop",
347
- action: "copy-command",
348
- runtime: "opencode",
349
- source: src,
350
- target: dst,
351
- message: needsCopy ? "will sync managed OpenCode command" : "OpenCode managed command already current",
352
- });
353
- }
354
- }
355
- const agentsSourceDir = path.join(sourceRoot, ".opencode", "agents");
356
- const agentsTargetDir = path.join(configDir, "agents");
357
- const OPENCODE_MANAGED_AGENT = "agentera.md";
358
- if (pathExists(agentsSourceDir)) {
359
- const src = path.join(agentsSourceDir, OPENCODE_MANAGED_AGENT);
360
- if (isFile(src)) {
361
- const dst = path.join(agentsTargetDir, OPENCODE_MANAGED_AGENT);
362
- const needsCopy = !isFile(dst) || !fs.readFileSync(src).equals(fs.readFileSync(dst));
363
- items.push({
364
- status: needsCopy ? "pending" : "noop",
365
- action: "copy-agent",
366
- runtime: "opencode",
367
- source: src,
368
- target: dst,
369
- message: needsCopy ? "will copy managed OpenCode Agentera agent" : "OpenCode Agentera agent already current",
370
- });
371
- }
372
- }
373
- const skillsSourceRoot = path.join(sourceRoot, "skills");
374
- const skillsTargetDir = path.join(configDir, "skills");
375
- for (const name of OPENCODE_SKILL_NAMES) {
376
- const src = path.join(skillsSourceRoot, name);
377
- const dst = path.join(skillsTargetDir, name);
378
- if (!isFile(path.join(src, "SKILL.md"))) {
206
+ const requiredNames = new Set(OPENCODE_SKILL_NAMES);
207
+ const managedSkillsRoot = path.join(doctorRoots(resolvePath(ctx.appHome)).activeBundleRoot, "skills");
208
+ for (const entry of fs.readdirSync(skillsDir, { withFileTypes: true })) {
209
+ const linkPath = path.join(skillsDir, entry.name);
210
+ if (!entry.isSymbolicLink()) {
211
+ if (requiredNames.has(entry.name)) {
212
+ items.push({
213
+ status: "blocked",
214
+ action: "remove-stale-skill",
215
+ runtime: "opencode",
216
+ source: linkPath,
217
+ message: `preserved ${linkPath}: name and directory shape do not prove Agentera ownership; review and remove it manually if appropriate`,
218
+ });
219
+ }
379
220
  continue;
380
221
  }
381
- if (!pathExists(dst)) {
222
+ let linkTarget;
223
+ try {
224
+ linkTarget = fs.readlinkSync(linkPath);
225
+ }
226
+ catch {
382
227
  items.push({
383
- status: "pending",
384
- action: "link-skill",
228
+ status: "blocked",
229
+ action: "remove-stale-skill",
385
230
  runtime: "opencode",
386
- source: src,
387
- target: dst,
388
- message: "will create OpenCode skill link",
231
+ source: linkPath,
232
+ message: `preserved ${linkPath}: the symlink target could not be inspected; review the unsafe resource manually`,
389
233
  });
390
234
  continue;
391
235
  }
392
- try {
393
- const linkTarget = fs.readlinkSync(dst);
394
- if (!linkTarget.includes("agentera") && path.basename(linkTarget) !== name) {
236
+ const ownership = symlinkOwnership(linkPath, managedSkillsRoot);
237
+ if (!ownership) {
238
+ if (requiredNames.has(entry.name) || linkTarget.toLowerCase().includes("agentera")) {
395
239
  items.push({
396
240
  status: "blocked",
397
- action: "link-skill",
398
- runtime: "opencode",
399
- source: src,
400
- target: dst,
401
- message: "OpenCode skill path is user-owned; manual review required",
402
- });
403
- }
404
- else if (path.resolve(path.dirname(dst), linkTarget) !== path.resolve(src)) {
405
- items.push({
406
- status: "pending",
407
- action: "link-skill",
241
+ action: "remove-stale-skill",
408
242
  runtime: "opencode",
409
- source: src,
410
- target: dst,
411
- message: "will update stale Agentera-managed OpenCode skill link",
243
+ source: linkPath,
244
+ message: `preserved ${linkPath}: skill name or target text does not prove Agentera ownership; confirm ownership and remove it manually if appropriate`,
412
245
  });
413
246
  }
247
+ continue;
414
248
  }
415
- catch {
416
- items.push({
417
- status: "pending",
418
- action: "link-skill",
419
- runtime: "opencode",
420
- source: src,
421
- target: dst,
422
- message: "will replace non-symlink OpenCode skill path with managed link",
423
- });
249
+ const item = {
250
+ status: "pending",
251
+ action: "remove-stale-skill",
252
+ runtime: "opencode",
253
+ source: linkPath,
254
+ ownership,
255
+ message: `will remove v2 app-owned OpenCode skill symlink ${entry.name}`,
256
+ };
257
+ const evidenceError = bindMigrationResource(item, "source", linkPath, [home], "symlink");
258
+ if (evidenceError) {
259
+ item.status = "blocked";
260
+ item.message = `legacy skill preserved: ${evidenceError}; review the unsafe path manually`;
424
261
  }
262
+ items.push(item);
425
263
  }
426
264
  }
427
265
  function walkJsonHookFiles(dir) {
@@ -444,10 +282,10 @@ function walkJsonHookFiles(dir) {
444
282
  walk(dir);
445
283
  return out;
446
284
  }
447
- function planCopilotItems(items, project, commands) {
285
+ function planCopilotItems(items, project) {
448
286
  const hooksDir = path.join(project, ".github", "hooks");
449
287
  for (const hookFile of walkJsonHookFiles(hooksDir)) {
450
- pushRewireItem(items, "copilot", hookFile, commands);
288
+ pushRetireHookItem(items, "copilot", hookFile, project);
451
289
  }
452
290
  if (!items.some((item) => item.runtime === "copilot")) {
453
291
  items.push({
@@ -458,37 +296,6 @@ function planCopilotItems(items, project, commands) {
458
296
  });
459
297
  }
460
298
  }
461
- function planEnvRuntimeNoops(items, runtime, message) {
462
- if (!items.some((item) => item.runtime === runtime)) {
463
- items.push({ status: "noop", action: "configure", runtime, message });
464
- }
465
- }
466
- function planEnvVarRewireItems(ctx, items) {
467
- const home = resolvePath(ctx.home);
468
- const project = resolvePath(ctx.project);
469
- const env = ctx.env;
470
- const configDir = opencodeConfigDir(home, env);
471
- const candidates = [
472
- { runtime: "opencode", filePath: path.join(configDir, "plugins", "agentera.js") },
473
- { runtime: "cursor", filePath: path.join(project, ".cursor", "hooks.json") },
474
- { runtime: "cursor", filePath: path.join(home, ".cursor", "hooks.json") },
475
- { runtime: "codex", filePath: path.join(home, ".codex", "config.toml") },
476
- { runtime: "codex", filePath: path.join(home, ".codex", "hooks", "codex-hooks.json") },
477
- { runtime: "installed-app", filePath: path.join(project, ".agentera", "docs.yaml") },
478
- { runtime: "installed-app", filePath: path.join(ctx.appHome, ".agentera", "docs.yaml") },
479
- { runtime: "installed-app", filePath: registryModelPath(ctx.appHome) },
480
- { runtime: "installed-app", filePath: registryModelPath(path.join(ctx.appHome, "app")) },
481
- ];
482
- const hooksDir = path.join(project, ".github", "hooks");
483
- for (const hookFile of walkJsonHookFiles(hooksDir)) {
484
- candidates.push({ runtime: "copilot", filePath: hookFile });
485
- }
486
- for (const { runtime, filePath } of candidates) {
487
- if (!isFile(filePath))
488
- continue;
489
- pushEnvVarRewireItem(items, runtime, filePath);
490
- }
491
- }
492
299
  export function planRuntimeMigrationItems(ctx) {
493
300
  if (!ctx.env) {
494
301
  throw new Error("MigrationContext.env is required for runtime migration planning; pass sandboxMigrationEnv(home, sourceRoot) in tests or an explicit env in callers.");
@@ -496,124 +303,126 @@ export function planRuntimeMigrationItems(ctx) {
496
303
  const home = resolvePath(ctx.home);
497
304
  const project = resolvePath(ctx.project);
498
305
  const env = ctx.env;
499
- const sourceRoot = resolvePath(ctx.sourceRoot ?? resolveSourceRoot(env));
500
- const commands = resolveNpxHookCommands({ ...ctx, home, env, sourceRoot });
501
306
  const items = [];
502
- planCodexItems(items, home, project, commands, ctx.force);
503
- planCursorItems(items, home, project, sourceRoot, commands);
504
- planOpencodeItems(items, home, sourceRoot, env, commands);
505
- planCopilotItems(items, project, commands);
506
- planEnvVarRewireItems(ctx, items);
507
- const hookRetirement = planInstalledHooksRetirementItems(ctx).filter((item) => item.status === "pending");
508
- if (hookRetirement.length > 0 && items.some((item) => item.action === "rewire-runtime" && item.status === "pending")) {
509
- items.push(...hookRetirement);
510
- }
511
- planEnvRuntimeNoops(items, "claude", "Claude Code plugin installs expose the app home without local config writes; use --update-packages to refresh marketplace surfaces");
512
- planEnvRuntimeNoops(items, "cursor-agent", "Cursor Agent CLI inherits workspace Cursor hooks; no separate managed install surface");
513
- void loadRegistry();
307
+ planCodexItems(items, home, project);
308
+ planCursorItems(items, home, project);
309
+ planStaleCommandCleanupItems(ctx, items);
310
+ planStaleSkillCleanupItems(ctx, items);
311
+ planCopilotItems(items, project);
514
312
  return items;
515
313
  }
516
- export function applyRuntimeMigrationItem(item, commands) {
314
+ const RUNTIME_MIGRATION_ACTIONS = new Set([
315
+ "retire-hooks",
316
+ "remove-stale-command",
317
+ "remove-stale-skill",
318
+ ]);
319
+ function isRuntimeMigrationAction(action) {
320
+ return RUNTIME_MIGRATION_ACTIONS.has(action);
321
+ }
322
+ export function applyRuntimeMigrationItem(item) {
517
323
  if (item.status !== "pending") {
518
324
  return;
519
325
  }
520
326
  try {
521
327
  switch (item.action) {
522
- case "rewire-runtime": {
523
- if (!item.target || item.newText === undefined) {
328
+ case "retire-hooks": {
329
+ if (!item.source) {
524
330
  item.status = "failed";
525
- item.message = "rewire-runtime missing target or newText";
331
+ item.message = "retire-hooks missing source";
526
332
  return;
527
333
  }
528
- fs.writeFileSync(item.target, item.newText, "utf8");
334
+ verifyBoundMigrationResource(item, "source");
335
+ removeBoundMigrationResource(item, "source");
529
336
  item.status = "applied";
530
- item.message = "runtime config rewired to npm self-contained entrypoint";
337
+ item.message = "retired whole-resource-proven Agentera hook";
531
338
  break;
532
339
  }
533
- case "rewire-env-var": {
534
- if (!item.target || item.newText === undefined) {
340
+ case "remove-stale-command": {
341
+ if (!item.source) {
535
342
  item.status = "failed";
536
- item.message = "rewire-env-var missing target or newText";
343
+ item.message = "remove-stale-command missing source";
537
344
  return;
538
345
  }
539
- fs.writeFileSync(item.target, item.newText, "utf8");
540
- item.status = "applied";
541
- item.message = "rewired PROFILERA_PROFILE_DIR to AGENTERA_PROFILE_DIR";
542
- break;
543
- }
544
- case "copy-plugin":
545
- case "copy-agent":
546
- case "copy-command": {
547
- if (!item.source || !item.target) {
548
- item.status = "failed";
549
- item.message = `${item.action} missing source or target`;
550
- return;
346
+ if (!pathExists(item.source)) {
347
+ item.status = "noop";
348
+ item.message = `stale command already absent at ${item.source}`;
349
+ }
350
+ else {
351
+ removeBoundMigrationResource(item, "source");
352
+ item.status = "applied";
353
+ item.message = `removed stale managed command ${path.basename(item.source)}`;
551
354
  }
552
- copyIfChanged(item.source, item.target);
553
- item.status = "applied";
554
- item.message = `applied ${item.action}`;
555
355
  break;
556
356
  }
557
- case "link-skill": {
558
- if (!item.source || !item.target) {
357
+ case "remove-stale-skill": {
358
+ if (!item.source) {
559
359
  item.status = "failed";
560
- item.message = "link-skill missing source or target";
360
+ item.message = "remove-stale-skill missing source";
561
361
  return;
562
362
  }
563
- fs.mkdirSync(path.dirname(item.target), { recursive: true });
564
- // lstat (not stat): stat follows symlinks and ENOENTs on dangling links; rmSync then fails.
565
- let targetStat = null;
566
363
  try {
567
- targetStat = fs.lstatSync(item.target);
568
- }
569
- catch {
570
- /* target absent */
571
- }
572
- if (targetStat) {
573
- if (targetStat.isSymbolicLink()) {
574
- fs.unlinkSync(item.target);
364
+ const stat = fs.lstatSync(item.source);
365
+ if (stat.isSymbolicLink()) {
366
+ const target = fs.readlinkSync(item.source);
367
+ const identity = `${stat.dev}:${stat.ino}`;
368
+ const fingerprint = `sha256:${createHash("sha256").update(target).digest("hex")}`;
369
+ const resolvedTarget = path.resolve(path.dirname(item.source), target);
370
+ const relative = item.ownership?.root
371
+ ? path.relative(item.ownership.root, resolvedTarget)
372
+ : "..";
373
+ if (item.ownership?.kind !== "managed-app-symlink"
374
+ || item.ownership.identity !== identity
375
+ || item.ownership.fingerprint !== fingerprint
376
+ || relative === ""
377
+ || relative.startsWith("..")
378
+ || path.isAbsolute(relative)) {
379
+ item.status = "blocked";
380
+ item.message = `preserved ${item.source}: authoritative symlink ownership changed or is missing; rerun migration and review the resource`;
381
+ break;
382
+ }
383
+ removeBoundMigrationResource(item, "source");
384
+ item.status = "applied";
385
+ item.message = `removed stale skill symlink ${path.basename(item.source)}`;
575
386
  }
576
387
  else {
577
- fs.rmSync(item.target, { recursive: true, force: true });
388
+ item.status = "blocked";
389
+ item.message = `preserved ${item.source}: only a fingerprinted v2 app-owned symlink is eligible; review it manually`;
578
390
  }
579
391
  }
580
- fs.symlinkSync(item.source, item.target);
581
- item.status = "applied";
582
- item.message = "OpenCode skill link created";
583
- break;
584
- }
585
- case "retire-hooks": {
586
- if (!item.source) {
587
- item.status = "failed";
588
- item.message = "retire-hooks missing source";
589
- return;
590
- }
591
- if (isFile(item.source)) {
592
- fs.rmSync(item.source, { force: true });
593
- }
594
- if (item.target && isFile(item.target)) {
595
- const configText = fs.readFileSync(item.target, "utf8");
596
- const next = retireCodexCopiedHookTrust(configText, item.source);
597
- fs.writeFileSync(item.target, next, "utf8");
392
+ catch (error) {
393
+ if (error.code === "ENOENT") {
394
+ item.status = "noop";
395
+ item.message = "stale skill already absent";
396
+ }
397
+ else {
398
+ item.status = "failed";
399
+ item.message = `remove-stale-skill failed: ${error.message}`;
400
+ }
598
401
  }
599
- item.status = "applied";
600
- item.message = "retired Agentera-owned copied Codex hooks";
601
402
  break;
602
403
  }
603
404
  default:
405
+ item.status = "failed";
406
+ item.message = `unsupported runtime migration action: ${item.action}`;
604
407
  break;
605
408
  }
606
409
  }
607
410
  catch (exc) {
608
- item.status = "failed";
609
- item.message = `${item.action} failed: ${exc.message}`;
411
+ item.status = "blocked";
412
+ item.message = `${item.action} preserved the resource: ${exc.message}; rerun migration and review it manually`;
610
413
  }
611
414
  }
612
- export function applyRuntimeMigrationItems(items, ctx) {
613
- const commands = resolveNpxHookCommands(ctx);
415
+ export function applyRuntimeMigrationItems(items, _ctx) {
614
416
  for (const item of items) {
615
- applyRuntimeMigrationItem(item, commands);
417
+ if (item.status !== "pending") {
418
+ continue;
419
+ }
420
+ if (isRuntimeMigrationAction(item.action)) {
421
+ applyRuntimeMigrationItem(item);
422
+ }
423
+ else {
424
+ item.status = "failed";
425
+ item.message = `unsupported runtime migration action: ${item.action}`;
426
+ }
616
427
  }
617
- applyInstalledHooksRetirementItems(items, ctx);
618
428
  }
619
- //# sourceMappingURL=runtimeMigration.js.map