agentera 3.0.0-dev.3 → 3.0.0-dev.30

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 (762) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +96 -6
  3. package/bundle/.agentera-npx-bundle.json +1 -1
  4. package/bundle/CHANGELOG.md +1133 -0
  5. package/bundle/DESIGN.md +229 -0
  6. package/bundle/LICENSE +201 -0
  7. package/bundle/README.md +136 -0
  8. package/bundle/UPGRADE.md +201 -0
  9. package/bundle/extract-corpus-parity.json +21 -0
  10. package/bundle/fixtures/routing/hybrid-corpus.yaml +154 -0
  11. package/bundle/references/adapters/package-manifest-interface-model.yaml +42 -252
  12. package/bundle/references/adapters/package-registry.yaml +20 -188
  13. package/bundle/references/adapters/package-surface-characterization.md +36 -37
  14. package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +74 -0
  15. package/bundle/references/adapters/runtime-lifecycle-authority.yaml +62 -0
  16. package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +84 -0
  17. package/bundle/references/adapters/runtime-retired-resources.yaml +97 -0
  18. package/bundle/references/analysis/benchmark.md +10 -6
  19. package/bundle/references/analysis/evidence-tier-authority.yaml +516 -0
  20. package/bundle/references/analysis/startup-measurement-contract.yaml +37 -26
  21. package/bundle/references/analysis/verification-policy.yaml +142 -0
  22. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +9 -8
  23. package/bundle/references/artifacts/state-storage-authority.yaml +2167 -0
  24. package/bundle/references/artifacts/verbosity-budget-authority.yaml +42 -0
  25. package/bundle/references/cli/agent-ready-state-contract.yaml +64 -81
  26. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +7 -8
  27. package/bundle/references/cli/audience-namespace-cli-migration.yaml +58 -29
  28. package/bundle/references/cli/bundle-skill-vocabulary.yaml +12 -49
  29. package/bundle/references/cli/capability-instruction-contract.yaml +96 -58
  30. package/bundle/references/cli/capability-instruction-structure.md +144 -0
  31. package/bundle/references/cli/capability-tool-classification.yaml +14 -14
  32. package/bundle/references/cli/coexistence-probe.yaml +13 -0
  33. package/bundle/references/cli/hybrid-route-contract.yaml +416 -0
  34. package/bundle/references/cli/parity-expected-actual-template.md +30 -0
  35. package/bundle/references/cli/prime-consumer-compatibility.yaml +651 -0
  36. package/bundle/references/cli/routing-execution-vocabulary.yaml +16 -38
  37. package/bundle/references/cli/routing-model.md +139 -0
  38. package/bundle/references/cli/single-name-protocol.yaml +42 -0
  39. package/bundle/references/cli/trigger-schema-enrichment.md +140 -0
  40. package/bundle/references/cli/update-channels.yaml +45 -7
  41. package/bundle/references/cli/upgrade-repair-wording.md +25 -0
  42. package/bundle/references/cli/v3-handoff-manifest.schema.yaml +97 -0
  43. package/bundle/references/cli/vocabulary-index.yaml +23 -18
  44. package/bundle/references/cli/vocabulary.md +346 -331
  45. package/bundle/references/meta/documentation-inventory.md +10 -3
  46. package/bundle/registry.json +14 -14
  47. package/bundle/skills/agentera/SKILL.md +182 -407
  48. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +84 -0
  49. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/exit.yaml +2 -2
  50. package/bundle/skills/agentera/capabilities/audit/schemas/triggers.yaml +25 -0
  51. package/bundle/skills/agentera/capabilities/{inspektera → audit}/schemas/validation.yaml +20 -19
  52. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +85 -0
  53. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/exit.yaml +3 -3
  54. package/bundle/skills/agentera/capabilities/build/schemas/triggers.yaml +27 -0
  55. package/bundle/skills/agentera/capabilities/{realisera → build}/schemas/validation.yaml +16 -16
  56. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/artifacts.yaml +12 -12
  57. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/exit.yaml +5 -5
  58. package/bundle/skills/agentera/capabilities/design/schemas/triggers.yaml +16 -0
  59. package/bundle/skills/agentera/capabilities/{visualisera → design}/schemas/validation.yaml +7 -7
  60. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +49 -0
  61. package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/exit.yaml +2 -2
  62. package/bundle/skills/agentera/capabilities/discuss/schemas/triggers.yaml +20 -0
  63. package/bundle/skills/agentera/capabilities/{resonera → discuss}/schemas/validation.yaml +9 -8
  64. package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +80 -0
  65. package/bundle/skills/agentera/capabilities/document/schemas/triggers.yaml +16 -0
  66. package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/validation.yaml +18 -18
  67. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/artifacts.yaml +17 -17
  68. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/exit.yaml +2 -2
  69. package/bundle/skills/agentera/capabilities/optimize/schemas/triggers.yaml +16 -0
  70. package/bundle/skills/agentera/capabilities/{optimera → optimize}/schemas/validation.yaml +9 -9
  71. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +76 -0
  72. package/bundle/skills/agentera/capabilities/{orkestrera → orchestrate}/schemas/exit.yaml +9 -7
  73. package/bundle/skills/agentera/capabilities/orchestrate/schemas/triggers.yaml +23 -0
  74. package/bundle/skills/agentera/capabilities/orchestrate/schemas/validation.yaml +121 -0
  75. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +63 -0
  76. package/bundle/skills/agentera/capabilities/{planera → plan}/schemas/exit.yaml +2 -2
  77. package/bundle/skills/agentera/capabilities/plan/schemas/triggers.yaml +23 -0
  78. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +89 -0
  79. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/artifacts.yaml +4 -4
  80. package/bundle/skills/agentera/capabilities/{profilera → profile}/schemas/exit.yaml +3 -3
  81. package/bundle/skills/agentera/capabilities/profile/schemas/triggers.yaml +20 -0
  82. package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +85 -0
  83. package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +24 -0
  84. package/bundle/skills/agentera/capabilities/research/schemas/triggers.yaml +16 -0
  85. package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/validation.yaml +2 -2
  86. package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +72 -0
  87. package/bundle/skills/agentera/capabilities/status/schemas/triggers.yaml +22 -0
  88. package/bundle/skills/agentera/capabilities/{hej → status}/schemas/validation.yaml +5 -5
  89. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/artifacts.yaml +16 -16
  90. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/exit.yaml +7 -6
  91. package/bundle/skills/agentera/capabilities/vision/schemas/triggers.yaml +23 -0
  92. package/bundle/skills/agentera/capabilities/{visionera → vision}/schemas/validation.yaml +18 -20
  93. package/bundle/skills/agentera/capability_schema_contract.yaml +200 -37
  94. package/bundle/skills/agentera/protocol.yaml +29 -29
  95. package/bundle/skills/agentera/references/contract.md +387 -329
  96. package/bundle/skills/agentera/route-phrases.yaml +81 -0
  97. package/bundle/skills/agentera/schemas/artifacts/changelog.yaml +5 -4
  98. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +40 -22
  99. package/bundle/skills/agentera/schemas/artifacts/design.yaml +5 -4
  100. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +15 -19
  101. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +145 -14
  102. package/bundle/skills/agentera/schemas/artifacts/health.yaml +58 -21
  103. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +22 -8
  104. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +327 -15
  105. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +51 -53
  106. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +82 -28
  107. package/bundle/skills/agentera/schemas/artifacts/vision.yaml +3 -3
  108. package/dist/analytics/extractCorpus/cli.js +191 -0
  109. package/dist/analytics/extractCorpus/cli.js.map +1 -0
  110. package/dist/analytics/extractCorpus/copilotSessions.js +276 -0
  111. package/dist/analytics/extractCorpus/copilotSessions.js.map +1 -0
  112. package/dist/analytics/extractCorpus/core.js +393 -0
  113. package/dist/analytics/extractCorpus/core.js.map +1 -0
  114. package/dist/analytics/extractCorpus/corpus.js +168 -0
  115. package/dist/analytics/extractCorpus/corpus.js.map +1 -0
  116. package/dist/analytics/extractCorpus/coverageAudit.js +261 -0
  117. package/dist/analytics/extractCorpus/coverageAudit.js.map +1 -0
  118. package/dist/analytics/extractCorpus/cursorSessions.js +426 -0
  119. package/dist/analytics/extractCorpus/cursorSessions.js.map +1 -0
  120. package/dist/analytics/extractCorpus/evidenceTiers.js +561 -0
  121. package/dist/analytics/extractCorpus/evidenceTiers.js.map +1 -0
  122. package/dist/analytics/extractCorpus/extractCorpusParity.js +106 -0
  123. package/dist/analytics/extractCorpus/extractCorpusParity.js.map +1 -0
  124. package/dist/analytics/extractCorpus/filesystemSources.js +119 -0
  125. package/dist/analytics/extractCorpus/filesystemSources.js.map +1 -0
  126. package/dist/analytics/extractCorpus/index.js +15 -0
  127. package/dist/analytics/extractCorpus/index.js.map +1 -0
  128. package/dist/analytics/extractCorpus/jsonlSessions.js +205 -0
  129. package/dist/analytics/extractCorpus/jsonlSessions.js.map +1 -0
  130. package/dist/analytics/extractCorpus/sqliteCaps.js +44 -0
  131. package/dist/analytics/extractCorpus/sqliteCaps.js.map +1 -0
  132. package/dist/analytics/extractCorpus/sqliteSessions.js +368 -0
  133. package/dist/analytics/extractCorpus/sqliteSessions.js.map +1 -0
  134. package/dist/analytics/extractCorpus/tierReader.js +109 -0
  135. package/dist/analytics/extractCorpus/tierReader.js.map +1 -0
  136. package/dist/analytics/extractCorpus.js +2 -1790
  137. package/dist/analytics/extractCorpus.js.map +1 -1
  138. package/dist/analytics/profileSignals.js +212 -0
  139. package/dist/analytics/profileSignals.js.map +1 -0
  140. package/dist/analytics/usageStats.js +191 -41
  141. package/dist/analytics/usageStats.js.map +1 -1
  142. package/dist/bin/agentera.js +3 -1
  143. package/dist/bin/agentera.js.map +1 -1
  144. package/dist/capabilities/audit/instructions.js +16 -0
  145. package/dist/capabilities/audit/instructions.js.map +1 -0
  146. package/dist/capabilities/build/instructions.js +18 -0
  147. package/dist/capabilities/build/instructions.js.map +1 -0
  148. package/dist/capabilities/design/instructions.js +5 -0
  149. package/dist/capabilities/design/instructions.js.map +1 -0
  150. package/dist/capabilities/discuss/instructions.js +16 -0
  151. package/dist/capabilities/discuss/instructions.js.map +1 -0
  152. package/dist/capabilities/document/instructions.js +12 -0
  153. package/dist/capabilities/document/instructions.js.map +1 -0
  154. package/dist/capabilities/index.js +39 -0
  155. package/dist/capabilities/index.js.map +1 -0
  156. package/dist/capabilities/optimize/instructions.js +14 -0
  157. package/dist/capabilities/optimize/instructions.js.map +1 -0
  158. package/dist/capabilities/orchestrate/instructions.js +41 -0
  159. package/dist/capabilities/orchestrate/instructions.js.map +1 -0
  160. package/dist/capabilities/plan/instructions.js +15 -0
  161. package/dist/capabilities/plan/instructions.js.map +1 -0
  162. package/dist/capabilities/profile/instructions.js +5 -0
  163. package/dist/capabilities/profile/instructions.js.map +1 -0
  164. package/dist/capabilities/research/instructions.js +6 -0
  165. package/dist/capabilities/research/instructions.js.map +1 -0
  166. package/dist/capabilities/status/instructions.js +5 -0
  167. package/dist/capabilities/status/instructions.js.map +1 -0
  168. package/dist/capabilities/status/startupInstructions.js +35 -0
  169. package/dist/capabilities/status/startupInstructions.js.map +1 -0
  170. package/dist/capabilities/vision/instructions.js +5 -0
  171. package/dist/capabilities/vision/instructions.js.map +1 -0
  172. package/dist/cli/appContext.js +30 -23
  173. package/dist/cli/appContext.js.map +1 -1
  174. package/dist/cli/argvalidate.js.map +1 -1
  175. package/dist/cli/capabilityContext/benchmark.js +564 -0
  176. package/dist/cli/capabilityContext/benchmark.js.map +1 -0
  177. package/dist/cli/capabilityContext/bespoke.js +44 -0
  178. package/dist/cli/capabilityContext/bespoke.js.map +1 -0
  179. package/dist/cli/capabilityContext/build.js +191 -0
  180. package/dist/cli/capabilityContext/build.js.map +1 -0
  181. package/dist/cli/capabilityContext/closeout.js +231 -0
  182. package/dist/cli/capabilityContext/closeout.js.map +1 -0
  183. package/dist/cli/capabilityContext/contract.js +214 -0
  184. package/dist/cli/capabilityContext/contract.js.map +1 -0
  185. package/dist/cli/capabilityContext/evidence.js +469 -0
  186. package/dist/cli/capabilityContext/evidence.js.map +1 -0
  187. package/dist/cli/capabilityContext/index.js +4 -0
  188. package/dist/cli/capabilityContext/index.js.map +1 -0
  189. package/dist/cli/capabilityContext/orchestration.js +128 -0
  190. package/dist/cli/capabilityContext/orchestration.js.map +1 -0
  191. package/dist/cli/capabilityContext/planState.js +280 -0
  192. package/dist/cli/capabilityContext/planState.js.map +1 -0
  193. package/dist/cli/capabilityContext/progress.js +143 -0
  194. package/dist/cli/capabilityContext/progress.js.map +1 -0
  195. package/dist/cli/capabilityContext/shared.js +100 -0
  196. package/dist/cli/capabilityContext/shared.js.map +1 -0
  197. package/dist/cli/capabilityContext/slim.js +153 -0
  198. package/dist/cli/capabilityContext/slim.js.map +1 -0
  199. package/dist/cli/capabilityContext/startup.js +257 -0
  200. package/dist/cli/capabilityContext/startup.js.map +1 -0
  201. package/dist/cli/capabilityContext/types.js +51 -0
  202. package/dist/cli/capabilityContext/types.js.map +1 -0
  203. package/dist/cli/capabilityContext.js +1 -2420
  204. package/dist/cli/capabilityContext.js.map +1 -1
  205. package/dist/cli/commands/appHome.js +23 -0
  206. package/dist/cli/commands/appHome.js.map +1 -0
  207. package/dist/cli/commands/capability.js +3 -10
  208. package/dist/cli/commands/capability.js.map +1 -1
  209. package/dist/cli/commands/compact.js +41 -12
  210. package/dist/cli/commands/compact.js.map +1 -1
  211. package/dist/cli/commands/doctor.js +59 -97
  212. package/dist/cli/commands/doctor.js.map +1 -1
  213. package/dist/cli/commands/durability.js +82 -0
  214. package/dist/cli/commands/durability.js.map +1 -0
  215. package/dist/cli/commands/entityMigrate.js +132 -0
  216. package/dist/cli/commands/entityMigrate.js.map +1 -0
  217. package/dist/cli/commands/lint.js +26 -43
  218. package/dist/cli/commands/lint.js.map +1 -1
  219. package/dist/cli/commands/prime/briefOrientation.js +592 -0
  220. package/dist/cli/commands/prime/briefOrientation.js.map +1 -0
  221. package/dist/cli/commands/prime/bundleStatus.js +191 -0
  222. package/dist/cli/commands/prime/bundleStatus.js.map +1 -0
  223. package/dist/cli/commands/prime/collectEntityOrientation.js +260 -0
  224. package/dist/cli/commands/prime/collectEntityOrientation.js.map +1 -0
  225. package/dist/cli/commands/prime/collectOrientationState.js +180 -0
  226. package/dist/cli/commands/prime/collectOrientationState.js.map +1 -0
  227. package/dist/cli/commands/prime/orientationOutput.js +350 -0
  228. package/dist/cli/commands/prime/orientationOutput.js.map +1 -0
  229. package/dist/cli/commands/prime/types.js +2 -0
  230. package/dist/cli/commands/prime/types.js.map +1 -0
  231. package/dist/cli/commands/prime/v1Migration.js +39 -0
  232. package/dist/cli/commands/prime/v1Migration.js.map +1 -0
  233. package/dist/cli/commands/prime.js +61 -556
  234. package/dist/cli/commands/prime.js.map +1 -1
  235. package/dist/cli/commands/query.js +66 -51
  236. package/dist/cli/commands/query.js.map +1 -1
  237. package/dist/cli/commands/report.js +100 -24
  238. package/dist/cli/commands/report.js.map +1 -1
  239. package/dist/cli/commands/route.js +142 -0
  240. package/dist/cli/commands/route.js.map +1 -0
  241. package/dist/cli/commands/schema.js +260 -78
  242. package/dist/cli/commands/schema.js.map +1 -1
  243. package/dist/cli/commands/state/decisions.js +388 -0
  244. package/dist/cli/commands/state/decisions.js.map +1 -0
  245. package/dist/cli/commands/state/docs.js +71 -0
  246. package/dist/cli/commands/state/docs.js.map +1 -0
  247. package/dist/cli/commands/state/experimentRecords.js +139 -0
  248. package/dist/cli/commands/state/experimentRecords.js.map +1 -0
  249. package/dist/cli/commands/state/experiments.js +15 -0
  250. package/dist/cli/commands/state/experiments.js.map +1 -0
  251. package/dist/cli/commands/state/get.js +127 -0
  252. package/dist/cli/commands/state/get.js.map +1 -0
  253. package/dist/cli/commands/state/health.js +15 -0
  254. package/dist/cli/commands/state/health.js.map +1 -0
  255. package/dist/cli/commands/state/index.js +60 -0
  256. package/dist/cli/commands/state/index.js.map +1 -0
  257. package/dist/cli/commands/state/list.js +176 -0
  258. package/dist/cli/commands/state/list.js.map +1 -0
  259. package/dist/cli/commands/state/objective.js +26 -0
  260. package/dist/cli/commands/state/objective.js.map +1 -0
  261. package/dist/cli/commands/state/plan.js +15 -0
  262. package/dist/cli/commands/state/plan.js.map +1 -0
  263. package/dist/cli/commands/state/planTasks.js +142 -0
  264. package/dist/cli/commands/state/planTasks.js.map +1 -0
  265. package/dist/cli/commands/state/plans.js +143 -0
  266. package/dist/cli/commands/state/plans.js.map +1 -0
  267. package/dist/cli/commands/state/progress.js +14 -0
  268. package/dist/cli/commands/state/progress.js.map +1 -0
  269. package/dist/cli/commands/state/shared.js +15 -0
  270. package/dist/cli/commands/state/shared.js.map +1 -0
  271. package/dist/cli/commands/state/todo.js +42 -0
  272. package/dist/cli/commands/state/todo.js.map +1 -0
  273. package/dist/cli/commands/state/write.js +418 -0
  274. package/dist/cli/commands/state/write.js.map +1 -0
  275. package/dist/cli/commands/upgrade.js +146 -4
  276. package/dist/cli/commands/upgrade.js.map +1 -1
  277. package/dist/cli/commands/upgradeVerify.js +119 -0
  278. package/dist/cli/commands/upgradeVerify.js.map +1 -0
  279. package/dist/cli/commands/validate.js +109 -209
  280. package/dist/cli/commands/validate.js.map +1 -1
  281. package/dist/cli/commands/verify.js +30 -8
  282. package/dist/cli/commands/verify.js.map +1 -1
  283. package/dist/cli/contracts/bundleStatus.js +2 -0
  284. package/dist/cli/contracts/bundleStatus.js.map +1 -0
  285. package/dist/cli/contracts/orientationState.js +2 -0
  286. package/dist/cli/contracts/orientationState.js.map +1 -0
  287. package/dist/cli/dispatch/argvParser.js +33 -0
  288. package/dist/cli/dispatch/argvParser.js.map +1 -0
  289. package/dist/cli/dispatch/check.js +390 -0
  290. package/dist/cli/dispatch/check.js.map +1 -0
  291. package/dist/cli/dispatch/commands.js +27 -0
  292. package/dist/cli/dispatch/commands.js.map +1 -0
  293. package/dist/cli/dispatch/index.js +226 -0
  294. package/dist/cli/dispatch/index.js.map +1 -0
  295. package/dist/cli/dispatch/lifecycle.js +653 -0
  296. package/dist/cli/dispatch/lifecycle.js.map +1 -0
  297. package/dist/cli/dispatch/prime.js +119 -0
  298. package/dist/cli/dispatch/prime.js.map +1 -0
  299. package/dist/cli/dispatch/shared.js +64 -0
  300. package/dist/cli/dispatch/shared.js.map +1 -0
  301. package/dist/cli/dispatch/state.js +174 -0
  302. package/dist/cli/dispatch/state.js.map +1 -0
  303. package/dist/cli/dispatch.js +1 -957
  304. package/dist/cli/dispatch.js.map +1 -1
  305. package/dist/cli/errors.js +53 -0
  306. package/dist/cli/errors.js.map +1 -0
  307. package/dist/cli/help.js +418 -0
  308. package/dist/cli/help.js.map +1 -0
  309. package/dist/cli/migrationRequired.js +87 -0
  310. package/dist/cli/migrationRequired.js.map +1 -0
  311. package/dist/cli/orientation/attention.js +67 -0
  312. package/dist/cli/orientation/attention.js.map +1 -0
  313. package/dist/cli/orientation/corpusCoverage.js +103 -0
  314. package/dist/cli/orientation/corpusCoverage.js.map +1 -0
  315. package/dist/cli/orientation.js +357 -148
  316. package/dist/cli/orientation.js.map +1 -1
  317. package/dist/cli/planArtifacts.js +351 -0
  318. package/dist/cli/planArtifacts.js.map +1 -0
  319. package/dist/cli/planEvidence.js +158 -0
  320. package/dist/cli/planEvidence.js.map +1 -0
  321. package/dist/cli/planLifecycleState.js +34 -0
  322. package/dist/cli/planLifecycleState.js.map +1 -0
  323. package/dist/cli/planTaskIndex.js +12 -0
  324. package/dist/cli/planTaskIndex.js.map +1 -0
  325. package/dist/cli/prime-blob.js +69 -2
  326. package/dist/cli/prime-blob.js.map +1 -1
  327. package/dist/cli/startupCompletenessContract.js +57 -0
  328. package/dist/cli/startupCompletenessContract.js.map +1 -0
  329. package/dist/cli/stateQuery.js +63 -10
  330. package/dist/cli/stateQuery.js.map +1 -1
  331. package/dist/cli/structured.js.map +1 -1
  332. package/dist/cli/todoMarkdown.js +33 -0
  333. package/dist/cli/todoMarkdown.js.map +1 -0
  334. package/dist/cli/todoSeverity.js +19 -0
  335. package/dist/cli/todoSeverity.js.map +1 -0
  336. package/dist/core/atomicWriter.js +21 -0
  337. package/dist/core/atomicWriter.js.map +1 -0
  338. package/dist/core/difflib.js.map +1 -1
  339. package/dist/core/envPaths.js +21 -0
  340. package/dist/core/envPaths.js.map +1 -0
  341. package/dist/core/jsonValue.js +6 -0
  342. package/dist/core/jsonValue.js.map +1 -0
  343. package/dist/core/paths.js.map +1 -1
  344. package/dist/core/pyjson.js +67 -2
  345. package/dist/core/pyjson.js.map +1 -1
  346. package/dist/core/skillIdentity.js +24 -0
  347. package/dist/core/skillIdentity.js.map +1 -0
  348. package/dist/core/sourceRoot.js.map +1 -1
  349. package/dist/core/text.js +11 -0
  350. package/dist/core/text.js.map +1 -0
  351. package/dist/core/toml.js.map +1 -1
  352. package/dist/core/yaml.js +8 -0
  353. package/dist/core/yaml.js.map +1 -1
  354. package/dist/eval/evalSkills.js +30 -25
  355. package/dist/eval/evalSkills.js.map +1 -1
  356. package/dist/eval/hybridRouteEvaluation.js +156 -0
  357. package/dist/eval/hybridRouteEvaluation.js.map +1 -0
  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 +10 -27
  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 +361 -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 +14 -21
  381. package/dist/hooks/cursorSessionStart.js.map +1 -1
  382. package/dist/hooks/projectHookInput.js +26 -0
  383. package/dist/hooks/projectHookInput.js.map +1 -0
  384. package/dist/hooks/sessionStart.js +55 -170
  385. package/dist/hooks/sessionStart.js.map +1 -1
  386. package/dist/hooks/sessionStop.js +12 -26
  387. package/dist/hooks/sessionStop.js.map +1 -1
  388. package/dist/hooks/validateArtifact/agentFacing.js +10 -0
  389. package/dist/hooks/validateArtifact/agentFacing.js.map +1 -0
  390. package/dist/hooks/validateArtifact/index.js +151 -0
  391. package/dist/hooks/validateArtifact/index.js.map +1 -0
  392. package/dist/hooks/validateArtifact/markdown.js +146 -0
  393. package/dist/hooks/validateArtifact/markdown.js.map +1 -0
  394. package/dist/hooks/validateArtifact/runtime.js +86 -0
  395. package/dist/hooks/validateArtifact/runtime.js.map +1 -0
  396. package/dist/hooks/validateArtifact/schema.js +541 -0
  397. package/dist/hooks/validateArtifact/schema.js.map +1 -0
  398. package/dist/hooks/validateArtifact/traversal.js +108 -0
  399. package/dist/hooks/validateArtifact/traversal.js.map +1 -0
  400. package/dist/hooks/validateArtifact/violations.js +108 -0
  401. package/dist/hooks/validateArtifact/violations.js.map +1 -0
  402. package/dist/migrate/v2HandoffManifest.js +455 -0
  403. package/dist/migrate/v2HandoffManifest.js.map +1 -0
  404. package/dist/registries/artifactProtocolIds.js +77 -0
  405. package/dist/registries/artifactProtocolIds.js.map +1 -0
  406. package/dist/registries/artifactRegistry.js +222 -62
  407. package/dist/registries/artifactRegistry.js.map +1 -1
  408. package/dist/registries/capabilityContract.js +141 -12
  409. package/dist/registries/capabilityContract.js.map +1 -1
  410. package/dist/registries/evaluatorHandoffContract.js +171 -0
  411. package/dist/registries/evaluatorHandoffContract.js.map +1 -0
  412. package/dist/registries/evidenceTierContract.js +362 -0
  413. package/dist/registries/evidenceTierContract.js.map +1 -0
  414. package/dist/registries/hybridRoute.js +203 -0
  415. package/dist/registries/hybridRoute.js.map +1 -0
  416. package/dist/registries/hybridRouteReceipt.js +221 -0
  417. package/dist/registries/hybridRouteReceipt.js.map +1 -0
  418. package/dist/registries/packageRegistry.js +90 -230
  419. package/dist/registries/packageRegistry.js.map +1 -1
  420. package/dist/registries/triggerLoader.js +175 -0
  421. package/dist/registries/triggerLoader.js.map +1 -0
  422. package/dist/registries/verbosityBudgetContract.js +206 -0
  423. package/dist/registries/verbosityBudgetContract.js.map +1 -0
  424. package/dist/release/releaseMetadata.js +319 -0
  425. package/dist/release/releaseMetadata.js.map +1 -0
  426. package/dist/runtime/lifecycleAdapterContract.js +458 -0
  427. package/dist/runtime/lifecycleAdapterContract.js.map +1 -0
  428. package/dist/runtime/lifecycleAdapters.js +778 -0
  429. package/dist/runtime/lifecycleAdapters.js.map +1 -0
  430. package/dist/runtime/lifecycleAuthority.js +454 -0
  431. package/dist/runtime/lifecycleAuthority.js.map +1 -0
  432. package/dist/runtime/lifecycleOperationContract.js +114 -0
  433. package/dist/runtime/lifecycleOperationContract.js.map +1 -0
  434. package/dist/runtime/lifecycleOperations.js +635 -0
  435. package/dist/runtime/lifecycleOperations.js.map +1 -0
  436. package/dist/runtime/lifecycleOwnershipJournal.js +623 -0
  437. package/dist/runtime/lifecycleOwnershipJournal.js.map +1 -0
  438. package/dist/runtime/lifecyclePublication.js +416 -0
  439. package/dist/runtime/lifecyclePublication.js.map +1 -0
  440. package/dist/runtime/lifecycleSnapshot.js +439 -0
  441. package/dist/runtime/lifecycleSnapshot.js.map +1 -0
  442. package/dist/runtime/nativeResourceCleanup.js +317 -0
  443. package/dist/runtime/nativeResourceCleanup.js.map +1 -0
  444. package/dist/setup/codex/cli.js +130 -0
  445. package/dist/setup/codex/cli.js.map +1 -0
  446. package/dist/setup/codex/configToml.js +558 -0
  447. package/dist/setup/codex/configToml.js.map +1 -0
  448. package/dist/setup/codex/constants.js +14 -0
  449. package/dist/setup/codex/constants.js.map +1 -0
  450. package/dist/setup/codex/installRoot.js +64 -0
  451. package/dist/setup/codex/installRoot.js.map +1 -0
  452. package/dist/setup/codex/state.js +252 -0
  453. package/dist/setup/codex/state.js.map +1 -0
  454. package/dist/setup/codex.js +9 -1055
  455. package/dist/setup/codex.js.map +1 -1
  456. package/dist/setup/opencode.js +21 -0
  457. package/dist/setup/opencode.js.map +1 -0
  458. package/dist/setup/opencodeConstants.js +2 -0
  459. package/dist/setup/opencodeConstants.js.map +1 -0
  460. package/dist/setup/sharedSkill.js +46 -0
  461. package/dist/setup/sharedSkill.js.map +1 -0
  462. package/dist/setup/smokeChecks.js +82 -0
  463. package/dist/setup/smokeChecks.js.map +1 -0
  464. package/dist/state/archiveDiscovery.js +578 -0
  465. package/dist/state/archiveDiscovery.js.map +1 -0
  466. package/dist/state/archivePublication.js +226 -0
  467. package/dist/state/archivePublication.js.map +1 -0
  468. package/dist/state/archiveRecovery.js +238 -0
  469. package/dist/state/archiveRecovery.js.map +1 -0
  470. package/dist/state/archiveReplay.js +54 -0
  471. package/dist/state/archiveReplay.js.map +1 -0
  472. package/dist/state/canonicalMigrationRecord.js +37 -0
  473. package/dist/state/canonicalMigrationRecord.js.map +1 -0
  474. package/dist/state/decisionEntities.js +322 -0
  475. package/dist/state/decisionEntities.js.map +1 -0
  476. package/dist/state/decisionLegacyValidation.js +216 -0
  477. package/dist/state/decisionLegacyValidation.js.map +1 -0
  478. package/dist/state/decisionMigrationProvenance.js +117 -0
  479. package/dist/state/decisionMigrationProvenance.js.map +1 -0
  480. package/dist/state/decisionOverlay.js +278 -0
  481. package/dist/state/decisionOverlay.js.map +1 -0
  482. package/dist/state/decisionRevision.js +632 -0
  483. package/dist/state/decisionRevision.js.map +1 -0
  484. package/dist/state/decisionRevisionPublication.js +532 -0
  485. package/dist/state/decisionRevisionPublication.js.map +1 -0
  486. package/dist/state/directRetrieval.js +373 -0
  487. package/dist/state/directRetrieval.js.map +1 -0
  488. package/dist/state/durability.js +325 -0
  489. package/dist/state/durability.js.map +1 -0
  490. package/dist/state/entityCutover.js +294 -0
  491. package/dist/state/entityCutover.js.map +1 -0
  492. package/dist/state/entityCutoverGit.js +128 -0
  493. package/dist/state/entityCutoverGit.js.map +1 -0
  494. package/dist/state/entityMigrationCausality.js +99 -0
  495. package/dist/state/entityMigrationCausality.js.map +1 -0
  496. package/dist/state/entityMigrationPreview.js +864 -0
  497. package/dist/state/entityMigrationPreview.js.map +1 -0
  498. package/dist/state/entityPublicationContext.js +662 -0
  499. package/dist/state/entityPublicationContext.js.map +1 -0
  500. package/dist/state/entityStorage.js +881 -0
  501. package/dist/state/entityStorage.js.map +1 -0
  502. package/dist/state/experimentArchive.js +64 -0
  503. package/dist/state/experimentArchive.js.map +1 -0
  504. package/dist/state/experimentIdentity.js +203 -0
  505. package/dist/state/experimentIdentity.js.map +1 -0
  506. package/dist/state/experimentRetrieval.js +447 -0
  507. package/dist/state/experimentRetrieval.js.map +1 -0
  508. package/dist/state/healthEntities.js +266 -0
  509. package/dist/state/healthEntities.js.map +1 -0
  510. package/dist/state/healthEntityValidation.js +19 -0
  511. package/dist/state/healthEntityValidation.js.map +1 -0
  512. package/dist/state/healthRepair.js +70 -0
  513. package/dist/state/healthRepair.js.map +1 -0
  514. package/dist/state/installRoot.js +64 -24
  515. package/dist/state/installRoot.js.map +1 -1
  516. package/dist/state/legacyEntityCutoverEvidence.js +66 -0
  517. package/dist/state/legacyEntityCutoverEvidence.js.map +1 -0
  518. package/dist/state/legacyIdentity.js +48 -0
  519. package/dist/state/legacyIdentity.js.map +1 -0
  520. package/dist/state/legacySummaryRecord.js +7 -0
  521. package/dist/state/legacySummaryRecord.js.map +1 -0
  522. package/dist/state/listAccounting.js +55 -0
  523. package/dist/state/listAccounting.js.map +1 -0
  524. package/dist/state/listClassification.js +18 -0
  525. package/dist/state/listClassification.js.map +1 -0
  526. package/dist/state/listCursor.js +43 -0
  527. package/dist/state/listCursor.js.map +1 -0
  528. package/dist/state/listRetrieval.js +813 -0
  529. package/dist/state/listRetrieval.js.map +1 -0
  530. package/dist/state/migrationSourceBinding.js +31 -0
  531. package/dist/state/migrationSourceBinding.js.map +1 -0
  532. package/dist/state/objectiveExperimentEntities.js +323 -0
  533. package/dist/state/objectiveExperimentEntities.js.map +1 -0
  534. package/dist/state/planEntities.js +444 -0
  535. package/dist/state/planEntities.js.map +1 -0
  536. package/dist/state/planIdentity.js +45 -0
  537. package/dist/state/planIdentity.js.map +1 -0
  538. package/dist/state/planRetrieval.js +314 -0
  539. package/dist/state/planRetrieval.js.map +1 -0
  540. package/dist/state/planTaskRetrieval.js +285 -0
  541. package/dist/state/planTaskRetrieval.js.map +1 -0
  542. package/dist/state/progressEntities.js +360 -0
  543. package/dist/state/progressEntities.js.map +1 -0
  544. package/dist/state/projectRoot.js +63 -0
  545. package/dist/state/projectRoot.js.map +1 -0
  546. package/dist/state/projectionPolicy.js +184 -0
  547. package/dist/state/projectionPolicy.js.map +1 -0
  548. package/dist/state/retrievalAuthority.js +343 -0
  549. package/dist/state/retrievalAuthority.js.map +1 -0
  550. package/dist/state/safeProjectFile.js +153 -0
  551. package/dist/state/safeProjectFile.js.map +1 -0
  552. package/dist/state/startupAnalysis/benchmark.js +433 -0
  553. package/dist/state/startupAnalysis/benchmark.js.map +1 -0
  554. package/dist/state/startupAnalysis/contract.js +126 -0
  555. package/dist/state/startupAnalysis/contract.js.map +1 -0
  556. package/dist/state/startupAnalysis/helpers.js +287 -0
  557. package/dist/state/startupAnalysis/helpers.js.map +1 -0
  558. package/dist/state/startupAnalysis/index.js +7 -0
  559. package/dist/state/startupAnalysis/index.js.map +1 -0
  560. package/dist/state/startupAnalysis/metrics.js +341 -0
  561. package/dist/state/startupAnalysis/metrics.js.map +1 -0
  562. package/dist/state/startupAnalysis/records.js +199 -0
  563. package/dist/state/startupAnalysis/records.js.map +1 -0
  564. package/dist/state/startupAnalysis/report.js +112 -0
  565. package/dist/state/startupAnalysis/report.js.map +1 -0
  566. package/dist/state/startupAnalysis/threshold.js +513 -0
  567. package/dist/state/startupAnalysis/threshold.js.map +1 -0
  568. package/dist/state/startupAnalysis.js +2 -1952
  569. package/dist/state/startupAnalysis.js.map +1 -1
  570. package/dist/state/startupProjection.js +567 -0
  571. package/dist/state/startupProjection.js.map +1 -0
  572. package/dist/state/stateMode.js +83 -0
  573. package/dist/state/stateMode.js.map +1 -0
  574. package/dist/state/summaryEntityRead.js +26 -0
  575. package/dist/state/summaryEntityRead.js.map +1 -0
  576. package/dist/state/summaryMigrationProvenance.js +67 -0
  577. package/dist/state/summaryMigrationProvenance.js.map +1 -0
  578. package/dist/state/summarySourceRowAuthority.js +37 -0
  579. package/dist/state/summarySourceRowAuthority.js.map +1 -0
  580. package/dist/state/todoDocsEntities.js +230 -0
  581. package/dist/state/todoDocsEntities.js.map +1 -0
  582. package/dist/state/todoDocsEntityValidation.js +26 -0
  583. package/dist/state/todoDocsEntityValidation.js.map +1 -0
  584. package/dist/state/write/assign.js +21 -0
  585. package/dist/state/write/assign.js.map +1 -0
  586. package/dist/state/write/candidateMutation.js +281 -0
  587. package/dist/state/write/candidateMutation.js.map +1 -0
  588. package/dist/state/write/errors.js +12 -0
  589. package/dist/state/write/errors.js.map +1 -0
  590. package/dist/state/write/experimentPublication.js +193 -0
  591. package/dist/state/write/experimentPublication.js.map +1 -0
  592. package/dist/state/write/explain.js +291 -0
  593. package/dist/state/write/explain.js.map +1 -0
  594. package/dist/state/write/fields.js +62 -0
  595. package/dist/state/write/fields.js.map +1 -0
  596. package/dist/state/write/helpers.js +30 -0
  597. package/dist/state/write/helpers.js.map +1 -0
  598. package/dist/state/write/index.js +12 -0
  599. package/dist/state/write/index.js.map +1 -0
  600. package/dist/state/write/input.js +22 -0
  601. package/dist/state/write/input.js.map +1 -0
  602. package/dist/state/write/lock.js +838 -0
  603. package/dist/state/write/lock.js.map +1 -0
  604. package/dist/state/write/mutation.js +235 -0
  605. package/dist/state/write/mutation.js.map +1 -0
  606. package/dist/state/write/operations.js +353 -0
  607. package/dist/state/write/operations.js.map +1 -0
  608. package/dist/state/write/planEvaluation.js +121 -0
  609. package/dist/state/write/planEvaluation.js.map +1 -0
  610. package/dist/state/write/planPublication.js +135 -0
  611. package/dist/state/write/planPublication.js.map +1 -0
  612. package/dist/state/write/serialize.js +2 -0
  613. package/dist/state/write/serialize.js.map +1 -0
  614. package/dist/state/write/transaction.js +44 -0
  615. package/dist/state/write/transaction.js.map +1 -0
  616. package/dist/state/write/validate.js +8 -0
  617. package/dist/state/write/validate.js.map +1 -0
  618. package/dist/upgrade/appContentRefresh.js +384 -0
  619. package/dist/upgrade/appContentRefresh.js.map +1 -0
  620. package/dist/upgrade/appModel.js +8 -6
  621. package/dist/upgrade/appModel.js.map +1 -1
  622. package/dist/upgrade/atomicWriter.js +2 -0
  623. package/dist/upgrade/atomicWriter.js.map +1 -0
  624. package/dist/upgrade/bundleEvidence.js +34 -0
  625. package/dist/upgrade/bundleEvidence.js.map +1 -0
  626. package/dist/upgrade/channels.js +21 -10
  627. package/dist/upgrade/channels.js.map +1 -1
  628. package/dist/upgrade/coexistenceProbe.js +105 -0
  629. package/dist/upgrade/coexistenceProbe.js.map +1 -0
  630. package/dist/upgrade/compatibility.js +56 -20
  631. package/dist/upgrade/compatibility.js.map +1 -1
  632. package/dist/upgrade/doctor.js +197 -191
  633. package/dist/upgrade/doctor.js.map +1 -1
  634. package/dist/upgrade/doctorClassifier.js +188 -0
  635. package/dist/upgrade/doctorClassifier.js.map +1 -0
  636. package/dist/upgrade/installedHooksRetirement.js +197 -0
  637. package/dist/upgrade/installedHooksRetirement.js.map +1 -0
  638. package/dist/upgrade/legacyAgentCleanup.js +283 -0
  639. package/dist/upgrade/legacyAgentCleanup.js.map +1 -0
  640. package/dist/upgrade/lifecycleUpgrade.js +114 -0
  641. package/dist/upgrade/lifecycleUpgrade.js.map +1 -0
  642. package/dist/upgrade/migrateArtifactsV2ToV3.js +363 -137
  643. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +1 -1
  644. package/dist/upgrade/migrationPublication.js +123 -0
  645. package/dist/upgrade/migrationPublication.js.map +1 -0
  646. package/dist/upgrade/nextMajorDoctor.js +156 -0
  647. package/dist/upgrade/nextMajorDoctor.js.map +1 -0
  648. package/dist/upgrade/npxPlatformStatus.js +23 -0
  649. package/dist/upgrade/npxPlatformStatus.js.map +1 -0
  650. package/dist/upgrade/projectIntegration.js +142 -171
  651. package/dist/upgrade/projectIntegration.js.map +1 -1
  652. package/dist/upgrade/projectIntegrationDecision.js +51 -0
  653. package/dist/upgrade/projectIntegrationDecision.js.map +1 -0
  654. package/dist/upgrade/runtimeMigration.js +336 -281
  655. package/dist/upgrade/runtimeMigration.js.map +1 -1
  656. package/dist/upgrade/upgradeCommands.js +9 -0
  657. package/dist/upgrade/upgradeCommands.js.map +1 -1
  658. package/dist/upgrade/upgradeLock.js +86 -0
  659. package/dist/upgrade/upgradeLock.js.map +1 -0
  660. package/dist/upgrade/upgradeOrchestrator.js +212 -56
  661. package/dist/upgrade/upgradeOrchestrator.js.map +1 -1
  662. package/dist/upgrade/v3CapabilitySurface.js +15 -0
  663. package/dist/upgrade/v3CapabilitySurface.js.map +1 -0
  664. package/dist/upgrade/versionResolution.js +12 -4
  665. package/dist/upgrade/versionResolution.js.map +1 -1
  666. package/dist/validate/appHomeContract.js +5 -9
  667. package/dist/validate/appHomeContract.js.map +1 -1
  668. package/dist/validate/capability.js +144 -14
  669. package/dist/validate/capability.js.map +1 -1
  670. package/dist/validate/crossCapability.js +12 -9
  671. package/dist/validate/crossCapability.js.map +1 -1
  672. package/dist/validate/selfAudit.js +73 -36
  673. package/dist/validate/selfAudit.js.map +1 -1
  674. package/dist/validate/vocabularyAuthority.js +303 -0
  675. package/dist/validate/vocabularyAuthority.js.map +1 -0
  676. package/package.json +45 -27
  677. package/bundle/references/adapters/cursor.md +0 -213
  678. package/bundle/references/adapters/opencode.md +0 -530
  679. package/bundle/references/adapters/runtime-adapter-characterization.md +0 -79
  680. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
  681. package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -548
  682. package/bundle/references/adapters/runtime-feature-parity.md +0 -189
  683. package/bundle/references/v1-section-mapping.md +0 -47
  684. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
  685. package/bundle/skills/agentera/agents/dokumentera.toml +0 -6
  686. package/bundle/skills/agentera/agents/hej.toml +0 -6
  687. package/bundle/skills/agentera/agents/inspektera.toml +0 -6
  688. package/bundle/skills/agentera/agents/inspirera.toml +0 -6
  689. package/bundle/skills/agentera/agents/optimera.toml +0 -6
  690. package/bundle/skills/agentera/agents/orkestrera.toml +0 -6
  691. package/bundle/skills/agentera/agents/planera.toml +0 -6
  692. package/bundle/skills/agentera/agents/profilera.toml +0 -6
  693. package/bundle/skills/agentera/agents/realisera.toml +0 -6
  694. package/bundle/skills/agentera/agents/resonera.toml +0 -6
  695. package/bundle/skills/agentera/agents/visionera.toml +0 -6
  696. package/bundle/skills/agentera/agents/visualisera.toml +0 -6
  697. package/bundle/skills/agentera/capabilities/dokumentera/instructions.md +0 -428
  698. package/bundle/skills/agentera/capabilities/dokumentera/schemas/artifacts.yaml +0 -73
  699. package/bundle/skills/agentera/capabilities/dokumentera/schemas/triggers.yaml +0 -35
  700. package/bundle/skills/agentera/capabilities/hej/instructions.md +0 -331
  701. package/bundle/skills/agentera/capabilities/hej/schemas/artifacts.yaml +0 -69
  702. package/bundle/skills/agentera/capabilities/hej/schemas/triggers.yaml +0 -58
  703. package/bundle/skills/agentera/capabilities/inspektera/instructions.md +0 -514
  704. package/bundle/skills/agentera/capabilities/inspektera/schemas/artifacts.yaml +0 -76
  705. package/bundle/skills/agentera/capabilities/inspektera/schemas/triggers.yaml +0 -38
  706. package/bundle/skills/agentera/capabilities/inspirera/instructions.md +0 -280
  707. package/bundle/skills/agentera/capabilities/inspirera/schemas/artifacts.yaml +0 -24
  708. package/bundle/skills/agentera/capabilities/inspirera/schemas/triggers.yaml +0 -34
  709. package/bundle/skills/agentera/capabilities/optimera/instructions.md +0 -437
  710. package/bundle/skills/agentera/capabilities/optimera/schemas/triggers.yaml +0 -39
  711. package/bundle/skills/agentera/capabilities/orkestrera/instructions.md +0 -433
  712. package/bundle/skills/agentera/capabilities/orkestrera/schemas/artifacts.yaml +0 -64
  713. package/bundle/skills/agentera/capabilities/orkestrera/schemas/triggers.yaml +0 -42
  714. package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +0 -107
  715. package/bundle/skills/agentera/capabilities/planera/instructions.md +0 -368
  716. package/bundle/skills/agentera/capabilities/planera/schemas/artifacts.yaml +0 -62
  717. package/bundle/skills/agentera/capabilities/planera/schemas/triggers.yaml +0 -34
  718. package/bundle/skills/agentera/capabilities/planera/schemas/validation.yaml +0 -61
  719. package/bundle/skills/agentera/capabilities/profilera/instructions.md +0 -419
  720. package/bundle/skills/agentera/capabilities/profilera/schemas/triggers.yaml +0 -45
  721. package/bundle/skills/agentera/capabilities/profilera/schemas/validation.yaml +0 -57
  722. package/bundle/skills/agentera/capabilities/realisera/instructions.md +0 -403
  723. package/bundle/skills/agentera/capabilities/realisera/schemas/artifacts.yaml +0 -80
  724. package/bundle/skills/agentera/capabilities/realisera/schemas/triggers.yaml +0 -39
  725. package/bundle/skills/agentera/capabilities/resonera/instructions.md +0 -329
  726. package/bundle/skills/agentera/capabilities/resonera/schemas/artifacts.yaml +0 -47
  727. package/bundle/skills/agentera/capabilities/resonera/schemas/triggers.yaml +0 -46
  728. package/bundle/skills/agentera/capabilities/visionera/instructions.md +0 -309
  729. package/bundle/skills/agentera/capabilities/visionera/schemas/triggers.yaml +0 -41
  730. package/bundle/skills/agentera/capabilities/visualisera/instructions.md +0 -400
  731. package/bundle/skills/agentera/capabilities/visualisera/schemas/triggers.yaml +0 -33
  732. package/bundle/skills/hej/.claude-plugin/plugin.json +0 -6
  733. package/bundle/skills/hej/SKILL.md +0 -69
  734. package/bundle/skills/hej/agents/hej.toml +0 -11
  735. package/bundle/skills/hej/agents/openai.yaml +0 -8
  736. package/dist/cli/commands/backfill.js +0 -84
  737. package/dist/cli/commands/backfill.js.map +0 -1
  738. package/dist/cli/commands/state.js +0 -1012
  739. package/dist/cli/commands/state.js.map +0 -1
  740. package/dist/core/git.js +0 -43
  741. package/dist/core/git.js.map +0 -1
  742. package/dist/hooks/compaction.js +0 -935
  743. package/dist/hooks/compaction.js.map +0 -1
  744. package/dist/hooks/validateArtifact.js +0 -933
  745. package/dist/hooks/validateArtifact.js.map +0 -1
  746. package/dist/registries/runtimeAdapterRegistry.js +0 -315
  747. package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
  748. package/dist/setup/copilot.js +0 -227
  749. package/dist/setup/copilot.js.map +0 -1
  750. package/dist/setup/cursor.js +0 -127
  751. package/dist/setup/cursor.js.map +0 -1
  752. package/dist/setup/doctor.js +0 -1276
  753. package/dist/setup/doctor.js.map +0 -1
  754. package/dist/state/progressCommit.js +0 -289
  755. package/dist/state/progressCommit.js.map +0 -1
  756. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -571
  757. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
  758. package/dist/validate/lifecycleAdapters.js +0 -772
  759. package/dist/validate/lifecycleAdapters.js.map +0 -1
  760. /package/bundle/skills/agentera/capabilities/{dokumentera → document}/schemas/exit.yaml +0 -0
  761. /package/bundle/skills/agentera/capabilities/{inspirera → research}/schemas/exit.yaml +0 -0
  762. /package/bundle/skills/agentera/capabilities/{hej → status}/schemas/exit.yaml +0 -0
@@ -1,933 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import { loadYamlMapping, parseYaml } from "../core/yaml.js";
4
- import { resolvePath } from "../core/paths.js";
5
- import { resolveSourceRoot } from "../core/sourceRoot.js";
6
- import { validateProgressCommits } from "../state/progressCommit.js";
7
- import { DEFAULT_ARTIFACT_PATHS } from "./common.js";
8
- import { COMPACTABLE_YAML_ARTIFACTS, compactFile, compactYamlFile } from "./compaction.js";
9
- function schemasDirDefault() {
10
- return path.join(resolveSourceRoot(), "skills", "agentera", "schemas", "artifacts");
11
- }
12
- const AGENT_YAML_RE = /\.agentera\/([a-z_]+)\.yaml$/;
13
- const HUMAN_FACING = new Set(["TODO.md", "CHANGELOG.md", "DESIGN.md"]);
14
- const HUMAN_FACING_SCHEMA_NAMES = {
15
- "TODO.md": "todo",
16
- "CHANGELOG.md": "changelog",
17
- "DESIGN.md": "design",
18
- };
19
- const CANONICAL_SCHEMA_NAMES = {
20
- "DECISIONS.md": "decisions",
21
- "DOCS.md": "docs",
22
- "EXPERIMENTS.md": "experiments",
23
- "HEALTH.md": "health",
24
- "PLAN.md": "plan",
25
- "PROGRESS.md": "progress",
26
- "VISION.md": "vision",
27
- };
28
- const ARTIFACT_BY_SCHEMA_NAME = Object.fromEntries(Object.entries(CANONICAL_SCHEMA_NAMES).map(([a, s]) => [s, a]));
29
- const SKIP_META = new Set(["meta", "GROUP_PREFIXES", "BUDGET", "COMPACTION", "VALIDATION", "CONVENTION"]);
30
- const LIST_INDICATORS = new Set(["number", "entry", "summary"]);
31
- const SEQUENCE_KEYS_BY_ARTIFACT = {
32
- decisions: { DECISION: "decisions", ARCHIVE: "archive" },
33
- docs: { MAPPING: "mapping", INDEX: "index", AUDIT_LOG: "audit_log" },
34
- experiments: { EXPERIMENT: "experiments", ARCHIVE: "archive" },
35
- plan: { TASK: "tasks" },
36
- progress: { CYCLE: "cycles", ARCHIVE: "archive" },
37
- session: { BOOKMARK: "bookmarks" },
38
- vision: { PERSONA: "personas", PRINCIPLE: "principles" },
39
- };
40
- const NESTED_SEQUENCE_KEYS = [[["DECISION", "ALTERNATIVE"], "alternatives"]];
41
- const SEQUENCE_ORDER_BY_ARTIFACT = { "progress\0cycles": "descending" };
42
- function isMapping(v) {
43
- return v !== null && typeof v === "object" && !Array.isArray(v);
44
- }
45
- function pyTypeName(v) {
46
- if (v === null || v === undefined)
47
- return "NoneType";
48
- if (typeof v === "boolean")
49
- return "bool";
50
- if (typeof v === "number")
51
- return Number.isInteger(v) ? "int" : "float";
52
- if (typeof v === "string")
53
- return "str";
54
- if (Array.isArray(v))
55
- return "list";
56
- if (typeof v === "object")
57
- return "dict";
58
- return typeof v;
59
- }
60
- function wordCount(text) {
61
- return (text.match(/\S+/g) ?? []).length;
62
- }
63
- // ── Runtime event parsing ──────────────────────────────────────────
64
- export class ArtifactWrite {
65
- file_path;
66
- content;
67
- constructor(filePath, content = null) {
68
- this.file_path = filePath;
69
- this.content = content;
70
- }
71
- }
72
- export class RuntimeEventParser {
73
- parseClaude(data) {
74
- const ti = data.tool_input;
75
- if (!isMapping(ti))
76
- return null;
77
- const fp = ti.file_path;
78
- if (fp)
79
- return new ArtifactWrite(String(fp), ti.content ?? null);
80
- return null;
81
- }
82
- parseOpencode(data) {
83
- const inp = data.input;
84
- if (!isMapping(inp))
85
- return null;
86
- const fp = inp.path;
87
- if (fp)
88
- return new ArtifactWrite(String(fp), inp.content ?? null);
89
- return null;
90
- }
91
- parseCodex(data) {
92
- const ti = data.tool_input;
93
- if (!isMapping(ti))
94
- return null;
95
- const fp = ti.path;
96
- const patchBody = ti.patch || ti.command || "";
97
- if (fp)
98
- return new ArtifactWrite(String(fp));
99
- if (typeof patchBody === "string") {
100
- const headers = [...patchBody.matchAll(/^\*\*\*\s+(?:Add File|Update File):\s+(.+?)\s*$/gm)];
101
- if (headers.length > 0)
102
- return new ArtifactWrite(headers[0][1]);
103
- }
104
- return null;
105
- }
106
- parseCopilot(data) {
107
- const inp = data.input;
108
- if (!isMapping(inp))
109
- return null;
110
- const fp = inp.filePath || inp.file_path;
111
- if (fp)
112
- return new ArtifactWrite(String(fp), inp.content ?? null);
113
- return null;
114
- }
115
- parse(data) {
116
- const tn = data.tool_name ?? "";
117
- if (tn === "apply_patch") {
118
- const candidate = this.parseCodex(data);
119
- if (candidate)
120
- return candidate;
121
- }
122
- if (tn === "Edit" || tn === "Write" || (isMapping(data.tool_input) && "file_path" in data.tool_input)) {
123
- const candidate = this.parseClaude(data);
124
- if (candidate)
125
- return candidate;
126
- }
127
- if (isMapping(data.input)) {
128
- const inp = data.input;
129
- if ("filePath" in inp || "file_path" in inp)
130
- return this.parseCopilot(data);
131
- if ("path" in inp)
132
- return this.parseOpencode(data);
133
- }
134
- return null;
135
- }
136
- }
137
- // ── Validation helpers ─────────────────────────────────────────────
138
- function collectSingletonGroups(schema) {
139
- const result = [];
140
- for (const [gk, gv] of Object.entries(schema)) {
141
- if (SKIP_META.has(gk) || !isMapping(gv))
142
- continue;
143
- let isListOrSub = false;
144
- for (const e of Object.values(gv)) {
145
- if (isMapping(e) && (LIST_INDICATORS.has(e.field) || e.parent)) {
146
- isListOrSub = true;
147
- break;
148
- }
149
- }
150
- if (isListOrSub)
151
- continue;
152
- const fields = [];
153
- for (const e of Object.values(gv)) {
154
- if (isMapping(e) && e.required && "field" in e)
155
- fields.push(e.field);
156
- }
157
- if (fields.length > 0)
158
- result.push([gk, gk.toLowerCase(), fields]);
159
- }
160
- return result;
161
- }
162
- function isEmptyRequired(value) {
163
- if (value === null || value === undefined)
164
- return true;
165
- if (typeof value === "string")
166
- return !value.trim();
167
- if (Array.isArray(value))
168
- return value.length === 0;
169
- if (typeof value === "object")
170
- return Object.keys(value).length === 0;
171
- return false;
172
- }
173
- function* iterGroupEntries(schema, group) {
174
- const gv = schema[group];
175
- if (!isMapping(gv))
176
- return;
177
- for (const entry of Object.values(gv)) {
178
- if (isMapping(entry) && "field" in entry)
179
- yield entry;
180
- }
181
- }
182
- function validateField(violations, name, scope, field, p) {
183
- const fullPath = p ? `${p}.${field}` : field;
184
- if (!(field in scope)) {
185
- violations.push(`${name}: missing required field '${fullPath}'`);
186
- }
187
- else if (isEmptyRequired(scope[field])) {
188
- violations.push(`${name}: empty required field '${fullPath}'`);
189
- }
190
- }
191
- function allowedValues(entry) {
192
- for (const rule of entry.validation ?? []) {
193
- if (typeof rule === "string" && rule.startsWith("Must be one of: ")) {
194
- return rule.slice("Must be one of: ".length).split(",").map((v) => v.trim());
195
- }
196
- }
197
- return [];
198
- }
199
- function validateAllowedValue(violations, name, scope, entry, p) {
200
- const field = entry.field;
201
- const allowed = allowedValues(entry);
202
- if (!field || allowed.length === 0 || !(field in scope) || isEmptyRequired(scope[field]))
203
- return;
204
- const value = scope[field];
205
- if (typeof value === "string" && !allowed.includes(value)) {
206
- violations.push(`${name}: invalid value '${value}' for '${p}.${field}' (expected one of: ${allowed.join(", ")})`);
207
- }
208
- }
209
- function validateFieldType(violations, name, scope, entry, p) {
210
- const field = entry.field;
211
- if (!field || !(field in scope))
212
- return true;
213
- const value = scope[field];
214
- const expectedType = entry.type;
215
- if (!expectedType || isEmptyRequired(value))
216
- return true;
217
- const fullPath = p ? `${p}.${field}` : field;
218
- let isValid = true;
219
- if (expectedType === "integer") {
220
- if (typeof value === "boolean" || !(typeof value === "number" && Number.isInteger(value))) {
221
- violations.push(`${name}: '${fullPath}' must be an integer, got ${pyTypeName(value)}`);
222
- isValid = false;
223
- }
224
- }
225
- else if (expectedType === "string") {
226
- if (typeof value !== "string") {
227
- violations.push(`${name}: '${fullPath}' must be a string, got ${pyTypeName(value)}`);
228
- isValid = false;
229
- }
230
- }
231
- else if (expectedType === "map") {
232
- if (!isMapping(value)) {
233
- violations.push(`${name}: '${fullPath}' must be a mapping, got ${pyTypeName(value)}`);
234
- isValid = false;
235
- }
236
- }
237
- else if (expectedType === "list[string]") {
238
- if (!Array.isArray(value) || !value.every((x) => typeof x === "string")) {
239
- violations.push(`${name}: '${fullPath}' must be a list of strings`);
240
- isValid = false;
241
- }
242
- }
243
- else if (expectedType === "list[map]") {
244
- if (!Array.isArray(value) || !value.every((x) => isMapping(x))) {
245
- violations.push(`${name}: '${fullPath}' must be a list of mappings`);
246
- isValid = false;
247
- }
248
- }
249
- return isValid;
250
- }
251
- function validateFieldConstraints(violations, name, scope, entry, p) {
252
- const field = entry.field;
253
- if (!field || !(field in scope))
254
- return;
255
- const value = scope[field];
256
- for (const rule of entry.validation ?? []) {
257
- if (typeof rule !== "string")
258
- continue;
259
- if (rule === "Must be a positive integer") {
260
- if (typeof value === "boolean" || !(typeof value === "number" && Number.isInteger(value)) || value <= 0) {
261
- const fullPath = p ? `${p}.${field}` : field;
262
- violations.push(`${name}: '${fullPath}' must be a positive integer`);
263
- }
264
- }
265
- }
266
- }
267
- function validateRequiredFields(violations, name, schema, group, scope, p) {
268
- for (const entry of iterGroupEntries(schema, group)) {
269
- const field = entry.field;
270
- if (entry.parent || field === "entry")
271
- continue;
272
- if (entry.required)
273
- validateField(violations, name, scope, field, p);
274
- if (field in scope && !isEmptyRequired(scope[field])) {
275
- if (validateFieldType(violations, name, scope, entry, p)) {
276
- validateAllowedValue(violations, name, scope, entry, p);
277
- validateFieldConstraints(violations, name, scope, entry, p);
278
- }
279
- }
280
- const value = scope[field];
281
- if (isMapping(value)) {
282
- for (const child of entry.children ?? []) {
283
- if (isMapping(child) && child.field) {
284
- const childField = child.field;
285
- const childPath = p ? `${p}.${field}` : field;
286
- if (child.required)
287
- validateField(violations, name, value, childField, childPath);
288
- if (childField in value && !isEmptyRequired(value[childField])) {
289
- if (validateFieldType(violations, name, value, child, childPath)) {
290
- validateAllowedValue(violations, name, value, child, childPath);
291
- validateFieldConstraints(violations, name, value, child, childPath);
292
- }
293
- }
294
- }
295
- }
296
- }
297
- }
298
- }
299
- function validateSingletonGroup(violations, name, schema, group, scope, p) {
300
- for (const entry of iterGroupEntries(schema, group)) {
301
- const field = entry.field;
302
- if (entry.parent || field === "entry")
303
- continue;
304
- if (entry.required)
305
- validateField(violations, name, scope, field, p);
306
- if (field in scope && !isEmptyRequired(scope[field])) {
307
- if (validateFieldType(violations, name, scope, entry, p)) {
308
- validateAllowedValue(violations, name, scope, entry, p);
309
- validateFieldConstraints(violations, name, scope, entry, p);
310
- }
311
- }
312
- }
313
- }
314
- function schemaFieldNames(schema, group) {
315
- const out = new Set();
316
- for (const entry of iterGroupEntries(schema, group)) {
317
- if (entry.field && !entry.parent && entry.field !== "entry")
318
- out.add(entry.field);
319
- }
320
- return out;
321
- }
322
- function validateUnknownFields(violations, name, scope, allowed, p) {
323
- for (const field of Object.keys(scope)) {
324
- if (!allowed.has(field)) {
325
- const fullPath = p ? `${p}.${field}` : field;
326
- violations.push(`${name}: unsupported field '${fullPath}'`);
327
- }
328
- }
329
- }
330
- function validatePlanKnownFields(data, schema, violations) {
331
- const groupedScopes = { header: "HEADER", scope: "SCOPE" };
332
- const sequenceKeys = new Set(Object.values(SEQUENCE_KEYS_BY_ARTIFACT.plan ?? {}));
333
- const allowedTopLevel = new Set([
334
- ...schemaFieldNames(schema, "PLAN"),
335
- ...Object.keys(groupedScopes),
336
- ...sequenceKeys,
337
- ]);
338
- validateUnknownFields(violations, "plan", data, allowedTopLevel, "");
339
- for (const [key, group] of Object.entries(groupedScopes)) {
340
- const scope = data[key];
341
- if (isMapping(scope)) {
342
- validateUnknownFields(violations, "plan", scope, schemaFieldNames(schema, group), key);
343
- }
344
- }
345
- }
346
- function validateFullPlanContract(data, violations) {
347
- const header = isMapping(data.header) ? data.header : {};
348
- if (String(header.level ?? "").toLowerCase() !== "full")
349
- return;
350
- for (const field of ["reviewed", "critic_issues"]) {
351
- validateField(violations, "plan", header, field, "header");
352
- }
353
- validateField(violations, "plan", data, "design", "");
354
- const criticIssues = header.critic_issues;
355
- if (!isEmptyRequired(criticIssues)) {
356
- const match = /^\s*(\d+)\s+found,\s*(\d+)\s+addressed,\s*(\d+)\s+dismissed\s*$/.exec(String(criticIssues));
357
- if (!match) {
358
- violations.push("plan: header.critic_issues must match 'N found, M addressed, K dismissed'");
359
- }
360
- else {
361
- const [found, addressed, dismissed] = [match[1], match[2], match[3]].map((v) => parseInt(v, 10));
362
- if (found < 1)
363
- violations.push("plan: header.critic_issues must record at least 1 found issue");
364
- if (addressed + dismissed !== found) {
365
- violations.push("plan: header.critic_issues counts must satisfy addressed + dismissed == found");
366
- }
367
- }
368
- }
369
- const tasks = data.tasks;
370
- if (!Array.isArray(tasks))
371
- return;
372
- tasks.forEach((task, index) => {
373
- if (isMapping(task))
374
- validateField(violations, "plan", task, "acceptance", `tasks[${index}]`);
375
- });
376
- }
377
- function entryMinCount(schema, group) {
378
- for (const entry of iterGroupEntries(schema, group)) {
379
- if (entry.field === "entry" && entry.required)
380
- return entry.min_count || 1;
381
- }
382
- return null;
383
- }
384
- function parentRequirements(schema, parentGroup) {
385
- const requirements = {};
386
- const prefix = `${parentGroup}.`;
387
- for (const group of Object.keys(schema)) {
388
- if (SKIP_META.has(group))
389
- continue;
390
- for (const entry of iterGroupEntries(schema, group)) {
391
- const parent = entry.parent;
392
- if (typeof parent === "string" &&
393
- parent.startsWith(prefix) &&
394
- parent !== `${group}.entry` &&
395
- entry.required &&
396
- entry.field) {
397
- const parentField = parent.slice(prefix.length);
398
- (requirements[parentField] ??= []).push(entry.field);
399
- }
400
- }
401
- }
402
- return requirements;
403
- }
404
- function entryRequirements(schema, group) {
405
- const parent = `${group}.entry`;
406
- const out = [];
407
- for (const entry of iterGroupEntries(schema, group)) {
408
- if (entry.parent === parent && entry.required && entry.field)
409
- out.push(entry.field);
410
- }
411
- return out;
412
- }
413
- function validateSequences(data, schema, name, violations) {
414
- for (const [group, key] of Object.entries(SEQUENCE_KEYS_BY_ARTIFACT[name] ?? {})) {
415
- const seq = data[key];
416
- if (seq === null || seq === undefined)
417
- continue;
418
- if (!Array.isArray(seq)) {
419
- violations.push(`${name}: '${key}' must be a list`);
420
- continue;
421
- }
422
- if (seq.length === 0) {
423
- violations.push(`${name}: '${key}' requires at least 1 entry`);
424
- continue;
425
- }
426
- const childRequirements = parentRequirements(schema, group);
427
- seq.forEach((item, index) => {
428
- const p = `${key}[${index}]`;
429
- if (!isMapping(item)) {
430
- violations.push(`${name}: '${p}' must be a mapping`);
431
- return;
432
- }
433
- validateRequiredFields(violations, name, schema, group, item, p);
434
- for (const [parentField, childFields] of Object.entries(childRequirements)) {
435
- const childScope = item[parentField];
436
- if (!isMapping(childScope))
437
- continue;
438
- for (const childField of childFields) {
439
- validateField(violations, name, childScope, childField, `${p}.${parentField}`);
440
- }
441
- }
442
- for (const [[parentGroup, childGroup], childKey] of NESTED_SEQUENCE_KEYS) {
443
- if (parentGroup !== group)
444
- continue;
445
- const childSeq = item[childKey];
446
- const minCount = entryMinCount(schema, childGroup);
447
- if (minCount && (!Array.isArray(childSeq) || childSeq.length < minCount)) {
448
- violations.push(`${name}: '${p}.${childKey}' requires at least ${minCount} entry`);
449
- continue;
450
- }
451
- if (!Array.isArray(childSeq))
452
- continue;
453
- const required = entryRequirements(schema, childGroup);
454
- childSeq.forEach((child, childIndex) => {
455
- const childPath = `${p}.${childKey}[${childIndex}]`;
456
- if (!isMapping(child)) {
457
- violations.push(`${name}: '${childPath}' must be a mapping`);
458
- return;
459
- }
460
- for (const field of required)
461
- validateField(violations, name, child, field, childPath);
462
- });
463
- }
464
- });
465
- }
466
- }
467
- function validateDecisionAlternatives(data, name) {
468
- const violations = [];
469
- (data.decisions ?? []).forEach((decision, index) => {
470
- if (!isMapping(decision))
471
- return;
472
- const alternatives = decision.alternatives ?? [];
473
- if (!Array.isArray(alternatives))
474
- return;
475
- const chosen = alternatives.filter((alt) => isMapping(alt) && alt.status === "chosen");
476
- if (chosen.length !== 1) {
477
- violations.push(`${name}: 'decisions[${index}].alternatives' must have exactly one chosen entry`);
478
- }
479
- });
480
- return violations;
481
- }
482
- function validateDecisionSatisfaction(data, name) {
483
- const violations = [];
484
- const allowedStates = new Set(["open", "provisionally_satisfied", "user_confirmed_satisfied"]);
485
- const entries = [
486
- ...(data.decisions ?? []).map((d, i) => [`decisions[${i}]`, d]),
487
- ...(data.archive ?? []).map((d, i) => [`archive[${i}]`, d]),
488
- ];
489
- for (const [entryPath, decision] of entries) {
490
- if (!isMapping(decision) || !("satisfaction" in decision))
491
- continue;
492
- const p = `${entryPath}.satisfaction`;
493
- const satisfaction = decision.satisfaction;
494
- if (!isMapping(satisfaction)) {
495
- violations.push(`${name}: '${p}' must be a mapping`);
496
- continue;
497
- }
498
- validateUnknownFields(violations, name, satisfaction, new Set(["state", "evidence", "user_confirmation"]), p);
499
- const state = satisfaction.state;
500
- if (typeof state !== "string" || !state.trim()) {
501
- violations.push(`${name}: missing required field '${p}.state'`);
502
- continue;
503
- }
504
- if (!allowedStates.has(state)) {
505
- violations.push(`${name}: invalid value '${state}' for '${p}.state' (expected one of: open, provisionally_satisfied, user_confirmed_satisfied)`);
506
- continue;
507
- }
508
- if (state === "provisionally_satisfied" && isEmptyRequired(satisfaction.evidence)) {
509
- violations.push(`${name}: '${p}.evidence' is required for provisionally_satisfied`);
510
- }
511
- if (state === "user_confirmed_satisfied") {
512
- const confirmation = satisfaction.user_confirmation;
513
- if (confirmation === null || confirmation === undefined) {
514
- violations.push(`${name}: '${p}.user_confirmation' is required for user_confirmed_satisfied`);
515
- continue;
516
- }
517
- if (!isMapping(confirmation)) {
518
- violations.push(`${name}: '${p}.user_confirmation' must be a mapping with confirmed_by and confirmed_at, got ${pyTypeName(confirmation)}`);
519
- continue;
520
- }
521
- for (const field of ["confirmed_by", "confirmed_at"]) {
522
- if (isEmptyRequired(confirmation[field])) {
523
- violations.push(`${name}: missing required field '${p}.user_confirmation.${field}'`);
524
- }
525
- }
526
- }
527
- }
528
- return violations;
529
- }
530
- function validationRuleSeverity(schema, rule) {
531
- for (const groupKey of ["VALIDATION", "VALIDATION_RULES"]) {
532
- for (const entry of Object.values(schema[groupKey] ?? {})) {
533
- if (isMapping(entry) && entry.rule === rule) {
534
- const severity = entry.severity;
535
- return severity ? String(severity) : null;
536
- }
537
- }
538
- }
539
- return null;
540
- }
541
- function expectedSequenceOrder(name, key) {
542
- return SEQUENCE_ORDER_BY_ARTIFACT[`${name}\0${key}`] ?? "ascending";
543
- }
544
- function sequenceInOrder(nums, direction) {
545
- const reverse = direction === "descending";
546
- const sorted = [...nums].sort((a, b) => (reverse ? b - a : a - b));
547
- return nums.length === sorted.length && nums.every((n, i) => n === sorted[i]);
548
- }
549
- function validateYamlContent(content, schema, name) {
550
- const violations = [];
551
- let data;
552
- try {
553
- data = parseYaml(content);
554
- }
555
- catch (exc) {
556
- return [`${name}: invalid YAML: ${exc.message}`];
557
- }
558
- if (!isMapping(data)) {
559
- return [`${name}: root must be a mapping`];
560
- }
561
- for (const [group, groupLower, fields] of collectSingletonGroups(schema)) {
562
- let scope;
563
- if (groupLower in data && isMapping(data[groupLower])) {
564
- scope = data[groupLower];
565
- }
566
- else if (fields.some((f) => f in data)) {
567
- scope = data;
568
- }
569
- else {
570
- continue;
571
- }
572
- validateSingletonGroup(violations, name, schema, group, scope, groupLower);
573
- }
574
- if (name === "plan") {
575
- validatePlanKnownFields(data, schema, violations);
576
- validateFullPlanContract(data, violations);
577
- }
578
- validateSequences(data, schema, name, violations);
579
- if (name === "decisions") {
580
- violations.push(...validateDecisionAlternatives(data, name));
581
- violations.push(...validateDecisionSatisfaction(data, name));
582
- }
583
- const wordBudgetSeverity = validationRuleSeverity(schema, "word_budget");
584
- for (const be of Object.values(schema.BUDGET ?? {})) {
585
- if (!isMapping(be))
586
- continue;
587
- const mw = be.max_words;
588
- const scope = be.scope ?? "";
589
- if (mw && String(scope).includes("full_file") && wordBudgetSeverity === "error") {
590
- const wc = wordCount(content);
591
- if (wc > mw)
592
- violations.push(`${name}: word count (${wc}) exceeds budget (${mw})`);
593
- }
594
- }
595
- for (const groupKey of ["VALIDATION", "VALIDATION_RULES"]) {
596
- for (const ve of Object.values(schema[groupKey] ?? {})) {
597
- if (!isMapping(ve))
598
- continue;
599
- const rule = ve.rule ?? "";
600
- if (ve.severity !== "error")
601
- continue;
602
- if (rule.includes("unique") && rule.includes("number")) {
603
- for (const [key, val] of Object.entries(data)) {
604
- if (Array.isArray(val)) {
605
- const nums = val.filter((e) => isMapping(e) && "number" in e).map((e) => e.number);
606
- if (nums.length > 0) {
607
- if (nums.length !== new Set(nums).size) {
608
- violations.push(`${name}: duplicate numbers in '${key}'`);
609
- }
610
- const direction = expectedSequenceOrder(name, key);
611
- if (!sequenceInOrder(nums, direction)) {
612
- violations.push(`${name}: '${key}' not in ${direction} order`);
613
- }
614
- }
615
- }
616
- }
617
- }
618
- else if (rule === "closure_consistency") {
619
- const header = isMapping(data.header) ? data.header : {};
620
- const status = data.status ?? header.status;
621
- if (typeof status === "string" && status === "closed") {
622
- for (const field of ["closed_at", "final_value", "target_ref", "reason"]) {
623
- let val = data[field];
624
- if (val === null || val === undefined)
625
- val = header[field];
626
- if (val === null || val === undefined || (typeof val === "string" && !val.trim())) {
627
- violations.push(`${name}: closure field '${field}' is required when status is 'closed'`);
628
- }
629
- }
630
- }
631
- }
632
- }
633
- }
634
- return violations;
635
- }
636
- function validateMd(content, name, schema = null) {
637
- const violations = [];
638
- if (!content.trim())
639
- violations.push(`${name}: empty content`);
640
- const fences = (content.match(/^```/gm) ?? []).length;
641
- if (fences % 2)
642
- violations.push(`${name}: unclosed code fence`);
643
- if (schema)
644
- violations.push(...validateMdSchema(content, name, schema));
645
- return violations;
646
- }
647
- function validateMdSchema(content, name, schema) {
648
- const violations = [];
649
- if (!content.trim())
650
- return violations;
651
- for (const [groupKey, groupValue] of Object.entries(schema)) {
652
- if (SKIP_META.has(groupKey) || !isMapping(groupValue))
653
- continue;
654
- const hasRequired = Object.values(groupValue).some((e) => isMapping(e) && e.required && e.field);
655
- if (!hasRequired)
656
- continue;
657
- if (groupKey === "ITEM")
658
- validateMdItems(content, name, violations);
659
- else if (groupKey === "RELEASE")
660
- validateMdReleases(content, name, violations);
661
- else if (groupKey === "TOKEN")
662
- validateMdTokens(content, name, violations);
663
- }
664
- return violations;
665
- }
666
- function validateMdItems(content, name, violations) {
667
- const versionHeading = /^##\s+/m.exec(content);
668
- if (!versionHeading) {
669
- violations.push(`${name}: missing severity sections (expected '## <glyph> <name>' headings)`);
670
- return;
671
- }
672
- const severityGlyphs = ["⇶", "⇉", "→", "⇢"];
673
- let found = false;
674
- for (const glyph of severityGlyphs) {
675
- const g = glyph.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
676
- if (new RegExp(`^##\\s*${g}`, "m").test(content)) {
677
- found = true;
678
- const sectionStart = new RegExp(`^##\\s*${g}.+$`, "m").exec(content);
679
- if (sectionStart) {
680
- const idx = sectionStart.index + sectionStart[0].length;
681
- const nextSection = content.indexOf("\n##", idx);
682
- const sectionBody = nextSection >= 0 ? content.slice(idx, nextSection) : content.slice(idx);
683
- if (!/^\s*-/m.test(sectionBody)) {
684
- const headingSlice = content.slice(sectionStart.index, sectionStart.index + sectionStart[0].length);
685
- const glyphNameMatch = new RegExp(`^##\\s*(${g}.+)$`, "m").exec(headingSlice);
686
- const headingText = glyphNameMatch ? glyphNameMatch[1] : glyph;
687
- violations.push(`${name}: severity section '${headingText}' has no list entries (expected '- [type]' items)`);
688
- }
689
- }
690
- }
691
- }
692
- if (!found) {
693
- violations.push(`${name}: missing severity glyph in section headings (expected '## ⇶ Critical', '## ⇉ Degraded', '## → Normal', '## ⇢ Annoying')`);
694
- }
695
- }
696
- function validateMdReleases(content, name, violations) {
697
- if (!/^##\s*\[/m.test(content)) {
698
- violations.push(`${name}: missing version header (expected '## [X.Y.Z]')`);
699
- }
700
- const changeSections = new Set(["### Added", "### Changed", "### Fixed", "### Removed"]);
701
- const lines = new Set(content.split("\n"));
702
- if (![...changeSections].some((s) => lines.has(s))) {
703
- violations.push(`${name}: missing change sections (expected '### Added', '### Changed', '### Fixed', or '### Removed')`);
704
- }
705
- }
706
- function validateMdTokens(content, name, violations) {
707
- if (!/^##\s/m.test(content)) {
708
- violations.push(`${name}: missing section heading (expected '## SectionName')`);
709
- }
710
- const yamlBlocks = (content.match(/^```yaml\s*$/gm) ?? []).length;
711
- if (!yamlBlocks) {
712
- violations.push(`${name}: missing YAML code block with token definitions (expected '\`\`\`yaml')`);
713
- }
714
- }
715
- // ── Path resolution ────────────────────────────────────────────────
716
- function resolvePathRel(fp, cwd) {
717
- return path.isAbsolute(fp) ? fp : path.join(cwd, fp);
718
- }
719
- function docsPathOverrides(cwd) {
720
- const docsPath = path.join(cwd, ".agentera", "docs.yaml");
721
- if (!fs.existsSync(docsPath) || !fs.statSync(docsPath).isFile())
722
- return {};
723
- let data;
724
- try {
725
- data = loadYamlMapping(fs.readFileSync(docsPath, "utf8"));
726
- }
727
- catch (exc) {
728
- process.stderr.write(`warning: failed to load docs path overrides: ${exc.message}\n`);
729
- return {};
730
- }
731
- const mapping = data.mapping;
732
- if (!Array.isArray(mapping))
733
- return {};
734
- const overrides = {};
735
- for (const entry of mapping) {
736
- if (!isMapping(entry))
737
- continue;
738
- const artifact = entry.artifact;
739
- const p = entry.path;
740
- if (typeof artifact === "string" && typeof p === "string")
741
- overrides[artifact] = p;
742
- }
743
- return overrides;
744
- }
745
- function defaultArtifactPath(artifact, cwd) {
746
- const rel = docsPathOverrides(cwd)[artifact] ?? DEFAULT_ARTIFACT_PATHS[artifact] ?? "";
747
- return rel ? resolvePathRel(rel, cwd) : "";
748
- }
749
- function artifactPaths(cwd) {
750
- const paths = { ...DEFAULT_ARTIFACT_PATHS, ...docsPathOverrides(cwd) };
751
- const resolved = {};
752
- for (const [artifact, p] of Object.entries(paths))
753
- resolved[artifact] = resolvePathRel(p, cwd);
754
- return resolved;
755
- }
756
- function samePath(left, right) {
757
- return resolvePath(left) === resolvePath(right);
758
- }
759
- function artifactForWrite(absPath, relPath, basename, cwd) {
760
- for (const [artifact, mappedPath] of Object.entries(artifactPaths(cwd))) {
761
- if (samePath(absPath, mappedPath))
762
- return artifact;
763
- }
764
- const match = AGENT_YAML_RE.exec(relPath);
765
- if (match)
766
- return ARTIFACT_BY_SCHEMA_NAME[match[1]] ?? null;
767
- if (HUMAN_FACING.has(basename))
768
- return basename;
769
- return null;
770
- }
771
- function readIfNeeded(content, absPath) {
772
- if (content !== null && content !== undefined)
773
- return content;
774
- try {
775
- return fs.readFileSync(absPath, "utf8");
776
- }
777
- catch {
778
- return null;
779
- }
780
- }
781
- function compactAfterValidWrite(artifact, absPath) {
782
- if (!fs.existsSync(absPath))
783
- return [];
784
- try {
785
- if (artifact === "TODO.md") {
786
- compactFile(absPath, "todo-resolved");
787
- }
788
- else if (artifact in COMPACTABLE_YAML_ARTIFACTS) {
789
- compactYamlFile(absPath, artifact);
790
- }
791
- else {
792
- return [];
793
- }
794
- }
795
- catch (exc) {
796
- return [`${artifact}: compaction failed: ${exc.message}`];
797
- }
798
- return [];
799
- }
800
- // ── Validator + adapter ────────────────────────────────────────────
801
- export class ArtifactSchemaValidator {
802
- schemasDir;
803
- schemaCache;
804
- constructor(schemasDir = schemasDirDefault()) {
805
- this.schemasDir = schemasDir;
806
- this.schemaCache = new Map();
807
- }
808
- loadSchema(name) {
809
- if (!this.schemaCache.has(name)) {
810
- const p = path.join(this.schemasDir, `${name}.yaml`);
811
- if (fs.existsSync(p) && fs.statSync(p).isFile()) {
812
- this.schemaCache.set(name, loadYamlMapping(fs.readFileSync(p, "utf8")));
813
- }
814
- else {
815
- this.schemaCache.set(name, null);
816
- }
817
- }
818
- return this.schemaCache.get(name) ?? null;
819
- }
820
- validateYaml(content, schema, name) {
821
- return validateYamlContent(content, schema, name);
822
- }
823
- validateMarkdown(content, name, schema = null) {
824
- return validateMd(content, name, schema);
825
- }
826
- validateWrite(write, cwd) {
827
- const absPath = resolvePathRel(write.file_path, cwd);
828
- const rel = path.relative(cwd, absPath).replace(/\\/g, "/");
829
- const basename = path.basename(absPath);
830
- const artifact = artifactForWrite(absPath, rel, basename, cwd);
831
- if (artifact && artifact in CANONICAL_SCHEMA_NAMES) {
832
- const name = CANONICAL_SCHEMA_NAMES[artifact];
833
- const schema = this.loadSchema(name);
834
- if (schema === null)
835
- return [];
836
- if (Object.keys(schema).length === 0)
837
- return [`${name}: schema file is empty or contains no valid definitions`];
838
- const content = readIfNeeded(write.content, absPath);
839
- if (content === null)
840
- return [];
841
- let violations = this.validateYaml(content, schema, name);
842
- if (name === "progress")
843
- violations = violations.concat(validateProgressCommits(content, cwd));
844
- if (violations.length > 0)
845
- return violations;
846
- return compactAfterValidWrite(artifact, absPath);
847
- }
848
- if (artifact && HUMAN_FACING.has(artifact)) {
849
- const content = readIfNeeded(write.content, absPath);
850
- if (content === null)
851
- return [];
852
- const schemaName = HUMAN_FACING_SCHEMA_NAMES[artifact];
853
- const schema = schemaName ? this.loadSchema(schemaName) : null;
854
- const violations = this.validateMarkdown(content, artifact, schema);
855
- if (violations.length > 0)
856
- return violations;
857
- return compactAfterValidWrite(artifact, absPath);
858
- }
859
- return [];
860
- }
861
- validateExplicit(artifact, filePath, cwd) {
862
- const content = readIfNeeded(null, filePath);
863
- if (content === null)
864
- return [`${artifact}: cannot read artifact file '${filePath}'`];
865
- if (artifact in CANONICAL_SCHEMA_NAMES) {
866
- const name = CANONICAL_SCHEMA_NAMES[artifact];
867
- const schema = this.loadSchema(name);
868
- if (schema === null)
869
- return [`${artifact}: schema '${name}' is not available`];
870
- if (Object.keys(schema).length === 0)
871
- return [`${artifact}: schema '${name}' file is empty or contains no valid definitions`];
872
- let violations = this.validateYaml(content, schema, name);
873
- if (name === "progress")
874
- violations = violations.concat(validateProgressCommits(content, cwd));
875
- return violations;
876
- }
877
- if (HUMAN_FACING.has(artifact)) {
878
- const schemaName = HUMAN_FACING_SCHEMA_NAMES[artifact];
879
- const schema = schemaName ? this.loadSchema(schemaName) : null;
880
- return this.validateMarkdown(content, artifact, schema);
881
- }
882
- return [
883
- `${artifact}: unsupported artifact; expected one of: ${Object.keys(DEFAULT_ARTIFACT_PATHS).sort().join(", ")}`,
884
- ];
885
- }
886
- }
887
- export function loadSchema(name) {
888
- return new ArtifactSchemaValidator().loadSchema(name);
889
- }
890
- export class HookCliAdapter {
891
- parser;
892
- validator;
893
- constructor(parser, validator) {
894
- this.parser = parser ?? new RuntimeEventParser();
895
- this.validator = validator ?? new ArtifactSchemaValidator();
896
- }
897
- run(raw, defaultCwd = null) {
898
- let data;
899
- try {
900
- if (!raw.trim())
901
- return [0, []];
902
- data = JSON.parse(raw);
903
- }
904
- catch {
905
- return [0, []];
906
- }
907
- if (!isMapping(data))
908
- return [0, []];
909
- const write = this.parser.parse(data);
910
- if (write === null)
911
- return [0, []];
912
- const cwd = data.cwd ?? defaultCwd ?? process.cwd();
913
- const violations = this.validator.validateWrite(write, cwd);
914
- return violations.length > 0 ? [2, violations] : [0, []];
915
- }
916
- runExplicit(artifact, filePath, cwd) {
917
- artifact = artifact.trim();
918
- const defaultPath = defaultArtifactPath(artifact, cwd);
919
- const resolvedFile = filePath ? resolvePathRel(filePath, cwd) : defaultPath;
920
- const violations = this.validator.validateExplicit(artifact, resolvedFile, cwd);
921
- const payload = {
922
- command: "validate-artifact",
923
- status: violations.length > 0 ? "fail" : "pass",
924
- artifact,
925
- file: resolvedFile,
926
- docs_mapped_default: defaultPath || null,
927
- path_source: filePath ? "provided" : "docs_mapped_default",
928
- violations,
929
- };
930
- return violations.length > 0 ? [2, payload] : [0, payload];
931
- }
932
- }
933
- //# sourceMappingURL=validateArtifact.js.map