@tloncorp/openclaw 0.4.2 → 0.6.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 +130 -141
- package/dist/index.js +157 -132
- package/dist/index.js.map +1 -1
- package/dist/setup-api.js +2 -2
- package/dist/setup-entry.js +2 -2
- package/dist/setup-entry.js.map +1 -1
- package/dist/src/account-fields.js +7 -3
- package/dist/src/account-fields.js.map +1 -1
- package/dist/src/actions.js +73 -52
- package/dist/src/actions.js.map +1 -1
- package/dist/src/channel.js +51 -39
- package/dist/src/channel.js.map +1 -1
- package/dist/src/channel.runtime.js +61 -32
- package/dist/src/channel.runtime.js.map +1 -1
- package/dist/src/config-schema.js +43 -4
- package/dist/src/config-schema.js.map +1 -1
- package/dist/src/effective-owner.js.map +1 -1
- package/dist/src/gateway-status.js +55 -7
- package/dist/src/gateway-status.js.map +1 -1
- package/dist/src/monitor/approval.js +71 -62
- package/dist/src/monitor/approval.js.map +1 -1
- package/dist/src/monitor/command-auth.js +7 -7
- package/dist/src/monitor/command-auth.js.map +1 -1
- package/dist/src/monitor/command-bridge.js +3 -2
- package/dist/src/monitor/command-bridge.js.map +1 -1
- package/dist/src/monitor/computing-presence.js +76 -12
- package/dist/src/monitor/computing-presence.js.map +1 -1
- package/dist/src/monitor/discovery.js +16 -9
- package/dist/src/monitor/discovery.js.map +1 -1
- package/dist/src/monitor/history.js +130 -21
- package/dist/src/monitor/history.js.map +1 -1
- package/dist/src/monitor/index.js +2766 -2310
- package/dist/src/monitor/index.js.map +1 -1
- package/dist/src/monitor/media.js +106 -78
- package/dist/src/monitor/media.js.map +1 -1
- package/dist/src/monitor/nudge-runner.js +36 -27
- package/dist/src/monitor/nudge-runner.js.map +1 -1
- package/dist/src/monitor/nudge-state.js +7 -11
- package/dist/src/monitor/nudge-state.js.map +1 -1
- package/dist/src/monitor/owner-reply-persistence.js +27 -26
- package/dist/src/monitor/owner-reply-persistence.js.map +1 -1
- package/dist/src/monitor/processed-messages.js.map +1 -1
- package/dist/src/monitor/settings-sync.js +1 -8
- package/dist/src/monitor/settings-sync.js.map +1 -1
- package/dist/src/monitor/utils.js +123 -67
- package/dist/src/monitor/utils.js.map +1 -1
- package/dist/src/nudge-decision.js +40 -43
- package/dist/src/nudge-decision.js.map +1 -1
- package/dist/src/nudge-messages.js +9 -9
- package/dist/src/nudge-scheduler.js.map +1 -1
- package/dist/src/owner-listen-command.js +84 -0
- package/dist/src/owner-listen-command.js.map +1 -0
- package/dist/src/pending-nudge.js.map +1 -1
- package/dist/src/runtime.js +10 -6
- package/dist/src/runtime.js.map +1 -1
- package/dist/src/session-roles.js +2 -1
- package/dist/src/session-roles.js.map +1 -1
- package/dist/src/settings.js +239 -96
- package/dist/src/settings.js.map +1 -1
- package/dist/src/setup-core.js +32 -32
- package/dist/src/setup-core.js.map +1 -1
- package/dist/src/setup-surface.js +19 -19
- package/dist/src/setup-surface.js.map +1 -1
- package/dist/src/shared-state.js +46 -0
- package/dist/src/shared-state.js.map +1 -0
- package/dist/src/targets.js +34 -10
- package/dist/src/targets.js.map +1 -1
- package/dist/src/telemetry.js +17 -14
- package/dist/src/telemetry.js.map +1 -1
- package/dist/src/tlon-binary.js +20 -12
- package/dist/src/tlon-binary.js.map +1 -1
- package/dist/src/tlon-tool-guard.js +5 -5
- package/dist/src/tool-trace.js +17 -13
- package/dist/src/tool-trace.js.map +1 -1
- package/dist/src/types.js +40 -11
- package/dist/src/types.js.map +1 -1
- package/dist/src/urbit/api-client.js +16 -12
- package/dist/src/urbit/api-client.js.map +1 -1
- package/dist/src/urbit/auth.js +9 -9
- package/dist/src/urbit/auth.js.map +1 -1
- package/dist/src/urbit/base-url.js +11 -11
- package/dist/src/urbit/base-url.js.map +1 -1
- package/dist/src/urbit/channel-ops.js +25 -19
- package/dist/src/urbit/channel-ops.js.map +1 -1
- package/dist/src/urbit/context.js +8 -8
- package/dist/src/urbit/context.js.map +1 -1
- package/dist/src/urbit/errors.js +33 -7
- package/dist/src/urbit/errors.js.map +1 -1
- package/dist/src/urbit/fetch.js +3 -3
- package/dist/src/urbit/fetch.js.map +1 -1
- package/dist/src/urbit/http-poke.js +10 -10
- package/dist/src/urbit/http-poke.js.map +1 -1
- package/dist/src/urbit/send.js +27 -23
- package/dist/src/urbit/send.js.map +1 -1
- package/dist/src/urbit/sse-client.js +45 -41
- package/dist/src/urbit/sse-client.js.map +1 -1
- package/dist/src/urbit/story.js +31 -30
- package/dist/src/urbit/story.js.map +1 -1
- package/dist/src/urbit/upload.js +8 -8
- package/dist/src/urbit/upload.js.map +1 -1
- package/dist/src/version.generated.js +2 -1
- package/dist/src/version.generated.js.map +1 -1
- package/openclaw.plugin.json +312 -2
- package/package.json +37 -7
- package/dist/src/heartbeat-telemetry.js +0 -155
- package/dist/src/heartbeat-telemetry.js.map +0 -1
- package/dist/src/nudge-candidate.js +0 -109
- package/dist/src/nudge-candidate.js.map +0 -1
- package/dist/src/onboarding.js +0 -178
- package/dist/src/onboarding.js.map +0 -1
package/dist/src/actions.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { readStringParam } from
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { withAuthenticatedTlonApi } from
|
|
5
|
-
import { addChannelReaction,
|
|
6
|
-
import { markdownToStory } from
|
|
1
|
+
import { readStringParam } from 'openclaw/plugin-sdk/param-readers';
|
|
2
|
+
import { normalizeShip, parseTlonTarget } from './targets.js';
|
|
3
|
+
import { resolveTlonAccount } from './types.js';
|
|
4
|
+
import { withAuthenticatedTlonApi } from './urbit/api-client.js';
|
|
5
|
+
import { addChannelReaction, addDmReaction, deleteHeapPost, removeChannelReaction, removeDmReaction, sendChannelPost, } from './urbit/send.js';
|
|
6
|
+
import { markdownToStory } from './urbit/story.js';
|
|
7
7
|
// Inline helpers previously imported from SDK (removed in new SDK)
|
|
8
8
|
function createActionGate(actions) {
|
|
9
9
|
return (key) => {
|
|
@@ -14,13 +14,13 @@ function createActionGate(actions) {
|
|
|
14
14
|
}
|
|
15
15
|
function jsonResult(data) {
|
|
16
16
|
return {
|
|
17
|
-
content: [{ type:
|
|
17
|
+
content: [{ type: 'text', text: JSON.stringify(data) }],
|
|
18
18
|
details: data,
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
21
|
function readReactionParams(params, opts) {
|
|
22
|
-
const raw = readStringParam(params,
|
|
23
|
-
const remove = params.remove === true || params.remove ===
|
|
22
|
+
const raw = readStringParam(params, 'emoji') ?? '';
|
|
23
|
+
const remove = params.remove === true || params.remove === 'true';
|
|
24
24
|
if (remove && !raw) {
|
|
25
25
|
if (opts?.removeErrorMessage) {
|
|
26
26
|
throw new Error(opts.removeErrorMessage);
|
|
@@ -28,43 +28,53 @@ function readReactionParams(params, opts) {
|
|
|
28
28
|
}
|
|
29
29
|
return { emoji: raw, remove, isEmpty: !raw && !remove };
|
|
30
30
|
}
|
|
31
|
-
const SUPPORTED_ACTIONS = new Set([
|
|
31
|
+
const SUPPORTED_ACTIONS = new Set([
|
|
32
|
+
'react',
|
|
33
|
+
'delete',
|
|
34
|
+
'reply',
|
|
35
|
+
]);
|
|
32
36
|
export const tlonMessageActions = {
|
|
33
37
|
describeMessageTool: ({ cfg }) => {
|
|
34
38
|
const account = resolveTlonAccount(cfg);
|
|
35
39
|
if (!account.configured || !account.enabled) {
|
|
36
40
|
return null;
|
|
37
41
|
}
|
|
38
|
-
const gate = createActionGate(cfg.channels?.tlon
|
|
42
|
+
const gate = createActionGate(cfg.channels?.tlon
|
|
43
|
+
?.actions);
|
|
39
44
|
const actions = [];
|
|
40
|
-
if (gate(
|
|
41
|
-
actions.push(
|
|
42
|
-
if (gate(
|
|
43
|
-
actions.push(
|
|
44
|
-
if (gate(
|
|
45
|
-
actions.push(
|
|
45
|
+
if (gate('reactions'))
|
|
46
|
+
actions.push('react');
|
|
47
|
+
if (gate('delete'))
|
|
48
|
+
actions.push('delete');
|
|
49
|
+
if (gate('reply'))
|
|
50
|
+
actions.push('reply');
|
|
46
51
|
return actions.length > 0 ? { actions } : null;
|
|
47
52
|
},
|
|
48
53
|
supportsAction: ({ action }) => SUPPORTED_ACTIONS.has(action),
|
|
49
54
|
handleAction: async ({ action, params, cfg, accountId, toolContext }) => {
|
|
50
55
|
const account = resolveTlonAccount(cfg, accountId ?? undefined);
|
|
51
56
|
if (!account.configured || !account.ship || !account.url || !account.code) {
|
|
52
|
-
throw new Error(
|
|
57
|
+
throw new Error('Tlon account not configured');
|
|
53
58
|
}
|
|
54
|
-
return await withAuthenticatedTlonApi({
|
|
59
|
+
return await withAuthenticatedTlonApi({
|
|
60
|
+
url: account.url,
|
|
61
|
+
code: account.code,
|
|
62
|
+
ship: account.ship,
|
|
63
|
+
allowPrivateNetwork: account.allowPrivateNetwork ?? undefined,
|
|
64
|
+
}, async () => {
|
|
55
65
|
const fromShip = normalizeShip(account.ship);
|
|
56
|
-
if (action ===
|
|
57
|
-
const level = account.reactionLevel ??
|
|
58
|
-
if (level ===
|
|
66
|
+
if (action === 'react') {
|
|
67
|
+
const level = account.reactionLevel ?? 'minimal';
|
|
68
|
+
if (level === 'off' || level === 'ack') {
|
|
59
69
|
throw new Error(`Tlon agent reactions disabled (reactionLevel="${level}"). ` +
|
|
60
70
|
`Set channels.tlon.reactionLevel to "minimal" or "extensive" to enable.`);
|
|
61
71
|
}
|
|
62
72
|
return await handleReact({ params, fromShip, toolContext });
|
|
63
73
|
}
|
|
64
|
-
if (action ===
|
|
74
|
+
if (action === 'delete') {
|
|
65
75
|
return await handleDelete({ params, toolContext });
|
|
66
76
|
}
|
|
67
|
-
if (action ===
|
|
77
|
+
if (action === 'reply') {
|
|
68
78
|
return await handleReply({ params, fromShip, toolContext });
|
|
69
79
|
}
|
|
70
80
|
throw new Error(`Tlon action "${action}" is not supported.`);
|
|
@@ -73,17 +83,17 @@ export const tlonMessageActions = {
|
|
|
73
83
|
};
|
|
74
84
|
async function handleReact({ params, fromShip, toolContext, }) {
|
|
75
85
|
const { emoji, remove, isEmpty } = readReactionParams(params, {
|
|
76
|
-
removeErrorMessage:
|
|
86
|
+
removeErrorMessage: 'Emoji is required to remove a Tlon reaction.',
|
|
77
87
|
});
|
|
78
88
|
if (isEmpty && !remove) {
|
|
79
|
-
throw new Error(
|
|
89
|
+
throw new Error('Tlon react requires emoji parameter. Use action=react with emoji=<emoji> and messageId=<message_id>.');
|
|
80
90
|
}
|
|
81
|
-
const messageId = readStringParam(params,
|
|
91
|
+
const messageId = readStringParam(params, 'messageId');
|
|
82
92
|
if (!messageId) {
|
|
83
|
-
throw new Error(
|
|
93
|
+
throw new Error('Tlon react requires messageId parameter.');
|
|
84
94
|
}
|
|
85
|
-
const to = readStringParam(params,
|
|
86
|
-
readStringParam(params,
|
|
95
|
+
const to = readStringParam(params, 'target') ??
|
|
96
|
+
readStringParam(params, 'to') ??
|
|
87
97
|
toolContext?.currentChannelId;
|
|
88
98
|
if (!to) {
|
|
89
99
|
throw new Error("Tlon react requires 'to' parameter (target channel or DM).");
|
|
@@ -92,18 +102,29 @@ async function handleReact({ params, fromShip, toolContext, }) {
|
|
|
92
102
|
if (!parsed) {
|
|
93
103
|
throw new Error(`Invalid Tlon target: ${to}`);
|
|
94
104
|
}
|
|
95
|
-
const parentId = readStringParam(params,
|
|
105
|
+
const parentId = readStringParam(params, 'parentId') ??
|
|
96
106
|
toolContext?.currentThreadTs ??
|
|
97
107
|
undefined;
|
|
98
|
-
if (parsed.kind ===
|
|
108
|
+
if (parsed.kind === 'dm') {
|
|
99
109
|
if (remove) {
|
|
100
|
-
await removeDmReaction({
|
|
110
|
+
await removeDmReaction({
|
|
111
|
+
fromShip,
|
|
112
|
+
toShip: parsed.ship,
|
|
113
|
+
messageId,
|
|
114
|
+
parentId,
|
|
115
|
+
});
|
|
101
116
|
return jsonResult({ ok: true, removed: true });
|
|
102
117
|
}
|
|
103
|
-
await addDmReaction({
|
|
118
|
+
await addDmReaction({
|
|
119
|
+
fromShip,
|
|
120
|
+
toShip: parsed.ship,
|
|
121
|
+
messageId,
|
|
122
|
+
react: emoji,
|
|
123
|
+
parentId,
|
|
124
|
+
});
|
|
104
125
|
return jsonResult({ ok: true, added: emoji });
|
|
105
126
|
}
|
|
106
|
-
const nestPrefix = parsed.nest.split(
|
|
127
|
+
const nestPrefix = parsed.nest.split('/')[0];
|
|
107
128
|
if (remove) {
|
|
108
129
|
await removeChannelReaction({
|
|
109
130
|
fromShip,
|
|
@@ -127,23 +148,23 @@ async function handleReact({ params, fromShip, toolContext, }) {
|
|
|
127
148
|
return jsonResult({ ok: true, added: emoji });
|
|
128
149
|
}
|
|
129
150
|
async function handleDelete({ params, toolContext, }) {
|
|
130
|
-
const messageId = readStringParam(params,
|
|
151
|
+
const messageId = readStringParam(params, 'messageId');
|
|
131
152
|
if (!messageId) {
|
|
132
|
-
throw new Error(
|
|
153
|
+
throw new Error('Tlon delete requires messageId parameter.');
|
|
133
154
|
}
|
|
134
|
-
const to = readStringParam(params,
|
|
135
|
-
readStringParam(params,
|
|
155
|
+
const to = readStringParam(params, 'target') ??
|
|
156
|
+
readStringParam(params, 'to') ??
|
|
136
157
|
toolContext?.currentChannelId;
|
|
137
158
|
if (!to) {
|
|
138
159
|
throw new Error("Tlon delete requires 'to' parameter.");
|
|
139
160
|
}
|
|
140
161
|
const parsed = parseTlonTarget(to);
|
|
141
|
-
if (!parsed || parsed.kind ===
|
|
142
|
-
throw new Error(
|
|
162
|
+
if (!parsed || parsed.kind === 'dm') {
|
|
163
|
+
throw new Error('Tlon delete is only supported for channel posts.');
|
|
143
164
|
}
|
|
144
|
-
const nestPrefix = parsed.nest.split(
|
|
145
|
-
if (nestPrefix !==
|
|
146
|
-
throw new Error(
|
|
165
|
+
const nestPrefix = parsed.nest.split('/')[0];
|
|
166
|
+
if (nestPrefix !== 'heap') {
|
|
167
|
+
throw new Error('Tlon delete is currently only supported for heap posts. Use heap/~host/channel as the target.');
|
|
147
168
|
}
|
|
148
169
|
await deleteHeapPost({
|
|
149
170
|
hostShip: parsed.hostShip,
|
|
@@ -153,16 +174,16 @@ async function handleDelete({ params, toolContext, }) {
|
|
|
153
174
|
return jsonResult({ ok: true, deleted: messageId });
|
|
154
175
|
}
|
|
155
176
|
async function handleReply({ params, fromShip, toolContext, }) {
|
|
156
|
-
const messageId = readStringParam(params,
|
|
177
|
+
const messageId = readStringParam(params, 'messageId');
|
|
157
178
|
if (!messageId) {
|
|
158
|
-
throw new Error(
|
|
179
|
+
throw new Error('Tlon reply requires messageId parameter (the ID of the post to reply to).');
|
|
159
180
|
}
|
|
160
|
-
const message = readStringParam(params,
|
|
181
|
+
const message = readStringParam(params, 'message');
|
|
161
182
|
if (!message) {
|
|
162
|
-
throw new Error(
|
|
183
|
+
throw new Error('Tlon reply requires message parameter (the reply text).');
|
|
163
184
|
}
|
|
164
|
-
const to = readStringParam(params,
|
|
165
|
-
readStringParam(params,
|
|
185
|
+
const to = readStringParam(params, 'target') ??
|
|
186
|
+
readStringParam(params, 'to') ??
|
|
166
187
|
toolContext?.currentChannelId;
|
|
167
188
|
if (!to) {
|
|
168
189
|
throw new Error("Tlon reply requires 'to' parameter (target channel).");
|
|
@@ -172,8 +193,8 @@ async function handleReply({ params, fromShip, toolContext, }) {
|
|
|
172
193
|
throw new Error(`Invalid Tlon target: ${to}`);
|
|
173
194
|
}
|
|
174
195
|
const story = markdownToStory(message);
|
|
175
|
-
if (parsed.kind ===
|
|
176
|
-
throw new Error(
|
|
196
|
+
if (parsed.kind === 'dm') {
|
|
197
|
+
throw new Error('Tlon reply action is supported for channel targets. For DMs, use action=send with replyTo.');
|
|
177
198
|
}
|
|
178
199
|
await sendChannelPost({
|
|
179
200
|
fromShip,
|
package/dist/src/actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/actions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/actions.ts"],"names":[],"mappings":"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"}
|
package/dist/src/channel.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { createRuntimeOutboundDelegates } from
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
const TLON_CHANNEL_ID =
|
|
14
|
-
const loadTlonChannelRuntime = createLazyRuntimeModule(() => import(
|
|
1
|
+
import { describeAccountSnapshot } from 'openclaw/plugin-sdk/account-helpers';
|
|
2
|
+
import { createHybridChannelConfigAdapter } from 'openclaw/plugin-sdk/channel-config-helpers';
|
|
3
|
+
import { DEFAULT_ACCOUNT_ID, createChatChannelPlugin, } from 'openclaw/plugin-sdk/core';
|
|
4
|
+
import { createLazyRuntimeModule } from 'openclaw/plugin-sdk/lazy-runtime';
|
|
5
|
+
import { createRuntimeOutboundDelegates } from 'openclaw/plugin-sdk/outbound-runtime';
|
|
6
|
+
import { createLegacyPrivateNetworkDoctorContract } from 'openclaw/plugin-sdk/ssrf-runtime';
|
|
7
|
+
import { createComputedAccountStatusAdapter, createDefaultChannelRuntimeState, } from 'openclaw/plugin-sdk/status-helpers';
|
|
8
|
+
import { tlonMessageActions } from './actions.js';
|
|
9
|
+
import { tlonChannelConfigSchema } from './config-schema.js';
|
|
10
|
+
import { createTlonSetupWizardBase, tlonSetupAdapter, } from './setup-core.js';
|
|
11
|
+
import { formatTargetHint, normalizeShip, parseTlonTarget } from './targets.js';
|
|
12
|
+
import { listTlonAccountIds, resolveTlonAccount } from './types.js';
|
|
13
|
+
const TLON_CHANNEL_ID = 'tlon';
|
|
14
|
+
const loadTlonChannelRuntime = createLazyRuntimeModule(() => import('./channel.runtime.js'));
|
|
15
15
|
const tlonSetupWizardProxy = createTlonSetupWizardBase({
|
|
16
16
|
resolveConfigured: async ({ cfg }) => await (await loadTlonChannelRuntime()).tlonSetupWizard.status.resolveConfigured({ cfg }),
|
|
17
17
|
resolveStatusLines: async ({ cfg, configured }) => (await (await loadTlonChannelRuntime()).tlonSetupWizard.status.resolveStatusLines?.({
|
|
@@ -20,12 +20,15 @@ const tlonSetupWizardProxy = createTlonSetupWizardBase({
|
|
|
20
20
|
})) ?? [],
|
|
21
21
|
finalize: async (params) => await (await loadTlonChannelRuntime()).tlonSetupWizard.finalize(params),
|
|
22
22
|
});
|
|
23
|
+
const tlonLegacyPrivateNetworkDoctor = createLegacyPrivateNetworkDoctorContract({
|
|
24
|
+
channelKey: TLON_CHANNEL_ID,
|
|
25
|
+
});
|
|
23
26
|
const tlonConfigAdapter = createHybridChannelConfigAdapter({
|
|
24
27
|
sectionKey: TLON_CHANNEL_ID,
|
|
25
28
|
listAccountIds: listTlonAccountIds,
|
|
26
29
|
resolveAccount: resolveTlonAccount,
|
|
27
30
|
defaultAccountId: () => DEFAULT_ACCOUNT_ID,
|
|
28
|
-
clearBaseFields: [
|
|
31
|
+
clearBaseFields: ['ship', 'code', 'url', 'name'],
|
|
29
32
|
preserveSectionOnDefaultDelete: true,
|
|
30
33
|
resolveAllowFrom: (account) => (account.ownerShip ? [account.ownerShip] : []),
|
|
31
34
|
formatAllowFrom: (allowFrom) => allowFrom.map((entry) => normalizeShip(String(entry))).filter(Boolean),
|
|
@@ -35,23 +38,23 @@ export const tlonPlugin = createChatChannelPlugin({
|
|
|
35
38
|
id: TLON_CHANNEL_ID,
|
|
36
39
|
meta: {
|
|
37
40
|
id: TLON_CHANNEL_ID,
|
|
38
|
-
label:
|
|
39
|
-
selectionLabel:
|
|
40
|
-
docsPath:
|
|
41
|
-
docsLabel:
|
|
42
|
-
blurb:
|
|
43
|
-
aliases: [
|
|
41
|
+
label: 'Tlon',
|
|
42
|
+
selectionLabel: 'Tlon (Urbit)',
|
|
43
|
+
docsPath: '/channels/tlon',
|
|
44
|
+
docsLabel: 'tlon',
|
|
45
|
+
blurb: 'Decentralized messaging on Urbit',
|
|
46
|
+
aliases: ['urbit'],
|
|
44
47
|
order: 90,
|
|
45
48
|
},
|
|
46
49
|
capabilities: {
|
|
47
|
-
chatTypes: [
|
|
50
|
+
chatTypes: ['direct', 'group', 'thread'],
|
|
48
51
|
media: true,
|
|
49
52
|
reply: true,
|
|
50
53
|
threads: true,
|
|
51
54
|
reactions: true,
|
|
52
55
|
},
|
|
53
56
|
threading: {
|
|
54
|
-
resolveReplyToMode: () =>
|
|
57
|
+
resolveReplyToMode: () => 'all',
|
|
55
58
|
buildToolContext: ({ context, hasRepliedRef }) => {
|
|
56
59
|
const threadId = context.MessageThreadId ?? context.ReplyToId;
|
|
57
60
|
return {
|
|
@@ -63,7 +66,7 @@ export const tlonPlugin = createChatChannelPlugin({
|
|
|
63
66
|
},
|
|
64
67
|
setup: tlonSetupAdapter,
|
|
65
68
|
setupWizard: tlonSetupWizardProxy,
|
|
66
|
-
reload: { configPrefixes: [
|
|
69
|
+
reload: { configPrefixes: ['channels.tlon'] },
|
|
67
70
|
configSchema: tlonChannelConfigSchema,
|
|
68
71
|
config: {
|
|
69
72
|
...tlonConfigAdapter,
|
|
@@ -83,7 +86,7 @@ export const tlonPlugin = createChatChannelPlugin({
|
|
|
83
86
|
if (!parsed) {
|
|
84
87
|
return target.trim();
|
|
85
88
|
}
|
|
86
|
-
if (parsed.kind ===
|
|
89
|
+
if (parsed.kind === 'dm') {
|
|
87
90
|
return parsed.ship;
|
|
88
91
|
}
|
|
89
92
|
return parsed.nest;
|
|
@@ -98,14 +101,14 @@ export const tlonPlugin = createChatChannelPlugin({
|
|
|
98
101
|
messageToolHints: ({ cfg, accountId }) => {
|
|
99
102
|
const account = resolveTlonAccount(cfg, accountId ?? undefined);
|
|
100
103
|
const hints = [];
|
|
101
|
-
hints.push(
|
|
102
|
-
const level = account.reactionLevel ??
|
|
103
|
-
if (level !==
|
|
104
|
-
if (level ===
|
|
105
|
-
hints.push(
|
|
104
|
+
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>');
|
|
105
|
+
const level = account.reactionLevel ?? 'minimal';
|
|
106
|
+
if (level !== 'off' && level !== 'ack') {
|
|
107
|
+
if (level === 'extensive') {
|
|
108
|
+
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
109
|
}
|
|
107
110
|
else {
|
|
108
|
-
hints.push(
|
|
111
|
+
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
112
|
}
|
|
110
113
|
}
|
|
111
114
|
return hints;
|
|
@@ -120,8 +123,8 @@ export const tlonPlugin = createChatChannelPlugin({
|
|
|
120
123
|
{
|
|
121
124
|
channel: TLON_CHANNEL_ID,
|
|
122
125
|
accountId: account.accountId,
|
|
123
|
-
kind:
|
|
124
|
-
message:
|
|
126
|
+
kind: 'config',
|
|
127
|
+
message: 'Account not configured (missing ship, code, or url)',
|
|
125
128
|
},
|
|
126
129
|
];
|
|
127
130
|
}
|
|
@@ -137,8 +140,11 @@ export const tlonPlugin = createChatChannelPlugin({
|
|
|
137
140
|
};
|
|
138
141
|
},
|
|
139
142
|
probeAccount: async ({ account }) => {
|
|
140
|
-
if (!account.configured ||
|
|
141
|
-
|
|
143
|
+
if (!account.configured ||
|
|
144
|
+
!account.ship ||
|
|
145
|
+
!account.url ||
|
|
146
|
+
!account.code) {
|
|
147
|
+
return { ok: false, error: 'Not configured' };
|
|
142
148
|
}
|
|
143
149
|
return await (await loadTlonChannelRuntime()).probeTlonAccount(account);
|
|
144
150
|
},
|
|
@@ -156,19 +162,23 @@ export const tlonPlugin = createChatChannelPlugin({
|
|
|
156
162
|
gateway: {
|
|
157
163
|
startAccount: async (ctx) => await (await loadTlonChannelRuntime()).startTlonGatewayAccount(ctx),
|
|
158
164
|
},
|
|
165
|
+
doctor: {
|
|
166
|
+
legacyConfigRules: tlonLegacyPrivateNetworkDoctor.legacyConfigRules,
|
|
167
|
+
normalizeCompatibilityConfig: tlonLegacyPrivateNetworkDoctor.normalizeCompatibilityConfig,
|
|
168
|
+
},
|
|
159
169
|
},
|
|
160
170
|
outbound: {
|
|
161
|
-
deliveryMode:
|
|
171
|
+
deliveryMode: 'direct',
|
|
162
172
|
textChunkLimit: 10000,
|
|
163
173
|
resolveTarget: ({ to }) => {
|
|
164
|
-
const parsed = parseTlonTarget(to ??
|
|
174
|
+
const parsed = parseTlonTarget(to ?? '');
|
|
165
175
|
if (!parsed) {
|
|
166
176
|
return {
|
|
167
177
|
ok: false,
|
|
168
178
|
error: new Error(`Invalid Tlon target. Use ${formatTargetHint()}`),
|
|
169
179
|
};
|
|
170
180
|
}
|
|
171
|
-
if (parsed.kind ===
|
|
181
|
+
if (parsed.kind === 'dm') {
|
|
172
182
|
return { ok: true, to: parsed.ship };
|
|
173
183
|
}
|
|
174
184
|
return { ok: true, to: parsed.nest };
|
|
@@ -176,7 +186,9 @@ export const tlonPlugin = createChatChannelPlugin({
|
|
|
176
186
|
...createRuntimeOutboundDelegates({
|
|
177
187
|
getRuntime: loadTlonChannelRuntime,
|
|
178
188
|
sendText: { resolve: (runtime) => runtime.tlonRuntimeOutbound.sendText },
|
|
179
|
-
sendMedia: {
|
|
189
|
+
sendMedia: {
|
|
190
|
+
resolve: (runtime) => runtime.tlonRuntimeOutbound.sendMedia,
|
|
191
|
+
},
|
|
180
192
|
}),
|
|
181
193
|
},
|
|
182
194
|
});
|
package/dist/src/channel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/channel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/channel.ts"],"names":[],"mappings":"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"}
|