@integrity-labs/agt-cli 0.28.431 → 0.28.433

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.
@@ -18867,7 +18867,7 @@ var require_filters = __commonJS({
18867
18867
  return r.copySafeness(str, res);
18868
18868
  }
18869
18869
  _exports.indent = indent;
18870
- function join12(arr, del, attr) {
18870
+ function join13(arr, del, attr) {
18871
18871
  del = del || "";
18872
18872
  if (attr) {
18873
18873
  arr = lib.map(arr, function(v) {
@@ -18876,7 +18876,7 @@ var require_filters = __commonJS({
18876
18876
  }
18877
18877
  return arr.join(del);
18878
18878
  }
18879
- _exports.join = join12;
18879
+ _exports.join = join13;
18880
18880
  function last(arr) {
18881
18881
  return arr[arr.length - 1];
18882
18882
  }
@@ -30399,14 +30399,14 @@ function readLockHolder(path) {
30399
30399
  }
30400
30400
 
30401
30401
  // src/direct-chat-channel.ts
30402
- import { homedir as homedir3 } from "os";
30403
- import { join as join11 } from "path";
30402
+ import { homedir as homedir4 } from "os";
30403
+ import { join as join12 } from "path";
30404
30404
  import { randomUUID } from "crypto";
30405
30405
  import {
30406
30406
  watch,
30407
30407
  mkdirSync as mkdirSync5,
30408
30408
  writeFileSync as writeFileSync6,
30409
- readFileSync as readFileSync10,
30409
+ readFileSync as readFileSync11,
30410
30410
  readdirSync as readdirSync4,
30411
30411
  existsSync as existsSync6,
30412
30412
  renameSync as renameSync5,
@@ -34162,6 +34162,28 @@ function buildUsageLimitReplyText(limitedUntil) {
34162
34162
  return `Your agent has hit its Claude Code usage limit until ${formatUtcClock(limitedUntil)}. It'll pick back up once the limit resets \u2014 please try again after then.`;
34163
34163
  }
34164
34164
 
34165
+ // ../core/dist/account-enforcement/marker.js
34166
+ var ACCOUNT_ENFORCEMENT_MARKER_FILENAME = "account-enforcement.json";
34167
+ var ACCOUNT_ENFORCEMENT_MARKER_VERSION = 1;
34168
+ function parseAccountEnforcementMarker(raw) {
34169
+ let parsed;
34170
+ try {
34171
+ parsed = JSON.parse(raw);
34172
+ } catch {
34173
+ return null;
34174
+ }
34175
+ if (typeof parsed !== "object" || parsed === null || parsed.version !== ACCOUNT_ENFORCEMENT_MARKER_VERSION) {
34176
+ return null;
34177
+ }
34178
+ const level = parsed.level;
34179
+ if (level !== "warn" && level !== "mute")
34180
+ return null;
34181
+ return { version: ACCOUNT_ENFORCEMENT_MARKER_VERSION, level };
34182
+ }
34183
+ function buildAccountIssueReplyText() {
34184
+ return "There is an issue with your account, please contact support@augmented.team.";
34185
+ }
34186
+
34165
34187
  // ../core/dist/kanban/state-machine.js
34166
34188
  var KANBAN_STATUSES = [
34167
34189
  "backlog",
@@ -35461,6 +35483,26 @@ function readUsageLimitUntil(opts) {
35461
35483
  return resolveUsageLimitUntil(parseUsageLimitMarker(raw), opts.now ?? /* @__PURE__ */ new Date());
35462
35484
  }
35463
35485
 
35486
+ // src/account-enforcement-notice.ts
35487
+ import { readFileSync as readFileSync10 } from "fs";
35488
+ import { homedir as homedir3 } from "os";
35489
+ import { join as join11 } from "path";
35490
+ function accountEnforcementMarkerPath(codeName) {
35491
+ if (!codeName) return null;
35492
+ return join11(homedir3(), ".augmented", codeName, ACCOUNT_ENFORCEMENT_MARKER_FILENAME);
35493
+ }
35494
+ function readAccountEnforcementLevel(opts) {
35495
+ const path = opts.filePath ?? accountEnforcementMarkerPath(opts.codeName);
35496
+ if (!path) return null;
35497
+ let raw;
35498
+ try {
35499
+ raw = readFileSync10(path, "utf-8");
35500
+ } catch {
35501
+ return null;
35502
+ }
35503
+ return parseAccountEnforcementMarker(raw)?.level ?? null;
35504
+ }
35505
+
35464
35506
  // ../core/dist/channels/governance/sender-policy-decline.js
35465
35507
  function decideDeclineReply(input) {
35466
35508
  const last = input.cache.get(input.key);
@@ -35482,24 +35524,25 @@ var DIRECT_CHAT_MAINTENANCE_COOLDOWN_MS = (() => {
35482
35524
  return Number.isFinite(n) && n >= 0 ? n * 1e3 : 1800 * 1e3;
35483
35525
  })();
35484
35526
  var DIRECT_CHAT_USAGE_LIMIT_CACHE = /* @__PURE__ */ new Map();
35527
+ var DIRECT_CHAT_ACCOUNT_MUTE_CACHE = /* @__PURE__ */ new Map();
35485
35528
  var AGT_HOST = process.env.AGT_HOST;
35486
35529
  var AGT_API_KEY = process.env.AGT_API_KEY;
35487
35530
  var AGT_AGENT_ID = process.env.AGT_AGENT_ID;
35488
- var DIRECT_CHAT_AGENT_DIR = AGT_AGENT_ID ? join11(homedir3(), ".augmented", AGT_AGENT_ID) : null;
35531
+ var DIRECT_CHAT_AGENT_DIR = AGT_AGENT_ID ? join12(homedir4(), ".augmented", AGT_AGENT_ID) : null;
35489
35532
  var INBOUND_ATTACHMENTS_DIR = resolveInboundAttachmentsDir({
35490
35533
  codeName: process.env.AGT_AGENT_CODE_NAME,
35491
35534
  turnInitiatorFile: process.env.AGT_TURN_INITIATOR_FILE,
35492
35535
  agentId: AGT_AGENT_ID,
35493
- homeDir: homedir3()
35536
+ homeDir: homedir4()
35494
35537
  });
35495
35538
  var AGT_AGENT_CODE_NAME = process.env.AGT_AGENT_CODE_NAME;
35496
35539
  var directChatStderrLogStream = null;
35497
35540
  if (AGT_AGENT_CODE_NAME) {
35498
35541
  try {
35499
- const logDir = join11(homedir3(), ".augmented", AGT_AGENT_CODE_NAME);
35542
+ const logDir = join12(homedir4(), ".augmented", AGT_AGENT_CODE_NAME);
35500
35543
  mkdirSync5(logDir, { recursive: true });
35501
35544
  directChatStderrLogStream = createWriteStream(
35502
- join11(logDir, "direct-chat-channel-stderr.log"),
35545
+ join12(logDir, "direct-chat-channel-stderr.log"),
35503
35546
  { flags: "a", mode: 384 }
35504
35547
  );
35505
35548
  directChatStderrLogStream.on("error", () => {
@@ -35518,10 +35561,10 @@ if (AGT_AGENT_CODE_NAME) {
35518
35561
  } catch {
35519
35562
  }
35520
35563
  }
35521
- var PROGRESS_HEARTBEAT_PATH = AGT_AGENT_CODE_NAME ? join11(homedir3(), ".augmented", AGT_AGENT_CODE_NAME, "channel-progress-heartbeat.json") : null;
35522
- var DIRECT_CHAT_PENDING_INBOUND_DIR = AGT_AGENT_CODE_NAME ? join11(homedir3(), ".augmented", AGT_AGENT_CODE_NAME, "direct-chat-pending-inbound") : null;
35523
- var DIRECT_CHAT_DELIVERY_LEDGER_DIR = AGT_AGENT_CODE_NAME ? join11(homedir3(), ".augmented", AGT_AGENT_CODE_NAME, ".agt-inbound-delivery-ledger") : null;
35524
- var DIRECT_CHAT_CODE_NAME_AGENT_DIR = AGT_AGENT_CODE_NAME ? join11(homedir3(), ".augmented", AGT_AGENT_CODE_NAME) : null;
35564
+ var PROGRESS_HEARTBEAT_PATH = AGT_AGENT_CODE_NAME ? join12(homedir4(), ".augmented", AGT_AGENT_CODE_NAME, "channel-progress-heartbeat.json") : null;
35565
+ var DIRECT_CHAT_PENDING_INBOUND_DIR = AGT_AGENT_CODE_NAME ? join12(homedir4(), ".augmented", AGT_AGENT_CODE_NAME, "direct-chat-pending-inbound") : null;
35566
+ var DIRECT_CHAT_DELIVERY_LEDGER_DIR = AGT_AGENT_CODE_NAME ? join12(homedir4(), ".augmented", AGT_AGENT_CODE_NAME, ".agt-inbound-delivery-ledger") : null;
35567
+ var DIRECT_CHAT_CODE_NAME_AGENT_DIR = AGT_AGENT_CODE_NAME ? join12(homedir4(), ".augmented", AGT_AGENT_CODE_NAME) : null;
35525
35568
  var DIRECT_CHAT_STALE_MARKER_MS = 24 * 60 * 60 * 1e3;
35526
35569
  function recordDirectChatDelivery(sessionId, messageIds) {
35527
35570
  if (!sessionId) return;
@@ -35532,8 +35575,8 @@ function recordDirectChatDelivery(sessionId, messageIds) {
35532
35575
  delivered_at: (/* @__PURE__ */ new Date()).toISOString()
35533
35576
  });
35534
35577
  }
35535
- var DIRECT_CHAT_RECOVERY_OUTBOX_DIR = AGT_AGENT_CODE_NAME ? join11(homedir3(), ".augmented", AGT_AGENT_CODE_NAME, "direct-chat-recovery-outbox") : null;
35536
- var DIRECT_CHAT_RECOVERY_LEDGER_DIR = AGT_AGENT_CODE_NAME ? join11(homedir3(), ".augmented", AGT_AGENT_CODE_NAME, ".agt-direct-chat-recovery-ledger") : null;
35578
+ var DIRECT_CHAT_RECOVERY_OUTBOX_DIR = AGT_AGENT_CODE_NAME ? join12(homedir4(), ".augmented", AGT_AGENT_CODE_NAME, "direct-chat-recovery-outbox") : null;
35579
+ var DIRECT_CHAT_RECOVERY_LEDGER_DIR = AGT_AGENT_CODE_NAME ? join12(homedir4(), ".augmented", AGT_AGENT_CODE_NAME, ".agt-direct-chat-recovery-ledger") : null;
35537
35580
  var progressReceivedAt = /* @__PURE__ */ new Map();
35538
35581
  var directChatProgressState = { tracked: null };
35539
35582
  var directChatProgressTickRunning = false;
@@ -35552,7 +35595,7 @@ var directChatKanbanCardClient = createKanbanCardActiveClient({
35552
35595
  function readProgressHeartbeat() {
35553
35596
  if (!PROGRESS_HEARTBEAT_PATH || !existsSync6(PROGRESS_HEARTBEAT_PATH)) return null;
35554
35597
  try {
35555
- return parseProgressHeartbeat(readFileSync10(PROGRESS_HEARTBEAT_PATH, "utf-8"));
35598
+ return parseProgressHeartbeat(readFileSync11(PROGRESS_HEARTBEAT_PATH, "utf-8"));
35556
35599
  } catch {
35557
35600
  return null;
35558
35601
  }
@@ -35561,7 +35604,7 @@ function seedProgressHeartbeat() {
35561
35604
  if (!PROGRESS_HEARTBEAT_PATH) return;
35562
35605
  const tmp = `${PROGRESS_HEARTBEAT_PATH}.${process.pid}.tmp`;
35563
35606
  try {
35564
- mkdirSync5(join11(homedir3(), ".augmented", AGT_AGENT_CODE_NAME), { recursive: true });
35607
+ mkdirSync5(join12(homedir4(), ".augmented", AGT_AGENT_CODE_NAME), { recursive: true });
35565
35608
  writeFileSync6(tmp, serializeProgressHeartbeat(SEED_PROGRESS_STEP, Date.now()), { mode: 384 });
35566
35609
  renameSync5(tmp, PROGRESS_HEARTBEAT_PATH);
35567
35610
  } catch {
@@ -35721,7 +35764,7 @@ var inboundAttachmentDeps = {
35721
35764
  },
35722
35765
  ensureDir: (dir) => mkdirSync5(dir, { recursive: true }),
35723
35766
  writeFile: (path, bytes) => writeFileSync6(path, bytes, { mode: 384 }),
35724
- joinPath: (...parts) => join11(...parts),
35767
+ joinPath: (...parts) => join12(...parts),
35725
35768
  warn: (msg) => process.stderr.write(`${msg}
35726
35769
  `)
35727
35770
  };
@@ -36051,7 +36094,7 @@ function scheduleDirectChatBusyAck(sessionId, messageId, arrivedWhileBusy) {
36051
36094
  let paneLogFreshAgeMs = null;
36052
36095
  if (DIRECT_CHAT_CODE_NAME_AGENT_DIR) {
36053
36096
  try {
36054
- const paneMtimeMs = statSync2(join11(DIRECT_CHAT_CODE_NAME_AGENT_DIR, "pane.log")).mtimeMs;
36097
+ const paneMtimeMs = statSync2(join12(DIRECT_CHAT_CODE_NAME_AGENT_DIR, "pane.log")).mtimeMs;
36055
36098
  paneLogFreshAgeMs = Math.max(0, Date.now() - paneMtimeMs);
36056
36099
  } catch {
36057
36100
  }
@@ -36124,8 +36167,9 @@ async function pollForMessages(sinceMs) {
36124
36167
  if (processedIds.has(msg.id)) continue;
36125
36168
  const isNotice = msg.kind === "notice";
36126
36169
  const maintenanceActive = !isNotice && isMaintenanceModeActive();
36127
- const usageLimitUntil = !isNotice && !maintenanceActive ? readUsageLimitUntil({ codeName: AGT_AGENT_CODE_NAME ?? null }) : null;
36128
- if (!isNotice && !maintenanceActive && !usageLimitUntil) {
36170
+ const accountMuted = !isNotice && !maintenanceActive ? readAccountEnforcementLevel({ codeName: AGT_AGENT_CODE_NAME ?? null }) === "mute" : false;
36171
+ const usageLimitUntil = !isNotice && !maintenanceActive && !accountMuted ? readUsageLimitUntil({ codeName: AGT_AGENT_CODE_NAME ?? null }) : null;
36172
+ if (!isNotice && !maintenanceActive && !accountMuted && !usageLimitUntil) {
36129
36173
  markProcessed(msg.id);
36130
36174
  claimTracker.track(msg.session_id, msg.id);
36131
36175
  if (!progressReceivedAt.has(msg.session_id)) {
@@ -36159,6 +36203,37 @@ async function pollForMessages(sinceMs) {
36159
36203
  if (throttle.reply) DIRECT_CHAT_MAINTENANCE_CACHE.delete(throttleKey);
36160
36204
  process.stderr.write(
36161
36205
  `direct-chat-channel: maintenance offline reply failed: ${err.message}
36206
+ `
36207
+ );
36208
+ }
36209
+ continue;
36210
+ }
36211
+ if (accountMuted) {
36212
+ const throttleKey = `${msg.session_id}|account_mute`;
36213
+ const throttle = decideDeclineReply({
36214
+ cache: DIRECT_CHAT_ACCOUNT_MUTE_CACHE,
36215
+ key: throttleKey,
36216
+ cooldownMs: DIRECT_CHAT_MAINTENANCE_COOLDOWN_MS,
36217
+ now: Date.now()
36218
+ });
36219
+ const route = throttle.reply ? "/host/direct-chat/reply" : "/host/direct-chat/consume";
36220
+ const body = throttle.reply ? { agent_id: AGT_AGENT_ID, session_id: msg.session_id, content: buildAccountIssueReplyText(), message_ids: [msg.id] } : { agent_id: AGT_AGENT_ID, session_id: msg.session_id, message_ids: [msg.id] };
36221
+ try {
36222
+ const res2 = await apiPost(route, body);
36223
+ const data2 = await res2.json().catch(() => ({}));
36224
+ if (res2.ok && data2.error == null) {
36225
+ markProcessed(msg.id);
36226
+ } else {
36227
+ if (throttle.reply) DIRECT_CHAT_ACCOUNT_MUTE_CACHE.delete(throttleKey);
36228
+ process.stderr.write(
36229
+ `direct-chat-channel: account-mute ${throttle.reply ? "reply" : "consume"} failed: ${data2.error ?? `HTTP ${res2.status}`}
36230
+ `
36231
+ );
36232
+ }
36233
+ } catch (err) {
36234
+ if (throttle.reply) DIRECT_CHAT_ACCOUNT_MUTE_CACHE.delete(throttleKey);
36235
+ process.stderr.write(
36236
+ `direct-chat-channel: account-mute reply failed: ${err.message}
36162
36237
  `
36163
36238
  );
36164
36239
  }
@@ -36377,7 +36452,7 @@ function sweepAgedDirectChatMarkersNow(thresholdMs) {
36377
36452
  const now = Date.now();
36378
36453
  const res = sweepAgedDirectChatMarkers(DIRECT_CHAT_PENDING_INBOUND_DIR, {
36379
36454
  readdir: (dir) => readdirSync4(dir),
36380
- readFile: (p2) => readFileSync10(p2, "utf8"),
36455
+ readFile: (p2) => readFileSync11(p2, "utf8"),
36381
36456
  unlink: (p2) => {
36382
36457
  if (existsSync6(p2)) unlinkSync4(p2);
36383
36458
  },
@@ -36413,7 +36488,7 @@ function sanitizeRecoveryText(text) {
36413
36488
  }
36414
36489
  function directChatRecoveryDeps() {
36415
36490
  return {
36416
- readFile: (p2) => readFileSync10(p2, "utf-8"),
36491
+ readFile: (p2) => readFileSync11(p2, "utf-8"),
36417
36492
  renameFile: (from, to) => renameSync5(from, to),
36418
36493
  unlinkFile: (p2) => {
36419
36494
  if (existsSync6(p2)) unlinkSync4(p2);
@@ -36426,7 +36501,7 @@ function directChatRecoveryDeps() {
36426
36501
  if (!DIRECT_CHAT_RECOVERY_LEDGER_DIR) return;
36427
36502
  if (markerName.includes("/") || markerName.includes("\\") || markerName.includes("..")) return;
36428
36503
  try {
36429
- const p2 = join11(DIRECT_CHAT_RECOVERY_LEDGER_DIR, markerName);
36504
+ const p2 = join12(DIRECT_CHAT_RECOVERY_LEDGER_DIR, markerName);
36430
36505
  if (existsSync6(p2)) unlinkSync4(p2);
36431
36506
  } catch {
36432
36507
  }
@@ -36462,7 +36537,7 @@ async function processDirectChatRecoveryOutboxFile(filename) {
36462
36537
  if (!enabled) return;
36463
36538
  directChatRecoveryInFlight.add(filename);
36464
36539
  try {
36465
- const fullPath = join11(DIRECT_CHAT_RECOVERY_OUTBOX_DIR, filename);
36540
+ const fullPath = join12(DIRECT_CHAT_RECOVERY_OUTBOX_DIR, filename);
36466
36541
  await consumeDirectChatRecoveryFile(fullPath, filename, directChatRecoveryDeps());
36467
36542
  } catch (err) {
36468
36543
  process.stderr.write(
@@ -36490,7 +36565,7 @@ if (DIRECT_CHAT_RECOVERY_OUTBOX_DIR) {
36490
36565
  if (!filename) return;
36491
36566
  const name = filename.toString();
36492
36567
  if (!name.endsWith(".json")) return;
36493
- if (existsSync6(join11(DIRECT_CHAT_RECOVERY_OUTBOX_DIR, name))) {
36568
+ if (existsSync6(join12(DIRECT_CHAT_RECOVERY_OUTBOX_DIR, name))) {
36494
36569
  void processDirectChatRecoveryOutboxFile(name);
36495
36570
  }
36496
36571
  });