agentera 3.0.0-dev.5 → 3.0.0-next.1

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 (336) hide show
  1. package/README.md +4 -3
  2. package/bundle/extract-corpus-parity.json +23 -0
  3. package/bundle/references/adapters/cursor.md +9 -8
  4. package/bundle/references/adapters/opencode.md +1 -1
  5. package/bundle/references/adapters/package-registry.yaml +0 -1
  6. package/bundle/references/adapters/package-surface-characterization.md +1 -2
  7. package/bundle/references/analysis/startup-measurement-contract.yaml +15 -15
  8. package/bundle/references/cli/audience-namespace-cli-migration.yaml +40 -26
  9. package/bundle/references/cli/bundle-skill-vocabulary.yaml +1 -29
  10. package/bundle/references/cli/coexistence-probe.yaml +9 -0
  11. package/bundle/references/cli/parity-expected-actual-template.md +30 -0
  12. package/bundle/references/cli/single-name-protocol.yaml +42 -0
  13. package/bundle/references/cli/update-channels.yaml +16 -0
  14. package/bundle/references/cli/upgrade-repair-wording.md +31 -0
  15. package/bundle/references/cli/v3-handoff-manifest.schema.yaml +98 -0
  16. package/bundle/references/cli/vocabulary-index.yaml +6 -4
  17. package/bundle/references/cli/vocabulary.md +307 -301
  18. package/bundle/references/meta/documentation-inventory.md +9 -3
  19. package/bundle/skills/agentera/SKILL.md +49 -41
  20. package/bundle/skills/agentera/capabilities/hej/schemas/artifacts.yaml +4 -1
  21. package/bundle/skills/agentera/capabilities/profilera/schemas/exit.yaml +2 -1
  22. package/bundle/skills/agentera/capability_schema_contract.yaml +28 -0
  23. package/bundle/skills/agentera/references/contract.md +324 -315
  24. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +38 -33
  25. package/dist/analytics/extractCorpus/cli.js +149 -0
  26. package/dist/analytics/extractCorpus/cli.js.map +1 -0
  27. package/dist/analytics/extractCorpus/copilotSessions.js +273 -0
  28. package/dist/analytics/extractCorpus/copilotSessions.js.map +1 -0
  29. package/dist/analytics/extractCorpus/core.js +363 -0
  30. package/dist/analytics/extractCorpus/core.js.map +1 -0
  31. package/dist/analytics/extractCorpus/corpus.js +145 -0
  32. package/dist/analytics/extractCorpus/corpus.js.map +1 -0
  33. package/dist/analytics/extractCorpus/coverageAudit.js +261 -0
  34. package/dist/analytics/extractCorpus/coverageAudit.js.map +1 -0
  35. package/dist/analytics/extractCorpus/cursorSessions.js +423 -0
  36. package/dist/analytics/extractCorpus/cursorSessions.js.map +1 -0
  37. package/dist/analytics/extractCorpus/extractCorpusParity.js +105 -0
  38. package/dist/analytics/extractCorpus/extractCorpusParity.js.map +1 -0
  39. package/dist/analytics/extractCorpus/filesystemSources.js +122 -0
  40. package/dist/analytics/extractCorpus/filesystemSources.js.map +1 -0
  41. package/dist/analytics/extractCorpus/index.js +12 -0
  42. package/dist/analytics/extractCorpus/index.js.map +1 -0
  43. package/dist/analytics/extractCorpus/jsonlSessions.js +185 -0
  44. package/dist/analytics/extractCorpus/jsonlSessions.js.map +1 -0
  45. package/dist/analytics/extractCorpus/sqliteCaps.js +44 -0
  46. package/dist/analytics/extractCorpus/sqliteCaps.js.map +1 -0
  47. package/dist/analytics/extractCorpus/sqliteSessions.js +368 -0
  48. package/dist/analytics/extractCorpus/sqliteSessions.js.map +1 -0
  49. package/dist/analytics/extractCorpus.js +2 -1790
  50. package/dist/analytics/extractCorpus.js.map +1 -1
  51. package/dist/analytics/usageStats.js +1 -1
  52. package/dist/analytics/usageStats.js.map +1 -1
  53. package/dist/capabilities/inspirera/instructions.js +1 -1
  54. package/dist/capabilities/inspirera/instructions.js.map +1 -1
  55. package/dist/capabilities/planera/instructions.js +1 -1
  56. package/dist/capabilities/planera/instructions.js.map +1 -1
  57. package/dist/capabilities/profilera/instructions.js +1 -1
  58. package/dist/capabilities/profilera/instructions.js.map +1 -1
  59. package/dist/capabilities/realisera/instructions.js +1 -1
  60. package/dist/capabilities/realisera/instructions.js.map +1 -1
  61. package/dist/capabilities/resonera/instructions.js +1 -1
  62. package/dist/capabilities/resonera/instructions.js.map +1 -1
  63. package/dist/capabilities/visionera/instructions.js +1 -1
  64. package/dist/capabilities/visionera/instructions.js.map +1 -1
  65. package/dist/capabilities/visualisera/instructions.js +3 -4
  66. package/dist/capabilities/visualisera/instructions.js.map +1 -1
  67. package/dist/cli/appContext.js +2 -14
  68. package/dist/cli/appContext.js.map +1 -1
  69. package/dist/cli/capabilityContext/benchmark.js +557 -0
  70. package/dist/cli/capabilityContext/benchmark.js.map +1 -0
  71. package/dist/cli/capabilityContext/bespoke.js +25 -0
  72. package/dist/cli/capabilityContext/bespoke.js.map +1 -0
  73. package/dist/cli/capabilityContext/closeout.js +230 -0
  74. package/dist/cli/capabilityContext/closeout.js.map +1 -0
  75. package/dist/cli/capabilityContext/contract.js +186 -0
  76. package/dist/cli/capabilityContext/contract.js.map +1 -0
  77. package/dist/cli/capabilityContext/evidence.js +446 -0
  78. package/dist/cli/capabilityContext/evidence.js.map +1 -0
  79. package/dist/cli/capabilityContext/index.js +4 -0
  80. package/dist/cli/capabilityContext/index.js.map +1 -0
  81. package/dist/cli/capabilityContext/orchestration.js +107 -0
  82. package/dist/cli/capabilityContext/orchestration.js.map +1 -0
  83. package/dist/cli/capabilityContext/planState.js +271 -0
  84. package/dist/cli/capabilityContext/planState.js.map +1 -0
  85. package/dist/cli/capabilityContext/progress.js +96 -0
  86. package/dist/cli/capabilityContext/progress.js.map +1 -0
  87. package/dist/cli/capabilityContext/realisera.js +174 -0
  88. package/dist/cli/capabilityContext/realisera.js.map +1 -0
  89. package/dist/cli/capabilityContext/shared.js +94 -0
  90. package/dist/cli/capabilityContext/shared.js.map +1 -0
  91. package/dist/cli/capabilityContext/slim.js +106 -0
  92. package/dist/cli/capabilityContext/slim.js.map +1 -0
  93. package/dist/cli/capabilityContext/startup.js +208 -0
  94. package/dist/cli/capabilityContext/startup.js.map +1 -0
  95. package/dist/cli/capabilityContext/types.js +43 -0
  96. package/dist/cli/capabilityContext/types.js.map +1 -0
  97. package/dist/cli/capabilityContext.js +1 -2486
  98. package/dist/cli/capabilityContext.js.map +1 -1
  99. package/dist/cli/commands/appHome.js +23 -0
  100. package/dist/cli/commands/appHome.js.map +1 -0
  101. package/dist/cli/commands/compact.js +1 -1
  102. package/dist/cli/commands/compact.js.map +1 -1
  103. package/dist/cli/commands/doctor.js +18 -96
  104. package/dist/cli/commands/doctor.js.map +1 -1
  105. package/dist/cli/commands/lint.js +4 -36
  106. package/dist/cli/commands/lint.js.map +1 -1
  107. package/dist/cli/commands/prime/bundleStatus.js +126 -0
  108. package/dist/cli/commands/prime/bundleStatus.js.map +1 -0
  109. package/dist/cli/commands/prime/collectOrientationState.js +143 -0
  110. package/dist/cli/commands/prime/collectOrientationState.js.map +1 -0
  111. package/dist/cli/commands/prime/orientationOutput.js +172 -0
  112. package/dist/cli/commands/prime/orientationOutput.js.map +1 -0
  113. package/dist/cli/commands/prime/types.js +2 -0
  114. package/dist/cli/commands/prime/types.js.map +1 -0
  115. package/dist/cli/commands/prime/v1Migration.js +39 -0
  116. package/dist/cli/commands/prime/v1Migration.js.map +1 -0
  117. package/dist/cli/commands/prime.js +10 -549
  118. package/dist/cli/commands/prime.js.map +1 -1
  119. package/dist/cli/commands/query.js +1 -1
  120. package/dist/cli/commands/query.js.map +1 -1
  121. package/dist/cli/commands/report.js +19 -4
  122. package/dist/cli/commands/report.js.map +1 -1
  123. package/dist/cli/commands/schema.js +1 -2
  124. package/dist/cli/commands/schema.js.map +1 -1
  125. package/dist/cli/commands/state/decisions.js +397 -0
  126. package/dist/cli/commands/state/decisions.js.map +1 -0
  127. package/dist/cli/commands/state/docs.js +93 -0
  128. package/dist/cli/commands/state/docs.js.map +1 -0
  129. package/dist/cli/commands/state/experiments.js +67 -0
  130. package/dist/cli/commands/state/experiments.js.map +1 -0
  131. package/dist/cli/commands/state/health.js +114 -0
  132. package/dist/cli/commands/state/health.js.map +1 -0
  133. package/dist/cli/commands/state/index.js +51 -0
  134. package/dist/cli/commands/state/index.js.map +1 -0
  135. package/dist/cli/commands/state/objective.js +68 -0
  136. package/dist/cli/commands/state/objective.js.map +1 -0
  137. package/dist/cli/commands/state/plan.js +172 -0
  138. package/dist/cli/commands/state/plan.js.map +1 -0
  139. package/dist/cli/commands/state/progress.js +47 -0
  140. package/dist/cli/commands/state/progress.js.map +1 -0
  141. package/dist/cli/commands/state/shared.js +15 -0
  142. package/dist/cli/commands/state/shared.js.map +1 -0
  143. package/dist/cli/commands/state/todo.js +121 -0
  144. package/dist/cli/commands/state/todo.js.map +1 -0
  145. package/dist/cli/commands/validate.js +38 -24
  146. package/dist/cli/commands/validate.js.map +1 -1
  147. package/dist/cli/contracts/bundleStatus.js +2 -0
  148. package/dist/cli/contracts/bundleStatus.js.map +1 -0
  149. package/dist/cli/contracts/orientationState.js +2 -0
  150. package/dist/cli/contracts/orientationState.js.map +1 -0
  151. package/dist/cli/dispatch/argvParser.js +33 -0
  152. package/dist/cli/dispatch/argvParser.js.map +1 -0
  153. package/dist/cli/dispatch/check.js +328 -0
  154. package/dist/cli/dispatch/check.js.map +1 -0
  155. package/dist/cli/dispatch/commands.js +27 -0
  156. package/dist/cli/dispatch/commands.js.map +1 -0
  157. package/dist/cli/dispatch/index.js +179 -0
  158. package/dist/cli/dispatch/index.js.map +1 -0
  159. package/dist/cli/dispatch/lifecycle.js +537 -0
  160. package/dist/cli/dispatch/lifecycle.js.map +1 -0
  161. package/dist/cli/dispatch/prime.js +104 -0
  162. package/dist/cli/dispatch/prime.js.map +1 -0
  163. package/dist/cli/dispatch/shared.js +64 -0
  164. package/dist/cli/dispatch/shared.js.map +1 -0
  165. package/dist/cli/dispatch/state.js +144 -0
  166. package/dist/cli/dispatch/state.js.map +1 -0
  167. package/dist/cli/dispatch.js +1 -1293
  168. package/dist/cli/dispatch.js.map +1 -1
  169. package/dist/cli/help.js +30 -2
  170. package/dist/cli/help.js.map +1 -1
  171. package/dist/cli/orientation/attention.js +57 -0
  172. package/dist/cli/orientation/attention.js.map +1 -0
  173. package/dist/cli/orientation/corpusCoverage.js +71 -0
  174. package/dist/cli/orientation/corpusCoverage.js.map +1 -0
  175. package/dist/cli/orientation.js +41 -28
  176. package/dist/cli/orientation.js.map +1 -1
  177. package/dist/cli/startupCompletenessContract.js +49 -0
  178. package/dist/cli/startupCompletenessContract.js.map +1 -0
  179. package/dist/cli/todoSeverity.js +19 -0
  180. package/dist/cli/todoSeverity.js.map +1 -0
  181. package/dist/core/jsonValue.js +6 -0
  182. package/dist/core/jsonValue.js.map +1 -0
  183. package/dist/core/pyjson.js +67 -2
  184. package/dist/core/pyjson.js.map +1 -1
  185. package/dist/hooks/common.js +8 -23
  186. package/dist/hooks/common.js.map +1 -1
  187. package/dist/hooks/compaction/apply.js +263 -0
  188. package/dist/hooks/compaction/apply.js.map +1 -0
  189. package/dist/hooks/compaction/dryRun.js +181 -0
  190. package/dist/hooks/compaction/dryRun.js.map +1 -0
  191. package/dist/hooks/compaction/index.js +23 -0
  192. package/dist/hooks/compaction/index.js.map +1 -0
  193. package/dist/hooks/compaction/parse.js +258 -0
  194. package/dist/hooks/compaction/parse.js.map +1 -0
  195. package/dist/hooks/compaction/retention.js +197 -0
  196. package/dist/hooks/compaction/retention.js.map +1 -0
  197. package/dist/hooks/compaction/status.js +241 -0
  198. package/dist/hooks/compaction/status.js.map +1 -0
  199. package/dist/hooks/compaction/types.js +6 -0
  200. package/dist/hooks/compaction/types.js.map +1 -0
  201. package/dist/hooks/cursorPreToolUse.js +1 -1
  202. package/dist/hooks/cursorPreToolUse.js.map +1 -1
  203. package/dist/hooks/cursorSessionStart.js +10 -2
  204. package/dist/hooks/cursorSessionStart.js.map +1 -1
  205. package/dist/hooks/sessionStart.js +4 -4
  206. package/dist/hooks/sessionStart.js.map +1 -1
  207. package/dist/hooks/sessionStop.js +3 -12
  208. package/dist/hooks/sessionStop.js.map +1 -1
  209. package/dist/hooks/validateArtifact/agentFacing.js +10 -0
  210. package/dist/hooks/validateArtifact/agentFacing.js.map +1 -0
  211. package/dist/hooks/validateArtifact/index.js +149 -0
  212. package/dist/hooks/validateArtifact/index.js.map +1 -0
  213. package/dist/hooks/validateArtifact/markdown.js +146 -0
  214. package/dist/hooks/validateArtifact/markdown.js.map +1 -0
  215. package/dist/hooks/validateArtifact/runtime.js +83 -0
  216. package/dist/hooks/validateArtifact/runtime.js.map +1 -0
  217. package/dist/hooks/validateArtifact/schema.js +455 -0
  218. package/dist/hooks/validateArtifact/schema.js.map +1 -0
  219. package/dist/hooks/validateArtifact/traversal.js +105 -0
  220. package/dist/hooks/validateArtifact/traversal.js.map +1 -0
  221. package/dist/hooks/validateArtifact/violations.js +105 -0
  222. package/dist/hooks/validateArtifact/violations.js.map +1 -0
  223. package/dist/migrate/v2HandoffManifest.js +333 -0
  224. package/dist/migrate/v2HandoffManifest.js.map +1 -0
  225. package/dist/registries/artifactProtocolIds.js +77 -0
  226. package/dist/registries/artifactProtocolIds.js.map +1 -0
  227. package/dist/release/releaseMetadata.js +235 -0
  228. package/dist/release/releaseMetadata.js.map +1 -0
  229. package/dist/setup/codex/agents.js +96 -0
  230. package/dist/setup/codex/agents.js.map +1 -0
  231. package/dist/setup/codex/cli.js +161 -0
  232. package/dist/setup/codex/cli.js.map +1 -0
  233. package/dist/setup/codex/configToml.js +644 -0
  234. package/dist/setup/codex/configToml.js.map +1 -0
  235. package/dist/setup/codex/constants.js +29 -0
  236. package/dist/setup/codex/constants.js.map +1 -0
  237. package/dist/setup/codex/installRoot.js +64 -0
  238. package/dist/setup/codex/installRoot.js.map +1 -0
  239. package/dist/setup/codex/state.js +270 -0
  240. package/dist/setup/codex/state.js.map +1 -0
  241. package/dist/setup/codex.js +11 -1196
  242. package/dist/setup/codex.js.map +1 -1
  243. package/dist/setup/cursor.js +1 -1
  244. package/dist/setup/cursor.js.map +1 -1
  245. package/dist/setup/doctor/core.js +300 -0
  246. package/dist/setup/doctor/core.js.map +1 -0
  247. package/dist/setup/doctor/diagnostics.js +247 -0
  248. package/dist/setup/doctor/diagnostics.js.map +1 -0
  249. package/dist/setup/doctor/opencode.js +281 -0
  250. package/dist/setup/doctor/opencode.js.map +1 -0
  251. package/dist/setup/doctor/report.js +418 -0
  252. package/dist/setup/doctor/report.js.map +1 -0
  253. package/dist/setup/doctor.js +9 -1296
  254. package/dist/setup/doctor.js.map +1 -1
  255. package/dist/setup/opencode.js +13 -0
  256. package/dist/setup/opencode.js.map +1 -0
  257. package/dist/setup/smokeChecks.js +1 -1
  258. package/dist/setup/smokeChecks.js.map +1 -1
  259. package/dist/state/installRoot.js +49 -18
  260. package/dist/state/installRoot.js.map +1 -1
  261. package/dist/state/startupAnalysis/benchmark.js +367 -0
  262. package/dist/state/startupAnalysis/benchmark.js.map +1 -0
  263. package/dist/state/startupAnalysis/contract.js +122 -0
  264. package/dist/state/startupAnalysis/contract.js.map +1 -0
  265. package/dist/state/startupAnalysis/helpers.js +287 -0
  266. package/dist/state/startupAnalysis/helpers.js.map +1 -0
  267. package/dist/state/startupAnalysis/index.js +7 -0
  268. package/dist/state/startupAnalysis/index.js.map +1 -0
  269. package/dist/state/startupAnalysis/metrics.js +334 -0
  270. package/dist/state/startupAnalysis/metrics.js.map +1 -0
  271. package/dist/state/startupAnalysis/records.js +195 -0
  272. package/dist/state/startupAnalysis/records.js.map +1 -0
  273. package/dist/state/startupAnalysis/report.js +101 -0
  274. package/dist/state/startupAnalysis/report.js.map +1 -0
  275. package/dist/state/startupAnalysis/threshold.js +500 -0
  276. package/dist/state/startupAnalysis/threshold.js.map +1 -0
  277. package/dist/state/startupAnalysis.js +2 -1952
  278. package/dist/state/startupAnalysis.js.map +1 -1
  279. package/dist/upgrade/appModel.js +1 -4
  280. package/dist/upgrade/appModel.js.map +1 -1
  281. package/dist/upgrade/bundleEvidence.js +34 -0
  282. package/dist/upgrade/bundleEvidence.js.map +1 -0
  283. package/dist/upgrade/channels.js +8 -1
  284. package/dist/upgrade/channels.js.map +1 -1
  285. package/dist/upgrade/cliProbe.js +22 -0
  286. package/dist/upgrade/cliProbe.js.map +1 -0
  287. package/dist/upgrade/coexistenceProbe.js +80 -0
  288. package/dist/upgrade/coexistenceProbe.js.map +1 -0
  289. package/dist/upgrade/compatibility.js +1 -4
  290. package/dist/upgrade/compatibility.js.map +1 -1
  291. package/dist/upgrade/doctor.js +204 -170
  292. package/dist/upgrade/doctor.js.map +1 -1
  293. package/dist/upgrade/doctorClassifier.js +208 -0
  294. package/dist/upgrade/doctorClassifier.js.map +1 -0
  295. package/dist/upgrade/migrateArtifactsV2ToV3.js +6 -84
  296. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +1 -1
  297. package/dist/upgrade/nextMajorDoctor.js +20 -1
  298. package/dist/upgrade/nextMajorDoctor.js.map +1 -1
  299. package/dist/upgrade/npxPlatformStatus.js +24 -0
  300. package/dist/upgrade/npxPlatformStatus.js.map +1 -0
  301. package/dist/upgrade/projectIntegration.js +55 -70
  302. package/dist/upgrade/projectIntegration.js.map +1 -1
  303. package/dist/upgrade/projectIntegrationDecision.js +93 -0
  304. package/dist/upgrade/projectIntegrationDecision.js.map +1 -0
  305. package/dist/upgrade/runtimeMigration.js +13 -2
  306. package/dist/upgrade/runtimeMigration.js.map +1 -1
  307. package/dist/upgrade/v3CapabilitySurface.js +15 -0
  308. package/dist/upgrade/v3CapabilitySurface.js.map +1 -0
  309. package/dist/upgrade/versionResolution.js +8 -0
  310. package/dist/upgrade/versionResolution.js.map +1 -1
  311. package/dist/validate/appHomeContract.js +3 -3
  312. package/dist/validate/appHomeContract.js.map +1 -1
  313. package/dist/validate/lifecycleAdapters/legacyPythonParity.js +93 -0
  314. package/dist/validate/lifecycleAdapters/legacyPythonParity.js.map +1 -0
  315. package/dist/validate/lifecycleAdapters/nodeFormChecks.js +488 -0
  316. package/dist/validate/lifecycleAdapters/nodeFormChecks.js.map +1 -0
  317. package/dist/validate/lifecycleAdapters/shared.js +198 -0
  318. package/dist/validate/lifecycleAdapters/shared.js.map +1 -0
  319. package/dist/validate/lifecycleAdapters.js +12 -722
  320. package/dist/validate/lifecycleAdapters.js.map +1 -1
  321. package/dist/validate/selfAudit.js +62 -20
  322. package/dist/validate/selfAudit.js.map +1 -1
  323. package/dist/validate/vocabularyAuthority.js +298 -0
  324. package/dist/validate/vocabularyAuthority.js.map +1 -0
  325. package/package.json +3 -3
  326. package/bundle/references/v1-section-mapping.md +0 -47
  327. package/bundle/skills/hej/.claude-plugin/plugin.json +0 -6
  328. package/bundle/skills/hej/SKILL.md +0 -69
  329. package/bundle/skills/hej/agents/hej.toml +0 -11
  330. package/bundle/skills/hej/agents/openai.yaml +0 -8
  331. package/dist/cli/commands/state.js +0 -1023
  332. package/dist/cli/commands/state.js.map +0 -1
  333. package/dist/hooks/compaction.js +0 -935
  334. package/dist/hooks/compaction.js.map +0 -1
  335. package/dist/hooks/validateArtifact.js +0 -935
  336. package/dist/hooks/validateArtifact.js.map +0 -1
@@ -0,0 +1,105 @@
1
+ /**
2
+ * YAML-side violation orchestrators.
3
+ *
4
+ * `validateYamlContent` is the single entry point: parse, walk the
5
+ * schema singleton groups, run sequence validation, apply artifact-
6
+ * specific rules (plan, decisions), and finally run BUDGET and
7
+ * VALIDATION_RULES checks. Lower-level helpers live in `schema.ts`.
8
+ */
9
+ import path from "node:path";
10
+ import { parseYaml } from "../../core/yaml.js";
11
+ import { resolveSourceRoot } from "../../core/sourceRoot.js";
12
+ import { loadYamlMapping } from "../../core/yaml.js";
13
+ import { expectedSequenceOrder, isMapping, sequenceInOrder, validationRuleSeverity, validateDecisionAlternatives, validateDecisionSatisfaction, validateFullPlanContract, validatePlanKnownFields, validateSequences, validateSingletonGroup, collectSingletonGroups, wordCount, } from "./schema.js";
14
+ function schemasDirDefault() {
15
+ return path.join(resolveSourceRoot(), "skills", "agentera", "schemas", "artifacts");
16
+ }
17
+ export function validateYamlContent(content, schema, name) {
18
+ const violations = [];
19
+ let data;
20
+ try {
21
+ data = parseYaml(content);
22
+ }
23
+ catch (exc) {
24
+ return [`${name}: invalid YAML: ${exc.message}`];
25
+ }
26
+ if (!isMapping(data)) {
27
+ return [`${name}: root must be a mapping`];
28
+ }
29
+ for (const [group, groupLower, fields] of collectSingletonGroups(schema)) {
30
+ let scope;
31
+ if (groupLower in data && isMapping(data[groupLower])) {
32
+ scope = data[groupLower];
33
+ }
34
+ else if (fields.some((f) => f in data)) {
35
+ scope = data;
36
+ }
37
+ else {
38
+ continue;
39
+ }
40
+ validateSingletonGroup(violations, name, schema, group, scope, groupLower);
41
+ }
42
+ if (name === "plan") {
43
+ validatePlanKnownFields(data, schema, violations);
44
+ validateFullPlanContract(data, violations);
45
+ }
46
+ validateSequences(data, schema, name, violations);
47
+ if (name === "decisions") {
48
+ violations.push(...validateDecisionAlternatives(data, name));
49
+ violations.push(...validateDecisionSatisfaction(data, name));
50
+ }
51
+ const wordBudgetSeverity = validationRuleSeverity(schema, "word_budget");
52
+ for (const be of Object.values(schema.BUDGET ?? {})) {
53
+ if (!isMapping(be))
54
+ continue;
55
+ const mw = be.max_words;
56
+ const scope = be.scope ?? "";
57
+ if (mw && String(scope).includes("full_file") && wordBudgetSeverity === "error") {
58
+ const wc = wordCount(content);
59
+ if (wc > mw)
60
+ violations.push(`${name}: word count (${wc}) exceeds budget (${mw})`);
61
+ }
62
+ }
63
+ for (const groupKey of ["VALIDATION", "VALIDATION_RULES"]) {
64
+ for (const ve of Object.values(schema[groupKey] ?? {})) {
65
+ if (!isMapping(ve))
66
+ continue;
67
+ const rule = ve.rule ?? "";
68
+ if (ve.severity !== "error")
69
+ continue;
70
+ if (rule.includes("unique") && rule.includes("number")) {
71
+ for (const [key, val] of Object.entries(data)) {
72
+ if (Array.isArray(val)) {
73
+ const nums = val.filter((e) => isMapping(e) && "number" in e).map((e) => e.number);
74
+ if (nums.length > 0) {
75
+ if (nums.length !== new Set(nums).size) {
76
+ violations.push(`${name}: duplicate numbers in '${key}'`);
77
+ }
78
+ const direction = expectedSequenceOrder(name, key);
79
+ if (!sequenceInOrder(nums, direction)) {
80
+ violations.push(`${name}: '${key}' not in ${direction} order`);
81
+ }
82
+ }
83
+ }
84
+ }
85
+ }
86
+ else if (rule === "closure_consistency") {
87
+ const header = isMapping(data.header) ? data.header : {};
88
+ const status = data.status ?? header.status;
89
+ if (typeof status === "string" && status === "closed") {
90
+ for (const field of ["closed_at", "final_value", "target_ref", "reason"]) {
91
+ let val = data[field];
92
+ if (val === null || val === undefined)
93
+ val = header[field];
94
+ if (val === null || val === undefined || (typeof val === "string" && !val.trim())) {
95
+ violations.push(`${name}: closure field '${field}' is required when status is 'closed'`);
96
+ }
97
+ }
98
+ }
99
+ }
100
+ }
101
+ }
102
+ return violations;
103
+ }
104
+ export { loadYamlMapping, schemasDirDefault };
105
+ //# sourceMappingURL=violations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"violations.js","sourceRoot":"","sources":["../../../src/hooks/validateArtifact/violations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,333 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { isFile, pathExists, resolvePath } from "../core/paths.js";
4
+ import { doctorRoots, loadSuiteVersion } from "../upgrade/appModel.js";
5
+ import { AGENTERA_USER_STATE_NAMES, ROOT_USER_STATE_DIR_NAMES, ROOT_USER_STATE_FILE_NAMES, } from "../upgrade/doctor.js";
6
+ /** Contract authority: references/cli/v3-handoff-manifest.schema.yaml */
7
+ export const V2_HANDOFF_MANIFEST_SCHEMA_REL = "references/cli/v3-handoff-manifest.schema.yaml";
8
+ export const V2_HANDOFF_MANIFEST_FILENAME = "v3-handoff.json";
9
+ export const V2_HANDOFF_SCHEMA_VERSION = "agentera.v3_handoff_manifest.v1";
10
+ export const READER_PREFLIGHT_BUDGET_MS = 100;
11
+ export const USER_DATA_CATALOG_DIRS = [
12
+ "benchmarks",
13
+ "intermediate",
14
+ "sessions",
15
+ "history",
16
+ "corpus",
17
+ ];
18
+ export const PROFILE_FILE_MEMBERS = ["PROFILE.md", "USAGE.md"];
19
+ function isRecord(value) {
20
+ return value !== null && typeof value === "object" && !Array.isArray(value);
21
+ }
22
+ function asNonEmptyString(value, field) {
23
+ if (typeof value !== "string" || !value.trim()) {
24
+ throw new Error(`${field} must be a non-empty string`);
25
+ }
26
+ return value.trim();
27
+ }
28
+ function parseDirectoryEntry(raw) {
29
+ const id = asNonEmptyString(raw.id, "user_data_inventory.id");
30
+ if (!USER_DATA_CATALOG_DIRS.includes(id)) {
31
+ throw new Error(`user_data_inventory id ${id} is not in the catalog`);
32
+ }
33
+ if (raw.kind !== "directory") {
34
+ throw new Error(`user_data_inventory entry ${id} must have kind=directory`);
35
+ }
36
+ if (typeof raw.exists !== "boolean") {
37
+ throw new Error(`user_data_inventory entry ${id} must have boolean exists`);
38
+ }
39
+ return {
40
+ id: id,
41
+ relative_path: asNonEmptyString(raw.relative_path, `user_data_inventory.${id}.relative_path`),
42
+ kind: "directory",
43
+ exists: raw.exists,
44
+ };
45
+ }
46
+ function parseProfileFilesEntry(raw) {
47
+ if (raw.id !== "profile_files") {
48
+ throw new Error("profile_files entry must have id=profile_files");
49
+ }
50
+ if (raw.kind !== "profile_files") {
51
+ throw new Error("profile_files entry must have kind=profile_files");
52
+ }
53
+ if (!Array.isArray(raw.members)) {
54
+ throw new Error("profile_files entry must have members array");
55
+ }
56
+ const members = raw.members.map((member, index) => {
57
+ if (!isRecord(member)) {
58
+ throw new Error(`profile_files.members[${index}] must be an object`);
59
+ }
60
+ if (member.kind !== "file") {
61
+ throw new Error(`profile_files.members[${index}] must have kind=file`);
62
+ }
63
+ if (typeof member.exists !== "boolean") {
64
+ throw new Error(`profile_files.members[${index}] must have boolean exists`);
65
+ }
66
+ return {
67
+ relative_path: asNonEmptyString(member.relative_path, `profile_files.members[${index}].relative_path`),
68
+ kind: "file",
69
+ exists: member.exists,
70
+ };
71
+ });
72
+ return { id: "profile_files", kind: "profile_files", members };
73
+ }
74
+ function parseUserDataInventory(raw) {
75
+ if (!Array.isArray(raw) || raw.length < 6) {
76
+ throw new Error("user_data_inventory must be an array with at least six entries");
77
+ }
78
+ const entries = raw.map((item, index) => {
79
+ if (!isRecord(item)) {
80
+ throw new Error(`user_data_inventory[${index}] must be an object`);
81
+ }
82
+ if (item.kind === "profile_files") {
83
+ return parseProfileFilesEntry(item);
84
+ }
85
+ return parseDirectoryEntry(item);
86
+ });
87
+ const ids = new Set(entries.map((entry) => entry.id));
88
+ for (const id of [...USER_DATA_CATALOG_DIRS, "profile_files"]) {
89
+ if (!ids.has(id)) {
90
+ throw new Error(`user_data_inventory missing catalog id ${id}`);
91
+ }
92
+ }
93
+ return entries;
94
+ }
95
+ export function parseV2HandoffManifest(raw) {
96
+ if (!isRecord(raw)) {
97
+ throw new Error("manifest must be a JSON object");
98
+ }
99
+ const schemaVersion = asNonEmptyString(raw.schema_version, "schema_version");
100
+ if (schemaVersion !== V2_HANDOFF_SCHEMA_VERSION) {
101
+ throw new Error(`schema_version must be ${V2_HANDOFF_SCHEMA_VERSION}`);
102
+ }
103
+ const writtenAt = asNonEmptyString(raw.written_at, "written_at");
104
+ if (Number.isNaN(Date.parse(writtenAt))) {
105
+ throw new Error("written_at must be an ISO-8601 UTC timestamp");
106
+ }
107
+ if (!Array.isArray(raw.runtime_adapters)) {
108
+ throw new Error("runtime_adapters must be an array");
109
+ }
110
+ const runtimeAdapters = raw.runtime_adapters.map((adapter, index) => asNonEmptyString(adapter, `runtime_adapters[${index}]`));
111
+ return {
112
+ schema_version: V2_HANDOFF_SCHEMA_VERSION,
113
+ written_at: writtenAt,
114
+ installed_v2_version: asNonEmptyString(raw.installed_v2_version, "installed_v2_version"),
115
+ app_home_path: asNonEmptyString(raw.app_home_path, "app_home_path"),
116
+ user_data_inventory: parseUserDataInventory(raw.user_data_inventory),
117
+ runtime_adapters: runtimeAdapters,
118
+ };
119
+ }
120
+ export function v2HandoffManifestPath(appHome) {
121
+ return path.join(resolvePath(appHome), V2_HANDOFF_MANIFEST_FILENAME);
122
+ }
123
+ export function readV2HandoffManifestFile(appHome) {
124
+ const manifestPath = v2HandoffManifestPath(appHome);
125
+ if (!isFile(manifestPath)) {
126
+ return null;
127
+ }
128
+ const started = performance.now();
129
+ let parsed;
130
+ try {
131
+ parsed = JSON.parse(fs.readFileSync(manifestPath, "utf8"));
132
+ }
133
+ catch (exc) {
134
+ throw new Error(`failed to read ${V2_HANDOFF_MANIFEST_FILENAME}: ${exc.message}`);
135
+ }
136
+ const manifest = parseV2HandoffManifest(parsed);
137
+ const elapsedMs = performance.now() - started;
138
+ return { manifest, elapsedMs };
139
+ }
140
+ function agenteraUserStateDirIsRecognized(dir) {
141
+ if (!pathExists(dir) || !fs.statSync(dir).isDirectory()) {
142
+ return false;
143
+ }
144
+ for (const entry of fs.readdirSync(dir)) {
145
+ const full = path.join(dir, entry);
146
+ const st = fs.statSync(full);
147
+ if (AGENTERA_USER_STATE_NAMES.has(entry) && st.isFile()) {
148
+ continue;
149
+ }
150
+ if (entry === "optimera" && st.isDirectory()) {
151
+ continue;
152
+ }
153
+ return false;
154
+ }
155
+ return true;
156
+ }
157
+ function isPreservedUserStateEntry(appHome, entry) {
158
+ const full = path.join(appHome, entry);
159
+ if (!pathExists(full)) {
160
+ return false;
161
+ }
162
+ const st = fs.statSync(full);
163
+ if (ROOT_USER_STATE_FILE_NAMES.has(entry) && st.isFile()) {
164
+ return true;
165
+ }
166
+ if (ROOT_USER_STATE_DIR_NAMES.has(entry) && st.isDirectory()) {
167
+ return true;
168
+ }
169
+ if (entry === ".agentera" && agenteraUserStateDirIsRecognized(full)) {
170
+ return true;
171
+ }
172
+ if (USER_DATA_CATALOG_DIRS.includes(entry) &&
173
+ st.isDirectory()) {
174
+ return true;
175
+ }
176
+ return false;
177
+ }
178
+ function listPreservedTopLevelFromScan(appHome) {
179
+ if (!pathExists(appHome)) {
180
+ return [];
181
+ }
182
+ const preserved = [];
183
+ for (const entry of fs.readdirSync(appHome)) {
184
+ if (entry === "app" || entry === V2_HANDOFF_MANIFEST_FILENAME) {
185
+ continue;
186
+ }
187
+ if (isPreservedUserStateEntry(appHome, entry)) {
188
+ preserved.push(entry);
189
+ }
190
+ }
191
+ return preserved.sort();
192
+ }
193
+ function listPreservedAbsolutePathsFromScan(appHome) {
194
+ const preserved = [];
195
+ for (const entry of listPreservedTopLevelFromScan(appHome)) {
196
+ const full = path.join(appHome, entry);
197
+ preserved.push(full);
198
+ if (entry === ".agentera" && pathExists(full) && fs.statSync(full).isDirectory()) {
199
+ for (const name of AGENTERA_USER_STATE_NAMES) {
200
+ const nested = path.join(full, name);
201
+ if (isFile(nested)) {
202
+ preserved.push(nested);
203
+ }
204
+ }
205
+ }
206
+ }
207
+ return preserved.sort();
208
+ }
209
+ function listPreservedTopLevelFromManifest(manifest) {
210
+ const preserved = new Set();
211
+ for (const entry of manifest.user_data_inventory) {
212
+ if (entry.kind === "directory" && entry.exists) {
213
+ preserved.add(entry.relative_path);
214
+ }
215
+ if (entry.kind === "profile_files") {
216
+ for (const member of entry.members) {
217
+ if (member.exists) {
218
+ preserved.add(member.relative_path);
219
+ }
220
+ }
221
+ }
222
+ }
223
+ return [...preserved].sort();
224
+ }
225
+ function listPreservedAbsolutePathsFromManifest(manifest, appHome) {
226
+ const root = resolvePath(appHome);
227
+ const preserved = [];
228
+ for (const rel of listPreservedTopLevelFromManifest(manifest)) {
229
+ preserved.push(path.join(root, rel));
230
+ }
231
+ const agenteraDir = path.join(root, ".agentera");
232
+ if (pathExists(agenteraDir) && fs.statSync(agenteraDir).isDirectory()) {
233
+ preserved.push(agenteraDir);
234
+ for (const name of AGENTERA_USER_STATE_NAMES) {
235
+ const nested = path.join(agenteraDir, name);
236
+ if (isFile(nested)) {
237
+ preserved.push(nested);
238
+ }
239
+ }
240
+ }
241
+ return preserved.sort();
242
+ }
243
+ export function isManifestCatalogEntryPreserved(manifest, entry) {
244
+ for (const item of manifest.user_data_inventory) {
245
+ if (item.kind === "directory" && item.relative_path === entry) {
246
+ return item.exists;
247
+ }
248
+ if (item.kind === "profile_files") {
249
+ for (const member of item.members) {
250
+ if (member.relative_path === entry) {
251
+ return member.exists;
252
+ }
253
+ }
254
+ }
255
+ }
256
+ if (entry === ".agentera") {
257
+ const agenteraDir = path.join(resolvePath(manifest.app_home_path), ".agentera");
258
+ return agenteraUserStateDirIsRecognized(agenteraDir);
259
+ }
260
+ return false;
261
+ }
262
+ export function resolveMigrationUserStatePreflight(appHome) {
263
+ const resolvedHome = resolvePath(appHome);
264
+ const manifestRead = readV2HandoffManifestFile(resolvedHome);
265
+ if (manifestRead) {
266
+ return {
267
+ source: "manifest",
268
+ elapsedMs: manifestRead.elapsedMs,
269
+ manifest: manifestRead.manifest,
270
+ preservedTopLevel: listPreservedTopLevelFromManifest(manifestRead.manifest),
271
+ preservedAbsolutePaths: listPreservedAbsolutePathsFromManifest(manifestRead.manifest, resolvedHome),
272
+ };
273
+ }
274
+ const started = performance.now();
275
+ const preservedTopLevel = listPreservedTopLevelFromScan(resolvedHome);
276
+ const preservedAbsolutePaths = listPreservedAbsolutePathsFromScan(resolvedHome);
277
+ return {
278
+ source: "scan",
279
+ elapsedMs: performance.now() - started,
280
+ manifest: null,
281
+ preservedTopLevel,
282
+ preservedAbsolutePaths,
283
+ };
284
+ }
285
+ export function appHomeHasUnrecognizedEntriesWithPreflight(appHome, preflight) {
286
+ if (!pathExists(appHome)) {
287
+ return [];
288
+ }
289
+ const unknown = [];
290
+ for (const entry of fs.readdirSync(appHome)) {
291
+ if (entry === "app" || entry === V2_HANDOFF_MANIFEST_FILENAME) {
292
+ continue;
293
+ }
294
+ if (preflight.source === "manifest" && preflight.manifest) {
295
+ if (isManifestCatalogEntryPreserved(preflight.manifest, entry)) {
296
+ continue;
297
+ }
298
+ }
299
+ else if (isPreservedUserStateEntry(appHome, entry)) {
300
+ continue;
301
+ }
302
+ unknown.push(entry);
303
+ }
304
+ return unknown;
305
+ }
306
+ export function isV2HandoffManifestStale(manifest, ctx) {
307
+ if (resolvePath(manifest.app_home_path) !== resolvePath(ctx.appHome)) {
308
+ return true;
309
+ }
310
+ if (manifest.installed_v2_version !== ctx.installedVersion) {
311
+ return true;
312
+ }
313
+ const writtenAtMs = Date.parse(manifest.written_at);
314
+ const markerMs = ctx.bundleMarkerMtimeMs;
315
+ if (Number.isNaN(writtenAtMs) || Math.floor(writtenAtMs / 1000) < Math.floor(markerMs / 1000)) {
316
+ return true;
317
+ }
318
+ return false;
319
+ }
320
+ export function bundleMarkerFreshnessContext(appHome, sourceRoot) {
321
+ const roots = doctorRoots(appHome);
322
+ const markerPath = path.join(roots.activeBundleRoot, ".agentera-bundle.json");
323
+ if (!isFile(markerPath)) {
324
+ return null;
325
+ }
326
+ const installedVersion = loadSuiteVersion(roots.activeBundleRoot) ?? loadSuiteVersion(sourceRoot) ?? "unknown";
327
+ return {
328
+ appHome: resolvePath(appHome),
329
+ installedVersion,
330
+ bundleMarkerMtimeMs: fs.statSync(markerPath).mtimeMs,
331
+ };
332
+ }
333
+ //# sourceMappingURL=v2HandoffManifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v2HandoffManifest.js","sourceRoot":"","sources":["../../src/migrate/v2HandoffManifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Decision 58 artifact protocol names: one `artifact_id` per artifact in CLI,
3
+ * hooks, validators, and JSON envelopes. Storage paths live here only.
4
+ */
5
+ export const ARTIFACT_PROTOCOL_PATHS = {
6
+ vision: ".agentera/vision.yaml",
7
+ decisions: ".agentera/decisions.yaml",
8
+ plan: ".agentera/plan.yaml",
9
+ progress: ".agentera/progress.yaml",
10
+ health: ".agentera/health.yaml",
11
+ docs: ".agentera/docs.yaml",
12
+ objective: ".agentera/objective.yaml",
13
+ experiments: ".agentera/experiments.yaml",
14
+ todo: "TODO.md",
15
+ changelog: "CHANGELOG.md",
16
+ design: "DESIGN.md",
17
+ };
18
+ export const HUMAN_FACING_ARTIFACT_IDS = new Set(["todo", "changelog", "design"]);
19
+ export const TRACKED_ARTIFACT_IDS = [
20
+ "progress",
21
+ "decisions",
22
+ "plan",
23
+ "health",
24
+ "design",
25
+ "docs",
26
+ "vision",
27
+ "todo",
28
+ "changelog",
29
+ ];
30
+ export const VALIDATE_ARTIFACT_PROTOCOL_IDS = [
31
+ "changelog",
32
+ "decisions",
33
+ "design",
34
+ "docs",
35
+ "health",
36
+ "plan",
37
+ "progress",
38
+ "todo",
39
+ "vision",
40
+ ];
41
+ function artifactProtocolStem(input) {
42
+ const lower = input.trim().toLowerCase();
43
+ return lower.endsWith(".md") ? lower.slice(0, -3) : lower;
44
+ }
45
+ export function normalizeArtifactProtocolId(input) {
46
+ const trimmed = input.trim();
47
+ if (trimmed in ARTIFACT_PROTOCOL_PATHS) {
48
+ return trimmed;
49
+ }
50
+ const lower = trimmed.toLowerCase();
51
+ if (lower in ARTIFACT_PROTOCOL_PATHS) {
52
+ return lower;
53
+ }
54
+ const stem = artifactProtocolStem(trimmed);
55
+ if (stem in ARTIFACT_PROTOCOL_PATHS) {
56
+ return stem;
57
+ }
58
+ return null;
59
+ }
60
+ export function requireArtifactProtocolId(input, context) {
61
+ const id = normalizeArtifactProtocolId(input);
62
+ if (id === null) {
63
+ const valid = VALIDATE_ARTIFACT_PROTOCOL_IDS.join(", ");
64
+ throw new Error(`unsupported artifact ${JSON.stringify(input)} in ${context}; valid artifact_id values: ${valid}`);
65
+ }
66
+ return id;
67
+ }
68
+ /** Normalize docs.yaml mapping keys to artifact_id. */
69
+ export function normalizeArtifactMappingKeys(mapping) {
70
+ const out = {};
71
+ for (const [key, value] of Object.entries(mapping)) {
72
+ const id = normalizeArtifactProtocolId(key);
73
+ out[id ?? key] = value;
74
+ }
75
+ return out;
76
+ }
77
+ //# sourceMappingURL=artifactProtocolIds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifactProtocolIds.js","sourceRoot":"","sources":["../../src/registries/artifactProtocolIds.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAqC;IACvE,MAAM,EAAE,uBAAuB;IAC/B,SAAS,EAAE,0BAA0B;IACrC,IAAI,EAAE,qBAAqB;IAC3B,QAAQ,EAAE,yBAAyB;IACnC,MAAM,EAAE,uBAAuB;IAC/B,IAAI,EAAE,qBAAqB;IAC3B,SAAS,EAAE,0BAA0B;IACrC,WAAW,EAAE,4BAA4B;IACzC,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,cAAc;IACzB,MAAM,EAAE,WAAW;CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;AAElF,MAAM,CAAC,MAAM,oBAAoB,GAAsB;IACrD,UAAU;IACV,WAAW;IACX,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,MAAM;IACN,WAAW;CACZ,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAsB;IAC/D,WAAW;IACX,WAAW;IACX,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,MAAM;IACN,UAAU;IACV,MAAM;IACN,QAAQ;CACT,CAAC;AAEF,SAAS,oBAAoB,CAAC,KAAa;IACzC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACzC,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAAa;IACvD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,IAAI,uBAAuB,EAAE,CAAC;QACvC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,IAAI,KAAK,IAAI,uBAAuB,EAAE,CAAC;QACrC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,IAAI,IAAI,uBAAuB,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAa,EAAE,OAAe;IACtE,MAAM,EAAE,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,OAAO,+BAA+B,KAAK,EAAE,CAAC,CAAC;IACrH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,4BAA4B,CAAC,OAA+B;IAC1E,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,MAAM,EAAE,GAAG,2BAA2B,CAAC,GAAG,CAAC,CAAC;QAC5C,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC;IACzB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}