agentera 3.0.0-dev.4 → 3.0.0-dev.6

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 (321) hide show
  1. package/README.md +4 -3
  2. package/bundle/.agentera-npx-bundle.json +1 -1
  3. package/bundle/references/adapters/opencode.md +1 -1
  4. package/bundle/references/adapters/package-registry.yaml +0 -1
  5. package/bundle/references/adapters/package-surface-characterization.md +1 -2
  6. package/bundle/references/analysis/startup-measurement-contract.yaml +11 -11
  7. package/bundle/references/cli/agent-ready-state-contract.yaml +5 -5
  8. package/bundle/references/cli/audience-namespace-cli-migration.yaml +40 -26
  9. package/bundle/references/cli/bundle-skill-vocabulary.yaml +2 -30
  10. package/bundle/references/cli/capability-instruction-contract.yaml +98 -57
  11. package/bundle/references/cli/coexistence-probe.yaml +9 -0
  12. package/bundle/references/cli/routing-execution-vocabulary.yaml +6 -6
  13. package/bundle/references/cli/single-name-protocol.yaml +42 -0
  14. package/bundle/references/cli/update-channels.yaml +18 -2
  15. package/bundle/references/cli/upgrade-repair-wording.md +31 -0
  16. package/bundle/references/cli/v3-handoff-manifest.schema.yaml +98 -0
  17. package/bundle/references/cli/vocabulary-index.yaml +3 -3
  18. package/bundle/references/cli/vocabulary.md +34 -26
  19. package/bundle/references/meta/documentation-inventory.md +9 -3
  20. package/bundle/registry.json +1 -1
  21. package/bundle/skills/agentera/SKILL.md +50 -33
  22. package/bundle/skills/agentera/agents/dokumentera.toml +1 -1
  23. package/bundle/skills/agentera/agents/hej.toml +1 -1
  24. package/bundle/skills/agentera/agents/inspektera.toml +1 -1
  25. package/bundle/skills/agentera/agents/inspirera.toml +1 -1
  26. package/bundle/skills/agentera/agents/optimera.toml +1 -1
  27. package/bundle/skills/agentera/agents/orkestrera.toml +1 -1
  28. package/bundle/skills/agentera/agents/planera.toml +1 -1
  29. package/bundle/skills/agentera/agents/profilera.toml +1 -1
  30. package/bundle/skills/agentera/agents/realisera.toml +1 -1
  31. package/bundle/skills/agentera/agents/resonera.toml +1 -1
  32. package/bundle/skills/agentera/agents/visionera.toml +1 -1
  33. package/bundle/skills/agentera/agents/visualisera.toml +1 -1
  34. package/bundle/skills/agentera/capabilities/orkestrera/schemas/validation.yaml +26 -13
  35. package/bundle/skills/agentera/capability_schema_contract.yaml +33 -14
  36. package/bundle/skills/agentera/references/contract.md +2 -2
  37. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +1 -1
  38. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +15 -36
  39. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +14 -0
  40. package/dist/analytics/extractCorpus/cli.js +101 -0
  41. package/dist/analytics/extractCorpus/cli.js.map +1 -0
  42. package/dist/analytics/extractCorpus/copilotSessions.js +231 -0
  43. package/dist/analytics/extractCorpus/copilotSessions.js.map +1 -0
  44. package/dist/analytics/extractCorpus/core.js +357 -0
  45. package/dist/analytics/extractCorpus/core.js.map +1 -0
  46. package/dist/analytics/extractCorpus/corpus.js +132 -0
  47. package/dist/analytics/extractCorpus/corpus.js.map +1 -0
  48. package/dist/analytics/extractCorpus/cursorSessions.js +420 -0
  49. package/dist/analytics/extractCorpus/cursorSessions.js.map +1 -0
  50. package/dist/analytics/extractCorpus/filesystemSources.js +122 -0
  51. package/dist/analytics/extractCorpus/filesystemSources.js.map +1 -0
  52. package/dist/analytics/extractCorpus/index.js +9 -0
  53. package/dist/analytics/extractCorpus/index.js.map +1 -0
  54. package/dist/analytics/extractCorpus/jsonlSessions.js +185 -0
  55. package/dist/analytics/extractCorpus/jsonlSessions.js.map +1 -0
  56. package/dist/analytics/extractCorpus/sqliteSessions.js +275 -0
  57. package/dist/analytics/extractCorpus/sqliteSessions.js.map +1 -0
  58. package/dist/analytics/extractCorpus.js +2 -1790
  59. package/dist/analytics/extractCorpus.js.map +1 -1
  60. package/dist/analytics/usageStats.js +1 -1
  61. package/dist/analytics/usageStats.js.map +1 -1
  62. package/dist/capabilities/dokumentera/instructions.js +6 -0
  63. package/dist/capabilities/dokumentera/instructions.js.map +1 -0
  64. package/dist/capabilities/hej/instructions.js +6 -0
  65. package/dist/capabilities/hej/instructions.js.map +1 -0
  66. package/dist/capabilities/index.js +38 -0
  67. package/dist/capabilities/index.js.map +1 -0
  68. package/dist/capabilities/inspektera/instructions.js +6 -0
  69. package/dist/capabilities/inspektera/instructions.js.map +1 -0
  70. package/dist/capabilities/inspirera/instructions.js +6 -0
  71. package/dist/capabilities/inspirera/instructions.js.map +1 -0
  72. package/dist/capabilities/optimera/instructions.js +6 -0
  73. package/dist/capabilities/optimera/instructions.js.map +1 -0
  74. package/dist/capabilities/orkestrera/instructions.js +6 -0
  75. package/dist/capabilities/orkestrera/instructions.js.map +1 -0
  76. package/dist/capabilities/planera/instructions.js +6 -0
  77. package/dist/capabilities/planera/instructions.js.map +1 -0
  78. package/dist/capabilities/profilera/instructions.js +6 -0
  79. package/dist/capabilities/profilera/instructions.js.map +1 -0
  80. package/dist/capabilities/realisera/instructions.js +6 -0
  81. package/dist/capabilities/realisera/instructions.js.map +1 -0
  82. package/dist/capabilities/resonera/instructions.js +6 -0
  83. package/dist/capabilities/resonera/instructions.js.map +1 -0
  84. package/dist/capabilities/visionera/instructions.js +6 -0
  85. package/dist/capabilities/visionera/instructions.js.map +1 -0
  86. package/dist/capabilities/visualisera/instructions.js +6 -0
  87. package/dist/capabilities/visualisera/instructions.js.map +1 -0
  88. package/dist/cli/capabilityContext/benchmark.js +557 -0
  89. package/dist/cli/capabilityContext/benchmark.js.map +1 -0
  90. package/dist/cli/capabilityContext/bespoke.js +25 -0
  91. package/dist/cli/capabilityContext/bespoke.js.map +1 -0
  92. package/dist/cli/capabilityContext/closeout.js +230 -0
  93. package/dist/cli/capabilityContext/closeout.js.map +1 -0
  94. package/dist/cli/capabilityContext/contract.js +186 -0
  95. package/dist/cli/capabilityContext/contract.js.map +1 -0
  96. package/dist/cli/capabilityContext/evidence.js +446 -0
  97. package/dist/cli/capabilityContext/evidence.js.map +1 -0
  98. package/dist/cli/capabilityContext/index.js +4 -0
  99. package/dist/cli/capabilityContext/index.js.map +1 -0
  100. package/dist/cli/capabilityContext/orchestration.js +107 -0
  101. package/dist/cli/capabilityContext/orchestration.js.map +1 -0
  102. package/dist/cli/capabilityContext/planState.js +271 -0
  103. package/dist/cli/capabilityContext/planState.js.map +1 -0
  104. package/dist/cli/capabilityContext/progress.js +96 -0
  105. package/dist/cli/capabilityContext/progress.js.map +1 -0
  106. package/dist/cli/capabilityContext/realisera.js +174 -0
  107. package/dist/cli/capabilityContext/realisera.js.map +1 -0
  108. package/dist/cli/capabilityContext/shared.js +94 -0
  109. package/dist/cli/capabilityContext/shared.js.map +1 -0
  110. package/dist/cli/capabilityContext/slim.js +106 -0
  111. package/dist/cli/capabilityContext/slim.js.map +1 -0
  112. package/dist/cli/capabilityContext/startup.js +208 -0
  113. package/dist/cli/capabilityContext/startup.js.map +1 -0
  114. package/dist/cli/capabilityContext/types.js +43 -0
  115. package/dist/cli/capabilityContext/types.js.map +1 -0
  116. package/dist/cli/capabilityContext.js +1 -2420
  117. package/dist/cli/capabilityContext.js.map +1 -1
  118. package/dist/cli/commands/capability.js +1 -8
  119. package/dist/cli/commands/capability.js.map +1 -1
  120. package/dist/cli/commands/compact.js +1 -1
  121. package/dist/cli/commands/compact.js.map +1 -1
  122. package/dist/cli/commands/doctor.js +35 -6
  123. package/dist/cli/commands/doctor.js.map +1 -1
  124. package/dist/cli/commands/lint.js +4 -36
  125. package/dist/cli/commands/lint.js.map +1 -1
  126. package/dist/cli/commands/query.js +1 -1
  127. package/dist/cli/commands/query.js.map +1 -1
  128. package/dist/cli/commands/report.js +11 -2
  129. package/dist/cli/commands/report.js.map +1 -1
  130. package/dist/cli/commands/schema.js +1 -2
  131. package/dist/cli/commands/schema.js.map +1 -1
  132. package/dist/cli/commands/state/decisions.js +397 -0
  133. package/dist/cli/commands/state/decisions.js.map +1 -0
  134. package/dist/cli/commands/state/docs.js +93 -0
  135. package/dist/cli/commands/state/docs.js.map +1 -0
  136. package/dist/cli/commands/state/experiments.js +67 -0
  137. package/dist/cli/commands/state/experiments.js.map +1 -0
  138. package/dist/cli/commands/state/health.js +114 -0
  139. package/dist/cli/commands/state/health.js.map +1 -0
  140. package/dist/cli/commands/state/index.js +51 -0
  141. package/dist/cli/commands/state/index.js.map +1 -0
  142. package/dist/cli/commands/state/objective.js +68 -0
  143. package/dist/cli/commands/state/objective.js.map +1 -0
  144. package/dist/cli/commands/state/plan.js +172 -0
  145. package/dist/cli/commands/state/plan.js.map +1 -0
  146. package/dist/cli/commands/state/progress.js +47 -0
  147. package/dist/cli/commands/state/progress.js.map +1 -0
  148. package/dist/cli/commands/state/shared.js +15 -0
  149. package/dist/cli/commands/state/shared.js.map +1 -0
  150. package/dist/cli/commands/state/todo.js +121 -0
  151. package/dist/cli/commands/state/todo.js.map +1 -0
  152. package/dist/cli/commands/state.js +29 -18
  153. package/dist/cli/commands/state.js.map +1 -1
  154. package/dist/cli/commands/validate.js +44 -20
  155. package/dist/cli/commands/validate.js.map +1 -1
  156. package/dist/cli/dispatch/check.js +328 -0
  157. package/dist/cli/dispatch/check.js.map +1 -0
  158. package/dist/cli/dispatch/index.js +177 -0
  159. package/dist/cli/dispatch/index.js.map +1 -0
  160. package/dist/cli/dispatch/lifecycle.js +492 -0
  161. package/dist/cli/dispatch/lifecycle.js.map +1 -0
  162. package/dist/cli/dispatch/prime.js +100 -0
  163. package/dist/cli/dispatch/prime.js.map +1 -0
  164. package/dist/cli/dispatch/shared.js +64 -0
  165. package/dist/cli/dispatch/shared.js.map +1 -0
  166. package/dist/cli/dispatch/state.js +149 -0
  167. package/dist/cli/dispatch/state.js.map +1 -0
  168. package/dist/cli/dispatch.js +1 -995
  169. package/dist/cli/dispatch.js.map +1 -1
  170. package/dist/cli/errors.js +53 -0
  171. package/dist/cli/errors.js.map +1 -0
  172. package/dist/cli/help.js +1 -3
  173. package/dist/cli/help.js.map +1 -1
  174. package/dist/cli/orientation.js +10 -7
  175. package/dist/cli/orientation.js.map +1 -1
  176. package/dist/cli/stateQuery.js +7 -0
  177. package/dist/cli/stateQuery.js.map +1 -1
  178. package/dist/cli/todoMarkdown.js +33 -0
  179. package/dist/cli/todoMarkdown.js.map +1 -0
  180. package/dist/hooks/common.js +8 -25
  181. package/dist/hooks/common.js.map +1 -1
  182. package/dist/hooks/compaction/apply.js +244 -0
  183. package/dist/hooks/compaction/apply.js.map +1 -0
  184. package/dist/hooks/compaction/dryRun.js +181 -0
  185. package/dist/hooks/compaction/dryRun.js.map +1 -0
  186. package/dist/hooks/compaction/index.js +23 -0
  187. package/dist/hooks/compaction/index.js.map +1 -0
  188. package/dist/hooks/compaction/parse.js +129 -0
  189. package/dist/hooks/compaction/parse.js.map +1 -0
  190. package/dist/hooks/compaction/retention.js +197 -0
  191. package/dist/hooks/compaction/retention.js.map +1 -0
  192. package/dist/hooks/compaction/status.js +243 -0
  193. package/dist/hooks/compaction/status.js.map +1 -0
  194. package/dist/hooks/compaction/types.js +6 -0
  195. package/dist/hooks/compaction/types.js.map +1 -0
  196. package/dist/hooks/compaction.js +20 -20
  197. package/dist/hooks/compaction.js.map +1 -1
  198. package/dist/hooks/cursorPreToolUse.js +1 -1
  199. package/dist/hooks/cursorPreToolUse.js.map +1 -1
  200. package/dist/hooks/sessionStart.js +4 -4
  201. package/dist/hooks/sessionStart.js.map +1 -1
  202. package/dist/hooks/sessionStop.js +3 -12
  203. package/dist/hooks/sessionStop.js.map +1 -1
  204. package/dist/hooks/validateArtifact/agentFacing.js +10 -0
  205. package/dist/hooks/validateArtifact/agentFacing.js.map +1 -0
  206. package/dist/hooks/validateArtifact/index.js +149 -0
  207. package/dist/hooks/validateArtifact/index.js.map +1 -0
  208. package/dist/hooks/validateArtifact/markdown.js +95 -0
  209. package/dist/hooks/validateArtifact/markdown.js.map +1 -0
  210. package/dist/hooks/validateArtifact/runtime.js +83 -0
  211. package/dist/hooks/validateArtifact/runtime.js.map +1 -0
  212. package/dist/hooks/validateArtifact/schema.js +455 -0
  213. package/dist/hooks/validateArtifact/schema.js.map +1 -0
  214. package/dist/hooks/validateArtifact/traversal.js +105 -0
  215. package/dist/hooks/validateArtifact/traversal.js.map +1 -0
  216. package/dist/hooks/validateArtifact/violations.js +105 -0
  217. package/dist/hooks/validateArtifact/violations.js.map +1 -0
  218. package/dist/hooks/validateArtifact.js +40 -49
  219. package/dist/hooks/validateArtifact.js.map +1 -1
  220. package/dist/migrate/v2HandoffManifest.js +333 -0
  221. package/dist/migrate/v2HandoffManifest.js.map +1 -0
  222. package/dist/registries/artifactProtocolIds.js +77 -0
  223. package/dist/registries/artifactProtocolIds.js.map +1 -0
  224. package/dist/registries/capabilityContract.js +12 -11
  225. package/dist/registries/capabilityContract.js.map +1 -1
  226. package/dist/registries/evaluatorHandoffContract.js +171 -0
  227. package/dist/registries/evaluatorHandoffContract.js.map +1 -0
  228. package/dist/release/releaseMetadata.js +235 -0
  229. package/dist/release/releaseMetadata.js.map +1 -0
  230. package/dist/setup/codex/agents.js +96 -0
  231. package/dist/setup/codex/agents.js.map +1 -0
  232. package/dist/setup/codex/cli.js +161 -0
  233. package/dist/setup/codex/cli.js.map +1 -0
  234. package/dist/setup/codex/configToml.js +644 -0
  235. package/dist/setup/codex/configToml.js.map +1 -0
  236. package/dist/setup/codex/constants.js +29 -0
  237. package/dist/setup/codex/constants.js.map +1 -0
  238. package/dist/setup/codex/installRoot.js +64 -0
  239. package/dist/setup/codex/installRoot.js.map +1 -0
  240. package/dist/setup/codex/state.js +270 -0
  241. package/dist/setup/codex/state.js.map +1 -0
  242. package/dist/setup/codex.js +11 -1055
  243. package/dist/setup/codex.js.map +1 -1
  244. package/dist/setup/doctor/core.js +300 -0
  245. package/dist/setup/doctor/core.js.map +1 -0
  246. package/dist/setup/doctor/diagnostics.js +247 -0
  247. package/dist/setup/doctor/diagnostics.js.map +1 -0
  248. package/dist/setup/doctor/opencode.js +281 -0
  249. package/dist/setup/doctor/opencode.js.map +1 -0
  250. package/dist/setup/doctor/report.js +474 -0
  251. package/dist/setup/doctor/report.js.map +1 -0
  252. package/dist/setup/doctor.js +9 -1296
  253. package/dist/setup/doctor.js.map +1 -1
  254. package/dist/setup/opencode.js +13 -0
  255. package/dist/setup/opencode.js.map +1 -0
  256. package/dist/setup/smokeChecks.js +1 -1
  257. package/dist/setup/smokeChecks.js.map +1 -1
  258. package/dist/state/progressCommit.js +1 -1
  259. package/dist/state/progressCommit.js.map +1 -1
  260. package/dist/state/startupAnalysis/benchmark.js +367 -0
  261. package/dist/state/startupAnalysis/benchmark.js.map +1 -0
  262. package/dist/state/startupAnalysis/contract.js +122 -0
  263. package/dist/state/startupAnalysis/contract.js.map +1 -0
  264. package/dist/state/startupAnalysis/helpers.js +332 -0
  265. package/dist/state/startupAnalysis/helpers.js.map +1 -0
  266. package/dist/state/startupAnalysis/index.js +7 -0
  267. package/dist/state/startupAnalysis/index.js.map +1 -0
  268. package/dist/state/startupAnalysis/metrics.js +334 -0
  269. package/dist/state/startupAnalysis/metrics.js.map +1 -0
  270. package/dist/state/startupAnalysis/records.js +195 -0
  271. package/dist/state/startupAnalysis/records.js.map +1 -0
  272. package/dist/state/startupAnalysis/report.js +123 -0
  273. package/dist/state/startupAnalysis/report.js.map +1 -0
  274. package/dist/state/startupAnalysis/threshold.js +500 -0
  275. package/dist/state/startupAnalysis/threshold.js.map +1 -0
  276. package/dist/state/startupAnalysis.js +2 -1952
  277. package/dist/state/startupAnalysis.js.map +1 -1
  278. package/dist/upgrade/coexistenceProbe.js +83 -0
  279. package/dist/upgrade/coexistenceProbe.js.map +1 -0
  280. package/dist/upgrade/doctor.js +41 -2
  281. package/dist/upgrade/doctor.js.map +1 -1
  282. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -1
  283. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +1 -1
  284. package/dist/upgrade/migrateArtifactsV2ToV3.js +5 -83
  285. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +1 -1
  286. package/dist/upgrade/nextMajorDoctor.js +136 -0
  287. package/dist/upgrade/nextMajorDoctor.js.map +1 -0
  288. package/dist/upgrade/projectIntegration.js +3 -1
  289. package/dist/upgrade/projectIntegration.js.map +1 -1
  290. package/dist/upgrade/runtimeMigration.js +32 -5
  291. package/dist/upgrade/runtimeMigration.js.map +1 -1
  292. package/dist/upgrade/v3CapabilitySurface.js +15 -0
  293. package/dist/upgrade/v3CapabilitySurface.js.map +1 -0
  294. package/dist/upgrade/versionResolution.js +12 -4
  295. package/dist/upgrade/versionResolution.js.map +1 -1
  296. package/dist/validate/appHomeContract.js +4 -4
  297. package/dist/validate/appHomeContract.js.map +1 -1
  298. package/dist/validate/capability.js +11 -3
  299. package/dist/validate/capability.js.map +1 -1
  300. package/dist/validate/selfAudit.js +62 -20
  301. package/dist/validate/selfAudit.js.map +1 -1
  302. package/dist/validate/vocabularyAuthority.js +298 -0
  303. package/dist/validate/vocabularyAuthority.js.map +1 -0
  304. package/package.json +4 -4
  305. package/bundle/references/v1-section-mapping.md +0 -47
  306. package/bundle/skills/agentera/capabilities/dokumentera/instructions.md +0 -428
  307. package/bundle/skills/agentera/capabilities/hej/instructions.md +0 -331
  308. package/bundle/skills/agentera/capabilities/inspektera/instructions.md +0 -514
  309. package/bundle/skills/agentera/capabilities/inspirera/instructions.md +0 -280
  310. package/bundle/skills/agentera/capabilities/optimera/instructions.md +0 -437
  311. package/bundle/skills/agentera/capabilities/orkestrera/instructions.md +0 -433
  312. package/bundle/skills/agentera/capabilities/planera/instructions.md +0 -368
  313. package/bundle/skills/agentera/capabilities/profilera/instructions.md +0 -419
  314. package/bundle/skills/agentera/capabilities/realisera/instructions.md +0 -403
  315. package/bundle/skills/agentera/capabilities/resonera/instructions.md +0 -329
  316. package/bundle/skills/agentera/capabilities/visionera/instructions.md +0 -309
  317. package/bundle/skills/agentera/capabilities/visualisera/instructions.md +0 -400
  318. package/bundle/skills/hej/.claude-plugin/plugin.json +0 -6
  319. package/bundle/skills/hej/SKILL.md +0 -69
  320. package/bundle/skills/hej/agents/hej.toml +0 -11
  321. package/bundle/skills/hej/agents/openai.yaml +0 -8
@@ -0,0 +1,171 @@
1
+ import fs from "node:fs";
2
+ import { execSync } from "node:child_process";
3
+ import path from "node:path";
4
+ import { loadYamlMapping } from "../core/yaml.js";
5
+ /**
6
+ * Evaluator-handoff contract loader and inspektera evaluation report validator.
7
+ * Authority: references/cli/capability-instruction-contract.yaml#evaluator_handoff
8
+ */
9
+ export const EVALUATOR_HANDOFF_REPORT_SCHEMA_VERSION = "agentera.inspekteraEvaluationReport.v1";
10
+ function isMapping(value) {
11
+ return value !== null && typeof value === "object" && !Array.isArray(value);
12
+ }
13
+ function asString(value) {
14
+ return value === null || value === undefined ? "" : String(value).trim();
15
+ }
16
+ export function defaultEvaluatorHandoffContractPath(repoRoot) {
17
+ return path.join(repoRoot, "references", "cli", "capability-instruction-contract.yaml");
18
+ }
19
+ export function loadEvaluatorHandoffContract(contractPath) {
20
+ const data = loadYamlMapping(fs.readFileSync(contractPath, "utf8"));
21
+ const handoff = data.evaluator_handoff;
22
+ if (!isMapping(handoff)) {
23
+ throw new Error(`evaluator_handoff section missing in ${contractPath}`);
24
+ }
25
+ const rowSchema = isMapping(handoff.row_schema) ? handoff.row_schema : {};
26
+ const citationFormats = isMapping(rowSchema.citation_formats) ? rowSchema.citation_formats : {};
27
+ const fileLine = isMapping(citationFormats.file_line) ? citationFormats.file_line : {};
28
+ const notApplicable = isMapping(citationFormats.not_applicable) ? citationFormats.not_applicable : {};
29
+ const warnVerify = isMapping(rowSchema.warn_verify_command) ? rowSchema.warn_verify_command : {};
30
+ const patternSource = asString(fileLine.pattern) || "^[^:\\s]+:\\d+$";
31
+ return {
32
+ path: contractPath,
33
+ status: asString(handoff.status) || "unknown",
34
+ reportSchemaVersion: asString(handoff.report_schema_version) || EVALUATOR_HANDOFF_REPORT_SCHEMA_VERSION,
35
+ citationRequiredFor: Array.isArray(rowSchema.citation_required_for)
36
+ ? rowSchema.citation_required_for.map((v) => String(v))
37
+ : ["WARN", "FAIL"],
38
+ fileLinePattern: new RegExp(patternSource),
39
+ notApplicablePrefix: asString(notApplicable.prefix) || "not-applicable:",
40
+ minNotApplicableReasonLength: Number(notApplicable.min_reason_length) || 8,
41
+ warnVerifyCommandRequired: warnVerify.required_when === "file_line_citation",
42
+ warnVerifyCommandPrefixes: Array.isArray(warnVerify.allowed_prefixes)
43
+ ? warnVerify.allowed_prefixes.map((v) => String(v))
44
+ : ["grep", "git show"],
45
+ };
46
+ }
47
+ export function isFileLineCitation(citation, contract) {
48
+ return contract.fileLinePattern.test(citation);
49
+ }
50
+ export function isNotApplicableCitation(citation, contract) {
51
+ if (!citation.startsWith(contract.notApplicablePrefix))
52
+ return false;
53
+ const reason = citation.slice(contract.notApplicablePrefix.length).trim();
54
+ return reason.length >= contract.minNotApplicableReasonLength;
55
+ }
56
+ export function isValidCitation(citation, contract) {
57
+ const trimmed = citation.trim();
58
+ if (!trimmed)
59
+ return false;
60
+ return isFileLineCitation(trimmed, contract) || isNotApplicableCitation(trimmed, contract);
61
+ }
62
+ export function parseFileLineCitation(citation) {
63
+ const match = /^([^:\s]+):(\d+)$/.exec(citation.trim());
64
+ if (!match)
65
+ return null;
66
+ return { file: match[1], line: Number(match[2]) };
67
+ }
68
+ export function isAllowedVerifyCommand(command, contract) {
69
+ const trimmed = command.trim();
70
+ return contract.warnVerifyCommandPrefixes.some((prefix) => trimmed.startsWith(prefix));
71
+ }
72
+ export function validateEvaluationReportRow(row, index, contract) {
73
+ const errors = [];
74
+ const label = `rows[${index}]`;
75
+ const status = asString(row.status).toUpperCase();
76
+ const criterion = asString(row.criterion);
77
+ const evidence = asString(row.evidence);
78
+ if (!criterion)
79
+ errors.push(`${label}: missing criterion`);
80
+ if (!status)
81
+ errors.push(`${label}: missing status`);
82
+ if (!evidence)
83
+ errors.push(`${label}: missing evidence`);
84
+ if (!contract.citationRequiredFor.includes(status))
85
+ return errors;
86
+ const citation = asString(row.citation);
87
+ if (!citation) {
88
+ errors.push(`${label}: WARN/FAIL row missing citation`);
89
+ return errors;
90
+ }
91
+ if (!isValidCitation(citation, contract)) {
92
+ errors.push(`${label}: citation must be file:line (e.g. TODO.md:15) or not-applicable: <reason> (min ${contract.minNotApplicableReasonLength} chars)`);
93
+ return errors;
94
+ }
95
+ if (status === "WARN" && contract.warnVerifyCommandRequired && isFileLineCitation(citation, contract)) {
96
+ const verifyCommand = asString(row.verify_command);
97
+ if (!verifyCommand) {
98
+ errors.push(`${label}: WARN row with file:line citation missing verify_command`);
99
+ }
100
+ else if (!isAllowedVerifyCommand(verifyCommand, contract)) {
101
+ errors.push(`${label}: verify_command must start with grep or git show`);
102
+ }
103
+ }
104
+ return errors;
105
+ }
106
+ export function validateEvaluationReport(report, contract) {
107
+ const errors = [];
108
+ const schemaVersion = asString(report.schemaVersion);
109
+ if (schemaVersion && schemaVersion !== contract.reportSchemaVersion) {
110
+ errors.push(`schemaVersion must be ${contract.reportSchemaVersion}`);
111
+ }
112
+ const rows = Array.isArray(report.rows) ? report.rows : null;
113
+ if (!rows || rows.length === 0) {
114
+ errors.push("rows must be a non-empty array");
115
+ return errors;
116
+ }
117
+ rows.forEach((row, index) => {
118
+ errors.push(...validateEvaluationReportRow(row, index, contract));
119
+ });
120
+ return errors;
121
+ }
122
+ function readCitedLine(repoRoot, file, line) {
123
+ const absPath = path.isAbsolute(file) ? file : path.join(repoRoot, file);
124
+ if (!fs.existsSync(absPath))
125
+ return "";
126
+ const lines = fs.readFileSync(absPath, "utf8").split(/\r?\n/);
127
+ return (lines[line - 1] ?? "").trim();
128
+ }
129
+ export function verifyWarnCitationAtLine(row, repoRoot) {
130
+ const citation = asString(row.citation);
131
+ const verifyCommand = asString(row.verify_command);
132
+ const parsed = parseFileLineCitation(citation);
133
+ if (!parsed) {
134
+ return { ok: true, message: "not-applicable citation skips line verification" };
135
+ }
136
+ const citedLine = readCitedLine(repoRoot, parsed.file, parsed.line);
137
+ if (!citedLine) {
138
+ return { ok: false, message: `cited line ${parsed.line} is missing or empty in ${parsed.file}` };
139
+ }
140
+ if (!verifyCommand) {
141
+ return { ok: false, message: "missing verify_command for file:line citation" };
142
+ }
143
+ try {
144
+ const output = execSync(verifyCommand, { cwd: repoRoot, encoding: "utf8", stdio: ["ignore", "pipe", "pipe"] })
145
+ .trim();
146
+ if (output.includes(citedLine)) {
147
+ return { ok: true, message: "verify_command output includes cited line text" };
148
+ }
149
+ return {
150
+ ok: false,
151
+ message: `verify_command output does not reproduce cited line ${parsed.line} in ${parsed.file}`,
152
+ };
153
+ }
154
+ catch (exc) {
155
+ return { ok: false, message: `verify_command failed: ${exc.message}` };
156
+ }
157
+ }
158
+ export function evaluatorHandoffOutputRequirements(contract) {
159
+ return {
160
+ citation_required_for: contract.citationRequiredFor,
161
+ warn_verify_command_required: contract.warnVerifyCommandRequired,
162
+ citation_formats: {
163
+ file_line: "path/to/file:line",
164
+ not_applicable: `${contract.notApplicablePrefix}<reason>`,
165
+ },
166
+ verify_command_prefixes: contract.warnVerifyCommandPrefixes,
167
+ report_schema_version: contract.reportSchemaVersion,
168
+ schema_authority: "references/cli/capability-instruction-contract.yaml#evaluator_handoff",
169
+ };
170
+ }
171
+ //# sourceMappingURL=evaluatorHandoffContract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluatorHandoffContract.js","sourceRoot":"","sources":["../../src/registries/evaluatorHandoffContract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,235 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { resolvePath } from "../core/paths.js";
4
+ import { resolveSourceRoot } from "../core/sourceRoot.js";
5
+ import { loadYamlMappingFile } from "../core/yaml.js";
6
+ export const RELEASE_METADATA_AUTHORITY_FILES = [
7
+ "registry.json",
8
+ "packages/cli/package.json",
9
+ "references/cli/update-channels.yaml",
10
+ ];
11
+ export const RELEASE_METADATA_ADVISORY_FILES = [
12
+ "packages/cli/bundle/.agentera-npx-bundle.json",
13
+ ];
14
+ const SEMVER_CORE_RE = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/;
15
+ const SEMVER_STRICT_RE = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/;
16
+ const PRE_RELEASE_RE = /-(.+)$/;
17
+ const GIT_REF_HEX_RE = /^[0-9a-f]{40}$/i;
18
+ function rootDefault() {
19
+ return resolveSourceRoot();
20
+ }
21
+ function readJson(pathname) {
22
+ try {
23
+ return JSON.parse(fs.readFileSync(pathname, "utf8"));
24
+ }
25
+ catch {
26
+ return null;
27
+ }
28
+ }
29
+ function readRegistryVersion(root) {
30
+ const source = "registry.json";
31
+ const data = readJson(path.join(root, source));
32
+ if (data === null) {
33
+ return { version: null, source };
34
+ }
35
+ const skills = data.skills;
36
+ if (!Array.isArray(skills) || skills.length === 0) {
37
+ return { version: null, source };
38
+ }
39
+ const first = skills[0];
40
+ if (!first || typeof first !== "object") {
41
+ return { version: null, source };
42
+ }
43
+ const version = first.version;
44
+ return { version: typeof version === "string" ? version : null, source };
45
+ }
46
+ function readPackageJson(root) {
47
+ const candidate = path.join(root, "packages/cli/package.json");
48
+ if (!fs.existsSync(candidate)) {
49
+ return null;
50
+ }
51
+ return readJson(candidate);
52
+ }
53
+ function readUpdateChannels(root) {
54
+ const candidate = path.join(root, "references/cli/update-channels.yaml");
55
+ if (!fs.existsSync(candidate)) {
56
+ return null;
57
+ }
58
+ try {
59
+ return loadYamlMappingFile(candidate);
60
+ }
61
+ catch {
62
+ return null;
63
+ }
64
+ }
65
+ function readBundleSentinel(root) {
66
+ const source = "packages/cli/bundle/.agentera-npx-bundle.json";
67
+ const candidate = path.join(root, source);
68
+ if (!fs.existsSync(candidate)) {
69
+ return { version: null, source };
70
+ }
71
+ const data = readJson(candidate);
72
+ if (data === null) {
73
+ return { version: null, source };
74
+ }
75
+ const version = data.suiteVersion;
76
+ return { version: typeof version === "string" ? version : null, source };
77
+ }
78
+ /** Parse `X.Y.Z` core (ignore pre-release and build metadata). */
79
+ function parseSemverCore(version) {
80
+ const match = SEMVER_CORE_RE.exec(version);
81
+ if (!match) {
82
+ return null;
83
+ }
84
+ const core = `${match[1]}.${match[2]}.${match[3]}`;
85
+ const preMatch = PRE_RELEASE_RE.exec(version);
86
+ return { core, preRelease: preMatch ? preMatch[1] : null };
87
+ }
88
+ function pickChannelDefaults(authority) {
89
+ if (authority === null) {
90
+ return { development: null, stable: null };
91
+ }
92
+ const versionResolution = authority.version_resolution;
93
+ const latestOnChannel = versionResolution?.latest_on_channel;
94
+ const defaults = (latestOnChannel?.offline_defaults ?? {});
95
+ return {
96
+ development: typeof defaults.development === "string" ? defaults.development : null,
97
+ stable: typeof defaults.stable === "string" ? defaults.stable : null,
98
+ };
99
+ }
100
+ export function readReleaseMetadata(root = rootDefault()) {
101
+ const resolved = resolvePath(root);
102
+ const registry = readRegistryVersion(resolved);
103
+ const pkg = readPackageJson(resolved);
104
+ const channels = readUpdateChannels(resolved);
105
+ const bundle = readBundleSentinel(resolved);
106
+ const topVersion = pkg && typeof pkg.version === "string" ? pkg.version : null;
107
+ const agenteraBlock = pkg && typeof pkg.agentera === "object" && pkg.agentera !== null
108
+ ? pkg.agentera
109
+ : null;
110
+ const suiteVersion = agenteraBlock && typeof agenteraBlock.suiteVersion === "string"
111
+ ? agenteraBlock.suiteVersion
112
+ : null;
113
+ const gitRef = agenteraBlock && typeof agenteraBlock.gitRef === "string"
114
+ ? agenteraBlock.gitRef
115
+ : null;
116
+ const { development, stable } = pickChannelDefaults(channels);
117
+ return {
118
+ authoritativeVersion: registry.version,
119
+ authoritativeSource: registry.source,
120
+ packageVersion: topVersion,
121
+ packageSuiteVersion: suiteVersion,
122
+ packageGitRef: gitRef,
123
+ developmentChannelDefault: development,
124
+ stableChannelDefault: stable,
125
+ bundleSuiteVersion: bundle.version,
126
+ };
127
+ }
128
+ /**
129
+ * Validate release-metadata coherence. Returns an empty array when the
130
+ * source-tree version surfaces agree on a single release train.
131
+ */
132
+ export function validateReleaseMetadata(root = rootDefault()) {
133
+ const errors = [];
134
+ const snap = readReleaseMetadata(root);
135
+ const rootLabel = path.basename(resolvePath(root)) || "repo root";
136
+ // 1. registry.json must publish a valid semver `skills[0].version`.
137
+ if (snap.authoritativeVersion === null) {
138
+ errors.push("registry.json: skills[0].version is required for release-metadata validation");
139
+ }
140
+ else {
141
+ const parsed = parseSemverCore(snap.authoritativeVersion);
142
+ if (parsed === null) {
143
+ errors.push(`registry.json: skills[0].version ${JSON.stringify(snap.authoritativeVersion)} is not a valid semver`);
144
+ }
145
+ else if (parsed.preRelease !== null) {
146
+ // registry.json is the suite authority and stays on the released core;
147
+ // pre-release suffixes belong only to packages/cli/package.json.
148
+ errors.push(`registry.json: skills[0].version must be a released core version (no pre-release suffix); got ${JSON.stringify(snap.authoritativeVersion)}`);
149
+ }
150
+ }
151
+ // 2. packages/cli/package.json must exist and parse.
152
+ if (snap.packageVersion === null && snap.packageSuiteVersion === null && snap.packageGitRef === null) {
153
+ errors.push("packages/cli/package.json: missing or unreadable; cannot validate release-metadata");
154
+ }
155
+ else {
156
+ // 2a. top-level `version` must be valid semver and share its core with registry.
157
+ if (snap.packageVersion === null) {
158
+ errors.push("packages/cli/package.json: top-level `version` is required");
159
+ }
160
+ else {
161
+ const parsed = parseSemverCore(snap.packageVersion);
162
+ if (parsed === null) {
163
+ errors.push(`packages/cli/package.json: top-level version ${JSON.stringify(snap.packageVersion)} is not a valid semver`);
164
+ }
165
+ else if (snap.authoritativeVersion !== null &&
166
+ parseSemverCore(snap.authoritativeVersion)?.core !== parsed.core) {
167
+ errors.push(`release-metadata divergence: registry.json skills[0].version core is ${JSON.stringify(parseSemverCore(snap.authoritativeVersion)?.core)} ` +
168
+ `but packages/cli/package.json top-level version core is ${JSON.stringify(parsed.core)}; ` +
169
+ `the npm package version must share its major.minor.patch with the registry suite version`);
170
+ }
171
+ }
172
+ // 2b. `agentera.suiteVersion` must match registry exactly.
173
+ if (snap.packageSuiteVersion === null) {
174
+ errors.push("packages/cli/package.json: `agentera.suiteVersion` is required");
175
+ }
176
+ else if (snap.authoritativeVersion !== null &&
177
+ snap.packageSuiteVersion !== snap.authoritativeVersion) {
178
+ errors.push(`release-metadata divergence: registry.json skills[0].version is ${JSON.stringify(snap.authoritativeVersion)} ` +
179
+ `but packages/cli/package.json agentera.suiteVersion is ${JSON.stringify(snap.packageSuiteVersion)}; ` +
180
+ `the agentera.suiteVersion mirror must equal the registry version exactly`);
181
+ }
182
+ else if (!SEMVER_STRICT_RE.test(snap.packageSuiteVersion)) {
183
+ errors.push(`packages/cli/package.json: agentera.suiteVersion ${JSON.stringify(snap.packageSuiteVersion)} is not a released core semver`);
184
+ }
185
+ // 2c. `agentera.gitRef` must be a 40-character hex SHA.
186
+ if (snap.packageGitRef === null || snap.packageGitRef === "") {
187
+ errors.push("packages/cli/package.json: `agentera.gitRef` is required for release-metadata validation");
188
+ }
189
+ else if (!GIT_REF_HEX_RE.test(snap.packageGitRef)) {
190
+ errors.push(`packages/cli/package.json: agentera.gitRef ${JSON.stringify(snap.packageGitRef)} must be a 40-character hex SHA; ` +
191
+ `short SHAs and branch names are not reproducible release references`);
192
+ }
193
+ }
194
+ // 3. update-channels.yaml development default must equal the registry version.
195
+ if (snap.developmentChannelDefault === null) {
196
+ errors.push("references/cli/update-channels.yaml: version_resolution.latest_on_channel.offline_defaults.development is required");
197
+ }
198
+ else if (snap.authoritativeVersion !== null &&
199
+ snap.developmentChannelDefault !== snap.authoritativeVersion) {
200
+ errors.push(`release-metadata divergence: registry.json skills[0].version is ${JSON.stringify(snap.authoritativeVersion)} ` +
201
+ `but update-channels.yaml offline_defaults.development is ${JSON.stringify(snap.developmentChannelDefault)}; ` +
202
+ `the development channel default must match the registry version exactly`);
203
+ }
204
+ // 4. Stable channel default is informational on the @next branch; the
205
+ // validator surfaces it so maintainers can confirm the stable line still
206
+ // resolves to its declared 2.x version. A drift on the stable channel
207
+ // alone is not an error here — that lane is owned by the `main` branch
208
+ // compatibility boundary per `references/cli/update-channels.yaml`.
209
+ void snap.stableChannelDefault;
210
+ // 5. Advisory check on the local bundle sentinel.
211
+ if (snap.bundleSuiteVersion !== null) {
212
+ if (snap.authoritativeVersion !== null &&
213
+ snap.bundleSuiteVersion !== snap.authoritativeVersion) {
214
+ errors.push(`release-metadata drift (advisory): packages/cli/bundle/.agentera-npx-bundle.json suiteVersion is ${JSON.stringify(snap.bundleSuiteVersion)} ` +
215
+ `but registry.json skills[0].version is ${JSON.stringify(snap.authoritativeVersion)}; ` +
216
+ `run \`npm run bundle:data\` (or \`pnpm -C packages/cli run bundle:data\`) at ${rootLabel} to refresh the local bundle copy before publishing`);
217
+ }
218
+ }
219
+ return errors;
220
+ }
221
+ export function releaseMetadataMain(opts = {}) {
222
+ const root = resolvePath(opts.root ?? rootDefault());
223
+ const out = opts.out ?? ((line) => process.stdout.write(line + "\n"));
224
+ const err = opts.err ?? ((line) => process.stderr.write(line + "\n"));
225
+ const errors = validateReleaseMetadata(root);
226
+ if (errors.length > 0) {
227
+ out("release-metadata validation failed:");
228
+ for (const message of errors)
229
+ out(`- ${message}`);
230
+ return 1;
231
+ }
232
+ out("release-metadata ok");
233
+ return 0;
234
+ }
235
+ //# sourceMappingURL=releaseMetadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"releaseMetadata.js","sourceRoot":"","sources":["../../src/release/releaseMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAgEtD,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC9C,eAAe;IACf,2BAA2B;IAC3B,qCAAqC;CAC7B,CAAC;AAEX,MAAM,CAAC,MAAM,+BAA+B,GAAG;IAC7C,+CAA+C;CACvC,CAAC;AAEX,MAAM,cAAc,GAAG,qFAAqF,CAAC;AAC7G,MAAM,gBAAgB,GAAG,4CAA4C,CAAC;AACtE,MAAM,cAAc,GAAG,QAAQ,CAAC;AAChC,MAAM,cAAc,GAAG,iBAAiB,CAAC;AAEzC,SAAS,WAAW;IAClB,OAAO,iBAAiB,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,QAAQ,CAAC,QAAgB;IAChC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAS,CAAC;IAC/D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACvC,MAAM,MAAM,GAAG,eAAe,CAAC;IAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/C,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACnC,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACnC,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACnC,CAAC;IACD,MAAM,OAAO,GAAI,KAAc,CAAC,OAAO,CAAC;IACxC,OAAO,EAAE,OAAO,EAAE,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;AAC3E,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,2BAA2B,CAAC,CAAC;IAC/D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY;IACtC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,qCAAqC,CAAC,CAAC;IACzE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,OAAO,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY;IACtC,MAAM,MAAM,GAAG,+CAA+C,CAAC;IAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACnC,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IACjC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACnC,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC;IAClC,OAAO,EAAE,OAAO,EAAE,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;AAC3E,CAAC;AAED,kEAAkE;AAClE,SAAS,eAAe,CAAC,OAAe;IACtC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9C,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7D,CAAC;AAED,SAAS,mBAAmB,CAAC,SAAsB;IAIjD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC7C,CAAC;IACD,MAAM,iBAAiB,GAAG,SAAS,CAAC,kBAAsC,CAAC;IAC3E,MAAM,eAAe,GAAG,iBAAiB,EAAE,iBAAqC,CAAC;IACjF,MAAM,QAAQ,GAAG,CAAC,eAAe,EAAE,gBAAgB,IAAI,EAAE,CAAS,CAAC;IACnE,OAAO;QACL,WAAW,EAAE,OAAO,QAAQ,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI;QACnF,MAAM,EAAE,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;KACrE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAe,WAAW,EAAE;IAC9D,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAE5C,MAAM,UAAU,GAAG,GAAG,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/E,MAAM,aAAa,GAAG,GAAG,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI;QACpF,CAAC,CAAE,GAAG,CAAC,QAAiB;QACxB,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,YAAY,GAAG,aAAa,IAAI,OAAO,aAAa,CAAC,YAAY,KAAK,QAAQ;QAClF,CAAC,CAAC,aAAa,CAAC,YAAY;QAC5B,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,MAAM,GAAG,aAAa,IAAI,OAAO,aAAa,CAAC,MAAM,KAAK,QAAQ;QACtE,CAAC,CAAC,aAAa,CAAC,MAAM;QACtB,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAE9D,OAAO;QACL,oBAAoB,EAAE,QAAQ,CAAC,OAAO;QACtC,mBAAmB,EAAE,QAAQ,CAAC,MAAM;QACpC,cAAc,EAAE,UAAU;QAC1B,mBAAmB,EAAE,YAAY;QACjC,aAAa,EAAE,MAAM;QACrB,yBAAyB,EAAE,WAAW;QACtC,oBAAoB,EAAE,MAAM;QAC5B,kBAAkB,EAAE,MAAM,CAAC,OAAO;KACnC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAe,WAAW,EAAE;IAClE,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,WAAW,CAAC;IAElE,oEAAoE;IACpE,IAAI,IAAI,CAAC,oBAAoB,KAAK,IAAI,EAAE,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;IAC9F,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC1D,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CACT,oCAAoC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC,wBAAwB,CACtG,CAAC;QACJ,CAAC;aAAM,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YACtC,uEAAuE;YACvE,iEAAiE;YACjE,MAAM,CAAC,IAAI,CACT,iGAAiG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAC7I,CAAC;QACJ,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,IAAI,IAAI,CAAC,mBAAmB,KAAK,IAAI,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;QACrG,MAAM,CAAC,IAAI,CAAC,oFAAoF,CAAC,CAAC;IACpG,CAAC;SAAM,CAAC;QACN,iFAAiF;QACjF,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;QAC5E,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACpD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,MAAM,CAAC,IAAI,CACT,gDAAgD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,wBAAwB,CAC5G,CAAC;YACJ,CAAC;iBAAM,IACL,IAAI,CAAC,oBAAoB,KAAK,IAAI;gBAClC,eAAe,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC,IAAI,EAChE,CAAC;gBACD,MAAM,CAAC,IAAI,CACT,wEAAwE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,IAAI,CAAC,GAAG;oBACzI,2DAA2D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI;oBAC1F,0FAA0F,CAC7F,CAAC;YACJ,CAAC;QACH,CAAC;QAED,2DAA2D;QAC3D,IAAI,IAAI,CAAC,mBAAmB,KAAK,IAAI,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;QAChF,CAAC;aAAM,IACL,IAAI,CAAC,oBAAoB,KAAK,IAAI;YAClC,IAAI,CAAC,mBAAmB,KAAK,IAAI,CAAC,oBAAoB,EACtD,CAAC;YACD,MAAM,CAAC,IAAI,CACT,mEAAmE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG;gBAC7G,0DAA0D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI;gBACtG,0EAA0E,CAC7E,CAAC;QACJ,CAAC;aAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC5D,MAAM,CAAC,IAAI,CACT,oDAAoD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,gCAAgC,CAC7H,CAAC;QACJ,CAAC;QAED,wDAAwD;QACxD,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,IAAI,IAAI,CAAC,aAAa,KAAK,EAAE,EAAE,CAAC;YAC7D,MAAM,CAAC,IAAI,CAAC,0FAA0F,CAAC,CAAC;QAC1G,CAAC;aAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YACpD,MAAM,CAAC,IAAI,CACT,8CAA8C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,mCAAmC;gBACjH,qEAAqE,CACxE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,IAAI,IAAI,CAAC,yBAAyB,KAAK,IAAI,EAAE,CAAC;QAC5C,MAAM,CAAC,IAAI,CACT,oHAAoH,CACrH,CAAC;IACJ,CAAC;SAAM,IACL,IAAI,CAAC,oBAAoB,KAAK,IAAI;QAClC,IAAI,CAAC,yBAAyB,KAAK,IAAI,CAAC,oBAAoB,EAC5D,CAAC;QACD,MAAM,CAAC,IAAI,CACT,mEAAmE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG;YAC7G,4DAA4D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI;YAC9G,yEAAyE,CAC5E,CAAC;IACJ,CAAC;IAED,sEAAsE;IACtE,yEAAyE;IACzE,sEAAsE;IACtE,uEAAuE;IACvE,oEAAoE;IACpE,KAAK,IAAI,CAAC,oBAAoB,CAAC;IAE/B,kDAAkD;IAClD,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE,CAAC;QACrC,IACE,IAAI,CAAC,oBAAoB,KAAK,IAAI;YAClC,IAAI,CAAC,kBAAkB,KAAK,IAAI,CAAC,oBAAoB,EACrD,CAAC;YACD,MAAM,CAAC,IAAI,CACT,oGAAoG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG;gBAC5I,0CAA0C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI;gBACvF,gFAAgF,SAAS,qDAAqD,CACjJ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAQD,MAAM,UAAU,mBAAmB,CAAC,OAAmC,EAAE;IACvE,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;IACrD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;IAC9E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,GAAG,CAAC,qCAAqC,CAAC,CAAC;QAC3C,KAAK,MAAM,OAAO,IAAI,MAAM;YAAE,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAC3B,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,96 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { expanduser, isFile, pathExists } from "../../core/paths.js";
4
+ import { CAPABILITY_AGENT_NAMES } from "./constants.js";
5
+ export function codexAgentSourceDir(installRoot) {
6
+ const candidates = [
7
+ path.join(installRoot, "app", "skills", "agentera", "agents"),
8
+ path.join(installRoot, "skills", "agentera", "agents"),
9
+ ];
10
+ for (const candidate of candidates) {
11
+ try {
12
+ if (fs.statSync(candidate).isDirectory())
13
+ return candidate;
14
+ }
15
+ catch {
16
+ /* not a dir */
17
+ }
18
+ }
19
+ return candidates[0];
20
+ }
21
+ export function defaultAgentsDirForConfig(configPath) {
22
+ const expanded = expanduser(configPath);
23
+ if (path.basename(expanded) === "config.toml" && path.basename(path.dirname(expanded)) === ".codex") {
24
+ return path.join(path.dirname(expanded), "agents");
25
+ }
26
+ throw new Error("Codex agent descriptors can be inferred only for documented config layouts: " +
27
+ "~/.codex/config.toml or <project>/.codex/config.toml. " +
28
+ "Pass --agents-dir for nonstandard --config-file paths.");
29
+ }
30
+ function codexDescriptorManaged(text) {
31
+ const lines = text.split(/\r\n|\r|\n/).slice(0, 5);
32
+ return lines.some((line) => line.trim() === "# agentera_managed: true");
33
+ }
34
+ export function planAgentDescriptorChanges(installRoot, agentsDir, opts) {
35
+ const sourceDir = codexAgentSourceDir(installRoot);
36
+ const changes = [];
37
+ for (const name of CAPABILITY_AGENT_NAMES) {
38
+ const source = path.join(sourceDir, `${name}.toml`);
39
+ const target = path.join(agentsDir, `${name}.toml`);
40
+ let sourceText;
41
+ try {
42
+ sourceText = fs.readFileSync(source, "utf8");
43
+ }
44
+ catch {
45
+ changes.push({ action: "blocked", name, source, target, message: "source descriptor is missing", content: "" });
46
+ continue;
47
+ }
48
+ if (!pathExists(target)) {
49
+ changes.push({ action: "pending", name, source, target, message: "would install Codex agent descriptor", content: sourceText });
50
+ continue;
51
+ }
52
+ if (!isFile(target)) {
53
+ changes.push({ action: "blocked", name, source, target, message: "target exists but is not a regular file", content: sourceText });
54
+ continue;
55
+ }
56
+ let targetText;
57
+ try {
58
+ targetText = fs.readFileSync(target, "utf8");
59
+ }
60
+ catch (exc) {
61
+ changes.push({ action: "blocked", name, source, target, message: `cannot read target descriptor: ${exc.message}`, content: sourceText });
62
+ continue;
63
+ }
64
+ if (targetText === sourceText) {
65
+ changes.push({ action: "noop", name, source, target, message: "Codex agent descriptor is current", content: sourceText });
66
+ }
67
+ else if (opts.force || codexDescriptorManaged(targetText)) {
68
+ changes.push({ action: "pending", name, source, target, message: "would refresh Codex agent descriptor", content: sourceText });
69
+ }
70
+ else {
71
+ changes.push({
72
+ action: "blocked",
73
+ name,
74
+ source,
75
+ target,
76
+ message: "target exists without Agentera ownership proof; treating it as user-owned",
77
+ content: sourceText,
78
+ });
79
+ }
80
+ }
81
+ return changes;
82
+ }
83
+ export function writeAgentDescriptorChanges(changes) {
84
+ for (const change of changes) {
85
+ if (change.action !== "pending")
86
+ continue;
87
+ fs.mkdirSync(path.dirname(change.target), { recursive: true });
88
+ fs.writeFileSync(change.target, change.content, "utf8");
89
+ }
90
+ }
91
+ function readTextOrNull(p) {
92
+ if (!pathExists(p))
93
+ return null;
94
+ return fs.readFileSync(p, "utf8");
95
+ }
96
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../../src/setup/codex/agents.ts"],"names":[],"mappings":"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"}