agentera 3.0.0-dev.20 → 3.0.0-dev.21

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 (228) hide show
  1. package/README.md +19 -0
  2. package/bundle/CHANGELOG.md +63 -70
  3. package/bundle/README.md +17 -0
  4. package/bundle/UPGRADE.md +38 -0
  5. package/bundle/references/adapters/package-surface-characterization.md +7 -0
  6. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +3 -3
  7. package/bundle/references/artifacts/state-storage-authority.yaml +1446 -0
  8. package/bundle/references/cli/agent-ready-state-contract.yaml +11 -39
  9. package/bundle/references/cli/audience-namespace-cli-migration.yaml +30 -15
  10. package/bundle/references/meta/documentation-inventory.md +1 -0
  11. package/bundle/skills/agentera/capabilities/audit/schemas/artifacts.yaml +18 -10
  12. package/bundle/skills/agentera/capabilities/audit/schemas/validation.yaml +10 -10
  13. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +11 -6
  14. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +3 -2
  15. package/bundle/skills/agentera/capabilities/document/schemas/artifacts.yaml +15 -8
  16. package/bundle/skills/agentera/capabilities/document/schemas/validation.yaml +13 -13
  17. package/bundle/skills/agentera/capabilities/orchestrate/schemas/artifacts.yaml +15 -9
  18. package/bundle/skills/agentera/references/contract.md +65 -23
  19. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +15 -10
  20. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +134 -3
  21. package/bundle/skills/agentera/schemas/artifacts/health.yaml +16 -10
  22. package/bundle/skills/agentera/schemas/artifacts/objective.yaml +18 -4
  23. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +23 -1
  24. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +16 -10
  25. package/bundle/skills/agentera/schemas/artifacts/todo.yaml +34 -0
  26. package/dist/capabilities/audit/instructions.js +1 -1
  27. package/dist/capabilities/audit/instructions.js.map +1 -1
  28. package/dist/capabilities/build/instructions.js +1 -1
  29. package/dist/capabilities/build/instructions.js.map +1 -1
  30. package/dist/capabilities/discuss/instructions.js +1 -1
  31. package/dist/capabilities/discuss/instructions.js.map +1 -1
  32. package/dist/capabilities/document/instructions.js +1 -1
  33. package/dist/capabilities/document/instructions.js.map +1 -1
  34. package/dist/capabilities/optimize/instructions.js +1 -1
  35. package/dist/capabilities/optimize/instructions.js.map +1 -1
  36. package/dist/capabilities/orchestrate/instructions.js +1 -1
  37. package/dist/capabilities/orchestrate/instructions.js.map +1 -1
  38. package/dist/capabilities/plan/instructions.js +1 -1
  39. package/dist/capabilities/plan/instructions.js.map +1 -1
  40. package/dist/capabilities/profile/instructions.js +1 -1
  41. package/dist/capabilities/profile/instructions.js.map +1 -1
  42. package/dist/capabilities/vision/instructions.js +1 -1
  43. package/dist/capabilities/vision/instructions.js.map +1 -1
  44. package/dist/cli/appContext.js +14 -6
  45. package/dist/cli/appContext.js.map +1 -1
  46. package/dist/cli/capabilityContext/bespoke.js +3 -1
  47. package/dist/cli/capabilityContext/bespoke.js.map +1 -1
  48. package/dist/cli/capabilityContext/build.js +5 -4
  49. package/dist/cli/capabilityContext/build.js.map +1 -1
  50. package/dist/cli/capabilityContext/closeout.js +2 -1
  51. package/dist/cli/capabilityContext/closeout.js.map +1 -1
  52. package/dist/cli/capabilityContext/contract.js +29 -0
  53. package/dist/cli/capabilityContext/contract.js.map +1 -1
  54. package/dist/cli/capabilityContext/evidence.js +21 -20
  55. package/dist/cli/capabilityContext/evidence.js.map +1 -1
  56. package/dist/cli/capabilityContext/orchestration.js +3 -2
  57. package/dist/cli/capabilityContext/orchestration.js.map +1 -1
  58. package/dist/cli/capabilityContext/progress.js +9 -4
  59. package/dist/cli/capabilityContext/progress.js.map +1 -1
  60. package/dist/cli/capabilityContext/slim.js +37 -6
  61. package/dist/cli/capabilityContext/slim.js.map +1 -1
  62. package/dist/cli/capabilityContext/startup.js +30 -6
  63. package/dist/cli/capabilityContext/startup.js.map +1 -1
  64. package/dist/cli/capabilityContext/types.js +14 -4
  65. package/dist/cli/capabilityContext/types.js.map +1 -1
  66. package/dist/cli/commands/backfill.js +194 -0
  67. package/dist/cli/commands/backfill.js.map +1 -0
  68. package/dist/cli/commands/compact.js +40 -11
  69. package/dist/cli/commands/compact.js.map +1 -1
  70. package/dist/cli/commands/durability.js +85 -0
  71. package/dist/cli/commands/durability.js.map +1 -0
  72. package/dist/cli/commands/migrate.js +677 -0
  73. package/dist/cli/commands/migrate.js.map +1 -0
  74. package/dist/cli/commands/prime/collectOrientationState.js +23 -0
  75. package/dist/cli/commands/prime/collectOrientationState.js.map +1 -1
  76. package/dist/cli/commands/prime/orientationOutput.js +4 -2
  77. package/dist/cli/commands/prime/orientationOutput.js.map +1 -1
  78. package/dist/cli/commands/query.js +20 -2
  79. package/dist/cli/commands/query.js.map +1 -1
  80. package/dist/cli/commands/schema.js +247 -69
  81. package/dist/cli/commands/schema.js.map +1 -1
  82. package/dist/cli/commands/state/decisions.js +28 -10
  83. package/dist/cli/commands/state/decisions.js.map +1 -1
  84. package/dist/cli/commands/state/experimentRecords.js +156 -0
  85. package/dist/cli/commands/state/experimentRecords.js.map +1 -0
  86. package/dist/cli/commands/state/get.js +141 -0
  87. package/dist/cli/commands/state/get.js.map +1 -0
  88. package/dist/cli/commands/state/index.js +2 -2
  89. package/dist/cli/commands/state/index.js.map +1 -1
  90. package/dist/cli/commands/state/list.js +159 -0
  91. package/dist/cli/commands/state/list.js.map +1 -0
  92. package/dist/cli/commands/state/plan.js +146 -41
  93. package/dist/cli/commands/state/plan.js.map +1 -1
  94. package/dist/cli/commands/state/planTasks.js +164 -0
  95. package/dist/cli/commands/state/planTasks.js.map +1 -0
  96. package/dist/cli/commands/state/plans.js +154 -0
  97. package/dist/cli/commands/state/plans.js.map +1 -0
  98. package/dist/cli/commands/state/write.js +8 -3
  99. package/dist/cli/commands/state/write.js.map +1 -1
  100. package/dist/cli/dispatch/check.js +71 -4
  101. package/dist/cli/dispatch/check.js.map +1 -1
  102. package/dist/cli/dispatch/index.js +48 -30
  103. package/dist/cli/dispatch/index.js.map +1 -1
  104. package/dist/cli/dispatch/lifecycle.js +4 -4
  105. package/dist/cli/dispatch/lifecycle.js.map +1 -1
  106. package/dist/cli/dispatch/state.js +23 -3
  107. package/dist/cli/dispatch/state.js.map +1 -1
  108. package/dist/cli/errors.js +13 -14
  109. package/dist/cli/errors.js.map +1 -1
  110. package/dist/cli/help.js +162 -3
  111. package/dist/cli/help.js.map +1 -1
  112. package/dist/cli/orientation.js +146 -34
  113. package/dist/cli/orientation.js.map +1 -1
  114. package/dist/cli/planArtifacts.js +31 -2
  115. package/dist/cli/planArtifacts.js.map +1 -1
  116. package/dist/cli/prime-blob.js +1 -0
  117. package/dist/cli/prime-blob.js.map +1 -1
  118. package/dist/cli/startupCompletenessContract.js +3 -2
  119. package/dist/cli/startupCompletenessContract.js.map +1 -1
  120. package/dist/cli/stateQuery.js +5 -3
  121. package/dist/cli/stateQuery.js.map +1 -1
  122. package/dist/core/text.js +11 -0
  123. package/dist/core/text.js.map +1 -0
  124. package/dist/hooks/compaction/apply.js +224 -46
  125. package/dist/hooks/compaction/apply.js.map +1 -1
  126. package/dist/hooks/compaction/dryRun.js +2 -0
  127. package/dist/hooks/compaction/dryRun.js.map +1 -1
  128. package/dist/hooks/compaction/index.js +4 -4
  129. package/dist/hooks/compaction/index.js.map +1 -1
  130. package/dist/hooks/compaction/parse.js +73 -5
  131. package/dist/hooks/compaction/parse.js.map +1 -1
  132. package/dist/hooks/compaction/retention.js +22 -21
  133. package/dist/hooks/compaction/retention.js.map +1 -1
  134. package/dist/hooks/compaction/status.js +116 -23
  135. package/dist/hooks/compaction/status.js.map +1 -1
  136. package/dist/hooks/sessionStart.js +39 -7
  137. package/dist/hooks/sessionStart.js.map +1 -1
  138. package/dist/hooks/validateArtifact/index.js +2 -2
  139. package/dist/hooks/validateArtifact/index.js.map +1 -1
  140. package/dist/hooks/validateArtifact/markdown.js +9 -9
  141. package/dist/hooks/validateArtifact/markdown.js.map +1 -1
  142. package/dist/hooks/validateArtifact/traversal.js +11 -9
  143. package/dist/hooks/validateArtifact/traversal.js.map +1 -1
  144. package/dist/registries/artifactRegistry.js +147 -44
  145. package/dist/registries/artifactRegistry.js.map +1 -1
  146. package/dist/release/releaseMetadata.js +95 -1
  147. package/dist/release/releaseMetadata.js.map +1 -1
  148. package/dist/state/archiveDiscovery.js +589 -0
  149. package/dist/state/archiveDiscovery.js.map +1 -0
  150. package/dist/state/archivePublication.js +225 -0
  151. package/dist/state/archivePublication.js.map +1 -0
  152. package/dist/state/archiveRecovery.js +238 -0
  153. package/dist/state/archiveRecovery.js.map +1 -0
  154. package/dist/state/archiveReplay.js +54 -0
  155. package/dist/state/archiveReplay.js.map +1 -0
  156. package/dist/state/decisionOverlay.js +255 -0
  157. package/dist/state/decisionOverlay.js.map +1 -0
  158. package/dist/state/directRetrieval.js +322 -0
  159. package/dist/state/directRetrieval.js.map +1 -0
  160. package/dist/state/durability.js +451 -0
  161. package/dist/state/durability.js.map +1 -0
  162. package/dist/state/experimentArchive.js +64 -0
  163. package/dist/state/experimentArchive.js.map +1 -0
  164. package/dist/state/experimentIdentity.js +191 -0
  165. package/dist/state/experimentIdentity.js.map +1 -0
  166. package/dist/state/experimentRetrieval.js +447 -0
  167. package/dist/state/experimentRetrieval.js.map +1 -0
  168. package/dist/state/gitBackfill.js +561 -0
  169. package/dist/state/gitBackfill.js.map +1 -0
  170. package/dist/state/gitBackfillAuthority.js +141 -0
  171. package/dist/state/gitBackfillAuthority.js.map +1 -0
  172. package/dist/state/gitBackfillHistory.js +278 -0
  173. package/dist/state/gitBackfillHistory.js.map +1 -0
  174. package/dist/state/gitBackfillOutput.js +209 -0
  175. package/dist/state/gitBackfillOutput.js.map +1 -0
  176. package/dist/state/healthRepair.js +70 -0
  177. package/dist/state/healthRepair.js.map +1 -0
  178. package/dist/state/legacyIdentity.js +48 -0
  179. package/dist/state/legacyIdentity.js.map +1 -0
  180. package/dist/state/legacyMigration.js +516 -0
  181. package/dist/state/legacyMigration.js.map +1 -0
  182. package/dist/state/legacyMigrationParser.js +489 -0
  183. package/dist/state/legacyMigrationParser.js.map +1 -0
  184. package/dist/state/listAccounting.js +55 -0
  185. package/dist/state/listAccounting.js.map +1 -0
  186. package/dist/state/listClassification.js +18 -0
  187. package/dist/state/listClassification.js.map +1 -0
  188. package/dist/state/listRetrieval.js +782 -0
  189. package/dist/state/listRetrieval.js.map +1 -0
  190. package/dist/state/migrationAuthority.js +413 -0
  191. package/dist/state/migrationAuthority.js.map +1 -0
  192. package/dist/state/migrationEnrichment.js +35 -0
  193. package/dist/state/migrationEnrichment.js.map +1 -0
  194. package/dist/state/planIdentity.js +45 -0
  195. package/dist/state/planIdentity.js.map +1 -0
  196. package/dist/state/planRetrieval.js +314 -0
  197. package/dist/state/planRetrieval.js.map +1 -0
  198. package/dist/state/planTaskRetrieval.js +285 -0
  199. package/dist/state/planTaskRetrieval.js.map +1 -0
  200. package/dist/state/projectionPolicy.js +184 -0
  201. package/dist/state/projectionPolicy.js.map +1 -0
  202. package/dist/state/retrievalAuthority.js +326 -0
  203. package/dist/state/retrievalAuthority.js.map +1 -0
  204. package/dist/state/startupProjection.js +498 -0
  205. package/dist/state/startupProjection.js.map +1 -0
  206. package/dist/state/write/experimentPublication.js +193 -0
  207. package/dist/state/write/experimentPublication.js.map +1 -0
  208. package/dist/state/write/explain.js +28 -14
  209. package/dist/state/write/explain.js.map +1 -1
  210. package/dist/state/write/helpers.js +8 -0
  211. package/dist/state/write/helpers.js.map +1 -0
  212. package/dist/state/write/index.js +1 -0
  213. package/dist/state/write/index.js.map +1 -1
  214. package/dist/state/write/lock.js +24 -1
  215. package/dist/state/write/lock.js.map +1 -1
  216. package/dist/state/write/mutation.js +190 -0
  217. package/dist/state/write/mutation.js.map +1 -0
  218. package/dist/state/write/operations.js +36 -2
  219. package/dist/state/write/operations.js.map +1 -1
  220. package/dist/state/write/planPublication.js +172 -0
  221. package/dist/state/write/planPublication.js.map +1 -0
  222. package/dist/state/write/transaction.js +238 -225
  223. package/dist/state/write/transaction.js.map +1 -1
  224. package/dist/upgrade/migrateArtifactsV2ToV3.js +2 -2
  225. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +1 -1
  226. package/dist/validate/crossCapability.js +9 -6
  227. package/dist/validate/crossCapability.js.map +1 -1
  228. package/package.json +2 -2
@@ -0,0 +1,255 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { isDeepStrictEqual } from "node:util";
4
+ import { dumpYamlMapping, loadYamlMapping } from "../core/yaml.js";
5
+ import { resolveSourceRoot } from "../core/sourceRoot.js";
6
+ import { assertRealpathBoundary } from "../registries/artifactRegistry.js";
7
+ import { decisionOverlayContract, } from "./archiveDiscovery.js";
8
+ import { reject } from "./write/errors.js";
9
+ function isMapping(value) {
10
+ return value !== null && typeof value === "object" && !Array.isArray(value);
11
+ }
12
+ function mapping(value) {
13
+ return isMapping(value) ? value : {};
14
+ }
15
+ function valueAt(value, field) {
16
+ let current = value;
17
+ for (const part of field.split(".")) {
18
+ if (!isMapping(current))
19
+ return undefined;
20
+ current = current[part];
21
+ }
22
+ return current;
23
+ }
24
+ function setAt(target, field, value) {
25
+ const parts = field.split(".");
26
+ let current = target;
27
+ for (const part of parts.slice(0, -1)) {
28
+ const next = current[part];
29
+ if (!isMapping(next))
30
+ current[part] = {};
31
+ current = current[part];
32
+ }
33
+ current[parts.at(-1)] = structuredClone(value);
34
+ }
35
+ function pathAllowed(field, contract) {
36
+ return contract.mutablePaths.some((mutable) => mutable === field || mutable.startsWith(`${field}.`));
37
+ }
38
+ function validateValueTypes(field, value, contract, violations) {
39
+ if (field.endsWith(".state")) {
40
+ if (typeof value !== "string" || !contract.stateValues.includes(value)) {
41
+ violations.push(`${field} must be one of: ${contract.stateValues.join(", ")}`);
42
+ }
43
+ return;
44
+ }
45
+ if (field.endsWith(".evidence") || field.endsWith(".confirmed_by") || field.endsWith(".confirmed_at")) {
46
+ if (typeof value !== "string")
47
+ violations.push(`${field} must be a string`);
48
+ }
49
+ }
50
+ function validateOverlayValue(value, contract, prefix = "", violations = []) {
51
+ if (!isMapping(value)) {
52
+ violations.push(`${prefix || "overlay entry"} must be a mapping`);
53
+ return violations;
54
+ }
55
+ for (const [key, child] of Object.entries(value)) {
56
+ const field = prefix ? `${prefix}.${key}` : key;
57
+ if (!pathAllowed(field, contract)) {
58
+ violations.push(`${field} is not an authority-declared mutable overlay field`);
59
+ continue;
60
+ }
61
+ if (isMapping(child))
62
+ validateOverlayValue(child, contract, field, violations);
63
+ else
64
+ validateValueTypes(field, child, contract, violations);
65
+ }
66
+ return violations;
67
+ }
68
+ function decisionNumberFromId(id, contract) {
69
+ const prefix = `${contract.identityPrefix}:`;
70
+ if (!id.startsWith(prefix))
71
+ return null;
72
+ const number = id.slice(prefix.length);
73
+ if (!/^[1-9][0-9]*$/.test(number))
74
+ return null;
75
+ const parsed = Number(number);
76
+ return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : null;
77
+ }
78
+ export function decisionOverlayPath(projectRoot, sourceRoot = resolveSourceRoot()) {
79
+ const contract = decisionOverlayContract(sourceRoot);
80
+ const target = path.resolve(projectRoot, contract.location);
81
+ assertRealpathBoundary(projectRoot, target, "decision overlay");
82
+ return target;
83
+ }
84
+ export function decisionOverlayViolations(document, contract = decisionOverlayContract()) {
85
+ if (!isMapping(document))
86
+ return ["decision overlay root must be a mapping keyed by stable decision ID"];
87
+ const violations = [];
88
+ for (const [stableId, value] of Object.entries(document)) {
89
+ if (decisionNumberFromId(stableId, contract) === null) {
90
+ violations.push(`${stableId} is not a valid ${contract.identityKey} key`);
91
+ continue;
92
+ }
93
+ validateOverlayValue(value, contract, "", violations);
94
+ }
95
+ return violations;
96
+ }
97
+ function readOverlayDocument(projectRoot, sourceRoot = resolveSourceRoot()) {
98
+ const contract = decisionOverlayContract(sourceRoot);
99
+ const target = decisionOverlayPath(projectRoot, sourceRoot);
100
+ if (!fs.existsSync(target))
101
+ return { path: target, document: {}, contract };
102
+ const bytes = fs.readFileSync(target, "utf8");
103
+ let document;
104
+ try {
105
+ document = loadYamlMapping(bytes);
106
+ }
107
+ catch (error) {
108
+ throw new Error(`cannot parse decision overlay '${target}': ${error.message}`);
109
+ }
110
+ const violations = decisionOverlayViolations(document, contract);
111
+ if (violations.length > 0)
112
+ throw new Error(`decision overlay '${target}' is invalid: ${violations.join("; ")}`);
113
+ return { path: target, document: document, contract };
114
+ }
115
+ export function loadDecisionOverlay(projectRoot = process.cwd(), sourceRoot = resolveSourceRoot()) {
116
+ return readOverlayDocument(projectRoot, sourceRoot).document;
117
+ }
118
+ export function hydrateDecisionRecords(entries, source = process.cwd()) {
119
+ const overlay = typeof source === "string" ? loadDecisionOverlay(source) : source;
120
+ const contract = decisionOverlayContract();
121
+ return entries.map((entry) => {
122
+ const number = entry.number;
123
+ const stableId = typeof number === "number" || typeof number === "string" ? `decisions:${number}` : null;
124
+ return composeDecisionOverlay(entry, stableId ? overlay[stableId] : undefined, contract);
125
+ });
126
+ }
127
+ export function composeDecisionOverlay(entry, overlay, contract = decisionOverlayContract()) {
128
+ if (!overlay)
129
+ return structuredClone(entry);
130
+ const hydrated = structuredClone(entry);
131
+ const historicalSatisfaction = mapping(hydrated.satisfaction);
132
+ const overlaySatisfaction = mapping(overlay.satisfaction);
133
+ const composedSatisfaction = { ...historicalSatisfaction };
134
+ for (const field of contract.mutablePaths) {
135
+ const relative = field.startsWith("satisfaction.") ? field.slice("satisfaction.".length) : field;
136
+ const value = valueAt(overlaySatisfaction, relative);
137
+ if (value !== undefined)
138
+ setAt(composedSatisfaction, relative, value);
139
+ }
140
+ hydrated.satisfaction = composedSatisfaction;
141
+ return hydrated;
142
+ }
143
+ function requestedSatisfaction(requested, contract) {
144
+ const violations = validateOverlayValue({ satisfaction: requested }, contract);
145
+ if (violations.length > 0) {
146
+ reject({
147
+ class: "schema_violation",
148
+ message: "decision satisfaction update contains invalid overlay fields",
149
+ violations,
150
+ syntax: "agentera state decisions update --number N --satisfaction-state STATE --format json",
151
+ example: "agentera state decisions update --number 53 --satisfaction-state provisionally_satisfied --satisfaction-evidence 'verified' --format json",
152
+ });
153
+ }
154
+ const result = {};
155
+ for (const field of contract.mutablePaths) {
156
+ const relative = field.startsWith("satisfaction.") ? field.slice("satisfaction.".length) : field;
157
+ const value = valueAt(requested, relative);
158
+ if (value !== undefined)
159
+ setAt(result, relative, value);
160
+ }
161
+ return result;
162
+ }
163
+ function nonEmptyString(value) {
164
+ return typeof value === "string" && value.trim().length > 0;
165
+ }
166
+ function statePath(contract) {
167
+ return contract.mutablePaths.find((field) => field.endsWith(".state"))?.slice("satisfaction.".length) ?? "state";
168
+ }
169
+ function evidencePath(contract) {
170
+ return contract.mutablePaths.find((field) => field.endsWith(".evidence"))?.slice("satisfaction.".length) ?? "evidence";
171
+ }
172
+ function confirmationPaths(contract) {
173
+ return contract.mutablePaths
174
+ .filter((field) => field.includes("user_confirmation."))
175
+ .map((field) => field.slice("satisfaction.".length));
176
+ }
177
+ function effectiveState(overlay, historicalSatisfaction) {
178
+ return valueAt(overlay?.satisfaction, "state") ?? valueAt(historicalSatisfaction, "state");
179
+ }
180
+ function validateTransition(requested, currentOverlay, historicalSatisfaction, contract) {
181
+ const nextState = valueAt(requested, statePath(contract));
182
+ const evidence = valueAt(requested, evidencePath(contract));
183
+ const confirmation = mapping(requested.user_confirmation);
184
+ if (nextState === "provisionally_satisfied" && !nonEmptyString(evidence)) {
185
+ reject({
186
+ class: "schema_violation",
187
+ message: "provisionally_satisfied requires non-empty --satisfaction-evidence",
188
+ syntax: "agentera state decisions update --number N --satisfaction-state STATE --satisfaction-evidence TEXT --format json",
189
+ example: "agentera state decisions update --number 53 --satisfaction-state provisionally_satisfied --satisfaction-evidence 'verified' --format json",
190
+ });
191
+ }
192
+ if (nextState === "user_confirmed_satisfied") {
193
+ const paths = confirmationPaths(contract);
194
+ if (paths.some((field) => !nonEmptyString(valueAt(confirmation, field.split(".").at(-1))))) {
195
+ reject({
196
+ class: "schema_violation",
197
+ message: "user_confirmed_satisfied requires explicit current user confirmation metadata",
198
+ syntax: "agentera state decisions update --number N --satisfaction-state user_confirmed_satisfied --confirmed-by USER --confirmed-at TIME --format json",
199
+ example: "agentera state decisions update --number 53 --satisfaction-state user_confirmed_satisfied --confirmed-by user --confirmed-at 2026-07-13T12:00:00Z --format json",
200
+ });
201
+ }
202
+ }
203
+ const currentState = effectiveState(currentOverlay, historicalSatisfaction);
204
+ if (typeof currentState === "string" && contract.stateValues.includes(currentState)) {
205
+ if (!contract.allowedNext[currentState]?.includes(String(nextState))) {
206
+ const downgradeConfirmation = confirmationPaths(contract).every((field) => nonEmptyString(valueAt(confirmation, field.split(".").at(-1))));
207
+ if (!(currentState === "user_confirmed_satisfied" && downgradeConfirmation)) {
208
+ reject({
209
+ class: "conflict",
210
+ message: `decision satisfaction cannot transition from ${currentState} to ${String(nextState)} without explicit current user confirmation`,
211
+ syntax: "agentera state decisions update --number N --satisfaction-state STATE --format json",
212
+ example: "agentera state decisions update --number 53 --satisfaction-state user_confirmed_satisfied --confirmed-by user --confirmed-at 2026-07-13T12:00:00Z --format json",
213
+ });
214
+ }
215
+ }
216
+ }
217
+ }
218
+ export function updateDecisionOverlay(projectRoot, decisionNumber, requested, historicalSatisfaction, transaction, publish = true, sourceRoot = resolveSourceRoot()) {
219
+ const current = readOverlayDocument(projectRoot, sourceRoot);
220
+ const stableId = `${current.contract.identityPrefix}:${decisionNumber}`;
221
+ const currentEntry = current.document[stableId];
222
+ const satisfaction = requestedSatisfaction(requested, current.contract);
223
+ validateTransition(satisfaction, currentEntry, historicalSatisfaction, current.contract);
224
+ const nextDocument = structuredClone(current.document);
225
+ const replay = Boolean(currentEntry && isDeepStrictEqual(currentEntry.satisfaction, satisfaction));
226
+ if (!replay)
227
+ nextDocument[stableId] = { satisfaction };
228
+ if (!replay && publish) {
229
+ const bytes = dumpYamlMapping(nextDocument);
230
+ const violations = decisionOverlayViolations(nextDocument, current.contract);
231
+ if (violations.length > 0) {
232
+ reject({
233
+ class: "schema_violation",
234
+ message: "decision overlay publication failed validation",
235
+ violations,
236
+ });
237
+ }
238
+ const stage = transaction.stageProjection(current.path, bytes);
239
+ try {
240
+ transaction.syncStaged(stage);
241
+ transaction.publishProjection(stage, current.path);
242
+ }
243
+ finally {
244
+ transaction.removeStage(stage);
245
+ }
246
+ }
247
+ return {
248
+ path: current.path,
249
+ satisfaction,
250
+ replay,
251
+ before: current.document,
252
+ after: nextDocument,
253
+ };
254
+ }
255
+ //# sourceMappingURL=decisionOverlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decisionOverlay.js","sourceRoot":"","sources":["../../src/state/decisionOverlay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,322 @@
1
+ import fs from "node:fs";
2
+ import { loadYamlMapping } from "../core/yaml.js";
3
+ import { resolveSourceRoot } from "../core/sourceRoot.js";
4
+ import { canonicalRecordJson, decisionOverlayContract, numberedArchiveArtifacts, numberedArchiveContract, readNumberedArchiveEntry, stateCurrentProjectionPath, validateStateRecord, } from "./archiveDiscovery.js";
5
+ import { composeDecisionOverlay, decisionOverlayPath, loadDecisionOverlay } from "./decisionOverlay.js";
6
+ import { decisionContextEntry } from "../cli/commands/state/decisions.js";
7
+ import { assertRealpathBoundary } from "../registries/artifactRegistry.js";
8
+ import { legacyEntryNumber, legacyIdentity } from "./legacyIdentity.js";
9
+ export class StateRetrievalFailure extends Error {
10
+ body;
11
+ exitCode;
12
+ constructor(body, exitCode) {
13
+ super(body.error.message);
14
+ this.body = body;
15
+ this.exitCode = exitCode;
16
+ }
17
+ }
18
+ function isMapping(value) {
19
+ return value !== null && typeof value === "object" && !Array.isArray(value);
20
+ }
21
+ function stateSyntax(artifactId = "<artifact-id>") {
22
+ return `agentera state ${artifactId} get --number N --format json`;
23
+ }
24
+ function stateExample(artifactId, entryNumber = null) {
25
+ return `agentera state ${artifactId} get --number ${entryNumber ?? 1} --format json`;
26
+ }
27
+ function failure(exitCode, className, message, options) {
28
+ const artifactId = options.artifactId;
29
+ const entryNumber = options.entryNumber;
30
+ const stableId = artifactId && entryNumber ? `${artifactId}:${entryNumber}` : undefined;
31
+ return new StateRetrievalFailure({
32
+ schemaVersion: "agentera.stateFailure.v1",
33
+ status: "fail",
34
+ error: {
35
+ class: className,
36
+ message,
37
+ syntax: stateSyntax(artifactId),
38
+ example: artifactId ? stateExample(artifactId, entryNumber ?? null) : stateExample("progress"),
39
+ recovery: options.recovery,
40
+ ...(artifactId ? { artifact_id: artifactId } : {}),
41
+ ...(entryNumber ? { entry_number: entryNumber } : {}),
42
+ ...(stableId ? { stable_id: stableId } : {}),
43
+ ...(options.validValues ? { valid_values: options.validValues } : {}),
44
+ ...(options.details ? { details: options.details } : {}),
45
+ },
46
+ }, exitCode);
47
+ }
48
+ function inspectCurrentProjection(projectRoot, artifactId, entryNumber, contract, sourceRoot) {
49
+ const projectionPath = stateCurrentProjectionPath(projectRoot, artifactId, sourceRoot);
50
+ try {
51
+ assertRealpathBoundary(projectRoot, projectionPath, `${artifactId} projection`);
52
+ }
53
+ catch (error) {
54
+ throw failure(1, "corrupt", `current ${artifactId} projection path is unsafe`, {
55
+ artifactId,
56
+ entryNumber,
57
+ recovery: "Preserve the project state, repair the unsafe projection path, then retry the direct get command.",
58
+ details: { path: projectionPath, reason: error.message },
59
+ });
60
+ }
61
+ let projectionStat;
62
+ try {
63
+ projectionStat = fs.lstatSync(projectionPath);
64
+ }
65
+ catch (error) {
66
+ if (error.code === "ENOENT")
67
+ return { path: projectionPath, state: "missing" };
68
+ throw failure(1, "corrupt", `cannot read current ${artifactId} projection`, {
69
+ artifactId,
70
+ entryNumber,
71
+ recovery: "Preserve the current projection for diagnostics, repair its file permissions or path, then retry the direct get command.",
72
+ details: { path: projectionPath, reason: error.message },
73
+ });
74
+ }
75
+ if (projectionStat.isSymbolicLink() || !projectionStat.isFile()) {
76
+ throw failure(1, "corrupt", `current ${artifactId} projection is not a regular file`, {
77
+ artifactId,
78
+ entryNumber,
79
+ recovery: "Restore the declared current projection as a regular project-local file, then retry the direct get command.",
80
+ details: { path: projectionPath },
81
+ });
82
+ }
83
+ let document;
84
+ try {
85
+ document = loadYamlMapping(fs.readFileSync(projectionPath, "utf8"));
86
+ }
87
+ catch (error) {
88
+ throw failure(1, "corrupt", `cannot parse current ${artifactId} projection: ${error.message}`, {
89
+ artifactId,
90
+ entryNumber,
91
+ recovery: "Preserve the current projection for diagnostics, repair its YAML, then retry the direct get command.",
92
+ details: { path: projectionPath },
93
+ });
94
+ }
95
+ const active = document[contract.entryCollection];
96
+ if (!Array.isArray(active)) {
97
+ throw failure(1, "corrupt", `current ${artifactId} projection is missing its '${contract.entryCollection}' collection`, {
98
+ artifactId,
99
+ entryNumber,
100
+ recovery: "Restore a valid current projection with its declared entry collection, then retry the direct get command.",
101
+ details: { path: projectionPath, collection: contract.entryCollection },
102
+ });
103
+ }
104
+ let matchingActive;
105
+ for (const candidate of active) {
106
+ if (!isMapping(candidate))
107
+ continue;
108
+ if (legacyEntryNumber(candidate, artifactId, contract.entryNumberField) !== entryNumber)
109
+ continue;
110
+ if (matchingActive) {
111
+ throw failure(1, "ambiguous", `current ${artifactId} projection contains duplicate identity ${artifactId}:${entryNumber}`, {
112
+ artifactId,
113
+ entryNumber,
114
+ recovery: "Preserve the duplicate current entries, remove the identity conflict according to the artifact schema, then retry.",
115
+ details: { path: projectionPath, collection: contract.entryCollection },
116
+ });
117
+ }
118
+ matchingActive = candidate;
119
+ }
120
+ if (matchingActive) {
121
+ try {
122
+ const violations = validateStateRecord(sourceRoot, artifactId, matchingActive);
123
+ return {
124
+ path: projectionPath,
125
+ state: violations.length === 0 ? "full" : "summary",
126
+ identity: legacyIdentity(matchingActive, artifactId, contract.entryNumberField).kind,
127
+ record: matchingActive,
128
+ };
129
+ }
130
+ catch (error) {
131
+ throw failure(1, "unsupported_state", `current ${artifactId} projection could not be validated: ${error.message}`, {
132
+ artifactId,
133
+ entryNumber,
134
+ recovery: "Use a state schema supported by the storage authority, repair the current projection, then retry.",
135
+ details: { path: projectionPath },
136
+ });
137
+ }
138
+ }
139
+ const archive = document.archive;
140
+ if (Array.isArray(archive)) {
141
+ for (const candidate of archive) {
142
+ if (legacyEntryNumber(candidate, artifactId, contract.entryNumberField) !== entryNumber)
143
+ continue;
144
+ return {
145
+ path: projectionPath,
146
+ state: "summary",
147
+ identity: legacyIdentity(candidate, artifactId, contract.entryNumberField).kind,
148
+ record: isMapping(candidate) ? candidate : { summary: candidate },
149
+ };
150
+ }
151
+ }
152
+ return { path: projectionPath, state: "absent" };
153
+ }
154
+ function overlayFor(projectRoot, sourceRoot, artifactId, entryNumber, record) {
155
+ if (artifactId !== "decisions")
156
+ return { record, applied: false, fields: [], path: "" };
157
+ const contract = decisionOverlayContract(sourceRoot);
158
+ const overlayPath = decisionOverlayPath(projectRoot, sourceRoot);
159
+ let overlay;
160
+ try {
161
+ overlay = loadDecisionOverlay(projectRoot, sourceRoot);
162
+ }
163
+ catch (error) {
164
+ throw failure(1, "corrupt", `cannot read decision overlay: ${error.message}`, {
165
+ artifactId,
166
+ entryNumber,
167
+ recovery: "Preserve the decision overlay for diagnostics, repair its YAML and whitelisted fields, then retry.",
168
+ details: { path: overlayPath },
169
+ });
170
+ }
171
+ const stableId = `decisions:${entryNumber}`;
172
+ const selected = overlay[stableId];
173
+ const fields = selected
174
+ ? contract.mutablePaths.filter((field) => {
175
+ let value = selected;
176
+ for (const part of field.split(".")) {
177
+ if (!isMapping(value))
178
+ return false;
179
+ value = value[part];
180
+ }
181
+ return value !== undefined;
182
+ })
183
+ : [];
184
+ const composed = composeDecisionOverlay(record, selected, contract);
185
+ return {
186
+ record: decisionContextEntry(composed, { inferOutcome: false }),
187
+ applied: fields.length > 0,
188
+ fields,
189
+ path: overlayPath,
190
+ };
191
+ }
192
+ function compose(projectRoot, sourceRoot, artifactId, entryNumber, current, archivePath, archiveRecord, archiveHash) {
193
+ const record = archiveRecord ?? current.record;
194
+ if (!record) {
195
+ throw failure(1, "incomplete", `state ${artifactId}:${entryNumber} has no complete record available`, {
196
+ artifactId,
197
+ entryNumber,
198
+ recovery: "Restore or publish the validated numbered archive for this ID before retrying; missing fields are not reconstructed.",
199
+ details: { current_projection_path: current.path, archive_path: archivePath, current_representation: current.state },
200
+ });
201
+ }
202
+ if (!archiveRecord && current.state === "summary" && current.identity !== "explicit_decision_shorthand") {
203
+ throw failure(1, "incomplete", `state ${artifactId}:${entryNumber} is represented only by an irrecoverable legacy summary`, {
204
+ artifactId,
205
+ entryNumber,
206
+ recovery: "Restore or publish the validated numbered archive for this ID before retrying; missing fields are not reconstructed.",
207
+ details: { current_projection_path: current.path, archive_path: archivePath, current_representation: current.state },
208
+ });
209
+ }
210
+ const complete = archiveRecord !== undefined || current.state === "full";
211
+ const overlay = complete ? overlayFor(projectRoot, sourceRoot, artifactId, entryNumber, record) : { record, applied: false, fields: [], path: "" };
212
+ const source = archiveRecord ? "archive" : current.state === "summary" ? "legacy_summary" : "legacy_full";
213
+ const compatibility = archiveRecord ? "complete" : "degraded";
214
+ return {
215
+ stable_id: `${artifactId}:${entryNumber}`,
216
+ artifact_id: artifactId,
217
+ entry_number: entryNumber,
218
+ record: overlay.record,
219
+ source,
220
+ detail_availability: complete ? "full" : "summary",
221
+ compatibility,
222
+ provenance: {
223
+ archive: {
224
+ path: archivePath,
225
+ available: archiveRecord !== undefined,
226
+ verified: archiveRecord !== undefined,
227
+ ...(archiveHash ? { record_sha256: archiveHash } : {}),
228
+ },
229
+ current_projection: {
230
+ path: current.path,
231
+ present: current.state !== "missing" && current.state !== "absent",
232
+ representation: current.state,
233
+ },
234
+ ...(artifactId === "decisions" && complete
235
+ ? { overlay: { path: overlay.path, applied: overlay.applied, fields: overlay.fields } }
236
+ : {}),
237
+ },
238
+ };
239
+ }
240
+ export function retrieveStateEntry(projectRoot, artifactId, entryNumber, options = {}) {
241
+ const sourceRoot = options.sourceRoot ?? resolveSourceRoot();
242
+ const artifacts = numberedArchiveArtifacts(sourceRoot);
243
+ if (!artifacts.includes(artifactId)) {
244
+ throw failure(2, "unsupported_artifact", `unsupported state artifact '${artifactId}'`, {
245
+ recovery: "Use a supported numbered state artifact and retry the direct get command.",
246
+ validValues: artifacts,
247
+ });
248
+ }
249
+ const contract = numberedArchiveContract(artifactId, sourceRoot);
250
+ let current;
251
+ try {
252
+ current = inspectCurrentProjection(projectRoot, artifactId, entryNumber, contract, sourceRoot);
253
+ }
254
+ catch (error) {
255
+ if (error instanceof StateRetrievalFailure)
256
+ throw error;
257
+ throw failure(1, "unsupported_state", `state authority could not read ${artifactId}:${entryNumber}: ${error.message}`, {
258
+ artifactId,
259
+ entryNumber,
260
+ recovery: "Use a state format supported by the storage authority, then retry the direct get command.",
261
+ });
262
+ }
263
+ const lookup = readNumberedArchiveEntry(projectRoot, artifactId, entryNumber, { sourceRoot });
264
+ if (lookup.rejection) {
265
+ const unsupported = lookup.rejection.class === "unsupported_artifact" ||
266
+ lookup.rejection.reason === "unsupported_artifact" ||
267
+ (lookup.rejection.reason === "invalid_envelope" && lookup.rejection.message.startsWith("schemaVersion must be"));
268
+ throw failure(1, unsupported ? "unsupported_state" : "corrupt", lookup.rejection.message, {
269
+ artifactId,
270
+ entryNumber,
271
+ recovery: unsupported
272
+ ? "Use a numbered archive schema supported by the storage authority, then retry the direct get command."
273
+ : "Preserve the affected archive bytes for diagnostics, repair the numbered record, then retry the direct get command.",
274
+ details: { archive_path: lookup.path, rejection: lookup.rejection.reason },
275
+ });
276
+ }
277
+ const archiveRecord = lookup.entry?.record;
278
+ if (!archiveRecord && current.state === "missing") {
279
+ throw failure(1, "not_found", `state ${artifactId}:${entryNumber} was not found in the current projection or numbered archive`, {
280
+ artifactId,
281
+ entryNumber,
282
+ recovery: "Use an existing stable ID or restore/publish this numbered record before retrying.",
283
+ details: { current_projection_path: current.path, archive_path: lookup.path },
284
+ });
285
+ }
286
+ if (!archiveRecord && current.state === "absent") {
287
+ throw failure(1, "not_found", `state ${artifactId}:${entryNumber} was not found in the current projection or numbered archive`, {
288
+ artifactId,
289
+ entryNumber,
290
+ recovery: "Use an existing stable ID or restore/publish this numbered record before retrying.",
291
+ details: { current_projection_path: current.path, archive_path: lookup.path },
292
+ });
293
+ }
294
+ if (archiveRecord && current.record && current.state === "full") {
295
+ try {
296
+ if (canonicalRecordJson(archiveRecord) !== canonicalRecordJson(current.record)) {
297
+ throw failure(1, "immutable_conflict", `state ${artifactId}:${entryNumber} differs between archive and current projection`, {
298
+ artifactId,
299
+ entryNumber,
300
+ recovery: "Preserve the immutable archive bytes and reconcile the conflicting current record before retrying.",
301
+ details: { current_projection_path: current.path, archive_path: lookup.path },
302
+ });
303
+ }
304
+ }
305
+ catch (error) {
306
+ if (error instanceof StateRetrievalFailure)
307
+ throw error;
308
+ throw failure(1, "corrupt", `state ${artifactId}:${entryNumber} could not be compared safely`, {
309
+ artifactId,
310
+ entryNumber,
311
+ recovery: "Preserve both records for diagnostics, repair their serialized state, then retry.",
312
+ details: { current_projection_path: current.path, archive_path: lookup.path },
313
+ });
314
+ }
315
+ }
316
+ return {
317
+ command: `state ${artifactId} get`,
318
+ status: "ok",
319
+ entry: compose(projectRoot, sourceRoot, artifactId, entryNumber, current, lookup.path, archiveRecord, lookup.entry?.recordSha256),
320
+ };
321
+ }
322
+ //# sourceMappingURL=directRetrieval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directRetrieval.js","sourceRoot":"","sources":["../../src/state/directRetrieval.ts"],"names":[],"mappings":"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"}