@younndai/lyt 0.9.3 → 0.9.5
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 +6 -0
- package/dist/automator-bodies/arc-builder.js +0 -18
- package/dist/automator-bodies/arc-builder.js.map +1 -1
- package/dist/automator-bodies/index.js +0 -18
- package/dist/automator-bodies/index.js.map +1 -1
- package/dist/automator-bodies/lane-builder.js +0 -19
- package/dist/automator-bodies/lane-builder.js.map +1 -1
- package/dist/automator-bodies/metadata-filler.js +0 -49
- package/dist/automator-bodies/metadata-filler.js.map +1 -1
- package/dist/automator-run.js +0 -50
- package/dist/automator-run.js.map +1 -1
- package/dist/bench/graded-corpus.js +0 -25
- package/dist/bench/graded-corpus.js.map +1 -1
- package/dist/bench/invariant-corpus.js +0 -33
- package/dist/bench/invariant-corpus.js.map +1 -1
- package/dist/bench/ir-metrics.js +0 -17
- package/dist/bench/ir-metrics.js.map +1 -1
- package/dist/bench/latency-bench.js +0 -23
- package/dist/bench/latency-bench.js.map +1 -1
- package/dist/bench/latency-corpus.js +2 -20
- package/dist/bench/latency-corpus.js.map +1 -1
- package/dist/bench/pod-harness.js +0 -48
- package/dist/bench/pod-harness.js.map +1 -1
- package/dist/bench/run-bench.js +0 -23
- package/dist/bench/run-bench.js.map +1 -1
- package/dist/cli-automator-run.js +0 -31
- package/dist/cli-automator-run.js.map +1 -1
- package/dist/cli.js +0 -109
- package/dist/cli.js.map +1 -1
- package/dist/commands/bench.js +0 -27
- package/dist/commands/bench.js.map +1 -1
- package/dist/commands/capture.js +0 -83
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/init.js +1 -233
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/primer.js +0 -44
- package/dist/commands/primer.js.map +1 -1
- package/dist/commands/reindex.js +0 -33
- package/dist/commands/reindex.js.map +1 -1
- package/dist/commands/search.js +0 -71
- package/dist/commands/search.js.map +1 -1
- package/dist/flows/heal.js +0 -46
- package/dist/flows/heal.js.map +1 -1
- package/dist/flows/init-bootstrap.js +0 -208
- package/dist/flows/init-bootstrap.js.map +1 -1
- package/dist/index.js +0 -18
- package/dist/index.js.map +1 -1
- package/package.json +7 -7
|
@@ -1,30 +1,7 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2026 MARLINK TRADING SRL (YounndAI)
|
|
3
|
-
*
|
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
* you may not use this file except in compliance with the License.
|
|
6
|
-
* You may obtain a copy of the License at
|
|
7
|
-
*
|
|
8
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
*
|
|
10
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
* See the License for the specific language governing permissions and
|
|
14
|
-
* limitations under the License.
|
|
15
|
-
*/
|
|
16
|
-
// Lane V Workstream 2 — `lyt bench --latency` probe.
|
|
17
|
-
//
|
|
18
|
-
// Stands up a temp pod, seeds a synthetic corpus of `count` figments into one
|
|
19
|
-
// vault, times the all-tier reindex, then runs a fixed set of queries (repeated)
|
|
20
|
-
// and reports query-time p50/p95. The latency axis the quality self-test can't
|
|
21
|
-
// give (a review finding). On-demand — default count is modest; pass a larger --count for a
|
|
22
|
-
// federation-scale reading before any scale claim.
|
|
23
1
|
import { generateLatencyCorpus, LATENCY_PROBE_TERMS } from "./latency-corpus.js";
|
|
24
2
|
import { setupBenchPod } from "./pod-harness.js";
|
|
25
3
|
export const DEFAULT_LATENCY_COUNT = 1000;
|
|
26
4
|
const REPEATS = 3;
|
|
27
|
-
// Nearest-rank percentile over an ascending-sorted array.
|
|
28
5
|
function percentile(sortedAsc, p) {
|
|
29
6
|
if (sortedAsc.length === 0)
|
|
30
7
|
return 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"latency-bench.js","sourceRoot":"","sources":["../../src/bench/latency-bench.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"latency-bench.js","sourceRoot":"","sources":["../../src/bench/latency-bench.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,3 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2026 MARLINK TRADING SRL (YounndAI)
|
|
3
|
-
*
|
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
* you may not use this file except in compliance with the License.
|
|
6
|
-
* You may obtain a copy of the License at
|
|
7
|
-
*
|
|
8
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
*
|
|
10
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
* See the License for the specific language governing permissions and
|
|
14
|
-
* limitations under the License.
|
|
15
|
-
*/
|
|
16
1
|
const TOPICS = [
|
|
17
2
|
"turso",
|
|
18
3
|
"libsql",
|
|
@@ -55,13 +40,11 @@ const NOUN = [
|
|
|
55
40
|
"review",
|
|
56
41
|
"digest",
|
|
57
42
|
];
|
|
58
|
-
// Fixed base instant — authored-time spread is deterministic per index.
|
|
59
43
|
const BASE_MS = Date.parse("2026-01-01T00:00:00.000Z");
|
|
60
44
|
const DAY_MS = 86_400_000;
|
|
61
45
|
function word(i, pool) {
|
|
62
46
|
return pool[i % pool.length] ?? pool[0];
|
|
63
47
|
}
|
|
64
|
-
// Small deterministic LCG so term frequency / body length vary without RNG.
|
|
65
48
|
function lcg(seed) {
|
|
66
49
|
return (seed * 1103515245 + 12345) & 0x7fffffff;
|
|
67
50
|
}
|
|
@@ -71,8 +54,8 @@ function makeNote(i) {
|
|
|
71
54
|
const tag = word(i * 3, TOPICS);
|
|
72
55
|
const created = new Date(BASE_MS + (i % 150) * DAY_MS).toISOString();
|
|
73
56
|
const r = lcg(i);
|
|
74
|
-
const reps = 1 + (r % 6);
|
|
75
|
-
const fillerLines = 2 + (lcg(r) % 8);
|
|
57
|
+
const reps = 1 + (r % 6);
|
|
58
|
+
const fillerLines = 2 + (lcg(r) % 8);
|
|
76
59
|
const frontmatter = [
|
|
77
60
|
`title: ${word(i, ADJ)} ${topic} ${word(i, NOUN)} ${String(i).padStart(5, "0")}`,
|
|
78
61
|
`created: ${created}`,
|
|
@@ -97,7 +80,6 @@ function makeNote(i) {
|
|
|
97
80
|
body: lines.join("\n\n"),
|
|
98
81
|
};
|
|
99
82
|
}
|
|
100
|
-
// Topic terms present in the corpus — used by the latency probe as queries.
|
|
101
83
|
export const LATENCY_PROBE_TERMS = TOPICS;
|
|
102
84
|
export function generateLatencyCorpus(count) {
|
|
103
85
|
const n = Math.max(1, Math.floor(count));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"latency-corpus.js","sourceRoot":"","sources":["../../src/bench/latency-corpus.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"latency-corpus.js","sourceRoot":"","sources":["../../src/bench/latency-corpus.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,47 +1,11 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2026 MARLINK TRADING SRL (YounndAI)
|
|
3
|
-
*
|
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
* you may not use this file except in compliance with the License.
|
|
6
|
-
* You may obtain a copy of the License at
|
|
7
|
-
*
|
|
8
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
*
|
|
10
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
* See the License for the specific language governing permissions and
|
|
14
|
-
* limitations under the License.
|
|
15
|
-
*/
|
|
16
|
-
// Lane V Workstream 2 — `lyt bench` temp-pod harness.
|
|
17
|
-
//
|
|
18
|
-
// Stands up a THROWAWAY pod under os.tmpdir (never the user's ~/lyt), seeds
|
|
19
|
-
// vaults + figments offline (federation self-heal disabled AND a synthetic
|
|
20
|
-
// identity pinned → no gh, no network, no interactive prompts), reindexes all
|
|
21
|
-
// content tiers, and runs the cascade. Productized from
|
|
22
|
-
// tools/lane-v/quality-probe.mjs (which only PROBED an already-built pod); this
|
|
23
|
-
// also BUILDS the pod, so the bench ships self-contained.
|
|
24
|
-
//
|
|
25
|
-
// Pod safety: LYT_HOME is repointed to a fresh mkdtemp dir for the harness'
|
|
26
|
-
// lifetime and restored on teardown. The dir is created by mkdtemp under
|
|
27
|
-
// os.tmpdir — it can never be ~/lyt — but we assert it (and reject anything
|
|
28
|
-
// under ~/lyt) anyway (defence-in-depth, mirroring quality-probe.mjs's guard).
|
|
29
1
|
import { mkdirSync, mkdtempSync, readdirSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
30
2
|
import { homedir, tmpdir } from "node:os";
|
|
31
3
|
import { dirname, join, resolve, sep } from "node:path";
|
|
32
4
|
import { initVaultFlow, rebuildVaultFlow, searchCascadeFlow, } from "@younndai/lyt-vault";
|
|
33
|
-
// Fixed clock threaded into reindex so temporal caches (keyword decay,
|
|
34
|
-
// recent-activity) are deterministic — the bench's metrics must not drift with
|
|
35
|
-
// wall-clock time.
|
|
36
5
|
export const BENCH_NOW_ISO = "2026-06-01T00:00:00.000Z";
|
|
37
6
|
const REAL_POD = resolve(homedir(), "lyt");
|
|
38
7
|
const BENCH_PREFIX = "lyt-bench-";
|
|
39
|
-
// Sweep leaked bench pods older than this (Windows libSQL handle lag can defeat
|
|
40
|
-
// the teardown rmSync). Age-gated so a concurrent run's live pod is never hit.
|
|
41
8
|
const STALE_POD_MS = 10 * 60_000;
|
|
42
|
-
// Best-effort reaper for bench pods a prior run failed to delete. Everything it
|
|
43
|
-
// touches is a mkdtemp dir named `lyt-bench-*` under os.tmpdir — junction-free,
|
|
44
|
-
// L0-safe. Age-gated + fully swallowed; never fails the bench.
|
|
45
9
|
function sweepStaleBenchPods(nowMs) {
|
|
46
10
|
let entries;
|
|
47
11
|
try {
|
|
@@ -60,7 +24,6 @@ function sweepStaleBenchPods(nowMs) {
|
|
|
60
24
|
rmSync(full, { recursive: true, force: true, maxRetries: 3, retryDelay: 200 });
|
|
61
25
|
}
|
|
62
26
|
catch {
|
|
63
|
-
// leave it; never fail on cleanup
|
|
64
27
|
}
|
|
65
28
|
}
|
|
66
29
|
}
|
|
@@ -74,11 +37,6 @@ export function setupBenchPod() {
|
|
|
74
37
|
const prevLytHome = process.env["LYT_HOME"];
|
|
75
38
|
const prevIdentity = process.env["LYT_IDENTITY_OVERRIDE"];
|
|
76
39
|
process.env["LYT_HOME"] = home;
|
|
77
|
-
// Pin a synthetic identity so vault scaffolding (initVault -> getIdentity)
|
|
78
|
-
// never spawns `gh auth status` / `gh api /user`. WITHOUT this the bench
|
|
79
|
-
// throws on any machine where gh is missing/unauthed (release review C1) — this
|
|
80
|
-
// is what makes it truly offline + safe to run anywhere. Mirrors how every
|
|
81
|
-
// init-touching test pins LYT_IDENTITY_OVERRIDE.
|
|
82
40
|
process.env["LYT_IDENTITY_OVERRIDE"] = "github:lyt-bench";
|
|
83
41
|
return {
|
|
84
42
|
home,
|
|
@@ -102,8 +60,6 @@ export function setupBenchPod() {
|
|
|
102
60
|
return searchCascadeFlow(args);
|
|
103
61
|
},
|
|
104
62
|
teardown() {
|
|
105
|
-
// Restore env FIRST, unconditionally — a cleanup failure must never leave
|
|
106
|
-
// LYT_HOME / LYT_IDENTITY_OVERRIDE dangling.
|
|
107
63
|
if (prevLytHome === undefined)
|
|
108
64
|
delete process.env["LYT_HOME"];
|
|
109
65
|
else
|
|
@@ -112,14 +68,10 @@ export function setupBenchPod() {
|
|
|
112
68
|
delete process.env["LYT_IDENTITY_OVERRIDE"];
|
|
113
69
|
else
|
|
114
70
|
process.env["LYT_IDENTITY_OVERRIDE"] = prevIdentity;
|
|
115
|
-
// `home` is a fresh mkdtemp dir under os.tmpdir — no junctions, L0-safe.
|
|
116
|
-
// Best-effort: Windows libSQL handle lag can still defeat this; whatever is
|
|
117
|
-
// left is reaped by the next run's sweepStaleBenchPods.
|
|
118
71
|
try {
|
|
119
72
|
rmSync(home, { recursive: true, force: true, maxRetries: 5, retryDelay: 300 });
|
|
120
73
|
}
|
|
121
74
|
catch {
|
|
122
|
-
// leave for the next run's sweep
|
|
123
75
|
}
|
|
124
76
|
},
|
|
125
77
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pod-harness.js","sourceRoot":"","sources":["../../src/bench/pod-harness.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pod-harness.js","sourceRoot":"","sources":["../../src/bench/pod-harness.ts"],"names":[],"mappings":"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"}
|
package/dist/bench/run-bench.js
CHANGED
|
@@ -1,26 +1,3 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2026 MARLINK TRADING SRL (YounndAI)
|
|
3
|
-
*
|
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
* you may not use this file except in compliance with the License.
|
|
6
|
-
* You may obtain a copy of the License at
|
|
7
|
-
*
|
|
8
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
*
|
|
10
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
* See the License for the specific language governing permissions and
|
|
14
|
-
* limitations under the License.
|
|
15
|
-
*/
|
|
16
|
-
// Lane V Workstream 2 — `lyt bench` orchestrator.
|
|
17
|
-
//
|
|
18
|
-
// Runs two phases, each in its OWN isolated temp pod (so the invariant corpus
|
|
19
|
-
// and the graded corpus never cross-contaminate each other's queries):
|
|
20
|
-
// D-core — pass/fail retrieval invariants (the regression canary)
|
|
21
|
-
// E-lite — a planted-relevance graded score (nDCG/recall/MRR/P@1 + cleanliness)
|
|
22
|
-
// Metrics-only output — no user content, by construction (synthetic corpora).
|
|
23
|
-
// `--quick` runs only the D-core invariants (the every-CI fast path).
|
|
24
1
|
import { gradedCorpus, GRADED_QUERIES } from "./graded-corpus.js";
|
|
25
2
|
import { INVARIANT_CORPUS, runInvariants } from "./invariant-corpus.js";
|
|
26
3
|
import { aggregateGraded, scoreGradedQuery, } from "./ir-metrics.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-bench.js","sourceRoot":"","sources":["../../src/bench/run-bench.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run-bench.js","sourceRoot":"","sources":["../../src/bench/run-bench.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,35 +1,6 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2026 MARLINK TRADING SRL (YounndAI)
|
|
3
|
-
*
|
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
* you may not use this file except in compliance with the License.
|
|
6
|
-
* You may obtain a copy of the License at
|
|
7
|
-
*
|
|
8
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
*
|
|
10
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
* See the License for the specific language governing permissions and
|
|
14
|
-
* limitations under the License.
|
|
15
|
-
*/
|
|
16
|
-
// `lyt automator run <rid|name>` subcommand (block-B Commit 7).
|
|
17
|
-
//
|
|
18
|
-
// Lives in the meta @younndai/lyt CLI because runFiveStep pulls in lyt-runner
|
|
19
|
-
// and lyt-runner depends on lyt-vault — registering `run` inside lyt-vault
|
|
20
|
-
// would create a circular dep. Mirrors the lyt-mesh subcommand-attach pattern
|
|
21
|
-
// at packages/lyt/src/cli.ts.
|
|
22
|
-
//
|
|
23
|
-
// Per Lock 0.3 (SAI-compatible — brief §Conventions L191), --json emits a
|
|
24
|
-
// deterministic JSON envelope so SAIs / Claude Code / Codex can consume the
|
|
25
|
-
// invocation result without screen-scraping.
|
|
26
1
|
import { Command } from "commander";
|
|
27
2
|
import { uuid7BytesToDashedString } from "@younndai/lyt-vault";
|
|
28
3
|
import { runAutomator } from "./automator-run.js";
|
|
29
|
-
// commander stores `--no-push` as push:false (negated-flag convention); the
|
|
30
|
-
// noPush key is only set by test harnesses invoking the action directly.
|
|
31
|
-
// Track C Wave 3 F9: reading only opts.noPush dropped the CLI flag entirely
|
|
32
|
-
// and the run pushed. Exported so the regression test locks the mapping.
|
|
33
4
|
export function resolveNoPushOpt(opts) {
|
|
34
5
|
return opts.push === false || opts.noPush === true;
|
|
35
6
|
}
|
|
@@ -65,11 +36,9 @@ export function buildAutomatorRunSubcommand() {
|
|
|
65
36
|
body: result.body ?? null,
|
|
66
37
|
};
|
|
67
38
|
if (opts.json === true) {
|
|
68
|
-
// eslint-disable-next-line no-console
|
|
69
39
|
console.log(JSON.stringify(payload, null, 2));
|
|
70
40
|
}
|
|
71
41
|
else {
|
|
72
|
-
// eslint-disable-next-line no-console
|
|
73
42
|
console.log(`${result.ok ? "✓" : "✗"} automator:${payload.automator} ` +
|
|
74
43
|
`→ status=${payload.status}${payload.error_summary !== null ? ` (${payload.error_summary})` : ""}`);
|
|
75
44
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-automator-run.js","sourceRoot":"","sources":["../src/cli-automator-run.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli-automator-run.js","sourceRoot":"","sources":["../src/cli-automator-run.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAgBlD,MAAM,UAAU,gBAAgB,CAAC,IAA0C;IACzE,OAAO,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,2BAA2B;IACzC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC;SACtB,WAAW,CACV,gGAAgG,CACjG;SACA,QAAQ,CACP,aAAa,EACb,+EAA+E,CAChF;SACA,MAAM,CACL,gBAAgB,EAChB,4EAA4E,CAC7E;SACA,MAAM,CACL,WAAW,EACX,gFAAgF,CACjF;SACA,MAAM,CAAC,WAAW,EAAE,iEAAiE,CAAC;SACtF,MAAM,CAAC,QAAQ,EAAE,4CAA4C,CAAC;SAC9D,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,IAAyB,EAAE,EAAE;QAC7D,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;YAChC,SAAS;YACT,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG;YACd,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa;YACpC,iBAAiB,EAAE,MAAM,CAAC,gBAAgB;YAC1C,UAAU,EAAE,wBAAwB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACpE,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS;gBAC3B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS;aAC5B;YACD,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,aAAa,EAAE,MAAM,CAAC,YAAY;YAClC,OAAO,EAAE,IAAI,CAAC,MAAM,KAAK,IAAI;YAC7B,OAAO,EAAE,MAAM;YACf,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI;SAC1B,CAAC;QAEF,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAEvB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YAEN,OAAO,CAAC,GAAG,CACT,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,cAAc,OAAO,CAAC,SAAS,GAAG;gBACxD,YAAY,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACrG,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -1,19 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
/*
|
|
3
|
-
* Copyright 2026 MARLINK TRADING SRL (YounndAI)
|
|
4
|
-
*
|
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
* you may not use this file except in compliance with the License.
|
|
7
|
-
* You may obtain a copy of the License at
|
|
8
|
-
*
|
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
*
|
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
* See the License for the specific language governing permissions and
|
|
15
|
-
* limitations under the License.
|
|
16
|
-
*/
|
|
17
2
|
import { createRequire } from "node:module";
|
|
18
3
|
import { Command } from "commander";
|
|
19
4
|
import { buildMcpSubcommand } from "@younndai/lyt-mcp";
|
|
@@ -33,38 +18,6 @@ program
|
|
|
33
18
|
.name("lyt")
|
|
34
19
|
.description("Lyt — federated markdown-vault mesh CLI (vault + mesh + sync + mcp + help + doctor + pattern + machine + identity + audit + friction + provenance + capture-metric + automator)")
|
|
35
20
|
.version(createRequire(import.meta.url)("../package.json").version);
|
|
36
|
-
// release review + block-A.3 Commit 11 — single source of truth for
|
|
37
|
-
// the @younndai/lyt-vault verb surface; sync / mcp are kept here because
|
|
38
|
-
// they live in separate workspaces.
|
|
39
|
-
//
|
|
40
|
-
// v1.B.1 delta: the meta CLI used to compose @younndai/lyt-mesh's
|
|
41
|
-
// `buildMeshSubcommand()` directly, but that registers a `mesh` parent
|
|
42
|
-
// that now collides with @younndai/lyt-vault's new v1.B.1 mesh command
|
|
43
|
-
// (init/join/list). Resolution: registerVaultVerbs registers the v1.B.1
|
|
44
|
-
// mesh parent (the canonical surface per master plan §5 v1.B.1); the
|
|
45
|
-
// surviving lyt-mesh subcommands (clone-all, source, status) are
|
|
46
|
-
// attached AFTER. The legacy lyt-mesh `init` subcommand (manifest-
|
|
47
|
-
// driven Phase 7D) is intentionally NOT re-attached — the v1.B.1 multi-
|
|
48
|
-
// mesh `mesh init <name>` supersedes it per master plan §5 (manifest-
|
|
49
|
-
// driven bulk init moves to v1.B.3).
|
|
50
|
-
//
|
|
51
|
-
// v1.C.1 delta: the legacy lyt-mesh `validate` subcommand (parent_vault
|
|
52
|
-
// FK dangling-check) is ALSO intentionally NOT re-attached — the v1.C.1
|
|
53
|
-
// `lyt mesh validate` (cross-mesh @MESH_EDGE walker, registered by
|
|
54
|
-
// registerVaultVerbs via commands/mesh.ts) supersedes it per master plan
|
|
55
|
-
// §v1.C.1:609 acceptance "lyt mesh validate warns on broken edges". The
|
|
56
|
-
// legacy parent_vault FK check is now repaired by v1.C.4 `lyt repair`
|
|
57
|
-
// per master plan §G-5:277 (validate = read-only / repair = write
|
|
58
|
-
// boundary). Same pattern as the v1.B.1 mesh-init supersession above.
|
|
59
|
-
// v1.C.4 ships `lyt repair` at the meta-CLI top level (federation-design
|
|
60
|
-
// §6:250 lists it next to `lyt init` + `lyt discover`).
|
|
61
|
-
//
|
|
62
|
-
// block-B Commit 7 delta: same composition shape applies to `automator`.
|
|
63
|
-
// registerVaultVerbs registers the v1 automator parent with list/log/status
|
|
64
|
-
// subcommands (lyt-vault has no lyt-runner dep). The meta CLI attaches `run`
|
|
65
|
-
// here, because runFiveStep + the metadata-filler body live in packages that
|
|
66
|
-
// depend on lyt-vault — registering them inside lyt-vault would create a
|
|
67
|
-
// cycle. Mirror of the lyt-mesh subcommand attach pattern above.
|
|
68
21
|
registerVaultVerbs(program);
|
|
69
22
|
const meshCmd = program.commands.find((c) => c.name() === "mesh");
|
|
70
23
|
if (meshCmd === undefined) {
|
|
@@ -79,82 +32,20 @@ if (automatorCmd === undefined) {
|
|
|
79
32
|
}
|
|
80
33
|
automatorCmd.addCommand(buildAutomatorRunSubcommand());
|
|
81
34
|
program.addCommand(buildSyncCommand());
|
|
82
|
-
// Brief B (B.4) — `lyt status`: top-level publish-drift trust surface (per-vault
|
|
83
|
-
// + pod unpushed/no-remote/clean). Distinct from `lyt mesh status` (the
|
|
84
|
-
// mesh-graph renderer attached under `mesh` above): different scope, different
|
|
85
|
-
// answer ("is my stuff published?" vs "what's the federation topology?").
|
|
86
35
|
program.addCommand(buildPodStatusCommand());
|
|
87
36
|
program.addCommand(buildMcpSubcommand());
|
|
88
|
-
// v1.D.3b — `lyt search` lives at the meta-CLI level per master-plan
|
|
89
|
-
// §v1.D.3:785 wording "lyt search" (no `vault` subcommand). The
|
|
90
|
-
// default scope is federation; placing it under `vault` would tilt
|
|
91
|
-
// user mental model toward single-vault use. The cascade engine
|
|
92
|
-
// itself lives in @younndai/lyt-vault (data-layer ownership); the
|
|
93
|
-
// command builder here is the CLI-surface adapter.
|
|
94
37
|
program.addCommand(buildSearchCommand());
|
|
95
|
-
// V-C-1 Phase E / V-C-2 — `lyt capture "<text>"`: the frictionless top-level
|
|
96
|
-
// alias for `pattern run knowledge-capture capture` the wizard advertises.
|
|
97
|
-
// True alias (same ceremony: mandatory purpose+topic, 8-field contract) +
|
|
98
|
-
// index-on-write so a capture is searchable immediately. Top-level like
|
|
99
|
-
// search/primer/reindex; the flow lives in @younndai/lyt-vault.
|
|
100
38
|
program.addCommand(buildCaptureCommand());
|
|
101
|
-
// v1.D.4 — `lyt primer` mirrors the meta-CLI posture of `lyt search`.
|
|
102
|
-
// Same rationale: the verb operates at vault | mesh | federation scope
|
|
103
|
-
// per master-plan §v1.D.4:832; placing it under `vault` would tilt
|
|
104
|
-
// mental model. The generator flow lives in @younndai/lyt-vault; the
|
|
105
|
-
// command builder here is the CLI-surface adapter.
|
|
106
39
|
program.addCommand(buildPrimerCommand());
|
|
107
|
-
// Lane V Phase 0 (0.5 / CLI gaps C1+C2) — `lyt reindex [--all|--mesh|--vault]`
|
|
108
|
-
// rebuilds all content-tier caches (lanes+arcs+fts+rollup) across the pod, a
|
|
109
|
-
// mesh, or one vault. Top-level (like search/primer) because its mental model
|
|
110
|
-
// is pod-wide. The reindexFlow lives in @younndai/lyt-vault (data-layer
|
|
111
|
-
// ownership); this is the CLI-surface adapter.
|
|
112
40
|
program.addCommand(buildReindexCommand());
|
|
113
|
-
// Lane V Workstream 2 — `lyt bench`: privacy-trivial retrieval self-test over a
|
|
114
|
-
// synthetic temp pod (never the user's ~/lyt). Top-level like search/primer/
|
|
115
|
-
// reindex. The harness lives in ./bench (productized from tools/lane-v, which is
|
|
116
|
-
// dev-only and not shipped); this is the CLI-surface adapter.
|
|
117
41
|
program.addCommand(buildBenchCommand());
|
|
118
|
-
// v1.B.4 — `lyt init` lives at the meta-CLI top level per OD-1 default +
|
|
119
|
-
// master-plan §v1.B.4:543 + federation-design §5:248. Composes
|
|
120
|
-
// meshInitFlow + federationInitFlow into idempotent bootstrap with
|
|
121
|
-
// three branches (fresh / re-init / discovery) + `--auto` default.
|
|
122
42
|
program.addCommand(buildLytInitCommand());
|
|
123
|
-
// v1.C.3 — `lyt discover` lives at the meta-CLI top level per OD-1 default +
|
|
124
|
-
// federation-design §6:249 (lists `lyt discover` next to `lyt init`).
|
|
125
|
-
// Read-only walk of GH-accessible repos; clusters discovered Lyt vaults
|
|
126
|
-
// by @VAULT_HOME_MESH.mesh_name; per-cluster orphan-recovery prompt
|
|
127
|
-
// (adopt / external / skip) ships in Commit 3. Mirror lyt search / lyt
|
|
128
|
-
// primer / lyt init top-level attach pattern.
|
|
129
43
|
program.addCommand(buildDiscoverCommand());
|
|
130
|
-
// v1.C.4 — `lyt repair` lives at the meta-CLI top level per OD-1 default +
|
|
131
|
-
// federation-design §6:250 (lists `lyt repair` next to `lyt init` +
|
|
132
|
-
// `lyt discover`). Default mode is --dry-run; --apply performs writes
|
|
133
|
-
// across the 4 federation-design §11:515-521 failure classes (broken
|
|
134
|
-
// @MESH_EDGE, broken @MESH_SUBSCRIPTION, mesh.yon parse error → restore
|
|
135
|
-
// from Git, orphan vault re-attach). G-5 contract LOCK: this is the
|
|
136
|
-
// write side of validate = read-only / repair = write per master-plan
|
|
137
|
-
// §G-5:277.
|
|
138
44
|
program.addCommand(buildRepairCommand());
|
|
139
|
-
// v1.F.3 — `lyt skills` lives at the meta-CLI top level per OD-2 default +
|
|
140
|
-
// master-plan §v1.F.3:1033 verb wording ("lyt skills install"). Composes
|
|
141
|
-
// symlinkSkillsTriRuntime + listSkillsTriRuntime into the symlink + runtime-
|
|
142
|
-
// state-reporting surface for the 10 bundled skills across ~/.claude/skills,
|
|
143
|
-
// ~/.codex/skills, ~/.agents/skills. Per OD-5 + OD-16 ratified 2026-06-01,
|
|
144
|
-
// the legacy standalone `lyt-skills` bin + copy-based `installSkills` flow
|
|
145
|
-
// were removed in the same phase (pre-release clean slate).
|
|
146
45
|
program.addCommand(buildSkillsCommand());
|
|
147
|
-
// v1.G.5 — `lyt agent-manual --runtime {claude|codex|agents|generic}
|
|
148
|
-
// [--install] [--dry-run]` at the meta-CLI top level. Mirrors the
|
|
149
|
-
// discover / repair / skills attach pattern above. Generates the Lyt
|
|
150
|
-
// agent manual (~150 lines / ~1.5K tokens) and writes it (or previews
|
|
151
|
-
// it) into agent-runtime global instructions files via the
|
|
152
|
-
// `<!-- lyt-manual v<lyt-version> BEGIN -->...END -->` marker pattern
|
|
153
|
-
// (D9 update-path primitive per the ratified default ratified 2026-06-01).
|
|
154
46
|
program.addCommand(buildAgentManualCommand());
|
|
155
47
|
program.parseAsync(process.argv).catch((err) => {
|
|
156
48
|
const message = err instanceof Error ? err.message : String(err);
|
|
157
|
-
// eslint-disable-next-line no-console
|
|
158
49
|
console.error(`lyt: ${message}`);
|
|
159
50
|
process.exit(1);
|
|
160
51
|
});
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAiBA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CACV,iLAAiL,CAClL;KACA,OAAO,CAAE,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAyB,CAAC,OAAO,CAAC,CAAC;AAkC/F,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,CAAC;AAClE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;IAC1B,MAAM,IAAI,KAAK,CACb,sGAAsG,CACvG,CAAC;AACJ,CAAC;AACD,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAC3C,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;AACzC,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;AAEzC,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,WAAW,CAAC,CAAC;AAC5E,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;IAC/B,MAAM,IAAI,KAAK,CACb,4GAA4G,CAC7G,CAAC;AACJ,CAAC;AACD,YAAY,CAAC,UAAU,CAAC,2BAA2B,EAAE,CAAC,CAAC;AAEvD,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;AAKvC,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;AAC5C,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;AAQzC,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;AAOzC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAO1C,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;AAOzC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAM1C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAMxC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAQ1C,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAU3C,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;AASzC,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;AASzC,OAAO,CAAC,UAAU,CAAC,uBAAuB,EAAE,CAAC,CAAC;AAE9C,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IACtD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAEjE,OAAO,CAAC,KAAK,CAAC,QAAQ,OAAO,EAAE,CAAC,CAAC;IACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/commands/bench.js
CHANGED
|
@@ -1,28 +1,6 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2026 MARLINK TRADING SRL (YounndAI)
|
|
3
|
-
*
|
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
-
* you may not use this file except in compliance with the License.
|
|
6
|
-
* You may obtain a copy of the License at
|
|
7
|
-
*
|
|
8
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
*
|
|
10
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
* See the License for the specific language governing permissions and
|
|
14
|
-
* limitations under the License.
|
|
15
|
-
*/
|
|
16
1
|
import { Command } from "commander";
|
|
17
2
|
import { DEFAULT_LATENCY_COUNT, runLatencyBench } from "../bench/latency-bench.js";
|
|
18
3
|
import { runBench } from "../bench/run-bench.js";
|
|
19
|
-
// Lane V Workstream 2 — `lyt bench`: a privacy-trivial retrieval self-test.
|
|
20
|
-
// Stands up TEMP throwaway pods under os.tmpdir (never the user's ~/lyt), seeds
|
|
21
|
-
// tiny deterministic synthetic corpora, indexes them, and reports:
|
|
22
|
-
// • (default) D-core invariants + E-lite graded quality
|
|
23
|
-
// • --quick invariants only (the fast every-CI path)
|
|
24
|
-
// • --latency index + query p50/p95 on a synthetic corpus (--count to scale)
|
|
25
|
-
// No user content is read, by construction — safe to run anywhere.
|
|
26
4
|
export function buildBenchCommand() {
|
|
27
5
|
return new Command("bench")
|
|
28
6
|
.description("Self-test Lyt's retrieval engine against synthetic corpora (privacy-trivial — reads no user content). Asserts the retrieval invariants and reports a graded quality score; exits non-zero if an invariant or hygiene trap regressed.")
|
|
@@ -36,11 +14,9 @@ export function buildBenchCommand() {
|
|
|
36
14
|
const parsed = opts.count !== undefined ? Number.parseInt(opts.count, 10) : undefined;
|
|
37
15
|
const report = await runLatencyBench(parsed !== undefined && Number.isFinite(parsed) ? { count: parsed } : {});
|
|
38
16
|
if (opts.json === true) {
|
|
39
|
-
// eslint-disable-next-line no-console
|
|
40
17
|
console.log(JSON.stringify(report, null, 2));
|
|
41
18
|
return;
|
|
42
19
|
}
|
|
43
|
-
// eslint-disable-next-line no-console
|
|
44
20
|
console.log([
|
|
45
21
|
`lyt bench --latency — synthetic corpus (${report.durationMs}ms)`,
|
|
46
22
|
` index: ${report.indexMs}ms (${report.corpusSize} figments, all tiers)`,
|
|
@@ -50,7 +26,6 @@ export function buildBenchCommand() {
|
|
|
50
26
|
}
|
|
51
27
|
const report = await runBench({ quick: opts.quick === true });
|
|
52
28
|
if (opts.json === true) {
|
|
53
|
-
// eslint-disable-next-line no-console
|
|
54
29
|
console.log(JSON.stringify(report, null, 2));
|
|
55
30
|
if (!report.ok)
|
|
56
31
|
process.exitCode = 1;
|
|
@@ -77,13 +52,11 @@ export function buildBenchCommand() {
|
|
|
77
52
|
lines.push("", report.ok
|
|
78
53
|
? "PASS — invariants hold and no hygiene trap leaked."
|
|
79
54
|
: "FAIL — an invariant or hygiene trap regressed.");
|
|
80
|
-
// eslint-disable-next-line no-console
|
|
81
55
|
console.log(lines.join("\n"));
|
|
82
56
|
if (!report.ok)
|
|
83
57
|
process.exitCode = 1;
|
|
84
58
|
}
|
|
85
59
|
catch (err) {
|
|
86
|
-
// eslint-disable-next-line no-console
|
|
87
60
|
console.error(`lyt bench: ${err instanceof Error ? err.message : String(err)}`);
|
|
88
61
|
process.exitCode = 2;
|
|
89
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bench.js","sourceRoot":"","sources":["../../src/commands/bench.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bench.js","sourceRoot":"","sources":["../../src/commands/bench.ts"],"names":[],"mappings":"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"}
|