@integrity-labs/agt-cli 0.28.477 → 0.28.479

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.
@@ -33505,6 +33505,10 @@ var INSTALLABLE_NATIVE_INTEGRATION_IDS = INSTALLABLE_NATIVE_INTEGRATIONS.map((i)
33505
33505
  var MB2 = 1024 * 1024;
33506
33506
  var DIRECT_CHAT_UPLOAD_MAX_BYTES = 10 * MB2;
33507
33507
 
33508
+ // ../core/dist/direct-chat/notice-display.js
33509
+ var AGENT_DIRECTED_NOTICE_KINDS = ["scheduled_task_nudge", "kanban_check"];
33510
+ var AGENT_DIRECTED_KIND_SET = new Set(AGENT_DIRECTED_NOTICE_KINDS);
33511
+
33508
33512
  // ../core/dist/onboarding/state-machine.js
33509
33513
  var AREA_ORDER = [
33510
33514
  "framing",
@@ -36224,6 +36228,31 @@ import { createHash } from "crypto";
36224
36228
  function shouldArmWatch(opts) {
36225
36229
  return !opts.isBot && opts.replyOwed;
36226
36230
  }
36231
+ function decideUsageLimitCursorCall(opts) {
36232
+ if (opts.throttled) {
36233
+ return {
36234
+ route: "/host/direct-chat/consume",
36235
+ body: {
36236
+ agent_id: opts.agentId,
36237
+ session_id: opts.sessionId,
36238
+ message_ids: [opts.messageId]
36239
+ }
36240
+ };
36241
+ }
36242
+ return {
36243
+ route: "/host/direct-chat/reply",
36244
+ body: {
36245
+ agent_id: opts.agentId,
36246
+ session_id: opts.sessionId,
36247
+ content: opts.noticeText,
36248
+ message_ids: [opts.messageId],
36249
+ // ENG-8274: a cap refusal is the SYSTEM speaking, not the agent.
36250
+ // Orthogonal to message_ids — consuming the cursor is about delivery,
36251
+ // `kind` is about who authored this and whether a reply is owed.
36252
+ kind: "notice"
36253
+ }
36254
+ };
36255
+ }
36227
36256
  function describeUnparsedRefusal(text) {
36228
36257
  if (!text) return "refusal=absent";
36229
36258
  const hash = createHash("sha256").update(text).digest("hex").slice(0, 12);
@@ -36958,17 +36987,13 @@ function armUsageLimitWatch(args) {
36958
36987
  cooldownMs: DIRECT_CHAT_MAINTENANCE_COOLDOWN_MS,
36959
36988
  now: Date.now()
36960
36989
  });
36961
- const route = throttle.reply ? "/host/direct-chat/reply" : "/host/direct-chat/consume";
36962
- const body = throttle.reply ? {
36963
- agent_id: AGT_AGENT_ID,
36964
- session_id: args.sessionId,
36965
- content: buildUsageLimitReplyText(refusal.resetsAt),
36966
- message_ids: [args.messageId],
36967
- // ENG-8274: a cap refusal is the SYSTEM speaking, not the agent.
36968
- // Orthogonal to message_ids — consuming the cursor is about delivery,
36969
- // `kind` is about who authored this and whether a reply is owed.
36970
- kind: "notice"
36971
- } : { agent_id: AGT_AGENT_ID, session_id: args.sessionId, message_ids: [args.messageId] };
36990
+ const { route, body } = decideUsageLimitCursorCall({
36991
+ throttled: !throttle.reply,
36992
+ agentId: AGT_AGENT_ID,
36993
+ sessionId: args.sessionId,
36994
+ messageId: args.messageId,
36995
+ noticeText: buildUsageLimitReplyText(refusal.resetsAt)
36996
+ });
36972
36997
  const res = await apiPost(route, body);
36973
36998
  const data = await res.json().catch(() => ({}));
36974
36999
  if (res.ok && data.error == null) {
@@ -39832,6 +39832,10 @@ var INSTALLABLE_NATIVE_INTEGRATION_IDS = INSTALLABLE_NATIVE_INTEGRATIONS.map((i)
39832
39832
  var MB2 = 1024 * 1024;
39833
39833
  var DIRECT_CHAT_UPLOAD_MAX_BYTES = 10 * MB2;
39834
39834
 
39835
+ // ../core/dist/direct-chat/notice-display.js
39836
+ var AGENT_DIRECTED_NOTICE_KINDS = ["scheduled_task_nudge", "kanban_check"];
39837
+ var AGENT_DIRECTED_KIND_SET = new Set(AGENT_DIRECTED_NOTICE_KINDS);
39838
+
39835
39839
  // ../core/dist/onboarding/state-machine.js
39836
39840
  var AREA_ORDER = [
39837
39841
  "framing",
@@ -33727,6 +33727,10 @@ var INSTALLABLE_NATIVE_INTEGRATION_IDS = INSTALLABLE_NATIVE_INTEGRATIONS.map((i)
33727
33727
  var MB2 = 1024 * 1024;
33728
33728
  var DIRECT_CHAT_UPLOAD_MAX_BYTES = 10 * MB2;
33729
33729
 
33730
+ // ../core/dist/direct-chat/notice-display.js
33731
+ var AGENT_DIRECTED_NOTICE_KINDS = ["scheduled_task_nudge", "kanban_check"];
33732
+ var AGENT_DIRECTED_KIND_SET = new Set(AGENT_DIRECTED_NOTICE_KINDS);
33733
+
33730
33734
  // ../core/dist/onboarding/state-machine.js
33731
33735
  var AREA_ORDER = [
33732
33736
  "framing",
@@ -36955,6 +36959,18 @@ function decideRefusalAction(opts) {
36955
36959
  if (!refusal.resetsAt) return "missing-reset";
36956
36960
  return "notify";
36957
36961
  }
36962
+ function describeNoticeOutcome(outcome) {
36963
+ switch (outcome) {
36964
+ case "posted":
36965
+ return "reported";
36966
+ case "throttled":
36967
+ return "notice throttled";
36968
+ case "failed":
36969
+ return "notice failed";
36970
+ case "skipped":
36971
+ return "no notice (unaddressable)";
36972
+ }
36973
+ }
36958
36974
  function describeUnparsedRefusal(text) {
36959
36975
  if (!text) return "refusal=absent";
36960
36976
  const hash = createHash("sha256").update(text).digest("hex").slice(0, 12);
@@ -39939,8 +39955,8 @@ async function maybeSendMaintenanceNotice(args) {
39939
39955
  }
39940
39956
  var SLACK_USAGE_LIMIT_NOTICE_CACHE = /* @__PURE__ */ new Map();
39941
39957
  async function maybeSendUsageLimitNotice(args) {
39942
- if (!BOT_TOKEN) return;
39943
- if (!args.channel || !args.senderId) return;
39958
+ if (!BOT_TOKEN) return "skipped";
39959
+ if (!args.channel || !args.senderId) return "skipped";
39944
39960
  const key2 = `${args.channel}|${args.senderId}|usage_limit`;
39945
39961
  const decision = decideDeclineReply({
39946
39962
  cache: SLACK_USAGE_LIMIT_NOTICE_CACHE,
@@ -39953,7 +39969,7 @@ async function maybeSendUsageLimitNotice(args) {
39953
39969
  `slack-channel(${AGENT_CODE_NAME}): usage-limit notice suppressed by cooldown (channel=${redactSlackId(args.channel)}, sender=${redactSlackId(args.senderId)}, remaining=${decision.remainingMs}ms)
39954
39970
  `
39955
39971
  );
39956
- return;
39972
+ return "throttled";
39957
39973
  }
39958
39974
  const controller = new AbortController();
39959
39975
  const timeoutId = setTimeout(() => controller.abort(), 1e4);
@@ -39978,7 +39994,16 @@ async function maybeSendUsageLimitNotice(args) {
39978
39994
  `slack-channel(${AGENT_CODE_NAME}): usage-limit notice post failed: ${data.error ?? "unknown"}
39979
39995
  `
39980
39996
  );
39997
+ return "failed";
39981
39998
  }
39999
+ return "posted";
40000
+ } catch (err) {
40001
+ SLACK_USAGE_LIMIT_NOTICE_CACHE.delete(key2);
40002
+ process.stderr.write(
40003
+ `slack-channel(${AGENT_CODE_NAME}): usage-limit notice failed: ${err.message}
40004
+ `
40005
+ );
40006
+ return "failed";
39982
40007
  } finally {
39983
40008
  clearTimeout(timeoutId);
39984
40009
  }
@@ -39998,7 +40023,7 @@ function armSlackUsageLimitWatch(args) {
39998
40023
  }
39999
40024
  const resetsAt = refusal?.resetsAt;
40000
40025
  if (!resetsAt) return;
40001
- await maybeSendUsageLimitNotice({
40026
+ const outcome = await maybeSendUsageLimitNotice({
40002
40027
  channel: args.channel,
40003
40028
  senderId: args.senderId,
40004
40029
  threadTs: args.threadTs,
@@ -40008,7 +40033,7 @@ function armSlackUsageLimitWatch(args) {
40008
40033
  clearSlackPendingMarkerByMessageTs2(args.channel, args.messageTs);
40009
40034
  }
40010
40035
  process.stderr.write(
40011
- `slack-channel(${AGENT_CODE_NAME}): [usage-limit-reactive] reported refusal for channel=${redactSlackId(args.channel)} ts=${redactSlackId(args.messageTs)} resets=${resetsAt.toISOString()}
40036
+ `slack-channel(${AGENT_CODE_NAME}): [usage-limit-reactive] ${describeNoticeOutcome(outcome)} refusal for channel=${redactSlackId(args.channel)} ts=${redactSlackId(args.messageTs)} resets=${resetsAt.toISOString()}
40012
40037
  `
40013
40038
  );
40014
40039
  } catch (err) {
@@ -34053,6 +34053,10 @@ var INSTALLABLE_NATIVE_INTEGRATION_IDS = INSTALLABLE_NATIVE_INTEGRATIONS.map((i)
34053
34053
  var MB2 = 1024 * 1024;
34054
34054
  var DIRECT_CHAT_UPLOAD_MAX_BYTES = 10 * MB2;
34055
34055
 
34056
+ // ../core/dist/direct-chat/notice-display.js
34057
+ var AGENT_DIRECTED_NOTICE_KINDS = ["scheduled_task_nudge", "kanban_check"];
34058
+ var AGENT_DIRECTED_KIND_SET = new Set(AGENT_DIRECTED_NOTICE_KINDS);
34059
+
34056
34060
  // ../core/dist/onboarding/state-machine.js
34057
34061
  var AREA_ORDER = [
34058
34062
  "framing",
@@ -37763,6 +37767,18 @@ function decideRefusalAction(opts) {
37763
37767
  if (!refusal.resetsAt) return "missing-reset";
37764
37768
  return "notify";
37765
37769
  }
37770
+ function describeNoticeOutcome(outcome) {
37771
+ switch (outcome) {
37772
+ case "posted":
37773
+ return "reported";
37774
+ case "throttled":
37775
+ return "notice throttled";
37776
+ case "failed":
37777
+ return "notice failed";
37778
+ case "skipped":
37779
+ return "no notice (unaddressable)";
37780
+ }
37781
+ }
37766
37782
  function describeUnparsedRefusal(text) {
37767
37783
  if (!text) return "refusal=absent";
37768
37784
  const hash = createHash("sha256").update(text).digest("hex").slice(0, 12);
@@ -38992,7 +39008,7 @@ async function maybeSendTelegramMaintenanceNotice(args) {
38992
39008
  }
38993
39009
  var TELEGRAM_USAGE_LIMIT_NOTICE_CACHE = /* @__PURE__ */ new Map();
38994
39010
  async function maybeSendTelegramUsageLimitNotice(args) {
38995
- if (args.senderId === void 0) return;
39011
+ if (args.senderId === void 0) return "skipped";
38996
39012
  const key2 = `${args.chatId}|${args.senderId}|usage_limit`;
38997
39013
  const decision = decideDeclineReply({
38998
39014
  cache: TELEGRAM_USAGE_LIMIT_NOTICE_CACHE,
@@ -39005,7 +39021,7 @@ async function maybeSendTelegramUsageLimitNotice(args) {
39005
39021
  `telegram-channel(${AGENT_CODE_NAME}): usage-limit notice suppressed by cooldown (chat=${redactId(String(args.chatId))}, remaining=${decision.remainingMs}ms)
39006
39022
  `
39007
39023
  );
39008
- return;
39024
+ return "throttled";
39009
39025
  }
39010
39026
  try {
39011
39027
  const resp = await telegramApiCall(
@@ -39023,13 +39039,16 @@ async function maybeSendTelegramUsageLimitNotice(args) {
39023
39039
  `telegram-channel(${AGENT_CODE_NAME}): usage-limit notice rejected (chat=${redactId(String(args.chatId))}): ${resp.description ?? "unknown"}
39024
39040
  `
39025
39041
  );
39042
+ return "failed";
39026
39043
  }
39044
+ return "posted";
39027
39045
  } catch (err) {
39028
39046
  TELEGRAM_USAGE_LIMIT_NOTICE_CACHE.delete(key2);
39029
39047
  process.stderr.write(
39030
39048
  `telegram-channel(${AGENT_CODE_NAME}): usage-limit notice failed: ${err.message}
39031
39049
  `
39032
39050
  );
39051
+ return "failed";
39033
39052
  }
39034
39053
  }
39035
39054
  function armTelegramUsageLimitWatch(args) {
@@ -39047,7 +39066,7 @@ function armTelegramUsageLimitWatch(args) {
39047
39066
  }
39048
39067
  const resetsAt = refusal?.resetsAt;
39049
39068
  if (!resetsAt) return;
39050
- await maybeSendTelegramUsageLimitNotice({
39069
+ const outcome = await maybeSendTelegramUsageLimitNotice({
39051
39070
  chatId: args.chatId,
39052
39071
  senderId: args.senderId,
39053
39072
  ...args.messageThreadId != null ? { messageThreadId: args.messageThreadId } : {},
@@ -39055,7 +39074,7 @@ function armTelegramUsageLimitWatch(args) {
39055
39074
  });
39056
39075
  clearPendingMessage(args.chatId, args.sinceMs);
39057
39076
  process.stderr.write(
39058
- `telegram-channel(${AGENT_CODE_NAME}): [usage-limit-reactive] reported refusal for chat=${redactId(args.chatId)} resets=${resetsAt.toISOString()}
39077
+ `telegram-channel(${AGENT_CODE_NAME}): [usage-limit-reactive] ${describeNoticeOutcome(outcome)} refusal for chat=${redactId(args.chatId)} resets=${resetsAt.toISOString()}
39059
39078
  `
39060
39079
  );
39061
39080
  } catch (err) {
@@ -36,7 +36,7 @@ import {
36
36
  writeDirectChatSessionState,
37
37
  writeEgressAllowlist,
38
38
  writePersistentClaudeWrapper
39
- } from "./chunk-6GMNDBOU.js";
39
+ } from "./chunk-WANZSIX6.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-3DFUJUF2.js.map
80
+ //# sourceMappingURL=persistent-session-FQKD2RA6.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  paneLogPath
3
- } from "./chunk-6GMNDBOU.js";
3
+ } from "./chunk-WANZSIX6.js";
4
4
  import "./chunk-XWVM4KPK.js";
5
5
 
6
6
  // src/lib/responsiveness-probe.ts
@@ -596,4 +596,4 @@ export {
596
596
  readAndResetSlackReplyBindingClassifications,
597
597
  readAndResetSlackReplyTargetClassifications
598
598
  };
599
- //# sourceMappingURL=responsiveness-probe-QBKBBHYD.js.map
599
+ //# sourceMappingURL=responsiveness-probe-JQUE3XQG.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integrity-labs/agt-cli",
3
- "version": "0.28.477",
3
+ "version": "0.28.479",
4
4
  "description": "Augmented Team CLI — agent provisioning and management",
5
5
  "type": "module",
6
6
  "engines": {