agentera 3.0.0-dev.22 → 3.0.0-dev.25

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 (274) hide show
  1. package/README.md +9 -5
  2. package/bundle/.cursor/agents/agentera.md +1 -1
  3. package/bundle/.opencode/agents/agentera.md +1 -1
  4. package/bundle/CHANGELOG.md +15 -5
  5. package/bundle/README.md +9 -8
  6. package/bundle/UPGRADE.md +10 -24
  7. package/bundle/agents/openai.yaml +1 -1
  8. package/bundle/references/adapters/package-manifest-interface-model.yaml +2 -0
  9. package/bundle/references/adapters/package-registry.yaml +9 -0
  10. package/bundle/references/artifacts/state-storage-authority.yaml +842 -15
  11. package/bundle/references/cli/agent-ready-state-contract.yaml +25 -17
  12. package/bundle/references/cli/prime-consumer-compatibility.yaml +676 -0
  13. package/bundle/references/cli/update-channels.yaml +4 -2
  14. package/bundle/references/cli/vocabulary-index.yaml +3 -3
  15. package/bundle/references/cli/vocabulary.md +14 -7
  16. package/bundle/skills/agentera/SKILL.md +35 -20
  17. package/bundle/skills/agentera/agents/audit.toml +1 -1
  18. package/bundle/skills/agentera/agents/build.toml +1 -1
  19. package/bundle/skills/agentera/agents/design.toml +1 -1
  20. package/bundle/skills/agentera/agents/discuss.toml +1 -1
  21. package/bundle/skills/agentera/agents/document.toml +1 -1
  22. package/bundle/skills/agentera/agents/optimize.toml +1 -1
  23. package/bundle/skills/agentera/agents/orchestrate.toml +1 -1
  24. package/bundle/skills/agentera/agents/plan.toml +1 -1
  25. package/bundle/skills/agentera/agents/profile.toml +1 -1
  26. package/bundle/skills/agentera/agents/research.toml +1 -1
  27. package/bundle/skills/agentera/agents/status.toml +1 -1
  28. package/bundle/skills/agentera/agents/vision.toml +1 -1
  29. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +12 -12
  30. package/bundle/skills/agentera/capabilities/audit/schemas/validation.yaml +2 -2
  31. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +12 -12
  32. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +8 -8
  33. package/bundle/skills/agentera/capabilities/design/schemas/artifacts.yaml +6 -6
  34. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +7 -7
  35. package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +12 -12
  36. package/bundle/skills/agentera/capabilities/optimize/schemas/artifacts.yaml +9 -9
  37. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +11 -11
  38. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +9 -9
  39. package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +2 -2
  40. package/bundle/skills/agentera/capabilities/research/schemas/artifacts.yaml +3 -3
  41. package/bundle/skills/agentera/capabilities/status/schemas/artifacts.yaml +11 -11
  42. package/bundle/skills/agentera/capabilities/vision/schemas/artifacts.yaml +8 -8
  43. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +15 -2
  44. package/bundle/skills/agentera/schemas/artifacts/docs.yaml +4 -1
  45. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +21 -21
  46. package/bundle/skills/agentera/schemas/artifacts/health.yaml +15 -2
  47. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +36 -15
  48. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +15 -2
  49. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +4 -4
  50. package/dist/capabilities/audit/instructions.js +13 -1
  51. package/dist/capabilities/audit/instructions.js.map +1 -1
  52. package/dist/capabilities/build/instructions.js +14 -1
  53. package/dist/capabilities/build/instructions.js.map +1 -1
  54. package/dist/capabilities/discuss/instructions.js +11 -1
  55. package/dist/capabilities/discuss/instructions.js.map +1 -1
  56. package/dist/capabilities/document/instructions.js +9 -1
  57. package/dist/capabilities/document/instructions.js.map +1 -1
  58. package/dist/capabilities/index.js +9 -8
  59. package/dist/capabilities/index.js.map +1 -1
  60. package/dist/capabilities/optimize/instructions.js +10 -1
  61. package/dist/capabilities/optimize/instructions.js.map +1 -1
  62. package/dist/capabilities/orchestrate/instructions.js +13 -2
  63. package/dist/capabilities/orchestrate/instructions.js.map +1 -1
  64. package/dist/capabilities/plan/instructions.js +10 -1
  65. package/dist/capabilities/plan/instructions.js.map +1 -1
  66. package/dist/capabilities/status/startupInstructions.js +35 -0
  67. package/dist/capabilities/status/startupInstructions.js.map +1 -0
  68. package/dist/cli/capabilityContext/build.js +3 -3
  69. package/dist/cli/capabilityContext/build.js.map +1 -1
  70. package/dist/cli/capabilityContext/closeout.js +5 -5
  71. package/dist/cli/capabilityContext/closeout.js.map +1 -1
  72. package/dist/cli/capabilityContext/contract.js +14 -19
  73. package/dist/cli/capabilityContext/contract.js.map +1 -1
  74. package/dist/cli/capabilityContext/evidence.js +7 -7
  75. package/dist/cli/capabilityContext/evidence.js.map +1 -1
  76. package/dist/cli/capabilityContext/planState.js +12 -11
  77. package/dist/cli/capabilityContext/planState.js.map +1 -1
  78. package/dist/cli/capabilityContext/progress.js +1 -1
  79. package/dist/cli/capabilityContext/progress.js.map +1 -1
  80. package/dist/cli/capabilityContext/shared.js +8 -2
  81. package/dist/cli/capabilityContext/shared.js.map +1 -1
  82. package/dist/cli/capabilityContext/slim.js +2 -1
  83. package/dist/cli/capabilityContext/slim.js.map +1 -1
  84. package/dist/cli/capabilityContext/startup.js +22 -11
  85. package/dist/cli/capabilityContext/startup.js.map +1 -1
  86. package/dist/cli/capabilityContext/types.js +4 -4
  87. package/dist/cli/capabilityContext/types.js.map +1 -1
  88. package/dist/cli/commands/backfill.js +39 -2
  89. package/dist/cli/commands/backfill.js.map +1 -1
  90. package/dist/cli/commands/durability.js +34 -1
  91. package/dist/cli/commands/durability.js.map +1 -1
  92. package/dist/cli/commands/entityMigrate.js +128 -0
  93. package/dist/cli/commands/entityMigrate.js.map +1 -0
  94. package/dist/cli/commands/migrate.js +4 -0
  95. package/dist/cli/commands/migrate.js.map +1 -1
  96. package/dist/cli/commands/prime/briefOrientation.js +584 -0
  97. package/dist/cli/commands/prime/briefOrientation.js.map +1 -0
  98. package/dist/cli/commands/prime/collectEntityOrientation.js +148 -0
  99. package/dist/cli/commands/prime/collectEntityOrientation.js.map +1 -0
  100. package/dist/cli/commands/prime/collectOrientationState.js +21 -27
  101. package/dist/cli/commands/prime/collectOrientationState.js.map +1 -1
  102. package/dist/cli/commands/prime/orientationOutput.js +118 -24
  103. package/dist/cli/commands/prime/orientationOutput.js.map +1 -1
  104. package/dist/cli/commands/prime.js +32 -3
  105. package/dist/cli/commands/prime.js.map +1 -1
  106. package/dist/cli/commands/query.js +41 -15
  107. package/dist/cli/commands/query.js.map +1 -1
  108. package/dist/cli/commands/schema.js +10 -34
  109. package/dist/cli/commands/schema.js.map +1 -1
  110. package/dist/cli/commands/state/decisions.js +13 -0
  111. package/dist/cli/commands/state/decisions.js.map +1 -1
  112. package/dist/cli/commands/state/docs.js +38 -0
  113. package/dist/cli/commands/state/docs.js.map +1 -1
  114. package/dist/cli/commands/state/experimentRecords.js +82 -0
  115. package/dist/cli/commands/state/experimentRecords.js.map +1 -1
  116. package/dist/cli/commands/state/experiments.js +13 -0
  117. package/dist/cli/commands/state/experiments.js.map +1 -1
  118. package/dist/cli/commands/state/get.js +69 -2
  119. package/dist/cli/commands/state/get.js.map +1 -1
  120. package/dist/cli/commands/state/health.js +13 -0
  121. package/dist/cli/commands/state/health.js.map +1 -1
  122. package/dist/cli/commands/state/index.js +9 -0
  123. package/dist/cli/commands/state/index.js.map +1 -1
  124. package/dist/cli/commands/state/list.js +40 -7
  125. package/dist/cli/commands/state/list.js.map +1 -1
  126. package/dist/cli/commands/state/objective.js +24 -0
  127. package/dist/cli/commands/state/objective.js.map +1 -1
  128. package/dist/cli/commands/state/plan.js +17 -2
  129. package/dist/cli/commands/state/plan.js.map +1 -1
  130. package/dist/cli/commands/state/planTasks.js +38 -25
  131. package/dist/cli/commands/state/planTasks.js.map +1 -1
  132. package/dist/cli/commands/state/plans.js +32 -16
  133. package/dist/cli/commands/state/plans.js.map +1 -1
  134. package/dist/cli/commands/state/progress.js +12 -0
  135. package/dist/cli/commands/state/progress.js.map +1 -1
  136. package/dist/cli/commands/state/shared.js.map +1 -1
  137. package/dist/cli/commands/state/todo.js +30 -0
  138. package/dist/cli/commands/state/todo.js.map +1 -1
  139. package/dist/cli/commands/state/write.js +79 -4
  140. package/dist/cli/commands/state/write.js.map +1 -1
  141. package/dist/cli/commands/upgrade.js +65 -31
  142. package/dist/cli/commands/upgrade.js.map +1 -1
  143. package/dist/cli/commands/upgradeVerify.js +46 -14
  144. package/dist/cli/commands/upgradeVerify.js.map +1 -1
  145. package/dist/cli/commands/validate.js +65 -0
  146. package/dist/cli/commands/validate.js.map +1 -1
  147. package/dist/cli/dispatch/check.js +8 -1
  148. package/dist/cli/dispatch/check.js.map +1 -1
  149. package/dist/cli/dispatch/index.js +6 -0
  150. package/dist/cli/dispatch/index.js.map +1 -1
  151. package/dist/cli/dispatch/lifecycle.js +2 -5
  152. package/dist/cli/dispatch/lifecycle.js.map +1 -1
  153. package/dist/cli/dispatch/prime.js +15 -0
  154. package/dist/cli/dispatch/prime.js.map +1 -1
  155. package/dist/cli/dispatch/state.js +7 -1
  156. package/dist/cli/dispatch/state.js.map +1 -1
  157. package/dist/cli/help.js +79 -21
  158. package/dist/cli/help.js.map +1 -1
  159. package/dist/cli/migrationRequired.js +84 -0
  160. package/dist/cli/migrationRequired.js.map +1 -0
  161. package/dist/cli/orientation/attention.js +2 -2
  162. package/dist/cli/orientation/attention.js.map +1 -1
  163. package/dist/cli/orientation.js +13 -10
  164. package/dist/cli/orientation.js.map +1 -1
  165. package/dist/cli/planArtifacts.js +192 -42
  166. package/dist/cli/planArtifacts.js.map +1 -1
  167. package/dist/cli/prime-blob.js +5 -5
  168. package/dist/cli/prime-blob.js.map +1 -1
  169. package/dist/cli/startupCompletenessContract.js +3 -3
  170. package/dist/cli/startupCompletenessContract.js.map +1 -1
  171. package/dist/cli/stateQuery.js +42 -5
  172. package/dist/cli/stateQuery.js.map +1 -1
  173. package/dist/hooks/compaction/status.js +25 -1
  174. package/dist/hooks/compaction/status.js.map +1 -1
  175. package/dist/hooks/cursorSessionStart.js +6 -0
  176. package/dist/hooks/cursorSessionStart.js.map +1 -1
  177. package/dist/hooks/sessionStart.js +62 -0
  178. package/dist/hooks/sessionStart.js.map +1 -1
  179. package/dist/registries/artifactRegistry.js +23 -14
  180. package/dist/registries/artifactRegistry.js.map +1 -1
  181. package/dist/registries/packageRegistry.js +1 -1
  182. package/dist/registries/packageRegistry.js.map +1 -1
  183. package/dist/state/archivePublication.js +3 -2
  184. package/dist/state/archivePublication.js.map +1 -1
  185. package/dist/state/decisionEntities.js +279 -0
  186. package/dist/state/decisionEntities.js.map +1 -0
  187. package/dist/state/decisionLegacyValidation.js +185 -0
  188. package/dist/state/decisionLegacyValidation.js.map +1 -0
  189. package/dist/state/decisionOverlay.js +26 -3
  190. package/dist/state/decisionOverlay.js.map +1 -1
  191. package/dist/state/decisionRevision.js +632 -0
  192. package/dist/state/decisionRevision.js.map +1 -0
  193. package/dist/state/decisionRevisionPublication.js +532 -0
  194. package/dist/state/decisionRevisionPublication.js.map +1 -0
  195. package/dist/state/directRetrieval.js +55 -4
  196. package/dist/state/directRetrieval.js.map +1 -1
  197. package/dist/state/durability.js +92 -1
  198. package/dist/state/durability.js.map +1 -1
  199. package/dist/state/entityCutover.js +390 -0
  200. package/dist/state/entityCutover.js.map +1 -0
  201. package/dist/state/entityCutoverGit.js +128 -0
  202. package/dist/state/entityCutoverGit.js.map +1 -0
  203. package/dist/state/entityMigrationPreview.js +803 -0
  204. package/dist/state/entityMigrationPreview.js.map +1 -0
  205. package/dist/state/entityPublicationContext.js +612 -0
  206. package/dist/state/entityPublicationContext.js.map +1 -0
  207. package/dist/state/entityStorage.js +807 -0
  208. package/dist/state/entityStorage.js.map +1 -0
  209. package/dist/state/experimentIdentity.js +23 -11
  210. package/dist/state/experimentIdentity.js.map +1 -1
  211. package/dist/state/gitBackfill.js.map +1 -1
  212. package/dist/state/healthEntities.js +227 -0
  213. package/dist/state/healthEntities.js.map +1 -0
  214. package/dist/state/healthEntityValidation.js +6 -0
  215. package/dist/state/healthEntityValidation.js.map +1 -0
  216. package/dist/state/legacyEntityCutoverEvidence.js +66 -0
  217. package/dist/state/legacyEntityCutoverEvidence.js.map +1 -0
  218. package/dist/state/listRetrieval.js +42 -11
  219. package/dist/state/listRetrieval.js.map +1 -1
  220. package/dist/state/objectiveExperimentEntities.js +321 -0
  221. package/dist/state/objectiveExperimentEntities.js.map +1 -0
  222. package/dist/state/planEntities.js +358 -0
  223. package/dist/state/planEntities.js.map +1 -0
  224. package/dist/state/progressEntities.js +382 -0
  225. package/dist/state/progressEntities.js.map +1 -0
  226. package/dist/state/projectRoot.js +63 -0
  227. package/dist/state/projectRoot.js.map +1 -0
  228. package/dist/state/projectionRecovery.js +458 -0
  229. package/dist/state/projectionRecovery.js.map +1 -0
  230. package/dist/state/retrievalAuthority.js +13 -6
  231. package/dist/state/retrievalAuthority.js.map +1 -1
  232. package/dist/state/safeProjectFile.js +153 -0
  233. package/dist/state/safeProjectFile.js.map +1 -0
  234. package/dist/state/startupProjection.js +68 -1
  235. package/dist/state/startupProjection.js.map +1 -1
  236. package/dist/state/stateMode.js +76 -0
  237. package/dist/state/stateMode.js.map +1 -0
  238. package/dist/state/todoDocsEntities.js +223 -0
  239. package/dist/state/todoDocsEntities.js.map +1 -0
  240. package/dist/state/todoDocsEntityValidation.js +26 -0
  241. package/dist/state/todoDocsEntityValidation.js.map +1 -0
  242. package/dist/state/write/candidateMutation.js +281 -0
  243. package/dist/state/write/candidateMutation.js.map +1 -0
  244. package/dist/state/write/explain.js +156 -33
  245. package/dist/state/write/explain.js.map +1 -1
  246. package/dist/state/write/helpers.js +22 -0
  247. package/dist/state/write/helpers.js.map +1 -1
  248. package/dist/state/write/lock.js +794 -87
  249. package/dist/state/write/lock.js.map +1 -1
  250. package/dist/state/write/mutation.js +47 -2
  251. package/dist/state/write/mutation.js.map +1 -1
  252. package/dist/state/write/operations.js +99 -6
  253. package/dist/state/write/operations.js.map +1 -1
  254. package/dist/state/write/planEvaluation.js +107 -0
  255. package/dist/state/write/planEvaluation.js.map +1 -0
  256. package/dist/state/write/planPublication.js +11 -55
  257. package/dist/state/write/planPublication.js.map +1 -1
  258. package/dist/state/write/transaction.js +111 -358
  259. package/dist/state/write/transaction.js.map +1 -1
  260. package/dist/upgrade/compatibility.js +4 -4
  261. package/dist/upgrade/compatibility.js.map +1 -1
  262. package/dist/upgrade/migrateArtifactsV2ToV3.js +13 -14
  263. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +1 -1
  264. package/dist/upgrade/upgradeOrchestrator.js +126 -23
  265. package/dist/upgrade/upgradeOrchestrator.js.map +1 -1
  266. package/dist/validate/crossCapability.js +2 -2
  267. package/dist/validate/crossCapability.js.map +1 -1
  268. package/dist/validate/lifecycleAdapters/lifecycleMain.js +154 -0
  269. package/dist/validate/lifecycleAdapters/lifecycleMain.js.map +1 -0
  270. package/dist/validate/lifecycleAdapters.js +5 -156
  271. package/dist/validate/lifecycleAdapters.js.map +1 -1
  272. package/package.json +3 -3
  273. package/dist/upgrade/upgradeSnapshot.js +0 -93
  274. package/dist/upgrade/upgradeSnapshot.js.map +0 -1
@@ -0,0 +1,382 @@
1
+ import { createHash, createHmac, timingSafeEqual } from "node:crypto";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import YAML from "yaml";
5
+ import { resolveSourceRoot } from "../core/sourceRoot.js";
6
+ import { loadYamlMapping } from "../core/yaml.js";
7
+ import { canonicalRecordJson } from "./archiveDiscovery.js";
8
+ import { StateRetrievalFailure } from "./directRetrieval.js";
9
+ import { allocateAndPublishEntity, allocateEntityId, discoverEntities, publishEntity, } from "./entityStorage.js";
10
+ import { localTimestamp } from "./write/assign.js";
11
+ const ARTIFACT = "progress";
12
+ const BOUNDARY = "progress_cycle";
13
+ const ORDER = "timestamp_desc_then_id_asc";
14
+ const CURSOR_VERSION = 1;
15
+ function mapping(value) {
16
+ return value !== null && typeof value === "object" && !Array.isArray(value);
17
+ }
18
+ function positive(value, field) {
19
+ const number = Number(value);
20
+ if (!Number.isSafeInteger(number) || number < 1)
21
+ throw new Error(`invalid progress entity ${field} in state storage authority`);
22
+ return number;
23
+ }
24
+ function progressContract(sourceRoot = resolveSourceRoot()) {
25
+ const authorityPath = path.join(sourceRoot, "references", "artifacts", "state-storage-authority.yaml");
26
+ const authority = loadYamlMapping(fs.readFileSync(authorityPath, "utf8"));
27
+ const target = authority.entity_target;
28
+ const storage = mapping(target) && mapping(target.storage_boundary)
29
+ ? target.storage_boundary.shared_primitives
30
+ : null;
31
+ const entities = mapping(target) && Array.isArray(target.entities) ? target.entities : [];
32
+ const progress = entities.find((entity) => mapping(entity) && entity.boundary === BOUNDARY && entity.artifact === ARTIFACT);
33
+ const retrieval = mapping(progress) ? progress.retrieval : null;
34
+ if (!mapping(storage) || typeof storage.canonical_root !== "string" || !mapping(retrieval)) {
35
+ throw new Error(`invalid progress entity contract in '${authorityPath}'`);
36
+ }
37
+ return {
38
+ authorityPath,
39
+ entityRoot: storage.canonical_root,
40
+ defaultLimit: positive(retrieval.default_limit, "default_limit"),
41
+ maximumLimit: positive(retrieval.maximum_limit, "maximum_limit"),
42
+ maxUtf8Bytes: positive(retrieval.max_utf8_bytes, "max_utf8_bytes"),
43
+ };
44
+ }
45
+ function failure(className, message, recovery, id, exitCode = 1) {
46
+ return new StateRetrievalFailure({
47
+ schemaVersion: "agentera.stateFailure.v1",
48
+ status: "fail",
49
+ error: {
50
+ class: className,
51
+ message,
52
+ syntax: "agentera state progress get --id ID --format json",
53
+ example: `agentera state progress get --id ${id ?? "qjtrmnpvka"} --format json`,
54
+ recovery,
55
+ artifact: ARTIFACT,
56
+ ...(id ? { id } : {}),
57
+ },
58
+ }, exitCode);
59
+ }
60
+ function listFailure(className, message, recovery, exitCode = 1) {
61
+ const result = failure(className, message, recovery, undefined, exitCode);
62
+ result.body.error.syntax =
63
+ "agentera state progress list [--limit N] [--cursor TOKEN] --format json";
64
+ result.body.error.example = "agentera state progress list --limit 20 --format json";
65
+ return result;
66
+ }
67
+ function progressRecord(values) {
68
+ const context = mapping(values.context) ? values.context : {};
69
+ const record = {
70
+ timestamp: typeof values.timestamp === "string" ? values.timestamp : localTimestamp(),
71
+ type: String(values.type ?? ""),
72
+ phase: String(values.phase ?? ""),
73
+ what: String(values.what ?? ""),
74
+ context: { intent: String(context.intent ?? "") },
75
+ };
76
+ for (const field of ["inspiration", "discovered", "verified", "next"]) {
77
+ if (typeof values[field] === "string")
78
+ record[field] = values[field];
79
+ }
80
+ for (const field of ["constraints", "unknowns", "scope"]) {
81
+ if (typeof context[field] === "string")
82
+ record.context[field] = context[field];
83
+ }
84
+ if (!/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}$/.test(String(record.timestamp)))
85
+ throw new Error("progress entity timestamp must use YYYY-MM-DD HH:MM");
86
+ if (!record.type || !record.phase || !record.what || !record.context.intent)
87
+ throw new Error("progress entity requires type, phase, what, and context.intent");
88
+ return record;
89
+ }
90
+ function relative(projectRoot, candidate) {
91
+ return path.relative(path.resolve(projectRoot), candidate).split(path.sep).join("/");
92
+ }
93
+ export function appendProgressEntity(req, options = {}) {
94
+ const sourceRoot = options.sourceRoot ?? resolveSourceRoot();
95
+ const contract = progressContract(sourceRoot);
96
+ const record = progressRecord(req.values);
97
+ if (req.dryRun) {
98
+ options.publicationContext?.assertValid();
99
+ const allocationRoot = options.publicationContext?.pinnedPath() ?? req.projectRoot;
100
+ const id = options.id ?? allocateEntityId(allocationRoot, options.candidate, sourceRoot);
101
+ const target = path.join(path.resolve(req.projectRoot), contract.entityRoot, ARTIFACT, BOUNDARY, `${id}.yaml`);
102
+ options.publicationContext?.assertValid();
103
+ return {
104
+ schemaVersion: "agentera.stateWrite.v1",
105
+ command: "state progress append",
106
+ status: "pass",
107
+ path: target,
108
+ id,
109
+ artifact: ARTIFACT,
110
+ record,
111
+ operation: { verb: "append", dry_run: true, idempotent_replay: false },
112
+ validation: { status: "pass", violations: [] },
113
+ };
114
+ }
115
+ const published = options.id
116
+ ? publishEntity({
117
+ projectRoot: req.projectRoot,
118
+ sourceRoot,
119
+ publicationContext: options.publicationContext,
120
+ artifact: ARTIFACT,
121
+ boundary: BOUNDARY,
122
+ id: options.id,
123
+ record,
124
+ })
125
+ : allocateAndPublishEntity({
126
+ projectRoot: req.projectRoot,
127
+ sourceRoot,
128
+ publicationContext: options.publicationContext,
129
+ artifact: ARTIFACT,
130
+ boundary: BOUNDARY,
131
+ record,
132
+ }, options.candidate);
133
+ return {
134
+ schemaVersion: "agentera.stateWrite.v1",
135
+ command: "state progress append",
136
+ status: "pass",
137
+ path: published.path,
138
+ id: published.id,
139
+ artifact: published.artifact,
140
+ record,
141
+ operation: { verb: "append", dry_run: false, idempotent_replay: published.replay },
142
+ validation: { status: "pass", violations: [] },
143
+ };
144
+ }
145
+ function sortKey(entity) {
146
+ return `${String(entity.record?.timestamp ?? "")}\0${entity.id}`;
147
+ }
148
+ function sortedProgress(discovery) {
149
+ const progress = discovery.entities.filter((entity) => entity.boundary === BOUNDARY || entity.artifact === ARTIFACT);
150
+ const duplicate = progress.find((entity) => entity.classification === "duplicate");
151
+ if (duplicate)
152
+ throw listFailure("ambiguous", `progress entity ID '${duplicate.id}' has multiple canonical candidates`, "Run agentera check validate state, assign unique IDs, and retry.");
153
+ const corrupt = progress.find((entity) => entity.classification !== "valid" ||
154
+ !entity.id ||
155
+ !entity.record ||
156
+ typeof entity.record.timestamp !== "string");
157
+ if (corrupt)
158
+ throw listFailure("corrupt", `progress entity '${corrupt.relativePath}' is corrupt or violates the progress record contract`, "Run agentera check validate state, repair the canonical entity file, and retry.");
159
+ return progress.sort((left, right) => String(right.record.timestamp).localeCompare(String(left.record.timestamp)) ||
160
+ left.id.localeCompare(right.id));
161
+ }
162
+ function entry(projectRoot, entity) {
163
+ const id = entity.id;
164
+ return {
165
+ id,
166
+ artifact: ARTIFACT,
167
+ record: entity.record,
168
+ provenance: {
169
+ storage: "canonical_entity_file",
170
+ path: relative(projectRoot, entity.path),
171
+ boundary: BOUNDARY,
172
+ detail: "full",
173
+ },
174
+ retrieval: { get: `agentera state progress get --id ${id} --format json` },
175
+ };
176
+ }
177
+ function snapshotId(entities) {
178
+ const source = entities.map((entity) => ({
179
+ id: entity.id,
180
+ artifact: entity.artifact,
181
+ record: entity.record,
182
+ }));
183
+ return createHash("sha256").update(canonicalRecordJson(source), "utf8").digest("hex");
184
+ }
185
+ function cursorKey(projectRoot, authorityPath) {
186
+ return createHash("sha256")
187
+ .update(path.resolve(projectRoot))
188
+ .update("\0")
189
+ .update(fs.readFileSync(authorityPath))
190
+ .digest();
191
+ }
192
+ function encodeCursor(payload, projectRoot, authorityPath) {
193
+ const bytes = Buffer.from(canonicalRecordJson(payload), "utf8");
194
+ const signature = createHmac("sha256", cursorKey(projectRoot, authorityPath))
195
+ .update(bytes)
196
+ .digest();
197
+ return `${bytes.toString("base64url")}.${signature.toString("base64url")}`;
198
+ }
199
+ function decodeCursor(token, projectRoot, authorityPath) {
200
+ const [encoded, signed, extra] = token.split(".");
201
+ if (!encoded || !signed || extra)
202
+ throw listFailure("cursor_invalid", "progress cursor is malformed", "Copy next_cursor exactly, or omit --cursor to start from the current snapshot.");
203
+ let bytes;
204
+ let signature;
205
+ try {
206
+ bytes = Buffer.from(encoded, "base64url");
207
+ signature = Buffer.from(signed, "base64url");
208
+ }
209
+ catch {
210
+ throw listFailure("cursor_invalid", "progress cursor is malformed", "Copy next_cursor exactly, or omit --cursor to start from the current snapshot.");
211
+ }
212
+ const expected = createHmac("sha256", cursorKey(projectRoot, authorityPath))
213
+ .update(bytes)
214
+ .digest();
215
+ if (signature.length !== expected.length || !timingSafeEqual(signature, expected))
216
+ throw listFailure("cursor_invalid", "progress cursor signature is invalid", "Copy next_cursor exactly, or omit --cursor to start from the current snapshot.");
217
+ let payload;
218
+ try {
219
+ payload = JSON.parse(bytes.toString("utf8"));
220
+ }
221
+ catch {
222
+ payload = null;
223
+ }
224
+ if (!mapping(payload) ||
225
+ payload.version !== CURSOR_VERSION ||
226
+ payload.artifact !== ARTIFACT ||
227
+ payload.order !== ORDER ||
228
+ !mapping(payload.filters) ||
229
+ typeof payload.snapshot_id !== "string" ||
230
+ typeof payload.after_key !== "string") {
231
+ throw listFailure("cursor_invalid", "progress cursor does not match the progress entity list contract", "Omit --cursor to establish a new snapshot.");
232
+ }
233
+ return payload;
234
+ }
235
+ function values(value) {
236
+ if (typeof value === "string")
237
+ return [value];
238
+ if (Array.isArray(value))
239
+ return value.flatMap(values);
240
+ if (mapping(value))
241
+ return Object.entries(value).flatMap(([key, child]) => [key, ...values(child)]);
242
+ return [];
243
+ }
244
+ function filtersObject(filters) {
245
+ return { topic: filters.topic ?? null, status: filters.status ?? null };
246
+ }
247
+ function serializedBytes(value, format) {
248
+ const text = format === "json" ? JSON.stringify(value, null, 2) + "\n" : YAML.stringify(value);
249
+ return Buffer.byteLength(text, "utf8");
250
+ }
251
+ export function getProgressEntity(projectRoot, id, sourceRoot = resolveSourceRoot()) {
252
+ if (!/^[a-z]{10}$/.test(id))
253
+ throw failure("invalid_request", `progress ID '${id}' must be ten lowercase letters`, "Use the bare ID returned by progress append or list.", id, 2);
254
+ const discovery = discoverEntities(projectRoot, sourceRoot);
255
+ const matches = discovery.entities.filter((entity) => entity.id === id);
256
+ if (matches.length > 1 || matches.some((entity) => entity.classification === "duplicate"))
257
+ throw failure("ambiguous", `progress entity ID '${id}' has multiple canonical candidates`, "Run agentera check validate state, assign unique IDs, and retry.", id);
258
+ const selected = matches[0];
259
+ const expectedPath = path.join(path.resolve(projectRoot), progressContract(sourceRoot).entityRoot, ARTIFACT, BOUNDARY, `${id}.yaml`);
260
+ const corruptAtCanonicalPath = discovery.entities.find((entity) => entity.path === expectedPath);
261
+ if (!selected && corruptAtCanonicalPath)
262
+ throw failure("corrupt", `progress entity '${corruptAtCanonicalPath.relativePath}' does not match its canonical ID envelope`, "Run agentera check validate state, repair the canonical entity file, and retry.", id);
263
+ if (!selected || selected.artifact !== ARTIFACT || selected.boundary !== BOUNDARY)
264
+ throw failure("not_found", `no progress entity exists with ID '${id}'`, "Copy an ID from agentera state progress list --format json and retry.", id);
265
+ if (selected.classification !== "valid" ||
266
+ !selected.record ||
267
+ typeof selected.record.timestamp !== "string")
268
+ throw failure("corrupt", `progress entity '${selected.relativePath}' is corrupt or violates the progress record contract`, "Run agentera check validate state, repair the canonical entity file, and retry.", id);
269
+ return {
270
+ schemaVersion: "agentera.stateRetrieval.v1",
271
+ command: "state progress get",
272
+ status: "ok",
273
+ entry: entry(projectRoot, selected),
274
+ source: { artifact: ARTIFACT, authority: "canonical_entity_file" },
275
+ source_contract: {
276
+ authority: "references/artifacts/state-storage-authority.yaml",
277
+ detail: "full",
278
+ },
279
+ };
280
+ }
281
+ export function listProgressEntities(projectRoot, limit, filters = {}, cursor, options = {}) {
282
+ const sourceRoot = options.sourceRoot ?? resolveSourceRoot();
283
+ const contract = progressContract(sourceRoot);
284
+ const effectiveLimit = limit ?? contract.defaultLimit;
285
+ if (!Number.isSafeInteger(effectiveLimit) ||
286
+ effectiveLimit < 1 ||
287
+ effectiveLimit > contract.maximumLimit) {
288
+ throw listFailure("invalid_request", `--limit must be between 1 and ${contract.maximumLimit}`, `Use --limit ${contract.defaultLimit} or another value in the declared range.`, 2);
289
+ }
290
+ const all = sortedProgress(discoverEntities(projectRoot, sourceRoot));
291
+ const snapshot = snapshotId(all);
292
+ const filterState = filtersObject(filters);
293
+ let afterKey = "";
294
+ if (cursor) {
295
+ const parsed = decodeCursor(cursor, projectRoot, contract.authorityPath);
296
+ if (canonicalRecordJson(parsed.filters) !== canonicalRecordJson(filterState))
297
+ throw listFailure("cursor_invalid", "progress cursor filters do not match this request", "Repeat the original filters or omit --cursor to establish a new snapshot.");
298
+ if (parsed.snapshot_id !== snapshot)
299
+ throw listFailure("cursor_snapshot_unavailable", "progress entity source changed after this cursor snapshot", "Omit --cursor to restart from the current canonical entity snapshot.");
300
+ afterKey = parsed.after_key;
301
+ }
302
+ const filtered = all.filter((entity) => {
303
+ if (filters.status &&
304
+ String(entity.record.type).toLowerCase() !== filters.status.toLowerCase())
305
+ return false;
306
+ return (!filters.topic ||
307
+ values(entity.record).some((value) => value.toLowerCase().includes(filters.topic.toLowerCase())));
308
+ });
309
+ const start = afterKey ? filtered.findIndex((entity) => sortKey(entity) === afterKey) + 1 : 0;
310
+ if (afterKey && start === 0)
311
+ throw listFailure("cursor_snapshot_unavailable", "progress cursor continuation no longer exists in the canonical snapshot", "Omit --cursor to restart from the current canonical entity snapshot.");
312
+ let selected = filtered.slice(start, start + effectiveLimit);
313
+ let byteTrimmed = false;
314
+ const makeResponse = () => {
315
+ const remaining = filtered.length - start - selected.length;
316
+ const nextCursor = remaining > 0 && selected.length > 0
317
+ ? encodeCursor({
318
+ version: CURSOR_VERSION,
319
+ artifact: ARTIFACT,
320
+ order: ORDER,
321
+ filters: filterState,
322
+ snapshot_id: snapshot,
323
+ after_key: sortKey(selected.at(-1)),
324
+ }, projectRoot, contract.authorityPath)
325
+ : undefined;
326
+ const filterFlags = [
327
+ ...(filters.topic ? ["--topic", JSON.stringify(filters.topic)] : []),
328
+ ...(filters.status ? ["--status", JSON.stringify(filters.status)] : []),
329
+ ].join(" ");
330
+ return {
331
+ schemaVersion: "agentera.stateList.v1",
332
+ command: "state progress list",
333
+ status: remaining > 0 ? "degraded" : "ok",
334
+ entries: selected.map((entity) => entry(projectRoot, entity)),
335
+ counts: { total: filtered.length, returned: selected.length, remaining },
336
+ filters: filterState,
337
+ snapshot: {
338
+ id: snapshot,
339
+ first_page: !cursor,
340
+ order: ORDER,
341
+ has_more: remaining > 0,
342
+ candidate_count: filtered.length,
343
+ },
344
+ source: {
345
+ artifact: ARTIFACT,
346
+ authority: "canonical_entity_files",
347
+ root: contract.entityRoot,
348
+ },
349
+ source_contract: {
350
+ authority: "references/artifacts/state-storage-authority.yaml",
351
+ detail: "full",
352
+ cursor: "opaque_snapshot_cursor",
353
+ },
354
+ ...(remaining > 0
355
+ ? {
356
+ omitted: true,
357
+ omitted_count: remaining,
358
+ omission_reason: byteTrimmed ? "serialized_byte_budget" : "page_limit",
359
+ retrieval: {
360
+ continue: `agentera state progress list --limit ${effectiveLimit}${filterFlags ? ` ${filterFlags}` : ""} --cursor ${nextCursor} --format json`,
361
+ get: "agentera state progress get --id ID --format json",
362
+ },
363
+ next_cursor: nextCursor,
364
+ }
365
+ : {}),
366
+ };
367
+ };
368
+ const format = options.format ?? "json";
369
+ let response = makeResponse();
370
+ while (serializedBytes(response, format) > contract.maxUtf8Bytes && selected.length > 0) {
371
+ selected = selected.slice(0, -1);
372
+ byteTrimmed = true;
373
+ response = makeResponse();
374
+ }
375
+ if (selected.length === 0 && filtered.length > start)
376
+ throw listFailure("unsupported_state", `one full progress entity cannot fit the ${contract.maxUtf8Bytes}-byte list budget`, "Use exact get by ID for the full canonical entity, or reduce the entity scalar size before retrying.");
377
+ return response;
378
+ }
379
+ export function renderProgressEntityListText(response) {
380
+ return YAML.stringify(response);
381
+ }
382
+ //# sourceMappingURL=progressEntities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progressEntities.js","sourceRoot":"","sources":["../../src/state/progressEntities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ function directoryPrefixes(absolute) {
4
+ const parsed = path.parse(absolute);
5
+ const segments = absolute.slice(parsed.root.length).split(path.sep).filter(Boolean);
6
+ return [parsed.root, ...segments.map((_, index) => path.join(parsed.root, ...segments.slice(0, index + 1)))];
7
+ }
8
+ export function assertValidatedProjectRoot(root) {
9
+ const stable = root.identities.every((identity) => {
10
+ try {
11
+ const current = fs.lstatSync(identity.absolute, { bigint: true });
12
+ return identity.type === "directory"
13
+ && current.isDirectory()
14
+ && !current.isSymbolicLink()
15
+ && current.dev === identity.dev
16
+ && current.ino === identity.ino;
17
+ }
18
+ catch {
19
+ return false;
20
+ }
21
+ });
22
+ if (!stable) {
23
+ throw new Error(`project root '${root.path}' changed after validation; restore the exact real directory and retry`);
24
+ }
25
+ }
26
+ export function validateRealProjectRoot(projectRoot) {
27
+ const root = path.resolve(projectRoot);
28
+ let stat;
29
+ try {
30
+ stat = fs.lstatSync(root, { bigint: true });
31
+ }
32
+ catch {
33
+ throw new Error(`project root '${root}' does not exist; choose an existing, real directory and retry`);
34
+ }
35
+ if (stat.isSymbolicLink()) {
36
+ throw new Error(`project root '${root}' is a symbolic link; choose an existing, real directory and retry`);
37
+ }
38
+ if (!stat.isDirectory()) {
39
+ throw new Error(`project root '${root}' is not a directory; choose an existing, real directory and retry`);
40
+ }
41
+ try {
42
+ if (fs.realpathSync(root) !== root) {
43
+ throw new Error(`project root '${root}' traverses a symbolic link; choose an existing, real directory and retry`);
44
+ }
45
+ }
46
+ catch (error) {
47
+ if (error instanceof Error && error.message.startsWith("project root '"))
48
+ throw error;
49
+ throw new Error(`project root '${root}' cannot be resolved safely; choose an existing, real directory and retry`);
50
+ }
51
+ const identities = directoryPrefixes(root).map((absolute) => {
52
+ const current = fs.lstatSync(absolute, { bigint: true });
53
+ return { absolute, dev: current.dev, ino: current.ino, type: "directory" };
54
+ });
55
+ const validated = { path: root, identities };
56
+ const rootIdentity = identities.at(-1);
57
+ if (rootIdentity.dev !== stat.dev || rootIdentity.ino !== stat.ino) {
58
+ throw new Error(`project root '${root}' changed during validation; restore the exact real directory and retry`);
59
+ }
60
+ assertValidatedProjectRoot(validated);
61
+ return validated;
62
+ }
63
+ //# sourceMappingURL=projectRoot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectRoot.js","sourceRoot":"","sources":["../../src/state/projectRoot.ts"],"names":[],"mappings":"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"}