@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,330 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `cave connect` entry — argument parsing, pass orchestration (single,
|
|
3
|
+
* `--watch`, `--query`), and report rendering around `run.ts`.
|
|
4
|
+
*/
|
|
5
|
+
import { existsSync, readFileSync, watch as watchFs } from 'node:fs';
|
|
6
|
+
import { basename, dirname, resolve } from 'node:path';
|
|
7
|
+
import { parseArgs } from 'node:util';
|
|
8
|
+
import { Registry } from '@cavelang/canonical';
|
|
9
|
+
import { defaultDbPath, open } from '@cavelang/store';
|
|
10
|
+
import { Record as QueryRecord } from '@cavelang/query';
|
|
11
|
+
import * as Source from "./source.js";
|
|
12
|
+
import * as Template from "./template.js";
|
|
13
|
+
import { connect, federatedQuery } from "./run.js";
|
|
14
|
+
const usage = `cave connect — deterministic structured ingestion through a mapping template (spec §23)
|
|
15
|
+
|
|
16
|
+
Usage:
|
|
17
|
+
cave connect [--db <path>] <source> --map <file> [options]
|
|
18
|
+
|
|
19
|
+
The source is a .csv/.tsv/.json/.jsonl/.ndjson file, a SQLite database
|
|
20
|
+
(with --table or --sql), or an http(s) URL serving JSON or CSV. The
|
|
21
|
+
mapping is an ordinary CAVE document whose ?field variables stand for
|
|
22
|
+
record fields; variable-free blocks append once per run, variable blocks
|
|
23
|
+
instantiate once per record — no LLM in the loop, same input, same claims.
|
|
24
|
+
Mapped claims retain the physical source; CSV/TSV and JSONL records also carry
|
|
25
|
+
their exact one-based inclusive line span (spec §9.8).
|
|
26
|
+
|
|
27
|
+
Options:
|
|
28
|
+
--db <path> knowledge database (default: $CAVE_DB, or cave.db)
|
|
29
|
+
--map <file> mapping template (required)
|
|
30
|
+
--name <name> source name for record identity (default: file basename)
|
|
31
|
+
--key <field> record key field — keyed records diff against their
|
|
32
|
+
previous claims on change; unkeyed records are
|
|
33
|
+
content-addressed
|
|
34
|
+
--format <fmt> csv | tsv | json | jsonl | sqlite (default: by extension)
|
|
35
|
+
--delimiter <char> CSV field delimiter (default , — tab for .tsv)
|
|
36
|
+
--table <name> SQLite table to read (SELECT *)
|
|
37
|
+
--sql <query> SQLite query (alternative to --table)
|
|
38
|
+
--records <path> dot path to the record array inside a JSON document
|
|
39
|
+
--force re-map records whose digest is unchanged
|
|
40
|
+
--prune retract claims of records that disappeared from the source
|
|
41
|
+
--dry-run print the instantiated claims, write nothing
|
|
42
|
+
--watch keep running; re-map when the source or mapping changes
|
|
43
|
+
--query <pattern> federation-lite (spec §23.3): map, query the union,
|
|
44
|
+
roll back — nothing persists; uses an in-memory store
|
|
45
|
+
when the database file does not exist
|
|
46
|
+
--json with --query: emit matches as JSON
|
|
47
|
+
--all with --query: match all beliefs, not just current ones
|
|
48
|
+
--aliases with --query: resolve entities through ALIAS claims
|
|
49
|
+
--no-prelude open the store without the standard §5.5 registry
|
|
50
|
+
|
|
51
|
+
Examples:
|
|
52
|
+
cave connect people.csv --map people.map.cave --db k.db --key id
|
|
53
|
+
cave connect crm.sqlite --table contacts --map contacts.map.cave --key email
|
|
54
|
+
cave connect https://api.example.com/deps.json --records data.items --map deps.map.cave
|
|
55
|
+
cave connect events.jsonl --map events.map.cave --watch
|
|
56
|
+
cave connect people.csv --map people.map.cave --query '?who WORKS-AT acme'`;
|
|
57
|
+
const waitForAbort = (signal) => signal?.aborted === true ? Promise.resolve() : new Promise(resolve => signal?.addEventListener('abort', () => resolve(), { once: true }));
|
|
58
|
+
const renderReport = (report) => {
|
|
59
|
+
const lines = [
|
|
60
|
+
`connect: ${report.records} record(s): ${report.mapped} mapped, ${report.skipped} skipped (unchanged)` +
|
|
61
|
+
`${report.failures.length > 0 ? `, ${report.failures.length} failed` : ''}` +
|
|
62
|
+
`; +${report.added} claim(s)` +
|
|
63
|
+
`${report.retracted > 0 ? `, ${report.retracted} retracted` : ''}` +
|
|
64
|
+
`${report.pruned > 0 ? `, ${report.pruned} record(s) pruned` : ''}` +
|
|
65
|
+
`${report.dropped > 0 ? `, ${report.dropped} line(s) dropped` : ''}`
|
|
66
|
+
];
|
|
67
|
+
for (const note of report.notes) {
|
|
68
|
+
lines.push(` note: ${note}`);
|
|
69
|
+
}
|
|
70
|
+
for (const failure of report.failures) {
|
|
71
|
+
lines.push(` ${failure.record}: FAILED`);
|
|
72
|
+
lines.push(...failure.problems.map(problem => ` ${problem}`));
|
|
73
|
+
}
|
|
74
|
+
return lines.join('\n');
|
|
75
|
+
};
|
|
76
|
+
const loadMapping = (path) => Template.parse(readFileSync(path, 'utf8'));
|
|
77
|
+
const sourceOptions = (values, context) => ({
|
|
78
|
+
...values.format === undefined ? {} : { format: values.format },
|
|
79
|
+
...values.delimiter === undefined ? {} : { delimiter: values.delimiter },
|
|
80
|
+
...values.table === undefined ? {} : { table: values.table },
|
|
81
|
+
...values.sql === undefined ? {} : { sql: values.sql },
|
|
82
|
+
...values.records === undefined ? {} : { records: values.records },
|
|
83
|
+
...context.fetchImpl === undefined ? {} : { fetchImpl: context.fetchImpl }
|
|
84
|
+
});
|
|
85
|
+
const loadSource = async (source, values, context) => {
|
|
86
|
+
try {
|
|
87
|
+
return await Source.load(source, sourceOptions(values, context));
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
throw new Error(`load ${source}: ${error instanceof Error ? error.message : String(error)}`);
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
const runPass = async (store, source, values, name, io, context) => {
|
|
94
|
+
const { mapping, problems } = loadMapping(values.map);
|
|
95
|
+
if (mapping === undefined) {
|
|
96
|
+
io.stderr.write(`${problems.join('\n')}\n`);
|
|
97
|
+
return 1;
|
|
98
|
+
}
|
|
99
|
+
const loaded = await loadSource(source, values, context);
|
|
100
|
+
const report = connect(store, mapping, loaded.records, {
|
|
101
|
+
name,
|
|
102
|
+
source,
|
|
103
|
+
...loaded.spans === undefined ? {} : { spans: loaded.spans },
|
|
104
|
+
...values.key === undefined ? {} : { key: values.key },
|
|
105
|
+
force: values.force === true,
|
|
106
|
+
prune: values.prune === true
|
|
107
|
+
});
|
|
108
|
+
io.stdout.write(`${renderReport(report)}\n`);
|
|
109
|
+
return report.failures.length > 0 ? 1 : 0;
|
|
110
|
+
};
|
|
111
|
+
const runDry = async (source, values, io, context) => {
|
|
112
|
+
const { mapping, problems } = loadMapping(values.map);
|
|
113
|
+
if (mapping === undefined) {
|
|
114
|
+
io.stderr.write(`${problems.join('\n')}\n`);
|
|
115
|
+
return 1;
|
|
116
|
+
}
|
|
117
|
+
const loaded = await loadSource(source, values, context);
|
|
118
|
+
const out = [];
|
|
119
|
+
if (mapping.prelude !== '') {
|
|
120
|
+
out.push('; --- prelude', mapping.prelude.trimEnd());
|
|
121
|
+
}
|
|
122
|
+
let failures = 0;
|
|
123
|
+
loaded.records.forEach((record, at) => {
|
|
124
|
+
const instantiation = Template.instantiate(mapping.templates, name => Template.fieldOf(record, name));
|
|
125
|
+
out.push(`; --- record ${at + 1}`);
|
|
126
|
+
if (instantiation.problems.length > 0) {
|
|
127
|
+
failures += 1;
|
|
128
|
+
out.push(...instantiation.problems.map(problem => `; FAILED — ${problem}`));
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
out.push(instantiation.text.trimEnd());
|
|
132
|
+
});
|
|
133
|
+
io.stdout.write(`${out.join('\n')}\n`);
|
|
134
|
+
return failures > 0 ? 1 : 0;
|
|
135
|
+
};
|
|
136
|
+
const runQuery = async (source, values, name, io, context) => {
|
|
137
|
+
const { mapping, problems } = loadMapping(values.map);
|
|
138
|
+
if (mapping === undefined) {
|
|
139
|
+
io.stderr.write(`${problems.join('\n')}\n`);
|
|
140
|
+
return 1;
|
|
141
|
+
}
|
|
142
|
+
const loaded = await loadSource(source, values, context);
|
|
143
|
+
const db = values.db ?? defaultDbPath();
|
|
144
|
+
const registry = values['no-prelude'] === true ? { registry: Registry.empty } : {};
|
|
145
|
+
const store = existsSync(db) ? open(db, registry) : open(':memory:', registry);
|
|
146
|
+
try {
|
|
147
|
+
const { matches, report } = federatedQuery(store, mapping, loaded.records, {
|
|
148
|
+
name,
|
|
149
|
+
source,
|
|
150
|
+
...loaded.spans === undefined ? {} : { spans: loaded.spans },
|
|
151
|
+
...values.key === undefined ? {} : { key: values.key }
|
|
152
|
+
}, values.query, { all: values.all === true, aliases: values.aliases === true });
|
|
153
|
+
// A failed record means the union was incomplete — matches still print
|
|
154
|
+
// as partial results, but the exit code must not read as success.
|
|
155
|
+
const code = report.failures.length > 0 ? 1 : 0;
|
|
156
|
+
if (code !== 0) {
|
|
157
|
+
io.stderr.write(`${renderReport(report)}\n`);
|
|
158
|
+
}
|
|
159
|
+
if (values.json === true) {
|
|
160
|
+
io.stdout.write(`${JSON.stringify(matches.map(match => QueryRecord.of(store, match)), undefined, 2)}\n`);
|
|
161
|
+
return code;
|
|
162
|
+
}
|
|
163
|
+
if (matches.length === 0) {
|
|
164
|
+
io.stdout.write('no matches\n');
|
|
165
|
+
return code;
|
|
166
|
+
}
|
|
167
|
+
const lines = matches.map(match => {
|
|
168
|
+
const bindings = Object.entries(match.bindings)
|
|
169
|
+
.map(([variable, value]) => `?${variable} = ${value}`)
|
|
170
|
+
.join(' ');
|
|
171
|
+
return bindings !== '' ? bindings : match.row?.raw_line ?? values.query;
|
|
172
|
+
});
|
|
173
|
+
io.stdout.write(`${lines.join('\n')}\n`);
|
|
174
|
+
return code;
|
|
175
|
+
}
|
|
176
|
+
finally {
|
|
177
|
+
store.close();
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
const runWatch = async (store, source, values, name, io, context) => {
|
|
181
|
+
const passOnce = async () => {
|
|
182
|
+
try {
|
|
183
|
+
await runPass(store, source, values, name, io, context);
|
|
184
|
+
}
|
|
185
|
+
catch (error) {
|
|
186
|
+
io.stderr.write(`cave connect watch pass: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
let running = false;
|
|
190
|
+
let queued = false;
|
|
191
|
+
let timer;
|
|
192
|
+
let active;
|
|
193
|
+
const fire = async () => {
|
|
194
|
+
if (running) {
|
|
195
|
+
queued = true;
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
running = true;
|
|
199
|
+
do {
|
|
200
|
+
queued = false;
|
|
201
|
+
await passOnce();
|
|
202
|
+
} while (queued);
|
|
203
|
+
running = false;
|
|
204
|
+
};
|
|
205
|
+
const schedule = context.schedule ?? ((callback, delayMs) => setTimeout(() => { void callback(); }, delayMs));
|
|
206
|
+
const cancelScheduled = context.cancelScheduled ?? (handle => clearTimeout(handle));
|
|
207
|
+
const trigger = () => {
|
|
208
|
+
if (running) {
|
|
209
|
+
queued = true;
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
if (timer !== undefined)
|
|
213
|
+
cancelScheduled(timer);
|
|
214
|
+
timer = schedule(async () => {
|
|
215
|
+
timer = undefined;
|
|
216
|
+
const pass = fire();
|
|
217
|
+
active = pass;
|
|
218
|
+
await pass;
|
|
219
|
+
if (active === pass)
|
|
220
|
+
active = undefined;
|
|
221
|
+
}, 200);
|
|
222
|
+
};
|
|
223
|
+
// Watch the parent directories — editors replace files on save, and a
|
|
224
|
+
// watcher on the file itself dies with the old inode.
|
|
225
|
+
const targets = [...new Set([resolve(source), resolve(values.map)])];
|
|
226
|
+
const watch = context.watch ?? ((path, listener) => watchFs(path, listener));
|
|
227
|
+
const watchers = targets.map(target => watch(dirname(target), (_event, filename) => {
|
|
228
|
+
// Some platforms and watcher backends cannot identify the changed
|
|
229
|
+
// directory entry. A filename-less event is therefore a rescan signal,
|
|
230
|
+
// while Buffer filenames retain the same exact target filtering.
|
|
231
|
+
if (filename === null || filename.toString() === basename(target)) {
|
|
232
|
+
trigger();
|
|
233
|
+
}
|
|
234
|
+
}));
|
|
235
|
+
try {
|
|
236
|
+
// Install watchers before the initial pass. A save during startup is
|
|
237
|
+
// therefore either read by this pass or queued for the next one.
|
|
238
|
+
await passOnce();
|
|
239
|
+
io.stdout.write('watching (ctrl-c to stop)\n');
|
|
240
|
+
await waitForAbort(io.signal);
|
|
241
|
+
return 0;
|
|
242
|
+
}
|
|
243
|
+
finally {
|
|
244
|
+
if (timer !== undefined)
|
|
245
|
+
cancelScheduled(timer);
|
|
246
|
+
watchers.forEach(watcher => watcher.close());
|
|
247
|
+
await active;
|
|
248
|
+
}
|
|
249
|
+
};
|
|
250
|
+
export const runConnect = async (argv, context = {}) => {
|
|
251
|
+
const io = {
|
|
252
|
+
stdout: context.stdout ?? process.stdout,
|
|
253
|
+
stderr: context.stderr ?? process.stderr,
|
|
254
|
+
...context.signal === undefined ? {} : { signal: context.signal }
|
|
255
|
+
};
|
|
256
|
+
const { values, positionals } = parseArgs({
|
|
257
|
+
args: [...argv],
|
|
258
|
+
options: {
|
|
259
|
+
db: { type: 'string' },
|
|
260
|
+
map: { type: 'string' },
|
|
261
|
+
name: { type: 'string' },
|
|
262
|
+
key: { type: 'string' },
|
|
263
|
+
format: { type: 'string' },
|
|
264
|
+
delimiter: { type: 'string' },
|
|
265
|
+
table: { type: 'string' },
|
|
266
|
+
sql: { type: 'string' },
|
|
267
|
+
records: { type: 'string' },
|
|
268
|
+
force: { type: 'boolean' },
|
|
269
|
+
prune: { type: 'boolean' },
|
|
270
|
+
'dry-run': { type: 'boolean' },
|
|
271
|
+
watch: { type: 'boolean' },
|
|
272
|
+
query: { type: 'string' },
|
|
273
|
+
json: { type: 'boolean' },
|
|
274
|
+
all: { type: 'boolean' },
|
|
275
|
+
aliases: { type: 'boolean' },
|
|
276
|
+
'no-prelude': { type: 'boolean' },
|
|
277
|
+
help: { type: 'boolean', short: 'h' }
|
|
278
|
+
},
|
|
279
|
+
allowPositionals: true
|
|
280
|
+
});
|
|
281
|
+
if (values.help === true) {
|
|
282
|
+
io.stdout.write(`${usage}\n`);
|
|
283
|
+
return 0;
|
|
284
|
+
}
|
|
285
|
+
const [source] = positionals;
|
|
286
|
+
if (source === undefined || positionals.length !== 1) {
|
|
287
|
+
io.stderr.write(`cave connect: exactly one source is required\n\n${usage}\n`);
|
|
288
|
+
return 1;
|
|
289
|
+
}
|
|
290
|
+
if (values.map === undefined) {
|
|
291
|
+
io.stderr.write(`cave connect: --map <file> is required\n\n${usage}\n`);
|
|
292
|
+
return 1;
|
|
293
|
+
}
|
|
294
|
+
if (values.format !== undefined && !['csv', 'tsv', 'json', 'jsonl', 'sqlite'].includes(values.format)) {
|
|
295
|
+
io.stderr.write(`cave connect: unknown format ${JSON.stringify(values.format)}\n`);
|
|
296
|
+
return 1;
|
|
297
|
+
}
|
|
298
|
+
if (values.delimiter !== undefined && values.delimiter.length !== 1) {
|
|
299
|
+
io.stderr.write('cave connect: --delimiter must be a single character\n');
|
|
300
|
+
return 1;
|
|
301
|
+
}
|
|
302
|
+
if (values.watch === true && (values.query !== undefined || values['dry-run'] === true || Source.isUrl(source))) {
|
|
303
|
+
io.stderr.write('cave connect: --watch takes a local file source and excludes --query/--dry-run\n');
|
|
304
|
+
return 1;
|
|
305
|
+
}
|
|
306
|
+
const name = values.name ?? Source.nameOf(source);
|
|
307
|
+
try {
|
|
308
|
+
if (values['dry-run'] === true) {
|
|
309
|
+
return await runDry(source, values, io, context);
|
|
310
|
+
}
|
|
311
|
+
if (values.query !== undefined) {
|
|
312
|
+
return await runQuery(source, values, name, io, context);
|
|
313
|
+
}
|
|
314
|
+
const store = open(values.db ?? defaultDbPath(), values['no-prelude'] === true ? { registry: Registry.empty } : {});
|
|
315
|
+
try {
|
|
316
|
+
if (values.watch === true) {
|
|
317
|
+
return await runWatch(store, source, values, name, io, context);
|
|
318
|
+
}
|
|
319
|
+
return await runPass(store, source, values, name, io, context);
|
|
320
|
+
}
|
|
321
|
+
finally {
|
|
322
|
+
store.close();
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
catch (error) {
|
|
326
|
+
io.stderr.write(`cave connect: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
327
|
+
return 1;
|
|
328
|
+
}
|
|
329
|
+
};
|
|
330
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The connect pass (spec §23.2) — instantiate the mapping per record, append
|
|
3
|
+
* through the standard pipeline with record provenance, and keep re-runs
|
|
4
|
+
* row-level incremental via per-record digest claims:
|
|
5
|
+
*
|
|
6
|
+
* ```cave
|
|
7
|
+
* connect/people/42 HAS connect-digest: 93a01c626b3f @src:cave-connect
|
|
8
|
+
* ```
|
|
9
|
+
*
|
|
10
|
+
* Every claim a record produces is auto-stamped `@src:connect/<name>/<key>`
|
|
11
|
+
* (spec §9.5), so a changed record diffs against itself: current claims
|
|
12
|
+
* still carrying the record's stamp but no longer produced by it are
|
|
13
|
+
* retracted (`@ 0%`). `--prune` extends the diff to records that vanished
|
|
14
|
+
* from the source. Explicit `run` provenance is the lifecycle identity;
|
|
15
|
+
* the compatibility stamp is also applied when a template names its own
|
|
16
|
+
* `@src:` context (both are kept).
|
|
17
|
+
*/
|
|
18
|
+
import type { LineSpan } from '@cavelang/core';
|
|
19
|
+
import type { Store } from '@cavelang/store';
|
|
20
|
+
import type { Match, Options as QueryOptions } from '@cavelang/query';
|
|
21
|
+
import * as Template from './template.ts';
|
|
22
|
+
export declare const digestAttribute = "connect-digest";
|
|
23
|
+
export declare const provenanceContext = "src:cave-connect";
|
|
24
|
+
/** First 12 hex chars of SHA-256, mirroring `@cavelang/cli/ingest` (spec §9.5). */
|
|
25
|
+
export declare const digestOf: (content: string) => string;
|
|
26
|
+
/** @returns `true` when the unit's current digest claim matches `digest`. */
|
|
27
|
+
export declare const isConnected: (store: Store, subject: string, digest: string) => boolean;
|
|
28
|
+
export type ConnectOptions = {
|
|
29
|
+
/** Source name for record identity (spec §23.2): `connect/<name>/<key>`. */
|
|
30
|
+
readonly name: string;
|
|
31
|
+
/** Record key field; unkeyed records are content-addressed by digest. */
|
|
32
|
+
readonly key?: string;
|
|
33
|
+
/** Underlying file/URL identity attached to generated record claims. */
|
|
34
|
+
readonly source?: string;
|
|
35
|
+
/** Record-aligned source line spans, when the source format provides them. */
|
|
36
|
+
readonly spans?: readonly LineSpan[];
|
|
37
|
+
/** Re-map records whose digest is unchanged. */
|
|
38
|
+
readonly force?: boolean;
|
|
39
|
+
/** Retract claims of records that disappeared from the source. */
|
|
40
|
+
readonly prune?: boolean;
|
|
41
|
+
};
|
|
42
|
+
export type Failure = {
|
|
43
|
+
/** Record position (1-based) or key, whichever identifies it better. */
|
|
44
|
+
readonly record: string;
|
|
45
|
+
readonly problems: readonly string[];
|
|
46
|
+
};
|
|
47
|
+
export type Report = {
|
|
48
|
+
/** Records in the source. */
|
|
49
|
+
readonly records: number;
|
|
50
|
+
/** Records whose claims were (re-)appended. */
|
|
51
|
+
readonly mapped: number;
|
|
52
|
+
/** Records skipped — digest unchanged (spec §23.2). */
|
|
53
|
+
readonly skipped: number;
|
|
54
|
+
/** Claims appended (record claims + prelude, excluding digest bookkeeping). */
|
|
55
|
+
readonly added: number;
|
|
56
|
+
/** Claims retracted because a changed record no longer yields them. */
|
|
57
|
+
readonly retracted: number;
|
|
58
|
+
/** Records retracted by `--prune`. */
|
|
59
|
+
readonly pruned: number;
|
|
60
|
+
/** Claim lines dropped over missing/empty fields. */
|
|
61
|
+
readonly dropped: number;
|
|
62
|
+
readonly failures: readonly Failure[];
|
|
63
|
+
/** Run-level notes (duplicate keys, prelude state). */
|
|
64
|
+
readonly notes: readonly string[];
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* One connect pass: prelude (digest-skipped as a unit under
|
|
68
|
+
* `connect/<name>`), then each record (digest-skipped under
|
|
69
|
+
* `connect/<name>/<key>`), then optional pruning. Each unit appends inside
|
|
70
|
+
* its own transaction — a failing record rolls back cleanly and never
|
|
71
|
+
* poisons the rest of the run.
|
|
72
|
+
*/
|
|
73
|
+
export declare const connect: (store: Store, mapping: Template.Mapping, records: readonly Record<string, unknown>[], options: ConnectOptions) => Report;
|
|
74
|
+
export type FederatedOutcome = {
|
|
75
|
+
readonly matches: readonly Match[];
|
|
76
|
+
readonly report: Report;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Federation-lite (spec §23.3): appends the mapped claims inside a
|
|
80
|
+
* transaction, runs the CAVE-Q pattern over the union of store and source,
|
|
81
|
+
* and rolls back — external data is consulted at query time, nothing
|
|
82
|
+
* persists (digest bookkeeping included).
|
|
83
|
+
*/
|
|
84
|
+
export declare const federatedQuery: (store: Store, mapping: Template.Mapping, records: readonly Record<string, unknown>[], options: ConnectOptions, pattern: string, queryOptions?: QueryOptions) => FederatedOutcome;
|
|
85
|
+
//# sourceMappingURL=run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,EAAO,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC,eAAO,MAAM,eAAe,mBAAmB,CAAA;AAE/C,eAAO,MAAM,iBAAiB,qBAAqB,CAAA;AAEnD,+EAA+E;AAC/E,eAAO,MAAM,QAAQ,GAAI,SAAS,MAAM,KAAG,MACsB,CAAA;AAcjE,6EAA6E;AAC7E,eAAO,MAAM,WAAW,GAAI,OAAO,KAAK,EAAE,SAAS,MAAM,EAAE,QAAQ,MAAM,KAAG,OAG3E,CAAA;AAMD,MAAM,MAAM,cAAc,GAAG;IAC3B,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,yEAAyE;IACzE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,wEAAwE;IACxE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,8EAA8E;IAC9E,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAA;IACpC,gDAAgD;IAChD,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;IACxB,kEAAkE;IAClE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,wEAAwE;IACxE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CACrC,CAAA;AAED,MAAM,MAAM,MAAM,GAAG;IACnB,6BAA6B;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,uDAAuD;IACvD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,+EAA+E;IAC/E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,uEAAuE;IACvE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,sCAAsC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,qDAAqD;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAA;IACrC,uDAAuD;IACvD,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAClC,CAAA;AAgED;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,GAClB,OAAO,KAAK,EACZ,SAAS,QAAQ,CAAC,OAAO,EACzB,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC3C,SAAS,cAAc,KACtB,MAsHF,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS,KAAK,EAAE,CAAA;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB,CAAA;AAID;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GACzB,OAAO,KAAK,EACZ,SAAS,QAAQ,CAAC,OAAO,EACzB,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC3C,SAAS,cAAc,EACvB,SAAS,MAAM,EACf,eAAc,YAAiB,KAC9B,gBAcF,CAAA"}
|