@tenphi/akno-core 0.12.0 → 0.13.0

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 (298) hide show
  1. package/config/default.jsonc +12 -2
  2. package/dist/bench/graph.d.ts +2 -0
  3. package/dist/bench/graph.d.ts.map +1 -1
  4. package/dist/bench/graph.js +4 -0
  5. package/dist/bench/graph.js.map +1 -1
  6. package/dist/bench/language-corpus-v10.d.ts +4 -0
  7. package/dist/bench/language-corpus-v10.d.ts.map +1 -0
  8. package/dist/bench/language-corpus-v10.js +569 -0
  9. package/dist/bench/language-corpus-v10.js.map +1 -0
  10. package/dist/bench/language-corpus-v11.d.ts +4 -0
  11. package/dist/bench/language-corpus-v11.d.ts.map +1 -0
  12. package/dist/bench/language-corpus-v11.js +594 -0
  13. package/dist/bench/language-corpus-v11.js.map +1 -0
  14. package/dist/bench/language-corpus-v12.d.ts +4 -0
  15. package/dist/bench/language-corpus-v12.d.ts.map +1 -0
  16. package/dist/bench/language-corpus-v12.js +584 -0
  17. package/dist/bench/language-corpus-v12.js.map +1 -0
  18. package/dist/bench/language-corpus-v13.d.ts +4 -0
  19. package/dist/bench/language-corpus-v13.d.ts.map +1 -0
  20. package/dist/bench/language-corpus-v13.js +584 -0
  21. package/dist/bench/language-corpus-v13.js.map +1 -0
  22. package/dist/bench/language-corpus-v14.d.ts +4 -0
  23. package/dist/bench/language-corpus-v14.d.ts.map +1 -0
  24. package/dist/bench/language-corpus-v14.js +584 -0
  25. package/dist/bench/language-corpus-v14.js.map +1 -0
  26. package/dist/bench/language-corpus-v15.d.ts +4 -0
  27. package/dist/bench/language-corpus-v15.d.ts.map +1 -0
  28. package/dist/bench/language-corpus-v15.js +305 -0
  29. package/dist/bench/language-corpus-v15.js.map +1 -0
  30. package/dist/bench/language-corpus-v16.d.ts +4 -0
  31. package/dist/bench/language-corpus-v16.d.ts.map +1 -0
  32. package/dist/bench/language-corpus-v16.js +305 -0
  33. package/dist/bench/language-corpus-v16.js.map +1 -0
  34. package/dist/bench/language-corpus-v17.d.ts +4 -0
  35. package/dist/bench/language-corpus-v17.d.ts.map +1 -0
  36. package/dist/bench/language-corpus-v17.js +305 -0
  37. package/dist/bench/language-corpus-v17.js.map +1 -0
  38. package/dist/bench/language-corpus-v18.d.ts +4 -0
  39. package/dist/bench/language-corpus-v18.d.ts.map +1 -0
  40. package/dist/bench/language-corpus-v18.js +305 -0
  41. package/dist/bench/language-corpus-v18.js.map +1 -0
  42. package/dist/bench/language-corpus-v19.d.ts +4 -0
  43. package/dist/bench/language-corpus-v19.d.ts.map +1 -0
  44. package/dist/bench/language-corpus-v19.js +310 -0
  45. package/dist/bench/language-corpus-v19.js.map +1 -0
  46. package/dist/bench/language-corpus-v2.d.ts +12 -0
  47. package/dist/bench/language-corpus-v2.d.ts.map +1 -0
  48. package/dist/bench/language-corpus-v2.js +146 -0
  49. package/dist/bench/language-corpus-v2.js.map +1 -0
  50. package/dist/bench/language-corpus-v20.d.ts +4 -0
  51. package/dist/bench/language-corpus-v20.d.ts.map +1 -0
  52. package/dist/bench/language-corpus-v20.js +310 -0
  53. package/dist/bench/language-corpus-v20.js.map +1 -0
  54. package/dist/bench/language-corpus-v21.d.ts +4 -0
  55. package/dist/bench/language-corpus-v21.d.ts.map +1 -0
  56. package/dist/bench/language-corpus-v21.js +310 -0
  57. package/dist/bench/language-corpus-v21.js.map +1 -0
  58. package/dist/bench/language-corpus-v22.d.ts +4 -0
  59. package/dist/bench/language-corpus-v22.d.ts.map +1 -0
  60. package/dist/bench/language-corpus-v22.js +330 -0
  61. package/dist/bench/language-corpus-v22.js.map +1 -0
  62. package/dist/bench/language-corpus-v3.d.ts +4 -0
  63. package/dist/bench/language-corpus-v3.d.ts.map +1 -0
  64. package/dist/bench/language-corpus-v3.js +184 -0
  65. package/dist/bench/language-corpus-v3.js.map +1 -0
  66. package/dist/bench/language-corpus-v4.d.ts +4 -0
  67. package/dist/bench/language-corpus-v4.d.ts.map +1 -0
  68. package/dist/bench/language-corpus-v4.js +111 -0
  69. package/dist/bench/language-corpus-v4.js.map +1 -0
  70. package/dist/bench/language-corpus-v5.d.ts +4 -0
  71. package/dist/bench/language-corpus-v5.d.ts.map +1 -0
  72. package/dist/bench/language-corpus-v5.js +111 -0
  73. package/dist/bench/language-corpus-v5.js.map +1 -0
  74. package/dist/bench/language-corpus-v6.d.ts +4 -0
  75. package/dist/bench/language-corpus-v6.d.ts.map +1 -0
  76. package/dist/bench/language-corpus-v6.js +111 -0
  77. package/dist/bench/language-corpus-v6.js.map +1 -0
  78. package/dist/bench/language-corpus-v7.d.ts +4 -0
  79. package/dist/bench/language-corpus-v7.d.ts.map +1 -0
  80. package/dist/bench/language-corpus-v7.js +150 -0
  81. package/dist/bench/language-corpus-v7.js.map +1 -0
  82. package/dist/bench/language-corpus-v8.d.ts +4 -0
  83. package/dist/bench/language-corpus-v8.d.ts.map +1 -0
  84. package/dist/bench/language-corpus-v8.js +150 -0
  85. package/dist/bench/language-corpus-v8.js.map +1 -0
  86. package/dist/bench/language-corpus-v9.d.ts +4 -0
  87. package/dist/bench/language-corpus-v9.d.ts.map +1 -0
  88. package/dist/bench/language-corpus-v9.js +150 -0
  89. package/dist/bench/language-corpus-v9.js.map +1 -0
  90. package/dist/bench/language-corpus.d.ts +20 -0
  91. package/dist/bench/language-corpus.d.ts.map +1 -0
  92. package/dist/bench/language-corpus.js +205 -0
  93. package/dist/bench/language-corpus.js.map +1 -0
  94. package/dist/bench/language-review.d.ts +260 -0
  95. package/dist/bench/language-review.d.ts.map +1 -0
  96. package/dist/bench/language-review.js +591 -0
  97. package/dist/bench/language-review.js.map +1 -0
  98. package/dist/bench/language.d.ts +371 -0
  99. package/dist/bench/language.d.ts.map +1 -0
  100. package/dist/bench/language.js +484 -0
  101. package/dist/bench/language.js.map +1 -0
  102. package/dist/config/load.js +5 -0
  103. package/dist/config/load.js.map +1 -1
  104. package/dist/config/schema.d.ts +3 -0
  105. package/dist/config/schema.d.ts.map +1 -1
  106. package/dist/config/schema.js +1 -0
  107. package/dist/config/schema.js.map +1 -1
  108. package/dist/index/derive.d.ts.map +1 -1
  109. package/dist/index/derive.js +14 -5
  110. package/dist/index/derive.js.map +1 -1
  111. package/dist/index/graph.d.ts.map +1 -1
  112. package/dist/index/graph.js +3 -0
  113. package/dist/index/graph.js.map +1 -1
  114. package/dist/index/indexer.d.ts.map +1 -1
  115. package/dist/index/indexer.js +6 -1
  116. package/dist/index/indexer.js.map +1 -1
  117. package/dist/ingest/extract.d.ts.map +1 -1
  118. package/dist/ingest/extract.js +3 -1
  119. package/dist/ingest/extract.js.map +1 -1
  120. package/dist/kb/line-facts.d.ts.map +1 -1
  121. package/dist/kb/line-facts.js +2 -0
  122. package/dist/kb/line-facts.js.map +1 -1
  123. package/dist/kb/managed-lines.d.ts.map +1 -1
  124. package/dist/kb/managed-lines.js +3 -2
  125. package/dist/kb/managed-lines.js.map +1 -1
  126. package/dist/kb/prose.d.ts +12 -0
  127. package/dist/kb/prose.d.ts.map +1 -0
  128. package/dist/kb/prose.js +213 -0
  129. package/dist/kb/prose.js.map +1 -0
  130. package/dist/maintenance/conflicts.d.ts +1 -1
  131. package/dist/maintenance/curate.d.ts +1 -0
  132. package/dist/maintenance/curate.d.ts.map +1 -1
  133. package/dist/maintenance/curate.js +28 -1
  134. package/dist/maintenance/curate.js.map +1 -1
  135. package/dist/maintenance/dream.d.ts.map +1 -1
  136. package/dist/maintenance/dream.js +6 -1
  137. package/dist/maintenance/dream.js.map +1 -1
  138. package/dist/maintenance/plans.d.ts.map +1 -1
  139. package/dist/maintenance/plans.js +2 -0
  140. package/dist/maintenance/plans.js.map +1 -1
  141. package/dist/maintenance/revision-language.d.ts +4 -0
  142. package/dist/maintenance/revision-language.d.ts.map +1 -0
  143. package/dist/maintenance/revision-language.js +50 -0
  144. package/dist/maintenance/revision-language.js.map +1 -0
  145. package/dist/memory/action-agency.d.ts +5 -0
  146. package/dist/memory/action-agency.d.ts.map +1 -0
  147. package/dist/memory/action-agency.js +76 -0
  148. package/dist/memory/action-agency.js.map +1 -0
  149. package/dist/memory/clause-ending.d.ts +4 -0
  150. package/dist/memory/clause-ending.d.ts.map +1 -0
  151. package/dist/memory/clause-ending.js +6 -0
  152. package/dist/memory/clause-ending.js.map +1 -0
  153. package/dist/memory/counterfactual-wording.d.ts +4 -0
  154. package/dist/memory/counterfactual-wording.d.ts.map +1 -0
  155. package/dist/memory/counterfactual-wording.js +101 -0
  156. package/dist/memory/counterfactual-wording.js.map +1 -0
  157. package/dist/memory/coverage-roles.d.ts +3 -0
  158. package/dist/memory/coverage-roles.d.ts.map +1 -0
  159. package/dist/memory/coverage-roles.js +28 -0
  160. package/dist/memory/coverage-roles.js.map +1 -0
  161. package/dist/memory/intent.d.ts +1 -0
  162. package/dist/memory/intent.d.ts.map +1 -1
  163. package/dist/memory/intent.js +52 -4
  164. package/dist/memory/intent.js.map +1 -1
  165. package/dist/memory/named-actor.d.ts +2 -0
  166. package/dist/memory/named-actor.d.ts.map +1 -0
  167. package/dist/memory/named-actor.js +9 -0
  168. package/dist/memory/named-actor.js.map +1 -0
  169. package/dist/memory/personal-negative-actions.d.ts +3 -0
  170. package/dist/memory/personal-negative-actions.d.ts.map +1 -0
  171. package/dist/memory/personal-negative-actions.js +67 -0
  172. package/dist/memory/personal-negative-actions.js.map +1 -0
  173. package/dist/memory/projection.d.ts.map +1 -1
  174. package/dist/memory/projection.js +10 -2
  175. package/dist/memory/projection.js.map +1 -1
  176. package/dist/memory/prose-projection.d.ts +6 -0
  177. package/dist/memory/prose-projection.d.ts.map +1 -0
  178. package/dist/memory/prose-projection.js +34 -0
  179. package/dist/memory/prose-projection.js.map +1 -0
  180. package/dist/memory/report-uncertainty.d.ts +3 -0
  181. package/dist/memory/report-uncertainty.d.ts.map +1 -0
  182. package/dist/memory/report-uncertainty.js +67 -0
  183. package/dist/memory/report-uncertainty.js.map +1 -0
  184. package/dist/memory/reporting-roles.d.ts +3 -0
  185. package/dist/memory/reporting-roles.d.ts.map +1 -0
  186. package/dist/memory/reporting-roles.js +39 -0
  187. package/dist/memory/reporting-roles.js.map +1 -0
  188. package/dist/memory/retention-source-frame.d.ts +8 -0
  189. package/dist/memory/retention-source-frame.d.ts.map +1 -0
  190. package/dist/memory/retention-source-frame.js +72 -0
  191. package/dist/memory/retention-source-frame.js.map +1 -0
  192. package/dist/models/client.d.ts +12 -3
  193. package/dist/models/client.d.ts.map +1 -1
  194. package/dist/models/client.js +142 -6
  195. package/dist/models/client.js.map +1 -1
  196. package/dist/models/language-audit.d.ts +78 -0
  197. package/dist/models/language-audit.d.ts.map +1 -0
  198. package/dist/models/language-audit.js +139 -0
  199. package/dist/models/language-audit.js.map +1 -0
  200. package/dist/models/language.d.ts +12 -0
  201. package/dist/models/language.d.ts.map +1 -0
  202. package/dist/models/language.js +106 -0
  203. package/dist/models/language.js.map +1 -0
  204. package/dist/models/semantic-verdict.d.ts +53 -0
  205. package/dist/models/semantic-verdict.d.ts.map +1 -0
  206. package/dist/models/semantic-verdict.js +190 -0
  207. package/dist/models/semantic-verdict.js.map +1 -0
  208. package/dist/ops/answer-record-rendering.d.ts +73 -0
  209. package/dist/ops/answer-record-rendering.d.ts.map +1 -0
  210. package/dist/ops/answer-record-rendering.js +149 -0
  211. package/dist/ops/answer-record-rendering.js.map +1 -0
  212. package/dist/ops/answer-source-audit.d.ts +354 -0
  213. package/dist/ops/answer-source-audit.d.ts.map +1 -0
  214. package/dist/ops/answer-source-audit.js +328 -0
  215. package/dist/ops/answer-source-audit.js.map +1 -0
  216. package/dist/ops/answer.d.ts +2 -2
  217. package/dist/ops/answer.d.ts.map +1 -1
  218. package/dist/ops/answer.js +1032 -114
  219. package/dist/ops/answer.js.map +1 -1
  220. package/dist/ops/context.d.ts.map +1 -1
  221. package/dist/ops/context.js +7 -0
  222. package/dist/ops/context.js.map +1 -1
  223. package/dist/ops/graph.d.ts.map +1 -1
  224. package/dist/ops/graph.js +35 -4
  225. package/dist/ops/graph.js.map +1 -1
  226. package/dist/ops/read.d.ts.map +1 -1
  227. package/dist/ops/read.js +5 -2
  228. package/dist/ops/read.js.map +1 -1
  229. package/dist/ops/recall.d.ts.map +1 -1
  230. package/dist/ops/recall.js +10 -0
  231. package/dist/ops/recall.js.map +1 -1
  232. package/dist/ops/remember.d.ts +2 -1
  233. package/dist/ops/remember.d.ts.map +1 -1
  234. package/dist/ops/remember.js +48 -33
  235. package/dist/ops/remember.js.map +1 -1
  236. package/dist/ops/retain.d.ts +3 -1
  237. package/dist/ops/retain.d.ts.map +1 -1
  238. package/dist/ops/retain.js +56 -44
  239. package/dist/ops/retain.js.map +1 -1
  240. package/dist/recall/assemble.d.ts +1 -0
  241. package/dist/recall/assemble.d.ts.map +1 -1
  242. package/dist/recall/assemble.js +19 -2
  243. package/dist/recall/assemble.js.map +1 -1
  244. package/dist/store/db.d.ts.map +1 -1
  245. package/dist/store/db.js +3 -1
  246. package/dist/store/db.js.map +1 -1
  247. package/dist/store/migrations.d.ts +2 -1
  248. package/dist/store/migrations.d.ts.map +1 -1
  249. package/dist/store/migrations.js +11 -1
  250. package/dist/store/migrations.js.map +1 -1
  251. package/dist/timeline/clock.d.ts.map +1 -1
  252. package/dist/timeline/clock.js +2 -0
  253. package/dist/timeline/clock.js.map +1 -1
  254. package/dist/timeline/eligibility.js +4 -4
  255. package/dist/timeline/eligibility.js.map +1 -1
  256. package/dist/timeline/source-clock.d.ts +5 -0
  257. package/dist/timeline/source-clock.d.ts.map +1 -0
  258. package/dist/timeline/source-clock.js +179 -0
  259. package/dist/timeline/source-clock.js.map +1 -0
  260. package/dist/write/fictional-case-identity.d.ts +10 -0
  261. package/dist/write/fictional-case-identity.d.ts.map +1 -0
  262. package/dist/write/fictional-case-identity.js +84 -0
  263. package/dist/write/fictional-case-identity.js.map +1 -0
  264. package/dist/write/managed-memory.js +1 -1
  265. package/dist/write/managed-memory.js.map +1 -1
  266. package/dist/write/retain-clock-repair.d.ts +48 -0
  267. package/dist/write/retain-clock-repair.d.ts.map +1 -0
  268. package/dist/write/retain-clock-repair.js +175 -0
  269. package/dist/write/retain-clock-repair.js.map +1 -0
  270. package/dist/write/retain.d.ts +21 -10
  271. package/dist/write/retain.d.ts.map +1 -1
  272. package/dist/write/retain.js +1220 -70
  273. package/dist/write/retain.js.map +1 -1
  274. package/dist/write/retained-relations.d.ts +7 -0
  275. package/dist/write/retained-relations.d.ts.map +1 -0
  276. package/dist/write/retained-relations.js +38 -0
  277. package/dist/write/retained-relations.js.map +1 -0
  278. package/dist/write/retained-spans.d.ts +5 -0
  279. package/dist/write/retained-spans.d.ts.map +1 -0
  280. package/dist/write/retained-spans.js +30 -0
  281. package/dist/write/retained-spans.js.map +1 -0
  282. package/dist/write/retained-time.d.ts +4 -0
  283. package/dist/write/retained-time.d.ts.map +1 -0
  284. package/dist/write/retained-time.js +10 -0
  285. package/dist/write/retained-time.js.map +1 -0
  286. package/dist/write/retention-frame-audit.d.ts +25 -0
  287. package/dist/write/retention-frame-audit.d.ts.map +1 -0
  288. package/dist/write/retention-frame-audit.js +43 -0
  289. package/dist/write/retention-frame-audit.js.map +1 -0
  290. package/dist/write/retention-negative-evidence.d.ts +222 -0
  291. package/dist/write/retention-negative-evidence.d.ts.map +1 -0
  292. package/dist/write/retention-negative-evidence.js +122 -0
  293. package/dist/write/retention-negative-evidence.js.map +1 -0
  294. package/dist/write/retention-report-limits.d.ts +65 -0
  295. package/dist/write/retention-report-limits.d.ts.map +1 -0
  296. package/dist/write/retention-report-limits.js +71 -0
  297. package/dist/write/retention-report-limits.js.map +1 -0
  298. package/package.json +2 -2
@@ -0,0 +1,4 @@
1
+ import type { MaintenanceOperation } from './plans.ts';
2
+ /** Keep exact authored bytes exempt, including transfers within the sealed operation set. */
3
+ export declare function revisionLanguageProse(value: unknown, original: readonly MaintenanceOperation[]): string[];
4
+ //# sourceMappingURL=revision-language.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revision-language.d.ts","sourceRoot":"","sources":["../../src/maintenance/revision-language.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,6FAA6F;AAC7F,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,oBAAoB,EAAE,GAAG,MAAM,EAAE,CA2CzG"}
@@ -0,0 +1,50 @@
1
+ /** Keep exact authored bytes exempt, including transfers within the sealed operation set. */
2
+ export function revisionLanguageProse(value, original) {
3
+ if (!value || typeof value !== 'object' || !('operations' in value) || !Array.isArray(value.operations))
4
+ throw new Error('invalid revision language input');
5
+ const allowed = new Map(original.filter((op) => op.type === 'create' || op.type === 'replace').map((op) => [op.relPath, op]));
6
+ const returned = new Map();
7
+ for (const op of value.operations) {
8
+ if (!op ||
9
+ typeof op !== 'object' ||
10
+ typeof op.rel_path !== 'string' ||
11
+ typeof op.after !== 'string' ||
12
+ !allowed.has(op.rel_path) ||
13
+ returned.has(op.rel_path))
14
+ throw new Error('invalid revision language operation');
15
+ returned.set(op.rel_path, op.after);
16
+ }
17
+ if (!returned.size)
18
+ throw new Error('empty revision language operations');
19
+ const preserved = new Map();
20
+ for (const op of original) {
21
+ if (op.type !== 'replace' && op.type !== 'delete')
22
+ continue;
23
+ for (const line of exactLines(op.before))
24
+ preserved.set(line, (preserved.get(line) ?? 0) + 1);
25
+ }
26
+ const consume = (line) => {
27
+ const count = preserved.get(line) ?? 0;
28
+ if (!count)
29
+ return false;
30
+ preserved.set(line, count - 1);
31
+ return true;
32
+ };
33
+ // Unrevised destinations still use their sealed after-state. Reserve their original copies
34
+ // first, so a revision cannot exempt an extra copy merely by returning only one destination.
35
+ for (const op of allowed.values()) {
36
+ if (!returned.has(op.relPath))
37
+ exactLines(op.after).forEach(consume);
38
+ }
39
+ return [...returned.values()].flatMap((after) => {
40
+ const added = exactLines(after)
41
+ .filter((line) => !consume(line) && line.trim())
42
+ .join('');
43
+ return added.trim() ? [added] : [];
44
+ });
45
+ }
46
+ function exactLines(text) {
47
+ // Keep line endings: normalizing whitespace here would excuse a rewrite as copied source.
48
+ return text.match(/[^\n]*\n|[^\n]+$/gu) ?? [];
49
+ }
50
+ //# sourceMappingURL=revision-language.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revision-language.js","sourceRoot":"","sources":["../../src/maintenance/revision-language.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** Hold bounded proposal descriptions that omit every proposer role present in readable source prose. */
2
+ export declare function proposalAgencySupported(text: string, support: string): boolean;
3
+ /** Preserve a readable singular nonselector instead of broadening it to an unassigned choice state. */
4
+ export declare function causeNonselectionAgencySupported(answerText: string, support: string): boolean;
5
+ //# sourceMappingURL=action-agency.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-agency.d.ts","sourceRoot":"","sources":["../../src/memory/action-agency.ts"],"names":[],"mappings":"AAAA,yGAAyG;AACzG,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CA6B9E;AAED,uGAAuG;AACvG,wBAAgB,gCAAgC,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAmD7F"}
@@ -0,0 +1,76 @@
1
+ /** Hold bounded proposal descriptions that omit every proposer role present in readable source prose. */
2
+ export function proposalAgencySupported(text, support) {
3
+ // This is a presence floor, not a parser or an actor-identity verdict. Unrecognized grammar and
4
+ // pairing between multiple proposals still require the complete source/citation-scoped verifier.
5
+ const named = String.raw `(?!(?:The|This|That|A|An)\b)\p{Lu}[\p{L}’'-]*(?:\s+\p{Lu}[\p{L}’'-]*){1,3}`;
6
+ const actor = String.raw `(?:${named}|I|[Hh]e|[Ss]he|[Ww]e|[Tt]hey|[Яя]|[Оо]н[аи]?|[Мм]ы)`;
7
+ const verb = String.raw `(?:propos(?:e|es|ed|ing)|suggest(?:s|ed|ing)?|предложил[аи]?|предлага(?:ет|ют|л[аои]?))`;
8
+ const active = new RegExp(String.raw `(?<![\p{L}])${actor},?\s+(?:(?:has|have|had|is|was|were|tentatively|previously|предварительно|ранее)\s+){0,2}${verb}(?![\p{L}])`, 'u');
9
+ const passiveAgent = new RegExp(String.raw `(?<![\p{L}])(?:(?:proposed|suggested)\s+by\s+(?:${actor}|her|him|me|us|them)|предложен[аоы]?\s+(?:${actor}|ею|им|мной|нами|ими))(?![\p{L}])`, 'u');
10
+ const ownedProposal = new RegExp(String.raw `(?<![\p{L}])(?:(?:${named})['’]s\s+(?:tentative\s+)?(?:proposal|(?:proposed|suggested)\s+action)|(?:[Hh]er|[Hh]is|[Mm]y|[Oo]ur|[Tt]heir)\s+(?:tentative\s+)?(?:proposal|(?:proposed|suggested)\s+action)|(?:[Ее][её]|[Ее]го|[Мм]о[её]|[Нн]аше|[Ии]х)\s+(?:предварительное\s+)?предложение|предложение\s+${named})(?![\p{L}])`, 'u');
11
+ const hasProposer = (value) => active.test(value) || passiveAgent.test(value) || ownedProposal.test(value);
12
+ if (!hasProposer(support))
13
+ return true;
14
+ const unassignedDescription = /\b(?:proposal|(?:proposed|suggested) action) (?:is|was) to\b|\b(?:it|review|inspection|discussion) (?:is|was|has been|had been) (?:tentatively )?(?:proposed|suggested)\b|\b(?:proposed|suggested) (?:discussion|review|inspection|action) (?:(?:is|was) )?(?:(?:only|merely) )?attributed to\b|(?<![\p{L}])(?:было предложено|предлагалось|предложение (?:состояло|заключалось))(?=$|[^\p{L}])/iu;
15
+ if (!unassignedDescription.test(text))
16
+ return true;
17
+ // A separate anonymous proposal in the source may be the one being described. Matching this
18
+ // shape only defers semantic pairing; it cannot certify the answer's action or omitted actor.
19
+ if (support.split(/[.!?;\n]/u).some((clause) => unassignedDescription.test(clause) && !hasProposer(clause)))
20
+ return true;
21
+ return hasProposer(text);
22
+ }
23
+ /** Preserve a readable singular nonselector instead of broadening it to an unassigned choice state. */
24
+ export function causeNonselectionAgencySupported(answerText, support) {
25
+ // Provenance metadata is not action agency. This floor activates from readable singular choice
26
+ // grammar only; the semantic verifier still checks the actual identity and all clause relationships.
27
+ const singular = /\b(?:has not|hasn['’]t) (?:yet )?(?:chosen|selected) (?:an? |the )?cause\b|(?:не (?:выбрала?|выбирала?)\s+причин\p{L}*|причин\p{L}*\s+(?:(?:она|он|я|пока|ещ[её]|так и)\s+){0,3}не (?:выбрала?|выбирала?))(?=$|[^\p{L}])/iu;
28
+ const coordinated = /\b(?:has|have|had)\s+(?:(?:not|never)\s+(?:yet\s+)?(?:chosen|selected)\s+(?:(?:either|any|an?|the)\s+)?(?:cause|explanation|hypothesis|alternative)|(?:chosen|selected)\s+neither\s+(?:cause|explanation|hypothesis|alternative))\b|(?:не\s+(?:выбрала?|выбирала?)\s+(?:(?:ни\s+одну|никакую|ни\s+одной|какую-либо)\s+)?(?:причин|верси|гипотез|объяснен)\p{L}*|(?:причин|верси|гипотез|объяснен)\p{L}*\s+(?:(?:она|он|я|пока|ещ[её]|так и)\s+){0,3}не\s+(?:выбрала?|выбирала?))(?=$|[^\p{L}])/iu;
29
+ // A second personal clause cannot license an agentless clause elsewhere in the same block.
30
+ const unassigned = /\b(?:no cause (?:has|had) been (?:chosen|selected)|(?:a |the )?cause (?:has|had) not (?:yet )?been (?:chosen|selected)|neither(?: (?:cause|explanation|hypothesis|alternative))? (?:has been |had been |is |was |remains? )?(?:yet )?(?:chosen|selected)|neither(?: (?:cause|explanation|hypothesis|alternative))? (?:has|had) (?:yet )?been (?:chosen|selected))\b|(?<![\p{L}])(?:(?:причин|верси|гипотез|объяснен)\p{L}*\s+(?:(?:пока|ещ[её]|так и)\s+){0,2}не (?:выбрана?|выбрали|выбирали)|не (?:выбрали|выбирали)\s+(?:причин|верси|гипотез|объяснен)\p{L}*|ни\s+одн[ау](?:\s+(?:причин|верси|гипотез|объяснен)\p{L}*)?\s+(?:(?:пока|ещ[её]|так и)\s+){0,2}не\s+(?:выбрана?|выбрали|выбирали))(?![\p{L}])/giu;
31
+ const sourcePassives = [...support.matchAll(unassigned)];
32
+ // Pronouns and multiword name shapes avoid treating an initial capital on a collective noun
33
+ // as personal identity. Other grammar stays with full semantic verification.
34
+ const directPersonal = /(?:^|[^\p{L}])(?:I|he|she|я|он|она)\s*$/iu;
35
+ const namedPersonal = /(?<![\p{L}])(?!(?:The|This|That|A|An)\b)\p{Lu}[\p{L}’'-]*(?:\s+\p{Lu}[\p{L}’'-]*){1,3}\s*$/u;
36
+ const carriedPersonal = /(?<![\p{L}])(?:(?:I|he|she)|(?!(?:The|This|That|A|An)\b)\p{Lu}[\p{L}’'-]*(?:\s+\p{Lu}[\p{L}’'-]*){1,3})\s+(?:(?:is|was|am)\s+)?(?:consider(?:s|ed|ing)?|discuss(?:es|ed|ing)?)(?![\p{L}])/u;
37
+ const personalActive = [singular, coordinated].some((pattern) => [...support.matchAll(new RegExp(pattern.source, 'giu'))].some((match) => {
38
+ const before = support
39
+ .slice(0, match.index)
40
+ .split(/[.!?;\n]/u)
41
+ .at(-1) ?? '';
42
+ return (/(?<![\p{L}])(?:я|он|она)(?![\p{L}])/iu.test(match[0]) ||
43
+ directPersonal.test(before) ||
44
+ namedPersonal.test(before) ||
45
+ (/\b(?:and|but)\s*$/iu.test(before) && carriedPersonal.test(before)));
46
+ }));
47
+ if (!personalActive && !sourcePassives.some((match) => boundAgent(support, match, support)))
48
+ return true;
49
+ return [...answerText.matchAll(unassigned)].every((match) => {
50
+ // A separately sourced unassigned state does not inherit another clause's personal actor.
51
+ // This only defers semantic pairing to the mandatory verifier; matching words are not evidence
52
+ // that the candidate preserved that other clause's object, purpose or qualifications.
53
+ if (sourcePassives.some((original) => original[0].toLocaleLowerCase('en-US') === match[0].toLocaleLowerCase('en-US') &&
54
+ !boundAgent(support, original, support) &&
55
+ /^(?:\s*$|\s*[.!?;,\n]|\s+(?:for|during|in|under|для|при|на|в|по)(?![\p{L}]))/iu.test(support.slice(original.index + original[0].length))))
56
+ return true;
57
+ return boundAgent(answerText, match, support);
58
+ });
59
+ }
60
+ function boundAgent(text, match, support) {
61
+ const tail = text.slice(match.index + match[0].length);
62
+ const english = /[a-z]/iu.test(match[0]);
63
+ const agent = tail.match(english ? /^\s+by\s+([^.!?;,]+)/u : /^\s+([^.!?;,]+)/u)?.[1];
64
+ if (!agent)
65
+ return false;
66
+ const pronoun = agent.match(/^(?:her|him|me|ею|им|мной)(?=$|[^\p{L}])/iu)?.[0];
67
+ // An explicit singular agent may retain passive voice. Its identity still needs verification.
68
+ const name = agent.match(/^\p{Lu}[\p{L}’'-]*(?:\s+\p{Lu}[\p{L}’'-]*){0,3}/u)?.[0];
69
+ const single = pronoun ?? (name && support.includes(name) ? name : null);
70
+ if (!single)
71
+ return false;
72
+ const prefix = tail.match(english ? /^\s+by\s+/u : /^\s+/u)[0];
73
+ const rest = tail.slice(prefix.length + single.length);
74
+ return !/^\s*(?:(?:,\s*)?(?:and|with|и|с)(?=$|[^\p{L}])|,\s*\p{Lu})/u.test(rest);
75
+ }
76
+ //# sourceMappingURL=action-agency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-agency.js","sourceRoot":"","sources":["../../src/memory/action-agency.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /** A closed local clause cannot borrow an affirmation that the next correction retracts.
2
+ * This checks only the immediate continuation; source verification still owns full discourse. */
3
+ export declare function hasUnretractedClauseEnd(text: string, offset: number): boolean;
4
+ //# sourceMappingURL=clause-ending.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clause-ending.d.ts","sourceRoot":"","sources":["../../src/memory/clause-ending.ts"],"names":[],"mappings":"AAAA;iGACiG;AACjG,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAI7E"}
@@ -0,0 +1,6 @@
1
+ /** A closed local clause cannot borrow an affirmation that the next correction retracts.
2
+ * This checks only the immediate continuation; source verification still owns full discourse. */
3
+ export function hasUnretractedClauseEnd(text, offset) {
4
+ return /^[ \t]*(?:$|[.!;](?!\s*(?:but|however|yet|actually|(?:and\s+)?(?:this|that)\s+is\s+false|но|однако|на\s+самом\s+деле|(?:(?:и|а)\s+)?это\s+неверно)(?![\p{L}\p{N}])))/iu.test(text.slice(offset));
5
+ }
6
+ //# sourceMappingURL=clause-ending.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clause-ending.js","sourceRoot":"","sources":["../../src/memory/clause-ending.ts"],"names":[],"mappings":"AAAA;iGACiG;AACjG,MAAM,UAAU,uBAAuB,CAAC,IAAY,EAAE,MAAc;IAClE,OAAO,wKAAwK,CAAC,IAAI,CAClL,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CACnB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** A nominal unrealized alternative can express the conditional without the words "если бы".
2
+ * This presence floor never establishes the antecedent, consequence or actual-world qualification. */
3
+ export declare function hasNominalCounterfactual(text: string): boolean;
4
+ //# sourceMappingURL=counterfactual-wording.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"counterfactual-wording.d.ts","sourceRoot":"","sources":["../../src/memory/counterfactual-wording.ts"],"names":[],"mappings":"AAGA;sGACsG;AACtG,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CA0C9D"}
@@ -0,0 +1,101 @@
1
+ import { hasUnretractedClauseEnd } from "./clause-ending.js";
2
+ import { AFFIRMATIVE_NAMED_ACTOR } from "./named-actor.js";
3
+ /** A nominal unrealized alternative can express the conditional without the words "если бы".
4
+ * This presence floor never establishes the antecedent, consequence or actual-world qualification. */
5
+ export function hasNominalCounterfactual(text) {
6
+ const unquoted = text.replace(/«[^»]*»|“[^”]*”|"[^"\n]*"|`[^`]*`|‘[^’]*’|(?<![\p{L}\p{N}])'[^'\n]*'(?![\p{L}\p{N}])/gu, '⟦quotation⟧');
7
+ if (hasCompleteRussianCounterfactualUnit(unquoted) ||
8
+ hasNamedAcquisitionCounterfactual(unquoted) ||
9
+ hasNamedPurchaseRelative(unquoted))
10
+ return true;
11
+ const clauses = unquoted.split(/[.!?;:\n]|,[ \t]*(?:а|но|и|однако|хотя|пока|but|and|although|however)(?![\p{L}])/iu);
12
+ // Bound the noun phrase to one relative clause. Another finite actor, quotation or clause
13
+ // cannot lend an unrealized label to an independent conditional statement.
14
+ const word = String.raw `(?!(?:она|он|они|я|мы|вы|ты|бы|был[аои]?|есть|будет|при|если|но|а|и|сказал[аои]?|сообщил[аои]?|подтвердил[аои]?)(?![\p{L}]))[\p{L}\p{N}-]+`;
15
+ const nounPhrase = String.raw `(?=[^,⟦.!?;:\n]{1,160}?(?:[\p{Ll}]+л[аои]?[ \t]+бы|был[аои]?[ \t]+бы))(?:${word}[ \t]+){1,14}`;
16
+ const conditional = String.raw `(?:[\p{Ll}]+л[аои]?[ \t]+бы|был[аои]?[ \t]+бы)`;
17
+ const englishWord = String.raw `(?!(?:I|[Hh]e|[Ss]he|[Ww]e|[Tt]hey|[Yy]ou|would|will|is|was|are|were|has|had|if|but|and|said|reported|confirmed|denied|asked)(?![\p{L}]))[\p{L}\p{N}-]+`;
18
+ const englishRelative = String.raw `(?:${englishWord}[ \t]+){1,14}`;
19
+ const englishConsequence = String.raw `(?:${englishWord}[ \t]+){0,13}${englishWord}(?=[ \t]*(?:$|[.;!]))`;
20
+ const englishActor = String.raw `(?:I|[Hh]e|[Ss]he|[Ww]e|[Tt]hey|(?!(?:The|This|That|If|Unless|When|Suppose|Example|Not)\b)\p{Lu}[\p{L}'’-]*(?:[ \t]+\p{Lu}[\p{L}'’-]*){0,3})`;
21
+ const englishIntroduction = String.raw `(?:^|[.;!])[ \t]*(?:(?:${englishActor}[ \t]+(?:described|describes|outlined|outlines)[ \t]+|[Tt]his[ \t]+(?:is|was)[ \t]+)?(?:[Aa]n?|[Tt]he)[ \t]+)?`;
22
+ // Preserve the left scope when recognizing English: splitting at a colon would turn
23
+ // "Example: ..." or "The note rejects this: ..." into an affirmative scenario.
24
+ const english = new RegExp(String.raw `${englishIntroduction}(?:[Uu]nrealized|[Cc]ounterfactual)[ \t]+(?:option|alternative|scenario)[ \t]+in[ \t]+which[ \t]+${englishRelative}would[ \t]+(?:have|be)[ \t]+${englishConsequence}`, 'u');
25
+ if (english.test(unquoted))
26
+ return true;
27
+ // The unrealized noun and conditional must belong to one bounded relative clause;
28
+ // an independent prediction or quoted example cannot provide either half.
29
+ const shapes = [
30
+ String.raw `нереализованной[ \t]+альтернативой[ \t]+было[ \t]+(?:${word}[ \t]+){0,9}${word},[ \t]+которое[ \t]+в[ \t]+случае[ \t]+покупки[ \t]+${conditional}`,
31
+ String.raw `нереализованный[ \t]+вариант,[ \t]+при[ \t]+котором[ \t]+${nounPhrase}${conditional}`,
32
+ ];
33
+ return clauses.some((clause) => shapes.some((shape) => new RegExp(`(?<![\\p{L}])${shape}(?![\\p{L}])`, 'iu').test(clause)));
34
+ }
35
+ /** The adjacent actual-world closure is required for this purchase-relative form. Allowing `при`
36
+ * in the shorter noun grammar would let a partial scenario bypass that closure entirely. */
37
+ function hasNamedPurchaseRelative(unquoted) {
38
+ const name = AFFIRMATIVE_NAMED_ACTOR;
39
+ const word = String.raw `(?!(?:она|он|они|я|мы|вы|ты|бы|был[аои]?|есть|будет|при|если|но|а|и|не|что|чтобы|якобы|сказал[аои]?|сообщил[аои]?|подтвердил[аои]?|покрыл[аои]?|приобр[её]л[аи]?)(?![\p{L}]))[\p{Ll}\p{N}][\p{Ll}\p{N}'’-]*`;
40
+ const product = String.raw `\p{Lu}[\p{L}'’-]*[ \t]+(?=[\p{L}\p{N}-]*\d)\p{Lu}[\p{L}\p{N}-]*`;
41
+ const acquisition = String.raw `${word}(?:[ \t]+${word}){0,9}(?:[ \t]+для[ \t]+${product})?`;
42
+ const repair = String.raw `ремонт(?:[ \t]+${word}){1,10}[ \t]+покрывался`;
43
+ const referent = String.raw `(?:его|это[ \t]+(?:продление|расширение))`;
44
+ // The described actor, adjacent pronoun and possessive must agree. Another named actor or
45
+ // sentence cannot silently supply the actual-world nonpurchase for this conditional.
46
+ return [
47
+ { described: 'описала', pronoun: '[Оо]на', purchased: 'приобрела', possessive: 'е[её]' },
48
+ { described: 'описал', pronoun: '[Оо]н', purchased: 'приобр[её]л', possessive: 'его' },
49
+ ].some(({ described, pronoun, purchased, possessive }) => {
50
+ const pattern = new RegExp(String.raw `(?:^|[.!])[ \t]*${name}[ \t]+${described}[ \t]+нереализованный[ \t]+вариант,[ \t]+при[ \t]+котором[ \t]+при[ \t]+покупке[ \t]+${acquisition}[ \t]+${repair}[ \t]+бы\.[ \t]+${pronoun}[ \t]+не[ \t]+${purchased}[ \t]+${referent},[ \t]+поэтому[ \t]+такое[ \t]+покрытие[ \t]+не[ \t]+являлось[ \t]+${possessive}[ \t]+действующим[ \t]+покрытием`, 'gu');
51
+ return [...unquoted.matchAll(pattern)].some((match) => hasUnretractedClauseEnd(unquoted, match.index + match[0].length));
52
+ });
53
+ }
54
+ /** A nominal acquisition is counterfactual only inside the complete unrealized/actual-world unit.
55
+ * Object identity, repair scope and ownership still require the independent source verifier. */
56
+ function hasCompleteRussianCounterfactualUnit(unquoted) {
57
+ const name = String.raw `(?!(?:Если|Когда|Якобы|Не|Неверно|Пример|Допустим|If|Unless|Example|Not)(?![\p{L}]))\p{Lu}[\p{L}'’-]*(?:[ \t]+\p{Lu}[\p{L}'’-]*){1,3}`;
58
+ const attribution = String.raw `(?:[Пп]о[ \t]+словам[ \t]+${name},[ \t]+)?`;
59
+ const word = String.raw `(?!(?:она|он|они|я|мы|вы|ты|бы|был[аои]?|есть|будет|при|если|но|а|и|не|что|якобы|сказал[аои]?|сообщил[аои]?|подтвердил[аои]?)(?![\p{L}]))[\p{L}\p{N}][\p{L}\p{N}'’-]*`;
60
+ const noun = String.raw `${word}(?:[ \t]+${word}){0,13}`;
61
+ const consequence = String.raw `${word}(?:[ \t]+${word}){0,15}`;
62
+ const locative = String.raw `[Вв][ \t]+нереализованном[ \t]+(?:варианте|сценарии)[ \t]+`;
63
+ const scenarios = [
64
+ String.raw `${locative}покупка[ \t]+${noun}[ \t]+покрыла[ \t]+бы[ \t]+${consequence}`,
65
+ String.raw `${locative}приобретение[ \t]+${noun}[ \t]+покрыло[ \t]+бы[ \t]+${consequence}`,
66
+ String.raw `${locative}приобрет[её]нное[ \t]+${noun}[ \t]+покрывало[ \t]+бы[ \t]+${consequence}`,
67
+ String.raw `[Нн]ереализованный[ \t]+вариант[ \t]+состоял[ \t]+в[ \t]+том,[ \t]+что[ \t]+при[ \t]+покупке[ \t]+${noun}[ \t]+был[ \t]+бы[ \t]+покрыт[ \t]+${consequence}`,
68
+ String.raw `[Нн]ереализованный[ \t]+вариант[ \t]+(?:состоял|заключался)[ \t]+в[ \t]+том,[ \t]+что[ \t]+при[ \t]+покупке[ \t]+${noun}[ \t]+ремонт[ \t]+${consequence}[ \t]+был[ \t]+бы[ \t]+покрыт`,
69
+ ];
70
+ const nonpurchase = String.raw `(?:[Оо]на[ \t]+это[ \t]+продление[ \t]+не[ \t]+приобрела|[Оо]на[ \t]+не[ \t]+приобрела[ \t]+(?:это[ \t]+продление|его)|[Оо]н[ \t]+не[ \t]+приобр[её]л[ \t]+(?:это[ \t]+продление|его)|[Пп]окупки[ \t]+не[ \t]+произошло|[Пп]родление[ \t]+не[ \t]+было[ \t]+приобретено)`;
71
+ const inactive = String.raw `(?:оно[ \t]+не[ \t]+являлось[ \t]+(?:её|его|их)[ \t]+действующим[ \t]+покрытием|речь[ \t]+не[ \t]+ид[её]т[ \t]+о[ \t]+(?:её|его|их)[ \t]+действующем[ \t]+покрытии|это[ \t]+не[ \t]+было[ \t]+(?:её|его|их)[ \t]+действующим[ \t]+покрытием|это[ \t]+не[ \t]+(?:её|его|их)[ \t]+действующее[ \t]+покрытие)`;
72
+ return scenarios.some((scenario) => {
73
+ const pattern = new RegExp(String.raw `(?:^|[.!])[ \t]*${attribution}${scenario}\.[ \t]+${nonpurchase},[ \t]+поэтому[ \t]+${inactive}`, 'gu');
74
+ return [...unquoted.matchAll(pattern)].some((match) => hasUnretractedClauseEnd(unquoted, match.index + match[0].length));
75
+ });
76
+ }
77
+ /** These acquisition forms need their own named actual-world closure. A quoted label, an
78
+ * unrelated person's nonpurchase or an arbitrary colon cannot complete the conditional unit. */
79
+ function hasNamedAcquisitionCounterfactual(unquoted) {
80
+ const name = String.raw `(?!(?:Если|Когда|Якобы|Не|Неверно|Пример|Допустим|If|Unless|Example|Not)(?![\p{L}]))\p{Lu}[\p{L}'’-]*(?:[ \t]+\p{Lu}[\p{L}'’-]*){1,3}`;
81
+ const attribution = String.raw `(?:[Пп]о[ \t]+словам[ \t]+(?<source_name>${name}),[ \t]+)?`;
82
+ const word = String.raw `(?!(?:она|он|они|я|мы|вы|ты|бы|был[аои]?|есть|будет|при|если|но|а|и|не|что|чтобы|якобы|сказал[аои]?|сообщил[аои]?|подтвердил[аои]?|покрыл[аои]?|приобр[её]л[аи]?)(?![\p{L}]))[\p{L}\p{N}][\p{L}\p{N}'’-]*`;
83
+ const noun = String.raw `${word}(?:[ \t]+${word}){0,13}`;
84
+ const consequence = String.raw `${word}(?:[ \t]+${word}){0,15}`;
85
+ const introduction = String.raw `[Нн]ереализованный[ \t]+вариант[ \t]+(?:состоял|заключался)[ \t]+в[ \t]+том,[ \t]+`;
86
+ const scenarios = [
87
+ String.raw `${introduction}что[ \t]+приобретение[ \t]+${noun}[ \t]+покрыло[ \t]+бы[ \t]+${consequence}`,
88
+ String.raw `${introduction}чтобы[ \t]+приобрести[ \t]+${noun}:[ \t]+в[ \t]+таком[ \t]+случае[ \t]+${consequence}[ \t]+был[ \t]+бы[ \t]+покрыт(?:[ \t]+${word}){0,8}`,
89
+ ];
90
+ const nonpurchase = String.raw `(?<actor_name>${name})[ \t]+(?:его[ \t]+не[ \t]+приобр[её]л[аи]?|не[ \t]+приобр[её]л[аи]?[ \t]+(?:это[ \t]+продление|его))`;
91
+ const inactive = String.raw `(?:оно[ \t]+не[ \t]+являлось[ \t]+(?:её|его|их)[ \t]+действующим[ \t]+покрытием|это[ \t]+не[ \t]+было[ \t]+(?:её|его|их)[ \t]+действующим[ \t]+покрытием)`;
92
+ return scenarios.some((scenario) => {
93
+ const pattern = new RegExp(String.raw `(?:^|[.!])[ \t]*${attribution}${scenario}\.[ \t]+${nonpurchase},[ \t]+поэтому[ \t]+${inactive}`, 'gu');
94
+ return [...unquoted.matchAll(pattern)].some((match) => {
95
+ const source = match.groups.source_name?.replace(/[ \t]+/gu, ' ');
96
+ const actor = match.groups.actor_name.replace(/[ \t]+/gu, ' ');
97
+ return ((!source || source === actor) && hasUnretractedClauseEnd(unquoted, match.index + match[0].length));
98
+ });
99
+ });
100
+ }
101
+ //# sourceMappingURL=counterfactual-wording.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"counterfactual-wording.js","sourceRoot":"","sources":["../../src/memory/counterfactual-wording.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Hold a bounded Russian repair-as-coverer inversion against repair-as-covered source prose. */
2
+ export declare function coverageRolesSupported(text: string, support: string): boolean;
3
+ //# sourceMappingURL=coverage-roles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage-roles.d.ts","sourceRoot":"","sources":["../../src/memory/coverage-roles.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAkC7E"}
@@ -0,0 +1,28 @@
1
+ /** Hold a bounded Russian repair-as-coverer inversion against repair-as-covered source prose. */
2
+ export function coverageRolesSupported(text, support) {
3
+ // This floor recognizes one role reversal, not arbitrary Russian grammar. Quoted examples and
4
+ // separate clauses must not supply a predicate's subject or instrument; full semantics still apply.
5
+ const clauses = (value) => value
6
+ .replace(/«[^»]*»|“[^”]*”|"[^"\n]*"|`[^`\n]*`|‘[^’]*’|(?<![\p{L}\p{N}])'[^'\n]*'(?![\p{L}\p{N}])/gu, '⟦quotation⟧')
7
+ .split(/[.!?;:\n]|,(?:\s*(?:а|но|и|тогда как|пока)(?![\p{L}]))/iu);
8
+ const sourceClauses = clauses(support);
9
+ const coveredRepair = /\brepair\s+(?:(?:is|was|may be|might be|would be|can be|could be|must be)\s+)?covered\b|(?<![\p{L}])ремонт\s+(?:[\p{L}-]+\s+){0,5}(?:покрывается|покрыт)(?![\p{L}])|(?<![\p{L}])(?:покрывается|покрыт)\s+(?:ли\s+)?(?:гарантией\s+)?ремонт(?![\p{L}])/iu;
10
+ if (!sourceClauses.some((clause) => coveredRepair.test(clause)))
11
+ return true;
12
+ // A source may independently say that a repair covers another repair/cost. In that case the
13
+ // full verifier must pair the propositions; a presence floor cannot resolve that ambiguity.
14
+ const repairCoverer = /\brepair\s+(?:(?:itself|also|may|might|can|could|would|will)\s+){0,2}covers?\b|(?<![\p{L}])ремонт\s+(?:сам\s+)?покрывает(?![\p{L}])|(?<![\p{L}])(?:покрывается|покрыт\p{L}*)\s+(?:[\p{L}-]+\s+){0,5}ремонтом(?![\p{L}])/iu;
15
+ if (sourceClauses.some((clause) => repairCoverer.test(clause)))
16
+ return true;
17
+ // In the same unresolved-coverage clause, instrumental 'ремонтом' makes repair the coverer
18
+ // regardless of whether the following object is itself another repair or a component. Do not
19
+ // borrow uncertainty from another sentence, or activate on a quoted grammatical example.
20
+ const unresolvedInstrument = /(?<![\p{L}])(?:не\s+(?:определя|устанавлива|позволя)[\p{L}]*|неизвестно)[^.!?;:\n]{0,100}(?<![\p{L}])покрывается\s+ли\s+ремонтом\s+[\p{L}]/iu;
21
+ // Answering a coverage question is another explicit unresolved relation. A device that
22
+ // "does not respond", a quoted example, or a neighboring question cannot activate it.
23
+ const unansweredInstrument = /(?<![\p{L}])(?:запись(?:\s+об\s+исключении)?|заметка|источник)\s+не\s+отвечает\s+на\s+вопрос\s*(?:о\s+том\s*)?,?\s*покрывается\s+ли\s+ремонтом\s+[\p{L}]/iu;
24
+ return !clauses(text).some((clause) => unresolvedInstrument.test(clause) ||
25
+ unansweredInstrument.test(clause) ||
26
+ /(?<![\p{L}])покрывается\s+(?:ли\s+)?ремонтом\s+(?:[\p{L}-]+\s+){0,5}ремонт(?![\p{L}])/iu.test(clause));
27
+ }
28
+ //# sourceMappingURL=coverage-roles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage-roles.js","sourceRoot":"","sources":["../../src/memory/coverage-roles.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,MAAM,UAAU,sBAAsB,CAAC,IAAY,EAAE,OAAe;IAClE,8FAA8F;IAC9F,oGAAoG;IACpG,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,EAAE,CAChC,KAAK;SACF,OAAO,CACN,0FAA0F,EAC1F,aAAa,CACd;SACA,KAAK,CAAC,0DAA0D,CAAC,CAAC;IACvE,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,aAAa,GACjB,yPAAyP,CAAC;IAC5P,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7E,4FAA4F;IAC5F,4FAA4F;IAC5F,MAAM,aAAa,GACjB,2NAA2N,CAAC;IAC9N,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5E,2FAA2F;IAC3F,6FAA6F;IAC7F,yFAAyF;IACzF,MAAM,oBAAoB,GACxB,8IAA8I,CAAC;IACjJ,uFAAuF;IACvF,sFAAsF;IACtF,MAAM,oBAAoB,GACxB,4JAA4J,CAAC;IAC/J,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CACxB,CAAC,MAAM,EAAE,EAAE,CACT,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;QACjC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;QACjC,yFAAyF,CAAC,IAAI,CAAC,MAAM,CAAC,CACzG,CAAC;AACJ,CAAC"}
@@ -2,6 +2,7 @@ import type { MemoryQualification, MemoryView, RecallMode } from '@tenphi/akno-p
2
2
  export type QualifiedMemory = Extract<MemoryQualification, {
3
3
  status: 'qualified';
4
4
  }>;
5
+ export declare const MEMORY_VIEW_VERSION = "memory-view-v7";
5
6
  /** The subset shared by protocol qualifications and the rebuildable SQL projection. */
6
7
  export interface MemorySemantics {
7
8
  kind: QualifiedMemory['kind'];
@@ -1 +1 @@
1
- {"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../../src/memory/intent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEzF,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,mBAAmB,EAAE;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,CAAC,CAAC;AAEpF,uFAAuF;AACvF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAC9B,UAAU,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;IAC1C,WAAW,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC;IAC5C,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAChC,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,IAAI,CAAC;IACzE,gBAAgB,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC;CACtE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,UAAqB,GAAG,UAAU,CAiCtF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CA0BxF;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAa/F"}
1
+ {"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../../src/memory/intent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEzF,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,mBAAmB,EAAE;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,CAAC,CAAC;AACpF,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AAEpD,uFAAuF;AACvF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAC9B,UAAU,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;IAC1C,WAAW,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC;IAC5C,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAChC,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,IAAI,CAAC;IACzE,gBAAgB,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC;CACtE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,UAAqB,GAAG,UAAU,CAsCtF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CA0BxF;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAa/F"}
@@ -1,21 +1,30 @@
1
+ export const MEMORY_VIEW_VERSION = 'memory-view-v7';
1
2
  /**
2
3
  * Resolve only explicit, high-precision language. An ambiguous query gets factual memory rather
3
4
  * than broadening into reports or imagined alternatives merely because those words rank well.
4
5
  */
5
6
  export function inferMemoryView(query, mode = 'lookup') {
7
+ const russian = russianMemoryView(query);
8
+ if (russian)
9
+ return russian;
10
+ if (ENGLISH_TENTATIVE_ASSISTANT_REPORT.test(query))
11
+ return 'reports';
6
12
  if (/\b(report|reported|reports|said|says|according to|told|claimed|claims)\b/i.test(query)) {
7
13
  return 'reports';
8
14
  }
9
- if (/\b(open question|open questions|unresolved question|unresolved questions|what remains (?:open|unanswered)|questions? remain)\b/i.test(query)) {
15
+ if (/\b((?:open|unresolved|unanswered) (?:[a-z-]+ ){0,3}questions?|what remains (?:open|unanswered)|questions? remain)\b/i.test(query)) {
10
16
  return 'questions';
11
17
  }
12
- if (/\b(hypothetical|counterfactual|what if|suppose|scenario|scenarios|alternative|alternatives|ideas? considered|discussed options?)\b/i.test(query)) {
18
+ if (ENGLISH_FICTION_CONTENT.test(query) ||
19
+ /\b(hypothetical|hypotheses|hypothesis|counterfactual|what if|suppose|scenario|scenarios|alternative|alternatives|competing (?:[a-z-]+ ){0,3}explanations?|ideas? considered|discussed options?|tentative beliefs?|unconfirmed hypotheses)\b/i.test(query)) {
13
20
  return 'discussion';
14
21
  }
15
- if (/\b(history|historical|previously|formerly|rejected|cancelled|canceled|completed|superseded|resolved|what was decided|decision history)\b/i.test(query)) {
22
+ if (declinedOffer(query))
23
+ return 'history';
24
+ if (/\b(history|historical|previously|formerly|reject(?:s|ed|ing)?|cancel(?:led|ed)?|completed|superseded|resolved|what was decided|decision history)\b/i.test(query)) {
16
25
  return 'history';
17
26
  }
18
- if (/\b(plan|plans|planned|planning|schedule|scheduled|upcoming|due|overdue|deadline|next action|next actions)\b/i.test(query)) {
27
+ if (/\b(plan|plans|planned|planning|proposal|proposed|schedule|scheduled|upcoming|due|overdue|deadline|next action|next actions)\b/i.test(query)) {
19
28
  return 'planning';
20
29
  }
21
30
  return mode === 'explore' ? 'all' : 'factual';
@@ -56,4 +65,43 @@ export function qualificationEligibleForView(memory, view) {
56
65
  temporalRelation: memory.temporal?.time.relation,
57
66
  }, view);
58
67
  }
68
+ // A measured decline is factual. Require the declined object to be an offer/plan, with a
69
+ // bounded grammatical connection; merely mentioning an offer elsewhere is insufficient.
70
+ function declinedOffer(query) {
71
+ return /\b(?:(?:offers?|proposals?|plans?|options?) (?:did|does|has|had|was|were) (?:[\p{L}'’-]+ ){0,4}declin(?:e[sd]?|ing)|declin(?:e[sd]?|ing) (?:an?|the|this|that|her|his|their) (?:[\p{L}'’-]+ ){0,3}(?:offer|proposal|plan|option))\b/iu.test(query);
72
+ }
73
+ // Binding the phrase and predicate by word distance excludes an unrelated predicate in a
74
+ // following clause. These patterns are precision-oriented cues, not a general discourse parser.
75
+ const DISCOURSE_WORD = String.raw `(?!(?:and|or|but|while|whereas|because|although|if|when|и|а|но|или|пока|когда|если|что|потому)(?![\p{L}\p{N}-]))[\p{L}\p{N}-]+`;
76
+ const ENGLISH_FICTION_CONTENT = new RegExp(String.raw `\bfictional (?:${DISCOURSE_WORD} ){0,3}(?:examples?|promises?)\b`, 'iu');
77
+ function boundedDiscoursePhrase(noun, predicate) {
78
+ const gap = String.raw `(?:[ \t]+${DISCOURSE_WORD}){0,8}[ \t]+`;
79
+ return new RegExp(String.raw `(?:^|[^\p{L}\p{N}])(?:${noun}${gap}${predicate}|${predicate}${gap}${noun})(?=$|[^\p{L}\p{N}])`, 'iu');
80
+ }
81
+ const RUSSIAN_QUALIFIED_REPORT = boundedDiscoursePhrase(String.raw `(?:неподтвержд[её]нн|непроверенн|предварительн)\p{L}* (?:${DISCOURSE_WORD} ){0,3}сообщени\p{L}*`, String.raw `(?:записал[аи]?|дал[аи]?|передал[аи]?|пересказал[аи]?|пересказыва(?:ет|ют))`);
82
+ const RUSSIAN_UNREALIZED_DISCUSSION = boundedDiscoursePhrase(String.raw `(?:нереализованн|несостоявш)\p{L}* (?:${DISCOURSE_WORD} ){0,3}вариант\p{L}*`, String.raw `(?:описал[аи]?|рассмотрел[аи]?|обсудил[аи]?)`);
83
+ // Suggesting a possible claim is a report; suggesting an action alone is not. Keep the
84
+ // tentative phrase, reporting actor and modal predicate within one bounded construction.
85
+ const ENGLISH_TENTATIVE_ASSISTANT_REPORT = new RegExp(String.raw `\b(?:(?:tentative|preliminary|unverified) (?:${DISCOURSE_WORD} ){0,5}(?:did|does) (?:the )?assistant (?:suggest|indicate|estimate) (?:may|might|could)\b|(?:the )?assistant (?:tentatively|provisionally) (?:suggests?|suggested|indicates?|indicated) that (?:${DISCOURSE_WORD} ){0,5}(?:may|might|could)\b)`, 'iu');
86
+ const RUSSIAN_ASSISTANT_READING = boundedDiscoursePhrase(String.raw `(?:предварительн|неподтвержд[её]нн)\p{L}* (?:верси|предположени|прочтени)\p{L}*`, String.raw `(?:предложил[аи]? ассистент|ассистент предложил[аи]?)`);
87
+ const RUSSIAN_FICTIONAL_PROMISE = boundedDiscoursePhrase(String.raw `вымышленн\p{L}* (?:${DISCOURSE_WORD} ){0,3}обещани\p{L}*`, String.raw `(?:предложил[аи]? обсудить|обсуждал[аи]?|описал[аи]?)`);
88
+ function russianMemoryView(query) {
89
+ if (RUSSIAN_QUALIFIED_REPORT.test(query) || RUSSIAN_ASSISTANT_READING.test(query))
90
+ return 'reports';
91
+ if (/(?:^|[^\p{L}])(?:сообщил|сообщила|сообщает|сказал|сказала|по словам|со слов|согласно|утверждает)(?=$|[^\p{L}])/iu.test(query))
92
+ return 'reports';
93
+ if (/вопрос\p{L}* (?:остал|открыт|не реш)|нереш[её]нн\p{L}* вопрос|открыт\p{L}* вопрос/iu.test(query))
94
+ return 'questions';
95
+ if (RUSSIAN_UNREALIZED_DISCUSSION.test(query) || RUSSIAN_FICTIONAL_PROMISE.test(query))
96
+ return 'discussion';
97
+ if (/гипотез|гипотетическ|контрфактическ|что если|предположим|сценари|альтернатив|обсуждал/iu.test(query))
98
+ return 'discussion';
99
+ // The noun "replacement" asks about coverage too; only an explicit completed replacement
100
+ // denotes history. A stem match used to hide factual coverage from Russian questions.
101
+ if (/истори|раньше|прежде|отклон|отмен|заверш|был[аои]? замен|замен[её]н|было решено/iu.test(query))
102
+ return 'history';
103
+ if (/план|предложил|предложили|предложен|расписани|предстоят|предстоящ|крайний срок|срок\p{L}* (?:оплаты|подачи|выполнения|осмотра)|дедлайн|просроч/iu.test(query))
104
+ return 'planning';
105
+ return null;
106
+ }
59
107
  //# sourceMappingURL=intent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"intent.js","sourceRoot":"","sources":["../../src/memory/intent.ts"],"names":[],"mappings":"AAeA;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,OAAmB,QAAQ;IACxE,IAAI,2EAA2E,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5F,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IACE,iIAAiI,CAAC,IAAI,CACpI,KAAK,CACN,EACD,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,IACE,qIAAqI,CAAC,IAAI,CACxI,KAAK,CACN,EACD,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,IACE,2IAA2I,CAAC,IAAI,CAC9I,KAAK,CACN,EACD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IACE,8GAA8G,CAAC,IAAI,CACjH,KAAK,CACN,EACD,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAuB,EAAE,IAAgB;IAC7E,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,cAAc,CAAC;IACrD,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,KAAK,KAAK,eAAe,CAAC;IAChE,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC;IAC5D,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,OAAO,CACL,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM;YACrB,MAAM,CAAC,cAAc,KAAK,SAAS;YACnC,MAAM,CAAC,cAAc,KAAK,WAAW,CAAC;YACxC,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAChE,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,CACL,CAAC,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC;YAC7F,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,WAAW,KAAK,UAAU,CAAC,CAClE,CAAC;IACJ,CAAC;IACD,OAAO,CACL,MAAM,CAAC,UAAU,KAAK,WAAW;QACjC,MAAM,CAAC,UAAU,KAAK,cAAc;QACpC,MAAM,CAAC,UAAU,KAAK,gBAAgB;QACtC,MAAM,CAAC,WAAW,KAAK,UAAU;QACjC,MAAM,CAAC,WAAW,KAAK,UAAU,CAClC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,MAAuB,EAAE,IAAgB;IACpF,OAAO,qBAAqB,CAC1B;QACE,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,cAAc,EAAE,MAAM,CAAC,eAAe;QACtC,cAAc,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM;QAC5C,gBAAgB,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACjD,EACD,IAAI,CACL,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"intent.js","sourceRoot":"","sources":["../../src/memory/intent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const AFFIRMATIVE_NAMED_ACTOR: string;
2
+ //# sourceMappingURL=named-actor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"named-actor.d.ts","sourceRoot":"","sources":["../../src/memory/named-actor.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,uBAAuB,QAA2C,CAAC"}
@@ -0,0 +1,9 @@
1
+ // Sentence-initial scope words can look like an extra capitalized part of a person's name.
2
+ // These finite affirmative grammars must not consume a condition, report or uncertainty cue as
3
+ // an actor. This is a syntax floor; matching a name never establishes source attribution.
4
+ const scopeWord = String.raw `If|Unless|When|While|Although|Though|Suppose|Perhaps|Maybe|Reportedly|Allegedly|Apparently|Possibly|Potentially|Hypothetically|Example|Not|Never|According|It|This|That|Если|Когда|Пока|Хотя|Якобы|Возможно|Вероятно|Предположительно|Видимо|Кажется|Будто|Словно|Не|Неверно|Пример|Допустим|По|Со|Как`;
5
+ const nameWord = String.raw `(?!(?:${scopeWord})(?![\p{L}]))\p{Lu}[\p{L}'’-]*`;
6
+ // These new arms cover two-part names only. A third capitalized word is ambiguous with an
7
+ // unlisted discourse adverb; widening this grammar requires a source-owned actor coordinate.
8
+ export const AFFIRMATIVE_NAMED_ACTOR = String.raw `${nameWord}[ \t]+${nameWord}`;
9
+ //# sourceMappingURL=named-actor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"named-actor.js","sourceRoot":"","sources":["../../src/memory/named-actor.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,+FAA+F;AAC/F,0FAA0F;AAC1F,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAA,wSAAwS,CAAC;AACrU,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAA,SAAS,SAAS,gCAAgC,CAAC;AAC9E,0FAA0F;AAC1F,6FAA6F;AAC7F,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,GAAG,CAAA,GAAG,QAAQ,SAAS,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** A generated-only floor for personal plan adoption and meeting arrangement, not semantic approval. */
2
+ export declare function personalNegativeActionsSupported(text: string, support: string): boolean;
3
+ //# sourceMappingURL=personal-negative-actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personal-negative-actions.d.ts","sourceRoot":"","sources":["../../src/memory/personal-negative-actions.ts"],"names":[],"mappings":"AA2DA,wGAAwG;AACxG,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAYvF"}
@@ -0,0 +1,67 @@
1
+ const name = String.raw `(?!(?:The|This|That|A|An)\b)\p{Lu}[\p{L}’'-]*(?:\s+\p{Lu}[\p{L}’'-]*){1,3}`;
2
+ const actor = String.raw `(?:${name}|I|[Hh]e|[Ss]he|[Яя]|[Оо]на?)`;
3
+ const agent = String.raw `(?:${name}|her|him|me|[Ее]ю|[Ии]м|[Мм]ной)`;
4
+ const adoption = String.raw `(?:adopted|accepted|approved)`;
5
+ const arrangement = String.raw `(?:arranged|booked|scheduled)`;
6
+ const personalStart = String.raw `(?<![\p{L}])${actor}(?:,\s*${name},)?\s+`;
7
+ const negative = String.raw `(?:(?:has|have|had)\s+not|(?:hasn|haven|hadn)['’]t)\s+(?:yet\s+)?`;
8
+ const planObject = String.raw `(?:\s+(?:the|this|that|a|her|his))?\s+(?:proposal|plan)|\s+[^.!?;,]{0,60}\bas\s+(?:a\s+)?plan`;
9
+ const meetingObject = String.raw `\s+(?:a|the|any|her|his)?\s*meeting`;
10
+ const ruAdoption = String.raw `не\s+(?:принял[аи]?|принимал[аи]?|утвердил[аи]?|утверждал[аи]?)\s+[^.!?;,]{0,60}(?:как|в качестве)\s+план\p{L}*`;
11
+ const ruArrangement = String.raw `не\s+(?:назначал[аи]?|назначил[аи]?|организовал[аи]?|организовывал[аи]?)\s+встреч\p{L}*`;
12
+ const actions = [
13
+ {
14
+ personal: String.raw `${personalStart}(?:${negative}${adoption}(?:${planObject})|${ruAdoption})`,
15
+ passive: String.raw `(?:\b(?:not|never)\s+(?:(?:yet|been)\s+){0,2}${adoption}(?:\s+by\s+${agent})?\s+(?:as|in the capacity of)\s+(?:a\s+)?plan\b|(?<![\p{L}])[Нн]е\s+(?:был[ао]?\s+)?(?:принят|утвержд[её]н)\p{L}*(?:\s+${agent})?\s+(?:(?:как|в качестве)\s+)?план\p{L}*|(?<![\p{L}])[Пп]лан\s+не\s+(?:был\s+)?(?:принят|утвержд[её]н)\p{L}*)`,
16
+ },
17
+ {
18
+ personal: String.raw `${personalStart}(?:${negative}${arrangement}${meetingObject}|${ruArrangement}|${negative}${adoption}(?:${planObject})\s+(?:or|and)\s+(?:${negative})?${arrangement}${meetingObject}|${ruAdoption}\s+и\s+${ruArrangement})`,
19
+ passive: String.raw `(?:\b[Nn]o\s+meeting\s+(?:has|had)\s+(?:yet\s+)?been\s+${arrangement}\b|\b(?:[Nn]o|[Ww]ithout (?:an? )?)\s*(?:${arrangement}\s+)?meeting\b|\bmeeting\s+(?:(?:has|had)\s+not\s+(?:yet\s+)?been|(?:is|was)\s+not)\s+${arrangement}\b|(?<=\bnot\s+[^.!?;,]{0,90}\s+or\s+)used\s+to\s+arrange\s+a\s+meeting\b|(?<![\p{L}])[Вв]стреч\p{L}*\s+не\s+(?:был[ао]?\s+)?(?:назначен|организован)\p{L}*|(?<![\p{L}])без\s+(?:(?:назначенн|организованн)\p{L}*\s+встреч\p{L}*|организации\s+встреч\p{L}*)|(?<![\p{L}])[Нн]е\s+сопровождаем\p{L}*\s+организацией\s+встреч\p{L}*)`,
20
+ },
21
+ ];
22
+ function readable(value) {
23
+ return value.replace(/```[\s\S]*?```|«[^»]*»|“[^”]*”|"[^"\n]*"|`[^`\n]*`/gu, ' ');
24
+ }
25
+ function hasAgent(text, match, support) {
26
+ // Bind only this predicate's explicit agent. An actor in a preceding proposal/adoption clause
27
+ // cannot supply the actor of a following anonymous meeting clause.
28
+ const body = match[0];
29
+ const after = text.slice(match.index + body.length).match(/^[^.!?;,]*/u)?.[0] ?? '';
30
+ const sourceAgent = (identity) => /^(?:her|him|me|ею|им|мной)$/iu.test(identity) || support.includes(identity);
31
+ // Russian also permits an instrumental agent immediately after the complete complement
32
+ // ("не принято как план ею"). Do not search past intervening words or a clause boundary.
33
+ if (/[а-яё]/iu.test(body)) {
34
+ const suffix = after.match(new RegExp(String.raw `^\s+(${agent})(?![\p{L}])`, 'u'))?.[1];
35
+ if (suffix && sourceAgent(suffix))
36
+ return true;
37
+ // An instrumental pronoun may precede this action's subject too. Limit this to explicit
38
+ // pronoun + optional plan/proposal: an earlier reporting verb must not supply the agent.
39
+ const before = text.slice(0, match.index);
40
+ if (/(?<![\p{L}])(?:[Ее]ю|[Ии]м|[Мм]ной)\s+(?:(?:предложени\p{L}*|план\p{L}*)\s+)?$/u.test(before))
41
+ return true;
42
+ }
43
+ const bound = (body + after).match(new RegExp(String.raw `(?:\bby\s+(${agent})(?![\p{L}])|(?<![\p{L}])(?:принят|утвержд[её]н|назначен|организован)\p{L}*\s+(${agent})(?![\p{L}]))`, 'u'));
44
+ if (!bound)
45
+ return false;
46
+ // Only an agent inside this match or immediately following it belongs to this action.
47
+ if (bound.index >= body.length && !/^\s*(?:by\s+)?$/u.test(after.slice(0, bound.index - body.length)))
48
+ return false;
49
+ const identity = bound[1] ?? bound[2];
50
+ return sourceAgent(identity);
51
+ }
52
+ /** A generated-only floor for personal plan adoption and meeting arrangement, not semantic approval. */
53
+ export function personalNegativeActionsSupported(text, support) {
54
+ const source = readable(support);
55
+ const candidate = readable(text);
56
+ return actions.every(({ personal, passive }) => {
57
+ const sourcePassives = [...source.matchAll(new RegExp(passive, 'gu'))];
58
+ if (!new RegExp(personal, 'u').test(source) && !sourcePassives.some((m) => hasAgent(source, m, source)))
59
+ return true;
60
+ // An independently anonymous source state defers only this action to full semantic pairing.
61
+ // The floor neither requires unrelated omitted actions nor verifies actor identity or object scope.
62
+ if (sourcePassives.some((m) => !hasAgent(source, m, source)))
63
+ return true;
64
+ return [...candidate.matchAll(new RegExp(passive, 'gu'))].every((m) => hasAgent(candidate, m, source));
65
+ });
66
+ }
67
+ //# sourceMappingURL=personal-negative-actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personal-negative-actions.js","sourceRoot":"","sources":["../../src/memory/personal-negative-actions.ts"],"names":[],"mappings":"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"}