@integrity-labs/agt-cli 0.28.292 → 0.28.293

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.
@@ -100,7 +100,7 @@ async function spawnPairSession(session) {
100
100
  return { ok: true };
101
101
  } catch {
102
102
  }
103
- const { resolveClaudeBinary } = await import("./persistent-session-WVLFEQPW.js");
103
+ const { resolveClaudeBinary } = await import("./persistent-session-7Z33SV2X.js");
104
104
  const claudeBin = resolveClaudeBinary();
105
105
  const pairEnv = {
106
106
  ...process.env,
@@ -373,4 +373,4 @@ export {
373
373
  startClaudePair,
374
374
  submitClaudePairCode
375
375
  };
376
- //# sourceMappingURL=claude-pair-runtime-DVAUH47F.js.map
376
+ //# sourceMappingURL=claude-pair-runtime-EWJQ5QXS.js.map
@@ -39,7 +39,7 @@ import {
39
39
  requireHost,
40
40
  safeWriteJsonAtomic,
41
41
  setConfigHash
42
- } from "../chunk-PTJHDSJU.js";
42
+ } from "../chunk-D6SMNBPT.js";
43
43
  import {
44
44
  getProjectDir as getProjectDir2,
45
45
  getReadyTasks,
@@ -126,7 +126,7 @@ import {
126
126
  takeZombieDetection,
127
127
  transcriptActivityAgeSeconds,
128
128
  writeEgressAllowlist
129
- } from "../chunk-BNQPLUUB.js";
129
+ } from "../chunk-IGADZDYT.js";
130
130
  import {
131
131
  reapOrphanChannelMcps
132
132
  } from "../chunk-XWVM4KPK.js";
@@ -6922,7 +6922,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
6922
6922
  var lastVersionCheckAt = 0;
6923
6923
  var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
6924
6924
  var lastResponsivenessProbeAt = 0;
6925
- var agtCliVersion = true ? "0.28.292" : "dev";
6925
+ var agtCliVersion = true ? "0.28.293" : "dev";
6926
6926
  function resolveBrewPath(execFileSync2) {
6927
6927
  try {
6928
6928
  const out = execFileSync2("which", ["brew"], { timeout: 5e3 }).toString().trim();
@@ -7775,7 +7775,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
7775
7775
  if (codeNames.length === 0) return;
7776
7776
  void (async () => {
7777
7777
  try {
7778
- const { collectDiagnostics } = await import("../persistent-session-WVLFEQPW.js");
7778
+ const { collectDiagnostics } = await import("../persistent-session-7Z33SV2X.js");
7779
7779
  await api.post("/host/heartbeat", {
7780
7780
  host_id: hostId,
7781
7781
  agent_diagnostics: collectDiagnostics(codeNames)
@@ -7873,7 +7873,7 @@ async function pollCycle() {
7873
7873
  }
7874
7874
  try {
7875
7875
  const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
7876
- const { collectDiagnostics } = await import("../persistent-session-WVLFEQPW.js");
7876
+ const { collectDiagnostics } = await import("../persistent-session-7Z33SV2X.js");
7877
7877
  const diagCodeNames = [...agentState.persistentSessionAgents];
7878
7878
  const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames) : void 0;
7879
7879
  let tailscaleHostname;
@@ -8021,7 +8021,7 @@ async function pollCycle() {
8021
8021
  const {
8022
8022
  collectResponsivenessProbes,
8023
8023
  getResponsivenessIntervalMs
8024
- } = await import("../responsiveness-probe-VCOYMMIT.js");
8024
+ } = await import("../responsiveness-probe-RPX63Y5S.js");
8025
8025
  const probeIntervalMs = getResponsivenessIntervalMs();
8026
8026
  if (now - lastResponsivenessProbeAt > probeIntervalMs) {
8027
8027
  const probeCodeNames = [...agentState.persistentSessionAgents];
@@ -8053,7 +8053,7 @@ async function pollCycle() {
8053
8053
  collectResponsivenessProbes,
8054
8054
  livePendingInboundOldestAgeSeconds,
8055
8055
  parkPendingInbound
8056
- } = await import("../responsiveness-probe-VCOYMMIT.js");
8056
+ } = await import("../responsiveness-probe-RPX63Y5S.js");
8057
8057
  const { getProjectDir: wedgeProjectDir } = await import("../claude-scheduler-FATCLHDM.js");
8058
8058
  const wedgeNow = /* @__PURE__ */ new Date();
8059
8059
  const liveAgents = agentState.persistentSessionAgents;
@@ -10981,7 +10981,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
10981
10981
  void api.post("/host/restart-ack", { host_id: hostId, agent_id: agentId, restart_requested_at: requestedAt }).catch((err) => log(`[restart-lane] ack failed for '${codeName}': ${err.message}`));
10982
10982
  void (async () => {
10983
10983
  try {
10984
- const { collectDiagnostics } = await import("../persistent-session-WVLFEQPW.js");
10984
+ const { collectDiagnostics } = await import("../persistent-session-7Z33SV2X.js");
10985
10985
  await api.post("/host/heartbeat", {
10986
10986
  host_id: hostId,
10987
10987
  agent_diagnostics: collectDiagnostics([codeName])
@@ -11031,7 +11031,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
11031
11031
  }
11032
11032
  try {
11033
11033
  const hostId = await getHostId();
11034
- const { collectDiagnostics } = await import("../persistent-session-WVLFEQPW.js");
11034
+ const { collectDiagnostics } = await import("../persistent-session-7Z33SV2X.js");
11035
11035
  await api.post("/host/heartbeat", {
11036
11036
  host_id: hostId,
11037
11037
  agent_diagnostics: collectDiagnostics([codeName])
@@ -11435,7 +11435,7 @@ async function processClaudePairSessions(agents) {
11435
11435
  killPairSession,
11436
11436
  pairTmuxSession,
11437
11437
  finalizeClaudePairOnboarding
11438
- } = await import("../claude-pair-runtime-DVAUH47F.js");
11438
+ } = await import("../claude-pair-runtime-EWJQ5QXS.js");
11439
11439
  for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
11440
11440
  log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
11441
11441
  const killed = await killPairSession(pairTmuxSession(pairId));
@@ -13907,7 +13907,8 @@ function createInboundContextClient(args) {
13907
13907
  agent_id: agentId,
13908
13908
  source_integration: args2.sourceIntegration,
13909
13909
  source_external_id: args2.sourceExternalId,
13910
- ...args2.sourceUrl ? { source_url: args2.sourceUrl } : {}
13910
+ ...args2.sourceUrl ? { source_url: args2.sourceUrl } : {},
13911
+ ...args2.senderId ? { sender_id: args2.senderId } : {}
13911
13912
  };
13912
13913
  try {
13913
13914
  let resp = await postOnce(body);
@@ -15351,7 +15352,9 @@ async function pollForMessages(sinceMs) {
15351
15352
  }
15352
15353
  inboundContextClient?.recordInbound({
15353
15354
  sourceIntegration: "direct-chat",
15354
- sourceExternalId: msg.session_id
15355
+ sourceExternalId: msg.session_id,
15356
+ // ENG-7643 (P4a): the D16 verified sender uuid (requester identity).
15357
+ ...msg.sender_id ? { senderId: msg.sender_id } : {}
15355
15358
  });
15356
15359
  process.stderr.write(
15357
15360
  `direct-chat-channel: Injected message ${msg.id} (session=${msg.session_id})
@@ -39644,6 +39644,20 @@ var FLAG_REGISTRY = [
39644
39644
  // sensitive.
39645
39645
  public: true
39646
39646
  },
39647
+ {
39648
+ key: "integration-cap-enforcement",
39649
+ description: "Enforce the per-agent integration cap (ENG-7180 / ENG-7639). When ON for an org, adding an integration to an agent already at its plan cap (plans.max_integrations_per_agent, default 10) is refused with a 409 across all three attach paths (POST /integrations, the OAuth callback, and the GitHub App manifest-init), and GET /integrations/agent-cap reports at_limit so the webapp Add control blocks. When OFF (default) the cap is not enforced - an agent can add integrations without limit and agent-cap reports at_limit=false. Evaluated per-org API-side via getEvaluatedFlags; the authoritative BEFORE INSERT DB trigger was removed in ENG-7639, so the flag-gated app-level pre-flights are the sole enforcement point. Boolean gate; ships OFF (enforcement disabled) - flip ON per org from the admin Feature Flags page to re-arm the cap.",
39650
+ flagType: "boolean",
39651
+ // Declared safe value is `false` = NOT enforced. This is both the ENG-7639
39652
+ // intent (disable the cap for now) and the fail-safe direction for the route
39653
+ // read: a flag-DB error degrades to "don't enforce", so a flags outage never
39654
+ // blocks a customer's integration add. Flip on per org to re-arm enforcement.
39655
+ defaultValue: false,
39656
+ // Enforcement gate: leaving it OFF relaxes a plan-capacity control and turning
39657
+ // it ON blocks customer adds - either way it is a deliberate, audited decision,
39658
+ // so mutations require explicit confirmation (ADR-0022 §4).
39659
+ sensitive: true
39660
+ },
39647
39661
  {
39648
39662
  key: "augmented-live-stream-producer",
39649
39663
  description: "Augmented Live live-preview streaming producer (ENG-7210). The receiver (codec, artifact-draft channel, stream route, console Live Preview tab) shipped under ENG-6234 but never engages because nothing writes the working file the manager scanner watches. When ON for an org, a host-side PostToolUse hook mirrors agt-live.publish/editing content to ~/.augmented/{codeName}/artifacts/<slug>/index.html, so the scanner mints a draft and streams a keyframe to the console Live Preview tab. Additive, best-effort. Boolean gate; ships dark. Materialized to the host flags-cache; the bash hook reads it (operator/canary override AGT_LIVE_STREAM_PRODUCER_ENABLED).",
@@ -17766,7 +17766,8 @@ function createInboundContextClient(args) {
17766
17766
  agent_id: agentId,
17767
17767
  source_integration: args2.sourceIntegration,
17768
17768
  source_external_id: args2.sourceExternalId,
17769
- ...args2.sourceUrl ? { source_url: args2.sourceUrl } : {}
17769
+ ...args2.sourceUrl ? { source_url: args2.sourceUrl } : {},
17770
+ ...args2.senderId ? { sender_id: args2.senderId } : {}
17770
17771
  };
17771
17772
  try {
17772
17773
  let resp = await postOnce(body);
@@ -22402,7 +22403,9 @@ ${forwarded.text}` : forwarded.text;
22402
22403
  if (!isFromBot && threadTs) {
22403
22404
  inboundContextClient?.recordInbound({
22404
22405
  sourceIntegration: "slack",
22405
- sourceExternalId: `${channel}:${threadTs}`
22406
+ sourceExternalId: `${channel}:${threadTs}`,
22407
+ // ENG-7643 (P4a): the platform-verified Slack sender (requester id).
22408
+ ...evt.user ? { senderId: evt.user } : {}
22406
22409
  });
22407
22410
  }
22408
22411
  }
@@ -14672,7 +14672,8 @@ function createInboundContextClient(args) {
14672
14672
  agent_id: agentId,
14673
14673
  source_integration: args2.sourceIntegration,
14674
14674
  source_external_id: args2.sourceExternalId,
14675
- ...args2.sourceUrl ? { source_url: args2.sourceUrl } : {}
14675
+ ...args2.sourceUrl ? { source_url: args2.sourceUrl } : {},
14676
+ ...args2.senderId ? { sender_id: args2.senderId } : {}
14676
14677
  };
14677
14678
  try {
14678
14679
  let resp = await postOnce(body);
@@ -15485,7 +15486,9 @@ async function processPendingFile(filename) {
15485
15486
  inboundContextClient?.recordInbound({
15486
15487
  sourceIntegration: "msteams",
15487
15488
  sourceExternalId: `${activity.conversation.id}#${rootActivityId}`,
15488
- sourceUrl: activity.serviceUrl
15489
+ sourceUrl: activity.serviceUrl,
15490
+ // ENG-7643 (P4a): the Teams AAD object id of the sender (requester id).
15491
+ ...activity.from?.aadObjectId ? { senderId: activity.from.aadObjectId } : {}
15489
15492
  });
15490
15493
  }
15491
15494
  }
@@ -16471,7 +16471,8 @@ function createInboundContextClient(args) {
16471
16471
  agent_id: agentId,
16472
16472
  source_integration: args2.sourceIntegration,
16473
16473
  source_external_id: args2.sourceExternalId,
16474
- ...args2.sourceUrl ? { source_url: args2.sourceUrl } : {}
16474
+ ...args2.sourceUrl ? { source_url: args2.sourceUrl } : {},
16475
+ ...args2.senderId ? { sender_id: args2.senderId } : {}
16475
16476
  };
16476
16477
  try {
16477
16478
  let resp = await postOnce(body);
@@ -20960,7 +20961,10 @@ async function pollLoop() {
20960
20961
  if (!isFromBot && !peerAgentMeta) {
20961
20962
  inboundContextClient?.recordInbound({
20962
20963
  sourceIntegration: "telegram",
20963
- sourceExternalId: String(chatId)
20964
+ sourceExternalId: String(chatId),
20965
+ // ENG-7643 (P4a): the verified Telegram from-id (requester id);
20966
+ // 'unknown' means from.id was absent, so don't record it.
20967
+ ...userId && userId !== "unknown" ? { senderId: String(userId) } : {}
20964
20968
  });
20965
20969
  }
20966
20970
  }
@@ -36,7 +36,7 @@ import {
36
36
  writeDirectChatSessionState,
37
37
  writeEgressAllowlist,
38
38
  writePersistentClaudeWrapper
39
- } from "./chunk-BNQPLUUB.js";
39
+ } from "./chunk-IGADZDYT.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-WVLFEQPW.js.map
80
+ //# sourceMappingURL=persistent-session-7Z33SV2X.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  paneLogPath
3
- } from "./chunk-BNQPLUUB.js";
3
+ } from "./chunk-IGADZDYT.js";
4
4
  import "./chunk-XWVM4KPK.js";
5
5
 
6
6
  // src/lib/responsiveness-probe.ts
@@ -418,4 +418,4 @@ export {
418
418
  readAndResetSlackReplyBindingClassifications,
419
419
  readAndResetSlackReplyTargetClassifications
420
420
  };
421
- //# sourceMappingURL=responsiveness-probe-VCOYMMIT.js.map
421
+ //# sourceMappingURL=responsiveness-probe-RPX63Y5S.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integrity-labs/agt-cli",
3
- "version": "0.28.292",
3
+ "version": "0.28.293",
4
4
  "description": "Augmented Team CLI — agent provisioning and management",
5
5
  "type": "module",
6
6
  "engines": {