@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
|
@@ -44,7 +44,8 @@ const sourcesOf = (golden) => {
|
|
|
44
44
|
return false;
|
|
45
45
|
}
|
|
46
46
|
const extension = name.slice(stem.length + 1);
|
|
47
|
-
return extension !== '' && !extension.includes('.') &&
|
|
47
|
+
return extension !== '' && !extension.includes('.') &&
|
|
48
|
+
statSync(join(dir, name), { throwIfNoEntry: false })?.isFile() === true;
|
|
48
49
|
})
|
|
49
50
|
.sort()
|
|
50
51
|
.map(name => join(dir, name));
|
|
@@ -59,8 +60,11 @@ const instructionsOf = (golden, root, explicit) => {
|
|
|
59
60
|
return candidates.find(path => path !== undefined && existsSync(path));
|
|
60
61
|
};
|
|
61
62
|
const caseOf = (golden, root, cwd, explicit) => {
|
|
62
|
-
const sources = sourcesOf(golden);
|
|
63
63
|
const name = relative(cwd, golden).slice(0, -goldenSuffix.length);
|
|
64
|
+
if (!statSync(golden).isFile()) {
|
|
65
|
+
return { problem: `${name}: ${basename(golden)} must be a file` };
|
|
66
|
+
}
|
|
67
|
+
const sources = sourcesOf(golden);
|
|
64
68
|
if (sources.length === 0) {
|
|
65
69
|
return { problem: `${name}: no source file — expected a single ${basename(golden).slice(0, -goldenSuffix.length)}.<ext> beside ${basename(golden)}` };
|
|
66
70
|
}
|
|
@@ -70,6 +74,11 @@ const caseOf = (golden, root, cwd, explicit) => {
|
|
|
70
74
|
const queries = `${golden.slice(0, -goldenSuffix.length)}${queriesSuffix}`;
|
|
71
75
|
const loop = `${golden.slice(0, -goldenSuffix.length)}${loopSuffix}`;
|
|
72
76
|
const instructions = instructionsOf(golden, root, explicit);
|
|
77
|
+
for (const path of [queries, loop, instructions]) {
|
|
78
|
+
if (path !== undefined && existsSync(path) && !statSync(path).isFile()) {
|
|
79
|
+
return { problem: `${name}: ${basename(path)} must be a file` };
|
|
80
|
+
}
|
|
81
|
+
}
|
|
73
82
|
return {
|
|
74
83
|
kase: {
|
|
75
84
|
name,
|
|
@@ -90,6 +99,9 @@ export const discover = (roots, options = {}) => {
|
|
|
90
99
|
const explicit = options.instructions === undefined ? undefined : resolve(cwd, options.instructions);
|
|
91
100
|
const cases = [];
|
|
92
101
|
const problems = [];
|
|
102
|
+
if (explicit !== undefined && !statSync(explicit, { throwIfNoEntry: false })?.isFile()) {
|
|
103
|
+
return { cases, problems: [`${explicit}: instructions must name an existing file`] };
|
|
104
|
+
}
|
|
93
105
|
for (const root of roots) {
|
|
94
106
|
const absolute = resolve(cwd, root);
|
|
95
107
|
if (!existsSync(absolute)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"suite.js","sourceRoot":"","sources":["../../src/suite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AACrE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEtE,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAA;AAC1C,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAA;AAC5C,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAA;AACtC,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAA;AAEpD,2CAA2C;AAC3C,MAAM,CAAC,MAAM,kBAAkB,GAAG,iBAAiB,CAAA;AA2BnD,qFAAqF;AACrF,MAAM,SAAS,GAAG,CAAC,MAAc,EAAY,EAAE;IAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC3B,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;IAC5D,OAAO,WAAW,CAAC,GAAG,CAAC;SACpB,MAAM,CAAC,IAAI,CAAC,EAAE;QACb,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;YACjC,OAAO,KAAK,CAAA;QACd,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAC7C,OAAO,SAAS,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"suite.js","sourceRoot":"","sources":["../../src/suite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AACrE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEtE,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAA;AAC1C,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAA;AAC5C,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAA;AACtC,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAA;AAEpD,2CAA2C;AAC3C,MAAM,CAAC,MAAM,kBAAkB,GAAG,iBAAiB,CAAA;AA2BnD,qFAAqF;AACrF,MAAM,SAAS,GAAG,CAAC,MAAc,EAAY,EAAE;IAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC3B,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;IAC5D,OAAO,WAAW,CAAC,GAAG,CAAC;SACpB,MAAM,CAAC,IAAI,CAAC,EAAE;QACb,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;YACjC,OAAO,KAAK,CAAA;QACd,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAC7C,OAAO,SAAS,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;YACjD,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IAC3E,CAAC,CAAC;SACD,IAAI,EAAE;SACN,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAA;AACjC,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,CAAC,MAAc,EAAE,IAAY,EAAE,QAA4B,EAAsB,EAAE;IACxG,MAAM,UAAU,GAAG;QACjB,QAAQ;QACR,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,kBAAkB,EAAE;QAC/D,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC;QACzC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC;KAC/B,CAAA;IACD,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;AACxE,CAAC,CAAA;AAED,MAAM,MAAM,GAAG,CACb,MAAc,EACd,IAAY,EACZ,GAAW,EACX,QAA4B,EACU,EAAE;IACxC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;IACjE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QAC/B,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,KAAK,QAAQ,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAA;IACnE,CAAC;IACD,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;IACjC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,wCAAwC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,iBAAiB,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,CAAA;IACvJ,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,wBAAwB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAA;IACzG,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,aAAa,EAAE,CAAA;IAC1E,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,UAAU,EAAE,CAAA;IACpE,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC3D,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,CAAC;QACjD,IAAI,IAAI,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YACvE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAA;QACjE,CAAC;IACH,CAAC;IACD,OAAO;QACL,IAAI,EAAE;YACJ,IAAI;YACJ,MAAM,EAAE,OAAO,CAAC,CAAC,CAAE;YACnB,MAAM;YACN,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;YACzC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;YACnC,GAAG,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE;SACtD;KACF,CAAA;AACH,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,KAAwB,EACxB,UAAmD,EAAE,EAC9C,EAAE;IACT,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;IACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;IACpG,MAAM,KAAK,GAAW,EAAE,CAAA;IACxB,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;QACvF,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,GAAG,QAAQ,2CAA2C,CAAC,EAAE,CAAA;IACtF,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QACnC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,6BAA6B,CAAC,CAAA;YACnD,SAAQ;QACV,CAAC;QACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YAChC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBACrC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,8BAA8B,YAAY,OAAO,CAAC,CAAA;gBACvE,SAAQ;YACV,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAA;YAClE,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YAC1B,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;YAChC,CAAC;YACD,SAAQ;QACV,CAAC;QACD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,YAAY,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;QACzE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,QAAQ,YAAY,cAAc,CAAC,CAAA;YACxD,SAAQ;QACV,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAA;YACvE,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YAC1B,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAA;AAChF,CAAC,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Retain an in-flight failure if releasing an owned resource also fails. */
|
|
2
|
+
export declare const cleanup: (failures: readonly unknown[], release: () => void) => void;
|
|
3
|
+
/** Keep diagnostics already attached to cancellation, or retain a simultaneous work failure. */
|
|
4
|
+
export declare const throwIfCancelled: (signal: AbortSignal | undefined, error: unknown) => void;
|
|
5
|
+
//# sourceMappingURL=cleanup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../src/cleanup.ts"],"names":[],"mappings":"AAEA,6EAA6E;AAC7E,eAAO,MAAM,OAAO,GAAI,UAAU,SAAS,OAAO,EAAE,EAAE,SAAS,MAAM,IAAI,KAAG,IAO3E,CAAA;AAED,gGAAgG;AAChG,eAAO,MAAM,gBAAgB,GAAI,QAAQ,WAAW,GAAG,SAAS,EAAE,OAAO,OAAO,KAAG,IAuBlF,CAAA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { errorMessage as message } from "./error-message.js";
|
|
2
|
+
/** Retain an in-flight failure if releasing an owned resource also fails. */
|
|
3
|
+
export const cleanup = (failures, release) => {
|
|
4
|
+
try {
|
|
5
|
+
release();
|
|
6
|
+
}
|
|
7
|
+
catch (error) {
|
|
8
|
+
if (failures.length === 0)
|
|
9
|
+
throw error;
|
|
10
|
+
const previous = failures[0];
|
|
11
|
+
throw new AggregateError([previous, error], `${message(previous)}; cleanup also failed: ${message(error)}`, { cause: previous });
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
/** Keep diagnostics already attached to cancellation, or retain a simultaneous work failure. */
|
|
15
|
+
export const throwIfCancelled = (signal, error) => {
|
|
16
|
+
try {
|
|
17
|
+
signal?.throwIfAborted();
|
|
18
|
+
}
|
|
19
|
+
catch (reason) {
|
|
20
|
+
const pending = [error], seen = new Set();
|
|
21
|
+
while (pending.length > 0) {
|
|
22
|
+
const value = pending.pop();
|
|
23
|
+
if (value === reason)
|
|
24
|
+
throw error;
|
|
25
|
+
if (seen.has(value))
|
|
26
|
+
continue;
|
|
27
|
+
seen.add(value);
|
|
28
|
+
try {
|
|
29
|
+
if (value instanceof AggregateError) {
|
|
30
|
+
try {
|
|
31
|
+
for (const inner of value.errors)
|
|
32
|
+
pending.push(inner);
|
|
33
|
+
}
|
|
34
|
+
catch { /* Opaque metadata cannot prove cancellation is already included. */ }
|
|
35
|
+
}
|
|
36
|
+
if (value instanceof Error) {
|
|
37
|
+
try {
|
|
38
|
+
const cause = value.cause;
|
|
39
|
+
if (cause !== undefined)
|
|
40
|
+
pending.push(cause);
|
|
41
|
+
}
|
|
42
|
+
catch { /* Retain the original error even when its cause cannot be read. */ }
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch { /* An opaque thrown object may reject prototype inspection too. */ }
|
|
46
|
+
}
|
|
47
|
+
throw new AggregateError([reason, error], `${message(reason)}; ingestion also failed: ${message(error)}`, { cause: reason });
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=cleanup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../src/cleanup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,IAAI,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAE5D,6EAA6E;AAC7E,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,QAA4B,EAAE,OAAmB,EAAQ,EAAE;IACjF,IAAI,CAAC;QAAC,OAAO,EAAE,CAAA;IAAC,CAAC;IACjB,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,KAAK,CAAA;QACtC,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;QAC5B,MAAM,IAAI,cAAc,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,0BAA0B,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;IAClI,CAAC;AACH,CAAC,CAAA;AAED,gGAAgG;AAChG,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAA+B,EAAE,KAAc,EAAQ,EAAE;IACxF,IAAI,CAAC;QAAC,MAAM,EAAE,cAAc,EAAE,CAAA;IAAC,CAAC;IAChC,OAAO,MAAM,EAAE,CAAC;QACd,MAAM,OAAO,GAAc,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,EAAW,CAAA;QAC7D,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;YAC3B,IAAI,KAAK,KAAK,MAAM;gBAAE,MAAM,KAAK,CAAA;YACjC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,SAAQ;YAC7B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACf,IAAI,CAAC;gBACH,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;oBACpC,IAAI,CAAC;wBAAC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM;4BAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;oBAAC,CAAC;oBAAC,MAAM,CAAC,CAAC,oEAAoE,CAAC,CAAC;gBAC9I,CAAC;gBACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;oBAC3B,IAAI,CAAC;wBACH,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;wBACzB,IAAI,KAAK,KAAK,SAAS;4BAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;oBAC9C,CAAC;oBAAC,MAAM,CAAC,CAAC,mEAAmE,CAAC,CAAC;gBACjF,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,kEAAkE,CAAC,CAAC;QAChF,CAAC;QACD,MAAM,IAAI,cAAc,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,4BAA4B,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;IAC9H,CAAC;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const digestBytes: (bytes: Uint8Array) => string;
|
|
2
|
+
export declare const sourceLabel: (path: string) => string;
|
|
3
|
+
/** Keep filesystem diagnostics printable while retaining their original cause. */
|
|
4
|
+
export declare const withSourceError: <T>(path: string, operation: string, read: () => T) => T;
|
|
5
|
+
export declare const decodeText: (bytes: Uint8Array, path: string, kind?: string) => string;
|
|
6
|
+
//# sourceMappingURL=content.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/content.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,WAAW,GAAI,OAAO,UAAU,KAAG,MACe,CAAA;AAE/D,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,MAG2B,CAAA;AAEtE,kFAAkF;AAClF,eAAO,MAAM,eAAe,GAAI,CAAC,EAAE,MAAM,MAAM,EAAE,WAAW,MAAM,EAAE,MAAM,MAAM,CAAC,KAAG,CAMnF,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,OAAO,UAAU,EAAE,MAAM,MAAM,EAAE,aAAwB,KAAG,MAMtF,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { errorMessage } from "./error-message.js";
|
|
3
|
+
import { sourcePath } from "./options.js";
|
|
4
|
+
export const digestBytes = (bytes) => createHash('sha256').update(bytes).digest('hex').slice(0, 12);
|
|
5
|
+
export const sourceLabel = (path) => /[\u0000-\u001f\u007f-\u009f\u2028\u2029]/.test(path) ?
|
|
6
|
+
JSON.stringify(path).replace(/[\u007f-\u009f\u2028\u2029]/g, char => `\\u${char.charCodeAt(0).toString(16).padStart(4, '0')}`) : path;
|
|
7
|
+
/** Keep filesystem diagnostics printable while retaining their original cause. */
|
|
8
|
+
export const withSourceError = (path, operation, read) => {
|
|
9
|
+
sourcePath(path, 'source path');
|
|
10
|
+
try {
|
|
11
|
+
return read();
|
|
12
|
+
}
|
|
13
|
+
catch (cause) {
|
|
14
|
+
throw new Error(`${sourceLabel(path)}: cannot ${operation}: ${sourceLabel(errorMessage(cause))}`, { cause });
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
export const decodeText = (bytes, path, kind = 'embedded source') => {
|
|
18
|
+
try {
|
|
19
|
+
return new TextDecoder('utf-8', { fatal: true, ignoreBOM: true }).decode(bytes);
|
|
20
|
+
}
|
|
21
|
+
catch (cause) {
|
|
22
|
+
throw new TypeError(`${sourceLabel(path)}: invalid UTF-8 ${kind}`, { cause });
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content.js","sourceRoot":"","sources":["../../src/content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAiB,EAAU,EAAE,CACvD,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AAE/D,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAU,EAAE,CAClD,0CAA0C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,8BAA8B,EAAE,IAAI,CAAC,EAAE,CAClE,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AAEtE,kFAAkF;AAClF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAI,IAAY,EAAE,SAAiB,EAAE,IAAa,EAAK,EAAE;IACtF,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;IAC/B,IAAI,CAAC;QAAC,OAAO,IAAI,EAAE,CAAA;IAAC,CAAC;IACrB,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,YAAY,SAAS,KAAK,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;IAC9G,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAiB,EAAE,IAAY,EAAE,IAAI,GAAG,iBAAiB,EAAU,EAAE;IAC9F,IAAI,CAAC;QACH,OAAO,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,WAAW,CAAC,IAAI,CAAC,mBAAmB,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;IAC/E,CAAC;AACH,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAE5C,mEAAmE;AACnE,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAE5C,mEAAmE;AACnE,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,MAAM,EAW/C,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,KAAK,EAAE,OAAO,SAAS,MAAM,EAAE,EAAE,cAAU,KAAG,SAAS,GAAG,MA0C3F,CAAA"}
|
|
@@ -12,8 +12,15 @@
|
|
|
12
12
|
import { emitClaim } from '@cavelang/canonical';
|
|
13
13
|
/** Tokens worth searching for, derived from a file path or URL. */
|
|
14
14
|
export const pathTokens = (path) => {
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
let searchable = path;
|
|
16
|
+
if (/^https?:\/\//i.test(path)) {
|
|
17
|
+
try {
|
|
18
|
+
searchable = decodeURIComponent(path);
|
|
19
|
+
}
|
|
20
|
+
catch { /* Keep malformed escapes literal. */ }
|
|
21
|
+
}
|
|
22
|
+
const parts = searchable
|
|
23
|
+
.split(/[/\\?#&=\0]/)
|
|
17
24
|
.flatMap(segment => segment.split('.'))
|
|
18
25
|
.filter(token => token.length >= 3 &&
|
|
19
26
|
!/^(src|test|index|json|md|ts|js|tsx|jsx|txt|yaml|yml|https?:|www|com|net|org|html|htm)$/.test(token));
|
|
@@ -24,7 +31,10 @@ export const pathTokens = (path) => {
|
|
|
24
31
|
* `limit` claim lines; `undefined` for an empty store.
|
|
25
32
|
*/
|
|
26
33
|
export const contextFor = (store, paths, limit = 40) => {
|
|
27
|
-
|
|
34
|
+
if (!Number.isSafeInteger(limit) || limit < 0) {
|
|
35
|
+
throw new TypeError('context limit must be a non-negative safe integer');
|
|
36
|
+
}
|
|
37
|
+
const current = store.currentBeliefs().filter(row => row.conf > 0);
|
|
28
38
|
if (current.length === 0) {
|
|
29
39
|
return undefined;
|
|
30
40
|
}
|
|
@@ -40,19 +50,27 @@ export const contextFor = (store, paths, limit = 40) => {
|
|
|
40
50
|
.slice(0, 15)
|
|
41
51
|
.map(([entity, count]) => `${entity} (${count})`);
|
|
42
52
|
const related = new Map();
|
|
43
|
-
|
|
44
|
-
|
|
53
|
+
const currentIds = new Set(current.map(row => row.id));
|
|
54
|
+
for (const token of new Set(paths.flatMap(pathTokens))) {
|
|
55
|
+
if (related.size >= limit)
|
|
56
|
+
break;
|
|
57
|
+
for (const row of store.search(token, { limit: 5, currentOnly: true })) {
|
|
58
|
+
if (!currentIds.has(row.id))
|
|
59
|
+
continue;
|
|
45
60
|
if (related.size >= limit) {
|
|
46
61
|
break;
|
|
47
62
|
}
|
|
48
|
-
|
|
63
|
+
const claim = store.toClaim(row);
|
|
64
|
+
related.set(row.claim_key, emitClaim({ ...claim,
|
|
65
|
+
...claim.comment === undefined ? {} : { comment: claim.comment.replace(/\r\n|\r/g, '\n') }
|
|
66
|
+
}));
|
|
49
67
|
}
|
|
50
68
|
}
|
|
51
69
|
return [
|
|
52
70
|
`The database currently holds ${current.length} current belief(s).`,
|
|
53
71
|
`Established entities (use these names, do not invent variants): ${topEntities.join(', ')}`,
|
|
54
72
|
...related.size > 0 ?
|
|
55
|
-
['Existing claims related to this batch:', ...[...related.values()].map(line => ` ${line}`)] :
|
|
73
|
+
['Existing claims related to this batch:', ...[...related.values()].map(claim => claim.split('\n').map(line => ` ${line}`).join('\n'))] :
|
|
56
74
|
[]
|
|
57
75
|
].join('\n');
|
|
58
76
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAG/C,mEAAmE;AACnE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAY,EAAE;IACnD,MAAM,KAAK,GAAG,
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAG/C,mEAAmE;AACnE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAY,EAAE;IACnD,IAAI,UAAU,GAAG,IAAI,CAAA;IACrB,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC;YAAC,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,qCAAqC,CAAC,CAAC;IAC/F,CAAC;IACD,MAAM,KAAK,GAAG,UAAU;SACrB,KAAK,CAAC,aAAa,CAAC;SACpB,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SACtC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC;QAChC,CAAC,wFAAwF,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IAC1G,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;AAC5B,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAY,EAAE,KAAwB,EAAE,KAAK,GAAG,EAAE,EAAsB,EAAE;IACnG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,SAAS,CAAC,mDAAmD,CAAC,CAAA;IAC1E,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA;IAClE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAA;IACxC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAC3D,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAC3D,CAAC;IACH,CAAC;IACD,MAAM,WAAW,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;SACtC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3B,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,KAAK,KAAK,GAAG,CAAC,CAAA;IACnD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAA;IACzC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IACtD,KAAK,MAAM,KAAK,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACvD,IAAI,OAAO,CAAC,IAAI,IAAI,KAAK;YAAE,MAAK;QAChC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACvE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,SAAQ;YACrC,IAAI,OAAO,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC;gBAC1B,MAAK;YACP,CAAC;YACD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAChC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,GAAG,KAAK;gBAC7C,GAAG,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE;aAC3F,CAAC,CAAC,CAAA;QACL,CAAC;IACH,CAAC;IACD,OAAO;QACL,gCAAgC,OAAO,CAAC,MAAM,qBAAqB;QACnE,mEAAmE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAC3F,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YACnB,CAAC,wCAAwC,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAC9E,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,EAAE;KACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-message.d.ts","sourceRoot":"","sources":["../../src/error-message.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,eAAO,MAAM,YAAY,GAAI,OAAO,OAAO,KAAG,MAM7C,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Diagnostic formatting must preserve batch and cleanup failures. */
|
|
2
|
+
export const errorMessage = (value) => {
|
|
3
|
+
try {
|
|
4
|
+
return value instanceof Error ? String(value.message) : String(value);
|
|
5
|
+
}
|
|
6
|
+
catch {
|
|
7
|
+
return '[unprintable thrown value]';
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=error-message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-message.js","sourceRoot":"","sources":["../../src/error-message.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAc,EAAU,EAAE;IACrD,IAAI,CAAC;QACH,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,4BAA4B,CAAA;IACrC,CAAC;AACH,CAAC,CAAA"}
|
|
@@ -1,13 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* File selection for ingestion: glob expansion, batching, and the
|
|
3
|
-
* incremental-skip bookkeeping.
|
|
4
|
-
*
|
|
5
|
-
* Ingestion provenance is recorded as ordinary CAVE claims —
|
|
6
|
-
* `<path> HAS ingest-digest: <sha256/12> @src:cave-ingest` — so "which
|
|
7
|
-
* files are already ingested at which content version" lives in the same
|
|
8
|
-
* append-only store as the knowledge itself, and re-running `cave ingest`
|
|
9
|
-
* over a monorepo only processes files whose content changed.
|
|
10
|
-
*/
|
|
11
1
|
import type { Store } from '@cavelang/store';
|
|
12
2
|
/** Digest attribute name used in provenance claims. */
|
|
13
3
|
export declare const digestAttribute = "ingest-digest";
|
|
@@ -20,7 +10,7 @@ export declare const digestOf: (content: string) => string;
|
|
|
20
10
|
export type Selected = {
|
|
21
11
|
readonly path: string;
|
|
22
12
|
readonly digest: string;
|
|
23
|
-
/**
|
|
13
|
+
/** Selected content for URL sources and embedded local files. */
|
|
24
14
|
readonly content?: string;
|
|
25
15
|
};
|
|
26
16
|
export type Selection = {
|
|
@@ -33,11 +23,13 @@ export declare const isIngested: (store: Store, path: string, digest: string) =>
|
|
|
33
23
|
/**
|
|
34
24
|
* Reads and digests candidate files (paths relative to `cwd`), skipping
|
|
35
25
|
* the ones whose current `ingest-digest` belief already matches (pass
|
|
36
|
-
* `force` to re-ingest all).
|
|
26
|
+
* `force` to re-ingest all). With `embed`, retain the same text for prompts
|
|
27
|
+
* so later file changes cannot separate source content from its digest.
|
|
37
28
|
*/
|
|
38
29
|
export declare const select: (store: Store, paths: readonly string[], options?: {
|
|
39
30
|
force?: boolean;
|
|
40
31
|
cwd?: string;
|
|
32
|
+
embed?: boolean;
|
|
41
33
|
}) => Selection;
|
|
42
34
|
/** Records provenance claims for successfully ingested files. */
|
|
43
35
|
export declare const recordDigests: (store: Store, files: readonly Selected[]) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/files.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/files.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAG5C,uDAAuD;AACvD,eAAO,MAAM,eAAe,kBAAkB,CAAA;AAE9C,yCAAyC;AACzC,eAAO,MAAM,iBAAiB,oBAAoB,CAAA;AAmClD,wGAAwG;AACxG,eAAO,MAAM,MAAM,GAAI,UAAU,SAAS,MAAM,EAAE,EAAE,MAAK,MAAsB,KAAG,MAAM,EAMvF,CAAA;AAED,2DAA2D;AAC3D,eAAO,MAAM,QAAQ,GAAI,SAAS,MAAM,KAAG,MACsB,CAAA;AAMjE,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,iEAAiE;IACjE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAA;IACnC,gEAAgE;IAChE,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CACpC,CAAA;AAED,4EAA4E;AAC5E,eAAO,MAAM,UAAU,GAAI,OAAO,KAAK,EAAE,MAAM,MAAM,EAAE,QAAQ,MAAM,KAAG,OAGvE,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,OAAO,SAAS,MAAM,EAAE,EACxB,UAAS;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,KAC/D,SAkBF,CAAA;AAED,iEAAiE;AACjE,eAAO,MAAM,aAAa,GAAI,OAAO,KAAK,EAAE,OAAO,SAAS,QAAQ,EAAE,KAAG,IAkBxE,CAAA;AAED,6DAA6D;AAC7D,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,OAAO,SAAS,CAAC,EAAE,EAAE,MAAM,MAAM,KAAG,CAAC,EAAE,EAS/D,CAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { booleanOption, sourceList, sourcePath } from "./options.js";
|
|
1
2
|
/**
|
|
2
3
|
* File selection for ingestion: glob expansion, batching, and the
|
|
3
4
|
* incremental-skip bookkeeping.
|
|
@@ -12,6 +13,7 @@ import { createHash } from 'node:crypto';
|
|
|
12
13
|
import { globSync, readFileSync, statSync } from 'node:fs';
|
|
13
14
|
import { resolve as resolvePath } from 'node:path';
|
|
14
15
|
import { Key, Claim, Value } from '@cavelang/core';
|
|
16
|
+
import { decodeText, digestBytes, withSourceError } from "./content.js";
|
|
15
17
|
/** Digest attribute name used in provenance claims. */
|
|
16
18
|
export const digestAttribute = 'ingest-digest';
|
|
17
19
|
/** Context marking provenance claims. */
|
|
@@ -22,6 +24,9 @@ export const provenanceContext = 'src:cave-ingest';
|
|
|
22
24
|
* code literal so their exact spelling round-trips through CAVE text.
|
|
23
25
|
*/
|
|
24
26
|
const provenanceSubject = (path) => {
|
|
27
|
+
// Newlines cannot appear inside a single-line provenance claim, even in literals.
|
|
28
|
+
if (path.includes('\n'))
|
|
29
|
+
return Claim.code(`percent-encoded:${encodeURIComponent(path)}`);
|
|
25
30
|
const isEntityAtom = path !== '' &&
|
|
26
31
|
!/[\s"`;]/u.test(path) &&
|
|
27
32
|
!/^(?:[@#]|\+\/-|!$|\(\d+(?:\.\d+)?σ\)$)/u.test(path);
|
|
@@ -46,9 +51,10 @@ const provenanceClaim = (path, digest) => Claim.of({
|
|
|
46
51
|
});
|
|
47
52
|
/** @returns matching regular-file paths — globs expanded, directories dropped, deduplicated, sorted. */
|
|
48
53
|
export const expand = (patterns, cwd = process.cwd()) => {
|
|
49
|
-
|
|
54
|
+
sourcePath(cwd, 'cwd');
|
|
55
|
+
const matched = sourceList(patterns, 'patterns').flatMap(pattern => withSourceError(pattern, 'expand pattern', () => globSync(pattern, { cwd })));
|
|
50
56
|
return [...new Set(matched)]
|
|
51
|
-
.filter(path => statSync(resolvePath(cwd, path)).isFile())
|
|
57
|
+
.filter(path => withSourceError(path, 'inspect source', () => statSync(resolvePath(cwd, path)).isFile()))
|
|
52
58
|
.sort();
|
|
53
59
|
};
|
|
54
60
|
/** @returns first 12 hex chars of the content's sha256. */
|
|
@@ -63,19 +69,25 @@ export const isIngested = (store, path, digest) => {
|
|
|
63
69
|
/**
|
|
64
70
|
* Reads and digests candidate files (paths relative to `cwd`), skipping
|
|
65
71
|
* the ones whose current `ingest-digest` belief already matches (pass
|
|
66
|
-
* `force` to re-ingest all).
|
|
72
|
+
* `force` to re-ingest all). With `embed`, retain the same text for prompts
|
|
73
|
+
* so later file changes cannot separate source content from its digest.
|
|
67
74
|
*/
|
|
68
75
|
export const select = (store, paths, options = {}) => {
|
|
76
|
+
const force = booleanOption(options.force, 'force');
|
|
77
|
+
const embed = booleanOption(options.embed, 'embed');
|
|
69
78
|
const files = [];
|
|
70
79
|
const skipped = [];
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
80
|
+
const suppliedCwd = options.cwd;
|
|
81
|
+
const cwd = suppliedCwd === undefined ? process.cwd() : sourcePath(suppliedCwd, 'cwd');
|
|
82
|
+
for (const path of sourceList(paths, 'paths')) {
|
|
83
|
+
const bytes = withSourceError(path, 'read source', () => readFileSync(resolvePath(cwd, path)));
|
|
84
|
+
const digest = digestBytes(bytes);
|
|
85
|
+
const content = embed ? decodeText(bytes, path) : undefined;
|
|
86
|
+
if (!force && isIngested(store, path, digest)) {
|
|
75
87
|
skipped.push(path);
|
|
76
88
|
}
|
|
77
89
|
else {
|
|
78
|
-
files.push({ path, digest });
|
|
90
|
+
files.push({ path, digest, ...content === undefined ? {} : { content } });
|
|
79
91
|
}
|
|
80
92
|
}
|
|
81
93
|
return { files, skipped };
|
|
@@ -103,8 +115,8 @@ export const recordDigests = (store, files) => {
|
|
|
103
115
|
};
|
|
104
116
|
/** @returns `files` split into batches of at most `size`. */
|
|
105
117
|
export const batch = (files, size) => {
|
|
106
|
-
if (!(size
|
|
107
|
-
throw new Error(`batch size must be
|
|
118
|
+
if (!Number.isSafeInteger(size) || size < 1) {
|
|
119
|
+
throw new Error(`batch size must be a positive safe integer, got ${size}`);
|
|
108
120
|
}
|
|
109
121
|
const batches = [];
|
|
110
122
|
for (let at = 0; at < files.length; at += size) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/files.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/files.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkDH,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAA;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAA;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAC9B,CAAA;AAED,eAAO,MAAM,SAAS,GAAU,MAAM,SAAS,MAAM,EAAE,EAAE,UAAS,UAAe,KAAG,OAAO,CAAC,MAAM,CA0KjG,CAAA"}
|
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
* `run.ts`. See the package README for agent recipes (Claude Code,
|
|
4
4
|
* Copilot CLI, SDK scripts).
|
|
5
5
|
*/
|
|
6
|
+
import { errorMessage } from "./error-message.js";
|
|
7
|
+
import { sourceLabel } from "./content.js";
|
|
8
|
+
import { agentTimeoutMs } from "./timeout.js";
|
|
6
9
|
import { parseArgs } from 'node:util';
|
|
7
10
|
import { Registry } from '@cavelang/canonical';
|
|
8
11
|
import { LocateError, defaultDbPath, kindOf, open, openAt } from '@cavelang/store';
|
|
@@ -32,6 +35,7 @@ Options:
|
|
|
32
35
|
--lenient commit accepted batches and continue after failures;
|
|
33
36
|
default strict mode stages and commits the whole run
|
|
34
37
|
--json print the complete machine-readable result manifest
|
|
38
|
+
(execution only; cannot combine with --plan/--dry-run)
|
|
35
39
|
--timeout <seconds> per-batch agent timeout (default 600)
|
|
36
40
|
--plan print batches as NDJSON and exit (drive with an SDK)
|
|
37
41
|
--dry-run print the plan and the first prompt, run nothing
|
|
@@ -47,7 +51,8 @@ Examples:
|
|
|
47
51
|
export const runIngest = async (argv, context = {}) => {
|
|
48
52
|
const stdout = context.stdout ?? process.stdout;
|
|
49
53
|
const stderr = context.stderr ?? process.stderr;
|
|
50
|
-
context.signal
|
|
54
|
+
const signal = context.signal;
|
|
55
|
+
signal?.throwIfAborted();
|
|
51
56
|
const { values, positionals } = parseArgs({
|
|
52
57
|
args: [...argv],
|
|
53
58
|
options: {
|
|
@@ -78,19 +83,28 @@ export const runIngest = async (argv, context = {}) => {
|
|
|
78
83
|
}
|
|
79
84
|
const db = values.db ?? defaultDbPath();
|
|
80
85
|
const planning = values.plan === true || values['dry-run'] === true;
|
|
86
|
+
if (planning && values.json === true) {
|
|
87
|
+
stderr.write('cave ingest: --json cannot be combined with --plan or --dry-run; use --plan for machine-readable planning\n');
|
|
88
|
+
return 1;
|
|
89
|
+
}
|
|
81
90
|
if (values.agent === undefined && !planning) {
|
|
82
91
|
stderr.write('cave ingest: --agent is required (or use --plan / --dry-run)\n');
|
|
83
92
|
return 1;
|
|
84
93
|
}
|
|
85
94
|
const batchSize = values.batch === undefined ? undefined : Number(values.batch);
|
|
86
|
-
if (batchSize !== undefined && (!Number.
|
|
87
|
-
stderr.write(`cave ingest: --batch must be a positive integer, got '${values.batch}'\n`);
|
|
95
|
+
if (batchSize !== undefined && (!Number.isSafeInteger(batchSize) || batchSize < 1)) {
|
|
96
|
+
stderr.write(`cave ingest: --batch must be a positive safe integer, got '${values.batch}'\n`);
|
|
88
97
|
return 1;
|
|
89
98
|
}
|
|
90
99
|
const timeoutSeconds = values.timeout === undefined ? undefined : Number(values.timeout);
|
|
91
|
-
if (timeoutSeconds !== undefined
|
|
92
|
-
|
|
93
|
-
|
|
100
|
+
if (timeoutSeconds !== undefined) {
|
|
101
|
+
try {
|
|
102
|
+
agentTimeoutMs(timeoutSeconds);
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
stderr.write(`cave ingest: --${errorMessage(error)}, got '${values.timeout}'\n`);
|
|
106
|
+
return 1;
|
|
107
|
+
}
|
|
94
108
|
}
|
|
95
109
|
const noPrelude = values['no-prelude'] === true;
|
|
96
110
|
const registry = noPrelude ? { registry: Registry.empty } : {};
|
|
@@ -110,7 +124,7 @@ export const runIngest = async (argv, context = {}) => {
|
|
|
110
124
|
stderr.write(`cave ingest: ${error.message}\n`);
|
|
111
125
|
return 1;
|
|
112
126
|
}
|
|
113
|
-
|
|
127
|
+
const execute = async () => {
|
|
114
128
|
const options = {
|
|
115
129
|
db,
|
|
116
130
|
patterns: positionals,
|
|
@@ -124,12 +138,12 @@ export const runIngest = async (argv, context = {}) => {
|
|
|
124
138
|
force: values.force === true,
|
|
125
139
|
policy: values.lenient === true ? 'lenient' : 'strict',
|
|
126
140
|
noPrelude,
|
|
127
|
-
...
|
|
141
|
+
...signal === undefined ? {} : { signal }
|
|
128
142
|
};
|
|
129
143
|
if (planning) {
|
|
130
144
|
const { selection, batches } = await selectBatches(store, options);
|
|
131
145
|
if (values.plan === true) {
|
|
132
|
-
|
|
146
|
+
let mcpConfig;
|
|
133
147
|
for (const failure of selection.failures) {
|
|
134
148
|
stdout.write(`${JSON.stringify({
|
|
135
149
|
source: failure.path,
|
|
@@ -142,6 +156,7 @@ export const runIngest = async (argv, context = {}) => {
|
|
|
142
156
|
}
|
|
143
157
|
for (const files of batches) {
|
|
144
158
|
const prompt = promptFor(store, files, options);
|
|
159
|
+
mcpConfig ??= writeMcpConfig(db, { noPrelude });
|
|
145
160
|
stdout.write(`${JSON.stringify({ files: files.map(file => file.path), prompt, mcpConfig, db })}\n`);
|
|
146
161
|
}
|
|
147
162
|
return 0;
|
|
@@ -149,15 +164,15 @@ export const runIngest = async (argv, context = {}) => {
|
|
|
149
164
|
stdout.write([
|
|
150
165
|
`ingest plan: ${selection.files.length} source(s) in ${batches.length} batch(es), ` +
|
|
151
166
|
`${selection.skipped.length} skipped (unchanged), ${selection.failures.length} rejected`,
|
|
152
|
-
...selection.skipped.map(path => ` skip ${path}`),
|
|
153
|
-
...selection.failures.map(failure => ` reject ${failure.path}: ${failure.kind}, ${failure.retryable ? 'retryable' : 'permanent'} — ${failure.message}`),
|
|
154
|
-
...batches.map((files, index) => ` batch ${index + 1}: ${files.map(file => file.path).join(', ')}`),
|
|
167
|
+
...selection.skipped.map(path => ` skip ${sourceLabel(path)}`),
|
|
168
|
+
...selection.failures.map(failure => ` reject ${sourceLabel(failure.path)}: ${failure.kind}, ${failure.retryable ? 'retryable' : 'permanent'} — ${failure.message}`),
|
|
169
|
+
...batches.map((files, index) => ` batch ${index + 1}: ${files.map(file => sourceLabel(file.path)).join(', ')}`),
|
|
155
170
|
...batches.length > 0 ? ['', '--- prompt for batch 1 ---', promptFor(store, batches[0], options)] : []
|
|
156
171
|
].join('\n') + '\n');
|
|
157
172
|
return 0;
|
|
158
173
|
}
|
|
159
174
|
const report = await run(options);
|
|
160
|
-
|
|
175
|
+
signal?.throwIfAborted();
|
|
161
176
|
const failed = report.failed > 0 || report.sources.some(source => source.status === 'not-run');
|
|
162
177
|
if (values.json === true) {
|
|
163
178
|
stdout.write(`${JSON.stringify(report, undefined, 2)}\n`);
|
|
@@ -167,6 +182,9 @@ export const runIngest = async (argv, context = {}) => {
|
|
|
167
182
|
`ingest (${report.policy}): ${report.matched} source(s) matched, ${report.skipped.length} skipped (unchanged), ` +
|
|
168
183
|
`${report.batches.length} batch(es), ${report.applied ? 'applied' : 'not applied'}`
|
|
169
184
|
];
|
|
185
|
+
if (report.policy === 'strict' && !report.applied) {
|
|
186
|
+
lines.push('strict run discarded: no staged claims or source digests were applied');
|
|
187
|
+
}
|
|
170
188
|
report.batches.forEach((batch, index) => {
|
|
171
189
|
const status = batch.ok ? `+${batch.added} claim(s)` : `FAILED${batch.note === undefined ? '' : ` — ${batch.note}`}`;
|
|
172
190
|
lines.push(`batch ${index + 1}/${report.batches.length} (${batch.files.length} file(s)): ${status}`);
|
|
@@ -186,14 +204,26 @@ export const runIngest = async (argv, context = {}) => {
|
|
|
186
204
|
(source.httpStatus === undefined ? '' : ` HTTP ${source.httpStatus}`),
|
|
187
205
|
...source.problems
|
|
188
206
|
].filter((value) => value !== undefined).join('; ');
|
|
189
|
-
lines.push(`source ${source.status}: ${source.path}${detail === '' ? '' : ` — ${detail}`}`);
|
|
207
|
+
lines.push(`source ${source.status}: ${sourceLabel(source.path)}${detail === '' ? '' : ` — ${detail}`}`);
|
|
190
208
|
}
|
|
191
209
|
lines.push(`done: +${report.added} claim(s)${report.failed > 0 ? `, ${report.failed} failed outcome(s)` : ''}`);
|
|
192
210
|
stdout.write(`${lines.join('\n')}\n`);
|
|
193
211
|
return failed ? 1 : 0;
|
|
212
|
+
};
|
|
213
|
+
let code;
|
|
214
|
+
try {
|
|
215
|
+
code = await execute();
|
|
194
216
|
}
|
|
195
|
-
|
|
196
|
-
|
|
217
|
+
catch (error) {
|
|
218
|
+
try {
|
|
219
|
+
store.close();
|
|
220
|
+
}
|
|
221
|
+
catch (closeError) {
|
|
222
|
+
throw new AggregateError([error, closeError], `${errorMessage(error)}; store close also failed: ${errorMessage(closeError)}`, { cause: error });
|
|
223
|
+
}
|
|
224
|
+
throw error;
|
|
197
225
|
}
|
|
226
|
+
store.close();
|
|
227
|
+
return code;
|
|
198
228
|
};
|
|
199
229
|
//# sourceMappingURL=main.js.map
|