@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,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rule lifecycle (spec §24.1) — declaring rules from a rule file,
|
|
3
|
+
* listing what a store believes its rules are, and retracting a rule
|
|
4
|
+
* together with everything it derived.
|
|
5
|
+
*
|
|
6
|
+
* A rule file is an ordinary CAVE document in which structural lines with
|
|
7
|
+
* a top-level `=>` are rules; everything else — verb declarations the
|
|
8
|
+
* rules need, comments, blanks — is prelude, ingested first so the rules
|
|
9
|
+
* fire against the vocabulary they assume. Declaring is idempotent: rule
|
|
10
|
+
* identity is the normalized-text digest, and an unchanged rule (or
|
|
11
|
+
* prelude) appends nothing.
|
|
12
|
+
*/
|
|
13
|
+
import { type Store } from '@cavelang/store';
|
|
14
|
+
import * as Rule from './rule.ts';
|
|
15
|
+
export type Declaration = {
|
|
16
|
+
/** Rules newly declared (or re-declared after retraction). */
|
|
17
|
+
readonly declared: number;
|
|
18
|
+
/** Rules whose declaration is already current — nothing appended. */
|
|
19
|
+
readonly unchanged: number;
|
|
20
|
+
/** Claims appended by the file's prelude (0 when unchanged). */
|
|
21
|
+
readonly prelude: number;
|
|
22
|
+
readonly rules: readonly Rule.t[];
|
|
23
|
+
readonly problems: readonly {
|
|
24
|
+
line: number;
|
|
25
|
+
message: string;
|
|
26
|
+
}[];
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Declares the rules of a rule file into the store — prelude first, then
|
|
30
|
+
* one `rule/<digest> HAS rule: …` claim per rule (§24.1), each skipped
|
|
31
|
+
* when already current.
|
|
32
|
+
*/
|
|
33
|
+
export declare const declareRules: (store: Store, text: string) => Declaration;
|
|
34
|
+
export type ListedRule = {
|
|
35
|
+
/** Declaration subject, conventionally `rule/<digest>`. */
|
|
36
|
+
readonly subject: string;
|
|
37
|
+
readonly text: string;
|
|
38
|
+
readonly label?: string;
|
|
39
|
+
readonly ok: boolean;
|
|
40
|
+
readonly problems: readonly string[];
|
|
41
|
+
};
|
|
42
|
+
/** Current positive rules of a store, in declaration order. */
|
|
43
|
+
export declare const listRules: (store: Store) => ListedRule[];
|
|
44
|
+
export type Retraction = {
|
|
45
|
+
readonly ok: true;
|
|
46
|
+
readonly subjects: readonly string[];
|
|
47
|
+
readonly derived: number;
|
|
48
|
+
} | {
|
|
49
|
+
readonly ok: false;
|
|
50
|
+
readonly error: string;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Retracts a rule — by declaration subject, digest, or unambiguous digest
|
|
54
|
+
* prefix — together with every claim it derived (§24.5): a derivation's
|
|
55
|
+
* justification does not outlive its rule.
|
|
56
|
+
*/
|
|
57
|
+
export declare const retractRule: (store: Store, ref: string) => Retraction;
|
|
58
|
+
//# sourceMappingURL=declare.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"declare.d.ts","sourceRoot":"","sources":["../../src/declare.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAO,KAAK,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAkBjC,MAAM,MAAM,WAAW,GAAG;IACxB,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,qEAAqE;IACrE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,gEAAgE;IAChE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,CAAC,EAAE,CAAA;IACjC,QAAQ,CAAC,QAAQ,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAChE,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,KAAK,EAAE,MAAM,MAAM,KAAG,WAwDzD,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,2DAA2D;IAC3D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CACrC,CAAA;AAED,+DAA+D;AAC/D,eAAO,MAAM,SAAS,GAAI,OAAO,KAAK,KAAG,UAAU,EAc7C,CAAA;AAEN,MAAM,MAAM,UAAU,GAClB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACrF;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAElD;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,OAAO,KAAK,EAAE,KAAK,MAAM,KAAG,UA8CvD,CAAA"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rule lifecycle (spec §24.1) — declaring rules from a rule file,
|
|
3
|
+
* listing what a store believes its rules are, and retracting a rule
|
|
4
|
+
* together with everything it derived.
|
|
5
|
+
*
|
|
6
|
+
* A rule file is an ordinary CAVE document in which structural lines with
|
|
7
|
+
* a top-level `=>` are rules; everything else — verb declarations the
|
|
8
|
+
* rules need, comments, blanks — is prelude, ingested first so the rules
|
|
9
|
+
* fire against the vocabulary they assume. Declaring is idempotent: rule
|
|
10
|
+
* identity is the normalized-text digest, and an unchanged rule (or
|
|
11
|
+
* prelude) appends nothing.
|
|
12
|
+
*/
|
|
13
|
+
import { Claim, Key, Value } from '@cavelang/core';
|
|
14
|
+
import { Row } from '@cavelang/store';
|
|
15
|
+
import * as Rule from "./rule.js";
|
|
16
|
+
import { provenanceContext, ruleAttribute, ruleSubject } from "./engine.js";
|
|
17
|
+
/** Subject of the prelude digest bookkeeping claim. */
|
|
18
|
+
const preludeSubject = 'derive/prelude';
|
|
19
|
+
const preludeDigestAttribute = 'derive-digest';
|
|
20
|
+
const bookkeepingContexts = [provenanceContext];
|
|
21
|
+
const declarationKey = (subject, attribute) => Key.of(Claim.of({
|
|
22
|
+
subject: Claim.entity(subject),
|
|
23
|
+
verb: 'HAS',
|
|
24
|
+
payload: Claim.attribute(attribute, Value.parse('x')),
|
|
25
|
+
contexts: bookkeepingContexts
|
|
26
|
+
}));
|
|
27
|
+
/**
|
|
28
|
+
* Declares the rules of a rule file into the store — prelude first, then
|
|
29
|
+
* one `rule/<digest> HAS rule: …` claim per rule (§24.1), each skipped
|
|
30
|
+
* when already current.
|
|
31
|
+
*/
|
|
32
|
+
export const declareRules = (store, text) => {
|
|
33
|
+
const problems = [];
|
|
34
|
+
const rules = [];
|
|
35
|
+
const preludeLines = [];
|
|
36
|
+
const ruleLines = [];
|
|
37
|
+
text.split(/\r?\n/).forEach((line, index) => {
|
|
38
|
+
if (Rule.isRuleLine(line)) {
|
|
39
|
+
ruleLines.push({ line, at: index + 1 });
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
preludeLines.push(line);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
return store.transaction(() => {
|
|
46
|
+
let prelude = 0;
|
|
47
|
+
const preludeText = preludeLines.join('\n');
|
|
48
|
+
if (preludeText.trim() !== '') {
|
|
49
|
+
const digest = Rule.digestOf(preludeText);
|
|
50
|
+
const known = store.currentBelief(declarationKey(preludeSubject, preludeDigestAttribute));
|
|
51
|
+
if (known === undefined || known.conf <= 0 || known.value_text !== digest) {
|
|
52
|
+
const result = store.ingest(preludeText, { source: 'cave-derive' });
|
|
53
|
+
problems.push(...result.problems);
|
|
54
|
+
prelude = result.ids.length;
|
|
55
|
+
store.ingest(`${preludeSubject} HAS ${preludeDigestAttribute}: ${digest} @${provenanceContext}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
let declared = 0;
|
|
59
|
+
let unchanged = 0;
|
|
60
|
+
for (const { line, at } of ruleLines) {
|
|
61
|
+
const parsed = Rule.parse(line);
|
|
62
|
+
if (!parsed.ok) {
|
|
63
|
+
problems.push(...parsed.problems.map(message => ({ line: at, message })));
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
const rule = parsed.rule;
|
|
67
|
+
rules.push(rule);
|
|
68
|
+
const literal = !rule.text.includes('`') ? `\`${rule.text}\`` :
|
|
69
|
+
!rule.text.includes('"') ? `"${rule.text}"` :
|
|
70
|
+
undefined;
|
|
71
|
+
if (literal === undefined) {
|
|
72
|
+
problems.push({ line: at, message: 'rule text contains both " and ` — cannot be stored as a literal' });
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
const known = store.currentBelief(declarationKey(ruleSubject(rule.digest), ruleAttribute));
|
|
76
|
+
if (known !== undefined && known.conf > 0 && known.value_text === literal) {
|
|
77
|
+
unchanged += 1;
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
const label = rule.label === undefined ? '' : ` ; ${rule.label}`;
|
|
81
|
+
store.ingest(`${ruleSubject(rule.digest)} HAS ${ruleAttribute}: ${literal} @${provenanceContext}${label}`);
|
|
82
|
+
declared += 1;
|
|
83
|
+
}
|
|
84
|
+
return { declared, unchanged, prelude, rules, problems };
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
/** Current positive rules of a store, in declaration order. */
|
|
88
|
+
export const listRules = (store) => store.currentBeliefs()
|
|
89
|
+
.filter(row => row.verb === 'HAS' && row.attribute === ruleAttribute && row.negated === 0 && row.conf > 0 && row.value_text !== null)
|
|
90
|
+
.map(row => {
|
|
91
|
+
const text = Row.parseValue(row.value_text).raw;
|
|
92
|
+
const parsed = Rule.parse(text);
|
|
93
|
+
const label = (parsed.ok ? parsed.rule.label : undefined) ?? row.comment ?? undefined;
|
|
94
|
+
return {
|
|
95
|
+
subject: row.subject,
|
|
96
|
+
text,
|
|
97
|
+
...label === undefined ? {} : { label },
|
|
98
|
+
ok: parsed.ok,
|
|
99
|
+
problems: parsed.ok ? [] : parsed.problems
|
|
100
|
+
};
|
|
101
|
+
});
|
|
102
|
+
/**
|
|
103
|
+
* Retracts a rule — by declaration subject, digest, or unambiguous digest
|
|
104
|
+
* prefix — together with every claim it derived (§24.5): a derivation's
|
|
105
|
+
* justification does not outlive its rule.
|
|
106
|
+
*/
|
|
107
|
+
export const retractRule = (store, ref) => {
|
|
108
|
+
const declarations = store.currentBeliefs().filter(row => row.verb === 'HAS' && row.attribute === ruleAttribute && row.negated === 0 && row.conf > 0);
|
|
109
|
+
const matches = declarations.filter(row => row.subject === ref || row.subject === ruleSubject(ref) ||
|
|
110
|
+
(ref.length >= 4 && row.subject.startsWith(ruleSubject(ref))));
|
|
111
|
+
const subjects = [...new Set(matches.map(row => row.subject))];
|
|
112
|
+
if (subjects.length === 0) {
|
|
113
|
+
return { ok: false, error: `no current rule matches ${JSON.stringify(ref)}` };
|
|
114
|
+
}
|
|
115
|
+
if (subjects.length > 1) {
|
|
116
|
+
return { ok: false, error: `${JSON.stringify(ref)} is ambiguous — matches ${subjects.join(', ')}` };
|
|
117
|
+
}
|
|
118
|
+
return store.transaction(() => {
|
|
119
|
+
let derived = 0;
|
|
120
|
+
for (const declaration of matches) {
|
|
121
|
+
store.insertResult({
|
|
122
|
+
claims: [{ claim: { ...store.toClaim(declaration), conf: 0, raw: '', comment: 'retracted: cave derive --retract' }, line: 0 }],
|
|
123
|
+
edges: [],
|
|
124
|
+
registry: store.registry(),
|
|
125
|
+
problems: []
|
|
126
|
+
});
|
|
127
|
+
const rows = store.byProvenance('run', declaration.subject);
|
|
128
|
+
const latest = new Map();
|
|
129
|
+
for (const row of rows) {
|
|
130
|
+
const seen = latest.get(row.claim_key);
|
|
131
|
+
if (seen === undefined || seen.tx < row.tx) {
|
|
132
|
+
latest.set(row.claim_key, row);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
for (const row of latest.values()) {
|
|
136
|
+
if (row.conf <= 0 || (row.verb === 'REVERSE' || row.verb === 'RENAMED-TO' ||
|
|
137
|
+
(row.verb === 'IS' && row.object === 'verb'))) {
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
store.insertResult({
|
|
141
|
+
claims: [{ claim: { ...store.toClaim(row), conf: 0, raw: '', comment: 'retracted: rule retracted' }, line: 0 }],
|
|
142
|
+
edges: [],
|
|
143
|
+
registry: store.registry(),
|
|
144
|
+
problems: []
|
|
145
|
+
});
|
|
146
|
+
derived += 1;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return { ok: true, subjects, derived };
|
|
150
|
+
});
|
|
151
|
+
};
|
|
152
|
+
//# sourceMappingURL=declare.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"declare.js","sourceRoot":"","sources":["../../src/declare.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,125 @@
|
|
|
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, Value } from '@cavelang/core';
|
|
37
|
+
import { type Store } from '@cavelang/store';
|
|
38
|
+
import { type Pattern } from '@cavelang/query';
|
|
39
|
+
import * as Rule from './rule.ts';
|
|
40
|
+
/** Attribute of rule declaration claims: `rule/<digest> HAS rule: …`. */
|
|
41
|
+
export declare const ruleAttribute = "rule";
|
|
42
|
+
/** Attribute of per-rule watermark claims (§24.4). */
|
|
43
|
+
export declare const watermarkAttribute = "derive-watermark";
|
|
44
|
+
/** Source context stamped on declarations and bookkeeping (like `src:cave-connect`). */
|
|
45
|
+
export declare const provenanceContext = "src:cave-derive";
|
|
46
|
+
/** Declaration subject of a rule: its digest under the `rule/` scope. */
|
|
47
|
+
export declare const ruleSubject: (digest: string) => string;
|
|
48
|
+
export type DeriveOptions = {
|
|
49
|
+
/** Ignore stored watermarks — re-fire every rule (§24.4). */
|
|
50
|
+
readonly full?: boolean;
|
|
51
|
+
/** Run everything inside a rolled-back transaction; report only. */
|
|
52
|
+
readonly dryRun?: boolean;
|
|
53
|
+
/** Premises match through the alias closure (spec §13.6). */
|
|
54
|
+
readonly aliases?: boolean;
|
|
55
|
+
/** Conclusions below this confidence are not asserted (default 0.05). */
|
|
56
|
+
readonly minConf?: number;
|
|
57
|
+
/** Fixpoint guard — maximum evaluation passes (default 20). */
|
|
58
|
+
readonly maxPasses?: number;
|
|
59
|
+
};
|
|
60
|
+
export declare const defaultMinConf = 0.05;
|
|
61
|
+
export declare const defaultMaxPasses = 20;
|
|
62
|
+
export type RuleOutcome = {
|
|
63
|
+
/** Declaration subject, conventionally `rule/<digest>`. */
|
|
64
|
+
readonly subject: string;
|
|
65
|
+
readonly digest: string;
|
|
66
|
+
readonly text: string;
|
|
67
|
+
readonly label?: string;
|
|
68
|
+
/** `false` when every pass skipped the rule — watermark said nothing new. */
|
|
69
|
+
fired: boolean;
|
|
70
|
+
evaluations: number;
|
|
71
|
+
/** Solutions of the rule's final evaluation. */
|
|
72
|
+
solutions: number;
|
|
73
|
+
/** Conclusions asserted for the first time (or re-asserted after retraction). */
|
|
74
|
+
appended: number;
|
|
75
|
+
/** Conclusions whose confidence or value changed — belief updates. */
|
|
76
|
+
updated: number;
|
|
77
|
+
/** Idempotent skips — conclusion equals current belief (§24.4). */
|
|
78
|
+
unchanged: number;
|
|
79
|
+
/** Previously-derived claims retracted — premises no longer hold (§24.5). */
|
|
80
|
+
retracted: number;
|
|
81
|
+
readonly problems: string[];
|
|
82
|
+
};
|
|
83
|
+
export type RuleProblem = {
|
|
84
|
+
readonly subject: string;
|
|
85
|
+
readonly problems: readonly string[];
|
|
86
|
+
};
|
|
87
|
+
export type DeriveReport = {
|
|
88
|
+
readonly rules: readonly RuleOutcome[];
|
|
89
|
+
/** Stored rule declarations that failed to parse — reported, skipped. */
|
|
90
|
+
readonly problems: readonly RuleProblem[];
|
|
91
|
+
/** Whether evaluation and destructive support reconciliation reached a fixpoint. */
|
|
92
|
+
readonly complete: boolean;
|
|
93
|
+
readonly passes: number;
|
|
94
|
+
readonly appended: number;
|
|
95
|
+
readonly updated: number;
|
|
96
|
+
readonly unchanged: number;
|
|
97
|
+
readonly retracted: number;
|
|
98
|
+
readonly notes: readonly string[];
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* Specializes a pattern under partial bindings: bound variables become
|
|
102
|
+
* terms, so each join step runs an ordinary CAVE-Q query. Shared with
|
|
103
|
+
* `@cavelang/cli/act`, whose premise evaluation is the same left-to-right
|
|
104
|
+
* join with parameters pre-bound (spec §25.2).
|
|
105
|
+
* @returns `undefined` when a verb variable is bound to a non-verb —
|
|
106
|
+
* no row can match.
|
|
107
|
+
*/
|
|
108
|
+
export declare const specialize: (pattern: Pattern.t, bindings: Readonly<Record<string, string>>) => undefined | Pattern.t;
|
|
109
|
+
/** Evaluates a `?var op value` constraint against the variable's binding. */
|
|
110
|
+
export declare const satisfies: (bound: undefined | string, op: Rule.ConstraintOp, literal: Value.t) => boolean;
|
|
111
|
+
/**
|
|
112
|
+
* A bound value substituted into a conclusion term slot. Stored bindings
|
|
113
|
+
* are formatted (`"…"`/`` `…` `` literals keep their delimiters); bare
|
|
114
|
+
* text that would not re-tokenize as one term is wrapped as a text
|
|
115
|
+
* literal — except number/date values in payload position, which the
|
|
116
|
+
* pipeline classifies as metrics.
|
|
117
|
+
*/
|
|
118
|
+
export declare const boundTerm: (bound: string, position: "subject" | "payload") => Claim.Term;
|
|
119
|
+
/**
|
|
120
|
+
* Fires the store's rules to fixpoint (§24.2). See the module doc for the
|
|
121
|
+
* semantics; `dryRun` computes the same report inside a rolled-back
|
|
122
|
+
* transaction.
|
|
123
|
+
*/
|
|
124
|
+
export declare const derive: (store: Store, options?: DeriveOptions) => DeriveReport;
|
|
125
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/engine.ts"],"names":[],"mappings":"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"}
|