agentera 3.0.0-dev.25 → 3.0.0-dev.26

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 (270) hide show
  1. package/README.md +16 -20
  2. package/bundle/CHANGELOG.md +15 -25
  3. package/bundle/README.md +13 -34
  4. package/bundle/UPGRADE.md +71 -165
  5. package/bundle/references/adapters/package-manifest-interface-model.yaml +40 -241
  6. package/bundle/references/adapters/package-registry.yaml +0 -145
  7. package/bundle/references/adapters/package-surface-characterization.md +13 -38
  8. package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +5 -219
  9. package/bundle/references/adapters/runtime-lifecycle-authority.yaml +2 -29
  10. package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +1 -1
  11. package/bundle/references/artifacts/state-storage-authority.yaml +43 -447
  12. package/bundle/references/cli/agent-ready-state-contract.yaml +9 -9
  13. package/bundle/references/cli/app-lifecycle-vocabulary.yaml +3 -4
  14. package/bundle/references/cli/bundle-skill-vocabulary.yaml +9 -18
  15. package/bundle/references/cli/capability-tool-classification.yaml +2 -2
  16. package/bundle/references/cli/prime-consumer-compatibility.yaml +28 -98
  17. package/bundle/references/cli/routing-execution-vocabulary.yaml +4 -22
  18. package/bundle/references/cli/upgrade-repair-wording.md +8 -28
  19. package/bundle/references/cli/v3-handoff-manifest.schema.yaml +2 -3
  20. package/bundle/references/cli/vocabulary.md +18 -23
  21. package/bundle/references/meta/documentation-inventory.md +1 -1
  22. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +3 -11
  23. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +1 -1
  24. package/dist/cli/capabilityContext/bespoke.js +8 -2
  25. package/dist/cli/capabilityContext/bespoke.js.map +1 -1
  26. package/dist/cli/capabilityContext/closeout.js +3 -3
  27. package/dist/cli/capabilityContext/closeout.js.map +1 -1
  28. package/dist/cli/capabilityContext/evidence.js +52 -40
  29. package/dist/cli/capabilityContext/evidence.js.map +1 -1
  30. package/dist/cli/capabilityContext/startup.js +1 -1
  31. package/dist/cli/capabilityContext/startup.js.map +1 -1
  32. package/dist/cli/commands/doctor.js +6 -64
  33. package/dist/cli/commands/doctor.js.map +1 -1
  34. package/dist/cli/commands/durability.js +12 -48
  35. package/dist/cli/commands/durability.js.map +1 -1
  36. package/dist/cli/commands/prime/briefOrientation.js +2 -19
  37. package/dist/cli/commands/prime/briefOrientation.js.map +1 -1
  38. package/dist/cli/commands/prime/bundleStatus.js +8 -2
  39. package/dist/cli/commands/prime/bundleStatus.js.map +1 -1
  40. package/dist/cli/commands/prime/collectEntityOrientation.js +27 -14
  41. package/dist/cli/commands/prime/collectEntityOrientation.js.map +1 -1
  42. package/dist/cli/commands/prime/collectOrientationState.js +31 -52
  43. package/dist/cli/commands/prime/collectOrientationState.js.map +1 -1
  44. package/dist/cli/commands/prime/orientationOutput.js +3 -11
  45. package/dist/cli/commands/prime/orientationOutput.js.map +1 -1
  46. package/dist/cli/commands/prime.js +0 -5
  47. package/dist/cli/commands/prime.js.map +1 -1
  48. package/dist/cli/commands/query.js +17 -49
  49. package/dist/cli/commands/query.js.map +1 -1
  50. package/dist/cli/commands/schema.js +19 -78
  51. package/dist/cli/commands/schema.js.map +1 -1
  52. package/dist/cli/commands/state/decisions.js +11 -57
  53. package/dist/cli/commands/state/decisions.js.map +1 -1
  54. package/dist/cli/commands/state/docs.js +56 -120
  55. package/dist/cli/commands/state/docs.js.map +1 -1
  56. package/dist/cli/commands/state/experimentRecords.js +22 -121
  57. package/dist/cli/commands/state/experimentRecords.js.map +1 -1
  58. package/dist/cli/commands/state/experiments.js +9 -75
  59. package/dist/cli/commands/state/experiments.js.map +1 -1
  60. package/dist/cli/commands/state/get.js +62 -143
  61. package/dist/cli/commands/state/get.js.map +1 -1
  62. package/dist/cli/commands/state/health.js +9 -123
  63. package/dist/cli/commands/state/health.js.map +1 -1
  64. package/dist/cli/commands/state/index.js +2 -2
  65. package/dist/cli/commands/state/index.js.map +1 -1
  66. package/dist/cli/commands/state/list.js +20 -36
  67. package/dist/cli/commands/state/list.js.map +1 -1
  68. package/dist/cli/commands/state/objective.js +19 -86
  69. package/dist/cli/commands/state/objective.js.map +1 -1
  70. package/dist/cli/commands/state/plan.js +9 -388
  71. package/dist/cli/commands/state/plan.js.map +1 -1
  72. package/dist/cli/commands/state/planTasks.js +58 -93
  73. package/dist/cli/commands/state/planTasks.js.map +1 -1
  74. package/dist/cli/commands/state/plans.js +13 -40
  75. package/dist/cli/commands/state/plans.js.map +1 -1
  76. package/dist/cli/commands/state/progress.js +10 -55
  77. package/dist/cli/commands/state/progress.js.map +1 -1
  78. package/dist/cli/commands/state/todo.js +24 -133
  79. package/dist/cli/commands/state/todo.js.map +1 -1
  80. package/dist/cli/commands/state/write.js +11 -33
  81. package/dist/cli/commands/state/write.js.map +1 -1
  82. package/dist/cli/commands/upgrade.js +48 -18
  83. package/dist/cli/commands/upgrade.js.map +1 -1
  84. package/dist/cli/commands/upgradeVerify.js +21 -15
  85. package/dist/cli/commands/upgradeVerify.js.map +1 -1
  86. package/dist/cli/commands/validate.js +1 -9
  87. package/dist/cli/commands/validate.js.map +1 -1
  88. package/dist/cli/dispatch/check.js +5 -12
  89. package/dist/cli/dispatch/check.js.map +1 -1
  90. package/dist/cli/dispatch/index.js +30 -29
  91. package/dist/cli/dispatch/index.js.map +1 -1
  92. package/dist/cli/dispatch/lifecycle.js +23 -40
  93. package/dist/cli/dispatch/lifecycle.js.map +1 -1
  94. package/dist/cli/help.js +20 -100
  95. package/dist/cli/help.js.map +1 -1
  96. package/dist/cli/migrationRequired.js +22 -19
  97. package/dist/cli/migrationRequired.js.map +1 -1
  98. package/dist/cli/orientation/attention.js +1 -97
  99. package/dist/cli/orientation/attention.js.map +1 -1
  100. package/dist/cli/stateQuery.js +1 -2
  101. package/dist/cli/stateQuery.js.map +1 -1
  102. package/dist/core/skillIdentity.js +24 -0
  103. package/dist/core/skillIdentity.js.map +1 -0
  104. package/dist/hooks/common.js +1 -1
  105. package/dist/hooks/common.js.map +1 -1
  106. package/dist/hooks/compaction/status.js +2 -1
  107. package/dist/hooks/compaction/status.js.map +1 -1
  108. package/dist/hooks/cursorSessionStart.js +4 -25
  109. package/dist/hooks/cursorSessionStart.js.map +1 -1
  110. package/dist/hooks/projectHookInput.js +26 -0
  111. package/dist/hooks/projectHookInput.js.map +1 -0
  112. package/dist/hooks/sessionStart.js +23 -239
  113. package/dist/hooks/sessionStart.js.map +1 -1
  114. package/dist/hooks/sessionStop.js +4 -12
  115. package/dist/hooks/sessionStop.js.map +1 -1
  116. package/dist/hooks/validateArtifact/traversal.js +1 -1
  117. package/dist/hooks/validateArtifact/traversal.js.map +1 -1
  118. package/dist/registries/artifactRegistry.js +2 -1
  119. package/dist/registries/artifactRegistry.js.map +1 -1
  120. package/dist/registries/packageRegistry.js +57 -231
  121. package/dist/registries/packageRegistry.js.map +1 -1
  122. package/dist/release/releaseMetadata.js +1 -13
  123. package/dist/release/releaseMetadata.js.map +1 -1
  124. package/dist/runtime/lifecycleAdapterContract.js +4 -4
  125. package/dist/runtime/lifecycleAdapterContract.js.map +1 -1
  126. package/dist/runtime/lifecycleAdapters.js +14 -2
  127. package/dist/runtime/lifecycleAdapters.js.map +1 -1
  128. package/dist/runtime/lifecycleAuthority.js +5 -43
  129. package/dist/runtime/lifecycleAuthority.js.map +1 -1
  130. package/dist/runtime/lifecycleOperationContract.js +3 -2
  131. package/dist/runtime/lifecycleOperationContract.js.map +1 -1
  132. package/dist/runtime/lifecyclePublication.js +21 -0
  133. package/dist/runtime/lifecyclePublication.js.map +1 -1
  134. package/dist/setup/opencode.js +20 -12
  135. package/dist/setup/opencode.js.map +1 -1
  136. package/dist/setup/sharedSkill.js +46 -0
  137. package/dist/setup/sharedSkill.js.map +1 -0
  138. package/dist/setup/smokeChecks.js +16 -43
  139. package/dist/setup/smokeChecks.js.map +1 -1
  140. package/dist/state/decisionEntities.js +7 -4
  141. package/dist/state/decisionEntities.js.map +1 -1
  142. package/dist/state/durability.js +4 -240
  143. package/dist/state/durability.js.map +1 -1
  144. package/dist/state/entityCutover.js +90 -186
  145. package/dist/state/entityCutover.js.map +1 -1
  146. package/dist/state/entityStorage.js +27 -8
  147. package/dist/state/entityStorage.js.map +1 -1
  148. package/dist/state/healthEntities.js +7 -4
  149. package/dist/state/healthEntities.js.map +1 -1
  150. package/dist/state/objectiveExperimentEntities.js +7 -5
  151. package/dist/state/objectiveExperimentEntities.js.map +1 -1
  152. package/dist/state/planEntities.js +14 -10
  153. package/dist/state/planEntities.js.map +1 -1
  154. package/dist/state/progressEntities.js +4 -2
  155. package/dist/state/progressEntities.js.map +1 -1
  156. package/dist/state/startupProjection.js +3 -2
  157. package/dist/state/startupProjection.js.map +1 -1
  158. package/dist/state/stateMode.js +7 -0
  159. package/dist/state/stateMode.js.map +1 -1
  160. package/dist/state/todoDocsEntities.js +6 -4
  161. package/dist/state/todoDocsEntities.js.map +1 -1
  162. package/dist/state/write/explain.js +1 -9
  163. package/dist/state/write/explain.js.map +1 -1
  164. package/dist/state/write/transaction.js +22 -532
  165. package/dist/state/write/transaction.js.map +1 -1
  166. package/dist/upgrade/appContentRefresh.js +43 -28
  167. package/dist/upgrade/appContentRefresh.js.map +1 -1
  168. package/dist/upgrade/doctor.js +5 -1
  169. package/dist/upgrade/doctor.js.map +1 -1
  170. package/dist/upgrade/installedHooksRetirement.js +46 -39
  171. package/dist/upgrade/installedHooksRetirement.js.map +1 -1
  172. package/dist/upgrade/legacyAgentCleanup.js +132 -32
  173. package/dist/upgrade/legacyAgentCleanup.js.map +1 -1
  174. package/dist/upgrade/lifecycleUpgrade.js +65 -378
  175. package/dist/upgrade/lifecycleUpgrade.js.map +1 -1
  176. package/dist/upgrade/migrateArtifactsV2ToV3.js +151 -52
  177. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +1 -1
  178. package/dist/upgrade/migrationPublication.js +123 -0
  179. package/dist/upgrade/migrationPublication.js.map +1 -0
  180. package/dist/upgrade/projectIntegration.js +46 -113
  181. package/dist/upgrade/projectIntegration.js.map +1 -1
  182. package/dist/upgrade/projectIntegrationDecision.js +6 -96
  183. package/dist/upgrade/projectIntegrationDecision.js.map +1 -1
  184. package/dist/upgrade/runtimeMigration.js +222 -402
  185. package/dist/upgrade/runtimeMigration.js.map +1 -1
  186. package/dist/upgrade/upgradeCommands.js +5 -4
  187. package/dist/upgrade/upgradeCommands.js.map +1 -1
  188. package/dist/upgrade/upgradeLock.js +73 -41
  189. package/dist/upgrade/upgradeLock.js.map +1 -1
  190. package/dist/upgrade/upgradeOrchestrator.js +91 -158
  191. package/dist/upgrade/upgradeOrchestrator.js.map +1 -1
  192. package/dist/upgrade/v3CapabilitySurface.js +2 -2
  193. package/dist/validate/appHomeContract.js +0 -4
  194. package/dist/validate/appHomeContract.js.map +1 -1
  195. package/package.json +7 -5
  196. package/bundle/.codex-plugin/plugin.json +0 -92
  197. package/bundle/.cursor/agents/agentera.md +0 -7
  198. package/bundle/.cursor/hooks.json +0 -32
  199. package/bundle/.cursor-plugin/plugin.json +0 -34
  200. package/bundle/.github/hooks/postToolUse.json +0 -9
  201. package/bundle/.github/hooks/preToolUse.json +0 -8
  202. package/bundle/.github/hooks/sessionEnd.json +0 -8
  203. package/bundle/.github/hooks/sessionStart.json +0 -8
  204. package/bundle/.github/plugin/plugin.json +0 -7
  205. package/bundle/.opencode/agents/agentera.md +0 -12
  206. package/bundle/.opencode/commands/agentera.md +0 -5
  207. package/bundle/.opencode/package.json +0 -31
  208. package/bundle/.opencode/plugins/agentera.js +0 -820
  209. package/bundle/agents/openai.yaml +0 -87
  210. package/bundle/hooks/codex-hooks.json +0 -31
  211. package/bundle/hooks/codex-plugin-hooks.json +0 -31
  212. package/bundle/plugin.json +0 -13
  213. package/bundle/references/adapters/cursor.md +0 -224
  214. package/bundle/references/adapters/opencode.md +0 -529
  215. package/bundle/references/adapters/runtime-adapter-characterization.md +0 -44
  216. package/bundle/references/adapters/runtime-adapter-interface-model.yaml +0 -200
  217. package/bundle/references/adapters/runtime-adapter-registry.yaml +0 -387
  218. package/bundle/references/adapters/runtime-feature-parity.md +0 -129
  219. package/dist/cli/commands/backfill.js +0 -231
  220. package/dist/cli/commands/backfill.js.map +0 -1
  221. package/dist/cli/commands/migrate.js +0 -681
  222. package/dist/cli/commands/migrate.js.map +0 -1
  223. package/dist/registries/runtimeAdapterRegistry.js +0 -324
  224. package/dist/registries/runtimeAdapterRegistry.js.map +0 -1
  225. package/dist/setup/copilot.js +0 -227
  226. package/dist/setup/copilot.js.map +0 -1
  227. package/dist/setup/cursor.js +0 -129
  228. package/dist/setup/cursor.js.map +0 -1
  229. package/dist/setup/cursorSurfaces.js +0 -67
  230. package/dist/setup/cursorSurfaces.js.map +0 -1
  231. package/dist/setup/doctor/core.js +0 -296
  232. package/dist/setup/doctor/core.js.map +0 -1
  233. package/dist/setup/doctor/diagnostics.js +0 -201
  234. package/dist/setup/doctor/diagnostics.js.map +0 -1
  235. package/dist/setup/doctor/opencode.js +0 -301
  236. package/dist/setup/doctor/opencode.js.map +0 -1
  237. package/dist/setup/doctor/report.js +0 -425
  238. package/dist/setup/doctor/report.js.map +0 -1
  239. package/dist/setup/doctor.js +0 -10
  240. package/dist/setup/doctor.js.map +0 -1
  241. package/dist/state/gitBackfill.js +0 -561
  242. package/dist/state/gitBackfill.js.map +0 -1
  243. package/dist/state/gitBackfillAuthority.js +0 -141
  244. package/dist/state/gitBackfillAuthority.js.map +0 -1
  245. package/dist/state/gitBackfillHistory.js +0 -278
  246. package/dist/state/gitBackfillHistory.js.map +0 -1
  247. package/dist/state/gitBackfillOutput.js +0 -209
  248. package/dist/state/gitBackfillOutput.js.map +0 -1
  249. package/dist/state/legacyMigration.js +0 -516
  250. package/dist/state/legacyMigration.js.map +0 -1
  251. package/dist/state/legacyMigrationParser.js +0 -489
  252. package/dist/state/legacyMigrationParser.js.map +0 -1
  253. package/dist/state/migrationAuthority.js +0 -413
  254. package/dist/state/migrationAuthority.js.map +0 -1
  255. package/dist/state/migrationEnrichment.js +0 -35
  256. package/dist/state/migrationEnrichment.js.map +0 -1
  257. package/dist/state/projectionRecovery.js +0 -458
  258. package/dist/state/projectionRecovery.js.map +0 -1
  259. package/dist/upgrade/migrateArtifactsV1ToV2.js +0 -568
  260. package/dist/upgrade/migrateArtifactsV1ToV2.js.map +0 -1
  261. package/dist/validate/lifecycleAdapters/legacyPythonParity.js +0 -93
  262. package/dist/validate/lifecycleAdapters/legacyPythonParity.js.map +0 -1
  263. package/dist/validate/lifecycleAdapters/lifecycleMain.js +0 -154
  264. package/dist/validate/lifecycleAdapters/lifecycleMain.js.map +0 -1
  265. package/dist/validate/lifecycleAdapters/nodeFormChecks.js +0 -481
  266. package/dist/validate/lifecycleAdapters/nodeFormChecks.js.map +0 -1
  267. package/dist/validate/lifecycleAdapters/shared.js +0 -198
  268. package/dist/validate/lifecycleAdapters/shared.js.map +0 -1
  269. package/dist/validate/lifecycleAdapters.js +0 -10
  270. package/dist/validate/lifecycleAdapters.js.map +0 -1
@@ -1,481 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import { resolvePath } from "../../core/paths.js";
4
- import { loadRegistry as loadRuntimeRegistry, } from "../../registries/runtimeAdapterRegistry.js";
5
- import { CODEX_AGENTERA_METADATA_TERMS, CODEX_PROFILE_STATUS_VALUES, CODEX_PROFILE_TERMS, HARD_GATE_DOC_REQUIREMENTS, codexLifecycleStatusValues, codexLimitationTerms, copilotProfileTerms, handlerCommandText, hardGateDocTerms, isDir, isFile, isMapping, loadJson, objectField, stringArrayField, stringField, opencodeEventPayloadTypes, packageManifest, resolveFromManifest, resolveInside, runtimeView, setsEqual, stringPaths, supportedEvents, unsupportedEvents, validateCommandHandler, validationEvents, } from "./shared.js";
6
- export function validateSuiteBundleSurface(root, runtimeNames = null, packageRegistry = null) {
7
- const errors = [];
8
- const pkg = packageRegistry ?? packageManifest(root);
9
- const runtimePackageSurfaces = pkg.runtimeManifestPaths();
10
- const requiredPaths = pkg.sharedPathRequirements();
11
- const packageShapes = pkg.runtimePackageShapes();
12
- const active = runtimeNames ?? new Set(Object.keys(runtimePackageSurfaces));
13
- for (const runtime of [...active].sort()) {
14
- const relativeManifest = runtimePackageSurfaces[runtime];
15
- if (relativeManifest === undefined) {
16
- errors.push(`${runtime}: unknown runtime package surface`);
17
- continue;
18
- }
19
- const manifest = path.join(root, relativeManifest);
20
- if (!isFile(manifest)) {
21
- errors.push(`${runtime}: missing package metadata ${relativeManifest}`);
22
- continue;
23
- }
24
- let pkgJson;
25
- try {
26
- pkgJson = loadJson(manifest);
27
- }
28
- catch (exc) {
29
- errors.push(`${runtime}: could not read package metadata ${relativeManifest}: ${exc.message}`);
30
- continue;
31
- }
32
- const metadata = isMapping(pkgJson.agentera) ? pkgJson.agentera : null;
33
- if (!isMapping(metadata)) {
34
- errors.push(`${runtime}: missing agentera app metadata`);
35
- continue;
36
- }
37
- const expectedShape = packageShapes[runtime];
38
- if (metadata.packageShape !== expectedShape) {
39
- errors.push(`${runtime}: agentera.packageShape must be ${expectedShape}`);
40
- }
41
- const installRootValue = metadata.installRoot;
42
- if (typeof installRootValue !== "string" || !installRootValue) {
43
- errors.push(`${runtime}: agentera.installRoot must point at the Agentera app root`);
44
- continue;
45
- }
46
- const installRoot = resolveFromManifest(root, manifest, installRootValue);
47
- if (installRoot === null) {
48
- errors.push(`${runtime}: agentera.installRoot must stay inside package root`);
49
- continue;
50
- }
51
- if (installRoot !== resolvePath(root)) {
52
- errors.push(`${runtime}: AGENTERA_HOME must resolve to the package root`);
53
- }
54
- const sharedPaths = metadata.sharedPaths;
55
- if (!Array.isArray(sharedPaths) || !sharedPaths.every((p) => typeof p === "string")) {
56
- errors.push(`${runtime}: agentera.sharedPaths must list app paths`);
57
- continue;
58
- }
59
- const listed = new Set(sharedPaths);
60
- for (const [p, expectedKind] of Object.entries(requiredPaths)) {
61
- if (!listed.has(p)) {
62
- errors.push(`${runtime}: shared tool path ${p} missing from package metadata`);
63
- continue;
64
- }
65
- const resolved = resolveInside(installRoot, p);
66
- if (resolved === null) {
67
- errors.push(`${runtime}: shared tool path ${p} must stay inside the Agentera app root`);
68
- }
69
- else if (expectedKind === "dir" && !isDir(resolved)) {
70
- errors.push(`${runtime}: shared tool path ${p} must resolve to a directory`);
71
- }
72
- else if (expectedKind === "file" && !isFile(resolved)) {
73
- errors.push(`${runtime}: shared tool path ${p} must resolve to a file`);
74
- }
75
- }
76
- const singleSkill = metadata.singleSkillInstall;
77
- if (typeof singleSkill !== "string" || !singleSkill.includes("core") || !singleSkill.includes("suite")) {
78
- errors.push(`${runtime}: agentera.singleSkillInstall must state core skill behavior does not require suite tools`);
79
- }
80
- }
81
- return errors;
82
- }
83
- export function validateCopilot(plugin, pluginRoot, registry = loadRuntimeRegistry()) {
84
- const errors = [];
85
- if ("lifecycleHooks" in plugin) {
86
- errors.push("copilot: use supported hooks component field, not lifecycleHooks");
87
- }
88
- const skills = plugin.skills;
89
- if (!(typeof skills === "string" || Array.isArray(skills))) {
90
- errors.push("copilot.skills must be a string or string array path");
91
- }
92
- else if (Array.isArray(skills) && !skills.every((p) => typeof p === "string")) {
93
- errors.push("copilot.skills entries must be path strings");
94
- }
95
- else {
96
- for (const p of stringPaths(skills)) {
97
- const resolved = resolveInside(pluginRoot, p);
98
- if (resolved === null)
99
- errors.push("copilot.skills paths must stay inside plugin root");
100
- else if (!isDir(resolved))
101
- errors.push("copilot.skills paths must resolve to skill directories");
102
- }
103
- }
104
- const hooks = plugin.hooks;
105
- if (!(typeof hooks === "string" || Array.isArray(hooks))) {
106
- errors.push("copilot.hooks must be a string or string array path");
107
- }
108
- else if (Array.isArray(hooks) && !hooks.every((p) => typeof p === "string")) {
109
- errors.push("copilot.hooks entries must be path strings");
110
- }
111
- else {
112
- for (const p of stringPaths(hooks)) {
113
- const resolved = resolveInside(pluginRoot, p);
114
- if (resolved === null)
115
- errors.push("copilot.hooks paths must stay inside plugin root");
116
- else if (!isDir(resolved))
117
- errors.push("copilot.hooks paths must resolve to a hook directory");
118
- }
119
- }
120
- const description = plugin.description;
121
- const profileTerms = copilotProfileTerms(registry);
122
- if (typeof description !== "string" || profileTerms.some((term) => !description.includes(term))) {
123
- errors.push("copilot.profile: description must expose bounded corpus metadata limits");
124
- }
125
- return errors;
126
- }
127
- export function validateCopilotHooks(pluginRoot, plugin, registry = loadRuntimeRegistry()) {
128
- const errors = [];
129
- const copilotEvents = supportedEvents(registry, "copilot");
130
- const requiredPrewriteHook = validationEvents(registry, "copilot")[0] ?? "";
131
- const hookPaths = stringPaths(plugin.hooks);
132
- if (hookPaths.length === 0)
133
- return errors;
134
- for (const hooks of hookPaths) {
135
- const hookDir = resolveInside(pluginRoot, hooks);
136
- if (hookDir === null) {
137
- errors.push("copilot.hooks paths must stay inside plugin root");
138
- continue;
139
- }
140
- if (!isDir(hookDir)) {
141
- errors.push("copilot.hooks must resolve to a hook directory");
142
- continue;
143
- }
144
- const seenEvents = new Set();
145
- const jsonFiles = fs
146
- .readdirSync(hookDir)
147
- .filter((n) => n.endsWith(".json"))
148
- .sort();
149
- for (const name of jsonFiles) {
150
- const hook = loadJson(path.join(hookDir, name));
151
- const stem = name.replace(/\.json$/, "");
152
- const event = hook.name;
153
- if (!copilotEvents.has(stem)) {
154
- errors.push(`copilot: unsupported lifecycle hook file configured: ${name}`);
155
- }
156
- if (typeof event !== "string") {
157
- errors.push(`copilot.${name}: hook name must be a string`);
158
- continue;
159
- }
160
- if (!copilotEvents.has(event)) {
161
- errors.push(`copilot: unsupported lifecycle event configured: ${event}`);
162
- continue;
163
- }
164
- if (stem !== event) {
165
- errors.push(`copilot.${name}: hook filename must match event name ${event}`);
166
- }
167
- if (event !== event.slice(0, 1).toLowerCase() + event.slice(1)) {
168
- errors.push(`copilot: event must be lower-camel: ${event}`);
169
- }
170
- validateCommandHandler(errors, "copilot", event, 0, hook);
171
- seenEvents.add(event);
172
- if (event === requiredPrewriteHook) {
173
- const commandText = handlerCommandText(hook);
174
- if (!commandText.includes("hook validate-artifact")) {
175
- errors.push("copilot.preToolUse: artifact hard gate must run agentera hook validate-artifact");
176
- }
177
- }
178
- }
179
- if (!seenEvents.has(requiredPrewriteHook)) {
180
- errors.push("copilot: missing required preToolUse artifact validation hook");
181
- }
182
- }
183
- return errors;
184
- }
185
- export function validateCursor(root, plugin, registry = loadRuntimeRegistry()) {
186
- void registry;
187
- const errors = [];
188
- const cursorMeta = plugin.cursor;
189
- if (!isMapping(cursorMeta)) {
190
- errors.push("cursor: missing cursor metadata object");
191
- }
192
- else {
193
- const limitations = cursorMeta.limitations;
194
- if (!Array.isArray(limitations) || limitations.length === 0) {
195
- errors.push("cursor: limitations must document cloud agents, /agentera, and hard-gate gating");
196
- }
197
- else {
198
- const joined = limitations.map((item) => String(item)).join(" ");
199
- for (const term of ["Cloud agents", "/agentera", "hard-gate", "smoke"]) {
200
- if (!joined.toLowerCase().includes(term.toLowerCase())) {
201
- errors.push(`cursor: limitations must mention '${term}'`);
202
- }
203
- }
204
- }
205
- }
206
- const skillPaths = stringPaths(plugin.skills);
207
- if (skillPaths.length === 0) {
208
- errors.push("cursor.skills must be a string or string array path");
209
- }
210
- for (const skillPath of skillPaths) {
211
- const resolved = resolveInside(root, skillPath.replace(/^\.\//, ""));
212
- if (resolved === null) {
213
- errors.push("cursor.skills paths must stay inside repository root");
214
- }
215
- }
216
- const hookPaths = stringPaths(plugin.hooks);
217
- if (hookPaths.length === 0) {
218
- errors.push("cursor.hooks must reference bundled hooks.json");
219
- }
220
- for (const hookPath of hookPaths) {
221
- const resolved = resolveInside(root, hookPath.replace(/^\.\//, ""));
222
- if (resolved === null || !isFile(resolved)) {
223
- errors.push("cursor.hooks must resolve to .cursor/hooks.json");
224
- }
225
- }
226
- const agentPaths = stringPaths(plugin.agents);
227
- if (agentPaths.length === 0) {
228
- errors.push("cursor.agents must reference managed capability agents");
229
- }
230
- else {
231
- for (const agentPath of agentPaths) {
232
- const resolved = resolveInside(root, agentPath.replace(/^\.\//, ""));
233
- if (resolved === null || !isDir(resolved)) {
234
- errors.push("cursor.agents must resolve to .cursor/agents");
235
- }
236
- else if (fs.readdirSync(resolved).filter((n) => n.endsWith(".md")).length < 1) {
237
- errors.push("cursor.agents must expose the single managed agent descriptor");
238
- }
239
- }
240
- }
241
- const reference = path.join(root, "references/adapters/cursor.md");
242
- if (!isFile(reference)) {
243
- errors.push("cursor: missing references/adapters/cursor.md");
244
- }
245
- else {
246
- const text = fs.readFileSync(reference, "utf8").toLowerCase();
247
- for (const term of ["cloud agents", "cursor-agent", "metadata-only", "live pretooluse write smoke"]) {
248
- if (!text.includes(term)) {
249
- errors.push(`cursor.md must document '${term}'`);
250
- }
251
- }
252
- }
253
- return errors;
254
- }
255
- export function validateCursorHooks(root, registry = loadRuntimeRegistry()) {
256
- const errors = [];
257
- const cursorEvents = supportedEvents(registry, "cursor");
258
- const requiredPrewriteHook = validationEvents(registry, "cursor")[0] ?? "";
259
- const hooksPath = path.join(root, ".cursor", "hooks.json");
260
- if (!isFile(hooksPath))
261
- return ["cursor: missing .cursor/hooks.json"];
262
- const payload = loadJson(hooksPath);
263
- const hooks = payload.hooks;
264
- if (!isMapping(hooks))
265
- return [...errors, "cursor: hooks.json must contain a hooks object"];
266
- const configured = new Set();
267
- for (const [event, entries] of Object.entries(hooks)) {
268
- if (!cursorEvents.has(event)) {
269
- errors.push(`cursor: unsupported lifecycle event configured: ${event}`);
270
- continue;
271
- }
272
- if (!Array.isArray(entries)) {
273
- errors.push(`cursor.${event}: hook entries must be a list`);
274
- continue;
275
- }
276
- configured.add(event);
277
- entries.forEach((entry, index) => {
278
- if (!isMapping(entry)) {
279
- errors.push(`cursor.${event}[${index}]: hook entry must be an object`);
280
- return;
281
- }
282
- const command = entry.command;
283
- if (typeof command !== "string" || !command.trim()) {
284
- errors.push(`cursor.${event}[${index}]: command must be a string`);
285
- return;
286
- }
287
- if (event === "sessionStart" && !command.includes("hook cursor-session-start")) {
288
- errors.push("cursor.sessionStart: must run agentera hook cursor-session-start");
289
- }
290
- if (event === requiredPrewriteHook && !command.includes("hook cursor-pre-tool-use")) {
291
- errors.push("cursor.preToolUse: artifact hard gate must run agentera hook cursor-pre-tool-use");
292
- }
293
- });
294
- }
295
- for (const required of ["sessionStart", "sessionEnd", requiredPrewriteHook, "postToolUse"]) {
296
- if (required && !configured.has(required)) {
297
- errors.push(`cursor: missing required lifecycle hook ${required}`);
298
- }
299
- }
300
- return errors;
301
- }
302
- export function validateCodex(plugin, registry = loadRuntimeRegistry()) {
303
- const errors = [];
304
- const codexEvents = supportedEvents(registry, "codex");
305
- const unsupportedCodexEvents = unsupportedEvents(registry, "codex");
306
- const lifecycleStatusValues = codexLifecycleStatusValues(registry);
307
- const limitationTerms = codexLimitationTerms(registry);
308
- const lifecycle = objectField(plugin, "lifecycleHooks");
309
- if (Object.keys(lifecycle).length === 0)
310
- return ["codex: missing lifecycleHooks limitation metadata"];
311
- if (lifecycle.configured !== false)
312
- errors.push("codex: lifecycleHooks.configured must be false");
313
- const lifecycleStatus = stringField(lifecycle, "status");
314
- if (!lifecycleStatusValues.includes(lifecycleStatus)) {
315
- errors.push("codex: lifecycleHooks.status must be one of " + lifecycleStatusValues.join(", "));
316
- }
317
- const events = objectField(lifecycle, "events");
318
- if (!isMapping(events)) {
319
- errors.push("codex: lifecycleHooks.events must be an object when present");
320
- }
321
- else {
322
- for (const event of Object.keys(events)) {
323
- if (!codexEvents.has(event))
324
- errors.push(`codex: unsupported lifecycle event configured: ${event}`);
325
- }
326
- }
327
- const supported = lifecycle.supportedEvents;
328
- const codexSupportedList = stringArrayField(objectField(runtimeView(registry, "codex"), "lifecycle_events"), "supported_events");
329
- if (!Array.isArray(supported) || !setsEqual(new Set(supported.filter((entry) => typeof entry === "string")), codexEvents)) {
330
- errors.push("codex: supportedEvents must list every Codex codex_hooks event (" + codexSupportedList.join(", ") + ")");
331
- }
332
- const unsupported = lifecycle.unsupportedEvents;
333
- if (!Array.isArray(unsupported) || unsupported.length === 0) {
334
- errors.push("codex: unsupportedEvents must list registry-declared events with no Codex equivalent");
335
- }
336
- else {
337
- for (const entry of unsupported) {
338
- if (!isMapping(entry)) {
339
- errors.push("codex: unsupportedEvents entries must be objects with event and reason fields");
340
- continue;
341
- }
342
- const event = stringField(entry, "event");
343
- if (codexEvents.has(event)) {
344
- errors.push(`codex: unsupportedEvents must not list event '${event}' that codex_hooks now supports`);
345
- }
346
- else if (!unsupportedCodexEvents.has(event)) {
347
- errors.push(`codex: unsupportedEvents entry '${event}' is not claimed by the registry`);
348
- }
349
- }
350
- }
351
- const limitations = lifecycle.limitations;
352
- if (!Array.isArray(limitations) || limitations.length === 0) {
353
- errors.push("codex: limitations must document codex_hooks status and apply_patch interception");
354
- }
355
- else {
356
- const joined = limitations.filter((item) => typeof item === "string").join(" ");
357
- for (const term of limitationTerms) {
358
- if (!joined.includes(term)) {
359
- errors.push(`codex: limitations must cite '${term}' so apply_patch interception ground truth stays surfaced`);
360
- }
361
- }
362
- for (const marker of ["experimental, require host config opt-in", "experimental-disabled", "no real-time"]) {
363
- if (joined.includes(marker)) {
364
- errors.push(`codex: limitations carry stale wording '${marker}'; remove it`);
365
- }
366
- }
367
- }
368
- return errors;
369
- }
370
- export function validateCodexProfileMetadata(root, plugin) {
371
- const errors = [];
372
- const skillMetadata = Array.isArray(plugin.skillMetadata) ? plugin.skillMetadata : [];
373
- const agentera = skillMetadata.find((skill) => isMapping(skill) && stringField(skill, "name") === "agentera");
374
- if (!isMapping(agentera))
375
- return ["codex.agentera: missing aggregate Agentera app metadata"];
376
- if (stringField(agentera, "runtimeSupport") !== "portable") {
377
- errors.push("codex.agentera: runtimeSupport must stay portable");
378
- }
379
- if (objectField(agentera, "policy").allow_implicit_invocation !== true) {
380
- errors.push("codex.agentera: Agentera app entry must allow implicit invocation");
381
- }
382
- const invocationHint = stringField(agentera, "invocationHint");
383
- if (typeof invocationHint !== "string" || !invocationHint.includes("$agentera")) {
384
- errors.push("codex.agentera: invocation hint must name $agentera");
385
- }
386
- const codex = objectField(plugin, "codex");
387
- const codexText = stringArrayField(codex, "limitations").join(" ");
388
- for (const term of CODEX_AGENTERA_METADATA_TERMS) {
389
- if (!`${invocationHint || ""} ${codexText}`.includes(term)) {
390
- errors.push(`codex.agentera: metadata must surface '${term}'`);
391
- }
392
- }
393
- for (const rel of ["agents/openai.yaml"]) {
394
- const p = path.join(root, rel);
395
- if (!isFile(p)) {
396
- errors.push(`codex.agentera: missing metadata surface ${rel}`);
397
- continue;
398
- }
399
- const text = fs.readFileSync(p, "utf8");
400
- if (!text.includes("path: ./skills/agentera")) {
401
- errors.push(`codex.agentera: ${rel} must point at installed skills/agentera`);
402
- }
403
- for (const stalePath of ["path: ./skills/status", "metadata: ./skills/status", "skills/<name>/agents"]) {
404
- if (text.includes(stalePath)) {
405
- errors.push(`codex.agentera: ${rel} carries stale v1 skill path '${stalePath}'`);
406
- }
407
- }
408
- for (const term of CODEX_PROFILE_TERMS) {
409
- if (!text.includes(term))
410
- errors.push(`codex.agentera: ${rel} missing '${term}'`);
411
- }
412
- if (!CODEX_PROFILE_STATUS_VALUES.some((value) => text.includes(`status: ${value}`))) {
413
- errors.push(`codex.agentera: ${rel} missing status declaration (expected one of ` +
414
- CODEX_PROFILE_STATUS_VALUES.join(", ") +
415
- ")");
416
- }
417
- if (text.includes("collector exists") || text.includes("not implemented")) {
418
- errors.push(`codex.agentera: ${rel} contains stale missing-collector wording`);
419
- }
420
- }
421
- return errors;
422
- }
423
- export function validateOpencode(root, registry = loadRuntimeRegistry()) {
424
- const errors = [];
425
- const pluginPath = path.join(root, ".opencode/plugins/agentera.js");
426
- if (!isFile(pluginPath))
427
- return ["opencode: missing .opencode/plugins/agentera.js"];
428
- const text = fs.readFileSync(pluginPath, "utf8");
429
- if (!text.includes("event: async")) {
430
- errors.push("opencode: session lifecycle must use the generic event hook");
431
- }
432
- for (const eventType of opencodeEventPayloadTypes(registry)) {
433
- if (!text.includes(`event.type !== "${eventType}"`) && !text.includes(`event.type === "${eventType}"`)) {
434
- errors.push(`opencode: event hook must handle or explicitly skip ${eventType}`);
435
- }
436
- if (text.includes(`"${eventType}":`)) {
437
- errors.push(`opencode: must not register direct hook ${eventType}`);
438
- }
439
- }
440
- for (const eventType of unsupportedEvents(registry, "opencode")) {
441
- if (text.includes(`"${eventType}":`)) {
442
- errors.push(`opencode: must not register unsupported direct hook ${eventType}`);
443
- }
444
- }
445
- const payloadTypes = opencodeEventPayloadTypes(registry);
446
- const directHooks = [...supportedEvents(registry, "opencode")].filter((e) => !payloadTypes.has(e));
447
- for (const event of directHooks) {
448
- if (!text.includes(`"${event}"`)) {
449
- errors.push(`opencode: missing "${event}" hook`);
450
- }
451
- }
452
- if (!text.includes("validateArtifactCandidate")) {
453
- errors.push("opencode: tool.execute.before must validate artifact candidates");
454
- }
455
- return errors;
456
- }
457
- function normalizedDocText(p) {
458
- return fs.readFileSync(p, "utf8").replace(/`/g, "");
459
- }
460
- export function validateHardGateDocs(root, registry = loadRuntimeRegistry()) {
461
- const errors = [];
462
- for (const [relativePath, runtimes] of Object.entries(HARD_GATE_DOC_REQUIREMENTS)) {
463
- const p = path.join(root, relativePath);
464
- if (!isFile(p)) {
465
- errors.push(`${relativePath}: missing hard-gate documentation surface`);
466
- continue;
467
- }
468
- const text = normalizedDocText(p);
469
- for (const runtime of runtimes) {
470
- const displayName = stringField(objectField(runtimeView(registry, runtime), "identity"), "display_name").replace(/ CLI$/, "");
471
- for (const term of hardGateDocTerms(registry, runtime, relativePath)) {
472
- const normalizedTerm = term.replace(/`/g, "").replace(/\.$/, "");
473
- if (!text.includes(normalizedTerm)) {
474
- errors.push(`${relativePath}: ${displayName} hard-gate docs must keep scoped claim term '${term}'`);
475
- }
476
- }
477
- }
478
- }
479
- return errors;
480
- }
481
- //# sourceMappingURL=nodeFormChecks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nodeFormChecks.js","sourceRoot":"","sources":["../../../src/validate/lifecycleAdapters/nodeFormChecks.ts"],"names":[],"mappings":"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"}