@integrity-labs/agt-cli 0.28.121 → 0.28.123

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.
@@ -22,7 +22,7 @@ import {
22
22
  resolveConnectivityProbe,
23
23
  worseConnectivityOutcome,
24
24
  wrapScheduledTaskPrompt
25
- } from "./chunk-HRE2TNEH.js";
25
+ } from "./chunk-3TBZBKJM.js";
26
26
 
27
27
  // ../../packages/core/dist/integrations/registry.js
28
28
  var INTEGRATION_REGISTRY = [
@@ -7653,7 +7653,7 @@ function requireHost() {
7653
7653
  }
7654
7654
 
7655
7655
  // src/lib/api-client.ts
7656
- var agtCliVersion = true ? "0.28.121" : "dev";
7656
+ var agtCliVersion = true ? "0.28.123" : "dev";
7657
7657
  var lastConfigHash = null;
7658
7658
  function setConfigHash(hash) {
7659
7659
  lastConfigHash = hash && hash.length > 0 ? hash : null;
@@ -8950,4 +8950,4 @@ export {
8950
8950
  managerInstallSystemUnitCommand,
8951
8951
  managerUninstallSystemUnitCommand
8952
8952
  };
8953
- //# sourceMappingURL=chunk-F5URYXY5.js.map
8953
+ //# sourceMappingURL=chunk-TAXAKVZI.js.map
@@ -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-V6GY5NAX.js");
103
+ const { resolveClaudeBinary } = await import("./persistent-session-J4ODLVDJ.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-MMBSV24T.js.map
376
+ //# sourceMappingURL=claude-pair-runtime-BJX6GLXE.js.map
@@ -28,7 +28,7 @@ import {
28
28
  requireHost,
29
29
  safeWriteJsonAtomic,
30
30
  setConfigHash
31
- } from "../chunk-F5URYXY5.js";
31
+ } from "../chunk-TAXAKVZI.js";
32
32
  import {
33
33
  getProjectDir as getProjectDir2,
34
34
  getReadyTasks,
@@ -72,7 +72,7 @@ import {
72
72
  takeZombieDetection,
73
73
  transcriptActivityAgeSeconds,
74
74
  writeEgressAllowlist
75
- } from "../chunk-XWO6CNEZ.js";
75
+ } from "../chunk-2LCGKN3V.js";
76
76
  import {
77
77
  FLAGS_SCHEMA_VERSION,
78
78
  FLAG_REGISTRY,
@@ -108,7 +108,7 @@ import {
108
108
  resolveDmTarget,
109
109
  sumTranscriptUsageInWindow,
110
110
  wrapScheduledTaskPrompt
111
- } from "../chunk-HRE2TNEH.js";
111
+ } from "../chunk-3TBZBKJM.js";
112
112
  import {
113
113
  parsePsRows,
114
114
  reapOrphanChannelMcps
@@ -7000,7 +7000,7 @@ var cachedMaintenanceWindow = null;
7000
7000
  var lastVersionCheckAt = 0;
7001
7001
  var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
7002
7002
  var lastResponsivenessProbeAt = 0;
7003
- var agtCliVersion = true ? "0.28.121" : "dev";
7003
+ var agtCliVersion = true ? "0.28.123" : "dev";
7004
7004
  function resolveBrewPath(execFileSync4) {
7005
7005
  try {
7006
7006
  const out = execFileSync4("which", ["brew"], { timeout: 5e3 }).toString().trim();
@@ -8111,7 +8111,7 @@ async function pollCycle() {
8111
8111
  }
8112
8112
  try {
8113
8113
  const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
8114
- const { collectDiagnostics } = await import("../persistent-session-V6GY5NAX.js");
8114
+ const { collectDiagnostics } = await import("../persistent-session-J4ODLVDJ.js");
8115
8115
  const diagCodeNames = [...agentState.persistentSessionAgents];
8116
8116
  const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames) : void 0;
8117
8117
  let tailscaleHostname;
@@ -8212,7 +8212,7 @@ async function pollCycle() {
8212
8212
  const {
8213
8213
  collectResponsivenessProbes,
8214
8214
  getResponsivenessIntervalMs
8215
- } = await import("../responsiveness-probe-NNOAARBI.js");
8215
+ } = await import("../responsiveness-probe-WEVTSOD3.js");
8216
8216
  const probeIntervalMs = getResponsivenessIntervalMs();
8217
8217
  if (now - lastResponsivenessProbeAt > probeIntervalMs) {
8218
8218
  const probeCodeNames = [...agentState.persistentSessionAgents];
@@ -8244,7 +8244,7 @@ async function pollCycle() {
8244
8244
  collectResponsivenessProbes,
8245
8245
  livePendingInboundOldestAgeSeconds,
8246
8246
  parkPendingInbound
8247
- } = await import("../responsiveness-probe-NNOAARBI.js");
8247
+ } = await import("../responsiveness-probe-WEVTSOD3.js");
8248
8248
  const { getProjectDir: wedgeProjectDir } = await import("../claude-scheduler-FATCLHDM.js");
8249
8249
  const wedgeNow = /* @__PURE__ */ new Date();
8250
8250
  const liveAgents = agentState.persistentSessionAgents;
@@ -11776,7 +11776,7 @@ async function processClaudePairSessions(agents) {
11776
11776
  killPairSession,
11777
11777
  pairTmuxSession,
11778
11778
  finalizeClaudePairOnboarding
11779
- } = await import("../claude-pair-runtime-MMBSV24T.js");
11779
+ } = await import("../claude-pair-runtime-BJX6GLXE.js");
11780
11780
  for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
11781
11781
  log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
11782
11782
  const killed = await killPairSession(pairTmuxSession(pairId));
package/dist/mcp/index.js CHANGED
@@ -21951,6 +21951,75 @@ server.tool(
21951
21951
  };
21952
21952
  }
21953
21953
  );
21954
+ server.tool(
21955
+ "request_channel_access",
21956
+ "Request approval to post in a specific Slack channel - i.e. to have it added to your organization's channel allowlist. This sends a HITL approval to your Manager; once they approve, the platform adds the channel to the allowlist (org-wide) and you can post there. FIRST resolve the channel id (C...) and confirm the bot can see the channel with slack.check_channel: if it returns not_in_channel, that is a SEPARATE problem - ask your operator to /invite your bot to the channel (membership is not the same as the allowlist). Then call this with the channel_id, a clear reason, and a stable idempotency_key. The request is pending until your Manager decides; poll it with check_approval using the returned request_id. Do not call this for a channel you can already post in.",
21957
+ {
21958
+ channel_id: external_exports.string().min(1).describe("The Slack channel id (C... or G..., NOT a name) - resolve it via slack.check_channel / slack.list_channels first."),
21959
+ channel_name: external_exports.string().max(120).optional().describe("Optional human-readable channel name, shown to your Manager on the approval card."),
21960
+ reason: external_exports.string().min(1).max(280).describe("Why you need to post in this channel - shown to your Manager. Be specific."),
21961
+ idempotency_key: external_exports.string().min(1).max(200).describe('A stable key for this request so retries do not file duplicates (e.g. "channel-access-C123-<task>").')
21962
+ },
21963
+ async (params) => {
21964
+ if (!AGT_AGENT_CODE_NAME) {
21965
+ return {
21966
+ content: [{ type: "text", text: "Error: AGT_AGENT_CODE_NAME not configured." }],
21967
+ isError: true
21968
+ };
21969
+ }
21970
+ let resp;
21971
+ try {
21972
+ resp = await apiPost("/host/request-channel-access", {
21973
+ agent_code_name: AGT_AGENT_CODE_NAME,
21974
+ channel_id: params.channel_id,
21975
+ ...params.channel_name ? { channel_name: params.channel_name } : {},
21976
+ reason: params.reason,
21977
+ idempotency_key: params.idempotency_key
21978
+ });
21979
+ } catch (err) {
21980
+ const msg = err instanceof Error ? err.message : String(err);
21981
+ if (/returned\s+[45]\d\d/.test(msg)) {
21982
+ let detail = msg;
21983
+ const jsonStart = msg.indexOf("{");
21984
+ if (jsonStart !== -1) {
21985
+ try {
21986
+ const parsedErr = JSON.parse(msg.slice(jsonStart));
21987
+ if (parsedErr.error) detail = parsedErr.error;
21988
+ } catch {
21989
+ }
21990
+ }
21991
+ return {
21992
+ content: [{ type: "text", text: `Channel-access request rejected: ${detail}` }],
21993
+ isError: true
21994
+ };
21995
+ }
21996
+ return {
21997
+ content: [
21998
+ {
21999
+ type: "text",
22000
+ text: `Could not reach the channel-access service (${msg}). Tell your operator.`
22001
+ }
22002
+ ],
22003
+ isError: true
22004
+ };
22005
+ }
22006
+ if (!resp.ok) {
22007
+ return {
22008
+ content: [{ type: "text", text: `Channel-access request rejected: ${resp.error ?? "unknown error"}` }],
22009
+ isError: true
22010
+ };
22011
+ }
22012
+ const idLine = resp.request_id ? ` Request id: ${resp.request_id} (poll it with check_approval).` : "";
22013
+ return {
22014
+ content: [
22015
+ {
22016
+ type: "text",
22017
+ text: `Channel-access request sent to your Manager for approval.${idLine} On approval the channel is added to the allowlist (org-wide) and you can post there. Do not re-send while it is pending.`
22018
+ }
22019
+ ]
22020
+ };
22021
+ }
22022
+ );
21954
22023
  server.tool(
21955
22024
  "drift_report",
21956
22025
  "Report configuration drift detected in local agent files (CHARTER.md, TOOLS.md, etc.). Compares local file hashes against API-side versions and reports any differences.",
@@ -22848,7 +22917,10 @@ var LOCAL_TOOL_NAMES = /* @__PURE__ */ new Set([
22848
22917
  "request_feature",
22849
22918
  // ENG-6686: self-service identity edit (always registered). Listed here to
22850
22919
  // keep the lockstep guard green; no API tool shares this name.
22851
- "update_identity"
22920
+ "update_identity",
22921
+ // ENG-6689: request Slack channel posting access (HITL approval to Manager).
22922
+ // Always registered; listed here to keep the lockstep guard green.
22923
+ "request_channel_access"
22852
22924
  ]);
22853
22925
  async function registerForwardedApiTools() {
22854
22926
  const apiTools = await discoverApiTools();
@@ -34,8 +34,8 @@ import {
34
34
  writeDirectChatSessionState,
35
35
  writeEgressAllowlist,
36
36
  writePersistentClaudeWrapper
37
- } from "./chunk-XWO6CNEZ.js";
38
- import "./chunk-HRE2TNEH.js";
37
+ } from "./chunk-2LCGKN3V.js";
38
+ import "./chunk-3TBZBKJM.js";
39
39
  import "./chunk-XWVM4KPK.js";
40
40
  export {
41
41
  EGRESS_BASELINE_DOMAINS,
@@ -74,4 +74,4 @@ export {
74
74
  writeEgressAllowlist,
75
75
  writePersistentClaudeWrapper
76
76
  };
77
- //# sourceMappingURL=persistent-session-V6GY5NAX.js.map
77
+ //# sourceMappingURL=persistent-session-J4ODLVDJ.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  paneLogPath
3
- } from "./chunk-XWO6CNEZ.js";
4
- import "./chunk-HRE2TNEH.js";
3
+ } from "./chunk-2LCGKN3V.js";
4
+ import "./chunk-3TBZBKJM.js";
5
5
  import "./chunk-XWVM4KPK.js";
6
6
 
7
7
  // src/lib/responsiveness-probe.ts
@@ -304,4 +304,4 @@ export {
304
304
  readAndResetChannelDeflections,
305
305
  readAndResetChannelLaneClassifications
306
306
  };
307
- //# sourceMappingURL=responsiveness-probe-NNOAARBI.js.map
307
+ //# sourceMappingURL=responsiveness-probe-WEVTSOD3.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integrity-labs/agt-cli",
3
- "version": "0.28.121",
3
+ "version": "0.28.123",
4
4
  "description": "Augmented Team CLI — agent provisioning and management",
5
5
  "type": "module",
6
6
  "engines": {