@integrity-labs/agt-cli 0.28.436 → 0.28.438
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 +4 -4
- package/dist/{chunk-IRFNOPFU.js → chunk-MOASN7XT.js} +4 -1
- package/dist/{chunk-IRFNOPFU.js.map → chunk-MOASN7XT.js.map} +1 -1
- package/dist/{chunk-DT6YHTVR.js → chunk-WNSFE56R.js} +3 -3
- package/dist/{claude-pair-runtime-SZVGJMGJ.js → claude-pair-runtime-QDNXOLED.js} +2 -2
- package/dist/lib/manager-worker.js +10 -10
- package/dist/mcp/direct-chat-channel.js +64 -11
- package/dist/mcp/slack-channel.js +63 -0
- package/dist/mcp/telegram-channel.js +107 -6
- package/dist/{persistent-session-W7T5YOS6.js → persistent-session-2TTEAJDH.js} +2 -2
- package/dist/{responsiveness-probe-3NKR4QOX.js → responsiveness-probe-PMDNQ4J4.js} +2 -2
- package/package.json +1 -1
- /package/dist/{chunk-DT6YHTVR.js.map → chunk-WNSFE56R.js.map} +0 -0
- /package/dist/{claude-pair-runtime-SZVGJMGJ.js.map → claude-pair-runtime-QDNXOLED.js.map} +0 -0
- /package/dist/{persistent-session-W7T5YOS6.js.map → persistent-session-2TTEAJDH.js.map} +0 -0
- /package/dist/{responsiveness-probe-3NKR4QOX.js.map → responsiveness-probe-PMDNQ4J4.js.map} +0 -0
|
@@ -29,7 +29,7 @@ import {
|
|
|
29
29
|
resolveConnectivityProbe,
|
|
30
30
|
worseConnectivityOutcome,
|
|
31
31
|
wrapScheduledTaskPrompt
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-MOASN7XT.js";
|
|
33
33
|
import {
|
|
34
34
|
parsePsRows
|
|
35
35
|
} from "./chunk-XWVM4KPK.js";
|
|
@@ -4901,7 +4901,7 @@ function requireHost() {
|
|
|
4901
4901
|
}
|
|
4902
4902
|
|
|
4903
4903
|
// src/lib/api-client.ts
|
|
4904
|
-
var agtCliVersion = true ? "0.28.
|
|
4904
|
+
var agtCliVersion = true ? "0.28.438" : "dev";
|
|
4905
4905
|
var lastConfigHash = null;
|
|
4906
4906
|
function setConfigHash(hash) {
|
|
4907
4907
|
lastConfigHash = hash && hash.length > 0 ? hash : null;
|
|
@@ -7402,4 +7402,4 @@ export {
|
|
|
7402
7402
|
managerInstallSystemUnitCommand,
|
|
7403
7403
|
managerUninstallSystemUnitCommand
|
|
7404
7404
|
};
|
|
7405
|
-
//# sourceMappingURL=chunk-
|
|
7405
|
+
//# sourceMappingURL=chunk-WNSFE56R.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-
|
|
103
|
+
const { resolveClaudeBinary } = await import("./persistent-session-2TTEAJDH.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-
|
|
376
|
+
//# sourceMappingURL=claude-pair-runtime-QDNXOLED.js.map
|
|
@@ -42,7 +42,7 @@ import {
|
|
|
42
42
|
resolveEffectivePinRaw,
|
|
43
43
|
safeWriteJsonAtomic,
|
|
44
44
|
setConfigHash
|
|
45
|
-
} from "../chunk-
|
|
45
|
+
} from "../chunk-WNSFE56R.js";
|
|
46
46
|
import {
|
|
47
47
|
getProjectDir as getProjectDir2,
|
|
48
48
|
getReadyTasks,
|
|
@@ -155,7 +155,7 @@ import {
|
|
|
155
155
|
transcriptActivityAgeSeconds,
|
|
156
156
|
writeEgressAllowlist,
|
|
157
157
|
writeUsageLimitMarker
|
|
158
|
-
} from "../chunk-
|
|
158
|
+
} from "../chunk-MOASN7XT.js";
|
|
159
159
|
import {
|
|
160
160
|
reapOrphanChannelMcps
|
|
161
161
|
} from "../chunk-XWVM4KPK.js";
|
|
@@ -9667,7 +9667,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
|
|
|
9667
9667
|
var lastVersionCheckAt = 0;
|
|
9668
9668
|
var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
|
|
9669
9669
|
var lastResponsivenessProbeAt = 0;
|
|
9670
|
-
var agtCliVersion = true ? "0.28.
|
|
9670
|
+
var agtCliVersion = true ? "0.28.438" : "dev";
|
|
9671
9671
|
function resolveBrewPath(execFileSync2) {
|
|
9672
9672
|
try {
|
|
9673
9673
|
const out = execFileSync2("which", ["brew"], { timeout: 5e3 }).toString().trim();
|
|
@@ -10825,7 +10825,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
|
|
|
10825
10825
|
if (codeNames.length === 0) return;
|
|
10826
10826
|
void (async () => {
|
|
10827
10827
|
try {
|
|
10828
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
10828
|
+
const { collectDiagnostics } = await import("../persistent-session-2TTEAJDH.js");
|
|
10829
10829
|
await api.post("/host/heartbeat", {
|
|
10830
10830
|
host_id: hostId,
|
|
10831
10831
|
agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor, claudeMdSizeFor)
|
|
@@ -10932,7 +10932,7 @@ async function pollCycle() {
|
|
|
10932
10932
|
}
|
|
10933
10933
|
try {
|
|
10934
10934
|
const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
|
|
10935
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
10935
|
+
const { collectDiagnostics } = await import("../persistent-session-2TTEAJDH.js");
|
|
10936
10936
|
const diagCodeNames = [...agentState.persistentSessionAgents];
|
|
10937
10937
|
const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor, claudeMdSizeFor) : void 0;
|
|
10938
10938
|
let tailscaleHostname;
|
|
@@ -11046,7 +11046,7 @@ async function pollCycle() {
|
|
|
11046
11046
|
collectResponsivenessProbes,
|
|
11047
11047
|
collectPanelessActivityProbes,
|
|
11048
11048
|
getResponsivenessIntervalMs
|
|
11049
|
-
} = await import("../responsiveness-probe-
|
|
11049
|
+
} = await import("../responsiveness-probe-PMDNQ4J4.js");
|
|
11050
11050
|
const probeIntervalMs = getResponsivenessIntervalMs();
|
|
11051
11051
|
if (now - lastResponsivenessProbeAt > probeIntervalMs) {
|
|
11052
11052
|
const probeCodeNames = [...agentState.persistentSessionAgents];
|
|
@@ -11110,7 +11110,7 @@ async function pollCycle() {
|
|
|
11110
11110
|
collectResponsivenessProbes,
|
|
11111
11111
|
livePendingInboundOldestAgeSeconds,
|
|
11112
11112
|
parkPendingInbound
|
|
11113
|
-
} = await import("../responsiveness-probe-
|
|
11113
|
+
} = await import("../responsiveness-probe-PMDNQ4J4.js");
|
|
11114
11114
|
const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-NDP36U7O.js");
|
|
11115
11115
|
const wedgeNow = /* @__PURE__ */ new Date();
|
|
11116
11116
|
const liveAgents = agentState.persistentSessionAgents;
|
|
@@ -14428,7 +14428,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
|
|
|
14428
14428
|
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}`));
|
|
14429
14429
|
void (async () => {
|
|
14430
14430
|
try {
|
|
14431
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
14431
|
+
const { collectDiagnostics } = await import("../persistent-session-2TTEAJDH.js");
|
|
14432
14432
|
await api.post("/host/heartbeat", {
|
|
14433
14433
|
host_id: hostId,
|
|
14434
14434
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor)
|
|
@@ -14478,7 +14478,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
|
|
|
14478
14478
|
}
|
|
14479
14479
|
try {
|
|
14480
14480
|
const hostId = await getHostId();
|
|
14481
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
14481
|
+
const { collectDiagnostics } = await import("../persistent-session-2TTEAJDH.js");
|
|
14482
14482
|
await api.post("/host/heartbeat", {
|
|
14483
14483
|
host_id: hostId,
|
|
14484
14484
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor)
|
|
@@ -14931,7 +14931,7 @@ async function processClaudePairSessions(agents) {
|
|
|
14931
14931
|
killPairSession,
|
|
14932
14932
|
pairTmuxSession,
|
|
14933
14933
|
finalizeClaudePairOnboarding
|
|
14934
|
-
} = await import("../claude-pair-runtime-
|
|
14934
|
+
} = await import("../claude-pair-runtime-QDNXOLED.js");
|
|
14935
14935
|
for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
|
|
14936
14936
|
log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
|
|
14937
14937
|
const killed = await killPairSession(pairTmuxSession(pairId));
|
|
@@ -35505,6 +35505,21 @@ function readUsageLimitUntil(opts) {
|
|
|
35505
35505
|
import { readFileSync as readFileSync10 } from "fs";
|
|
35506
35506
|
import { homedir as homedir3 } from "os";
|
|
35507
35507
|
import { join as join11 } from "path";
|
|
35508
|
+
|
|
35509
|
+
// ../core/dist/channels/governance/sender-policy-decline.js
|
|
35510
|
+
function decideDeclineReply(input) {
|
|
35511
|
+
const last = input.cache.get(input.key);
|
|
35512
|
+
if (last !== void 0) {
|
|
35513
|
+
const elapsed = input.now - last;
|
|
35514
|
+
if (elapsed < input.cooldownMs) {
|
|
35515
|
+
return { reply: false, remainingMs: input.cooldownMs - elapsed };
|
|
35516
|
+
}
|
|
35517
|
+
}
|
|
35518
|
+
input.cache.set(input.key, input.now);
|
|
35519
|
+
return { reply: true };
|
|
35520
|
+
}
|
|
35521
|
+
|
|
35522
|
+
// src/account-enforcement-notice.ts
|
|
35508
35523
|
function accountEnforcementMarkerPath(codeName) {
|
|
35509
35524
|
if (!codeName) return null;
|
|
35510
35525
|
return join11(homedir3(), ".augmented", codeName, ACCOUNT_ENFORCEMENT_MARKER_FILENAME);
|
|
@@ -35520,18 +35535,16 @@ function readAccountEnforcementLevel(opts) {
|
|
|
35520
35535
|
}
|
|
35521
35536
|
return parseAccountEnforcementMarker(raw)?.level ?? null;
|
|
35522
35537
|
}
|
|
35523
|
-
|
|
35524
|
-
|
|
35525
|
-
|
|
35526
|
-
const last = input.cache.get(input.key);
|
|
35527
|
-
if (last !== void 0) {
|
|
35528
|
-
const elapsed = input.now - last;
|
|
35529
|
-
if (elapsed < input.cooldownMs) {
|
|
35530
|
-
return { reply: false, remainingMs: input.cooldownMs - elapsed };
|
|
35531
|
-
}
|
|
35538
|
+
function shouldSendAccountWarn(opts) {
|
|
35539
|
+
if (readAccountEnforcementLevel({ codeName: opts.codeName, filePath: opts.filePath }) !== "warn") {
|
|
35540
|
+
return false;
|
|
35532
35541
|
}
|
|
35533
|
-
|
|
35534
|
-
|
|
35542
|
+
return decideDeclineReply({
|
|
35543
|
+
cache: opts.cache,
|
|
35544
|
+
key: opts.key,
|
|
35545
|
+
cooldownMs: opts.cooldownMs,
|
|
35546
|
+
now: opts.now ?? Date.now()
|
|
35547
|
+
}).reply;
|
|
35535
35548
|
}
|
|
35536
35549
|
|
|
35537
35550
|
// src/direct-chat-channel.ts
|
|
@@ -35543,6 +35556,12 @@ var DIRECT_CHAT_MAINTENANCE_COOLDOWN_MS = (() => {
|
|
|
35543
35556
|
})();
|
|
35544
35557
|
var DIRECT_CHAT_USAGE_LIMIT_CACHE = /* @__PURE__ */ new Map();
|
|
35545
35558
|
var DIRECT_CHAT_ACCOUNT_MUTE_CACHE = /* @__PURE__ */ new Map();
|
|
35559
|
+
var DIRECT_CHAT_ACCOUNT_WARN_CACHE = /* @__PURE__ */ new Map();
|
|
35560
|
+
var DIRECT_CHAT_ACCOUNT_WARN_COOLDOWN_MS = (() => {
|
|
35561
|
+
const raw = process.env["DIRECT_CHAT_ACCOUNT_WARN_COOLDOWN_SEC"];
|
|
35562
|
+
const n = raw ? Number(raw) : NaN;
|
|
35563
|
+
return Number.isFinite(n) && n >= 0 ? n * 1e3 : 24 * 60 * 60 * 1e3;
|
|
35564
|
+
})();
|
|
35546
35565
|
var AGT_HOST = process.env.AGT_HOST;
|
|
35547
35566
|
var AGT_API_KEY = process.env.AGT_API_KEY;
|
|
35548
35567
|
var AGT_AGENT_ID = process.env.AGT_AGENT_ID;
|
|
@@ -35769,6 +35788,38 @@ async function apiPost(path, body) {
|
|
|
35769
35788
|
}
|
|
35770
35789
|
return res;
|
|
35771
35790
|
}
|
|
35791
|
+
async function maybeSendDirectChatAccountWarn(sessionId) {
|
|
35792
|
+
try {
|
|
35793
|
+
if (!shouldSendAccountWarn({
|
|
35794
|
+
codeName: AGT_AGENT_CODE_NAME ?? null,
|
|
35795
|
+
cache: DIRECT_CHAT_ACCOUNT_WARN_CACHE,
|
|
35796
|
+
key: `${sessionId}|account_warn`,
|
|
35797
|
+
cooldownMs: DIRECT_CHAT_ACCOUNT_WARN_COOLDOWN_MS
|
|
35798
|
+
})) {
|
|
35799
|
+
return;
|
|
35800
|
+
}
|
|
35801
|
+
const res = await apiPost("/host/direct-chat/reply", {
|
|
35802
|
+
agent_id: AGT_AGENT_ID,
|
|
35803
|
+
session_id: sessionId,
|
|
35804
|
+
content: buildAccountIssueReplyText(),
|
|
35805
|
+
message_ids: []
|
|
35806
|
+
});
|
|
35807
|
+
const data = await res.json().catch(() => ({}));
|
|
35808
|
+
if (!res.ok || data.error) {
|
|
35809
|
+
DIRECT_CHAT_ACCOUNT_WARN_CACHE.delete(`${sessionId}|account_warn`);
|
|
35810
|
+
process.stderr.write(
|
|
35811
|
+
`direct-chat-channel: account-warn follow-up failed: ${data.error ?? `HTTP ${res.status}`}
|
|
35812
|
+
`
|
|
35813
|
+
);
|
|
35814
|
+
}
|
|
35815
|
+
} catch (err) {
|
|
35816
|
+
DIRECT_CHAT_ACCOUNT_WARN_CACHE.delete(`${sessionId}|account_warn`);
|
|
35817
|
+
process.stderr.write(
|
|
35818
|
+
`direct-chat-channel: account-warn follow-up error: ${err.message}
|
|
35819
|
+
`
|
|
35820
|
+
);
|
|
35821
|
+
}
|
|
35822
|
+
}
|
|
35772
35823
|
var inboundAttachmentDeps = {
|
|
35773
35824
|
fetchUrl: async (url) => {
|
|
35774
35825
|
const res = await fetchWithTimeout(url, { method: "GET" }, HTTP_TIMEOUT_MS);
|
|
@@ -35980,6 +36031,7 @@ mcp.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
|
35980
36031
|
}
|
|
35981
36032
|
}
|
|
35982
36033
|
}
|
|
36034
|
+
await maybeSendDirectChatAccountWarn(session_id);
|
|
35983
36035
|
return { content: [{ type: "text", text: "sent" }] };
|
|
35984
36036
|
} catch (err) {
|
|
35985
36037
|
return {
|
|
@@ -36005,6 +36057,7 @@ mcp.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
|
36005
36057
|
claimTracker.clear(session_id, message_ids);
|
|
36006
36058
|
clearDirectChatPendingMarkersForSession(DIRECT_CHAT_PENDING_INBOUND_DIR, session_id);
|
|
36007
36059
|
recordDirectChatDelivery(session_id, message_ids);
|
|
36060
|
+
await maybeSendDirectChatAccountWarn(session_id);
|
|
36008
36061
|
return { content: [{ type: "text", text: "sent" }] };
|
|
36009
36062
|
} catch (err) {
|
|
36010
36063
|
return {
|
|
@@ -35089,6 +35089,17 @@ function readAccountEnforcementLevel(opts) {
|
|
|
35089
35089
|
}
|
|
35090
35090
|
return parseAccountEnforcementMarker(raw)?.level ?? null;
|
|
35091
35091
|
}
|
|
35092
|
+
function shouldSendAccountWarn(opts) {
|
|
35093
|
+
if (readAccountEnforcementLevel({ codeName: opts.codeName, filePath: opts.filePath }) !== "warn") {
|
|
35094
|
+
return false;
|
|
35095
|
+
}
|
|
35096
|
+
return decideDeclineReply({
|
|
35097
|
+
cache: opts.cache,
|
|
35098
|
+
key: opts.key,
|
|
35099
|
+
cooldownMs: opts.cooldownMs,
|
|
35100
|
+
now: opts.now ?? Date.now()
|
|
35101
|
+
}).reply;
|
|
35102
|
+
}
|
|
35092
35103
|
|
|
35093
35104
|
// src/watch-command.ts
|
|
35094
35105
|
var WATCH_DEFAULT_DURATION_MS = 2 * 60 * 60 * 1e3;
|
|
@@ -39171,6 +39182,57 @@ async function maybeSendAccountMuteNotice(args) {
|
|
|
39171
39182
|
clearTimeout(timeoutId);
|
|
39172
39183
|
}
|
|
39173
39184
|
}
|
|
39185
|
+
var SLACK_ACCOUNT_WARN_NOTICE_CACHE = /* @__PURE__ */ new Map();
|
|
39186
|
+
var SLACK_ACCOUNT_WARN_COOLDOWN_MS = (() => {
|
|
39187
|
+
const raw = process.env["SLACK_ACCOUNT_WARN_COOLDOWN_SEC"];
|
|
39188
|
+
const n = raw ? Number(raw) : NaN;
|
|
39189
|
+
return Number.isFinite(n) && n >= 0 ? n * 1e3 : 24 * 60 * 60 * 1e3;
|
|
39190
|
+
})();
|
|
39191
|
+
async function maybeSendSlackAccountWarn(args) {
|
|
39192
|
+
if (!BOT_TOKEN || !args.channel) return;
|
|
39193
|
+
const key2 = `${args.channel}|${args.threadTs ?? "root"}|account_warn`;
|
|
39194
|
+
if (!shouldSendAccountWarn({
|
|
39195
|
+
codeName: AGENT_CODE_NAME,
|
|
39196
|
+
cache: SLACK_ACCOUNT_WARN_NOTICE_CACHE,
|
|
39197
|
+
key: key2,
|
|
39198
|
+
cooldownMs: SLACK_ACCOUNT_WARN_COOLDOWN_MS
|
|
39199
|
+
})) {
|
|
39200
|
+
return;
|
|
39201
|
+
}
|
|
39202
|
+
const controller = new AbortController();
|
|
39203
|
+
const timeoutId = setTimeout(() => controller.abort(), 1e4);
|
|
39204
|
+
try {
|
|
39205
|
+
const res = await fetch("https://slack.com/api/chat.postMessage", {
|
|
39206
|
+
method: "POST",
|
|
39207
|
+
signal: controller.signal,
|
|
39208
|
+
headers: {
|
|
39209
|
+
"Content-Type": "application/json",
|
|
39210
|
+
Authorization: `Bearer ${BOT_TOKEN}`
|
|
39211
|
+
},
|
|
39212
|
+
body: JSON.stringify({
|
|
39213
|
+
channel: args.channel,
|
|
39214
|
+
text: buildAccountIssueReplyText(),
|
|
39215
|
+
...args.threadTs ? { thread_ts: args.threadTs } : {}
|
|
39216
|
+
})
|
|
39217
|
+
});
|
|
39218
|
+
const data = await res.json();
|
|
39219
|
+
if (!data.ok) {
|
|
39220
|
+
SLACK_ACCOUNT_WARN_NOTICE_CACHE.delete(key2);
|
|
39221
|
+
process.stderr.write(
|
|
39222
|
+
`slack-channel(${AGENT_CODE_NAME}): account-warn follow-up post failed: ${data.error ?? "unknown"}
|
|
39223
|
+
`
|
|
39224
|
+
);
|
|
39225
|
+
}
|
|
39226
|
+
} catch (err) {
|
|
39227
|
+
SLACK_ACCOUNT_WARN_NOTICE_CACHE.delete(key2);
|
|
39228
|
+
process.stderr.write(
|
|
39229
|
+
`slack-channel(${AGENT_CODE_NAME}): account-warn follow-up error: ${err.message}
|
|
39230
|
+
`
|
|
39231
|
+
);
|
|
39232
|
+
} finally {
|
|
39233
|
+
clearTimeout(timeoutId);
|
|
39234
|
+
}
|
|
39235
|
+
}
|
|
39174
39236
|
var BLOCK_KIT_DISABLED = process.env.SLACK_BLOCK_KIT_DISABLED === "true";
|
|
39175
39237
|
var ALLOWED_USERS = parseAllowedUsersCsv(process.env.SLACK_ALLOWED_USERS);
|
|
39176
39238
|
var PING_ALLOWED_USERS = parseAllowedUsersCsv(process.env.SLACK_PING_ALLOWED_USERS);
|
|
@@ -42126,6 +42188,7 @@ mcp.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
|
42126
42188
|
});
|
|
42127
42189
|
if (redirectNote) base += `. ${redirectNote}`;
|
|
42128
42190
|
const sentTs = typeof data.ts === "string" ? data.ts : void 0;
|
|
42191
|
+
await maybeSendSlackAccountWarn({ channel: effectiveChannel, threadTs: effectiveThreadTs });
|
|
42129
42192
|
return {
|
|
42130
42193
|
content: [{ type: "text", text: sentTs ? `${base} (ts=${sentTs})` : base }]
|
|
42131
42194
|
};
|
|
@@ -35391,6 +35391,17 @@ function readAccountEnforcementLevel(opts) {
|
|
|
35391
35391
|
}
|
|
35392
35392
|
return parseAccountEnforcementMarker(raw)?.level ?? null;
|
|
35393
35393
|
}
|
|
35394
|
+
function shouldSendAccountWarn(opts) {
|
|
35395
|
+
if (readAccountEnforcementLevel({ codeName: opts.codeName, filePath: opts.filePath }) !== "warn") {
|
|
35396
|
+
return false;
|
|
35397
|
+
}
|
|
35398
|
+
return decideDeclineReply({
|
|
35399
|
+
cache: opts.cache,
|
|
35400
|
+
key: opts.key,
|
|
35401
|
+
cooldownMs: opts.cooldownMs,
|
|
35402
|
+
now: opts.now ?? Date.now()
|
|
35403
|
+
}).reply;
|
|
35404
|
+
}
|
|
35394
35405
|
|
|
35395
35406
|
// src/turn-initiator-marker.ts
|
|
35396
35407
|
import { writeFileSync as writeFileSync4, readFileSync as readFileSync6, mkdirSync as mkdirSync4, renameSync as renameSync3 } from "fs";
|
|
@@ -35658,18 +35669,39 @@ function createPeerRateLimiter(config2 = DEFAULT_RATE_LIMITER_CONFIG) {
|
|
|
35658
35669
|
}
|
|
35659
35670
|
};
|
|
35660
35671
|
}
|
|
35661
|
-
function createPresenceTracker() {
|
|
35672
|
+
function createPresenceTracker(opts = {}) {
|
|
35673
|
+
const retainMs = opts.retainMs ?? DAY_MS;
|
|
35662
35674
|
const lastHumanByChat = /* @__PURE__ */ new Map();
|
|
35675
|
+
for (const [chatId, at] of Object.entries(opts.initial ?? {})) {
|
|
35676
|
+
if (typeof at === "number" && Number.isFinite(at)) lastHumanByChat.set(chatId, at);
|
|
35677
|
+
}
|
|
35678
|
+
const snapshot = (now = Date.now()) => {
|
|
35679
|
+
const out = {};
|
|
35680
|
+
for (const [chatId, at] of lastHumanByChat) {
|
|
35681
|
+
if (now - at < retainMs) out[chatId] = at;
|
|
35682
|
+
}
|
|
35683
|
+
return out;
|
|
35684
|
+
};
|
|
35663
35685
|
return {
|
|
35664
35686
|
noteInbound(chatId, kind, now) {
|
|
35665
|
-
if (kind
|
|
35687
|
+
if (kind !== "human") return;
|
|
35688
|
+
const prev = lastHumanByChat.get(chatId);
|
|
35689
|
+
if (prev !== void 0 && prev >= now) return;
|
|
35690
|
+
lastHumanByChat.set(chatId, now);
|
|
35691
|
+
if (opts.onChange) {
|
|
35692
|
+
try {
|
|
35693
|
+
opts.onChange(snapshot(now));
|
|
35694
|
+
} catch {
|
|
35695
|
+
}
|
|
35696
|
+
}
|
|
35666
35697
|
},
|
|
35667
35698
|
shouldDropOutgress(chatId, now, maxAgeMs = 30 * MINUTE_MS) {
|
|
35668
35699
|
const last = lastHumanByChat.get(chatId);
|
|
35669
35700
|
if (last === void 0) return "no_human_recent";
|
|
35670
35701
|
if (now - last >= maxAgeMs) return "no_human_recent";
|
|
35671
35702
|
return null;
|
|
35672
|
-
}
|
|
35703
|
+
},
|
|
35704
|
+
snapshot
|
|
35673
35705
|
};
|
|
35674
35706
|
}
|
|
35675
35707
|
|
|
@@ -37950,6 +37982,10 @@ if (PEER_DISABLED_MODE !== "off") {
|
|
|
37950
37982
|
);
|
|
37951
37983
|
}
|
|
37952
37984
|
PEER_CLASSIFIER_CONFIG.peer_disabled_mode = PEER_DISABLED_MODE;
|
|
37985
|
+
function peerSurfaceActiveOnChat(chatId) {
|
|
37986
|
+
if (!chatId.startsWith("-")) return false;
|
|
37987
|
+
return PEER_CLASSIFIER_CONFIG.peer_agent_mode !== "off" && PEER_CLASSIFIER_CONFIG.peer_group_ids.length > 0 && PEER_CLASSIFIER_CONFIG.peer_group_ids.includes(chatId);
|
|
37988
|
+
}
|
|
37953
37989
|
var crossTeamPeerAuditClient = createCrossTeamPeerAuditClient({
|
|
37954
37990
|
agtHost: AGT_HOST,
|
|
37955
37991
|
agtApiKey: AGT_API_KEY,
|
|
@@ -38008,7 +38044,35 @@ var peerRateLimiter = peerRateApiClient && parsePeerAgentModeEnv(process.env.TEL
|
|
|
38008
38044
|
log: (line) => process.stderr.write(`telegram-channel(${AGENT_CODE_NAME}): ${line}
|
|
38009
38045
|
`)
|
|
38010
38046
|
}) : createPeerRateLimiter();
|
|
38011
|
-
var
|
|
38047
|
+
var PEER_PRESENCE_STATE_FILE = TELEGRAM_AGENT_DIR ? join15(TELEGRAM_AGENT_DIR, "telegram-peer-presence.json") : null;
|
|
38048
|
+
function readPeerPresenceState() {
|
|
38049
|
+
if (!PEER_PRESENCE_STATE_FILE) return null;
|
|
38050
|
+
try {
|
|
38051
|
+
const parsed = JSON.parse(readFileSync15(PEER_PRESENCE_STATE_FILE, "utf-8"));
|
|
38052
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) return null;
|
|
38053
|
+
return parsed;
|
|
38054
|
+
} catch {
|
|
38055
|
+
return null;
|
|
38056
|
+
}
|
|
38057
|
+
}
|
|
38058
|
+
function writePeerPresenceState(snapshot) {
|
|
38059
|
+
if (!PEER_PRESENCE_STATE_FILE || !TELEGRAM_AGENT_DIR) return;
|
|
38060
|
+
const tmp = `${PEER_PRESENCE_STATE_FILE}.tmp`;
|
|
38061
|
+
try {
|
|
38062
|
+
mkdirSync9(TELEGRAM_AGENT_DIR, { recursive: true, mode: 448 });
|
|
38063
|
+
writeFileSync11(tmp, JSON.stringify(snapshot), { mode: 384 });
|
|
38064
|
+
renameSync7(tmp, PEER_PRESENCE_STATE_FILE);
|
|
38065
|
+
} catch (err) {
|
|
38066
|
+
process.stderr.write(
|
|
38067
|
+
`telegram-channel(${AGENT_CODE_NAME}): peer-presence persist failed: ${err.message}
|
|
38068
|
+
`
|
|
38069
|
+
);
|
|
38070
|
+
}
|
|
38071
|
+
}
|
|
38072
|
+
var peerPresence = createPresenceTracker({
|
|
38073
|
+
initial: readPeerPresenceState(),
|
|
38074
|
+
onChange: writePeerPresenceState
|
|
38075
|
+
});
|
|
38012
38076
|
var dailyBudgetWarned = false;
|
|
38013
38077
|
if (!BOT_TOKEN) {
|
|
38014
38078
|
process.stderr.write(
|
|
@@ -38248,6 +38312,39 @@ async function maybeSendTelegramAccountMuteNotice(args) {
|
|
|
38248
38312
|
);
|
|
38249
38313
|
}
|
|
38250
38314
|
}
|
|
38315
|
+
var TELEGRAM_ACCOUNT_WARN_NOTICE_CACHE = /* @__PURE__ */ new Map();
|
|
38316
|
+
var TELEGRAM_ACCOUNT_WARN_COOLDOWN_MS = (() => {
|
|
38317
|
+
const raw = process.env["TELEGRAM_ACCOUNT_WARN_COOLDOWN_SEC"];
|
|
38318
|
+
const n = raw ? Number(raw) : NaN;
|
|
38319
|
+
return Number.isFinite(n) && n >= 0 ? n * 1e3 : 24 * 60 * 60 * 1e3;
|
|
38320
|
+
})();
|
|
38321
|
+
async function maybeSendTelegramAccountWarn(args) {
|
|
38322
|
+
const key2 = `${args.chatId}|account_warn`;
|
|
38323
|
+
if (!shouldSendAccountWarn({
|
|
38324
|
+
codeName: AGENT_CODE_NAME,
|
|
38325
|
+
cache: TELEGRAM_ACCOUNT_WARN_NOTICE_CACHE,
|
|
38326
|
+
key: key2,
|
|
38327
|
+
cooldownMs: TELEGRAM_ACCOUNT_WARN_COOLDOWN_MS
|
|
38328
|
+
})) {
|
|
38329
|
+
return;
|
|
38330
|
+
}
|
|
38331
|
+
try {
|
|
38332
|
+
const resp = await telegramApiCall("sendMessage", { chat_id: args.chatId, text: buildAccountIssueReplyText() }, 1e4);
|
|
38333
|
+
if (!resp.ok) {
|
|
38334
|
+
TELEGRAM_ACCOUNT_WARN_NOTICE_CACHE.delete(key2);
|
|
38335
|
+
process.stderr.write(
|
|
38336
|
+
`telegram-channel(${AGENT_CODE_NAME}): account-warn follow-up rejected (chat=${redactId(String(args.chatId))}): ${resp.description ?? "unknown"}
|
|
38337
|
+
`
|
|
38338
|
+
);
|
|
38339
|
+
}
|
|
38340
|
+
} catch (err) {
|
|
38341
|
+
TELEGRAM_ACCOUNT_WARN_NOTICE_CACHE.delete(key2);
|
|
38342
|
+
process.stderr.write(
|
|
38343
|
+
`telegram-channel(${AGENT_CODE_NAME}): account-warn follow-up failed: ${err.message}
|
|
38344
|
+
`
|
|
38345
|
+
);
|
|
38346
|
+
}
|
|
38347
|
+
}
|
|
38251
38348
|
var ACK_EMOJI = (process.env.TELEGRAM_ACK_REACTION ?? "").trim() || "\u{1F440}";
|
|
38252
38349
|
var TELEGRAM_SKIP_REACTION = (process.env.TELEGRAM_SKIP_REACTION ?? "").trim();
|
|
38253
38350
|
async function setMessageReaction(chatId, messageId, emoji2) {
|
|
@@ -40251,7 +40348,7 @@ mcp.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
|
40251
40348
|
isError: true
|
|
40252
40349
|
};
|
|
40253
40350
|
}
|
|
40254
|
-
const peerActiveOnChat =
|
|
40351
|
+
const peerActiveOnChat = peerSurfaceActiveOnChat(chat_id);
|
|
40255
40352
|
if (peerActiveOnChat) {
|
|
40256
40353
|
if (PEER_DISABLED_GLOBAL) {
|
|
40257
40354
|
process.stderr.write(
|
|
@@ -40344,7 +40441,7 @@ mcp.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
|
40344
40441
|
isError: true
|
|
40345
40442
|
};
|
|
40346
40443
|
}
|
|
40347
|
-
const peerActiveOnChat =
|
|
40444
|
+
const peerActiveOnChat = peerSurfaceActiveOnChat(chat_id);
|
|
40348
40445
|
if (peerActiveOnChat) {
|
|
40349
40446
|
if (PEER_DISABLED_GLOBAL) {
|
|
40350
40447
|
process.stderr.write(
|
|
@@ -40459,6 +40556,7 @@ mcp.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
|
40459
40556
|
delivered_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
40460
40557
|
});
|
|
40461
40558
|
}
|
|
40559
|
+
await maybeSendTelegramAccountWarn({ chatId: chat_id });
|
|
40462
40560
|
return { content: [{ type: "text", text: "sent" }] };
|
|
40463
40561
|
} catch (err) {
|
|
40464
40562
|
return {
|
|
@@ -40918,6 +41016,9 @@ async function replayPendingTelegramMarkers() {
|
|
|
40918
41016
|
params: replayParams
|
|
40919
41017
|
});
|
|
40920
41018
|
seedTelegramProgressHeartbeat();
|
|
41019
|
+
if (replayPayload.meta?.["source_role"] !== "agent") {
|
|
41020
|
+
peerPresence.noteInbound(marker.chat_id, "human", now);
|
|
41021
|
+
}
|
|
40921
41022
|
} catch (err) {
|
|
40922
41023
|
process.stderr.write(
|
|
40923
41024
|
`telegram-channel(${AGENT_CODE_NAME}): replay push failed: ${err.message}
|
|
@@ -36,7 +36,7 @@ import {
|
|
|
36
36
|
writeDirectChatSessionState,
|
|
37
37
|
writeEgressAllowlist,
|
|
38
38
|
writePersistentClaudeWrapper
|
|
39
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-MOASN7XT.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-
|
|
80
|
+
//# sourceMappingURL=persistent-session-2TTEAJDH.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
paneLogPath
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-MOASN7XT.js";
|
|
4
4
|
import "./chunk-XWVM4KPK.js";
|
|
5
5
|
|
|
6
6
|
// src/lib/responsiveness-probe.ts
|
|
@@ -471,4 +471,4 @@ export {
|
|
|
471
471
|
readAndResetSlackReplyBindingClassifications,
|
|
472
472
|
readAndResetSlackReplyTargetClassifications
|
|
473
473
|
};
|
|
474
|
-
//# sourceMappingURL=responsiveness-probe-
|
|
474
|
+
//# sourceMappingURL=responsiveness-probe-PMDNQ4J4.js.map
|
package/package.json
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|