@integrity-labs/agt-cli 0.27.70 → 0.27.72
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 +6 -30
- package/dist/bin/agt.js.map +1 -1
- package/dist/{chunk-KPD5KJY7.js → chunk-5SWHKUL3.js} +117 -1
- package/dist/chunk-5SWHKUL3.js.map +1 -0
- package/dist/{chunk-DA3KY3D2.js → chunk-7YM2F3DG.js} +3 -2
- package/dist/{chunk-CM2FTSRM.js → chunk-IW6Q53DB.js} +271 -33
- package/dist/chunk-IW6Q53DB.js.map +1 -0
- package/dist/{claude-pair-runtime-6GSA5KRH.js → claude-pair-runtime-2XWSYFSY.js} +2 -2
- package/dist/lib/manager-worker.js +14 -18
- package/dist/lib/manager-worker.js.map +1 -1
- package/dist/{persistent-session-2WJIWIMQ.js → persistent-session-S7OJTKKE.js} +3 -3
- package/dist/{responsiveness-probe-RAWYP7LQ.js → responsiveness-probe-LGNXOX43.js} +3 -3
- package/package.json +1 -1
- package/dist/chunk-CM2FTSRM.js.map +0 -1
- package/dist/chunk-KPD5KJY7.js.map +0 -1
- /package/dist/{chunk-DA3KY3D2.js.map → chunk-7YM2F3DG.js.map} +0 -0
- /package/dist/{claude-pair-runtime-6GSA5KRH.js.map → claude-pair-runtime-2XWSYFSY.js.map} +0 -0
- /package/dist/{persistent-session-2WJIWIMQ.js.map → persistent-session-S7OJTKKE.js.map} +0 -0
- /package/dist/{responsiveness-probe-RAWYP7LQ.js.map → responsiveness-probe-LGNXOX43.js.map} +0 -0
|
@@ -4035,6 +4035,122 @@ var firecrawlTriggerAdapter = {
|
|
|
4035
4035
|
};
|
|
4036
4036
|
registerTriggerSource(firecrawlTriggerAdapter);
|
|
4037
4037
|
|
|
4038
|
+
// ../../packages/core/dist/triggers/adapters/gdrive-comments.js
|
|
4039
|
+
function containsMention(text, mentions) {
|
|
4040
|
+
if (!text)
|
|
4041
|
+
return false;
|
|
4042
|
+
const lower = text.toLowerCase();
|
|
4043
|
+
return mentions.some((m) => m.length > 0 && lower.includes(m.toLowerCase()));
|
|
4044
|
+
}
|
|
4045
|
+
function classifyMentions(comments, watermark, mentions) {
|
|
4046
|
+
const watermarkMs = watermark ? Date.parse(watermark) : Number.NEGATIVE_INFINITY;
|
|
4047
|
+
const out = [];
|
|
4048
|
+
for (const comment of comments) {
|
|
4049
|
+
if (!comment.id || comment.deleted)
|
|
4050
|
+
continue;
|
|
4051
|
+
if (comment.resolved)
|
|
4052
|
+
continue;
|
|
4053
|
+
const createdMs = comment.createdTime ? Date.parse(comment.createdTime) : Number.NaN;
|
|
4054
|
+
if (Number.isFinite(createdMs) && createdMs >= watermarkMs) {
|
|
4055
|
+
if (containsMention(comment.content, mentions)) {
|
|
4056
|
+
out.push({ kind: "NEW_COMMENT", comment });
|
|
4057
|
+
}
|
|
4058
|
+
}
|
|
4059
|
+
for (const reply of comment.replies ?? []) {
|
|
4060
|
+
if (!reply.id || reply.deleted)
|
|
4061
|
+
continue;
|
|
4062
|
+
if (reply.action)
|
|
4063
|
+
continue;
|
|
4064
|
+
const replyCreatedMs = reply.createdTime ? Date.parse(reply.createdTime) : Number.NaN;
|
|
4065
|
+
if (!Number.isFinite(replyCreatedMs) || replyCreatedMs < watermarkMs)
|
|
4066
|
+
continue;
|
|
4067
|
+
if (!containsMention(reply.content, mentions))
|
|
4068
|
+
continue;
|
|
4069
|
+
out.push({ kind: "NEW_REPLY", comment, reply });
|
|
4070
|
+
}
|
|
4071
|
+
}
|
|
4072
|
+
return out;
|
|
4073
|
+
}
|
|
4074
|
+
function nextWatermark(comments, current) {
|
|
4075
|
+
let max = current;
|
|
4076
|
+
for (const c of comments) {
|
|
4077
|
+
if (c.modifiedTime && (!max || c.modifiedTime > max))
|
|
4078
|
+
max = c.modifiedTime;
|
|
4079
|
+
}
|
|
4080
|
+
return max;
|
|
4081
|
+
}
|
|
4082
|
+
function renderMentionBody(m, fileId) {
|
|
4083
|
+
const docUrl = `https://docs.google.com/document/d/${fileId}/edit`;
|
|
4084
|
+
const quoted = m.comment.quotedFileContent?.value ? `
|
|
4085
|
+
> ${m.comment.quotedFileContent.value}` : "";
|
|
4086
|
+
if (m.kind === "NEW_REPLY" && m.reply) {
|
|
4087
|
+
return `${m.reply.author?.displayName ?? "Someone"} replied in a comment thread on a Google Doc you watch and mentioned you:
|
|
4088
|
+
|
|
4089
|
+
${m.reply.content ?? ""}
|
|
4090
|
+
|
|
4091
|
+
Thread opener (${m.comment.author?.displayName ?? "unknown"}): ${m.comment.content ?? ""}${quoted}
|
|
4092
|
+
|
|
4093
|
+
Doc: ${docUrl} (comment id ${m.comment.id})`;
|
|
4094
|
+
}
|
|
4095
|
+
return `${m.comment.author?.displayName ?? "Someone"} mentioned you in a new comment on a Google Doc you watch:
|
|
4096
|
+
|
|
4097
|
+
${m.comment.content ?? ""}${quoted}
|
|
4098
|
+
|
|
4099
|
+
Doc: ${docUrl} (comment id ${m.comment.id})`;
|
|
4100
|
+
}
|
|
4101
|
+
var gdriveCommentsTriggerAdapter = {
|
|
4102
|
+
provider: "gdrive_comments",
|
|
4103
|
+
kind: "poll",
|
|
4104
|
+
async poll(ctx, trigger) {
|
|
4105
|
+
const config = trigger.config;
|
|
4106
|
+
const fileId = typeof config.fileId === "string" ? config.fileId : void 0;
|
|
4107
|
+
const mentions = Array.isArray(config.mention) ? config.mention.filter((m) => typeof m === "string" && m.length > 0) : [];
|
|
4108
|
+
if (!fileId || mentions.length === 0) {
|
|
4109
|
+
throw new Error("gdrive_comments: trigger config requires fileId and mention[]");
|
|
4110
|
+
}
|
|
4111
|
+
const fetcher = ctx.credentials;
|
|
4112
|
+
if (!fetcher || typeof fetcher.listComments !== "function") {
|
|
4113
|
+
throw new Error("gdrive_comments: executor must inject a DriveCommentsFetcher");
|
|
4114
|
+
}
|
|
4115
|
+
const cursor = ctx.cursor ?? {};
|
|
4116
|
+
const watermark = typeof cursor.modifiedTime === "string" ? cursor.modifiedTime : void 0;
|
|
4117
|
+
const threads = [];
|
|
4118
|
+
let pageToken;
|
|
4119
|
+
do {
|
|
4120
|
+
const page = await fetcher.listComments({
|
|
4121
|
+
fileId,
|
|
4122
|
+
...watermark ? { startModifiedTime: watermark } : {},
|
|
4123
|
+
...pageToken ? { pageToken } : {}
|
|
4124
|
+
});
|
|
4125
|
+
for (const c of page.comments ?? []) {
|
|
4126
|
+
if (watermark && c.modifiedTime && c.modifiedTime < watermark)
|
|
4127
|
+
continue;
|
|
4128
|
+
threads.push(c);
|
|
4129
|
+
}
|
|
4130
|
+
pageToken = page.nextPageToken;
|
|
4131
|
+
} while (pageToken);
|
|
4132
|
+
const events = classifyMentions(threads, watermark, mentions).map((m) => {
|
|
4133
|
+
const sourceId = m.kind === "NEW_REPLY" && m.reply ? `${m.comment.id}:${m.reply.id}:${m.reply.createdTime ?? ""}` : `${m.comment.id}:${m.comment.createdTime ?? ""}`;
|
|
4134
|
+
return {
|
|
4135
|
+
provider: "gdrive_comments",
|
|
4136
|
+
occurredAt: (m.kind === "NEW_REPLY" ? m.reply?.createdTime : m.comment.createdTime) ?? (/* @__PURE__ */ new Date()).toISOString(),
|
|
4137
|
+
// Keyed on the IMMUTABLE creation identity of the mention (not the
|
|
4138
|
+
// thread's rolling modifiedTime), so an unrelated later edit to the
|
|
4139
|
+
// same thread can never re-deliver the mention (AC2) and overlapping
|
|
4140
|
+
// polls / restarts collapse onto one row (AC3).
|
|
4141
|
+
dedupKey: `gdc:${sourceId}`,
|
|
4142
|
+
sourceTrust: "untrusted",
|
|
4143
|
+
title: m.kind === "NEW_COMMENT" ? "New comment mention" : "New reply mention",
|
|
4144
|
+
body: renderMentionBody(m, fileId),
|
|
4145
|
+
raw: m.kind === "NEW_REPLY" ? { comment: m.comment, reply: m.reply } : { comment: m.comment },
|
|
4146
|
+
meaningful: true
|
|
4147
|
+
};
|
|
4148
|
+
});
|
|
4149
|
+
return { events, cursor: { modifiedTime: nextWatermark(threads, watermark) } };
|
|
4150
|
+
}
|
|
4151
|
+
};
|
|
4152
|
+
registerTriggerSource(gdriveCommentsTriggerAdapter);
|
|
4153
|
+
|
|
4038
4154
|
export {
|
|
4039
4155
|
wrapScheduledTaskPrompt,
|
|
4040
4156
|
parseDeliveryTarget,
|
|
@@ -4085,4 +4201,4 @@ export {
|
|
|
4085
4201
|
attributeTranscriptUsageByRun,
|
|
4086
4202
|
KANBAN_CHECK_COMMAND
|
|
4087
4203
|
};
|
|
4088
|
-
//# sourceMappingURL=chunk-
|
|
4204
|
+
//# sourceMappingURL=chunk-5SWHKUL3.js.map
|