loki-mode 11.60.16 → 11.61.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/SKILL.md +2 -2
- package/VERSION +1 -1
- package/dashboard/__init__.py +1 -1
- package/docs/CLI-REFERENCE.md +1 -1
- package/docs/INSTALLATION.md +1 -1
- package/docs/v10/ENGINE.md +1 -1
- package/docs/v10/FAILURE-CLASSES.md +11 -1
- package/loki-ts/dist/loki.js +1120 -1119
- package/mcp/__init__.py +1 -1
- package/package.json +2 -2
- package/packages/control-plane/dist/server.js +161 -132
- package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
- package/web-app/dist/assets/{AdminPage-TvrgrZuw.js → AdminPage-C9tNiCcc.js} +1 -1
- package/web-app/dist/assets/{Avatar-Bb4nNhFM.js → Avatar-COiV6fM3.js} +1 -1
- package/web-app/dist/assets/{Badge-HJfuedzY.js → Badge-Dq_JTyN7.js} +1 -1
- package/web-app/dist/assets/{Button-BFyEBTEH.js → Button-bcJTak6K.js} +1 -1
- package/web-app/dist/assets/{CockpitPage-cRbFng0Y.js → CockpitPage-ChCKEp5R.js} +1 -1
- package/web-app/dist/assets/{ComparePage-BDWvRPJH.js → ComparePage-CaMJUHaJ.js} +1 -1
- package/web-app/dist/assets/{ErrorBoundary-BFB3B6qS.js → ErrorBoundary-CNSBZ9EN.js} +1 -1
- package/web-app/dist/assets/{EvidenceReceiptPanel-DfPpa99E.js → EvidenceReceiptPanel-EvQGLfKn.js} +1 -1
- package/web-app/dist/assets/{GitHubIssuesPanel-Cgg-TamR.js → GitHubIssuesPanel-Da8MmkID.js} +1 -1
- package/web-app/dist/assets/{GitHubPRsPanel-DXlznNaT.js → GitHubPRsPanel-BLC_Mdhw.js} +1 -1
- package/web-app/dist/assets/{HomePage-RDqLk0LD.js → HomePage-DuXY41X0.js} +2 -2
- package/web-app/dist/assets/{LoginPage-Dxhe9oga.js → LoginPage-CE1oWvhQ.js} +1 -1
- package/web-app/dist/assets/{MagicPage-HANTah--.js → MagicPage-CWpwPVjk.js} +1 -1
- package/web-app/dist/assets/{MetricsPage-BxjoBHhg.js → MetricsPage-Diz2q7NV.js} +1 -1
- package/web-app/dist/assets/{NotFoundPage-Bn3V3qWo.js → NotFoundPage-DFGmDRp7.js} +1 -1
- package/web-app/dist/assets/{ProjectPage-D3KYFM_N.js → ProjectPage-C1CAu7Zs.js} +3 -3
- package/web-app/dist/assets/{ProjectsPage-DV6_tZIm.js → ProjectsPage-DsIToenk.js} +1 -1
- package/web-app/dist/assets/{SettingsPage-JtbU2vOp.js → SettingsPage-IF2tqAKU.js} +1 -1
- package/web-app/dist/assets/{ShowcasePage-DuB5e7_g.js → ShowcasePage-CL9I_BZR.js} +1 -1
- package/web-app/dist/assets/{SystemSettingsPage-BU3kLT-C.js → SystemSettingsPage-C97oKK-3.js} +1 -1
- package/web-app/dist/assets/{TeamsPage-B5etAmaN.js → TeamsPage-B_jOlRcz.js} +1 -1
- package/web-app/dist/assets/{TemplatesPage-sM2zXEt-.js → TemplatesPage-BNlPb6TK.js} +1 -1
- package/web-app/dist/assets/{TerminalOutput-DO6_1_OF.js → TerminalOutput-B_zJMmL2.js} +1 -1
- package/web-app/dist/assets/{activity-D_wZmvHi.js → activity-D_qo5h6S.js} +1 -1
- package/web-app/dist/assets/{bell-CVimd2CM.js → bell-C6NAzfG0.js} +1 -1
- package/web-app/dist/assets/{bot-BKqzjwM8.js → bot-DzFRVWbn.js} +1 -1
- package/web-app/dist/assets/{check-Cn1hwqkh.js → check-DCq2Kg1q.js} +1 -1
- package/web-app/dist/assets/{chevron-left-DB9zn9HI.js → chevron-left-7MRhbpMY.js} +1 -1
- package/web-app/dist/assets/{circle-alert-BzFzXBcE.js → circle-alert-CXWGyJEP.js} +1 -1
- package/web-app/dist/assets/{clock-CVVX5Ua9.js → clock-Cy6YnZeN.js} +1 -1
- package/web-app/dist/assets/{cloud-DiI7PVHH.js → cloud-Tk1vP19-.js} +1 -1
- package/web-app/dist/assets/{code-xml-BqlhbmzB.js → code-xml-DPikdIPq.js} +1 -1
- package/web-app/dist/assets/{database-DgseRvlB.js → database-Dy15C-V-.js} +1 -1
- package/web-app/dist/assets/{dollar-sign-BAT5CB0s.js → dollar-sign-DxaAhsv9.js} +1 -1
- package/web-app/dist/assets/{file-code-corner-C28U8mha.js → file-code-corner-pXG2KIiE.js} +1 -1
- package/web-app/dist/assets/{file-plus-BHpkgmZD.js → file-plus-D-SqpglA.js} +1 -1
- package/web-app/dist/assets/{globe-efHzOFvw.js → globe-De1IvwPY.js} +1 -1
- package/web-app/dist/assets/{hammer-BNj9Z8wQ.js → hammer-DHZLCeg3.js} +1 -1
- package/web-app/dist/assets/{index-DrlVp90a.js → index-U2Lna7v5.js} +3 -3
- package/web-app/dist/assets/{layers-SnxbBdfu.js → layers-DLSVstyz.js} +1 -1
- package/web-app/dist/assets/{loader-circle-CpbdyIIE.js → loader-circle-Cwwq3oPR.js} +1 -1
- package/web-app/dist/assets/{lock-B9Mcva56.js → lock-DOGahFMy.js} +1 -1
- package/web-app/dist/assets/{package-BBjAd_UN.js → package-qNDtTB48.js} +1 -1
- package/web-app/dist/assets/{plus-ej-ppzKQ.js → plus-B6wdeepB.js} +1 -1
- package/web-app/dist/assets/{refresh-cw-BXbsk51e.js → refresh-cw-NEZY65js.js} +1 -1
- package/web-app/dist/assets/{rotate-ccw-Cb4X8EVi.js → rotate-ccw-RrbLLUZK.js} +1 -1
- package/web-app/dist/assets/{scroll-text-DCb61Xlz.js → scroll-text-UU7LGA_w.js} +1 -1
- package/web-app/dist/assets/{server-BZhPvvap.js → server-B2i_4Qni.js} +1 -1
- package/web-app/dist/assets/{shield-alert-DbWTSwyQ.js → shield-alert-DY8lF82-.js} +1 -1
- package/web-app/dist/assets/{thumbs-up-D5g0RmUD.js → thumbs-up-BUzzp-bi.js} +1 -1
- package/web-app/dist/assets/{trash-2-BMXU1ub4.js → trash-2-D52r8NKg.js} +1 -1
- package/web-app/dist/assets/{trending-down-CIRdrfaH.js → trending-down-Re5Duvv1.js} +1 -1
- package/web-app/dist/assets/{trending-up-BSwU7Axb.js → trending-up-CpUvIPYj.js} +1 -1
- package/web-app/dist/assets/{upload-CwgdnNp1.js → upload-CB9pWAxp.js} +1 -1
- package/web-app/dist/assets/{usePolling-BciPnllz.js → usePolling-CSuJGfcl.js} +1 -1
- package/web-app/dist/assets/{user-umWJhl16.js → user-DglqqRFd.js} +1 -1
- package/web-app/dist/index.html +1 -1
|
@@ -7651,8 +7651,8 @@ var init_paths = __esm(() => {
|
|
|
7651
7651
|
|
|
7652
7652
|
// ../../loki-ts/src/engine10/cache.ts
|
|
7653
7653
|
import { createHash as createHash6 } from "crypto";
|
|
7654
|
-
import { existsSync as existsSync15, mkdirSync as mkdirSync5, readdirSync as readdirSync9, readFileSync as readFileSync18, statSync as statSync12, unlinkSync as unlinkSync3, writeFileSync as writeFileSync8 } from "fs";
|
|
7655
|
-
import { basename as basename8, resolve as resolve8 } from "path";
|
|
7654
|
+
import { chmodSync as chmodSync4, existsSync as existsSync15, mkdirSync as mkdirSync5, readdirSync as readdirSync9, readFileSync as readFileSync18, renameSync as renameSync4, statSync as statSync12, unlinkSync as unlinkSync3, writeFileSync as writeFileSync8 } from "fs";
|
|
7655
|
+
import { basename as basename8, relative, resolve as resolve8 } from "path";
|
|
7656
7656
|
function repoKey(originUrl, repoDir) {
|
|
7657
7657
|
const basis = originUrl && originUrl.trim() !== "" ? originUrl : resolve8(repoDir);
|
|
7658
7658
|
return createHash6("sha256").update(basis).digest("hex");
|
|
@@ -7676,7 +7676,34 @@ function readJson3(path, isValid = (_v) => true) {
|
|
|
7676
7676
|
function isRepoMap(v) {
|
|
7677
7677
|
return typeof v === "object" && v !== null && Array.isArray(v.files) && Array.isArray(v.entries);
|
|
7678
7678
|
}
|
|
7679
|
-
|
|
7679
|
+
function sourceFingerprint(root) {
|
|
7680
|
+
const h = createHash6("sha256");
|
|
7681
|
+
const walk = (dir) => {
|
|
7682
|
+
for (const e of readdirSync9(dir, { withFileTypes: true }).sort((a, b) => a.name < b.name ? -1 : 1)) {
|
|
7683
|
+
const p = resolve8(dir, e.name);
|
|
7684
|
+
if (e.isDirectory()) {
|
|
7685
|
+
if (e.name !== "node_modules")
|
|
7686
|
+
walk(p);
|
|
7687
|
+
} else if (e.isFile() && e.name.endsWith(".ts"))
|
|
7688
|
+
h.update(`${relative(root, p)}\x00`).update(readFileSync18(p)).update("\x00");
|
|
7689
|
+
}
|
|
7690
|
+
};
|
|
7691
|
+
walk(root);
|
|
7692
|
+
return h.digest("hex");
|
|
7693
|
+
}
|
|
7694
|
+
function computeProducerFingerprint(root = resolve8(import.meta.dir, ".."), injected = globalThis.__LOKI_PRODUCER_FP__) {
|
|
7695
|
+
if (typeof injected === "string" && /^[0-9a-f]{64}$/.test(injected))
|
|
7696
|
+
return injected;
|
|
7697
|
+
try {
|
|
7698
|
+
return sourceFingerprint(root);
|
|
7699
|
+
} catch {
|
|
7700
|
+
return createHash6("sha256").update(`unbound:${process.pid}:${Date.now()}:${Math.random()}`).digest("hex");
|
|
7701
|
+
}
|
|
7702
|
+
}
|
|
7703
|
+
function producerFingerprint() {
|
|
7704
|
+
return producerFp ??= computeProducerFingerprint();
|
|
7705
|
+
}
|
|
7706
|
+
var producerFp = null, cacheFileName = (kind, tree, fp = producerFingerprint()) => `${kind}-${fp.slice(0, 16)}-${tree}.json`, readRepoMapCache = (dir, tree, fp = producerFingerprint()) => readJson3(resolve8(dir, cacheFileName("repomap", tree, fp)), isRepoMap);
|
|
7680
7707
|
var init_cache = __esm(() => {
|
|
7681
7708
|
init_paths();
|
|
7682
7709
|
});
|
|
@@ -7867,7 +7894,7 @@ var init_price_table = __esm(() => {
|
|
|
7867
7894
|
});
|
|
7868
7895
|
|
|
7869
7896
|
// ../../loki-ts/src/providers/provider_cost.ts
|
|
7870
|
-
import { existsSync as existsSync16, mkdirSync as mkdirSync6, readdirSync as readdirSync10, readFileSync as readFileSync20, renameSync as
|
|
7897
|
+
import { existsSync as existsSync16, mkdirSync as mkdirSync6, readdirSync as readdirSync10, readFileSync as readFileSync20, renameSync as renameSync5, writeFileSync as writeFileSync9 } from "fs";
|
|
7871
7898
|
import { dirname as dirname7, join as join27 } from "path";
|
|
7872
7899
|
function withArchivedCosts(lokiRoot, ids, keep = () => true) {
|
|
7873
7900
|
let files = [];
|
|
@@ -8102,7 +8129,7 @@ import {
|
|
|
8102
8129
|
mkdirSync as mkdirSync8,
|
|
8103
8130
|
openSync as openSync5,
|
|
8104
8131
|
readSync as readSync4,
|
|
8105
|
-
renameSync as
|
|
8132
|
+
renameSync as renameSync6,
|
|
8106
8133
|
rmSync as rmSync5,
|
|
8107
8134
|
statSync as statSync13,
|
|
8108
8135
|
unlinkSync as unlinkSync4,
|
|
@@ -8120,7 +8147,7 @@ function durableWriteThenRename(target, body) {
|
|
|
8120
8147
|
} finally {
|
|
8121
8148
|
closeSync5(fd);
|
|
8122
8149
|
}
|
|
8123
|
-
|
|
8150
|
+
renameSync6(tmp, target);
|
|
8124
8151
|
fsyncParentDir(target);
|
|
8125
8152
|
}
|
|
8126
8153
|
function fsyncParentDir(target) {
|
|
@@ -8148,7 +8175,7 @@ function atomicWriteText(target, body, opts = {}) {
|
|
|
8148
8175
|
mkdirSync8(dirname9(target), { recursive: true });
|
|
8149
8176
|
const tmp = tmpPathFor(target);
|
|
8150
8177
|
writeFileSync11(tmp, body);
|
|
8151
|
-
|
|
8178
|
+
renameSync6(tmp, target);
|
|
8152
8179
|
return;
|
|
8153
8180
|
}
|
|
8154
8181
|
durableWriteThenRename(target, body);
|
|
@@ -8615,7 +8642,7 @@ var init_schema = __esm(() => {
|
|
|
8615
8642
|
});
|
|
8616
8643
|
|
|
8617
8644
|
// ../../loki-ts/src/runner/router/history_store.ts
|
|
8618
|
-
import { existsSync as existsSync19, mkdirSync as mkdirSync10, readFileSync as readFileSync24, renameSync as
|
|
8645
|
+
import { existsSync as existsSync19, mkdirSync as mkdirSync10, readFileSync as readFileSync24, renameSync as renameSync7, rmSync as rmSync6, writeFileSync as writeFileSync13 } from "fs";
|
|
8619
8646
|
import { resolve as resolve12 } from "path";
|
|
8620
8647
|
function validRun(v) {
|
|
8621
8648
|
if (typeof v !== "object" || v === null)
|
|
@@ -8647,7 +8674,7 @@ function appendRunOutcome(key, outcome, cacheRoot) {
|
|
|
8647
8674
|
const tmp = `${target}.${process.pid}.tmp`;
|
|
8648
8675
|
try {
|
|
8649
8676
|
writeFileSync13(tmp, JSON.stringify({ runs: runs2 }));
|
|
8650
|
-
|
|
8677
|
+
renameSync7(tmp, target);
|
|
8651
8678
|
} catch (e) {
|
|
8652
8679
|
rmSync6(tmp, { force: true, recursive: false });
|
|
8653
8680
|
throw e;
|
|
@@ -8740,72 +8767,6 @@ var init_gather = __esm(() => {
|
|
|
8740
8767
|
};
|
|
8741
8768
|
});
|
|
8742
8769
|
|
|
8743
|
-
// ../../loki-ts/src/util/engine_origin.ts
|
|
8744
|
-
function readOriginUrl(repoDir) {
|
|
8745
|
-
try {
|
|
8746
|
-
const url = safeGit(repoDir, ["config", "--get", "remote.origin.url"]).trim();
|
|
8747
|
-
return url || null;
|
|
8748
|
-
} catch {
|
|
8749
|
-
return null;
|
|
8750
|
-
}
|
|
8751
|
-
}
|
|
8752
|
-
var init_engine_origin = __esm(() => {
|
|
8753
|
-
init_atomic();
|
|
8754
|
-
init_safe_git();
|
|
8755
|
-
});
|
|
8756
|
-
|
|
8757
|
-
// ../../loki-ts/src/runner/router/history.ts
|
|
8758
|
-
import { dirname as dirname12, join as join32, resolve as resolve13 } from "path";
|
|
8759
|
-
import { fileURLToPath as fileURLToPath4 } from "url";
|
|
8760
|
-
function shapeKey(model) {
|
|
8761
|
-
if (!model || model.status !== "ok")
|
|
8762
|
-
return null;
|
|
8763
|
-
const runners = new Set(model.packages.map((p) => (p.runner ?? "").trim().toLowerCase() || "none"));
|
|
8764
|
-
return `${model.workspaceKind}:${[...runners].sort().join("+")}`;
|
|
8765
|
-
}
|
|
8766
|
-
function shapeKeyForRepo(repoDir) {
|
|
8767
|
-
try {
|
|
8768
|
-
const dirs = shallowDirs(repoDir);
|
|
8769
|
-
const committed = loadCommitted(repoDir);
|
|
8770
|
-
if (committed)
|
|
8771
|
-
return shapeKey({ ...committed.model, key: computeKey(repoDir, committed.model.fingerprintFiles, dirs, committed.hash) });
|
|
8772
|
-
const cached = loadCached(repoDir);
|
|
8773
|
-
if (!cached || computeKey(repoDir, cached.fingerprintFiles, dirs) !== cached.key)
|
|
8774
|
-
return null;
|
|
8775
|
-
return shapeKey(cached);
|
|
8776
|
-
} catch {
|
|
8777
|
-
return null;
|
|
8778
|
-
}
|
|
8779
|
-
}
|
|
8780
|
-
var SHAPE_DEFAULTS_FILE;
|
|
8781
|
-
var init_history = __esm(() => {
|
|
8782
|
-
init_schema();
|
|
8783
|
-
init_history_store();
|
|
8784
|
-
init_discover2();
|
|
8785
|
-
init_gather();
|
|
8786
|
-
init_decision();
|
|
8787
|
-
init_cache();
|
|
8788
|
-
init_engine_origin();
|
|
8789
|
-
init_history_store();
|
|
8790
|
-
SHAPE_DEFAULTS_FILE = resolve13(dirname12(fileURLToPath4(import.meta.url)), "..", "..", "..", "data", "router-shape-defaults.json");
|
|
8791
|
-
});
|
|
8792
|
-
|
|
8793
|
-
// ../../loki-ts/src/runner/router/unit_model.ts
|
|
8794
|
-
var init_unit_model = __esm(() => {
|
|
8795
|
-
init_sizing();
|
|
8796
|
-
init_session();
|
|
8797
|
-
init_decision();
|
|
8798
|
-
init_history();
|
|
8799
|
-
init_model_rank();
|
|
8800
|
-
});
|
|
8801
|
-
|
|
8802
|
-
// ../../loki-ts/src/runner/router/session_route.ts
|
|
8803
|
-
var init_session_route = __esm(() => {
|
|
8804
|
-
init_sizing();
|
|
8805
|
-
init_types();
|
|
8806
|
-
init_unit_model();
|
|
8807
|
-
});
|
|
8808
|
-
|
|
8809
8770
|
// ../../loki-ts/src/runner/worker_proc.ts
|
|
8810
8771
|
function killGroup2(pid, sig) {
|
|
8811
8772
|
if (!pid)
|
|
@@ -8930,6 +8891,73 @@ var init_shell = __esm(() => {
|
|
|
8930
8891
|
MAX_STDOUT_BYTES = 16 * 1024 * 1024;
|
|
8931
8892
|
});
|
|
8932
8893
|
|
|
8894
|
+
// ../../loki-ts/src/util/engine_origin.ts
|
|
8895
|
+
function readOriginUrl(repoDir) {
|
|
8896
|
+
try {
|
|
8897
|
+
const url = safeGit(repoDir, ["config", "--get", "remote.origin.url"]).trim();
|
|
8898
|
+
return url || null;
|
|
8899
|
+
} catch {
|
|
8900
|
+
return null;
|
|
8901
|
+
}
|
|
8902
|
+
}
|
|
8903
|
+
var init_engine_origin = __esm(() => {
|
|
8904
|
+
init_atomic();
|
|
8905
|
+
init_safe_git();
|
|
8906
|
+
init_shell();
|
|
8907
|
+
});
|
|
8908
|
+
|
|
8909
|
+
// ../../loki-ts/src/runner/router/history.ts
|
|
8910
|
+
import { dirname as dirname12, join as join32, resolve as resolve13 } from "path";
|
|
8911
|
+
import { fileURLToPath as fileURLToPath4 } from "url";
|
|
8912
|
+
function shapeKey(model) {
|
|
8913
|
+
if (!model || model.status !== "ok")
|
|
8914
|
+
return null;
|
|
8915
|
+
const runners = new Set(model.packages.map((p) => (p.runner ?? "").trim().toLowerCase() || "none"));
|
|
8916
|
+
return `${model.workspaceKind}:${[...runners].sort().join("+")}`;
|
|
8917
|
+
}
|
|
8918
|
+
function shapeKeyForRepo(repoDir) {
|
|
8919
|
+
try {
|
|
8920
|
+
const dirs = shallowDirs(repoDir);
|
|
8921
|
+
const committed = loadCommitted(repoDir);
|
|
8922
|
+
if (committed)
|
|
8923
|
+
return shapeKey({ ...committed.model, key: computeKey(repoDir, committed.model.fingerprintFiles, dirs, committed.hash) });
|
|
8924
|
+
const cached = loadCached(repoDir);
|
|
8925
|
+
if (!cached || computeKey(repoDir, cached.fingerprintFiles, dirs) !== cached.key)
|
|
8926
|
+
return null;
|
|
8927
|
+
return shapeKey(cached);
|
|
8928
|
+
} catch {
|
|
8929
|
+
return null;
|
|
8930
|
+
}
|
|
8931
|
+
}
|
|
8932
|
+
var SHAPE_DEFAULTS_FILE;
|
|
8933
|
+
var init_history = __esm(() => {
|
|
8934
|
+
init_schema();
|
|
8935
|
+
init_history_store();
|
|
8936
|
+
init_discover2();
|
|
8937
|
+
init_gather();
|
|
8938
|
+
init_decision();
|
|
8939
|
+
init_cache();
|
|
8940
|
+
init_engine_origin();
|
|
8941
|
+
init_history_store();
|
|
8942
|
+
SHAPE_DEFAULTS_FILE = resolve13(dirname12(fileURLToPath4(import.meta.url)), "..", "..", "..", "data", "router-shape-defaults.json");
|
|
8943
|
+
});
|
|
8944
|
+
|
|
8945
|
+
// ../../loki-ts/src/runner/router/unit_model.ts
|
|
8946
|
+
var init_unit_model = __esm(() => {
|
|
8947
|
+
init_sizing();
|
|
8948
|
+
init_session();
|
|
8949
|
+
init_decision();
|
|
8950
|
+
init_history();
|
|
8951
|
+
init_model_rank();
|
|
8952
|
+
});
|
|
8953
|
+
|
|
8954
|
+
// ../../loki-ts/src/runner/router/session_route.ts
|
|
8955
|
+
var init_session_route = __esm(() => {
|
|
8956
|
+
init_sizing();
|
|
8957
|
+
init_types();
|
|
8958
|
+
init_unit_model();
|
|
8959
|
+
});
|
|
8960
|
+
|
|
8933
8961
|
// ../../loki-ts/src/providers/mcp_config.ts
|
|
8934
8962
|
var MAX_MCP_FILE_BYTES;
|
|
8935
8963
|
var init_mcp_config = __esm(() => {
|
|
@@ -9418,11 +9446,11 @@ var init_test_file_text = __esm(() => {
|
|
|
9418
9446
|
|
|
9419
9447
|
// ../../loki-ts/src/engine10/testmap.ts
|
|
9420
9448
|
import { existsSync as existsSync23, readFileSync as readFileSync29, realpathSync as realpathSync15 } from "fs";
|
|
9421
|
-
import { basename as basename11, dirname as dirname14, extname, isAbsolute as isAbsolute2, join as join36, relative, sep as sep10 } from "path";
|
|
9449
|
+
import { basename as basename11, dirname as dirname14, extname, isAbsolute as isAbsolute2, join as join36, relative as relative2, sep as sep10 } from "path";
|
|
9422
9450
|
function projectInterpreter(root) {
|
|
9423
9451
|
const ve = process.env["VIRTUAL_ENV"], inRepo = (p) => {
|
|
9424
9452
|
try {
|
|
9425
|
-
const r =
|
|
9453
|
+
const r = relative2(realpathSync15(root), realpathSync15(p));
|
|
9426
9454
|
return r !== "" && !r.startsWith("..") && !isAbsolute2(r);
|
|
9427
9455
|
} catch {
|
|
9428
9456
|
return false;
|
|
@@ -9441,8 +9469,8 @@ var init_testmap = __esm(() => {
|
|
|
9441
9469
|
// ../../loki-ts/src/util/check_result.ts
|
|
9442
9470
|
import { spawn as spawn7 } from "child_process";
|
|
9443
9471
|
import { createHash as createHash8 } from "crypto";
|
|
9444
|
-
import { existsSync as existsSync24, mkdirSync as mkdirSync12, readFileSync as readFileSync30, realpathSync as realpathSync16, renameSync as
|
|
9445
|
-
import { basename as basename12, dirname as dirname15, isAbsolute as isAbsolute3, join as join37, relative as
|
|
9472
|
+
import { existsSync as existsSync24, mkdirSync as mkdirSync12, readFileSync as readFileSync30, realpathSync as realpathSync16, renameSync as renameSync8, rmSync as rmSync8, writeFileSync as writeFileSync15 } from "fs";
|
|
9473
|
+
import { basename as basename12, dirname as dirname15, isAbsolute as isAbsolute3, join as join37, relative as relative3 } from "path";
|
|
9446
9474
|
function plainTestEnv(base = process.env) {
|
|
9447
9475
|
const e = {};
|
|
9448
9476
|
for (const [k, v] of Object.entries(tokenFreeEnv(base)))
|
|
@@ -9869,7 +9897,7 @@ function publishableWall(repoDir, runDir, o, env = process.env) {
|
|
|
9869
9897
|
if (env["LOKI_COMMIT_WALL"] === "0")
|
|
9870
9898
|
return out2;
|
|
9871
9899
|
for (const w of arr2(o.wall?.["files"])) {
|
|
9872
|
-
const rel =
|
|
9900
|
+
const rel = relative3(repoDir, String(w["path"])), hit = arr2(o.verify?.["checks"]).find((c) => tgt.has(String(c["name"])) && String(c["name"]).slice(String(c["name"]).indexOf(":") + 1) === rel && hasExecutedProof([c]));
|
|
9873
9901
|
if (!hit || rel.startsWith("..") || isAbsolute3(rel) || rel.startsWith(".loki/") || !basename12(rel).startsWith("loki_wall_"))
|
|
9874
9902
|
continue;
|
|
9875
9903
|
try {
|
|
@@ -9963,7 +9991,7 @@ function recordRisk(repoDir, a) {
|
|
|
9963
9991
|
mkdirSync12(dir, { recursive: true });
|
|
9964
9992
|
writeFileSync15(`${p}.tmp`, JSON.stringify(a, null, 2) + `
|
|
9965
9993
|
`);
|
|
9966
|
-
|
|
9994
|
+
renameSync8(`${p}.tmp`, p);
|
|
9967
9995
|
return p;
|
|
9968
9996
|
} catch {
|
|
9969
9997
|
return null;
|
|
@@ -10147,7 +10175,7 @@ ${err}` });
|
|
|
10147
10175
|
function resolveTool(repoDir, bin, fallback, lastResort = fallback) {
|
|
10148
10176
|
const inRepo = (p) => {
|
|
10149
10177
|
try {
|
|
10150
|
-
const r =
|
|
10178
|
+
const r = relative3(realpathSync16(repoDir), realpathSync16(p));
|
|
10151
10179
|
return r !== "" && !r.startsWith("..") && !isAbsolute3(r);
|
|
10152
10180
|
} catch {
|
|
10153
10181
|
return false;
|
|
@@ -10201,7 +10229,7 @@ async function wallChild(git, runId, repoDir, wallFiles) {
|
|
|
10201
10229
|
if (!(await git(["log", "-1", "--format=%B", "HEAD"])).out.split(`
|
|
10202
10230
|
`).includes(`Loki-Wall-Publish: ${runId}`))
|
|
10203
10231
|
return false;
|
|
10204
|
-
const want = new Map((Array.isArray(wallFiles) ? wallFiles : []).map((w) => [
|
|
10232
|
+
const want = new Map((Array.isArray(wallFiles) ? wallFiles : []).map((w) => [relative3(repoDir, w.path), w.sha256]));
|
|
10205
10233
|
const names = (await git(["diff", "--name-only", "--no-renames", "-z", "HEAD^", "HEAD"])).out.split("\x00").filter(Boolean);
|
|
10206
10234
|
if (names.length === 0)
|
|
10207
10235
|
return false;
|
|
@@ -10255,7 +10283,7 @@ var NO_TESTS_REASON = "no tests executed", NO_RUNNER_REASON = "no runner of this
|
|
|
10255
10283
|
return null;
|
|
10256
10284
|
}
|
|
10257
10285
|
}, OWNER_FILES, CRITICAL_TOKENS, criticalToken = (path) => path.split(/[\/._-]+/).find((t) => CRITICAL_TOKENS.test(t)), withoutStaleWall = (items, own, repoDir) => {
|
|
10258
|
-
const mine = new Set(own.map((p) => isAbsolute3(p) ?
|
|
10286
|
+
const mine = new Set(own.map((p) => isAbsolute3(p) ? relative3(repoDir, p) : p));
|
|
10259
10287
|
return items.filter((it) => {
|
|
10260
10288
|
const f = typeof it === "string" ? it : it.path;
|
|
10261
10289
|
return !/(^|\/)loki_wall_[^/]*$/.test(f) || mine.has(f);
|
|
@@ -10327,7 +10355,7 @@ var init_check_result = __esm(() => {
|
|
|
10327
10355
|
|
|
10328
10356
|
// ../../loki-ts/src/util/receipt_signer.ts
|
|
10329
10357
|
import { createHash as createHash9, randomBytes as randomBytes3, createPrivateKey, createPublicKey as createPublicKey2, generateKeyPairSync, sign, verify as verify2 } from "crypto";
|
|
10330
|
-
import { chmodSync as
|
|
10358
|
+
import { chmodSync as chmodSync5, linkSync, mkdirSync as mkdirSync13, readdirSync as readdirSync14, readFileSync as readFileSync31, renameSync as renameSync9, statSync as statSync15, unlinkSync as unlinkSync5, writeFileSync as writeFileSync16 } from "fs";
|
|
10331
10359
|
import { homedir as homedir8 } from "os";
|
|
10332
10360
|
import { spawnSync as spawnSync2 } from "child_process";
|
|
10333
10361
|
import { dirname as dirname16, join as join38 } from "path";
|
|
@@ -10357,7 +10385,7 @@ function loadSigningKey(generate = true) {
|
|
|
10357
10385
|
if (!given) {
|
|
10358
10386
|
for (const [f, m] of [[file, 384], [dirname16(file), 448]])
|
|
10359
10387
|
if (statSync15(f).mode & 63)
|
|
10360
|
-
|
|
10388
|
+
chmodSync5(f, m);
|
|
10361
10389
|
}
|
|
10362
10390
|
} catch (e) {
|
|
10363
10391
|
if (e.code !== "ENOENT")
|
|
@@ -10510,7 +10538,7 @@ var init_stop_restore = __esm(() => {
|
|
|
10510
10538
|
|
|
10511
10539
|
// ../../loki-ts/src/util/base_guard.ts
|
|
10512
10540
|
import { existsSync as existsSync25, readdirSync as readdirSync15, readFileSync as readFileSync32, readlinkSync, realpathSync as realpathSync17, symlinkSync } from "fs";
|
|
10513
|
-
import { basename as basename13, join as join39, relative as
|
|
10541
|
+
import { basename as basename13, join as join39, relative as relative4, resolve as resolve14, sep as sep11 } from "path";
|
|
10514
10542
|
import { fileURLToPath as fileURLToPath6 } from "url";
|
|
10515
10543
|
function insideAny(p, roots) {
|
|
10516
10544
|
const under = (q) => roots.some((r) => q === r || q.startsWith(r + sep11));
|
|
@@ -10579,7 +10607,7 @@ function depsSeeHead(pkgDir, repoDir) {
|
|
|
10579
10607
|
async function zeroOnBase(cands, baseDir, repoDir, run2, note) {
|
|
10580
10608
|
const zero = [];
|
|
10581
10609
|
for (const c of cands) {
|
|
10582
|
-
const src = join39(repoDir,
|
|
10610
|
+
const src = join39(repoDir, relative4(baseDir, c.cwd));
|
|
10583
10611
|
if (depsSeeHead(src, repoDir))
|
|
10584
10612
|
continue;
|
|
10585
10613
|
for (const d of ["node_modules", ".venv"]) {
|
|
@@ -11483,7 +11511,7 @@ var init_state = __esm(() => {
|
|
|
11483
11511
|
|
|
11484
11512
|
// ../../loki-ts/src/runner/repo_profile.ts
|
|
11485
11513
|
import { spawnSync as spawnSync3 } from "child_process";
|
|
11486
|
-
import { existsSync as existsSync26, lstatSync as lstatSync10, readFileSync as readFileSync33, mkdirSync as mkdirSync14, readdirSync as readdirSync16, renameSync as
|
|
11514
|
+
import { existsSync as existsSync26, lstatSync as lstatSync10, readFileSync as readFileSync33, mkdirSync as mkdirSync14, readdirSync as readdirSync16, renameSync as renameSync10, rmSync as rmSync9, writeFileSync as writeFileSync17 } from "fs";
|
|
11487
11515
|
import { basename as basename14, join as join40, resolve as resolve15, isAbsolute as isAbsolute4 } from "path";
|
|
11488
11516
|
function detectFormatters(repoDir) {
|
|
11489
11517
|
const out2 = [];
|
|
@@ -11673,7 +11701,7 @@ var init_context = __esm(() => {
|
|
|
11673
11701
|
});
|
|
11674
11702
|
|
|
11675
11703
|
// ../../loki-ts/src/util/steer.ts
|
|
11676
|
-
import { appendFileSync as appendFileSync2, closeSync as closeSync8, constants as constants2, fstatSync as fstatSync6, readdirSync as readdirSync17, lstatSync as lstatSync11, mkdirSync as mkdirSync15, linkSync as linkSync2, openSync as openSync8, readFileSync as readFileSync34, readSync as readSync7, renameSync as
|
|
11704
|
+
import { appendFileSync as appendFileSync2, closeSync as closeSync8, constants as constants2, fstatSync as fstatSync6, readdirSync as readdirSync17, lstatSync as lstatSync11, mkdirSync as mkdirSync15, linkSync as linkSync2, openSync as openSync8, readFileSync as readFileSync34, readSync as readSync7, renameSync as renameSync11, statSync as statSync16, lutimesSync, rmSync as rmSync10, unlinkSync as unlinkSync6, writeFileSync as writeFileSync18, existsSync as existsSync27 } from "fs";
|
|
11677
11705
|
import { createHash as createHash11, randomBytes as randomBytes4 } from "crypto";
|
|
11678
11706
|
import { basename as basename15, join as join41 } from "path";
|
|
11679
11707
|
function archiveTo(logs, prefix, src, link = linkSync2, onLinked) {
|
|
@@ -11688,7 +11716,7 @@ function archiveTo(logs, prefix, src, link = linkSync2, onLinked) {
|
|
|
11688
11716
|
if (code !== "EPERM" && code !== "ENOTSUP" && code !== "EXDEV" && code !== "EMLINK")
|
|
11689
11717
|
throw e;
|
|
11690
11718
|
const name2 = `${prefix}-${randomBytes4(4).toString("hex")}.md`;
|
|
11691
|
-
|
|
11719
|
+
renameSync11(src, join41(logs, name2));
|
|
11692
11720
|
onLinked?.(name2);
|
|
11693
11721
|
return name2;
|
|
11694
11722
|
}
|
|
@@ -11780,7 +11808,7 @@ function consumeSteer(repoDir, env = process.env, now2 = () => new Date, sink, h
|
|
|
11780
11808
|
sweepOrphans(logs, stamp2, unapplied, hooks2?.link, now2().getTime());
|
|
11781
11809
|
claimed = join41(logs, `.claim-${process.pid}-${randomBytes4(6).toString("hex")}`);
|
|
11782
11810
|
try {
|
|
11783
|
-
|
|
11811
|
+
renameSync11(f, claimed);
|
|
11784
11812
|
} catch (e) {
|
|
11785
11813
|
claimed = "";
|
|
11786
11814
|
if (e.code === "ENOENT")
|
|
@@ -11803,7 +11831,7 @@ function consumeSteer(repoDir, env = process.env, now2 = () => new Date, sink, h
|
|
|
11803
11831
|
let restored = false;
|
|
11804
11832
|
try {
|
|
11805
11833
|
if (lstatSync11(claimed).isDirectory())
|
|
11806
|
-
|
|
11834
|
+
renameSync11(claimed, f);
|
|
11807
11835
|
else
|
|
11808
11836
|
(hooks2?.link ?? linkSync2)(claimed, f);
|
|
11809
11837
|
restored = true;
|
|
@@ -12398,12 +12426,12 @@ var init_seal_drift = __esm(() => {
|
|
|
12398
12426
|
});
|
|
12399
12427
|
|
|
12400
12428
|
// ../../loki-ts/src/util/spec_file.ts
|
|
12401
|
-
import { isAbsolute as isAbsolute5, join as join43, relative as
|
|
12429
|
+
import { isAbsolute as isAbsolute5, join as join43, relative as relative5 } from "path";
|
|
12402
12430
|
function specReceiptBlock(env) {
|
|
12403
12431
|
const { LOKI_E10_SPEC_PATH: p, LOKI_E10_SPEC_SHA256: sha2 } = env;
|
|
12404
12432
|
if (!p || !sha2)
|
|
12405
12433
|
return {};
|
|
12406
|
-
const rel = isAbsolute5(p) && env.LOKI_E10_REPO_DIR ?
|
|
12434
|
+
const rel = isAbsolute5(p) && env.LOKI_E10_REPO_DIR ? relative5(env.LOKI_E10_REPO_DIR, p) : p;
|
|
12407
12435
|
return { spec: { path: rel, sha256: sha2 } };
|
|
12408
12436
|
}
|
|
12409
12437
|
var SPEC_DIR;
|
|
@@ -12462,9 +12490,9 @@ var init_run_cap = __esm(() => {
|
|
|
12462
12490
|
// ../../loki-ts/src/util/mutation_proof.ts
|
|
12463
12491
|
import { existsSync as existsSync29, mkdirSync as mkdirSync17, mkdtempSync as mkdtempSync3, readFileSync as readFileSync37, rmSync as rmSync11, symlinkSync as symlinkSync2, writeFileSync as writeFileSync20 } from "fs";
|
|
12464
12492
|
import { tmpdir as tmpdir4 } from "os";
|
|
12465
|
-
import { basename as basename16, dirname as dirname17, isAbsolute as isAbsolute6, join as join44, relative as
|
|
12493
|
+
import { basename as basename16, dirname as dirname17, isAbsolute as isAbsolute6, join as join44, relative as relative6 } from "path";
|
|
12466
12494
|
function mutationProof(i) {
|
|
12467
|
-
const rels = i.wallFiles.map((f) => isAbsolute6(f.path) ?
|
|
12495
|
+
const rels = i.wallFiles.map((f) => isAbsolute6(f.path) ? relative6(i.repoDir, f.path) : f.path);
|
|
12468
12496
|
if (rels.length === 0)
|
|
12469
12497
|
return np("no Wall tests");
|
|
12470
12498
|
const tests = rels.flatMap((rel) => {
|
|
@@ -13002,7 +13030,7 @@ Example: test('name', () => { assert.strictEqual(fn(1), 2); }); Run: node --tes
|
|
|
13002
13030
|
import { createHash as createHash15 } from "crypto";
|
|
13003
13031
|
import { appendFileSync as appendFileSync3, copyFileSync as copyFileSync2, existsSync as existsSync31, mkdirSync as mkdirSync18, readFileSync as readFileSync39, rmSync as rmSync13, writeFileSync as writeFileSync21 } from "fs";
|
|
13004
13032
|
import { tmpdir as tmpdir6 } from "os";
|
|
13005
|
-
import { basename as basename18, join as join45, relative as
|
|
13033
|
+
import { basename as basename18, join as join45, relative as relative7 } from "path";
|
|
13006
13034
|
function wallHoldoutRatio(env = process.env) {
|
|
13007
13035
|
if (env["LOKI_WALL_HOLDOUT"]?.trim() === "0")
|
|
13008
13036
|
return 0;
|
|
@@ -13058,7 +13086,7 @@ function stageHoldout(dir, repoDir) {
|
|
|
13058
13086
|
const dest = join45(man.targetDir, `loki_wall_holdout_${i + 1}${f.name.slice(f.name.indexOf("."))}`);
|
|
13059
13087
|
copyFileSync2(src, dest);
|
|
13060
13088
|
put.push(dest);
|
|
13061
|
-
tests.push({ runner: f.runner, path:
|
|
13089
|
+
tests.push({ runner: f.runner, path: relative7(repoDir, dest) });
|
|
13062
13090
|
});
|
|
13063
13091
|
return { tests, missing, cleanup: () => {
|
|
13064
13092
|
for (const p of put)
|
|
@@ -13277,7 +13305,7 @@ var init_load_owner = __esm(() => {
|
|
|
13277
13305
|
});
|
|
13278
13306
|
|
|
13279
13307
|
// ../../loki-ts/src/project_model/package_suite.ts
|
|
13280
|
-
import { isAbsolute as isAbsolute7, join as join47, relative as
|
|
13308
|
+
import { isAbsolute as isAbsolute7, join as join47, relative as relative8 } from "path";
|
|
13281
13309
|
function packageSuiteSpecs(api) {
|
|
13282
13310
|
if (!isMultiRoot(api))
|
|
13283
13311
|
return null;
|
|
@@ -13291,7 +13319,7 @@ function suiteEnv(path) {
|
|
|
13291
13319
|
return path ? { ...plainTestEnv(), PATH: path } : plainTestEnv();
|
|
13292
13320
|
}
|
|
13293
13321
|
function execProves(repoDir, o, owned) {
|
|
13294
|
-
const proofs = o.proofFiles ?? [], rel = (f) => isAbsolute7(f) ?
|
|
13322
|
+
const proofs = o.proofFiles ?? [], rel = (f) => isAbsolute7(f) ? relative8(repoDir, f) : f;
|
|
13295
13323
|
if (!o.wallBaseRed || !proofs.length || !o.changed)
|
|
13296
13324
|
return false;
|
|
13297
13325
|
const wall = new Set(proofs.map(rel)), rest = o.changed.filter((f) => !wall.has(rel(f)));
|
|
@@ -13323,7 +13351,7 @@ ${r.stderr}`);
|
|
|
13323
13351
|
if (cls.result === "not_run")
|
|
13324
13352
|
notProven.add(`not run: ${name} (${cls.reason ?? NO_TESTS_REASON})`);
|
|
13325
13353
|
}
|
|
13326
|
-
const ran2 = checks.some((c) => c.result === "pass" || c.result === "fail"), rel = (f) => isAbsolute7(f) ?
|
|
13354
|
+
const ran2 = checks.some((c) => c.result === "pass" || c.result === "fail"), rel = (f) => isAbsolute7(f) ? relative8(repoDir, f) : f, wallOwn = new Set((opts.proofFiles ?? []).map(rel));
|
|
13327
13355
|
const product = opts.changed?.filter((f) => !wallOwn.has(rel(f)));
|
|
13328
13356
|
const testless = api.packages().filter((p) => !p.commands.test), isRoot = (p) => p.root === "." || p.root === "";
|
|
13329
13357
|
const unowned = (product ?? []).filter((f) => !f.startsWith('"') && !api.packageOf(f)), unprovenFiles = execProves(repoDir, opts, (f) => !api.packageOf(f)) ? [] : unowned;
|
|
@@ -14005,7 +14033,7 @@ var init_select = __esm(() => {
|
|
|
14005
14033
|
});
|
|
14006
14034
|
|
|
14007
14035
|
// ../../loki-ts/src/util/wall_owned.ts
|
|
14008
|
-
import { isAbsolute as isAbsolute8, join as join50, relative as
|
|
14036
|
+
import { isAbsolute as isAbsolute8, join as join50, relative as relative9 } from "path";
|
|
14009
14037
|
function failingLocations(raw2, cwd, repoDir) {
|
|
14010
14038
|
const out2 = raw2.replace(ANSI2, "").replace(/\r\n?/g, `
|
|
14011
14039
|
`), files = new Set;
|
|
@@ -14037,7 +14065,7 @@ function failingLocations(raw2, cwd, repoDir) {
|
|
|
14037
14065
|
}
|
|
14038
14066
|
if (errors2 === 0 || located !== errors2)
|
|
14039
14067
|
return null;
|
|
14040
|
-
return [...files].map((f) =>
|
|
14068
|
+
return [...files].map((f) => relative9(repoDir, isAbsolute8(f) ? f : join50(cwd, f)));
|
|
14041
14069
|
}
|
|
14042
14070
|
function wallOwnedFailure(raw2, cwd, repoDir, wall) {
|
|
14043
14071
|
const locs = failingLocations(raw2, cwd, repoDir);
|
|
@@ -14050,7 +14078,7 @@ var init_wall_owned = __esm(() => {
|
|
|
14050
14078
|
|
|
14051
14079
|
// ../../loki-ts/src/util/app_probe.ts
|
|
14052
14080
|
import { spawnSync as spawnSync6 } from "child_process";
|
|
14053
|
-
import { existsSync as existsSync32, mkdirSync as mkdirSync19, readFileSync as readFileSync42, renameSync as
|
|
14081
|
+
import { existsSync as existsSync32, mkdirSync as mkdirSync19, readFileSync as readFileSync42, renameSync as renameSync12, writeFileSync as writeFileSync22 } from "fs";
|
|
14054
14082
|
import { join as join51 } from "path";
|
|
14055
14083
|
function readJson4(p) {
|
|
14056
14084
|
try {
|
|
@@ -14131,7 +14159,7 @@ async function functionalVerify(opts, url, dir, lokiDir2, timeoutMs) {
|
|
|
14131
14159
|
mkdirSync19(q, { recursive: true });
|
|
14132
14160
|
const tmp = join51(q, `functional-results.json.tmp.${process.pid}`);
|
|
14133
14161
|
writeFileSync22(tmp, JSON.stringify(out2, null, 2));
|
|
14134
|
-
|
|
14162
|
+
renameSync12(tmp, join51(q, "functional-results.json"));
|
|
14135
14163
|
const s = String(out2["functional_status"] ?? "inconclusive");
|
|
14136
14164
|
return res(s === "verified" ? "pass" : s === "failed" ? "fail" : "not_run", `functional_status ${s}`);
|
|
14137
14165
|
}
|
|
@@ -14465,7 +14493,7 @@ var init_retry_class = () => {};
|
|
|
14465
14493
|
|
|
14466
14494
|
// ../../loki-ts/src/project_model/conventions.ts
|
|
14467
14495
|
import { existsSync as existsSync34, readdirSync as readdirSync19, readFileSync as readFileSync44 } from "fs";
|
|
14468
|
-
import { basename as basename22, dirname as dirname21, isAbsolute as isAbsolute9, join as join53, relative as
|
|
14496
|
+
import { basename as basename22, dirname as dirname21, isAbsolute as isAbsolute9, join as join53, relative as relative10, resolve as resolve18 } from "path";
|
|
14469
14497
|
function parseJsonc(text2) {
|
|
14470
14498
|
let out2 = "", i = 0;
|
|
14471
14499
|
while (i < text2.length) {
|
|
@@ -14557,7 +14585,7 @@ function outOfRepoTarget(content) {
|
|
|
14557
14585
|
function nearestPackageRoot(testDir, repoDir, fileName) {
|
|
14558
14586
|
const api = loadProjectApi(repoDir);
|
|
14559
14587
|
if (api)
|
|
14560
|
-
return siteFor(api, repoDir,
|
|
14588
|
+
return siteFor(api, repoDir, relative10(repoDir, join53(testDir, fileName)))?.cwd ?? repoDir;
|
|
14561
14589
|
const shaped = (d) => {
|
|
14562
14590
|
try {
|
|
14563
14591
|
return readdirSync19(d).some((f) => {
|
|
@@ -14623,7 +14651,7 @@ function phantomRepoPaths(content, fileName, testDir, repoDir, planText) {
|
|
|
14623
14651
|
return -1;
|
|
14624
14652
|
};
|
|
14625
14653
|
const strayInTestDir = (out2) => {
|
|
14626
|
-
const first =
|
|
14654
|
+
const first = relative10(testDir, out2).split("/")[0];
|
|
14627
14655
|
return !!first && first !== "__self__" && !existsSync34(join53(testDir, first)) && [pkg, repoDir].some((d) => d !== testDir && existsSync34(join53(d, first)));
|
|
14628
14656
|
};
|
|
14629
14657
|
const scan = (cwd) => {
|
|
@@ -14658,8 +14686,8 @@ function phantomRepoPaths(content, fileName, testDir, repoDir, planText) {
|
|
|
14658
14686
|
return dirname21(args[0]);
|
|
14659
14687
|
const out2 = resolve18(...args);
|
|
14660
14688
|
const first = parts.slice(1).map((a) => /^\s*["'`]([^"'`]*)["'`]\s*$/.exec(a)?.[1]).find((x) => x), viaWalk = !!first && walk.has(parts[0].trim()) && [pkg, repoDir].some((d) => existsSync34(join53(d, first.split("/").filter(Boolean)[0] ?? "\x00")));
|
|
14661
|
-
if (report && (viaWalk || !parts.some((a) => walk.has(a.trim()) || taint.has(a.trim())) && (
|
|
14662
|
-
reports.set(`${ln}|${e}`, { out: out2, rel:
|
|
14689
|
+
if (report && (viaWalk || !parts.some((a) => walk.has(a.trim()) || taint.has(a.trim())) && (relative10(testDir, out2).startsWith("..") || strayInTestDir(out2))) && parts.some((a) => /^\s*["'`]/.test(a)))
|
|
14690
|
+
reports.set(`${ln}|${e}`, { out: out2, rel: relative10(repoDir, out2), tail: viaWalk ? join53(...args.slice(1)) : undefined });
|
|
14663
14691
|
return out2;
|
|
14664
14692
|
};
|
|
14665
14693
|
for (const line2 of walkCode.split(`
|
|
@@ -14929,7 +14957,7 @@ import { spawn as spawn8 } from "child_process";
|
|
|
14929
14957
|
import { createHash as createHash16, randomBytes as randomBytes6 } from "crypto";
|
|
14930
14958
|
import { existsSync as existsSync35, lstatSync as lstatSync13, mkdirSync as mkdirSync21, readdirSync as readdirSync20, readFileSync as readFileSync45, writeFileSync as writeFileSync24 } from "fs";
|
|
14931
14959
|
import { createServer } from "net";
|
|
14932
|
-
import { dirname as dirname23, isAbsolute as isAbsolute10, join as join55, normalize as normalize3, relative as
|
|
14960
|
+
import { dirname as dirname23, isAbsolute as isAbsolute10, join as join55, normalize as normalize3, relative as relative11, sep as sep13 } from "path";
|
|
14933
14961
|
function routeFor(file) {
|
|
14934
14962
|
let r = file.replace(/^(?:.*?\/)?(?:app|pages|src|public)\//, "").replace(/^(?:routes|pages)\//, "");
|
|
14935
14963
|
r = r.replace(/\.(?:html|jsx|tsx|vue|svelte)$/, "").replace(/\/?(?:page|index|\+page)$/, "");
|
|
@@ -15034,7 +15062,7 @@ async function recordE2eMedia(repoDir, runDir, relDir, base, routes, ms, signal)
|
|
|
15034
15062
|
if (e.isDirectory())
|
|
15035
15063
|
walk(full);
|
|
15036
15064
|
else if (e.isFile() && /\.(webm|zip)$/.test(e.name))
|
|
15037
|
-
rels.push(join55(relDir, "e2e",
|
|
15065
|
+
rels.push(join55(relDir, "e2e", relative11(dir, full)));
|
|
15038
15066
|
}
|
|
15039
15067
|
};
|
|
15040
15068
|
walk(join55(dir, "out"));
|
|
@@ -15295,6 +15323,7 @@ var init_pr = __esm(() => {
|
|
|
15295
15323
|
init_safe_git();
|
|
15296
15324
|
init_term_width();
|
|
15297
15325
|
init_run_outputs();
|
|
15326
|
+
init_engine_origin();
|
|
15298
15327
|
init_receipt_surface();
|
|
15299
15328
|
init_yaml_key();
|
|
15300
15329
|
init_outbox();
|
|
@@ -15804,7 +15833,7 @@ var init_deep = __esm(() => {
|
|
|
15804
15833
|
// ../../loki-ts/src/engine10/stages/verify.ts
|
|
15805
15834
|
import { existsSync as existsSync39, mkdtempSync as mkdtempSync10, rmSync as rmSync19 } from "fs";
|
|
15806
15835
|
import { tmpdir as tmpdir11 } from "os";
|
|
15807
|
-
import { isAbsolute as isAbsolute11, join as join60, relative as
|
|
15836
|
+
import { isAbsolute as isAbsolute11, join as join60, relative as relative12 } from "path";
|
|
15808
15837
|
async function runOnce2(cmd2, args, cwd, signal, opts) {
|
|
15809
15838
|
if (!Bun.which(cmd2, { PATH: opts.path ?? process.env["PATH"] ?? "" }))
|
|
15810
15839
|
return { ok: false, missing: true, cut: false, out: "" };
|
|
@@ -15956,7 +15985,7 @@ var CHECK_TIMEOUT_MS = 60000, excerpts, isHold = (c) => isHoldoutCheck(c.name),
|
|
|
15956
15985
|
return r.missing || r.cut ? null : r;
|
|
15957
15986
|
}, base: (f) => {
|
|
15958
15987
|
try {
|
|
15959
|
-
return safeGit(ctx.repoDir, ["show", `${ctx.baseSha}:${
|
|
15988
|
+
return safeGit(ctx.repoDir, ["show", `${ctx.baseSha}:${relative12(ctx.repoDir, join60(cwd, f))}`], { stdio: ["ignore", "pipe", "ignore"] });
|
|
15960
15989
|
} catch {
|
|
15961
15990
|
return null;
|
|
15962
15991
|
}
|
|
@@ -16022,7 +16051,7 @@ var init_verify = __esm(() => {
|
|
|
16022
16051
|
const impacted = ctx.tests.impacted(map, changed);
|
|
16023
16052
|
const changedTestFiles = map.tests.filter((t) => changed.includes(t.path));
|
|
16024
16053
|
const wall = ctx.outputs().wall ?? {};
|
|
16025
|
-
const wallPaths = new Set((wall.files ?? []).map((f) => isAbsolute11(f.path) ?
|
|
16054
|
+
const wallPaths = new Set((wall.files ?? []).map((f) => isAbsolute11(f.path) ? relative12(ctx.repoDir, f.path) : f.path));
|
|
16026
16055
|
const intake = ctx.outputs().intake, repoMap = loadRepoMap(intake?.repomap_ref), relevant2 = ctx.tests.impacted(map, namedFiles(intake?.task ?? "", repoMap));
|
|
16027
16056
|
const harness = map.runners.length === 0 ? harnessRunners(map.runners, repoMap?.files ?? [])[0] : undefined, wallTests = [...map.tests.filter((t) => wallPaths.has(t.path)), ...harness ? [...wallPaths].filter((p) => /[._](?:test|spec)\.[cm]?[jt]sx?$/.test(p) && !map.tests.some((t) => t.path === p)).map((path) => ({ runner: harness, path })) : []];
|
|
16028
16057
|
const tests = failedFirst(dedupeTests([...impacted, ...changedTestFiles, ...wallTests, ...relevant2]), ctx.outputs().verify?.checks);
|
|
@@ -16135,7 +16164,7 @@ ${x}` : c.cmd };
|
|
|
16135
16164
|
import { spawnSync as spawnSync7 } from "child_process";
|
|
16136
16165
|
import { existsSync as existsSync40, mkdirSync as mkdirSync25, mkdtempSync as mkdtempSync11, readFileSync as readFileSync48, readdirSync as readdirSync21, rmSync as rmSync20, writeFileSync as writeFileSync28 } from "fs";
|
|
16137
16166
|
import { tmpdir as tmpdir12 } from "os";
|
|
16138
|
-
import { dirname as dirname26, join as join61, relative as
|
|
16167
|
+
import { dirname as dirname26, join as join61, relative as relative13 } from "path";
|
|
16139
16168
|
|
|
16140
16169
|
class RealBaseTestRunner {
|
|
16141
16170
|
api;
|
|
@@ -16247,7 +16276,7 @@ async function wallAuthor(ctx, signal, retry) {
|
|
|
16247
16276
|
return done({ status: "skipped", data: { size: sz.size, files: [], no_interpreter: true, not_proven: ["Wall skipped: no project test interpreter"] }, reason: "Wall skipped: no project test interpreter" });
|
|
16248
16277
|
const tree = prior.intake?.tree;
|
|
16249
16278
|
const repomapText = repoMapText(ctx.repoDir, tree, repomapRef, WALL_MAP_MAX_LINES);
|
|
16250
|
-
const targetDir = wallTargetDir(ctx.repoDir, existingTests), pkg = loadProjectApi(ctx.repoDir)?.packageOf(`${
|
|
16279
|
+
const targetDir = wallTargetDir(ctx.repoDir, existingTests), pkg = loadProjectApi(ctx.repoDir)?.packageOf(`${relative13(ctx.repoDir, targetDir)}/x`);
|
|
16251
16280
|
const conv2 = readPackageConventions(join61(ctx.repoDir, pkg?.root ?? "."), pkg?.runner ?? null);
|
|
16252
16281
|
const cwd = mkdtempSync11(join61(tmpdir12(), "loki-e15-wall-"));
|
|
16253
16282
|
const wm = wallManifestFor(ctx.repoDir, tree, task);
|
|
@@ -16256,7 +16285,7 @@ async function wallAuthor(ctx, signal, retry) {
|
|
|
16256
16285
|
const model = retry?.model ?? wallFirstModel(sz.size), iterationId = `${ctx.runId}-wall${retry?.suffix ?? ""}`;
|
|
16257
16286
|
const session = await ctx.sessions.run({
|
|
16258
16287
|
stage: "wall",
|
|
16259
|
-
brief: buildWallBrief(task, repomapText, runners, !!wm, conventionsBrief(conv2), unitSpec()?.acceptance ?? [],
|
|
16288
|
+
brief: buildWallBrief(task, repomapText, runners, !!wm, conventionsBrief(conv2), unitSpec()?.acceptance ?? [], relative13(ctx.repoDir, targetDir)),
|
|
16260
16289
|
tier: "development",
|
|
16261
16290
|
model,
|
|
16262
16291
|
iterationId,
|
|
@@ -16270,7 +16299,7 @@ async function wallAuthor(ctx, signal, retry) {
|
|
|
16270
16299
|
}
|
|
16271
16300
|
const planText = typeof prior.plan?.plan === "string" ? prior.plan.plan : null, repoFiles = repoMap?.files ?? [];
|
|
16272
16301
|
const oor = () => readdirSync21(cwd).filter((f) => f.startsWith(WALL_PREFIX)).flatMap((name) => {
|
|
16273
|
-
const text2 = readFileSync48(join61(cwd, name), "utf8"), why = outOfRepoTarget(text2) ?? phantomReason(phantomRepoPaths(text2, name, targetDir, ctx.repoDir, planText), repoFiles,
|
|
16302
|
+
const text2 = readFileSync48(join61(cwd, name), "utf8"), why = outOfRepoTarget(text2) ?? phantomReason(phantomRepoPaths(text2, name, targetDir, ctx.repoDir, planText), repoFiles, relative13(ctx.repoDir, targetDir), pkg?.root ?? "");
|
|
16274
16303
|
return why ? [{ name, why }] : [];
|
|
16275
16304
|
});
|
|
16276
16305
|
const bad1 = oor();
|
|
@@ -16318,13 +16347,13 @@ function* installCore(ctx, a, baseDir, opts) {
|
|
|
16318
16347
|
sealedFiles.push({ path: dest, sha256: sha2562(content) });
|
|
16319
16348
|
readOnlyFiles.push({ path: dest, content });
|
|
16320
16349
|
if (runner)
|
|
16321
|
-
wallTests.push({ runner, path:
|
|
16350
|
+
wallTests.push({ runner, path: relative13(ctx.repoDir, dest) });
|
|
16322
16351
|
}
|
|
16323
16352
|
ctx.wallSealed = true;
|
|
16324
16353
|
ctx.emit("wall.sealed", "wall", { files: sealedFiles, ...a.manifestSha256 ? { manifest_sha256: a.manifestSha256 } : {} });
|
|
16325
16354
|
const baseRunner = opts.baseRunner ?? new RealBaseTestRunner, baseRun = { pass: 0, fail: 0, not_run: discarded.length }, notRunFiles = [];
|
|
16326
16355
|
for (const f of sealedFiles) {
|
|
16327
|
-
const rel =
|
|
16356
|
+
const rel = relative13(ctx.repoDir, f.path);
|
|
16328
16357
|
if (!wallTests.some((t) => t.path === rel))
|
|
16329
16358
|
notRunFiles.push({ file: rel, reason: NO_RUNNER_REASON });
|
|
16330
16359
|
}
|
|
@@ -16407,10 +16436,10 @@ var init_wall = __esm(() => {
|
|
|
16407
16436
|
});
|
|
16408
16437
|
|
|
16409
16438
|
// ../../loki-ts/src/e10ext/discard.ts
|
|
16410
|
-
import { chmodSync as
|
|
16411
|
-
import { dirname as dirname27, join as join62, relative as
|
|
16439
|
+
import { chmodSync as chmodSync6, closeSync as closeSync9, lstatSync as lstatSync16, mkdirSync as mkdirSync26, openSync as openSync9, readFileSync as readFileSync49, realpathSync as realpathSync23, rmdirSync, unlinkSync as unlinkSync7, writeFileSync as writeFileSync29 } from "fs";
|
|
16440
|
+
import { dirname as dirname27, join as join62, relative as relative14, sep as sep14 } from "path";
|
|
16412
16441
|
function safeRestore(repoDir, f, want, mode) {
|
|
16413
|
-
const root = realpathSync23(repoDir), fp = join62(root, f), rel =
|
|
16442
|
+
const root = realpathSync23(repoDir), fp = join62(root, f), rel = relative14(root, dirname27(fp));
|
|
16414
16443
|
if (rel.startsWith(".."))
|
|
16415
16444
|
throw new Error("outside repo");
|
|
16416
16445
|
let cur = root;
|
|
@@ -16433,7 +16462,7 @@ function safeRestore(repoDir, f, want, mode) {
|
|
|
16433
16462
|
st = null;
|
|
16434
16463
|
}
|
|
16435
16464
|
if (st?.isFile() && readFileSync49(fp).equals(want)) {
|
|
16436
|
-
|
|
16465
|
+
chmodSync6(fp, mode);
|
|
16437
16466
|
return;
|
|
16438
16467
|
}
|
|
16439
16468
|
if (st) {
|
|
@@ -16448,7 +16477,7 @@ function safeRestore(repoDir, f, want, mode) {
|
|
|
16448
16477
|
} finally {
|
|
16449
16478
|
closeSync9(fd);
|
|
16450
16479
|
}
|
|
16451
|
-
|
|
16480
|
+
chmodSync6(fp, mode);
|
|
16452
16481
|
}
|
|
16453
16482
|
function alreadySatisfied(o) {
|
|
16454
16483
|
return o.intake?.already_satisfied === true || o.implement?.exit === "already_done";
|
|
@@ -16661,7 +16690,7 @@ var init_colors = __esm(() => {
|
|
|
16661
16690
|
});
|
|
16662
16691
|
|
|
16663
16692
|
// ../../loki-ts/src/util/run_summary.ts
|
|
16664
|
-
import { existsSync as existsSync42, mkdirSync as mkdirSync28, readFileSync as readFileSync51, renameSync as
|
|
16693
|
+
import { existsSync as existsSync42, mkdirSync as mkdirSync28, readFileSync as readFileSync51, renameSync as renameSync13, statSync as statSync20, writeFileSync as writeFileSync30 } from "fs";
|
|
16665
16694
|
import { join as join65 } from "path";
|
|
16666
16695
|
function readRiskRecord(repoDir, sinceMs = 0) {
|
|
16667
16696
|
try {
|
|
@@ -17021,7 +17050,7 @@ var init_contract = __esm(() => {
|
|
|
17021
17050
|
|
|
17022
17051
|
// ../../loki-ts/src/features/speed/seal_group.ts
|
|
17023
17052
|
import { createHash as createHash19 } from "crypto";
|
|
17024
|
-
import { existsSync as existsSync45, mkdirSync as mkdirSync30, readdirSync as readdirSync23, readFileSync as readFileSync54, renameSync as
|
|
17053
|
+
import { existsSync as existsSync45, mkdirSync as mkdirSync30, readdirSync as readdirSync23, readFileSync as readFileSync54, renameSync as renameSync14, statSync as statSync21, writeFileSync as writeFileSync32 } from "fs";
|
|
17025
17054
|
import { dirname as dirname30, join as join68 } from "path";
|
|
17026
17055
|
function sealGroup(runDir, rh) {
|
|
17027
17056
|
const manifestPath = join68(runDir, "group", "manifest.json");
|
|
@@ -17408,7 +17437,7 @@ var init_supply_guard = __esm(() => {
|
|
|
17408
17437
|
// ../../loki-ts/src/engine10/stages/seal.ts
|
|
17409
17438
|
import { createHash as createHash20 } from "crypto";
|
|
17410
17439
|
import { existsSync as existsSync47, readdirSync as readdirSync24, mkdirSync as mkdirSync31, readFileSync as readFileSync56 } from "fs";
|
|
17411
|
-
import { basename as basename26, isAbsolute as isAbsolute13, join as join70, relative as
|
|
17440
|
+
import { basename as basename26, isAbsolute as isAbsolute13, join as join70, relative as relative15 } from "path";
|
|
17412
17441
|
function receiptSha256(r) {
|
|
17413
17442
|
const { verification: _v, receipt_sha256: _h, ...body } = r;
|
|
17414
17443
|
return sha2562(canonicalJson(body));
|
|
@@ -17483,7 +17512,7 @@ function renderReceiptMd(r) {
|
|
|
17483
17512
|
`);
|
|
17484
17513
|
}
|
|
17485
17514
|
var SIGNING_UNAVAILABLE = "receipt signing unavailable (no usable signing key: invalid key or unwritable ~/.loki/keys)", AGENT_ONLY_REASON = "only agent-authored tests executed (no agent-independent proof)", WALL_GREEN_ON_BASE_REASON = "Wall green on base: no Wall test discriminates the change", EXCLUDE_LOKI = ":(exclude).loki", sha2562 = (s) => createHash20("sha256").update(s).digest("hex"), str4 = (v) => typeof v === "string" && v !== "" ? v : null, strs2 = (v) => Array.isArray(v) ? v.filter((x) => typeof x === "string" && x !== "") : [], g = (ctx) => (a) => git4(ctx, a), receiptRel = (ctx) => {
|
|
17486
|
-
const r =
|
|
17515
|
+
const r = relative15(ctx.repoDir, join70(ctx.runDir, "receipt.json"));
|
|
17487
17516
|
return r.startsWith("..") || isAbsolute13(r) ? `.loki/runs/${ctx.runId}/receipt.json` : r;
|
|
17488
17517
|
}, commitStage, wallGreenOnBaseOf = (o) => {
|
|
17489
17518
|
const b = o.wall?.base_run ?? {};
|
|
@@ -17913,7 +17942,7 @@ var init_keys_cmd = __esm(() => {
|
|
|
17913
17942
|
});
|
|
17914
17943
|
|
|
17915
17944
|
// ../../loki-ts/src/engine10/verify_cmd.ts
|
|
17916
|
-
import { existsSync as existsSync49, readFileSync as readFileSync58, renameSync as
|
|
17945
|
+
import { existsSync as existsSync49, readFileSync as readFileSync58, renameSync as renameSync15, statSync as statSync24, writeFileSync as writeFileSync34 } from "fs";
|
|
17917
17946
|
import { basename as basename28, dirname as dirname33, join as join72 } from "path";
|
|
17918
17947
|
import { createHash as createHash21, createPublicKey as createPublicKey4, verify as verify4 } from "crypto";
|
|
17919
17948
|
function pubFor(kid, given) {
|