agentera 3.0.0-dev.4 → 3.0.0-dev.41

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