@cavelang/cli 0.27.14 → 0.29.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.
- package/Authors.md +5 -0
- package/License.md +6 -0
- package/README.md +122 -24
- package/dist/internal/act/action.d.ts +69 -0
- package/dist/internal/act/action.d.ts.map +1 -0
- package/dist/internal/act/action.js +201 -0
- package/dist/internal/act/action.js.map +1 -0
- package/dist/internal/act/declare.d.ts +102 -0
- package/dist/internal/act/declare.d.ts.map +1 -0
- package/dist/internal/act/declare.js +270 -0
- package/dist/internal/act/declare.js.map +1 -0
- package/dist/internal/act/engine.d.ts +103 -0
- package/dist/internal/act/engine.d.ts.map +1 -0
- package/dist/internal/act/engine.js +298 -0
- package/dist/internal/act/engine.js.map +1 -0
- package/dist/internal/act/index.d.ts +27 -0
- package/dist/internal/act/index.d.ts.map +1 -0
- package/dist/internal/act/index.js +25 -0
- package/dist/internal/act/index.js.map +1 -0
- package/dist/internal/automate/automation.d.ts +78 -0
- package/dist/internal/automate/automation.d.ts.map +1 -0
- package/dist/internal/automate/automation.js +135 -0
- package/dist/internal/automate/automation.js.map +1 -0
- package/dist/internal/automate/declare.d.ts +84 -0
- package/dist/internal/automate/declare.d.ts.map +1 -0
- package/dist/internal/automate/declare.js +233 -0
- package/dist/internal/automate/declare.js.map +1 -0
- package/dist/internal/automate/engine.d.ts +125 -0
- package/dist/internal/automate/engine.d.ts.map +1 -0
- package/dist/internal/automate/engine.js +388 -0
- package/dist/internal/automate/engine.js.map +1 -0
- package/dist/internal/automate/index.d.ts +28 -0
- package/dist/internal/automate/index.d.ts.map +1 -0
- package/dist/internal/automate/index.js +26 -0
- package/dist/internal/automate/index.js.map +1 -0
- package/dist/internal/automate/main.d.ts +26 -0
- package/dist/internal/automate/main.d.ts.map +1 -0
- package/dist/internal/automate/main.js +298 -0
- package/dist/internal/automate/main.js.map +1 -0
- package/dist/internal/connect/index.d.ts +26 -0
- package/dist/internal/connect/index.d.ts.map +1 -0
- package/dist/internal/connect/index.js +24 -0
- package/dist/internal/connect/index.js.map +1 -0
- package/dist/internal/connect/main.d.ts +23 -0
- package/dist/internal/connect/main.d.ts.map +1 -0
- package/dist/internal/connect/main.js +330 -0
- package/dist/internal/connect/main.js.map +1 -0
- package/dist/internal/connect/run.d.ts +85 -0
- package/dist/internal/connect/run.d.ts.map +1 -0
- package/dist/internal/connect/run.js +242 -0
- package/dist/internal/connect/run.js.map +1 -0
- package/dist/internal/connect/source.d.ts +44 -0
- package/dist/internal/connect/source.d.ts.map +1 -0
- package/dist/internal/connect/source.js +215 -0
- package/dist/internal/connect/source.js.map +1 -0
- package/dist/internal/connect/template.d.ts +69 -0
- package/dist/internal/connect/template.d.ts.map +1 -0
- package/dist/internal/connect/template.js +221 -0
- package/dist/internal/connect/template.js.map +1 -0
- package/dist/internal/eval/index.d.ts +28 -0
- package/dist/internal/eval/index.d.ts.map +1 -0
- package/dist/internal/eval/index.js +27 -0
- package/dist/internal/eval/index.js.map +1 -0
- package/dist/internal/eval/judge.d.ts +30 -0
- package/dist/internal/eval/judge.d.ts.map +1 -0
- package/dist/internal/eval/judge.js +101 -0
- package/dist/internal/eval/judge.js.map +1 -0
- package/dist/internal/eval/loop.d.ts +64 -0
- package/dist/internal/eval/loop.d.ts.map +1 -0
- package/dist/internal/eval/loop.js +123 -0
- package/dist/internal/eval/loop.js.map +1 -0
- package/dist/internal/eval/main.d.ts +17 -0
- package/dist/internal/eval/main.d.ts.map +1 -0
- package/dist/internal/eval/main.js +236 -0
- package/dist/internal/eval/main.js.map +1 -0
- package/dist/internal/eval/queries.d.ts +74 -0
- package/dist/internal/eval/queries.d.ts.map +1 -0
- package/dist/internal/eval/queries.js +161 -0
- package/dist/internal/eval/queries.js.map +1 -0
- package/dist/internal/eval/run.d.ts +143 -0
- package/dist/internal/eval/run.d.ts.map +1 -0
- package/dist/internal/eval/run.js +376 -0
- package/dist/internal/eval/run.js.map +1 -0
- package/dist/internal/eval/score.d.ts +81 -0
- package/dist/internal/eval/score.d.ts.map +1 -0
- package/dist/internal/eval/score.js +126 -0
- package/dist/internal/eval/score.js.map +1 -0
- package/dist/internal/eval/suite.d.ts +66 -0
- package/dist/internal/eval/suite.d.ts.map +1 -0
- package/dist/internal/eval/suite.js +130 -0
- package/dist/internal/eval/suite.js.map +1 -0
- package/dist/internal/ingest/context.d.ts +20 -0
- package/dist/internal/ingest/context.d.ts.map +1 -0
- package/dist/internal/ingest/context.js +59 -0
- package/dist/internal/ingest/context.js.map +1 -0
- package/dist/internal/ingest/files.d.ts +46 -0
- package/dist/internal/ingest/files.d.ts.map +1 -0
- package/dist/internal/ingest/files.js +115 -0
- package/dist/internal/ingest/files.js.map +1 -0
- package/dist/internal/ingest/index.d.ts +31 -0
- package/dist/internal/ingest/index.d.ts.map +1 -0
- package/dist/internal/ingest/index.js +29 -0
- package/dist/internal/ingest/index.js.map +1 -0
- package/dist/internal/ingest/main.d.ts +12 -0
- package/dist/internal/ingest/main.d.ts.map +1 -0
- package/dist/internal/ingest/main.js +180 -0
- package/dist/internal/ingest/main.js.map +1 -0
- package/dist/internal/ingest/prompt.d.ts +32 -0
- package/dist/internal/ingest/prompt.d.ts.map +1 -0
- package/dist/internal/ingest/prompt.js +75 -0
- package/dist/internal/ingest/prompt.js.map +1 -0
- package/dist/internal/ingest/run.d.ts +142 -0
- package/dist/internal/ingest/run.d.ts.map +1 -0
- package/dist/internal/ingest/run.js +350 -0
- package/dist/internal/ingest/run.js.map +1 -0
- package/dist/internal/ingest/web.d.ts +48 -0
- package/dist/internal/ingest/web.d.ts.map +1 -0
- package/dist/internal/ingest/web.js +140 -0
- package/dist/internal/ingest/web.js.map +1 -0
- package/dist/internal/loop/demo.d.ts +22 -0
- package/dist/internal/loop/demo.d.ts.map +1 -0
- package/dist/internal/loop/demo.js +67 -0
- package/dist/internal/loop/demo.js.map +1 -0
- package/dist/internal/loop/index.d.ts +20 -0
- package/dist/internal/loop/index.d.ts.map +1 -0
- package/dist/internal/loop/index.js +17 -0
- package/dist/internal/loop/index.js.map +1 -0
- package/dist/internal/loop/llm.d.ts +99 -0
- package/dist/internal/loop/llm.d.ts.map +1 -0
- package/dist/internal/loop/llm.js +231 -0
- package/dist/internal/loop/llm.js.map +1 -0
- package/dist/internal/loop/reconstruct.d.ts +87 -0
- package/dist/internal/loop/reconstruct.d.ts.map +1 -0
- package/dist/internal/loop/reconstruct.js +157 -0
- package/dist/internal/loop/reconstruct.js.map +1 -0
- package/dist/internal/loop/sqlite.d.ts +13 -0
- package/dist/internal/loop/sqlite.d.ts.map +1 -0
- package/dist/internal/loop/sqlite.js +33 -0
- package/dist/internal/loop/sqlite.js.map +1 -0
- package/dist/internal/loop/store.d.ts +50 -0
- package/dist/internal/loop/store.d.ts.map +1 -0
- package/dist/internal/loop/store.js +100 -0
- package/dist/internal/loop/store.js.map +1 -0
- package/dist/internal/mcp/bin.d.ts +7 -0
- package/dist/internal/mcp/bin.d.ts.map +1 -0
- package/dist/internal/mcp/bin.js +8 -0
- package/dist/internal/mcp/bin.js.map +1 -0
- package/dist/internal/mcp/index.d.ts +25 -0
- package/dist/internal/mcp/index.d.ts.map +1 -0
- package/dist/internal/mcp/index.js +23 -0
- package/dist/internal/mcp/index.js.map +1 -0
- package/dist/internal/mcp/main.d.ts +23 -0
- package/dist/internal/mcp/main.d.ts.map +1 -0
- package/dist/internal/mcp/main.js +156 -0
- package/dist/internal/mcp/main.js.map +1 -0
- package/dist/internal/mcp/server.d.ts +92 -0
- package/dist/internal/mcp/server.d.ts.map +1 -0
- package/dist/internal/mcp/server.js +251 -0
- package/dist/internal/mcp/server.js.map +1 -0
- package/dist/internal/mcp/tools.d.ts +91 -0
- package/dist/internal/mcp/tools.d.ts.map +1 -0
- package/dist/internal/mcp/tools.js +584 -0
- package/dist/internal/mcp/tools.js.map +1 -0
- package/dist/internal/rules/declare.d.ts +58 -0
- package/dist/internal/rules/declare.d.ts.map +1 -0
- package/dist/internal/rules/declare.js +152 -0
- package/dist/internal/rules/declare.js.map +1 -0
- package/dist/internal/rules/engine.d.ts +125 -0
- package/dist/internal/rules/engine.d.ts.map +1 -0
- package/dist/internal/rules/engine.js +575 -0
- package/dist/internal/rules/engine.js.map +1 -0
- package/dist/internal/rules/index.d.ts +23 -0
- package/dist/internal/rules/index.d.ts.map +1 -0
- package/dist/internal/rules/index.js +21 -0
- package/dist/internal/rules/index.js.map +1 -0
- package/dist/internal/rules/rule.d.ts +88 -0
- package/dist/internal/rules/rule.d.ts.map +1 -0
- package/dist/internal/rules/rule.js +221 -0
- package/dist/internal/rules/rule.js.map +1 -0
- package/dist/internal/shape/check.d.ts +118 -0
- package/dist/internal/shape/check.d.ts.map +1 -0
- package/dist/internal/shape/check.js +331 -0
- package/dist/internal/shape/check.js.map +1 -0
- package/dist/internal/shape/client.d.ts +31 -0
- package/dist/internal/shape/client.d.ts.map +1 -0
- package/dist/internal/shape/client.js +170 -0
- package/dist/internal/shape/client.js.map +1 -0
- package/dist/internal/shape/gate.d.ts +33 -0
- package/dist/internal/shape/gate.d.ts.map +1 -0
- package/dist/internal/shape/gate.js +0 -0
- package/dist/internal/shape/gate.js.map +1 -0
- package/dist/internal/shape/index.d.ts +27 -0
- package/dist/internal/shape/index.d.ts.map +1 -0
- package/dist/internal/shape/index.js +23 -0
- package/dist/internal/shape/index.js.map +1 -0
- package/dist/internal/shape/suggest.d.ts +82 -0
- package/dist/internal/shape/suggest.d.ts.map +1 -0
- package/dist/internal/shape/suggest.js +374 -0
- package/dist/internal/shape/suggest.js.map +1 -0
- package/dist/internal/sync/index.d.ts +22 -0
- package/dist/internal/sync/index.d.ts.map +1 -0
- package/dist/internal/sync/index.js +21 -0
- package/dist/internal/sync/index.js.map +1 -0
- package/dist/internal/sync/sync.d.ts +95 -0
- package/dist/internal/sync/sync.d.ts.map +1 -0
- package/dist/internal/sync/sync.js +342 -0
- package/dist/internal/sync/sync.js.map +1 -0
- package/dist/internal/view/api.d.ts +196 -0
- package/dist/internal/view/api.d.ts.map +1 -0
- package/dist/internal/view/api.js +189 -0
- package/dist/internal/view/api.js.map +1 -0
- package/dist/internal/view/index.d.ts +33 -0
- package/dist/internal/view/index.d.ts.map +1 -0
- package/dist/internal/view/index.js +30 -0
- package/dist/internal/view/index.js.map +1 -0
- package/dist/internal/view/main.d.ts +11 -0
- package/dist/internal/view/main.d.ts.map +1 -0
- package/dist/internal/view/main.js +98 -0
- package/dist/internal/view/main.js.map +1 -0
- package/dist/internal/view/page.d.ts +14 -0
- package/dist/internal/view/page.d.ts.map +1 -0
- package/dist/internal/view/page.js +370 -0
- package/dist/internal/view/page.js.map +1 -0
- package/dist/internal/view/report.d.ts +52 -0
- package/dist/internal/view/report.d.ts.map +1 -0
- package/dist/internal/view/report.js +367 -0
- package/dist/internal/view/report.js.map +1 -0
- package/dist/internal/view/scope.d.ts +11 -0
- package/dist/internal/view/scope.d.ts.map +1 -0
- package/dist/internal/view/scope.js +41 -0
- package/dist/internal/view/scope.js.map +1 -0
- package/dist/internal/view/server.d.ts +35 -0
- package/dist/internal/view/server.d.ts.map +1 -0
- package/dist/internal/view/server.js +141 -0
- package/dist/internal/view/server.js.map +1 -0
- package/dist/src/act.d.ts +3 -0
- package/dist/src/act.d.ts.map +1 -0
- package/dist/src/act.js +3 -0
- package/dist/src/act.js.map +1 -0
- package/dist/src/automate.d.ts +3 -0
- package/dist/src/automate.d.ts.map +1 -0
- package/dist/src/automate.js +3 -0
- package/dist/src/automate.js.map +1 -0
- package/dist/src/cli.d.ts +24 -17
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +408 -107
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands.d.ts +104 -0
- package/dist/src/commands.d.ts.map +1 -0
- package/dist/src/commands.js +33 -0
- package/dist/src/commands.js.map +1 -0
- package/dist/src/connect.d.ts +3 -0
- package/dist/src/connect.d.ts.map +1 -0
- package/dist/src/connect.js +3 -0
- package/dist/src/connect.js.map +1 -0
- package/dist/src/dispatch.d.ts +14 -0
- package/dist/src/dispatch.d.ts.map +1 -0
- package/dist/src/dispatch.js +116 -0
- package/dist/src/dispatch.js.map +1 -0
- package/dist/src/doctor.d.ts +45 -0
- package/dist/src/doctor.d.ts.map +1 -0
- package/dist/src/doctor.js +284 -0
- package/dist/src/doctor.js.map +1 -0
- package/dist/src/eval.d.ts +3 -0
- package/dist/src/eval.d.ts.map +1 -0
- package/dist/src/eval.js +3 -0
- package/dist/src/eval.js.map +1 -0
- package/dist/src/index.d.ts +9 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +6 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/ingest.d.ts +3 -0
- package/dist/src/ingest.d.ts.map +1 -0
- package/dist/src/ingest.js +3 -0
- package/dist/src/ingest.js.map +1 -0
- package/dist/src/loop.d.ts +3 -0
- package/dist/src/loop.d.ts.map +1 -0
- package/dist/src/loop.js +3 -0
- package/dist/src/loop.js.map +1 -0
- package/dist/src/main.d.ts +1 -1
- package/dist/src/main.d.ts.map +1 -1
- package/dist/src/main.js +3 -75
- package/dist/src/main.js.map +1 -1
- package/dist/src/mcp.d.ts +3 -0
- package/dist/src/mcp.d.ts.map +1 -0
- package/dist/src/mcp.js +3 -0
- package/dist/src/mcp.js.map +1 -0
- package/dist/src/rules.d.ts +3 -0
- package/dist/src/rules.d.ts.map +1 -0
- package/dist/src/rules.js +3 -0
- package/dist/src/rules.js.map +1 -0
- package/dist/src/shape.d.ts +3 -0
- package/dist/src/shape.d.ts.map +1 -0
- package/dist/src/shape.js +3 -0
- package/dist/src/shape.js.map +1 -0
- package/dist/src/sync.d.ts +3 -0
- package/dist/src/sync.d.ts.map +1 -0
- package/dist/src/sync.js +3 -0
- package/dist/src/sync.js.map +1 -0
- package/dist/src/view.d.ts +3 -0
- package/dist/src/view.d.ts.map +1 -0
- package/dist/src/view.js +3 -0
- package/dist/src/view.js.map +1 -0
- package/package.json +81 -21
- package/src/act.ts +2 -0
- package/src/automate.ts +2 -0
- package/src/cli.ts +416 -102
- package/src/commands.ts +48 -0
- package/src/connect.ts +2 -0
- package/src/dispatch.ts +141 -0
- package/src/doctor.ts +370 -0
- package/src/eval.ts +2 -0
- package/src/index.ts +9 -2
- package/src/ingest.ts +2 -0
- package/src/loop.ts +2 -0
- package/src/main.ts +3 -66
- package/src/mcp.ts +2 -0
- package/src/rules.ts +2 -0
- package/src/shape.ts +2 -0
- package/src/sync.ts +2 -0
- package/src/view.ts +2 -0
|
@@ -0,0 +1,575 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The forward-chaining derivation engine (spec §24.2–§24.5).
|
|
3
|
+
*
|
|
4
|
+
* Rules live in the store as ordinary claims (§24.1's declaration shape),
|
|
5
|
+
* so derived claims can point lineage edges at them:
|
|
6
|
+
*
|
|
7
|
+
* ```cave
|
|
8
|
+
* rule/9f30ac9be4dd HAS rule: `?x NEEDS ?y, ?y NEEDS ?z => ?x NEEDS ?z` @src:cave-derive
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* `derive` fires every current positive rule over current beliefs and
|
|
12
|
+
* appends what follows:
|
|
13
|
+
*
|
|
14
|
+
* - premises join left-to-right, each partial binding specializing the
|
|
15
|
+
* next pattern and running it through the ordinary CAVE-Q compiler —
|
|
16
|
+
* inverse verbs, transitive hops and the alias closure come for free;
|
|
17
|
+
* - conclusion confidence is noisy-AND (`@cavelang/fusion`, the
|
|
18
|
+
* independence assumption explicit): rule conf × Π premise-row confs;
|
|
19
|
+
* several derivations of one conclusion keep the strongest (§24.2);
|
|
20
|
+
* - derived rows are stamped `@src:rule/<digest>` (§9.5) and linked
|
|
21
|
+
* `BECAUSE` to their specific premise rows and `VIA` to the rule's
|
|
22
|
+
* declaration row (§24.3);
|
|
23
|
+
* - re-runs are idempotent — a conclusion equal to current belief appends
|
|
24
|
+
* nothing — and incremental by per-rule tx watermark claims: a rule
|
|
25
|
+
* re-fires only when rows recorded since its watermark could extend a
|
|
26
|
+
* premise match, and a watermark predating the rule's current
|
|
27
|
+
* declaration row is stale — a re-declared rule fires from scratch
|
|
28
|
+
* (§24.4);
|
|
29
|
+
* - support is recomputed on every firing: previously-derived claims the
|
|
30
|
+
* rule no longer concludes are retracted `@ 0%`, and while a fired
|
|
31
|
+
* rule's earlier derivations are being re-established they are invisible
|
|
32
|
+
* to premise matching unless re-supported — so retracting a premise
|
|
33
|
+
* retracts the whole dependent chain, mutually-supporting cycles
|
|
34
|
+
* included (§24.5).
|
|
35
|
+
*/
|
|
36
|
+
import { Claim, Confidence, Context, Key, Value, Verb } from '@cavelang/core';
|
|
37
|
+
import * as Canonical from '@cavelang/canonical';
|
|
38
|
+
import { noisyAndIndependent } from '@cavelang/fusion';
|
|
39
|
+
import { Row } from '@cavelang/store';
|
|
40
|
+
import { match } from '@cavelang/query';
|
|
41
|
+
import * as Rule from "./rule.js";
|
|
42
|
+
/** Attribute of rule declaration claims: `rule/<digest> HAS rule: …`. */
|
|
43
|
+
export const ruleAttribute = 'rule';
|
|
44
|
+
/** Attribute of per-rule watermark claims (§24.4). */
|
|
45
|
+
export const watermarkAttribute = 'derive-watermark';
|
|
46
|
+
/** Source context stamped on declarations and bookkeeping (like `src:cave-connect`). */
|
|
47
|
+
export const provenanceContext = 'src:cave-derive';
|
|
48
|
+
/** Declaration subject of a rule: its digest under the `rule/` scope. */
|
|
49
|
+
export const ruleSubject = (digest) => `rule/${digest}`;
|
|
50
|
+
export const defaultMinConf = 0.05;
|
|
51
|
+
export const defaultMaxPasses = 20;
|
|
52
|
+
const safeAtomRe = /^[A-Za-z0-9][A-Za-z0-9._/+-]*$/;
|
|
53
|
+
/** In-band vocabulary declarations are append-only and never lifecycle-retracted. */
|
|
54
|
+
const isDeclaration = (row) => row.verb === 'REVERSE' || row.verb === 'RENAMED-TO' ||
|
|
55
|
+
(row.verb === 'IS' && row.object === 'verb');
|
|
56
|
+
const isDeclarationClaim = (claim) => claim.verb === 'REVERSE' || claim.verb === 'RENAMED-TO' ||
|
|
57
|
+
(claim.verb === 'IS' && claim.payload.kind === 'relation' &&
|
|
58
|
+
claim.payload.object.kind === 'entity' && claim.payload.object.text === 'verb');
|
|
59
|
+
/** Claim key of a `subject HAS <attribute>: … @src:cave-derive` bookkeeping claim. */
|
|
60
|
+
const bookkeepingKey = (subject, attribute) => Key.of(Claim.of({
|
|
61
|
+
subject: Claim.entity(subject),
|
|
62
|
+
verb: 'HAS',
|
|
63
|
+
payload: Claim.attribute(attribute, Value.parse('x')),
|
|
64
|
+
contexts: [provenanceContext]
|
|
65
|
+
}));
|
|
66
|
+
const maxTx = (store) => store.db.prepare('SELECT MAX(tx) AS t FROM cave_claim').get().t ?? undefined;
|
|
67
|
+
/** Latest row per claim key among `rows` — the series current beliefs. */
|
|
68
|
+
const latestPerKey = (rows) => {
|
|
69
|
+
const latest = new Map();
|
|
70
|
+
for (const row of rows) {
|
|
71
|
+
const seen = latest.get(row.claim_key);
|
|
72
|
+
if (seen === undefined || seen.tx < row.tx) {
|
|
73
|
+
latest.set(row.claim_key, row);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return latest;
|
|
77
|
+
};
|
|
78
|
+
/** Appends a retraction — the row's claim at `@ 0%`, same claim key (§9.3). */
|
|
79
|
+
const retract = (store, row, comment) => {
|
|
80
|
+
store.insertResult({
|
|
81
|
+
claims: [{ claim: { ...store.toClaim(row), conf: 0, raw: '', comment }, line: 0 }],
|
|
82
|
+
edges: [],
|
|
83
|
+
registry: store.registry(),
|
|
84
|
+
problems: []
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Loads every current positive rule declaration (attribute `rule`),
|
|
89
|
+
* parses the rule text and dedupes by digest.
|
|
90
|
+
*/
|
|
91
|
+
const loadRules = (store) => {
|
|
92
|
+
const loaded = [];
|
|
93
|
+
const problems = [];
|
|
94
|
+
const notes = [];
|
|
95
|
+
const byDigest = new Map();
|
|
96
|
+
const declarations = store.currentBeliefs().filter(row => row.verb === 'HAS' && row.attribute === ruleAttribute && row.negated === 0 && row.conf > 0 && row.value_text !== null);
|
|
97
|
+
for (const row of declarations) {
|
|
98
|
+
const text = Row.parseValue(row.value_text).raw;
|
|
99
|
+
const parsed = Rule.parse(text);
|
|
100
|
+
if (!parsed.ok) {
|
|
101
|
+
problems.push({ subject: row.subject, problems: parsed.problems });
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
const seenAs = byDigest.get(parsed.rule.digest);
|
|
105
|
+
if (seenAs !== undefined) {
|
|
106
|
+
notes.push(`${row.subject} duplicates ${seenAs} — one rule, first declaration fires`);
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
byDigest.set(parsed.rule.digest, row.subject);
|
|
110
|
+
const label = parsed.rule.label ?? row.comment ?? undefined;
|
|
111
|
+
loaded.push({
|
|
112
|
+
rule: parsed.rule,
|
|
113
|
+
row,
|
|
114
|
+
outcome: {
|
|
115
|
+
subject: row.subject,
|
|
116
|
+
digest: parsed.rule.digest,
|
|
117
|
+
text: parsed.rule.text,
|
|
118
|
+
...label === undefined ? {} : { label },
|
|
119
|
+
fired: false,
|
|
120
|
+
evaluations: 0,
|
|
121
|
+
solutions: 0,
|
|
122
|
+
appended: 0,
|
|
123
|
+
updated: 0,
|
|
124
|
+
unchanged: 0,
|
|
125
|
+
retracted: 0,
|
|
126
|
+
problems: []
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
return { loaded, problems, notes };
|
|
131
|
+
};
|
|
132
|
+
/**
|
|
133
|
+
* Could a row recorded after `mark` extend a match of one of the rule's
|
|
134
|
+
* premises? A *shape* test — subject/verb/object/attribute/negated plus
|
|
135
|
+
* context and tag membership; confidence and currency are ignored, so a
|
|
136
|
+
* retraction row re-fires the rules its claim used to feed (§24.5).
|
|
137
|
+
* Over-matching costs a harmless re-evaluation; under-matching would be a
|
|
138
|
+
* correctness bug — under `aliases`, entity terms are dropped from the
|
|
139
|
+
* test (closure membership can widen any name) and any new `ALIAS` row
|
|
140
|
+
* fires too.
|
|
141
|
+
*/
|
|
142
|
+
const shapeMatchesSince = (store, rule, mark, aliases) => {
|
|
143
|
+
const registry = store.registry();
|
|
144
|
+
for (const premise of rule.premises) {
|
|
145
|
+
if (premise.kind !== 'pattern') {
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
let verb = premise.pattern.verb;
|
|
149
|
+
let subjectSlot = premise.pattern.subject;
|
|
150
|
+
let objectSlot = premise.pattern.payload.kind === 'object' ? premise.pattern.payload.object : undefined;
|
|
151
|
+
if (verb.kind === 'verb') {
|
|
152
|
+
const { primary, isInverse } = Canonical.Registry.primaryOf(registry, verb.name);
|
|
153
|
+
if (isInverse) {
|
|
154
|
+
const swapped = objectSlot ?? { kind: 'wildcard' };
|
|
155
|
+
objectSlot = subjectSlot;
|
|
156
|
+
subjectSlot = swapped;
|
|
157
|
+
verb = { kind: 'verb', name: primary, transitive: verb.transitive };
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
verb = { kind: 'verb', name: primary, transitive: verb.transitive };
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
const transitive = verb.kind === 'verb' && verb.transitive;
|
|
164
|
+
const conditions = ['c.tx > ?'];
|
|
165
|
+
const params = [mark];
|
|
166
|
+
if (verb.kind === 'verb') {
|
|
167
|
+
conditions.push('c.verb = ?');
|
|
168
|
+
params.push(verb.name);
|
|
169
|
+
}
|
|
170
|
+
conditions.push(`c.negated = ${!transitive && premise.pattern.negated ? 1 : 0}`);
|
|
171
|
+
if (transitive) {
|
|
172
|
+
// Any new edge of the verb can extend a path — endpoints unbounded.
|
|
173
|
+
conditions.push('c.object IS NOT NULL');
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
if (subjectSlot.kind === 'term' && !aliases) {
|
|
177
|
+
conditions.push('c.subject = ?');
|
|
178
|
+
params.push(subjectSlot.text);
|
|
179
|
+
}
|
|
180
|
+
if (objectSlot?.kind === 'term' && !aliases) {
|
|
181
|
+
// A date/number object also matches metric rows (value in value_text).
|
|
182
|
+
conditions.push('(c.object = ? OR c.value_text = ?)');
|
|
183
|
+
params.push(objectSlot.text, objectSlot.text);
|
|
184
|
+
}
|
|
185
|
+
if (premise.pattern.payload.kind === 'attribute') {
|
|
186
|
+
conditions.push('c.attribute = ?');
|
|
187
|
+
params.push(premise.pattern.payload.attribute);
|
|
188
|
+
if (premise.pattern.payload.value.kind === 'term') {
|
|
189
|
+
conditions.push('c.value_text = ?');
|
|
190
|
+
params.push(premise.pattern.payload.value.text);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
for (const context of premise.pattern.contexts) {
|
|
195
|
+
conditions.push('EXISTS (SELECT 1 FROM cave_context x WHERE x.claim_id = c.id AND x.context = ?)');
|
|
196
|
+
params.push(context);
|
|
197
|
+
}
|
|
198
|
+
for (const tag of premise.pattern.tags) {
|
|
199
|
+
if (tag.value === undefined) {
|
|
200
|
+
conditions.push('EXISTS (SELECT 1 FROM cave_tag t WHERE t.claim_id = c.id AND t.key = ? AND t.value IS NULL)');
|
|
201
|
+
params.push(tag.key);
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
conditions.push('EXISTS (SELECT 1 FROM cave_tag t WHERE t.claim_id = c.id AND t.key = ? AND t.value = ?)');
|
|
205
|
+
params.push(tag.key, tag.value);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
const row = store.db.prepare(`SELECT 1 AS hit FROM cave_claim c WHERE ${conditions.join(' AND ')} LIMIT 1`)
|
|
209
|
+
.get(...params);
|
|
210
|
+
if (row !== undefined) {
|
|
211
|
+
return true;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
if (aliases) {
|
|
215
|
+
const row = store.db.prepare("SELECT 1 AS hit FROM cave_claim c WHERE c.tx > ? AND c.verb = 'ALIAS' LIMIT 1").get(mark);
|
|
216
|
+
if (row !== undefined) {
|
|
217
|
+
return true;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return false;
|
|
221
|
+
};
|
|
222
|
+
/**
|
|
223
|
+
* Specializes a pattern under partial bindings: bound variables become
|
|
224
|
+
* terms, so each join step runs an ordinary CAVE-Q query. Shared with
|
|
225
|
+
* `@cavelang/cli/act`, whose premise evaluation is the same left-to-right
|
|
226
|
+
* join with parameters pre-bound (spec §25.2).
|
|
227
|
+
* @returns `undefined` when a verb variable is bound to a non-verb —
|
|
228
|
+
* no row can match.
|
|
229
|
+
*/
|
|
230
|
+
export const specialize = (pattern, bindings) => {
|
|
231
|
+
const slot = (candidate) => candidate.kind === 'var' && bindings[candidate.name] !== undefined ?
|
|
232
|
+
{ kind: 'term', text: bindings[candidate.name] } :
|
|
233
|
+
candidate;
|
|
234
|
+
let verb = pattern.verb;
|
|
235
|
+
if (verb.kind === 'var' && bindings[verb.name] !== undefined) {
|
|
236
|
+
const name = bindings[verb.name];
|
|
237
|
+
if (!Verb.isVerbToken(name)) {
|
|
238
|
+
return undefined;
|
|
239
|
+
}
|
|
240
|
+
verb = { kind: 'verb', name, transitive: false };
|
|
241
|
+
}
|
|
242
|
+
const payload = pattern.payload.kind === 'object' ? { kind: 'object', object: slot(pattern.payload.object) } :
|
|
243
|
+
pattern.payload.kind === 'attribute' ? { kind: 'attribute', attribute: pattern.payload.attribute, value: slot(pattern.payload.value) } :
|
|
244
|
+
pattern.payload;
|
|
245
|
+
return { ...pattern, subject: slot(pattern.subject), verb, payload };
|
|
246
|
+
};
|
|
247
|
+
/** Evaluates a `?var op value` constraint against the variable's binding. */
|
|
248
|
+
export const satisfies = (bound, op, literal) => {
|
|
249
|
+
if (bound === undefined) {
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
const value = Row.parseValue(bound);
|
|
253
|
+
if (value.num !== undefined && literal.num !== undefined) {
|
|
254
|
+
// A unit on the constraint demands the same unit on the value; a bare
|
|
255
|
+
// numeric constraint compares numbers regardless of unit.
|
|
256
|
+
if (literal.unit !== undefined && value.unit !== literal.unit) {
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
259
|
+
switch (op) {
|
|
260
|
+
case '=': return value.num === literal.num;
|
|
261
|
+
case '!=': return value.num !== literal.num;
|
|
262
|
+
case '>': return value.num > literal.num;
|
|
263
|
+
case '>=': return value.num >= literal.num;
|
|
264
|
+
case '<': return value.num < literal.num;
|
|
265
|
+
case '<=': return value.num <= literal.num;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
if (op === '=') {
|
|
269
|
+
return value.raw === literal.raw;
|
|
270
|
+
}
|
|
271
|
+
if (op === '!=') {
|
|
272
|
+
return value.raw !== literal.raw;
|
|
273
|
+
}
|
|
274
|
+
return false;
|
|
275
|
+
};
|
|
276
|
+
/**
|
|
277
|
+
* A bound value substituted into a conclusion term slot. Stored bindings
|
|
278
|
+
* are formatted (`"…"`/`` `…` `` literals keep their delimiters); bare
|
|
279
|
+
* text that would not re-tokenize as one term is wrapped as a text
|
|
280
|
+
* literal — except number/date values in payload position, which the
|
|
281
|
+
* pipeline classifies as metrics.
|
|
282
|
+
*/
|
|
283
|
+
export const boundTerm = (bound, position) => {
|
|
284
|
+
const term = Row.parseTerm(bound);
|
|
285
|
+
if (term.kind !== 'entity') {
|
|
286
|
+
return term;
|
|
287
|
+
}
|
|
288
|
+
if (safeAtomRe.test(term.text)) {
|
|
289
|
+
return term;
|
|
290
|
+
}
|
|
291
|
+
if (position === 'payload') {
|
|
292
|
+
const value = Value.parse(term.text);
|
|
293
|
+
if (value.kind === 'number' || value.kind === 'date') {
|
|
294
|
+
return term;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return Claim.text(term.text);
|
|
298
|
+
};
|
|
299
|
+
/**
|
|
300
|
+
* Instantiates the conclusion template for one solution and pushes it
|
|
301
|
+
* through the ordinary emit → canonicalize pipeline, so inverse verbs
|
|
302
|
+
* swap, entities normalize, and the stored `raw_line` is the canonical
|
|
303
|
+
* text (§24.2). The claim key is computed on the *stamped* claim — the
|
|
304
|
+
* same claim `insertResult` will key.
|
|
305
|
+
*/
|
|
306
|
+
const conclude = (rule, solution, registry) => {
|
|
307
|
+
const template = rule.conclusion;
|
|
308
|
+
const term = (candidate, position) => candidate.kind === 'entity' && candidate.text.startsWith('?') && candidate.text.length > 1 ?
|
|
309
|
+
boundTerm(solution.bindings[candidate.text.slice(1)], position) :
|
|
310
|
+
candidate;
|
|
311
|
+
let payload = template.payload;
|
|
312
|
+
if (payload.kind === 'relation') {
|
|
313
|
+
payload = Claim.relation(term(payload.object, 'payload'));
|
|
314
|
+
}
|
|
315
|
+
else if (payload.kind === 'attribute' && payload.value.kind === 'atom' && payload.value.raw.startsWith('?')) {
|
|
316
|
+
payload = Claim.attribute(payload.attribute, Row.parseValue(solution.bindings[payload.value.raw.slice(1)]));
|
|
317
|
+
}
|
|
318
|
+
else if (payload.kind === 'metric' && payload.value.kind === 'atom' && payload.value.raw.startsWith('?')) {
|
|
319
|
+
payload = Claim.metric(Row.parseValue(solution.bindings[payload.value.raw.slice(1)]));
|
|
320
|
+
}
|
|
321
|
+
const conf = Confidence.parse(Confidence.format(noisyAndIndependent(rule.conf, solution.rows.map(row => row.conf))));
|
|
322
|
+
const draft = Claim.of({
|
|
323
|
+
subject: term(template.subject, 'subject'),
|
|
324
|
+
verb: template.verb,
|
|
325
|
+
negated: template.negated,
|
|
326
|
+
payload,
|
|
327
|
+
contexts: template.meta.contexts,
|
|
328
|
+
tags: template.meta.tags,
|
|
329
|
+
importance: template.meta.importance,
|
|
330
|
+
conf,
|
|
331
|
+
...template.meta.comment === undefined ? {} : { comment: template.meta.comment }
|
|
332
|
+
});
|
|
333
|
+
const result = Canonical.canonicalizeText(Canonical.emitClaim(draft), registry);
|
|
334
|
+
const claim = result.claims[0]?.claim;
|
|
335
|
+
if (result.problems.length > 0 || claim === undefined) {
|
|
336
|
+
const detail = result.problems.map(problem => problem.message).join('; ');
|
|
337
|
+
return { problem: `conclusion ${JSON.stringify(Canonical.emitClaim(draft))} did not canonicalize${detail === '' ? '' : ` — ${detail}`}` };
|
|
338
|
+
}
|
|
339
|
+
// Lifecycle stamp (spec §9.5, §24.3): applied even when the template
|
|
340
|
+
// names its own `src:` — suspension and `--retract` find derived rows
|
|
341
|
+
// by this context, so an authored source must not displace it.
|
|
342
|
+
const stamp = Context.source(ruleSubject(rule.digest));
|
|
343
|
+
const stamped = claim.contexts.includes(stamp) ?
|
|
344
|
+
claim :
|
|
345
|
+
{ ...claim, contexts: [...claim.contexts, stamp] };
|
|
346
|
+
return { conclusion: { key: Key.of(stamped), claim, conf: stamped.conf, rows: solution.rows } };
|
|
347
|
+
};
|
|
348
|
+
const rollback = Symbol('cave-derive dry run');
|
|
349
|
+
/**
|
|
350
|
+
* Fires the store's rules to fixpoint (§24.2). See the module doc for the
|
|
351
|
+
* semantics; `dryRun` computes the same report inside a rolled-back
|
|
352
|
+
* transaction.
|
|
353
|
+
*/
|
|
354
|
+
export const derive = (store, options = {}) => {
|
|
355
|
+
const minConf = options.minConf ?? defaultMinConf;
|
|
356
|
+
const maxPasses = options.maxPasses ?? defaultMaxPasses;
|
|
357
|
+
const aliases = options.aliases === true;
|
|
358
|
+
const { loaded, problems, notes } = loadRules(store);
|
|
359
|
+
let passes = 0;
|
|
360
|
+
const supported = new Set();
|
|
361
|
+
/** Suspended rows (§24.5): a fired rule's prior derivations, by row id. */
|
|
362
|
+
const suspended = new Map();
|
|
363
|
+
const fired = new Set();
|
|
364
|
+
/** Per-rule scan mark: rows at or before it are fully accounted for. */
|
|
365
|
+
const marks = new Map();
|
|
366
|
+
const storedMarks = new Map();
|
|
367
|
+
let complete = true;
|
|
368
|
+
for (const { rule, row } of loaded) {
|
|
369
|
+
const watermark = store.currentBelief(bookkeepingKey(ruleSubject(rule.digest), watermarkAttribute));
|
|
370
|
+
// A watermark is trusted only when it postdates the current
|
|
371
|
+
// declaration row: retracting and re-declaring a rule keeps its
|
|
372
|
+
// digest — and so its watermark claim key — while the conclusions
|
|
373
|
+
// were retracted with it, so an older watermark would skip every
|
|
374
|
+
// pre-existing premise (BUGS.md stale-rule-watermark). A re-declared
|
|
375
|
+
// rule fires from scratch.
|
|
376
|
+
const stored = watermark !== undefined && watermark.conf > 0 && watermark.tx > row.tx ?
|
|
377
|
+
watermark.value_text ?? undefined :
|
|
378
|
+
undefined;
|
|
379
|
+
storedMarks.set(rule.digest, stored);
|
|
380
|
+
marks.set(rule.digest, options.full === true ? undefined : stored);
|
|
381
|
+
}
|
|
382
|
+
const suspend = (entry) => {
|
|
383
|
+
const rows = store.byProvenance('run', ruleSubject(entry.rule.digest));
|
|
384
|
+
for (const row of latestPerKey(rows).values()) {
|
|
385
|
+
if (row.conf > 0 && !isDeclaration(row)) {
|
|
386
|
+
suspended.set(row.id, { row, outcome: entry.outcome });
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
};
|
|
390
|
+
/** Premise matches, minus suspended rows that have not been re-supported. */
|
|
391
|
+
const matchPremise = (pattern) => match(store, pattern, { aliases }).filter(entry => entry.row === undefined || !suspended.has(entry.row.id) || supported.has(entry.row.claim_key));
|
|
392
|
+
const evaluate = (entry) => {
|
|
393
|
+
const { rule, row, outcome } = entry;
|
|
394
|
+
let progress = false;
|
|
395
|
+
let solutions = [{ bindings: {}, rows: [] }];
|
|
396
|
+
for (const premise of rule.premises) {
|
|
397
|
+
if (premise.kind === 'constraint') {
|
|
398
|
+
solutions = solutions.filter(solution => satisfies(solution.bindings[premise.variable], premise.op, premise.value));
|
|
399
|
+
}
|
|
400
|
+
else {
|
|
401
|
+
solutions = solutions.flatMap(solution => {
|
|
402
|
+
const pattern = specialize(premise.pattern, solution.bindings);
|
|
403
|
+
if (pattern === undefined) {
|
|
404
|
+
return [];
|
|
405
|
+
}
|
|
406
|
+
return matchPremise(pattern).map(found => ({
|
|
407
|
+
bindings: { ...solution.bindings, ...found.bindings },
|
|
408
|
+
rows: found.row === undefined ? solution.rows : [...solution.rows, found.row]
|
|
409
|
+
}));
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
if (solutions.length === 0) {
|
|
413
|
+
break;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
outcome.evaluations += 1;
|
|
417
|
+
outcome.solutions = solutions.length;
|
|
418
|
+
/** Strongest derivation per conclusion key (§24.2). */
|
|
419
|
+
const best = new Map();
|
|
420
|
+
for (const solution of solutions) {
|
|
421
|
+
const { conclusion, problem } = conclude(rule, solution, store.registry());
|
|
422
|
+
if (problem !== undefined) {
|
|
423
|
+
if (!outcome.problems.includes(problem)) {
|
|
424
|
+
outcome.problems.push(problem);
|
|
425
|
+
}
|
|
426
|
+
continue;
|
|
427
|
+
}
|
|
428
|
+
const seen = best.get(conclusion.key);
|
|
429
|
+
if (seen === undefined || conclusion.conf > seen.conf) {
|
|
430
|
+
best.set(conclusion.key, conclusion);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
for (const conclusion of best.values()) {
|
|
434
|
+
if (conclusion.conf < minConf) {
|
|
435
|
+
continue;
|
|
436
|
+
}
|
|
437
|
+
if (!supported.has(conclusion.key)) {
|
|
438
|
+
supported.add(conclusion.key);
|
|
439
|
+
progress = true;
|
|
440
|
+
}
|
|
441
|
+
const current = store.currentBelief(conclusion.key);
|
|
442
|
+
const columns = Row.toColumns(conclusion.claim);
|
|
443
|
+
if (current !== undefined && current.conf > 0 &&
|
|
444
|
+
Math.abs(current.conf - conclusion.conf) < 1e-9 && current.value_text === columns.valueText) {
|
|
445
|
+
outcome.unchanged += 1;
|
|
446
|
+
continue;
|
|
447
|
+
}
|
|
448
|
+
const inserted = store.insertResult({ claims: [{ claim: conclusion.claim, line: 0 }], edges: [], registry: store.registry(), problems: [] }, { source: ruleSubject(rule.digest), lifecycle: true });
|
|
449
|
+
// `conclude` returns the claim rather than its one-line registry
|
|
450
|
+
// result. Replay all stored declarations after a generated vocabulary
|
|
451
|
+
// claim so later rules and fixpoint passes see it immediately.
|
|
452
|
+
if (isDeclarationClaim(conclusion.claim)) {
|
|
453
|
+
store.reloadRegistry();
|
|
454
|
+
}
|
|
455
|
+
const id = inserted.ids[0];
|
|
456
|
+
const premiseIds = [...new Set(conclusion.rows.map(premiseRow => premiseRow.id))];
|
|
457
|
+
store.appendEdges([
|
|
458
|
+
...premiseIds.map(childId => ({ parentId: id, role: 'BECAUSE', childId })),
|
|
459
|
+
{ parentId: id, role: 'VIA', childId: row.id }
|
|
460
|
+
]);
|
|
461
|
+
if (current === undefined || current.conf === 0) {
|
|
462
|
+
outcome.appended += 1;
|
|
463
|
+
}
|
|
464
|
+
else {
|
|
465
|
+
outcome.updated += 1;
|
|
466
|
+
}
|
|
467
|
+
progress = true;
|
|
468
|
+
}
|
|
469
|
+
return progress;
|
|
470
|
+
};
|
|
471
|
+
const run = () => {
|
|
472
|
+
const truncate = () => {
|
|
473
|
+
complete = false;
|
|
474
|
+
notes.push(`stopped at ${maxPasses} passes before reaching a fixpoint — no unsupported conclusions were retracted and no watermarks were advanced; re-run to continue, or raise maxPasses`);
|
|
475
|
+
};
|
|
476
|
+
for (;;) {
|
|
477
|
+
// Pass loop: evaluate until no rule writes or extends support.
|
|
478
|
+
let quiescent = false;
|
|
479
|
+
while (!quiescent && passes < maxPasses) {
|
|
480
|
+
passes += 1;
|
|
481
|
+
let progress = false;
|
|
482
|
+
for (const entry of loaded) {
|
|
483
|
+
const mark = marks.get(entry.rule.digest);
|
|
484
|
+
const now = maxTx(store);
|
|
485
|
+
if (mark !== undefined && !shapeMatchesSince(store, entry.rule, mark, aliases)) {
|
|
486
|
+
continue;
|
|
487
|
+
}
|
|
488
|
+
if (!fired.has(entry.rule.digest)) {
|
|
489
|
+
fired.add(entry.rule.digest);
|
|
490
|
+
entry.outcome.fired = true;
|
|
491
|
+
suspend(entry);
|
|
492
|
+
}
|
|
493
|
+
if (evaluate(entry)) {
|
|
494
|
+
progress = true;
|
|
495
|
+
}
|
|
496
|
+
marks.set(entry.rule.digest, now);
|
|
497
|
+
}
|
|
498
|
+
quiescent = !progress;
|
|
499
|
+
}
|
|
500
|
+
// Support is incomplete when the pass guard stops active evaluation.
|
|
501
|
+
// Retraction would turn every not-yet-revisited suspended row into a
|
|
502
|
+
// false negative, so leave both rows and watermarks untouched.
|
|
503
|
+
if (!quiescent) {
|
|
504
|
+
truncate();
|
|
505
|
+
return;
|
|
506
|
+
}
|
|
507
|
+
// Retraction phase (§24.5): suspended rows never re-supported lost
|
|
508
|
+
// their premises. Retraction rows are ordinary appends — the loop
|
|
509
|
+
// re-enters so dependent rules see them and cascade.
|
|
510
|
+
let retracted = false;
|
|
511
|
+
for (const [id, { row, outcome }] of suspended) {
|
|
512
|
+
if (supported.has(row.claim_key)) {
|
|
513
|
+
continue;
|
|
514
|
+
}
|
|
515
|
+
retract(store, row, 'retracted: premises no longer hold');
|
|
516
|
+
suspended.delete(id);
|
|
517
|
+
outcome.retracted += 1;
|
|
518
|
+
retracted = true;
|
|
519
|
+
}
|
|
520
|
+
if (!retracted) {
|
|
521
|
+
return;
|
|
522
|
+
}
|
|
523
|
+
if (passes >= maxPasses) {
|
|
524
|
+
truncate();
|
|
525
|
+
return;
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
};
|
|
529
|
+
const finalize = () => {
|
|
530
|
+
if (!complete)
|
|
531
|
+
return;
|
|
532
|
+
for (const entry of loaded) {
|
|
533
|
+
if (!fired.has(entry.rule.digest)) {
|
|
534
|
+
continue;
|
|
535
|
+
}
|
|
536
|
+
const mark = marks.get(entry.rule.digest);
|
|
537
|
+
if (mark === undefined || mark === storedMarks.get(entry.rule.digest)) {
|
|
538
|
+
continue;
|
|
539
|
+
}
|
|
540
|
+
store.ingest(`${ruleSubject(entry.rule.digest)} HAS ${watermarkAttribute}: ${mark} @${provenanceContext}`);
|
|
541
|
+
}
|
|
542
|
+
};
|
|
543
|
+
if (options.dryRun === true) {
|
|
544
|
+
try {
|
|
545
|
+
store.transaction(() => {
|
|
546
|
+
run();
|
|
547
|
+
throw rollback;
|
|
548
|
+
});
|
|
549
|
+
}
|
|
550
|
+
catch (error) {
|
|
551
|
+
if (error !== rollback) {
|
|
552
|
+
throw error;
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
else {
|
|
557
|
+
store.transaction(() => {
|
|
558
|
+
run();
|
|
559
|
+
finalize();
|
|
560
|
+
});
|
|
561
|
+
}
|
|
562
|
+
const outcomes = loaded.map(entry => entry.outcome);
|
|
563
|
+
return {
|
|
564
|
+
rules: outcomes,
|
|
565
|
+
problems,
|
|
566
|
+
complete,
|
|
567
|
+
passes,
|
|
568
|
+
appended: outcomes.reduce((sum, outcome) => sum + outcome.appended, 0),
|
|
569
|
+
updated: outcomes.reduce((sum, outcome) => sum + outcome.updated, 0),
|
|
570
|
+
unchanged: outcomes.reduce((sum, outcome) => sum + outcome.unchanged, 0),
|
|
571
|
+
retracted: outcomes.reduce((sum, outcome) => sum + outcome.retracted, 0),
|
|
572
|
+
notes
|
|
573
|
+
};
|
|
574
|
+
};
|
|
575
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAC7E,OAAO,KAAK,SAAS,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,GAAG,EAAc,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,KAAK,EAAgB,MAAM,iBAAiB,CAAA;AACrD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC,yEAAyE;AACzE,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAA;AAEnC,sDAAsD;AACtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAA;AAEpD,wFAAwF;AACxF,MAAM,CAAC,MAAM,iBAAiB,GAAG,iBAAiB,CAAA;AAElD,yEAAyE;AACzE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAc,EAAU,EAAE,CACpD,QAAQ,MAAM,EAAE,CAAA;AAelB,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAA;AAElC,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAA;AA2ClC,MAAM,UAAU,GAAG,gCAAgC,CAAA;AAEnD,qFAAqF;AACrF,MAAM,aAAa,GAAG,CAAC,GAAU,EAAW,EAAE,CAC5C,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY;IACnD,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,CAAA;AAE9C,MAAM,kBAAkB,GAAG,CAAC,KAAc,EAAW,EAAE,CACrD,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;IACvD,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,UAAU;QACvD,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAA;AAEnF,sFAAsF;AACtF,MAAM,cAAc,GAAG,CAAC,OAAe,EAAE,SAAiB,EAAU,EAAE,CACpE,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;IACd,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;IAC9B,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrD,QAAQ,EAAE,CAAC,iBAAiB,CAAC;CAC9B,CAAC,CAAC,CAAA;AAEL,MAAM,KAAK,GAAG,CAAC,KAAY,EAAsB,EAAE,CAChD,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,EAA2B,CAAC,CAAC,IAAI,SAAS,CAAA;AAExG,0EAA0E;AAC1E,MAAM,YAAY,GAAG,CAAC,IAAsB,EAAsB,EAAE;IAClE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAiB,CAAA;IACvC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QACtC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;QAChC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,+EAA+E;AAC/E,MAAM,OAAO,GAAG,CAAC,KAAY,EAAE,GAAU,EAAE,OAAe,EAAQ,EAAE;IAClE,KAAK,CAAC,YAAY,CAAC;QACjB,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAClF,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;QAC1B,QAAQ,EAAE,EAAE;KACb,CAAC,CAAA;AACJ,CAAC,CAAA;AASD;;;GAGG;AACH,MAAM,SAAS,GAAG,CAAC,KAAY,EAAkE,EAAE;IACjG,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,MAAM,QAAQ,GAAkB,EAAE,CAAA;IAClC,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC1C,MAAM,YAAY,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACvD,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,GAAG,CAAC,SAAS,KAAK,aAAa,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,CAAA;IACxH,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,UAAW,CAAC,CAAC,GAAG,CAAA;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC/B,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;YAClE,SAAQ;QACV,CAAC;QACD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC/C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,eAAe,MAAM,sCAAsC,CAAC,CAAA;YACrF,SAAQ;QACV,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;QAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,IAAI,SAAS,CAAA;QAC3D,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,GAAG;YACH,OAAO,EAAE;gBACP,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;gBAC1B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;gBACtB,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;gBACvC,KAAK,EAAE,KAAK;gBACZ,WAAW,EAAE,CAAC;gBACd,SAAS,EAAE,CAAC;gBACZ,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,CAAC;gBACV,SAAS,EAAE,CAAC;gBACZ,SAAS,EAAE,CAAC;gBACZ,QAAQ,EAAE,EAAE;aACb;SACF,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;AACpC,CAAC,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,iBAAiB,GAAG,CAAC,KAAY,EAAE,IAAY,EAAE,IAAY,EAAE,OAAgB,EAAW,EAAE;IAChG,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;IACjC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/B,SAAQ;QACV,CAAC;QACD,IAAI,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAA;QAC/B,IAAI,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAA;QACzC,IAAI,UAAU,GACZ,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;QACxF,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;YAChF,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,OAAO,GAAG,UAAU,IAAI,EAAE,IAAI,EAAE,UAAmB,EAAE,CAAA;gBAC3D,UAAU,GAAG,WAAW,CAAA;gBACxB,WAAW,GAAG,OAAO,CAAA;gBACrB,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAA;YACrE,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAA;YACrE,CAAC;QACH,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,CAAA;QAC1D,MAAM,UAAU,GAAa,CAAC,UAAU,CAAC,CAAA;QACzC,MAAM,MAAM,GAAwB,CAAC,IAAI,CAAC,CAAA;QAC1C,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACxB,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QAChF,IAAI,UAAU,EAAE,CAAC;YACf,oEAAoE;YACpE,UAAU,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;QACzC,CAAC;aAAM,CAAC;YACN,IAAI,WAAW,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC5C,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;gBAChC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;YAC/B,CAAC;YACD,IAAI,UAAU,EAAE,IAAI,KAAK,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC5C,uEAAuE;gBACvE,UAAU,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;gBACrD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,CAAA;YAC/C,CAAC;YACD,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBACjD,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;gBAClC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;gBAC9C,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAClD,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;oBACnC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBACjD,CAAC;YACH,CAAC;QACH,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC/C,UAAU,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAA;YAClG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACtB,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACvC,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC5B,UAAU,CAAC,IAAI,CAAC,6FAA6F,CAAC,CAAA;gBAC9G,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACtB,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,IAAI,CAAC,yFAAyF,CAAC,CAAA;gBAC1G,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;YACjC,CAAC;QACH,CAAC;QACD,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,2CAA2C,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;aACxG,GAAG,CAAC,GAAG,MAAM,CAAC,CAAA;QACjB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,+EAA+E,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACvH,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAkB,EAAE,QAA0C,EAAyB,EAAE;IAClH,MAAM,IAAI,GAAG,CAAC,SAAuB,EAAgB,EAAE,CACrD,SAAS,CAAC,IAAI,KAAK,KAAK,IAAI,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC;QAClE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAE,EAAE,CAAC,CAAC;QACnD,SAAS,CAAA;IACb,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;IACvB,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QAC7D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAE,CAAA;QACjC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAA;IAClD,CAAC;IACD,MAAM,OAAO,GACX,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9F,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACxI,OAAO,CAAC,OAAO,CAAA;IACjB,OAAO,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;AACtE,CAAC,CAAA;AAED,6EAA6E;AAC7E,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAyB,EAAE,EAAqB,EAAE,OAAgB,EAAW,EAAE;IACvG,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;IACnC,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QACzD,sEAAsE;QACtE,0DAA0D;QAC1D,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;YAC9D,OAAO,KAAK,CAAA;QACd,CAAC;QACD,QAAQ,EAAE,EAAE,CAAC;YACX,KAAK,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,CAAA;YAC1C,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,CAAA;YAC3C,KAAK,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAA;YACxC,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAA;YAC1C,KAAK,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAA;YACxC,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAA;QAC5C,CAAC;IACH,CAAC;IACD,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;QACf,OAAO,KAAK,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,CAAA;IAClC,CAAC;IACD,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,CAAA;IAClC,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,QAA+B,EAAc,EAAE;IACtF,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IACjC,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACpC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACrD,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC9B,CAAC,CAAA;AAcD;;;;;;GAMG;AACH,MAAM,QAAQ,GAAG,CACf,IAAY,EACZ,QAAkB,EAClB,QAA8B,EACiB,EAAE;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAA;IAChC,MAAM,IAAI,GAAG,CAAC,SAAqB,EAAE,QAA+B,EAAc,EAAE,CAClF,SAAS,CAAC,IAAI,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1F,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;QAClE,SAAS,CAAA;IACb,IAAI,OAAO,GAAkB,QAAQ,CAAC,OAAO,CAAA;IAC7C,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAChC,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAA;IAC3D,CAAC;SAAM,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9G,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAA;IAC9G,CAAC;SAAM,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3G,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAA;IACxF,CAAC;IACD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAC7C,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CACnE,CAAE,CAAA;IACH,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;QAC1C,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,OAAO;QACP,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ;QAChC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI;QACxB,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU;QACpC,IAAI;QACJ,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE;KACjF,CAAC,CAAA;IACF,MAAM,MAAM,GAAG,SAAS,CAAC,gBAAgB,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAA;IAC/E,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAA;IACrC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzE,OAAO,EAAE,OAAO,EAAE,cAAc,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,wBAAwB,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,MAAM,EAAE,EAAE,EAAE,CAAA;IAC3I,CAAC;IACD,qEAAqE;IACrE,sEAAsE;IACtE,+DAA+D;IAC/D,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;IACtD,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9C,KAAK,CAAC,CAAC;QACP,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAA;IACpD,OAAO,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAA;AACjG,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAA;AAE9C;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAY,EAAE,UAAyB,EAAE,EAAgB,EAAE;IAChF,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,cAAc,CAAA;IACjD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,gBAAgB,CAAA;IACvD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,IAAI,CAAA;IACxC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;IAEpD,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAA;IACnC,2EAA2E;IAC3E,MAAM,SAAS,GAAG,IAAI,GAAG,EAAgD,CAAA;IACzE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAA;IAC/B,wEAAwE;IACxE,MAAM,KAAK,GAAG,IAAI,GAAG,EAA8B,CAAA;IACnD,MAAM,WAAW,GAAG,IAAI,GAAG,EAA8B,CAAA;IACzD,IAAI,QAAQ,GAAG,IAAI,CAAA;IAEnB,KAAK,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,MAAM,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAA;QACnG,4DAA4D;QAC5D,gEAAgE;QAChE,kEAAkE;QAClE,iEAAiE;QACjE,qEAAqE;QACrE,2BAA2B;QAC3B,MAAM,MAAM,GAAG,SAAS,KAAK,SAAS,IAAI,SAAS,CAAC,IAAI,GAAG,CAAC,IAAI,SAAS,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;YACrF,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,CAAC;YACnC,SAAS,CAAA;QACX,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACpC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IACpE,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,KAAa,EAAQ,EAAE;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;QACtE,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YAC9C,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;YACxD,CAAC;QACH,CAAC;IACH,CAAC,CAAA;IAED,6EAA6E;IAC7E,MAAM,YAAY,GAAG,CAAC,OAAkB,EAAiE,EAAE,CACzG,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAChD,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAA;IAElG,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAW,EAAE;QAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,KAAK,CAAA;QACpC,IAAI,QAAQ,GAAG,KAAK,CAAA;QACpB,IAAI,SAAS,GAAe,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;QACxD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAClC,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;YACrH,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;oBACvC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;oBAC9D,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;wBAC1B,OAAO,EAAE,CAAA;oBACX,CAAC;oBACD,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;wBACzC,QAAQ,EAAE,EAAE,GAAG,QAAQ,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE;wBACrD,IAAI,EAAE,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;qBAC9E,CAAC,CAAC,CAAA;gBACL,CAAC,CAAC,CAAA;YACJ,CAAC;YACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,MAAK;YACP,CAAC;QACH,CAAC;QACD,OAAO,CAAC,WAAW,IAAI,CAAC,CAAA;QACxB,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,MAAM,CAAA;QAEpC,uDAAuD;QACvD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAsB,CAAA;QAC1C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;YAC1E,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBACxC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAChC,CAAC;gBACD,SAAQ;YACV,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAW,CAAC,GAAG,CAAC,CAAA;YACtC,IAAI,IAAI,KAAK,SAAS,IAAI,UAAW,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBACvD,IAAI,CAAC,GAAG,CAAC,UAAW,CAAC,GAAG,EAAE,UAAW,CAAC,CAAA;YACxC,CAAC;QACH,CAAC;QAED,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,UAAU,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC;gBAC9B,SAAQ;YACV,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;gBAC7B,QAAQ,GAAG,IAAI,CAAA;YACjB,CAAC;YACD,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;YACnD,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;YAC/C,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC;gBACzC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC;gBAChG,OAAO,CAAC,SAAS,IAAI,CAAC,CAAA;gBACtB,SAAQ;YACV,CAAC;YACD,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,CACjC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EACvG,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CACtD,CAAA;YACD,iEAAiE;YACjE,sEAAsE;YACtE,+DAA+D;YAC/D,IAAI,kBAAkB,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzC,KAAK,CAAC,cAAc,EAAE,CAAA;YACxB,CAAC;YACD,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAE,CAAA;YAC3B,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YACjF,KAAK,CAAC,WAAW,CAAC;gBAChB,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE,OAAO,EAAE,CAAC,CAAC;gBACnF,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,KAAc,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE;aACxD,CAAC,CAAA;YACF,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBAChD,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAA;YACvB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,OAAO,IAAI,CAAC,CAAA;YACtB,CAAC;YACD,QAAQ,GAAG,IAAI,CAAA;QACjB,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC,CAAA;IAED,MAAM,GAAG,GAAG,GAAS,EAAE;QACrB,MAAM,QAAQ,GAAG,GAAS,EAAE;YAC1B,QAAQ,GAAG,KAAK,CAAA;YAChB,KAAK,CAAC,IAAI,CAAC,cAAc,SAAS,wJAAwJ,CAAC,CAAA;QAC7L,CAAC,CAAA;QACD,SAAS,CAAC;YACR,+DAA+D;YAC/D,IAAI,SAAS,GAAG,KAAK,CAAA;YACrB,OAAO,CAAC,SAAS,IAAI,MAAM,GAAG,SAAS,EAAE,CAAC;gBACxC,MAAM,IAAI,CAAC,CAAA;gBACX,IAAI,QAAQ,GAAG,KAAK,CAAA;gBACpB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;oBACzC,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;oBACxB,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;wBAC/E,SAAQ;oBACV,CAAC;oBACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;wBAClC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;wBAC5B,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAA;wBAC1B,OAAO,CAAC,KAAK,CAAC,CAAA;oBAChB,CAAC;oBACD,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;wBACpB,QAAQ,GAAG,IAAI,CAAA;oBACjB,CAAC;oBACD,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;gBACnC,CAAC;gBACD,SAAS,GAAG,CAAC,QAAQ,CAAA;YACvB,CAAC;YACD,qEAAqE;YACrE,qEAAqE;YACrE,+DAA+D;YAC/D,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,QAAQ,EAAE,CAAA;gBACV,OAAM;YACR,CAAC;YACD,mEAAmE;YACnE,kEAAkE;YAClE,qDAAqD;YACrD,IAAI,SAAS,GAAG,KAAK,CAAA;YACrB,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC/C,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;oBACjC,SAAQ;gBACV,CAAC;gBACD,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,oCAAoC,CAAC,CAAA;gBACzD,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;gBACpB,OAAO,CAAC,SAAS,IAAI,CAAC,CAAA;gBACtB,SAAS,GAAG,IAAI,CAAA;YAClB,CAAC;YACD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAM;YACR,CAAC;YACD,IAAI,MAAM,IAAI,SAAS,EAAE,CAAC;gBACxB,QAAQ,EAAE,CAAA;gBACV,OAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC,CAAA;IAED,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC1B,IAAI,CAAC,QAAQ;YAAE,OAAM;QACrB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClC,SAAQ;YACV,CAAC;YACD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACzC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtE,SAAQ;YACV,CAAC;YACD,KAAK,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,kBAAkB,KAAK,IAAI,KAAK,iBAAiB,EAAE,CAAC,CAAA;QAC5G,CAAC;IACH,CAAC,CAAA;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;gBACrB,GAAG,EAAE,CAAA;gBACL,MAAM,QAAQ,CAAA;YAChB,CAAC,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACvB,MAAM,KAAK,CAAA;YACb,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;YACrB,GAAG,EAAE,CAAA;YACL,QAAQ,EAAE,CAAA;QACZ,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACnD,OAAO;QACL,KAAK,EAAE,QAAQ;QACf,QAAQ;QACR,QAAQ;QACR,MAAM;QACN,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACpE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QACxE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QACxE,KAAK;KACN,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@cavelang/cli/rules` — the CAVE rules engine (spec §24): forward-chaining
|
|
3
|
+
* `premises => conclusion` rules over current beliefs.
|
|
4
|
+
*
|
|
5
|
+
* ```ts
|
|
6
|
+
* import { declareRules, derive } from '@cavelang/cli/rules'
|
|
7
|
+
*
|
|
8
|
+
* declareRules(store, '?x NEEDS ?y, ?y NEEDS ?z => ?x NEEDS ?z')
|
|
9
|
+
* derive(store)
|
|
10
|
+
* // appends e.g. `a NEEDS c @src:rule/9f30ac9be4dd`, linked BECAUSE to the
|
|
11
|
+
* // two premise rows and VIA to the rule's declaration row
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* Derived confidence is noisy-AND (`@cavelang/fusion`, independence
|
|
15
|
+
* explicit); re-runs are idempotent and incremental by tx watermark;
|
|
16
|
+
* premise retraction retracts dependents (§24.4–§24.5).
|
|
17
|
+
*/
|
|
18
|
+
export * as Rule from './rule.ts';
|
|
19
|
+
export { boundTerm, derive, defaultMinConf, defaultMaxPasses, provenanceContext, ruleAttribute, ruleSubject, satisfies, specialize, watermarkAttribute } from './engine.ts';
|
|
20
|
+
export type { DeriveOptions, DeriveReport, RuleOutcome, RuleProblem } from './engine.ts';
|
|
21
|
+
export { declareRules, listRules, retractRule } from './declare.ts';
|
|
22
|
+
export type { Declaration, ListedRule, Retraction } from './declare.ts';
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAC3K,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACxF,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AACnE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@cavelang/cli/rules` — the CAVE rules engine (spec §24): forward-chaining
|
|
3
|
+
* `premises => conclusion` rules over current beliefs.
|
|
4
|
+
*
|
|
5
|
+
* ```ts
|
|
6
|
+
* import { declareRules, derive } from '@cavelang/cli/rules'
|
|
7
|
+
*
|
|
8
|
+
* declareRules(store, '?x NEEDS ?y, ?y NEEDS ?z => ?x NEEDS ?z')
|
|
9
|
+
* derive(store)
|
|
10
|
+
* // appends e.g. `a NEEDS c @src:rule/9f30ac9be4dd`, linked BECAUSE to the
|
|
11
|
+
* // two premise rows and VIA to the rule's declaration row
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* Derived confidence is noisy-AND (`@cavelang/fusion`, independence
|
|
15
|
+
* explicit); re-runs are idempotent and incremental by tx watermark;
|
|
16
|
+
* premise retraction retracts dependents (§24.4–§24.5).
|
|
17
|
+
*/
|
|
18
|
+
export * as Rule from "./rule.js";
|
|
19
|
+
export { boundTerm, derive, defaultMinConf, defaultMaxPasses, provenanceContext, ruleAttribute, ruleSubject, satisfies, specialize, watermarkAttribute } from "./engine.js";
|
|
20
|
+
export { declareRules, listRules, retractRule } from "./declare.js";
|
|
21
|
+
//# sourceMappingURL=index.js.map
|