@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,388 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The settle engine (spec §29.2–§29.4) — evaluates every current
|
|
3
|
+
* automation against the store's change feed and runs the steps of the
|
|
4
|
+
* solutions that fire.
|
|
5
|
+
*
|
|
6
|
+
* - Triggers join exactly like rules and actions (§24.2's left-to-right
|
|
7
|
+
* join over current positive beliefs); a solution **fires** only when
|
|
8
|
+
* it cites at least one *event row* — a premise row newer than the
|
|
9
|
+
* automation's watermark that is neither engine bookkeeping
|
|
10
|
+
* (actors `cave-automate` / `cave-derive` / `cave-act`) nor the
|
|
11
|
+
* automation's own lifecycle run (`automation/<name>`, or `action/<x>`
|
|
12
|
+
* for its action steps). An automation is deaf to its own echo; other
|
|
13
|
+
* automations' output triggers normally, which is how automations chain.
|
|
14
|
+
* A transitive (`VERB+`) premise cites its supporting edge rows (the
|
|
15
|
+
* query layer's `support` option), so a new edge is an event exactly
|
|
16
|
+
* for the solutions whose connection it backs — with the same
|
|
17
|
+
* exclusions applied per edge row.
|
|
18
|
+
* - An automation arms at the later of its stored watermark and its
|
|
19
|
+
* declaration row's tx — it watches from the moment it is declared
|
|
20
|
+
* (§29.2), and a watermark left current by a retracted incarnation
|
|
21
|
+
* never lets a re-declaration fire over rows recorded in between.
|
|
22
|
+
* - Firing records the batch *before* acting on it (§29.3): one
|
|
23
|
+
* `automate-watermark` append (the firing log), then the steps per
|
|
24
|
+
* solution in declaration order — re-runs never re-notify the world.
|
|
25
|
+
* - One `settle` call is a cycle: passes run derivation (§24, opt-out)
|
|
26
|
+
* then every automation, until nothing fires — steps append, the next
|
|
27
|
+
* pass sees the new rows, and idempotent write paths make chains
|
|
28
|
+
* converge (§29.4).
|
|
29
|
+
*/
|
|
30
|
+
import { spawnSync } from 'node:child_process';
|
|
31
|
+
import { Context, Key } from '@cavelang/core';
|
|
32
|
+
import * as Canonical from '@cavelang/canonical';
|
|
33
|
+
import { act, loadAction, shellQuote } from '@cavelang/cli/act';
|
|
34
|
+
import { match } from '@cavelang/query';
|
|
35
|
+
import { derive, satisfies, specialize } from '@cavelang/cli/rules';
|
|
36
|
+
import { Row } from '@cavelang/store';
|
|
37
|
+
import * as Automation from "./automation.js";
|
|
38
|
+
import { bookkeepingKey, loadAutomations, provenanceContext } from "./declare.js";
|
|
39
|
+
/** Attribute of per-automation watermark claims (spec §29.2). */
|
|
40
|
+
export const watermarkAttribute = 'automate-watermark';
|
|
41
|
+
export const defaultMaxPasses = 20;
|
|
42
|
+
export const defaultAgentTimeoutSeconds = 120;
|
|
43
|
+
/** Engine bookkeeping sources — never event rows (spec §29.2). */
|
|
44
|
+
const infrastructureActors = ['cave-automate', 'cave-derive', 'cave-act'];
|
|
45
|
+
/** `true` when the report contains a failed step or a parse problem. */
|
|
46
|
+
export const settled = (report) => report.problems.length === 0 &&
|
|
47
|
+
report.automations.every(automation => automation.firings.every(firing => firing.steps.every(step => step.outcome !== 'failed')));
|
|
48
|
+
const maxTx = (store) => store.db.prepare('SELECT MAX(tx) AS t FROM cave_claim').get().t ?? undefined;
|
|
49
|
+
/** The §24.2 join with no pre-bound parameters — the trigger evaluation. */
|
|
50
|
+
const evaluateTrigger = (store, automation, aliases) => {
|
|
51
|
+
let solutions = [{ bindings: {}, rows: [] }];
|
|
52
|
+
for (const premise of automation.premises) {
|
|
53
|
+
if (premise.kind === 'constraint') {
|
|
54
|
+
solutions = solutions.filter(solution => satisfies(solution.bindings[premise.variable], premise.op, premise.value));
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
solutions = solutions.flatMap(solution => {
|
|
58
|
+
const pattern = specialize(premise.pattern, solution.bindings);
|
|
59
|
+
if (pattern === undefined) {
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
return match(store, pattern, { aliases, support: true }).map(found => ({
|
|
63
|
+
bindings: { ...solution.bindings, ...found.bindings },
|
|
64
|
+
rows: found.row !== undefined ? [...solution.rows, found.row] :
|
|
65
|
+
found.rows !== undefined ? [...solution.rows, ...found.rows] :
|
|
66
|
+
solution.rows
|
|
67
|
+
}));
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
if (solutions.length === 0) {
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return solutions;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Sources whose rows an automation must not treat as events — its own
|
|
78
|
+
* agent replies and the effects of its own action steps (spec §29.2).
|
|
79
|
+
*/
|
|
80
|
+
const echoRuns = (automation) => [
|
|
81
|
+
automation.subject,
|
|
82
|
+
...automation.steps.flatMap(step => step.kind === 'action' ? [`action/${step.name}`] : [])
|
|
83
|
+
];
|
|
84
|
+
/**
|
|
85
|
+
* Raw text of a stored binding — literal delimiters stripped, so values
|
|
86
|
+
* read naturally in prompts and hook placeholders and round-trip through
|
|
87
|
+
* the §25.2 argument formatting.
|
|
88
|
+
*/
|
|
89
|
+
const rawBinding = (bound) => Row.parseValue(bound).raw;
|
|
90
|
+
/** Substitutes bound `?var`s into a prompt template, longest name first. */
|
|
91
|
+
export const substitutePrompt = (template, bindings) => {
|
|
92
|
+
let text = template;
|
|
93
|
+
for (const name of Object.keys(bindings).sort((a, b) => b.length - a.length)) {
|
|
94
|
+
const escaped = name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
95
|
+
text = text.replace(new RegExp(`\\?${escaped}(?![A-Za-z0-9_-])`, 'g'), rawBinding(bindings[name]));
|
|
96
|
+
}
|
|
97
|
+
return text;
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Substitutes `{automation}` and `{<var>}` placeholders in one pass —
|
|
101
|
+
* every value shell-quoted, never spliced raw (§25.4's rule); unknown
|
|
102
|
+
* placeholders stay.
|
|
103
|
+
*/
|
|
104
|
+
export const substituteHook = (template, automation, bindings) => template.replace(/\{([A-Za-z][A-Za-z0-9_-]*)\}/g, (whole, name) => name === 'automation' ? shellQuote(automation) :
|
|
105
|
+
bindings[name] !== undefined ? shellQuote(rawBinding(bindings[name])) :
|
|
106
|
+
whole);
|
|
107
|
+
/** Canonical lines of a solution's premise rows, deduplicated, join order. */
|
|
108
|
+
const solutionLines = (store, solution) => {
|
|
109
|
+
const seen = new Set();
|
|
110
|
+
const lines = [];
|
|
111
|
+
for (const row of solution.rows) {
|
|
112
|
+
if (!seen.has(row.id)) {
|
|
113
|
+
seen.add(row.id);
|
|
114
|
+
lines.push(Canonical.emitClaim(store.toClaim(row)));
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return lines;
|
|
118
|
+
};
|
|
119
|
+
/** The engine-built prompt around one instantiated template (spec §29.3). */
|
|
120
|
+
export const buildPrompt = (automation, description, instruction, claims) => `You are the agent step of the CAVE automation "${automation.name}"${description === undefined ? '' : ` — ${description}`}.
|
|
121
|
+
|
|
122
|
+
Instruction:
|
|
123
|
+
${instruction}
|
|
124
|
+
|
|
125
|
+
Triggering claims (current beliefs matched by the trigger):
|
|
126
|
+
\`\`\`cave
|
|
127
|
+
${claims.join('\n')}
|
|
128
|
+
\`\`\`
|
|
129
|
+
|
|
130
|
+
Reply with CAVE claim lines to record in the store — they are appended
|
|
131
|
+
stamped @src:${automation.subject}, and a line equal to current belief is
|
|
132
|
+
skipped. Reply with nothing to record nothing. Output only CAVE lines.`;
|
|
133
|
+
const runAction = (store, step, solution, options) => {
|
|
134
|
+
const resolved = loadAction(store, step.name);
|
|
135
|
+
if (resolved === undefined) {
|
|
136
|
+
return { step: step.text, kind: 'action', outcome: 'failed', detail: `no current action "action/${step.name}" — declare it first (spec §25.1)` };
|
|
137
|
+
}
|
|
138
|
+
if (resolved.loaded === undefined) {
|
|
139
|
+
return { step: step.text, kind: 'action', outcome: 'failed', detail: `the declaration of "action/${step.name}" does not parse: ${resolved.problems.join('; ')}` };
|
|
140
|
+
}
|
|
141
|
+
const args = {};
|
|
142
|
+
for (const param of resolved.loaded.action.params) {
|
|
143
|
+
const bound = solution.bindings[param];
|
|
144
|
+
if (bound === undefined) {
|
|
145
|
+
return { step: step.text, kind: 'action', outcome: 'failed', detail: `the trigger did not bind ?${param} — action parameters bind from same-named trigger variables (spec §29.3)` };
|
|
146
|
+
}
|
|
147
|
+
args[param] = rawBinding(bound);
|
|
148
|
+
}
|
|
149
|
+
const report = act(store, step.name, args, {
|
|
150
|
+
check: options.check !== false,
|
|
151
|
+
aliases: options.aliases === true,
|
|
152
|
+
...options.hooks === undefined ? {} : { hooks: options.hooks },
|
|
153
|
+
...options.cwd === undefined ? {} : { cwd: options.cwd },
|
|
154
|
+
...options.hookTimeoutSeconds === undefined ? {} : { hookTimeoutSeconds: options.hookTimeoutSeconds }
|
|
155
|
+
});
|
|
156
|
+
if (!report.ok) {
|
|
157
|
+
return { step: step.text, kind: 'action', outcome: 'failed', detail: report.error };
|
|
158
|
+
}
|
|
159
|
+
const hook = report.hook !== undefined && report.hook.error !== undefined ? `; hook ${report.hook.name}: ${report.hook.error}` : '';
|
|
160
|
+
return {
|
|
161
|
+
step: step.text,
|
|
162
|
+
kind: 'action',
|
|
163
|
+
outcome: hook === '' ? 'ok' : 'failed',
|
|
164
|
+
appended: report.appended + report.updated,
|
|
165
|
+
detail: `+${report.appended} appended, ${report.updated} updated, ${report.unchanged} unchanged${hook}`
|
|
166
|
+
};
|
|
167
|
+
};
|
|
168
|
+
const runHook = (name, automation, solution, lines, options) => {
|
|
169
|
+
const step = `hook/${name}`;
|
|
170
|
+
const template = options.hooks?.[name];
|
|
171
|
+
if (template === undefined) {
|
|
172
|
+
return { step, kind: 'hook', outcome: 'not-configured', detail: 'hook not configured (spec §25.4)' };
|
|
173
|
+
}
|
|
174
|
+
const command = substituteHook(template, automation.name, solution.bindings);
|
|
175
|
+
const result = spawnSync(command, {
|
|
176
|
+
shell: true,
|
|
177
|
+
encoding: 'utf8',
|
|
178
|
+
input: `${lines.join('\n')}\n`,
|
|
179
|
+
timeout: (options.hookTimeoutSeconds ?? 600) * 1000,
|
|
180
|
+
...options.cwd === undefined ? {} : { cwd: options.cwd }
|
|
181
|
+
});
|
|
182
|
+
const output = `${result.stdout ?? ''}${result.stderr ?? ''}`.trim();
|
|
183
|
+
// A hook may exit without reading its stdin (e.g. `true`): the input
|
|
184
|
+
// pipe then reports EPIPE even though the hook ran and exited cleanly,
|
|
185
|
+
// so only non-EPIPE spawn errors fail the step — the exit status still
|
|
186
|
+
// arrives and is judged as usual.
|
|
187
|
+
const spawnFailure = result.error !== undefined && result.error.code !== 'EPIPE' ?
|
|
188
|
+
result.error.message :
|
|
189
|
+
undefined;
|
|
190
|
+
const error = spawnFailure !== undefined ? spawnFailure :
|
|
191
|
+
result.status !== 0 ? `hook exited with ${result.status ?? `signal ${result.signal}`}` :
|
|
192
|
+
undefined;
|
|
193
|
+
const detail = error !== undefined ? `${error}${output === '' ? '' : ` — ${output}`}` :
|
|
194
|
+
output === '' ? undefined : output;
|
|
195
|
+
return {
|
|
196
|
+
step,
|
|
197
|
+
kind: 'hook',
|
|
198
|
+
outcome: error === undefined ? 'ok' : 'failed',
|
|
199
|
+
...detail === undefined ? {} : { detail }
|
|
200
|
+
};
|
|
201
|
+
};
|
|
202
|
+
/**
|
|
203
|
+
* Appends an agent reply (spec §29.3): lenient parse, `@src:automation/<name>`
|
|
204
|
+
* stamp, and the §24.4 idempotency convention per claim — a reply claim
|
|
205
|
+
* equal to its current belief appends nothing (claims cited by qualifier
|
|
206
|
+
* edges are kept, so reply structure survives).
|
|
207
|
+
*/
|
|
208
|
+
export const appendReply = (store, automation, reply) => {
|
|
209
|
+
const result = Canonical.canonicalizeText(reply, store.registry());
|
|
210
|
+
const problems = result.problems.map(problem => `reply line ${problem.line}: ${problem.message}`);
|
|
211
|
+
const referenced = new Set();
|
|
212
|
+
for (const edge of result.edges) {
|
|
213
|
+
referenced.add(edge.parent);
|
|
214
|
+
referenced.add(edge.child);
|
|
215
|
+
}
|
|
216
|
+
const keep = [];
|
|
217
|
+
result.claims.forEach((entry, index) => {
|
|
218
|
+
const stamp = Context.source(automation.subject);
|
|
219
|
+
const stamped = entry.claim.contexts.includes(stamp) ?
|
|
220
|
+
entry.claim :
|
|
221
|
+
{ ...entry.claim, contexts: [...entry.claim.contexts, stamp] };
|
|
222
|
+
const current = store.currentBelief(Key.of(stamped));
|
|
223
|
+
const columns = Row.toColumns(entry.claim);
|
|
224
|
+
const unchanged = current !== undefined && Math.abs(current.conf - entry.claim.conf) < 1e-9 &&
|
|
225
|
+
current.value_text === columns.valueText;
|
|
226
|
+
if (!unchanged || referenced.has(index)) {
|
|
227
|
+
keep.push(index);
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
if (keep.length === 0) {
|
|
231
|
+
return { appended: 0, problems };
|
|
232
|
+
}
|
|
233
|
+
const remap = new Map(keep.map((old, at) => [old, at]));
|
|
234
|
+
const inserted = store.insertResult({
|
|
235
|
+
claims: keep.map(index => result.claims[index]),
|
|
236
|
+
edges: result.edges.map(edge => ({ parent: remap.get(edge.parent), role: edge.role, child: remap.get(edge.child) })),
|
|
237
|
+
registry: result.registry,
|
|
238
|
+
problems: []
|
|
239
|
+
}, { source: automation.subject, lifecycle: true });
|
|
240
|
+
return { appended: inserted.ids.length, problems };
|
|
241
|
+
};
|
|
242
|
+
const runPrompt = async (store, step, automation, description, solution, lines, options) => {
|
|
243
|
+
if (options.complete === undefined) {
|
|
244
|
+
return { step: step.text, kind: 'prompt', outcome: 'not-configured', detail: 'no agent configured (--agent, spec §29.3)' };
|
|
245
|
+
}
|
|
246
|
+
const prompt = buildPrompt(automation, description, substitutePrompt(step.template, solution.bindings), lines);
|
|
247
|
+
let reply;
|
|
248
|
+
try {
|
|
249
|
+
reply = await options.complete(prompt);
|
|
250
|
+
}
|
|
251
|
+
catch (error) {
|
|
252
|
+
return { step: step.text, kind: 'prompt', outcome: 'failed', detail: error instanceof Error ? error.message : String(error) };
|
|
253
|
+
}
|
|
254
|
+
if (reply.trim() === '') {
|
|
255
|
+
return { step: step.text, kind: 'prompt', outcome: 'ok', appended: 0, detail: 'empty reply — nothing recorded' };
|
|
256
|
+
}
|
|
257
|
+
const { appended, problems } = appendReply(store, automation, reply);
|
|
258
|
+
return {
|
|
259
|
+
step: step.text,
|
|
260
|
+
kind: 'prompt',
|
|
261
|
+
outcome: 'ok',
|
|
262
|
+
appended,
|
|
263
|
+
detail: `+${appended} claim(s)${problems.length === 0 ? '' : `; ${problems.join('; ')}`}`
|
|
264
|
+
};
|
|
265
|
+
};
|
|
266
|
+
/**
|
|
267
|
+
* One settle cycle (spec §29.4): passes of derivation + trigger
|
|
268
|
+
* evaluation until nothing fires, bounded by `maxPasses`. Firing appends
|
|
269
|
+
* the watermark before running steps (§29.3); step failures are reported
|
|
270
|
+
* in the outcome and never abort the cycle.
|
|
271
|
+
*/
|
|
272
|
+
export const settle = async (store, options = {}) => {
|
|
273
|
+
const aliases = options.aliases === true;
|
|
274
|
+
const maxPasses = options.maxPasses ?? defaultMaxPasses;
|
|
275
|
+
const outcomes = new Map();
|
|
276
|
+
const problems = new Map();
|
|
277
|
+
const notes = [];
|
|
278
|
+
const deriveTotals = { passes: 0, appended: 0, updated: 0, retracted: 0, unchanged: 0 };
|
|
279
|
+
const anyRowSince = store.db.prepare('SELECT 1 AS hit FROM cave_claim WHERE tx > ? LIMIT 1');
|
|
280
|
+
let passes = 0;
|
|
281
|
+
let progress = true;
|
|
282
|
+
while (progress && passes < maxPasses) {
|
|
283
|
+
passes += 1;
|
|
284
|
+
progress = false;
|
|
285
|
+
if (options.derive !== false) {
|
|
286
|
+
const report = derive(store, { aliases });
|
|
287
|
+
deriveTotals.passes += report.passes;
|
|
288
|
+
deriveTotals.appended += report.appended;
|
|
289
|
+
deriveTotals.updated += report.updated;
|
|
290
|
+
deriveTotals.retracted += report.retracted;
|
|
291
|
+
deriveTotals.unchanged += report.unchanged;
|
|
292
|
+
for (const problem of report.problems) {
|
|
293
|
+
const note = `${problem.subject}: ${problem.problems.join('; ')}`;
|
|
294
|
+
if (!notes.includes(note)) {
|
|
295
|
+
notes.push(note);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
if (report.appended + report.updated + report.retracted > 0) {
|
|
299
|
+
progress = true;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
const loaded = loadAutomations(store);
|
|
303
|
+
for (const problem of loaded.problems) {
|
|
304
|
+
problems.set(problem.subject, problem);
|
|
305
|
+
}
|
|
306
|
+
for (const entry of loaded.loaded) {
|
|
307
|
+
const { automation, row, description } = entry;
|
|
308
|
+
let outcome = outcomes.get(automation.subject);
|
|
309
|
+
if (outcome === undefined) {
|
|
310
|
+
outcome = {
|
|
311
|
+
subject: automation.subject,
|
|
312
|
+
name: automation.name,
|
|
313
|
+
text: automation.text,
|
|
314
|
+
...description === undefined ? {} : { description },
|
|
315
|
+
evaluations: 0,
|
|
316
|
+
fired: 0,
|
|
317
|
+
firings: []
|
|
318
|
+
};
|
|
319
|
+
outcomes.set(automation.subject, outcome);
|
|
320
|
+
}
|
|
321
|
+
// Arming (spec §29.2): the later of the stored watermark and the
|
|
322
|
+
// declaration row's tx. Retracting an automation leaves its
|
|
323
|
+
// watermark claim current, so a re-declared automation would
|
|
324
|
+
// otherwise arm at the old mark and fire once over every row
|
|
325
|
+
// recorded while it was retracted (BUGS.md automate-stale-watermark)
|
|
326
|
+
// — the dual of the rules engine's §24.4 staleness rule: derivation
|
|
327
|
+
// must re-fire over pre-declaration rows, an automation must not.
|
|
328
|
+
const stored = store.currentBelief(bookkeepingKey(automation.subject, watermarkAttribute));
|
|
329
|
+
const mark = stored !== undefined && stored.conf > 0 &&
|
|
330
|
+
stored.value_text !== null && stored.value_text > row.tx ?
|
|
331
|
+
stored.value_text :
|
|
332
|
+
row.tx;
|
|
333
|
+
if (anyRowSince.get(mark) === undefined) {
|
|
334
|
+
continue;
|
|
335
|
+
}
|
|
336
|
+
outcome.evaluations += 1;
|
|
337
|
+
const solutions = evaluateTrigger(store, automation, aliases);
|
|
338
|
+
const excludedRuns = new Set(echoRuns(automation));
|
|
339
|
+
const isEvent = (premiseRow) => {
|
|
340
|
+
const provenance = store.provenanceOf(premiseRow);
|
|
341
|
+
return premiseRow.tx > mark &&
|
|
342
|
+
!provenance.actors.some(actor => infrastructureActors.includes(actor)) &&
|
|
343
|
+
!provenance.runs.some(run => excludedRuns.has(run));
|
|
344
|
+
};
|
|
345
|
+
const firing = solutions.filter(solution => solution.rows.some(isEvent));
|
|
346
|
+
if (firing.length === 0) {
|
|
347
|
+
continue;
|
|
348
|
+
}
|
|
349
|
+
// Record the batch before acting on it (spec §29.3): the watermark
|
|
350
|
+
// append is the firing log, and a re-run never re-notifies.
|
|
351
|
+
const boundary = maxTx(store);
|
|
352
|
+
const stepCount = firing.length * automation.steps.length;
|
|
353
|
+
store.ingest(`${automation.subject} HAS ${watermarkAttribute}: ${boundary} @${provenanceContext} ` +
|
|
354
|
+
`; fired ${firing.length} solution(s), ${stepCount} step(s)`);
|
|
355
|
+
progress = true;
|
|
356
|
+
outcome.fired += firing.length;
|
|
357
|
+
for (const solution of firing) {
|
|
358
|
+
const lines = solutionLines(store, solution);
|
|
359
|
+
const firingOutcome = { bindings: solution.bindings, steps: [] };
|
|
360
|
+
outcome.firings.push(firingOutcome);
|
|
361
|
+
for (const step of automation.steps) {
|
|
362
|
+
switch (step.kind) {
|
|
363
|
+
case 'action':
|
|
364
|
+
firingOutcome.steps.push(runAction(store, step, solution, options));
|
|
365
|
+
break;
|
|
366
|
+
case 'hook':
|
|
367
|
+
firingOutcome.steps.push(runHook(step.name, automation, solution, lines, options));
|
|
368
|
+
break;
|
|
369
|
+
case 'prompt':
|
|
370
|
+
firingOutcome.steps.push(await runPrompt(store, step, automation, description, solution, lines, options));
|
|
371
|
+
break;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
if (passes >= maxPasses && progress) {
|
|
378
|
+
notes.push(`stopped at ${maxPasses} passes before settling — re-run to continue, or raise maxPasses (spec §29.4)`);
|
|
379
|
+
}
|
|
380
|
+
return {
|
|
381
|
+
passes,
|
|
382
|
+
automations: [...outcomes.values()],
|
|
383
|
+
problems: [...problems.values()],
|
|
384
|
+
...options.derive === false ? {} : { derive: deriveTotals },
|
|
385
|
+
notes
|
|
386
|
+
};
|
|
387
|
+
};
|
|
388
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@cavelang/cli/automate` — CAVE automations (spec §29): the event-driven
|
|
3
|
+
* loop. In-band declarations pair a trigger pattern with named steps, and
|
|
4
|
+
* `settle` evaluates them whenever belief changes — new claims matching
|
|
5
|
+
* patterns fire rules, actions, out-of-band hooks, or an agent prompt.
|
|
6
|
+
*
|
|
7
|
+
* ```ts
|
|
8
|
+
* import { declareAutomations, settle } from '@cavelang/cli/automate'
|
|
9
|
+
*
|
|
10
|
+
* declareAutomations(store, 'automation/ack HAS automation: ' +
|
|
11
|
+
* '`?svc HAS error-rate: ?r, ?r > 0.05 => action/open-incident`')
|
|
12
|
+
* await settle(store, { hooks })
|
|
13
|
+
* // new error-rate claims execute action/open-incident with ?svc bound
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* Triggers join like rules (§24.2); a solution fires only when it cites a
|
|
17
|
+
* row newer than the automation's watermark — an automation is armed at
|
|
18
|
+
* its declaration, never wakes itself, and chains with others because
|
|
19
|
+
* every write path is idempotent (§29.2–§29.4). Hook commands and the
|
|
20
|
+
* agent command stay out-of-band (§19.5); the store only ever names them.
|
|
21
|
+
*/
|
|
22
|
+
export * as Automation from './automation.ts';
|
|
23
|
+
export { declareAutomations, listAutomations, loadAutomations, provenanceContext, retractAutomation } from './declare.ts';
|
|
24
|
+
export type { Declaration, ListedAutomation, LoadProblem, Loaded, Retraction } from './declare.ts';
|
|
25
|
+
export { appendReply, buildPrompt, defaultAgentTimeoutSeconds, defaultMaxPasses, settle, settled, substituteHook, substitutePrompt, watermarkAttribute } from './engine.ts';
|
|
26
|
+
export type { AutomationOutcome, DeriveTotals, FiringOutcome, SettleOptions, SettleReport, StepOutcome } from './engine.ts';
|
|
27
|
+
export { runAutomate, watchCycle } from './main.ts';
|
|
28
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACzH,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAClG,OAAO,EACL,WAAW,EAAE,WAAW,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,EACvF,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EACrD,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC3H,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@cavelang/cli/automate` — CAVE automations (spec §29): the event-driven
|
|
3
|
+
* loop. In-band declarations pair a trigger pattern with named steps, and
|
|
4
|
+
* `settle` evaluates them whenever belief changes — new claims matching
|
|
5
|
+
* patterns fire rules, actions, out-of-band hooks, or an agent prompt.
|
|
6
|
+
*
|
|
7
|
+
* ```ts
|
|
8
|
+
* import { declareAutomations, settle } from '@cavelang/cli/automate'
|
|
9
|
+
*
|
|
10
|
+
* declareAutomations(store, 'automation/ack HAS automation: ' +
|
|
11
|
+
* '`?svc HAS error-rate: ?r, ?r > 0.05 => action/open-incident`')
|
|
12
|
+
* await settle(store, { hooks })
|
|
13
|
+
* // new error-rate claims execute action/open-incident with ?svc bound
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* Triggers join like rules (§24.2); a solution fires only when it cites a
|
|
17
|
+
* row newer than the automation's watermark — an automation is armed at
|
|
18
|
+
* its declaration, never wakes itself, and chains with others because
|
|
19
|
+
* every write path is idempotent (§29.2–§29.4). Hook commands and the
|
|
20
|
+
* agent command stay out-of-band (§19.5); the store only ever names them.
|
|
21
|
+
*/
|
|
22
|
+
export * as Automation from "./automation.js";
|
|
23
|
+
export { declareAutomations, listAutomations, loadAutomations, provenanceContext, retractAutomation } from "./declare.js";
|
|
24
|
+
export { appendReply, buildPrompt, defaultAgentTimeoutSeconds, defaultMaxPasses, settle, settled, substituteHook, substitutePrompt, watermarkAttribute } from "./engine.js";
|
|
25
|
+
export { runAutomate, watchCycle } from "./main.js";
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAEzH,OAAO,EACL,WAAW,EAAE,WAAW,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,EACvF,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EACrD,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `cave automate` entry (spec §29.5) — argument parsing, the declare /
|
|
3
|
+
* list / retract lifecycle, one settle cycle under `--once`, and the
|
|
4
|
+
* long-running loop: a cheap `MAX(tx)` poll, a cycle whenever it moves.
|
|
5
|
+
*/
|
|
6
|
+
import type { Store } from '@cavelang/store';
|
|
7
|
+
import type { SettleOptions, SettleReport } from './engine.ts';
|
|
8
|
+
export type RunContext = {
|
|
9
|
+
readonly stdin?: NodeJS.ReadableStream;
|
|
10
|
+
readonly stdout?: NodeJS.WritableStream;
|
|
11
|
+
readonly stderr?: NodeJS.WritableStream;
|
|
12
|
+
readonly signal?: AbortSignal;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* One watch cycle (spec §29.5): settle, report, and return the tx
|
|
16
|
+
* boundary the poll may treat as seen. The boundary is captured *before*
|
|
17
|
+
* each settle, and the cycle re-settles until `MAX(tx)` is unchanged
|
|
18
|
+
* across one — a write landing while a settle runs (or while its report
|
|
19
|
+
* renders) re-enters the loop instead of being marked seen unprocessed
|
|
20
|
+
* (BUGS.md watch-watermark-race). Settle's own appends move `MAX(tx)`
|
|
21
|
+
* too, so a cycle that fired ends with one confirming settle; quiescent
|
|
22
|
+
* write paths (§29.4) are what make the loop terminate.
|
|
23
|
+
*/
|
|
24
|
+
export declare const watchCycle: (store: Store, options: SettleOptions, onReport: (report: SettleReport) => void) => Promise<null | string>;
|
|
25
|
+
export declare const runAutomate: (argv: readonly string[], context?: RunContext) => Promise<number>;
|
|
26
|
+
//# sourceMappingURL=main.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAG5C,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAyE9D,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAA;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAA;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAA;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAC9B,CAAA;AAkFD;;;;;;;;;GASG;AACH,eAAO,MAAM,UAAU,GACrB,OAAO,KAAK,EACZ,SAAS,aAAa,EACtB,UAAU,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,KACvC,OAAO,CAAC,IAAI,GAAG,MAAM,CAQvB,CAAA;AAuCD,eAAO,MAAM,WAAW,GAAU,MAAM,SAAS,MAAM,EAAE,EAAE,UAAS,UAAe,KAAG,OAAO,CAAC,MAAM,CA8GnG,CAAA"}
|