agentera 3.0.0-dev.32 → 3.0.0-dev.39

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 (196) hide show
  1. package/bundle/CHANGELOG.md +75 -5
  2. package/bundle/references/adapters/package-publication.json +43 -0
  3. package/bundle/references/adapters/package-surface-characterization.md +12 -0
  4. package/bundle/references/analysis/evidence-tier-authority.yaml +23 -21
  5. package/bundle/references/analysis/verification-policy.yaml +1 -0
  6. package/bundle/references/artifacts/artifact-registry-interface-model.yaml +11 -2
  7. package/bundle/references/artifacts/glossary-entry-contract.yaml +1241 -0
  8. package/bundle/references/artifacts/state-storage-authority.yaml +149 -80
  9. package/bundle/references/cli/agent-ready-state-contract.yaml +84 -2
  10. package/bundle/references/cli/audience-namespace-cli-migration.yaml +12 -1
  11. package/bundle/references/cli/prime-consumer-compatibility.yaml +7 -1
  12. package/bundle/skills/agentera/SKILL.md +26 -26
  13. package/bundle/skills/agentera/capabilities/audit/schemas/validation.yaml +26 -8
  14. package/bundle/skills/agentera/capabilities/build/schemas/artifacts.yaml +21 -4
  15. package/bundle/skills/agentera/capabilities/build/schemas/exit.yaml +5 -4
  16. package/bundle/skills/agentera/capabilities/build/schemas/validation.yaml +67 -3
  17. package/bundle/skills/agentera/capabilities/discuss/schemas/artifacts.yaml +3 -2
  18. package/bundle/skills/agentera/capabilities/discuss/schemas/validation.yaml +64 -0
  19. package/bundle/skills/agentera/capabilities/plan/schemas/artifacts.yaml +4 -1
  20. package/bundle/skills/agentera/capabilities/plan/schemas/validation.yaml +30 -0
  21. package/bundle/skills/agentera/capabilities/profile/schemas/artifacts.yaml +5 -2
  22. package/bundle/skills/agentera/capabilities/profile/schemas/exit.yaml +3 -2
  23. package/bundle/skills/agentera/capabilities/profile/schemas/validation.yaml +30 -0
  24. package/bundle/skills/agentera/schemas/artifacts/glossary.yaml +82 -0
  25. package/bundle/skills/agentera/schemas/artifacts/plan.yaml +19 -4
  26. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +92 -0
  27. package/dist/analytics/extractCorpus/evidenceTiers.js +46 -3
  28. package/dist/analytics/extractCorpus/evidenceTiers.js.map +1 -1
  29. package/dist/analytics/extractCorpus/tierReader.js +1 -1
  30. package/dist/analytics/extractCorpus/tierReader.js.map +1 -1
  31. package/dist/analytics/glossaryAdviceResolution.js +167 -0
  32. package/dist/analytics/glossaryAdviceResolution.js.map +1 -0
  33. package/dist/analytics/glossaryInputAcquisition.js +320 -0
  34. package/dist/analytics/glossaryInputAcquisition.js.map +1 -0
  35. package/dist/analytics/personalGlossaryAdmission.js +134 -0
  36. package/dist/analytics/personalGlossaryAdmission.js.map +1 -0
  37. package/dist/analytics/personalGlossaryProfile.js +219 -0
  38. package/dist/analytics/personalGlossaryProfile.js.map +1 -0
  39. package/dist/audit/terminologyDrift.js +282 -0
  40. package/dist/audit/terminologyDrift.js.map +1 -0
  41. package/dist/capabilities/audit/instructions.js +2 -1
  42. package/dist/capabilities/audit/instructions.js.map +1 -1
  43. package/dist/capabilities/build/instructions.js +41 -2
  44. package/dist/capabilities/build/instructions.js.map +1 -1
  45. package/dist/capabilities/discuss/instructions.js +14 -1
  46. package/dist/capabilities/discuss/instructions.js.map +1 -1
  47. package/dist/capabilities/index.js +1 -1
  48. package/dist/capabilities/index.js.map +1 -1
  49. package/dist/capabilities/orchestrate/instructions.js +2 -2
  50. package/dist/capabilities/plan/instructions.js +19 -2
  51. package/dist/capabilities/plan/instructions.js.map +1 -1
  52. package/dist/capabilities/profile/instructions.js +67 -1
  53. package/dist/capabilities/profile/instructions.js.map +1 -1
  54. package/dist/cli/capabilityContext/bespoke.js +4 -3
  55. package/dist/cli/capabilityContext/bespoke.js.map +1 -1
  56. package/dist/cli/capabilityContext/build.js +77 -24
  57. package/dist/cli/capabilityContext/build.js.map +1 -1
  58. package/dist/cli/capabilityContext/closeout.js +2 -2
  59. package/dist/cli/capabilityContext/closeout.js.map +1 -1
  60. package/dist/cli/capabilityContext/evidence.js +2 -6
  61. package/dist/cli/capabilityContext/evidence.js.map +1 -1
  62. package/dist/cli/capabilityContext/planState.js +59 -78
  63. package/dist/cli/capabilityContext/planState.js.map +1 -1
  64. package/dist/cli/capabilityContext/projectVerification.js +410 -0
  65. package/dist/cli/capabilityContext/projectVerification.js.map +1 -0
  66. package/dist/cli/capabilityContext/startup.js +21 -4
  67. package/dist/cli/capabilityContext/startup.js.map +1 -1
  68. package/dist/cli/commands/glossaryAdvice.js +139 -0
  69. package/dist/cli/commands/glossaryAdvice.js.map +1 -0
  70. package/dist/cli/commands/personalGlossary.js +177 -0
  71. package/dist/cli/commands/personalGlossary.js.map +1 -0
  72. package/dist/cli/commands/prime/buildExecutionRequest.js +165 -0
  73. package/dist/cli/commands/prime/buildExecutionRequest.js.map +1 -0
  74. package/dist/cli/commands/prime/collectEntityOrientation.js +18 -2
  75. package/dist/cli/commands/prime/collectEntityOrientation.js.map +1 -1
  76. package/dist/cli/commands/prime/collectOrientationState.js +7 -1
  77. package/dist/cli/commands/prime/collectOrientationState.js.map +1 -1
  78. package/dist/cli/commands/prime/orientationOutput.js +12 -2
  79. package/dist/cli/commands/prime/orientationOutput.js.map +1 -1
  80. package/dist/cli/commands/prime.js +37 -2
  81. package/dist/cli/commands/prime.js.map +1 -1
  82. package/dist/cli/commands/profileGrounding.js +77 -0
  83. package/dist/cli/commands/profileGrounding.js.map +1 -0
  84. package/dist/cli/commands/query.js +14 -4
  85. package/dist/cli/commands/query.js.map +1 -1
  86. package/dist/cli/commands/schema.js +10 -0
  87. package/dist/cli/commands/schema.js.map +1 -1
  88. package/dist/cli/commands/state/write.js +4 -1
  89. package/dist/cli/commands/state/write.js.map +1 -1
  90. package/dist/cli/dispatch/lifecycle.js +45 -0
  91. package/dist/cli/dispatch/lifecycle.js.map +1 -1
  92. package/dist/cli/dispatch/prime.js +22 -1
  93. package/dist/cli/dispatch/prime.js.map +1 -1
  94. package/dist/cli/dispatch/shared.js +1 -1
  95. package/dist/cli/dispatch/shared.js.map +1 -1
  96. package/dist/cli/help.js +23 -1
  97. package/dist/cli/help.js.map +1 -1
  98. package/dist/cli/migrationRequired.js +2 -0
  99. package/dist/cli/migrationRequired.js.map +1 -1
  100. package/dist/cli/orientation/attention.js +3 -1
  101. package/dist/cli/orientation/attention.js.map +1 -1
  102. package/dist/cli/orientation.js +2 -2
  103. package/dist/cli/orientation.js.map +1 -1
  104. package/dist/registries/artifactProtocolIds.js +2 -0
  105. package/dist/registries/artifactProtocolIds.js.map +1 -1
  106. package/dist/registries/artifactRegistry.js +2 -0
  107. package/dist/registries/artifactRegistry.js.map +1 -1
  108. package/dist/registries/evidenceTierContract.js +26 -16
  109. package/dist/registries/evidenceTierContract.js.map +1 -1
  110. package/dist/registries/glossaryAdviceContract.js +79 -0
  111. package/dist/registries/glossaryAdviceContract.js.map +1 -0
  112. package/dist/registries/glossaryCaveatContract.js +68 -0
  113. package/dist/registries/glossaryCaveatContract.js.map +1 -0
  114. package/dist/registries/glossaryConsumerContractValidation.js +792 -0
  115. package/dist/registries/glossaryConsumerContractValidation.js.map +1 -0
  116. package/dist/registries/glossaryEntryContract.js +747 -0
  117. package/dist/registries/glossaryEntryContract.js.map +1 -0
  118. package/dist/registries/glossaryTermIdentity.js +18 -0
  119. package/dist/registries/glossaryTermIdentity.js.map +1 -0
  120. package/dist/registries/glossaryTermOccurrence.js +21 -0
  121. package/dist/registries/glossaryTermOccurrence.js.map +1 -0
  122. package/dist/state/changelog.js +222 -0
  123. package/dist/state/changelog.js.map +1 -0
  124. package/dist/state/decisionEntities.js +18 -11
  125. package/dist/state/decisionEntities.js.map +1 -1
  126. package/dist/state/decisionMigrationProvenance.js +84 -1
  127. package/dist/state/decisionMigrationProvenance.js.map +1 -1
  128. package/dist/state/decisionOverlay.js +9 -32
  129. package/dist/state/decisionOverlay.js.map +1 -1
  130. package/dist/state/decisionRevision.js +69 -444
  131. package/dist/state/decisionRevision.js.map +1 -1
  132. package/dist/state/decisionRevisionMigration.js +90 -0
  133. package/dist/state/decisionRevisionMigration.js.map +1 -0
  134. package/dist/state/directRetrieval.js +3 -52
  135. package/dist/state/directRetrieval.js.map +1 -1
  136. package/dist/state/entityCutover.js +6 -6
  137. package/dist/state/entityCutover.js.map +1 -1
  138. package/dist/state/entityGlossaryAuthority.js +14 -0
  139. package/dist/state/entityGlossaryAuthority.js.map +1 -0
  140. package/dist/state/entityMigrationIdentity.js +6 -0
  141. package/dist/state/entityMigrationIdentity.js.map +1 -0
  142. package/dist/state/entityMigrationPreview.js +14 -23
  143. package/dist/state/entityMigrationPreview.js.map +1 -1
  144. package/dist/state/entityPublicationContext.js +374 -71
  145. package/dist/state/entityPublicationContext.js.map +1 -1
  146. package/dist/state/entityStorage.js +45 -29
  147. package/dist/state/entityStorage.js.map +1 -1
  148. package/dist/state/healthEntities.js +2 -4
  149. package/dist/state/healthEntities.js.map +1 -1
  150. package/dist/state/listRetrieval.js +7 -38
  151. package/dist/state/listRetrieval.js.map +1 -1
  152. package/dist/state/migrationSourceBinding.js +1 -1
  153. package/dist/state/migrationSourceBinding.js.map +1 -1
  154. package/dist/state/objectiveExperimentEntities.js +9 -9
  155. package/dist/state/objectiveExperimentEntities.js.map +1 -1
  156. package/dist/state/planEntities.js +57 -16
  157. package/dist/state/planEntities.js.map +1 -1
  158. package/dist/state/progressEntities.js +177 -39
  159. package/dist/state/progressEntities.js.map +1 -1
  160. package/dist/state/progressGlossaryCaveat.js +169 -0
  161. package/dist/state/progressGlossaryCaveat.js.map +1 -0
  162. package/dist/state/progressPublicationOrder.js +20 -0
  163. package/dist/state/progressPublicationOrder.js.map +1 -0
  164. package/dist/state/safeProjectFile.js +4 -1
  165. package/dist/state/safeProjectFile.js.map +1 -1
  166. package/dist/state/startupProjection.js +2 -70
  167. package/dist/state/startupProjection.js.map +1 -1
  168. package/dist/state/stateStorageAuthority.js +48 -0
  169. package/dist/state/stateStorageAuthority.js.map +1 -0
  170. package/dist/state/summarySourceRowAuthority.js +1 -1
  171. package/dist/state/summarySourceRowAuthority.js.map +1 -1
  172. package/dist/state/todoDocsEntities.js +8 -9
  173. package/dist/state/todoDocsEntities.js.map +1 -1
  174. package/dist/state/write/explain.js +101 -92
  175. package/dist/state/write/explain.js.map +1 -1
  176. package/dist/state/write/glossaryPublication.js +264 -0
  177. package/dist/state/write/glossaryPublication.js.map +1 -0
  178. package/dist/state/write/index.js +1 -0
  179. package/dist/state/write/index.js.map +1 -1
  180. package/dist/state/write/operations.js +25 -27
  181. package/dist/state/write/operations.js.map +1 -1
  182. package/dist/state/write/planEvaluation.js +6 -2
  183. package/dist/state/write/planEvaluation.js.map +1 -1
  184. package/dist/state/write/transaction.js +7 -4
  185. package/dist/state/write/transaction.js.map +1 -1
  186. package/dist/upgrade/upgradeOrchestrator.js +15 -10
  187. package/dist/upgrade/upgradeOrchestrator.js.map +1 -1
  188. package/dist/validate/crossCapability.js +3 -0
  189. package/dist/validate/crossCapability.js.map +1 -1
  190. package/dist/validate/v1LegacyCruft.js +141 -0
  191. package/dist/validate/v1LegacyCruft.js.map +1 -0
  192. package/dist/validate/vocabularyAuthority.js +2 -0
  193. package/dist/validate/vocabularyAuthority.js.map +1 -1
  194. package/package.json +4 -3
  195. package/dist/state/decisionRevisionPublication.js +0 -532
  196. package/dist/state/decisionRevisionPublication.js.map +0 -1
@@ -0,0 +1,320 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { TextDecoder } from "node:util";
4
+ import { personalGlossaryConsumerEntries, PersonalGlossaryBoundaryError, } from "./personalGlossaryProfile.js";
5
+ import { glossaryAcquisitionContract, GlossaryEntryBoundError, } from "../registries/glossaryEntryContract.js";
6
+ import { docsPathOverridesFromBytes, loadArtifactRecord, resolveArtifactPath, } from "../registries/artifactRegistry.js";
7
+ import { ARTIFACT_PROTOCOL_PATHS } from "../registries/artifactProtocolIds.js";
8
+ import { assertValidatedProjectRoot, validateRealProjectRoot, } from "../state/projectRoot.js";
9
+ import { parseProjectGlossaryDocument } from "../state/write/glossaryPublication.js";
10
+ const PROJECT_RECOVERY = "Repair the canonical GLOSSARY.md artifact or docs mapping, then run agentera state query --list-artifacts before retrying glossary acquisition.";
11
+ const PERSONAL_RECOVERY = "Run agentera profile to repair or regenerate the owned Glossary section, then retry glossary acquisition.";
12
+ function valid(owner, availability, entries) {
13
+ return {
14
+ owner,
15
+ availability,
16
+ entries,
17
+ gap_proving: owner === "project" && availability !== "valid_present",
18
+ diagnostic: null,
19
+ };
20
+ }
21
+ function invalid(owner, availability) {
22
+ return {
23
+ owner,
24
+ availability,
25
+ entries: [],
26
+ gap_proving: false,
27
+ diagnostic: {
28
+ class: availability,
29
+ recovery: owner === "project" ? PROJECT_RECOVERY : PERSONAL_RECOVERY,
30
+ },
31
+ };
32
+ }
33
+ function errorCode(error) {
34
+ return typeof error === "object" && error !== null && "code" in error
35
+ ? String(error.code)
36
+ : undefined;
37
+ }
38
+ function readBoundedRegularFile(pathname, maxBytes) {
39
+ let before;
40
+ try {
41
+ before = fs.lstatSync(pathname, { bigint: true });
42
+ }
43
+ catch (error) {
44
+ return errorCode(error) === "ENOENT" ? { status: "absent" } : { status: "unreadable" };
45
+ }
46
+ if (before.isSymbolicLink() || !before.isFile())
47
+ return { status: "ambiguous" };
48
+ const noFollow = fs.constants.O_NOFOLLOW;
49
+ if (noFollow === undefined)
50
+ return { status: "ambiguous" };
51
+ let descriptor;
52
+ try {
53
+ descriptor = fs.openSync(pathname, fs.constants.O_RDONLY | noFollow);
54
+ }
55
+ catch (error) {
56
+ const code = errorCode(error);
57
+ if (code === "ENOENT" || code === "ELOOP")
58
+ return { status: "ambiguous" };
59
+ return { status: "unreadable" };
60
+ }
61
+ try {
62
+ const opened = fs.fstatSync(descriptor, { bigint: true });
63
+ if (!sameIdentity(before, opened) || !opened.isFile())
64
+ return { status: "ambiguous" };
65
+ if (opened.size > BigInt(maxBytes))
66
+ return { status: "over_bound" };
67
+ const bytes = readDescriptorBounded(descriptor, maxBytes);
68
+ if (bytes === null)
69
+ return { status: "over_bound" };
70
+ const after = fs.fstatSync(descriptor, { bigint: true });
71
+ const current = fs.lstatSync(pathname, { bigint: true });
72
+ if (!sameFileSnapshot(opened, after) || !sameIdentity(opened, current)) {
73
+ return { status: "ambiguous" };
74
+ }
75
+ return { status: "ok", bytes };
76
+ }
77
+ catch {
78
+ return { status: "unreadable" };
79
+ }
80
+ finally {
81
+ fs.closeSync(descriptor);
82
+ }
83
+ }
84
+ function sameIdentity(left, right) {
85
+ return left.dev === right.dev && left.ino === right.ino;
86
+ }
87
+ function sameFileSnapshot(left, right) {
88
+ return (sameIdentity(left, right) &&
89
+ left.isFile() &&
90
+ right.isFile() &&
91
+ left.size === right.size &&
92
+ left.mtimeNs === right.mtimeNs &&
93
+ left.ctimeNs === right.ctimeNs);
94
+ }
95
+ function readDescriptorBounded(descriptor, maxBytes) {
96
+ const candidate = Buffer.alloc(maxBytes + 1);
97
+ let offset = 0;
98
+ while (offset < candidate.byteLength) {
99
+ const count = fs.readSync(descriptor, candidate, offset, candidate.byteLength - offset, null);
100
+ if (count === 0)
101
+ break;
102
+ offset += count;
103
+ }
104
+ return offset > maxBytes ? null : candidate.subarray(0, offset);
105
+ }
106
+ function identitiesStable(identities) {
107
+ return identities.every((identity) => {
108
+ try {
109
+ const current = fs.lstatSync(identity.pathname, { bigint: true });
110
+ return (current.dev === identity.dev &&
111
+ current.ino === identity.ino &&
112
+ (identity.type === "directory" ? current.isDirectory() : current.isFile()) &&
113
+ !current.isSymbolicLink());
114
+ }
115
+ catch {
116
+ return false;
117
+ }
118
+ });
119
+ }
120
+ function readStableProjectFile(root, pathname, maxBytes, kind, hooks) {
121
+ assertValidatedProjectRoot(root);
122
+ const relative = path.relative(root.path, pathname);
123
+ if (relative === "" ||
124
+ relative === ".." ||
125
+ relative.startsWith(`..${path.sep}`) ||
126
+ path.isAbsolute(relative)) {
127
+ return { status: "ambiguous" };
128
+ }
129
+ const identities = [];
130
+ let current = root.path;
131
+ const segments = relative.split(path.sep).filter(Boolean);
132
+ for (const [index, segment] of segments.entries()) {
133
+ current = path.join(current, segment);
134
+ let stat;
135
+ try {
136
+ stat = fs.lstatSync(current, { bigint: true });
137
+ }
138
+ catch (error) {
139
+ if (errorCode(error) !== "ENOENT")
140
+ return { status: "unreadable" };
141
+ try {
142
+ hooks.afterPathSnapshot?.(kind);
143
+ }
144
+ catch {
145
+ return { status: "ambiguous" };
146
+ }
147
+ if (!identitiesStable(identities))
148
+ return { status: "ambiguous" };
149
+ try {
150
+ fs.lstatSync(current);
151
+ return { status: "ambiguous" };
152
+ }
153
+ catch (missingError) {
154
+ if (errorCode(missingError) !== "ENOENT")
155
+ return { status: "ambiguous" };
156
+ try {
157
+ assertValidatedProjectRoot(root);
158
+ }
159
+ catch {
160
+ return { status: "ambiguous" };
161
+ }
162
+ return { status: "absent" };
163
+ }
164
+ }
165
+ if (stat.isSymbolicLink())
166
+ return { status: "ambiguous" };
167
+ const type = index === segments.length - 1 ? "file" : "directory";
168
+ if ((type === "file" && !stat.isFile()) || (type === "directory" && !stat.isDirectory())) {
169
+ return { status: "ambiguous" };
170
+ }
171
+ identities.push({ pathname: current, dev: stat.dev, ino: stat.ino, type });
172
+ }
173
+ try {
174
+ hooks.afterPathSnapshot?.(kind);
175
+ }
176
+ catch {
177
+ return { status: "ambiguous" };
178
+ }
179
+ const noFollow = fs.constants.O_NOFOLLOW;
180
+ if (noFollow === undefined)
181
+ return { status: "ambiguous" };
182
+ let descriptor;
183
+ try {
184
+ descriptor = fs.openSync(pathname, fs.constants.O_RDONLY | noFollow);
185
+ const opened = fs.fstatSync(descriptor, { bigint: true });
186
+ const leaf = identities.at(-1);
187
+ if (!opened.isFile() ||
188
+ opened.dev !== leaf.dev ||
189
+ opened.ino !== leaf.ino ||
190
+ !identitiesStable(identities)) {
191
+ return { status: "ambiguous" };
192
+ }
193
+ if (opened.size > BigInt(maxBytes))
194
+ return { status: "over_bound" };
195
+ const bytes = readDescriptorBounded(descriptor, maxBytes);
196
+ if (bytes === null)
197
+ return { status: "over_bound" };
198
+ const after = fs.fstatSync(descriptor, { bigint: true });
199
+ if (!sameFileSnapshot(opened, after) || !identitiesStable(identities)) {
200
+ return { status: "ambiguous" };
201
+ }
202
+ assertValidatedProjectRoot(root);
203
+ return { status: "ok", bytes };
204
+ }
205
+ catch (error) {
206
+ const code = errorCode(error);
207
+ return code === "EACCES" || code === "EPERM"
208
+ ? { status: "unreadable" }
209
+ : { status: "ambiguous" };
210
+ }
211
+ finally {
212
+ if (descriptor !== undefined) {
213
+ try {
214
+ fs.closeSync(descriptor);
215
+ }
216
+ catch {
217
+ /* A failed close cannot make rejected bytes authoritative. */
218
+ }
219
+ }
220
+ }
221
+ }
222
+ function decodeUtf8(bytes) {
223
+ try {
224
+ return new TextDecoder("utf-8", { fatal: true }).decode(bytes);
225
+ }
226
+ catch {
227
+ return null;
228
+ }
229
+ }
230
+ export function acquireProjectGlossaryInput(projectRoot, hooks = {}) {
231
+ const bounds = glossaryAcquisitionContract();
232
+ let root;
233
+ let pathname;
234
+ try {
235
+ root = validateRealProjectRoot(projectRoot);
236
+ const record = loadArtifactRecord("glossary");
237
+ if (!record)
238
+ return invalid("project", "ambiguous");
239
+ const docsPath = path.join(root.path, ARTIFACT_PROTOCOL_PATHS.docs);
240
+ const docsSource = readStableProjectFile(root, docsPath, bounds.maxSourceUtf8Bytes, "docs_override", hooks);
241
+ if (docsSource.status !== "ok" && docsSource.status !== "absent") {
242
+ return invalid("project", "ambiguous");
243
+ }
244
+ let docsPathOverrides = {};
245
+ if (docsSource.status === "ok") {
246
+ const decoded = decodeUtf8(docsSource.bytes);
247
+ if (decoded === null)
248
+ return invalid("project", "ambiguous");
249
+ try {
250
+ docsPathOverrides = docsPathOverridesFromBytes(decoded, true);
251
+ }
252
+ catch {
253
+ return invalid("project", "ambiguous");
254
+ }
255
+ }
256
+ pathname = resolveArtifactPath(record, root.path, { strictWrite: true, docsPathOverrides });
257
+ assertValidatedProjectRoot(root);
258
+ }
259
+ catch {
260
+ return invalid("project", "ambiguous");
261
+ }
262
+ const source = readStableProjectFile(root, pathname, bounds.maxSourceUtf8Bytes, "glossary_target", hooks);
263
+ if (source.status === "absent")
264
+ return valid("project", "absent", []);
265
+ if (source.status !== "ok")
266
+ return invalid("project", source.status);
267
+ try {
268
+ assertValidatedProjectRoot(root);
269
+ const decoded = decodeUtf8(source.bytes);
270
+ if (decoded === null)
271
+ return invalid("project", "malformed");
272
+ const document = parseProjectGlossaryDocument(decoded, bounds.maxEntries);
273
+ assertValidatedProjectRoot(root);
274
+ const entries = document.entries.map((entry) => ({
275
+ term: String(entry.term),
276
+ meaning: String(entry.meaning),
277
+ owner: "project",
278
+ }));
279
+ return valid("project", entries.length === 0 ? "valid_empty" : "valid_present", entries);
280
+ }
281
+ catch (error) {
282
+ return invalid("project", error instanceof GlossaryEntryBoundError ? "over_bound" : "malformed");
283
+ }
284
+ }
285
+ export function acquirePersonalGlossaryInput(profilePath) {
286
+ const bounds = glossaryAcquisitionContract();
287
+ const source = readBoundedRegularFile(profilePath, bounds.maxSourceUtf8Bytes);
288
+ if (source.status === "absent")
289
+ return valid("personal", "absent", []);
290
+ if (source.status !== "ok")
291
+ return invalid("personal", source.status);
292
+ try {
293
+ const decoded = decodeUtf8(source.bytes);
294
+ if (decoded === null)
295
+ return invalid("personal", "malformed");
296
+ const parsed = personalGlossaryConsumerEntries(decoded, bounds.maxEntries);
297
+ if (parsed === null)
298
+ return valid("personal", "absent", []);
299
+ const entries = parsed.map(({ term, meaning }) => ({
300
+ term,
301
+ meaning,
302
+ owner: "personal",
303
+ }));
304
+ return valid("personal", entries.length === 0 ? "valid_empty" : "valid_present", entries);
305
+ }
306
+ catch (error) {
307
+ if (error instanceof GlossaryEntryBoundError)
308
+ return invalid("personal", "over_bound");
309
+ if (error instanceof PersonalGlossaryBoundaryError)
310
+ return invalid("personal", error.availability);
311
+ return invalid("personal", "malformed");
312
+ }
313
+ }
314
+ export function acquireGlossaryInputs(projectRoot, personalProfilePath, projectHooks = {}) {
315
+ return {
316
+ project: acquireProjectGlossaryInput(projectRoot, projectHooks),
317
+ personal: acquirePersonalGlossaryInput(personalProfilePath),
318
+ };
319
+ }
320
+ //# sourceMappingURL=glossaryInputAcquisition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glossaryInputAcquisition.js","sourceRoot":"","sources":["../../../../../home/jgabor/git/agentera/packages/cli/src/analytics/glossaryInputAcquisition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ import { personalGlossaryAdmissionContract } from "../registries/glossaryEntryContract.js";
2
+ import { readSignalTier, resolveEvidenceAnchor, } from "./extractCorpus/evidenceTiers.js";
3
+ import { assessTiers, recoveryForState } from "./extractCorpus/tierReader.js";
4
+ function trimMeaning(value) {
5
+ return value
6
+ .trim()
7
+ .replace(/[.!?]+$/, "")
8
+ .trim();
9
+ }
10
+ /** Classify only authority-supported explicit correction or clarification forms. */
11
+ export function classifyExplicitGlossaryLanguage(text) {
12
+ const correction = /\b(?:actually|not quite|instead|correction)\b[^`"']*([`"'])([^`"']+)\1\s+means\s+(.+)$/i.exec(text);
13
+ const clarification = /\bto clarify\b.*?\bprefer\s+([`"'])([^`"']+)\1\s+to mean\s+(.+)$/i.exec(text);
14
+ const match = correction ?? clarification;
15
+ if (!match)
16
+ return null;
17
+ const term = match[2].trim();
18
+ const meaning = trimMeaning(match[3]);
19
+ return term && meaning ? { term, meaning } : null;
20
+ }
21
+ function recordText(record) {
22
+ const data = record.data;
23
+ if (!data || typeof data !== "object" || Array.isArray(data))
24
+ return "";
25
+ const object = data;
26
+ for (const field of ["text", "prompt", "content"]) {
27
+ if (typeof object[field] === "string")
28
+ return object[field];
29
+ }
30
+ return "";
31
+ }
32
+ function semanticValues(record) {
33
+ const data = record.data;
34
+ if (!data || typeof data !== "object" || Array.isArray(data))
35
+ return [];
36
+ const object = data;
37
+ if (record.source_kind === "instruction_document") {
38
+ return typeof object.content === "string" ? [object.content] : [];
39
+ }
40
+ if (record.source_kind === "project_config_signal") {
41
+ return Array.isArray(object.signals)
42
+ ? object.signals.filter((value) => typeof value === "string")
43
+ : [];
44
+ }
45
+ return [];
46
+ }
47
+ function containsCompleteTerm(text, term) {
48
+ // Personal admission intentionally classifies case-insensitive prose signals;
49
+ // it is not project terminology's exact-case source occurrence contract.
50
+ const escaped = term.trim().replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
51
+ return escaped.length > 0 && new RegExp(`(^|[^a-z0-9])${escaped}(?=$|[^a-z0-9])`, "i").test(text);
52
+ }
53
+ function unavailable(state) {
54
+ return { state, status: "unavailable", candidates: [], recovery: recoveryForState(state) };
55
+ }
56
+ /**
57
+ * Admit personal glossary evidence from one bounded signal read and direct
58
+ * resolution of selected anchors only. Profile rendering and persistence are
59
+ * deliberately outside this partial producer boundary.
60
+ */
61
+ export function admitPersonalGlossaryEvidence(input, resolveAnchor = resolveEvidenceAnchor) {
62
+ const authority = personalGlossaryAdmissionContract();
63
+ const assessment = assessTiers(input.tiersDir, input.corpusPath);
64
+ if (!assessment.analyzable)
65
+ return unavailable(assessment.state);
66
+ const tier = readSignalTier(input.tiersDir);
67
+ if (!tier)
68
+ return unavailable("corrupt");
69
+ const explicitTypes = new Set(authority.explicitSignalTypes);
70
+ const inferredTypes = new Set(authority.inferredSignalTypes);
71
+ const inferredKinds = new Set(authority.inferredSourceKinds);
72
+ const selected = tier.records.filter((signal) => explicitTypes.has(signal.signal_type) ||
73
+ (input.requestedTerms.length > 0 &&
74
+ inferredTypes.has(signal.signal_type) &&
75
+ inferredKinds.has(signal.source_kind)));
76
+ const resolved = new Map();
77
+ for (const signal of selected) {
78
+ if (resolved.has(signal.evidence_anchor))
79
+ continue;
80
+ const record = resolveAnchor(signal.evidence_anchor, input.tiersDir);
81
+ if (record &&
82
+ record.source_id === signal.source_id &&
83
+ record.source_kind === signal.source_kind) {
84
+ resolved.set(signal.evidence_anchor, { signal, record });
85
+ }
86
+ }
87
+ const candidates = [];
88
+ for (const { signal, record } of resolved.values()) {
89
+ if (!explicitTypes.has(signal.signal_type))
90
+ continue;
91
+ const classified = classifyExplicitGlossaryLanguage(recordText(record));
92
+ if (!classified)
93
+ continue;
94
+ candidates.push({
95
+ kind: "personal_explicit_definition",
96
+ ...classified,
97
+ evidence: [
98
+ {
99
+ source_id: signal.source_id,
100
+ evidence_anchor: signal.evidence_anchor,
101
+ signal_type: signal.signal_type,
102
+ },
103
+ ],
104
+ });
105
+ }
106
+ for (const term of new Set(input.requestedTerms.map((value) => value.trim()).filter(Boolean))) {
107
+ const evidence = [...resolved.values()]
108
+ .filter(({ signal, record }) => inferredTypes.has(signal.signal_type) &&
109
+ inferredKinds.has(signal.source_kind) &&
110
+ semanticValues(record).some((value) => containsCompleteTerm(value, term)))
111
+ .map(({ signal }) => ({
112
+ source_id: signal.source_id,
113
+ evidence_anchor: signal.evidence_anchor,
114
+ source_kind: signal.source_kind,
115
+ }))
116
+ .filter((item, index, all) => all.findIndex((candidate) => candidate.source_id === item.source_id ||
117
+ candidate.evidence_anchor === item.evidence_anchor) === index)
118
+ .sort((left, right) => left.source_id.localeCompare(right.source_id));
119
+ if (evidence.length >= 2 &&
120
+ new Set(evidence.map((item) => item.source_id)).size >= 2 &&
121
+ new Set(evidence.map((item) => item.evidence_anchor)).size >= 2) {
122
+ candidates.push({ kind: "personal_inferred_usage", term, evidence: evidence.slice(0, 2) });
123
+ }
124
+ }
125
+ return candidates.length > 0
126
+ ? { state: assessment.state, status: "admitted", candidates, recovery: null }
127
+ : {
128
+ state: assessment.state,
129
+ status: "insufficient",
130
+ candidates: [],
131
+ recovery: authority.insufficientRecovery,
132
+ };
133
+ }
134
+ //# sourceMappingURL=personalGlossaryAdmission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personalGlossaryAdmission.js","sourceRoot":"","sources":["../../../../../home/jgabor/git/agentera/packages/cli/src/analytics/personalGlossaryAdmission.ts"],"names":[],"mappings":"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"}