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
@@ -1,729 +1,117 @@
1
1
  import fs from "node:fs";
2
2
  import path from "node:path";
3
- import { spawnSync } from "node:child_process";
4
3
  import { resolvePath } from "../core/paths.js";
5
- import { resolveSourceRoot } from "../core/sourceRoot.js";
6
- import { loadRegistry as loadPackageRegistry, } from "../registries/packageRegistry.js";
7
- import { RegistryError, loadRegistry as loadRuntimeRegistry, } from "../registries/runtimeAdapterRegistry.js";
8
- const REGISTRY_CONTRACT_ERROR_PREFIX = "registry contract error";
9
- const CODEX_PROFILERA_TERMS = [
10
- "allow_implicit_invocation: false",
11
- "codex_session_corpus",
12
- "bounded Codex history, session, or config corpus data",
13
- ];
14
- const CODEX_AGENTERA_METADATA_TERMS = ["$agentera", "bounded Codex session corpus data", "AGENTERA_HOME"];
15
- const CODEX_PROFILERA_STATUS_VALUES = ["ok", "degraded"];
16
- const UV_SCRIPT_SHEBANG = "#!/usr/bin/env -S uv run --script";
17
- const UV_INSTALL_GUIDANCE = "uv is required to run packaged Agentera Python scripts; install it from " +
18
- "https://docs.astral.sh/uv/getting-started/installation/ and then rerun the check";
19
- const HARD_GATE_DOC_REQUIREMENTS = {
20
- "references/adapters/runtime-feature-parity.md": ["opencode", "copilot", "cursor"],
21
- "references/adapters/opencode.md": ["opencode"],
22
- };
23
- function rootDefault() {
24
- return resolveSourceRoot();
25
- }
26
- function packageRegistryPath(root) {
27
- return path.join(root, "references/adapters/package-registry.yaml");
28
- }
29
- function isMapping(v) {
30
- return v !== null && typeof v === "object" && !Array.isArray(v);
31
- }
32
- function loadJson(p) {
33
- const data = JSON.parse(fs.readFileSync(p, "utf8"));
34
- if (!isMapping(data)) {
35
- throw new Error(`${p}: expected JSON object`);
36
- }
37
- return data;
38
- }
39
- function registryContractError(exc) {
40
- return `${REGISTRY_CONTRACT_ERROR_PREFIX}: ${exc.message}`;
41
- }
42
- function runtimeView(registry, runtime) {
43
- return registry.consumerView("lifecycle", runtime);
44
- }
45
- function packageManifest(root) {
46
- const registryPath = packageRegistryPath(root);
47
- if (fs.existsSync(registryPath) && fs.statSync(registryPath).isFile()) {
48
- return loadPackageRegistry(registryPath, root);
49
- }
50
- return loadPackageRegistry(packageRegistryPath(rootDefault()), rootDefault());
51
- }
52
- function supportedEvents(registry, runtime) {
53
- return new Set(runtimeView(registry, runtime).lifecycle_events.supported_events);
54
- }
55
- function unsupportedEvents(registry, runtime) {
56
- return new Set(runtimeView(registry, runtime).lifecycle_events.unsupported_events);
57
- }
58
- function opencodeEventPayloadTypes(registry) {
59
- const eventStatus = runtimeView(registry, "opencode").lifecycle_events.event_status;
60
- const out = new Set();
61
- for (const [event, status] of Object.entries(eventStatus)) {
62
- if (status === "supported_via_event")
63
- out.add(event);
64
- }
65
- return out;
66
- }
67
- function validationEvents(registry, runtime) {
68
- return runtimeView(registry, runtime).artifact_validation.validation_events;
69
- }
70
- function claimTerms(text, candidates) {
71
- const normalized = text.toLowerCase();
72
- return candidates.filter((term) => normalized.includes(term.toLowerCase()));
73
- }
74
- function copilotProfileraTerms(registry) {
75
- const view = runtimeView(registry, "copilot");
76
- const text = [...view.lifecycle_events.limitations, ...view.documentation_claims.parity_claims].join(" ");
77
- return claimTerms(text, ["profilera", "bounded", "corpus", "metadata", "missing source families"]);
78
- }
79
- function codexLifecycleStatusValues(registry) {
80
- const eventStatus = runtimeView(registry, "codex").lifecycle_events.event_status;
81
- const statuses = ["stable"];
82
- for (const event of runtimeView(registry, "codex").lifecycle_events.supported_events) {
83
- const status = eventStatus[event];
84
- if (typeof status === "string" && status !== "unsupported" && !statuses.includes(status)) {
85
- statuses.push(status);
86
- }
87
- }
88
- return statuses;
89
- }
90
- function codexLimitationTerms(registry) {
91
- const view = runtimeView(registry, "codex");
92
- const text = [...view.lifecycle_events.limitations, ...view.artifact_validation.hard_gate_claims].join(" ");
93
- return claimTerms(text, ["codex_hooks", "apply_patch", "openai/codex#18391"]);
94
- }
95
- function hardGateDocTerms(registry, runtime, relativePath) {
96
- const view = runtimeView(registry, runtime);
97
- const artifact = view.artifact_validation;
98
- const primary = relativePath === "references/adapters/opencode.md" ? view.documentation_claims.parity_claims : artifact.hard_gate_claims;
99
- return [...primary, ...artifact.payload_reconstruction_limitations];
100
- }
101
- function validateCommandHandler(errors, runtime, event, index, handler) {
102
- const prefix = `${runtime}.${event}[${index}]`;
103
- if (!isMapping(handler)) {
104
- errors.push(`${prefix}: handler must be an object`);
105
- return;
106
- }
107
- if (handler.type !== "command") {
108
- errors.push(`${prefix}: handler type must be 'command'`);
109
- }
110
- if ("command" in handler) {
111
- errors.push(`${prefix}: use bash/powershell, not Claude-style command`);
112
- }
113
- if (!handler.bash && !handler.powershell) {
114
- errors.push(`${prefix}: handler must define bash or powershell`);
115
- }
116
- const timeout = handler.timeoutSec;
117
- if (timeout !== null && timeout !== undefined && !(typeof timeout === "number" && Number.isInteger(timeout))) {
118
- errors.push(`${prefix}: timeoutSec must be an integer`);
119
- }
120
- }
121
- function handlerCommandText(handler) {
122
- if (!isMapping(handler))
123
- return "";
124
- return [handler.bash, handler.powershell].filter((p) => typeof p === "string").join(" ");
125
- }
126
- function stringPaths(value) {
127
- if (typeof value === "string")
128
- return [value];
129
- if (Array.isArray(value) && value.every((p) => typeof p === "string"))
130
- return value;
131
- return [];
132
- }
133
- function resolveInside(root, p) {
134
- const resolved = resolvePath(path.join(root, p));
135
- const rel = path.relative(resolvePath(root), resolved);
136
- if (rel !== "" && (rel.startsWith("..") || path.isAbsolute(rel)))
137
- return null;
138
- return resolved;
139
- }
140
- function resolveFromManifest(root, manifest, p) {
141
- const resolved = resolvePath(path.join(path.dirname(manifest), p));
142
- const rel = path.relative(resolvePath(root), resolved);
143
- if (rel !== "" && (rel.startsWith("..") || path.isAbsolute(rel)))
144
- return null;
145
- return resolved;
146
- }
147
- function isFile(p) {
148
- try {
149
- return fs.statSync(p).isFile();
150
- }
151
- catch {
152
- return false;
153
- }
154
- }
155
- function isDir(p) {
156
- try {
157
- return fs.statSync(p).isDirectory();
158
- }
159
- catch {
160
- return false;
161
- }
162
- }
163
- function isPackagedPythonScript(p) {
164
- if (!isFile(p))
165
- return false;
166
- const suffix = path.extname(p);
167
- if (suffix === ".py")
168
- return true;
169
- if (suffix)
170
- return false;
171
- const firstLine = fs.readFileSync(p, "utf8").split(/\r\n|\r|\n/)[0] ?? "";
172
- return Boolean(firstLine) && (firstLine.includes("python") || firstLine.includes("uv run --script"));
173
- }
174
- function packagedPythonScripts(root) {
175
- const paths = [];
176
- for (const directory of ["scripts", "hooks"]) {
177
- const scriptRoot = path.join(root, directory);
178
- if (!isDir(scriptRoot))
179
- continue;
180
- for (const name of fs.readdirSync(scriptRoot)) {
181
- const p = path.join(scriptRoot, name);
182
- if (isPackagedPythonScript(p))
183
- paths.push(p);
184
- }
185
- }
186
- return paths.sort();
187
- }
188
- function extractInlineScriptMetadata(text) {
189
- const lines = text.split(/\r\n|\r|\n/);
190
- const start = lines.indexOf("# /// script");
191
- if (start === -1)
192
- return null;
193
- for (let index = start + 1; index < lines.length; index++) {
194
- if (lines[index] === "# ///") {
195
- return lines.slice(start + 1, index);
196
- }
197
- }
198
- return null;
199
- }
200
- function metadataDeclaresRequiresPython(metadata) {
201
- return metadata.some((line) => line.trim().startsWith("# requires-python = "));
202
- }
203
- function metadataDeclaresDependencies(metadata) {
204
- return metadata.some((line) => line.trim().startsWith("# dependencies = ["));
205
- }
206
- export function validatePackagedPythonScripts(root) {
4
+ import { RegistryError, RUNTIME_ADAPTER_CONSUMERS, loadRegistry as loadRuntimeRegistry, } from "../registries/runtimeAdapterRegistry.js";
5
+ import { loadLifecycleAuthority, validateLifecycleAuthorityRoot, } from "../runtime/lifecycleAuthority.js";
6
+ import { loadRuntimeLifecycleAdapterContract, validateRuntimeLifecycleAdapterContractRoot, } from "../runtime/lifecycleAdapterContract.js";
7
+ import { validateRetiredRuntimeCleanupContractRoot } from "../runtime/retiredRuntimeCleanup.js";
8
+ import { parseSemverCore } from "../release/releaseMetadata.js";
9
+ import { legacyPythonParityEnabled, runLegacyPythonParityChecks, } from "./lifecycleAdapters/legacyPythonParity.js";
10
+ import { validateCodex, validateCodexProfileMetadata, validateCopilot, validateCopilotHooks, validateCursor, validateCursorHooks, validateHardGateDocs, validateOpencode, validateSuiteBundleSurface, } from "./lifecycleAdapters/nodeFormChecks.js";
11
+ import { loadJson, packageManifest, registryContractError, rootDefault } from "./lifecycleAdapters/shared.js";
12
+ /**
13
+ * Validate runtime lifecycle hook adapter metadata (node-form default path).
14
+ * Legacy packaged-Python-script and uv-binary probes run only when the maintainer
15
+ * flag (`--legacy-python-parity` or `AGENTERA_LEGACY_PYTHON_PARITY`) is set.
16
+ */
17
+ export { validateCodex, validateCodexProfileMetadata, validateCopilot, validateCopilotHooks, validateCursor, validateCursorHooks, validateHardGateDocs, validateOpencode, validateSuiteBundleSurface, } from "./lifecycleAdapters/nodeFormChecks.js";
18
+ export { LEGACY_PYTHON_PARITY_ENV, LEGACY_PYTHON_PARITY_FLAG, legacyPythonParityEnabled, validatePackagedPythonScripts, validateUvRuntime, } from "./lifecycleAdapters/legacyPythonParity.js";
19
+ function sameMembers(left, right) {
20
+ return JSON.stringify([...left].sort()) === JSON.stringify([...right].sort());
21
+ }
22
+ export function validateRuntimeIdParity(activeIds, adapterIds, packageRuntimeIds) {
207
23
  const errors = [];
208
- for (const p of packagedPythonScripts(root)) {
209
- const relative = path.relative(root, p);
210
- const text = fs.readFileSync(p, "utf8");
211
- const lines = text.split(/\r\n|\r|\n/);
212
- const firstLine = lines.length > 0 ? lines[0] : "";
213
- if (firstLine !== UV_SCRIPT_SHEBANG) {
214
- errors.push(`${relative}: packaged Python script must use uv script shebang`);
215
- }
216
- const metadata = extractInlineScriptMetadata(text);
217
- if (metadata === null) {
218
- errors.push(`${relative}: packaged Python script must declare inline script metadata`);
219
- continue;
220
- }
221
- if (!metadataDeclaresRequiresPython(metadata)) {
222
- errors.push(`${relative}: packaged Python script must declare requires-python`);
223
- }
224
- if (!metadataDeclaresDependencies(metadata)) {
225
- errors.push(`${relative}: packaged Python script must declare dependencies`);
226
- }
227
- }
228
- return errors;
229
- }
230
- export function validateUvRuntime() {
231
- const result = spawnSync(process.platform === "win32" ? "where" : "which", ["uv"], { encoding: "utf8" });
232
- if (result.status !== 0)
233
- return [UV_INSTALL_GUIDANCE];
234
- return [];
235
- }
236
- export function validateSuiteBundleSurface(root, runtimeNames = null, packageRegistry = null) {
237
- const errors = [];
238
- const pkg = packageRegistry ?? packageManifest(root);
239
- const runtimePackageSurfaces = pkg.runtimeManifestPaths();
240
- const requiredPaths = pkg.sharedPathRequirements();
241
- const packageShapes = pkg.runtimePackageShapes();
242
- const active = runtimeNames ?? new Set(Object.keys(runtimePackageSurfaces));
243
- for (const runtime of [...active].sort()) {
244
- const relativeManifest = runtimePackageSurfaces[runtime];
245
- if (relativeManifest === undefined) {
246
- errors.push(`${runtime}: unknown runtime package surface`);
247
- continue;
248
- }
249
- const manifest = path.join(root, relativeManifest);
250
- if (!isFile(manifest)) {
251
- errors.push(`${runtime}: missing package metadata ${relativeManifest}`);
252
- continue;
253
- }
254
- let pkgJson;
255
- try {
256
- pkgJson = loadJson(manifest);
257
- }
258
- catch (exc) {
259
- errors.push(`${runtime}: could not read package metadata ${relativeManifest}: ${exc.message}`);
260
- continue;
261
- }
262
- let metadata = pkgJson.agentera;
263
- if (!isMapping(metadata) && runtime === "claude") {
264
- const plugins = pkgJson.plugins;
265
- if (Array.isArray(plugins)) {
266
- metadata =
267
- plugins.find((plugin) => isMapping(plugin) && plugin.name === "agentera" && isMapping(plugin.agentera))?.agentera ?? null;
268
- }
269
- }
270
- if (!isMapping(metadata)) {
271
- errors.push(`${runtime}: missing agentera app metadata`);
272
- continue;
273
- }
274
- const expectedShape = packageShapes[runtime];
275
- if (metadata.packageShape !== expectedShape) {
276
- errors.push(`${runtime}: agentera.packageShape must be ${expectedShape}`);
277
- }
278
- const installRootValue = metadata.installRoot;
279
- if (typeof installRootValue !== "string" || !installRootValue) {
280
- errors.push(`${runtime}: agentera.installRoot must point at the Agentera app root`);
281
- continue;
282
- }
283
- const installRoot = resolveFromManifest(root, manifest, installRootValue);
284
- if (installRoot === null) {
285
- errors.push(`${runtime}: agentera.installRoot must stay inside package root`);
286
- continue;
287
- }
288
- if (installRoot !== resolvePath(root)) {
289
- errors.push(`${runtime}: AGENTERA_HOME must resolve to the package root`);
290
- }
291
- const sharedPaths = metadata.sharedPaths;
292
- if (!Array.isArray(sharedPaths) || !sharedPaths.every((p) => typeof p === "string")) {
293
- errors.push(`${runtime}: agentera.sharedPaths must list app paths`);
294
- continue;
295
- }
296
- const listed = new Set(sharedPaths);
297
- for (const [p, expectedKind] of Object.entries(requiredPaths)) {
298
- if (!listed.has(p)) {
299
- errors.push(`${runtime}: shared tool path ${p} missing from package metadata`);
300
- continue;
301
- }
302
- const resolved = resolveInside(installRoot, p);
303
- if (resolved === null) {
304
- errors.push(`${runtime}: shared tool path ${p} must stay inside the Agentera app root`);
305
- }
306
- else if (expectedKind === "dir" && !isDir(resolved)) {
307
- errors.push(`${runtime}: shared tool path ${p} must resolve to a directory`);
308
- }
309
- else if (expectedKind === "file" && !isFile(resolved)) {
310
- errors.push(`${runtime}: shared tool path ${p} must resolve to a file`);
311
- }
312
- }
313
- const singleSkill = metadata.singleSkillInstall;
314
- if (typeof singleSkill !== "string" || !singleSkill.includes("core") || !singleSkill.includes("suite")) {
315
- errors.push(`${runtime}: agentera.singleSkillInstall must state core skill behavior does not require suite tools`);
316
- }
317
- }
318
- return errors;
319
- }
320
- export function validateCopilot(plugin, pluginRoot, registry = loadRuntimeRegistry()) {
321
- const errors = [];
322
- if ("lifecycleHooks" in plugin) {
323
- errors.push("copilot: use supported hooks component field, not lifecycleHooks");
324
- }
325
- const skills = plugin.skills;
326
- if (!(typeof skills === "string" || Array.isArray(skills))) {
327
- errors.push("copilot.skills must be a string or string array path");
328
- }
329
- else if (Array.isArray(skills) && !skills.every((p) => typeof p === "string")) {
330
- errors.push("copilot.skills entries must be path strings");
331
- }
332
- else {
333
- for (const p of stringPaths(skills)) {
334
- const resolved = resolveInside(pluginRoot, p);
335
- if (resolved === null)
336
- errors.push("copilot.skills paths must stay inside plugin root");
337
- else if (!isDir(resolved))
338
- errors.push("copilot.skills paths must resolve to skill directories");
339
- }
340
- }
341
- const hooks = plugin.hooks;
342
- if (!(typeof hooks === "string" || Array.isArray(hooks))) {
343
- errors.push("copilot.hooks must be a string or string array path");
344
- }
345
- else if (Array.isArray(hooks) && !hooks.every((p) => typeof p === "string")) {
346
- errors.push("copilot.hooks entries must be path strings");
347
- }
348
- else {
349
- for (const p of stringPaths(hooks)) {
350
- const resolved = resolveInside(pluginRoot, p);
351
- if (resolved === null)
352
- errors.push("copilot.hooks paths must stay inside plugin root");
353
- else if (!isDir(resolved))
354
- errors.push("copilot.hooks paths must resolve to a hook directory");
355
- }
356
- }
357
- const description = plugin.description;
358
- const profileraTerms = copilotProfileraTerms(registry);
359
- if (typeof description !== "string" || profileraTerms.some((term) => !description.includes(term))) {
360
- errors.push("copilot.profilera: description must expose bounded corpus metadata limits");
24
+ if (!sameMembers(adapterIds, activeIds)) {
25
+ errors.push(`runtime adapter registry IDs must match lifecycle authority: ${activeIds.join(", ")}`);
361
26
  }
362
- return errors;
363
- }
364
- export function validateCopilotHooks(pluginRoot, plugin, registry = loadRuntimeRegistry()) {
365
- const errors = [];
366
- const copilotEvents = supportedEvents(registry, "copilot");
367
- const requiredPrewriteHook = validationEvents(registry, "copilot")[0] ?? "";
368
- const hookPaths = stringPaths(plugin.hooks);
369
- if (hookPaths.length === 0)
370
- return errors;
371
- for (const hooks of hookPaths) {
372
- const hookDir = resolveInside(pluginRoot, hooks);
373
- if (hookDir === null) {
374
- errors.push("copilot.hooks paths must stay inside plugin root");
375
- continue;
376
- }
377
- if (!isDir(hookDir)) {
378
- errors.push("copilot.hooks must resolve to a hook directory");
379
- continue;
380
- }
381
- const seenEvents = new Set();
382
- const jsonFiles = fs
383
- .readdirSync(hookDir)
384
- .filter((n) => n.endsWith(".json"))
385
- .sort();
386
- for (const name of jsonFiles) {
387
- const hook = loadJson(path.join(hookDir, name));
388
- const stem = name.replace(/\.json$/, "");
389
- const event = hook.name;
390
- if (!copilotEvents.has(stem)) {
391
- errors.push(`copilot: unsupported lifecycle hook file configured: ${name}`);
392
- }
393
- if (typeof event !== "string") {
394
- errors.push(`copilot.${name}: hook name must be a string`);
395
- continue;
396
- }
397
- if (!copilotEvents.has(event)) {
398
- errors.push(`copilot: unsupported lifecycle event configured: ${event}`);
399
- continue;
400
- }
401
- if (stem !== event) {
402
- errors.push(`copilot.${name}: hook filename must match event name ${event}`);
403
- }
404
- if (event !== event.slice(0, 1).toLowerCase() + event.slice(1)) {
405
- errors.push(`copilot: event must be lower-camel: ${event}`);
406
- }
407
- validateCommandHandler(errors, "copilot", event, 0, hook);
408
- seenEvents.add(event);
409
- if (event === requiredPrewriteHook) {
410
- const commandText = handlerCommandText(hook);
411
- if (!commandText.includes("hook validate-artifact")) {
412
- errors.push("copilot.preToolUse: artifact hard gate must run agentera hook validate-artifact");
413
- }
414
- }
415
- }
416
- if (!seenEvents.has(requiredPrewriteHook)) {
417
- errors.push("copilot: missing required preToolUse artifact validation hook");
418
- }
27
+ if (!sameMembers(packageRuntimeIds, activeIds)) {
28
+ errors.push(`runtime package manifests must cover lifecycle authority exactly: ${activeIds.join(", ")}`);
419
29
  }
420
30
  return errors;
421
31
  }
422
- export function validateCursor(root, plugin, registry = loadRuntimeRegistry()) {
423
- void registry;
32
+ /** Every active runtime must remain addressable through every declared consumer view. */
33
+ export function validateRuntimeConsumerWiring(activeIds, registry) {
424
34
  const errors = [];
425
- const cursorMeta = plugin.cursor;
426
- if (!isMapping(cursorMeta)) {
427
- errors.push("cursor: missing cursor metadata object");
428
- }
429
- else {
430
- const limitations = cursorMeta.limitations;
431
- if (!Array.isArray(limitations) || limitations.length === 0) {
432
- errors.push("cursor: limitations must document cloud agents, bare hej, and hard-gate gating");
433
- }
434
- else {
435
- const joined = limitations.map((item) => String(item)).join(" ");
436
- for (const term of ["Cloud agents", "bare hej", "hard-gate", "smoke"]) {
437
- if (!joined.toLowerCase().includes(term.toLowerCase())) {
438
- errors.push(`cursor: limitations must mention '${term}'`);
35
+ for (const runtimeId of activeIds) {
36
+ for (const consumer of RUNTIME_ADAPTER_CONSUMERS) {
37
+ try {
38
+ const view = registry.consumerView(consumer, runtimeId);
39
+ const identity = view.identity;
40
+ if (identity?.runtime_id !== runtimeId) {
41
+ errors.push(`${runtimeId}: ${consumer} consumer wiring resolved the wrong runtime identity`);
439
42
  }
440
43
  }
441
- }
442
- }
443
- const skillPaths = stringPaths(plugin.skills);
444
- if (skillPaths.length === 0) {
445
- errors.push("cursor.skills must be a string or string array path");
446
- }
447
- for (const skillPath of skillPaths) {
448
- const resolved = resolveInside(root, skillPath.replace(/^\.\//, ""));
449
- if (resolved === null) {
450
- errors.push("cursor.skills paths must stay inside repository root");
451
- }
452
- }
453
- const hookPaths = stringPaths(plugin.hooks);
454
- if (hookPaths.length === 0) {
455
- errors.push("cursor.hooks must reference bundled hooks.json");
456
- }
457
- for (const hookPath of hookPaths) {
458
- const resolved = resolveInside(root, hookPath.replace(/^\.\//, ""));
459
- if (resolved === null || !isFile(resolved)) {
460
- errors.push("cursor.hooks must resolve to .cursor/hooks.json");
461
- }
462
- }
463
- const agentPaths = stringPaths(plugin.agents);
464
- if (agentPaths.length === 0) {
465
- errors.push("cursor.agents must reference managed capability agents");
466
- }
467
- else {
468
- for (const agentPath of agentPaths) {
469
- const resolved = resolveInside(root, agentPath.replace(/^\.\//, ""));
470
- if (resolved === null || !isDir(resolved)) {
471
- errors.push("cursor.agents must resolve to .cursor/agents");
472
- }
473
- else if (fs.readdirSync(resolved).filter((n) => n.endsWith(".md")).length < 12) {
474
- errors.push("cursor.agents must expose twelve managed capability descriptors");
475
- }
476
- }
477
- }
478
- const reference = path.join(root, "references/adapters/cursor.md");
479
- if (!isFile(reference)) {
480
- errors.push("cursor: missing references/adapters/cursor.md");
481
- }
482
- else {
483
- const text = fs.readFileSync(reference, "utf8").toLowerCase();
484
- for (const term of ["cloud agents", "cursor-agent", "metadata-only", "live pretooluse write smoke"]) {
485
- if (!text.includes(term)) {
486
- errors.push(`cursor.md must document '${term}'`);
487
- }
488
- }
489
- }
490
- return errors;
491
- }
492
- export function validateCursorHooks(root, registry = loadRuntimeRegistry()) {
493
- const errors = [];
494
- const cursorEvents = supportedEvents(registry, "cursor");
495
- const requiredPrewriteHook = validationEvents(registry, "cursor")[0] ?? "";
496
- const hooksPath = path.join(root, ".cursor", "hooks.json");
497
- if (!isFile(hooksPath))
498
- return ["cursor: missing .cursor/hooks.json"];
499
- const payload = loadJson(hooksPath);
500
- const hooks = payload.hooks;
501
- if (!isMapping(hooks))
502
- return [...errors, "cursor: hooks.json must contain a hooks object"];
503
- const configured = new Set();
504
- for (const [event, entries] of Object.entries(hooks)) {
505
- if (!cursorEvents.has(event)) {
506
- errors.push(`cursor: unsupported lifecycle event configured: ${event}`);
507
- continue;
508
- }
509
- if (!Array.isArray(entries)) {
510
- errors.push(`cursor.${event}: hook entries must be a list`);
511
- continue;
512
- }
513
- configured.add(event);
514
- entries.forEach((entry, index) => {
515
- if (!isMapping(entry)) {
516
- errors.push(`cursor.${event}[${index}]: hook entry must be an object`);
517
- return;
44
+ catch {
45
+ errors.push(`${runtimeId}: missing ${consumer} consumer wiring`);
518
46
  }
519
- const command = entry.command;
520
- if (typeof command !== "string" || !command.trim()) {
521
- errors.push(`cursor.${event}[${index}]: command must be a string`);
522
- return;
523
- }
524
- if (event === "sessionStart" && !command.includes("hook cursor-session-start")) {
525
- errors.push("cursor.sessionStart: must run agentera hook cursor-session-start");
526
- }
527
- if (event === requiredPrewriteHook && !command.includes("hook cursor-pre-tool-use")) {
528
- errors.push("cursor.preToolUse: artifact hard gate must run agentera hook cursor-pre-tool-use");
529
- }
530
- });
531
- }
532
- for (const required of ["sessionStart", "sessionEnd", requiredPrewriteHook, "postToolUse"]) {
533
- if (required && !configured.has(required)) {
534
- errors.push(`cursor: missing required lifecycle hook ${required}`);
535
47
  }
536
48
  }
537
49
  return errors;
538
50
  }
539
- export function validateCodex(plugin, registry = loadRuntimeRegistry()) {
540
- const errors = [];
541
- const codexEvents = supportedEvents(registry, "codex");
542
- const unsupportedCodexEvents = unsupportedEvents(registry, "codex");
543
- const lifecycleStatusValues = codexLifecycleStatusValues(registry);
544
- const limitationTerms = codexLimitationTerms(registry);
545
- const lifecycle = plugin.lifecycleHooks;
546
- if (!isMapping(lifecycle))
547
- return ["codex: missing lifecycleHooks limitation metadata"];
548
- if (lifecycle.configured !== false)
549
- errors.push("codex: lifecycleHooks.configured must be false");
550
- if (!lifecycleStatusValues.includes(lifecycle.status)) {
551
- errors.push("codex: lifecycleHooks.status must be one of " + lifecycleStatusValues.join(", "));
552
- }
553
- const events = lifecycle.events ?? {};
554
- if (!isMapping(events)) {
555
- errors.push("codex: lifecycleHooks.events must be an object when present");
556
- }
557
- else {
558
- for (const event of Object.keys(events)) {
559
- if (!codexEvents.has(event))
560
- errors.push(`codex: unsupported lifecycle event configured: ${event}`);
561
- }
562
- }
563
- const supported = lifecycle.supportedEvents;
564
- const codexSupportedList = runtimeView(registry, "codex").lifecycle_events.supported_events;
565
- if (!Array.isArray(supported) || !setsEqual(new Set(supported), codexEvents)) {
566
- errors.push("codex: supportedEvents must list every Codex codex_hooks event (" + codexSupportedList.join(", ") + ")");
567
- }
568
- const unsupported = lifecycle.unsupportedEvents;
569
- if (!Array.isArray(unsupported) || unsupported.length === 0) {
570
- errors.push("codex: unsupportedEvents must list Claude-Code-specific events with no Codex equivalent");
571
- }
572
- else {
573
- for (const entry of unsupported) {
574
- if (!isMapping(entry)) {
575
- errors.push("codex: unsupportedEvents entries must be objects with event and reason fields");
576
- continue;
577
- }
578
- const event = entry.event;
579
- if (codexEvents.has(event)) {
580
- errors.push(`codex: unsupportedEvents must not list event '${event}' that codex_hooks now supports`);
581
- }
582
- else if (!unsupportedCodexEvents.has(event)) {
583
- errors.push(`codex: unsupportedEvents entry '${event}' is not claimed by the registry`);
584
- }
585
- }
586
- }
587
- const limitations = lifecycle.limitations;
588
- if (!Array.isArray(limitations) || limitations.length === 0) {
589
- errors.push("codex: limitations must document codex_hooks status and apply_patch interception");
590
- }
591
- else {
592
- const joined = limitations.filter((item) => typeof item === "string").join(" ");
593
- for (const term of limitationTerms) {
594
- if (!joined.includes(term)) {
595
- errors.push(`codex: limitations must cite '${term}' so apply_patch interception ground truth stays surfaced`);
596
- }
597
- }
598
- for (const marker of ["experimental, require host config opt-in", "experimental-disabled", "no real-time"]) {
599
- if (joined.includes(marker)) {
600
- errors.push(`codex: limitations carry stale wording '${marker}'; remove it`);
601
- }
602
- }
603
- }
604
- return errors;
51
+ function bundleCovers(relativePath, directories, files) {
52
+ if (files.has(relativePath))
53
+ return true;
54
+ return directories.some((directory) => {
55
+ const relative = path.relative(directory, relativePath);
56
+ return relative === "" || (!relative.startsWith("..") && !path.isAbsolute(relative));
57
+ });
605
58
  }
606
- export function validateCodexProfileraMetadata(root, plugin) {
59
+ function validateReleaseRuntimeParity(root, registry) {
607
60
  const errors = [];
608
- const agentera = (plugin.skillMetadata ?? []).find((skill) => isMapping(skill) && skill.name === "agentera");
609
- if (!isMapping(agentera))
610
- return ["codex.agentera: missing aggregate Agentera app metadata"];
611
- if (agentera.runtimeSupport !== "portable")
612
- errors.push("codex.agentera: runtimeSupport must stay portable");
613
- if ((agentera.policy ?? {}).allow_implicit_invocation !== true) {
614
- errors.push("codex.agentera: Agentera app entry must allow implicit invocation");
615
- }
616
- const invocationHint = agentera.invocationHint;
617
- if (typeof invocationHint !== "string" || !invocationHint.includes("$agentera")) {
618
- errors.push("codex.agentera: invocation hint must name $agentera");
619
- }
620
- const codex = plugin.codex;
621
- const codexText = isMapping(codex) ? (codex.limitations ?? []).join(" ") : "";
622
- for (const term of CODEX_AGENTERA_METADATA_TERMS) {
623
- if (!`${invocationHint || ""} ${codexText}`.includes(term)) {
624
- errors.push(`codex.agentera: metadata must surface '${term}'`);
625
- }
626
- }
627
- for (const rel of ["agents/openai.yaml"]) {
628
- const p = path.join(root, rel);
629
- if (!isFile(p)) {
630
- errors.push(`codex.agentera: missing metadata surface ${rel}`);
61
+ const authority = loadLifecycleAuthority(path.join(root, "references/adapters/runtime-lifecycle-authority.yaml"));
62
+ const activeIds = authority.runtimes.map((runtime) => runtime.id);
63
+ for (const runtime of authority.runtimes) {
64
+ const record = registry.records.find((candidate) => candidate.identity.runtime_id === runtime.id);
65
+ const displayName = record?.identity?.display_name;
66
+ if (displayName !== runtime.displayName) {
67
+ errors.push(`${runtime.id}: runtime adapter display name must match lifecycle authority (${runtime.displayName})`);
68
+ }
69
+ }
70
+ const packageRegistry = packageManifest(root);
71
+ const packageRuntimeIds = Object.keys(packageRegistry.runtimeManifestPaths());
72
+ errors.push(...validateRuntimeIdParity(activeIds, registry.adapterIds, packageRuntimeIds));
73
+ errors.push(...validateRuntimeConsumerWiring(activeIds, registry));
74
+ const suiteVersion = packageRegistry.suiteVersion();
75
+ for (const [surface, version] of Object.entries(packageRegistry.versionSurfaceValues())) {
76
+ const developmentPackage = surface === "cli-package";
77
+ const parsed = typeof version === "string" ? parseSemverCore(version) : null;
78
+ const matchesSuite = version === suiteVersion || (developmentPackage && parsed?.core === suiteVersion && parsed.preRelease !== null);
79
+ if (!matchesSuite) {
80
+ errors.push(`${surface}: version ${String(version)} must match suite version ${suiteVersion}`);
81
+ }
82
+ }
83
+ const packageRecord = packageRegistry.get();
84
+ const bundleSurfaces = packageRecord.bundle_surfaces;
85
+ const directories = bundleSurfaces.directories.map((entry) => entry.path);
86
+ const files = new Set(bundleSurfaces.files.map((entry) => entry.path));
87
+ const lifecycle = loadRuntimeLifecycleAdapterContract(path.join(root, "references/adapters/runtime-lifecycle-adapters.yaml"), authority);
88
+ for (const resource of lifecycle.resources) {
89
+ const prefix = "{source_root}/";
90
+ if (!resource.source.startsWith(prefix))
631
91
  continue;
632
- }
633
- const text = fs.readFileSync(p, "utf8");
634
- if (!text.includes("path: ./skills/agentera")) {
635
- errors.push(`codex.agentera: ${rel} must point at installed skills/agentera`);
636
- }
637
- for (const stalePath of ["path: ./skills/hej", "metadata: ./skills/hej", "skills/<name>/agents"]) {
638
- if (text.includes(stalePath)) {
639
- errors.push(`codex.agentera: ${rel} carries stale v1 skill path '${stalePath}'`);
640
- }
641
- }
642
- for (const term of CODEX_PROFILERA_TERMS) {
643
- if (!text.includes(term))
644
- errors.push(`codex.agentera: ${rel} missing '${term}'`);
645
- }
646
- if (!CODEX_PROFILERA_STATUS_VALUES.some((value) => text.includes(`status: ${value}`))) {
647
- errors.push(`codex.agentera: ${rel} missing status declaration (expected one of ` +
648
- CODEX_PROFILERA_STATUS_VALUES.join(", ") +
649
- ")");
650
- }
651
- if (text.includes("collector exists") || text.includes("not implemented")) {
652
- errors.push(`codex.agentera: ${rel} contains stale missing-collector wording`);
653
- }
654
- }
655
- return errors;
656
- }
657
- export function validateOpencode(root, registry = loadRuntimeRegistry()) {
658
- const errors = [];
659
- const pluginPath = path.join(root, ".opencode/plugins/agentera.js");
660
- if (!isFile(pluginPath))
661
- return ["opencode: missing .opencode/plugins/agentera.js"];
662
- const text = fs.readFileSync(pluginPath, "utf8");
663
- if (!text.includes("event: async")) {
664
- errors.push("opencode: session lifecycle must use the generic event hook");
665
- }
666
- for (const eventType of opencodeEventPayloadTypes(registry)) {
667
- if (!text.includes(`event.type !== "${eventType}"`) && !text.includes(`event.type === "${eventType}"`)) {
668
- errors.push(`opencode: event hook must handle or explicitly skip ${eventType}`);
669
- }
670
- if (text.includes(`"${eventType}":`)) {
671
- errors.push(`opencode: must not register direct hook ${eventType}`);
672
- }
673
- }
674
- for (const eventType of unsupportedEvents(registry, "opencode")) {
675
- if (text.includes(`"${eventType}":`)) {
676
- errors.push(`opencode: must not register unsupported direct hook ${eventType}`);
92
+ const source = resource.source.slice(prefix.length);
93
+ if (!bundleCovers(source, directories, files)) {
94
+ errors.push(`${resource.id}: lifecycle source ${source} is absent from npm bundle surfaces`);
677
95
  }
678
96
  }
679
- const payloadTypes = opencodeEventPayloadTypes(registry);
680
- const directHooks = [...supportedEvents(registry, "opencode")].filter((e) => !payloadTypes.has(e));
681
- for (const event of directHooks) {
682
- if (!text.includes(`"${event}"`)) {
683
- errors.push(`opencode: missing "${event}" hook`);
97
+ for (const manifestPath of Object.values(packageRegistry.runtimeManifestPaths())) {
98
+ if (!bundleCovers(manifestPath, directories, files)) {
99
+ errors.push(`runtime package manifest ${manifestPath} is absent from npm bundle surfaces`);
684
100
  }
685
101
  }
686
- if (!text.includes("validateArtifactCandidate")) {
687
- errors.push("opencode: tool.execute.before must validate artifact candidates");
102
+ if (fs.existsSync(path.join(root, ".claude-plugin", "marketplace.json"))) {
103
+ errors.push("retired Claude marketplace manifest must be absent");
688
104
  }
689
105
  return errors;
690
106
  }
691
- function normalizedDocText(p) {
692
- return fs.readFileSync(p, "utf8").replace(/`/g, "");
693
- }
694
- export function validateHardGateDocs(root, registry = loadRuntimeRegistry()) {
695
- const errors = [];
696
- for (const [relativePath, runtimes] of Object.entries(HARD_GATE_DOC_REQUIREMENTS)) {
697
- const p = path.join(root, relativePath);
698
- if (!isFile(p)) {
699
- errors.push(`${relativePath}: missing hard-gate documentation surface`);
700
- continue;
701
- }
702
- const text = normalizedDocText(p);
703
- for (const runtime of runtimes) {
704
- const displayName = runtimeView(registry, runtime).identity.display_name.replace(/ CLI$/, "");
705
- for (const term of hardGateDocTerms(registry, runtime, relativePath)) {
706
- const normalizedTerm = term.replace(/`/g, "").replace(/\.$/, "");
707
- if (!text.includes(normalizedTerm)) {
708
- errors.push(`${relativePath}: ${displayName} hard-gate docs must keep scoped claim term '${term}'`);
709
- }
710
- }
711
- }
712
- }
713
- return errors;
714
- }
715
- function setsEqual(a, b) {
716
- if (a.size !== b.size)
717
- return false;
718
- for (const v of a)
719
- if (!b.has(v))
720
- return false;
721
- return true;
722
- }
723
107
  export function lifecycleMain(opts = {}) {
724
108
  const root = resolvePath(opts.root ?? rootDefault());
725
109
  const out = opts.out ?? ((line) => process.stdout.write(line + "\n"));
726
- const errors = [];
110
+ const errors = [
111
+ ...validateLifecycleAuthorityRoot(root),
112
+ ...validateRuntimeLifecycleAdapterContractRoot(root),
113
+ ...validateRetiredRuntimeCleanupContractRoot(root),
114
+ ];
727
115
  let registry = null;
728
116
  try {
729
117
  registry = loadRuntimeRegistry(path.join(root, "references/adapters/runtime-adapter-registry.yaml"));
@@ -743,6 +131,7 @@ export function lifecycleMain(opts = {}) {
743
131
  return 1;
744
132
  }
745
133
  const reg = registry;
134
+ errors.push(...validateReleaseRuntimeParity(root, reg));
746
135
  const copilot = loadJson(path.join(root, "plugin.json"));
747
136
  errors.push(...validateCopilot(copilot, root, reg));
748
137
  errors.push(...validateCopilotHooks(root, copilot, reg));
@@ -751,13 +140,13 @@ export function lifecycleMain(opts = {}) {
751
140
  errors.push(...validateCursorHooks(root, reg));
752
141
  const codex = loadJson(path.join(root, ".codex-plugin/plugin.json"));
753
142
  errors.push(...validateCodex(codex, reg));
754
- errors.push(...validateCodexProfileraMetadata(root, codex));
143
+ errors.push(...validateCodexProfileMetadata(root, codex));
755
144
  errors.push(...validateOpencode(root, reg));
756
145
  const packageManifestReg = packageManifest(root);
757
- errors.push(...validateSuiteBundleSurface(root, null, packageManifestReg));
758
- errors.push(...validatePackagedPythonScripts(root));
759
- if (opts.checkUvRuntime) {
760
- errors.push(...validateUvRuntime());
146
+ const authority = loadLifecycleAuthority(path.join(root, "references/adapters/runtime-lifecycle-authority.yaml"));
147
+ errors.push(...validateSuiteBundleSurface(root, new Set(authority.runtimes.map((runtime) => runtime.id)), packageManifestReg));
148
+ if (legacyPythonParityEnabled(opts)) {
149
+ errors.push(...runLegacyPythonParityChecks(root));
761
150
  }
762
151
  errors.push(...validateHardGateDocs(root, reg));
763
152
  if (errors.length > 0) {