@tloncorp/openclaw 0.2.0 → 0.4.1
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/heartbeat-telemetry.js +155 -0
- package/dist/src/heartbeat-telemetry.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-candidate.js +109 -0
- package/dist/src/nudge-candidate.js.map +1 -0
- 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 +34 -24
|
@@ -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":"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"}
|
|
@@ -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();
|