agentera 3.0.0-dev.6 → 3.0.0-dev.7

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 (439) hide show
  1. package/bundle/extract-corpus-parity.json +23 -0
  2. package/bundle/references/adapters/cursor.md +10 -9
  3. package/bundle/references/adapters/opencode.md +26 -26
  4. package/bundle/references/adapters/runtime-adapter-characterization.md +1 -1
  5. package/bundle/references/adapters/runtime-adapter-registry.yaml +16 -10
  6. package/bundle/references/adapters/runtime-feature-parity.md +2 -2
  7. package/bundle/references/analysis/benchmark.md +1 -1
  8. package/bundle/references/analysis/startup-measurement-contract.yaml +7 -7
  9. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +4 -3
  10. package/bundle/references/cli/agent-ready-state-contract.yaml +6 -6
  11. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +4 -4
  12. package/bundle/references/cli/capability-tool-classification.yaml +12 -12
  13. package/bundle/references/cli/coexistence-probe.yaml +4 -0
  14. package/bundle/references/cli/parity-expected-actual-template.md +30 -0
  15. package/bundle/references/cli/routing-execution-vocabulary.yaml +6 -6
  16. package/bundle/references/cli/routing-model.md +96 -0
  17. package/bundle/references/cli/trigger-schema-enrichment.md +136 -0
  18. package/bundle/references/cli/update-channels.yaml +16 -1
  19. package/bundle/references/cli/upgrade-repair-wording.md +17 -3
  20. package/bundle/references/cli/vocabulary-index.yaml +17 -12
  21. package/bundle/references/cli/vocabulary.md +314 -309
  22. package/bundle/registry.json +13 -13
  23. package/bundle/skills/agentera/.claude-plugin/plugin.json +13 -13
  24. package/bundle/skills/agentera/SKILL.md +99 -415
  25. package/bundle/skills/agentera/agents/audit.toml +6 -0
  26. package/bundle/skills/agentera/agents/build.toml +6 -0
  27. package/bundle/skills/agentera/agents/design.toml +6 -0
  28. package/bundle/skills/agentera/agents/{planera.toml → discuss.toml} +3 -3
  29. package/bundle/skills/agentera/agents/{resonera.toml → document.toml} +3 -3
  30. package/bundle/skills/agentera/agents/{optimera.toml → optimize.toml} +2 -2
  31. package/bundle/skills/agentera/agents/orchestrate.toml +6 -0
  32. package/bundle/skills/agentera/agents/plan.toml +6 -0
  33. package/bundle/skills/agentera/agents/profile.toml +6 -0
  34. package/bundle/skills/agentera/agents/research.toml +6 -0
  35. package/bundle/skills/agentera/agents/status.toml +6 -0
  36. package/bundle/skills/agentera/agents/vision.toml +6 -0
  37. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/artifacts.yaml +10 -10
  38. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/triggers.yaml +15 -6
  39. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/validation.yaml +9 -9
  40. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/artifacts.yaml +11 -11
  41. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/triggers.yaml +13 -3
  42. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/validation.yaml +7 -7
  43. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/artifacts.yaml +6 -6
  44. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/triggers.yaml +15 -3
  45. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/validation.yaml +5 -5
  46. package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/artifacts.yaml +6 -6
  47. package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/triggers.yaml +11 -3
  48. package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/validation.yaml +4 -4
  49. package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/artifacts.yaml +10 -10
  50. package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/triggers.yaml +14 -3
  51. package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/validation.yaml +8 -8
  52. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/artifacts.yaml +8 -8
  53. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/triggers.yaml +11 -3
  54. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/validation.yaml +7 -7
  55. package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/artifacts.yaml +10 -10
  56. package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/triggers.yaml +16 -3
  57. package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/validation.yaml +27 -27
  58. package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/artifacts.yaml +8 -8
  59. package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/exit.yaml +2 -2
  60. package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/triggers.yaml +15 -3
  61. package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/validation.yaml +3 -3
  62. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/artifacts.yaml +2 -2
  63. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +2 -1
  64. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/triggers.yaml +7 -3
  65. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/validation.yaml +2 -2
  66. package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/artifacts.yaml +5 -5
  67. package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/triggers.yaml +9 -3
  68. package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/validation.yaml +2 -2
  69. package/bundle/skills/agentera/capabilities/{hej → status}/schemas/artifacts.yaml +14 -11
  70. package/bundle/skills/agentera/capabilities/{hej → status}/schemas/triggers.yaml +10 -4
  71. package/bundle/skills/agentera/capabilities/{hej → status}/schemas/validation.yaml +5 -5
  72. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/artifacts.yaml +8 -8
  73. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/triggers.yaml +17 -3
  74. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/validation.yaml +7 -7
  75. package/bundle/skills/agentera/capability_schema_contract.yaml +178 -34
  76. package/bundle/skills/agentera/protocol.yaml +29 -29
  77. package/bundle/skills/agentera/references/contract.md +328 -319
  78. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +4 -4
  79. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +9 -9
  80. package/bundle/skills/agentera/schemas/artifacts/design.yaml +4 -4
  81. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +8 -7
  82. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +5 -5
  83. package/bundle/skills/agentera/schemas/artifacts/health.yaml +5 -5
  84. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +4 -4
  85. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +5 -5
  86. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +5 -5
  87. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +40 -35
  88. package/bundle/skills/agentera/schemas/artifacts/vision.yaml +3 -3
  89. package/dist/analytics/extractCorpus/cli.js +49 -1
  90. package/dist/analytics/extractCorpus/cli.js.map +1 -1
  91. package/dist/analytics/extractCorpus/copilotSessions.js +47 -5
  92. package/dist/analytics/extractCorpus/copilotSessions.js.map +1 -1
  93. package/dist/analytics/extractCorpus/core.js +19 -12
  94. package/dist/analytics/extractCorpus/core.js.map +1 -1
  95. package/dist/analytics/extractCorpus/corpus.js +26 -13
  96. package/dist/analytics/extractCorpus/corpus.js.map +1 -1
  97. package/dist/analytics/extractCorpus/coverageAudit.js +261 -0
  98. package/dist/analytics/extractCorpus/coverageAudit.js.map +1 -0
  99. package/dist/analytics/extractCorpus/cursorSessions.js +6 -3
  100. package/dist/analytics/extractCorpus/cursorSessions.js.map +1 -1
  101. package/dist/analytics/extractCorpus/extractCorpusParity.js +105 -0
  102. package/dist/analytics/extractCorpus/extractCorpusParity.js.map +1 -0
  103. package/dist/analytics/extractCorpus/filesystemSources.js.map +1 -1
  104. package/dist/analytics/extractCorpus/index.js +3 -0
  105. package/dist/analytics/extractCorpus/index.js.map +1 -1
  106. package/dist/analytics/extractCorpus/jsonlSessions.js.map +1 -1
  107. package/dist/analytics/extractCorpus/sqliteCaps.js +44 -0
  108. package/dist/analytics/extractCorpus/sqliteCaps.js.map +1 -0
  109. package/dist/analytics/extractCorpus/sqliteSessions.js +98 -5
  110. package/dist/analytics/extractCorpus/sqliteSessions.js.map +1 -1
  111. package/dist/analytics/usageStats.js +19 -19
  112. package/dist/analytics/usageStats.js.map +1 -1
  113. package/dist/capabilities/audit/instructions.js +6 -0
  114. package/dist/capabilities/audit/instructions.js.map +1 -0
  115. package/dist/capabilities/build/instructions.js +6 -0
  116. package/dist/capabilities/build/instructions.js.map +1 -0
  117. package/dist/capabilities/design/instructions.js +5 -0
  118. package/dist/capabilities/design/instructions.js.map +1 -0
  119. package/dist/capabilities/discuss/instructions.js +6 -0
  120. package/dist/capabilities/discuss/instructions.js.map +1 -0
  121. package/dist/capabilities/document/instructions.js +6 -0
  122. package/dist/capabilities/document/instructions.js.map +1 -0
  123. package/dist/capabilities/index.js +24 -24
  124. package/dist/capabilities/index.js.map +1 -1
  125. package/dist/capabilities/inspirera/instructions.js +1 -1
  126. package/dist/capabilities/inspirera/instructions.js.map +1 -1
  127. package/dist/capabilities/optimize/instructions.js +6 -0
  128. package/dist/capabilities/optimize/instructions.js.map +1 -0
  129. package/dist/capabilities/orchestrate/instructions.js +6 -0
  130. package/dist/capabilities/orchestrate/instructions.js.map +1 -0
  131. package/dist/capabilities/plan/instructions.js +6 -0
  132. package/dist/capabilities/plan/instructions.js.map +1 -0
  133. package/dist/capabilities/planera/instructions.js +1 -1
  134. package/dist/capabilities/planera/instructions.js.map +1 -1
  135. package/dist/capabilities/profile/instructions.js +6 -0
  136. package/dist/capabilities/profile/instructions.js.map +1 -0
  137. package/dist/capabilities/profilera/instructions.js +1 -1
  138. package/dist/capabilities/profilera/instructions.js.map +1 -1
  139. package/dist/capabilities/realisera/instructions.js +1 -1
  140. package/dist/capabilities/realisera/instructions.js.map +1 -1
  141. package/dist/capabilities/research/instructions.js +6 -0
  142. package/dist/capabilities/research/instructions.js.map +1 -0
  143. package/dist/capabilities/resonera/instructions.js +1 -1
  144. package/dist/capabilities/resonera/instructions.js.map +1 -1
  145. package/dist/capabilities/status/instructions.js +6 -0
  146. package/dist/capabilities/status/instructions.js.map +1 -0
  147. package/dist/capabilities/vision/instructions.js +6 -0
  148. package/dist/capabilities/vision/instructions.js.map +1 -0
  149. package/dist/capabilities/visionera/instructions.js +1 -1
  150. package/dist/capabilities/visionera/instructions.js.map +1 -1
  151. package/dist/capabilities/visualisera/instructions.js +3 -4
  152. package/dist/capabilities/visualisera/instructions.js.map +1 -1
  153. package/dist/cli/appContext.js +16 -17
  154. package/dist/cli/appContext.js.map +1 -1
  155. package/dist/cli/capabilityContext/benchmark.js +23 -16
  156. package/dist/cli/capabilityContext/benchmark.js.map +1 -1
  157. package/dist/cli/capabilityContext/bespoke.js +20 -9
  158. package/dist/cli/capabilityContext/bespoke.js.map +1 -1
  159. package/dist/cli/capabilityContext/build.js +177 -0
  160. package/dist/cli/capabilityContext/build.js.map +1 -0
  161. package/dist/cli/capabilityContext/closeout.js +11 -11
  162. package/dist/cli/capabilityContext/closeout.js.map +1 -1
  163. package/dist/cli/capabilityContext/contract.js +24 -22
  164. package/dist/cli/capabilityContext/contract.js.map +1 -1
  165. package/dist/cli/capabilityContext/evidence.js +35 -25
  166. package/dist/cli/capabilityContext/evidence.js.map +1 -1
  167. package/dist/cli/capabilityContext/index.js +1 -1
  168. package/dist/cli/capabilityContext/index.js.map +1 -1
  169. package/dist/cli/capabilityContext/orchestration.js +8 -8
  170. package/dist/cli/capabilityContext/orchestration.js.map +1 -1
  171. package/dist/cli/capabilityContext/planState.js +4 -4
  172. package/dist/cli/capabilityContext/planState.js.map +1 -1
  173. package/dist/cli/capabilityContext/progress.js +9 -2
  174. package/dist/cli/capabilityContext/progress.js.map +1 -1
  175. package/dist/cli/capabilityContext/realisera.js +21 -21
  176. package/dist/cli/capabilityContext/realisera.js.map +1 -1
  177. package/dist/cli/capabilityContext/shared.js +1 -1
  178. package/dist/cli/capabilityContext/shared.js.map +1 -1
  179. package/dist/cli/capabilityContext/slim.js +4 -2
  180. package/dist/cli/capabilityContext/slim.js.map +1 -1
  181. package/dist/cli/capabilityContext/startup.js +23 -18
  182. package/dist/cli/capabilityContext/startup.js.map +1 -1
  183. package/dist/cli/capabilityContext/types.js +20 -23
  184. package/dist/cli/capabilityContext/types.js.map +1 -1
  185. package/dist/cli/capabilityContext.js +1 -1
  186. package/dist/cli/capabilityContext.js.map +1 -1
  187. package/dist/cli/commands/appHome.js +23 -0
  188. package/dist/cli/commands/appHome.js.map +1 -0
  189. package/dist/cli/commands/capability.js +2 -2
  190. package/dist/cli/commands/capability.js.map +1 -1
  191. package/dist/cli/commands/compact.js.map +1 -1
  192. package/dist/cli/commands/doctor.js +9 -107
  193. package/dist/cli/commands/doctor.js.map +1 -1
  194. package/dist/cli/commands/prime/bundleStatus.js +140 -0
  195. package/dist/cli/commands/prime/bundleStatus.js.map +1 -0
  196. package/dist/cli/commands/prime/collectOrientationState.js +156 -0
  197. package/dist/cli/commands/prime/collectOrientationState.js.map +1 -0
  198. package/dist/cli/commands/prime/orientationOutput.js +210 -0
  199. package/dist/cli/commands/prime/orientationOutput.js.map +1 -0
  200. package/dist/cli/commands/prime/routeOutput.js +50 -0
  201. package/dist/cli/commands/prime/routeOutput.js.map +1 -0
  202. package/dist/cli/commands/prime/types.js +2 -0
  203. package/dist/cli/commands/prime/types.js.map +1 -0
  204. package/dist/cli/commands/prime/v1Migration.js +39 -0
  205. package/dist/cli/commands/prime/v1Migration.js.map +1 -0
  206. package/dist/cli/commands/prime.js +11 -554
  207. package/dist/cli/commands/prime.js.map +1 -1
  208. package/dist/cli/commands/query.js +4 -1
  209. package/dist/cli/commands/query.js.map +1 -1
  210. package/dist/cli/commands/report.js +17 -9
  211. package/dist/cli/commands/report.js.map +1 -1
  212. package/dist/cli/commands/schema.js +23 -18
  213. package/dist/cli/commands/schema.js.map +1 -1
  214. package/dist/cli/commands/state/decisions.js +11 -5
  215. package/dist/cli/commands/state/decisions.js.map +1 -1
  216. package/dist/cli/commands/state/docs.js +8 -4
  217. package/dist/cli/commands/state/docs.js.map +1 -1
  218. package/dist/cli/commands/state/experiments.js +1 -0
  219. package/dist/cli/commands/state/experiments.js.map +1 -1
  220. package/dist/cli/commands/state/health.js +3 -1
  221. package/dist/cli/commands/state/health.js.map +1 -1
  222. package/dist/cli/commands/state/objective.js +1 -0
  223. package/dist/cli/commands/state/objective.js.map +1 -1
  224. package/dist/cli/commands/state/plan.js +2 -1
  225. package/dist/cli/commands/state/plan.js.map +1 -1
  226. package/dist/cli/commands/state/progress.js +1 -1
  227. package/dist/cli/commands/state/shared.js.map +1 -1
  228. package/dist/cli/commands/state/todo.js +1 -1
  229. package/dist/cli/commands/state/todo.js.map +1 -1
  230. package/dist/cli/commands/validate.js +21 -85
  231. package/dist/cli/commands/validate.js.map +1 -1
  232. package/dist/cli/commands/verify.js +1 -1
  233. package/dist/cli/commands/verify.js.map +1 -1
  234. package/dist/cli/contracts/bundleStatus.js +2 -0
  235. package/dist/cli/contracts/bundleStatus.js.map +1 -0
  236. package/dist/cli/contracts/orientationState.js +2 -0
  237. package/dist/cli/contracts/orientationState.js.map +1 -0
  238. package/dist/cli/dispatch/argvParser.js +33 -0
  239. package/dist/cli/dispatch/argvParser.js.map +1 -0
  240. package/dist/cli/dispatch/check.js +19 -19
  241. package/dist/cli/dispatch/check.js.map +1 -1
  242. package/dist/cli/dispatch/commands.js +27 -0
  243. package/dist/cli/dispatch/commands.js.map +1 -0
  244. package/dist/cli/dispatch/index.js +6 -1
  245. package/dist/cli/dispatch/index.js.map +1 -1
  246. package/dist/cli/dispatch/lifecycle.js +160 -55
  247. package/dist/cli/dispatch/lifecycle.js.map +1 -1
  248. package/dist/cli/dispatch/prime.js +31 -27
  249. package/dist/cli/dispatch/prime.js.map +1 -1
  250. package/dist/cli/dispatch/state.js +11 -16
  251. package/dist/cli/dispatch/state.js.map +1 -1
  252. package/dist/cli/help.js +41 -6
  253. package/dist/cli/help.js.map +1 -1
  254. package/dist/cli/orientation/attention.js +61 -0
  255. package/dist/cli/orientation/attention.js.map +1 -0
  256. package/dist/cli/orientation/corpusCoverage.js +71 -0
  257. package/dist/cli/orientation/corpusCoverage.js.map +1 -0
  258. package/dist/cli/orientation.js +128 -77
  259. package/dist/cli/orientation.js.map +1 -1
  260. package/dist/cli/prime-blob.js +1 -1
  261. package/dist/cli/startupCompletenessContract.js +56 -0
  262. package/dist/cli/startupCompletenessContract.js.map +1 -0
  263. package/dist/cli/stateQuery.js +9 -2
  264. package/dist/cli/stateQuery.js.map +1 -1
  265. package/dist/cli/todoSeverity.js +19 -0
  266. package/dist/cli/todoSeverity.js.map +1 -0
  267. package/dist/core/envPaths.js +21 -0
  268. package/dist/core/envPaths.js.map +1 -0
  269. package/dist/core/jsonValue.js +6 -0
  270. package/dist/core/jsonValue.js.map +1 -0
  271. package/dist/core/pyjson.js +67 -2
  272. package/dist/core/pyjson.js.map +1 -1
  273. package/dist/eval/evalSkills.js +17 -12
  274. package/dist/eval/evalSkills.js.map +1 -1
  275. package/dist/eval/semanticEval.js +43 -19
  276. package/dist/eval/semanticEval.js.map +1 -1
  277. package/dist/eval/semanticFixtures.js +16 -4
  278. package/dist/eval/semanticFixtures.js.map +1 -1
  279. package/dist/hooks/compaction/apply.js +31 -6
  280. package/dist/hooks/compaction/apply.js.map +1 -1
  281. package/dist/hooks/compaction/dryRun.js +5 -3
  282. package/dist/hooks/compaction/dryRun.js.map +1 -1
  283. package/dist/hooks/compaction/index.js +2 -2
  284. package/dist/hooks/compaction/index.js.map +1 -1
  285. package/dist/hooks/compaction/parse.js +132 -3
  286. package/dist/hooks/compaction/parse.js.map +1 -1
  287. package/dist/hooks/compaction/retention.js +3 -1
  288. package/dist/hooks/compaction/retention.js.map +1 -1
  289. package/dist/hooks/compaction/status.js +7 -9
  290. package/dist/hooks/compaction/status.js.map +1 -1
  291. package/dist/hooks/compaction/todoResolved.js +137 -0
  292. package/dist/hooks/compaction/todoResolved.js.map +1 -0
  293. package/dist/hooks/cursorSessionStart.js +10 -2
  294. package/dist/hooks/cursorSessionStart.js.map +1 -1
  295. package/dist/hooks/sessionStart.js +14 -7
  296. package/dist/hooks/sessionStart.js.map +1 -1
  297. package/dist/hooks/sessionStop.js +3 -0
  298. package/dist/hooks/sessionStop.js.map +1 -1
  299. package/dist/hooks/todoLayout.js +177 -0
  300. package/dist/hooks/todoLayout.js.map +1 -0
  301. package/dist/hooks/validateArtifact/index.js +3 -1
  302. package/dist/hooks/validateArtifact/index.js.map +1 -1
  303. package/dist/hooks/validateArtifact/markdown.js +57 -6
  304. package/dist/hooks/validateArtifact/markdown.js.map +1 -1
  305. package/dist/hooks/validateArtifact/runtime.js +6 -3
  306. package/dist/hooks/validateArtifact/runtime.js.map +1 -1
  307. package/dist/hooks/validateArtifact/schema.js +15 -11
  308. package/dist/hooks/validateArtifact/schema.js.map +1 -1
  309. package/dist/hooks/validateArtifact/traversal.js +1 -0
  310. package/dist/hooks/validateArtifact/traversal.js.map +1 -1
  311. package/dist/hooks/validateArtifact/violations.js +2 -2
  312. package/dist/hooks/validateArtifact/violations.js.map +1 -1
  313. package/dist/migrate/v2HandoffManifest.js +119 -5
  314. package/dist/migrate/v2HandoffManifest.js.map +1 -1
  315. package/dist/registries/artifactRegistry.js +23 -9
  316. package/dist/registries/artifactRegistry.js.map +1 -1
  317. package/dist/registries/capabilityContract.js +144 -1
  318. package/dist/registries/capabilityContract.js.map +1 -1
  319. package/dist/registries/evaluatorHandoffContract.js +2 -2
  320. package/dist/registries/evaluatorHandoffContract.js.map +1 -1
  321. package/dist/registries/packageRegistry.js +4 -3
  322. package/dist/registries/packageRegistry.js.map +1 -1
  323. package/dist/registries/runtimeAdapterRegistry.js +5 -4
  324. package/dist/registries/runtimeAdapterRegistry.js.map +1 -1
  325. package/dist/registries/triggerLoader.js +211 -0
  326. package/dist/registries/triggerLoader.js.map +1 -0
  327. package/dist/release/releaseMetadata.js +1 -1
  328. package/dist/release/releaseMetadata.js.map +1 -1
  329. package/dist/routing/index.js +2 -0
  330. package/dist/routing/index.js.map +1 -0
  331. package/dist/routing/routeEngine.js +189 -0
  332. package/dist/routing/routeEngine.js.map +1 -0
  333. package/dist/setup/codex/configToml.js +10 -15
  334. package/dist/setup/codex/configToml.js.map +1 -1
  335. package/dist/setup/codex/constants.js +12 -12
  336. package/dist/setup/codex/constants.js.map +1 -1
  337. package/dist/setup/cursor.js +6 -4
  338. package/dist/setup/cursor.js.map +1 -1
  339. package/dist/setup/cursorSurfaces.js +67 -0
  340. package/dist/setup/cursorSurfaces.js.map +1 -0
  341. package/dist/setup/doctor/core.js +6 -6
  342. package/dist/setup/doctor/core.js.map +1 -1
  343. package/dist/setup/doctor/diagnostics.js +16 -23
  344. package/dist/setup/doctor/diagnostics.js.map +1 -1
  345. package/dist/setup/doctor/opencode.js +32 -0
  346. package/dist/setup/doctor/opencode.js.map +1 -1
  347. package/dist/setup/doctor/report.js +27 -76
  348. package/dist/setup/doctor/report.js.map +1 -1
  349. package/dist/setup/smokeChecks.js +10 -10
  350. package/dist/setup/smokeChecks.js.map +1 -1
  351. package/dist/state/installRoot.js +49 -18
  352. package/dist/state/installRoot.js.map +1 -1
  353. package/dist/state/startupAnalysis/benchmark.js +22 -18
  354. package/dist/state/startupAnalysis/benchmark.js.map +1 -1
  355. package/dist/state/startupAnalysis/contract.js +5 -1
  356. package/dist/state/startupAnalysis/contract.js.map +1 -1
  357. package/dist/state/startupAnalysis/helpers.js +26 -71
  358. package/dist/state/startupAnalysis/helpers.js.map +1 -1
  359. package/dist/state/startupAnalysis/index.js.map +1 -1
  360. package/dist/state/startupAnalysis/metrics.js +25 -18
  361. package/dist/state/startupAnalysis/metrics.js.map +1 -1
  362. package/dist/state/startupAnalysis/records.js +13 -9
  363. package/dist/state/startupAnalysis/records.js.map +1 -1
  364. package/dist/state/startupAnalysis/report.js +26 -37
  365. package/dist/state/startupAnalysis/report.js.map +1 -1
  366. package/dist/state/startupAnalysis/threshold.js +6 -6
  367. package/dist/state/startupAnalysis/threshold.js.map +1 -1
  368. package/dist/upgrade/appContentRefresh.js +342 -0
  369. package/dist/upgrade/appContentRefresh.js.map +1 -0
  370. package/dist/upgrade/appModel.js +8 -6
  371. package/dist/upgrade/appModel.js.map +1 -1
  372. package/dist/upgrade/bundleEvidence.js +34 -0
  373. package/dist/upgrade/bundleEvidence.js.map +1 -0
  374. package/dist/upgrade/channels.js +11 -4
  375. package/dist/upgrade/channels.js.map +1 -1
  376. package/dist/upgrade/cliProbe.js +22 -0
  377. package/dist/upgrade/cliProbe.js.map +1 -0
  378. package/dist/upgrade/coexistenceProbe.js +29 -5
  379. package/dist/upgrade/coexistenceProbe.js.map +1 -1
  380. package/dist/upgrade/compatibility.js +13 -4
  381. package/dist/upgrade/compatibility.js.map +1 -1
  382. package/dist/upgrade/doctor.js +130 -187
  383. package/dist/upgrade/doctor.js.map +1 -1
  384. package/dist/upgrade/doctorClassifier.js +177 -0
  385. package/dist/upgrade/doctorClassifier.js.map +1 -0
  386. package/dist/upgrade/installedHooksRetirement.js +190 -0
  387. package/dist/upgrade/installedHooksRetirement.js.map +1 -0
  388. package/dist/upgrade/legacyAgentCleanup.js +116 -0
  389. package/dist/upgrade/legacyAgentCleanup.js.map +1 -0
  390. package/dist/upgrade/migrateArtifactsV2ToV3.js +57 -31
  391. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +1 -1
  392. package/dist/upgrade/nextMajorDoctor.js +29 -9
  393. package/dist/upgrade/nextMajorDoctor.js.map +1 -1
  394. package/dist/upgrade/npxPlatformStatus.js +23 -0
  395. package/dist/upgrade/npxPlatformStatus.js.map +1 -0
  396. package/dist/upgrade/projectIntegration.js +69 -75
  397. package/dist/upgrade/projectIntegration.js.map +1 -1
  398. package/dist/upgrade/projectIntegrationDecision.js +93 -0
  399. package/dist/upgrade/projectIntegrationDecision.js.map +1 -0
  400. package/dist/upgrade/runtimeMigration.js +156 -66
  401. package/dist/upgrade/runtimeMigration.js.map +1 -1
  402. package/dist/upgrade/versionResolution.js +2 -2
  403. package/dist/upgrade/versionResolution.js.map +1 -1
  404. package/dist/validate/appHomeContract.js +1 -1
  405. package/dist/validate/appHomeContract.js.map +1 -1
  406. package/dist/validate/capability.js +124 -11
  407. package/dist/validate/capability.js.map +1 -1
  408. package/dist/validate/crossCapability.js +1 -1
  409. package/dist/validate/crossCapability.js.map +1 -1
  410. package/dist/validate/lifecycleAdapters/legacyPythonParity.js +93 -0
  411. package/dist/validate/lifecycleAdapters/legacyPythonParity.js.map +1 -0
  412. package/dist/validate/lifecycleAdapters/nodeFormChecks.js +488 -0
  413. package/dist/validate/lifecycleAdapters/nodeFormChecks.js.map +1 -0
  414. package/dist/validate/lifecycleAdapters/shared.js +198 -0
  415. package/dist/validate/lifecycleAdapters/shared.js.map +1 -0
  416. package/dist/validate/lifecycleAdapters.js +13 -723
  417. package/dist/validate/lifecycleAdapters.js.map +1 -1
  418. package/dist/validate/vocabularyAuthority.js +10 -5
  419. package/dist/validate/vocabularyAuthority.js.map +1 -1
  420. package/package.json +26 -23
  421. package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
  422. package/bundle/skills/agentera/agents/hej.toml +0 -6
  423. package/bundle/skills/agentera/agents/inspektera.toml +0 -6
  424. package/bundle/skills/agentera/agents/inspirera.toml +0 -6
  425. package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
  426. package/bundle/skills/agentera/agents/profilera.toml +0 -6
  427. package/bundle/skills/agentera/agents/realisera.toml +0 -6
  428. package/bundle/skills/agentera/agents/visionera.toml +0 -6
  429. package/bundle/skills/agentera/agents/visualisera.toml +0 -6
  430. /package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/exit.yaml +0 -0
  431. /package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +0 -0
  432. /package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/exit.yaml +0 -0
  433. /package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/exit.yaml +0 -0
  434. /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
  435. /package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/exit.yaml +0 -0
  436. /package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/exit.yaml +0 -0
  437. /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
  438. /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
  439. /package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/exit.yaml +0 -0
@@ -0,0 +1,177 @@
1
+ import { APP_MANUAL_REVIEW_NEEDED, APP_MIGRATION_NEEDED, APP_OUTDATED, APP_REPAIR_NEEDED, } from "./doctor.js";
2
+ function blockedRootRecoveryMessage(_rootSource) {
3
+ return "choose a different Agentera directory, or use --force only if you checked this directory and want Agentera to replace files there";
4
+ }
5
+ function recoverableStaleDefaultSignal(appHome, roots) {
6
+ return {
7
+ status: APP_REPAIR_NEEDED,
8
+ kind: "recoverable_stale_default",
9
+ message: "Agentera found an old app directory and can repair it without asking you to edit shell settings",
10
+ deprecatedDefaultAppHome: appHome,
11
+ managedAppRoot: roots.managedAppRoot,
12
+ };
13
+ }
14
+ function userDataOnlySignal(appHome, roots) {
15
+ return {
16
+ status: APP_REPAIR_NEEDED,
17
+ kind: "user_data_only_app_home",
18
+ message: "This Agentera directory only has your Agentera data, so Agentera can safely add fresh app files under app/",
19
+ appHome,
20
+ managedAppRoot: roots.managedAppRoot,
21
+ };
22
+ }
23
+ function classifyMissingDefault(_ctx) {
24
+ return {
25
+ rootStatus: "missing",
26
+ blocked: false,
27
+ signals: [
28
+ {
29
+ status: APP_REPAIR_NEEDED,
30
+ kind: "missing_bundle",
31
+ message: "Agentera is not installed in the normal directory yet",
32
+ },
33
+ ],
34
+ };
35
+ }
36
+ function classifyMissingExplicitOrEnvironment(ctx) {
37
+ if (ctx.recoverableStaleDefault) {
38
+ return {
39
+ rootStatus: "missing",
40
+ blocked: false,
41
+ signals: [recoverableStaleDefaultSignal(ctx.installRoot, ctx.roots)],
42
+ };
43
+ }
44
+ return {
45
+ rootStatus: "missing",
46
+ blocked: true,
47
+ signals: [
48
+ {
49
+ status: APP_MANUAL_REVIEW_NEEDED,
50
+ kind: "invalid_install_root",
51
+ message: "Agentera was told to use a directory that does not exist. " +
52
+ "Choose an existing Agentera directory, or install into the normal Agentera directory.",
53
+ },
54
+ ],
55
+ };
56
+ }
57
+ function classifyFileValuedRoot(ctx) {
58
+ return {
59
+ rootStatus: "invalid",
60
+ blocked: true,
61
+ signals: [
62
+ {
63
+ status: APP_MANUAL_REVIEW_NEEDED,
64
+ kind: "invalid_install_root",
65
+ message: `Agentera was told to use a file instead of a directory; ${blockedRootRecoveryMessage(ctx.rootSource)}`,
66
+ },
67
+ ],
68
+ };
69
+ }
70
+ function classifyInvalidBundle(ctx) {
71
+ if (ctx.recoverableStaleDefault) {
72
+ return {
73
+ rootStatus: "stale_default",
74
+ blocked: false,
75
+ signals: [recoverableStaleDefaultSignal(ctx.installRoot, ctx.roots)],
76
+ };
77
+ }
78
+ return {
79
+ rootStatus: "invalid",
80
+ blocked: true,
81
+ signals: [
82
+ {
83
+ status: APP_MANUAL_REVIEW_NEEDED,
84
+ kind: "invalid_bundle",
85
+ message: `This directory looks like a broken Agentera install; ${blockedRootRecoveryMessage(ctx.rootSource)}`,
86
+ },
87
+ ],
88
+ };
89
+ }
90
+ function classifyUnmanagedDirectory(ctx) {
91
+ if (ctx.recoverableStaleDefault) {
92
+ return {
93
+ rootStatus: "stale_default",
94
+ blocked: false,
95
+ signals: [recoverableStaleDefaultSignal(ctx.installRoot, ctx.roots)],
96
+ };
97
+ }
98
+ if (ctx.userDataOnly) {
99
+ return {
100
+ rootStatus: "user_data_only",
101
+ blocked: false,
102
+ signals: [userDataOnlySignal(ctx.installRoot, ctx.roots)],
103
+ };
104
+ }
105
+ return {
106
+ rootStatus: "unmanaged",
107
+ blocked: true,
108
+ signals: [
109
+ {
110
+ status: APP_MANUAL_REVIEW_NEEDED,
111
+ kind: "unmanaged_install_root",
112
+ message: `This directory already has files Agentera does not recognize, so Agentera will not change it automatically; ${blockedRootRecoveryMessage(ctx.rootSource)}`,
113
+ },
114
+ ],
115
+ };
116
+ }
117
+ function appendManagedStaleSignals(ctx, signals) {
118
+ const reason = ctx.classification.diagnostic.evidence.reason;
119
+ if (ctx.classification.kind !== "managed_stale") {
120
+ return;
121
+ }
122
+ if (reason === "missing_marker") {
123
+ if (ctx.recoverableStaleDefault) {
124
+ signals.push(recoverableStaleDefaultSignal(ctx.installRoot, ctx.roots));
125
+ }
126
+ signals.push({
127
+ status: APP_REPAIR_NEEDED,
128
+ kind: "missing_marker",
129
+ message: "Agentera app files need repair",
130
+ });
131
+ }
132
+ else if (reason === "version_mismatch") {
133
+ if (ctx.recoverableStaleDefault) {
134
+ signals.push(recoverableStaleDefaultSignal(ctx.installRoot, ctx.roots));
135
+ }
136
+ signals.push({
137
+ status: APP_OUTDATED,
138
+ kind: "version_mismatch",
139
+ expected: ctx.expected,
140
+ actual: ctx.markerVersion,
141
+ message: "Agentera app files are valid but need an update to the expected version",
142
+ });
143
+ }
144
+ }
145
+ function classifyManaged(ctx) {
146
+ const signals = [];
147
+ if (ctx.legacyBundleRoot) {
148
+ signals.push({
149
+ status: APP_MIGRATION_NEEDED,
150
+ kind: APP_MIGRATION_NEEDED,
151
+ message: "Agentera app files are in the old place and can be moved into app/",
152
+ legacyAppRoot: ctx.installRoot,
153
+ managedAppRoot: ctx.roots.managedAppRoot,
154
+ });
155
+ }
156
+ appendManagedStaleSignals(ctx, signals);
157
+ return {
158
+ rootStatus: "managed",
159
+ blocked: false,
160
+ signals,
161
+ };
162
+ }
163
+ const ROOT_CLASSIFIERS = {
164
+ missing_default: classifyMissingDefault,
165
+ missing_explicit_or_environment: classifyMissingExplicitOrEnvironment,
166
+ file_valued_root: classifyFileValuedRoot,
167
+ invalid_bundle: classifyInvalidBundle,
168
+ unmanaged_directory: classifyUnmanagedDirectory,
169
+ managed_fresh: classifyManaged,
170
+ managed_stale: classifyManaged,
171
+ };
172
+ export function classifyInstallRootStatus(ctx) {
173
+ const kind = ctx.classification.kind;
174
+ const classifier = ROOT_CLASSIFIERS[kind] ?? classifyManaged;
175
+ return classifier(ctx);
176
+ }
177
+ //# sourceMappingURL=doctorClassifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctorClassifier.js","sourceRoot":"","sources":["../../src/upgrade/doctorClassifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,190 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { isFile, pathExists, resolvePath } from "../core/paths.js";
4
+ import { doctorRoots } from "./appModel.js";
5
+ export const INSTALLED_HOOKS_SURFACE_LABEL = "hooks/";
6
+ export const RETIRE_INSTALLED_HOOKS_ACTION = "retire-installed-hooks";
7
+ const V2_HOOK_INVOCATION_PATTERNS = [
8
+ /\buv run\b[^"'\n]*hooks\/[^"'\n]*\.py/,
9
+ /\$\{AGENTERA_HOME\}\/hooks\/[^"'\n]*\.py/,
10
+ /\$\{AGENTERA_HOME\}\/app\/hooks\/[^"'\n]*\.py/,
11
+ /\$\{PLUGIN_ROOT\}\/hooks\/[^"'\n]*\.py/,
12
+ ];
13
+ const SKIP_HOOK_SCAN_PARTS = new Set([".agentera", "sessions", "benchmarks", "intermediate", "backup"]);
14
+ function hooksDirHasPythonFiles(hooksDir) {
15
+ if (!pathExists(hooksDir) || !fs.statSync(hooksDir).isDirectory()) {
16
+ return false;
17
+ }
18
+ return fs.readdirSync(hooksDir).some((name) => name.endsWith(".py"));
19
+ }
20
+ function listInstalledHookDirs(appHome) {
21
+ const resolved = resolvePath(appHome);
22
+ const roots = doctorRoots(resolved);
23
+ const candidates = [
24
+ path.join(resolved, "hooks"),
25
+ path.join(roots.managedAppRoot, "hooks"),
26
+ path.join(roots.activeBundleRoot, "hooks"),
27
+ ];
28
+ const seen = new Set();
29
+ const out = [];
30
+ for (const hooksDir of candidates) {
31
+ const normalized = path.resolve(hooksDir);
32
+ if (seen.has(normalized) || !hooksDirHasPythonFiles(hooksDir)) {
33
+ continue;
34
+ }
35
+ seen.add(normalized);
36
+ out.push(hooksDir);
37
+ }
38
+ return out;
39
+ }
40
+ export function installedBundleUsesV2PythonHooks(appHome) {
41
+ return listInstalledHookDirs(appHome).length > 0;
42
+ }
43
+ export function textReferencesV2InstalledHooks(text) {
44
+ return V2_HOOK_INVOCATION_PATTERNS.some((pattern) => pattern.test(text));
45
+ }
46
+ function shouldScanInstalledHookFile(name) {
47
+ return (name.endsWith(".json") ||
48
+ name.endsWith(".toml") ||
49
+ name.endsWith(".js") ||
50
+ name.endsWith(".md") ||
51
+ name.endsWith(".yaml") ||
52
+ name.endsWith(".yml"));
53
+ }
54
+ /** Scan installed hook manifests for shipped v2 hook command invocations. */
55
+ export function scanInstalledBundleForV2HookInvocations(appHome) {
56
+ const resolved = resolvePath(appHome);
57
+ const hits = [];
58
+ for (const hooksDir of listInstalledHookDirs(resolved)) {
59
+ const walk = (current) => {
60
+ for (const entry of fs.readdirSync(current, { withFileTypes: true })) {
61
+ const full = path.join(current, entry.name);
62
+ if (entry.isDirectory()) {
63
+ walk(full);
64
+ continue;
65
+ }
66
+ if (!shouldScanInstalledHookFile(entry.name)) {
67
+ continue;
68
+ }
69
+ const rel = path.relative(resolved, full);
70
+ const text = fs.readFileSync(full, "utf8");
71
+ if (textReferencesV2InstalledHooks(text)) {
72
+ hits.push(rel);
73
+ }
74
+ }
75
+ };
76
+ walk(hooksDir);
77
+ }
78
+ return hits;
79
+ }
80
+ export function detectStaleInstalledHooksSurface(appHome) {
81
+ return (installedBundleUsesV2PythonHooks(appHome) ||
82
+ scanInstalledBundleForV2HookInvocations(appHome).length > 0);
83
+ }
84
+ export function retireInstalledV2Hooks(appHome) {
85
+ const removed = [];
86
+ for (const hooksDir of listInstalledHookDirs(appHome)) {
87
+ fs.rmSync(hooksDir, { recursive: true, force: true });
88
+ removed.push(path.relative(resolvePath(appHome), hooksDir) || "hooks");
89
+ }
90
+ return removed;
91
+ }
92
+ function retireItemStatus(stale) {
93
+ return stale ? "pending" : "noop";
94
+ }
95
+ export function planInstalledHooksRetirementItems(ctx) {
96
+ const appHome = resolvePath(ctx.appHome);
97
+ const hookDirs = listInstalledHookDirs(appHome);
98
+ const invocationHits = scanInstalledBundleForV2HookInvocations(appHome);
99
+ const stale = hookDirs.length > 0 || invocationHits.length > 0;
100
+ if (!stale) {
101
+ return [
102
+ {
103
+ status: "noop",
104
+ action: RETIRE_INSTALLED_HOOKS_ACTION,
105
+ runtime: "installed-app",
106
+ source: appHome,
107
+ message: "installed app home has no v2 Python hooks surface",
108
+ },
109
+ ];
110
+ }
111
+ const items = [];
112
+ for (const hooksDir of hookDirs) {
113
+ items.push({
114
+ status: "pending",
115
+ action: RETIRE_INSTALLED_HOOKS_ACTION,
116
+ runtime: "installed-app",
117
+ source: hooksDir,
118
+ target: appHome,
119
+ message: `will retire v2 Python hooks at ${path.relative(appHome, hooksDir) || "hooks"}`,
120
+ removedPreview: fs.readdirSync(hooksDir).filter((name) => name.endsWith(".py")),
121
+ });
122
+ }
123
+ if (invocationHits.length > 0) {
124
+ items.push({
125
+ status: retireItemStatus(true),
126
+ action: RETIRE_INSTALLED_HOOKS_ACTION,
127
+ runtime: "installed-app",
128
+ source: appHome,
129
+ message: `will remove installed bundle files still invoking uv run hooks/*.py (${invocationHits.join(", ")})`,
130
+ removedPreview: invocationHits,
131
+ });
132
+ }
133
+ return items;
134
+ }
135
+ export function applyInstalledHooksRetirementItems(items, ctx) {
136
+ const pending = items.filter((item) => item.action === RETIRE_INSTALLED_HOOKS_ACTION && item.status === "pending");
137
+ if (pending.length === 0) {
138
+ return;
139
+ }
140
+ try {
141
+ const removed = retireInstalledV2Hooks(ctx.appHome);
142
+ for (const item of pending) {
143
+ item.status = "applied";
144
+ item.message =
145
+ removed.length > 0
146
+ ? `retired v2 Python hooks (${removed.join(", ")})`
147
+ : "retired v2 Python hook invocations from installed bundle";
148
+ }
149
+ }
150
+ catch (exc) {
151
+ for (const item of pending) {
152
+ item.status = "failed";
153
+ item.message = `${RETIRE_INSTALLED_HOOKS_ACTION} failed: ${exc.message}`;
154
+ }
155
+ }
156
+ }
157
+ export function installedHookPathsAfterMigration(appHome) {
158
+ const resolved = resolvePath(appHome);
159
+ const out = [];
160
+ const walk = (current) => {
161
+ if (!pathExists(current)) {
162
+ return;
163
+ }
164
+ for (const entry of fs.readdirSync(current, { withFileTypes: true })) {
165
+ if (SKIP_HOOK_SCAN_PARTS.has(entry.name)) {
166
+ continue;
167
+ }
168
+ const full = path.join(current, entry.name);
169
+ if (entry.isDirectory()) {
170
+ if (entry.name === "hooks") {
171
+ for (const hookEntry of fs.readdirSync(full)) {
172
+ if (hookEntry.endsWith(".py")) {
173
+ out.push(path.relative(resolved, path.join(full, hookEntry)));
174
+ }
175
+ }
176
+ }
177
+ walk(full);
178
+ }
179
+ }
180
+ };
181
+ walk(resolved);
182
+ return out;
183
+ }
184
+ export function installedBundleHasV2HookInvocationText(appHome) {
185
+ return scanInstalledBundleForV2HookInvocations(appHome).length > 0;
186
+ }
187
+ export function isV2HookScript(filePath) {
188
+ return isFile(filePath) && filePath.endsWith(".py") && filePath.includes(`${path.sep}hooks${path.sep}`);
189
+ }
190
+ //# sourceMappingURL=installedHooksRetirement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installedHooksRetirement.js","sourceRoot":"","sources":["../../src/upgrade/installedHooksRetirement.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { isFile, pathExists, resolvePath } from "../core/paths.js";
4
+ import { opencodeConfigDir } from "../setup/opencode.js";
5
+ export const REMOVE_LEGACY_AGENT_ACTION = "remove-legacy-agent";
6
+ /** Closed set of v2 Swedish-verb agent files left orphaned after v3 single-agent copy (#20). */
7
+ export const V2_SWEDISH_VERB_AGENT_FILES = [
8
+ "dokumentera.md",
9
+ "hej.md",
10
+ "inspektera.md",
11
+ "inspirera.md",
12
+ "optimera.md",
13
+ "orkestrera.md",
14
+ "planera.md",
15
+ "profilera.md",
16
+ "realisera.md",
17
+ "resonera.md",
18
+ "visionera.md",
19
+ "visualisera.md",
20
+ ];
21
+ const V2_SWEDISH_VERB_AGENT_SET = new Set(V2_SWEDISH_VERB_AGENT_FILES);
22
+ export function isV2SwedishVerbAgentFile(name) {
23
+ return V2_SWEDISH_VERB_AGENT_SET.has(name);
24
+ }
25
+ export function legacyAgentScanTargets(ctx) {
26
+ const project = resolvePath(ctx.project);
27
+ const home = resolvePath(ctx.home);
28
+ const appHome = resolvePath(ctx.appHome);
29
+ const env = ctx.env ?? process.env;
30
+ const targets = [];
31
+ const seen = new Set();
32
+ const push = (runtime, agentsDir) => {
33
+ const normalized = path.resolve(agentsDir);
34
+ if (seen.has(normalized)) {
35
+ return;
36
+ }
37
+ seen.add(normalized);
38
+ targets.push({ runtime, agentsDir: normalized });
39
+ };
40
+ push("cursor", path.join(project, ".cursor", "agents"));
41
+ push("cursor", path.join(home, ".cursor", "agents"));
42
+ if (appHome !== project && appHome !== home) {
43
+ push("cursor", path.join(appHome, ".cursor", "agents"));
44
+ }
45
+ push("opencode", path.join(opencodeConfigDir(home, env), "agents"));
46
+ return targets;
47
+ }
48
+ export function scanLegacySwedishVerbAgentPaths(agentsDir) {
49
+ if (!pathExists(agentsDir) || !fs.statSync(agentsDir).isDirectory()) {
50
+ return [];
51
+ }
52
+ const hits = [];
53
+ for (const name of fs.readdirSync(agentsDir)) {
54
+ if (!isV2SwedishVerbAgentFile(name)) {
55
+ continue;
56
+ }
57
+ const filePath = path.join(agentsDir, name);
58
+ if (isFile(filePath)) {
59
+ hits.push(filePath);
60
+ }
61
+ }
62
+ return hits.sort();
63
+ }
64
+ /** Scan a tree for reintroduced Swedish-verb agents (v1LegacyCruft-style guard). */
65
+ export function scanLegacySwedishVerbAgentViolations(root) {
66
+ const resolved = resolvePath(root);
67
+ const violations = [];
68
+ const agentDirs = [
69
+ path.join(resolved, ".cursor", "agents"),
70
+ path.join(resolved, ".opencode", "agents"),
71
+ ];
72
+ for (const agentsDir of agentDirs) {
73
+ for (const filePath of scanLegacySwedishVerbAgentPaths(agentsDir)) {
74
+ violations.push(path.relative(resolved, filePath));
75
+ }
76
+ }
77
+ return violations.sort();
78
+ }
79
+ export function planLegacyAgentCleanupItems(ctx) {
80
+ const items = [];
81
+ for (const { runtime, agentsDir } of legacyAgentScanTargets(ctx)) {
82
+ for (const source of scanLegacySwedishVerbAgentPaths(agentsDir)) {
83
+ items.push({
84
+ status: "pending",
85
+ action: REMOVE_LEGACY_AGENT_ACTION,
86
+ runtime,
87
+ source,
88
+ message: `will remove orphaned v2 Swedish-verb agent ${path.basename(source)}`,
89
+ });
90
+ }
91
+ }
92
+ return items;
93
+ }
94
+ export function applyLegacyAgentCleanupItems(items) {
95
+ for (const item of items) {
96
+ if (item.status !== "pending" || item.action !== REMOVE_LEGACY_AGENT_ACTION || !item.source) {
97
+ continue;
98
+ }
99
+ const basename = path.basename(item.source);
100
+ try {
101
+ if (!isV2SwedishVerbAgentFile(basename) || !isFile(item.source)) {
102
+ item.status = "noop";
103
+ item.message = `legacy agent already absent at ${item.source}`;
104
+ continue;
105
+ }
106
+ fs.rmSync(item.source, { force: true });
107
+ item.status = "applied";
108
+ item.message = `removed orphaned v2 Swedish-verb agent ${basename}`;
109
+ }
110
+ catch (exc) {
111
+ item.status = "failed";
112
+ item.message = `${REMOVE_LEGACY_AGENT_ACTION} failed: ${exc.message}`;
113
+ }
114
+ }
115
+ }
116
+ //# sourceMappingURL=legacyAgentCleanup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacyAgentCleanup.js","sourceRoot":"","sources":["../../src/upgrade/legacyAgentCleanup.ts"],"names":[],"mappings":"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"}
@@ -5,11 +5,13 @@ import { BUNDLE_MARKER } from "../state/installRoot.js";
5
5
  import { doctorRoots } from "./appModel.js";
6
6
  import { AGENTERA_USER_STATE_NAMES, } from "./doctor.js";
7
7
  import { applyV1ArtifactsPhase, planV1ArtifactsPhase, } from "./migrateArtifactsV1ToV2.js";
8
- import { appHomeHasUnrecognizedEntriesWithPreflight, resolveMigrationUserStatePreflight, } from "../migrate/v2HandoffManifest.js";
8
+ import { appHomeHasUnrecognizedEntriesWithPreflight, handoffCatalogMessage, resolveMigrationUserStatePreflight, } from "../migrate/v2HandoffManifest.js";
9
+ import { applyAppContentRefreshItems, planAppContentRefreshItems, } from "./appContentRefresh.js";
10
+ import { applyLegacyAgentCleanupItems, planLegacyAgentCleanupItems, } from "./legacyAgentCleanup.js";
9
11
  import { applyRuntimeMigrationItems, planRuntimeMigrationItems, resolveNpxHookCommands, rewireRuntimeText, } from "./runtimeMigration.js";
10
12
  /**
11
13
  * v2→v3 migration phases: artifacts (noop for YAML), runtime rewire, cleanup.
12
- * v1 Markdown→YAML migration stays separate (prime.ts V1_ARTIFACT_PAIRS).
14
+ * v1 Markdown→YAML migration uses detectV1ArtifactPairs (shared with prime).
13
15
  */
14
16
  export const MIGRATION_STATUSES = ["pending", "applied", "noop", "blocked", "failed", "skipped"];
15
17
  export const V1_ARTIFACT_PAIRS = [
@@ -140,10 +142,15 @@ export function applyRuntimeRewirePhase(phase, ctx) {
140
142
  phase.status = updated.status;
141
143
  phase.summary = updated.summary;
142
144
  }
143
- function hasManagedBundleEvidence(managedAppRoot) {
144
- return (isFile(path.join(managedAppRoot, BUNDLE_MARKER)) ||
145
- (isFile(path.join(managedAppRoot, "scripts", "agentera")) &&
146
- isFile(path.join(managedAppRoot, "skills", "agentera", "SKILL.md"))));
145
+ /** Whether `app/` under app-home still carries a managed bundle worth removing during v2→v3 cleanup. */
146
+ export function hasManagedBundleEvidence(managedAppRoot) {
147
+ // v3 npm-managed installs write BUNDLE_MARKER at pack/refresh time.
148
+ if (isFile(path.join(managedAppRoot, BUNDLE_MARKER))) {
149
+ return true;
150
+ }
151
+ // Legacy v2 Python-managed installs lacked the marker but always shipped this pair.
152
+ return (isFile(path.join(managedAppRoot, "scripts", "agentera")) &&
153
+ isFile(path.join(managedAppRoot, "skills", "agentera", "SKILL.md")));
147
154
  }
148
155
  function listManagedBundlePreview(managedAppRoot, limit = 20) {
149
156
  if (!pathExists(managedAppRoot)) {
@@ -173,35 +180,50 @@ export function planCleanupPhase(ctx) {
173
180
  const appHome = resolvePath(ctx.appHome);
174
181
  const roots = doctorRoots(appHome);
175
182
  const managedAppRoot = roots.managedAppRoot;
176
- const preflight = resolveMigrationUserStatePreflight(appHome);
183
+ const preflight = resolveMigrationUserStatePreflight(appHome, {
184
+ home: ctx.home,
185
+ env: ctx.env,
186
+ });
177
187
  const preserved = preflight.preservedAbsolutePaths;
178
188
  const unknown = appHomeHasUnrecognizedEntriesWithPreflight(appHome, preflight);
189
+ const items = [
190
+ ...preflight.handoffCatalog.map((entry) => ({
191
+ status: "noop",
192
+ action: "catalog-handoff",
193
+ source: entry.root,
194
+ preserved: entry.entries,
195
+ message: handoffCatalogMessage(entry),
196
+ })),
197
+ ...planAppContentRefreshItems(ctx),
198
+ ...planLegacyAgentCleanupItems(ctx),
199
+ ];
179
200
  if (unknown.length > 0 && !ctx.force) {
180
- return summarizePhase("cleanup", [
181
- {
182
- status: "blocked",
183
- action: "remove-managed-app-home",
184
- source: appHome,
185
- preserved,
186
- message: "app home contains unrecognized entries outside preserved user state; cleanup blocked without --force",
187
- },
188
- ]);
201
+ items.push({
202
+ status: "blocked",
203
+ action: "remove-managed-app-home",
204
+ source: appHome,
205
+ preserved,
206
+ message: "app home contains unrecognized entries outside preserved user state; cleanup blocked without --force",
207
+ });
208
+ return summarizePhase("cleanup", items);
189
209
  }
190
210
  if (!hasManagedBundleEvidence(managedAppRoot)) {
191
- return summarizePhase("cleanup", [], "no managed Python app-home bundle to remove");
211
+ if (items.length === 0) {
212
+ return summarizePhase("cleanup", [], "no managed Python app-home bundle to remove");
213
+ }
214
+ return summarizePhase("cleanup", items);
192
215
  }
193
216
  const removedPreview = listManagedBundlePreview(managedAppRoot);
194
- return summarizePhase("cleanup", [
195
- {
196
- status: "pending",
197
- action: "remove-managed-app-home",
198
- source: managedAppRoot,
199
- target: appHome,
200
- preserved,
201
- removedPreview,
202
- message: "will remove managed Python app-home bundle under app/ while preserving user state at app-home root",
203
- },
204
- ]);
217
+ items.push({
218
+ status: "pending",
219
+ action: "remove-managed-app-home",
220
+ source: managedAppRoot,
221
+ target: appHome,
222
+ preserved,
223
+ removedPreview,
224
+ message: "will remove managed Python app-home bundle under app/ while preserving user state at app-home root",
225
+ });
226
+ return summarizePhase("cleanup", items);
205
227
  }
206
228
  function removeDirectoryRecursive(dir) {
207
229
  if (!pathExists(dir)) {
@@ -209,9 +231,13 @@ function removeDirectoryRecursive(dir) {
209
231
  }
210
232
  fs.rmSync(dir, { recursive: true, force: true });
211
233
  }
212
- export function applyCleanupPhase(phase) {
234
+ export function applyCleanupPhase(phase, ctx) {
235
+ if (ctx) {
236
+ applyAppContentRefreshItems(phase.items, ctx);
237
+ }
238
+ applyLegacyAgentCleanupItems(phase.items);
213
239
  for (const item of phase.items) {
214
- if (item.status !== "pending" || !item.source) {
240
+ if (item.status !== "pending" || item.action !== "remove-managed-app-home" || !item.source) {
215
241
  continue;
216
242
  }
217
243
  try {
@@ -248,7 +274,7 @@ export function applyMigrationPhases(ctx, preview, only = ["artifacts", "runtime
248
274
  applyRuntimeRewirePhase(result.runtime, ctx);
249
275
  }
250
276
  if (only.includes("cleanup")) {
251
- applyCleanupPhase(result.cleanup);
277
+ applyCleanupPhase(result.cleanup, ctx);
252
278
  }
253
279
  return result;
254
280
  }