@integrity-labs/agt-cli 0.28.286 → 0.28.288

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-VUHRDURH.js");
103
+ const { resolveClaudeBinary } = await import("./persistent-session-C6IIZKQH.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-5TLP7YBB.js.map
376
+ //# sourceMappingURL=claude-pair-runtime-MGU5UP3T.js.map
@@ -38,7 +38,7 @@ import {
38
38
  requireHost,
39
39
  safeWriteJsonAtomic,
40
40
  setConfigHash
41
- } from "../chunk-4WRAUNC4.js";
41
+ } from "../chunk-6J467SLS.js";
42
42
  import {
43
43
  getProjectDir as getProjectDir2,
44
44
  getReadyTasks,
@@ -125,7 +125,7 @@ import {
125
125
  takeZombieDetection,
126
126
  transcriptActivityAgeSeconds,
127
127
  writeEgressAllowlist
128
- } from "../chunk-HI7TA73T.js";
128
+ } from "../chunk-GUCYHTCJ.js";
129
129
  import {
130
130
  reapOrphanChannelMcps
131
131
  } from "../chunk-XWVM4KPK.js";
@@ -6895,7 +6895,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
6895
6895
  var lastVersionCheckAt = 0;
6896
6896
  var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
6897
6897
  var lastResponsivenessProbeAt = 0;
6898
- var agtCliVersion = true ? "0.28.286" : "dev";
6898
+ var agtCliVersion = true ? "0.28.288" : "dev";
6899
6899
  function resolveBrewPath(execFileSync2) {
6900
6900
  try {
6901
6901
  const out = execFileSync2("which", ["brew"], { timeout: 5e3 }).toString().trim();
@@ -7748,7 +7748,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
7748
7748
  if (codeNames.length === 0) return;
7749
7749
  void (async () => {
7750
7750
  try {
7751
- const { collectDiagnostics } = await import("../persistent-session-VUHRDURH.js");
7751
+ const { collectDiagnostics } = await import("../persistent-session-C6IIZKQH.js");
7752
7752
  await api.post("/host/heartbeat", {
7753
7753
  host_id: hostId,
7754
7754
  agent_diagnostics: collectDiagnostics(codeNames)
@@ -7846,7 +7846,7 @@ async function pollCycle() {
7846
7846
  }
7847
7847
  try {
7848
7848
  const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
7849
- const { collectDiagnostics } = await import("../persistent-session-VUHRDURH.js");
7849
+ const { collectDiagnostics } = await import("../persistent-session-C6IIZKQH.js");
7850
7850
  const diagCodeNames = [...agentState.persistentSessionAgents];
7851
7851
  const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames) : void 0;
7852
7852
  let tailscaleHostname;
@@ -7994,7 +7994,7 @@ async function pollCycle() {
7994
7994
  const {
7995
7995
  collectResponsivenessProbes,
7996
7996
  getResponsivenessIntervalMs
7997
- } = await import("../responsiveness-probe-RVFNE2EV.js");
7997
+ } = await import("../responsiveness-probe-RAHMPI4W.js");
7998
7998
  const probeIntervalMs = getResponsivenessIntervalMs();
7999
7999
  if (now - lastResponsivenessProbeAt > probeIntervalMs) {
8000
8000
  const probeCodeNames = [...agentState.persistentSessionAgents];
@@ -8026,7 +8026,7 @@ async function pollCycle() {
8026
8026
  collectResponsivenessProbes,
8027
8027
  livePendingInboundOldestAgeSeconds,
8028
8028
  parkPendingInbound
8029
- } = await import("../responsiveness-probe-RVFNE2EV.js");
8029
+ } = await import("../responsiveness-probe-RAHMPI4W.js");
8030
8030
  const { getProjectDir: wedgeProjectDir } = await import("../claude-scheduler-FATCLHDM.js");
8031
8031
  const wedgeNow = /* @__PURE__ */ new Date();
8032
8032
  const liveAgents = agentState.persistentSessionAgents;
@@ -10946,7 +10946,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
10946
10946
  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}`));
10947
10947
  void (async () => {
10948
10948
  try {
10949
- const { collectDiagnostics } = await import("../persistent-session-VUHRDURH.js");
10949
+ const { collectDiagnostics } = await import("../persistent-session-C6IIZKQH.js");
10950
10950
  await api.post("/host/heartbeat", {
10951
10951
  host_id: hostId,
10952
10952
  agent_diagnostics: collectDiagnostics([codeName])
@@ -10996,7 +10996,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
10996
10996
  }
10997
10997
  try {
10998
10998
  const hostId = await getHostId();
10999
- const { collectDiagnostics } = await import("../persistent-session-VUHRDURH.js");
10999
+ const { collectDiagnostics } = await import("../persistent-session-C6IIZKQH.js");
11000
11000
  await api.post("/host/heartbeat", {
11001
11001
  host_id: hostId,
11002
11002
  agent_diagnostics: collectDiagnostics([codeName])
@@ -11400,7 +11400,7 @@ async function processClaudePairSessions(agents) {
11400
11400
  killPairSession,
11401
11401
  pairTmuxSession,
11402
11402
  finalizeClaudePairOnboarding
11403
- } = await import("../claude-pair-runtime-5TLP7YBB.js");
11403
+ } = await import("../claude-pair-runtime-MGU5UP3T.js");
11404
11404
  for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
11405
11405
  log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
11406
11406
  const killed = await killPairSession(pairTmuxSession(pairId));
package/dist/mcp/index.js CHANGED
@@ -21780,8 +21780,8 @@ server.tool(
21780
21780
  }
21781
21781
  );
21782
21782
  var kanbanMoveStatuses = AGT_KANBAN_WAITING_ENABLED ? ["backlog", "todo", "in_progress", "waiting", "done", "failed"] : ["backlog", "todo", "in_progress", "done", "failed"];
21783
- var kanbanMoveDescription = AGT_KANBAN_WAITING_ENABLED ? 'Move a kanban item to a different status column. Use status="failed" for a task attempted but not completable. Use status="waiting" when you have COMPLETED your part and cannot proceed until one specific external action happens (a person approves/answers/decides, or a dependency like a PR merge or deploy completes) - set waiting_on to that single concrete action, phrased as an instruction ("Merge PR #3120", "Approve the budget"). Do NOT use waiting to offload hard work, and do NOT confuse it with a failure. (matches the hosted kanban_move enum).' : 'Move a kanban item to a different status column. Use status="failed" to mark a task that was attempted but could not complete (matches the hosted kanban_move enum).';
21784
- var kanbanMoveStatusDescribe = AGT_KANBAN_WAITING_ENABLED ? 'Target status. "waiting" parks the card (blocked on a human decision or an external dependency); pair it with waiting_on. "failed" closes the row as a failed attempt; there is no "cancelled" status, close no-longer-needed work via kanban_done with an explanatory result.' : 'Target status. "failed" closes the row as a failed attempt; there is no "cancelled" status, close no-longer-needed work via kanban_done with an explanatory result.';
21783
+ var kanbanMoveDescription = AGT_KANBAN_WAITING_ENABLED ? 'Move a kanban item to a different status column. Use status="failed" for a task attempted but not completable. Use status="waiting" when you have COMPLETED your part and cannot proceed until one specific external action happens (a person approves/answers/decides, or a dependency like a PR merge or deploy completes). status="waiting" REQUIRES waiting_kind - classify the wait as "pr-review", "pr-merged", "human", "external", or "other" (the catch-all when none fit). For a PR wait ("pr-review"/"pr-merged") set waiting_repo ("owner/repo") and waiting_pr (the number) INSTEAD of waiting_on - the card then links straight to the PR and can auto-resume when it lands. For "human"/"external"/"other" set waiting_on to the single concrete action, phrased as an instruction ("Approve the budget", "Answer my question"). Do NOT use waiting to offload hard work, and do NOT confuse it with a failure. (matches the hosted kanban_move enum).' : 'Move a kanban item to a different status column. Use status="failed" to mark a task that was attempted but could not complete (matches the hosted kanban_move enum).';
21784
+ var kanbanMoveStatusDescribe = AGT_KANBAN_WAITING_ENABLED ? 'Target status. "waiting" parks the card until one external action happens; it REQUIRES waiting_kind - use "pr-review"/"pr-merged" with waiting_repo + waiting_pr, or "human"/"external"/"other" with a concrete waiting_on. "failed" closes the row as a failed attempt; there is no "cancelled" status, close no-longer-needed work via kanban_done with an explanatory result.' : 'Target status. "failed" closes the row as a failed attempt; there is no "cancelled" status, close no-longer-needed work via kanban_done with an explanatory result.';
21785
21785
  server.tool(
21786
21786
  "kanban_move",
21787
21787
  kanbanMoveDescription,
@@ -21792,8 +21792,15 @@ server.tool(
21792
21792
  notes: external_exports.string().optional().describe("Progress notes"),
21793
21793
  ...AGT_KANBAN_WAITING_ENABLED ? {
21794
21794
  waiting_on: external_exports.string().optional().describe(
21795
- 'Only with status="waiting": the single concrete action you are parked on, phrased as an instruction ("Merge PR #3120", "Approve the budget"). Shown as the card headline.'
21796
- )
21795
+ 'Only with status="waiting", for a NON-PR wait: the single concrete action you are parked on, phrased as an instruction ("Approve the budget", "Answer my question"). Shown as the card headline. For a PR wait use waiting_kind/waiting_repo/waiting_pr instead.'
21796
+ ),
21797
+ waiting_kind: external_exports.enum(["pr-review", "pr-merged", "human", "external", "other"]).optional().describe(
21798
+ 'REQUIRED with status="waiting": classify what you are waiting on. "pr-review" = a pull request awaiting review, "pr-merged" = a reviewed PR awaiting merge (both require waiting_repo + waiting_pr and let the card link to the PR and auto-resume). "human" = a specific person must decide/answer, "external" = a non-PR system/process must complete (a deploy, CI, a third party); for those two, describe it in waiting_on. "other" = none of the above / unsure - the generic catch-all, also described in waiting_on. Always pick the most specific kind that fits; fall back to "other" rather than leaving it unset.'
21799
+ ),
21800
+ waiting_repo: external_exports.string().optional().describe(
21801
+ 'Only with a pr-* waiting_kind: the "owner/repo" the pull request lives in (e.g. "Integrity-Labs/augmented").'
21802
+ ),
21803
+ waiting_pr: external_exports.number().int().positive().optional().describe("Only with a pr-* waiting_kind: the pull request number (e.g. 3120).")
21797
21804
  } : {}
21798
21805
  },
21799
21806
  async (params) => {
@@ -21803,6 +21810,31 @@ server.tool(
21803
21810
  isError: true
21804
21811
  };
21805
21812
  }
21813
+ const p = params;
21814
+ if (params.status === "waiting" && !p.waiting_kind) {
21815
+ return {
21816
+ content: [
21817
+ {
21818
+ type: "text",
21819
+ text: 'Error: status="waiting" requires waiting_kind - one of "pr-review", "pr-merged", "human", "external", or "other". Pick the most specific that fits; use "other" if none do.'
21820
+ }
21821
+ ],
21822
+ isError: true
21823
+ };
21824
+ }
21825
+ const isPrKind = p.waiting_kind === "pr-review" || p.waiting_kind === "pr-merged";
21826
+ if (isPrKind && (!p.waiting_repo || p.waiting_pr === void 0)) {
21827
+ return {
21828
+ content: [
21829
+ {
21830
+ type: "text",
21831
+ text: `Error: waiting_kind="${p.waiting_kind}" requires waiting_repo ("owner/repo") and waiting_pr (the PR number).`
21832
+ }
21833
+ ],
21834
+ isError: true
21835
+ };
21836
+ }
21837
+ const waitingContext = isPrKind ? { repo: p.waiting_repo, pr_number: p.waiting_pr } : void 0;
21806
21838
  const data = await apiPost("/host/kanban", {
21807
21839
  agent_id: AGT_AGENT_ID,
21808
21840
  update: [
@@ -21811,7 +21843,9 @@ server.tool(
21811
21843
  title: params.title,
21812
21844
  status: params.status,
21813
21845
  notes: params.notes,
21814
- waiting_on: params.waiting_on
21846
+ waiting_on: isPrKind ? void 0 : p.waiting_on,
21847
+ waiting_kind: p.waiting_kind,
21848
+ waiting_context: waitingContext
21815
21849
  }
21816
21850
  ]
21817
21851
  });
@@ -39336,6 +39336,16 @@ var KANBAN_STATUSES = [
39336
39336
  ];
39337
39337
  var KANBAN_STATUS_SET = new Set(KANBAN_STATUSES);
39338
39338
 
39339
+ // ../core/dist/kanban/waiting.js
39340
+ var WAITING_KINDS = [
39341
+ "pr-review",
39342
+ "pr-merged",
39343
+ "human",
39344
+ "external",
39345
+ "other"
39346
+ ];
39347
+ var WAITING_KIND_SET = new Set(WAITING_KINDS);
39348
+
39339
39349
  // ../core/dist/conversations/metrics.js
39340
39350
  var PERIOD_CONFIG = {
39341
39351
  "24h": { windowMs: 24 * 60 * 60 * 1e3, bucket: "hour" },
@@ -39627,7 +39637,12 @@ var FLAG_REGISTRY = [
39627
39637
  key: "integration-multi-connection",
39628
39638
  description: "Allow adding a SECOND+ connection of one managed integration on the same agent (ENG-7543 / ADR-0045 Phase 3), discriminated by connection_key (e.g. two Gmail mailboxes). When OFF, only the default connection can be created (today's behaviour: a duplicate 409s). Gates 2nd-connection CREATION only; runtime N-server surfacing is a later phase. Evaluated per-org. Additive capability, not an enforcement control. Boolean gate; ships dark.",
39629
39639
  flagType: "boolean",
39630
- defaultValue: false
39640
+ defaultValue: false,
39641
+ // Exposed to the browser so the add-integration dialog can show the
39642
+ // "Add another connection" affordance only when the org is enabled (rather
39643
+ // than rendering a control whose create POST would 403). Additive, not
39644
+ // sensitive.
39645
+ public: true
39631
39646
  },
39632
39647
  {
39633
39648
  key: "augmented-live-stream-producer",
@@ -36,7 +36,7 @@ import {
36
36
  writeDirectChatSessionState,
37
37
  writeEgressAllowlist,
38
38
  writePersistentClaudeWrapper
39
- } from "./chunk-HI7TA73T.js";
39
+ } from "./chunk-GUCYHTCJ.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-VUHRDURH.js.map
80
+ //# sourceMappingURL=persistent-session-C6IIZKQH.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  paneLogPath
3
- } from "./chunk-HI7TA73T.js";
3
+ } from "./chunk-GUCYHTCJ.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-RVFNE2EV.js.map
421
+ //# sourceMappingURL=responsiveness-probe-RAHMPI4W.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integrity-labs/agt-cli",
3
- "version": "0.28.286",
3
+ "version": "0.28.288",
4
4
  "description": "Augmented Team CLI — agent provisioning and management",
5
5
  "type": "module",
6
6
  "engines": {