@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.
Files changed (76) hide show
  1. package/README.md +232 -23
  2. package/dist/index.js +204 -69
  3. package/dist/index.js.map +1 -1
  4. package/dist/setup-api.js +3 -0
  5. package/dist/setup-api.js.map +1 -0
  6. package/dist/setup-entry.js +4 -0
  7. package/dist/setup-entry.js.map +1 -0
  8. package/dist/src/actions.js +30 -8
  9. package/dist/src/actions.js.map +1 -1
  10. package/dist/src/channel.js +155 -420
  11. package/dist/src/channel.js.map +1 -1
  12. package/dist/src/channel.runtime.js +142 -0
  13. package/dist/src/channel.runtime.js.map +1 -0
  14. package/dist/src/config-schema.js +37 -1
  15. package/dist/src/config-schema.js.map +1 -1
  16. package/dist/src/effective-owner.js +22 -0
  17. package/dist/src/effective-owner.js.map +1 -0
  18. package/dist/src/gateway-status.js +72 -0
  19. package/dist/src/gateway-status.js.map +1 -0
  20. package/dist/src/monitor/approval.js.map +1 -1
  21. package/dist/src/monitor/computing-presence.js +221 -0
  22. package/dist/src/monitor/computing-presence.js.map +1 -0
  23. package/dist/src/monitor/discovery.js +2 -2
  24. package/dist/src/monitor/index.js +665 -171
  25. package/dist/src/monitor/index.js.map +1 -1
  26. package/dist/src/monitor/media.js +165 -6
  27. package/dist/src/monitor/media.js.map +1 -1
  28. package/dist/src/monitor/nudge-runner.js +232 -0
  29. package/dist/src/monitor/nudge-runner.js.map +1 -0
  30. package/dist/src/monitor/nudge-state.js +58 -0
  31. package/dist/src/monitor/nudge-state.js.map +1 -0
  32. package/dist/src/monitor/owner-reply-persistence.js +92 -0
  33. package/dist/src/monitor/owner-reply-persistence.js.map +1 -0
  34. package/dist/src/monitor/pending-nudge-persistence.js +15 -0
  35. package/dist/src/monitor/pending-nudge-persistence.js.map +1 -0
  36. package/dist/src/monitor/settings-sync.js +28 -0
  37. package/dist/src/monitor/settings-sync.js.map +1 -0
  38. package/dist/src/monitor/utils.js +0 -4
  39. package/dist/src/monitor/utils.js.map +1 -1
  40. package/dist/src/nudge-decision.js +309 -0
  41. package/dist/src/nudge-decision.js.map +1 -0
  42. package/dist/src/nudge-messages.js +25 -0
  43. package/dist/src/nudge-messages.js.map +1 -0
  44. package/dist/src/nudge-scheduler.js +91 -0
  45. package/dist/src/nudge-scheduler.js.map +1 -0
  46. package/dist/src/pending-nudge.js +57 -0
  47. package/dist/src/pending-nudge.js.map +1 -0
  48. package/dist/src/settings.js +77 -5
  49. package/dist/src/settings.js.map +1 -1
  50. package/dist/src/setup-core.js +164 -0
  51. package/dist/src/setup-core.js.map +1 -0
  52. package/dist/src/setup-surface.js +85 -0
  53. package/dist/src/setup-surface.js.map +1 -0
  54. package/dist/src/telemetry.js +252 -0
  55. package/dist/src/telemetry.js.map +1 -0
  56. package/dist/src/tlon-binary.js +46 -0
  57. package/dist/src/tlon-binary.js.map +1 -0
  58. package/dist/src/tlon-tool-guard.js +44 -0
  59. package/dist/src/tlon-tool-guard.js.map +1 -0
  60. package/dist/src/tool-trace.js +100 -0
  61. package/dist/src/tool-trace.js.map +1 -0
  62. package/dist/src/types.js +31 -1
  63. package/dist/src/types.js.map +1 -1
  64. package/dist/src/urbit/api-client.js +4 -3
  65. package/dist/src/urbit/api-client.js.map +1 -1
  66. package/dist/src/urbit/base-url.js +2 -2
  67. package/dist/src/urbit/base-url.js.map +1 -1
  68. package/dist/src/urbit/fetch.js +1 -1
  69. package/dist/src/urbit/fetch.js.map +1 -1
  70. package/dist/src/urbit/upload.js +1 -1
  71. package/dist/src/urbit/upload.js.map +1 -1
  72. package/dist/src/version.generated.js +1 -1
  73. package/dist/src/version.generated.js.map +1 -1
  74. package/package.json +31 -24
  75. package/dist/src/onboarding.js +0 -178
  76. package/dist/src/onboarding.js.map +0 -1
@@ -1,448 +1,183 @@
1
- import { applyAccountNameToChannelSection, DEFAULT_ACCOUNT_ID, normalizeAccountId, } from "openclaw/plugin-sdk";
2
- import { buildTlonAccountFields } from "./account-fields.js";
1
+ import { DEFAULT_ACCOUNT_ID } from "openclaw/plugin-sdk/tlon";
2
+ import { createChatChannelPlugin } from "openclaw/plugin-sdk/core";
3
+ import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
4
+ import { createHybridChannelConfigAdapter } from "openclaw/plugin-sdk/channel-config-helpers";
5
+ import { createRuntimeOutboundDelegates } from "openclaw/plugin-sdk/outbound-runtime";
6
+ import { createComputedAccountStatusAdapter, createDefaultChannelRuntimeState, } from "openclaw/plugin-sdk/status-helpers";
7
+ import { describeAccountSnapshot } from "openclaw/plugin-sdk/account-helpers";
3
8
  import { tlonChannelConfigSchema } from "./config-schema.js";
4
- import { monitorTlonProvider } from "./monitor/index.js";
5
- import { tlonOnboardingAdapter } from "./onboarding.js";
6
- import { formatTargetHint, normalizeShip, parseTlonTarget } from "./targets.js";
9
+ import { createTlonSetupWizardBase, tlonSetupAdapter, } from "./setup-core.js";
10
+ import { formatTargetHint, normalizeShip, parseTlonTarget, } from "./targets.js";
7
11
  import { resolveTlonAccount, listTlonAccountIds } from "./types.js";
8
- import { authenticate } from "./urbit/auth.js";
9
- import { withAuthenticatedTlonApi } from "./urbit/api-client.js";
10
- import { ssrfPolicyFromAllowPrivateNetwork } from "./urbit/context.js";
11
- import { urbitFetch } from "./urbit/fetch.js";
12
- import { buildMediaStory, sendDm, sendDmWithStory, sendChannelPost, } from "./urbit/send.js";
13
- import { uploadImageFromUrl } from "./urbit/upload.js";
14
12
  import { tlonMessageActions } from "./actions.js";
15
- import { markdownToStory } from "./urbit/story.js";
16
- import { scry } from "@tloncorp/api";
17
13
  const TLON_CHANNEL_ID = "tlon";
18
- // Cache for bot profiles per ship (supports multi-account setups)
19
- const profileCache = new Map();
20
- /**
21
- * Get bot profile for outbound messages from the ship's Tlon profile.
22
- * Caches per-ship to support multi-account configurations.
23
- */
24
- async function getBotProfile(ship) {
25
- // Try to use cached profile for this ship
26
- if (profileCache.has(ship)) {
27
- const cached = profileCache.get(ship);
28
- if (cached && (cached.nickname || cached.avatar)) {
29
- return cached;
30
- }
31
- return undefined; // Already fetched, nothing found
32
- }
33
- // Fetch self profile (runs inside authenticated context)
34
- try {
35
- const selfProfile = await scry({ app: "contacts", path: "/v1/self" });
36
- const profile = {
37
- nickname: selfProfile?.nickname?.value ?? "",
38
- avatar: selfProfile?.avatar?.value ?? "",
39
- };
40
- profileCache.set(ship, profile);
41
- if (profile.nickname || profile.avatar) {
42
- console.log(`[tlon] Using self profile for bot meta (${ship}): ${profile.nickname || "(no nickname)"}`);
43
- return profile;
44
- }
45
- }
46
- catch (err) {
47
- console.log(`[tlon] Could not fetch self profile for bot meta: ${err}`);
48
- // Don't cache failures - allow retry on next send
49
- }
50
- return undefined;
51
- }
52
- function applyTlonSetupConfig(params) {
53
- const { cfg, accountId, input } = params;
54
- const useDefault = accountId === DEFAULT_ACCOUNT_ID;
55
- const namedConfig = applyAccountNameToChannelSection({
14
+ const loadTlonChannelRuntime = createLazyRuntimeModule(() => import("./channel.runtime.js"));
15
+ const tlonSetupWizardProxy = createTlonSetupWizardBase({
16
+ resolveConfigured: async ({ cfg }) => await (await loadTlonChannelRuntime()).tlonSetupWizard.status.resolveConfigured({ cfg }),
17
+ resolveStatusLines: async ({ cfg, configured }) => (await (await loadTlonChannelRuntime()).tlonSetupWizard.status.resolveStatusLines?.({
56
18
  cfg,
57
- channelKey: "tlon",
58
- accountId,
59
- name: input.name,
60
- });
61
- const base = namedConfig.channels?.tlon ?? {};
62
- const payload = buildTlonAccountFields(input);
63
- if (useDefault) {
64
- return {
65
- ...namedConfig,
66
- channels: {
67
- ...namedConfig.channels,
68
- tlon: {
69
- ...base,
70
- enabled: true,
71
- ...payload,
72
- },
73
- },
74
- };
75
- }
76
- return {
77
- ...namedConfig,
78
- channels: {
79
- ...namedConfig.channels,
80
- tlon: {
81
- ...base,
82
- enabled: base.enabled ?? true,
83
- accounts: {
84
- ...base.accounts,
85
- [accountId]: {
86
- ...base.accounts?.[accountId],
87
- enabled: true,
88
- ...payload,
89
- },
90
- },
91
- },
92
- },
93
- };
94
- }
95
- const tlonOutbound = {
96
- deliveryMode: "direct",
97
- textChunkLimit: 10000,
98
- resolveTarget: ({ to }) => {
99
- const parsed = parseTlonTarget(to ?? "");
100
- if (!parsed) {
101
- return {
102
- ok: false,
103
- error: new Error(`Invalid Tlon target. Use ${formatTargetHint()}`),
104
- };
105
- }
106
- if (parsed.kind === "dm") {
107
- return { ok: true, to: parsed.ship };
108
- }
109
- return { ok: true, to: parsed.nest };
110
- },
111
- sendText: async ({ cfg, to, text, accountId, replyToId, threadId }) => {
112
- console.log(`[tlon:sendText] to=${to}, text=${text.slice(0, 50)}..., replyToId=${replyToId}, threadId=${threadId}`);
113
- const account = resolveTlonAccount(cfg, accountId ?? undefined);
114
- if (!account.configured || !account.ship || !account.url || !account.code) {
115
- throw new Error("Tlon account not configured");
116
- }
117
- const parsed = parseTlonTarget(to);
118
- if (!parsed) {
119
- throw new Error(`Invalid Tlon target. Use ${formatTargetHint()}`);
120
- }
121
- console.log(`[tlon:sendText] parsed target: kind=${parsed.kind}`);
122
- return await withAuthenticatedTlonApi({ url: account.url, code: account.code, ship: account.ship, allowPrivateNetwork: account.allowPrivateNetwork ?? undefined }, async () => {
123
- const fromShip = normalizeShip(account.ship);
124
- const replyId = (replyToId ?? threadId) ? String(replyToId ?? threadId) : undefined;
125
- // Get bot profile (from config or self profile)
126
- const botProfile = await getBotProfile(fromShip);
127
- if (parsed.kind === "dm") {
128
- return await sendDm({ fromShip, toShip: parsed.ship, text, replyToId: replyId, botProfile });
129
- }
130
- // Channel post (chat, heap, or diary)
131
- return await sendChannelPost({
132
- fromShip,
133
- nest: parsed.nest,
134
- story: markdownToStory(text),
135
- replyToId: replyId,
136
- botProfile,
137
- });
138
- });
139
- },
140
- sendMedia: async ({ cfg, to, text, mediaUrl, accountId, replyToId, threadId }) => {
141
- const account = resolveTlonAccount(cfg, accountId ?? undefined);
142
- if (!account.configured || !account.ship || !account.url || !account.code) {
143
- throw new Error("Tlon account not configured");
144
- }
145
- const parsed = parseTlonTarget(to);
146
- if (!parsed) {
147
- throw new Error(`Invalid Tlon target. Use ${formatTargetHint()}`);
148
- }
149
- return await withAuthenticatedTlonApi({ url: account.url, code: account.code, ship: account.ship, allowPrivateNetwork: account.allowPrivateNetwork ?? undefined }, async () => {
150
- // Upload inside authenticated context — uploadFile needs scry access
151
- const uploadedUrl = mediaUrl ? await uploadImageFromUrl(mediaUrl) : undefined;
152
- const fromShip = normalizeShip(account.ship);
153
- const story = buildMediaStory(text, uploadedUrl);
154
- const replyId = (replyToId ?? threadId) ? String(replyToId ?? threadId) : undefined;
155
- // Get bot profile (from config or self profile)
156
- const botProfile = await getBotProfile(fromShip);
157
- if (parsed.kind === "dm") {
158
- return await sendDmWithStory({ fromShip, toShip: parsed.ship, story, replyToId: replyId, botProfile });
159
- }
160
- // Channel post (chat, heap, or diary)
161
- return await sendChannelPost({
162
- fromShip,
163
- nest: parsed.nest,
164
- story,
165
- replyToId: replyId,
166
- botProfile,
167
- });
168
- });
169
- },
170
- };
171
- export const tlonPlugin = {
172
- id: TLON_CHANNEL_ID,
173
- meta: {
19
+ configured,
20
+ })) ?? [],
21
+ finalize: async (params) => await (await loadTlonChannelRuntime()).tlonSetupWizard.finalize(params),
22
+ });
23
+ const tlonConfigAdapter = createHybridChannelConfigAdapter({
24
+ sectionKey: TLON_CHANNEL_ID,
25
+ listAccountIds: listTlonAccountIds,
26
+ resolveAccount: resolveTlonAccount,
27
+ defaultAccountId: () => DEFAULT_ACCOUNT_ID,
28
+ clearBaseFields: ["ship", "code", "url", "name"],
29
+ preserveSectionOnDefaultDelete: true,
30
+ resolveAllowFrom: (account) => (account.ownerShip ? [account.ownerShip] : []),
31
+ formatAllowFrom: (allowFrom) => allowFrom.map((entry) => normalizeShip(String(entry))).filter(Boolean),
32
+ });
33
+ export const tlonPlugin = createChatChannelPlugin({
34
+ base: {
174
35
  id: TLON_CHANNEL_ID,
175
- label: "Tlon",
176
- selectionLabel: "Tlon (Urbit)",
177
- docsPath: "/channels/tlon",
178
- docsLabel: "tlon",
179
- blurb: "Decentralized messaging on Urbit",
180
- aliases: ["urbit"],
181
- order: 90,
182
- },
183
- capabilities: {
184
- chatTypes: ["direct", "group", "thread"],
185
- media: true,
186
- reply: true,
187
- threads: true,
188
- reactions: true,
189
- },
190
- threading: {
191
- resolveReplyToMode: () => "all",
192
- buildToolContext: ({ context, hasRepliedRef }) => {
193
- const threadId = context.MessageThreadId ?? context.ReplyToId;
194
- return {
195
- currentChannelId: context.To?.trim() || undefined,
196
- currentThreadTs: threadId != null ? String(threadId) : undefined,
197
- hasRepliedRef,
198
- };
36
+ meta: {
37
+ id: TLON_CHANNEL_ID,
38
+ label: "Tlon",
39
+ selectionLabel: "Tlon (Urbit)",
40
+ docsPath: "/channels/tlon",
41
+ docsLabel: "tlon",
42
+ blurb: "Decentralized messaging on Urbit",
43
+ aliases: ["urbit"],
44
+ order: 90,
199
45
  },
200
- },
201
- onboarding: tlonOnboardingAdapter,
202
- reload: { configPrefixes: ["channels.tlon"] },
203
- configSchema: tlonChannelConfigSchema,
204
- config: {
205
- listAccountIds: (cfg) => listTlonAccountIds(cfg),
206
- resolveAccount: (cfg, accountId) => resolveTlonAccount(cfg, accountId ?? undefined),
207
- defaultAccountId: () => "default",
208
- resolveAllowFrom: ({ cfg, accountId }) => {
209
- const account = resolveTlonAccount(cfg, accountId ?? undefined);
210
- return account.ownerShip ? [account.ownerShip] : [];
46
+ capabilities: {
47
+ chatTypes: ["direct", "group", "thread"],
48
+ media: true,
49
+ reply: true,
50
+ threads: true,
51
+ reactions: true,
211
52
  },
212
- formatAllowFrom: ({ allowFrom }) => allowFrom
213
- .map((entry) => normalizeShip(String(entry).trim()))
214
- .filter(Boolean),
215
- setAccountEnabled: ({ cfg, accountId, enabled }) => {
216
- const useDefault = !accountId || accountId === "default";
217
- if (useDefault) {
53
+ threading: {
54
+ resolveReplyToMode: () => "all",
55
+ buildToolContext: ({ context, hasRepliedRef }) => {
56
+ const threadId = context.MessageThreadId ?? context.ReplyToId;
218
57
  return {
219
- ...cfg,
220
- channels: {
221
- ...cfg.channels,
222
- tlon: {
223
- ...cfg.channels?.tlon,
224
- enabled,
225
- },
226
- },
58
+ currentChannelId: context.To?.trim() || undefined,
59
+ currentThreadTs: threadId != null ? String(threadId) : undefined,
60
+ hasRepliedRef,
227
61
  };
228
- }
229
- return {
230
- ...cfg,
231
- channels: {
232
- ...cfg.channels,
233
- tlon: {
234
- ...cfg.channels?.tlon,
235
- accounts: {
236
- ...cfg.channels?.tlon?.accounts,
237
- [accountId]: {
238
- ...cfg.channels?.tlon?.accounts?.[accountId],
239
- enabled,
240
- },
241
- },
242
- },
243
- },
244
- };
62
+ },
245
63
  },
246
- deleteAccount: ({ cfg, accountId }) => {
247
- const useDefault = !accountId || accountId === "default";
248
- if (useDefault) {
249
- const { ship: _ship, code: _code, url: _url, name: _name, ...rest } = cfg.channels?.tlon ?? {};
250
- return {
251
- ...cfg,
252
- channels: {
253
- ...cfg.channels,
254
- tlon: rest,
255
- },
256
- };
257
- }
258
- const { [accountId]: _removed, ...remainingAccounts } = cfg.channels?.tlon?.accounts ?? {};
259
- return {
260
- ...cfg,
261
- channels: {
262
- ...cfg.channels,
263
- tlon: {
264
- ...cfg.channels?.tlon,
265
- accounts: remainingAccounts,
266
- },
64
+ setup: tlonSetupAdapter,
65
+ setupWizard: tlonSetupWizardProxy,
66
+ reload: { configPrefixes: ["channels.tlon"] },
67
+ configSchema: tlonChannelConfigSchema,
68
+ config: {
69
+ ...tlonConfigAdapter,
70
+ isConfigured: (account) => account.configured,
71
+ describeAccount: (account) => describeAccountSnapshot({
72
+ account,
73
+ configured: account.configured,
74
+ extra: {
75
+ ship: account.ship,
76
+ url: account.url,
267
77
  },
268
- };
269
- },
270
- isConfigured: (account) => account.configured,
271
- describeAccount: (account) => ({
272
- accountId: account.accountId,
273
- name: account.name,
274
- enabled: account.enabled,
275
- configured: account.configured,
276
- ship: account.ship,
277
- url: account.url,
278
- }),
279
- },
280
- setup: {
281
- resolveAccountId: ({ accountId }) => normalizeAccountId(accountId),
282
- applyAccountName: ({ cfg, accountId, name }) => applyAccountNameToChannelSection({
283
- cfg: cfg,
284
- channelKey: "tlon",
285
- accountId,
286
- name,
287
- }),
288
- validateInput: ({ cfg, accountId, input }) => {
289
- const setupInput = input;
290
- const resolved = resolveTlonAccount(cfg, accountId ?? undefined);
291
- const ship = setupInput.ship?.trim() || resolved.ship;
292
- const url = setupInput.url?.trim() || resolved.url;
293
- const code = setupInput.code?.trim() || resolved.code;
294
- if (!ship) {
295
- return "Tlon requires --ship.";
296
- }
297
- if (!url) {
298
- return "Tlon requires --url.";
299
- }
300
- if (!code) {
301
- return "Tlon requires --code.";
302
- }
303
- return null;
304
- },
305
- applyAccountConfig: ({ cfg, accountId, input }) => applyTlonSetupConfig({
306
- cfg: cfg,
307
- accountId,
308
- input: input,
309
- }),
310
- },
311
- messaging: {
312
- normalizeTarget: (target) => {
313
- const parsed = parseTlonTarget(target);
314
- if (!parsed) {
315
- return target.trim();
316
- }
317
- if (parsed.kind === "dm") {
318
- return parsed.ship;
319
- }
320
- return parsed.nest;
321
- },
322
- targetResolver: {
323
- looksLikeId: (target) => Boolean(parseTlonTarget(target)),
324
- hint: formatTargetHint(),
78
+ }),
325
79
  },
326
- },
327
- outbound: tlonOutbound,
328
- actions: tlonMessageActions,
329
- agentPrompt: {
330
- messageToolHints: ({ cfg, accountId }) => {
331
- const account = resolveTlonAccount(cfg, accountId ?? undefined);
332
- const hints = [];
333
- // Gallery/heap channel guidance
334
- hints.push("", "Tlon gallery channels (heap/~host/name) are for collecting images, links, and media.", "- To post to a gallery: use action=send, to=heap/~host/name, message=<text or URL>", "- For image posts, include media=<imageUrl> with an optional message=<caption>", "- To react to a gallery comment: use action=react, to=heap/~host/name, messageId=<commentId>, parentId=<postId>, emoji=<emoji>");
335
- // Reaction guidance
336
- const level = account.reactionLevel ?? "minimal";
337
- if (level !== "off" && level !== "ack") {
338
- if (level === "extensive") {
339
- hints.push("", "Reactions are enabled for Tlon in EXTENSIVE mode.", "Feel free to react liberally:", "- Acknowledge messages with appropriate emojis", "- Express sentiment and personality through reactions", "- React to interesting content, humor, or notable events", "- Use reactions to confirm understanding or agreement", "- Use action=react with emoji, messageId, and target (channel nest or DM ship)", "Guideline: react whenever it feels natural.");
80
+ messaging: {
81
+ normalizeTarget: (target) => {
82
+ const parsed = parseTlonTarget(target);
83
+ if (!parsed) {
84
+ return target.trim();
340
85
  }
341
- else {
342
- // minimal (default)
343
- hints.push("", "Reactions are enabled for Tlon in MINIMAL mode.", "React ONLY when truly relevant:", "- Acknowledge important user requests or confirmations", "- Express genuine sentiment (humor, appreciation) sparingly", "- Avoid reacting to routine messages or your own replies", "- Use action=react with emoji, messageId, and target (channel nest or DM ship)", "Guideline: at most 1 reaction per 5-10 exchanges.");
86
+ if (parsed.kind === "dm") {
87
+ return parsed.ship;
344
88
  }
345
- }
346
- return hints;
347
- },
348
- },
349
- status: {
350
- defaultRuntime: {
351
- accountId: "default",
352
- running: false,
353
- lastStartAt: null,
354
- lastStopAt: null,
355
- lastError: null,
89
+ return parsed.nest;
90
+ },
91
+ targetResolver: {
92
+ looksLikeId: (target) => Boolean(parseTlonTarget(target)),
93
+ hint: formatTargetHint(),
94
+ },
356
95
  },
357
- collectStatusIssues: (accounts) => {
358
- return accounts.flatMap((account) => {
359
- if (!account.configured) {
360
- return [
361
- {
362
- channel: TLON_CHANNEL_ID,
363
- accountId: account.accountId,
364
- kind: "config",
365
- message: "Account not configured (missing ship, code, or url)",
366
- },
367
- ];
96
+ actions: tlonMessageActions,
97
+ agentPrompt: {
98
+ messageToolHints: ({ cfg, accountId }) => {
99
+ const account = resolveTlonAccount(cfg, accountId ?? undefined);
100
+ const hints = [];
101
+ hints.push("", "Tlon gallery channels (heap/~host/name) are for collecting images, links, and media.", "- To post to a gallery: use action=send, to=heap/~host/name, message=<text or URL>", "- For image posts, include media=<imageUrl> with an optional message=<caption>", "- To react to a gallery comment: use action=react, to=heap/~host/name, messageId=<commentId>, parentId=<postId>, emoji=<emoji>");
102
+ const level = account.reactionLevel ?? "minimal";
103
+ if (level !== "off" && level !== "ack") {
104
+ if (level === "extensive") {
105
+ hints.push("", "Reactions are enabled for Tlon in EXTENSIVE mode.", "Feel free to react liberally:", "- Acknowledge messages with appropriate emojis", "- Express sentiment and personality through reactions", "- React to interesting content, humor, or notable events", "- Use reactions to confirm understanding or agreement", "- Use action=react with emoji, messageId, and target (channel nest or DM ship)", "Guideline: react whenever it feels natural.");
106
+ }
107
+ else {
108
+ hints.push("", "Reactions are enabled for Tlon in MINIMAL mode.", "React ONLY when truly relevant:", "- Acknowledge important user requests or confirmations", "- Express genuine sentiment (humor, appreciation) sparingly", "- Avoid reacting to routine messages or your own replies", "- Use action=react with emoji, messageId, and target (channel nest or DM ship)", "Guideline: at most 1 reaction per 5-10 exchanges.");
109
+ }
368
110
  }
369
- return [];
370
- });
371
- },
372
- buildChannelSummary: ({ snapshot }) => {
373
- const s = snapshot;
374
- return {
375
- configured: s.configured ?? false,
376
- ship: s.ship ?? null,
377
- url: s.url ?? null,
378
- };
111
+ return hints;
112
+ },
379
113
  },
380
- probeAccount: async ({ account }) => {
381
- if (!account.configured || !account.ship || !account.url || !account.code) {
382
- return { ok: false, error: "Not configured" };
383
- }
384
- try {
385
- const ssrfPolicy = ssrfPolicyFromAllowPrivateNetwork(account.allowPrivateNetwork);
386
- const cookie = await authenticate(account.url, account.code, { ssrfPolicy });
387
- // Simple probe - just verify we can reach /~/name
388
- const { response, release } = await urbitFetch({
389
- baseUrl: account.url,
390
- path: "/~/name",
391
- init: {
392
- method: "GET",
393
- headers: { Cookie: cookie },
394
- },
395
- ssrfPolicy,
396
- timeoutMs: 30_000,
397
- auditContext: "tlon-probe-account",
398
- });
399
- try {
400
- if (!response.ok) {
401
- return { ok: false, error: `Name request failed: ${response.status}` };
114
+ status: createComputedAccountStatusAdapter({
115
+ defaultRuntime: createDefaultChannelRuntimeState(DEFAULT_ACCOUNT_ID),
116
+ collectStatusIssues: (accounts) => {
117
+ return accounts.flatMap((account) => {
118
+ if (!account.configured) {
119
+ return [
120
+ {
121
+ channel: TLON_CHANNEL_ID,
122
+ accountId: account.accountId,
123
+ kind: "config",
124
+ message: "Account not configured (missing ship, code, or url)",
125
+ },
126
+ ];
402
127
  }
403
- return { ok: true };
404
- }
405
- finally {
406
- await release();
128
+ return [];
129
+ });
130
+ },
131
+ buildChannelSummary: ({ snapshot }) => {
132
+ const s = snapshot;
133
+ return {
134
+ configured: s.configured ?? false,
135
+ ship: s.ship ?? null,
136
+ url: s.url ?? null,
137
+ };
138
+ },
139
+ probeAccount: async ({ account }) => {
140
+ if (!account.configured || !account.ship || !account.url || !account.code) {
141
+ return { ok: false, error: "Not configured" };
407
142
  }
408
- }
409
- catch (error) {
410
- return { ok: false, error: error?.message ?? String(error) };
411
- }
412
- },
413
- buildAccountSnapshot: ({ account, runtime, probe }) => {
414
- // Tlon-specific snapshot with ship/url for status display
415
- const snapshot = {
143
+ return await (await loadTlonChannelRuntime()).probeTlonAccount(account);
144
+ },
145
+ resolveAccountSnapshot: ({ account }) => ({
416
146
  accountId: account.accountId,
417
- name: account.name,
147
+ name: account.name ?? undefined,
418
148
  enabled: account.enabled,
419
149
  configured: account.configured,
420
- ship: account.ship,
421
- url: account.url,
422
- running: runtime?.running ?? false,
423
- lastStartAt: runtime?.lastStartAt ?? null,
424
- lastStopAt: runtime?.lastStopAt ?? null,
425
- lastError: runtime?.lastError ?? null,
426
- probe,
427
- };
428
- return snapshot;
150
+ extra: {
151
+ ship: account.ship,
152
+ url: account.url,
153
+ },
154
+ }),
155
+ }),
156
+ gateway: {
157
+ startAccount: async (ctx) => await (await loadTlonChannelRuntime()).startTlonGatewayAccount(ctx),
429
158
  },
430
159
  },
431
- gateway: {
432
- startAccount: async (ctx) => {
433
- const account = ctx.account;
434
- ctx.setStatus({
435
- accountId: account.accountId,
436
- ship: account.ship,
437
- url: account.url,
438
- });
439
- ctx.log?.info(`[${account.accountId}] starting Tlon provider for ${account.ship ?? "tlon"}`);
440
- return monitorTlonProvider({
441
- runtime: ctx.runtime,
442
- abortSignal: ctx.abortSignal,
443
- accountId: account.accountId,
444
- });
160
+ outbound: {
161
+ deliveryMode: "direct",
162
+ textChunkLimit: 10000,
163
+ resolveTarget: ({ to }) => {
164
+ const parsed = parseTlonTarget(to ?? "");
165
+ if (!parsed) {
166
+ return {
167
+ ok: false,
168
+ error: new Error(`Invalid Tlon target. Use ${formatTargetHint()}`),
169
+ };
170
+ }
171
+ if (parsed.kind === "dm") {
172
+ return { ok: true, to: parsed.ship };
173
+ }
174
+ return { ok: true, to: parsed.nest };
445
175
  },
176
+ ...createRuntimeOutboundDelegates({
177
+ getRuntime: loadTlonChannelRuntime,
178
+ sendText: { resolve: (runtime) => runtime.tlonRuntimeOutbound.sendText },
179
+ sendMedia: { resolve: (runtime) => runtime.tlonRuntimeOutbound.sendMedia },
180
+ }),
446
181
  },
447
- };
182
+ });
448
183
  //# sourceMappingURL=channel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/channel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/channel.ts"],"names":[],"mappings":"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"}