agentera 3.0.0-dev.2 → 3.0.0-dev.21

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 (698) hide show
  1. package/README.md +84 -6
  2. package/bundle/.agentera-npx-bundle.json +1 -1
  3. package/bundle/.codex-plugin/plugin.json +92 -0
  4. package/bundle/.cursor/agents/agentera.md +7 -0
  5. package/bundle/.cursor/hooks.json +32 -0
  6. package/bundle/.cursor-plugin/plugin.json +34 -0
  7. package/bundle/.github/hooks/postToolUse.json +9 -0
  8. package/bundle/.github/hooks/preToolUse.json +8 -0
  9. package/bundle/.github/hooks/sessionEnd.json +8 -0
  10. package/bundle/.github/hooks/sessionStart.json +8 -0
  11. package/bundle/.github/plugin/plugin.json +7 -0
  12. package/bundle/.opencode/agents/agentera.md +12 -0
  13. package/bundle/.opencode/commands/agentera.md +5 -0
  14. package/bundle/.opencode/package.json +31 -0
  15. package/bundle/.opencode/plugins/agentera.js +820 -0
  16. package/bundle/CHANGELOG.md +1101 -0
  17. package/bundle/DESIGN.md +233 -0
  18. package/bundle/LICENSE +201 -0
  19. package/bundle/README.md +158 -0
  20. package/bundle/UPGRADE.md +265 -0
  21. package/bundle/agents/openai.yaml +87 -0
  22. package/bundle/extract-corpus-parity.json +21 -0
  23. package/bundle/hooks/codex-hooks.json +31 -0
  24. package/bundle/hooks/codex-plugin-hooks.json +31 -0
  25. package/bundle/plugin.json +13 -0
  26. package/bundle/references/adapters/cursor.md +53 -42
  27. package/bundle/references/adapters/opencode.md +46 -47
  28. package/bundle/references/adapters/package-manifest-interface-model.yaml +32 -43
  29. package/bundle/references/adapters/package-registry.yaml +19 -53
  30. package/bundle/references/adapters/package-surface-characterization.md +55 -35
  31. package/bundle/references/adapters/runtime-adapter-characterization.md +44 -79
  32. package/bundle/references/adapters/runtime-adapter-registry.yaml +21 -182
  33. package/bundle/references/adapters/runtime-feature-parity.md +114 -174
  34. package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +288 -0
  35. package/bundle/references/adapters/runtime-lifecycle-authority.yaml +90 -0
  36. package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
  37. package/bundle/references/adapters/runtime-retired-resources.yaml +33 -0
  38. package/bundle/references/analysis/benchmark.md +6 -6
  39. package/bundle/references/analysis/startup-measurement-contract.yaml +37 -26
  40. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +9 -8
  41. package/bundle/references/artifacts/state-storage-authority.yaml +1446 -0
  42. package/bundle/references/cli/agent-ready-state-contract.yaml +37 -62
  43. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +4 -4
  44. package/bundle/references/cli/audience-namespace-cli-migration.yaml +57 -28
  45. package/bundle/references/cli/bundle-skill-vocabulary.yaml +4 -32
  46. package/bundle/references/cli/capability-instruction-contract.yaml +98 -57
  47. package/bundle/references/cli/capability-instruction-structure.md +144 -0
  48. package/bundle/references/cli/capability-tool-classification.yaml +12 -12
  49. package/bundle/references/cli/coexistence-probe.yaml +13 -0
  50. package/bundle/references/cli/parity-expected-actual-template.md +30 -0
  51. package/bundle/references/cli/routing-execution-vocabulary.yaml +12 -12
  52. package/bundle/references/cli/routing-model.md +94 -0
  53. package/bundle/references/cli/single-name-protocol.yaml +42 -0
  54. package/bundle/references/cli/trigger-schema-enrichment.md +136 -0
  55. package/bundle/references/cli/update-channels.yaml +43 -7
  56. package/bundle/references/cli/upgrade-repair-wording.md +45 -0
  57. package/bundle/references/cli/v3-handoff-manifest.schema.yaml +98 -0
  58. package/bundle/references/cli/vocabulary-index.yaml +20 -15
  59. package/bundle/references/cli/vocabulary.md +342 -326
  60. package/bundle/references/meta/documentation-inventory.md +10 -3
  61. package/bundle/registry.json +14 -14
  62. package/bundle/skills/agentera/SKILL.md +136 -408
  63. package/bundle/skills/agentera/agents/audit.toml +6 -0
  64. package/bundle/skills/agentera/agents/build.toml +6 -0
  65. package/bundle/skills/agentera/agents/design.toml +6 -0
  66. package/bundle/skills/agentera/agents/discuss.toml +6 -0
  67. package/bundle/skills/agentera/agents/document.toml +6 -0
  68. package/bundle/skills/agentera/agents/optimize.toml +6 -0
  69. package/bundle/skills/agentera/agents/orchestrate.toml +6 -0
  70. package/bundle/skills/agentera/agents/plan.toml +6 -0
  71. package/bundle/skills/agentera/agents/profile.toml +6 -0
  72. package/bundle/skills/agentera/agents/research.toml +6 -0
  73. package/bundle/skills/agentera/agents/status.toml +6 -0
  74. package/bundle/skills/agentera/agents/vision.toml +6 -0
  75. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +84 -0
  76. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/exit.yaml +2 -2
  77. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/triggers.yaml +15 -6
  78. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/validation.yaml +20 -19
  79. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/artifacts.yaml +22 -17
  80. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +3 -3
  81. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/triggers.yaml +13 -3
  82. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/validation.yaml +11 -11
  83. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/artifacts.yaml +6 -6
  84. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/exit.yaml +5 -5
  85. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/triggers.yaml +15 -3
  86. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/validation.yaml +7 -7
  87. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +49 -0
  88. package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/exit.yaml +2 -2
  89. package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/triggers.yaml +11 -3
  90. package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/validation.yaml +9 -8
  91. package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/artifacts.yaml +23 -16
  92. package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/triggers.yaml +14 -4
  93. package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/validation.yaml +18 -18
  94. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/artifacts.yaml +9 -9
  95. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/exit.yaml +2 -2
  96. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/triggers.yaml +11 -3
  97. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/validation.yaml +9 -9
  98. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +71 -0
  99. package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/exit.yaml +7 -6
  100. package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/triggers.yaml +16 -3
  101. package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +120 -0
  102. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +63 -0
  103. package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/exit.yaml +2 -2
  104. package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/triggers.yaml +15 -3
  105. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +89 -0
  106. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/artifacts.yaml +2 -2
  107. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +3 -3
  108. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/triggers.yaml +7 -3
  109. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/validation.yaml +2 -2
  110. package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +24 -0
  111. package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/triggers.yaml +9 -3
  112. package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/validation.yaml +2 -2
  113. package/bundle/skills/agentera/capabilities/{hej → status}/schemas/artifacts.yaml +14 -11
  114. package/bundle/skills/agentera/capabilities/{hej → status}/schemas/triggers.yaml +12 -8
  115. package/bundle/skills/agentera/capabilities/{hej → status}/schemas/validation.yaml +5 -5
  116. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/artifacts.yaml +8 -8
  117. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/exit.yaml +7 -6
  118. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/triggers.yaml +19 -5
  119. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/validation.yaml +18 -20
  120. package/bundle/skills/agentera/capability_schema_contract.yaml +201 -38
  121. package/bundle/skills/agentera/protocol.yaml +29 -29
  122. package/bundle/skills/agentera/references/contract.md +387 -329
  123. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +4 -4
  124. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +25 -20
  125. package/bundle/skills/agentera/schemas/artifacts/design.yaml +4 -4
  126. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +8 -7
  127. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +139 -8
  128. package/bundle/skills/agentera/schemas/artifacts/health.yaml +21 -15
  129. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +22 -8
  130. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +285 -11
  131. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +36 -51
  132. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +77 -24
  133. package/bundle/skills/agentera/schemas/artifacts/vision.yaml +3 -3
  134. package/dist/analytics/extractCorpus/cli.js +163 -0
  135. package/dist/analytics/extractCorpus/cli.js.map +1 -0
  136. package/dist/analytics/extractCorpus/copilotSessions.js +276 -0
  137. package/dist/analytics/extractCorpus/copilotSessions.js.map +1 -0
  138. package/dist/analytics/extractCorpus/core.js +393 -0
  139. package/dist/analytics/extractCorpus/core.js.map +1 -0
  140. package/dist/analytics/extractCorpus/corpus.js +168 -0
  141. package/dist/analytics/extractCorpus/corpus.js.map +1 -0
  142. package/dist/analytics/extractCorpus/coverageAudit.js +261 -0
  143. package/dist/analytics/extractCorpus/coverageAudit.js.map +1 -0
  144. package/dist/analytics/extractCorpus/cursorSessions.js +426 -0
  145. package/dist/analytics/extractCorpus/cursorSessions.js.map +1 -0
  146. package/dist/analytics/extractCorpus/extractCorpusParity.js +105 -0
  147. package/dist/analytics/extractCorpus/extractCorpusParity.js.map +1 -0
  148. package/dist/analytics/extractCorpus/filesystemSources.js +119 -0
  149. package/dist/analytics/extractCorpus/filesystemSources.js.map +1 -0
  150. package/dist/analytics/extractCorpus/index.js +12 -0
  151. package/dist/analytics/extractCorpus/index.js.map +1 -0
  152. package/dist/analytics/extractCorpus/jsonlSessions.js +205 -0
  153. package/dist/analytics/extractCorpus/jsonlSessions.js.map +1 -0
  154. package/dist/analytics/extractCorpus/sqliteCaps.js +44 -0
  155. package/dist/analytics/extractCorpus/sqliteCaps.js.map +1 -0
  156. package/dist/analytics/extractCorpus/sqliteSessions.js +368 -0
  157. package/dist/analytics/extractCorpus/sqliteSessions.js.map +1 -0
  158. package/dist/analytics/extractCorpus.js +2 -1790
  159. package/dist/analytics/extractCorpus.js.map +1 -1
  160. package/dist/analytics/usageStats.js +93 -27
  161. package/dist/analytics/usageStats.js.map +1 -1
  162. package/dist/bin/agentera.js +3 -1
  163. package/dist/bin/agentera.js.map +1 -1
  164. package/dist/capabilities/audit/instructions.js +4 -0
  165. package/dist/capabilities/audit/instructions.js.map +1 -0
  166. package/dist/capabilities/build/instructions.js +5 -0
  167. package/dist/capabilities/build/instructions.js.map +1 -0
  168. package/dist/capabilities/design/instructions.js +5 -0
  169. package/dist/capabilities/design/instructions.js.map +1 -0
  170. package/dist/capabilities/discuss/instructions.js +6 -0
  171. package/dist/capabilities/discuss/instructions.js.map +1 -0
  172. package/dist/capabilities/document/instructions.js +4 -0
  173. package/dist/capabilities/document/instructions.js.map +1 -0
  174. package/dist/capabilities/index.js +38 -0
  175. package/dist/capabilities/index.js.map +1 -0
  176. package/dist/capabilities/optimize/instructions.js +5 -0
  177. package/dist/capabilities/optimize/instructions.js.map +1 -0
  178. package/dist/capabilities/orchestrate/instructions.js +10 -0
  179. package/dist/capabilities/orchestrate/instructions.js.map +1 -0
  180. package/dist/capabilities/plan/instructions.js +6 -0
  181. package/dist/capabilities/plan/instructions.js.map +1 -0
  182. package/dist/capabilities/profile/instructions.js +5 -0
  183. package/dist/capabilities/profile/instructions.js.map +1 -0
  184. package/dist/capabilities/research/instructions.js +6 -0
  185. package/dist/capabilities/research/instructions.js.map +1 -0
  186. package/dist/capabilities/status/instructions.js +5 -0
  187. package/dist/capabilities/status/instructions.js.map +1 -0
  188. package/dist/capabilities/vision/instructions.js +5 -0
  189. package/dist/capabilities/vision/instructions.js.map +1 -0
  190. package/dist/cli/appContext.js +30 -23
  191. package/dist/cli/appContext.js.map +1 -1
  192. package/dist/cli/capabilityContext/benchmark.js +564 -0
  193. package/dist/cli/capabilityContext/benchmark.js.map +1 -0
  194. package/dist/cli/capabilityContext/bespoke.js +38 -0
  195. package/dist/cli/capabilityContext/bespoke.js.map +1 -0
  196. package/dist/cli/capabilityContext/build.js +191 -0
  197. package/dist/cli/capabilityContext/build.js.map +1 -0
  198. package/dist/cli/capabilityContext/closeout.js +231 -0
  199. package/dist/cli/capabilityContext/closeout.js.map +1 -0
  200. package/dist/cli/capabilityContext/contract.js +219 -0
  201. package/dist/cli/capabilityContext/contract.js.map +1 -0
  202. package/dist/cli/capabilityContext/evidence.js +457 -0
  203. package/dist/cli/capabilityContext/evidence.js.map +1 -0
  204. package/dist/cli/capabilityContext/index.js +4 -0
  205. package/dist/cli/capabilityContext/index.js.map +1 -0
  206. package/dist/cli/capabilityContext/orchestration.js +118 -0
  207. package/dist/cli/capabilityContext/orchestration.js.map +1 -0
  208. package/dist/cli/capabilityContext/planState.js +279 -0
  209. package/dist/cli/capabilityContext/planState.js.map +1 -0
  210. package/dist/cli/capabilityContext/progress.js +143 -0
  211. package/dist/cli/capabilityContext/progress.js.map +1 -0
  212. package/dist/cli/capabilityContext/shared.js +94 -0
  213. package/dist/cli/capabilityContext/shared.js.map +1 -0
  214. package/dist/cli/capabilityContext/slim.js +139 -0
  215. package/dist/cli/capabilityContext/slim.js.map +1 -0
  216. package/dist/cli/capabilityContext/startup.js +241 -0
  217. package/dist/cli/capabilityContext/startup.js.map +1 -0
  218. package/dist/cli/capabilityContext/types.js +51 -0
  219. package/dist/cli/capabilityContext/types.js.map +1 -0
  220. package/dist/cli/capabilityContext.js +1 -2420
  221. package/dist/cli/capabilityContext.js.map +1 -1
  222. package/dist/cli/commands/appHome.js +23 -0
  223. package/dist/cli/commands/appHome.js.map +1 -0
  224. package/dist/cli/commands/backfill.js +186 -76
  225. package/dist/cli/commands/backfill.js.map +1 -1
  226. package/dist/cli/commands/capability.js +3 -10
  227. package/dist/cli/commands/capability.js.map +1 -1
  228. package/dist/cli/commands/compact.js +41 -12
  229. package/dist/cli/commands/compact.js.map +1 -1
  230. package/dist/cli/commands/doctor.js +116 -96
  231. package/dist/cli/commands/doctor.js.map +1 -1
  232. package/dist/cli/commands/durability.js +85 -0
  233. package/dist/cli/commands/durability.js.map +1 -0
  234. package/dist/cli/commands/lint.js +16 -41
  235. package/dist/cli/commands/lint.js.map +1 -1
  236. package/dist/cli/commands/migrate.js +677 -0
  237. package/dist/cli/commands/migrate.js.map +1 -0
  238. package/dist/cli/commands/prime/bundleStatus.js +185 -0
  239. package/dist/cli/commands/prime/bundleStatus.js.map +1 -0
  240. package/dist/cli/commands/prime/collectOrientationState.js +202 -0
  241. package/dist/cli/commands/prime/collectOrientationState.js.map +1 -0
  242. package/dist/cli/commands/prime/orientationOutput.js +235 -0
  243. package/dist/cli/commands/prime/orientationOutput.js.map +1 -0
  244. package/dist/cli/commands/prime/types.js +2 -0
  245. package/dist/cli/commands/prime/types.js.map +1 -0
  246. package/dist/cli/commands/prime/v1Migration.js +39 -0
  247. package/dist/cli/commands/prime/v1Migration.js.map +1 -0
  248. package/dist/cli/commands/prime.js +11 -519
  249. package/dist/cli/commands/prime.js.map +1 -1
  250. package/dist/cli/commands/query.js +25 -4
  251. package/dist/cli/commands/query.js.map +1 -1
  252. package/dist/cli/commands/report.js +50 -14
  253. package/dist/cli/commands/report.js.map +1 -1
  254. package/dist/cli/commands/schema.js +343 -76
  255. package/dist/cli/commands/schema.js.map +1 -1
  256. package/dist/cli/commands/state/decisions.js +421 -0
  257. package/dist/cli/commands/state/decisions.js.map +1 -0
  258. package/dist/cli/commands/state/docs.js +97 -0
  259. package/dist/cli/commands/state/docs.js.map +1 -0
  260. package/dist/cli/commands/state/experimentRecords.js +156 -0
  261. package/dist/cli/commands/state/experimentRecords.js.map +1 -0
  262. package/dist/cli/commands/state/experiments.js +68 -0
  263. package/dist/cli/commands/state/experiments.js.map +1 -0
  264. package/dist/cli/commands/state/get.js +141 -0
  265. package/dist/cli/commands/state/get.js.map +1 -0
  266. package/dist/cli/commands/state/health.js +116 -0
  267. package/dist/cli/commands/state/health.js.map +1 -0
  268. package/dist/cli/commands/state/index.js +51 -0
  269. package/dist/cli/commands/state/index.js.map +1 -0
  270. package/dist/cli/commands/state/list.js +159 -0
  271. package/dist/cli/commands/state/list.js.map +1 -0
  272. package/dist/cli/commands/state/objective.js +69 -0
  273. package/dist/cli/commands/state/objective.js.map +1 -0
  274. package/dist/cli/commands/state/plan.js +379 -0
  275. package/dist/cli/commands/state/plan.js.map +1 -0
  276. package/dist/cli/commands/state/planTasks.js +164 -0
  277. package/dist/cli/commands/state/planTasks.js.map +1 -0
  278. package/dist/cli/commands/state/plans.js +154 -0
  279. package/dist/cli/commands/state/plans.js.map +1 -0
  280. package/dist/cli/commands/state/progress.js +47 -0
  281. package/dist/cli/commands/state/progress.js.map +1 -0
  282. package/dist/cli/commands/state/shared.js +15 -0
  283. package/dist/cli/commands/state/shared.js.map +1 -0
  284. package/dist/cli/commands/state/todo.js +121 -0
  285. package/dist/cli/commands/state/todo.js.map +1 -0
  286. package/dist/cli/commands/state/write.js +346 -0
  287. package/dist/cli/commands/state/write.js.map +1 -0
  288. package/dist/cli/commands/upgrade.js +79 -1
  289. package/dist/cli/commands/upgrade.js.map +1 -1
  290. package/dist/cli/commands/upgradeVerify.js +81 -0
  291. package/dist/cli/commands/upgradeVerify.js.map +1 -0
  292. package/dist/cli/commands/validate.js +56 -96
  293. package/dist/cli/commands/validate.js.map +1 -1
  294. package/dist/cli/commands/verify.js +13 -7
  295. package/dist/cli/commands/verify.js.map +1 -1
  296. package/dist/cli/contracts/bundleStatus.js +2 -0
  297. package/dist/cli/contracts/bundleStatus.js.map +1 -0
  298. package/dist/cli/contracts/orientationState.js +2 -0
  299. package/dist/cli/contracts/orientationState.js.map +1 -0
  300. package/dist/cli/dispatch/argvParser.js +33 -0
  301. package/dist/cli/dispatch/argvParser.js.map +1 -0
  302. package/dist/cli/dispatch/check.js +395 -0
  303. package/dist/cli/dispatch/check.js.map +1 -0
  304. package/dist/cli/dispatch/commands.js +27 -0
  305. package/dist/cli/dispatch/commands.js.map +1 -0
  306. package/dist/cli/dispatch/index.js +201 -0
  307. package/dist/cli/dispatch/index.js.map +1 -0
  308. package/dist/cli/dispatch/lifecycle.js +671 -0
  309. package/dist/cli/dispatch/lifecycle.js.map +1 -0
  310. package/dist/cli/dispatch/prime.js +104 -0
  311. package/dist/cli/dispatch/prime.js.map +1 -0
  312. package/dist/cli/dispatch/shared.js +64 -0
  313. package/dist/cli/dispatch/shared.js.map +1 -0
  314. package/dist/cli/dispatch/state.js +168 -0
  315. package/dist/cli/dispatch/state.js.map +1 -0
  316. package/dist/cli/dispatch.js +1 -957
  317. package/dist/cli/dispatch.js.map +1 -1
  318. package/dist/cli/errors.js +53 -0
  319. package/dist/cli/errors.js.map +1 -0
  320. package/dist/cli/help.js +421 -0
  321. package/dist/cli/help.js.map +1 -0
  322. package/dist/cli/orientation/attention.js +163 -0
  323. package/dist/cli/orientation/attention.js.map +1 -0
  324. package/dist/cli/orientation/corpusCoverage.js +71 -0
  325. package/dist/cli/orientation/corpusCoverage.js.map +1 -0
  326. package/dist/cli/orientation.js +336 -144
  327. package/dist/cli/orientation.js.map +1 -1
  328. package/dist/cli/planArtifacts.js +201 -0
  329. package/dist/cli/planArtifacts.js.map +1 -0
  330. package/dist/cli/planEvidence.js +158 -0
  331. package/dist/cli/planEvidence.js.map +1 -0
  332. package/dist/cli/planLifecycleState.js +34 -0
  333. package/dist/cli/planLifecycleState.js.map +1 -0
  334. package/dist/cli/prime-blob.js +69 -2
  335. package/dist/cli/prime-blob.js.map +1 -1
  336. package/dist/cli/startupCompletenessContract.js +57 -0
  337. package/dist/cli/startupCompletenessContract.js.map +1 -0
  338. package/dist/cli/stateQuery.js +22 -5
  339. package/dist/cli/stateQuery.js.map +1 -1
  340. package/dist/cli/todoMarkdown.js +33 -0
  341. package/dist/cli/todoMarkdown.js.map +1 -0
  342. package/dist/cli/todoSeverity.js +19 -0
  343. package/dist/cli/todoSeverity.js.map +1 -0
  344. package/dist/core/atomicWriter.js +21 -0
  345. package/dist/core/atomicWriter.js.map +1 -0
  346. package/dist/core/envPaths.js +21 -0
  347. package/dist/core/envPaths.js.map +1 -0
  348. package/dist/core/jsonValue.js +6 -0
  349. package/dist/core/jsonValue.js.map +1 -0
  350. package/dist/core/pyjson.js +67 -2
  351. package/dist/core/pyjson.js.map +1 -1
  352. package/dist/core/text.js +11 -0
  353. package/dist/core/text.js.map +1 -0
  354. package/dist/core/yaml.js +8 -0
  355. package/dist/core/yaml.js.map +1 -1
  356. package/dist/eval/evalSkills.js +30 -25
  357. package/dist/eval/evalSkills.js.map +1 -1
  358. package/dist/eval/semanticEval.js +43 -19
  359. package/dist/eval/semanticEval.js.map +1 -1
  360. package/dist/eval/semanticFixtures.js +16 -4
  361. package/dist/eval/semanticFixtures.js.map +1 -1
  362. package/dist/hooks/common.js +9 -26
  363. package/dist/hooks/common.js.map +1 -1
  364. package/dist/hooks/compaction/apply.js +447 -0
  365. package/dist/hooks/compaction/apply.js.map +1 -0
  366. package/dist/hooks/compaction/dryRun.js +185 -0
  367. package/dist/hooks/compaction/dryRun.js.map +1 -0
  368. package/dist/hooks/compaction/index.js +23 -0
  369. package/dist/hooks/compaction/index.js.map +1 -0
  370. package/dist/hooks/compaction/parse.js +326 -0
  371. package/dist/hooks/compaction/parse.js.map +1 -0
  372. package/dist/hooks/compaction/retention.js +203 -0
  373. package/dist/hooks/compaction/retention.js.map +1 -0
  374. package/dist/hooks/compaction/status.js +336 -0
  375. package/dist/hooks/compaction/status.js.map +1 -0
  376. package/dist/hooks/compaction/types.js +6 -0
  377. package/dist/hooks/compaction/types.js.map +1 -0
  378. package/dist/hooks/cursorPreToolUse.js +1 -1
  379. package/dist/hooks/cursorPreToolUse.js.map +1 -1
  380. package/dist/hooks/cursorSessionStart.js +10 -2
  381. package/dist/hooks/cursorSessionStart.js.map +1 -1
  382. package/dist/hooks/sessionStart.js +57 -18
  383. package/dist/hooks/sessionStart.js.map +1 -1
  384. package/dist/hooks/sessionStop.js +8 -14
  385. package/dist/hooks/sessionStop.js.map +1 -1
  386. package/dist/hooks/validateArtifact/agentFacing.js +10 -0
  387. package/dist/hooks/validateArtifact/agentFacing.js.map +1 -0
  388. package/dist/hooks/validateArtifact/index.js +151 -0
  389. package/dist/hooks/validateArtifact/index.js.map +1 -0
  390. package/dist/hooks/validateArtifact/markdown.js +146 -0
  391. package/dist/hooks/validateArtifact/markdown.js.map +1 -0
  392. package/dist/hooks/validateArtifact/runtime.js +86 -0
  393. package/dist/hooks/validateArtifact/runtime.js.map +1 -0
  394. package/dist/hooks/validateArtifact/schema.js +541 -0
  395. package/dist/hooks/validateArtifact/schema.js.map +1 -0
  396. package/dist/hooks/validateArtifact/traversal.js +108 -0
  397. package/dist/hooks/validateArtifact/traversal.js.map +1 -0
  398. package/dist/hooks/validateArtifact/violations.js +108 -0
  399. package/dist/hooks/validateArtifact/violations.js.map +1 -0
  400. package/dist/migrate/v2HandoffManifest.js +455 -0
  401. package/dist/migrate/v2HandoffManifest.js.map +1 -0
  402. package/dist/registries/artifactProtocolIds.js +77 -0
  403. package/dist/registries/artifactProtocolIds.js.map +1 -0
  404. package/dist/registries/artifactRegistry.js +203 -53
  405. package/dist/registries/artifactRegistry.js.map +1 -1
  406. package/dist/registries/capabilityContract.js +156 -12
  407. package/dist/registries/capabilityContract.js.map +1 -1
  408. package/dist/registries/evaluatorHandoffContract.js +171 -0
  409. package/dist/registries/evaluatorHandoffContract.js.map +1 -0
  410. package/dist/registries/packageRegistry.js +40 -6
  411. package/dist/registries/packageRegistry.js.map +1 -1
  412. package/dist/registries/runtimeAdapterRegistry.js +30 -21
  413. package/dist/registries/runtimeAdapterRegistry.js.map +1 -1
  414. package/dist/registries/triggerLoader.js +211 -0
  415. package/dist/registries/triggerLoader.js.map +1 -0
  416. package/dist/release/releaseMetadata.js +329 -0
  417. package/dist/release/releaseMetadata.js.map +1 -0
  418. package/dist/runtime/lifecycleAdapterContract.js +458 -0
  419. package/dist/runtime/lifecycleAdapterContract.js.map +1 -0
  420. package/dist/runtime/lifecycleAdapters.js +766 -0
  421. package/dist/runtime/lifecycleAdapters.js.map +1 -0
  422. package/dist/runtime/lifecycleAuthority.js +493 -0
  423. package/dist/runtime/lifecycleAuthority.js.map +1 -0
  424. package/dist/runtime/lifecycleOperationContract.js +113 -0
  425. package/dist/runtime/lifecycleOperationContract.js.map +1 -0
  426. package/dist/runtime/lifecycleOperations.js +635 -0
  427. package/dist/runtime/lifecycleOperations.js.map +1 -0
  428. package/dist/runtime/lifecycleOwnershipJournal.js +623 -0
  429. package/dist/runtime/lifecycleOwnershipJournal.js.map +1 -0
  430. package/dist/runtime/lifecyclePublication.js +395 -0
  431. package/dist/runtime/lifecyclePublication.js.map +1 -0
  432. package/dist/runtime/lifecycleSnapshot.js +439 -0
  433. package/dist/runtime/lifecycleSnapshot.js.map +1 -0
  434. package/dist/runtime/retiredRuntimeCleanup.js +238 -0
  435. package/dist/runtime/retiredRuntimeCleanup.js.map +1 -0
  436. package/dist/setup/codex/agents.js +96 -0
  437. package/dist/setup/codex/agents.js.map +1 -0
  438. package/dist/setup/codex/cli.js +161 -0
  439. package/dist/setup/codex/cli.js.map +1 -0
  440. package/dist/setup/codex/configToml.js +639 -0
  441. package/dist/setup/codex/configToml.js.map +1 -0
  442. package/dist/setup/codex/constants.js +29 -0
  443. package/dist/setup/codex/constants.js.map +1 -0
  444. package/dist/setup/codex/installRoot.js +64 -0
  445. package/dist/setup/codex/installRoot.js.map +1 -0
  446. package/dist/setup/codex/state.js +270 -0
  447. package/dist/setup/codex/state.js.map +1 -0
  448. package/dist/setup/codex.js +11 -1055
  449. package/dist/setup/codex.js.map +1 -1
  450. package/dist/setup/copilot.js +1 -1
  451. package/dist/setup/copilot.js.map +1 -1
  452. package/dist/setup/cursor.js +7 -5
  453. package/dist/setup/cursor.js.map +1 -1
  454. package/dist/setup/cursorSurfaces.js +67 -0
  455. package/dist/setup/cursorSurfaces.js.map +1 -0
  456. package/dist/setup/doctor/core.js +296 -0
  457. package/dist/setup/doctor/core.js.map +1 -0
  458. package/dist/setup/doctor/diagnostics.js +201 -0
  459. package/dist/setup/doctor/diagnostics.js.map +1 -0
  460. package/dist/setup/doctor/opencode.js +301 -0
  461. package/dist/setup/doctor/opencode.js.map +1 -0
  462. package/dist/setup/doctor/report.js +425 -0
  463. package/dist/setup/doctor/report.js.map +1 -0
  464. package/dist/setup/doctor.js +9 -1275
  465. package/dist/setup/doctor.js.map +1 -1
  466. package/dist/setup/opencode.js +13 -0
  467. package/dist/setup/opencode.js.map +1 -0
  468. package/dist/setup/opencodeConstants.js +2 -0
  469. package/dist/setup/opencodeConstants.js.map +1 -0
  470. package/dist/setup/smokeChecks.js +109 -0
  471. package/dist/setup/smokeChecks.js.map +1 -0
  472. package/dist/state/archiveDiscovery.js +589 -0
  473. package/dist/state/archiveDiscovery.js.map +1 -0
  474. package/dist/state/archivePublication.js +225 -0
  475. package/dist/state/archivePublication.js.map +1 -0
  476. package/dist/state/archiveRecovery.js +238 -0
  477. package/dist/state/archiveRecovery.js.map +1 -0
  478. package/dist/state/archiveReplay.js +54 -0
  479. package/dist/state/archiveReplay.js.map +1 -0
  480. package/dist/state/decisionOverlay.js +255 -0
  481. package/dist/state/decisionOverlay.js.map +1 -0
  482. package/dist/state/directRetrieval.js +322 -0
  483. package/dist/state/directRetrieval.js.map +1 -0
  484. package/dist/state/durability.js +451 -0
  485. package/dist/state/durability.js.map +1 -0
  486. package/dist/state/experimentArchive.js +64 -0
  487. package/dist/state/experimentArchive.js.map +1 -0
  488. package/dist/state/experimentIdentity.js +191 -0
  489. package/dist/state/experimentIdentity.js.map +1 -0
  490. package/dist/state/experimentRetrieval.js +447 -0
  491. package/dist/state/experimentRetrieval.js.map +1 -0
  492. package/dist/state/gitBackfill.js +561 -0
  493. package/dist/state/gitBackfill.js.map +1 -0
  494. package/dist/state/gitBackfillAuthority.js +141 -0
  495. package/dist/state/gitBackfillAuthority.js.map +1 -0
  496. package/dist/state/gitBackfillHistory.js +278 -0
  497. package/dist/state/gitBackfillHistory.js.map +1 -0
  498. package/dist/state/gitBackfillOutput.js +209 -0
  499. package/dist/state/gitBackfillOutput.js.map +1 -0
  500. package/dist/state/healthRepair.js +70 -0
  501. package/dist/state/healthRepair.js.map +1 -0
  502. package/dist/state/installRoot.js +64 -24
  503. package/dist/state/installRoot.js.map +1 -1
  504. package/dist/state/legacyIdentity.js +48 -0
  505. package/dist/state/legacyIdentity.js.map +1 -0
  506. package/dist/state/legacyMigration.js +516 -0
  507. package/dist/state/legacyMigration.js.map +1 -0
  508. package/dist/state/legacyMigrationParser.js +489 -0
  509. package/dist/state/legacyMigrationParser.js.map +1 -0
  510. package/dist/state/listAccounting.js +55 -0
  511. package/dist/state/listAccounting.js.map +1 -0
  512. package/dist/state/listClassification.js +18 -0
  513. package/dist/state/listClassification.js.map +1 -0
  514. package/dist/state/listRetrieval.js +782 -0
  515. package/dist/state/listRetrieval.js.map +1 -0
  516. package/dist/state/migrationAuthority.js +413 -0
  517. package/dist/state/migrationAuthority.js.map +1 -0
  518. package/dist/state/migrationEnrichment.js +35 -0
  519. package/dist/state/migrationEnrichment.js.map +1 -0
  520. package/dist/state/planIdentity.js +45 -0
  521. package/dist/state/planIdentity.js.map +1 -0
  522. package/dist/state/planRetrieval.js +314 -0
  523. package/dist/state/planRetrieval.js.map +1 -0
  524. package/dist/state/planTaskRetrieval.js +285 -0
  525. package/dist/state/planTaskRetrieval.js.map +1 -0
  526. package/dist/state/projectionPolicy.js +184 -0
  527. package/dist/state/projectionPolicy.js.map +1 -0
  528. package/dist/state/retrievalAuthority.js +326 -0
  529. package/dist/state/retrievalAuthority.js.map +1 -0
  530. package/dist/state/startupAnalysis/benchmark.js +371 -0
  531. package/dist/state/startupAnalysis/benchmark.js.map +1 -0
  532. package/dist/state/startupAnalysis/contract.js +126 -0
  533. package/dist/state/startupAnalysis/contract.js.map +1 -0
  534. package/dist/state/startupAnalysis/helpers.js +287 -0
  535. package/dist/state/startupAnalysis/helpers.js.map +1 -0
  536. package/dist/state/startupAnalysis/index.js +7 -0
  537. package/dist/state/startupAnalysis/index.js.map +1 -0
  538. package/dist/state/startupAnalysis/metrics.js +341 -0
  539. package/dist/state/startupAnalysis/metrics.js.map +1 -0
  540. package/dist/state/startupAnalysis/records.js +199 -0
  541. package/dist/state/startupAnalysis/records.js.map +1 -0
  542. package/dist/state/startupAnalysis/report.js +112 -0
  543. package/dist/state/startupAnalysis/report.js.map +1 -0
  544. package/dist/state/startupAnalysis/threshold.js +500 -0
  545. package/dist/state/startupAnalysis/threshold.js.map +1 -0
  546. package/dist/state/startupAnalysis.js +2 -1952
  547. package/dist/state/startupAnalysis.js.map +1 -1
  548. package/dist/state/startupProjection.js +498 -0
  549. package/dist/state/startupProjection.js.map +1 -0
  550. package/dist/state/write/assign.js +21 -0
  551. package/dist/state/write/assign.js.map +1 -0
  552. package/dist/state/write/errors.js +12 -0
  553. package/dist/state/write/errors.js.map +1 -0
  554. package/dist/state/write/experimentPublication.js +193 -0
  555. package/dist/state/write/experimentPublication.js.map +1 -0
  556. package/dist/state/write/explain.js +169 -0
  557. package/dist/state/write/explain.js.map +1 -0
  558. package/dist/state/write/fields.js +62 -0
  559. package/dist/state/write/fields.js.map +1 -0
  560. package/dist/state/write/helpers.js +8 -0
  561. package/dist/state/write/helpers.js.map +1 -0
  562. package/dist/state/write/index.js +12 -0
  563. package/dist/state/write/index.js.map +1 -0
  564. package/dist/state/write/input.js +22 -0
  565. package/dist/state/write/input.js.map +1 -0
  566. package/dist/state/write/lock.js +131 -0
  567. package/dist/state/write/lock.js.map +1 -0
  568. package/dist/state/write/mutation.js +190 -0
  569. package/dist/state/write/mutation.js.map +1 -0
  570. package/dist/state/write/operations.js +254 -0
  571. package/dist/state/write/operations.js.map +1 -0
  572. package/dist/state/write/planPublication.js +172 -0
  573. package/dist/state/write/planPublication.js.map +1 -0
  574. package/dist/state/write/serialize.js +2 -0
  575. package/dist/state/write/serialize.js.map +1 -0
  576. package/dist/state/write/transaction.js +800 -0
  577. package/dist/state/write/transaction.js.map +1 -0
  578. package/dist/state/write/validate.js +8 -0
  579. package/dist/state/write/validate.js.map +1 -0
  580. package/dist/upgrade/appContentRefresh.js +374 -0
  581. package/dist/upgrade/appContentRefresh.js.map +1 -0
  582. package/dist/upgrade/appModel.js +11 -6
  583. package/dist/upgrade/appModel.js.map +1 -1
  584. package/dist/upgrade/atomicWriter.js +2 -0
  585. package/dist/upgrade/atomicWriter.js.map +1 -0
  586. package/dist/upgrade/bundleEvidence.js +34 -0
  587. package/dist/upgrade/bundleEvidence.js.map +1 -0
  588. package/dist/upgrade/channels.js +27 -7
  589. package/dist/upgrade/channels.js.map +1 -1
  590. package/dist/upgrade/coexistenceProbe.js +105 -0
  591. package/dist/upgrade/coexistenceProbe.js.map +1 -0
  592. package/dist/upgrade/compatibility.js +52 -16
  593. package/dist/upgrade/compatibility.js.map +1 -1
  594. package/dist/upgrade/doctor.js +195 -193
  595. package/dist/upgrade/doctor.js.map +1 -1
  596. package/dist/upgrade/doctorClassifier.js +188 -0
  597. package/dist/upgrade/doctorClassifier.js.map +1 -0
  598. package/dist/upgrade/installedHooksRetirement.js +190 -0
  599. package/dist/upgrade/installedHooksRetirement.js.map +1 -0
  600. package/dist/upgrade/legacyAgentCleanup.js +183 -0
  601. package/dist/upgrade/legacyAgentCleanup.js.map +1 -0
  602. package/dist/upgrade/lifecycleUpgrade.js +427 -0
  603. package/dist/upgrade/lifecycleUpgrade.js.map +1 -0
  604. package/dist/upgrade/migrateArtifactsV1ToV2.js +568 -0
  605. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +1 -0
  606. package/dist/upgrade/migrateArtifactsV2ToV3.js +273 -144
  607. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +1 -1
  608. package/dist/upgrade/nextMajorDoctor.js +156 -0
  609. package/dist/upgrade/nextMajorDoctor.js.map +1 -0
  610. package/dist/upgrade/npxPlatformStatus.js +23 -0
  611. package/dist/upgrade/npxPlatformStatus.js.map +1 -0
  612. package/dist/upgrade/projectIntegration.js +259 -104
  613. package/dist/upgrade/projectIntegration.js.map +1 -1
  614. package/dist/upgrade/projectIntegrationDecision.js +141 -0
  615. package/dist/upgrade/projectIntegrationDecision.js.map +1 -0
  616. package/dist/upgrade/runtimeMigration.js +342 -89
  617. package/dist/upgrade/runtimeMigration.js.map +1 -1
  618. package/dist/upgrade/upgradeCommands.js +8 -0
  619. package/dist/upgrade/upgradeCommands.js.map +1 -1
  620. package/dist/upgrade/upgradeLock.js +54 -0
  621. package/dist/upgrade/upgradeLock.js.map +1 -0
  622. package/dist/upgrade/upgradeOrchestrator.js +170 -46
  623. package/dist/upgrade/upgradeOrchestrator.js.map +1 -1
  624. package/dist/upgrade/upgradeSnapshot.js +93 -0
  625. package/dist/upgrade/upgradeSnapshot.js.map +1 -0
  626. package/dist/upgrade/v3CapabilitySurface.js +15 -0
  627. package/dist/upgrade/v3CapabilitySurface.js.map +1 -0
  628. package/dist/upgrade/versionResolution.js +12 -4
  629. package/dist/upgrade/versionResolution.js.map +1 -1
  630. package/dist/validate/appHomeContract.js +5 -5
  631. package/dist/validate/appHomeContract.js.map +1 -1
  632. package/dist/validate/capability.js +135 -14
  633. package/dist/validate/capability.js.map +1 -1
  634. package/dist/validate/crossCapability.js +10 -7
  635. package/dist/validate/crossCapability.js.map +1 -1
  636. package/dist/validate/lifecycleAdapters/legacyPythonParity.js +93 -0
  637. package/dist/validate/lifecycleAdapters/legacyPythonParity.js.map +1 -0
  638. package/dist/validate/lifecycleAdapters/nodeFormChecks.js +481 -0
  639. package/dist/validate/lifecycleAdapters/nodeFormChecks.js.map +1 -0
  640. package/dist/validate/lifecycleAdapters/shared.js +198 -0
  641. package/dist/validate/lifecycleAdapters/shared.js.map +1 -0
  642. package/dist/validate/lifecycleAdapters.js +91 -702
  643. package/dist/validate/lifecycleAdapters.js.map +1 -1
  644. package/dist/validate/selfAudit.js +63 -21
  645. package/dist/validate/selfAudit.js.map +1 -1
  646. package/dist/validate/vocabularyAuthority.js +303 -0
  647. package/dist/validate/vocabularyAuthority.js.map +1 -0
  648. package/package.json +30 -27
  649. package/bundle/references/v1-section-mapping.md +0 -47
  650. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  651. package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
  652. package/bundle/skills/agentera/agents/hej.toml +0 -6
  653. package/bundle/skills/agentera/agents/inspektera.toml +0 -6
  654. package/bundle/skills/agentera/agents/inspirera.toml +0 -6
  655. package/bundle/skills/agentera/agents/optimera.toml +0 -6
  656. package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
  657. package/bundle/skills/agentera/agents/planera.toml +0 -6
  658. package/bundle/skills/agentera/agents/profilera.toml +0 -6
  659. package/bundle/skills/agentera/agents/realisera.toml +0 -6
  660. package/bundle/skills/agentera/agents/resonera.toml +0 -6
  661. package/bundle/skills/agentera/agents/visionera.toml +0 -6
  662. package/bundle/skills/agentera/agents/visualisera.toml +0 -6
  663. package/bundle/skills/agentera/capabilities/dokumentera/instructions.md +0 -428
  664. package/bundle/skills/agentera/capabilities/hej/instructions.md +0 -331
  665. package/bundle/skills/agentera/capabilities/inspektera/instructions.md +0 -514
  666. package/bundle/skills/agentera/capabilities/inspektera/schemas/artifacts.yaml +0 -76
  667. package/bundle/skills/agentera/capabilities/inspirera/instructions.md +0 -280
  668. package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +0 -24
  669. package/bundle/skills/agentera/capabilities/optimera/instructions.md +0 -437
  670. package/bundle/skills/agentera/capabilities/orkestrera/instructions.md +0 -433
  671. package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +0 -64
  672. package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +0 -107
  673. package/bundle/skills/agentera/capabilities/planera/instructions.md +0 -368
  674. package/bundle/skills/agentera/capabilities/planera/schemas/artifacts.yaml +0 -62
  675. package/bundle/skills/agentera/capabilities/planera/schemas/validation.yaml +0 -61
  676. package/bundle/skills/agentera/capabilities/profilera/instructions.md +0 -419
  677. package/bundle/skills/agentera/capabilities/realisera/instructions.md +0 -403
  678. package/bundle/skills/agentera/capabilities/resonera/instructions.md +0 -329
  679. package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +0 -47
  680. package/bundle/skills/agentera/capabilities/visionera/instructions.md +0 -309
  681. package/bundle/skills/agentera/capabilities/visualisera/instructions.md +0 -400
  682. package/bundle/skills/hej/.claude-plugin/plugin.json +0 -6
  683. package/bundle/skills/hej/SKILL.md +0 -69
  684. package/bundle/skills/hej/agents/hej.toml +0 -11
  685. package/bundle/skills/hej/agents/openai.yaml +0 -8
  686. package/dist/cli/commands/state.js +0 -1012
  687. package/dist/cli/commands/state.js.map +0 -1
  688. package/dist/core/git.js +0 -43
  689. package/dist/core/git.js.map +0 -1
  690. package/dist/hooks/compaction.js +0 -935
  691. package/dist/hooks/compaction.js.map +0 -1
  692. package/dist/hooks/validateArtifact.js +0 -933
  693. package/dist/hooks/validateArtifact.js.map +0 -1
  694. package/dist/state/progressCommit.js +0 -289
  695. package/dist/state/progressCommit.js.map +0 -1
  696. /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
  697. /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
  698. /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
@@ -5,10 +5,19 @@ import { isFile, pathExists, resolvePath } from "../core/paths.js";
5
5
  import { resolveSourceRoot } from "../core/sourceRoot.js";
6
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 { writeFileAtomic } from "./atomicWriter.js";
12
+ import { applyInstalledHooksRetirementItems, planInstalledHooksRetirementItems, textReferencesV2InstalledHooks, } from "./installedHooksRetirement.js";
13
+ import { projectUsesV3CapabilityInstructionModules } from "./v3CapabilitySurface.js";
10
14
  const PYTHON_MANAGED_PATTERNS = [
11
15
  /hooks\/validate_artifact\.py/,
16
+ /hooks\/cursor_session_start\.py/,
17
+ /hooks\/cursor_pre_tool_use\.py/,
18
+ /hooks\/cursor_session_stop\.py/,
19
+ /hooks\/session_start\.py/,
20
+ /hooks\/session_stop\.py/,
12
21
  /\buv run\b/,
13
22
  /\buvx\b/,
14
23
  /scripts\/agentera/,
@@ -17,14 +26,23 @@ const PYTHON_MANAGED_PATTERNS = [
17
26
  /cursor_pre_tool_use\.py/,
18
27
  /cursor_session_stop\.py/,
19
28
  ];
29
+ export function projectHasProjectLevelRuntimeHooks(project) {
30
+ const root = resolvePath(project);
31
+ const candidates = [
32
+ path.join(root, ".cursor", "hooks.json"),
33
+ path.join(root, ".codex", "config.toml"),
34
+ path.join(root, ".codex", "hooks", "codex-hooks.json"),
35
+ path.join(root, ".github", "hooks"),
36
+ ];
37
+ return candidates.some((candidate) => isFile(candidate) || pathExists(candidate));
38
+ }
20
39
  const OPENCODE_COMMAND_NAMES = ["agentera"];
21
- const OPENCODE_SKILL_NAMES = ["agentera", "hej"];
22
40
  const CURSOR_AGENT_MARKER = "<!-- agentera: managed -->";
23
41
  export function resolveNpxHookCommands(ctx) {
24
42
  const env = ctx.env ?? process.env;
25
43
  const home = ctx.home ?? env.HOME ?? os.homedir();
26
44
  const sourceRoot = ctx.sourceRoot ?? resolveSourceRoot(env);
27
- const channel = resolveUpdateChannel({
45
+ const channel = resolveInvokedUpdateChannel({
28
46
  channel: ctx.channel ?? null,
29
47
  env,
30
48
  home,
@@ -45,10 +63,16 @@ export function textUsesPythonManagedEntrypoint(text) {
45
63
  }
46
64
  return PYTHON_MANAGED_PATTERNS.some((pattern) => pattern.test(text));
47
65
  }
66
+ const V3_NPX_ENTRYPOINT = /\bnpx\s+-y\s+agentera\b/;
67
+ export function textUsesV3NpmEntrypoint(text) {
68
+ return V3_NPX_ENTRYPOINT.test(text);
69
+ }
48
70
  export function rewireRuntimeText(text, runtime, commands) {
49
71
  let next = text;
50
72
  next = next.replace(/uv run\s+\\?"?\$\{AGENTERA_HOME\}\/hooks\/validate_artifact\.py\\?"?/g, commands.validate);
73
+ next = next.replace(/uv run\s+\\?"?\$\{AGENTERA_HOME\}\/app\/hooks\/validate_artifact\.py\\?"?/g, commands.validate);
51
74
  next = next.replace(/uv run\s+\\?"?\$\{PLUGIN_ROOT\}\/hooks\/validate_artifact\.py\\?"?/g, commands.validate);
75
+ next = next.replace(/uv run\s+hooks\/validate_artifact\.py/g, commands.validate);
52
76
  if (next.includes("validate_artifact.py")) {
53
77
  next = next.replace(/["']?[^"'\n]*hooks\/validate_artifact\.py[^"'\n]*["']?/g, `"${commands.validate}"`);
54
78
  }
@@ -81,8 +105,8 @@ function needsChannelNpxRewire(text, cliEntrypoint) {
81
105
  function pushRewireItem(items, runtime, filePath, commands) {
82
106
  const text = fs.readFileSync(filePath, "utf8");
83
107
  const needsBare = needsChannelNpxRewire(text, commands.cliEntrypoint);
84
- if (!textUsesPythonManagedEntrypoint(text) && !needsBare) {
85
- if (text.includes(commands.cliEntrypoint)) {
108
+ if (!textUsesPythonManagedEntrypoint(text) && !textReferencesV2InstalledHooks(text) && !needsBare) {
109
+ if (textUsesV3NpmEntrypoint(text)) {
86
110
  items.push({
87
111
  status: "noop",
88
112
  action: "rewire-runtime",
@@ -91,6 +115,8 @@ function pushRewireItem(items, runtime, filePath, commands) {
91
115
  message: "runtime config already references npm self-contained entrypoint",
92
116
  });
93
117
  }
118
+ // If the file has no Agentera content at all (no v2 Python, no v3 npm),
119
+ // it is not Agentera-managed. Do not push a blocked item — just return.
94
120
  return;
95
121
  }
96
122
  const newText = rewireRuntimeText(text, runtime, commands);
@@ -122,49 +148,49 @@ function copyIfChanged(source, target) {
122
148
  }
123
149
  }
124
150
  fs.mkdirSync(path.dirname(target), { recursive: true });
125
- fs.copyFileSync(source, target);
151
+ const sourceBytes = fs.readFileSync(source);
152
+ writeFileAtomic(target, sourceBytes);
126
153
  return true;
127
154
  }
128
- function planCodexItems(items, home, commands, force) {
129
- const hooksPath = path.join(home, ".codex", "hooks", "codex-hooks.json");
130
- const configPath = path.join(home, ".codex", "config.toml");
131
- if (isFile(hooksPath)) {
132
- pushRewireItem(items, "codex", hooksPath, commands);
133
- }
134
- if (isFile(configPath)) {
135
- pushRewireItem(items, "codex", configPath, commands);
136
- let configText = fs.readFileSync(configPath, "utf8");
155
+ function planCodexItems(items, home, project, commands, force) {
156
+ for (const root of [project, home]) {
157
+ const hooksPath = path.join(root, ".codex", "hooks", "codex-hooks.json");
158
+ const configPath = path.join(root, ".codex", "config.toml");
137
159
  if (isFile(hooksPath)) {
138
- configText = fs.readFileSync(configPath, "utf8");
160
+ pushRewireItem(items, "codex", hooksPath, commands);
139
161
  }
140
- const pluginHooks = codexPluginHooksEnabled(configText);
141
- if (pluginHooks && isFile(hooksPath)) {
142
- let hooksText;
143
- try {
144
- hooksText = fs.readFileSync(hooksPath, "utf8");
145
- }
146
- catch {
147
- hooksText = "";
148
- }
149
- if (codexCopiedHooksAreAgenteraOnly(hooksText)) {
150
- items.push({
151
- status: "pending",
152
- action: "retire-hooks",
153
- runtime: "codex",
154
- source: hooksPath,
155
- target: configPath,
156
- message: "will remove Agentera-owned copied Codex hooks because plugin hooks are enabled",
157
- });
158
- }
159
- else if (hooksText.includes("validate_artifact") || hooksText.includes("hook validate-artifact")) {
160
- items.push({
161
- status: force ? "pending" : "blocked",
162
- action: "retire-hooks",
163
- runtime: "codex",
164
- source: hooksPath,
165
- target: configPath,
166
- message: "plugin hooks are enabled, but copied hook target needs manual review before retirement",
167
- });
162
+ if (isFile(configPath)) {
163
+ pushRewireItem(items, "codex", configPath, commands);
164
+ const configText = fs.readFileSync(configPath, "utf8");
165
+ const pluginHooks = codexPluginHooksEnabled(configText);
166
+ if (pluginHooks && isFile(hooksPath)) {
167
+ let hooksText;
168
+ try {
169
+ hooksText = fs.readFileSync(hooksPath, "utf8");
170
+ }
171
+ catch {
172
+ hooksText = "";
173
+ }
174
+ if (codexCopiedHooksAreAgenteraOnly(hooksText)) {
175
+ items.push({
176
+ status: "pending",
177
+ action: "retire-hooks",
178
+ runtime: "codex",
179
+ source: hooksPath,
180
+ target: configPath,
181
+ message: "will remove Agentera-owned copied Codex hooks because plugin hooks are enabled",
182
+ });
183
+ }
184
+ else if (hooksText.includes("validate_artifact") || hooksText.includes("hook validate-artifact")) {
185
+ items.push({
186
+ status: force ? "pending" : "blocked",
187
+ action: "retire-hooks",
188
+ runtime: "codex",
189
+ source: hooksPath,
190
+ target: configPath,
191
+ message: "plugin hooks are enabled, but copied hook target needs manual review before retirement",
192
+ });
193
+ }
168
194
  }
169
195
  }
170
196
  }
@@ -205,12 +231,21 @@ function planCursorItems(items, home, project, sourceRoot, commands) {
205
231
  });
206
232
  }
207
233
  }
208
- if (pathExists(agentsSource)) {
209
- for (const entry of fs.readdirSync(agentsSource)) {
210
- if (!entry.endsWith(".md"))
211
- continue;
212
- const src = path.join(agentsSource, entry);
213
- const dst = path.join(agentsDir, entry);
234
+ const skipInTreeCursorAgents = root === project && projectUsesV3CapabilityInstructionModules(project);
235
+ if (skipInTreeCursorAgents) {
236
+ items.push({
237
+ status: "noop",
238
+ action: "copy-agent",
239
+ runtime: "cursor",
240
+ target: agentsDir,
241
+ message: "v3 capability instruction modules present; in-tree .cursor/agents/ uses prime --context and is not overwritten",
242
+ });
243
+ }
244
+ else if (pathExists(agentsSource)) {
245
+ const CURSOR_MANAGED_AGENT = "agentera.md";
246
+ const src = path.join(agentsSource, CURSOR_MANAGED_AGENT);
247
+ if (isFile(src)) {
248
+ const dst = path.join(agentsDir, CURSOR_MANAGED_AGENT);
214
249
  if (!isFile(dst)) {
215
250
  items.push({
216
251
  status: "pending",
@@ -218,21 +253,22 @@ function planCursorItems(items, home, project, sourceRoot, commands) {
218
253
  runtime: "cursor",
219
254
  source: src,
220
255
  target: dst,
221
- message: "will copy managed Cursor capability agent",
256
+ message: "will copy managed Cursor Agentera agent",
222
257
  });
223
- continue;
224
258
  }
225
- const dstText = fs.readFileSync(dst, "utf8");
226
- const srcText = fs.readFileSync(src, "utf8");
227
- if (hasCursorManagedAgentMarker(dstText) && dstText !== srcText) {
228
- items.push({
229
- status: "pending",
230
- action: "copy-agent",
231
- runtime: "cursor",
232
- source: src,
233
- target: dst,
234
- message: "will refresh stale managed Cursor capability agent",
235
- });
259
+ else {
260
+ const dstText = fs.readFileSync(dst, "utf8");
261
+ const srcText = fs.readFileSync(src, "utf8");
262
+ if (hasCursorManagedAgentMarker(dstText) && dstText !== srcText) {
263
+ items.push({
264
+ status: "pending",
265
+ action: "copy-agent",
266
+ runtime: "cursor",
267
+ source: src,
268
+ target: dst,
269
+ message: "will refresh stale managed Cursor Agentera agent",
270
+ });
271
+ }
236
272
  }
237
273
  }
238
274
  }
@@ -243,9 +279,12 @@ function planOpencodeItems(items, home, sourceRoot, env, commands) {
243
279
  const pluginSource = path.join(sourceRoot, ".opencode", "plugins", "agentera.js");
244
280
  const pluginTarget = path.join(configDir, "plugins", "agentera.js");
245
281
  if (isFile(pluginSource)) {
282
+ const targetContent = isFile(pluginTarget) ? fs.readFileSync(pluginTarget, "utf8") : "";
283
+ const sourceContent = fs.readFileSync(pluginSource, "utf8");
246
284
  const needsCopy = !isFile(pluginTarget) ||
247
- textUsesPythonManagedEntrypoint(fs.readFileSync(pluginTarget, "utf8")) ||
248
- needsChannelNpxRewire(fs.readFileSync(pluginTarget, "utf8"), commands.cliEntrypoint);
285
+ (targetContent !== sourceContent &&
286
+ (textUsesPythonManagedEntrypoint(targetContent) ||
287
+ needsChannelNpxRewire(targetContent, commands.cliEntrypoint)));
249
288
  items.push({
250
289
  status: needsCopy ? "pending" : "noop",
251
290
  action: "copy-plugin",
@@ -261,10 +300,9 @@ function planOpencodeItems(items, home, sourceRoot, env, commands) {
261
300
  const commandsTargetDir = path.join(configDir, "commands");
262
301
  for (const name of OPENCODE_COMMAND_NAMES) {
263
302
  const src = path.join(commandsSourceDir, `${name}.md`);
264
- const expected = opencodeCommandTemplate(name);
265
303
  const dst = path.join(commandsTargetDir, `${name}.md`);
266
304
  if (isFile(src)) {
267
- const needsCopy = !isFile(dst) || (hasManagedMarker(fs.readFileSync(dst, "utf8")) && fs.readFileSync(dst, "utf8") !== expected);
305
+ const needsCopy = !isFile(dst) || (hasManagedMarker(fs.readFileSync(dst, "utf8")) && !fs.readFileSync(src).equals(fs.readFileSync(dst)));
268
306
  items.push({
269
307
  status: needsCopy ? "pending" : "noop",
270
308
  action: "copy-command",
@@ -277,12 +315,11 @@ function planOpencodeItems(items, home, sourceRoot, env, commands) {
277
315
  }
278
316
  const agentsSourceDir = path.join(sourceRoot, ".opencode", "agents");
279
317
  const agentsTargetDir = path.join(configDir, "agents");
318
+ const OPENCODE_MANAGED_AGENT = "agentera.md";
280
319
  if (pathExists(agentsSourceDir)) {
281
- for (const entry of fs.readdirSync(agentsSourceDir)) {
282
- if (!entry.endsWith(".md"))
283
- continue;
284
- const src = path.join(agentsSourceDir, entry);
285
- const dst = path.join(agentsTargetDir, entry);
320
+ const src = path.join(agentsSourceDir, OPENCODE_MANAGED_AGENT);
321
+ if (isFile(src)) {
322
+ const dst = path.join(agentsTargetDir, OPENCODE_MANAGED_AGENT);
286
323
  const needsCopy = !isFile(dst) || !fs.readFileSync(src).equals(fs.readFileSync(dst));
287
324
  items.push({
288
325
  status: needsCopy ? "pending" : "noop",
@@ -290,12 +327,16 @@ function planOpencodeItems(items, home, sourceRoot, env, commands) {
290
327
  runtime: "opencode",
291
328
  source: src,
292
329
  target: dst,
293
- message: needsCopy ? "will copy managed OpenCode capability agent" : "OpenCode agent already current",
330
+ message: needsCopy ? "will copy managed OpenCode Agentera agent" : "OpenCode Agentera agent already current",
294
331
  });
295
332
  }
296
333
  }
297
334
  const skillsSourceRoot = path.join(sourceRoot, "skills");
298
- const skillsTargetDir = path.join(configDir, "skills");
335
+ // D78: ~/.agents/skills is the canonical agent-compatible root (opencode loads
336
+ // from both ~/.config/opencode/skills and ~/.agents/skills and requires skill
337
+ // names unique across locations — opencode.ai/docs/skills). Maintain the link
338
+ // here; the legacy ~/.config/opencode/skills entry is retired below.
339
+ const skillsTargetDir = path.join(home, ".agents", "skills");
299
340
  for (const name of OPENCODE_SKILL_NAMES) {
300
341
  const src = path.join(skillsSourceRoot, name);
301
342
  const dst = path.join(skillsTargetDir, name);
@@ -347,6 +388,144 @@ function planOpencodeItems(items, home, sourceRoot, env, commands) {
347
388
  });
348
389
  }
349
390
  }
391
+ // D78: retire the legacy opencode-specific skill symlinks now that
392
+ // ~/.agents/skills is canonical. The opencode doc requires skill names
393
+ // unique across its discovery locations; a skill present in both
394
+ // ~/.config/opencode/skills and ~/.agents/skills is the duplicate-name error
395
+ // that let a stale copy load.
396
+ const legacySkillsDir = path.join(configDir, "skills");
397
+ if (pathExists(legacySkillsDir) && fs.statSync(legacySkillsDir).isDirectory()) {
398
+ for (const name of OPENCODE_SKILL_NAMES) {
399
+ const legacy = path.join(legacySkillsDir, name);
400
+ let linkTarget = null;
401
+ try {
402
+ linkTarget = fs.readlinkSync(legacy);
403
+ }
404
+ catch {
405
+ linkTarget = null;
406
+ }
407
+ if (linkTarget !== null) {
408
+ if (linkTarget.toLowerCase().includes("agentera") || path.basename(linkTarget) === name) {
409
+ items.push({
410
+ status: "pending",
411
+ action: "remove-stale-skill",
412
+ runtime: "opencode",
413
+ source: legacy,
414
+ message: `will retire duplicate OpenCode skill symlink ${name} (agent-compatible root ~/.agents/skills is canonical; D78)`,
415
+ });
416
+ }
417
+ else {
418
+ items.push({
419
+ status: "blocked",
420
+ action: "remove-stale-skill",
421
+ runtime: "opencode",
422
+ source: legacy,
423
+ message: `legacy OpenCode skill symlink ${name} targets a non-agentera path; manual review required`,
424
+ });
425
+ }
426
+ }
427
+ else if (pathExists(legacy)) {
428
+ try {
429
+ const dirEntries = fs.readdirSync(legacy);
430
+ if (dirEntries.length === 0) {
431
+ items.push({
432
+ status: "pending",
433
+ action: "remove-stale-skill",
434
+ runtime: "opencode",
435
+ source: legacy,
436
+ message: `will retire empty legacy OpenCode skill directory ${name} (agent-compatible root ~/.agents/skills is canonical; D78)`,
437
+ });
438
+ }
439
+ else {
440
+ items.push({
441
+ status: "blocked",
442
+ action: "remove-stale-skill",
443
+ runtime: "opencode",
444
+ source: legacy,
445
+ message: `legacy OpenCode skill path ${name} is a non-empty real directory (entries: ${dirEntries.length}); manual review required (D78 retires agentera-managed symlinks and empty dirs only)`,
446
+ });
447
+ }
448
+ }
449
+ catch {
450
+ items.push({
451
+ status: "blocked",
452
+ action: "remove-stale-skill",
453
+ runtime: "opencode",
454
+ source: legacy,
455
+ message: `legacy OpenCode skill path ${name} could not be inspected; manual review required`,
456
+ });
457
+ }
458
+ }
459
+ }
460
+ }
461
+ }
462
+ export function planStaleCommandCleanupItems(ctx, items) {
463
+ const env = ctx.env ?? process.env;
464
+ const home = resolvePath(ctx.home);
465
+ const commandsDir = path.join(opencodeConfigDir(home, env), "commands");
466
+ if (!pathExists(commandsDir) || !fs.statSync(commandsDir).isDirectory()) {
467
+ return;
468
+ }
469
+ const currentNames = new Set(OPENCODE_COMMAND_NAMES);
470
+ for (const entry of fs.readdirSync(commandsDir)) {
471
+ if (!entry.endsWith(".md")) {
472
+ continue;
473
+ }
474
+ const filePath = path.join(commandsDir, entry);
475
+ if (!isFile(filePath)) {
476
+ continue;
477
+ }
478
+ const body = fs.readFileSync(filePath, "utf8");
479
+ if (!hasManagedMarker(body)) {
480
+ continue;
481
+ }
482
+ const name = entry.slice(0, -3);
483
+ if (currentNames.has(name)) {
484
+ continue;
485
+ }
486
+ items.push({
487
+ status: "pending",
488
+ action: "remove-stale-command",
489
+ runtime: "opencode",
490
+ source: filePath,
491
+ message: `will remove stale managed command ${path.basename(filePath)}`,
492
+ });
493
+ }
494
+ }
495
+ export function planStaleSkillCleanupItems(ctx, items) {
496
+ const env = ctx.env ?? process.env;
497
+ const home = resolvePath(ctx.home);
498
+ const skillsDir = path.join(opencodeConfigDir(home, env), "skills");
499
+ if (!pathExists(skillsDir) || !fs.statSync(skillsDir).isDirectory()) {
500
+ return;
501
+ }
502
+ const requiredNames = new Set(OPENCODE_SKILL_NAMES);
503
+ for (const entry of fs.readdirSync(skillsDir, { withFileTypes: true })) {
504
+ if (!entry.isSymbolicLink()) {
505
+ continue;
506
+ }
507
+ const linkPath = path.join(skillsDir, entry.name);
508
+ let linkTarget;
509
+ try {
510
+ linkTarget = fs.readlinkSync(linkPath);
511
+ }
512
+ catch {
513
+ continue;
514
+ }
515
+ if (!linkTarget.toLowerCase().includes("agentera")) {
516
+ continue;
517
+ }
518
+ if (requiredNames.has(entry.name)) {
519
+ continue;
520
+ }
521
+ items.push({
522
+ status: "pending",
523
+ action: "remove-stale-skill",
524
+ runtime: "opencode",
525
+ source: linkPath,
526
+ message: `will remove stale Agentera skill symlink ${entry.name}`,
527
+ });
528
+ }
350
529
  }
351
530
  function walkJsonHookFiles(dir) {
352
531
  if (!pathExists(dir)) {
@@ -382,28 +561,30 @@ function planCopilotItems(items, project, commands) {
382
561
  });
383
562
  }
384
563
  }
385
- function planEnvRuntimeNoops(items, runtime, message) {
386
- if (!items.some((item) => item.runtime === runtime)) {
387
- items.push({ status: "noop", action: "configure", runtime, message });
388
- }
389
- }
390
564
  export function planRuntimeMigrationItems(ctx) {
565
+ if (!ctx.env) {
566
+ throw new Error("MigrationContext.env is required for runtime migration planning; pass sandboxMigrationEnv(home, sourceRoot) in tests or an explicit env in callers.");
567
+ }
391
568
  const home = resolvePath(ctx.home);
392
569
  const project = resolvePath(ctx.project);
393
- const env = ctx.env ?? { ...process.env, HOME: home };
570
+ const env = ctx.env;
394
571
  const sourceRoot = resolvePath(ctx.sourceRoot ?? resolveSourceRoot(env));
395
572
  const commands = resolveNpxHookCommands({ ...ctx, home, env, sourceRoot });
396
573
  const items = [];
397
- planCodexItems(items, home, commands, ctx.force);
574
+ planCodexItems(items, home, project, commands, ctx.force);
398
575
  planCursorItems(items, home, project, sourceRoot, commands);
399
576
  planOpencodeItems(items, home, sourceRoot, env, commands);
577
+ planStaleCommandCleanupItems(ctx, items);
578
+ planStaleSkillCleanupItems(ctx, items);
400
579
  planCopilotItems(items, project, commands);
401
- planEnvRuntimeNoops(items, "claude", "Claude Code plugin installs expose the app home without local config writes; use --update-packages to refresh marketplace surfaces");
402
- planEnvRuntimeNoops(items, "cursor-agent", "Cursor Agent CLI inherits workspace Cursor hooks; no separate managed install surface");
580
+ const hookRetirement = planInstalledHooksRetirementItems(ctx).filter((item) => item.status === "pending");
581
+ if (hookRetirement.length > 0 && items.some((item) => item.action === "rewire-runtime" && item.status === "pending")) {
582
+ items.push(...hookRetirement);
583
+ }
403
584
  void loadRegistry();
404
585
  return items;
405
586
  }
406
- export function applyRuntimeMigrationItem(item, commands) {
587
+ export function applyRuntimeMigrationItem(item, _commands) {
407
588
  if (item.status !== "pending") {
408
589
  return;
409
590
  }
@@ -415,7 +596,7 @@ export function applyRuntimeMigrationItem(item, commands) {
415
596
  item.message = "rewire-runtime missing target or newText";
416
597
  return;
417
598
  }
418
- fs.writeFileSync(item.target, item.newText, "utf8");
599
+ writeFileAtomic(item.target, item.newText, "utf8");
419
600
  item.status = "applied";
420
601
  item.message = "runtime config rewired to npm self-contained entrypoint";
421
602
  break;
@@ -439,9 +620,27 @@ export function applyRuntimeMigrationItem(item, commands) {
439
620
  item.message = "link-skill missing source or target";
440
621
  return;
441
622
  }
623
+ if (!pathExists(item.source)) {
624
+ item.status = "failed";
625
+ item.message = `link-skill source disappeared between plan and apply: ${item.source}`;
626
+ return;
627
+ }
442
628
  fs.mkdirSync(path.dirname(item.target), { recursive: true });
443
- if (pathExists(item.target)) {
444
- fs.rmSync(item.target, { recursive: true, force: true });
629
+ // lstat (not stat): stat follows symlinks and ENOENTs on dangling links; rmSync then fails.
630
+ let targetStat = null;
631
+ try {
632
+ targetStat = fs.lstatSync(item.target);
633
+ }
634
+ catch {
635
+ /* target absent */
636
+ }
637
+ if (targetStat) {
638
+ if (targetStat.isSymbolicLink()) {
639
+ fs.unlinkSync(item.target);
640
+ }
641
+ else {
642
+ fs.rmSync(item.target, { recursive: true, force: true });
643
+ }
445
644
  }
446
645
  fs.symlinkSync(item.source, item.target);
447
646
  item.status = "applied";
@@ -460,12 +659,65 @@ export function applyRuntimeMigrationItem(item, commands) {
460
659
  if (item.target && isFile(item.target)) {
461
660
  const configText = fs.readFileSync(item.target, "utf8");
462
661
  const next = retireCodexCopiedHookTrust(configText, item.source);
463
- fs.writeFileSync(item.target, next, "utf8");
662
+ writeFileAtomic(item.target, next, "utf8");
464
663
  }
465
664
  item.status = "applied";
466
665
  item.message = "retired Agentera-owned copied Codex hooks";
467
666
  break;
468
667
  }
668
+ case "remove-stale-command": {
669
+ if (!item.source) {
670
+ item.status = "failed";
671
+ item.message = "remove-stale-command missing source";
672
+ return;
673
+ }
674
+ if (isFile(item.source)) {
675
+ fs.rmSync(item.source, { force: true });
676
+ item.status = "applied";
677
+ item.message = `removed stale managed command ${path.basename(item.source)}`;
678
+ }
679
+ else {
680
+ item.status = "noop";
681
+ item.message = `stale command already absent at ${item.source}`;
682
+ }
683
+ break;
684
+ }
685
+ case "remove-stale-skill": {
686
+ if (!item.source) {
687
+ item.status = "failed";
688
+ item.message = "remove-stale-skill missing source";
689
+ return;
690
+ }
691
+ try {
692
+ const stat = fs.lstatSync(item.source);
693
+ if (stat.isSymbolicLink()) {
694
+ fs.unlinkSync(item.source);
695
+ item.status = "applied";
696
+ item.message = `removed stale skill symlink ${path.basename(item.source)}`;
697
+ }
698
+ else if (stat.isDirectory()) {
699
+ const entries = fs.readdirSync(item.source);
700
+ if (entries.length === 0) {
701
+ fs.rmdirSync(item.source);
702
+ item.status = "applied";
703
+ item.message = `removed empty skill directory ${path.basename(item.source)}`;
704
+ }
705
+ else {
706
+ item.status = "blocked";
707
+ item.message = `skill directory ${path.basename(item.source)} is non-empty (entries: ${entries.length}); manual review required`;
708
+ }
709
+ }
710
+ else {
711
+ item.status = "noop";
712
+ item.message = "skill path is not a symlink or directory; skipped";
713
+ }
714
+ }
715
+ catch {
716
+ item.status = "noop";
717
+ item.message = "stale skill already absent";
718
+ }
719
+ break;
720
+ }
469
721
  default:
470
722
  break;
471
723
  }
@@ -480,5 +732,6 @@ export function applyRuntimeMigrationItems(items, ctx) {
480
732
  for (const item of items) {
481
733
  applyRuntimeMigrationItem(item, commands);
482
734
  }
735
+ applyInstalledHooksRetirementItems(items, ctx);
483
736
  }
484
737
  //# sourceMappingURL=runtimeMigration.js.map