@proposit/shared 0.1.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 (311) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +32 -0
  3. package/dist/api-client/argument/batch.d.ts +661 -0
  4. package/dist/api-client/argument/batch.d.ts.map +1 -0
  5. package/dist/api-client/argument/batch.js +14 -0
  6. package/dist/api-client/argument/batch.js.map +1 -0
  7. package/dist/api-client/argument/claims.d.ts +175 -0
  8. package/dist/api-client/argument/claims.d.ts.map +1 -0
  9. package/dist/api-client/argument/claims.js +20 -0
  10. package/dist/api-client/argument/claims.js.map +1 -0
  11. package/dist/api-client/argument/index.d.ts +1344 -0
  12. package/dist/api-client/argument/index.d.ts.map +1 -0
  13. package/dist/api-client/argument/index.js +62 -0
  14. package/dist/api-client/argument/index.js.map +1 -0
  15. package/dist/api-client/argument/logic/index.d.ts +861 -0
  16. package/dist/api-client/argument/logic/index.d.ts.map +1 -0
  17. package/dist/api-client/argument/logic/index.js +73 -0
  18. package/dist/api-client/argument/logic/index.js.map +1 -0
  19. package/dist/api-client/argument/logic/repair.d.ts +182 -0
  20. package/dist/api-client/argument/logic/repair.d.ts.map +1 -0
  21. package/dist/api-client/argument/logic/repair.js +9 -0
  22. package/dist/api-client/argument/logic/repair.js.map +1 -0
  23. package/dist/api-client/argument/reactions.d.ts +38 -0
  24. package/dist/api-client/argument/reactions.d.ts.map +1 -0
  25. package/dist/api-client/argument/reactions.js +9 -0
  26. package/dist/api-client/argument/reactions.js.map +1 -0
  27. package/dist/api-client/argument/reviews.d.ts +183 -0
  28. package/dist/api-client/argument/reviews.d.ts.map +1 -0
  29. package/dist/api-client/argument/reviews.js +21 -0
  30. package/dist/api-client/argument/reviews.js.map +1 -0
  31. package/dist/api-client/search.d.ts +64 -0
  32. package/dist/api-client/search.d.ts.map +1 -0
  33. package/dist/api-client/search.js +19 -0
  34. package/dist/api-client/search.js.map +1 -0
  35. package/dist/api-client/user/claims.d.ts +128 -0
  36. package/dist/api-client/user/claims.d.ts.map +1 -0
  37. package/dist/api-client/user/claims.js +10 -0
  38. package/dist/api-client/user/claims.js.map +1 -0
  39. package/dist/api-client/user/sources.d.ts +41 -0
  40. package/dist/api-client/user/sources.d.ts.map +1 -0
  41. package/dist/api-client/user/sources.js +7 -0
  42. package/dist/api-client/user/sources.js.map +1 -0
  43. package/dist/checksum.d.ts +2 -0
  44. package/dist/checksum.d.ts.map +1 -0
  45. package/dist/checksum.js +32 -0
  46. package/dist/checksum.js.map +1 -0
  47. package/dist/consts/argument.d.ts +9 -0
  48. package/dist/consts/argument.d.ts.map +1 -0
  49. package/dist/consts/argument.js +17 -0
  50. package/dist/consts/argument.js.map +1 -0
  51. package/dist/consts/identity.d.ts +3 -0
  52. package/dist/consts/identity.d.ts.map +1 -0
  53. package/dist/consts/identity.js +6 -0
  54. package/dist/consts/identity.js.map +1 -0
  55. package/dist/consts/index.d.ts +6 -0
  56. package/dist/consts/index.d.ts.map +1 -0
  57. package/dist/consts/index.js +6 -0
  58. package/dist/consts/index.js.map +1 -0
  59. package/dist/consts/roles.d.ts +27 -0
  60. package/dist/consts/roles.d.ts.map +1 -0
  61. package/dist/consts/roles.js +52 -0
  62. package/dist/consts/roles.js.map +1 -0
  63. package/dist/consts/task-status.d.ts +8 -0
  64. package/dist/consts/task-status.d.ts.map +1 -0
  65. package/dist/consts/task-status.js +14 -0
  66. package/dist/consts/task-status.js.map +1 -0
  67. package/dist/consts/user-tiers.d.ts +7 -0
  68. package/dist/consts/user-tiers.d.ts.map +1 -0
  69. package/dist/consts/user-tiers.js +60 -0
  70. package/dist/consts/user-tiers.js.map +1 -0
  71. package/dist/engine/engine.d.ts +94 -0
  72. package/dist/engine/engine.d.ts.map +1 -0
  73. package/dist/engine/engine.js +313 -0
  74. package/dist/engine/engine.js.map +1 -0
  75. package/dist/engine/library-adapters.d.ts +12 -0
  76. package/dist/engine/library-adapters.d.ts.map +1 -0
  77. package/dist/engine/library-adapters.js +11 -0
  78. package/dist/engine/library-adapters.js.map +1 -0
  79. package/dist/engine/mutations/claims.d.ts +10 -0
  80. package/dist/engine/mutations/claims.d.ts.map +1 -0
  81. package/dist/engine/mutations/claims.js +22 -0
  82. package/dist/engine/mutations/claims.js.map +1 -0
  83. package/dist/engine/mutations/expressions.d.ts +109 -0
  84. package/dist/engine/mutations/expressions.d.ts.map +1 -0
  85. package/dist/engine/mutations/expressions.js +277 -0
  86. package/dist/engine/mutations/expressions.js.map +1 -0
  87. package/dist/engine/mutations/index.d.ts +7 -0
  88. package/dist/engine/mutations/index.d.ts.map +1 -0
  89. package/dist/engine/mutations/index.js +6 -0
  90. package/dist/engine/mutations/index.js.map +1 -0
  91. package/dist/engine/mutations/premises.d.ts +25 -0
  92. package/dist/engine/mutations/premises.d.ts.map +1 -0
  93. package/dist/engine/mutations/premises.js +51 -0
  94. package/dist/engine/mutations/premises.js.map +1 -0
  95. package/dist/engine/mutations/types.d.ts +11 -0
  96. package/dist/engine/mutations/types.d.ts.map +1 -0
  97. package/dist/engine/mutations/types.js +2 -0
  98. package/dist/engine/mutations/types.js.map +1 -0
  99. package/dist/engine/mutations/variables.d.ts +27 -0
  100. package/dist/engine/mutations/variables.d.ts.map +1 -0
  101. package/dist/engine/mutations/variables.js +16 -0
  102. package/dist/engine/mutations/variables.js.map +1 -0
  103. package/dist/engine/optimistic/index.d.ts +4 -0
  104. package/dist/engine/optimistic/index.d.ts.map +1 -0
  105. package/dist/engine/optimistic/index.js +3 -0
  106. package/dist/engine/optimistic/index.js.map +1 -0
  107. package/dist/engine/optimistic/reconciliation.d.ts +32 -0
  108. package/dist/engine/optimistic/reconciliation.d.ts.map +1 -0
  109. package/dist/engine/optimistic/reconciliation.js +140 -0
  110. package/dist/engine/optimistic/reconciliation.js.map +1 -0
  111. package/dist/engine/optimistic/types.d.ts +25 -0
  112. package/dist/engine/optimistic/types.d.ts.map +1 -0
  113. package/dist/engine/optimistic/types.js +12 -0
  114. package/dist/engine/optimistic/types.js.map +1 -0
  115. package/dist/engine/optimistic/verification.d.ts +13 -0
  116. package/dist/engine/optimistic/verification.d.ts.map +1 -0
  117. package/dist/engine/optimistic/verification.js +71 -0
  118. package/dist/engine/optimistic/verification.js.map +1 -0
  119. package/dist/engine/review/evaluation.d.ts +27 -0
  120. package/dist/engine/review/evaluation.d.ts.map +1 -0
  121. package/dist/engine/review/evaluation.js +122 -0
  122. package/dist/engine/review/evaluation.js.map +1 -0
  123. package/dist/engine/review/fingerprint.d.ts +9 -0
  124. package/dist/engine/review/fingerprint.d.ts.map +1 -0
  125. package/dist/engine/review/fingerprint.js +27 -0
  126. package/dist/engine/review/fingerprint.js.map +1 -0
  127. package/dist/engine/review/overlay.d.ts +19 -0
  128. package/dist/engine/review/overlay.d.ts.map +1 -0
  129. package/dist/engine/review/overlay.js +81 -0
  130. package/dist/engine/review/overlay.js.map +1 -0
  131. package/dist/engine/review/reasons.d.ts +15 -0
  132. package/dist/engine/review/reasons.d.ts.map +1 -0
  133. package/dist/engine/review/reasons.js +211 -0
  134. package/dist/engine/review/reasons.js.map +1 -0
  135. package/dist/engine/review/review-engine.d.ts +134 -0
  136. package/dist/engine/review/review-engine.d.ts.map +1 -0
  137. package/dist/engine/review/review-engine.js +590 -0
  138. package/dist/engine/review/review-engine.js.map +1 -0
  139. package/dist/engine/review/review-store.d.ts +63 -0
  140. package/dist/engine/review/review-store.d.ts.map +1 -0
  141. package/dist/engine/review/review-store.js +174 -0
  142. package/dist/engine/review/review-store.js.map +1 -0
  143. package/dist/engine/review/step-queue.d.ts +27 -0
  144. package/dist/engine/review/step-queue.d.ts.map +1 -0
  145. package/dist/engine/review/step-queue.js +34 -0
  146. package/dist/engine/review/step-queue.js.map +1 -0
  147. package/dist/engine/review/types.d.ts +16 -0
  148. package/dist/engine/review/types.d.ts.map +1 -0
  149. package/dist/engine/review/types.js +2 -0
  150. package/dist/engine/review/types.js.map +1 -0
  151. package/dist/engine/review/wire.d.ts +8 -0
  152. package/dist/engine/review/wire.d.ts.map +1 -0
  153. package/dist/engine/review/wire.js +97 -0
  154. package/dist/engine/review/wire.js.map +1 -0
  155. package/dist/engine/text-tree.d.ts +35 -0
  156. package/dist/engine/text-tree.d.ts.map +1 -0
  157. package/dist/engine/text-tree.js +137 -0
  158. package/dist/engine/text-tree.js.map +1 -0
  159. package/dist/engine/types.d.ts +42 -0
  160. package/dist/engine/types.d.ts.map +1 -0
  161. package/dist/engine/types.js +2 -0
  162. package/dist/engine/types.js.map +1 -0
  163. package/dist/errors.d.ts +27 -0
  164. package/dist/errors.d.ts.map +1 -0
  165. package/dist/errors.js +61 -0
  166. package/dist/errors.js.map +1 -0
  167. package/dist/schemas/api/argument/batch/change-edge-operator.d.ts +281 -0
  168. package/dist/schemas/api/argument/batch/change-edge-operator.d.ts.map +1 -0
  169. package/dist/schemas/api/argument/batch/change-edge-operator.js +19 -0
  170. package/dist/schemas/api/argument/batch/change-edge-operator.js.map +1 -0
  171. package/dist/schemas/api/argument/batch/create-expression-with-operator.d.ts +280 -0
  172. package/dist/schemas/api/argument/batch/create-expression-with-operator.d.ts.map +1 -0
  173. package/dist/schemas/api/argument/batch/create-expression-with-operator.js +22 -0
  174. package/dist/schemas/api/argument/batch/create-expression-with-operator.js.map +1 -0
  175. package/dist/schemas/api/argument/batch/provision.d.ts +112 -0
  176. package/dist/schemas/api/argument/batch/provision.d.ts.map +1 -0
  177. package/dist/schemas/api/argument/batch/provision.js +10 -0
  178. package/dist/schemas/api/argument/batch/provision.js.map +1 -0
  179. package/dist/schemas/api/argument/build.d.ts +50 -0
  180. package/dist/schemas/api/argument/build.d.ts.map +1 -0
  181. package/dist/schemas/api/argument/build.js +41 -0
  182. package/dist/schemas/api/argument/build.js.map +1 -0
  183. package/dist/schemas/api/argument/claims.d.ts +151 -0
  184. package/dist/schemas/api/argument/claims.d.ts.map +1 -0
  185. package/dist/schemas/api/argument/claims.js +24 -0
  186. package/dist/schemas/api/argument/claims.js.map +1 -0
  187. package/dist/schemas/api/argument/index.d.ts +682 -0
  188. package/dist/schemas/api/argument/index.d.ts.map +1 -0
  189. package/dist/schemas/api/argument/index.js +51 -0
  190. package/dist/schemas/api/argument/index.js.map +1 -0
  191. package/dist/schemas/api/argument/logic.d.ts +205 -0
  192. package/dist/schemas/api/argument/logic.d.ts.map +1 -0
  193. package/dist/schemas/api/argument/logic.js +77 -0
  194. package/dist/schemas/api/argument/logic.js.map +1 -0
  195. package/dist/schemas/api/argument/repair.d.ts +195 -0
  196. package/dist/schemas/api/argument/repair.d.ts.map +1 -0
  197. package/dist/schemas/api/argument/repair.js +35 -0
  198. package/dist/schemas/api/argument/repair.js.map +1 -0
  199. package/dist/schemas/api/claims.d.ts +250 -0
  200. package/dist/schemas/api/claims.d.ts.map +1 -0
  201. package/dist/schemas/api/claims.js +20 -0
  202. package/dist/schemas/api/claims.js.map +1 -0
  203. package/dist/schemas/api/reaction/index.d.ts +46 -0
  204. package/dist/schemas/api/reaction/index.d.ts.map +1 -0
  205. package/dist/schemas/api/reaction/index.js +15 -0
  206. package/dist/schemas/api/reaction/index.js.map +1 -0
  207. package/dist/schemas/api/review/index.d.ts +164 -0
  208. package/dist/schemas/api/review/index.d.ts.map +1 -0
  209. package/dist/schemas/api/review/index.js +29 -0
  210. package/dist/schemas/api/review/index.js.map +1 -0
  211. package/dist/schemas/api/search.d.ts +109 -0
  212. package/dist/schemas/api/search.d.ts.map +1 -0
  213. package/dist/schemas/api/search.js +60 -0
  214. package/dist/schemas/api/search.js.map +1 -0
  215. package/dist/schemas/api/sources.d.ts +108 -0
  216. package/dist/schemas/api/sources.d.ts.map +1 -0
  217. package/dist/schemas/api/sources.js +28 -0
  218. package/dist/schemas/api/sources.js.map +1 -0
  219. package/dist/schemas/api/user/index.d.ts +16 -0
  220. package/dist/schemas/api/user/index.d.ts.map +1 -0
  221. package/dist/schemas/api/user/index.js +15 -0
  222. package/dist/schemas/api/user/index.js.map +1 -0
  223. package/dist/schemas/common.d.ts +50 -0
  224. package/dist/schemas/common.d.ts.map +1 -0
  225. package/dist/schemas/common.js +77 -0
  226. package/dist/schemas/common.js.map +1 -0
  227. package/dist/schemas/gpt.d.ts +10 -0
  228. package/dist/schemas/gpt.d.ts.map +1 -0
  229. package/dist/schemas/gpt.js +27 -0
  230. package/dist/schemas/gpt.js.map +1 -0
  231. package/dist/schemas/index.d.ts +8 -0
  232. package/dist/schemas/index.d.ts.map +1 -0
  233. package/dist/schemas/index.js +8 -0
  234. package/dist/schemas/index.js.map +1 -0
  235. package/dist/schemas/integrations/index.d.ts +159 -0
  236. package/dist/schemas/integrations/index.d.ts.map +1 -0
  237. package/dist/schemas/integrations/index.js +72 -0
  238. package/dist/schemas/integrations/index.js.map +1 -0
  239. package/dist/schemas/logic.d.ts +195 -0
  240. package/dist/schemas/logic.d.ts.map +1 -0
  241. package/dist/schemas/logic.js +77 -0
  242. package/dist/schemas/logic.js.map +1 -0
  243. package/dist/schemas/model/arguments.d.ts +457 -0
  244. package/dist/schemas/model/arguments.d.ts.map +1 -0
  245. package/dist/schemas/model/arguments.js +100 -0
  246. package/dist/schemas/model/arguments.js.map +1 -0
  247. package/dist/schemas/model/claims.d.ts +53 -0
  248. package/dist/schemas/model/claims.d.ts.map +1 -0
  249. package/dist/schemas/model/claims.js +40 -0
  250. package/dist/schemas/model/claims.js.map +1 -0
  251. package/dist/schemas/model/forks.d.ts +63 -0
  252. package/dist/schemas/model/forks.d.ts.map +1 -0
  253. package/dist/schemas/model/forks.js +63 -0
  254. package/dist/schemas/model/forks.js.map +1 -0
  255. package/dist/schemas/model/index.d.ts +6 -0
  256. package/dist/schemas/model/index.d.ts.map +1 -0
  257. package/dist/schemas/model/index.js +6 -0
  258. package/dist/schemas/model/index.js.map +1 -0
  259. package/dist/schemas/model/references.d.ts +49 -0
  260. package/dist/schemas/model/references.d.ts.map +1 -0
  261. package/dist/schemas/model/references.js +46 -0
  262. package/dist/schemas/model/references.js.map +1 -0
  263. package/dist/schemas/model/review.d.ts +56 -0
  264. package/dist/schemas/model/review.d.ts.map +1 -0
  265. package/dist/schemas/model/review.js +50 -0
  266. package/dist/schemas/model/review.js.map +1 -0
  267. package/dist/schemas/model/sources.d.ts +456 -0
  268. package/dist/schemas/model/sources.d.ts.map +1 -0
  269. package/dist/schemas/model/sources.js +27 -0
  270. package/dist/schemas/model/sources.js.map +1 -0
  271. package/dist/schemas/model/users.d.ts +150 -0
  272. package/dist/schemas/model/users.d.ts.map +1 -0
  273. package/dist/schemas/model/users.js +136 -0
  274. package/dist/schemas/model/users.js.map +1 -0
  275. package/dist/schemas/model.d.ts +2 -0
  276. package/dist/schemas/model.d.ts.map +1 -0
  277. package/dist/schemas/model.js +2 -0
  278. package/dist/schemas/model.js.map +1 -0
  279. package/dist/schemas/review.d.ts +1403 -0
  280. package/dist/schemas/review.d.ts.map +1 -0
  281. package/dist/schemas/review.js +232 -0
  282. package/dist/schemas/review.js.map +1 -0
  283. package/dist/schemas/snapshot.d.ts +165 -0
  284. package/dist/schemas/snapshot.d.ts.map +1 -0
  285. package/dist/schemas/snapshot.js +80 -0
  286. package/dist/schemas/snapshot.js.map +1 -0
  287. package/dist/schemas/tasks.d.ts +551 -0
  288. package/dist/schemas/tasks.d.ts.map +1 -0
  289. package/dist/schemas/tasks.js +113 -0
  290. package/dist/schemas/tasks.js.map +1 -0
  291. package/dist/utils/embedding-text.d.ts +15 -0
  292. package/dist/utils/embedding-text.d.ts.map +1 -0
  293. package/dist/utils/embedding-text.js +86 -0
  294. package/dist/utils/embedding-text.js.map +1 -0
  295. package/dist/utils/format-review-share.d.ts +7 -0
  296. package/dist/utils/format-review-share.d.ts.map +1 -0
  297. package/dist/utils/format-review-share.js +16 -0
  298. package/dist/utils/format-review-share.js.map +1 -0
  299. package/dist/utils/index.d.ts +4 -0
  300. package/dist/utils/index.d.ts.map +1 -0
  301. package/dist/utils/index.js +4 -0
  302. package/dist/utils/index.js.map +1 -0
  303. package/dist/utils/tasks/utils.d.ts +4 -0
  304. package/dist/utils/tasks/utils.d.ts.map +1 -0
  305. package/dist/utils/tasks/utils.js +12 -0
  306. package/dist/utils/tasks/utils.js.map +1 -0
  307. package/dist/utils/utils.d.ts +25 -0
  308. package/dist/utils/utils.d.ts.map +1 -0
  309. package/dist/utils/utils.js +115 -0
  310. package/dist/utils/utils.js.map +1 -0
  311. package/package.json +128 -0
@@ -0,0 +1,63 @@
1
+ import type { UUID } from "../../schemas/common.js";
2
+ import type { TReviewState, TClaimAssignment, TOperatorAssignment, TReviewResult } from "../../schemas/review.js";
3
+ export interface TReviewKey {
4
+ argumentId: UUID;
5
+ argumentVersion: number;
6
+ userId?: UUID;
7
+ }
8
+ export interface TReviewStore {
9
+ load(key: TReviewKey): Promise<TReviewState | undefined>;
10
+ save(key: TReviewKey, state: TReviewState): Promise<void>;
11
+ upsertClaimAssignment(key: TReviewKey, a: TClaimAssignment): Promise<void>;
12
+ upsertOperatorAssignment(key: TReviewKey, a: TOperatorAssignment): Promise<void>;
13
+ saveResult(key: TReviewKey, r: TReviewResult): Promise<void>;
14
+ clear(key: TReviewKey): Promise<void>;
15
+ /** Public key-derivation helper used by the React provider's cross-tab filter. */
16
+ keyFor(key: TReviewKey): string;
17
+ }
18
+ export declare class ReviewStorageQuotaError extends Error {
19
+ constructor(message?: string);
20
+ }
21
+ export declare class ReviewStorageUnavailableError extends Error {
22
+ constructor(message?: string);
23
+ }
24
+ /**
25
+ * Migrate a raw localStorage payload to the current schema shape.
26
+ * Returns `{ state, migrated }`; caller should re-persist when migrated === true.
27
+ * Silently strips unknown reason codes.
28
+ */
29
+ export declare function migrateReviewState(raw: unknown): {
30
+ state: unknown;
31
+ migrated: boolean;
32
+ };
33
+ export declare class LocalStorageReviewStore implements TReviewStore {
34
+ keyFor(k: TReviewKey): string;
35
+ load(key: TReviewKey): Promise<TReviewState | undefined>;
36
+ save(key: TReviewKey, state: TReviewState): Promise<void>;
37
+ private opKey;
38
+ upsertClaimAssignment(key: TReviewKey, a: TClaimAssignment): Promise<void>;
39
+ upsertOperatorAssignment(key: TReviewKey, a: TOperatorAssignment): Promise<void>;
40
+ saveResult(key: TReviewKey, r: TReviewResult): Promise<void>;
41
+ clear(key: TReviewKey): Promise<void>;
42
+ }
43
+ /**
44
+ * In-memory `TReviewStore` used by readonly review viewers.
45
+ *
46
+ * `load` and `save` round-trip state through a per-instance memory slot (so
47
+ * `ReviewEngine.runEvaluation`'s post-notify persist call succeeds without
48
+ * touching localStorage). The upsert methods (`upsertClaimAssignment`,
49
+ * `upsertOperatorAssignment`, `saveResult`) are true no-ops; they do NOT
50
+ * merge into the in-memory slot. Do NOT use this store with an editable
51
+ * engine — individual assignment upserts would be silently dropped.
52
+ */
53
+ export declare class InMemoryReviewStore implements TReviewStore {
54
+ private data;
55
+ keyFor(k: TReviewKey): string;
56
+ load(_key: TReviewKey): Promise<TReviewState | undefined>;
57
+ save(_key: TReviewKey, state: TReviewState): Promise<void>;
58
+ upsertClaimAssignment(): Promise<void>;
59
+ upsertOperatorAssignment(): Promise<void>;
60
+ saveResult(): Promise<void>;
61
+ clear(_key: TReviewKey): Promise<void>;
62
+ }
63
+ //# sourceMappingURL=review-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-store.d.ts","sourceRoot":"","sources":["../../../src/engine/review/review-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,KAAK,EACR,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EAChB,MAAM,yBAAyB,CAAA;AAgChC,MAAM,WAAW,UAAU;IACvB,UAAU,EAAE,IAAI,CAAA;IAChB,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,IAAI,CAAA;CAChB;AAED,MAAM,WAAW,YAAY;IACzB,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAAA;IACxD,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACzD,qBAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1E,wBAAwB,CACpB,GAAG,EAAE,UAAU,EACf,CAAC,EAAE,mBAAmB,GACvB,OAAO,CAAC,IAAI,CAAC,CAAA;IAChB,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5D,KAAK,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,kFAAkF;IAClF,MAAM,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAAA;CAClC;AAED,qBAAa,uBAAwB,SAAQ,KAAK;gBAClC,OAAO,SAAgC;CAItD;AACD,qBAAa,6BAA8B,SAAQ,KAAK;gBACxC,OAAO,SAA6B;CAInD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG;IAC9C,KAAK,EAAE,OAAO,CAAA;IACd,QAAQ,EAAE,OAAO,CAAA;CACpB,CA4BA;AAID,qBAAa,uBAAwB,YAAW,YAAY;IACxD,MAAM,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM;IAKvB,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IA4B9D,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBzD,OAAO,CAAC,KAAK;IAMP,qBAAqB,CACvB,GAAG,EAAE,UAAU,EACf,CAAC,EAAE,gBAAgB,GACpB,OAAO,CAAC,IAAI,CAAC;IAWV,wBAAwB,CAC1B,GAAG,EAAE,UAAU,EACf,CAAC,EAAE,mBAAmB,GACvB,OAAO,CAAC,IAAI,CAAC;IAeV,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAUlE,KAAK,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAOxC;AAED;;;;;;;;;GASG;AACH,qBAAa,mBAAoB,YAAW,YAAY;IACpD,OAAO,CAAC,IAAI,CAA0B;IACtC,MAAM,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM;IAG7B,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAGzD,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1D,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAGtC,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC;IAGzC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAG3B,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAIzC"}
@@ -0,0 +1,174 @@
1
+ import { ClaimReasonCodeSchema, OperatorReasonCodeSchema, ReviewStateSchema, } from "../../schemas/review.js";
2
+ import { Value } from "typebox/value";
3
+ const browserGlobals = globalThis;
4
+ const isQuotaExceeded = (err) => typeof err === "object" &&
5
+ err !== null &&
6
+ err.name === "QuotaExceededError";
7
+ export class ReviewStorageQuotaError extends Error {
8
+ constructor(message = "localStorage quota exceeded") {
9
+ super(message);
10
+ this.name = "ReviewStorageQuotaError";
11
+ }
12
+ }
13
+ export class ReviewStorageUnavailableError extends Error {
14
+ constructor(message = "localStorage unavailable") {
15
+ super(message);
16
+ this.name = "ReviewStorageUnavailableError";
17
+ }
18
+ }
19
+ /**
20
+ * Migrate a raw localStorage payload to the current schema shape.
21
+ * Returns `{ state, migrated }`; caller should re-persist when migrated === true.
22
+ * Silently strips unknown reason codes.
23
+ */
24
+ export function migrateReviewState(raw) {
25
+ if (!raw || typeof raw !== "object" || !("draft" in raw)) {
26
+ return { state: raw, migrated: false };
27
+ }
28
+ const s = raw;
29
+ let migrated = false;
30
+ for (const a of Object.values(s.draft.claimAssignments ?? {})) {
31
+ if (a.reasonCode && !Value.Check(ClaimReasonCodeSchema, a.reasonCode)) {
32
+ delete a.reasonCode;
33
+ migrated = true;
34
+ }
35
+ }
36
+ for (const a of s.draft.operatorAssignments ?? []) {
37
+ if (a.reasonCode &&
38
+ !Value.Check(OperatorReasonCodeSchema, a.reasonCode)) {
39
+ delete a.reasonCode;
40
+ migrated = true;
41
+ }
42
+ }
43
+ return { state: raw, migrated };
44
+ }
45
+ const STORAGE_PREFIX = "proposit.review";
46
+ export class LocalStorageReviewStore {
47
+ keyFor(k) {
48
+ const userSegment = k.userId ?? "anon";
49
+ return `${STORAGE_PREFIX}.${userSegment}.${k.argumentId}.${k.argumentVersion}`;
50
+ }
51
+ async load(key) {
52
+ const ls = browserGlobals.localStorage;
53
+ if (browserGlobals.window === undefined || !ls)
54
+ return undefined;
55
+ let raw;
56
+ try {
57
+ raw = ls.getItem(this.keyFor(key));
58
+ }
59
+ catch {
60
+ throw new ReviewStorageUnavailableError();
61
+ }
62
+ if (!raw)
63
+ return undefined;
64
+ try {
65
+ const parsed = JSON.parse(raw);
66
+ const { state: migrated, migrated: didMigrate } = migrateReviewState(parsed);
67
+ // Convert before Parse: EncodableDate's Convert rehydrates ISO strings
68
+ // into Date instances (precedent: src/utils/shared/utils.ts::parseResponse).
69
+ const converted = Value.Convert(ReviewStateSchema, migrated);
70
+ const state = Value.Parse(ReviewStateSchema, converted);
71
+ if (didMigrate)
72
+ await this.save(key, state);
73
+ return state;
74
+ }
75
+ catch (err) {
76
+ // Corrupted blob: drop it and let caller re-initialize.
77
+ console.warn("review-store: dropping corrupted review state", err);
78
+ await this.clear(key);
79
+ return undefined;
80
+ }
81
+ }
82
+ save(key, state) {
83
+ const ls = browserGlobals.localStorage;
84
+ if (browserGlobals.window === undefined || !ls)
85
+ return Promise.reject(new ReviewStorageUnavailableError("SSR"));
86
+ const serialized = Value.Encode(ReviewStateSchema, state);
87
+ try {
88
+ ls.setItem(this.keyFor(key), JSON.stringify(serialized));
89
+ return Promise.resolve();
90
+ }
91
+ catch (err) {
92
+ if (isQuotaExceeded(err)) {
93
+ return Promise.reject(new ReviewStorageQuotaError());
94
+ }
95
+ return Promise.reject(err instanceof Error ? err : new Error(String(err)));
96
+ }
97
+ }
98
+ opKey(a) {
99
+ return a.scope === "premise"
100
+ ? a.premiseId
101
+ : `${a.premiseId}:${a.expressionId ?? ""}`;
102
+ }
103
+ async upsertClaimAssignment(key, a) {
104
+ const state = await this.load(key);
105
+ if (!state)
106
+ throw new ReviewStorageUnavailableError("upsertClaimAssignment: no existing state");
107
+ state.draft.claimAssignments[a.claimId] = a;
108
+ state.draft.updatedAt = new Date();
109
+ await this.save(key, state);
110
+ }
111
+ async upsertOperatorAssignment(key, a) {
112
+ const state = await this.load(key);
113
+ if (!state)
114
+ throw new ReviewStorageUnavailableError("upsertOperatorAssignment: no existing state");
115
+ const idx = state.draft.operatorAssignments.findIndex((x) => this.opKey(x) === this.opKey(a));
116
+ if (idx >= 0)
117
+ state.draft.operatorAssignments[idx] = a;
118
+ else
119
+ state.draft.operatorAssignments.push(a);
120
+ state.draft.updatedAt = new Date();
121
+ await this.save(key, state);
122
+ }
123
+ async saveResult(key, r) {
124
+ const state = await this.load(key);
125
+ if (!state)
126
+ throw new ReviewStorageUnavailableError("saveResult: no existing state");
127
+ state.lastResult = r;
128
+ await this.save(key, state);
129
+ }
130
+ clear(key) {
131
+ const ls = browserGlobals.localStorage;
132
+ if (browserGlobals.window !== undefined && ls) {
133
+ ls.removeItem(this.keyFor(key));
134
+ }
135
+ return Promise.resolve();
136
+ }
137
+ }
138
+ /**
139
+ * In-memory `TReviewStore` used by readonly review viewers.
140
+ *
141
+ * `load` and `save` round-trip state through a per-instance memory slot (so
142
+ * `ReviewEngine.runEvaluation`'s post-notify persist call succeeds without
143
+ * touching localStorage). The upsert methods (`upsertClaimAssignment`,
144
+ * `upsertOperatorAssignment`, `saveResult`) are true no-ops; they do NOT
145
+ * merge into the in-memory slot. Do NOT use this store with an editable
146
+ * engine — individual assignment upserts would be silently dropped.
147
+ */
148
+ export class InMemoryReviewStore {
149
+ data;
150
+ keyFor(k) {
151
+ return `memory:${k.argumentId}:${k.argumentVersion}:${k.userId ?? "anon"}`;
152
+ }
153
+ load(_key) {
154
+ return Promise.resolve(this.data);
155
+ }
156
+ save(_key, state) {
157
+ this.data = state;
158
+ return Promise.resolve();
159
+ }
160
+ upsertClaimAssignment() {
161
+ return Promise.resolve();
162
+ }
163
+ upsertOperatorAssignment() {
164
+ return Promise.resolve();
165
+ }
166
+ saveResult() {
167
+ return Promise.resolve();
168
+ }
169
+ clear(_key) {
170
+ this.data = undefined;
171
+ return Promise.resolve();
172
+ }
173
+ }
174
+ //# sourceMappingURL=review-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-store.js","sourceRoot":"","sources":["../../../src/engine/review/review-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { ProjectEngine } from "../mutations/types.js";
2
+ import type { UUID } from "../../schemas/common.js";
3
+ export interface TOperatorQueueEntry {
4
+ premiseId: UUID;
5
+ scope: "premise";
6
+ }
7
+ export type TStepQueue = {
8
+ kind: "claim";
9
+ items: UUID[];
10
+ } | {
11
+ kind: "operator";
12
+ items: TOperatorQueueEntry[];
13
+ };
14
+ export declare function buildClaimQueue(argEngine: ProjectEngine): UUID[];
15
+ export declare function buildOperatorQueue(argEngine: ProjectEngine): TOperatorQueueEntry[];
16
+ export declare function advanceQueue(params: {
17
+ queue: TStepQueue;
18
+ currentIndex: number;
19
+ skippedKeys: Set<string>;
20
+ decidedKeys: Set<string>;
21
+ }): {
22
+ nextIndex: number;
23
+ insertRequeueNotice: boolean;
24
+ } | {
25
+ done: true;
26
+ };
27
+ //# sourceMappingURL=step-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-queue.d.ts","sourceRoot":"","sources":["../../../src/engine/review/step-queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAA;AAInD,MAAM,WAAW,mBAAmB;IAChC,SAAS,EAAE,IAAI,CAAA;IACf,KAAK,EAAE,SAAS,CAAA;CACnB;AACD,MAAM,MAAM,UAAU,GAChB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,IAAI,EAAE,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,mBAAmB,EAAE,CAAA;CAAE,CAAA;AAExD,wBAAgB,eAAe,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI,EAAE,CAGhE;AAED,wBAAgB,kBAAkB,CAC9B,SAAS,EAAE,aAAa,GACzB,mBAAmB,EAAE,CAcvB;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE;IACjC,KAAK,EAAE,UAAU,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACxB,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAC3B,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,CAavE"}
@@ -0,0 +1,34 @@
1
+ import { collectArgumentReferencedClaims } from "@proposit/proposit-core";
2
+ import { toEvaluationContext } from "./evaluation.js";
3
+ export function buildClaimQueue(argEngine) {
4
+ const ctx = toEvaluationContext(argEngine);
5
+ return collectArgumentReferencedClaims(ctx).claimIds;
6
+ }
7
+ export function buildOperatorQueue(argEngine) {
8
+ const out = [];
9
+ const premises = [
10
+ ...argEngine.listSupportingPremises(),
11
+ ...(argEngine.getConclusionPremise()
12
+ ? [argEngine.getConclusionPremise()]
13
+ : []),
14
+ ];
15
+ for (const p of premises) {
16
+ if (p.getDecidableOperatorExpressions().length > 0) {
17
+ out.push({ premiseId: p.getId(), scope: "premise" });
18
+ }
19
+ }
20
+ return out;
21
+ }
22
+ export function advanceQueue(params) {
23
+ const items = params.queue.kind === "claim"
24
+ ? params.queue.items
25
+ : params.queue.items.map((i) => i.premiseId);
26
+ const next = params.currentIndex + 1;
27
+ if (next < items.length)
28
+ return { nextIndex: next, insertRequeueNotice: false };
29
+ const remaining = items.findIndex((k) => params.skippedKeys.has(k) && !params.decidedKeys.has(k));
30
+ if (remaining < 0)
31
+ return { done: true };
32
+ return { nextIndex: remaining, insertRequeueNotice: true };
33
+ }
34
+ //# sourceMappingURL=step-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-queue.js","sourceRoot":"","sources":["../../../src/engine/review/step-queue.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAUrD,MAAM,UAAU,eAAe,CAAC,SAAwB;IACpD,MAAM,GAAG,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAA;IAC1C,OAAO,+BAA+B,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAA;AACxD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAC9B,SAAwB;IAExB,MAAM,GAAG,GAA0B,EAAE,CAAA;IACrC,MAAM,QAAQ,GAAG;QACb,GAAG,SAAS,CAAC,sBAAsB,EAAE;QACrC,GAAG,CAAC,SAAS,CAAC,oBAAoB,EAAE;YAChC,CAAC,CAAC,CAAC,SAAS,CAAC,oBAAoB,EAAG,CAAC;YACrC,CAAC,CAAC,EAAE,CAAC;KACZ,CAAA;IACD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,+BAA+B,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;QACxD,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAA;AACd,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAK5B;IACG,MAAM,KAAK,GACP,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO;QACzB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK;QACpB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IACpD,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,GAAG,CAAC,CAAA;IACpC,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM;QACnB,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAA;IAC1D,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CACjE,CAAA;IACD,IAAI,SAAS,GAAG,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;IACxC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAA;AAC9D,CAAC"}
@@ -0,0 +1,16 @@
1
+ /** Three-valued assignment pill, surfaced on claim nodes. */
2
+ export type TAssignmentPill = "true" | "false" | "unknown" | "skipped";
3
+ /** Verdict rendered on the conclusion premise node after evaluation. */
4
+ export type TConclusionVerdict = "Valid and Sound" | "Failing" | "Logically Invalid" | "Vacuous" | "Indeterminate";
5
+ /** Review-phase data merged into the graph when rendering with review overlay. */
6
+ export interface TReviewOverlay {
7
+ /** User's assignment per claimId. */
8
+ claimValues: Record<string, TAssignmentPill>;
9
+ /** Evaluator-propagated value per variableId. */
10
+ propagatedValues: Record<string, boolean | null>;
11
+ /** Operator accept/reject decision per expressionId. */
12
+ operatorDecisions: Record<string, "accepted" | "rejected">;
13
+ /** Verdict for the conclusion premise node. */
14
+ conclusionVerdict?: TConclusionVerdict;
15
+ }
16
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/engine/review/types.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAA;AAEtE,wEAAwE;AACxE,MAAM,MAAM,kBAAkB,GACxB,iBAAiB,GACjB,SAAS,GACT,mBAAmB,GACnB,SAAS,GACT,eAAe,CAAA;AAErB,kFAAkF;AAClF,MAAM,WAAW,cAAc;IAC3B,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC5C,iDAAiD;IACjD,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC,CAAA;IAChD,wDAAwD;IACxD,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC,CAAA;IAC1D,+CAA+C;IAC/C,iBAAiB,CAAC,EAAE,kBAAkB,CAAA;CACzC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/engine/review/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import type { TServerReview } from "../../schemas/model/review.js";
2
+ import type { TReviewDraft } from "../../schemas/review.js";
3
+ import type { TReviewUpdateRequest } from "../../schemas/api/review/index.js";
4
+ export declare function serverReviewToDraft(review: TServerReview): TReviewDraft;
5
+ export declare function draftToUpdatePayload(draft: TReviewDraft): TReviewUpdateRequest;
6
+ export declare function hasAnyDecisions(draft: TReviewDraft): boolean;
7
+ export declare function isFullyDecided(draft: TReviewDraft): boolean;
8
+ //# sourceMappingURL=wire.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../../src/engine/review/wire.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAClE,OAAO,KAAK,EACR,YAAY,EAIf,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAA;AAoB7E,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,YAAY,CA4CvE;AAED,wBAAgB,oBAAoB,CAChC,KAAK,EAAE,YAAY,GACpB,oBAAoB,CAoBtB;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAI5D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAK3D"}
@@ -0,0 +1,97 @@
1
+ function serverValueToDraft(value) {
2
+ if (value === "true")
3
+ return true;
4
+ if (value === "false")
5
+ return false;
6
+ return null;
7
+ }
8
+ function draftValueToServer(value) {
9
+ if (value === true)
10
+ return "true";
11
+ if (value === false)
12
+ return "false";
13
+ if (value === null)
14
+ return "unknown";
15
+ return null;
16
+ }
17
+ export function serverReviewToDraft(review) {
18
+ const claimAssignments = {};
19
+ for (const a of review.claimAssignments) {
20
+ const isUndecided = a.value === null && !a.skipped && !a.decidedAt;
21
+ if (isUndecided)
22
+ continue;
23
+ claimAssignments[a.claimId] = {
24
+ assignmentId: a.claimId,
25
+ claimId: a.claimId,
26
+ value: serverValueToDraft(a.value),
27
+ skipped: a.skipped,
28
+ reasonCode: (a.reasonCode ??
29
+ undefined),
30
+ decidedAt: a.decidedAt ?? new Date(),
31
+ };
32
+ }
33
+ const operatorAssignments = [];
34
+ for (const o of review.operatorAssignments) {
35
+ if (!o.decision)
36
+ continue;
37
+ operatorAssignments.push({
38
+ assignmentId: `${o.premiseId}:${o.scope}:${o.expressionId ?? ""}`,
39
+ premiseId: o.premiseId,
40
+ expressionId: o.expressionId ?? undefined,
41
+ scope: o.scope,
42
+ decision: o.decision,
43
+ reasonCode: (o.reasonCode ??
44
+ undefined),
45
+ decidedAt: o.decidedAt ?? new Date(),
46
+ });
47
+ }
48
+ return {
49
+ schemaVersion: 1,
50
+ reviewId: review.id,
51
+ argumentId: review.argumentId,
52
+ argumentVersion: review.argumentVersion,
53
+ userId: review.userId,
54
+ createdAt: review.createdOn,
55
+ updatedAt: review.updatedOn,
56
+ phase: review.phase,
57
+ currentStepIndex: review.currentStepIndex,
58
+ claimAssignments,
59
+ operatorAssignments,
60
+ };
61
+ }
62
+ export function draftToUpdatePayload(draft) {
63
+ return {
64
+ phase: draft.phase,
65
+ currentStepIndex: draft.currentStepIndex,
66
+ claimAssignments: Object.values(draft.claimAssignments).map((a) => ({
67
+ claimId: a.claimId,
68
+ value: draftValueToServer(a.value),
69
+ skipped: a.skipped,
70
+ reasonCode: a.reasonCode ?? null,
71
+ decidedAt: a.decidedAt ?? null,
72
+ })),
73
+ operatorAssignments: draft.operatorAssignments.map((o) => ({
74
+ premiseId: o.premiseId,
75
+ expressionId: o.expressionId ?? null,
76
+ scope: o.scope,
77
+ decision: o.decision,
78
+ reasonCode: o.reasonCode ?? null,
79
+ decidedAt: o.decidedAt ?? null,
80
+ })),
81
+ };
82
+ }
83
+ export function hasAnyDecisions(draft) {
84
+ if (Object.keys(draft.claimAssignments).length > 0)
85
+ return true;
86
+ if (draft.operatorAssignments.length > 0)
87
+ return true;
88
+ return false;
89
+ }
90
+ export function isFullyDecided(draft) {
91
+ for (const a of Object.values(draft.claimAssignments)) {
92
+ if (a.value === null && !a.skipped)
93
+ return false;
94
+ }
95
+ return true;
96
+ }
97
+ //# sourceMappingURL=wire.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire.js","sourceRoot":"","sources":["../../../src/engine/review/wire.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { TProjectReactiveSnapshot } from "./engine.js";
2
+ import type { TLogicalOperatorType } from "../schemas/logic.js";
3
+ /** Operator display labels for the text view. */
4
+ export declare const OPERATOR_LABELS: Record<Exclude<TLogicalOperatorType, "not">, string>;
5
+ export type TTextTreeItem = {
6
+ type: "premise-header";
7
+ premiseId: string;
8
+ role: "conclusion" | "supporting";
9
+ title: string | null;
10
+ } | {
11
+ type: "claim";
12
+ expressionId: string;
13
+ variableId: string;
14
+ claimId: string | null;
15
+ claimTitle: string;
16
+ claimBody: string;
17
+ negated: boolean;
18
+ isConclusion: boolean;
19
+ depth: number;
20
+ } | {
21
+ type: "operator";
22
+ operator: Exclude<TLogicalOperatorType, "not">;
23
+ label: string;
24
+ depth: number;
25
+ } | {
26
+ type: "empty-premise";
27
+ premiseId: string;
28
+ };
29
+ /**
30
+ * Build a text-tree for a single premise. Emits walk items only (no
31
+ * premise-header). Use when rendering a standalone premise preview.
32
+ */
33
+ export declare function buildPremiseTextTree(snapshot: TProjectReactiveSnapshot, premiseId: string): TTextTreeItem[];
34
+ export declare function buildTextTree(snapshot: TProjectReactiveSnapshot): TTextTreeItem[];
35
+ //# sourceMappingURL=text-tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-tree.d.ts","sourceRoot":"","sources":["../../src/engine/text-tree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAC3D,OAAO,KAAK,EAER,oBAAoB,EACvB,MAAM,qBAAqB,CAAA;AAE5B,iDAAiD;AACjD,eAAO,MAAM,eAAe,EAAE,MAAM,CAChC,OAAO,CAAC,oBAAoB,EAAE,KAAK,CAAC,EACpC,MAAM,CAMT,CAAA;AAED,MAAM,MAAM,aAAa,GACnB;IACI,IAAI,EAAE,gBAAgB,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,YAAY,GAAG,YAAY,CAAA;IACjC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB,GACD;IACI,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,YAAY,EAAE,OAAO,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;CAChB,GACD;IACI,IAAI,EAAE,UAAU,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAA;IAC9C,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CAChB,GACD;IACI,IAAI,EAAE,eAAe,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;CACpB,CAAA;AAEP;;;GAGG;AACH,wBAAgB,oBAAoB,CAChC,QAAQ,EAAE,wBAAwB,EAClC,SAAS,EAAE,MAAM,GAClB,aAAa,EAAE,CAmBjB;AA4GD,wBAAgB,aAAa,CACzB,QAAQ,EAAE,wBAAwB,GACnC,aAAa,EAAE,CA0BjB"}
@@ -0,0 +1,137 @@
1
+ /** Operator display labels for the text view. */
2
+ export const OPERATOR_LABELS = {
3
+ and: "and",
4
+ or: "or",
5
+ implies: "is true if",
6
+ iff: "is true if and only if",
7
+ };
8
+ /**
9
+ * Build a text-tree for a single premise. Emits walk items only (no
10
+ * premise-header). Use when rendering a standalone premise preview.
11
+ */
12
+ export function buildPremiseTextTree(snapshot, premiseId) {
13
+ const premiseSnap = snapshot.premises[premiseId];
14
+ if (!premiseSnap)
15
+ return [];
16
+ const isConclusion = snapshot.roles.conclusionPremiseId === premiseId;
17
+ const rootExprId = premiseSnap.rootExpressionId;
18
+ if (!rootExprId)
19
+ return [{ type: "empty-premise", premiseId }];
20
+ const items = [];
21
+ walkPremiseExpression({
22
+ exprId: rootExprId,
23
+ premiseExpressions: premiseSnap.expressions,
24
+ variables: snapshot.variables,
25
+ claims: snapshot.claims,
26
+ negated: false,
27
+ depth: 0,
28
+ isConclusion,
29
+ items,
30
+ });
31
+ return items;
32
+ }
33
+ function getChildExpressions(parentId, premiseExpressions) {
34
+ return Object.values(premiseExpressions)
35
+ .filter((e) => e.parentId === parentId)
36
+ .sort((a, b) => (a.position ?? 0) - (b.position ?? 0));
37
+ }
38
+ function walkPremiseExpression(args) {
39
+ const { exprId, premiseExpressions, variables, claims, negated, depth, isConclusion, items, } = args;
40
+ const expr = premiseExpressions[exprId];
41
+ if (!expr)
42
+ return;
43
+ if (expr.type === "variable") {
44
+ const variable = variables[expr.variableId];
45
+ let claimId = null;
46
+ let claimTitle = "";
47
+ let claimBody = "";
48
+ if (variable && "claimId" in variable) {
49
+ claimId = variable.claimId;
50
+ const claim = claims[variable.claimId];
51
+ if (claim) {
52
+ claimTitle = claim.title;
53
+ claimBody = claim.body;
54
+ }
55
+ }
56
+ items.push({
57
+ type: "claim",
58
+ expressionId: expr.id,
59
+ variableId: expr.variableId,
60
+ claimId,
61
+ claimTitle,
62
+ claimBody,
63
+ negated,
64
+ isConclusion,
65
+ depth,
66
+ });
67
+ return;
68
+ }
69
+ if (expr.type === "formula") {
70
+ const children = getChildExpressions(exprId, premiseExpressions);
71
+ for (const child of children) {
72
+ walkPremiseExpression({
73
+ ...args,
74
+ exprId: child.id,
75
+ depth: depth + 1,
76
+ });
77
+ }
78
+ return;
79
+ }
80
+ if (expr.type === "operator") {
81
+ if (expr.operator === "not") {
82
+ const children = getChildExpressions(exprId, premiseExpressions);
83
+ if (children.length > 0) {
84
+ walkPremiseExpression({
85
+ ...args,
86
+ exprId: children[0].id,
87
+ negated: !negated,
88
+ });
89
+ }
90
+ return;
91
+ }
92
+ const children = getChildExpressions(exprId, premiseExpressions);
93
+ const isInference = expr.operator === "implies" || expr.operator === "iff";
94
+ const orderedChildren = isInference ? [...children].reverse() : children;
95
+ for (let i = 0; i < orderedChildren.length; i++) {
96
+ walkPremiseExpression({
97
+ ...args,
98
+ exprId: orderedChildren[i].id,
99
+ negated: false,
100
+ });
101
+ if (i < orderedChildren.length - 1) {
102
+ items.push({
103
+ type: "operator",
104
+ operator: expr.operator,
105
+ label: OPERATOR_LABELS[expr.operator],
106
+ depth,
107
+ });
108
+ }
109
+ }
110
+ }
111
+ }
112
+ export function buildTextTree(snapshot) {
113
+ const items = [];
114
+ const conclusionPremiseId = snapshot.roles.conclusionPremiseId;
115
+ // Sort premises: conclusion first, then supporting
116
+ const premiseEntries = Object.entries(snapshot.premises);
117
+ const sortedPremises = premiseEntries.sort(([idA], [idB]) => {
118
+ const aIsConclusion = idA === conclusionPremiseId;
119
+ const bIsConclusion = idB === conclusionPremiseId;
120
+ if (aIsConclusion && !bIsConclusion)
121
+ return -1;
122
+ if (!aIsConclusion && bIsConclusion)
123
+ return 1;
124
+ return 0;
125
+ });
126
+ for (const [premiseId, premiseSnap] of sortedPremises) {
127
+ items.push({
128
+ type: "premise-header",
129
+ premiseId,
130
+ role: premiseId === conclusionPremiseId ? "conclusion" : "supporting",
131
+ title: premiseSnap.premise.title ?? null,
132
+ });
133
+ items.push(...buildPremiseTextTree(snapshot, premiseId));
134
+ }
135
+ return items;
136
+ }
137
+ //# sourceMappingURL=text-tree.js.map