@inerrata-corporation/errata 2.0.17-dev.3571 → 2.0.17-dev.3576

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/errata.mjs CHANGED
@@ -960,7 +960,7 @@ function lemma(token) {
960
960
  }
961
961
  return token;
962
962
  }
963
- function tokenize(text, resolve9) {
963
+ function tokenize(text, resolve10) {
964
964
  const matches = text.normalize("NFC").toLowerCase().match(TOKEN_RE) ?? [];
965
965
  const out2 = /* @__PURE__ */ new Set();
966
966
  for (const raw2 of matches) {
@@ -970,7 +970,7 @@ function tokenize(text, resolve9) {
970
970
  out2.add(token);
971
971
  continue;
972
972
  }
973
- const canonical = resolve9(token);
973
+ const canonical = resolve10(token);
974
974
  out2.add(canonical ?? lemma(token));
975
975
  }
976
976
  return [...out2].sort();
@@ -2302,8 +2302,8 @@ var init_regexes = __esm({
2302
2302
  _emoji = `^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`;
2303
2303
  ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;
2304
2304
  ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;
2305
- mac = (delimiter2) => {
2306
- const escapedDelim = escapeRegex(delimiter2 ?? ":");
2305
+ mac = (delimiter3) => {
2306
+ const escapedDelim = escapeRegex(delimiter3 ?? ":");
2307
2307
  return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);
2308
2308
  };
2309
2309
  cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/;
@@ -17754,8 +17754,8 @@ ${endMarker}
17754
17754
  const startM = current.match(START_RE);
17755
17755
  const endM = current.match(END_RE);
17756
17756
  if (!startM || !endM || startM.index === void 0 || endM.index === void 0) {
17757
- const sep5 = current.endsWith("\n") ? "" : "\n";
17758
- writeFileSync(filePath, `${current}${sep5}
17757
+ const sep6 = current.endsWith("\n") ? "" : "\n";
17758
+ writeFileSync(filePath, `${current}${sep6}
17759
17759
  ${blockText}`, "utf8");
17760
17760
  return { kind: "created", newHash };
17761
17761
  }
@@ -36918,13 +36918,13 @@ async function Module2(moduleArg = {}) {
36918
36918
  }
36919
36919
  readAsync = /* @__PURE__ */ __name(async (url2) => {
36920
36920
  if (isFileURI(url2)) {
36921
- return new Promise((resolve9, reject) => {
36921
+ return new Promise((resolve10, reject) => {
36922
36922
  var xhr = new XMLHttpRequest();
36923
36923
  xhr.open("GET", url2, true);
36924
36924
  xhr.responseType = "arraybuffer";
36925
36925
  xhr.onload = () => {
36926
36926
  if (xhr.status == 200 || xhr.status == 0 && xhr.response) {
36927
- resolve9(xhr.response);
36927
+ resolve10(xhr.response);
36928
36928
  return;
36929
36929
  }
36930
36930
  reject(xhr.status);
@@ -37120,9 +37120,9 @@ async function Module2(moduleArg = {}) {
37120
37120
  __name(receiveInstantiationResult, "receiveInstantiationResult");
37121
37121
  var info2 = getWasmImports();
37122
37122
  if (Module["instantiateWasm"]) {
37123
- return new Promise((resolve9, reject) => {
37123
+ return new Promise((resolve10, reject) => {
37124
37124
  Module["instantiateWasm"](info2, (mod, inst) => {
37125
- resolve9(receiveInstance(mod, inst));
37125
+ resolve10(receiveInstance(mod, inst));
37126
37126
  });
37127
37127
  });
37128
37128
  }
@@ -38453,8 +38453,8 @@ async function Module2(moduleArg = {}) {
38453
38453
  if (runtimeInitialized) {
38454
38454
  moduleRtn = Module;
38455
38455
  } else {
38456
- moduleRtn = new Promise((resolve9, reject) => {
38457
- readyPromiseResolve = resolve9;
38456
+ moduleRtn = new Promise((resolve10, reject) => {
38457
+ readyPromiseResolve = resolve10;
38458
38458
  readyPromiseReject = reject;
38459
38459
  });
38460
38460
  }
@@ -43780,7 +43780,7 @@ async function findStaleFiles(store, rootPath, workspaceId2) {
43780
43780
  }
43781
43781
  if (++scanned % SCAN_YIELD_EVERY === 0) {
43782
43782
  check2();
43783
- await new Promise((resolve9) => setImmediate(resolve9));
43783
+ await new Promise((resolve10) => setImmediate(resolve10));
43784
43784
  }
43785
43785
  }
43786
43786
  check2();
@@ -56619,9 +56619,9 @@ var require_dispatcher_base = __commonJS({
56619
56619
  }
56620
56620
  close(callback) {
56621
56621
  if (callback === void 0) {
56622
- return new Promise((resolve9, reject) => {
56622
+ return new Promise((resolve10, reject) => {
56623
56623
  this.close((err2, data) => {
56624
- return err2 ? reject(err2) : resolve9(data);
56624
+ return err2 ? reject(err2) : resolve10(data);
56625
56625
  });
56626
56626
  });
56627
56627
  }
@@ -56659,12 +56659,12 @@ var require_dispatcher_base = __commonJS({
56659
56659
  err2 = null;
56660
56660
  }
56661
56661
  if (callback === void 0) {
56662
- return new Promise((resolve9, reject) => {
56662
+ return new Promise((resolve10, reject) => {
56663
56663
  this.destroy(err2, (err3, data) => {
56664
56664
  return err3 ? (
56665
56665
  /* istanbul ignore next: should never error */
56666
56666
  reject(err3)
56667
- ) : resolve9(data);
56667
+ ) : resolve10(data);
56668
56668
  });
56669
56669
  });
56670
56670
  }
@@ -58931,8 +58931,8 @@ var require_util2 = __commonJS({
58931
58931
  function createDeferredPromise() {
58932
58932
  let res;
58933
58933
  let rej;
58934
- const promise2 = new Promise((resolve9, reject) => {
58935
- res = resolve9;
58934
+ const promise2 = new Promise((resolve10, reject) => {
58935
+ res = resolve10;
58936
58936
  rej = reject;
58937
58937
  });
58938
58938
  return { promise: promise2, resolve: res, reject: rej };
@@ -61073,12 +61073,12 @@ upgrade: ${upgrade}\r
61073
61073
  cb();
61074
61074
  }
61075
61075
  }
61076
- const waitForDrain = () => new Promise((resolve9, reject) => {
61076
+ const waitForDrain = () => new Promise((resolve10, reject) => {
61077
61077
  assert2(callback === null);
61078
61078
  if (socket[kError]) {
61079
61079
  reject(socket[kError]);
61080
61080
  } else {
61081
- callback = resolve9;
61081
+ callback = resolve10;
61082
61082
  }
61083
61083
  });
61084
61084
  socket.on("close", onDrain).on("drain", onDrain);
@@ -61715,12 +61715,12 @@ var require_client_h2 = __commonJS({
61715
61715
  cb();
61716
61716
  }
61717
61717
  }
61718
- const waitForDrain = () => new Promise((resolve9, reject) => {
61718
+ const waitForDrain = () => new Promise((resolve10, reject) => {
61719
61719
  assert2(callback === null);
61720
61720
  if (socket[kError]) {
61721
61721
  reject(socket[kError]);
61722
61722
  } else {
61723
- callback = resolve9;
61723
+ callback = resolve10;
61724
61724
  }
61725
61725
  });
61726
61726
  h2stream.on("close", onDrain).on("drain", onDrain);
@@ -62197,16 +62197,16 @@ var require_client = __commonJS({
62197
62197
  return this[kNeedDrain] < 2;
62198
62198
  }
62199
62199
  async [kClose]() {
62200
- return new Promise((resolve9) => {
62200
+ return new Promise((resolve10) => {
62201
62201
  if (this[kSize]) {
62202
- this[kClosedResolve] = resolve9;
62202
+ this[kClosedResolve] = resolve10;
62203
62203
  } else {
62204
- resolve9(null);
62204
+ resolve10(null);
62205
62205
  }
62206
62206
  });
62207
62207
  }
62208
62208
  async [kDestroy](err2) {
62209
- return new Promise((resolve9) => {
62209
+ return new Promise((resolve10) => {
62210
62210
  const requests = this[kQueue].splice(this[kPendingIdx]);
62211
62211
  for (let i2 = 0; i2 < requests.length; i2++) {
62212
62212
  const request = requests[i2];
@@ -62217,7 +62217,7 @@ var require_client = __commonJS({
62217
62217
  this[kClosedResolve]();
62218
62218
  this[kClosedResolve] = null;
62219
62219
  }
62220
- resolve9(null);
62220
+ resolve10(null);
62221
62221
  };
62222
62222
  if (this[kHTTPContext]) {
62223
62223
  this[kHTTPContext].destroy(err2, callback);
@@ -62268,7 +62268,7 @@ var require_client = __commonJS({
62268
62268
  });
62269
62269
  }
62270
62270
  try {
62271
- const socket = await new Promise((resolve9, reject) => {
62271
+ const socket = await new Promise((resolve10, reject) => {
62272
62272
  client[kConnector]({
62273
62273
  host,
62274
62274
  hostname: hostname3,
@@ -62280,7 +62280,7 @@ var require_client = __commonJS({
62280
62280
  if (err2) {
62281
62281
  reject(err2);
62282
62282
  } else {
62283
- resolve9(socket2);
62283
+ resolve10(socket2);
62284
62284
  }
62285
62285
  });
62286
62286
  });
@@ -62616,8 +62616,8 @@ var require_pool_base = __commonJS({
62616
62616
  if (this[kQueue].isEmpty()) {
62617
62617
  await Promise.all(this[kClients].map((c) => c.close()));
62618
62618
  } else {
62619
- await new Promise((resolve9) => {
62620
- this[kClosedResolve] = resolve9;
62619
+ await new Promise((resolve10) => {
62620
+ this[kClosedResolve] = resolve10;
62621
62621
  });
62622
62622
  }
62623
62623
  }
@@ -63832,7 +63832,7 @@ var require_readable = __commonJS({
63832
63832
  if (this._readableState.closeEmitted) {
63833
63833
  return null;
63834
63834
  }
63835
- return await new Promise((resolve9, reject) => {
63835
+ return await new Promise((resolve10, reject) => {
63836
63836
  if (this[kContentLength] > limit) {
63837
63837
  this.destroy(new AbortError());
63838
63838
  }
@@ -63845,7 +63845,7 @@ var require_readable = __commonJS({
63845
63845
  if (signal?.aborted) {
63846
63846
  reject(signal.reason ?? new AbortError());
63847
63847
  } else {
63848
- resolve9(null);
63848
+ resolve10(null);
63849
63849
  }
63850
63850
  }).on("error", noop).on("data", function(chunk) {
63851
63851
  limit -= chunk.length;
@@ -63864,7 +63864,7 @@ var require_readable = __commonJS({
63864
63864
  }
63865
63865
  async function consume(stream, type) {
63866
63866
  assert2(!stream[kConsume]);
63867
- return new Promise((resolve9, reject) => {
63867
+ return new Promise((resolve10, reject) => {
63868
63868
  if (isUnusable(stream)) {
63869
63869
  const rState = stream._readableState;
63870
63870
  if (rState.destroyed && rState.closeEmitted === false) {
@@ -63881,7 +63881,7 @@ var require_readable = __commonJS({
63881
63881
  stream[kConsume] = {
63882
63882
  type,
63883
63883
  stream,
63884
- resolve: resolve9,
63884
+ resolve: resolve10,
63885
63885
  reject,
63886
63886
  length: 0,
63887
63887
  body: []
@@ -63951,18 +63951,18 @@ var require_readable = __commonJS({
63951
63951
  return buffer;
63952
63952
  }
63953
63953
  function consumeEnd(consume2) {
63954
- const { type, body: body2, resolve: resolve9, stream, length } = consume2;
63954
+ const { type, body: body2, resolve: resolve10, stream, length } = consume2;
63955
63955
  try {
63956
63956
  if (type === "text") {
63957
- resolve9(chunksDecode(body2, length));
63957
+ resolve10(chunksDecode(body2, length));
63958
63958
  } else if (type === "json") {
63959
- resolve9(JSON.parse(chunksDecode(body2, length)));
63959
+ resolve10(JSON.parse(chunksDecode(body2, length)));
63960
63960
  } else if (type === "arrayBuffer") {
63961
- resolve9(chunksConcat(body2, length).buffer);
63961
+ resolve10(chunksConcat(body2, length).buffer);
63962
63962
  } else if (type === "blob") {
63963
- resolve9(new Blob(body2, { type: stream[kContentType] }));
63963
+ resolve10(new Blob(body2, { type: stream[kContentType] }));
63964
63964
  } else if (type === "bytes") {
63965
- resolve9(chunksConcat(body2, length));
63965
+ resolve10(chunksConcat(body2, length));
63966
63966
  }
63967
63967
  consumeFinish(consume2);
63968
63968
  } catch (err2) {
@@ -64219,9 +64219,9 @@ var require_api_request = __commonJS({
64219
64219
  };
64220
64220
  function request(opts, callback) {
64221
64221
  if (callback === void 0) {
64222
- return new Promise((resolve9, reject) => {
64222
+ return new Promise((resolve10, reject) => {
64223
64223
  request.call(this, opts, (err2, data) => {
64224
- return err2 ? reject(err2) : resolve9(data);
64224
+ return err2 ? reject(err2) : resolve10(data);
64225
64225
  });
64226
64226
  });
64227
64227
  }
@@ -64444,9 +64444,9 @@ var require_api_stream = __commonJS({
64444
64444
  };
64445
64445
  function stream(opts, factory, callback) {
64446
64446
  if (callback === void 0) {
64447
- return new Promise((resolve9, reject) => {
64447
+ return new Promise((resolve10, reject) => {
64448
64448
  stream.call(this, opts, factory, (err2, data) => {
64449
- return err2 ? reject(err2) : resolve9(data);
64449
+ return err2 ? reject(err2) : resolve10(data);
64450
64450
  });
64451
64451
  });
64452
64452
  }
@@ -64731,9 +64731,9 @@ var require_api_upgrade = __commonJS({
64731
64731
  };
64732
64732
  function upgrade(opts, callback) {
64733
64733
  if (callback === void 0) {
64734
- return new Promise((resolve9, reject) => {
64734
+ return new Promise((resolve10, reject) => {
64735
64735
  upgrade.call(this, opts, (err2, data) => {
64736
- return err2 ? reject(err2) : resolve9(data);
64736
+ return err2 ? reject(err2) : resolve10(data);
64737
64737
  });
64738
64738
  });
64739
64739
  }
@@ -64825,9 +64825,9 @@ var require_api_connect = __commonJS({
64825
64825
  };
64826
64826
  function connect(opts, callback) {
64827
64827
  if (callback === void 0) {
64828
- return new Promise((resolve9, reject) => {
64828
+ return new Promise((resolve10, reject) => {
64829
64829
  connect.call(this, opts, (err2, data) => {
64830
- return err2 ? reject(err2) : resolve9(data);
64830
+ return err2 ? reject(err2) : resolve10(data);
64831
64831
  });
64832
64832
  });
64833
64833
  }
@@ -66296,10 +66296,10 @@ var require_headers = __commonJS({
66296
66296
  const lowercaseName = isLowerCase ? name2 : name2.toLowerCase();
66297
66297
  const exists = this[kHeadersMap].get(lowercaseName);
66298
66298
  if (exists) {
66299
- const delimiter2 = lowercaseName === "cookie" ? "; " : ", ";
66299
+ const delimiter3 = lowercaseName === "cookie" ? "; " : ", ";
66300
66300
  this[kHeadersMap].set(lowercaseName, {
66301
66301
  name: exists.name,
66302
- value: `${exists.value}${delimiter2}${value}`
66302
+ value: `${exists.value}${delimiter3}${value}`
66303
66303
  });
66304
66304
  } else {
66305
66305
  this[kHeadersMap].set(lowercaseName, { name: name2, value });
@@ -68689,7 +68689,7 @@ var require_fetch = __commonJS({
68689
68689
  function dispatch({ body: body2 }) {
68690
68690
  const url2 = requestCurrentURL(request);
68691
68691
  const agent = fetchParams.controller.dispatcher;
68692
- return new Promise((resolve9, reject) => agent.dispatch(
68692
+ return new Promise((resolve10, reject) => agent.dispatch(
68693
68693
  {
68694
68694
  path: url2.pathname + url2.search,
68695
68695
  origin: url2.origin,
@@ -68765,7 +68765,7 @@ var require_fetch = __commonJS({
68765
68765
  }
68766
68766
  }
68767
68767
  const onError = this.onError.bind(this);
68768
- resolve9({
68768
+ resolve10({
68769
68769
  status,
68770
68770
  statusText,
68771
68771
  headersList,
@@ -68811,7 +68811,7 @@ var require_fetch = __commonJS({
68811
68811
  for (let i2 = 0; i2 < rawHeaders.length; i2 += 2) {
68812
68812
  headersList.append(bufferToLowerCasedHeaderName(rawHeaders[i2]), rawHeaders[i2 + 1].toString("latin1"), true);
68813
68813
  }
68814
- resolve9({
68814
+ resolve10({
68815
68815
  status,
68816
68816
  statusText: STATUS_CODES[status],
68817
68817
  headersList,
@@ -72450,8 +72450,8 @@ var require_util8 = __commonJS({
72450
72450
  return true;
72451
72451
  }
72452
72452
  function delay(ms) {
72453
- return new Promise((resolve9) => {
72454
- setTimeout(resolve9, ms).unref();
72453
+ return new Promise((resolve10) => {
72454
+ setTimeout(resolve10, ms).unref();
72455
72455
  });
72456
72456
  }
72457
72457
  module2.exports = {
@@ -73598,8 +73598,8 @@ var init_report_render = __esm({
73598
73598
 
73599
73599
  // src/cli.ts
73600
73600
  init_src6();
73601
- import { closeSync as closeSync2, existsSync as existsSync38, openSync as openSync2, readFileSync as readFileSync41, renameSync as renameSync6, statSync as statSync11 } from "node:fs";
73602
- import { join as join47, resolve as pathResolve2 } from "node:path";
73601
+ import { closeSync as closeSync2, existsSync as existsSync39, openSync as openSync2, readFileSync as readFileSync42, renameSync as renameSync6, statSync as statSync12 } from "node:fs";
73602
+ import { join as join48, resolve as pathResolve2 } from "node:path";
73603
73603
  import { spawn as spawn5 } from "node:child_process";
73604
73604
 
73605
73605
  // src/daemon.ts
@@ -74033,7 +74033,7 @@ var responseViaResponseObject = async (res, outgoing, options = {}) => {
74033
74033
  });
74034
74034
  if (!chunk) {
74035
74035
  if (i2 === 1) {
74036
- await new Promise((resolve9) => setTimeout(resolve9));
74036
+ await new Promise((resolve10) => setTimeout(resolve10));
74037
74037
  maxReadCount = 3;
74038
74038
  continue;
74039
74039
  }
@@ -74961,9 +74961,9 @@ var NodeFsHandler = class {
74961
74961
  if (this.fsw.closed) {
74962
74962
  return;
74963
74963
  }
74964
- const dirname15 = sysPath.dirname(file2);
74964
+ const dirname16 = sysPath.dirname(file2);
74965
74965
  const basename9 = sysPath.basename(file2);
74966
- const parent = this.fsw._getWatchedDir(dirname15);
74966
+ const parent = this.fsw._getWatchedDir(dirname16);
74967
74967
  let prevStats = stats;
74968
74968
  if (parent.has(basename9))
74969
74969
  return;
@@ -74990,7 +74990,7 @@ var NodeFsHandler = class {
74990
74990
  prevStats = newStats2;
74991
74991
  }
74992
74992
  } catch (error48) {
74993
- this.fsw._remove(dirname15, basename9);
74993
+ this.fsw._remove(dirname16, basename9);
74994
74994
  }
74995
74995
  } else if (parent.has(basename9)) {
74996
74996
  const at = newStats.atimeMs;
@@ -75086,7 +75086,7 @@ var NodeFsHandler = class {
75086
75086
  this._addToNodeFs(path2, initialAdd, wh, depth + 1);
75087
75087
  }
75088
75088
  }).on(EV.ERROR, this._boundHandleError);
75089
- return new Promise((resolve9, reject) => {
75089
+ return new Promise((resolve10, reject) => {
75090
75090
  if (!stream)
75091
75091
  return reject();
75092
75092
  stream.once(STR_END, () => {
@@ -75095,7 +75095,7 @@ var NodeFsHandler = class {
75095
75095
  return;
75096
75096
  }
75097
75097
  const wasThrottled = throttler ? throttler.clear() : false;
75098
- resolve9(void 0);
75098
+ resolve10(void 0);
75099
75099
  previous.getChildren().filter((item2) => {
75100
75100
  return item2 !== directory && !current.has(item2);
75101
75101
  }).forEach((item2) => {
@@ -75239,11 +75239,11 @@ function createPattern(matcher) {
75239
75239
  if (matcher.path === string4)
75240
75240
  return true;
75241
75241
  if (matcher.recursive) {
75242
- const relative7 = sysPath2.relative(matcher.path, string4);
75243
- if (!relative7) {
75242
+ const relative8 = sysPath2.relative(matcher.path, string4);
75243
+ if (!relative8) {
75244
75244
  return false;
75245
75245
  }
75246
- return !relative7.startsWith("..") && !sysPath2.isAbsolute(relative7);
75246
+ return !relative8.startsWith("..") && !sysPath2.isAbsolute(relative8);
75247
75247
  }
75248
75248
  return false;
75249
75249
  };
@@ -76860,9 +76860,9 @@ function subagentTranscripts(mainTranscriptPath, sessionId) {
76860
76860
  refs.sort((a, b) => b.mtimeMs - a.mtimeMs);
76861
76861
  return refs;
76862
76862
  }
76863
- function splitPathList(value, sep5 = delimiter) {
76863
+ function splitPathList(value, sep6 = delimiter) {
76864
76864
  if (!value) return [];
76865
- return value.split(sep5).map((d) => d.trim()).filter(Boolean).map((d) => normalize3(d));
76865
+ return value.split(sep6).map((d) => d.trim()).filter(Boolean).map((d) => normalize3(d));
76866
76866
  }
76867
76867
  function codexSessionRoots(env2 = process.env, home = homedir4()) {
76868
76868
  const roots = /* @__PURE__ */ new Set();
@@ -79006,8 +79006,8 @@ var PassWorker = class {
79006
79006
  const id = this.nextId++;
79007
79007
  try {
79008
79008
  await this.ready;
79009
- return await new Promise((resolve9, reject) => {
79010
- this.pending.set(id, { resolve: resolve9, reject });
79009
+ return await new Promise((resolve10, reject) => {
79010
+ this.pending.set(id, { resolve: resolve10, reject });
79011
79011
  this.worker.postMessage({ id, kind, ...payload !== void 0 ? { payload } : {} });
79012
79012
  });
79013
79013
  } finally {
@@ -79041,12 +79041,12 @@ var PassWorker = class {
79041
79041
  });
79042
79042
  noteIsolateSpawned();
79043
79043
  this.worker = worker;
79044
- this.ready = new Promise((resolve9, reject) => {
79044
+ this.ready = new Promise((resolve10, reject) => {
79045
79045
  const onReady = (m) => {
79046
79046
  if (m?.ready) {
79047
79047
  worker.off("message", onReady);
79048
79048
  worker.off("error", onErr);
79049
- resolve9();
79049
+ resolve10();
79050
79050
  }
79051
79051
  };
79052
79052
  const onErr = (err2) => reject(err2);
@@ -80209,7 +80209,7 @@ function startGitSensor(gitDir, onEvent, opts = {}) {
80209
80209
  // src/git-delta.ts
80210
80210
  import { execFile } from "node:child_process";
80211
80211
  function git(repoDir, args2) {
80212
- return new Promise((resolve9, reject) => {
80212
+ return new Promise((resolve10, reject) => {
80213
80213
  execFile(
80214
80214
  "git",
80215
80215
  ["-C", repoDir, ...args2],
@@ -80220,7 +80220,7 @@ function git(repoDir, args2) {
80220
80220
  // git-sensor runs on every commit/checkout.
80221
80221
  windowsHide: true
80222
80222
  },
80223
- (err2, stdout) => err2 ? reject(err2) : resolve9(stdout)
80223
+ (err2, stdout) => err2 ? reject(err2) : resolve10(stdout)
80224
80224
  );
80225
80225
  });
80226
80226
  }
@@ -81382,12 +81382,12 @@ function headerPaths(diff) {
81382
81382
  return out2.filter((p) => p !== "/dev/null");
81383
81383
  }
81384
81384
  function git2(repoDir, args2) {
81385
- return new Promise((resolve9, reject) => {
81385
+ return new Promise((resolve10, reject) => {
81386
81386
  execFile2(
81387
81387
  "git",
81388
81388
  ["-C", repoDir, ...args2],
81389
81389
  { encoding: "utf8", maxBuffer: 64 * 1024 * 1024, windowsHide: true },
81390
- (err2, stdout) => err2 ? reject(err2) : resolve9(stdout)
81390
+ (err2, stdout) => err2 ? reject(err2) : resolve10(stdout)
81391
81391
  );
81392
81392
  });
81393
81393
  }
@@ -82685,7 +82685,7 @@ function createWatchBreaker(deps) {
82685
82685
  }
82686
82686
 
82687
82687
  // src/engine.ts
82688
- var DAEMON_VERSION = true ? "2.0.17-dev.3571" : "2.0.0-alpha.0";
82688
+ var DAEMON_VERSION = true ? "2.0.17-dev.3576" : "2.0.0-alpha.0";
82689
82689
  var IGNORED_PATH = /[\\/](?:\.git|node_modules|\.errata|\.claude|\.codex|\.cursor|\.turbo|\.next|dist|coverage|test-results|playwright-report|__pycache__)(?:[\\/]|$)/;
82690
82690
  var IGNORED_NOISE = /castalia\.db|eventlog\.sqlite|turn-cursors/;
82691
82691
  var GIT_OP_MUTE_MS = 4e3;
@@ -82720,8 +82720,8 @@ function loadTurnOffsets(path2) {
82720
82720
  const raw2 = JSON.parse(readFileSync32(path2, "utf8"));
82721
82721
  const out2 = /* @__PURE__ */ new Map();
82722
82722
  for (const [k, v] of Object.entries(raw2)) {
82723
- const off = typeof v === "object" && v !== null ? v.offset : void 0;
82724
- if (typeof off === "number" && off >= 0) out2.set(k, off);
82723
+ const off2 = typeof v === "object" && v !== null ? v.offset : void 0;
82724
+ if (typeof off2 === "number" && off2 >= 0) out2.set(k, off2);
82725
82725
  }
82726
82726
  return out2;
82727
82727
  } catch {
@@ -84703,7 +84703,7 @@ function createWorkspaceEngine(opts) {
84703
84703
  }
84704
84704
  turns = next.turns;
84705
84705
  nextOffset = next.nextOffset;
84706
- await new Promise((resolve9) => setImmediate(resolve9));
84706
+ await new Promise((resolve10) => setImmediate(resolve10));
84707
84707
  }
84708
84708
  };
84709
84709
  const seenMessageIds = /* @__PURE__ */ new Set();
@@ -85407,9 +85407,9 @@ async function startDaemon(opts) {
85407
85407
  };
85408
85408
  }
85409
85409
  async function listenServer(fetchFn, port) {
85410
- return new Promise((resolve9) => {
85410
+ return new Promise((resolve10) => {
85411
85411
  const server = serve({ fetch: fetchFn, hostname: "127.0.0.1", port }, (info2) => {
85412
- resolve9({ server, port: info2.port });
85412
+ resolve10({ server, port: info2.port });
85413
85413
  });
85414
85414
  });
85415
85415
  }
@@ -86763,8 +86763,8 @@ var ConsolidateWorker = class {
86763
86763
  const id = this.nextId++;
86764
86764
  try {
86765
86765
  await this.ready;
86766
- return await new Promise((resolve9, reject) => {
86767
- this.pending.set(id, { resolve: resolve9, reject });
86766
+ return await new Promise((resolve10, reject) => {
86767
+ this.pending.set(id, { resolve: resolve10, reject });
86768
86768
  this.worker.postMessage({ ...req, id });
86769
86769
  });
86770
86770
  } finally {
@@ -86793,12 +86793,12 @@ var ConsolidateWorker = class {
86793
86793
  });
86794
86794
  noteIsolateSpawned();
86795
86795
  this.worker = worker;
86796
- this.ready = new Promise((resolve9, reject) => {
86796
+ this.ready = new Promise((resolve10, reject) => {
86797
86797
  const onReady = (m) => {
86798
86798
  if (m?.ready) {
86799
86799
  worker.off("message", onReady);
86800
86800
  worker.off("error", onErr);
86801
- resolve9();
86801
+ resolve10();
86802
86802
  }
86803
86803
  };
86804
86804
  const onErr = (err2) => {
@@ -87016,17 +87016,17 @@ function startUpdatePoller(opts) {
87016
87016
  };
87017
87017
  }
87018
87018
  function runNpmInstall(channel) {
87019
- return new Promise((resolve9) => {
87019
+ return new Promise((resolve10) => {
87020
87020
  const child = spawn2("npm", ["install", "-g", `${PACKAGE_NAME}@${channel}`], {
87021
87021
  stdio: "inherit",
87022
87022
  shell: true
87023
87023
  });
87024
- child.on("close", (code) => resolve9(code ?? 1));
87025
- child.on("error", () => resolve9(1));
87024
+ child.on("close", (code) => resolve10(code ?? 1));
87025
+ child.on("error", () => resolve10(1));
87026
87026
  });
87027
87027
  }
87028
87028
  async function runInstalledHookRefresh() {
87029
- const root = await new Promise((resolve9) => {
87029
+ const root = await new Promise((resolve10) => {
87030
87030
  const child = spawn2("npm", ["root", "-g"], {
87031
87031
  shell: true,
87032
87032
  windowsHide: true,
@@ -87038,18 +87038,18 @@ async function runInstalledHookRefresh() {
87038
87038
  output += chunk;
87039
87039
  if (output.length > 32768) child.kill();
87040
87040
  });
87041
- child.on("error", () => resolve9(""));
87042
- child.on("close", (code) => resolve9(code === 0 ? output.trim() : ""));
87041
+ child.on("error", () => resolve10(""));
87042
+ child.on("close", (code) => resolve10(code === 0 ? output.trim() : ""));
87043
87043
  });
87044
87044
  if (!isAbsolute5(root)) return 1;
87045
- return new Promise((resolve9) => {
87045
+ return new Promise((resolve10) => {
87046
87046
  const child = spawn2(process.execPath, [join38(root, PACKAGE_NAME, "errata.mjs"), "install-hooks", "codex", "--refresh-existing"], {
87047
87047
  windowsHide: true,
87048
87048
  stdio: "inherit",
87049
87049
  timeout: 3e4
87050
87050
  });
87051
- child.on("error", () => resolve9(1));
87052
- child.on("close", (code) => resolve9(code ?? 1));
87051
+ child.on("error", () => resolve10(1));
87052
+ child.on("close", (code) => resolve10(code ?? 1));
87053
87053
  });
87054
87054
  }
87055
87055
 
@@ -87064,7 +87064,7 @@ function liveCloudClient(src) {
87064
87064
  let current = null;
87065
87065
  let currentKey = "";
87066
87066
  let checkedAt = -Infinity;
87067
- const resolve9 = () => {
87067
+ const resolve10 = () => {
87068
87068
  const t = now();
87069
87069
  if (current && t - checkedAt < recheckMs) return current;
87070
87070
  checkedAt = t;
@@ -87084,7 +87084,7 @@ function liveCloudClient(src) {
87084
87084
  };
87085
87085
  return new Proxy({}, {
87086
87086
  get(_target, prop) {
87087
- const client = resolve9();
87087
+ const client = resolve10();
87088
87088
  const value = Reflect.get(client, prop, client);
87089
87089
  return typeof value === "function" ? value.bind(client) : value;
87090
87090
  }
@@ -87630,7 +87630,7 @@ async function syncHistoryRevision(opts) {
87630
87630
  changed += result.changed;
87631
87631
  remaining = result.remaining;
87632
87632
  if (!remaining || Date.now() - started2 >= (opts.budgetMs ?? 45e3)) break;
87633
- await new Promise((resolve9) => setImmediate(resolve9));
87633
+ await new Promise((resolve10) => setImmediate(resolve10));
87634
87634
  }
87635
87635
  return { changed, remaining };
87636
87636
  })();
@@ -88155,8 +88155,8 @@ var GitBlobReader = class {
88155
88155
  if (this.failed) return Promise.reject(this.failed);
88156
88156
  if (/[\r\n]/.test(spec)) return Promise.resolve(null);
88157
88157
  const proc = this.start();
88158
- return new Promise((resolve9, reject) => {
88159
- this.queue.push({ resolve: resolve9, reject });
88158
+ return new Promise((resolve10, reject) => {
88159
+ this.queue.push({ resolve: resolve10, reject });
88160
88160
  proc.stdin.write(`${spec}
88161
88161
  `);
88162
88162
  });
@@ -88170,14 +88170,14 @@ var GitBlobReader = class {
88170
88170
  const proc = this.proc;
88171
88171
  this.proc = null;
88172
88172
  if (!proc || proc.exitCode !== null) return Promise.resolve();
88173
- return new Promise((resolve9) => {
88173
+ return new Promise((resolve10) => {
88174
88174
  const timer = setTimeout(() => {
88175
88175
  proc.kill();
88176
- resolve9();
88176
+ resolve10();
88177
88177
  }, timeoutMs);
88178
88178
  proc.once("exit", () => {
88179
88179
  clearTimeout(timer);
88180
- resolve9();
88180
+ resolve10();
88181
88181
  });
88182
88182
  proc.stdin.end();
88183
88183
  });
@@ -88973,7 +88973,7 @@ async function loginOAuthDevice(opts) {
88973
88973
  let deviceSession = null;
88974
88974
  let approvedInstallation = null;
88975
88975
  while (Date.now() < deadline) {
88976
- await (opts.sleep ?? ((ms) => new Promise((resolve9) => setTimeout(resolve9, ms))))(waitMs);
88976
+ await (opts.sleep ?? ((ms) => new Promise((resolve10) => setTimeout(resolve10, ms))))(waitMs);
88977
88977
  waitMs = intervalMs;
88978
88978
  const poll = await fetchDevicePoll(fetchFn, device.token, {
88979
88979
  method: "POST",
@@ -89098,7 +89098,7 @@ async function loginOAuthLoopback(opts) {
89098
89098
  const state = randomState();
89099
89099
  const scope = opts.scope ?? DEFAULT_OAUTH_SCOPE;
89100
89100
  const { code, redirectUri, clientId } = await new Promise(
89101
- (resolve9, reject) => {
89101
+ (resolve10, reject) => {
89102
89102
  const server = createServer((req, res) => {
89103
89103
  const u = new URL(req.url ?? "/", "http://127.0.0.1");
89104
89104
  if (u.pathname !== "/callback") {
@@ -89121,7 +89121,7 @@ async function loginOAuthLoopback(opts) {
89121
89121
  res.writeHead(200, { "content-type": "text/html" });
89122
89122
  res.end("<html><body>inErrata: you're logged in. You can close this tab.</body></html>");
89123
89123
  server.close();
89124
- resolve9({ code: code2, redirectUri: `http://127.0.0.1:${port}/callback`, clientId: activeClientId });
89124
+ resolve10({ code: code2, redirectUri: `http://127.0.0.1:${port}/callback`, clientId: activeClientId });
89125
89125
  });
89126
89126
  let activeClientId = oauthClientId();
89127
89127
  server.on("error", reject);
@@ -89220,7 +89220,7 @@ async function linkThroughConsole(opts) {
89220
89220
  const deadline = Date.now() + Math.min(code.expires_in * 1e3, opts.timeoutMs ?? Number.POSITIVE_INFINITY);
89221
89221
  let intervalMs = Math.max(2, code.interval ?? 5) * 1e3;
89222
89222
  let waitMs = intervalMs;
89223
- const sleep = opts.sleep ?? ((ms) => new Promise((resolve9) => setTimeout(resolve9, ms)));
89223
+ const sleep = opts.sleep ?? ((ms) => new Promise((resolve10) => setTimeout(resolve10, ms)));
89224
89224
  while (Date.now() < deadline) {
89225
89225
  await sleep(waitMs);
89226
89226
  waitMs = intervalMs;
@@ -90716,7 +90716,7 @@ async function startMultiDaemon(opts = {}) {
90716
90716
  const packageAutoAll = async () => {
90717
90717
  const out2 = /* @__PURE__ */ new Map();
90718
90718
  for (const r of records) {
90719
- await new Promise((resolve9) => setImmediate(resolve9));
90719
+ await new Promise((resolve10) => setImmediate(resolve10));
90720
90720
  const done = markPass(`package-index:${r.entry.name}`);
90721
90721
  try {
90722
90722
  out2.set(
@@ -92285,7 +92285,7 @@ function inspectCodexContext(cwd) {
92285
92285
  return { id: "codex_context", status: "fail", detail: "No usable saved workspace context; run errata start here and check the daemon log if context.md remains unavailable" };
92286
92286
  }
92287
92287
  function readCodexHookState(cwd, options = {}) {
92288
- return new Promise((resolve9, reject) => {
92288
+ return new Promise((resolve10, reject) => {
92289
92289
  const child = spawn4(options.bin ?? resolveCodexExecutable(), options.args ?? ["app-server", "--stdio"], {
92290
92290
  cwd,
92291
92291
  windowsHide: true,
@@ -92306,7 +92306,7 @@ function readCodexHookState(cwd, options = {}) {
92306
92306
  child.once("close", () => {
92307
92307
  clearTimeout(reap);
92308
92308
  if (error48) reject(error48);
92309
- else resolve9({ ...hooks, features });
92309
+ else resolve10({ ...hooks, features });
92310
92310
  });
92311
92311
  child.kill();
92312
92312
  };
@@ -92548,8 +92548,8 @@ function userClaudeSettingsPath() {
92548
92548
  }
92549
92549
  function ensureUserStatusLine(opts) {
92550
92550
  const env2 = opts.env ?? process.env;
92551
- const off = (env2["ERRATA_STATUSLINE"] ?? "").trim().toLowerCase();
92552
- if (off === "0" || off === "off" || off === "false" || off === "no") return "disabled";
92551
+ const off2 = (env2["ERRATA_STATUSLINE"] ?? "").trim().toLowerCase();
92552
+ if (off2 === "0" || off2 === "off" || off2 === "false" || off2 === "no") return "disabled";
92553
92553
  const settingsPath = opts.userSettingsPath ?? userClaudeSettingsPath();
92554
92554
  let settings = {};
92555
92555
  if (existsSync37(settingsPath)) {
@@ -92598,6 +92598,142 @@ function describeStatusLineOutcome(outcome) {
92598
92598
  }
92599
92599
  }
92600
92600
 
92601
+ // src/claude-mods.ts
92602
+ import { createHash as createHash20 } from "node:crypto";
92603
+ import { cpSync as cpSync2, existsSync as existsSync38, mkdirSync as mkdirSync11, readFileSync as readFileSync41, readdirSync as readdirSync14, rmSync as rmSync4, statSync as statSync11, writeFileSync as writeFileSync29 } from "node:fs";
92604
+ import { delimiter as delimiter2, dirname as dirname15, join as join47, relative as relative7, resolve as resolve9, sep as sep5 } from "node:path";
92605
+ import { fileURLToPath as fileURLToPath2 } from "node:url";
92606
+ var CLAUDE_PLUGIN_DIRS_ENV = "CLAUDE_CODE_PLUGIN_DIRS";
92607
+ var HASH_FILE = ".errata-mod-hash";
92608
+ function bundledClaudeModsDir() {
92609
+ const rel = import.meta.url.endsWith(".mjs") ? "./resources/claude-mods/" : "../claude-mods/";
92610
+ return fileURLToPath2(new URL(rel, import.meta.url));
92611
+ }
92612
+ function isEngineOwned(relPath) {
92613
+ const p = relPath.split(sep5).join("/");
92614
+ return p === ".claude-plugin/types" || p.startsWith(".claude-plugin/types/") || p === HASH_FILE;
92615
+ }
92616
+ function listFiles(root, dir = root) {
92617
+ const out2 = [];
92618
+ for (const name2 of readdirSync14(dir)) {
92619
+ const abs = join47(dir, name2);
92620
+ if (isEngineOwned(relative7(root, abs))) continue;
92621
+ if (statSync11(abs).isDirectory()) out2.push(...listFiles(root, abs));
92622
+ else out2.push(abs);
92623
+ }
92624
+ return out2;
92625
+ }
92626
+ function modHash(dir) {
92627
+ const h = createHash20("sha256");
92628
+ for (const abs of listFiles(dir).sort()) {
92629
+ h.update(relative7(dir, abs).split(sep5).join("/"));
92630
+ h.update("\0");
92631
+ h.update(readFileSync41(abs));
92632
+ h.update("\0");
92633
+ }
92634
+ return h.digest("hex");
92635
+ }
92636
+ function bundledMods(bundleDir) {
92637
+ if (!existsSync38(bundleDir)) return [];
92638
+ return readdirSync14(bundleDir).filter((name2) => existsSync38(join47(bundleDir, name2, ".claude-plugin", "plugin.json")));
92639
+ }
92640
+ function sameDir(a, b) {
92641
+ const norm = (p) => resolve9(p).replace(/[\\/]+$/, "").toLowerCase();
92642
+ return norm(a) === norm(b);
92643
+ }
92644
+ function isUnder(path2, root) {
92645
+ const rel = relative7(resolve9(root), resolve9(path2));
92646
+ return rel !== "" && !rel.startsWith("..") && !rel.includes(":");
92647
+ }
92648
+ function off(env2) {
92649
+ const v = (env2["ERRATA_CLAUDE_MODS"] ?? "").trim().toLowerCase();
92650
+ return v === "0" || v === "off" || v === "false" || v === "no";
92651
+ }
92652
+ function readSettings(path2) {
92653
+ if (!existsSync38(path2)) return {};
92654
+ try {
92655
+ const parsed = JSON.parse(readFileSync41(path2, "utf8"));
92656
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) return null;
92657
+ return parsed;
92658
+ } catch {
92659
+ return null;
92660
+ }
92661
+ }
92662
+ function setPluginDirs(settings, dirs) {
92663
+ const env2 = settings["env"] && typeof settings["env"] === "object" && !Array.isArray(settings["env"]) ? { ...settings["env"] } : {};
92664
+ const before = typeof env2[CLAUDE_PLUGIN_DIRS_ENV] === "string" ? env2[CLAUDE_PLUGIN_DIRS_ENV] : void 0;
92665
+ const after = dirs.length > 0 ? dirs.join(delimiter2) : void 0;
92666
+ if (before === after) return false;
92667
+ if (after === void 0) delete env2[CLAUDE_PLUGIN_DIRS_ENV];
92668
+ else env2[CLAUDE_PLUGIN_DIRS_ENV] = after;
92669
+ if (Object.keys(env2).length > 0) settings["env"] = env2;
92670
+ else delete settings["env"];
92671
+ return true;
92672
+ }
92673
+ function currentDirs(settings) {
92674
+ const env2 = settings["env"];
92675
+ const raw2 = env2 && typeof env2[CLAUDE_PLUGIN_DIRS_ENV] === "string" ? env2[CLAUDE_PLUGIN_DIRS_ENV] : "";
92676
+ return raw2.split(delimiter2).map((s) => s.trim()).filter(Boolean);
92677
+ }
92678
+ function writeSettings(path2, settings) {
92679
+ mkdirSync11(dirname15(path2), { recursive: true });
92680
+ writeFileSync29(path2, JSON.stringify(settings, null, 2) + "\n", "utf8");
92681
+ }
92682
+ function ensureClaudeMods(opts) {
92683
+ const env2 = opts.env ?? process.env;
92684
+ const settingsPath = opts.userSettingsPath ?? userClaudeSettingsPath();
92685
+ const modsRoot = join47(opts.installRoot, "claude-mods");
92686
+ if (off(env2)) {
92687
+ const settings2 = readSettings(settingsPath);
92688
+ if (!settings2) return { kind: "unreadable" };
92689
+ const dirs2 = currentDirs(settings2);
92690
+ const kept = dirs2.filter((d) => !isUnder(d, modsRoot));
92691
+ if (setPluginDirs(settings2, kept)) writeSettings(settingsPath, settings2);
92692
+ return { kind: "disabled", removed: dirs2.length - kept.length };
92693
+ }
92694
+ const bundleDir = opts.bundleDir ?? bundledClaudeModsDir();
92695
+ const names = bundledMods(bundleDir);
92696
+ if (names.length === 0) return { kind: "no-bundle" };
92697
+ const settings = readSettings(settingsPath);
92698
+ if (!settings) return { kind: "unreadable" };
92699
+ let changed = false;
92700
+ const installed = [];
92701
+ for (const name2 of names) {
92702
+ const src = join47(bundleDir, name2);
92703
+ const dest = join47(modsRoot, name2);
92704
+ const hash2 = modHash(src);
92705
+ const hashFile = join47(dest, HASH_FILE);
92706
+ if (!existsSync38(hashFile) || readFileSync41(hashFile, "utf8") !== hash2) {
92707
+ rmSync4(dest, { recursive: true, force: true });
92708
+ cpSync2(src, dest, { recursive: true, filter: (p) => !isEngineOwned(relative7(src, p)) });
92709
+ writeFileSync29(hashFile, hash2, "utf8");
92710
+ changed = true;
92711
+ }
92712
+ installed.push(dest);
92713
+ }
92714
+ const others = currentDirs(settings).filter((d) => !isUnder(d, modsRoot));
92715
+ const dirs = [...installed, ...others.filter((d) => !installed.some((m) => sameDir(m, d)))];
92716
+ if (setPluginDirs(settings, dirs)) {
92717
+ writeSettings(settingsPath, settings);
92718
+ changed = true;
92719
+ }
92720
+ return { kind: changed ? "installed" : "unchanged", mods: names };
92721
+ }
92722
+ function describeClaudeModsOutcome(outcome) {
92723
+ switch (outcome.kind) {
92724
+ case "installed":
92725
+ return `Claude Code mods: installed ${outcome.mods.join(", ")} \u2014 new Claude Code sessions load them`;
92726
+ case "unchanged":
92727
+ return `Claude Code mods: ${outcome.mods.join(", ")} up to date`;
92728
+ case "disabled":
92729
+ return `Claude Code mods: off (ERRATA_CLAUDE_MODS)${outcome.removed > 0 ? ` \u2014 removed ${outcome.removed} from settings` : ""}`;
92730
+ case "unreadable":
92731
+ return "Claude Code mods: not installed \u2014 ~/.claude/settings.json is not valid JSON (left untouched)";
92732
+ case "no-bundle":
92733
+ return "Claude Code mods: none bundled with this build";
92734
+ }
92735
+ }
92736
+
92601
92737
  // src/opencode-plugin.ts
92602
92738
  var OPENCODE_PLUGIN_MARKER = "// @inerrata opencode plugin \u2014 errata-managed (errata install-hooks opencode)";
92603
92739
  var OPENCODE_D1_CONTRACT = "Behavioral contract: (1) On ANY error, call search() BEFORE debugging \u2014 costs ~400 tokens vs 5,000\u201350,000 cold. (2) After solving non-trivial problems, contribute back: if your harness emits typed nodes (canonicalId + label + attrs), use ingest \u2014 the typed door; otherwise call contribute(), the prose fallback. (3) Before web search, try search() first \u2014 graph is 2\u201315\xD7 cheaper. (4) At session end, review what you solved and contribute anything novel.";
@@ -92981,9 +93117,9 @@ function resolveHookPort(explicit) {
92981
93117
  }
92982
93118
  }
92983
93119
  }
92984
- const settingsPath = join47(ROOT, ".claude", "settings.json");
93120
+ const settingsPath = join48(ROOT, ".claude", "settings.json");
92985
93121
  try {
92986
- if (existsSync38(settingsPath)) return installedHookPort(readFileSync41(settingsPath, "utf8")) ?? 7891;
93122
+ if (existsSync39(settingsPath)) return installedHookPort(readFileSync42(settingsPath, "utf8")) ?? 7891;
92987
93123
  } catch {
92988
93124
  }
92989
93125
  return 7891;
@@ -93008,14 +93144,14 @@ async function cmdInit() {
93008
93144
  if (!skipHooks) {
93009
93145
  console.log("");
93010
93146
  console.log("installing harness hooks...");
93011
- const { existsSync: existsSync39 } = await import("node:fs");
93012
- const { join: join48 } = await import("node:path");
93147
+ const { existsSync: existsSync40 } = await import("node:fs");
93148
+ const { join: join49 } = await import("node:path");
93013
93149
  try {
93014
93150
  await installClaudeHooks(port);
93015
93151
  } catch (err2) {
93016
93152
  console.warn(` \u26A0\uFE0F Claude hook install failed: ${err2 instanceof Error ? err2.message : err2}`);
93017
93153
  }
93018
- if (existsSync39(join48(ROOT, ".cursor"))) {
93154
+ if (existsSync40(join49(ROOT, ".cursor"))) {
93019
93155
  try {
93020
93156
  await installCursorMcpConfig();
93021
93157
  } catch (err2) {
@@ -93228,9 +93364,9 @@ async function cmdStatus() {
93228
93364
  console.log(` stack: ${profile.stack.join(", ") || "(none)"}`);
93229
93365
  console.log(` languages: ${profile.languages.join(", ") || "(none)"}`);
93230
93366
  }
93231
- console.log(` graph db: ${existsSync38(paths.castalia) ? "yes" : "no"} (${paths.castalia})`);
93232
- console.log(` event log: ${existsSync38(paths.eventLog) ? "yes" : "no"} (${paths.eventLog})`);
93233
- if (existsSync38(paths.castalia)) {
93367
+ console.log(` graph db: ${existsSync39(paths.castalia) ? "yes" : "no"} (${paths.castalia})`);
93368
+ console.log(` event log: ${existsSync39(paths.eventLog) ? "yes" : "no"} (${paths.eventLog})`);
93369
+ if (existsSync39(paths.castalia)) {
93234
93370
  try {
93235
93371
  const { openGraphStore: openGraphStore2 } = await Promise.resolve().then(() => (init_src5(), src_exports2));
93236
93372
  const store = openGraphStore2({ path: paths.castalia });
@@ -93853,6 +93989,7 @@ async function cmdLink(args2) {
93853
93989
  return;
93854
93990
  }
93855
93991
  console.log(ensureStatusLine(resolveHookPort()));
93992
+ console.log(installClaudeMods().line);
93856
93993
  delete profile.projectLinkDisabled;
93857
93994
  const remote = flag("--remote");
93858
93995
  if (remote) {
@@ -94203,11 +94340,11 @@ async function cmdInstallationProfile(args2) {
94203
94340
  }
94204
94341
  async function cmdReview() {
94205
94342
  const paths = workspacePaths(ROOT);
94206
- if (!existsSync38(paths.reviewQueue)) {
94343
+ if (!existsSync39(paths.reviewQueue)) {
94207
94344
  console.log("(review queue empty)");
94208
94345
  return;
94209
94346
  }
94210
- const queue = JSON.parse(readFileSync41(paths.reviewQueue, "utf8"));
94347
+ const queue = JSON.parse(readFileSync42(paths.reviewQueue, "utf8"));
94211
94348
  if (queue.length === 0) {
94212
94349
  console.log("(review queue empty)");
94213
94350
  return;
@@ -94878,7 +95015,7 @@ async function gatherRepo(store, ws) {
94878
95015
  };
94879
95016
  }
94880
95017
  async function gatherReportData(generatedAt) {
94881
- const { existsSync: existsSync39 } = await import("node:fs");
95018
+ const { existsSync: existsSync40 } = await import("node:fs");
94882
95019
  const { openGraphStore: openGraphStore2 } = await Promise.resolve().then(() => (init_src5(), src_exports2));
94883
95020
  const cfg = loadConfig();
94884
95021
  const outbound = cfg.consent.sync ? "auto" : "off";
@@ -94886,7 +95023,7 @@ async function gatherReportData(generatedAt) {
94886
95023
  for (const ws of listWorkspaces()) {
94887
95024
  if (ws.missing) continue;
94888
95025
  const dbPath = workspacePaths(ws.path).castalia;
94889
- if (!existsSync39(dbPath)) continue;
95026
+ if (!existsSync40(dbPath)) continue;
94890
95027
  let store = null;
94891
95028
  try {
94892
95029
  store = openGraphStore2({ path: dbPath });
@@ -94917,7 +95054,7 @@ async function gatherReportData(generatedAt) {
94917
95054
  };
94918
95055
  }
94919
95056
  async function cmdReport(args2) {
94920
- const { mkdirSync: mkdirSync11, writeFileSync: writeFileSync29 } = await import("node:fs");
95057
+ const { mkdirSync: mkdirSync12, writeFileSync: writeFileSync30 } = await import("node:fs");
94921
95058
  const { renderReport: renderReport2 } = await Promise.resolve().then(() => (init_report_render(), report_render_exports));
94922
95059
  const includeFutureVerbs = args2.includes("--future-verbs");
94923
95060
  const now = /* @__PURE__ */ new Date();
@@ -94928,10 +95065,10 @@ async function cmdReport(args2) {
94928
95065
  process.exit(2);
94929
95066
  }
94930
95067
  const outDir = workspacePaths(ROOT).configDir;
94931
- mkdirSync11(outDir, { recursive: true });
95068
+ mkdirSync12(outDir, { recursive: true });
94932
95069
  const files = renderReport2(data, { includeFutureVerbs });
94933
- for (const f of files) writeFileSync29(join47(outDir, f.name), f.html, "utf8");
94934
- const indexPath = join47(outDir, "report.html");
95070
+ for (const f of files) writeFileSync30(join48(outDir, f.name), f.html, "utf8");
95071
+ const indexPath = join48(outDir, "report.html");
94935
95072
  console.log(`report \u2192 ${indexPath}`);
94936
95073
  console.log(
94937
95074
  ` ${data.repos.length} repo(s) \xB7 ${files.length} file(s) \xB7 ${data.rollup.nodes.toLocaleString("en-US")} nodes`
@@ -94975,7 +95112,7 @@ function spawnDaemonDetached(options = {}) {
94975
95112
  try {
94976
95113
  const logPath = daemonLogPath();
94977
95114
  try {
94978
- if (statSync11(logPath).size > 5 * 1024 * 1024) renameSync6(logPath, `${logPath}.1`);
95115
+ if (statSync12(logPath).size > 5 * 1024 * 1024) renameSync6(logPath, `${logPath}.1`);
94979
95116
  } catch {
94980
95117
  }
94981
95118
  out2 = openSync2(logPath, "a");
@@ -95044,24 +95181,24 @@ async function cmdInstallHooks(args2) {
95044
95181
  }
95045
95182
  }
95046
95183
  async function installOpencodePlugin(port) {
95047
- const { mkdirSync: mkdirSync11, existsSync: existsSync39, readFileSync: readFileSync42, writeFileSync: writeFileSync29 } = await import("node:fs");
95048
- const { join: join48 } = await import("node:path");
95049
- const dir = join48(ROOT, ".opencode", "plugin");
95050
- if (!existsSync39(dir)) mkdirSync11(dir, { recursive: true });
95051
- const file2 = join48(dir, "inerrata.js");
95052
- if (existsSync39(file2)) {
95053
- const head2 = readFileSync42(file2, "utf8").split("\n")[0] ?? "";
95184
+ const { mkdirSync: mkdirSync12, existsSync: existsSync40, readFileSync: readFileSync43, writeFileSync: writeFileSync30 } = await import("node:fs");
95185
+ const { join: join49 } = await import("node:path");
95186
+ const dir = join49(ROOT, ".opencode", "plugin");
95187
+ if (!existsSync40(dir)) mkdirSync12(dir, { recursive: true });
95188
+ const file2 = join49(dir, "inerrata.js");
95189
+ if (existsSync40(file2)) {
95190
+ const head2 = readFileSync43(file2, "utf8").split("\n")[0] ?? "";
95054
95191
  if (head2.trim() !== OPENCODE_PLUGIN_MARKER) {
95055
95192
  console.error(`refusing to overwrite ${file2}: not an errata-managed plugin (line 1 lacks the marker)`);
95056
95193
  process.exit(2);
95057
95194
  }
95058
95195
  }
95059
- writeFileSync29(file2, buildOpencodePluginSource(port, { version: DAEMON_VERSION }), "utf8");
95060
- const cfgFile = join48(ROOT, "opencode.json");
95196
+ writeFileSync30(file2, buildOpencodePluginSource(port, { version: DAEMON_VERSION }), "utf8");
95197
+ const cfgFile = join49(ROOT, "opencode.json");
95061
95198
  let cfg = { $schema: "https://opencode.ai/config.json" };
95062
- if (existsSync39(cfgFile)) {
95199
+ if (existsSync40(cfgFile)) {
95063
95200
  try {
95064
- cfg = JSON.parse(readFileSync42(cfgFile, "utf8"));
95201
+ cfg = JSON.parse(readFileSync43(cfgFile, "utf8"));
95065
95202
  } catch {
95066
95203
  console.error(`refusing to touch invalid JSON at ${cfgFile} \u2014 fix it and re-run`);
95067
95204
  process.exit(2);
@@ -95072,7 +95209,7 @@ async function installOpencodePlugin(port) {
95072
95209
  if (!hadErrata) {
95073
95210
  const inv = errataMcpInvocation();
95074
95211
  cfg.mcp["errata"] = { type: "local", command: [inv.command, ...inv.args] };
95075
- writeFileSync29(cfgFile, JSON.stringify(cfg, null, 2) + "\n", "utf8");
95212
+ writeFileSync30(cfgFile, JSON.stringify(cfg, null, 2) + "\n", "utf8");
95076
95213
  }
95077
95214
  console.log(`installed OpenCode plugin \u2192 ${file2}`);
95078
95215
  if (hadErrata) console.log(` mcp.errata already present in ${cfgFile} \u2014 left untouched`);
@@ -95098,16 +95235,24 @@ function ensureStatusLine(port) {
95098
95235
  return `status line: not installed (${err2 instanceof Error ? err2.message : err2})`;
95099
95236
  }
95100
95237
  }
95238
+ function installClaudeMods() {
95239
+ try {
95240
+ const outcome = ensureClaudeMods({ installRoot: globalDir() });
95241
+ return { line: describeClaudeModsOutcome(outcome), changed: outcome.kind !== "unchanged" && outcome.kind !== "no-bundle" };
95242
+ } catch (err2) {
95243
+ return { line: `Claude Code mods: not installed (${err2 instanceof Error ? err2.message : err2})`, changed: true };
95244
+ }
95245
+ }
95101
95246
  async function installClaudeHooks(port) {
95102
- const { mkdirSync: mkdirSync11, existsSync: existsSync39, readFileSync: readFileSync42, writeFileSync: writeFileSync29 } = await import("node:fs");
95103
- const { join: join48 } = await import("node:path");
95104
- const dir = join48(ROOT, ".claude");
95105
- if (!existsSync39(dir)) mkdirSync11(dir, { recursive: true });
95106
- const file2 = join48(dir, "settings.json");
95247
+ const { mkdirSync: mkdirSync12, existsSync: existsSync40, readFileSync: readFileSync43, writeFileSync: writeFileSync30 } = await import("node:fs");
95248
+ const { join: join49 } = await import("node:path");
95249
+ const dir = join49(ROOT, ".claude");
95250
+ if (!existsSync40(dir)) mkdirSync12(dir, { recursive: true });
95251
+ const file2 = join49(dir, "settings.json");
95107
95252
  let settings = {};
95108
- if (existsSync39(file2)) {
95253
+ if (existsSync40(file2)) {
95109
95254
  try {
95110
- settings = JSON.parse(readFileSync42(file2, "utf8"));
95255
+ settings = JSON.parse(readFileSync43(file2, "utf8"));
95111
95256
  } catch {
95112
95257
  console.error(`refusing to overwrite invalid JSON at ${file2}`);
95113
95258
  process.exit(2);
@@ -95156,11 +95301,12 @@ async function installClaudeHooks(port) {
95156
95301
  list.push({ hooks: [{ type: "command", command: injectCmd }] });
95157
95302
  }
95158
95303
  removeProjectStatusLine(settings);
95159
- writeFileSync29(file2, JSON.stringify(settings, null, 2) + "\n", "utf8");
95304
+ writeFileSync30(file2, JSON.stringify(settings, null, 2) + "\n", "utf8");
95160
95305
  console.log(`installed Claude Code hooks \u2192 ${file2}`);
95161
95306
  console.log(` ${ensureStatusLine(port)}`);
95307
+ console.log(` ${installClaudeMods().line}`);
95162
95308
  await installClaudeMcpConfig();
95163
- const claudeMd = join48(ROOT, "CLAUDE.md");
95309
+ const claudeMd = join49(ROOT, "CLAUDE.md");
95164
95310
  const recall = writeManagedBlock(claudeMd, { body: RECALL_FIRST_BLOCK });
95165
95311
  if (recall.kind === "collision") {
95166
95312
  console.warn(
@@ -95172,15 +95318,15 @@ async function installClaudeHooks(port) {
95172
95318
  console.log(` endpoint: http://127.0.0.1:${port}/api/hook`);
95173
95319
  }
95174
95320
  async function installClaudeMcpConfig() {
95175
- const { mkdirSync: mkdirSync11, existsSync: existsSync39, readFileSync: readFileSync42, writeFileSync: writeFileSync29 } = await import("node:fs");
95176
- const { join: join48, dirname: dirname15 } = await import("node:path");
95177
- const file2 = join48(ROOT, ".mcp.json");
95178
- const dir = dirname15(file2);
95179
- if (!existsSync39(dir)) mkdirSync11(dir, { recursive: true });
95321
+ const { mkdirSync: mkdirSync12, existsSync: existsSync40, readFileSync: readFileSync43, writeFileSync: writeFileSync30 } = await import("node:fs");
95322
+ const { join: join49, dirname: dirname16 } = await import("node:path");
95323
+ const file2 = join49(ROOT, ".mcp.json");
95324
+ const dir = dirname16(file2);
95325
+ if (!existsSync40(dir)) mkdirSync12(dir, { recursive: true });
95180
95326
  let cfg = {};
95181
- if (existsSync39(file2)) {
95327
+ if (existsSync40(file2)) {
95182
95328
  try {
95183
- cfg = JSON.parse(readFileSync42(file2, "utf8"));
95329
+ cfg = JSON.parse(readFileSync43(file2, "utf8"));
95184
95330
  } catch {
95185
95331
  console.error(`refusing to overwrite invalid JSON at ${file2}`);
95186
95332
  process.exit(2);
@@ -95188,21 +95334,21 @@ async function installClaudeMcpConfig() {
95188
95334
  }
95189
95335
  cfg.mcpServers ??= {};
95190
95336
  cfg.mcpServers["errata"] = errataMcpInvocation();
95191
- writeFileSync29(file2, JSON.stringify(cfg, null, 2) + "\n", "utf8");
95337
+ writeFileSync30(file2, JSON.stringify(cfg, null, 2) + "\n", "utf8");
95192
95338
  console.log(`installed Claude Code MCP server config \u2192 ${file2}`);
95193
95339
  console.log(` Claude Code will spawn \`errata mcp\` on workspace open.`);
95194
95340
  console.log(` Tools: errata.search / locate / neighbors / callers_of / what_uses / show / similar`);
95195
95341
  }
95196
95342
  async function installCursorMcpConfig() {
95197
- const { mkdirSync: mkdirSync11, existsSync: existsSync39, readFileSync: readFileSync42, writeFileSync: writeFileSync29 } = await import("node:fs");
95198
- const { join: join48 } = await import("node:path");
95199
- const dir = join48(ROOT, ".cursor");
95200
- if (!existsSync39(dir)) mkdirSync11(dir, { recursive: true });
95201
- const file2 = join48(dir, "mcp.json");
95343
+ const { mkdirSync: mkdirSync12, existsSync: existsSync40, readFileSync: readFileSync43, writeFileSync: writeFileSync30 } = await import("node:fs");
95344
+ const { join: join49 } = await import("node:path");
95345
+ const dir = join49(ROOT, ".cursor");
95346
+ if (!existsSync40(dir)) mkdirSync12(dir, { recursive: true });
95347
+ const file2 = join49(dir, "mcp.json");
95202
95348
  let cfg = {};
95203
- if (existsSync39(file2)) {
95349
+ if (existsSync40(file2)) {
95204
95350
  try {
95205
- cfg = JSON.parse(readFileSync42(file2, "utf8"));
95351
+ cfg = JSON.parse(readFileSync43(file2, "utf8"));
95206
95352
  } catch {
95207
95353
  console.error(`refusing to overwrite invalid JSON at ${file2}`);
95208
95354
  process.exit(2);
@@ -95210,7 +95356,7 @@ async function installCursorMcpConfig() {
95210
95356
  }
95211
95357
  cfg.mcpServers ??= {};
95212
95358
  cfg.mcpServers["errata"] = errataMcpInvocation();
95213
- writeFileSync29(file2, JSON.stringify(cfg, null, 2) + "\n", "utf8");
95359
+ writeFileSync30(file2, JSON.stringify(cfg, null, 2) + "\n", "utf8");
95214
95360
  console.log(`installed Cursor MCP server config \u2192 ${file2}`);
95215
95361
  console.log(` Cursor will spawn \`errata mcp\` on workspace open.`);
95216
95362
  console.log(` Tools: errata.search / locate / neighbors / callers_of / what_uses`);
@@ -95221,7 +95367,7 @@ async function installCodexHooks(port) {
95221
95367
  const gitRoot = nearestGitRoot(process.cwd());
95222
95368
  const hookRoot = gitRoot && mainCheckoutOfWorktree(gitRoot) ? gitRoot : ROOT;
95223
95369
  const file2 = writeCodexHooks(hookRoot, port);
95224
- const instructions = writeManagedBlock(join47(hookRoot, "AGENTS.md"), {
95370
+ const instructions = writeManagedBlock(join48(hookRoot, "AGENTS.md"), {
95225
95371
  body: AGENTS_POINTER_BODY,
95226
95372
  stable: true
95227
95373
  });
@@ -95414,6 +95560,8 @@ async function cmdDash(args2) {
95414
95560
  const reindexOnStart = !args2.includes("--no-reindex");
95415
95561
  const skipEmbed = !args2.includes("--embed");
95416
95562
  const skipWatchers = args2.includes("--no-watch");
95563
+ const mods = installClaudeMods();
95564
+ if (mods.changed) console.log(`[errata] ${mods.line}`);
95417
95565
  const handle2 = await startMultiDaemon({
95418
95566
  webPort: port,
95419
95567
  reindexOnStart,
@@ -95563,7 +95711,7 @@ async function cmdDash(args2) {
95563
95711
  const hotspotScanMark = /* @__PURE__ */ new Map();
95564
95712
  const HOTSPOT_FANIN = 20;
95565
95713
  const runNightlyPass = async (dueIds) => {
95566
- const yieldToLoop2 = () => new Promise((resolve9) => setImmediate(resolve9));
95714
+ const yieldToLoop2 = () => new Promise((resolve10) => setImmediate(resolve10));
95567
95715
  const fullReclusterPass = nightlyCount++ % FULL_RECLUSTER_EVERY === 0;
95568
95716
  const m = dueIds ? await handle2.nightlyFor(dueIds) : await handle2.nightlyAll();
95569
95717
  let skillsLearned = 0;
@@ -95641,9 +95789,9 @@ async function cmdDash(args2) {
95641
95789
  await yieldToLoop2();
95642
95790
  try {
95643
95791
  const items = selectDurableMemory(handle2.sharedStore, r.engine.profile, {
95644
- atCommit: readGitRefState(join47(r.root, ".git")).sha ?? void 0
95792
+ atCommit: readGitRefState(join48(r.root, ".git")).sha ?? void 0
95645
95793
  });
95646
- const res = bleedRules(join47(r.root, ".claude", "rules"), items);
95794
+ const res = bleedRules(join48(r.root, ".claude", "rules"), items);
95647
95795
  if (res.written || res.pruned) {
95648
95796
  console.log(
95649
95797
  `[rules:${r.entry.name}] ${res.written} collective principle(s) \u2192 .claude/rules` + (res.pruned ? `, ${res.pruned} pruned` : "")