@integrity-labs/agt-cli 0.28.222 → 0.28.224

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.
@@ -18213,6 +18213,133 @@ function startSlackRecoveryOutboxWatcher() {
18213
18213
  retryTimer.unref?.();
18214
18214
  }
18215
18215
  startSlackRecoveryOutboxWatcher();
18216
+ var SLACK_NOTICE_OUTBOX_DIR = SLACK_AGENT_DIR ? join9(SLACK_AGENT_DIR, "slack-notice-outbox") : null;
18217
+ var SLACK_NOTICE_MAX_AGE_MS = 9e4;
18218
+ var SLACK_NOTICE_INFLIGHT = /* @__PURE__ */ new Set();
18219
+ async function processSlackNoticeOutboxFile(filename) {
18220
+ if (!SLACK_NOTICE_OUTBOX_DIR) return;
18221
+ if (filename.startsWith(".") || filename.endsWith(".tmp") || !filename.endsWith(".json")) return;
18222
+ if (SLACK_NOTICE_INFLIGHT.has(filename)) return;
18223
+ SLACK_NOTICE_INFLIGHT.add(filename);
18224
+ const fullPath = join9(SLACK_NOTICE_OUTBOX_DIR, filename);
18225
+ try {
18226
+ let mtimeMs;
18227
+ try {
18228
+ mtimeMs = statSync2(fullPath).mtimeMs;
18229
+ } catch {
18230
+ return;
18231
+ }
18232
+ if (Date.now() - mtimeMs > SLACK_NOTICE_MAX_AGE_MS) {
18233
+ try {
18234
+ unlinkSync5(fullPath);
18235
+ } catch {
18236
+ }
18237
+ return;
18238
+ }
18239
+ let payload;
18240
+ try {
18241
+ const parsed = JSON.parse(readFileSync10(fullPath, "utf-8"));
18242
+ if (!parsed || typeof parsed !== "object") throw new Error("not an object");
18243
+ payload = parsed;
18244
+ } catch {
18245
+ try {
18246
+ unlinkSync5(fullPath);
18247
+ } catch {
18248
+ }
18249
+ return;
18250
+ }
18251
+ if (!payload.channel || !payload.text) {
18252
+ try {
18253
+ unlinkSync5(fullPath);
18254
+ } catch {
18255
+ }
18256
+ return;
18257
+ }
18258
+ if (!resolveHostBooleanFlag({
18259
+ key: "compaction-notice",
18260
+ envVar: "AGT_COMPACTION_NOTICE_ENABLED",
18261
+ defaultValue: false
18262
+ })) {
18263
+ try {
18264
+ unlinkSync5(fullPath);
18265
+ } catch {
18266
+ }
18267
+ return;
18268
+ }
18269
+ const controller = new AbortController();
18270
+ const timeoutId = setTimeout(() => controller.abort(), 15e3);
18271
+ try {
18272
+ const res = await fetch("https://slack.com/api/chat.postMessage", {
18273
+ method: "POST",
18274
+ signal: controller.signal,
18275
+ headers: { "Content-Type": "application/json", Authorization: `Bearer ${BOT_TOKEN}` },
18276
+ body: JSON.stringify({
18277
+ channel: payload.channel,
18278
+ text: payload.text,
18279
+ ...payload.thread_ts ? { thread_ts: payload.thread_ts } : {}
18280
+ })
18281
+ });
18282
+ const data = await res.json();
18283
+ if (data.ok) {
18284
+ recordActivity("reply");
18285
+ process.stderr.write(
18286
+ `slack-channel(${AGENT_CODE_NAME}): compaction notice sent (channel=${redactSlackId(payload.channel)} thread=${redactSlackId(payload.thread_ts)})
18287
+ `
18288
+ );
18289
+ } else {
18290
+ process.stderr.write(
18291
+ `slack-channel(${AGENT_CODE_NAME}): compaction notice failed (channel=${redactSlackId(payload.channel)}): ${data.error ?? "unknown"}
18292
+ `
18293
+ );
18294
+ }
18295
+ } catch (err) {
18296
+ const msg = err.name === "AbortError" ? "timed out after 15s" : err.message;
18297
+ process.stderr.write(
18298
+ `slack-channel(${AGENT_CODE_NAME}): compaction notice error (channel=${redactSlackId(payload.channel)}): ${msg}
18299
+ `
18300
+ );
18301
+ } finally {
18302
+ clearTimeout(timeoutId);
18303
+ }
18304
+ try {
18305
+ unlinkSync5(fullPath);
18306
+ } catch {
18307
+ }
18308
+ } finally {
18309
+ SLACK_NOTICE_INFLIGHT.delete(filename);
18310
+ }
18311
+ }
18312
+ function startSlackNoticeOutboxWatcher() {
18313
+ if (!SLACK_NOTICE_OUTBOX_DIR) return;
18314
+ try {
18315
+ mkdirSync8(SLACK_NOTICE_OUTBOX_DIR, { recursive: true, mode: 448 });
18316
+ } catch (err) {
18317
+ process.stderr.write(
18318
+ `slack-channel(${AGENT_CODE_NAME}): notice outbox mkdir failed: ${err.message}
18319
+ `
18320
+ );
18321
+ return;
18322
+ }
18323
+ try {
18324
+ for (const f of readdirSync3(SLACK_NOTICE_OUTBOX_DIR)) void processSlackNoticeOutboxFile(f);
18325
+ } catch {
18326
+ }
18327
+ try {
18328
+ const watcher = watch(SLACK_NOTICE_OUTBOX_DIR, (event, filename) => {
18329
+ if (event !== "rename" || !filename) return;
18330
+ if (existsSync8(join9(SLACK_NOTICE_OUTBOX_DIR, filename))) {
18331
+ void processSlackNoticeOutboxFile(filename);
18332
+ }
18333
+ });
18334
+ watcher.unref?.();
18335
+ } catch (err) {
18336
+ process.stderr.write(
18337
+ `slack-channel(${AGENT_CODE_NAME}): notice outbox watch failed: ${err.message}
18338
+ `
18339
+ );
18340
+ }
18341
+ }
18342
+ startSlackNoticeOutboxWatcher();
18216
18343
  var STALE_MARKER_MS = 24 * 60 * 60 * 1e3;
18217
18344
  var DISCRETIONARY_MARKER_MS = 10 * 60 * 1e3;
18218
18345
  function trackPendingMessage(channel, threadTs, messageTs, undeliverable = false, discretionary = false, payload) {
@@ -13865,6 +13865,7 @@ var StdioServerTransport = class {
13865
13865
 
13866
13866
  // src/teams-channel.ts
13867
13867
  import {
13868
+ existsSync as existsSync4,
13868
13869
  mkdirSync as mkdirSync4,
13869
13870
  readdirSync as readdirSync2,
13870
13871
  readFileSync as readFileSync4,
@@ -16494,6 +16495,110 @@ ensureGhostReplyDirs();
16494
16495
  sweepStaleMarkersOnBoot();
16495
16496
  startPendingInboundWatcher();
16496
16497
  startRecoveryOutboxWatcher();
16498
+ var NOTICE_OUTBOX_DIR = AGENT_DIR ? join5(AGENT_DIR, "msteams-notice-outbox") : null;
16499
+ var NOTICE_MAX_AGE_MS = 9e4;
16500
+ function isNoticePayload(value) {
16501
+ if (!value || typeof value !== "object") return false;
16502
+ const v = value;
16503
+ const nonEmpty = (s) => typeof s === "string" && s.trim().length > 0;
16504
+ return nonEmpty(v.conversation_id) && nonEmpty(v.service_url) && nonEmpty(v.text);
16505
+ }
16506
+ var NOTICE_INFLIGHT = /* @__PURE__ */ new Set();
16507
+ async function processNoticeFile(filename) {
16508
+ if (!NOTICE_OUTBOX_DIR) return;
16509
+ if (filename.startsWith(".") || filename.endsWith(".tmp") || !filename.endsWith(".json")) return;
16510
+ if (NOTICE_INFLIGHT.has(filename)) return;
16511
+ NOTICE_INFLIGHT.add(filename);
16512
+ const fullPath = join5(NOTICE_OUTBOX_DIR, filename);
16513
+ try {
16514
+ let mtimeMs;
16515
+ try {
16516
+ mtimeMs = statSync(fullPath).mtimeMs;
16517
+ } catch {
16518
+ return;
16519
+ }
16520
+ if (Date.now() - mtimeMs > NOTICE_MAX_AGE_MS) {
16521
+ try {
16522
+ unlinkSync(fullPath);
16523
+ } catch {
16524
+ }
16525
+ return;
16526
+ }
16527
+ let payload;
16528
+ try {
16529
+ payload = JSON.parse(readFileSync4(fullPath, "utf8"));
16530
+ } catch {
16531
+ try {
16532
+ unlinkSync(fullPath);
16533
+ } catch {
16534
+ }
16535
+ return;
16536
+ }
16537
+ if (!isNoticePayload(payload)) {
16538
+ try {
16539
+ unlinkSync(fullPath);
16540
+ } catch {
16541
+ }
16542
+ return;
16543
+ }
16544
+ if (!resolveHostBooleanFlag({
16545
+ key: "compaction-notice",
16546
+ envVar: "AGT_COMPACTION_NOTICE_ENABLED",
16547
+ defaultValue: false
16548
+ })) {
16549
+ try {
16550
+ unlinkSync(fullPath);
16551
+ } catch {
16552
+ }
16553
+ return;
16554
+ }
16555
+ try {
16556
+ await sendActivity(payload.service_url, payload.conversation_id, {
16557
+ type: "message",
16558
+ text: payload.text,
16559
+ ...payload.reply_to_id ? { replyToId: payload.reply_to_id } : {}
16560
+ });
16561
+ process.stderr.write(`teams-channel: compaction notice sent ${filename}
16562
+ `);
16563
+ } catch (err) {
16564
+ process.stderr.write(
16565
+ `teams-channel: compaction notice failed ${filename} (${err.message})
16566
+ `
16567
+ );
16568
+ }
16569
+ try {
16570
+ unlinkSync(fullPath);
16571
+ } catch {
16572
+ }
16573
+ } finally {
16574
+ NOTICE_INFLIGHT.delete(filename);
16575
+ }
16576
+ }
16577
+ function startNoticeOutboxWatcher() {
16578
+ if (!NOTICE_OUTBOX_DIR) return;
16579
+ try {
16580
+ mkdirSync4(NOTICE_OUTBOX_DIR, { recursive: true, mode: 448 });
16581
+ } catch (err) {
16582
+ process.stderr.write(`teams-channel: notice outbox mkdir failed (${err.message})
16583
+ `);
16584
+ return;
16585
+ }
16586
+ try {
16587
+ for (const f of readdirSync2(NOTICE_OUTBOX_DIR)) void processNoticeFile(f);
16588
+ } catch {
16589
+ }
16590
+ try {
16591
+ const w = watch(NOTICE_OUTBOX_DIR, (_event, name) => {
16592
+ if (!name) return;
16593
+ if (existsSync4(join5(NOTICE_OUTBOX_DIR, name))) void processNoticeFile(name);
16594
+ });
16595
+ w.unref?.();
16596
+ } catch (err) {
16597
+ process.stderr.write(`teams-channel: notice outbox watch failed (${err.message})
16598
+ `);
16599
+ }
16600
+ }
16601
+ startNoticeOutboxWatcher();
16497
16602
  inboundRelayPuller = startMsteamsInboundPuller({
16498
16603
  agtHost: process.env["AGT_HOST"]?.trim() || "https://api.augmented.team",
16499
16604
  agtApiKey: process.env.AGT_API_KEY ?? null,
@@ -18838,6 +18838,119 @@ function startRecoveryOutboxWatcher() {
18838
18838
  retryTimer.unref?.();
18839
18839
  }
18840
18840
  startRecoveryOutboxWatcher();
18841
+ var NOTICE_OUTBOX_DIR = AGENT_DIR ? join9(AGENT_DIR, "telegram-notice-outbox") : null;
18842
+ var NOTICE_MAX_AGE_MS = 9e4;
18843
+ var NOTICE_INFLIGHT = /* @__PURE__ */ new Set();
18844
+ async function processNoticeOutboxFile(filename) {
18845
+ if (!NOTICE_OUTBOX_DIR) return;
18846
+ if (filename.startsWith(".") || filename.endsWith(".tmp") || !filename.endsWith(".json")) return;
18847
+ if (NOTICE_INFLIGHT.has(filename)) return;
18848
+ NOTICE_INFLIGHT.add(filename);
18849
+ const fullPath = join9(NOTICE_OUTBOX_DIR, filename);
18850
+ try {
18851
+ let mtimeMs;
18852
+ try {
18853
+ mtimeMs = statSync2(fullPath).mtimeMs;
18854
+ } catch {
18855
+ return;
18856
+ }
18857
+ if (Date.now() - mtimeMs > NOTICE_MAX_AGE_MS) {
18858
+ try {
18859
+ unlinkSync6(fullPath);
18860
+ } catch {
18861
+ }
18862
+ return;
18863
+ }
18864
+ let payload;
18865
+ try {
18866
+ const parsed = JSON.parse(readFileSync10(fullPath, "utf-8"));
18867
+ if (!parsed || typeof parsed !== "object") throw new Error("not an object");
18868
+ payload = parsed;
18869
+ } catch {
18870
+ try {
18871
+ unlinkSync6(fullPath);
18872
+ } catch {
18873
+ }
18874
+ return;
18875
+ }
18876
+ if (!payload.chat_id || !payload.text) {
18877
+ try {
18878
+ unlinkSync6(fullPath);
18879
+ } catch {
18880
+ }
18881
+ return;
18882
+ }
18883
+ if (!resolveHostBooleanFlag({
18884
+ key: "compaction-notice",
18885
+ envVar: "AGT_COMPACTION_NOTICE_ENABLED",
18886
+ defaultValue: false
18887
+ })) {
18888
+ try {
18889
+ unlinkSync6(fullPath);
18890
+ } catch {
18891
+ }
18892
+ return;
18893
+ }
18894
+ try {
18895
+ const resp = await telegramApiCall(
18896
+ "sendMessage",
18897
+ { chat_id: payload.chat_id, text: payload.text, allow_sending_without_reply: true },
18898
+ 15e3
18899
+ );
18900
+ if (resp.ok) {
18901
+ process.stderr.write(
18902
+ `telegram-channel(${AGENT_CODE_NAME}): compaction notice sent (chat=${redactId(payload.chat_id)})
18903
+ `
18904
+ );
18905
+ } else {
18906
+ process.stderr.write(
18907
+ `telegram-channel(${AGENT_CODE_NAME}): compaction notice failed (chat=${redactId(payload.chat_id)}): ${resp.description ?? "unknown"}
18908
+ `
18909
+ );
18910
+ }
18911
+ } catch (err) {
18912
+ process.stderr.write(
18913
+ `telegram-channel(${AGENT_CODE_NAME}): compaction notice error (chat=${redactId(payload.chat_id)}): ${err.message}
18914
+ `
18915
+ );
18916
+ }
18917
+ try {
18918
+ unlinkSync6(fullPath);
18919
+ } catch {
18920
+ }
18921
+ } finally {
18922
+ NOTICE_INFLIGHT.delete(filename);
18923
+ }
18924
+ }
18925
+ function startNoticeOutboxWatcher() {
18926
+ if (!NOTICE_OUTBOX_DIR) return;
18927
+ try {
18928
+ mkdirSync8(NOTICE_OUTBOX_DIR, { recursive: true, mode: 448 });
18929
+ } catch (err) {
18930
+ process.stderr.write(
18931
+ `telegram-channel(${AGENT_CODE_NAME}): notice outbox mkdir failed: ${err.message}
18932
+ `
18933
+ );
18934
+ return;
18935
+ }
18936
+ try {
18937
+ for (const f of readdirSync3(NOTICE_OUTBOX_DIR)) void processNoticeOutboxFile(f);
18938
+ } catch {
18939
+ }
18940
+ try {
18941
+ const watcher = watch(NOTICE_OUTBOX_DIR, (event, filename) => {
18942
+ if (event !== "rename" || !filename) return;
18943
+ if (existsSync7(join9(NOTICE_OUTBOX_DIR, filename))) void processNoticeOutboxFile(filename);
18944
+ });
18945
+ watcher.unref?.();
18946
+ } catch (err) {
18947
+ process.stderr.write(
18948
+ `telegram-channel(${AGENT_CODE_NAME}): notice outbox watch failed: ${err.message}
18949
+ `
18950
+ );
18951
+ }
18952
+ }
18953
+ startNoticeOutboxWatcher();
18841
18954
  var STALE_MARKER_MS = 24 * 60 * 60 * 1e3;
18842
18955
  function trackPendingMessage(chatId, messageId, chatType, undeliverable = false, payload) {
18843
18956
  writePendingInboundMarker(chatId, messageId, chatType, undeliverable, payload);
@@ -36,7 +36,7 @@ import {
36
36
  writeDirectChatSessionState,
37
37
  writeEgressAllowlist,
38
38
  writePersistentClaudeWrapper
39
- } from "./chunk-B3E4B7JF.js";
39
+ } from "./chunk-S43WVYAF.js";
40
40
  import "./chunk-XWVM4KPK.js";
41
41
  export {
42
42
  EGRESS_BASELINE_DOMAINS,
@@ -77,4 +77,4 @@ export {
77
77
  writeEgressAllowlist,
78
78
  writePersistentClaudeWrapper
79
79
  };
80
- //# sourceMappingURL=persistent-session-M4ZTLCDP.js.map
80
+ //# sourceMappingURL=persistent-session-I4CQEDME.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  paneLogPath
3
- } from "./chunk-B3E4B7JF.js";
3
+ } from "./chunk-S43WVYAF.js";
4
4
  import "./chunk-XWVM4KPK.js";
5
5
 
6
6
  // src/lib/responsiveness-probe.ts
@@ -303,4 +303,4 @@ export {
303
303
  readAndResetChannelDeflections,
304
304
  readAndResetChannelLaneClassifications
305
305
  };
306
- //# sourceMappingURL=responsiveness-probe-E25HFGJL.js.map
306
+ //# sourceMappingURL=responsiveness-probe-MIUMXKV4.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integrity-labs/agt-cli",
3
- "version": "0.28.222",
3
+ "version": "0.28.224",
4
4
  "description": "Augmented Team CLI — agent provisioning and management",
5
5
  "type": "module",
6
6
  "engines": {