@polintpro/proposit-core 0.2.7 → 0.2.9

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 (49) hide show
  1. package/README.md +89 -0
  2. package/dist/cli/commands/premises.js +2 -2
  3. package/dist/cli/engine.d.ts +1 -1
  4. package/dist/cli/engine.js +1 -1
  5. package/dist/cli/import.d.ts +1 -1
  6. package/dist/cli/import.js +1 -1
  7. package/dist/index.d.ts +1 -16
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +1 -12
  10. package/dist/index.js.map +1 -1
  11. package/dist/lib/core/ArgumentEngine.d.ts +20 -5
  12. package/dist/lib/core/ArgumentEngine.d.ts.map +1 -1
  13. package/dist/lib/core/ArgumentEngine.js +191 -12
  14. package/dist/lib/core/ArgumentEngine.js.map +1 -1
  15. package/dist/lib/core/ExpressionManager.d.ts +3 -3
  16. package/dist/lib/core/ExpressionManager.d.ts.map +1 -1
  17. package/dist/lib/core/ExpressionManager.js +1 -1
  18. package/dist/lib/core/ExpressionManager.js.map +1 -1
  19. package/dist/lib/core/PremiseEngine.d.ts +6 -4
  20. package/dist/lib/core/PremiseEngine.d.ts.map +1 -1
  21. package/dist/lib/core/PremiseEngine.js +53 -27
  22. package/dist/lib/core/PremiseEngine.js.map +1 -1
  23. package/dist/lib/core/VariableManager.d.ts +2 -2
  24. package/dist/lib/core/VariableManager.d.ts.map +1 -1
  25. package/dist/lib/core/VariableManager.js +1 -1
  26. package/dist/lib/core/VariableManager.js.map +1 -1
  27. package/dist/lib/core/diff.d.ts +1 -1
  28. package/dist/lib/core/evaluation/kleene.d.ts +12 -0
  29. package/dist/lib/core/evaluation/kleene.d.ts.map +1 -0
  30. package/dist/lib/core/evaluation/kleene.js +29 -0
  31. package/dist/lib/core/evaluation/kleene.js.map +1 -0
  32. package/dist/lib/core/evaluation/validation.d.ts +10 -0
  33. package/dist/lib/core/evaluation/validation.d.ts.map +1 -0
  34. package/dist/lib/core/evaluation/validation.js +28 -0
  35. package/dist/lib/core/evaluation/validation.js.map +1 -0
  36. package/dist/lib/core/relationships.d.ts +2 -2
  37. package/dist/lib/index.d.ts +10 -8
  38. package/dist/lib/index.d.ts.map +1 -1
  39. package/dist/lib/index.js +5 -3
  40. package/dist/lib/index.js.map +1 -1
  41. package/dist/lib/types/reactive.d.ts +14 -0
  42. package/dist/lib/types/reactive.d.ts.map +1 -0
  43. package/dist/lib/types/reactive.js +2 -0
  44. package/dist/lib/types/reactive.js.map +1 -0
  45. package/dist/lib/utils/defaultMap.d.ts +17 -0
  46. package/dist/lib/utils/defaultMap.d.ts.map +1 -0
  47. package/dist/lib/utils/defaultMap.js +33 -0
  48. package/dist/lib/utils/defaultMap.js.map +1 -0
  49. package/package.json +1 -1
package/README.md CHANGED
@@ -224,6 +224,79 @@ if (validity.ok) {
224
224
  }
225
225
  ```
226
226
 
227
+ ### Using with React
228
+
229
+ `ArgumentEngine` implements the `useSyncExternalStore` contract, so it works as a React external store with no additional dependencies:
230
+
231
+ ```tsx
232
+ import { useSyncExternalStore } from "react"
233
+ import { ArgumentEngine } from "@polintpro/proposit-core"
234
+
235
+ // Create the engine outside of React (or in a ref/context)
236
+ const engine = new ArgumentEngine({ id: "arg-1", version: 1 })
237
+
238
+ function ArgumentView() {
239
+ // Subscribe to the full snapshot
240
+ const snapshot = useSyncExternalStore(engine.subscribe, engine.getSnapshot)
241
+
242
+ return (
243
+ <div>
244
+ <h2>Variables</h2>
245
+ <ul>
246
+ {Object.values(snapshot.variables).map((v) => (
247
+ <li key={v.id}>{v.symbol}</li>
248
+ ))}
249
+ </ul>
250
+ <h2>Premises</h2>
251
+ {Object.entries(snapshot.premises).map(([id, p]) => (
252
+ <div key={id}>
253
+ Premise {id} — {Object.keys(p.expressions).length} expressions
254
+ </div>
255
+ ))}
256
+ </div>
257
+ )
258
+ }
259
+ ```
260
+
261
+ For fine-grained reactivity, select a specific slice — React skips re-rendering if the reference is unchanged thanks to structural sharing:
262
+
263
+ ```tsx
264
+ function ExpressionView({ premiseId, expressionId }: {
265
+ premiseId: string
266
+ expressionId: string
267
+ }) {
268
+ // Only re-renders when THIS expression changes
269
+ const expression = useSyncExternalStore(
270
+ engine.subscribe,
271
+ () => engine.getSnapshot().premises[premiseId]?.expressions[expressionId]
272
+ )
273
+
274
+ if (!expression) return null
275
+ return <span>{expression.type === "variable" ? expression.variableId : expression.operator}</span>
276
+ }
277
+ ```
278
+
279
+ Mutations go through the engine as usual — subscribers are notified automatically:
280
+
281
+ ```tsx
282
+ function AddVariableButton() {
283
+ return (
284
+ <button onClick={() => {
285
+ engine.addVariable({
286
+ id: crypto.randomUUID(),
287
+ argumentId: "arg-1",
288
+ argumentVersion: 1,
289
+ symbol: "R",
290
+ })
291
+ }}>
292
+ Add variable R
293
+ </button>
294
+ )
295
+ }
296
+ ```
297
+
298
+ ---
299
+
227
300
  ### Inserting an expression into the tree
228
301
 
229
302
  `insertExpression` splices a new node between existing nodes. The new expression inherits the **anchor** node's current slot in the tree (`leftNodeId ?? rightNodeId`).
@@ -489,6 +562,18 @@ Options:
489
562
 
490
563
  ---
491
564
 
565
+ #### `subscribe(listener)` → `() => void`
566
+
567
+ Registers a listener that is called synchronously after every mutation (including mutations through child `PremiseEngine` instances). Returns an unsubscribe function. Compatible with React's `useSyncExternalStore`.
568
+
569
+ ---
570
+
571
+ #### `getSnapshot()` → `TReactiveSnapshot`
572
+
573
+ Returns a `TReactiveSnapshot` with structurally-shared sub-objects. Unchanged slices keep the same object reference between calls, enabling fine-grained React selectors via `useSyncExternalStore`. The snapshot is lazily rebuilt only when dirty regions exist.
574
+
575
+ ---
576
+
492
577
  #### `snapshot()` → `TArgumentEngineSnapshot`
493
578
 
494
579
  Returns a serialisable snapshot of the full engine state (`{ argument, variables, premises, conclusionPremiseId, config }`). Each premise snapshot includes its metadata and expression snapshot. Can be used to reconstruct the engine via `ArgumentEngine.fromSnapshot()` or to restore state in place via `rollback()`.
@@ -786,6 +871,10 @@ Hierarchical snapshot types for capturing and restoring engine state:
786
871
  | `TVariableManagerSnapshot` | `variables`, `config` |
787
872
  | `TPremiseEngineSnapshot` | `premise` metadata, `rootExpressionId`, `expressions` snapshot, `config` |
788
873
  | `TArgumentEngineSnapshot` | `argument`, `variables` snapshot, `premises` snapshots, `conclusionPremiseId`, `config` |
874
+ | `TReactiveSnapshot` | `argument`, `variables` (Record by ID), `premises` (Record by ID with expressions), `roles` |
875
+ | `TReactivePremiseSnapshot` | `premise`, `expressions` (Record by ID), `rootExpressionId` |
876
+
877
+ `TReactiveSnapshot` is the type returned by `getSnapshot()` — optimized for React with Record-based lookups and structural sharing. The other snapshot types are for serialization and restoration.
789
878
 
790
879
  Each snapshot captures only what the class **owns**. Dependencies (e.g., variables for a premise) are excluded and must be passed separately during restoration via `fromSnapshot()`.
791
880
 
@@ -1,7 +1,7 @@
1
1
  import { randomUUID } from "node:crypto";
2
2
  import { Command } from "commander";
3
- import { PremiseEngine } from "../../lib/core/PremiseEngine.js";
4
- import { VariableManager } from "../../lib/core/VariableManager.js";
3
+ import { PremiseEngine } from "../../lib/core/premiseEngine.js";
4
+ import { VariableManager } from "../../lib/core/variableManager.js";
5
5
  import { errorExit, printJson, printLine, requireConfirmation, } from "../output.js";
6
6
  import { readArgumentMeta, readVersionMeta } from "../storage/arguments.js";
7
7
  import { deletePremiseDir, listPremiseIds, premiseExists, readPremiseData, readPremiseMeta, writePremiseData, writePremiseMeta, } from "../storage/premises.js";
@@ -1,4 +1,4 @@
1
- import { ArgumentEngine } from "../lib/core/ArgumentEngine.js";
1
+ import { ArgumentEngine } from "../lib/core/argumentEngine.js";
2
2
  /**
3
3
  * Builds a fully-hydrated ArgumentEngine from the on-disk state for the
4
4
  * given argument ID and version number.
@@ -1,5 +1,5 @@
1
1
  import fs from "node:fs/promises";
2
- import { ArgumentEngine } from "../lib/core/ArgumentEngine.js";
2
+ import { ArgumentEngine } from "../lib/core/argumentEngine.js";
3
3
  import { getPremisesDir } from "./config.js";
4
4
  import { readArgumentMeta, readVersionMeta, writeArgumentMeta, writeVersionMeta, } from "./storage/arguments.js";
5
5
  import { listPremiseIds, readPremiseData, readPremiseMeta, writePremiseData, writePremiseMeta, } from "./storage/premises.js";
@@ -1,4 +1,4 @@
1
- import { ArgumentEngine } from "../lib/core/ArgumentEngine.js";
1
+ import { ArgumentEngine } from "../lib/core/argumentEngine.js";
2
2
  /**
3
3
  * Parses a YAML string representing a logical argument and returns a
4
4
  * fully hydrated ArgumentEngine.
@@ -3,7 +3,7 @@ import yaml from "js-yaml";
3
3
  import { Value } from "typebox/value";
4
4
  import { CoreYamlArgumentSchema } from "../lib/schemata/import.js";
5
5
  import { parseFormula } from "../lib/core/parser/formula.js";
6
- import { ArgumentEngine } from "../lib/core/ArgumentEngine.js";
6
+ import { ArgumentEngine } from "../lib/core/argumentEngine.js";
7
7
  import { POSITION_INITIAL } from "../lib/utils/position.js";
8
8
  /**
9
9
  * Validates that `implies` and `iff` nodes appear only at the AST root.
package/dist/index.d.ts CHANGED
@@ -6,20 +6,5 @@
6
6
  * the primary API, along with all type schemata and the {@link diffArguments}
7
7
  * utility.
8
8
  */
9
- export { ArgumentEngine, PremiseEngine } from "./lib/index.js";
10
- export type { TLogicEngineOptions, TArgumentEngineSnapshot, TPremiseEngineSnapshot, TExpressionManagerSnapshot, TVariableManagerSnapshot, } from "./lib/index.js";
11
- export * from "./lib/schemata/index.js";
12
- export * from "./lib/types/diff.js";
13
- export * from "./lib/types/mutation.js";
14
- export * from "./lib/types/checksum.js";
15
- export { computeHash, canonicalSerialize, entityChecksum, } from "./lib/core/checksum.js";
16
- export { diffArguments, defaultCompareArgument, defaultCompareVariable, defaultComparePremise, defaultCompareExpression, } from "./lib/core/diff.js";
17
- export * from "./lib/types/relationships.js";
18
- export { analyzePremiseRelationships, buildPremiseProfile, } from "./lib/core/relationships.js";
19
- export { DEFAULT_CHECKSUM_CONFIG, createChecksumConfig } from "./lib/consts.js";
20
- export { parseFormula } from "./lib/core/parser/formula.js";
21
- export type { FormulaAST } from "./lib/core/parser/formula.js";
22
- export type { TExpressionInput, TExpressionWithoutPosition, TExpressionUpdate, } from "./lib/core/ExpressionManager.js";
23
- export { POSITION_MIN, POSITION_MAX, POSITION_INITIAL, DEFAULT_POSITION_CONFIG, midpoint, } from "./lib/utils/position.js";
24
- export type { TCorePositionConfig } from "./lib/utils/position.js";
9
+ export * from "./lib/index.js";
25
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9D,YAAY,EACR,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,0BAA0B,EAC1B,wBAAwB,GAC3B,MAAM,gBAAgB,CAAA;AACvB,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,OAAO,EACH,WAAW,EACX,kBAAkB,EAClB,cAAc,GACjB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EACH,aAAa,EACb,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,GAC3B,MAAM,oBAAoB,CAAA;AAC3B,cAAc,8BAA8B,CAAA;AAC5C,OAAO,EACH,2BAA2B,EAC3B,mBAAmB,GACtB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,YAAY,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AAC9D,YAAY,EACR,gBAAgB,EAChB,0BAA0B,EAC1B,iBAAiB,GACpB,MAAM,iCAAiC,CAAA;AACxC,OAAO,EACH,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,EACvB,QAAQ,GACX,MAAM,yBAAyB,CAAA;AAChC,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,cAAc,gBAAgB,CAAA"}
package/dist/index.js CHANGED
@@ -6,16 +6,5 @@
6
6
  * the primary API, along with all type schemata and the {@link diffArguments}
7
7
  * utility.
8
8
  */
9
- export { ArgumentEngine, PremiseEngine } from "./lib/index.js";
10
- export * from "./lib/schemata/index.js";
11
- export * from "./lib/types/diff.js";
12
- export * from "./lib/types/mutation.js";
13
- export * from "./lib/types/checksum.js";
14
- export { computeHash, canonicalSerialize, entityChecksum, } from "./lib/core/checksum.js";
15
- export { diffArguments, defaultCompareArgument, defaultCompareVariable, defaultComparePremise, defaultCompareExpression, } from "./lib/core/diff.js";
16
- export * from "./lib/types/relationships.js";
17
- export { analyzePremiseRelationships, buildPremiseProfile, } from "./lib/core/relationships.js";
18
- export { DEFAULT_CHECKSUM_CONFIG, createChecksumConfig } from "./lib/consts.js";
19
- export { parseFormula } from "./lib/core/parser/formula.js";
20
- export { POSITION_MIN, POSITION_MAX, POSITION_INITIAL, DEFAULT_POSITION_CONFIG, midpoint, } from "./lib/utils/position.js";
9
+ export * from "./lib/index.js";
21
10
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAQ9D,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,OAAO,EACH,WAAW,EACX,kBAAkB,EAClB,cAAc,GACjB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EACH,aAAa,EACb,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,GAC3B,MAAM,oBAAoB,CAAA;AAC3B,cAAc,8BAA8B,CAAA;AAC5C,OAAO,EACH,2BAA2B,EAC3B,mBAAmB,GACtB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAO3D,OAAO,EACH,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,EACvB,QAAQ,GACX,MAAM,yBAAyB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,cAAc,gBAAgB,CAAA"}
@@ -3,10 +3,11 @@ import type { TCoreArgumentEvaluationOptions, TCoreArgumentEvaluationResult, TCo
3
3
  import type { TCoreChecksumConfig } from "../types/checksum.js";
4
4
  import type { TCorePositionConfig } from "../utils/position.js";
5
5
  import type { TCoreMutationResult } from "../types/mutation.js";
6
- import type { TExpressionInput } from "./ExpressionManager.js";
7
- import { PremiseEngine } from "./PremiseEngine.js";
8
- import type { TPremiseEngineSnapshot } from "./PremiseEngine.js";
9
- import type { TVariableManagerSnapshot } from "./VariableManager.js";
6
+ import type { TReactiveSnapshot } from "../types/reactive.js";
7
+ import type { TExpressionInput } from "./expressionManager.js";
8
+ import { PremiseEngine } from "./premiseEngine.js";
9
+ import type { TPremiseEngineSnapshot } from "./premiseEngine.js";
10
+ import type { TVariableManagerSnapshot } from "./variableManager.js";
10
11
  export type TLogicEngineOptions = {
11
12
  checksumConfig?: TCoreChecksumConfig;
12
13
  positionConfig?: TCorePositionConfig;
@@ -35,7 +36,21 @@ export declare class ArgumentEngine<TArg extends TCoreArgument = TCoreArgument,
35
36
  private checksumDirty;
36
37
  private cachedChecksum;
37
38
  private expressionIndex;
39
+ private listeners;
40
+ private reactiveDirty;
41
+ private cachedReactiveSnapshot;
38
42
  constructor(argument: TOptionalChecksum<TArg>, options?: TLogicEngineOptions);
43
+ /**
44
+ * Registers a listener that is called after every mutation.
45
+ * Returns an unsubscribe function.
46
+ */
47
+ subscribe: (listener: () => void) => (() => void);
48
+ private notifySubscribers;
49
+ getSnapshot: () => TReactiveSnapshot<TArg, TPremise, TExpr, TVar>;
50
+ private buildVariablesRecord;
51
+ private buildAllPremisesRecord;
52
+ private buildPremiseRecord;
53
+ private markReactiveDirty;
39
54
  /** Returns a shallow copy of the argument metadata with checksum attached. */
40
55
  getArgument(): TArg;
41
56
  /** Renders the argument as a multi-line string with role labels for each premise. */
@@ -207,4 +222,4 @@ export declare class ArgumentEngine<TArg extends TCoreArgument = TCoreArgument,
207
222
  */
208
223
  checkValidity(options?: TCoreValidityCheckOptions): TCoreValidityCheckResult;
209
224
  }
210
- //# sourceMappingURL=ArgumentEngine.d.ts.map
225
+ //# sourceMappingURL=argumentEngine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ArgumentEngine.d.ts","sourceRoot":"","sources":["../../../src/lib/core/ArgumentEngine.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACR,aAAa,EACb,YAAY,EACZ,4BAA4B,EAC5B,0BAA0B,EAC1B,iBAAiB,EACpB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EACR,8BAA8B,EAC9B,6BAA6B,EAC7B,sBAAsB,EAEtB,yBAAyB,EAIzB,qBAAqB,EACrB,yBAAyB,EACzB,wBAAwB,EAC3B,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAE/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAU/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAEhE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAEpE,MAAM,MAAM,mBAAmB,GAAG;IAC9B,cAAc,CAAC,EAAE,mBAAmB,CAAA;IACpC,cAAc,CAAC,EAAE,mBAAmB,CAAA;CACvC,CAAA;AAED,MAAM,MAAM,uBAAuB,CAC/B,IAAI,SAAS,aAAa,GAAG,aAAa,EAC1C,QAAQ,SAAS,YAAY,GAAG,YAAY,EAC5C,KAAK,SAAS,4BAA4B,GAAG,4BAA4B,EACzE,IAAI,SAAS,0BAA0B,GAAG,0BAA0B,IACpE;IACA,QAAQ,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAA;IACjC,SAAS,EAAE,wBAAwB,CAAC,IAAI,CAAC,CAAA;IACzC,QAAQ,EAAE,sBAAsB,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAA;IACnD,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,MAAM,CAAC,EAAE,mBAAmB,CAAA;CAC/B,CAAA;AAED;;;;;;GAMG;AACH,qBAAa,cAAc,CACvB,IAAI,SAAS,aAAa,GAAG,aAAa,EAC1C,QAAQ,SAAS,YAAY,GAAG,YAAY,EAC5C,KAAK,SAAS,4BAA4B,GAAG,4BAA4B,EACzE,IAAI,SAAS,0BAA0B,GAAG,0BAA0B;IAEpE,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,QAAQ,CAAyD;IACzE,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,mBAAmB,CAAoB;IAC/C,OAAO,CAAC,cAAc,CAAC,CAAqB;IAC5C,OAAO,CAAC,cAAc,CAAC,CAAqB;IAC5C,OAAO,CAAC,aAAa,CAAO;IAC5B,OAAO,CAAC,cAAc,CAAoB;IAC1C,OAAO,CAAC,eAAe,CAAqB;gBAGxC,QAAQ,EAAE,iBAAiB,CAAC,IAAI,CAAC,EACjC,OAAO,CAAC,EAAE,mBAAmB;IAcjC,8EAA8E;IACvE,WAAW,IAAI,IAAI;IAI1B,qFAAqF;IAC9E,eAAe,IAAI,MAAM;IA0BhC;;;OAGG;IACI,aAAa,CAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,mBAAmB,CAClB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,EAC1C,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,IAAI,CACP;IAID;;;;;OAKG;IACI,mBAAmB,CACtB,EAAE,EAAE,MAAM,EACV,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,mBAAmB,CAClB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,EAC1C,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,IAAI,CACP;IAsCD;;;OAGG;IACI,aAAa,CAChB,SAAS,EAAE,MAAM,GAClB,mBAAmB,CAAC,QAAQ,GAAG,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC;IAsBzE,0EAA0E;IACnE,UAAU,CACb,SAAS,EAAE,MAAM,GAClB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,SAAS;IAIzD,4DAA4D;IACrD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI7C,sDAAsD;IAC/C,cAAc,IAAI,MAAM,EAAE;IAMjC,sDAAsD;IAC/C,YAAY,IAAI,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE;IASnE;;;;;;OAMG;IACI,WAAW,CACd,QAAQ,EAAE,iBAAiB,CAAC,IAAI,CAAC,GAClC,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC;IAuBzD;;;;;OAKG;IACI,cAAc,CACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC7B,mBAAmB,CAAC,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC;IAuBrE;;;OAGG;IACI,cAAc,CACjB,UAAU,EAAE,MAAM,GACnB,mBAAmB,CAAC,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC;IA4BrE,qDAAqD;IAC9C,YAAY,IAAI,IAAI,EAAE;IAI7B,2EAA2E;IACpE,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAIxD,6DAA6D;IACtD,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAI/C,+EAA+E;IACxE,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAI5D;;;;OAIG;IACI,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;IAQjE,iFAAiF;IAC1E,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAM7D,+EAA+E;IACxE,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAInD,iFAAiF;IAC1E,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIvE,iFAAiF;IAC1E,yBAAyB,CAC5B,YAAY,EAAE,MAAM,GACrB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,SAAS;IAMzD,iEAAiE;IAC1D,iBAAiB,IAAI,KAAK,EAAE;IAQnC;;;OAGG;IACI,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,EAAE;IAiB9D,kEAAkE;IAC3D,mBAAmB,IAAI,KAAK,EAAE;IASrC,gGAAgG;IACzF,YAAY,IAAI,sBAAsB;IAQ7C;;;;OAIG;IACI,oBAAoB,CACvB,SAAS,EAAE,MAAM,GAClB,mBAAmB,CAClB,sBAAsB,EACtB,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,IAAI,CACP;IAgBD,yCAAyC;IAClC,sBAAsB,IAAI,mBAAmB,CAChD,sBAAsB,EACtB,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,IAAI,CACP;IAYD,qEAAqE;IAC9D,oBAAoB,IACrB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,GAC1C,SAAS;IAOf;;;OAGG;IACI,sBAAsB,IAAI,aAAa,CAC1C,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,IAAI,CACP,EAAE;IAMH,gEAAgE;IACzD,QAAQ,IAAI,uBAAuB,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC;IAevE,wEAAwE;WAC1D,YAAY,CACtB,IAAI,SAAS,aAAa,GAAG,aAAa,EAC1C,QAAQ,SAAS,YAAY,GAAG,YAAY,EAC5C,KAAK,SAAS,4BAA4B,GACtC,4BAA4B,EAChC,IAAI,SAAS,0BAA0B,GAAG,0BAA0B,EAEpE,QAAQ,EAAE,uBAAuB,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,GAC/D,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC;IAwB9C;;;;;OAKG;WACW,QAAQ,CAClB,IAAI,SAAS,aAAa,GAAG,aAAa,EAC1C,QAAQ,SAAS,YAAY,GAAG,YAAY,EAC5C,KAAK,SAAS,4BAA4B,GACtC,4BAA4B,EAChC,IAAI,SAAS,0BAA0B,GAAG,0BAA0B,EAEpE,QAAQ,EAAE,iBAAiB,CAAC,IAAI,CAAC,EACjC,SAAS,EAAE,iBAAiB,CAAC,IAAI,CAAC,EAAE,EACpC,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,CAAC,EAAE,EACvC,WAAW,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,EACtC,KAAK,EAAE,sBAAsB,EAC7B,MAAM,CAAC,EAAE,mBAAmB,GAC7B,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC;IA4E9C,mEAAmE;IAC5D,QAAQ,CACX,QAAQ,EAAE,uBAAuB,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,GAC/D,IAAI;IAoBP;;;;OAIG;IACI,QAAQ,IAAI,MAAM;IAQzB,OAAO,CAAC,eAAe;IA6BvB,OAAO,CAAC,SAAS;IAIjB,sEAAsE;IACtE,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,sBAAsB;IAa9B;;;OAGG;IACI,0BAA0B,IAAI;QACjC,WAAW,EAAE,MAAM,EAAE,CAAA;QACrB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,CAAA;QAC9D,QAAQ,EAAE,MAAM,CACZ,MAAM,EACN;YAAE,WAAW,EAAE,MAAM,EAAE,CAAC;YAAC,UAAU,EAAE,MAAM,EAAE,CAAA;SAAE,CAClD,CAAA;KACJ;IAuED;;;;;OAKG;IACI,oBAAoB,IAAI,qBAAqB;IAsEpD;;;;;;;;;;;;OAYG;IACI,QAAQ,CACX,UAAU,EAAE,yBAAyB,EACrC,OAAO,CAAC,EAAE,8BAA8B,GACzC,6BAA6B;IA2IhC;;;;;;;;;OASG;IACI,aAAa,CAChB,OAAO,CAAC,EAAE,yBAAyB,GACpC,wBAAwB;CAsJ9B"}
1
+ {"version":3,"file":"argumentEngine.d.ts","sourceRoot":"","sources":["../../../src/lib/core/argumentEngine.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,12 @@
1
1
  import { randomUUID } from "node:crypto";
2
2
  import { DEFAULT_CHECKSUM_CONFIG } from "../consts.js";
3
3
  import { getOrCreate, sortedUnique } from "../utils/collections.js";
4
- import { ChangeCollector } from "./ChangeCollector.js";
4
+ import { ChangeCollector } from "./changeCollector.js";
5
5
  import { canonicalSerialize, computeHash, entityChecksum } from "./checksum.js";
6
- import { kleeneAnd, kleeneNot, makeErrorIssue, makeValidationResult, } from "./evaluation/shared.js";
7
- import { PremiseEngine } from "./PremiseEngine.js";
8
- import { VariableManager } from "./VariableManager.js";
6
+ import { kleeneAnd, kleeneNot } from "./evaluation/kleene.js";
7
+ import { makeErrorIssue, makeValidationResult, } from "./evaluation/validation.js";
8
+ import { PremiseEngine } from "./premiseEngine.js";
9
+ import { VariableManager } from "./variableManager.js";
9
10
  /**
10
11
  * Manages a propositional logic argument composed of premises, variable
11
12
  * assignments, and logical roles (supporting premises and a conclusion).
@@ -23,6 +24,15 @@ export class ArgumentEngine {
23
24
  checksumDirty = true;
24
25
  cachedChecksum;
25
26
  expressionIndex;
27
+ listeners = new Set();
28
+ reactiveDirty = {
29
+ argument: true,
30
+ variables: true,
31
+ roles: true,
32
+ premiseIds: new Set(),
33
+ allPremises: true,
34
+ };
35
+ cachedReactiveSnapshot;
26
36
  constructor(argument, options) {
27
37
  this.argument = { ...argument };
28
38
  this.premises = new Map();
@@ -35,6 +45,130 @@ export class ArgumentEngine {
35
45
  this.checksumConfig = options?.checksumConfig;
36
46
  this.positionConfig = options?.positionConfig;
37
47
  }
48
+ /**
49
+ * Registers a listener that is called after every mutation.
50
+ * Returns an unsubscribe function.
51
+ */
52
+ subscribe = (listener) => {
53
+ this.listeners.add(listener);
54
+ return () => { this.listeners.delete(listener); };
55
+ };
56
+ notifySubscribers() {
57
+ for (const listener of this.listeners) {
58
+ listener();
59
+ }
60
+ }
61
+ getSnapshot = () => {
62
+ const dirty = this.reactiveDirty;
63
+ const prev = this.cachedReactiveSnapshot;
64
+ if (prev && !dirty.argument && !dirty.variables && !dirty.roles && dirty.premiseIds.size === 0 && !dirty.allPremises) {
65
+ return prev;
66
+ }
67
+ const argument = dirty.argument || !prev
68
+ ? this.getArgument()
69
+ : prev.argument;
70
+ const variables = dirty.variables || !prev
71
+ ? this.buildVariablesRecord()
72
+ : prev.variables;
73
+ const roles = dirty.roles || !prev
74
+ ? { ...this.getRoleState() }
75
+ : prev.roles;
76
+ let premises;
77
+ if (dirty.allPremises || !prev) {
78
+ premises = this.buildAllPremisesRecord();
79
+ }
80
+ else {
81
+ premises = { ...prev.premises };
82
+ // Remove premises that no longer exist
83
+ for (const id of Object.keys(premises)) {
84
+ if (!this.premises.has(id)) {
85
+ delete premises[id];
86
+ }
87
+ }
88
+ // Rebuild dirty premises
89
+ for (const id of dirty.premiseIds) {
90
+ const pm = this.premises.get(id);
91
+ if (pm) {
92
+ premises[id] = this.buildPremiseRecord(pm);
93
+ }
94
+ else {
95
+ delete premises[id];
96
+ }
97
+ }
98
+ // Add any new premises not yet in snapshot
99
+ for (const [id, pm] of this.premises) {
100
+ if (!(id in premises)) {
101
+ premises[id] = this.buildPremiseRecord(pm);
102
+ }
103
+ }
104
+ }
105
+ const snapshot = {
106
+ argument,
107
+ variables,
108
+ premises,
109
+ roles,
110
+ };
111
+ this.cachedReactiveSnapshot = snapshot;
112
+ this.reactiveDirty = {
113
+ argument: false,
114
+ variables: false,
115
+ roles: false,
116
+ premiseIds: new Set(),
117
+ allPremises: false,
118
+ };
119
+ return snapshot;
120
+ };
121
+ buildVariablesRecord() {
122
+ const result = {};
123
+ for (const v of this.variables.toArray()) {
124
+ result[v.id] = v;
125
+ }
126
+ return result;
127
+ }
128
+ buildAllPremisesRecord() {
129
+ const result = {};
130
+ for (const [id, pm] of this.premises) {
131
+ result[id] = this.buildPremiseRecord(pm);
132
+ }
133
+ return result;
134
+ }
135
+ buildPremiseRecord(pm) {
136
+ const expressions = {};
137
+ for (const expr of pm.getExpressions()) {
138
+ expressions[expr.id] = expr;
139
+ }
140
+ return {
141
+ premise: pm.toPremiseData(),
142
+ expressions,
143
+ rootExpressionId: pm.getRootExpressionId(),
144
+ };
145
+ }
146
+ markReactiveDirty(changes) {
147
+ if (changes.argument) {
148
+ this.reactiveDirty.argument = true;
149
+ }
150
+ if (changes.variables) {
151
+ this.reactiveDirty.variables = true;
152
+ }
153
+ if (changes.roles) {
154
+ this.reactiveDirty.roles = true;
155
+ }
156
+ if (changes.expressions) {
157
+ const allExprs = [
158
+ ...changes.expressions.added,
159
+ ...changes.expressions.modified,
160
+ ...changes.expressions.removed,
161
+ ];
162
+ for (const expr of allExprs) {
163
+ this.reactiveDirty.premiseIds.add(expr.premiseId);
164
+ }
165
+ }
166
+ if (changes.premises) {
167
+ for (const p of [...changes.premises.added, ...changes.premises.modified, ...changes.premises.removed]) {
168
+ this.reactiveDirty.premiseIds.add(p.id);
169
+ }
170
+ }
171
+ }
38
172
  /** Returns a shallow copy of the argument metadata with checksum attached. */
39
173
  getArgument() {
40
174
  return { ...this.argument, checksum: this.checksum() };
@@ -94,6 +228,10 @@ export class ArgumentEngine {
94
228
  positionConfig: this.positionConfig,
95
229
  });
96
230
  this.premises.set(id, pm);
231
+ pm.setOnMutate(() => {
232
+ this.reactiveDirty.premiseIds.add(id);
233
+ this.notifySubscribers();
234
+ });
97
235
  const collector = new ChangeCollector();
98
236
  collector.addedPremise(pm.toPremiseData());
99
237
  this.markDirty();
@@ -101,9 +239,12 @@ export class ArgumentEngine {
101
239
  this.conclusionPremiseId = id;
102
240
  collector.setRoles(this.getRoleState());
103
241
  }
242
+ const changes = collector.toChangeset();
243
+ this.markReactiveDirty(changes);
244
+ this.notifySubscribers();
104
245
  return {
105
246
  result: pm,
106
- changes: collector.toChangeset(),
247
+ changes,
107
248
  };
108
249
  }
109
250
  /**
@@ -127,9 +268,12 @@ export class ArgumentEngine {
127
268
  collector.setRoles(this.getRoleState());
128
269
  }
129
270
  this.markDirty();
271
+ const changes = collector.toChangeset();
272
+ this.markReactiveDirty(changes);
273
+ this.notifySubscribers();
130
274
  return {
131
275
  result: data,
132
- changes: collector.toChangeset(),
276
+ changes,
133
277
  };
134
278
  }
135
279
  /** Returns the premise with the given ID, or `undefined` if not found. */
@@ -170,9 +314,12 @@ export class ArgumentEngine {
170
314
  collector.addedVariable(withChecksum);
171
315
  this.markDirty();
172
316
  this.markAllPremisesDirty();
317
+ const changes = collector.toChangeset();
318
+ this.markReactiveDirty(changes);
319
+ this.notifySubscribers();
173
320
  return {
174
321
  result: withChecksum,
175
- changes: collector.toChangeset(),
322
+ changes,
176
323
  };
177
324
  }
178
325
  /**
@@ -193,9 +340,12 @@ export class ArgumentEngine {
193
340
  collector.modifiedVariable(withChecksum);
194
341
  this.markDirty();
195
342
  this.markAllPremisesDirty();
343
+ const changes = collector.toChangeset();
344
+ this.markReactiveDirty(changes);
345
+ this.notifySubscribers();
196
346
  return {
197
347
  result: withChecksum,
198
- changes: collector.toChangeset(),
348
+ changes,
199
349
  };
200
350
  }
201
351
  return {
@@ -226,9 +376,12 @@ export class ArgumentEngine {
226
376
  collector.removedVariable(variable);
227
377
  this.markDirty();
228
378
  this.markAllPremisesDirty();
379
+ const changes = collector.toChangeset();
380
+ this.markReactiveDirty(changes);
381
+ this.notifySubscribers();
229
382
  return {
230
383
  result: variable,
231
- changes: collector.toChangeset(),
384
+ changes,
232
385
  };
233
386
  }
234
387
  /** Returns all registered variables sorted by ID. */
@@ -341,9 +494,12 @@ export class ArgumentEngine {
341
494
  const collector = new ChangeCollector();
342
495
  collector.setRoles(roles);
343
496
  this.markDirty();
497
+ const changes = collector.toChangeset();
498
+ this.markReactiveDirty(changes);
499
+ this.notifySubscribers();
344
500
  return {
345
501
  result: roles,
346
- changes: collector.toChangeset(),
502
+ changes,
347
503
  };
348
504
  }
349
505
  /** Clears the conclusion designation. */
@@ -353,9 +509,12 @@ export class ArgumentEngine {
353
509
  const collector = new ChangeCollector();
354
510
  collector.setRoles(roles);
355
511
  this.markDirty();
512
+ const changes = collector.toChangeset();
513
+ this.markReactiveDirty(changes);
514
+ this.notifySubscribers();
356
515
  return {
357
516
  result: roles,
358
- changes: collector.toChangeset(),
517
+ changes,
359
518
  };
360
519
  }
361
520
  /** Returns the conclusion premise, or `undefined` if none is set. */
@@ -398,6 +557,11 @@ export class ArgumentEngine {
398
557
  for (const premiseSnap of snapshot.premises) {
399
558
  const pe = PremiseEngine.fromSnapshot(premiseSnap, snapshot.argument, engine.variables, engine.expressionIndex);
400
559
  engine.premises.set(pe.getId(), pe);
560
+ const premiseId = pe.getId();
561
+ pe.setOnMutate(() => {
562
+ engine.reactiveDirty.premiseIds.add(premiseId);
563
+ engine.notifySubscribers();
564
+ });
401
565
  }
402
566
  // Restore conclusion role (don't use setConclusionPremise to avoid auto-assign logic)
403
567
  engine.conclusionPremiseId = snapshot.conclusionPremiseId;
@@ -471,7 +635,22 @@ export class ArgumentEngine {
471
635
  this.premises.set(pe.getId(), pe);
472
636
  }
473
637
  this.conclusionPremiseId = snapshot.conclusionPremiseId;
638
+ for (const pe of this.premises.values()) {
639
+ const premiseId = pe.getId();
640
+ pe.setOnMutate(() => {
641
+ this.reactiveDirty.premiseIds.add(premiseId);
642
+ this.notifySubscribers();
643
+ });
644
+ }
474
645
  this.markDirty();
646
+ this.reactiveDirty = {
647
+ argument: true,
648
+ variables: true,
649
+ roles: true,
650
+ premiseIds: new Set(),
651
+ allPremises: true,
652
+ };
653
+ this.notifySubscribers();
475
654
  }
476
655
  /**
477
656
  * Returns an argument-level checksum combining argument metadata, role
@@ -856,4 +1035,4 @@ export class ArgumentEngine {
856
1035
  };
857
1036
  }
858
1037
  }
859
- //# sourceMappingURL=ArgumentEngine.js.map
1038
+ //# sourceMappingURL=argumentEngine.js.map