@integrity-labs/agt-cli 0.28.687 → 0.28.689

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-OQ7MFVEH.js");
103
+ const { resolveClaudeBinary } = await import("./persistent-session-WDAQ4RML.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-HPCXQDVY.js.map
376
+ //# sourceMappingURL=claude-pair-runtime-36BMP4AW.js.map
@@ -55,7 +55,7 @@ import {
55
55
  setConfigHash,
56
56
  setSecretFileTmpfsBacking,
57
57
  tripClass
58
- } from "../chunk-WOWZLCF5.js";
58
+ } from "../chunk-4CQEX55A.js";
59
59
  import {
60
60
  getProjectDir as getProjectDir2,
61
61
  getReadyTasks,
@@ -113,7 +113,7 @@ import {
113
113
  takeZombieDetection,
114
114
  toOpencodeModel,
115
115
  writeEgressAllowlist
116
- } from "../chunk-ZKNKHAHX.js";
116
+ } from "../chunk-QXDHGJBW.js";
117
117
  import {
118
118
  ACCOUNT_ENFORCEMENT_MARKER_FILENAME,
119
119
  AnchorSessionClient,
@@ -194,7 +194,7 @@ import {
194
194
  subagentActivityAgeSeconds,
195
195
  sumTranscriptUsageInWindow,
196
196
  transcriptActivityAgeSeconds
197
- } from "../chunk-OOFJUWMT.js";
197
+ } from "../chunk-RBZWLHGD.js";
198
198
  import {
199
199
  reapOrphanChannelMcps
200
200
  } from "../chunk-XWVM4KPK.js";
@@ -11755,7 +11755,7 @@ var pendingDayRolloverReset = /* @__PURE__ */ new Set();
11755
11755
  var dayRolloverInboundHold = /* @__PURE__ */ new Map();
11756
11756
  var INBOUND_HOLD_EPISODE_GAP_MS = 12e4;
11757
11757
  async function channelInboundActivityAgeSecondsFor(codeName) {
11758
- const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-ZQQLBARV.js");
11758
+ const { newestPendingInboundActivityMtimeMs } = await import("../responsiveness-probe-NZH7PZEL.js");
11759
11759
  const newest = newestPendingInboundActivityMtimeMs(dirname10(paneLogPath(codeName)));
11760
11760
  if (newest === null) return null;
11761
11761
  return Math.max(0, Math.floor((Date.now() - newest) / 1e3));
@@ -12403,7 +12403,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
12403
12403
  var lastVersionCheckAt = 0;
12404
12404
  var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
12405
12405
  var lastResponsivenessProbeAt = 0;
12406
- var agtCliVersion = true ? "0.28.687" : "dev";
12406
+ var agtCliVersion = true ? "0.28.689" : "dev";
12407
12407
  function resolveBrewPath(execFileSync3) {
12408
12408
  try {
12409
12409
  const out = execFileSync3("which", ["brew"], { timeout: 5e3 }).toString().trim();
@@ -13864,7 +13864,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
13864
13864
  if (codeNames.length === 0) return;
13865
13865
  void (async () => {
13866
13866
  try {
13867
- const { collectDiagnostics } = await import("../persistent-session-OQ7MFVEH.js");
13867
+ const { collectDiagnostics } = await import("../persistent-session-WDAQ4RML.js");
13868
13868
  await api.post("/host/heartbeat", {
13869
13869
  host_id: hostId,
13870
13870
  agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor)
@@ -13981,7 +13981,7 @@ async function pollCycleInner() {
13981
13981
  }
13982
13982
  try {
13983
13983
  const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
13984
- const { collectDiagnostics } = await import("../persistent-session-OQ7MFVEH.js");
13984
+ const { collectDiagnostics } = await import("../persistent-session-WDAQ4RML.js");
13985
13985
  const diagCodeNames = [...agentState.persistentSessionAgents];
13986
13986
  const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor) : void 0;
13987
13987
  let tailscaleHostname;
@@ -14133,7 +14133,7 @@ async function pollCycleInner() {
14133
14133
  collectPanelessActivityProbes,
14134
14134
  getResponsivenessIntervalMs,
14135
14135
  occupancyQualificationClassifications
14136
- } = await import("../responsiveness-probe-ZQQLBARV.js");
14136
+ } = await import("../responsiveness-probe-NZH7PZEL.js");
14137
14137
  const probeIntervalMs = getResponsivenessIntervalMs();
14138
14138
  if (now - lastResponsivenessProbeAt > probeIntervalMs) {
14139
14139
  const probeCodeNames = [...agentState.persistentSessionAgents];
@@ -14243,7 +14243,7 @@ async function pollCycleInner() {
14243
14243
  collectResponsivenessProbes,
14244
14244
  livePendingInboundOldestAgeSeconds,
14245
14245
  parkPendingInbound
14246
- } = await import("../responsiveness-probe-ZQQLBARV.js");
14246
+ } = await import("../responsiveness-probe-NZH7PZEL.js");
14247
14247
  const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-NDP36U7O.js");
14248
14248
  const wedgeNow = /* @__PURE__ */ new Date();
14249
14249
  const liveAgents = agentState.persistentSessionAgents;
@@ -14399,7 +14399,7 @@ async function pollCycleInner() {
14399
14399
  }
14400
14400
  try {
14401
14401
  const { scrapeMcpFailedBannerCount } = await import("../pane-mcp-banner-scraper-JA437JIB.js");
14402
- const { probeSessionAuth } = await import("../session-auth-dead-4OJ2XLH4.js");
14402
+ const { probeSessionAuth } = await import("../session-auth-dead-JCK3BOVA.js");
14403
14403
  const observations = [];
14404
14404
  const pendingCacheCommits = [];
14405
14405
  const modelApiErrorReportingOn = hostFlagStore().getBoolean("model-api-error-reporting");
@@ -18160,7 +18160,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
18160
18160
  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}`));
18161
18161
  void (async () => {
18162
18162
  try {
18163
- const { collectDiagnostics } = await import("../persistent-session-OQ7MFVEH.js");
18163
+ const { collectDiagnostics } = await import("../persistent-session-WDAQ4RML.js");
18164
18164
  await api.post("/host/heartbeat", {
18165
18165
  host_id: hostId,
18166
18166
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor)
@@ -18211,7 +18211,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
18211
18211
  }
18212
18212
  try {
18213
18213
  const hostId = await getHostId();
18214
- const { collectDiagnostics } = await import("../persistent-session-OQ7MFVEH.js");
18214
+ const { collectDiagnostics } = await import("../persistent-session-WDAQ4RML.js");
18215
18215
  await api.post("/host/heartbeat", {
18216
18216
  host_id: hostId,
18217
18217
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor, spawnOutcomeForDiagnostics, pidPressureFor)
@@ -18843,7 +18843,7 @@ async function processClaudePairSessions(agents) {
18843
18843
  killPairSession,
18844
18844
  pairTmuxSession,
18845
18845
  finalizeClaudePairOnboarding
18846
- } = await import("../claude-pair-runtime-HPCXQDVY.js");
18846
+ } = await import("../claude-pair-runtime-36BMP4AW.js");
18847
18847
  for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
18848
18848
  log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
18849
18849
  const killed = await killPairSession(pairTmuxSession(pairId));
@@ -21630,7 +21630,7 @@ server.registerTool(
21630
21630
  );
21631
21631
  server.registerTool(
21632
21632
  "debug_get_agent_integrations",
21633
- { description: 'Resolve ONE agent\'s EFFECTIVE integration set \u2014 the focused read for "does this agent have integration X, and where is it installed from?" (ENG-8271). Same resolution as `debug_get_agent`\'s `effective_integrations`, without the host/alerts payload.\n\nReturns { agent_id, code_name, team_id, organization_id, effective_integrations: { effective_count, by_scope, inherited_definition_ids, excluded_control_plane_only, shadowed_by_more_specific, duplicate_merge_keys, scopes_queried, scopes_skipped, integrations[] } } - the same `effective_integrations` object `debug_get_agent` returns, so one shape covers both tools. Each entry: { definition_id, display_name, connection_key, scope ("agent" | "team" | "org"), source_id, status, status_message, auth_type, last_connectivity_check_at, last_connectivity_status, consecutive_connectivity_failures, wired_verdict, last_session_tool_bind_at }. Never credentials.\n\nPrefer this over reading `agent_integrations`: TEAM/ORG-scope installs are invisible to a per-agent read, so absence there is not evidence. `effective_count` reconciles against the manager\'s `Integrations provisioned for \'<code_name>\' (N)` or the tool-bind probe\'s `due=N`; docs/runbooks/admin-debug-dogfood.md lists the benign divergences to rule out before treating a mismatch as a bug. `wired_verdict` is the host\'s last session-tool-bind result (bound | missing | unreachable | unknown | not_applicable), the closest available answer to "is it in the agent\'s .mcp.json right now?". ENG-9114: `not_applicable` means the integration has NO .mcp.json server at all - CLI-delivered (github/gh, aws-cli, gcloud) or a builtin served through the platform\'s own MCP server - so "bound" is not a question about it and it is NOT broken. `null` means never probed, which is still NOT "not wired"; once a probe has run against a row, expect one of the five values rather than null.\n\nFails closed (uniform not-found) for an unauthorized/unknown agent; a failed scope query returns an error rather than a smaller count. Audited as a cross-org access. Pass { agent_id }.', inputSchema: getAgentIntegrationsSchema },
21633
+ { description: 'Resolve ONE agent\'s EFFECTIVE integration set \u2014 the focused read for "does this agent have integration X, and where is it installed from?" (ENG-8271). Same resolution as `debug_get_agent`\'s `effective_integrations`, without the host/alerts payload.\n\nReturns { agent_id, code_name, team_id, organization_id, effective_integrations: { effective_count, by_scope, inherited_definition_ids, excluded_control_plane_only, excluded_unhealthy, excluded_unhealthy_definition_ids, shadowed_by_more_specific, duplicate_merge_keys, scopes_queried, scopes_skipped, integrations[] } } - the same `effective_integrations` object `debug_get_agent` returns, so one shape covers both tools. Each entry: { definition_id, display_name, connection_key, scope ("agent" | "team" | "org"), source_id, status, status_message, auth_type, last_connectivity_check_at, last_connectivity_status, consecutive_connectivity_failures, wired_verdict, last_session_tool_bind_at }. Never credentials.\n\nPrefer this over reading `agent_integrations`: TEAM/ORG-scope installs are invisible to a per-agent read, so absence there is not evidence. `excluded_unhealthy` + `excluded_unhealthy_definition_ids` (ENG-9285) name the rows that EXIST for this agent but were dropped for an unhealthy `status` \u2014 read them before concluding an integration is uninstalled, because a forced probe\'s `not_installed` verdict derives from the same status filter and CANNOT tell a deleted row (orphan, safe to reap) from a broken one (zombie, someone still has to fix it). `effective_count` reconciles against the manager\'s `Integrations provisioned for \'<code_name>\' (N)` or the tool-bind probe\'s `due=N`; docs/runbooks/admin-debug-dogfood.md lists the benign divergences to rule out before treating a mismatch as a bug. `wired_verdict` is the host\'s last session-tool-bind result (bound | missing | unreachable | unknown | not_applicable), the closest available answer to "is it in the agent\'s .mcp.json right now?". ENG-9114: `not_applicable` means the integration has NO .mcp.json server at all - CLI-delivered (github/gh, aws-cli, gcloud) or a builtin served through the platform\'s own MCP server - so "bound" is not a question about it and it is NOT broken. `null` means never probed, which is still NOT "not wired"; once a probe has run against a row, expect one of the five values rather than null.\n\nFails closed (uniform not-found) for an unauthorized/unknown agent; a failed scope query returns an error rather than a smaller count. Audited as a cross-org access. Pass { agent_id }.', inputSchema: getAgentIntegrationsSchema },
21634
21634
  async (args) => {
21635
21635
  try {
21636
21636
  const result = await client.getAgentIntegrations(args.agent_id);
package/dist/mcp/index.js CHANGED
@@ -45754,20 +45754,33 @@ server.tool(
45754
45754
  );
45755
45755
  server.tool(
45756
45756
  "routine_propose",
45757
- "Propose a recurring ROUTINE the user just asked you to take on. The platform sends them an accept/decline offer; on acceptance it creates the routine and its schedule with full lifecycle (hand-back anytime, approval ramp). Prefer this over schedule_create for recurring responsibilities.",
45757
+ "Propose a recurring ROUTINE the user just asked you to take on. The platform sends them an accept/decline offer; on acceptance it creates the routine and its schedule with full lifecycle (hand-back anytime, approval ramp). Prefer this over schedule_create for recurring responsibilities. If the user named a time, pass it as `at` - the reply tells you the schedule that was actually compiled, so check it matches what they asked for before you go quiet.",
45758
45758
  {
45759
45759
  name: external_exports.string().describe('Short routine name (e.g. "Morning inbox summary")'),
45760
45760
  description: external_exports.string().describe("What the routine does, self-contained (this text is shown to the user and becomes the routine prompt basis)"),
45761
- cadence_guess: external_exports.enum(["daily", "weekdays", "weekly", "unknown"]).optional().describe("Best guess at the cadence the user asked for")
45761
+ cadence_guess: external_exports.enum(["daily", "weekdays", "weekly", "unknown"]).optional().describe("Best guess at the cadence the user asked for"),
45762
+ // ENG-9393: the time and weekday used to be inexpressible here, so a
45763
+ // routine asked for at 08:00 was created at 09:00 and the requested time
45764
+ // survived only inside `description`, where nothing reads it.
45765
+ at: external_exports.string().optional().describe(
45766
+ 'The time of day it should run, as 24-hour "HH:MM" (e.g. "08:00", "16:30"). Defaults to 09:00. State it whenever the user named a time - writing the time in the description does NOT schedule it, the description is prose and nothing reads it.'
45767
+ ),
45768
+ timezone: external_exports.string().optional().describe(
45769
+ `IANA timezone the time is in (e.g. "Australia/Melbourne"). Defaults to YOUR configured timezone, which is almost always what you want - pass this only when the routine must run on someone else's clock.`
45770
+ ),
45771
+ day_of_week: external_exports.number().int().min(0).max(6).optional().describe('For cadence_guess "weekly" only: 0 = Sunday .. 6 = Saturday. Defaults to Monday.')
45762
45772
  },
45763
- async ({ name, description, cadence_guess }) => {
45773
+ async ({ name, description, cadence_guess, at, timezone, day_of_week }) => {
45764
45774
  let data;
45765
45775
  try {
45766
45776
  data = await apiPost("/host/routines/propose", {
45767
45777
  agent_id: AGT_AGENT_ID,
45768
45778
  name,
45769
45779
  description,
45770
- ...cadence_guess ? { cadence_guess } : {}
45780
+ ...cadence_guess ? { cadence_guess } : {},
45781
+ ...at ? { at } : {},
45782
+ ...timezone ? { timezone } : {},
45783
+ ...day_of_week !== void 0 ? { day_of_week } : {}
45771
45784
  });
45772
45785
  } catch (err) {
45773
45786
  return { content: [{ type: "text", text: `Could not propose: ${err.message}` }] };
@@ -43,8 +43,8 @@ import {
43
43
  writeDirectChatSessionState,
44
44
  writeEgressAllowlist,
45
45
  writePersistentClaudeWrapper
46
- } from "./chunk-ZKNKHAHX.js";
47
- import "./chunk-OOFJUWMT.js";
46
+ } from "./chunk-QXDHGJBW.js";
47
+ import "./chunk-RBZWLHGD.js";
48
48
  import "./chunk-XWVM4KPK.js";
49
49
  export {
50
50
  EGRESS_BASELINE_DOMAINS,
@@ -92,4 +92,4 @@ export {
92
92
  writeEgressAllowlist,
93
93
  writePersistentClaudeWrapper
94
94
  };
95
- //# sourceMappingURL=persistent-session-OQ7MFVEH.js.map
95
+ //# sourceMappingURL=persistent-session-WDAQ4RML.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  paneLogPath
3
- } from "./chunk-ZKNKHAHX.js";
4
- import "./chunk-OOFJUWMT.js";
3
+ } from "./chunk-QXDHGJBW.js";
4
+ import "./chunk-RBZWLHGD.js";
5
5
  import "./chunk-XWVM4KPK.js";
6
6
 
7
7
  // src/lib/responsiveness-probe.ts
@@ -745,4 +745,4 @@ export {
745
745
  readAndResetSlackReplyBindingClassifications,
746
746
  readAndResetSlackReplyTargetClassifications
747
747
  };
748
- //# sourceMappingURL=responsiveness-probe-ZQQLBARV.js.map
748
+ //# sourceMappingURL=responsiveness-probe-NZH7PZEL.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  sessionTranscriptDir
3
- } from "./chunk-OOFJUWMT.js";
3
+ } from "./chunk-RBZWLHGD.js";
4
4
 
5
5
  // src/lib/session-auth-dead.ts
6
6
  import { closeSync, openSync, readSync, readdirSync, statSync } from "fs";
@@ -203,4 +203,4 @@ export {
203
203
  decideSessionAuthState,
204
204
  probeSessionAuth
205
205
  };
206
- //# sourceMappingURL=session-auth-dead-4OJ2XLH4.js.map
206
+ //# sourceMappingURL=session-auth-dead-JCK3BOVA.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integrity-labs/agt-cli",
3
- "version": "0.28.687",
3
+ "version": "0.28.689",
4
4
  "description": "Augmented Team CLI — agent provisioning and management",
5
5
  "type": "module",
6
6
  "engines": {