@integrity-labs/agt-cli 0.28.399 → 0.28.401

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-34CDP2I3.js");
103
+ const { resolveClaudeBinary } = await import("./persistent-session-GRCJPRH5.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-XUI3TOGS.js.map
376
+ //# sourceMappingURL=claude-pair-runtime-HDSV7CKE.js.map
@@ -44,7 +44,7 @@ import {
44
44
  resolveEffectivePinRaw,
45
45
  safeWriteJsonAtomic,
46
46
  setConfigHash
47
- } from "../chunk-WKCR2HIQ.js";
47
+ } from "../chunk-24P2BKOV.js";
48
48
  import {
49
49
  getProjectDir as getProjectDir2,
50
50
  getReadyTasks,
@@ -146,7 +146,7 @@ import {
146
146
  toOpencodeModel,
147
147
  transcriptActivityAgeSeconds,
148
148
  writeEgressAllowlist
149
- } from "../chunk-4LZBDTFJ.js";
149
+ } from "../chunk-V5CRVBVC.js";
150
150
  import {
151
151
  reapOrphanChannelMcps
152
152
  } from "../chunk-XWVM4KPK.js";
@@ -9249,7 +9249,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
9249
9249
  var lastVersionCheckAt = 0;
9250
9250
  var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
9251
9251
  var lastResponsivenessProbeAt = 0;
9252
- var agtCliVersion = true ? "0.28.399" : "dev";
9252
+ var agtCliVersion = true ? "0.28.401" : "dev";
9253
9253
  function resolveBrewPath(execFileSync2) {
9254
9254
  try {
9255
9255
  const out = execFileSync2("which", ["brew"], { timeout: 5e3 }).toString().trim();
@@ -10381,7 +10381,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
10381
10381
  if (codeNames.length === 0) return;
10382
10382
  void (async () => {
10383
10383
  try {
10384
- const { collectDiagnostics } = await import("../persistent-session-34CDP2I3.js");
10384
+ const { collectDiagnostics } = await import("../persistent-session-GRCJPRH5.js");
10385
10385
  await api.post("/host/heartbeat", {
10386
10386
  host_id: hostId,
10387
10387
  agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor)
@@ -10480,7 +10480,7 @@ async function pollCycle() {
10480
10480
  }
10481
10481
  try {
10482
10482
  const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
10483
- const { collectDiagnostics } = await import("../persistent-session-34CDP2I3.js");
10483
+ const { collectDiagnostics } = await import("../persistent-session-GRCJPRH5.js");
10484
10484
  const diagCodeNames = [...agentState.persistentSessionAgents];
10485
10485
  const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor) : void 0;
10486
10486
  let tailscaleHostname;
@@ -10635,7 +10635,7 @@ async function pollCycle() {
10635
10635
  const {
10636
10636
  collectResponsivenessProbes,
10637
10637
  getResponsivenessIntervalMs
10638
- } = await import("../responsiveness-probe-T7WBF4FX.js");
10638
+ } = await import("../responsiveness-probe-DNM5APN5.js");
10639
10639
  const probeIntervalMs = getResponsivenessIntervalMs();
10640
10640
  if (now - lastResponsivenessProbeAt > probeIntervalMs) {
10641
10641
  const probeCodeNames = [...agentState.persistentSessionAgents];
@@ -10667,7 +10667,7 @@ async function pollCycle() {
10667
10667
  collectResponsivenessProbes,
10668
10668
  livePendingInboundOldestAgeSeconds,
10669
10669
  parkPendingInbound
10670
- } = await import("../responsiveness-probe-T7WBF4FX.js");
10670
+ } = await import("../responsiveness-probe-DNM5APN5.js");
10671
10671
  const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-HYOOQV4A.js");
10672
10672
  const wedgeNow = /* @__PURE__ */ new Date();
10673
10673
  const liveAgents = agentState.persistentSessionAgents;
@@ -13927,7 +13927,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
13927
13927
  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}`));
13928
13928
  void (async () => {
13929
13929
  try {
13930
- const { collectDiagnostics } = await import("../persistent-session-34CDP2I3.js");
13930
+ const { collectDiagnostics } = await import("../persistent-session-GRCJPRH5.js");
13931
13931
  await api.post("/host/heartbeat", {
13932
13932
  host_id: hostId,
13933
13933
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor)
@@ -13977,7 +13977,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
13977
13977
  }
13978
13978
  try {
13979
13979
  const hostId = await getHostId();
13980
- const { collectDiagnostics } = await import("../persistent-session-34CDP2I3.js");
13980
+ const { collectDiagnostics } = await import("../persistent-session-GRCJPRH5.js");
13981
13981
  await api.post("/host/heartbeat", {
13982
13982
  host_id: hostId,
13983
13983
  agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor)
@@ -14430,7 +14430,7 @@ async function processClaudePairSessions(agents) {
14430
14430
  killPairSession,
14431
14431
  pairTmuxSession,
14432
14432
  finalizeClaudePairOnboarding
14433
- } = await import("../claude-pair-runtime-XUI3TOGS.js");
14433
+ } = await import("../claude-pair-runtime-HDSV7CKE.js");
14434
14434
  for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
14435
14435
  log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
14436
14436
  const killed = await killPairSession(pairTmuxSession(pairId));
package/dist/mcp/index.js CHANGED
@@ -22511,6 +22511,72 @@ server.tool(
22511
22511
  };
22512
22512
  }
22513
22513
  );
22514
+ server.tool(
22515
+ "update_timezone",
22516
+ `Set your OWN timezone, as an IANA name (e.g. "Australia/Sydney", "America/New_York", "Europe/London"). This controls the local clock used for your restart / maintenance-window scheduling and day-boundary reporting, so "off-peak" is calculated in your operator's zone rather than UTC. Pass an empty string (or "auto") to CLEAR your override and inherit your team default (falling back to UTC). Changes save immediately and take full effect within a few minutes, on your next configuration refresh. Your code_name and identity are unaffected.`,
22517
+ {
22518
+ timezone: external_exports.string().max(100).describe(
22519
+ 'Your IANA timezone name (e.g. "Australia/Sydney"). Pass an empty string or "auto" to clear the override and inherit the team default (then UTC).'
22520
+ )
22521
+ },
22522
+ async (params) => {
22523
+ if (!AGT_AGENT_CODE_NAME) {
22524
+ return {
22525
+ content: [{ type: "text", text: "Error: AGT_AGENT_CODE_NAME not configured." }],
22526
+ isError: true
22527
+ };
22528
+ }
22529
+ const payload = { agent_code_name: AGT_AGENT_CODE_NAME, timezone: params.timezone };
22530
+ let resp;
22531
+ try {
22532
+ resp = await apiPost("/host/update-timezone", payload);
22533
+ } catch (err) {
22534
+ const msg = err instanceof Error ? err.message : String(err);
22535
+ if (/returned\s+[45]\d\d/.test(msg)) {
22536
+ let detail = msg;
22537
+ const jsonStart = msg.indexOf("{");
22538
+ if (jsonStart !== -1) {
22539
+ try {
22540
+ const parsedErr = JSON.parse(msg.slice(jsonStart));
22541
+ if (parsedErr.error) detail = parsedErr.error;
22542
+ } catch {
22543
+ }
22544
+ }
22545
+ return {
22546
+ content: [{ type: "text", text: `Timezone update rejected: ${detail}` }],
22547
+ isError: true
22548
+ };
22549
+ }
22550
+ return {
22551
+ content: [
22552
+ {
22553
+ type: "text",
22554
+ text: `Could not reach the timezone-update service (${msg}). Tell your operator.`
22555
+ }
22556
+ ],
22557
+ isError: true
22558
+ };
22559
+ }
22560
+ if (!resp.ok) {
22561
+ return {
22562
+ content: [
22563
+ { type: "text", text: `Timezone update rejected: ${resp.error ?? "unknown error"}` }
22564
+ ],
22565
+ isError: true
22566
+ };
22567
+ }
22568
+ const effective = resp.effective_timezone ?? "UTC";
22569
+ const summary = resp.timezone ? `Your timezone is now ${resp.timezone}.` : `Your timezone override was cleared; you now inherit ${effective}.`;
22570
+ return {
22571
+ content: [
22572
+ {
22573
+ type: "text",
22574
+ text: `${summary} Effective timezone: ${effective}. The change will take effect within a few minutes, on your next configuration refresh.`
22575
+ }
22576
+ ]
22577
+ };
22578
+ }
22579
+ );
22514
22580
  server.tool(
22515
22581
  "request_channel_access",
22516
22582
  "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.",
@@ -23696,6 +23762,9 @@ var LOCAL_TOOL_NAMES = /* @__PURE__ */ new Set([
23696
23762
  // ENG-6686: self-service identity edit (always registered). Listed here to
23697
23763
  // keep the lockstep guard green; no API tool shares this name.
23698
23764
  "update_identity",
23765
+ // ENG-8053: self-service timezone edit (always registered). Listed here to
23766
+ // keep the lockstep guard green; no API tool shares this name.
23767
+ "update_timezone",
23699
23768
  // ENG-6689: request Slack channel posting access (HITL approval to Manager).
23700
23769
  // Always registered; listed here to keep the lockstep guard green.
23701
23770
  "request_channel_access",
@@ -36,7 +36,7 @@ import {
36
36
  writeDirectChatSessionState,
37
37
  writeEgressAllowlist,
38
38
  writePersistentClaudeWrapper
39
- } from "./chunk-4LZBDTFJ.js";
39
+ } from "./chunk-V5CRVBVC.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-34CDP2I3.js.map
80
+ //# sourceMappingURL=persistent-session-GRCJPRH5.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  paneLogPath
3
- } from "./chunk-4LZBDTFJ.js";
3
+ } from "./chunk-V5CRVBVC.js";
4
4
  import "./chunk-XWVM4KPK.js";
5
5
 
6
6
  // src/lib/responsiveness-probe.ts
@@ -437,4 +437,4 @@ export {
437
437
  readAndResetSlackReplyBindingClassifications,
438
438
  readAndResetSlackReplyTargetClassifications
439
439
  };
440
- //# sourceMappingURL=responsiveness-probe-T7WBF4FX.js.map
440
+ //# sourceMappingURL=responsiveness-probe-DNM5APN5.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@integrity-labs/agt-cli",
3
- "version": "0.28.399",
3
+ "version": "0.28.401",
4
4
  "description": "Augmented Team CLI — agent provisioning and management",
5
5
  "type": "module",
6
6
  "engines": {