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.
Files changed (69) hide show
  1. package/SKILL.md +2 -2
  2. package/VERSION +1 -1
  3. package/dashboard/__init__.py +1 -1
  4. package/docs/CLI-REFERENCE.md +1 -1
  5. package/docs/INSTALLATION.md +1 -1
  6. package/docs/v10/ENGINE.md +1 -1
  7. package/docs/v10/FAILURE-CLASSES.md +11 -1
  8. package/loki-ts/dist/loki.js +1120 -1119
  9. package/mcp/__init__.py +1 -1
  10. package/package.json +2 -2
  11. package/packages/control-plane/dist/server.js +161 -132
  12. package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
  13. package/web-app/dist/assets/{AdminPage-TvrgrZuw.js → AdminPage-C9tNiCcc.js} +1 -1
  14. package/web-app/dist/assets/{Avatar-Bb4nNhFM.js → Avatar-COiV6fM3.js} +1 -1
  15. package/web-app/dist/assets/{Badge-HJfuedzY.js → Badge-Dq_JTyN7.js} +1 -1
  16. package/web-app/dist/assets/{Button-BFyEBTEH.js → Button-bcJTak6K.js} +1 -1
  17. package/web-app/dist/assets/{CockpitPage-cRbFng0Y.js → CockpitPage-ChCKEp5R.js} +1 -1
  18. package/web-app/dist/assets/{ComparePage-BDWvRPJH.js → ComparePage-CaMJUHaJ.js} +1 -1
  19. package/web-app/dist/assets/{ErrorBoundary-BFB3B6qS.js → ErrorBoundary-CNSBZ9EN.js} +1 -1
  20. package/web-app/dist/assets/{EvidenceReceiptPanel-DfPpa99E.js → EvidenceReceiptPanel-EvQGLfKn.js} +1 -1
  21. package/web-app/dist/assets/{GitHubIssuesPanel-Cgg-TamR.js → GitHubIssuesPanel-Da8MmkID.js} +1 -1
  22. package/web-app/dist/assets/{GitHubPRsPanel-DXlznNaT.js → GitHubPRsPanel-BLC_Mdhw.js} +1 -1
  23. package/web-app/dist/assets/{HomePage-RDqLk0LD.js → HomePage-DuXY41X0.js} +2 -2
  24. package/web-app/dist/assets/{LoginPage-Dxhe9oga.js → LoginPage-CE1oWvhQ.js} +1 -1
  25. package/web-app/dist/assets/{MagicPage-HANTah--.js → MagicPage-CWpwPVjk.js} +1 -1
  26. package/web-app/dist/assets/{MetricsPage-BxjoBHhg.js → MetricsPage-Diz2q7NV.js} +1 -1
  27. package/web-app/dist/assets/{NotFoundPage-Bn3V3qWo.js → NotFoundPage-DFGmDRp7.js} +1 -1
  28. package/web-app/dist/assets/{ProjectPage-D3KYFM_N.js → ProjectPage-C1CAu7Zs.js} +3 -3
  29. package/web-app/dist/assets/{ProjectsPage-DV6_tZIm.js → ProjectsPage-DsIToenk.js} +1 -1
  30. package/web-app/dist/assets/{SettingsPage-JtbU2vOp.js → SettingsPage-IF2tqAKU.js} +1 -1
  31. package/web-app/dist/assets/{ShowcasePage-DuB5e7_g.js → ShowcasePage-CL9I_BZR.js} +1 -1
  32. package/web-app/dist/assets/{SystemSettingsPage-BU3kLT-C.js → SystemSettingsPage-C97oKK-3.js} +1 -1
  33. package/web-app/dist/assets/{TeamsPage-B5etAmaN.js → TeamsPage-B_jOlRcz.js} +1 -1
  34. package/web-app/dist/assets/{TemplatesPage-sM2zXEt-.js → TemplatesPage-BNlPb6TK.js} +1 -1
  35. package/web-app/dist/assets/{TerminalOutput-DO6_1_OF.js → TerminalOutput-B_zJMmL2.js} +1 -1
  36. package/web-app/dist/assets/{activity-D_wZmvHi.js → activity-D_qo5h6S.js} +1 -1
  37. package/web-app/dist/assets/{bell-CVimd2CM.js → bell-C6NAzfG0.js} +1 -1
  38. package/web-app/dist/assets/{bot-BKqzjwM8.js → bot-DzFRVWbn.js} +1 -1
  39. package/web-app/dist/assets/{check-Cn1hwqkh.js → check-DCq2Kg1q.js} +1 -1
  40. package/web-app/dist/assets/{chevron-left-DB9zn9HI.js → chevron-left-7MRhbpMY.js} +1 -1
  41. package/web-app/dist/assets/{circle-alert-BzFzXBcE.js → circle-alert-CXWGyJEP.js} +1 -1
  42. package/web-app/dist/assets/{clock-CVVX5Ua9.js → clock-Cy6YnZeN.js} +1 -1
  43. package/web-app/dist/assets/{cloud-DiI7PVHH.js → cloud-Tk1vP19-.js} +1 -1
  44. package/web-app/dist/assets/{code-xml-BqlhbmzB.js → code-xml-DPikdIPq.js} +1 -1
  45. package/web-app/dist/assets/{database-DgseRvlB.js → database-Dy15C-V-.js} +1 -1
  46. package/web-app/dist/assets/{dollar-sign-BAT5CB0s.js → dollar-sign-DxaAhsv9.js} +1 -1
  47. package/web-app/dist/assets/{file-code-corner-C28U8mha.js → file-code-corner-pXG2KIiE.js} +1 -1
  48. package/web-app/dist/assets/{file-plus-BHpkgmZD.js → file-plus-D-SqpglA.js} +1 -1
  49. package/web-app/dist/assets/{globe-efHzOFvw.js → globe-De1IvwPY.js} +1 -1
  50. package/web-app/dist/assets/{hammer-BNj9Z8wQ.js → hammer-DHZLCeg3.js} +1 -1
  51. package/web-app/dist/assets/{index-DrlVp90a.js → index-U2Lna7v5.js} +3 -3
  52. package/web-app/dist/assets/{layers-SnxbBdfu.js → layers-DLSVstyz.js} +1 -1
  53. package/web-app/dist/assets/{loader-circle-CpbdyIIE.js → loader-circle-Cwwq3oPR.js} +1 -1
  54. package/web-app/dist/assets/{lock-B9Mcva56.js → lock-DOGahFMy.js} +1 -1
  55. package/web-app/dist/assets/{package-BBjAd_UN.js → package-qNDtTB48.js} +1 -1
  56. package/web-app/dist/assets/{plus-ej-ppzKQ.js → plus-B6wdeepB.js} +1 -1
  57. package/web-app/dist/assets/{refresh-cw-BXbsk51e.js → refresh-cw-NEZY65js.js} +1 -1
  58. package/web-app/dist/assets/{rotate-ccw-Cb4X8EVi.js → rotate-ccw-RrbLLUZK.js} +1 -1
  59. package/web-app/dist/assets/{scroll-text-DCb61Xlz.js → scroll-text-UU7LGA_w.js} +1 -1
  60. package/web-app/dist/assets/{server-BZhPvvap.js → server-B2i_4Qni.js} +1 -1
  61. package/web-app/dist/assets/{shield-alert-DbWTSwyQ.js → shield-alert-DY8lF82-.js} +1 -1
  62. package/web-app/dist/assets/{thumbs-up-D5g0RmUD.js → thumbs-up-BUzzp-bi.js} +1 -1
  63. package/web-app/dist/assets/{trash-2-BMXU1ub4.js → trash-2-D52r8NKg.js} +1 -1
  64. package/web-app/dist/assets/{trending-down-CIRdrfaH.js → trending-down-Re5Duvv1.js} +1 -1
  65. package/web-app/dist/assets/{trending-up-BSwU7Axb.js → trending-up-CpUvIPYj.js} +1 -1
  66. package/web-app/dist/assets/{upload-CwgdnNp1.js → upload-CB9pWAxp.js} +1 -1
  67. package/web-app/dist/assets/{usePolling-BciPnllz.js → usePolling-CSuJGfcl.js} +1 -1
  68. package/web-app/dist/assets/{user-umWJhl16.js → user-DglqqRFd.js} +1 -1
  69. 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
- var readRepoMapCache = (dir, tree) => readJson3(resolve8(dir, `repomap2-${tree}.json`), isRepoMap);
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 renameSync4, writeFileSync as writeFileSync9 } from "fs";
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 renameSync5,
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
- renameSync5(tmp, target);
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
- renameSync5(tmp, target);
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 renameSync6, rmSync as rmSync6, writeFileSync as writeFileSync13 } from "fs";
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
- renameSync6(tmp, target);
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 = relative(realpathSync15(root), realpathSync15(p));
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 renameSync7, rmSync as rmSync8, writeFileSync as writeFileSync15 } from "fs";
9445
- import { basename as basename12, dirname as dirname15, isAbsolute as isAbsolute3, join as join37, relative as relative2 } from "path";
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 = relative2(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]));
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
- renameSync7(`${p}.tmp`, p);
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 = relative2(realpathSync16(repoDir), realpathSync16(p));
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) => [relative2(repoDir, w.path), w.sha256]));
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) ? relative2(repoDir, p) : 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 chmodSync4, linkSync, mkdirSync as mkdirSync13, readdirSync as readdirSync14, readFileSync as readFileSync31, renameSync as renameSync8, statSync as statSync15, unlinkSync as unlinkSync5, writeFileSync as writeFileSync16 } from "fs";
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
- chmodSync4(f, m);
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 relative3, resolve as resolve14, sep as sep11 } from "path";
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, relative3(baseDir, c.cwd));
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 renameSync9, rmSync as rmSync9, writeFileSync as writeFileSync17 } from "fs";
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 renameSync10, statSync as statSync16, lutimesSync, rmSync as rmSync10, unlinkSync as unlinkSync6, writeFileSync as writeFileSync18, existsSync as existsSync27 } from "fs";
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
- renameSync10(src, join41(logs, name2));
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
- renameSync10(f, claimed);
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
- renameSync10(claimed, f);
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 relative4 } from "path";
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 ? relative4(env.LOKI_E10_REPO_DIR, p) : p;
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 relative5 } from "path";
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) ? relative5(i.repoDir, f.path) : 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 relative6 } from "path";
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: relative6(repoDir, dest) });
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 relative7 } from "path";
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) ? relative7(repoDir, f) : 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) ? relative7(repoDir, f) : f, wallOwn = new Set((opts.proofFiles ?? []).map(rel));
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 relative8 } from "path";
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) => relative8(repoDir, isAbsolute8(f) ? f : join50(cwd, 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 renameSync11, writeFileSync as writeFileSync22 } from "fs";
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
- renameSync11(tmp, join51(q, "functional-results.json"));
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 relative9, resolve as resolve18 } from "path";
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, relative9(repoDir, join53(testDir, fileName)))?.cwd ?? 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 = relative9(testDir, out2).split("/")[0];
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())) && (relative9(testDir, out2).startsWith("..") || strayInTestDir(out2))) && parts.some((a) => /^\s*["'`]/.test(a)))
14662
- reports.set(`${ln}|${e}`, { out: out2, rel: relative9(repoDir, out2), tail: viaWalk ? join53(...args.slice(1)) : undefined });
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 relative10, sep as sep13 } from "path";
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", relative10(dir, full)));
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 relative11 } from "path";
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}:${relative11(ctx.repoDir, join60(cwd, f))}`], { stdio: ["ignore", "pipe", "ignore"] });
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) ? relative11(ctx.repoDir, f.path) : 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 relative12 } from "path";
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(`${relative12(ctx.repoDir, targetDir)}/x`);
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 ?? [], relative12(ctx.repoDir, targetDir)),
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, relative12(ctx.repoDir, targetDir), pkg?.root ?? "");
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: relative12(ctx.repoDir, dest) });
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 = relative12(ctx.repoDir, f.path);
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 chmodSync5, 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";
16411
- import { dirname as dirname27, join as join62, relative as relative13, sep as sep14 } from "path";
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 = relative13(root, dirname27(fp));
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
- chmodSync5(fp, mode);
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
- chmodSync5(fp, mode);
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 renameSync12, statSync as statSync20, writeFileSync as writeFileSync30 } from "fs";
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 renameSync13, statSync as statSync21, writeFileSync as writeFileSync32 } from "fs";
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 relative14 } from "path";
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 = relative14(ctx.repoDir, join70(ctx.runDir, "receipt.json"));
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 renameSync14, statSync as statSync24, writeFileSync as writeFileSync34 } from "fs";
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) {