@cavelang/cli 0.35.0 → 0.36.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/README.md +224 -12
- package/dist/internal/act/action.js +2 -1
- package/dist/internal/act/action.js.map +1 -1
- package/dist/internal/act/declare.d.ts.map +1 -1
- package/dist/internal/act/declare.js +82 -53
- package/dist/internal/act/declare.js.map +1 -1
- package/dist/internal/act/engine.d.ts +4 -3
- package/dist/internal/act/engine.d.ts.map +1 -1
- package/dist/internal/act/engine.js +121 -32
- package/dist/internal/act/engine.js.map +1 -1
- package/dist/internal/automate/cancellation.d.ts +3 -0
- package/dist/internal/automate/cancellation.d.ts.map +1 -0
- package/dist/internal/automate/cancellation.js +38 -0
- package/dist/internal/automate/cancellation.js.map +1 -0
- package/dist/internal/automate/declare.d.ts.map +1 -1
- package/dist/internal/automate/declare.js +49 -24
- package/dist/internal/automate/declare.js.map +1 -1
- package/dist/internal/automate/engine.d.ts +7 -3
- package/dist/internal/automate/engine.d.ts.map +1 -1
- package/dist/internal/automate/engine.js +196 -93
- package/dist/internal/automate/engine.js.map +1 -1
- package/dist/internal/automate/error-message.d.ts +3 -0
- package/dist/internal/automate/error-message.d.ts.map +1 -0
- package/dist/internal/automate/error-message.js +10 -0
- package/dist/internal/automate/error-message.js.map +1 -0
- package/dist/internal/automate/main.d.ts.map +1 -1
- package/dist/internal/automate/main.js +238 -35
- package/dist/internal/automate/main.js.map +1 -1
- package/dist/internal/automate/options.d.ts +4 -0
- package/dist/internal/automate/options.d.ts.map +1 -0
- package/dist/internal/automate/options.js +19 -0
- package/dist/internal/automate/options.js.map +1 -0
- package/dist/internal/connect/declared.d.ts +6 -27
- package/dist/internal/connect/declared.d.ts.map +1 -1
- package/dist/internal/connect/declared.js +165 -76
- package/dist/internal/connect/declared.js.map +1 -1
- package/dist/internal/connect/error-message.d.ts +3 -0
- package/dist/internal/connect/error-message.d.ts.map +1 -0
- package/dist/internal/connect/error-message.js +10 -0
- package/dist/internal/connect/error-message.js.map +1 -0
- package/dist/internal/connect/federation.d.ts +9 -0
- package/dist/internal/connect/federation.d.ts.map +1 -0
- package/dist/internal/connect/federation.js +19 -0
- package/dist/internal/connect/federation.js.map +1 -0
- package/dist/internal/connect/fetch-failure.d.ts +3 -0
- package/dist/internal/connect/fetch-failure.d.ts.map +1 -0
- package/dist/internal/connect/fetch-failure.js +36 -0
- package/dist/internal/connect/fetch-failure.js.map +1 -0
- package/dist/internal/connect/main.d.ts +1 -0
- package/dist/internal/connect/main.d.ts.map +1 -1
- package/dist/internal/connect/main.js +288 -114
- package/dist/internal/connect/main.js.map +1 -1
- package/dist/internal/connect/options.d.ts +3 -0
- package/dist/internal/connect/options.d.ts.map +1 -0
- package/dist/internal/connect/options.js +9 -0
- package/dist/internal/connect/options.js.map +1 -0
- package/dist/internal/connect/records.d.ts +3 -0
- package/dist/internal/connect/records.d.ts.map +1 -0
- package/dist/internal/connect/records.js +21 -0
- package/dist/internal/connect/records.js.map +1 -0
- package/dist/internal/connect/run.d.ts +1 -18
- package/dist/internal/connect/run.d.ts.map +1 -1
- package/dist/internal/connect/run.js +115 -55
- package/dist/internal/connect/run.js.map +1 -1
- package/dist/internal/connect/source.d.ts +3 -1
- package/dist/internal/connect/source.d.ts.map +1 -1
- package/dist/internal/connect/source.js +226 -47
- package/dist/internal/connect/source.js.map +1 -1
- package/dist/internal/connect/template.d.ts +2 -2
- package/dist/internal/connect/template.d.ts.map +1 -1
- package/dist/internal/connect/template.js +25 -9
- package/dist/internal/connect/template.js.map +1 -1
- package/dist/internal/connect/utf8.d.ts +3 -0
- package/dist/internal/connect/utf8.d.ts.map +1 -0
- package/dist/internal/connect/utf8.js +12 -0
- package/dist/internal/connect/utf8.js.map +1 -0
- package/dist/internal/eval/cleanup.d.ts +5 -0
- package/dist/internal/eval/cleanup.d.ts.map +1 -0
- package/dist/internal/eval/cleanup.js +50 -0
- package/dist/internal/eval/cleanup.js.map +1 -0
- package/dist/internal/eval/error-message.d.ts +3 -0
- package/dist/internal/eval/error-message.d.ts.map +1 -0
- package/dist/internal/eval/error-message.js +10 -0
- package/dist/internal/eval/error-message.js.map +1 -0
- package/dist/internal/eval/judge.d.ts.map +1 -1
- package/dist/internal/eval/judge.js +3 -31
- package/dist/internal/eval/judge.js.map +1 -1
- package/dist/internal/eval/loop.d.ts.map +1 -1
- package/dist/internal/eval/loop.js +18 -4
- package/dist/internal/eval/loop.js.map +1 -1
- package/dist/internal/eval/main.d.ts.map +1 -1
- package/dist/internal/eval/main.js +22 -10
- package/dist/internal/eval/main.js.map +1 -1
- package/dist/internal/eval/options.d.ts +6 -0
- package/dist/internal/eval/options.d.ts.map +1 -0
- package/dist/internal/eval/options.js +31 -0
- package/dist/internal/eval/options.js.map +1 -0
- package/dist/internal/eval/queries.d.ts.map +1 -1
- package/dist/internal/eval/queries.js +9 -6
- package/dist/internal/eval/queries.js.map +1 -1
- package/dist/internal/eval/run.d.ts.map +1 -1
- package/dist/internal/eval/run.js +112 -24
- package/dist/internal/eval/run.js.map +1 -1
- package/dist/internal/eval/score.d.ts.map +1 -1
- package/dist/internal/eval/score.js +9 -2
- package/dist/internal/eval/score.js.map +1 -1
- package/dist/internal/eval/suite.d.ts.map +1 -1
- package/dist/internal/eval/suite.js +14 -2
- package/dist/internal/eval/suite.js.map +1 -1
- package/dist/internal/ingest/cleanup.d.ts +5 -0
- package/dist/internal/ingest/cleanup.d.ts.map +1 -0
- package/dist/internal/ingest/cleanup.js +50 -0
- package/dist/internal/ingest/cleanup.js.map +1 -0
- package/dist/internal/ingest/content.d.ts +6 -0
- package/dist/internal/ingest/content.d.ts.map +1 -0
- package/dist/internal/ingest/content.js +25 -0
- package/dist/internal/ingest/content.js.map +1 -0
- package/dist/internal/ingest/context.d.ts.map +1 -1
- package/dist/internal/ingest/context.js +25 -7
- package/dist/internal/ingest/context.js.map +1 -1
- package/dist/internal/ingest/error-message.d.ts +3 -0
- package/dist/internal/ingest/error-message.d.ts.map +1 -0
- package/dist/internal/ingest/error-message.js +10 -0
- package/dist/internal/ingest/error-message.js.map +1 -0
- package/dist/internal/ingest/files.d.ts +4 -12
- package/dist/internal/ingest/files.d.ts.map +1 -1
- package/dist/internal/ingest/files.js +22 -10
- package/dist/internal/ingest/files.js.map +1 -1
- package/dist/internal/ingest/main.d.ts.map +1 -1
- package/dist/internal/ingest/main.js +46 -16
- package/dist/internal/ingest/main.js.map +1 -1
- package/dist/internal/ingest/options.d.ts +6 -0
- package/dist/internal/ingest/options.d.ts.map +1 -0
- package/dist/internal/ingest/options.js +27 -0
- package/dist/internal/ingest/options.js.map +1 -0
- package/dist/internal/ingest/prompt.d.ts.map +1 -1
- package/dist/internal/ingest/prompt.js +14 -10
- package/dist/internal/ingest/prompt.js.map +1 -1
- package/dist/internal/ingest/run.d.ts +9 -2
- package/dist/internal/ingest/run.d.ts.map +1 -1
- package/dist/internal/ingest/run.js +206 -62
- package/dist/internal/ingest/run.js.map +1 -1
- package/dist/internal/ingest/timeout.d.ts +3 -0
- package/dist/internal/ingest/timeout.d.ts.map +1 -0
- package/dist/internal/ingest/timeout.js +14 -0
- package/dist/internal/ingest/timeout.js.map +1 -0
- package/dist/internal/ingest/web.d.ts +2 -11
- package/dist/internal/ingest/web.d.ts.map +1 -1
- package/dist/internal/ingest/web.js +131 -25
- package/dist/internal/ingest/web.js.map +1 -1
- package/dist/internal/loop/budgets.d.ts +3 -0
- package/dist/internal/loop/budgets.d.ts.map +1 -0
- package/dist/internal/loop/budgets.js +10 -0
- package/dist/internal/loop/budgets.js.map +1 -0
- package/dist/internal/loop/index.d.ts +2 -0
- package/dist/internal/loop/index.d.ts.map +1 -1
- package/dist/internal/loop/index.js +2 -0
- package/dist/internal/loop/index.js.map +1 -1
- package/dist/internal/loop/json-answer.d.ts +7 -0
- package/dist/internal/loop/json-answer.d.ts.map +1 -0
- package/dist/internal/loop/json-answer.js +79 -0
- package/dist/internal/loop/json-answer.js.map +1 -0
- package/dist/internal/loop/json-spans.d.ts +3 -0
- package/dist/internal/loop/json-spans.d.ts.map +1 -0
- package/dist/internal/loop/json-spans.js +88 -0
- package/dist/internal/loop/json-spans.js.map +1 -0
- package/dist/internal/loop/llm.d.ts +3 -2
- package/dist/internal/loop/llm.d.ts.map +1 -1
- package/dist/internal/loop/llm.js +115 -32
- package/dist/internal/loop/llm.js.map +1 -1
- package/dist/internal/loop/process.d.ts +3 -1
- package/dist/internal/loop/process.d.ts.map +1 -1
- package/dist/internal/loop/process.js +159 -59
- package/dist/internal/loop/process.js.map +1 -1
- package/dist/internal/loop/read-snapshot.d.ts +4 -0
- package/dist/internal/loop/read-snapshot.d.ts.map +1 -0
- package/dist/internal/loop/read-snapshot.js +29 -0
- package/dist/internal/loop/read-snapshot.js.map +1 -0
- package/dist/internal/loop/reconstruct.d.ts +6 -5
- package/dist/internal/loop/reconstruct.d.ts.map +1 -1
- package/dist/internal/loop/reconstruct.js +19 -8
- package/dist/internal/loop/reconstruct.js.map +1 -1
- package/dist/internal/loop/score-settings.d.ts +5 -0
- package/dist/internal/loop/score-settings.d.ts.map +1 -0
- package/dist/internal/loop/score-settings.js +14 -0
- package/dist/internal/loop/score-settings.js.map +1 -0
- package/dist/internal/loop/sqlite.d.ts.map +1 -1
- package/dist/internal/loop/sqlite.js +15 -7
- package/dist/internal/loop/sqlite.js.map +1 -1
- package/dist/internal/loop/store.d.ts.map +1 -1
- package/dist/internal/loop/store.js +11 -7
- package/dist/internal/loop/store.js.map +1 -1
- package/dist/internal/loop/timeout.d.ts +3 -0
- package/dist/internal/loop/timeout.d.ts.map +1 -0
- package/dist/internal/loop/timeout.js +13 -0
- package/dist/internal/loop/timeout.js.map +1 -0
- package/dist/internal/mcp/error-message.d.ts +3 -0
- package/dist/internal/mcp/error-message.d.ts.map +1 -0
- package/dist/internal/mcp/error-message.js +10 -0
- package/dist/internal/mcp/error-message.js.map +1 -0
- package/dist/internal/mcp/main.d.ts.map +1 -1
- package/dist/internal/mcp/main.js +42 -27
- package/dist/internal/mcp/main.js.map +1 -1
- package/dist/internal/mcp/read-snapshot.d.ts +4 -0
- package/dist/internal/mcp/read-snapshot.d.ts.map +1 -0
- package/dist/internal/mcp/read-snapshot.js +22 -0
- package/dist/internal/mcp/read-snapshot.js.map +1 -0
- package/dist/internal/mcp/server.d.ts.map +1 -1
- package/dist/internal/mcp/server.js +181 -21
- package/dist/internal/mcp/server.js.map +1 -1
- package/dist/internal/mcp/source.d.ts +3 -0
- package/dist/internal/mcp/source.d.ts.map +1 -0
- package/dist/internal/mcp/source.js +13 -0
- package/dist/internal/mcp/source.js.map +1 -0
- package/dist/internal/mcp/tools.d.ts.map +1 -1
- package/dist/internal/mcp/tools.js +135 -72
- package/dist/internal/mcp/tools.js.map +1 -1
- package/dist/internal/rules/declarations.d.ts +6 -0
- package/dist/internal/rules/declarations.d.ts.map +1 -0
- package/dist/internal/rules/declarations.js +14 -0
- package/dist/internal/rules/declarations.js.map +1 -0
- package/dist/internal/rules/declare.d.ts.map +1 -1
- package/dist/internal/rules/declare.js +30 -16
- package/dist/internal/rules/declare.js.map +1 -1
- package/dist/internal/rules/engine.d.ts +8 -7
- package/dist/internal/rules/engine.d.ts.map +1 -1
- package/dist/internal/rules/engine.js +150 -44
- package/dist/internal/rules/engine.js.map +1 -1
- package/dist/internal/shape/alias-root.d.ts +3 -0
- package/dist/internal/shape/alias-root.d.ts.map +1 -0
- package/dist/internal/shape/alias-root.js +13 -0
- package/dist/internal/shape/alias-root.js.map +1 -0
- package/dist/internal/shape/check.d.ts +15 -3
- package/dist/internal/shape/check.d.ts.map +1 -1
- package/dist/internal/shape/check.js +230 -100
- package/dist/internal/shape/check.js.map +1 -1
- package/dist/internal/shape/client.d.ts.map +1 -1
- package/dist/internal/shape/client.js +42 -20
- package/dist/internal/shape/client.js.map +1 -1
- package/dist/internal/shape/constraints.d.ts +8 -0
- package/dist/internal/shape/constraints.d.ts.map +1 -0
- package/dist/internal/shape/constraints.js +17 -0
- package/dist/internal/shape/constraints.js.map +1 -0
- package/dist/internal/shape/edit-distance.d.ts +3 -0
- package/dist/internal/shape/edit-distance.d.ts.map +1 -0
- package/dist/internal/shape/edit-distance.js +33 -0
- package/dist/internal/shape/edit-distance.js.map +1 -0
- package/dist/internal/shape/gate.d.ts.map +1 -1
- package/dist/internal/shape/gate.js +0 -0
- package/dist/internal/shape/gate.js.map +1 -1
- package/dist/internal/shape/snapshot.d.ts +4 -0
- package/dist/internal/shape/snapshot.d.ts.map +1 -0
- package/dist/internal/shape/snapshot.js +20 -0
- package/dist/internal/shape/snapshot.js.map +1 -0
- package/dist/internal/shape/suggest.d.ts +8 -6
- package/dist/internal/shape/suggest.d.ts.map +1 -1
- package/dist/internal/shape/suggest.js +208 -92
- package/dist/internal/shape/suggest.js.map +1 -1
- package/dist/internal/sync/error-message.d.ts +3 -0
- package/dist/internal/sync/error-message.d.ts.map +1 -0
- package/dist/internal/sync/error-message.js +10 -0
- package/dist/internal/sync/error-message.js.map +1 -0
- package/dist/internal/sync/index.d.ts +3 -2
- package/dist/internal/sync/index.d.ts.map +1 -1
- package/dist/internal/sync/index.js +3 -2
- package/dist/internal/sync/index.js.map +1 -1
- package/dist/internal/sync/sync.d.ts +8 -5
- package/dist/internal/sync/sync.d.ts.map +1 -1
- package/dist/internal/sync/sync.js +322 -65
- package/dist/internal/sync/sync.js.map +1 -1
- package/dist/internal/view/api.d.ts +3 -1
- package/dist/internal/view/api.d.ts.map +1 -1
- package/dist/internal/view/api.js +154 -90
- package/dist/internal/view/api.js.map +1 -1
- package/dist/internal/view/error-message.d.ts +3 -0
- package/dist/internal/view/error-message.d.ts.map +1 -0
- package/dist/internal/view/error-message.js +10 -0
- package/dist/internal/view/error-message.js.map +1 -0
- package/dist/internal/view/main.d.ts.map +1 -1
- package/dist/internal/view/main.js +61 -8
- package/dist/internal/view/main.js.map +1 -1
- package/dist/internal/view/page.d.ts.map +1 -1
- package/dist/internal/view/page.js +119 -20
- package/dist/internal/view/page.js.map +1 -1
- package/dist/internal/view/report.d.ts.map +1 -1
- package/dist/internal/view/report.js +180 -145
- package/dist/internal/view/report.js.map +1 -1
- package/dist/internal/view/scope.d.ts +6 -2
- package/dist/internal/view/scope.d.ts.map +1 -1
- package/dist/internal/view/scope.js +107 -24
- package/dist/internal/view/scope.js.map +1 -1
- package/dist/internal/view/sensitivity.d.ts +4 -0
- package/dist/internal/view/sensitivity.d.ts.map +1 -0
- package/dist/internal/view/sensitivity.js +11 -0
- package/dist/internal/view/sensitivity.js.map +1 -0
- package/dist/internal/view/server.d.ts.map +1 -1
- package/dist/internal/view/server.js +57 -20
- package/dist/internal/view/server.js.map +1 -1
- package/dist/src/atomic-output.d.ts +3 -0
- package/dist/src/atomic-output.d.ts.map +1 -0
- package/dist/src/atomic-output.js +67 -0
- package/dist/src/atomic-output.js.map +1 -0
- package/dist/src/cli.d.ts +3 -2
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +188 -173
- package/dist/src/cli.js.map +1 -1
- package/dist/src/dispatch.d.ts.map +1 -1
- package/dist/src/dispatch.js +3 -2
- package/dist/src/dispatch.js.map +1 -1
- package/dist/src/doctor.d.ts.map +1 -1
- package/dist/src/doctor.js +178 -102
- package/dist/src/doctor.js.map +1 -1
- package/dist/src/error-message.d.ts +3 -0
- package/dist/src/error-message.d.ts.map +1 -0
- package/dist/src/error-message.js +20 -0
- package/dist/src/error-message.js.map +1 -0
- package/dist/src/hooks-config.d.ts +3 -0
- package/dist/src/hooks-config.d.ts.map +1 -0
- package/dist/src/hooks-config.js +23 -0
- package/dist/src/hooks-config.js.map +1 -0
- package/package.json +23 -20
- package/src/atomic-output.ts +47 -0
- package/src/cli.ts +170 -147
- package/src/dispatch.ts +3 -2
- package/src/doctor.ts +192 -111
- package/src/error-message.ts +13 -0
- package/src/hooks-config.ts +22 -0
package/dist/src/doctor.js
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
/** Read-only installation, runtime, and store diagnostics for `cave doctor`. */
|
|
2
2
|
import { existsSync, readFileSync, statSync } from 'node:fs';
|
|
3
|
+
import { readHooks } from "./hooks-config.js";
|
|
3
4
|
import { createRequire } from 'node:module';
|
|
4
5
|
import { dirname, join, parse } from 'node:path';
|
|
5
6
|
import { parseArgs } from 'node:util';
|
|
6
|
-
import { Version } from '@cavelang/core';
|
|
7
|
+
import { Key, Uuidv7, Version } from '@cavelang/core';
|
|
8
|
+
import { emitClaim } from '@cavelang/canonical';
|
|
7
9
|
import { directCommand, runProcessSync } from '@cavelang/cli/loop';
|
|
8
|
-
import {
|
|
10
|
+
import { Row, Schema, defaultDbPath, kindOf, openText } from '@cavelang/store';
|
|
9
11
|
import { assemble } from '@cavelang/cli/connect';
|
|
10
12
|
import { nodeSqliteAdapter } from '@cavelang/store/adapter/node';
|
|
11
|
-
const requiredNode = '
|
|
12
|
-
const supportedNodeRange = '^
|
|
13
|
+
const requiredNode = '24.16.0';
|
|
14
|
+
const supportedNodeRange = '^24.16.0 || ^26.1.0';
|
|
13
15
|
const versionParts = (value) => {
|
|
14
16
|
const match = /^(\d+)\.(\d+)\.(\d+)/.exec(value);
|
|
15
17
|
return match === null ? undefined : [Number(match[1]), Number(match[2]), Number(match[3])];
|
|
@@ -37,36 +39,42 @@ export const isSupportedNodeVersion = (value) => {
|
|
|
37
39
|
if (!stableVersion.test(value))
|
|
38
40
|
return false;
|
|
39
41
|
const major = versionParts(value)?.[0];
|
|
40
|
-
if (major ===
|
|
42
|
+
if (major === 24)
|
|
41
43
|
return atLeast(value, requiredNode);
|
|
42
|
-
return major ===
|
|
44
|
+
return major === 26 && atLeast(value, '26.1.0');
|
|
43
45
|
};
|
|
44
46
|
const check = (id, status, summary, remediation) => ({ id, status, summary, ...remediation === undefined ? {} : { remediation } });
|
|
45
47
|
const nodeCheck = () => isSupportedNodeVersion(process.versions.node) ?
|
|
46
48
|
check('runtime.node', 'pass', `Node ${process.versions.node} satisfies ${supportedNodeRange}`) :
|
|
47
|
-
check('runtime.node', 'fail', `Node ${process.versions.node} is unsupported`, `Install Node
|
|
49
|
+
check('runtime.node', 'fail', `Node ${process.versions.node} is unsupported`, `Install Node 24.16.0+ in the 24.x line or Node 26.1.0+ in the 26.x line and rerun cave doctor.`);
|
|
48
50
|
const sqliteCheck = () => {
|
|
49
51
|
let db;
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
52
|
+
const result = (() => {
|
|
53
|
+
try {
|
|
54
|
+
db = nodeSqliteAdapter.open(':memory:');
|
|
55
|
+
db.exec('PRAGMA foreign_keys = ON');
|
|
56
|
+
const sqlite = db.prepare('SELECT sqlite_version() AS version').get()?.['version'];
|
|
57
|
+
const json = db.prepare(`SELECT json_valid('{}') AS available`).get()?.['available'];
|
|
58
|
+
const foreignKeys = db.prepare('PRAGMA foreign_keys').get()?.['foreign_keys'];
|
|
59
|
+
db.exec('CREATE VIRTUAL TABLE doctor_fts USING fts5(value)');
|
|
60
|
+
db.exec('DROP TABLE doctor_fts');
|
|
61
|
+
if (typeof sqlite !== 'string' || json !== 1 || foreignKeys !== 1 ||
|
|
62
|
+
nodeSqliteAdapter.capabilities.loadExtension === undefined) {
|
|
63
|
+
throw new Error('capability unavailable');
|
|
64
|
+
}
|
|
65
|
+
return check('runtime.sqlite', 'pass', `SQLite ${sqlite} supports FTS5, JSON functions, foreign keys, and extension loading`);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return check('runtime.sqlite', 'fail', 'The Node SQLite runtime lacks a required capability', `Use an official Node ${requiredNode}+ build with SQLite FTS5 and JSON support.`);
|
|
61
69
|
}
|
|
62
|
-
|
|
70
|
+
})();
|
|
71
|
+
try {
|
|
72
|
+
db?.close();
|
|
63
73
|
}
|
|
64
74
|
catch {
|
|
65
|
-
return check('runtime.sqlite', 'fail', 'The
|
|
66
|
-
}
|
|
67
|
-
finally {
|
|
68
|
-
db?.close();
|
|
75
|
+
return [result, check('runtime.sqlite.cleanup', 'fail', 'The SQLite capability probe could not be closed cleanly', 'Retry diagnosis in a new process.')];
|
|
69
76
|
}
|
|
77
|
+
return [result];
|
|
70
78
|
};
|
|
71
79
|
const grammarCheck = () => {
|
|
72
80
|
try {
|
|
@@ -138,6 +146,18 @@ const pnpmCheck = () => {
|
|
|
138
146
|
}
|
|
139
147
|
return check('workspace.pnpm', 'pass', `pnpm ${actual} satisfies the workspace requirement`);
|
|
140
148
|
};
|
|
149
|
+
const finishDatabaseInspection = (result, close) => {
|
|
150
|
+
try {
|
|
151
|
+
close();
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
return {
|
|
155
|
+
...result,
|
|
156
|
+
checks: [...result.checks, check('store.cleanup', 'fail', 'The database connection could not be closed cleanly', 'Retry diagnosis in a new process; cave doctor made no repairs.')]
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
return result;
|
|
160
|
+
};
|
|
141
161
|
const inspectDatabase = (path, source) => {
|
|
142
162
|
const memory = path === ':memory:';
|
|
143
163
|
const exists = memory || existsSync(path);
|
|
@@ -152,89 +172,150 @@ const inspectDatabase = (path, source) => {
|
|
|
152
172
|
// A CAVE text file is a read-only store assembled in memory (spec
|
|
153
173
|
// §13.7, §23.4): replay it, sources included, and count what it holds.
|
|
154
174
|
const configuration = { ...base, kind: 'text' };
|
|
155
|
-
|
|
156
|
-
|
|
175
|
+
let store;
|
|
176
|
+
const result = (() => {
|
|
157
177
|
try {
|
|
178
|
+
store = openText(path, { assemble });
|
|
158
179
|
const claims = store.currentBeliefs().filter(row => row.conf > 0).length;
|
|
159
180
|
return {
|
|
160
181
|
configuration: { ...configuration, claims },
|
|
161
182
|
checks: [check('store.database', 'pass', `CAVE text store assembled in memory (${claims} current claim(s)); text stores are read-only`)]
|
|
162
183
|
};
|
|
163
184
|
}
|
|
164
|
-
|
|
165
|
-
|
|
185
|
+
catch {
|
|
186
|
+
return {
|
|
187
|
+
configuration,
|
|
188
|
+
checks: [check('store.database', 'fail', 'The CAVE text store or one of its declared sources could not be loaded', 'Fix the file (cave parse) or the source it declares; a text store is read-only.')]
|
|
189
|
+
};
|
|
166
190
|
}
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
return {
|
|
170
|
-
configuration,
|
|
171
|
-
checks: [check('store.database', 'fail', `The CAVE text store does not load: ${error instanceof LocateError ? error.message.split('\n')[0] : error instanceof Error ? error.message : String(error)}`, 'Fix the file (cave parse) or the source it declares; a text store is read-only.')]
|
|
172
|
-
};
|
|
173
|
-
}
|
|
191
|
+
})();
|
|
192
|
+
return finishDatabaseInspection(result, () => store?.close());
|
|
174
193
|
}
|
|
175
194
|
let db;
|
|
176
195
|
let observed = base;
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
196
|
+
const result = (() => {
|
|
197
|
+
try {
|
|
198
|
+
db = nodeSqliteAdapter.open(path, { readOnly: true });
|
|
199
|
+
// Keep schema, integrity, row and search diagnostics on one read snapshot.
|
|
200
|
+
// Closing the owned connection releases this read-only transaction.
|
|
201
|
+
db.exec('BEGIN');
|
|
202
|
+
const version = db.prepare('PRAGMA user_version').get()?.['user_version'];
|
|
203
|
+
if (typeof version !== 'number')
|
|
204
|
+
throw new Error('invalid version');
|
|
205
|
+
const caveObjects = db.prepare(`SELECT count(*) AS count FROM sqlite_schema WHERE name LIKE 'cave!_%' ESCAPE '!' OR name LIKE 'idx!_cave!_%' ESCAPE '!'`).get()?.['count'];
|
|
206
|
+
const configuration = { ...base, schemaVersion: version };
|
|
207
|
+
observed = configuration;
|
|
208
|
+
if (version > Schema.currentVersion) {
|
|
209
|
+
return {
|
|
210
|
+
configuration,
|
|
211
|
+
checks: [check('store.database', 'fail', `Database schema ${version} is newer than supported schema ${Schema.currentVersion}`, 'Upgrade CAVE before opening this database.')]
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
if (version === 0 && caveObjects === 0) {
|
|
215
|
+
return {
|
|
216
|
+
configuration,
|
|
217
|
+
checks: [check('store.database', 'warn', 'The database is readable but is not initialized as a CAVE store', 'Run cave add to initialize it; cave doctor made no changes.')]
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
if (version < Schema.currentVersion) {
|
|
221
|
+
return {
|
|
222
|
+
configuration,
|
|
223
|
+
checks: [check('store.database', 'warn', `Database schema ${version} needs migration to schema ${Schema.currentVersion}`, 'Close every user and copy the database file as a rollback point, then open it with a writing command such as cave add to migrate it; reads never migrate.')]
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
Schema.validate(db, version);
|
|
227
|
+
const integrity = db.prepare('PRAGMA integrity_check').all();
|
|
228
|
+
if (integrity.length !== 1 || integrity[0]?.['integrity_check'] !== 'ok') {
|
|
229
|
+
return {
|
|
230
|
+
configuration,
|
|
231
|
+
checks: [check('store.integrity', 'fail', 'SQLite integrity checking failed', 'Restore a verified backup or recover the database with SQLite tooling.')]
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
const foreignKeys = db.prepare('PRAGMA foreign_key_check').all();
|
|
235
|
+
if (foreignKeys.length > 0) {
|
|
236
|
+
return {
|
|
237
|
+
configuration,
|
|
238
|
+
checks: [check('store.integrity', 'fail', 'The store contains broken foreign-key references', 'Restore a verified backup or repair the affected database rows.')]
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
const claims = db.prepare('SELECT count(*) AS count FROM cave_claim').get()?.['count'];
|
|
242
|
+
if (typeof claims !== 'number')
|
|
243
|
+
throw new Error('invalid count');
|
|
244
|
+
let invalidRows = db.prepare(`SELECT EXISTS (
|
|
245
|
+
SELECT 1 FROM cave_claim WHERE negated NOT IN (0, 1) OR importance NOT IN (0, 1)
|
|
246
|
+
OR value_approx NOT IN (0, 1)
|
|
247
|
+
OR (object IS NOT NULL AND (attribute IS NOT NULL OR value_text IS NOT NULL))
|
|
248
|
+
OR (attribute IS NOT NULL AND value_text IS NULL)
|
|
249
|
+
OR typeof(conf) NOT IN ('integer', 'real') OR conf NOT BETWEEN 0 AND 1
|
|
250
|
+
OR (sigma_level IS NOT NULL AND (typeof(sigma_level) NOT IN ('integer', 'real')
|
|
251
|
+
OR NOT (sigma_level > 0 AND sigma_level <= ?)))
|
|
252
|
+
) OR EXISTS (
|
|
253
|
+
SELECT 1 FROM cave_provenance WHERE typeof(value) <> 'text' OR value = ''
|
|
254
|
+
) OR EXISTS (
|
|
255
|
+
SELECT 1 FROM cave_edge WHERE role IS NULL OR role NOT IN ('WHEN', 'VIA', 'BECAUSE', 'QUALIFIES')
|
|
256
|
+
) AS invalid`).get(Number.MAX_VALUE)?.['invalid'];
|
|
257
|
+
if (typeof invalidRows !== 'number')
|
|
258
|
+
throw new Error('invalid row check');
|
|
259
|
+
if (invalidRows === 0) {
|
|
260
|
+
// Stream stored history without collecting rows; projections must agree with
|
|
261
|
+
// authored values even when a SQL filter would otherwise hide the row.
|
|
262
|
+
// This connection is owned by nodeSqliteAdapter, which returns native statements.
|
|
263
|
+
const rows = db.prepare('SELECT * FROM cave_claim');
|
|
264
|
+
const contexts = db.prepare('SELECT context FROM cave_context WHERE claim_id = ?');
|
|
265
|
+
const tags = db.prepare('SELECT key, value FROM cave_tag WHERE claim_id = ?');
|
|
266
|
+
for (const row of rows.iterate()) {
|
|
267
|
+
if (typeof row.id !== 'string' || !Uuidv7.is(row.id) || row.tx !== row.id) {
|
|
268
|
+
invalidRows = 1;
|
|
269
|
+
break;
|
|
270
|
+
}
|
|
271
|
+
try {
|
|
272
|
+
const claim = Row.toClaim(row, contexts.all(row.id).map(entry => entry.context), tags.all(row.id));
|
|
273
|
+
emitClaim(claim);
|
|
274
|
+
if (Key.of(claim) !== row.claim_key) {
|
|
275
|
+
invalidRows = 1;
|
|
276
|
+
break;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
catch {
|
|
280
|
+
invalidRows = 1;
|
|
281
|
+
break;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
// SQLite's integrity_check cannot tell whether the separate FTS content
|
|
286
|
+
// still represents the claims. Compare one snapshot, including counts so
|
|
287
|
+
// duplicate entries cannot disappear under EXCEPT's set semantics.
|
|
288
|
+
const searchColumns = 'subject, verb, object, attribute, value_text, comment, raw_line';
|
|
289
|
+
const searchMismatch = db.prepare(`SELECT
|
|
290
|
+
(SELECT count(*) FROM cave_claim) <> (SELECT count(*) FROM cave_fts)
|
|
291
|
+
OR EXISTS (
|
|
292
|
+
SELECT id, ${searchColumns} FROM cave_claim
|
|
293
|
+
EXCEPT SELECT claim_id, ${searchColumns} FROM cave_fts
|
|
294
|
+
) AS mismatch`).get()?.['mismatch'];
|
|
295
|
+
if (typeof searchMismatch !== 'number')
|
|
296
|
+
throw new Error('invalid search check');
|
|
206
297
|
return {
|
|
207
|
-
configuration,
|
|
208
|
-
checks: [
|
|
298
|
+
configuration: { ...configuration, claims },
|
|
299
|
+
checks: [
|
|
300
|
+
check('store.database', 'pass', `CAVE schema ${version} is compatible (${claims} claim(s))`),
|
|
301
|
+
check('store.integrity', 'pass', 'SQLite integrity and foreign-key checks passed'),
|
|
302
|
+
invalidRows === 0 ?
|
|
303
|
+
check('store.rows', 'pass', 'Stored payloads, provenance, flags, confidence and sigma levels are valid') :
|
|
304
|
+
check('store.rows', 'fail', 'Stored claims contain invalid transaction identities, claim keys, terms, tags, edge roles, payload columns, provenance values, boolean flags, confidence, sigma levels, authored values or numeric caches', 'Restore a verified backup or repair the affected stored rows before exporting; cave doctor made no changes.'),
|
|
305
|
+
searchMismatch === 0 ?
|
|
306
|
+
check('store.search', 'pass', 'Search entries match the stored claims') :
|
|
307
|
+
check('store.search', 'fail', 'Search entries are missing, duplicated, orphaned, or stale', 'Restore a verified backup or rebuild the search index from the stored claims with SQLite tooling; cave doctor made no changes.')
|
|
308
|
+
]
|
|
209
309
|
};
|
|
210
310
|
}
|
|
211
|
-
|
|
212
|
-
if (foreignKeys.length > 0) {
|
|
311
|
+
catch {
|
|
213
312
|
return {
|
|
214
|
-
configuration,
|
|
215
|
-
checks: [check('store.
|
|
313
|
+
configuration: observed,
|
|
314
|
+
checks: [check('store.database', 'fail', 'The configured database is unreadable or has an incompatible schema', 'Check file permissions, restore a verified backup, or pass --db for another store.')]
|
|
216
315
|
};
|
|
217
316
|
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
throw new Error('invalid count');
|
|
221
|
-
return {
|
|
222
|
-
configuration: { ...configuration, claims },
|
|
223
|
-
checks: [
|
|
224
|
-
check('store.database', 'pass', `CAVE schema ${version} is compatible (${claims} claim(s))`),
|
|
225
|
-
check('store.integrity', 'pass', 'SQLite integrity and foreign-key checks passed')
|
|
226
|
-
]
|
|
227
|
-
};
|
|
228
|
-
}
|
|
229
|
-
catch {
|
|
230
|
-
return {
|
|
231
|
-
configuration: observed,
|
|
232
|
-
checks: [check('store.database', 'fail', 'The configured database is unreadable or has an incompatible schema', 'Check file permissions, restore a verified backup, or pass --db for another store.')]
|
|
233
|
-
};
|
|
234
|
-
}
|
|
235
|
-
finally {
|
|
236
|
-
db?.close();
|
|
237
|
-
}
|
|
317
|
+
})();
|
|
318
|
+
return finishDatabaseInspection(result, () => db?.close());
|
|
238
319
|
};
|
|
239
320
|
const inspectHooks = (path) => {
|
|
240
321
|
if (path === undefined) {
|
|
@@ -247,17 +328,11 @@ const inspectHooks = (path) => {
|
|
|
247
328
|
if (!configuration.exists) {
|
|
248
329
|
return {
|
|
249
330
|
configuration,
|
|
250
|
-
check: check('config.hooks', 'fail', 'The configured hooks file does not exist', 'Create a JSON object
|
|
331
|
+
check: check('config.hooks', 'fail', 'The configured hooks file does not exist', 'Create a UTF-8 JSON object with nonblank hook names and Unicode shell command strings, or omit --hooks.')
|
|
251
332
|
};
|
|
252
333
|
}
|
|
253
334
|
try {
|
|
254
|
-
const
|
|
255
|
-
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
|
|
256
|
-
throw new Error('invalid');
|
|
257
|
-
const entries = Object.entries(parsed);
|
|
258
|
-
if (entries.some(([name, command]) => name.trim() === '' || typeof command !== 'string')) {
|
|
259
|
-
throw new Error('invalid');
|
|
260
|
-
}
|
|
335
|
+
const entries = Object.entries(readHooks(path));
|
|
261
336
|
return {
|
|
262
337
|
configuration: { ...configuration, entries: entries.length },
|
|
263
338
|
check: check('config.hooks', 'pass', `Hooks configuration is valid (${entries.length} entr${entries.length === 1 ? 'y' : 'ies'})`)
|
|
@@ -266,19 +341,20 @@ const inspectHooks = (path) => {
|
|
|
266
341
|
catch {
|
|
267
342
|
return {
|
|
268
343
|
configuration,
|
|
269
|
-
check: check('config.hooks', 'fail', 'The configured hooks file is unreadable or malformed', 'Use
|
|
344
|
+
check: check('config.hooks', 'fail', 'The configured hooks file is unreadable or malformed', 'Use valid UTF-8 JSON with nonblank hook names and string commands; names and commands must have no unpaired Unicode surrogates.')
|
|
270
345
|
};
|
|
271
346
|
}
|
|
272
347
|
};
|
|
273
348
|
export const diagnose = (options = {}) => {
|
|
274
|
-
const
|
|
275
|
-
const
|
|
349
|
+
const configuredDb = options.db, configuredHooks = options.hooks;
|
|
350
|
+
const databasePath = configuredDb ?? defaultDbPath();
|
|
351
|
+
const databaseSource = configuredDb !== undefined ? 'flag' :
|
|
276
352
|
process.env['CAVE_DB'] !== undefined ? 'environment' : 'default';
|
|
277
353
|
const database = inspectDatabase(databasePath, databaseSource);
|
|
278
|
-
const hooks = inspectHooks(
|
|
354
|
+
const hooks = inspectHooks(configuredHooks);
|
|
279
355
|
const checks = [
|
|
280
356
|
nodeCheck(),
|
|
281
|
-
sqliteCheck(),
|
|
357
|
+
...sqliteCheck(),
|
|
282
358
|
grammarCheck(),
|
|
283
359
|
pnpmCheck(),
|
|
284
360
|
...database.checks,
|
package/dist/src/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/doctor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-message.d.ts","sourceRoot":"","sources":["../../src/error-message.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,eAAO,MAAM,YAAY,GAAI,OAAO,OAAO,EAAE,eAAa,KAAG,MAW5D,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** Formatting an exception must not replace the failure being reported. */
|
|
2
|
+
export const errorMessage = (error, debug = false) => {
|
|
3
|
+
if (debug) {
|
|
4
|
+
try {
|
|
5
|
+
if (error instanceof Error) {
|
|
6
|
+
const stack = error.stack;
|
|
7
|
+
if (stack !== undefined)
|
|
8
|
+
return String(stack);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
catch { /* An unavailable stack can still have a useful message. */ }
|
|
12
|
+
}
|
|
13
|
+
try {
|
|
14
|
+
return error instanceof Error ? String(error.message) : String(error);
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return '[unprintable thrown value]';
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=error-message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-message.js","sourceRoot":"","sources":["../../src/error-message.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAc,EAAE,KAAK,GAAG,KAAK,EAAU,EAAE;IACpE,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,CAAC;YACH,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;gBACzB,IAAI,KAAK,KAAK,SAAS;oBAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;YAC/C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,2DAA2D,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,CAAC;QAAC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAAC,CAAC;IAC7E,MAAM,CAAC;QAAC,OAAO,4BAA4B,CAAA;IAAC,CAAC;AAC/C,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks-config.d.ts","sourceRoot":"","sources":["../../src/hooks-config.ts"],"names":[],"mappings":"AAEA,gFAAgF;AAChF,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAkB7D,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
/** One configuration contract for execution and redacted doctor diagnostics. */
|
|
3
|
+
export const readHooks = (path) => {
|
|
4
|
+
const bytes = readFileSync(path);
|
|
5
|
+
let text;
|
|
6
|
+
try {
|
|
7
|
+
text = new TextDecoder('utf-8', { fatal: true, ignoreBOM: true }).decode(bytes);
|
|
8
|
+
}
|
|
9
|
+
catch (cause) {
|
|
10
|
+
throw new TypeError(`${path}: invalid UTF-8 hooks configuration`, { cause });
|
|
11
|
+
}
|
|
12
|
+
const parsed = JSON.parse(text);
|
|
13
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed) ||
|
|
14
|
+
Object.entries(parsed).some(([name, command]) => name.trim() === '' || typeof command !== 'string')) {
|
|
15
|
+
throw new Error(`${path}: hooks must be a JSON object of nonblank names to shell template strings`);
|
|
16
|
+
}
|
|
17
|
+
const hooks = parsed;
|
|
18
|
+
if (Object.entries(hooks).some(([name, command]) => /[\uD800-\uDFFF]/u.test(name) || /[\uD800-\uDFFF]/u.test(command))) {
|
|
19
|
+
throw new Error(`${path}: hook names and commands must contain well-formed Unicode`);
|
|
20
|
+
}
|
|
21
|
+
return hooks;
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=hooks-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks-config.js","sourceRoot":"","sources":["../../src/hooks-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAEtC,gFAAgF;AAChF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAY,EAA0B,EAAE;IAChE,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;IAChC,IAAI,IAAY,CAAA;IAChB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACjF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,qCAAqC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;IAC9E,CAAC;IACD,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACxC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACtE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,OAAO,OAAO,KAAK,QAAQ,CAAC,EAAE,CAAC;QACxG,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,2EAA2E,CAAC,CAAA;IACrG,CAAC;IACD,MAAM,KAAK,GAAG,MAAgC,CAAA;IAC9C,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACvH,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,4DAA4D,CAAC,CAAA;IACtF,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cavelang/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.36.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "cave — CLI for parsing, storing, querying and exporting CAVE knowledge.",
|
|
6
6
|
"keywords": [
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"directory": "packages/cli"
|
|
22
22
|
},
|
|
23
23
|
"engines": {
|
|
24
|
-
"node": "^
|
|
24
|
+
"node": "^24.16.0 || ^26.1.0"
|
|
25
25
|
},
|
|
26
26
|
"bin": {
|
|
27
27
|
"cave": "./dist/src/main.js"
|
|
@@ -97,26 +97,29 @@
|
|
|
97
97
|
"@modelcontextprotocol/server": "2.0.0",
|
|
98
98
|
"@mozilla/readability": "^0.6.0",
|
|
99
99
|
"linkedom": "^0.18.13",
|
|
100
|
-
"
|
|
101
|
-
"
|
|
102
|
-
"
|
|
103
|
-
"@cavelang/
|
|
104
|
-
"@cavelang/
|
|
105
|
-
"@cavelang/
|
|
106
|
-
"@cavelang/
|
|
100
|
+
"mdast-util-from-markdown": "2.0.3",
|
|
101
|
+
"mdast-util-gfm-footnote": "2.1.0",
|
|
102
|
+
"micromark-extension-gfm-footnote": "2.1.0",
|
|
103
|
+
"@cavelang/canonical": "0.36.0",
|
|
104
|
+
"@cavelang/core": "0.36.0",
|
|
105
|
+
"@cavelang/fusion": "0.36.0",
|
|
106
|
+
"@cavelang/highlight": "0.36.0",
|
|
107
|
+
"@cavelang/query": "0.36.0",
|
|
108
|
+
"@cavelang/store": "0.36.0",
|
|
109
|
+
"@cavelang/parser": "0.36.0"
|
|
107
110
|
},
|
|
108
111
|
"devDependencies": {
|
|
109
|
-
"@cavelang/act": "0.
|
|
110
|
-
"@cavelang/automate": "0.
|
|
111
|
-
"@cavelang/eval": "0.
|
|
112
|
-
"@cavelang/
|
|
113
|
-
"@cavelang/
|
|
114
|
-
"@cavelang/
|
|
115
|
-
"@cavelang/
|
|
116
|
-
"@cavelang/shape": "0.
|
|
117
|
-
"@cavelang/
|
|
118
|
-
"@cavelang/
|
|
119
|
-
"@cavelang/view": "0.
|
|
112
|
+
"@cavelang/act": "0.36.0",
|
|
113
|
+
"@cavelang/automate": "0.36.0",
|
|
114
|
+
"@cavelang/eval": "0.36.0",
|
|
115
|
+
"@cavelang/ingest": "0.36.0",
|
|
116
|
+
"@cavelang/loop": "0.36.0",
|
|
117
|
+
"@cavelang/mcp": "0.36.0",
|
|
118
|
+
"@cavelang/connect": "0.36.0",
|
|
119
|
+
"@cavelang/shape": "0.36.0",
|
|
120
|
+
"@cavelang/sync": "0.36.0",
|
|
121
|
+
"@cavelang/rules": "0.36.0",
|
|
122
|
+
"@cavelang/view": "0.36.0"
|
|
120
123
|
},
|
|
121
124
|
"scripts": {
|
|
122
125
|
"build": "tsc -b && node scripts/consolidate.mjs",
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import fs from 'node:fs'
|
|
2
|
+
import { dirname, join, resolve } from 'node:path'
|
|
3
|
+
import { errorMessage } from './error-message.ts'
|
|
4
|
+
|
|
5
|
+
/** Publish complete text; failures before rename leave the destination intact. */
|
|
6
|
+
export const writeOutput = (path: string, text: string): void => {
|
|
7
|
+
let target = resolve(path)
|
|
8
|
+
let mode: number | undefined
|
|
9
|
+
let entry: fs.Stats | undefined
|
|
10
|
+
try { entry = fs.lstatSync(target) } catch (error) {
|
|
11
|
+
if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error
|
|
12
|
+
}
|
|
13
|
+
if (entry !== undefined) {
|
|
14
|
+
// Follow existing symlinks without replacing the link itself. A dangling
|
|
15
|
+
// link fails resolution rather than publishing over an unexpected path.
|
|
16
|
+
if (entry.isSymbolicLink()) target = fs.realpathSync(target)
|
|
17
|
+
const stat = fs.statSync(target)
|
|
18
|
+
if (!stat.isFile()) throw new Error(`output destination is not a regular file: ${path}`)
|
|
19
|
+
fs.accessSync(target, fs.constants.W_OK)
|
|
20
|
+
mode = stat.mode & 0o777
|
|
21
|
+
}
|
|
22
|
+
const directory = fs.mkdtempSync(join(dirname(target), '.cave-export-'))
|
|
23
|
+
const temporary = join(directory, 'output')
|
|
24
|
+
const errors: unknown[] = []
|
|
25
|
+
let published = false
|
|
26
|
+
try {
|
|
27
|
+
const fd = fs.openSync(temporary, 'wx', mode ?? 0o666)
|
|
28
|
+
try {
|
|
29
|
+
fs.writeFileSync(fd, text)
|
|
30
|
+
if (mode !== undefined) fs.fchmodSync(fd, mode)
|
|
31
|
+
fs.fsyncSync(fd)
|
|
32
|
+
} catch (error) { errors.push(error) }
|
|
33
|
+
try { fs.closeSync(fd) } catch (error) { errors.push(error) }
|
|
34
|
+
if (errors.length === 0) {
|
|
35
|
+
fs.renameSync(temporary, target)
|
|
36
|
+
published = true
|
|
37
|
+
}
|
|
38
|
+
} catch (error) { errors.push(error) }
|
|
39
|
+
try { fs.rmSync(directory, { recursive: true, force: true }) } catch (error) {
|
|
40
|
+
errors.push(published ? new Error(
|
|
41
|
+
`output published to ${target}, but temporary directory cleanup failed: ${directory}: ${errorMessage(error)}`,
|
|
42
|
+
{ cause: error }) : error)
|
|
43
|
+
}
|
|
44
|
+
if (errors.length === 1) throw errors[0]
|
|
45
|
+
if (errors.length > 1) throw new AggregateError(errors,
|
|
46
|
+
`file output failed: ${errors.map(error => errorMessage(error)).join('; ')}`, { cause: errors[0] })
|
|
47
|
+
}
|