@integrity-labs/agt-cli 0.28.168 → 0.28.169

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.
package/dist/bin/agt.js CHANGED
@@ -37,7 +37,7 @@ import {
37
37
  success,
38
38
  table,
39
39
  warn
40
- } from "../chunk-DYW5QFTU.js";
40
+ } from "../chunk-3DFA7PRA.js";
41
41
  import {
42
42
  CHANNEL_REGISTRY,
43
43
  DEFAULT_FRAMEWORK,
@@ -65,7 +65,7 @@ import {
65
65
  renderTemplate,
66
66
  resolveChannels,
67
67
  serializeManifestForSlackCli
68
- } from "../chunk-SDUFTHIF.js";
68
+ } from "../chunk-UOL4Z6CG.js";
69
69
 
70
70
  // src/bin/agt.ts
71
71
  import { join as join22 } from "path";
@@ -4778,7 +4778,7 @@ import { execFileSync, execSync } from "child_process";
4778
4778
  import { existsSync as existsSync10, realpathSync as realpathSync2 } from "fs";
4779
4779
  import chalk18 from "chalk";
4780
4780
  import ora16 from "ora";
4781
- var cliVersion = true ? "0.28.168" : "dev";
4781
+ var cliVersion = true ? "0.28.169" : "dev";
4782
4782
  async function fetchLatestVersion() {
4783
4783
  const host2 = getHost();
4784
4784
  if (!host2) return null;
@@ -5792,7 +5792,7 @@ function handleError(err) {
5792
5792
  }
5793
5793
 
5794
5794
  // src/bin/agt.ts
5795
- var cliVersion2 = true ? "0.28.168" : "dev";
5795
+ var cliVersion2 = true ? "0.28.169" : "dev";
5796
5796
  var program = new Command();
5797
5797
  program.name("agt").description("Augmented CLI \u2014 agent provisioning and management").version(cliVersion2).option("--json", "Emit machine-readable JSON output (suppress spinners and colors)").option("--skip-update-check", "Skip the automatic update check on startup");
5798
5798
  program.hook("preAction", async (thisCommand, actionCommand) => {
@@ -23,7 +23,7 @@ import {
23
23
  resolveConnectivityProbe,
24
24
  worseConnectivityOutcome,
25
25
  wrapScheduledTaskPrompt
26
- } from "./chunk-SDUFTHIF.js";
26
+ } from "./chunk-UOL4Z6CG.js";
27
27
 
28
28
  // ../../packages/core/dist/integrations/registry.js
29
29
  var INTEGRATION_REGISTRY = [
@@ -7959,7 +7959,7 @@ function requireHost() {
7959
7959
  }
7960
7960
 
7961
7961
  // src/lib/api-client.ts
7962
- var agtCliVersion = true ? "0.28.168" : "dev";
7962
+ var agtCliVersion = true ? "0.28.169" : "dev";
7963
7963
  var lastConfigHash = null;
7964
7964
  function setConfigHash(hash) {
7965
7965
  lastConfigHash = hash && hash.length > 0 ? hash : null;
@@ -9264,4 +9264,4 @@ export {
9264
9264
  managerInstallSystemUnitCommand,
9265
9265
  managerUninstallSystemUnitCommand
9266
9266
  };
9267
- //# sourceMappingURL=chunk-DYW5QFTU.js.map
9267
+ //# sourceMappingURL=chunk-3DFA7PRA.js.map
@@ -6529,4 +6529,4 @@ export {
6529
6529
  parseEnvIntegrations,
6530
6530
  probeMcpEnvSubstitution
6531
6531
  };
6532
- //# sourceMappingURL=chunk-SDUFTHIF.js.map
6532
+ //# sourceMappingURL=chunk-UOL4Z6CG.js.map
@@ -3,7 +3,7 @@ import {
3
3
  formatMissingVar,
4
4
  isClaudeFastMode,
5
5
  probeMcpEnvSubstitution
6
- } from "./chunk-SDUFTHIF.js";
6
+ } from "./chunk-UOL4Z6CG.js";
7
7
  import {
8
8
  reapOrphanChannelMcps
9
9
  } from "./chunk-XWVM4KPK.js";
@@ -1588,4 +1588,4 @@ export {
1588
1588
  stopAllSessionsAndWait,
1589
1589
  getProjectDir
1590
1590
  };
1591
- //# sourceMappingURL=chunk-6TIVVGA7.js.map
1591
+ //# sourceMappingURL=chunk-VTRZ643P.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-XIW3I5CQ.js");
103
+ const { resolveClaudeBinary } = await import("./persistent-session-KRYOZ7JM.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-6ZLSPL6Z.js.map
376
+ //# sourceMappingURL=claude-pair-runtime-2FELNLHJ.js.map
@@ -28,7 +28,7 @@ import {
28
28
  requireHost,
29
29
  safeWriteJsonAtomic,
30
30
  setConfigHash
31
- } from "../chunk-DYW5QFTU.js";
31
+ } from "../chunk-3DFA7PRA.js";
32
32
  import {
33
33
  getProjectDir as getProjectDir2,
34
34
  getReadyTasks,
@@ -70,7 +70,7 @@ import {
70
70
  takeZombieDetection,
71
71
  transcriptActivityAgeSeconds,
72
72
  writeEgressAllowlist
73
- } from "../chunk-6TIVVGA7.js";
73
+ } from "../chunk-VTRZ643P.js";
74
74
  import {
75
75
  CONVERSATION_FAILURE_CATEGORIES,
76
76
  DEFAULT_FRAMEWORK,
@@ -111,7 +111,7 @@ import {
111
111
  resolveChannels,
112
112
  resolveDmTarget,
113
113
  sumTranscriptUsageInWindow
114
- } from "../chunk-SDUFTHIF.js";
114
+ } from "../chunk-UOL4Z6CG.js";
115
115
  import {
116
116
  parsePsRows,
117
117
  reapOrphanChannelMcps
@@ -6878,7 +6878,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
6878
6878
  var lastVersionCheckAt = 0;
6879
6879
  var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
6880
6880
  var lastResponsivenessProbeAt = 0;
6881
- var agtCliVersion = true ? "0.28.168" : "dev";
6881
+ var agtCliVersion = true ? "0.28.169" : "dev";
6882
6882
  function resolveBrewPath(execFileSync4) {
6883
6883
  try {
6884
6884
  const out = execFileSync4("which", ["brew"], { timeout: 5e3 }).toString().trim();
@@ -8011,7 +8011,7 @@ async function pollCycle() {
8011
8011
  }
8012
8012
  try {
8013
8013
  const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
8014
- const { collectDiagnostics } = await import("../persistent-session-XIW3I5CQ.js");
8014
+ const { collectDiagnostics } = await import("../persistent-session-KRYOZ7JM.js");
8015
8015
  const diagCodeNames = [...agentState.persistentSessionAgents];
8016
8016
  const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames) : void 0;
8017
8017
  let tailscaleHostname;
@@ -8159,7 +8159,7 @@ async function pollCycle() {
8159
8159
  const {
8160
8160
  collectResponsivenessProbes,
8161
8161
  getResponsivenessIntervalMs
8162
- } = await import("../responsiveness-probe-7JTG6QMB.js");
8162
+ } = await import("../responsiveness-probe-GVDKYPLT.js");
8163
8163
  const probeIntervalMs = getResponsivenessIntervalMs();
8164
8164
  if (now - lastResponsivenessProbeAt > probeIntervalMs) {
8165
8165
  const probeCodeNames = [...agentState.persistentSessionAgents];
@@ -8191,7 +8191,7 @@ async function pollCycle() {
8191
8191
  collectResponsivenessProbes,
8192
8192
  livePendingInboundOldestAgeSeconds,
8193
8193
  parkPendingInbound
8194
- } = await import("../responsiveness-probe-7JTG6QMB.js");
8194
+ } = await import("../responsiveness-probe-GVDKYPLT.js");
8195
8195
  const { getProjectDir: wedgeProjectDir } = await import("../claude-scheduler-FATCLHDM.js");
8196
8196
  const wedgeNow = /* @__PURE__ */ new Date();
8197
8197
  const liveAgents = agentState.persistentSessionAgents;
@@ -11692,7 +11692,7 @@ async function processClaudePairSessions(agents) {
11692
11692
  killPairSession,
11693
11693
  pairTmuxSession,
11694
11694
  finalizeClaudePairOnboarding
11695
- } = await import("../claude-pair-runtime-6ZLSPL6Z.js");
11695
+ } = await import("../claude-pair-runtime-2FELNLHJ.js");
11696
11696
  for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
11697
11697
  log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
11698
11698
  const killed = await killPairSession(pairTmuxSession(pairId));
package/dist/mcp/index.js CHANGED
@@ -21368,6 +21368,31 @@ function describeAssignHumanResult(resp, email2) {
21368
21368
  };
21369
21369
  }
21370
21370
 
21371
+ // src/directory.ts
21372
+ function formatDirectoryResult(data, query) {
21373
+ const agents = data.agents ?? [];
21374
+ const people = data.people ?? [];
21375
+ if (agents.length === 0 && people.length === 0) {
21376
+ return {
21377
+ text: query ? `No agents or people match "${query}" in your directory.` : "No agents or people are visible in your directory."
21378
+ };
21379
+ }
21380
+ const agentLines = agents.map((a) => {
21381
+ const scope = a.same_team ? "your team" : `team ${a.team_slug}`;
21382
+ const assignHint = a.same_team ? `kanban_assign target_agent="${a.code_name}"` : `kanban_assign target_agent="${a.code_name}" target_team="${a.team_slug}"`;
21383
+ return ` \u2022 ${a.code_name} (${a.display_name}) - ${scope} [${a.team_name}] \u2192 ${assignHint}`;
21384
+ });
21385
+ const peopleLines = people.map(
21386
+ (p) => ` \u2022 ${p.name ?? p.email} <${p.email}> \u2192 assign_kanban_to_human assignee_email="${p.email}"`
21387
+ );
21388
+ const sections = [];
21389
+ if (agents.length > 0) sections.push(`Agents (${agents.length}):
21390
+ ${agentLines.join("\n")}`);
21391
+ if (people.length > 0) sections.push(`People (${people.length}):
21392
+ ${peopleLines.join("\n")}`);
21393
+ return { text: sections.join("\n\n") };
21394
+ }
21395
+
21371
21396
  // src/index.ts
21372
21397
  import { spawn } from "child_process";
21373
21398
  var DeliveryTargetSchema = external_exports.union([
@@ -21856,9 +21881,34 @@ server.tool(
21856
21881
  };
21857
21882
  }
21858
21883
  );
21884
+ server.tool(
21885
+ "directory_lookup",
21886
+ "Look up the AGENTS and PEOPLE you are allowed to see, so you can find the identifiers the assignment + messaging tools need. Returns each agent's code_name + team slug (use these as `target_agent` / `target_team` for kanban_assign) and each person's name + email (use the email as `assignee_email` for assign_kanban_to_human). Your own team is always included; other teams in your organization appear only when your org has enabled cross-team work. Pass an optional `query` to filter by name, code_name, team, or email. If someone is not in the results, you are not authorised to act on them, so do not guess identifiers.",
21887
+ {
21888
+ query: external_exports.string().trim().min(1).optional().describe("Optional case-insensitive filter on agent code_name / name / team, or person name / email.")
21889
+ },
21890
+ async (params) => {
21891
+ try {
21892
+ const data = await apiPost("/host/directory/lookup", {
21893
+ agent_id: AGT_AGENT_ID,
21894
+ // `.trim().min(1)` already rejects a whitespace-only query; the truthy
21895
+ // check keeps the wire body free of an empty query either way.
21896
+ ...params.query ? { query: params.query } : {}
21897
+ });
21898
+ const { text } = formatDirectoryResult(data, params.query);
21899
+ return { content: [{ type: "text", text }] };
21900
+ } catch (err) {
21901
+ const msg = err instanceof Error ? err.message : String(err);
21902
+ return {
21903
+ content: [{ type: "text", text: `Could not look up the directory: ${msg}` }],
21904
+ isError: true
21905
+ };
21906
+ }
21907
+ }
21908
+ );
21859
21909
  server.tool(
21860
21910
  "kanban_assign",
21861
- "Delegate a task to ANOTHER agent by placing a new card on THEIR board. Use this to hand off or route work to a teammate agent (e.g. you triage a request and route the fix to a specialist agent). This is different from kanban_add, which adds a card to YOUR OWN board. By default the target must be an agent on your OWN team. To assign across teams within your organization, also pass `target_team` (the other team's slug) \u2014 this only works if your org has enabled cross-team assignment and a peer grant links the two teams; otherwise it reads as not-found. When the target finishes, you get a completion notice back on your board.",
21911
+ "Delegate a task to ANOTHER agent by placing a new card on THEIR board. Use this to hand off or route work to a teammate agent (e.g. you triage a request and route the fix to a specialist agent). This is different from kanban_add, which adds a card to YOUR OWN board. By default the target must be an agent on your OWN team. To assign across teams within your organization, also pass `target_team` (the other team's slug) \u2014 this only works if your org has enabled cross-team assignment and a peer grant links the two teams; otherwise it reads as not-found. When the target finishes, you get a completion notice back on your board. Don't know the agent's code_name or team slug? Call directory_lookup first to find them.",
21862
21912
  {
21863
21913
  target_agent: external_exports.string().describe(
21864
21914
  "The teammate to assign to: their agent code_name (kebab-case) or agent UUID. On your own team unless target_team is also set."
@@ -21913,7 +21963,7 @@ server.tool(
21913
21963
  );
21914
21964
  server.tool(
21915
21965
  "assign_kanban_to_human",
21916
- `Assign a task to a HUMAN teammate (a person on your team), not an agent. Use this to hand work to a person - e.g. "ask Brad to approve the contract" or routing something only a human can do. Identify them by their email. The task appears on their personal "My Tasks" page, and if your org has it enabled they also get a notification. This is different from kanban_assign (which targets another AGENT) and kanban_add (your own board). If your team hasn't enabled this, you'll get a clear message - tell your operator rather than retrying.`,
21966
+ `Assign a task to a HUMAN teammate (a person on your team), not an agent. Use this to hand work to a person - e.g. "ask Brad to approve the contract" or routing something only a human can do. Identify them by their email. The task appears on their personal "My Tasks" page, and if your org has it enabled they also get a notification. This is different from kanban_assign (which targets another AGENT) and kanban_add (your own board). If your team hasn't enabled this, you'll get a clear message - tell your operator rather than retrying. Don't know the person's email? Call directory_lookup first to find people you can assign to.`,
21917
21967
  {
21918
21968
  assignee_email: external_exports.string().describe("The teammate's email. Must be a person in your team's organization."),
21919
21969
  title: external_exports.string().describe("Task title (max 200 chars)"),
@@ -23059,6 +23109,8 @@ var LOCAL_TOOL_NAMES = /* @__PURE__ */ new Set([
23059
23109
  "kanban_done",
23060
23110
  "kanban_assign",
23061
23111
  "assign_kanban_to_human",
23112
+ // ENG-6953: agent + people directory lookup (always registered locally).
23113
+ "directory_lookup",
23062
23114
  "status_standup",
23063
23115
  "status_update",
23064
23116
  "drift_report",
@@ -34,8 +34,8 @@ import {
34
34
  writeDirectChatSessionState,
35
35
  writeEgressAllowlist,
36
36
  writePersistentClaudeWrapper
37
- } from "./chunk-6TIVVGA7.js";
38
- import "./chunk-SDUFTHIF.js";
37
+ } from "./chunk-VTRZ643P.js";
38
+ import "./chunk-UOL4Z6CG.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-XIW3I5CQ.js.map
77
+ //# sourceMappingURL=persistent-session-KRYOZ7JM.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  paneLogPath
3
- } from "./chunk-6TIVVGA7.js";
4
- import "./chunk-SDUFTHIF.js";
3
+ } from "./chunk-VTRZ643P.js";
4
+ import "./chunk-UOL4Z6CG.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-7JTG6QMB.js.map
307
+ //# sourceMappingURL=responsiveness-probe-GVDKYPLT.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integrity-labs/agt-cli",
3
- "version": "0.28.168",
3
+ "version": "0.28.169",
4
4
  "description": "Augmented Team CLI — agent provisioning and management",
5
5
  "type": "module",
6
6
  "engines": {