@cavelang/cli 0.27.14 → 0.29.1
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,584 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The CAVE engine surface exposed as MCP tools, all operating on one open
|
|
3
|
+
* `@cavelang/store` database:
|
|
4
|
+
*
|
|
5
|
+
* | Tool | Purpose |
|
|
6
|
+
* |---|---|
|
|
7
|
+
* | `cave_add` | append CAVE text (extraction output) to the store |
|
|
8
|
+
* | `cave_query` | run a CAVE-Q pattern (spec §12) |
|
|
9
|
+
* | `cave_fuse` | Bayesian fusion of numeric estimates (§10.1) — named computation |
|
|
10
|
+
* | `cave_search` | full-text search over claims and comments |
|
|
11
|
+
* | `cave_about` | current claims about an entity, both directions |
|
|
12
|
+
* | `cave_neighbors` | named forward + inverse edges of an entity (§13.3) |
|
|
13
|
+
* | `cave_reconstruct` | cave-loop active reconstruction from seed cues (§18) |
|
|
14
|
+
* | `cave_derive` | fire the stored rules (§24) — named computation |
|
|
15
|
+
* | `cave_export` | canonical CAVE text of the store |
|
|
16
|
+
* | `cave_lint` | parse text and report diagnostics without storing |
|
|
17
|
+
*
|
|
18
|
+
* Results are text — canonical CAVE lines wherever claims are returned,
|
|
19
|
+
* because that is the notation the client model is instructed with.
|
|
20
|
+
*
|
|
21
|
+
* Every tool declares its permission class; `scopedTools` narrows the
|
|
22
|
+
* served surface to a `Scope` (`--read-only`, `--permissions`, `--tools`) —
|
|
23
|
+
* the minimum viable agent permission boundary.
|
|
24
|
+
*/
|
|
25
|
+
import { Claim, Key, Multiplier, Value } from '@cavelang/core';
|
|
26
|
+
import { parseDocument } from '@cavelang/parser';
|
|
27
|
+
import { canonicalizeText, emitClaim } from '@cavelang/canonical';
|
|
28
|
+
import { Sensitivity } from '@cavelang/store';
|
|
29
|
+
import { defaultLimit as defaultQueryLimit, page as caveQueryPage, query as caveQuery } from '@cavelang/query';
|
|
30
|
+
import { estimateOf, fuse } from '@cavelang/fusion';
|
|
31
|
+
import { derive } from '@cavelang/cli/rules';
|
|
32
|
+
import { reconstruct, heuristicPolicy, sqliteStore } from '@cavelang/cli/loop';
|
|
33
|
+
import { act, listActions } from '@cavelang/cli/act';
|
|
34
|
+
export const permissions = ['read', 'evaluate', 'record', 'action'];
|
|
35
|
+
const text = (value, name) => {
|
|
36
|
+
if (typeof value !== 'string' || value === '') {
|
|
37
|
+
throw new Error(`${name} must be a non-empty string`);
|
|
38
|
+
}
|
|
39
|
+
return value;
|
|
40
|
+
};
|
|
41
|
+
const integer = (value, name) => {
|
|
42
|
+
if (typeof value !== 'number' || !Number.isInteger(value)) {
|
|
43
|
+
throw new Error(`${name} must be an integer`);
|
|
44
|
+
}
|
|
45
|
+
return value;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Current claims mentioning `entity` on either endpoint, as canonical
|
|
49
|
+
* lines — through the alias closure (spec §13.6) when asked, restricted
|
|
50
|
+
* to the §26 resolved winners when asked. A retracted (`@ 0%`) current
|
|
51
|
+
* belief has no current support (spec §9.3) and is skipped, matching
|
|
52
|
+
* the CAVE-Q default and store traversal.
|
|
53
|
+
*/
|
|
54
|
+
const aboutLines = (store, entity, aliases, resolve) => {
|
|
55
|
+
const names = new Set(aliases ? store.aliasesOf(entity) : [entity]);
|
|
56
|
+
const rows = resolve ? store.resolvedBeliefs({ aliases }) : store.currentBeliefs();
|
|
57
|
+
return rows
|
|
58
|
+
.filter(row => row.conf > 0 && (names.has(row.subject) || (row.object !== null && names.has(row.object))))
|
|
59
|
+
.map(row => emitClaim(store.toClaim(row)));
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Multiplier-compacted rendering of a fused number, 4 significant digits:
|
|
63
|
+
* `19965517241` → `19.97B` (spec §7.1 multipliers, largest that fits).
|
|
64
|
+
* The residual digits go through `Value.formatNumber` — tiny (`2e-7`) and
|
|
65
|
+
* huge (`2e+22` after T-compression) magnitudes must still emit as plain
|
|
66
|
+
* decimal, the only number form the CAVE grammar accepts (spec §16).
|
|
67
|
+
*/
|
|
68
|
+
const compactNumber = (n) => {
|
|
69
|
+
for (const [letter, factor] of Object.entries(Multiplier.factors)) {
|
|
70
|
+
if (Math.abs(n) >= factor) {
|
|
71
|
+
return `${Value.formatNumber(Number((n / factor).toPrecision(4)))}${letter}`;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return Value.formatNumber(Number(n.toPrecision(4)));
|
|
75
|
+
};
|
|
76
|
+
/** Compact number with its unit as CAVE writes values: `19.97B USD/yr`, `94.5%`. */
|
|
77
|
+
const withUnit = (n, unit) => `${compactNumber(n)}${unit === undefined ? '' : unit === '%' ? '%' : ` ${unit}`}`;
|
|
78
|
+
/**
|
|
79
|
+
* The §26 quantity of a claim — its claim key modulo `src:` contexts, the
|
|
80
|
+
* resolution-group identity of "one fact, several voices". Fusion only
|
|
81
|
+
* makes sense within one quantity (spec §10.1). `representative` widens
|
|
82
|
+
* the group through the alias closure (spec §26.1's smallest-member
|
|
83
|
+
* canonicalization) — the subject suffices, because only attribute and
|
|
84
|
+
* metric payloads carry estimates.
|
|
85
|
+
*/
|
|
86
|
+
const quantityOf = (claim, representative) => {
|
|
87
|
+
const [subject, verb, , payload, contexts] = JSON.parse(Key.of(claim));
|
|
88
|
+
return JSON.stringify([
|
|
89
|
+
subject.startsWith('e:') ? `e:${representative(subject.slice(2))}` : subject,
|
|
90
|
+
verb,
|
|
91
|
+
payload,
|
|
92
|
+
contexts.filter(context => !context.startsWith('src:'))
|
|
93
|
+
]);
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* The claims `cave_fuse` considers: matched store rows (`pattern`, deduped
|
|
97
|
+
* — one row may solve a pattern several ways), current claims an entity
|
|
98
|
+
* is the subject of (`about` — the only reach into metric `IS` series,
|
|
99
|
+
* which CAVE-Q variables cannot bind), or literal CAVE text that never
|
|
100
|
+
* touches the store (`text`). Exactly one selector, so the answer's
|
|
101
|
+
* provenance is unambiguous.
|
|
102
|
+
*/
|
|
103
|
+
const selectFuseClaims = (store, args) => {
|
|
104
|
+
const selectors = ['pattern', 'about', 'text'].filter(name => typeof args[name] === 'string');
|
|
105
|
+
const selector = selectors.length === 1 ? selectors[0] : undefined;
|
|
106
|
+
if (selector === undefined) {
|
|
107
|
+
throw new Error('provide exactly one of pattern (CAVE-Q over the store), about (an entity name) or text (literal CAVE lines)');
|
|
108
|
+
}
|
|
109
|
+
if (typeof args['asOf'] === 'string' && selector !== 'pattern') {
|
|
110
|
+
throw new Error('asOf composes with pattern only');
|
|
111
|
+
}
|
|
112
|
+
if (selector === 'pattern') {
|
|
113
|
+
const matches = caveQuery(store, text(args['pattern'], 'pattern'), {
|
|
114
|
+
aliases: args['aliases'] === true,
|
|
115
|
+
...typeof args['asOf'] === 'string' ? { asOf: args['asOf'] } : {}
|
|
116
|
+
});
|
|
117
|
+
const rows = new Map(matches.flatMap(match => match.row === undefined ? [] : [[match.row.id, match.row]]));
|
|
118
|
+
return [...rows.values()].map(row => store.toClaim(row));
|
|
119
|
+
}
|
|
120
|
+
if (selector === 'about') {
|
|
121
|
+
const entity = text(args['about'], 'about');
|
|
122
|
+
const names = new Set(args['aliases'] === true ? store.aliasesOf(entity) : [entity]);
|
|
123
|
+
return store.currentBeliefs()
|
|
124
|
+
.filter(row => names.has(row.subject) && row.conf > 0)
|
|
125
|
+
.map(row => store.toClaim(row));
|
|
126
|
+
}
|
|
127
|
+
const result = canonicalizeText(text(args['text'], 'text'), store.registry());
|
|
128
|
+
if (result.problems.length > 0) {
|
|
129
|
+
throw new Error(result.problems.map(problem => `line ${problem.line}: ${problem.message}`).join('\n'));
|
|
130
|
+
}
|
|
131
|
+
return result.claims.map(entry => entry.claim);
|
|
132
|
+
};
|
|
133
|
+
export const tools = [
|
|
134
|
+
{
|
|
135
|
+
name: 'cave_add',
|
|
136
|
+
description: 'Append CAVE claims to the knowledge database. Input is CAVE text ' +
|
|
137
|
+
'(one claim per line, e.g. "auth/middleware USES jwt @ 90%"). Lenient by default — ' +
|
|
138
|
+
'invalid lines are reported and skipped; set strict to reject the whole batch instead. ' +
|
|
139
|
+
'Claims without a @src: context are stamped with the connected agent\'s source ' +
|
|
140
|
+
'context (spec §9.5).',
|
|
141
|
+
permission: 'record',
|
|
142
|
+
inputSchema: {
|
|
143
|
+
type: 'object',
|
|
144
|
+
required: ['text'],
|
|
145
|
+
properties: {
|
|
146
|
+
text: { type: 'string', description: 'CAVE text, one claim per line' },
|
|
147
|
+
strict: { type: 'boolean', description: 'reject the whole batch on any problem' }
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
run: (store, args, context) => {
|
|
151
|
+
const result = store.ingest(text(args['text'], 'text'), {
|
|
152
|
+
strict: args['strict'] === true,
|
|
153
|
+
...context.source === undefined ? {} : { source: context.source }
|
|
154
|
+
});
|
|
155
|
+
const problems = result.problems.map(problem => `line ${problem.line}: ${problem.message}`);
|
|
156
|
+
return [
|
|
157
|
+
`added ${result.ids.length} claim(s), ${result.edges} edge(s)`,
|
|
158
|
+
...problems.length > 0 ? ['problems:', ...problems.map(problem => ` ${problem}`)] : []
|
|
159
|
+
].join('\n');
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
name: 'cave_query',
|
|
164
|
+
description: 'Run a CAVE-Q graph pattern (spec §12). Examples: "?x USES jwt" — ' +
|
|
165
|
+
'all systems using jwt; "?x HAS bug: ?bug #security"; "?cause CAUSE app/crash\\nWHERE conf >= 0.7"; ' +
|
|
166
|
+
'"terrier EXTENDS+ animal" (transitive); "?x PART-OF monorepo" (inverse verbs work). ' +
|
|
167
|
+
'Runs over supported current beliefs by default.',
|
|
168
|
+
permission: 'read',
|
|
169
|
+
inputSchema: {
|
|
170
|
+
type: 'object',
|
|
171
|
+
required: ['pattern'],
|
|
172
|
+
properties: {
|
|
173
|
+
pattern: { type: 'string', description: 'CAVE-Q pattern; WHERE filters on following lines' },
|
|
174
|
+
all: { type: 'boolean', description: 'match the full append-only history, not just current beliefs' },
|
|
175
|
+
aliases: { type: 'boolean', description: 'resolve entities through current ALIAS claims (union of aliased names, spec §13.6)' },
|
|
176
|
+
asOf: { type: 'string', description: 'resolve beliefs as of a past moment (spec §12.3): a date (whole day included), a timestamp (whole second), or a transaction id — rows recorded later are invisible' },
|
|
177
|
+
at: { type: 'string', description: 'anchor in valid time (spec §32.4): a date-like period (its start instant) or a timestamp — claims whose time contexts (@2026-Q1, @2025..2028) do not cover it are invisible, timeless claims always match, and trajectory values (20B -> 40B USD/yr) interpolate at the instant; composes with asOf' },
|
|
178
|
+
resolve: { type: 'boolean', description: 'match resolved winners only (spec §26): contested facts — one fact from several sources, or opposite polarity — collapse to the row the resolution policy picks; incompatible with all' },
|
|
179
|
+
limit: { type: 'integer', minimum: 1, maximum: 1000, default: defaultQueryLimit, description: `matches per page (default ${defaultQueryLimit})` },
|
|
180
|
+
cursor: { type: 'string', description: 'opaque continuation from a prior cave_query page; freezes the original transaction snapshot' }
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
run: (store, args) => {
|
|
184
|
+
const result = caveQueryPage(store, text(args['pattern'], 'pattern'), {
|
|
185
|
+
all: args['all'] === true,
|
|
186
|
+
aliases: args['aliases'] === true,
|
|
187
|
+
resolve: args['resolve'] === true,
|
|
188
|
+
limit: args['limit'] === undefined ? defaultQueryLimit : integer(args['limit'], 'limit'),
|
|
189
|
+
...typeof args['cursor'] === 'string' ? { cursor: args['cursor'] } : {},
|
|
190
|
+
...typeof args['asOf'] === 'string' ? { asOf: args['asOf'] } : {},
|
|
191
|
+
...typeof args['at'] === 'string' ? { at: args['at'] } : {}
|
|
192
|
+
});
|
|
193
|
+
const matches = result.matches;
|
|
194
|
+
if (matches.length === 0) {
|
|
195
|
+
return result.next === undefined ? 'no matches' : `no matches\nnext cursor: ${result.next}`;
|
|
196
|
+
}
|
|
197
|
+
const lines = matches.map(match => {
|
|
198
|
+
const bindings = Object.entries(match.bindings)
|
|
199
|
+
.map(([name, value]) => `?${name} = ${value}`)
|
|
200
|
+
.join(' ');
|
|
201
|
+
let line = match.claim?.claim.raw;
|
|
202
|
+
// An interpolated trajectory shows its value at the anchor
|
|
203
|
+
// (spec §32.4); value-slot bindings already carry it.
|
|
204
|
+
if (match.at !== undefined && line !== undefined && bindings === '') {
|
|
205
|
+
line = `${line} ; at ${String(args['at'])}: ${match.at.text}`;
|
|
206
|
+
}
|
|
207
|
+
return bindings === '' ? line ?? 'match' : line === undefined ? bindings : `${bindings} ; ${line}`;
|
|
208
|
+
});
|
|
209
|
+
if (result.next !== undefined)
|
|
210
|
+
lines.push(`next cursor: ${result.next}`);
|
|
211
|
+
return lines.join('\n');
|
|
212
|
+
}
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
name: 'cave_fuse',
|
|
216
|
+
description: 'Bayesian fusion of independent numeric estimates of one quantity (spec §10.1) — ' +
|
|
217
|
+
'delegate the precision-weighted math instead of doing arithmetic in tokens. Select the ' +
|
|
218
|
+
'estimates with a CAVE-Q pattern (e.g. "openai HAS revenue: ?v" — the same fact from ' +
|
|
219
|
+
'several sources), with about (an entity name — reaches metric series like "revenue IS ' +
|
|
220
|
+
'20B USD/yr +/- 0.5B USD/yr"), or as literal CAVE text lines. Only positive claims with a ' +
|
|
221
|
+
'numeric value and +/- uncertainty carry an estimate (σ = Δ/k, spec §7.2); confidence ' +
|
|
222
|
+
'weights precision. Returns the posterior mean and sigma plus a value ready to write back.',
|
|
223
|
+
permission: 'evaluate',
|
|
224
|
+
inputSchema: {
|
|
225
|
+
type: 'object',
|
|
226
|
+
properties: {
|
|
227
|
+
pattern: { type: 'string', description: 'CAVE-Q pattern selecting the store rows to fuse (exactly one of pattern/about/text)' },
|
|
228
|
+
about: { type: 'string', description: 'entity whose current claims carry the estimates (exactly one of pattern/about/text)' },
|
|
229
|
+
text: { type: 'string', description: 'CAVE lines carrying the estimates, fused without touching the store (exactly one of pattern/about/text)' },
|
|
230
|
+
aliases: { type: 'boolean', description: 'pattern/about match through the alias closure (spec §13.6)' },
|
|
231
|
+
asOf: { type: 'string', description: 'fuse the estimates believed at a past moment (spec §12.3): a date, timestamp or transaction id; pattern only' }
|
|
232
|
+
}
|
|
233
|
+
},
|
|
234
|
+
run: (store, args) => {
|
|
235
|
+
const claims = selectFuseClaims(store, args);
|
|
236
|
+
const estimates = claims.flatMap(claim => {
|
|
237
|
+
const estimate = estimateOf(claim);
|
|
238
|
+
return claim.negated || estimate === undefined || !((estimate.conf ?? 1) > 0) ? [] : [{ claim, estimate }];
|
|
239
|
+
});
|
|
240
|
+
if (estimates.length === 0) {
|
|
241
|
+
return claims.length === 0 ?
|
|
242
|
+
'nothing to fuse: no matching claims' :
|
|
243
|
+
`nothing to fuse: none of the ${claims.length} claim(s) carries a positive numeric estimate with +/- uncertainty`;
|
|
244
|
+
}
|
|
245
|
+
const representative = args['aliases'] === true ?
|
|
246
|
+
(name) => store.aliasesOf(name).reduce((min, candidate) => candidate < min ? candidate : min) :
|
|
247
|
+
(name) => name;
|
|
248
|
+
const quantities = new Map();
|
|
249
|
+
for (const { claim } of estimates) {
|
|
250
|
+
const quantity = quantityOf(claim, representative);
|
|
251
|
+
if (!quantities.has(quantity)) {
|
|
252
|
+
quantities.set(quantity, claim);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
if (quantities.size > 1) {
|
|
256
|
+
throw new Error([
|
|
257
|
+
`cannot fuse across ${quantities.size} quantities — spec §10.1 fuses independent estimates ` +
|
|
258
|
+
'of one quantity (one claim key modulo @src: contexts); narrow the selection. Found:',
|
|
259
|
+
...[...quantities.values()].map(claim => ` ${emitClaim(claim)}`)
|
|
260
|
+
].join('\n'));
|
|
261
|
+
}
|
|
262
|
+
const posterior = fuse(estimates.map(({ estimate }) => estimate));
|
|
263
|
+
const unit = posterior.unit;
|
|
264
|
+
const skipped = claims.length - estimates.length;
|
|
265
|
+
return [
|
|
266
|
+
`fused ${estimates.length} estimate(s)${skipped > 0 ? `, skipped ${skipped} without a positive numeric +/- estimate` : ''}:`,
|
|
267
|
+
...estimates.map(({ claim }) => ` ${emitClaim(claim)}`),
|
|
268
|
+
`posterior: ${withUnit(posterior.mean, unit)} +/- ${withUnit(2 * posterior.sigma, unit)} (2σ)` +
|
|
269
|
+
` ; mean ${Value.formatNumber(posterior.mean)}, sigma ${Value.formatNumber(posterior.sigma)}`
|
|
270
|
+
].join('\n');
|
|
271
|
+
}
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
name: 'cave_search',
|
|
275
|
+
description: 'Full-text search over subjects, objects, values, comments and raw lines. ' +
|
|
276
|
+
'The query is a literal phrase by default; set raw for FTS5 MATCH syntax (AND/OR/NEAR).',
|
|
277
|
+
permission: 'read',
|
|
278
|
+
inputSchema: {
|
|
279
|
+
type: 'object',
|
|
280
|
+
required: ['query'],
|
|
281
|
+
properties: {
|
|
282
|
+
query: { type: 'string' },
|
|
283
|
+
raw: { type: 'boolean', description: 'treat query as FTS5 MATCH syntax' }
|
|
284
|
+
}
|
|
285
|
+
},
|
|
286
|
+
run: (store, args) => store.search(text(args['query'], 'query'), { raw: args['raw'] === true })
|
|
287
|
+
.map(row => row.raw_line)
|
|
288
|
+
.join('\n') || 'no matches'
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
name: 'cave_about',
|
|
292
|
+
description: 'Everything currently believed about an entity — claims where it appears as ' +
|
|
293
|
+
'subject or object, emitted as canonical CAVE lines.',
|
|
294
|
+
permission: 'read',
|
|
295
|
+
inputSchema: {
|
|
296
|
+
type: 'object',
|
|
297
|
+
required: ['entity'],
|
|
298
|
+
properties: {
|
|
299
|
+
entity: { type: 'string', description: 'entity name, e.g. auth/middleware' },
|
|
300
|
+
aliases: { type: 'boolean', description: 'include claims about aliased names (current ALIAS claims, spec §13.6)' },
|
|
301
|
+
resolve: { type: 'boolean', description: 'restrict to resolved winners (spec §26): contested facts collapse to the row the resolution policy picks' }
|
|
302
|
+
}
|
|
303
|
+
},
|
|
304
|
+
run: (store, args) => aboutLines(store, text(args['entity'], 'entity'), args['aliases'] === true, args['resolve'] === true)
|
|
305
|
+
.join('\n') || 'no claims'
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
name: 'cave_neighbors',
|
|
309
|
+
description: 'Graph edges of an entity: forward relations (subject side) and inverse-named ' +
|
|
310
|
+
'reverse relations (object side, spec §13.3). Use to walk the knowledge graph.',
|
|
311
|
+
permission: 'read',
|
|
312
|
+
inputSchema: {
|
|
313
|
+
type: 'object',
|
|
314
|
+
required: ['entity'],
|
|
315
|
+
properties: {
|
|
316
|
+
entity: { type: 'string' },
|
|
317
|
+
aliases: { type: 'boolean', description: 'include edges of aliased names (current ALIAS claims, spec §13.6)' },
|
|
318
|
+
resolve: { type: 'boolean', description: 'walk resolved winners only (spec §26): contested edges collapse to the row the resolution policy picks' }
|
|
319
|
+
}
|
|
320
|
+
},
|
|
321
|
+
run: (store, args) => {
|
|
322
|
+
const entity = text(args['entity'], 'entity');
|
|
323
|
+
const options = { aliases: args['aliases'] === true, resolve: args['resolve'] === true };
|
|
324
|
+
// Endpoints print as stored — under aliases a matched row may name
|
|
325
|
+
// an aliased spelling, and union semantics never rewrites it.
|
|
326
|
+
const forward = store.forward(entity, options)
|
|
327
|
+
.map(fact => `${fact.row.subject} ${fact.verb} ${fact.target}`);
|
|
328
|
+
const reverse = store.reverse(entity, options)
|
|
329
|
+
.map(fact => fact.rel === undefined ?
|
|
330
|
+
`${fact.source} ${fact.verb} ${fact.row.object} ; no inverse name declared` :
|
|
331
|
+
`${fact.row.object} ${fact.rel} ${fact.source}`);
|
|
332
|
+
return [...forward, ...reverse].join('\n') || 'no edges';
|
|
333
|
+
}
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
name: 'cave_reconstruct',
|
|
337
|
+
description: 'Active memory reconstruction (spec §18): starting from seed entities, walk the ' +
|
|
338
|
+
'graph best-first across forward and inverse edges, collecting related claims. Use when a ' +
|
|
339
|
+
'plain query is too narrow — e.g. reconstruct everything relevant to a symptom.',
|
|
340
|
+
permission: 'evaluate',
|
|
341
|
+
inputSchema: {
|
|
342
|
+
type: 'object',
|
|
343
|
+
required: ['seeds'],
|
|
344
|
+
properties: {
|
|
345
|
+
seeds: { type: 'array', items: { type: 'string' }, description: 'seed entity names (cues)' },
|
|
346
|
+
maxSteps: { type: 'number', description: 'expansion budget (default 16)' },
|
|
347
|
+
maxClaims: { type: 'number', description: 'stop after collecting this many claims' }
|
|
348
|
+
}
|
|
349
|
+
},
|
|
350
|
+
run: (store, args) => {
|
|
351
|
+
const seeds = Array.isArray(args['seeds']) ? args['seeds'].filter(seed => typeof seed === 'string') : [];
|
|
352
|
+
if (seeds.length === 0) {
|
|
353
|
+
throw new Error('seeds must be a non-empty array of entity names');
|
|
354
|
+
}
|
|
355
|
+
const options = {
|
|
356
|
+
...typeof args['maxSteps'] === 'number' ? { maxSteps: args['maxSteps'] } : {},
|
|
357
|
+
...typeof args['maxClaims'] === 'number' ? { maxClaims: args['maxClaims'] } : {}
|
|
358
|
+
};
|
|
359
|
+
const { claims, trace } = reconstruct(sqliteStore(store), heuristicPolicy(options), seeds);
|
|
360
|
+
return [
|
|
361
|
+
`expanded ${trace.length} cue(s): ${trace.map(step => step.cue.entity).join(' → ') || 'none'}`,
|
|
362
|
+
...claims.map(claim => emitClaim(claim))
|
|
363
|
+
].join('\n');
|
|
364
|
+
}
|
|
365
|
+
},
|
|
366
|
+
{
|
|
367
|
+
name: 'cave_derive',
|
|
368
|
+
description: 'Fire the rules declared in the knowledge database (spec §24): forward chaining ' +
|
|
369
|
+
'over current beliefs. Derived claims append with @src:rule/<digest> provenance, BECAUSE ' +
|
|
370
|
+
'edges to their premise rows and VIA to the rule; confidence is noisy-AND; re-runs are ' +
|
|
371
|
+
'idempotent and incremental by tx watermark, and retracting a premise retracts dependents. ' +
|
|
372
|
+
'Declare rules first as ordinary claims via cave_add, e.g. ' +
|
|
373
|
+
'rule/needs HAS rule: `?x NEEDS ?y, ?y NEEDS ?z => ?x NEEDS ?z`. ' +
|
|
374
|
+
'Set dryRun to preview without appending.',
|
|
375
|
+
permission: 'record',
|
|
376
|
+
inputSchema: {
|
|
377
|
+
type: 'object',
|
|
378
|
+
properties: {
|
|
379
|
+
dryRun: { type: 'boolean', description: 'evaluate inside a rolled-back transaction; report only, append nothing' },
|
|
380
|
+
full: { type: 'boolean', description: 'ignore stored watermarks — re-fire every rule (spec §24.4)' },
|
|
381
|
+
aliases: { type: 'boolean', description: 'premises match through the alias closure (spec §13.6)' },
|
|
382
|
+
minConf: { type: 'number', description: 'conclusions below this confidence are not asserted (default 0.05)' },
|
|
383
|
+
maxPasses: { type: 'number', description: 'fixpoint guard — maximum evaluation passes (default 20)' }
|
|
384
|
+
}
|
|
385
|
+
},
|
|
386
|
+
run: (store, args) => {
|
|
387
|
+
const minConf = args['minConf'];
|
|
388
|
+
if (minConf !== undefined && (typeof minConf !== 'number' || !Number.isFinite(minConf) || minConf < 0 || minConf > 1)) {
|
|
389
|
+
throw new Error('minConf must be a number in 0..1');
|
|
390
|
+
}
|
|
391
|
+
const maxPasses = args['maxPasses'];
|
|
392
|
+
if (maxPasses !== undefined && (typeof maxPasses !== 'number' || !Number.isInteger(maxPasses) || maxPasses < 1)) {
|
|
393
|
+
throw new Error('maxPasses must be a positive integer');
|
|
394
|
+
}
|
|
395
|
+
const dryRun = args['dryRun'] === true;
|
|
396
|
+
const report = derive(store, {
|
|
397
|
+
dryRun,
|
|
398
|
+
full: args['full'] === true,
|
|
399
|
+
aliases: args['aliases'] === true,
|
|
400
|
+
...minConf === undefined ? {} : { minConf },
|
|
401
|
+
...maxPasses === undefined ? {} : { maxPasses }
|
|
402
|
+
});
|
|
403
|
+
if (report.rules.length === 0 && report.problems.length === 0) {
|
|
404
|
+
return 'no rules declared — declare one with cave_add: rule/<name> HAS rule: `premises => conclusion`';
|
|
405
|
+
}
|
|
406
|
+
return [
|
|
407
|
+
...report.problems.map(problem => `${problem.subject}: ${problem.problems.join('; ')}`),
|
|
408
|
+
...report.rules.flatMap(rule => [
|
|
409
|
+
`${rule.subject}: ` +
|
|
410
|
+
(rule.fired ?
|
|
411
|
+
`${rule.solutions} solution(s), +${rule.appended} appended, ${rule.updated} updated, ` +
|
|
412
|
+
`${rule.retracted} retracted, ${rule.unchanged} unchanged` :
|
|
413
|
+
'unchanged premises, skipped') +
|
|
414
|
+
(rule.label === undefined ? '' : ` ; ${rule.label}`),
|
|
415
|
+
...rule.problems.map(problem => ` ${problem}`)
|
|
416
|
+
]),
|
|
417
|
+
...report.notes.map(note => `note: ${note}`),
|
|
418
|
+
`derived${dryRun ? ' (dry run)' : ''}${report.complete ? '' : ' (truncated)'}: +${report.appended} appended, ${report.updated} updated, ` +
|
|
419
|
+
`${report.retracted} retracted, ${report.unchanged} unchanged (${report.passes} pass(es))`
|
|
420
|
+
].join('\n');
|
|
421
|
+
}
|
|
422
|
+
},
|
|
423
|
+
{
|
|
424
|
+
name: 'cave_export',
|
|
425
|
+
description: 'Export sensitivity-scoped canonical CAVE text (default maximum internal). ' +
|
|
426
|
+
'Set maxSensitivity to restricted for complete portable history; current drops superseded history.',
|
|
427
|
+
permission: 'read',
|
|
428
|
+
inputSchema: {
|
|
429
|
+
type: 'object',
|
|
430
|
+
properties: {
|
|
431
|
+
current: { type: 'boolean' },
|
|
432
|
+
maxSensitivity: { type: 'string', enum: Sensitivity.levels }
|
|
433
|
+
}
|
|
434
|
+
},
|
|
435
|
+
run: (store, args) => {
|
|
436
|
+
const maximum = args['maxSensitivity'] === undefined ?
|
|
437
|
+
Sensitivity.defaultMaximum :
|
|
438
|
+
Sensitivity.parse(text(args['maxSensitivity'], 'maxSensitivity'));
|
|
439
|
+
if (maximum === undefined) {
|
|
440
|
+
throw new Error(`maxSensitivity must be one of ${Sensitivity.levels.join(', ')}`);
|
|
441
|
+
}
|
|
442
|
+
return store.exportText({ current: args['current'] === true, maxSensitivity: maximum }) || '; empty store';
|
|
443
|
+
}
|
|
444
|
+
},
|
|
445
|
+
{
|
|
446
|
+
name: 'cave_lint',
|
|
447
|
+
description: 'Parse CAVE text and report diagnostics without storing anything. Use to ' +
|
|
448
|
+
'validate extraction output before cave_add.',
|
|
449
|
+
permission: 'evaluate',
|
|
450
|
+
inputSchema: {
|
|
451
|
+
type: 'object',
|
|
452
|
+
required: ['text'],
|
|
453
|
+
properties: { text: { type: 'string' } }
|
|
454
|
+
},
|
|
455
|
+
run: (_store, args) => {
|
|
456
|
+
const document = parseDocument(text(args['text'], 'text'));
|
|
457
|
+
if (document.diagnostics.length === 0) {
|
|
458
|
+
return `ok: ${document.lines.filter(line => line.kind !== 'blank' && line.kind !== 'comment').length} structural line(s)`;
|
|
459
|
+
}
|
|
460
|
+
return document.diagnostics
|
|
461
|
+
.map(diagnostic => `line ${diagnostic.line}: ${diagnostic.message}`)
|
|
462
|
+
.join('\n');
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
];
|
|
466
|
+
export const byName = new Map(tools.map(tool => [tool.name, tool]));
|
|
467
|
+
/** Tool-name prefix of generated action tools (spec §25.5). */
|
|
468
|
+
export const actToolPrefix = 'act_';
|
|
469
|
+
/**
|
|
470
|
+
* MCP tool name of an action: `act_` plus the action name with
|
|
471
|
+
* characters outside the MCP tool alphabet mapped to `_`
|
|
472
|
+
* (`team/promote` → `act_team_promote`).
|
|
473
|
+
*/
|
|
474
|
+
export const actToolName = (action) => `${actToolPrefix}${action.replaceAll(/[^A-Za-z0-9_-]/g, '_')}`;
|
|
475
|
+
const renderReport = (report) => {
|
|
476
|
+
if (!report.ok) {
|
|
477
|
+
const violations = (report.violations ?? []).map(violation => ` ${violation.entity} missing ${violation.expectation.kind} ${violation.expectation.name}`);
|
|
478
|
+
return [`${report.action}: ${report.error}`, ...violations].join('\n');
|
|
479
|
+
}
|
|
480
|
+
const lines = [
|
|
481
|
+
`executed ${report.subject}${report.dryRun ? ' (dry run)' : ''}: ` +
|
|
482
|
+
`+${report.appended} appended, ${report.updated} updated, ${report.unchanged} unchanged`,
|
|
483
|
+
...report.effects.map(effect => ` ${effect.outcome}: ${effect.line}`)
|
|
484
|
+
];
|
|
485
|
+
if (report.hook !== undefined) {
|
|
486
|
+
lines.push(report.hook.fired ?
|
|
487
|
+
`hook ${report.hook.name}: ${report.hook.error ?? 'ok'}` :
|
|
488
|
+
`hook ${report.hook.name}: not fired (${report.hook.note})`);
|
|
489
|
+
}
|
|
490
|
+
return lines.join('\n');
|
|
491
|
+
};
|
|
492
|
+
/** One generated tool per current positive action (spec §25.5). */
|
|
493
|
+
const actionTool = (action) => ({
|
|
494
|
+
name: actToolName(action.name),
|
|
495
|
+
description: `${action.description ?? `Execute the ${action.name} action`}. ` +
|
|
496
|
+
'Governed write (spec §25): preconditions are validated against current belief, ' +
|
|
497
|
+
'effects append atomically with provenance and lineage; a failed precondition ' +
|
|
498
|
+
`appends nothing. Body: \`${action.text}\`` +
|
|
499
|
+
(action.hook === undefined ? '' : ` — names the out-of-band hook "${action.hook}"`) + '.',
|
|
500
|
+
permission: 'action',
|
|
501
|
+
inputSchema: {
|
|
502
|
+
type: 'object',
|
|
503
|
+
required: [...action.params.map(param => param.name)],
|
|
504
|
+
properties: Object.fromEntries(action.params.map(param => [
|
|
505
|
+
param.name,
|
|
506
|
+
{ type: 'string', ...param.doc === undefined ? {} : { description: param.doc } }
|
|
507
|
+
]))
|
|
508
|
+
},
|
|
509
|
+
run: (store, args, context) => {
|
|
510
|
+
const report = act(store, action.name, args, {
|
|
511
|
+
...context.hooks === undefined ? {} : { hooks: context.hooks }
|
|
512
|
+
});
|
|
513
|
+
const text = renderReport(report);
|
|
514
|
+
if (!report.ok || report.hook?.error !== undefined) {
|
|
515
|
+
throw new Error(text);
|
|
516
|
+
}
|
|
517
|
+
return text;
|
|
518
|
+
}
|
|
519
|
+
});
|
|
520
|
+
/**
|
|
521
|
+
* @returns the generated action tools of the store's current positive
|
|
522
|
+
* declarations (spec §25.5), computed per call so an action declared
|
|
523
|
+
* mid-session appears without reconnecting. Actions whose stored body
|
|
524
|
+
* does not parse are skipped, as are name collisions after MCP-alphabet
|
|
525
|
+
* mapping (first declaration wins).
|
|
526
|
+
*/
|
|
527
|
+
export const actionTools = (store) => {
|
|
528
|
+
const generated = new Map();
|
|
529
|
+
for (const action of listActions(store)) {
|
|
530
|
+
if (!action.ok) {
|
|
531
|
+
continue;
|
|
532
|
+
}
|
|
533
|
+
const tool = actionTool(action);
|
|
534
|
+
if (!generated.has(tool.name)) {
|
|
535
|
+
generated.set(tool.name, tool);
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
return [...generated.values()];
|
|
539
|
+
};
|
|
540
|
+
/**
|
|
541
|
+
* @returns the action tools served under a scope (spec §25.5): only with
|
|
542
|
+
* `action` permission, and only the listed names under `tools` —
|
|
543
|
+
* an `act_`-prefixed scope entry is validated here, at call time, because
|
|
544
|
+
* it scopes whichever actions exist when asked.
|
|
545
|
+
*/
|
|
546
|
+
const allowedPermissions = (scope) => {
|
|
547
|
+
const requested = new Set(scope.permissions ?? permissions);
|
|
548
|
+
if (scope.readOnly === true) {
|
|
549
|
+
requested.delete('record');
|
|
550
|
+
requested.delete('action');
|
|
551
|
+
}
|
|
552
|
+
return requested;
|
|
553
|
+
};
|
|
554
|
+
export const allowsActions = (scope = {}) => allowedPermissions(scope).has('action') &&
|
|
555
|
+
(scope.tools === undefined || scope.tools.some(name => name.startsWith(actToolPrefix)));
|
|
556
|
+
export const scopedActionTools = (store, scope = {}) => allowsActions(scope) ?
|
|
557
|
+
actionTools(store).filter(tool => scope.tools === undefined || scope.tools.includes(tool.name)) :
|
|
558
|
+
[];
|
|
559
|
+
/**
|
|
560
|
+
* @returns the static tool surface actually served under a scope: `tools`
|
|
561
|
+
* (when given) narrowed by permission and by `readOnly`. Throws on
|
|
562
|
+
* names that exist nowhere and on a scope that serves nothing — a
|
|
563
|
+
* misconfigured permission boundary must fail loudly, not serve quietly.
|
|
564
|
+
* `act_`-prefixed names pass through: they scope generated action tools
|
|
565
|
+
* (spec §25.5), resolved against the store at call time.
|
|
566
|
+
*/
|
|
567
|
+
export const scopedTools = (scope = {}) => {
|
|
568
|
+
const unknownPermissions = (scope.permissions ?? []).filter(permission => !permissions.includes(permission));
|
|
569
|
+
if (unknownPermissions.length > 0) {
|
|
570
|
+
throw new Error(`unknown permission(s): ${unknownPermissions.join(', ')} — available: ${permissions.join(', ')}`);
|
|
571
|
+
}
|
|
572
|
+
const unknown = (scope.tools ?? []).filter(name => !byName.has(name) && !name.startsWith(actToolPrefix));
|
|
573
|
+
if (unknown.length > 0) {
|
|
574
|
+
throw new Error(`unknown tool(s): ${unknown.join(', ')} — available: ${tools.map(tool => tool.name).join(', ')}, act_<action>`);
|
|
575
|
+
}
|
|
576
|
+
const allowed = allowedPermissions(scope);
|
|
577
|
+
const served = tools.filter(tool => (scope.tools === undefined || scope.tools.includes(tool.name)) &&
|
|
578
|
+
allowed.has(tool.permission));
|
|
579
|
+
if (served.length === 0 && !allowsActions(scope)) {
|
|
580
|
+
throw new Error('the requested scope serves no tools');
|
|
581
|
+
}
|
|
582
|
+
return served;
|
|
583
|
+
};
|
|
584
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/tools.ts"],"names":[],"mappings":"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"}
|