@tloncorp/openclaw 0.2.0 → 0.4.0
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/README.md +232 -23
- package/dist/index.js +204 -69
- package/dist/index.js.map +1 -1
- package/dist/setup-api.js +3 -0
- package/dist/setup-api.js.map +1 -0
- package/dist/setup-entry.js +4 -0
- package/dist/setup-entry.js.map +1 -0
- package/dist/src/actions.js +30 -8
- package/dist/src/actions.js.map +1 -1
- package/dist/src/channel.js +155 -420
- package/dist/src/channel.js.map +1 -1
- package/dist/src/channel.runtime.js +142 -0
- package/dist/src/channel.runtime.js.map +1 -0
- package/dist/src/config-schema.js +37 -1
- package/dist/src/config-schema.js.map +1 -1
- package/dist/src/effective-owner.js +22 -0
- package/dist/src/effective-owner.js.map +1 -0
- package/dist/src/gateway-status.js +72 -0
- package/dist/src/gateway-status.js.map +1 -0
- package/dist/src/monitor/approval.js.map +1 -1
- package/dist/src/monitor/computing-presence.js +221 -0
- package/dist/src/monitor/computing-presence.js.map +1 -0
- package/dist/src/monitor/discovery.js +2 -2
- package/dist/src/monitor/index.js +665 -171
- package/dist/src/monitor/index.js.map +1 -1
- package/dist/src/monitor/media.js +165 -6
- package/dist/src/monitor/media.js.map +1 -1
- package/dist/src/monitor/nudge-runner.js +232 -0
- package/dist/src/monitor/nudge-runner.js.map +1 -0
- package/dist/src/monitor/nudge-state.js +58 -0
- package/dist/src/monitor/nudge-state.js.map +1 -0
- package/dist/src/monitor/owner-reply-persistence.js +92 -0
- package/dist/src/monitor/owner-reply-persistence.js.map +1 -0
- package/dist/src/monitor/pending-nudge-persistence.js +15 -0
- package/dist/src/monitor/pending-nudge-persistence.js.map +1 -0
- package/dist/src/monitor/settings-sync.js +28 -0
- package/dist/src/monitor/settings-sync.js.map +1 -0
- package/dist/src/monitor/utils.js +0 -4
- package/dist/src/monitor/utils.js.map +1 -1
- package/dist/src/nudge-decision.js +309 -0
- package/dist/src/nudge-decision.js.map +1 -0
- package/dist/src/nudge-messages.js +25 -0
- package/dist/src/nudge-messages.js.map +1 -0
- package/dist/src/nudge-scheduler.js +91 -0
- package/dist/src/nudge-scheduler.js.map +1 -0
- package/dist/src/pending-nudge.js +57 -0
- package/dist/src/pending-nudge.js.map +1 -0
- package/dist/src/settings.js +77 -5
- package/dist/src/settings.js.map +1 -1
- package/dist/src/setup-core.js +164 -0
- package/dist/src/setup-core.js.map +1 -0
- package/dist/src/setup-surface.js +85 -0
- package/dist/src/setup-surface.js.map +1 -0
- package/dist/src/telemetry.js +252 -0
- package/dist/src/telemetry.js.map +1 -0
- package/dist/src/tlon-binary.js +46 -0
- package/dist/src/tlon-binary.js.map +1 -0
- package/dist/src/tlon-tool-guard.js +44 -0
- package/dist/src/tlon-tool-guard.js.map +1 -0
- package/dist/src/tool-trace.js +100 -0
- package/dist/src/tool-trace.js.map +1 -0
- package/dist/src/types.js +31 -1
- package/dist/src/types.js.map +1 -1
- package/dist/src/urbit/api-client.js +4 -3
- package/dist/src/urbit/api-client.js.map +1 -1
- package/dist/src/urbit/base-url.js +2 -2
- package/dist/src/urbit/base-url.js.map +1 -1
- package/dist/src/urbit/fetch.js +1 -1
- package/dist/src/urbit/fetch.js.map +1 -1
- package/dist/src/urbit/upload.js +1 -1
- package/dist/src/urbit/upload.js.map +1 -1
- package/dist/src/version.generated.js +1 -1
- package/dist/src/version.generated.js.map +1 -1
- package/package.json +31 -24
- package/dist/src/onboarding.js +0 -178
- package/dist/src/onboarding.js.map +0 -1
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { monitorTlonProvider } from "./monitor/index.js";
|
|
2
|
+
import { tlonSetupWizard } from "./setup-surface.js";
|
|
3
|
+
import { formatTargetHint, normalizeShip, parseTlonTarget, } from "./targets.js";
|
|
4
|
+
import { resolveTlonAccount } from "./types.js";
|
|
5
|
+
import { authenticate } from "./urbit/auth.js";
|
|
6
|
+
import { withAuthenticatedTlonApi } from "./urbit/api-client.js";
|
|
7
|
+
import { ssrfPolicyFromAllowPrivateNetwork } from "./urbit/context.js";
|
|
8
|
+
import { urbitFetch } from "./urbit/fetch.js";
|
|
9
|
+
import { buildMediaStory, sendDm, sendDmWithStory, sendChannelPost, } from "./urbit/send.js";
|
|
10
|
+
import { uploadImageFromUrl } from "./urbit/upload.js";
|
|
11
|
+
import { markdownToStory } from "./urbit/story.js";
|
|
12
|
+
import { scry } from "@tloncorp/api";
|
|
13
|
+
// Cache for bot profiles per ship (supports multi-account setups)
|
|
14
|
+
const profileCache = new Map();
|
|
15
|
+
/**
|
|
16
|
+
* Get bot profile for outbound messages from the ship's Tlon profile.
|
|
17
|
+
* Caches per-ship to support multi-account configurations.
|
|
18
|
+
*/
|
|
19
|
+
async function getBotProfile(ship) {
|
|
20
|
+
if (profileCache.has(ship)) {
|
|
21
|
+
const cached = profileCache.get(ship);
|
|
22
|
+
if (cached && (cached.nickname || cached.avatar)) {
|
|
23
|
+
return cached;
|
|
24
|
+
}
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
const selfProfile = await scry({ app: "contacts", path: "/v1/self" });
|
|
29
|
+
const profile = {
|
|
30
|
+
nickname: selfProfile?.nickname?.value ?? "",
|
|
31
|
+
avatar: selfProfile?.avatar?.value ?? "",
|
|
32
|
+
};
|
|
33
|
+
profileCache.set(ship, profile);
|
|
34
|
+
if (profile.nickname || profile.avatar) {
|
|
35
|
+
console.log(`[tlon] Using self profile for bot meta (${ship}): ${profile.nickname || "(no nickname)"}`);
|
|
36
|
+
return profile;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
console.log(`[tlon] Could not fetch self profile for bot meta: ${err}`);
|
|
41
|
+
}
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
function resolveOutboundContext(params) {
|
|
45
|
+
const account = resolveTlonAccount(params.cfg, params.accountId ?? undefined);
|
|
46
|
+
if (!account.configured || !account.ship || !account.url || !account.code) {
|
|
47
|
+
throw new Error("Tlon account not configured");
|
|
48
|
+
}
|
|
49
|
+
const parsed = parseTlonTarget(params.to);
|
|
50
|
+
if (!parsed) {
|
|
51
|
+
throw new Error(`Invalid Tlon target. Use ${formatTargetHint()}`);
|
|
52
|
+
}
|
|
53
|
+
return { account: account, parsed };
|
|
54
|
+
}
|
|
55
|
+
function resolveReplyId(replyToId, threadId) {
|
|
56
|
+
return (replyToId ?? threadId) ? String(replyToId ?? threadId) : undefined;
|
|
57
|
+
}
|
|
58
|
+
export const tlonRuntimeOutbound = {
|
|
59
|
+
sendText: async ({ cfg, to, text, accountId, replyToId, threadId }) => {
|
|
60
|
+
const { account, parsed } = resolveOutboundContext({ cfg, accountId, to });
|
|
61
|
+
return await withAuthenticatedTlonApi({ url: account.url, code: account.code, ship: account.ship, allowPrivateNetwork: account.allowPrivateNetwork ?? undefined }, async () => {
|
|
62
|
+
const fromShip = normalizeShip(account.ship);
|
|
63
|
+
const replyId = resolveReplyId(replyToId, threadId);
|
|
64
|
+
const botProfile = await getBotProfile(fromShip);
|
|
65
|
+
if (parsed.kind === "dm") {
|
|
66
|
+
return await sendDm({ fromShip, toShip: parsed.ship, text, replyToId: replyId, botProfile });
|
|
67
|
+
}
|
|
68
|
+
return await sendChannelPost({
|
|
69
|
+
fromShip,
|
|
70
|
+
nest: parsed.nest,
|
|
71
|
+
story: markdownToStory(text),
|
|
72
|
+
replyToId: replyId,
|
|
73
|
+
botProfile,
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
},
|
|
77
|
+
sendMedia: async ({ cfg, to, text, mediaUrl, accountId, replyToId, threadId }) => {
|
|
78
|
+
const { account, parsed } = resolveOutboundContext({ cfg, accountId, to });
|
|
79
|
+
return await withAuthenticatedTlonApi({ url: account.url, code: account.code, ship: account.ship, allowPrivateNetwork: account.allowPrivateNetwork ?? undefined }, async () => {
|
|
80
|
+
const uploadedUrl = mediaUrl ? await uploadImageFromUrl(mediaUrl) : undefined;
|
|
81
|
+
const fromShip = normalizeShip(account.ship);
|
|
82
|
+
const story = buildMediaStory(text, uploadedUrl);
|
|
83
|
+
const replyId = resolveReplyId(replyToId, threadId);
|
|
84
|
+
const botProfile = await getBotProfile(fromShip);
|
|
85
|
+
if (parsed.kind === "dm") {
|
|
86
|
+
return await sendDmWithStory({ fromShip, toShip: parsed.ship, story, replyToId: replyId, botProfile });
|
|
87
|
+
}
|
|
88
|
+
return await sendChannelPost({
|
|
89
|
+
fromShip,
|
|
90
|
+
nest: parsed.nest,
|
|
91
|
+
story,
|
|
92
|
+
replyToId: replyId,
|
|
93
|
+
botProfile,
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
export async function probeTlonAccount(account) {
|
|
99
|
+
try {
|
|
100
|
+
const ssrfPolicy = ssrfPolicyFromAllowPrivateNetwork(account.allowPrivateNetwork);
|
|
101
|
+
const cookie = await authenticate(account.url, account.code, { ssrfPolicy });
|
|
102
|
+
const { response, release } = await urbitFetch({
|
|
103
|
+
baseUrl: account.url,
|
|
104
|
+
path: "/~/name",
|
|
105
|
+
init: {
|
|
106
|
+
method: "GET",
|
|
107
|
+
headers: { Cookie: cookie },
|
|
108
|
+
},
|
|
109
|
+
ssrfPolicy,
|
|
110
|
+
timeoutMs: 30_000,
|
|
111
|
+
auditContext: "tlon-probe-account",
|
|
112
|
+
});
|
|
113
|
+
try {
|
|
114
|
+
if (!response.ok) {
|
|
115
|
+
return { ok: false, error: `Name request failed: ${response.status}` };
|
|
116
|
+
}
|
|
117
|
+
return { ok: true };
|
|
118
|
+
}
|
|
119
|
+
finally {
|
|
120
|
+
await release();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
return { ok: false, error: error?.message ?? String(error) };
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
export async function startTlonGatewayAccount(ctx) {
|
|
128
|
+
const account = ctx.account;
|
|
129
|
+
ctx.setStatus({
|
|
130
|
+
accountId: account.accountId,
|
|
131
|
+
ship: account.ship,
|
|
132
|
+
url: account.url,
|
|
133
|
+
});
|
|
134
|
+
ctx.log?.info(`[${account.accountId}] starting Tlon provider for ${account.ship ?? "tlon"}`);
|
|
135
|
+
return monitorTlonProvider({
|
|
136
|
+
runtime: ctx.runtime,
|
|
137
|
+
abortSignal: ctx.abortSignal,
|
|
138
|
+
accountId: account.accountId,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
export { tlonSetupWizard };
|
|
142
|
+
//# sourceMappingURL=channel.runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel.runtime.js","sourceRoot":"","sources":["../../src/channel.runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { buildChannelConfigSchema } from "openclaw/plugin-sdk";
|
|
1
|
+
import { buildChannelConfigSchema } from "openclaw/plugin-sdk/tlon";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
const ShipSchema = z.string().min(1);
|
|
4
4
|
const ChannelNestSchema = z.string().min(1);
|
|
@@ -10,6 +10,34 @@ export const TlonAuthorizationSchema = z.object({
|
|
|
10
10
|
channelRules: z.record(z.string(), TlonChannelRuleSchema).optional(),
|
|
11
11
|
});
|
|
12
12
|
export const ReactionLevelSchema = z.enum(["off", "ack", "minimal", "extensive"]);
|
|
13
|
+
export const TlonTelemetrySchema = z.object({
|
|
14
|
+
enabled: z.boolean().optional(),
|
|
15
|
+
apiKey: z.string().min(1).optional(),
|
|
16
|
+
host: z.string().min(1).optional(),
|
|
17
|
+
});
|
|
18
|
+
/**
|
|
19
|
+
* Explicit opt-in for the plugin-driven owner re-engagement nudge scheduler.
|
|
20
|
+
*
|
|
21
|
+
* Default-off. The scheduler is hosted-only and requires `ownerShip` to
|
|
22
|
+
* target delivery, but `ownerShip` alone must not enable nudges (it also
|
|
23
|
+
* gates unrelated approval/admin DM flows). This flag is the authoritative
|
|
24
|
+
* enablement signal — see `tlonbot/entrypoint/tlawn.py` for the hosted
|
|
25
|
+
* generator that turns it on.
|
|
26
|
+
*/
|
|
27
|
+
export const TlonReengagementSchema = z.object({
|
|
28
|
+
enabled: z.boolean().optional(),
|
|
29
|
+
});
|
|
30
|
+
/**
|
|
31
|
+
* Static file-config override for the plugin scheduler's active-hours
|
|
32
|
+
* window. Takes precedence over `agents.defaults.heartbeat.activeHours`
|
|
33
|
+
* but defers to `%settings` keys (`nudgeActiveHoursStart/End/Timezone`)
|
|
34
|
+
* when those are present.
|
|
35
|
+
*/
|
|
36
|
+
export const TlonNudgeActiveHoursSchema = z.object({
|
|
37
|
+
start: z.string().min(1).optional(),
|
|
38
|
+
end: z.string().min(1).optional(),
|
|
39
|
+
timezone: z.string().min(1).optional(),
|
|
40
|
+
});
|
|
13
41
|
export const TlonAccountSchema = z.object({
|
|
14
42
|
name: z.string().optional(),
|
|
15
43
|
enabled: z.boolean().optional(),
|
|
@@ -30,6 +58,7 @@ export const TlonAccountSchema = z.object({
|
|
|
30
58
|
reactionLevel: ReactionLevelSchema.optional(),
|
|
31
59
|
// Rate limiting for bot-to-bot responses
|
|
32
60
|
maxConsecutiveBotResponses: z.number().int().min(0).optional(), // Max consecutive responses to another bot (default: 3)
|
|
61
|
+
telemetry: TlonTelemetrySchema.optional(),
|
|
33
62
|
});
|
|
34
63
|
export const TlonConfigSchema = z.object({
|
|
35
64
|
name: z.string().optional(),
|
|
@@ -54,6 +83,13 @@ export const TlonConfigSchema = z.object({
|
|
|
54
83
|
reactionLevel: ReactionLevelSchema.optional(),
|
|
55
84
|
// Rate limiting for bot-to-bot responses
|
|
56
85
|
maxConsecutiveBotResponses: z.number().int().min(0).optional(), // Max consecutive responses to another bot (default: 3)
|
|
86
|
+
telemetry: TlonTelemetrySchema.optional(),
|
|
87
|
+
// Opt-in hosted-only re-engagement nudges; absent/false keeps the
|
|
88
|
+
// scheduler off even when ownerShip is configured.
|
|
89
|
+
reengagement: TlonReengagementSchema.optional(),
|
|
90
|
+
// Optional static file-config override for the plugin scheduler's
|
|
91
|
+
// active hours. See TlonNudgeActiveHoursSchema for precedence.
|
|
92
|
+
nudgeActiveHours: TlonNudgeActiveHoursSchema.optional(),
|
|
57
93
|
});
|
|
58
94
|
export const tlonChannelConfigSchema = buildChannelConfigSchema(TlonConfigSchema);
|
|
59
95
|
//# sourceMappingURL=config-schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../../src/config-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../../src/config-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared effective-owner state.
|
|
3
|
+
*
|
|
4
|
+
* The monitor writes to this when ownerShip is loaded or hot-reloaded from
|
|
5
|
+
* the settings store. The heartbeat handler reads from it at event time.
|
|
6
|
+
*
|
|
7
|
+
* Follows the same module-level Map pattern as src/session-roles.ts.
|
|
8
|
+
*/
|
|
9
|
+
const effectiveOwners = new Map();
|
|
10
|
+
export function setEffectiveOwnerShip(accountId, ship) {
|
|
11
|
+
if (ship) {
|
|
12
|
+
effectiveOwners.set(accountId, ship);
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
effectiveOwners.delete(accountId);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export function getEffectiveOwnerShip(accountId) {
|
|
19
|
+
return effectiveOwners.get(accountId) ?? null;
|
|
20
|
+
}
|
|
21
|
+
export const _testing = { clearAll: () => effectiveOwners.clear() };
|
|
22
|
+
//# sourceMappingURL=effective-owner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effective-owner.js","sourceRoot":"","sources":["../../src/effective-owner.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;AAElD,MAAM,UAAU,qBAAqB,CAAC,SAAiB,EAAE,IAAmB;IAC1E,IAAI,IAAI,EAAE,CAAC;QACT,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,SAAiB;IACrD,OAAO,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { gatewayHeartbeat } from "@tloncorp/api";
|
|
3
|
+
// ── Constants (matching design doc recommendations) ─────────
|
|
4
|
+
const HEARTBEAT_INTERVAL_MS = 30_000; // 30s
|
|
5
|
+
const LEASE_DURATION_MS = 90_000; // 90s
|
|
6
|
+
export const ACTIVE_WINDOW_SECS = 300; // 5 min
|
|
7
|
+
export const OFFLINE_REPLY_COOLDOWN_SECS = 300; // 5 min
|
|
8
|
+
export function computeLeaseUntil() {
|
|
9
|
+
return Date.now() + LEASE_DURATION_MS;
|
|
10
|
+
}
|
|
11
|
+
// ── Factory ─────────────────────────────────────────────────
|
|
12
|
+
export function createGatewayStatusManager(opts) {
|
|
13
|
+
const bootId = randomUUID();
|
|
14
|
+
let heartbeatInterval = null;
|
|
15
|
+
let activated = false;
|
|
16
|
+
let stopped = false;
|
|
17
|
+
let resolveStarted;
|
|
18
|
+
const startedPromise = new Promise((r) => {
|
|
19
|
+
resolveStarted = r;
|
|
20
|
+
});
|
|
21
|
+
return {
|
|
22
|
+
bootId,
|
|
23
|
+
signalGatewayStarted() {
|
|
24
|
+
resolveStarted();
|
|
25
|
+
},
|
|
26
|
+
waitForGatewayStart() {
|
|
27
|
+
return startedPromise;
|
|
28
|
+
},
|
|
29
|
+
get activated() {
|
|
30
|
+
return activated;
|
|
31
|
+
},
|
|
32
|
+
markActivated() {
|
|
33
|
+
activated = true;
|
|
34
|
+
},
|
|
35
|
+
get stopped() {
|
|
36
|
+
return stopped;
|
|
37
|
+
},
|
|
38
|
+
markStopped() {
|
|
39
|
+
stopped = true;
|
|
40
|
+
},
|
|
41
|
+
startHeartbeat() {
|
|
42
|
+
if (stopped || !activated || heartbeatInterval) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
heartbeatInterval = setInterval(async () => {
|
|
46
|
+
try {
|
|
47
|
+
await gatewayHeartbeat({ bootId, leaseUntil: computeLeaseUntil() });
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
opts.logger?.error?.(`[gateway-status] heartbeat failed: ${String(err)}`);
|
|
51
|
+
}
|
|
52
|
+
}, HEARTBEAT_INTERVAL_MS);
|
|
53
|
+
opts.logger?.log?.(`[gateway-status] heartbeat started (interval=${HEARTBEAT_INTERVAL_MS}ms)`);
|
|
54
|
+
},
|
|
55
|
+
stopHeartbeat() {
|
|
56
|
+
if (heartbeatInterval) {
|
|
57
|
+
clearInterval(heartbeatInterval);
|
|
58
|
+
heartbeatInterval = null;
|
|
59
|
+
opts.logger?.log?.("[gateway-status] heartbeat stopped");
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
// ── Module-level accessor (same pattern as setTlonRuntime) ──
|
|
65
|
+
let _manager = null;
|
|
66
|
+
export function setGatewayStatusManager(m) {
|
|
67
|
+
_manager = m;
|
|
68
|
+
}
|
|
69
|
+
export function getGatewayStatusManager() {
|
|
70
|
+
return _manager;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=gateway-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-status.js","sourceRoot":"","sources":["../../src/gateway-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,+DAA+D;AAC/D,MAAM,qBAAqB,GAAG,MAAM,CAAC,CAAC,MAAM;AAC5C,MAAM,iBAAiB,GAAG,MAAM,CAAC,CAAC,MAAM;AACxC,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC,CAAC,QAAQ;AAC/C,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAC,CAAC,QAAQ;AAExD,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,iBAAiB,CAAC;AACxC,CAAC;AA2BD,+DAA+D;AAC/D,MAAM,UAAU,0BAA0B,CAAC,IAE1C;IACC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,iBAAiB,GAA0C,IAAI,CAAC;IACpE,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,IAAI,cAA0B,CAAC;IAC/B,MAAM,cAAc,GAAG,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE;QAC7C,cAAc,GAAG,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,MAAM;QAEN,oBAAoB;YAClB,cAAc,EAAE,CAAC;QACnB,CAAC;QACD,mBAAmB;YACjB,OAAO,cAAc,CAAC;QACxB,CAAC;QAED,IAAI,SAAS;YACX,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,aAAa;YACX,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QAED,IAAI,OAAO;YACT,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,WAAW;YACT,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QAED,cAAc;YACZ,IAAI,OAAO,IAAI,CAAC,SAAS,IAAI,iBAAiB,EAAE,CAAC;gBAC/C,OAAO;YACT,CAAC;YACD,iBAAiB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;gBACzC,IAAI,CAAC;oBACH,MAAM,gBAAgB,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAC;gBACtE,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,sCAAsC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC5E,CAAC;YACH,CAAC,EAAE,qBAAqB,CAAC,CAAC;YAC1B,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,gDAAgD,qBAAqB,KAAK,CAAC,CAAC;QACjG,CAAC;QAED,aAAa;YACX,IAAI,iBAAiB,EAAE,CAAC;gBACtB,aAAa,CAAC,iBAAiB,CAAC,CAAC;gBACjC,iBAAiB,GAAG,IAAI,CAAC;gBACzB,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,oCAAoC,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,IAAI,QAAQ,GAAgC,IAAI,CAAC;AAEjD,MAAM,UAAU,uBAAuB,CAAC,CAA8B;IACpE,QAAQ,GAAG,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval.js","sourceRoot":"","sources":["../../../src/monitor/approval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"approval.js","sourceRoot":"","sources":["../../../src/monitor/approval.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { createComputingStatus, getComputingStatusText, serializeComputingStatus, setConversationPresence, } from "@tloncorp/api";
|
|
2
|
+
const DEFAULT_MIN_UPDATE_INTERVAL_MS = 1_000;
|
|
3
|
+
function normalizeToolName(toolName) {
|
|
4
|
+
const trimmed = toolName?.trim();
|
|
5
|
+
return trimmed ? trimmed : null;
|
|
6
|
+
}
|
|
7
|
+
export function createComputingPresenceReporter() {
|
|
8
|
+
return {
|
|
9
|
+
publish: async ({ conversationId, thinking, toolNames }) => {
|
|
10
|
+
const toolCalls = toolNames.map((toolName) => ({ toolName }));
|
|
11
|
+
const status = createComputingStatus({ thinking, toolCalls });
|
|
12
|
+
await setConversationPresence({
|
|
13
|
+
conversationId,
|
|
14
|
+
topic: "computing",
|
|
15
|
+
disclose: [],
|
|
16
|
+
display: {
|
|
17
|
+
text: getComputingStatusText(status),
|
|
18
|
+
blob: serializeComputingStatus({ thinking, toolCalls }),
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function createComputingPresenceTracker(params) {
|
|
25
|
+
const reporter = params?.reporter ?? createComputingPresenceReporter();
|
|
26
|
+
const runtime = params?.runtime;
|
|
27
|
+
const minUpdateIntervalMs = Math.max(0, params?.minUpdateIntervalMs ?? DEFAULT_MIN_UPDATE_INTERVAL_MS);
|
|
28
|
+
const conversations = new Map();
|
|
29
|
+
const lastPublishedState = new Map();
|
|
30
|
+
const lastPublishedAt = new Map();
|
|
31
|
+
const pendingState = new Map();
|
|
32
|
+
const pendingTimers = new Map();
|
|
33
|
+
const clonePublishedState = (state) => ({
|
|
34
|
+
thinking: state.thinking,
|
|
35
|
+
toolNames: [...state.toolNames],
|
|
36
|
+
});
|
|
37
|
+
const statesEqual = (left, right) => {
|
|
38
|
+
if (!left || !right) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
if (left.thinking !== right.thinking) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
if (left.toolNames.length !== right.toolNames.length) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
for (let index = 0; index < left.toolNames.length; index += 1) {
|
|
48
|
+
if (left.toolNames[index] !== right.toolNames[index]) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return true;
|
|
53
|
+
};
|
|
54
|
+
const clearPending = (conversationId) => {
|
|
55
|
+
const timer = pendingTimers.get(conversationId);
|
|
56
|
+
if (timer) {
|
|
57
|
+
clearTimeout(timer);
|
|
58
|
+
pendingTimers.delete(conversationId);
|
|
59
|
+
}
|
|
60
|
+
pendingState.delete(conversationId);
|
|
61
|
+
};
|
|
62
|
+
const publishNow = async (conversationId, state) => {
|
|
63
|
+
clearPending(conversationId);
|
|
64
|
+
await reporter.publish({
|
|
65
|
+
conversationId,
|
|
66
|
+
...state,
|
|
67
|
+
});
|
|
68
|
+
lastPublishedState.set(conversationId, clonePublishedState(state));
|
|
69
|
+
lastPublishedAt.set(conversationId, Date.now());
|
|
70
|
+
};
|
|
71
|
+
const flushPending = async (conversationId) => {
|
|
72
|
+
const nextState = pendingState.get(conversationId);
|
|
73
|
+
clearPending(conversationId);
|
|
74
|
+
if (!nextState) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (statesEqual(lastPublishedState.get(conversationId), nextState)) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
await publishNow(conversationId, nextState);
|
|
81
|
+
};
|
|
82
|
+
const publishThrottled = async (conversationId, state) => {
|
|
83
|
+
if (statesEqual(lastPublishedState.get(conversationId), state)) {
|
|
84
|
+
clearPending(conversationId);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (minUpdateIntervalMs === 0) {
|
|
88
|
+
await publishNow(conversationId, state);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const now = Date.now();
|
|
92
|
+
const nextAllowedAt = (lastPublishedAt.get(conversationId) ?? 0) + minUpdateIntervalMs;
|
|
93
|
+
if (now >= nextAllowedAt) {
|
|
94
|
+
await publishNow(conversationId, state);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
pendingState.set(conversationId, clonePublishedState(state));
|
|
98
|
+
if (pendingTimers.has(conversationId)) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const timer = setTimeout(() => {
|
|
102
|
+
pendingTimers.delete(conversationId);
|
|
103
|
+
void safelySync(conversationId, "flush", async () => {
|
|
104
|
+
await flushPending(conversationId);
|
|
105
|
+
});
|
|
106
|
+
}, nextAllowedAt - now);
|
|
107
|
+
pendingTimers.set(conversationId, timer);
|
|
108
|
+
};
|
|
109
|
+
const syncConversation = async (conversationId) => {
|
|
110
|
+
const runs = conversations.get(conversationId);
|
|
111
|
+
const previousState = lastPublishedState.get(conversationId);
|
|
112
|
+
if (!runs || runs.size === 0) {
|
|
113
|
+
conversations.delete(conversationId);
|
|
114
|
+
if (previousState?.thinking) {
|
|
115
|
+
await publishNow(conversationId, {
|
|
116
|
+
thinking: false,
|
|
117
|
+
toolNames: [],
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const seenToolNames = new Set();
|
|
123
|
+
const toolNames = [];
|
|
124
|
+
for (const run of runs.values()) {
|
|
125
|
+
for (const toolName of run.toolNames) {
|
|
126
|
+
if (seenToolNames.has(toolName)) {
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
seenToolNames.add(toolName);
|
|
130
|
+
toolNames.push(toolName);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const currentState = {
|
|
134
|
+
thinking: true,
|
|
135
|
+
toolNames,
|
|
136
|
+
};
|
|
137
|
+
if (!previousState || !previousState.thinking) {
|
|
138
|
+
await publishNow(conversationId, currentState);
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
await publishThrottled(conversationId, currentState);
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
const getRun = (conversationId, runId) => conversations.get(conversationId)?.get(runId);
|
|
145
|
+
const ensureRun = (conversationId, runId) => {
|
|
146
|
+
let runs = conversations.get(conversationId);
|
|
147
|
+
if (!runs) {
|
|
148
|
+
runs = new Map();
|
|
149
|
+
conversations.set(conversationId, runs);
|
|
150
|
+
}
|
|
151
|
+
let run = runs.get(runId);
|
|
152
|
+
if (!run) {
|
|
153
|
+
run = {
|
|
154
|
+
toolNames: [],
|
|
155
|
+
};
|
|
156
|
+
runs.set(runId, run);
|
|
157
|
+
}
|
|
158
|
+
return run;
|
|
159
|
+
};
|
|
160
|
+
const safelySync = async (conversationId, action, fn) => {
|
|
161
|
+
try {
|
|
162
|
+
await fn();
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
runtime?.error?.(`[tlon] Failed to ${action} computing presence for ${conversationId}: ${error instanceof Error
|
|
166
|
+
? (error.stack ?? error.message)
|
|
167
|
+
: String(error)}`);
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
return {
|
|
171
|
+
refreshRun: async (params) => {
|
|
172
|
+
await safelySync(params.conversationId, "refresh", async () => {
|
|
173
|
+
ensureRun(params.conversationId, params.runId);
|
|
174
|
+
await syncConversation(params.conversationId);
|
|
175
|
+
});
|
|
176
|
+
},
|
|
177
|
+
addToolCall: async (params) => {
|
|
178
|
+
const toolName = normalizeToolName(params.toolName);
|
|
179
|
+
if (!toolName) {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
await safelySync(params.conversationId, "update", async () => {
|
|
183
|
+
const run = ensureRun(params.conversationId, params.runId);
|
|
184
|
+
if (!run.toolNames.includes(toolName)) {
|
|
185
|
+
run.toolNames.push(toolName);
|
|
186
|
+
}
|
|
187
|
+
await syncConversation(params.conversationId);
|
|
188
|
+
});
|
|
189
|
+
},
|
|
190
|
+
clearToolCalls: async (params) => {
|
|
191
|
+
await safelySync(params.conversationId, "clear tools for", async () => {
|
|
192
|
+
const run = getRun(params.conversationId, params.runId);
|
|
193
|
+
if (!run || run.toolNames.length === 0) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
run.toolNames = [];
|
|
197
|
+
await syncConversation(params.conversationId);
|
|
198
|
+
});
|
|
199
|
+
},
|
|
200
|
+
stopRun: async (params) => {
|
|
201
|
+
await safelySync(params.conversationId, "clear", async () => {
|
|
202
|
+
const runs = conversations.get(params.conversationId);
|
|
203
|
+
if (!runs) {
|
|
204
|
+
if (lastPublishedState.get(params.conversationId)?.thinking) {
|
|
205
|
+
await publishNow(params.conversationId, {
|
|
206
|
+
thinking: false,
|
|
207
|
+
toolNames: [],
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
runs.delete(params.runId);
|
|
213
|
+
if (runs.size === 0) {
|
|
214
|
+
conversations.delete(params.conversationId);
|
|
215
|
+
}
|
|
216
|
+
await syncConversation(params.conversationId);
|
|
217
|
+
});
|
|
218
|
+
},
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=computing-presence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computing-presence.js","sourceRoot":"","sources":["../../../src/monitor/computing-presence.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,eAAe,CAAC;AAevB,MAAM,8BAA8B,GAAG,KAAK,CAAC;AAM7C,SAAS,iBAAiB,CAAC,QAAwB;IACjD,MAAM,OAAO,GAAG,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjC,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,+BAA+B;IAC7C,OAAO;QACL,OAAO,EAAE,KAAK,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;YACzD,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,qBAAqB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;YAE9D,MAAM,uBAAuB,CAAC;gBAC5B,cAAc;gBACd,KAAK,EAAE,WAAW;gBAClB,QAAQ,EAAE,EAAE;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,sBAAsB,CAAC,MAAM,CAAC;oBACpC,IAAI,EAAE,wBAAwB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;iBACxD;aACF,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,MAI9C;IACC,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,IAAI,+BAA+B,EAAE,CAAC;IACvE,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,CAAC;IAChC,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAClC,CAAC,EACD,MAAM,EAAE,mBAAmB,IAAI,8BAA8B,CAC9D,CAAC;IACF,MAAM,aAAa,GAAG,IAAI,GAAG,EAAiC,CAAC;IAC/D,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC7D,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;IAClD,MAAM,YAAY,GAAG,IAAI,GAAG,EAA0B,CAAC;IACvD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAyC,CAAC;IAEvE,MAAM,mBAAmB,GAAG,CAAC,KAAqB,EAAkB,EAAE,CAAC,CAAC;QACtE,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,SAAS,EAAE,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC;KAChC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,CAAC,IAAqB,EAAE,KAAsB,EAAE,EAAE;QACpE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YACrD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC9D,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrD,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,cAAsB,EAAE,EAAE;QAC9C,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAChD,IAAI,KAAK,EAAE,CAAC;YACV,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACvC,CAAC;QAED,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACtC,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,KAAK,EAAE,cAAsB,EAAE,KAAqB,EAAE,EAAE;QACzE,YAAY,CAAC,cAAc,CAAC,CAAC;QAC7B,MAAM,QAAQ,CAAC,OAAO,CAAC;YACrB,cAAc;YACd,GAAG,KAAK;SACT,CAAC,CAAC;QACH,kBAAkB,CAAC,GAAG,CAAC,cAAc,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QACnE,eAAe,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAClD,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,KAAK,EAAE,cAAsB,EAAE,EAAE;QACpD,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACnD,YAAY,CAAC,cAAc,CAAC,CAAC;QAE7B,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,IAAI,WAAW,CAAC,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;YACnE,OAAO;QACT,CAAC;QAED,MAAM,UAAU,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAC9C,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,KAAK,EAC5B,cAAsB,EACtB,KAAqB,EACrB,EAAE;QACF,IAAI,WAAW,CAAC,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;YAC/D,YAAY,CAAC,cAAc,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,IAAI,mBAAmB,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,UAAU,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,aAAa,GACjB,CAAC,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,mBAAmB,CAAC;QACnE,IAAI,GAAG,IAAI,aAAa,EAAE,CAAC;YACzB,MAAM,UAAU,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QAED,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7D,IAAI,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;YACtC,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACrC,KAAK,UAAU,CAAC,cAAc,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE;gBAClD,MAAM,YAAY,CAAC,cAAc,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,aAAa,GAAG,GAAG,CAAC,CAAC;QACxB,aAAa,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,KAAK,EAAE,cAAsB,EAAE,EAAE;QACxD,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC/C,MAAM,aAAa,GAAG,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAE7D,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC7B,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACrC,IAAI,aAAa,EAAE,QAAQ,EAAE,CAAC;gBAC5B,MAAM,UAAU,CAAC,cAAc,EAAE;oBAC/B,QAAQ,EAAE,KAAK;oBACf,SAAS,EAAE,EAAE;iBACd,CAAC,CAAC;YACL,CAAC;YAED,OAAO;QACT,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QACxC,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YAChC,KAAK,MAAM,QAAQ,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBACrC,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAChC,SAAS;gBACX,CAAC;gBAED,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC5B,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,MAAM,YAAY,GAAmB;YACnC,QAAQ,EAAE,IAAI;YACd,SAAS;SACV,CAAC;QAEF,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC9C,MAAM,UAAU,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,MAAM,gBAAgB,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QACvD,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,CAAC,cAAsB,EAAE,KAAa,EAAE,EAAE,CACvD,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IAEhD,MAAM,SAAS,GAAG,CAAC,cAAsB,EAAE,KAAa,EAAE,EAAE;QAC1D,IAAI,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;YACjB,aAAa,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,GAAG;gBACJ,SAAS,EAAE,EAAE;aACd,CAAC;YACF,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACvB,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,KAAK,EACtB,cAAsB,EACtB,MAAc,EACd,EAAuB,EACvB,EAAE;QACF,IAAI,CAAC;YACH,MAAM,EAAE,EAAE,CAAC;QACb,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,KAAK,EAAE,CACd,oBAAoB,MAAM,2BAA2B,cAAc,KACjE,KAAK,YAAY,KAAK;gBACpB,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC;gBAChC,CAAC,CAAC,MAAM,CAAC,KAAK,CAClB,EAAE,CACH,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,UAAU,EAAE,KAAK,EAAE,MAAiD,EAAE,EAAE;YACtE,MAAM,UAAU,CAAC,MAAM,CAAC,cAAc,EAAE,SAAS,EAAE,KAAK,IAAI,EAAE;gBAC5D,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC/C,MAAM,gBAAgB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;QACL,CAAC;QAED,WAAW,EAAE,KAAK,EAAE,MAInB,EAAE,EAAE;YACH,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACpD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO;YACT,CAAC;YAED,MAAM,UAAU,CAAC,MAAM,CAAC,cAAc,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE;gBAC3D,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC3D,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACtC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC/B,CAAC;gBACD,MAAM,gBAAgB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;QACL,CAAC;QAED,cAAc,EAAE,KAAK,EAAE,MAGtB,EAAE,EAAE;YACH,MAAM,UAAU,CAAC,MAAM,CAAC,cAAc,EAAE,iBAAiB,EAAE,KAAK,IAAI,EAAE;gBACpE,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBACxD,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvC,OAAO;gBACT,CAAC;gBAED,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC;gBACnB,MAAM,gBAAgB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,MAAiD,EAAE,EAAE;YACnE,MAAM,UAAU,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE;gBAC1D,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBACtD,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,IAAI,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC;wBAC5D,MAAM,UAAU,CAAC,MAAM,CAAC,cAAc,EAAE;4BACtC,QAAQ,EAAE,KAAK;4BACf,SAAS,EAAE,EAAE;yBACd,CAAC,CAAC;oBACL,CAAC;oBACD,OAAO;gBACT,CAAC;gBAED,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;oBACpB,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBAC9C,CAAC;gBAED,MAAM,gBAAgB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -3,7 +3,7 @@ export async function fetchGroupChanges(api, runtime, daysAgo = 5) {
|
|
|
3
3
|
try {
|
|
4
4
|
const changeDate = formatChangesDate(daysAgo);
|
|
5
5
|
runtime.log?.(`[tlon] Fetching group changes since ${daysAgo} days ago (${changeDate})...`);
|
|
6
|
-
const changes = await api.scry(`/groups-ui/
|
|
6
|
+
const changes = await api.scry(`/groups-ui/v8/changes/${changeDate}.json`);
|
|
7
7
|
if (changes) {
|
|
8
8
|
runtime.log?.("[tlon] Successfully fetched changes data");
|
|
9
9
|
return changes;
|
|
@@ -22,7 +22,7 @@ export async function fetchGroupChanges(api, runtime, daysAgo = 5) {
|
|
|
22
22
|
export async function fetchInitData(api, runtime) {
|
|
23
23
|
try {
|
|
24
24
|
runtime.log?.("[tlon] Fetching groups-ui init data...");
|
|
25
|
-
const initData = (await api.scry("/groups-ui/
|
|
25
|
+
const initData = (await api.scry("/groups-ui/v7/init.json"));
|
|
26
26
|
const channels = [];
|
|
27
27
|
const channelToGroup = new Map();
|
|
28
28
|
const groupNames = new Map();
|