@cavelang/cli 0.27.3 → 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 +416 -109
- 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 +423 -104
- 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,270 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action lifecycle (spec §25.1) — declaring actions from a CAVE document,
|
|
3
|
+
* resolving and listing what a store currently believes its actions are,
|
|
4
|
+
* and retracting a declaration.
|
|
5
|
+
*
|
|
6
|
+
* An action file is an ordinary CAVE document: top-level
|
|
7
|
+
* `action/<name> HAS action: `…`` claims are the declarations; everything
|
|
8
|
+
* else — parameter docs (`action/<name>/<param> IS param`), hook
|
|
9
|
+
* references (`HAS hook:`), verb declarations, comments — is prelude,
|
|
10
|
+
* ingested first. Declaring is idempotent: an unchanged declaration (or
|
|
11
|
+
* prelude) appends nothing.
|
|
12
|
+
*
|
|
13
|
+
* Unlike rules, an action's identity is its *name*: the declaration
|
|
14
|
+
* evolves as one belief series per subject, and because a declaration may
|
|
15
|
+
* also be appended by other surfaces (`cave add`, an agent's `cave_add`),
|
|
16
|
+
* whose §9.5 stamps fork the series per actor, resolution takes the
|
|
17
|
+
* newest current row across every series of the subject — latest belief
|
|
18
|
+
* wins, whoever appended it.
|
|
19
|
+
*/
|
|
20
|
+
import { Claim, Key, Value } from '@cavelang/core';
|
|
21
|
+
import { parseDocument } from '@cavelang/parser';
|
|
22
|
+
import { Rule } from '@cavelang/cli/rules';
|
|
23
|
+
import { Row } from '@cavelang/store';
|
|
24
|
+
import * as Action from "./action.js";
|
|
25
|
+
/** Source context stamped on declarations and bookkeeping (spec §9.5). */
|
|
26
|
+
export const provenanceContext = 'src:cave-act';
|
|
27
|
+
/** Subject of the prelude digest bookkeeping claim. */
|
|
28
|
+
const preludeSubject = 'act/prelude';
|
|
29
|
+
const preludeDigestAttribute = 'act-digest';
|
|
30
|
+
const declarationKey = (subject, attribute) => Key.of(Claim.of({
|
|
31
|
+
subject: Claim.entity(subject),
|
|
32
|
+
verb: 'HAS',
|
|
33
|
+
payload: Claim.attribute(attribute, Value.parse('x')),
|
|
34
|
+
contexts: [provenanceContext]
|
|
35
|
+
}));
|
|
36
|
+
/**
|
|
37
|
+
* The newest current row of `attribute` on `subject`, across every
|
|
38
|
+
* belief series (§9.5 stamps make one series per appending actor).
|
|
39
|
+
* @returns the winner even when it is retracted or negated — callers
|
|
40
|
+
* decide whether a disabled declaration matters.
|
|
41
|
+
*/
|
|
42
|
+
export const currentAttribute = (store, subject, attribute) => {
|
|
43
|
+
let winner;
|
|
44
|
+
for (const row of store.currentBeliefs()) {
|
|
45
|
+
if (row.subject === subject && row.verb === 'HAS' && row.attribute === attribute &&
|
|
46
|
+
(winner === undefined || winner.tx < row.tx)) {
|
|
47
|
+
winner = row;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return winner;
|
|
51
|
+
};
|
|
52
|
+
const enabled = (row) => row !== undefined && row.conf > 0 && row.negated === 0 && row.value_text !== null;
|
|
53
|
+
/** Current positive action declaration rows, newest series winner per subject. */
|
|
54
|
+
const currentActionRows = (store) => {
|
|
55
|
+
const bySubject = new Map();
|
|
56
|
+
for (const row of store.currentBeliefs()) {
|
|
57
|
+
if (row.verb !== 'HAS' || row.attribute !== Action.actionAttribute ||
|
|
58
|
+
Action.actionName(row.subject) === undefined) {
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
const seen = bySubject.get(row.subject);
|
|
62
|
+
if (seen === undefined || seen.tx < row.tx) {
|
|
63
|
+
bySubject.set(row.subject, row);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return [...bySubject.values()].filter(enabled);
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Resolves one action by name (or full subject) to its current
|
|
70
|
+
* declaration. @returns `undefined` when unknown, retracted, or negated;
|
|
71
|
+
* problems when the stored body does not parse.
|
|
72
|
+
*/
|
|
73
|
+
export const loadAction = (store, name) => {
|
|
74
|
+
const subject = Action.actionSubject(name);
|
|
75
|
+
const row = currentAttribute(store, subject, Action.actionAttribute);
|
|
76
|
+
if (!enabled(row)) {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
const parsed = Action.parse(subject, Row.parseValue(row.value_text).raw);
|
|
80
|
+
if (!parsed.ok) {
|
|
81
|
+
return { problems: parsed.problems };
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
loaded: {
|
|
85
|
+
action: parsed.action,
|
|
86
|
+
row,
|
|
87
|
+
...row.comment === null ? {} : { description: row.comment }
|
|
88
|
+
},
|
|
89
|
+
problems: []
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
/** The hook name the action currently references, if any (§25.4). */
|
|
93
|
+
export const currentHook = (store, subject) => {
|
|
94
|
+
const row = currentAttribute(store, subject, Action.hookAttribute);
|
|
95
|
+
return enabled(row) ? Row.parseValue(row.value_text).raw : undefined;
|
|
96
|
+
};
|
|
97
|
+
/** Parameter doc — the comment of `action/<name>/<param> IS param` (§25.1). */
|
|
98
|
+
const paramDoc = (store, subject, param) => {
|
|
99
|
+
let winner;
|
|
100
|
+
for (const row of store.currentBeliefs()) {
|
|
101
|
+
if (row.subject === `${subject}/${param}` && row.verb === 'IS' && row.object === 'param' &&
|
|
102
|
+
row.negated === 0 && row.conf > 0 && (winner === undefined || winner.tx < row.tx)) {
|
|
103
|
+
winner = row;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return winner?.comment ?? undefined;
|
|
107
|
+
};
|
|
108
|
+
/** Current positive actions of a store, in declaration order. */
|
|
109
|
+
export const listActions = (store) => currentActionRows(store).map(row => {
|
|
110
|
+
const text = Row.parseValue(row.value_text).raw;
|
|
111
|
+
const parsed = Action.parse(row.subject, text);
|
|
112
|
+
const params = parsed.ok ?
|
|
113
|
+
parsed.action.params.map(name => {
|
|
114
|
+
const doc = paramDoc(store, row.subject, name);
|
|
115
|
+
return { name, ...doc === undefined ? {} : { doc } };
|
|
116
|
+
}) :
|
|
117
|
+
[];
|
|
118
|
+
const hook = currentHook(store, row.subject);
|
|
119
|
+
return {
|
|
120
|
+
subject: row.subject,
|
|
121
|
+
name: Action.actionName(row.subject),
|
|
122
|
+
text,
|
|
123
|
+
...row.comment === null ? {} : { description: row.comment },
|
|
124
|
+
params,
|
|
125
|
+
...hook === undefined ? {} : { hook },
|
|
126
|
+
ok: parsed.ok,
|
|
127
|
+
problems: parsed.ok ? [] : parsed.problems
|
|
128
|
+
};
|
|
129
|
+
});
|
|
130
|
+
const indentOf = (line) => line.length - line.trimStart().length;
|
|
131
|
+
const isStructural = (line) => {
|
|
132
|
+
const body = line.trim();
|
|
133
|
+
return body !== '' && !body.startsWith(';');
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* Reads one top-level line as an action declaration claim —
|
|
137
|
+
* `action/<name> HAS action: `…``. @returns `undefined` when the line is
|
|
138
|
+
* anything else (prelude).
|
|
139
|
+
*/
|
|
140
|
+
const asDeclaration = (line) => {
|
|
141
|
+
const document = parseDocument(line);
|
|
142
|
+
if (document.diagnostics.length > 0) {
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
145
|
+
const entry = document.lines.find(candidate => candidate.kind === 'claim');
|
|
146
|
+
if (entry === undefined || entry.kind !== 'claim') {
|
|
147
|
+
return undefined;
|
|
148
|
+
}
|
|
149
|
+
const claim = entry.claim;
|
|
150
|
+
if (claim.verb !== 'HAS' || claim.negated || claim.payload.kind !== 'attribute' ||
|
|
151
|
+
claim.payload.attribute !== Action.actionAttribute ||
|
|
152
|
+
claim.subject.kind !== 'entity' || Action.actionName(claim.subject.text) === undefined) {
|
|
153
|
+
return undefined;
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
subject: claim.subject.text,
|
|
157
|
+
body: claim.payload.value.raw,
|
|
158
|
+
...claim.meta.comment === undefined ? {} : { comment: claim.meta.comment }
|
|
159
|
+
};
|
|
160
|
+
};
|
|
161
|
+
/**
|
|
162
|
+
* Declares the actions of a CAVE document into the store — prelude
|
|
163
|
+
* first, then one normalized `action/<name> HAS action: …` claim per
|
|
164
|
+
* declaration (§25.1), each skipped when already current. Declarations
|
|
165
|
+
* re-emit in the normalized form; metadata beyond the description
|
|
166
|
+
* comment is not preserved — append exotic declarations with `cave add`.
|
|
167
|
+
*/
|
|
168
|
+
export const declareActions = (store, text) => {
|
|
169
|
+
const problems = [];
|
|
170
|
+
const actions = [];
|
|
171
|
+
const preludeLines = [];
|
|
172
|
+
const declarations = [];
|
|
173
|
+
// Top-level blocks: a structural unindented line plus what follows it.
|
|
174
|
+
// A declaration's structural children would silently re-attach to the
|
|
175
|
+
// preceding prelude line if the declaration were extracted alone, so a
|
|
176
|
+
// declaration block with children is rejected whole.
|
|
177
|
+
const blocks = [];
|
|
178
|
+
text.split(/\r?\n/).forEach((line, index) => {
|
|
179
|
+
if (isStructural(line) && indentOf(line) === 0) {
|
|
180
|
+
blocks.push({ lines: [line], at: index + 1 });
|
|
181
|
+
}
|
|
182
|
+
else if (blocks.length === 0) {
|
|
183
|
+
preludeLines.push(line);
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
blocks[blocks.length - 1].lines.push(line);
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
for (const block of blocks) {
|
|
190
|
+
const declaration = asDeclaration(block.lines[0]);
|
|
191
|
+
if (declaration === undefined) {
|
|
192
|
+
preludeLines.push(...block.lines);
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
if (block.lines.slice(1).some(isStructural)) {
|
|
196
|
+
problems.push({ line: block.at, message: 'action declarations take no qualifier children (spec §25.1)' });
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
declarations.push({ declaration, at: block.at });
|
|
200
|
+
preludeLines.push(...block.lines.slice(1));
|
|
201
|
+
}
|
|
202
|
+
return store.transaction(() => {
|
|
203
|
+
let prelude = 0;
|
|
204
|
+
const preludeText = preludeLines.join('\n');
|
|
205
|
+
if (preludeText.trim() !== '') {
|
|
206
|
+
const digest = Rule.digestOf(preludeText);
|
|
207
|
+
const known = store.currentBelief(declarationKey(preludeSubject, preludeDigestAttribute));
|
|
208
|
+
if (known === undefined || known.conf <= 0 || known.value_text !== digest) {
|
|
209
|
+
const result = store.ingest(preludeText, { source: 'cave-act' });
|
|
210
|
+
problems.push(...result.problems);
|
|
211
|
+
prelude = result.ids.length;
|
|
212
|
+
store.ingest(`${preludeSubject} HAS ${preludeDigestAttribute}: ${digest} @${provenanceContext}`);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
let declared = 0;
|
|
216
|
+
let unchanged = 0;
|
|
217
|
+
for (const { declaration, at } of declarations) {
|
|
218
|
+
const parsed = Action.parse(declaration.subject, declaration.body);
|
|
219
|
+
if (!parsed.ok) {
|
|
220
|
+
problems.push(...parsed.problems.map(message => ({ line: at, message })));
|
|
221
|
+
continue;
|
|
222
|
+
}
|
|
223
|
+
const action = parsed.action;
|
|
224
|
+
actions.push(action);
|
|
225
|
+
const literal = !action.text.includes('`') ? `\`${action.text}\`` :
|
|
226
|
+
!action.text.includes('"') ? `"${action.text}"` :
|
|
227
|
+
undefined;
|
|
228
|
+
if (literal === undefined) {
|
|
229
|
+
problems.push({ line: at, message: 'action body contains both " and ` — cannot be stored as a literal' });
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
const known = currentAttribute(store, action.subject, Action.actionAttribute);
|
|
233
|
+
if (enabled(known) && known.value_text === literal &&
|
|
234
|
+
(known.comment ?? undefined) === declaration.comment) {
|
|
235
|
+
unchanged += 1;
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
const description = declaration.comment === undefined ? '' : ` ; ${declaration.comment}`;
|
|
239
|
+
store.ingest(`${action.subject} HAS ${Action.actionAttribute}: ${literal} @${provenanceContext}${description}`);
|
|
240
|
+
declared += 1;
|
|
241
|
+
}
|
|
242
|
+
return { declared, unchanged, prelude, actions, problems };
|
|
243
|
+
});
|
|
244
|
+
};
|
|
245
|
+
/**
|
|
246
|
+
* Retracts an action's declaration — by name or subject — disabling it.
|
|
247
|
+
* Every current positive series of the declaration is retracted (§9.5
|
|
248
|
+
* stamps fork one per appending actor). Effects of past executions are
|
|
249
|
+
* recorded knowledge and stay untouched (spec §25.1; contrast §24.5).
|
|
250
|
+
*/
|
|
251
|
+
export const retractAction = (store, ref) => {
|
|
252
|
+
const subject = Action.actionSubject(ref);
|
|
253
|
+
const rows = store.currentBeliefs().filter(row => row.subject === subject && row.verb === 'HAS' && row.attribute === Action.actionAttribute &&
|
|
254
|
+
row.negated === 0 && row.conf > 0);
|
|
255
|
+
if (rows.length === 0) {
|
|
256
|
+
return { ok: false, error: `no current action matches ${JSON.stringify(ref)}` };
|
|
257
|
+
}
|
|
258
|
+
return store.transaction(() => {
|
|
259
|
+
for (const row of rows) {
|
|
260
|
+
store.insertResult({
|
|
261
|
+
claims: [{ claim: { ...store.toClaim(row), conf: 0, raw: '', comment: 'retracted: cave act --retract' }, line: 0 }],
|
|
262
|
+
edges: [],
|
|
263
|
+
registry: store.registry(),
|
|
264
|
+
problems: []
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
return { ok: true, subject, retracted: rows.length };
|
|
268
|
+
});
|
|
269
|
+
};
|
|
270
|
+
//# sourceMappingURL=declare.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"declare.js","sourceRoot":"","sources":["../../src/declare.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,EAAE,GAAG,EAAc,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC,0EAA0E;AAC1E,MAAM,CAAC,MAAM,iBAAiB,GAAG,cAAc,CAAA;AAE/C,uDAAuD;AACvD,MAAM,cAAc,GAAG,aAAa,CAAA;AAEpC,MAAM,sBAAsB,GAAG,YAAY,CAAA;AAE3C,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;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAY,EAAE,OAAe,EAAE,SAAiB,EAAqB,EAAE;IACtG,IAAI,MAAyB,CAAA;IAC7B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;QACzC,IAAI,GAAG,CAAC,OAAO,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS;YAC5E,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACjD,MAAM,GAAG,GAAG,CAAA;QACd,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,MAAM,OAAO,GAAG,CAAC,GAAsB,EAAgB,EAAE,CACvD,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI,CAAA;AAEnF,kFAAkF;AAClF,MAAM,iBAAiB,GAAG,CAAC,KAAY,EAAW,EAAE;IAClD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAiB,CAAA;IAC1C,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;QACzC,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,GAAG,CAAC,SAAS,KAAK,MAAM,CAAC,eAAe;YAC9D,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,SAAS,EAAE,CAAC;YACjD,SAAQ;QACV,CAAC;QACD,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACvC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC;YAC3C,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;QACjC,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AAChD,CAAC,CAAA;AAUD;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAY,EAAE,IAAY,EAAgE,EAAE;IACrH,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;IAC1C,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;IACpE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAClB,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,UAAW,CAAC,CAAC,GAAG,CAAC,CAAA;IACzE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAA;IACtC,CAAC;IACD,OAAO;QACL,MAAM,EAAE;YACN,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,GAAG;YACH,GAAG,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,OAAO,EAAE;SAC5D;QACD,QAAQ,EAAE,EAAE;KACb,CAAA;AACH,CAAC,CAAA;AAED,qEAAqE;AACrE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAY,EAAE,OAAe,EAAsB,EAAE;IAC/E,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC,CAAA;IAClE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,UAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAA;AACvE,CAAC,CAAA;AAED,+EAA+E;AAC/E,MAAM,QAAQ,GAAG,CAAC,KAAY,EAAE,OAAe,EAAE,KAAa,EAAsB,EAAE;IACpF,IAAI,MAAyB,CAAA;IAC7B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;QACzC,IAAI,GAAG,CAAC,OAAO,KAAK,GAAG,OAAO,IAAI,KAAK,EAAE,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,OAAO;YACpF,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACtF,MAAM,GAAG,GAAG,CAAA;QACd,CAAC;IACH,CAAC;IACD,OAAO,MAAM,EAAE,OAAO,IAAI,SAAS,CAAA;AACrC,CAAC,CAAA;AAmBD,iEAAiE;AACjE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAY,EAAkB,EAAE,CAC1D,iBAAiB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;IACjC,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,UAAW,CAAC,CAAC,GAAG,CAAA;IAChD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;QACxB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;YAC9C,OAAO,EAAE,IAAI,EAAE,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAA;QACtD,CAAC,CAAC,CAAC,CAAC;QACJ,EAAE,CAAA;IACJ,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IAC5C,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAE;QACrC,IAAI;QACJ,GAAG,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,OAAO,EAAE;QAC3D,MAAM;QACN,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;QACrC,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ;KAC3C,CAAA;AACH,CAAC,CAAC,CAAA;AAaJ,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAU,EAAE,CACxC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAA;AAEvC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAW,EAAE;IAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;IACxB,OAAO,IAAI,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;AAC7C,CAAC,CAAA;AAQD;;;;GAIG;AACH,MAAM,aAAa,GAAG,CAAC,IAAY,EAA+B,EAAE;IAClE,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IACpC,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,OAAO,CAAC,CAAA;IAC1E,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAClD,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;IACzB,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;QAC3E,KAAK,CAAC,OAAO,CAAC,SAAS,KAAK,MAAM,CAAC,eAAe;QAClD,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QAC3F,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI;QAC3B,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG;QAC7B,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE;KAC3E,CAAA;AACH,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAY,EAAE,IAAY,EAAe,EAAE;IACxE,MAAM,QAAQ,GAAwC,EAAE,CAAA;IACxD,MAAM,OAAO,GAAe,EAAE,CAAA;IAC9B,MAAM,YAAY,GAAa,EAAE,CAAA;IACjC,MAAM,YAAY,GAAmD,EAAE,CAAA;IAEvE,uEAAuE;IACvE,sEAAsE;IACtE,uEAAuE;IACvE,qDAAqD;IACrD,MAAM,MAAM,GAAsC,EAAE,CAAA;IACpD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC1C,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAA;QAC/C,CAAC;aAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC7C,CAAC;IACH,CAAC,CAAC,CAAA;IACF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAA;QAClD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;YACjC,SAAQ;QACV,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,6DAA6D,EAAE,CAAC,CAAA;YACzG,SAAQ;QACV,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAA;QAChD,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5C,CAAC;IAED,OAAO,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC5B,IAAI,OAAO,GAAG,CAAC,CAAA;QACf,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3C,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;YACzC,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,cAAc,EAAE,sBAAsB,CAAC,CAAC,CAAA;YACzF,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;gBAC1E,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAA;gBAChE,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;gBACjC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAA;gBAC3B,KAAK,CAAC,MAAM,CAAC,GAAG,cAAc,QAAQ,sBAAsB,KAAK,MAAM,KAAK,iBAAiB,EAAE,CAAC,CAAA;YAClG,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,GAAG,CAAC,CAAA;QAChB,IAAI,SAAS,GAAG,CAAC,CAAA;QACjB,KAAK,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,YAAY,EAAE,CAAC;YAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,CAAA;YAClE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;gBACzE,SAAQ;YACV,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;YAC5B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACpB,MAAM,OAAO,GACX,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;gBACnD,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;oBACjD,SAAS,CAAA;YACX,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,mEAAmE,EAAE,CAAC,CAAA;gBACzG,SAAQ;YACV,CAAC;YACD,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;YAC7E,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,KAAK,OAAO;gBAC9C,CAAC,KAAK,CAAC,OAAO,IAAI,SAAS,CAAC,KAAK,WAAW,CAAC,OAAO,EAAE,CAAC;gBACzD,SAAS,IAAI,CAAC,CAAA;gBACd,SAAQ;YACV,CAAC;YACD,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,OAAO,EAAE,CAAA;YACxF,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,QAAQ,MAAM,CAAC,eAAe,KAAK,OAAO,KAAK,iBAAiB,GAAG,WAAW,EAAE,CAAC,CAAA;YAC/G,QAAQ,IAAI,CAAC,CAAA;QACf,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAA;IAC5D,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAMD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAY,EAAE,GAAW,EAAc,EAAE;IACrE,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;IACzC,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC/C,GAAG,CAAC,OAAO,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,GAAG,CAAC,SAAS,KAAK,MAAM,CAAC,eAAe;QACzF,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA;IACpC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,6BAA6B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,CAAA;IACjF,CAAC;IACD,OAAO,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC5B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,KAAK,CAAC,YAAY,CAAC;gBACjB,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,+BAA+B,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;gBACnH,KAAK,EAAE,EAAE;gBACT,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;gBAC1B,QAAQ,EAAE,EAAE;aACb,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,CAAA;IACtD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action execution (spec §25.2–§25.4) — the governed write path.
|
|
3
|
+
*
|
|
4
|
+
* `act` resolves the named action's current declaration, validates the
|
|
5
|
+
* caller's arguments against its parameters, evaluates the premises over
|
|
6
|
+
* current beliefs with the parameters pre-bound (the §24.2 left-to-right
|
|
7
|
+
* join — a premise with no solution fails the action), and appends the
|
|
8
|
+
* instantiated effects atomically:
|
|
9
|
+
*
|
|
10
|
+
* - effect confidence is the template's own — an action is the caller's
|
|
11
|
+
* assertion; premises are gates, not evidence (no noisy-AND, §25.2);
|
|
12
|
+
* - appended rows are stamped `@src:action/<name>` (§9.5) and linked
|
|
13
|
+
* `BECAUSE` to the premise rows of the justifying solution and `VIA`
|
|
14
|
+
* to the declaration row (§24.3's obligations);
|
|
15
|
+
* - execution is idempotent: an effect equal to its current belief
|
|
16
|
+
* appends nothing;
|
|
17
|
+
* - the §20.3 shape gate runs by default — effects that introduce new
|
|
18
|
+
* `EXPECTS` violations roll the whole execution back (§25.3);
|
|
19
|
+
* - after a commit that changed belief, a named-and-configured hook runs
|
|
20
|
+
* as a shell command — placeholders shell-quoted, appended claims on
|
|
21
|
+
* stdin, failures reported but never rolled back into the store
|
|
22
|
+
* (§25.4).
|
|
23
|
+
*/
|
|
24
|
+
import { type Violation } from '@cavelang/cli/shape';
|
|
25
|
+
import { type Store } from '@cavelang/store';
|
|
26
|
+
export type ActOptions = {
|
|
27
|
+
/** Validate and report inside a rolled-back transaction; never fires hooks. */
|
|
28
|
+
readonly dryRun?: boolean;
|
|
29
|
+
/** Shape gate (spec §25.3) — on by default; `false` skips the `EXPECTS` re-check. */
|
|
30
|
+
readonly check?: boolean;
|
|
31
|
+
/** Premises match through the alias closure (spec §13.6). */
|
|
32
|
+
readonly aliases?: boolean;
|
|
33
|
+
/** Out-of-band hook command templates by name (spec §25.4). */
|
|
34
|
+
readonly hooks?: Readonly<Record<string, string>>;
|
|
35
|
+
/** Working directory for hook commands. */
|
|
36
|
+
readonly cwd?: string;
|
|
37
|
+
/** Hook wall-clock budget (default 600 s). */
|
|
38
|
+
readonly hookTimeoutSeconds?: number;
|
|
39
|
+
};
|
|
40
|
+
export declare const defaultHookTimeoutSeconds = 600;
|
|
41
|
+
export type EffectOutcome = {
|
|
42
|
+
/** Canonical line of the instantiated effect. */
|
|
43
|
+
readonly line: string;
|
|
44
|
+
readonly outcome: 'appended' | 'updated' | 'unchanged';
|
|
45
|
+
};
|
|
46
|
+
export type HookOutcome = {
|
|
47
|
+
readonly name: string;
|
|
48
|
+
readonly fired: boolean;
|
|
49
|
+
/** Why the hook did not fire (`not configured`, `nothing changed`). */
|
|
50
|
+
readonly note?: string;
|
|
51
|
+
readonly code?: null | number;
|
|
52
|
+
/** Trailing stdout+stderr of the hook command. */
|
|
53
|
+
readonly output?: string;
|
|
54
|
+
readonly error?: string;
|
|
55
|
+
};
|
|
56
|
+
export type ActFailure = {
|
|
57
|
+
readonly ok: false;
|
|
58
|
+
readonly action: string;
|
|
59
|
+
readonly error: string;
|
|
60
|
+
/** The first premise that found no match, when that is the failure. */
|
|
61
|
+
readonly failedPremise?: string;
|
|
62
|
+
/** New `EXPECTS` violations, when the shape gate rejected (spec §25.3). */
|
|
63
|
+
readonly violations?: readonly Violation[];
|
|
64
|
+
};
|
|
65
|
+
export type ActSuccess = {
|
|
66
|
+
readonly ok: true;
|
|
67
|
+
readonly action: string;
|
|
68
|
+
readonly subject: string;
|
|
69
|
+
readonly dryRun: boolean;
|
|
70
|
+
/** Solutions of the premise join — 1 when there are no premises. */
|
|
71
|
+
readonly solutions: number;
|
|
72
|
+
readonly effects: readonly EffectOutcome[];
|
|
73
|
+
readonly appended: number;
|
|
74
|
+
readonly updated: number;
|
|
75
|
+
readonly unchanged: number;
|
|
76
|
+
readonly hook?: HookOutcome;
|
|
77
|
+
};
|
|
78
|
+
export type ActReport = ActFailure | ActSuccess;
|
|
79
|
+
/**
|
|
80
|
+
* An untrusted recommendation from a solver or another planning system.
|
|
81
|
+
* Possessing a proposal grants no authority: `actProposal` resolves the
|
|
82
|
+
* current declaration and repeats ordinary parameter, premise, shape, and
|
|
83
|
+
* hook checks at execution time.
|
|
84
|
+
*/
|
|
85
|
+
export type ActionProposal = {
|
|
86
|
+
readonly action: string;
|
|
87
|
+
readonly parameters: Readonly<Record<string, unknown>>;
|
|
88
|
+
};
|
|
89
|
+
/** POSIX single-quoting — hook placeholders never splice raw (spec §25.4). */
|
|
90
|
+
export declare const shellQuote: (value: string) => string;
|
|
91
|
+
/**
|
|
92
|
+
* Substitutes `{action}` and `{<param>}` placeholders in one pass —
|
|
93
|
+
* substituted values are never re-scanned, unknown placeholders stay.
|
|
94
|
+
*/
|
|
95
|
+
export declare const substitute: (template: string, action: string, args: Readonly<Record<string, unknown>>) => string;
|
|
96
|
+
/**
|
|
97
|
+
* Executes one action (spec §25.2). See the module doc for semantics;
|
|
98
|
+
* `dryRun` computes the same report inside a rolled-back transaction.
|
|
99
|
+
*/
|
|
100
|
+
export declare const act: (store: Store, name: string, args?: Readonly<Record<string, unknown>>, options?: ActOptions) => ActReport;
|
|
101
|
+
/** Execute an untrusted proposal through the governed action boundary. */
|
|
102
|
+
export declare const actProposal: (store: Store, proposal: ActionProposal, options?: ActOptions) => ActReport;
|
|
103
|
+
//# 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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"}
|