omnius 1.0.533 → 1.0.534

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/dist/index.js CHANGED
@@ -119389,7 +119389,7 @@ var require_auto = __commonJS({
119389
119389
  // ../node_modules/acme-client/src/client.js
119390
119390
  var require_client = __commonJS({
119391
119391
  "../node_modules/acme-client/src/client.js"(exports, module) {
119392
- var { createHash: createHash51 } = __require("crypto");
119392
+ var { createHash: createHash53 } = __require("crypto");
119393
119393
  var { getPemBodyAsB64u } = require_crypto();
119394
119394
  var { log: log22 } = require_logger();
119395
119395
  var HttpClient = require_http();
@@ -119700,14 +119700,14 @@ var require_client = __commonJS({
119700
119700
  */
119701
119701
  async getChallengeKeyAuthorization(challenge) {
119702
119702
  const jwk = this.http.getJwk();
119703
- const keysum = createHash51("sha256").update(JSON.stringify(jwk));
119703
+ const keysum = createHash53("sha256").update(JSON.stringify(jwk));
119704
119704
  const thumbprint = keysum.digest("base64url");
119705
119705
  const result = `${challenge.token}.${thumbprint}`;
119706
119706
  if (challenge.type === "http-01") {
119707
119707
  return result;
119708
119708
  }
119709
119709
  if (challenge.type === "dns-01") {
119710
- return createHash51("sha256").update(result).digest("base64url");
119710
+ return createHash53("sha256").update(result).digest("base64url");
119711
119711
  }
119712
119712
  if (challenge.type === "tls-alpn-01") {
119713
119713
  return result;
@@ -262387,7 +262387,7 @@ var require_websocket2 = __commonJS({
262387
262387
  var http6 = __require("http");
262388
262388
  var net5 = __require("net");
262389
262389
  var tls2 = __require("tls");
262390
- var { randomBytes: randomBytes31, createHash: createHash51 } = __require("crypto");
262390
+ var { randomBytes: randomBytes31, createHash: createHash53 } = __require("crypto");
262391
262391
  var { Duplex: Duplex3, Readable } = __require("stream");
262392
262392
  var { URL: URL3 } = __require("url");
262393
262393
  var PerMessageDeflate3 = require_permessage_deflate2();
@@ -263047,7 +263047,7 @@ var require_websocket2 = __commonJS({
263047
263047
  abortHandshake(websocket, socket, "Invalid Upgrade header");
263048
263048
  return;
263049
263049
  }
263050
- const digest3 = createHash51("sha1").update(key + GUID).digest("base64");
263050
+ const digest3 = createHash53("sha1").update(key + GUID).digest("base64");
263051
263051
  if (res.headers["sec-websocket-accept"] !== digest3) {
263052
263052
  abortHandshake(websocket, socket, "Invalid Sec-WebSocket-Accept header");
263053
263053
  return;
@@ -263414,7 +263414,7 @@ var require_websocket_server = __commonJS({
263414
263414
  var EventEmitter15 = __require("events");
263415
263415
  var http6 = __require("http");
263416
263416
  var { Duplex: Duplex3 } = __require("stream");
263417
- var { createHash: createHash51 } = __require("crypto");
263417
+ var { createHash: createHash53 } = __require("crypto");
263418
263418
  var extension3 = require_extension2();
263419
263419
  var PerMessageDeflate3 = require_permessage_deflate2();
263420
263420
  var subprotocol3 = require_subprotocol();
@@ -263715,7 +263715,7 @@ var require_websocket_server = __commonJS({
263715
263715
  );
263716
263716
  }
263717
263717
  if (this._state > RUNNING) return abortHandshake(socket, 503);
263718
- const digest3 = createHash51("sha1").update(key + GUID).digest("base64");
263718
+ const digest3 = createHash53("sha1").update(key + GUID).digest("base64");
263719
263719
  const headers = [
263720
263720
  "HTTP/1.1 101 Switching Protocols",
263721
263721
  "Upgrade: websocket",
@@ -276522,13 +276522,13 @@ Justification: ${justification || "(none provided)"}`,
276522
276522
  }
276523
276523
  const snapshot = JSON.stringify(this.selfState, null, 2);
276524
276524
  try {
276525
- const { createHash: createHash51 } = await import("node:crypto");
276525
+ const { createHash: createHash53 } = await import("node:crypto");
276526
276526
  const snapshotDir = join44(this.cwd, ".omnius", "identity", "snapshots");
276527
276527
  await mkdir7(snapshotDir, { recursive: true });
276528
276528
  const version5 = this.selfState.version;
276529
276529
  const snapshotPath = join44(snapshotDir, `v${version5}.json`);
276530
276530
  await writeFile12(snapshotPath, snapshot, "utf8");
276531
- const hash = createHash51("sha256").update(snapshot).digest("hex");
276531
+ const hash = createHash53("sha256").update(snapshot).digest("hex");
276532
276532
  await writeFile12(join44(this.cwd, ".omnius", "identity", "latest-hash.txt"), hash, "utf8");
276533
276533
  let ipfsCid = "";
276534
276534
  try {
@@ -276661,8 +276661,8 @@ New: ${newNarrative.slice(0, 200)}...`,
276661
276661
  }
276662
276662
  // ── Helpers ──────────────────────────────────────────────────────────────
276663
276663
  createDefaultState() {
276664
- const { createHash: createHash51 } = __require("node:crypto");
276665
- const machineId = createHash51("sha256").update(this.cwd).digest("hex").slice(0, 12);
276664
+ const { createHash: createHash53 } = __require("node:crypto");
276665
+ const machineId = createHash53("sha256").update(this.cwd).digest("hex").slice(0, 12);
276666
276666
  return {
276667
276667
  self_id: `omnius-${machineId}`,
276668
276668
  version: 1,
@@ -276744,9 +276744,9 @@ New: ${newNarrative.slice(0, 200)}...`,
276744
276744
  let cid;
276745
276745
  if (this.selfState.version > prevVersion) {
276746
276746
  try {
276747
- const { createHash: createHash51 } = await import("node:crypto");
276747
+ const { createHash: createHash53 } = await import("node:crypto");
276748
276748
  const stateJson = JSON.stringify(this.selfState);
276749
- const hash = createHash51("sha256").update(stateJson).digest("hex").slice(0, 32);
276749
+ const hash = createHash53("sha256").update(stateJson).digest("hex").slice(0, 32);
276750
276750
  const cidsPath = join44(this.cwd, ".omnius", "identity", "cids.json");
276751
276751
  const cidsData = { latest: "", hash, version: this.selfState.version };
276752
276752
  try {
@@ -297713,6 +297713,12 @@ function updateWorkboardCard(workingDir, input) {
297713
297713
  updates.lane = "blocked";
297714
297714
  if ((updates.status === "open" || updates.status === "in_progress") && card.lane === "blocked" && !updates.lane)
297715
297715
  updates.lane = "worker";
297716
+ validateSpecialCardAdmission({
297717
+ ...card,
297718
+ ...updates,
297719
+ evidenceRequirements: updates.evidenceRequirements ?? card.evidenceRequirements,
297720
+ ownedFiles: updates.ownedFiles ?? card.ownedFiles
297721
+ });
297716
297722
  const decisionReason = cleanString(input.decisionReason);
297717
297723
  const decision2 = decisionReason ? makeDecision(updates.assignee && updates.assignee !== card.assignee ? "reassigned" : updates.status === "blocked" ? "blocked" : "note", decisionReason, { cardId: card.id, actor: input.actor, createdAt: now2 }) : void 0;
297718
297724
  return appendWorkboardEvents(workingDir, runId, [{
@@ -297992,6 +297998,23 @@ function verifyCompileCardEvidence(card) {
297992
297998
  missing: ["fresh verifier output after patch"]
297993
297999
  };
297994
298000
  }
298001
+ function compactWorkboardCard(card) {
298002
+ return definedOnly({
298003
+ id: truncateForModel(card.id),
298004
+ title: truncateForModel(card.title),
298005
+ status: card.status,
298006
+ lane: card.lane,
298007
+ assignee: truncateForModel(card.assignee),
298008
+ dependencies: truncateStringArrayForModel(card.dependencies),
298009
+ evidenceCount: card.evidence.length,
298010
+ evidenceRequirements: truncateStringArrayForModel(card.evidenceRequirements),
298011
+ blocker: truncateForModel(card.blocker),
298012
+ diagnosticFingerprint: truncateForModel(card.diagnosticFingerprint),
298013
+ ownedFiles: truncateStringArrayForModel(card.ownedFiles),
298014
+ verifierCommand: truncateForModel(card.verifierCommand),
298015
+ rank: card.rank
298016
+ });
298017
+ }
297995
298018
  function compactWorkboardSnapshot(snapshot, maxCards = 24) {
297996
298019
  const counts = {
297997
298020
  open: 0,
@@ -298003,26 +298026,17 @@ function compactWorkboardSnapshot(snapshot, maxCards = 24) {
298003
298026
  };
298004
298027
  for (const card of snapshot.cards)
298005
298028
  counts[card.status]++;
298006
- const cards = snapshot.cards.slice(0, maxCards).map((card) => ({
298007
- id: card.id,
298008
- title: card.title,
298009
- status: card.status,
298010
- lane: card.lane,
298011
- assignee: card.assignee,
298012
- dependencies: card.dependencies,
298013
- evidenceCount: card.evidence.length,
298014
- evidenceRequirements: card.evidenceRequirements,
298015
- blocker: card.blocker
298016
- }));
298029
+ const cardLimit = Math.max(0, Math.min(50, Math.floor(maxCards)));
298030
+ const cards = snapshot.cards.slice(0, cardLimit).map(compactWorkboardCard);
298017
298031
  return {
298018
- runId: snapshot.runId,
298032
+ runId: truncateRequiredForModel(snapshot.runId),
298019
298033
  status: snapshot.status,
298020
- owner: snapshot.owner,
298034
+ owner: truncateRequiredForModel(snapshot.owner),
298021
298035
  updatedAt: snapshot.updatedAt,
298022
298036
  counts,
298023
298037
  cards,
298024
298038
  hiddenCardCount: Math.max(0, snapshot.cards.length - cards.length),
298025
- diagnostics: snapshot.diagnostics.slice(0, 12)
298039
+ diagnostics: snapshot.diagnostics.slice(0, WORKBOARD_MODEL_MAX_DIAGNOSTICS).map(compactWorkboardDiagnosticForModel)
298026
298040
  };
298027
298041
  }
298028
298042
  function formatWorkboardCompact(snapshot, maxCards = 24) {
@@ -298136,7 +298150,7 @@ function normalizeCardInput(input, timestamp) {
298136
298150
  assertEnum(input.role, VALID_ROLES, "role");
298137
298151
  const dependencies = normalizeStringArray(input.dependencies);
298138
298152
  const evidenceRequirements = normalizeStringArray(input.evidenceRequirements);
298139
- return {
298153
+ const card = {
298140
298154
  id: cleanString(input.id) || newCardId(),
298141
298155
  title,
298142
298156
  description: cleanString(input.description) || "",
@@ -298158,6 +298172,8 @@ function normalizeCardInput(input, timestamp) {
298158
298172
  verifierCommand: cleanString(input.verifierCommand),
298159
298173
  rank: typeof input.rank === "number" && Number.isFinite(input.rank) ? input.rank : void 0
298160
298174
  };
298175
+ validateSpecialCardAdmission(card);
298176
+ return card;
298161
298177
  }
298162
298178
  function normalizeCardUpdates(input) {
298163
298179
  const updates = {};
@@ -298199,6 +298215,26 @@ function normalizeCardUpdates(input) {
298199
298215
  throw new WorkboardError("empty_update", "at least one card field must be updated");
298200
298216
  return updates;
298201
298217
  }
298218
+ function validateSpecialCardAdmission(card) {
298219
+ const compileLike = card.id.startsWith("compile-") || Boolean(card.diagnosticFingerprint) || card.assignee?.startsWith("fixer:compile-") === true;
298220
+ if (compileLike) {
298221
+ const missing = [];
298222
+ if (!cleanString(card.diagnosticFingerprint))
298223
+ missing.push("diagnosticFingerprint");
298224
+ if (!cleanString(card.verifierCommand))
298225
+ missing.push("verifierCommand");
298226
+ if (!Array.isArray(card.ownedFiles) || card.ownedFiles.length === 0)
298227
+ missing.push("ownedFiles");
298228
+ if (missing.length > 0) {
298229
+ throw new WorkboardError("invalid_compile_card", `compile cards require ${missing.join(", ")}`, { cardId: card.id, missing });
298230
+ }
298231
+ }
298232
+ if (card.id.startsWith("failure-") && card.evidenceRequirements.length === 0) {
298233
+ throw new WorkboardError("invalid_failure_card", "failure recovery cards require explicit evidence requirements", {
298234
+ cardId: card.id
298235
+ });
298236
+ }
298237
+ }
298202
298238
  function validateDependencies(cardId, dependencies, knownCardIds) {
298203
298239
  for (const dependency of dependencies) {
298204
298240
  if (dependency === cardId) {
@@ -298398,6 +298434,75 @@ function evidenceMatchesRequirement(evidence, lowercaseRequirement) {
298398
298434
  function diagnosticKey(diagnostic) {
298399
298435
  return `${diagnostic.code}:${diagnostic.cardId ?? ""}:${diagnostic.assignee ?? ""}`;
298400
298436
  }
298437
+ function compactWorkboardDiagnosticForModel(diagnostic) {
298438
+ return definedOnly({
298439
+ ...diagnostic,
298440
+ id: truncateForModel(diagnostic.id),
298441
+ message: truncateForModel(diagnostic.message),
298442
+ cardId: truncateForModel(diagnostic.cardId),
298443
+ actor: truncateForModel(diagnostic.actor),
298444
+ assignee: truncateForModel(diagnostic.assignee),
298445
+ suggestedAction: truncateForModel(diagnostic.suggestedAction),
298446
+ details: diagnostic.details ? compactWorkboardToolPayload(diagnostic.details) : void 0
298447
+ });
298448
+ }
298449
+ function compactWorkboardToolPayload(value2, depth = 0) {
298450
+ if (depth > 5)
298451
+ return "[truncated]";
298452
+ if (typeof value2 === "string")
298453
+ return truncateForModel(value2);
298454
+ if (Array.isArray(value2)) {
298455
+ return value2.slice(0, WORKBOARD_MODEL_MAX_ARRAY_ITEMS).map((item) => compactWorkboardToolPayload(item, depth + 1));
298456
+ }
298457
+ if (!value2 || typeof value2 !== "object")
298458
+ return value2;
298459
+ if (isWorkboardSnapshot(value2))
298460
+ return compactWorkboardSnapshot(value2, WORKBOARD_MODEL_MAX_CARDS);
298461
+ if (isWorkboardCard(value2))
298462
+ return compactWorkboardCard(value2);
298463
+ const out = {};
298464
+ for (const [key, item] of Object.entries(value2)) {
298465
+ if (key === "snapshot" && isWorkboardSnapshot(item)) {
298466
+ out["board"] = compactWorkboardSnapshot(item, WORKBOARD_MODEL_MAX_CARDS);
298467
+ continue;
298468
+ }
298469
+ if (key === "card" && isWorkboardCard(item)) {
298470
+ out[key] = compactWorkboardCard(item);
298471
+ continue;
298472
+ }
298473
+ if (key === "cards" && Array.isArray(item)) {
298474
+ out[key] = item.slice(0, WORKBOARD_MODEL_MAX_CARDS).map((card) => isWorkboardCard(card) ? compactWorkboardCard(card) : compactWorkboardToolPayload(card, depth + 1));
298475
+ continue;
298476
+ }
298477
+ out[key] = compactWorkboardToolPayload(item, depth + 1);
298478
+ }
298479
+ return out;
298480
+ }
298481
+ function isWorkboardSnapshot(value2) {
298482
+ const record = value2;
298483
+ return record.schemaVersion === WORKBOARD_SCHEMA_VERSION && Array.isArray(record.cards) && typeof record.runId === "string";
298484
+ }
298485
+ function isWorkboardCard(value2) {
298486
+ if (!value2 || typeof value2 !== "object" || Array.isArray(value2))
298487
+ return false;
298488
+ const record = value2;
298489
+ return typeof record.id === "string" && typeof record.title === "string" && typeof record.status === "string" && Array.isArray(record.evidence);
298490
+ }
298491
+ function truncateForModel(value2) {
298492
+ if (!value2)
298493
+ return void 0;
298494
+ if (value2.length <= WORKBOARD_MODEL_MAX_STRING)
298495
+ return value2;
298496
+ return `${value2.slice(0, WORKBOARD_MODEL_MAX_STRING - 15)}...[truncated]`;
298497
+ }
298498
+ function truncateRequiredForModel(value2) {
298499
+ return truncateForModel(value2) ?? "";
298500
+ }
298501
+ function truncateStringArrayForModel(value2) {
298502
+ if (!Array.isArray(value2))
298503
+ return [];
298504
+ return value2.slice(0, WORKBOARD_MODEL_MAX_ARRAY_ITEMS).map((item) => truncateForModel(item)).filter((item) => Boolean(item));
298505
+ }
298401
298506
  function defaultLaneForStatus(status) {
298402
298507
  if (status === "blocked")
298403
298508
  return "blocked";
@@ -298660,11 +298765,15 @@ function enumArg(args, name10, allowed) {
298660
298765
  assertEnum(value2, allowed, name10);
298661
298766
  return value2;
298662
298767
  }
298663
- var WORKBOARD_SCHEMA_VERSION, WorkboardError, activeWorkboardWrites, VALID_LANES, VALID_STATUSES, VALID_ROLES, VALID_EVIDENCE_KINDS, REPEATED_FAILURE_THRESHOLD, WorkboardBaseTool, WorkboardCreateTool, WorkboardAddCardTool, WorkboardUpdateCardTool, WorkboardAttachEvidenceTool, WorkboardCompleteCardTool, WorkboardShowTool;
298768
+ var WORKBOARD_SCHEMA_VERSION, WORKBOARD_MODEL_MAX_CARDS, WORKBOARD_MODEL_MAX_ARRAY_ITEMS, WORKBOARD_MODEL_MAX_DIAGNOSTICS, WORKBOARD_MODEL_MAX_STRING, WorkboardError, activeWorkboardWrites, VALID_LANES, VALID_STATUSES, VALID_ROLES, VALID_EVIDENCE_KINDS, REPEATED_FAILURE_THRESHOLD, WorkboardBaseTool, WorkboardCreateTool, WorkboardAddCardTool, WorkboardUpdateCardTool, WorkboardAttachEvidenceTool, WorkboardCompleteCardTool, WorkboardShowTool;
298664
298769
  var init_workboard = __esm({
298665
298770
  "packages/execution/dist/tools/workboard.js"() {
298666
298771
  "use strict";
298667
298772
  WORKBOARD_SCHEMA_VERSION = 1;
298773
+ WORKBOARD_MODEL_MAX_CARDS = 8;
298774
+ WORKBOARD_MODEL_MAX_ARRAY_ITEMS = 8;
298775
+ WORKBOARD_MODEL_MAX_DIAGNOSTICS = 8;
298776
+ WORKBOARD_MODEL_MAX_STRING = 260;
298668
298777
  WorkboardError = class extends Error {
298669
298778
  code;
298670
298779
  details;
@@ -298691,18 +298800,22 @@ var init_workboard = __esm({
298691
298800
  }
298692
298801
  result(start2, payload, mutated, runId) {
298693
298802
  const mutatedFiles = mutated && runId ? [workboardPaths(this.workingDir, runId).eventsPath, workboardPaths(this.workingDir, runId).activePath] : void 0;
298803
+ const modelPayload = compactWorkboardToolPayload(payload);
298694
298804
  return {
298695
298805
  success: true,
298696
298806
  output: JSON.stringify(payload),
298807
+ llmContent: JSON.stringify(modelPayload),
298697
298808
  durationMs: performance.now() - start2,
298698
298809
  mutated,
298699
298810
  mutatedFiles
298700
298811
  };
298701
298812
  }
298702
298813
  failure(start2, code8, message2, details, output) {
298814
+ const payload = output ?? { ok: false, code: code8, message: message2, details };
298703
298815
  return {
298704
298816
  success: false,
298705
- output: JSON.stringify(output ?? { ok: false, code: code8, message: message2, details }),
298817
+ output: JSON.stringify(payload),
298818
+ llmContent: JSON.stringify(compactWorkboardToolPayload(payload)),
298706
298819
  error: message2,
298707
298820
  durationMs: performance.now() - start2
298708
298821
  };
@@ -298747,7 +298860,7 @@ var init_workboard = __esm({
298747
298860
  actor: stringArg(args, "actor"),
298748
298861
  cards: normalizeCardsArg(args["cards"])
298749
298862
  });
298750
- return this.result(start2, { ok: true, board: compactWorkboardSnapshot(snapshot), snapshot }, true, runId);
298863
+ return this.result(start2, { ok: true, board: compactWorkboardSnapshot(snapshot) }, true, runId);
298751
298864
  } catch (err) {
298752
298865
  return this.catchFailure(start2, err);
298753
298866
  }
@@ -298784,7 +298897,7 @@ var init_workboard = __esm({
298784
298897
  actor: stringArg(args, "actor"),
298785
298898
  decisionReason: stringArg(args, "decision_reason", "decisionReason")
298786
298899
  });
298787
- return this.result(start2, { ok: true, board: compactWorkboardSnapshot(snapshot), card: snapshot.cards.at(-1) }, true, runId);
298900
+ return this.result(start2, { ok: true, board: compactWorkboardSnapshot(snapshot), card: compactWorkboardCard(snapshot.cards.at(-1)) }, true, runId);
298788
298901
  } catch (err) {
298789
298902
  return this.catchFailure(start2, err);
298790
298903
  }
@@ -298826,7 +298939,8 @@ var init_workboard = __esm({
298826
298939
  decisionReason: stringArg(args, "decision_reason", "decisionReason"),
298827
298940
  updates
298828
298941
  });
298829
- return this.result(start2, { ok: true, board: compactWorkboardSnapshot(snapshot), card: snapshot.cards.find((card) => card.id === cardId) }, true, runId);
298942
+ const card = snapshot.cards.find((card2) => card2.id === cardId);
298943
+ return this.result(start2, { ok: true, board: compactWorkboardSnapshot(snapshot), ...card ? { card: compactWorkboardCard(card) } : {} }, true, runId);
298830
298944
  } catch (err) {
298831
298945
  return this.catchFailure(start2, err);
298832
298946
  }
@@ -298873,7 +298987,8 @@ var init_workboard = __esm({
298873
298987
  actor: stringArg(args, "actor"),
298874
298988
  evidence
298875
298989
  });
298876
- return this.result(start2, { ok: true, board: compactWorkboardSnapshot(snapshot), card: snapshot.cards.find((card) => card.id === cardId) }, true, runId);
298990
+ const card = snapshot.cards.find((card2) => card2.id === cardId);
298991
+ return this.result(start2, { ok: true, board: compactWorkboardSnapshot(snapshot), ...card ? { card: compactWorkboardCard(card) } : {} }, true, runId);
298877
298992
  } catch (err) {
298878
298993
  return this.catchFailure(start2, err);
298879
298994
  }
@@ -298925,7 +299040,12 @@ var init_workboard = __esm({
298925
299040
  board: compactWorkboardSnapshot(result.snapshot)
298926
299041
  });
298927
299042
  }
298928
- return this.result(start2, { ok: true, message: result.message, board: compactWorkboardSnapshot(result.snapshot), card: result.card }, true, runId);
299043
+ return this.result(start2, {
299044
+ ok: true,
299045
+ message: result.message,
299046
+ board: compactWorkboardSnapshot(result.snapshot),
299047
+ ...result.card ? { card: compactWorkboardCard(result.card) } : {}
299048
+ }, true, runId);
298929
299049
  } catch (err) {
298930
299050
  return this.catchFailure(start2, err);
298931
299051
  }
@@ -553029,7 +553149,28 @@ print(json.dumps({"ok": False, "error": "No whisper backend available"}))
553029
553149
 
553030
553150
  // packages/execution/dist/tools/full-sub-agent.js
553031
553151
  import { spawn as spawn19, ChildProcess } from "node:child_process";
553032
- import { randomBytes as randomBytes18 } from "node:crypto";
553152
+ import { createHash as createHash24, randomBytes as randomBytes18 } from "node:crypto";
553153
+ function fullSubAgentTaskHash(task) {
553154
+ return createHash24("sha256").update(task).digest("hex").slice(0, 12);
553155
+ }
553156
+ function sanitizeFullSubAgentModelText(value2, maxChars = FULL_SUB_AGENT_MODEL_MAX_CHARS) {
553157
+ const stripped = value2.replace(/\x1b\[[0-9;?]*[ -/]*[@-~]/g, "").replace(/<think>[\s\S]*?<\/think>/gi, "").replace(/<think>[\s\S]*$/gi, "");
553158
+ const lines = stripped.split(/\r?\n/).map((line) => line.trim()).filter(Boolean).filter((line) => !/^🔊/.test(line)).filter((line) => !/SHELL TRANSCRIPT/i.test(line)).filter((line) => !/^Task:\s/i.test(line)).filter((line) => !/^E Task timeout/i.test(line)).filter((line) => !/^E Incomplete:/i.test(line)).filter((line) => !/^⚠ Task incomplete/i.test(line)).slice(-FULL_SUB_AGENT_MODEL_MAX_LINES);
553159
+ const joined = lines.join("\n");
553160
+ return joined.length > maxChars ? `${joined.slice(0, Math.max(0, maxChars - 14)).trimEnd()}...[truncated]` : joined;
553161
+ }
553162
+ function fullSubAgentModelContent(input) {
553163
+ const taskPreview = sanitizeFullSubAgentModelText(input.task, 220);
553164
+ const resultPreview = input.output ? sanitizeFullSubAgentModelText(input.output) : "";
553165
+ return [
553166
+ `[full_sub_agent] id=${input.id} status=${input.status} exit_code=${input.exitCode ?? "unknown"} task_sha256=${fullSubAgentTaskHash(input.task)} output_lines=${input.outputLines ?? 0}`,
553167
+ taskPreview ? `task_preview:
553168
+ ${taskPreview}` : null,
553169
+ resultPreview ? `result_preview:
553170
+ ${resultPreview}` : null,
553171
+ `full_output_available_via=full_sub_agent action=output id=${input.id}`
553172
+ ].filter((line) => Boolean(line)).join("\n");
553173
+ }
553033
553174
  function buildSubProcessArgs(opts) {
553034
553175
  const args = [];
553035
553176
  args.push(opts.task);
@@ -553193,7 +553334,7 @@ function killAllFullSubAgents() {
553193
553334
  function removeFullSubAgent(id2) {
553194
553335
  _activeSubProcesses.delete(id2);
553195
553336
  }
553196
- var _activeSubProcesses, FullSubAgentTool;
553337
+ var _activeSubProcesses, FULL_SUB_AGENT_MODEL_MAX_LINES, FULL_SUB_AGENT_MODEL_MAX_CHARS, FullSubAgentTool;
553197
553338
  var init_full_sub_agent = __esm({
553198
553339
  "packages/execution/dist/tools/full-sub-agent.js"() {
553199
553340
  "use strict";
@@ -553201,6 +553342,8 @@ var init_full_sub_agent = __esm({
553201
553342
  init_model_broker();
553202
553343
  init_process_lifecycle();
553203
553344
  _activeSubProcesses = /* @__PURE__ */ new Map();
553345
+ FULL_SUB_AGENT_MODEL_MAX_LINES = 6;
553346
+ FULL_SUB_AGENT_MODEL_MAX_CHARS = 900;
553204
553347
  FullSubAgentTool = class {
553205
553348
  name = "full_sub_agent";
553206
553349
  description = "Spawn a COMPLETE Omnius sub-process with ALL tools and capabilities. Unlike sub_agent (shared process, limited tools), this spawns a separate omnius instance with its own clean context window, full tool set, memory, skills, and COHERE access. Use for complex multi-file tasks that benefit from a fresh context. The sub-process runs omnius --non-interactive until task_complete, abort, or timeout. By default this tool returns immediately with a process ID for monitoring; set wait=true to block until the child exits.";
@@ -553326,6 +553469,14 @@ var init_full_sub_agent = __esm({
553326
553469
  Output lines: ${entry.outputBuffer.length}` + (tail ? `
553327
553470
 
553328
553471
  ${tail}` : ""),
553472
+ llmContent: fullSubAgentModelContent({
553473
+ id: entry.id,
553474
+ task,
553475
+ status: "completed",
553476
+ exitCode,
553477
+ output: tail || output,
553478
+ outputLines: entry.outputBuffer.length
553479
+ }),
553329
553480
  durationMs
553330
553481
  };
553331
553482
  }
@@ -553334,19 +553485,35 @@ ${tail}` : ""),
553334
553485
  output: output ? `Full Omnius sub-agent failed: ${entry.id}
553335
553486
 
553336
553487
  ${tail || output}` : "",
553488
+ llmContent: fullSubAgentModelContent({
553489
+ id: entry.id,
553490
+ task,
553491
+ status: "failed",
553492
+ exitCode,
553493
+ output: tail || output,
553494
+ outputLines: entry.outputBuffer.length
553495
+ }),
553337
553496
  error: `Full Omnius sub-agent exited before successful completion (exit code ${exitCode ?? "unknown"}).`,
553338
553497
  durationMs
553339
553498
  };
553340
553499
  }
553500
+ const taskPreview = sanitizeFullSubAgentModelText(task, 220);
553341
553501
  return {
553342
553502
  success: true,
553343
553503
  output: `Full Omnius sub-agent spawned: ${entry.id}
553344
553504
  PID: ${entry.pid}
553345
553505
  Model: ${model}
553346
- Task: ${task.slice(0, 100)}
553347
- Use full_sub_agent(action='status', id='${entry.id}') to check progress.
553506
+ task_sha256=${fullSubAgentTaskHash(task)}
553507
+ ` + (taskPreview ? ` task_preview: ${taskPreview.replace(/\n/g, " ")}
553508
+ ` : "") + ` Use full_sub_agent(action='status', id='${entry.id}') to check progress.
553348
553509
  Use full_sub_agent(action='output', id='${entry.id}') to see output.
553349
553510
  Use full_sub_agent(action='stop', id='${entry.id}') to kill it.`,
553511
+ llmContent: fullSubAgentModelContent({
553512
+ id: entry.id,
553513
+ task,
553514
+ status: "running",
553515
+ outputLines: entry.outputBuffer.length
553516
+ }),
553350
553517
  durationMs: performance.now() - start2
553351
553518
  };
553352
553519
  }
@@ -553362,6 +553529,13 @@ ${tail || output}` : "",
553362
553529
  output: `${id2} [${entry.status}] PID:${entry.pid} ${runtime}s
553363
553530
  Task: ${entry.task.slice(0, 100)}
553364
553531
  Output lines: ${entry.outputBuffer.length}`,
553532
+ llmContent: fullSubAgentModelContent({
553533
+ id: id2,
553534
+ task: entry.task,
553535
+ status: entry.status,
553536
+ exitCode: entry.exitCode,
553537
+ outputLines: entry.outputBuffer.length
553538
+ }),
553365
553539
  durationMs: performance.now() - start2
553366
553540
  };
553367
553541
  }
@@ -553372,7 +553546,18 @@ ${tail || output}` : "",
553372
553546
  const runtime = ((Date.now() - e2.startedAt) / 1e3).toFixed(0);
553373
553547
  return `${e2.id} [${e2.status}] PID:${e2.pid} ${runtime}s — ${e2.task.slice(0, 60)}`;
553374
553548
  });
553375
- return { success: true, output: lines.join("\n"), durationMs: performance.now() - start2 };
553549
+ return {
553550
+ success: true,
553551
+ output: lines.join("\n"),
553552
+ llmContent: all2.map((e2) => fullSubAgentModelContent({
553553
+ id: e2.id,
553554
+ task: e2.task,
553555
+ status: e2.status,
553556
+ exitCode: e2.exitCode,
553557
+ outputLines: e2.outputBuffer.length
553558
+ })).join("\n\n"),
553559
+ durationMs: performance.now() - start2
553560
+ };
553376
553561
  }
553377
553562
  case "list":
553378
553563
  return this.execute({ ...args, action: "status" });
@@ -553382,8 +553567,20 @@ ${tail || output}` : "",
553382
553567
  if (!entry)
553383
553568
  return { success: false, output: "", error: `Unknown sub-agent: ${id2}`, durationMs: performance.now() - start2 };
553384
553569
  const tail = entry.outputBuffer.slice(-50).join("\n");
553385
- return { success: true, output: `${id2} output (last 50 lines):
553386
- ${tail}`, durationMs: performance.now() - start2 };
553570
+ return {
553571
+ success: true,
553572
+ output: `${id2} output (last 50 lines):
553573
+ ${tail}`,
553574
+ llmContent: fullSubAgentModelContent({
553575
+ id: id2,
553576
+ task: entry.task,
553577
+ status: entry.status,
553578
+ exitCode: entry.exitCode,
553579
+ output: tail,
553580
+ outputLines: entry.outputBuffer.length
553581
+ }),
553582
+ durationMs: performance.now() - start2
553583
+ };
553387
553584
  }
553388
553585
  case "stop": {
553389
553586
  const id2 = String(args["id"] ?? "");
@@ -555507,7 +555704,7 @@ var init_client3 = __esm({
555507
555704
  import { existsSync as existsSync73, readFileSync as readFileSync52, writeFileSync as writeFileSync35, mkdirSync as mkdirSync44, chmodSync, statSync as statSync30 } from "node:fs";
555508
555705
  import { join as join85, dirname as dirname23 } from "node:path";
555509
555706
  import { homedir as homedir23 } from "node:os";
555510
- import { randomBytes as randomBytes19, createHash as createHash24 } from "node:crypto";
555707
+ import { randomBytes as randomBytes19, createHash as createHash25 } from "node:crypto";
555511
555708
  function secretsPath(scope, repoRoot) {
555512
555709
  return scope === "global" ? join85(homedir23(), ".omnius", "secrets.json") : join85(repoRoot, ".omnius", "secrets.json");
555513
555710
  }
@@ -555548,7 +555745,7 @@ function sanitizeHint(hint) {
555548
555745
  return hint.toUpperCase().replace(/[^A-Z0-9]+/g, "_").replace(/^_+|_+$/g, "").slice(0, 32) || "GENERIC";
555549
555746
  }
555550
555747
  function shortDigest(value2) {
555551
- return createHash24("sha256").update(value2).digest("hex").slice(0, 6);
555748
+ return createHash25("sha256").update(value2).digest("hex").slice(0, 6);
555552
555749
  }
555553
555750
  function randomSuffix() {
555554
555751
  return randomBytes19(3).toString("hex");
@@ -557362,7 +557559,7 @@ var init_environment_snapshot = __esm({
557362
557559
  import { existsSync as existsSync77, mkdirSync as mkdirSync46, writeFileSync as writeFileSync38, readFileSync as readFileSync56, readdirSync as readdirSync26, unlinkSync as unlinkSync16, rmSync as rmSync10 } from "node:fs";
557363
557560
  import { join as join88, basename as basename18, isAbsolute as isAbsolute8, resolve as resolve46 } from "node:path";
557364
557561
  import { homedir as homedir26 } from "node:os";
557365
- import { createHash as createHash25 } from "node:crypto";
557562
+ import { createHash as createHash26 } from "node:crypto";
557366
557563
  function isYouTubeUrl2(url) {
557367
557564
  return /(?:youtube\.com\/(?:watch|shorts|live|embed|v\/)|youtu\.be\/)/i.test(url);
557368
557565
  }
@@ -557447,7 +557644,7 @@ async function extractAudioIfPresent(videoPath, audioPath, probe) {
557447
557644
  function imageHash(imagePath) {
557448
557645
  try {
557449
557646
  const data = readFileSync56(imagePath);
557450
- return createHash25("md5").update(data).digest("hex").slice(0, 12);
557647
+ return createHash26("md5").update(data).digest("hex").slice(0, 12);
557451
557648
  } catch {
557452
557649
  return "unknown";
557453
557650
  }
@@ -569598,14 +569795,14 @@ var init_artifact_inspector = __esm({
569598
569795
  // packages/orchestrator/dist/lesson-bank.js
569599
569796
  import { existsSync as existsSync91, mkdirSync as mkdirSync52, appendFileSync as appendFileSync7, readFileSync as readFileSync69 } from "node:fs";
569600
569797
  import { join as join101, dirname as dirname30 } from "node:path";
569601
- import { createHash as createHash26 } from "node:crypto";
569798
+ import { createHash as createHash27 } from "node:crypto";
569602
569799
  function tokenize4(text2) {
569603
569800
  if (!text2)
569604
569801
  return [];
569605
569802
  return text2.toLowerCase().split(TOKENIZE_RE).filter((t2) => t2.length >= 3).slice(0, 80);
569606
569803
  }
569607
569804
  function shortHash(s2) {
569608
- return createHash26("sha256").update(s2).digest("hex").slice(0, 16);
569805
+ return createHash27("sha256").update(s2).digest("hex").slice(0, 16);
569609
569806
  }
569610
569807
  function solicit(args) {
569611
569808
  const { taskGoal, stem, reflections, successOutputPreview } = args;
@@ -569701,7 +569898,7 @@ var init_lesson_bank = __esm({
569701
569898
  // packages/orchestrator/dist/intervention-replay.js
569702
569899
  import { existsSync as existsSync92, mkdirSync as mkdirSync53, readFileSync as readFileSync70, writeFileSync as writeFileSync43, readdirSync as readdirSync29 } from "node:fs";
569703
569900
  import { join as join102, dirname as dirname31 } from "node:path";
569704
- import { createHash as createHash27 } from "node:crypto";
569901
+ import { createHash as createHash28 } from "node:crypto";
569705
569902
  function checkpointDir2(workingDir) {
569706
569903
  return workingDir ? join102(workingDir, ".omnius", "checkpoints") : join102(process.env["HOME"] || ".", ".omnius", "checkpoints");
569707
569904
  }
@@ -569735,7 +569932,7 @@ function sanitizeMessagesForCheckpoint(messages2) {
569735
569932
  deduped.push(m2);
569736
569933
  continue;
569737
569934
  }
569738
- const digest3 = createHash27("sha1").update(content).digest("hex");
569935
+ const digest3 = createHash28("sha1").update(content).digest("hex");
569739
569936
  if (seenSystemDigests.has(digest3))
569740
569937
  continue;
569741
569938
  seenSystemDigests.add(digest3);
@@ -573691,12 +573888,12 @@ var init_codeGraphLink = __esm({
573691
573888
  });
573692
573889
 
573693
573890
  // packages/orchestrator/dist/artifactContract.js
573694
- import { createHash as createHash28 } from "node:crypto";
573891
+ import { createHash as createHash29 } from "node:crypto";
573695
573892
  function shortHash2(content) {
573696
573893
  if (!content)
573697
573894
  return "empty";
573698
573895
  try {
573699
- return createHash28("sha256").update(content.slice(0, 4096)).digest("hex").slice(0, 8);
573896
+ return createHash29("sha256").update(content.slice(0, 4096)).digest("hex").slice(0, 8);
573700
573897
  } catch {
573701
573898
  let h = 2166136261;
573702
573899
  for (let i2 = 0; i2 < Math.min(content.length, 4096); i2++) {
@@ -577239,6 +577436,46 @@ function hasConcreteGoalMessage(messages2) {
577239
577436
  function hasUserMessage(messages2) {
577240
577437
  return messages2.some((message2) => message2.role === "user" && messageText(message2.content).trim().length > 0);
577241
577438
  }
577439
+ function hasAssistantPayload(message2) {
577440
+ const text2 = messageText(message2.content).trim();
577441
+ if (text2 && !/^(null|undefined)$/i.test(text2))
577442
+ return true;
577443
+ const record = message2;
577444
+ if (Array.isArray(record["tool_calls"]) && record["tool_calls"].length > 0)
577445
+ return true;
577446
+ return Boolean(record["function_call"]);
577447
+ }
577448
+ function staleToolFailureKey(content) {
577449
+ const text2 = content.replace(/\s+/g, " ").trim();
577450
+ if (!/(FAILED:|failed again|doom-loop|result compacted|Earlier read of .* cleared)/i.test(text2)) {
577451
+ return null;
577452
+ }
577453
+ const tool = text2.match(/^\[?([a-zA-Z_][a-zA-Z0-9_]*)\(/)?.[1] ?? "tool";
577454
+ const path16 = text2.match(/"path"\s*:\s*"([^"]+)"/)?.[1] ?? text2.match(/Earlier read of ([^ ]+) cleared/)?.[1] ?? "";
577455
+ const family = text2.match(/FAILED:\s*\[([^\]\n]+)/i)?.[1] ?? text2.match(/(doom-loop[^.]+)/i)?.[1] ?? text2.match(/(Earlier read of [^ ]+ cleared)/i)?.[1] ?? "failure";
577456
+ return [tool, path16, family].join("|").toLowerCase().replace(/[a-f0-9]{16,}/g, "<hash>").replace(/\d+/g, "#");
577457
+ }
577458
+ function retireDuplicateToolFailures(messages2) {
577459
+ const seen = /* @__PURE__ */ new Set();
577460
+ const out = [...messages2];
577461
+ for (let index = out.length - 1; index >= 0; index--) {
577462
+ const message2 = out[index];
577463
+ if (message2.role !== "tool" || typeof message2.content !== "string")
577464
+ continue;
577465
+ const key = staleToolFailureKey(message2.content);
577466
+ if (!key)
577467
+ continue;
577468
+ if (!seen.has(key)) {
577469
+ seen.add(key);
577470
+ continue;
577471
+ }
577472
+ out[index] = {
577473
+ ...message2,
577474
+ content: "[retired_duplicate_tool_failure] newer matching result appears later; do not repeat the same call."
577475
+ };
577476
+ }
577477
+ return out;
577478
+ }
577242
577479
  function prepareModelFacingApiMessages(input) {
577243
577480
  const preserveFirstSystem = input.preserveFirstSystem !== false;
577244
577481
  const sanitized = [];
@@ -577255,6 +577492,16 @@ function prepareModelFacingApiMessages(input) {
577255
577492
  sanitized.push({ ...message2, content: cleaned });
577256
577493
  continue;
577257
577494
  }
577495
+ if (message2.role === "assistant" && !hasAssistantPayload(message2)) {
577496
+ continue;
577497
+ }
577498
+ if (message2.role === "tool" && typeof message2.content === "string") {
577499
+ const cleaned = sanitizeModelVisibleContextText(message2.content);
577500
+ if (!cleaned)
577501
+ continue;
577502
+ sanitized.push({ ...message2, content: cleaned });
577503
+ continue;
577504
+ }
577258
577505
  sanitized.push({ ...message2 });
577259
577506
  }
577260
577507
  const keep = new Array(sanitized.length).fill(true);
@@ -577274,7 +577521,7 @@ function prepareModelFacingApiMessages(input) {
577274
577521
  }
577275
577522
  seenSystemKeys.add(key);
577276
577523
  }
577277
- const deduped = sanitized.filter((_message, index) => keep[index]);
577524
+ const deduped = retireDuplicateToolFailures(sanitized.filter((_message, index) => keep[index]));
577278
577525
  if (!hasUserMessage(deduped) && !hasConcreteGoalMessage(deduped)) {
577279
577526
  const goal = deriveCurrentGoal({
577280
577527
  explicitGoal: input.currentGoal,
@@ -577574,7 +577821,7 @@ var init_evidenceLedger = __esm({
577574
577821
  import { existsSync as existsSync102, mkdirSync as mkdirSync58, readdirSync as readdirSync32, readFileSync as readFileSync78, statSync as statSync39, unlinkSync as unlinkSync17, writeFileSync as writeFileSync48, appendFileSync as appendFileSync9 } from "node:fs";
577575
577822
  import { homedir as homedir35 } from "node:os";
577576
577823
  import { join as join111, resolve as resolve54 } from "node:path";
577577
- import { createHash as createHash29 } from "node:crypto";
577824
+ import { createHash as createHash30 } from "node:crypto";
577578
577825
  function contextWindowDumpDir(cwd4 = process.cwd()) {
577579
577826
  const envDir = process.env["OMNIUS_CONTEXT_WINDOW_DUMP_DIR"]?.trim();
577580
577827
  if (envDir)
@@ -577625,9 +577872,7 @@ function recordContextWindowDump(input) {
577625
577872
  const payload = JSON.stringify(record, null, 2);
577626
577873
  writeFileSync48(filePath, payload, "utf-8");
577627
577874
  writeFileSync48(join111(dir, `latest-${record.agentType}.json`), payload, "utf-8");
577628
- if (record.agentType === "main" || record.agentType === "sub-agent" || record.agentType === "adversary") {
577629
- writeFileSync48(join111(dir, "latest.json"), payload, "utf-8");
577630
- }
577875
+ writeFileSync48(join111(dir, "latest.json"), payload, "utf-8");
577631
577876
  appendFileSync9(join111(dir, "index.jsonl"), JSON.stringify(toSummary(record, filePath)) + "\n", "utf-8");
577632
577877
  maybePruneOldDumpFiles(dir);
577633
577878
  } catch {
@@ -577921,7 +578166,7 @@ function safeId(value2) {
577921
578166
  return String(value2 || "unknown").replace(/[^a-zA-Z0-9_.:-]/g, "_").slice(0, 160);
577922
578167
  }
577923
578168
  function shortHash3(value2) {
577924
- return createHash29("sha256").update(value2).digest("hex").slice(0, 10);
578169
+ return createHash30("sha256").update(value2).digest("hex").slice(0, 10);
577925
578170
  }
577926
578171
  function pruneOldDumpFiles(dir) {
577927
578172
  const raw = Number(process.env["OMNIUS_CONTEXT_WINDOW_DUMP_MAX_FILES"]);
@@ -578334,7 +578579,7 @@ var init_adversaryStream = __esm({
578334
578579
 
578335
578580
  // packages/orchestrator/dist/debugArtifactLibrary.js
578336
578581
  import { appendFileSync as appendFileSync10, existsSync as existsSync103, mkdirSync as mkdirSync59, readFileSync as readFileSync79, statSync as statSync40, writeFileSync as writeFileSync49 } from "node:fs";
578337
- import { createHash as createHash30 } from "node:crypto";
578582
+ import { createHash as createHash31 } from "node:crypto";
578338
578583
  import { basename as basename24, join as join112, relative as relative12, resolve as resolve55 } from "node:path";
578339
578584
  function debugArtifactRoot(cwd4 = process.cwd(), stateDir) {
578340
578585
  const envDir = process.env["OMNIUS_DEBUG_ARTIFACT_DIR"]?.trim();
@@ -579130,7 +579375,7 @@ function safeId2(value2) {
579130
579375
  return String(value2 || "unknown").replace(/[^a-zA-Z0-9_.:-]/g, "_").slice(0, 160);
579131
579376
  }
579132
579377
  function shortHash4(value2) {
579133
- return createHash30("sha256").update(value2).digest("hex").slice(0, 10);
579378
+ return createHash31("sha256").update(value2).digest("hex").slice(0, 10);
579134
579379
  }
579135
579380
  var DEBUG_LIBRARY_DIR, RUN_EVENTS_LIMIT, PREVIEW_LIMIT;
579136
579381
  var init_debugArtifactLibrary = __esm({
@@ -581211,7 +581456,7 @@ var init_domainDetector = __esm({
581211
581456
  });
581212
581457
 
581213
581458
  // packages/orchestrator/dist/compile-error-fix-loop.js
581214
- import { createHash as createHash31 } from "node:crypto";
581459
+ import { createHash as createHash32 } from "node:crypto";
581215
581460
  import path7 from "node:path";
581216
581461
  function rankCompilerDiagnostics(diags) {
581217
581462
  const normalized = diags.map((diag, index) => ({
@@ -581492,7 +581737,7 @@ function isCompileFixDiagnostic(value2) {
581492
581737
  return Boolean(value2 && typeof value2.fingerprint === "string" && typeof value2.rank === "number");
581493
581738
  }
581494
581739
  function shortHash5(value2) {
581495
- return createHash31("sha256").update(value2).digest("hex").slice(0, 10);
581740
+ return createHash32("sha256").update(value2).digest("hex").slice(0, 10);
581496
581741
  }
581497
581742
  function fence(value2) {
581498
581743
  return ["```", value2.trim(), "```"].join("\n");
@@ -583061,7 +583306,7 @@ var init_prompt_cache = __esm({
583061
583306
 
583062
583307
  // packages/orchestrator/dist/git-progress.js
583063
583308
  import { existsSync as existsSync104, readFileSync as readFileSync80, statSync as statSync41 } from "node:fs";
583064
- import { createHash as createHash32 } from "node:crypto";
583309
+ import { createHash as createHash33 } from "node:crypto";
583065
583310
  import { relative as relative13, resolve as resolve56, sep as sep4 } from "node:path";
583066
583311
  function isRunnerOwnedGitPath(path16) {
583067
583312
  const normalized = normalizeGitPath(path16);
@@ -583088,7 +583333,7 @@ function pathHash(repoRoot, relPath) {
583088
583333
  const st = statSync41(absolute);
583089
583334
  if (!st.isFile())
583090
583335
  return `non-file:${st.size}:${Math.floor(st.mtimeMs)}`;
583091
- return createHash32("sha256").update(readFileSync80(absolute)).digest("hex");
583336
+ return createHash33("sha256").update(readFileSync80(absolute)).digest("hex");
583092
583337
  } catch {
583093
583338
  return void 0;
583094
583339
  }
@@ -583925,7 +584170,7 @@ __export(preflightSnapshot_exports, {
583925
584170
  import { existsSync as existsSync105, readFileSync as readFileSync81, statSync as statSync42, statfsSync as statfsSync6 } from "node:fs";
583926
584171
  import { homedir as homedir36, platform as platform4, arch as arch2, totalmem as totalmem4, freemem as freemem3, hostname as hostname3 } from "node:os";
583927
584172
  import { join as join113 } from "node:path";
583928
- import { createHash as createHash33 } from "node:crypto";
584173
+ import { createHash as createHash34 } from "node:crypto";
583929
584174
  function capturePreflightSnapshot(workingDir) {
583930
584175
  const warnings = [];
583931
584176
  const configFingerprints = {};
@@ -584094,7 +584339,7 @@ function expandPath(p2) {
584094
584339
  return p2;
584095
584340
  }
584096
584341
  function sha2564(s2) {
584097
- return createHash33("sha256").update(s2).digest("hex").slice(0, 16);
584342
+ return createHash34("sha256").update(s2).digest("hex").slice(0, 16);
584098
584343
  }
584099
584344
  function freeDiskBytes(path16 = "/tmp") {
584100
584345
  try {
@@ -594152,6 +594397,10 @@ ${notice}`;
594152
594397
  injectUserMessage(content) {
594153
594398
  this.pendingUserMessages.push(this.scrubUserInput(content, "injected-user-message"));
594154
594399
  }
594400
+ /** Inject bounded runtime guidance without treating it as user steering. */
594401
+ injectRuntimeGuidance(content) {
594402
+ this.enqueueRuntimeGuidance(content);
594403
+ }
594155
594404
  enqueueRuntimeGuidance(content) {
594156
594405
  const cleaned = this.scrubUserInput(content, "runtime-guidance").trim();
594157
594406
  if (cleaned)
@@ -596881,8 +597130,8 @@ If you're stuck, try a completely different approach. Do NOT repeat what failed
596881
597130
  if (process.env["OMNIUS_DISABLE_ADAPTIVE_RETRIEVAL"] !== "1") {
596882
597131
  const goalForSig = (this._taskState.goal || "").slice(0, 200);
596883
597132
  const recentTools = this._toolSequence.slice(-5).join("|");
596884
- const { createHash: createHash51 } = await import("node:crypto");
596885
- const sig = createHash51("sha256").update(`${goalForSig}::${recentTools}`).digest("hex").slice(0, 16);
597133
+ const { createHash: createHash53 } = await import("node:crypto");
597134
+ const sig = createHash53("sha256").update(`${goalForSig}::${recentTools}`).digest("hex").slice(0, 16);
596886
597135
  if (this._lastPprSig === sig && this._lastPprMemoryLines.length > 0) {
596887
597136
  compacted.push({
596888
597137
  role: "system",
@@ -610098,7 +610347,7 @@ var init_composite_scorer = __esm({
610098
610347
  });
610099
610348
 
610100
610349
  // packages/orchestrator/dist/memory/materialization-policy.js
610101
- import { createHash as createHash34 } from "node:crypto";
610350
+ import { createHash as createHash35 } from "node:crypto";
610102
610351
  function materializeMemoryItems(items, options2 = {}) {
610103
610352
  const config = options2.config ?? DEFAULT_WEIGHTING_CONFIG;
610104
610353
  const sorted = [...items].sort((a2, b) => b.weight - a2.weight || a2.id.localeCompare(b.id));
@@ -610336,7 +610585,7 @@ function estimateTokens4(text2) {
610336
610585
  return Math.max(1, Math.ceil(text2.length / 4));
610337
610586
  }
610338
610587
  function hashText(text2) {
610339
- return createHash34("sha256").update(text2).digest("hex");
610588
+ return createHash35("sha256").update(text2).digest("hex");
610340
610589
  }
610341
610590
  var init_materialization_policy = __esm({
610342
610591
  "packages/orchestrator/dist/memory/materialization-policy.js"() {
@@ -610500,7 +610749,7 @@ var init_config_loader = __esm({
610500
610749
  });
610501
610750
 
610502
610751
  // packages/orchestrator/dist/memory/stability-tracker.js
610503
- import { createHash as createHash35 } from "node:crypto";
610752
+ import { createHash as createHash36 } from "node:crypto";
610504
610753
  import { existsSync as existsSync109, mkdirSync as mkdirSync60, readFileSync as readFileSync84, writeFileSync as writeFileSync51 } from "node:fs";
610505
610754
  import { dirname as dirname36, join as join117 } from "node:path";
610506
610755
  function stabilityFilePath(repoRoot) {
@@ -610564,7 +610813,7 @@ function computeStabilityHash(item) {
610564
610813
  item.scope.name,
610565
610814
  item.topicKey
610566
610815
  ].join("|");
610567
- return createHash35("sha256").update(normalized).digest("hex");
610816
+ return createHash36("sha256").update(normalized).digest("hex");
610568
610817
  }
610569
610818
  function normalizeContent2(content) {
610570
610819
  return content.replace(/\s+/g, " ").trim();
@@ -614565,10 +614814,10 @@ var init_project_arc = __esm({
614565
614814
  });
614566
614815
 
614567
614816
  // packages/orchestrator/dist/dedup-gate.js
614568
- import { createHash as createHash36 } from "node:crypto";
614817
+ import { createHash as createHash37 } from "node:crypto";
614569
614818
  function fingerprintCall(name10, args) {
614570
614819
  const canon = canonicalize(args);
614571
- return createHash36("sha1").update(`${name10}\0${canon}`).digest("hex").slice(0, 16);
614820
+ return createHash37("sha1").update(`${name10}\0${canon}`).digest("hex").slice(0, 16);
614572
614821
  }
614573
614822
  function canonicalize(value2) {
614574
614823
  if (value2 === null || typeof value2 !== "object")
@@ -625482,7 +625731,7 @@ var require_websocket3 = __commonJS({
625482
625731
  var http6 = __require("http");
625483
625732
  var net5 = __require("net");
625484
625733
  var tls2 = __require("tls");
625485
- var { randomBytes: randomBytes31, createHash: createHash51 } = __require("crypto");
625734
+ var { randomBytes: randomBytes31, createHash: createHash53 } = __require("crypto");
625486
625735
  var { Duplex: Duplex3, Readable } = __require("stream");
625487
625736
  var { URL: URL3 } = __require("url");
625488
625737
  var PerMessageDeflate3 = require_permessage_deflate3();
@@ -626142,7 +626391,7 @@ var require_websocket3 = __commonJS({
626142
626391
  abortHandshake(websocket, socket, "Invalid Upgrade header");
626143
626392
  return;
626144
626393
  }
626145
- const digest3 = createHash51("sha1").update(key + GUID).digest("base64");
626394
+ const digest3 = createHash53("sha1").update(key + GUID).digest("base64");
626146
626395
  if (res.headers["sec-websocket-accept"] !== digest3) {
626147
626396
  abortHandshake(websocket, socket, "Invalid Sec-WebSocket-Accept header");
626148
626397
  return;
@@ -626509,7 +626758,7 @@ var require_websocket_server2 = __commonJS({
626509
626758
  var EventEmitter15 = __require("events");
626510
626759
  var http6 = __require("http");
626511
626760
  var { Duplex: Duplex3 } = __require("stream");
626512
- var { createHash: createHash51 } = __require("crypto");
626761
+ var { createHash: createHash53 } = __require("crypto");
626513
626762
  var extension3 = require_extension3();
626514
626763
  var PerMessageDeflate3 = require_permessage_deflate3();
626515
626764
  var subprotocol3 = require_subprotocol2();
@@ -626810,7 +627059,7 @@ var require_websocket_server2 = __commonJS({
626810
627059
  );
626811
627060
  }
626812
627061
  if (this._state > RUNNING) return abortHandshake(socket, 503);
626813
- const digest3 = createHash51("sha1").update(key + GUID).digest("base64");
627062
+ const digest3 = createHash53("sha1").update(key + GUID).digest("base64");
626814
627063
  const headers = [
626815
627064
  "HTTP/1.1 101 Switching Protocols",
626816
627065
  "Upgrade: websocket",
@@ -633591,14 +633840,14 @@ var init_voice_session = __esm({
633591
633840
  });
633592
633841
 
633593
633842
  // packages/cli/src/tui/scoped-personality.ts
633594
- import { createHash as createHash37 } from "node:crypto";
633843
+ import { createHash as createHash38 } from "node:crypto";
633595
633844
  import { appendFileSync as appendFileSync13, existsSync as existsSync120, mkdirSync as mkdirSync72, readFileSync as readFileSync97, writeFileSync as writeFileSync60 } from "node:fs";
633596
633845
  import { join as join131, resolve as resolve60 } from "node:path";
633597
633846
  function safeName(input) {
633598
633847
  return input.replace(/[^A-Za-z0-9_.-]/g, "-").slice(0, 80) || "default";
633599
633848
  }
633600
633849
  function scopeHash(scope) {
633601
- return createHash37("sha1").update(`${scope.kind}:${scope.id}`).digest("hex").slice(0, 16);
633850
+ return createHash38("sha1").update(`${scope.kind}:${scope.id}`).digest("hex").slice(0, 16);
633602
633851
  }
633603
633852
  function scopedPersonalityDir(repoRoot, kind) {
633604
633853
  return resolve60(repoRoot, ".omnius", "scoped-personality", kind);
@@ -633969,7 +634218,7 @@ var init_scoped_personality = __esm({
633969
634218
  });
633970
634219
 
633971
634220
  // packages/cli/src/tui/voice-soul.ts
633972
- import { createHash as createHash38 } from "node:crypto";
634221
+ import { createHash as createHash39 } from "node:crypto";
633973
634222
  import { existsSync as existsSync121, readdirSync as readdirSync38, readFileSync as readFileSync98 } from "node:fs";
633974
634223
  import { basename as basename26, join as join132, resolve as resolve61 } from "node:path";
633975
634224
  function compactText(text2, limit) {
@@ -633984,7 +634233,7 @@ function blockText(text2, limit) {
633984
634233
  ... [truncated]`;
633985
634234
  }
633986
634235
  function scopeStateKey(scope, surface) {
633987
- return createHash38("sha1").update(`${surface}:${scope.kind}:${scope.id}`).digest("hex").slice(0, 16);
634236
+ return createHash39("sha1").update(`${surface}:${scope.kind}:${scope.id}`).digest("hex").slice(0, 16);
633988
634237
  }
633989
634238
  function safeName2(input) {
633990
634239
  return input.replace(/[^A-Za-z0-9_.-]/g, "-").slice(0, 80) || "default";
@@ -636624,7 +636873,7 @@ var init_types3 = __esm({
636624
636873
  });
636625
636874
 
636626
636875
  // packages/cli/src/tui/p2p/secret-vault.ts
636627
- import { createCipheriv as createCipheriv3, createDecipheriv as createDecipheriv3, randomBytes as randomBytes23, scryptSync as scryptSync2, createHash as createHash39 } from "node:crypto";
636876
+ import { createCipheriv as createCipheriv3, createDecipheriv as createDecipheriv3, randomBytes as randomBytes23, scryptSync as scryptSync2, createHash as createHash40 } from "node:crypto";
636628
636877
  import { readFileSync as readFileSync100, writeFileSync as writeFileSync62, existsSync as existsSync123, mkdirSync as mkdirSync74 } from "node:fs";
636629
636878
  import { dirname as dirname39 } from "node:path";
636630
636879
  var PLACEHOLDER_PREFIX, PLACEHOLDER_SUFFIX, CIPHER_ALGO, SALT_LEN, IV_LEN, KEY_LEN, SecretVault;
@@ -636868,7 +637117,7 @@ var init_secret_vault = __esm({
636868
637117
  /** Generate a deterministic fingerprint of vault contents (for sync verification) */
636869
637118
  fingerprint() {
636870
637119
  const names = Array.from(this.secrets.keys()).sort();
636871
- const hash = createHash39("sha256");
637120
+ const hash = createHash40("sha256");
636872
637121
  for (const name10 of names) {
636873
637122
  hash.update(name10 + ":");
636874
637123
  hash.update(this.secrets.get(name10).value);
@@ -636883,7 +637132,7 @@ var init_secret_vault = __esm({
636883
637132
  // packages/cli/src/tui/p2p/peer-mesh.ts
636884
637133
  import { EventEmitter as EventEmitter9 } from "node:events";
636885
637134
  import { createServer as createServer6 } from "node:http";
636886
- import { randomBytes as randomBytes24, createHash as createHash40, generateKeyPairSync } from "node:crypto";
637135
+ import { randomBytes as randomBytes24, createHash as createHash41, generateKeyPairSync } from "node:crypto";
636887
637136
  var PING_INTERVAL_MS, PEER_TIMEOUT_MS, GOSSIP_INTERVAL_MS, MAX_PEERS, PeerMesh;
636888
637137
  var init_peer_mesh = __esm({
636889
637138
  "packages/cli/src/tui/p2p/peer-mesh.ts"() {
@@ -636899,7 +637148,7 @@ var init_peer_mesh = __esm({
636899
637148
  const { publicKey: publicKey2, privateKey } = generateKeyPairSync("ed25519");
636900
637149
  this.publicKey = publicKey2.export({ type: "spki", format: "der" });
636901
637150
  this.privateKey = privateKey.export({ type: "pkcs8", format: "der" });
636902
- this.peerId = createHash40("sha256").update(this.publicKey).digest("base64url").slice(0, 22);
637151
+ this.peerId = createHash41("sha256").update(this.publicKey).digest("base64url").slice(0, 22);
636903
637152
  this.capabilities = options2.capabilities;
636904
637153
  this.displayName = options2.displayName;
636905
637154
  this._authKey = options2.authKey ?? randomBytes24(24).toString("base64url");
@@ -638265,7 +638514,7 @@ __export(omnius_directory_exports, {
638265
638514
  import { appendFileSync as appendFileSync14, cpSync as cpSync2, existsSync as existsSync125, mkdirSync as mkdirSync76, readFileSync as readFileSync102, writeFileSync as writeFileSync64, readdirSync as readdirSync41, statSync as statSync51, unlinkSync as unlinkSync23, openSync as openSync2, closeSync as closeSync2, renameSync as renameSync11, watch as fsWatch2 } from "node:fs";
638266
638515
  import { join as join136, relative as relative17, basename as basename27, dirname as dirname40, resolve as resolve62 } from "node:path";
638267
638516
  import { homedir as homedir42 } from "node:os";
638268
- import { createHash as createHash42 } from "node:crypto";
638517
+ import { createHash as createHash43 } from "node:crypto";
638269
638518
  function isGitRoot(dir) {
638270
638519
  const gitPath = join136(dir, ".git");
638271
638520
  if (!existsSync125(gitPath)) return false;
@@ -638747,7 +638996,7 @@ function buildHandoffPrompt(repoRoot) {
638747
638996
  return lines.join("\n");
638748
638997
  }
638749
638998
  function computeDedupeHash(task, savedAt) {
638750
- return createHash42("sha256").update(`${task}|${savedAt}`).digest("hex").slice(0, 16);
638999
+ return createHash43("sha256").update(`${task}|${savedAt}`).digest("hex").slice(0, 16);
638751
639000
  }
638752
639001
  function generateSessionId() {
638753
639002
  const timestamp = Date.now().toString(36);
@@ -665789,7 +666038,7 @@ __export(commands_exports, {
665789
666038
  });
665790
666039
  import * as nodeOs from "node:os";
665791
666040
  import { spawn as nodeSpawn2 } from "node:child_process";
665792
- import { createHash as createHash43 } from "node:crypto";
666041
+ import { createHash as createHash44 } from "node:crypto";
665793
666042
  import {
665794
666043
  existsSync as existsSync147,
665795
666044
  readFileSync as readFileSync119,
@@ -679149,7 +679398,7 @@ async function collectSponsorMediaStream(args) {
679149
679398
  };
679150
679399
  }
679151
679400
  if (artifact.sha256) {
679152
- const sha = createHash43("sha256").update(bytes).digest("hex");
679401
+ const sha = createHash44("sha256").update(bytes).digest("hex");
679153
679402
  if (sha !== artifact.sha256)
679154
679403
  return { ok: false, error: `Artifact hash mismatch for ${artifactId}` };
679155
679404
  }
@@ -693617,7 +693866,7 @@ import {
693617
693866
  unlinkSync as unlinkSync34
693618
693867
  } from "node:fs";
693619
693868
  import { join as join168 } from "node:path";
693620
- import { createHash as createHash44 } from "node:crypto";
693869
+ import { createHash as createHash45 } from "node:crypto";
693621
693870
  function safeFilePart(value2) {
693622
693871
  return value2.replace(/[^A-Za-z0-9_.-]+/g, "_").slice(0, 80) || "telegram";
693623
693872
  }
@@ -693625,7 +693874,7 @@ function daydreamRoot(repoRoot) {
693625
693874
  return join168(repoRoot, ".omnius", "telegram-daydreams");
693626
693875
  }
693627
693876
  function sessionDir(repoRoot, sessionKey) {
693628
- const hash = createHash44("sha1").update(sessionKey).digest("hex").slice(0, 20);
693877
+ const hash = createHash45("sha1").update(sessionKey).digest("hex").slice(0, 20);
693629
693878
  return join168(daydreamRoot(repoRoot), safeFilePart(hash));
693630
693879
  }
693631
693880
  function compactLine2(value2, max = 220) {
@@ -693736,7 +693985,7 @@ function buildReplyOpportunities(input, openQuestions) {
693736
693985
  return opportunities;
693737
693986
  }
693738
693987
  function daydreamOpportunityId(input, trigger) {
693739
- return createHash44("sha1").update(`${input.sessionKey}:${input.generatedAtMs}:${trigger}`).digest("hex").slice(0, 16);
693988
+ return createHash45("sha1").update(`${input.sessionKey}:${input.generatedAtMs}:${trigger}`).digest("hex").slice(0, 16);
693740
693989
  }
693741
693990
  function clamp0115(value2) {
693742
693991
  if (!Number.isFinite(value2)) return 0;
@@ -694141,7 +694390,7 @@ function buildTelegramChannelDaydream(input, corpus, extraction, extractionCommi
694141
694390
  const seed = `${input.sessionKey}:${input.generatedAtMs}:${input.history.length}`;
694142
694391
  return {
694143
694392
  version: 3,
694144
- id: createHash44("sha1").update(seed).digest("hex").slice(0, 16),
694393
+ id: createHash45("sha1").update(seed).digest("hex").slice(0, 16),
694145
694394
  sessionKey: input.sessionKey,
694146
694395
  chatId: input.chatId,
694147
694396
  chatTitle: input.chatTitle,
@@ -694453,12 +694702,12 @@ var init_telegram_channel_dmn = __esm({
694453
694702
  });
694454
694703
 
694455
694704
  // packages/cli/src/tui/telegram-reflection-corpus.ts
694456
- import { createHash as createHash45 } from "node:crypto";
694705
+ import { createHash as createHash46 } from "node:crypto";
694457
694706
  function telegramReflectionMemoryDbPaths(repoRoot) {
694458
694707
  return omniusMemoryDbPaths(repoRoot);
694459
694708
  }
694460
694709
  function stableHash2(value2, length4 = 16) {
694461
- return createHash45("sha1").update(value2).digest("hex").slice(0, length4);
694710
+ return createHash46("sha1").update(value2).digest("hex").slice(0, length4);
694462
694711
  }
694463
694712
  function clean3(value2) {
694464
694713
  return String(value2 ?? "").replace(/\s+/g, " ").trim();
@@ -695271,7 +695520,7 @@ var init_telegram_reflection_extraction = __esm({
695271
695520
  });
695272
695521
 
695273
695522
  // packages/cli/src/tui/telegram-social-state-types.ts
695274
- import { createHash as createHash46 } from "node:crypto";
695523
+ import { createHash as createHash47 } from "node:crypto";
695275
695524
  function telegramSocialActorKey(actor) {
695276
695525
  if (!actor) return "unknown";
695277
695526
  if (typeof actor.userId === "number") return `user:${actor.userId}`;
@@ -695304,7 +695553,7 @@ function appendUnique(items, value2, max) {
695304
695553
  return next.slice(-max);
695305
695554
  }
695306
695555
  function hashTelegramSocialId(parts) {
695307
- return createHash46("sha1").update(parts.map((part) => String(part ?? "")).join(":")).digest("hex").slice(0, 16);
695556
+ return createHash47("sha1").update(parts.map((part) => String(part ?? "")).join(":")).digest("hex").slice(0, 16);
695308
695557
  }
695309
695558
  function cleanUsername(value2) {
695310
695559
  if (typeof value2 !== "string") return void 0;
@@ -696364,7 +696613,7 @@ import {
696364
696613
  } from "node:path";
696365
696614
  import { homedir as homedir56 } from "node:os";
696366
696615
  import { writeFile as writeFileAsync } from "node:fs/promises";
696367
- import { createHash as createHash47, randomBytes as randomBytes28, randomInt } from "node:crypto";
696616
+ import { createHash as createHash48, randomBytes as randomBytes28, randomInt } from "node:crypto";
696368
696617
  function formatModelBytes(bytes) {
696369
696618
  if (!Number.isFinite(bytes) || bytes <= 0) return "0 B";
696370
696619
  const units = ["B", "KB", "MB", "GB", "TB"];
@@ -697609,7 +697858,7 @@ function buildTelegramRuntimeContext(now2 = /* @__PURE__ */ new Date(), repoRoot
697609
697858
  return buildConversationRuntimeContext(now2, repoRoot);
697610
697859
  }
697611
697860
  function telegramSessionIdFromKey(sessionKey) {
697612
- return `telegram-${createHash47("sha1").update(sessionKey).digest("hex").slice(0, 16)}`;
697861
+ return `telegram-${createHash48("sha1").update(sessionKey).digest("hex").slice(0, 16)}`;
697613
697862
  }
697614
697863
  function normalizeTelegramSubAgentLimit(value2) {
697615
697864
  const parsed = typeof value2 === "number" ? value2 : typeof value2 === "string" && value2.trim() ? Number(value2.trim()) : TELEGRAM_SUB_AGENT_DEFAULT_LIMIT;
@@ -699773,7 +700022,7 @@ Telegram link integrity contract:
699773
700022
  return !!this.adminAuthChallenge && this.adminAuthChallenge.expiresAtMs > Date.now();
699774
700023
  }
699775
700024
  hashAdminAuthCode(code8) {
699776
- return createHash47("sha256").update(`omnius-telegram-admin:${code8.trim()}`).digest("hex");
700025
+ return createHash48("sha256").update(`omnius-telegram-admin:${code8.trim()}`).digest("hex");
699777
700026
  }
699778
700027
  viewIdForMessage(msg) {
699779
700028
  return `telegram-${this.sessionKeyForMessage(msg).replace(/[^A-Za-z0-9_-]/g, "-")}`;
@@ -701845,11 +702094,11 @@ ${mediaContext}` : ""
701845
702094
  return payload;
701846
702095
  }
701847
702096
  telegramConversationPath(sessionKey) {
701848
- const safe = createHash47("sha1").update(sessionKey).digest("hex").slice(0, 20);
702097
+ const safe = createHash48("sha1").update(sessionKey).digest("hex").slice(0, 20);
701849
702098
  return join170(this.telegramConversationDir, `${safe}.json`);
701850
702099
  }
701851
702100
  telegramConversationLedgerPath(sessionKey) {
701852
- const safe = createHash47("sha1").update(sessionKey).digest("hex").slice(0, 20);
702101
+ const safe = createHash48("sha1").update(sessionKey).digest("hex").slice(0, 20);
701853
702102
  return join170(this.telegramConversationDir, `${safe}.events.jsonl`);
701854
702103
  }
701855
702104
  telegramDb() {
@@ -702082,7 +702331,7 @@ ${mediaContext}` : ""
702082
702331
  relationships: Array.isArray(raw.relationships) ? raw.relationships.slice(0, TELEGRAM_ASSOCIATIVE_RELATION_LIMIT).map((fact) => this.normalizeTelegramAssociativeFact(fact)) : [],
702083
702332
  actions: Array.isArray(raw.actions) ? raw.actions.slice(-TELEGRAM_ASSOCIATIVE_ACTION_LIMIT).map((action) => ({
702084
702333
  id: String(
702085
- action.id || createHash47("sha1").update(JSON.stringify(action)).digest("hex").slice(0, 12)
702334
+ action.id || createHash48("sha1").update(JSON.stringify(action)).digest("hex").slice(0, 12)
702086
702335
  ),
702087
702336
  ts: typeof action.ts === "number" ? action.ts : Date.now(),
702088
702337
  role: action.role === "assistant" ? "assistant" : "user",
@@ -702101,7 +702350,7 @@ ${mediaContext}` : ""
702101
702350
  const now2 = Date.now();
702102
702351
  return {
702103
702352
  id: String(
702104
- raw.id || createHash47("sha1").update(text2 || String(now2)).digest("hex").slice(0, 12)
702353
+ raw.id || createHash48("sha1").update(text2 || String(now2)).digest("hex").slice(0, 12)
702105
702354
  ),
702106
702355
  text: text2,
702107
702356
  tags: Array.isArray(raw.tags) ? raw.tags.map(String).slice(0, 16) : [],
@@ -702558,7 +702807,7 @@ ${mediaContext}` : ""
702558
702807
  telegramHistoryBackfillMessageId(sessionKey, entry, index) {
702559
702808
  if (typeof entry.messageId === "number" && Number.isFinite(entry.messageId))
702560
702809
  return entry.messageId;
702561
- const digest3 = createHash47("sha1").update(
702810
+ const digest3 = createHash48("sha1").update(
702562
702811
  `${sessionKey}:${index}:${entry.role}:${entry.ts ?? ""}:${entry.text}`
702563
702812
  ).digest("hex").slice(0, 8);
702564
702813
  return -Number.parseInt(digest3, 16);
@@ -703748,7 +703997,7 @@ ${mediaContext}` : ""
703748
703997
  const now2 = entry.ts ?? Date.now();
703749
703998
  memory.updatedAt = now2;
703750
703999
  const speaker = telegramHistorySpeaker(entry);
703751
- const actionId = createHash47("sha1").update(
704000
+ const actionId = createHash48("sha1").update(
703752
704001
  `${sessionKey}:${entry.role}:${entry.messageId ?? ""}:${now2}:${entry.text}`
703753
704002
  ).digest("hex").slice(0, 16);
703754
704003
  if (!memory.actions.some((action) => action.id === actionId)) {
@@ -703911,7 +704160,7 @@ ${mediaContext}` : ""
703911
704160
  let fact = facts.find((item) => item.text.toLowerCase() === key);
703912
704161
  if (!fact) {
703913
704162
  fact = {
703914
- id: createHash47("sha1").update(`${entry.chatId ?? ""}:${key}`).digest("hex").slice(0, 12),
704163
+ id: createHash48("sha1").update(`${entry.chatId ?? ""}:${key}`).digest("hex").slice(0, 12),
703915
704164
  text: clean5,
703916
704165
  tags: telegramMemoryTags(clean5, entry.mediaSummary),
703917
704166
  speakers: [],
@@ -703996,7 +704245,7 @@ ${mediaContext}` : ""
703996
704245
  const titleTags = tags.slice(0, 4);
703997
704246
  const title = titleTags.length > 0 ? `${speaker} / ${titleTags.join(" ")}` : `${speaker} / conversation`;
703998
704247
  const card = {
703999
- id: createHash47("sha1").update(`${sessionKey}:${now2}:${speaker}:${text2}`).digest("hex").slice(0, 12),
704248
+ id: createHash48("sha1").update(`${sessionKey}:${now2}:${speaker}:${text2}`).digest("hex").slice(0, 12),
704000
704249
  title,
704001
704250
  notes: [],
704002
704251
  tags: [],
@@ -706760,7 +707009,7 @@ ${list}` : "No shared group target is currently known for this sender. Ask in th
706760
707009
  }
706761
707010
  telegramRunnerStateDir(sessionKey) {
706762
707011
  if (!this.repoRoot) return void 0;
706763
- const safe = createHash47("sha1").update(sessionKey).digest("hex").slice(0, 20);
707012
+ const safe = createHash48("sha1").update(sessionKey).digest("hex").slice(0, 20);
706764
707013
  return join170(this.repoRoot, ".omnius", "telegram-runner-state", safe);
706765
707014
  }
706766
707015
  buildTelegramAdminOverviewContext(currentSessionKey) {
@@ -717455,14 +717704,14 @@ var init_access_policy = __esm({
717455
717704
  });
717456
717705
 
717457
717706
  // packages/cli/src/api/project-preferences.ts
717458
- import { createHash as createHash48 } from "node:crypto";
717707
+ import { createHash as createHash49 } from "node:crypto";
717459
717708
  import { existsSync as existsSync162, mkdirSync as mkdirSync100, readFileSync as readFileSync133, renameSync as renameSync16, writeFileSync as writeFileSync87, unlinkSync as unlinkSync37 } from "node:fs";
717460
717709
  import { homedir as homedir58 } from "node:os";
717461
717710
  import { join as join172, resolve as resolve75 } from "node:path";
717462
717711
  import { randomUUID as randomUUID20 } from "node:crypto";
717463
717712
  function projectKey(root) {
717464
717713
  const canonical = resolve75(root);
717465
- return createHash48("sha256").update(canonical).digest("hex").slice(0, 16);
717714
+ return createHash49("sha256").update(canonical).digest("hex").slice(0, 16);
717466
717715
  }
717467
717716
  function projectDir(root) {
717468
717717
  return join172(PROJECTS_DIR, projectKey(root));
@@ -717753,7 +718002,7 @@ var init_disk_task_output = __esm({
717753
718002
  });
717754
718003
 
717755
718004
  // packages/cli/src/api/http.ts
717756
- import { createHash as createHash49 } from "node:crypto";
718005
+ import { createHash as createHash50 } from "node:crypto";
717757
718006
  function problemDetails(opts) {
717758
718007
  const p2 = {
717759
718008
  type: opts.type ?? "about:blank",
@@ -717816,7 +718065,7 @@ function paginated(items, page2, total) {
717816
718065
  }
717817
718066
  function computeEtag(payload) {
717818
718067
  const json = typeof payload === "string" ? payload : JSON.stringify(payload);
717819
- const hash = createHash49("sha1").update(json).digest("hex").slice(0, 16);
718068
+ const hash = createHash50("sha1").update(json).digest("hex").slice(0, 16);
717820
718069
  return `W/"${hash}"`;
717821
718070
  }
717822
718071
  function checkNotModified(req3, res, etag) {
@@ -735979,7 +736228,8 @@ function getOpenApiSpec() {
735979
736228
  tags: ["Context"],
735980
736229
  parameters: [
735981
736230
  { name: "id", in: "path", required: true, schema: { type: "string" }, description: "Dump id, or latest" },
735982
- { name: "repo", in: "query", required: false, schema: { type: "string" } }
736231
+ { name: "repo", in: "query", required: false, schema: { type: "string" } },
736232
+ { name: "agent_type", in: "query", required: false, schema: { type: "string", enum: ["main", "sub-agent", "internal", "adversary", "auxiliary"] }, description: "When id is latest, fetch the latest dump for this agent type" }
735983
736233
  ],
735984
736234
  responses: { 200: { description: "Full context-window dump" }, 404: { description: "Dump not found" } }
735985
736235
  }
@@ -737226,7 +737476,7 @@ import {
737226
737476
  closeSync as closeSync6
737227
737477
  } from "node:fs";
737228
737478
  import { randomBytes as randomBytes29, randomUUID as randomUUID21, timingSafeEqual as timingSafeEqual2 } from "node:crypto";
737229
- import { createHash as createHash50 } from "node:crypto";
737479
+ import { createHash as createHash51 } from "node:crypto";
737230
737480
  function memoryDbPaths3(baseDir = process.cwd()) {
737231
737481
  const dir = join183(baseDir, ".omnius");
737232
737482
  return {
@@ -745395,7 +745645,7 @@ function listScheduledTasks() {
745395
745645
  );
745396
745646
  const enabled2 = typeof t2?.enabled === "boolean" ? t2.enabled : true;
745397
745647
  const realId = typeof t2?.id === "string" && t2.id ? t2.id : null;
745398
- const fallbackId = createHash50("sha1").update(`${file}#${i2}`).digest("hex").slice(0, 16);
745648
+ const fallbackId = createHash51("sha1").update(`${file}#${i2}`).digest("hex").slice(0, 16);
745399
745649
  const uid = realId || fallbackId;
745400
745650
  const key = `${uid}`;
745401
745651
  if (seen.has(key)) return;
@@ -745533,8 +745783,8 @@ function deleteScheduledById(id2) {
745533
745783
  if (typeof entry?.id === "string" && entry.id && !candidates.includes(entry.id))
745534
745784
  candidates.push(entry.id);
745535
745785
  try {
745536
- const { createHash: createHash51 } = require4("node:crypto");
745537
- const fallback = createHash51("sha1").update(`${target.file}#${target.index}`).digest("hex").slice(0, 16);
745786
+ const { createHash: createHash53 } = require4("node:crypto");
745787
+ const fallback = createHash53("sha1").update(`${target.file}#${target.index}`).digest("hex").slice(0, 16);
745538
745788
  if (!candidates.includes(fallback)) candidates.push(fallback);
745539
745789
  } catch {
745540
745790
  }
@@ -747771,6 +748021,7 @@ import { cwd } from "node:process";
747771
748021
  import { resolve as resolve78, join as join185, dirname as dirname56, extname as extname22, relative as relative22, sep as sep7 } from "node:path";
747772
748022
  import { createRequire as createRequire9 } from "node:module";
747773
748023
  import { fileURLToPath as fileURLToPath24 } from "node:url";
748024
+ import { createHash as createHash52 } from "node:crypto";
747774
748025
  import {
747775
748026
  readFileSync as readFileSync142,
747776
748027
  writeFileSync as writeFileSync94,
@@ -748697,6 +748948,37 @@ function getRuntimeToolProfilePolicy(repoRoot) {
748697
748948
  function truncateSubAgentViewText(s2, n2) {
748698
748949
  return s2.length > n2 ? `${s2.slice(0, n2)}…` : s2;
748699
748950
  }
748951
+ function childAgentTaskHash(task) {
748952
+ return createHash52("sha256").update(task).digest("hex").slice(0, 12);
748953
+ }
748954
+ function stripAnsiForParentContext(value2) {
748955
+ return value2.replace(/\x1b\[[0-9;?]*[ -/]*[@-~]/g, "");
748956
+ }
748957
+ function sanitizeChildAgentParentContextText(value2, options2 = {}) {
748958
+ const maxLines = options2.maxLines ?? CHILD_AGENT_PARENT_CONTEXT_MAX_LINES;
748959
+ const maxChars = options2.maxChars ?? CHILD_AGENT_PARENT_CONTEXT_MAX_CHARS;
748960
+ const noAnsi = stripAnsiForParentContext(value2).replace(/<think>[\s\S]*?<\/think>/gi, "").replace(/<think>[\s\S]*$/gi, "");
748961
+ const sanitized = sanitizeRestorePromptForModel(noAnsi);
748962
+ const lines = sanitized.split(/\r?\n/).map((line) => line.trim()).filter(Boolean).filter((line) => !/SHELL TRANSCRIPT/i.test(line)).filter((line) => !/^Task:\s/i.test(line)).filter((line) => !/^Last output:\s*$/i.test(line)).slice(-maxLines);
748963
+ const joined = lines.join("\n");
748964
+ return joined.length > maxChars ? `${joined.slice(0, Math.max(0, maxChars - 14)).trimEnd()}...[truncated]` : joined;
748965
+ }
748966
+ function formatChildAgentParentGuidance(input) {
748967
+ const status = input.exitCode === 0 ? "completed" : "failed";
748968
+ const summary = sanitizeChildAgentParentContextText(input.output);
748969
+ const taskPreview = sanitizeChildAgentParentContextText(input.task, {
748970
+ maxLines: 2,
748971
+ maxChars: 220
748972
+ });
748973
+ return [
748974
+ `[child_agent_result] kind=${input.kind} id=${input.id} status=${status} exit_code=${input.exitCode ?? "unknown"} task_sha256=${childAgentTaskHash(input.task)}`,
748975
+ taskPreview ? `task_preview:
748976
+ ${taskPreview}` : null,
748977
+ summary ? `result_preview:
748978
+ ${summary}` : "result_preview: unavailable",
748979
+ `full_output_available_via=${input.kind === "full sub-agent" ? "full_sub_agent" : "sub_agent"} id=${input.id}`
748980
+ ].filter((line) => Boolean(line)).join("\n");
748981
+ }
748700
748982
  function subAgentDynamicBlockId(agentId, event, kind) {
748701
748983
  const safeAgent = agentId.replace(/[^a-zA-Z0-9_-]/g, "_").slice(0, 48);
748702
748984
  const safeTs = String(event.timestamp || Date.now()).replace(
@@ -749072,11 +749354,17 @@ ${task}` : task;
749072
749354
  `sub_agent: ${cleanedLabelTask.slice(0, 80)}`,
749073
749355
  promise
749074
749356
  );
749357
+ const taskPreview = sanitizeChildAgentParentContextText(task, {
749358
+ maxLines: 2,
749359
+ maxChars: 220
749360
+ });
749075
749361
  return {
749076
749362
  success: true,
749077
749363
  output: `${compatibilityPrefix}Sub-agent started in background: ${taskId}
749078
- Task: ${task}
749079
- Use task_status(task_id="${taskId}") or task_output(task_id="${taskId}") to check progress.`
749364
+ task_sha256=${childAgentTaskHash(task)}
749365
+ ` + (taskPreview ? `task_preview:
749366
+ ${taskPreview}
749367
+ ` : "") + `Use task_status(task_id="${taskId}") or task_output(task_id="${taskId}") to check progress.`
749080
749368
  };
749081
749369
  }
749082
749370
  if (onViewStatus) onViewStatus(agentId, "running");
@@ -750448,16 +750736,18 @@ ${content}
750448
750736
  onComplete: (id2, task2, exitCode, output) => {
750449
750737
  registry2.unregisterAgent(id2);
750450
750738
  statusBar.unregisterAgentView(id2);
750451
- const summary = output.split("\n").filter((l2) => l2.trim()).slice(-5).join("\n");
750452
- const status = exitCode === 0 ? "COMPLETED" : "FAILED";
750453
- _activeRunnerRef?.injectUserMessage(
750454
- `[Sub-agent ${id2} ${status}]
750455
- Task: ${task2.slice(0, 100)}
750456
- Exit code: ${exitCode}
750457
- Last output:
750458
- ${summary}
750459
- Review its full output via sub_agent(action='output', id='${id2}')`
750460
- );
750739
+ const guidance = formatChildAgentParentGuidance({
750740
+ kind: "sub-agent",
750741
+ id: id2,
750742
+ task: task2,
750743
+ exitCode,
750744
+ output
750745
+ });
750746
+ if (_activeRunnerRef?.injectRuntimeGuidance) {
750747
+ _activeRunnerRef.injectRuntimeGuidance(guidance);
750748
+ } else {
750749
+ _activeRunnerRef?.injectUserMessage(guidance);
750750
+ }
750461
750751
  }
750462
750752
  });
750463
750753
  }
@@ -752477,16 +752767,18 @@ async function startInteractive(config, repoPath2) {
752477
752767
  onComplete: (id2, task, exitCode, output) => {
752478
752768
  registry2.unregisterAgent(id2);
752479
752769
  statusBar.unregisterAgentView(id2);
752480
- const summary = output.split("\n").filter((l2) => l2.trim()).slice(-5).join("\n");
752481
- const status = exitCode === 0 ? "COMPLETED" : "FAILED";
752482
- _activeRunnerRef?.injectUserMessage(
752483
- `[Full sub-agent ${id2} ${status}]
752484
- Task: ${task.slice(0, 100)}
752485
- Exit code: ${exitCode}
752486
- Last output:
752487
- ${summary}
752488
- Review its full output via full_sub_agent(action='output', id='${id2}')`
752489
- );
752770
+ const guidance = formatChildAgentParentGuidance({
752771
+ kind: "full sub-agent",
752772
+ id: id2,
752773
+ task,
752774
+ exitCode,
752775
+ output
752776
+ });
752777
+ if (_activeRunnerRef?.injectRuntimeGuidance) {
752778
+ _activeRunnerRef.injectRuntimeGuidance(guidance);
752779
+ } else {
752780
+ _activeRunnerRef?.injectUserMessage(guidance);
752781
+ }
752490
752782
  }
752491
752783
  });
752492
752784
  };
@@ -752517,16 +752809,18 @@ Review its full output via full_sub_agent(action='output', id='${id2}')`
752517
752809
  onComplete: (id2, task, exitCode, output) => {
752518
752810
  registry2.unregisterAgent(id2);
752519
752811
  statusBar.unregisterAgentView(id2);
752520
- const summary = output.split("\n").filter((l2) => l2.trim()).slice(-5).join("\n");
752521
- const status = exitCode === 0 ? "COMPLETED" : "FAILED";
752522
- _activeRunnerRef?.injectUserMessage(
752523
- `[Sub-agent ${id2} ${status}]
752524
- Task: ${task.slice(0, 100)}
752525
- Exit code: ${exitCode}
752526
- Last output:
752527
- ${summary}
752528
- Review its full output via sub_agent(action='output', id='${id2}')`
752529
- );
752812
+ const guidance = formatChildAgentParentGuidance({
752813
+ kind: "sub-agent",
752814
+ id: id2,
752815
+ task,
752816
+ exitCode,
752817
+ output
752818
+ });
752819
+ if (_activeRunnerRef?.injectRuntimeGuidance) {
752820
+ _activeRunnerRef.injectRuntimeGuidance(guidance);
752821
+ } else {
752822
+ _activeRunnerRef?.injectUserMessage(guidance);
752823
+ }
752530
752824
  }
752531
752825
  });
752532
752826
  };
@@ -757966,13 +758260,13 @@ ${taskInput}`;
757966
758260
  writeContent(() => renderError(errMsg));
757967
758261
  if (failureStore) {
757968
758262
  try {
757969
- const { createHash: createHash51 } = await import("node:crypto");
758263
+ const { createHash: createHash53 } = await import("node:crypto");
757970
758264
  failureStore.insert({
757971
758265
  taskId: "",
757972
758266
  sessionId: `${Date.now()}`,
757973
758267
  repoRoot,
757974
758268
  failureType: "runtime-error",
757975
- fingerprint: createHash51("sha256").update(errMsg.slice(0, 200)).digest("hex").slice(0, 16),
758269
+ fingerprint: createHash53("sha256").update(errMsg.slice(0, 200)).digest("hex").slice(0, 16),
757976
758270
  filePath: null,
757977
758271
  errorMessage: errMsg.slice(0, 500),
757978
758272
  context: null,
@@ -758731,7 +759025,7 @@ Rules:
758731
759025
  process.exit(1);
758732
759026
  }
758733
759027
  }
758734
- var NEXUS_DIRECTORY_ORIGIN3, NEXUS_AGENT_DIRECTORY_URL, localOllamaModelCache, localOllamaProbeInFlight, NEXUS_SPONSORS_URL3, ADVERSARY_COLOR, _generativeProgressSink, _liveMediaStatusSink, _liveMediaAudioCount, _liveMediaVideoCount, _interactiveSessionActive, _interactiveSessionReason, _voiceChatSession2, taskManager, _apiCallbacks, _shellToolRef, _replToolRef, _fullSubAgentToolRef, _agentToolRef, _sendMessageToolRef, _agentLifecycleMgr, _activeRunnerRef, _parentRunnerForArchive, _wireSubAgentCallbacks, _wireAgentToolCallbacks, _wireSubAgentToolCallbacks, _autoUpdatedThisSession, _mcpManager, _pluginManager, _mcpTools, subAgentPendingToolCalls, subAgentViewBlockSeq, SELF_IMPROVE_INTERVAL, _tasksSinceImprove;
759028
+ var NEXUS_DIRECTORY_ORIGIN3, NEXUS_AGENT_DIRECTORY_URL, localOllamaModelCache, localOllamaProbeInFlight, NEXUS_SPONSORS_URL3, ADVERSARY_COLOR, _generativeProgressSink, _liveMediaStatusSink, _liveMediaAudioCount, _liveMediaVideoCount, _interactiveSessionActive, _interactiveSessionReason, _voiceChatSession2, taskManager, _apiCallbacks, _shellToolRef, _replToolRef, _fullSubAgentToolRef, _agentToolRef, _sendMessageToolRef, _agentLifecycleMgr, _activeRunnerRef, _parentRunnerForArchive, _wireSubAgentCallbacks, _wireAgentToolCallbacks, _wireSubAgentToolCallbacks, _autoUpdatedThisSession, _mcpManager, _pluginManager, _mcpTools, subAgentPendingToolCalls, subAgentViewBlockSeq, CHILD_AGENT_PARENT_CONTEXT_MAX_LINES, CHILD_AGENT_PARENT_CONTEXT_MAX_CHARS, SELF_IMPROVE_INTERVAL, _tasksSinceImprove;
758735
759029
  var init_interactive = __esm({
758736
759030
  "packages/cli/src/tui/interactive.ts"() {
758737
759031
  init_memory_maintenance();
@@ -758835,6 +759129,8 @@ var init_interactive = __esm({
758835
759129
  _mcpTools = [];
758836
759130
  subAgentPendingToolCalls = /* @__PURE__ */ new Map();
758837
759131
  subAgentViewBlockSeq = 0;
759132
+ CHILD_AGENT_PARENT_CONTEXT_MAX_LINES = 5;
759133
+ CHILD_AGENT_PARENT_CONTEXT_MAX_CHARS = 900;
758838
759134
  SELF_IMPROVE_INTERVAL = 5;
758839
759135
  _tasksSinceImprove = 0;
758840
759136
  }