@tloncorp/openclaw 0.4.3 → 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 +147 -138
- 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 +24 -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 +58 -26
- package/dist/src/monitor/history.js.map +1 -1
- package/dist/src/monitor/index.js +2771 -2483
- 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 +77 -71
- 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 +38 -28
- package/dist/src/owner-listen-command.js.map +1 -1
- 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 +233 -102
- 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 +17 -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 +30 -12
- 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 +37 -0
- package/package.json +35 -15
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { withAuthenticatedTlonApi } from
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import { markdownToStory } from
|
|
12
|
-
import {
|
|
1
|
+
import { scry } from '@tloncorp/api';
|
|
2
|
+
import { monitorTlonProvider } from './monitor/index.js';
|
|
3
|
+
import { tlonSetupWizard } from './setup-surface.js';
|
|
4
|
+
import { formatTargetHint, normalizeShip, parseTlonTarget } from './targets.js';
|
|
5
|
+
import { resolveTlonAccount } from './types.js';
|
|
6
|
+
import { withAuthenticatedTlonApi } from './urbit/api-client.js';
|
|
7
|
+
import { authenticate } from './urbit/auth.js';
|
|
8
|
+
import { ssrfPolicyFromAllowPrivateNetwork } from './urbit/context.js';
|
|
9
|
+
import { urbitFetch } from './urbit/fetch.js';
|
|
10
|
+
import { buildMediaStory, sendChannelPost, sendDm, sendDmWithStory, } from './urbit/send.js';
|
|
11
|
+
import { markdownToStory } from './urbit/story.js';
|
|
12
|
+
import { uploadImageFromUrl } from './urbit/upload.js';
|
|
13
13
|
// Cache for bot profiles per ship (supports multi-account setups)
|
|
14
14
|
const profileCache = new Map();
|
|
15
15
|
/**
|
|
@@ -25,14 +25,14 @@ async function getBotProfile(ship) {
|
|
|
25
25
|
return undefined;
|
|
26
26
|
}
|
|
27
27
|
try {
|
|
28
|
-
const selfProfile = await scry({ app:
|
|
28
|
+
const selfProfile = await scry({ app: 'contacts', path: '/v1/self' });
|
|
29
29
|
const profile = {
|
|
30
|
-
nickname: selfProfile?.nickname?.value ??
|
|
31
|
-
avatar: selfProfile?.avatar?.value ??
|
|
30
|
+
nickname: selfProfile?.nickname?.value ?? '',
|
|
31
|
+
avatar: selfProfile?.avatar?.value ?? '',
|
|
32
32
|
};
|
|
33
33
|
profileCache.set(ship, profile);
|
|
34
34
|
if (profile.nickname || profile.avatar) {
|
|
35
|
-
console.log(`[tlon] Using self profile for bot meta (${ship}): ${profile.nickname ||
|
|
35
|
+
console.log(`[tlon] Using self profile for bot meta (${ship}): ${profile.nickname || '(no nickname)'}`);
|
|
36
36
|
return profile;
|
|
37
37
|
}
|
|
38
38
|
}
|
|
@@ -44,7 +44,7 @@ async function getBotProfile(ship) {
|
|
|
44
44
|
function resolveOutboundContext(params) {
|
|
45
45
|
const account = resolveTlonAccount(params.cfg, params.accountId ?? undefined);
|
|
46
46
|
if (!account.configured || !account.ship || !account.url || !account.code) {
|
|
47
|
-
throw new Error(
|
|
47
|
+
throw new Error('Tlon account not configured');
|
|
48
48
|
}
|
|
49
49
|
const parsed = parseTlonTarget(params.to);
|
|
50
50
|
if (!parsed) {
|
|
@@ -53,17 +53,28 @@ function resolveOutboundContext(params) {
|
|
|
53
53
|
return { account: account, parsed };
|
|
54
54
|
}
|
|
55
55
|
function resolveReplyId(replyToId, threadId) {
|
|
56
|
-
return
|
|
56
|
+
return replyToId ?? threadId ? String(replyToId ?? threadId) : undefined;
|
|
57
57
|
}
|
|
58
58
|
export const tlonRuntimeOutbound = {
|
|
59
59
|
sendText: async ({ cfg, to, text, accountId, replyToId, threadId }) => {
|
|
60
60
|
const { account, parsed } = resolveOutboundContext({ cfg, accountId, to });
|
|
61
|
-
return await withAuthenticatedTlonApi({
|
|
61
|
+
return await withAuthenticatedTlonApi({
|
|
62
|
+
url: account.url,
|
|
63
|
+
code: account.code,
|
|
64
|
+
ship: account.ship,
|
|
65
|
+
allowPrivateNetwork: account.allowPrivateNetwork ?? undefined,
|
|
66
|
+
}, async () => {
|
|
62
67
|
const fromShip = normalizeShip(account.ship);
|
|
63
68
|
const replyId = resolveReplyId(replyToId, threadId);
|
|
64
69
|
const botProfile = await getBotProfile(fromShip);
|
|
65
|
-
if (parsed.kind ===
|
|
66
|
-
return await sendDm({
|
|
70
|
+
if (parsed.kind === 'dm') {
|
|
71
|
+
return await sendDm({
|
|
72
|
+
fromShip,
|
|
73
|
+
toShip: parsed.ship,
|
|
74
|
+
text,
|
|
75
|
+
replyToId: replyId,
|
|
76
|
+
botProfile,
|
|
77
|
+
});
|
|
67
78
|
}
|
|
68
79
|
return await sendChannelPost({
|
|
69
80
|
fromShip,
|
|
@@ -74,16 +85,29 @@ export const tlonRuntimeOutbound = {
|
|
|
74
85
|
});
|
|
75
86
|
});
|
|
76
87
|
},
|
|
77
|
-
sendMedia: async ({ cfg, to, text, mediaUrl, accountId, replyToId, threadId }) => {
|
|
88
|
+
sendMedia: async ({ cfg, to, text, mediaUrl, accountId, replyToId, threadId, }) => {
|
|
78
89
|
const { account, parsed } = resolveOutboundContext({ cfg, accountId, to });
|
|
79
|
-
return await withAuthenticatedTlonApi({
|
|
80
|
-
|
|
90
|
+
return await withAuthenticatedTlonApi({
|
|
91
|
+
url: account.url,
|
|
92
|
+
code: account.code,
|
|
93
|
+
ship: account.ship,
|
|
94
|
+
allowPrivateNetwork: account.allowPrivateNetwork ?? undefined,
|
|
95
|
+
}, async () => {
|
|
96
|
+
const uploadedUrl = mediaUrl
|
|
97
|
+
? await uploadImageFromUrl(mediaUrl)
|
|
98
|
+
: undefined;
|
|
81
99
|
const fromShip = normalizeShip(account.ship);
|
|
82
100
|
const story = buildMediaStory(text, uploadedUrl);
|
|
83
101
|
const replyId = resolveReplyId(replyToId, threadId);
|
|
84
102
|
const botProfile = await getBotProfile(fromShip);
|
|
85
|
-
if (parsed.kind ===
|
|
86
|
-
return await sendDmWithStory({
|
|
103
|
+
if (parsed.kind === 'dm') {
|
|
104
|
+
return await sendDmWithStory({
|
|
105
|
+
fromShip,
|
|
106
|
+
toShip: parsed.ship,
|
|
107
|
+
story,
|
|
108
|
+
replyToId: replyId,
|
|
109
|
+
botProfile,
|
|
110
|
+
});
|
|
87
111
|
}
|
|
88
112
|
return await sendChannelPost({
|
|
89
113
|
fromShip,
|
|
@@ -98,17 +122,19 @@ export const tlonRuntimeOutbound = {
|
|
|
98
122
|
export async function probeTlonAccount(account) {
|
|
99
123
|
try {
|
|
100
124
|
const ssrfPolicy = ssrfPolicyFromAllowPrivateNetwork(account.allowPrivateNetwork);
|
|
101
|
-
const cookie = await authenticate(account.url, account.code, {
|
|
125
|
+
const cookie = await authenticate(account.url, account.code, {
|
|
126
|
+
ssrfPolicy,
|
|
127
|
+
});
|
|
102
128
|
const { response, release } = await urbitFetch({
|
|
103
129
|
baseUrl: account.url,
|
|
104
|
-
path:
|
|
130
|
+
path: '/~/name',
|
|
105
131
|
init: {
|
|
106
|
-
method:
|
|
132
|
+
method: 'GET',
|
|
107
133
|
headers: { Cookie: cookie },
|
|
108
134
|
},
|
|
109
135
|
ssrfPolicy,
|
|
110
136
|
timeoutMs: 30_000,
|
|
111
|
-
auditContext:
|
|
137
|
+
auditContext: 'tlon-probe-account',
|
|
112
138
|
});
|
|
113
139
|
try {
|
|
114
140
|
if (!response.ok) {
|
|
@@ -121,7 +147,10 @@ export async function probeTlonAccount(account) {
|
|
|
121
147
|
}
|
|
122
148
|
}
|
|
123
149
|
catch (error) {
|
|
124
|
-
return {
|
|
150
|
+
return {
|
|
151
|
+
ok: false,
|
|
152
|
+
error: error?.message ?? String(error),
|
|
153
|
+
};
|
|
125
154
|
}
|
|
126
155
|
}
|
|
127
156
|
export async function startTlonGatewayAccount(ctx) {
|
|
@@ -131,7 +160,7 @@ export async function startTlonGatewayAccount(ctx) {
|
|
|
131
160
|
ship: account.ship,
|
|
132
161
|
url: account.url,
|
|
133
162
|
});
|
|
134
|
-
ctx.log?.info(`[${account.accountId}] starting Tlon provider for ${account.ship ??
|
|
163
|
+
ctx.log?.info(`[${account.accountId}] starting Tlon provider for ${account.ship ?? 'tlon'}`);
|
|
135
164
|
return monitorTlonProvider({
|
|
136
165
|
runtime: ctx.runtime,
|
|
137
166
|
abortSignal: ctx.abortSignal,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel.runtime.js","sourceRoot":"","sources":["../../src/channel.runtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"channel.runtime.js","sourceRoot":"","sources":["../../src/channel.runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AASrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,iCAAiC,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAEL,eAAe,EACf,eAAe,EACf,MAAM,EACN,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AASvD,kEAAkE;AAClE,MAAM,YAAY,GAAG,IAAI,GAAG,EAA6B,CAAC;AAE1D;;;GAGG;AACH,KAAK,UAAU,aAAa,CAAC,IAAY;IACvC,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACjD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAG3B,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAE1C,MAAM,OAAO,GAAe;YAC1B,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE;YAC5C,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE;SACzC,CAAC;QACF,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEhC,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACvC,OAAO,CAAC,GAAG,CACT,2CAA2C,IAAI,MAAM,OAAO,CAAC,QAAQ,IAAI,eAAe,EAAE,CAC3F,CAAC;YACF,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,qDAAqD,GAAG,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,sBAAsB,CAAC,MAI/B;IACC,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,IAAI,SAAS,CAAC,CAAC;IAC9E,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,4BAA4B,gBAAgB,EAAE,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,OAAgC,EAAE,MAAM,EAAE,CAAC;AAC/D,CAAC;AAED,SAAS,cAAc,CACrB,SAAyB,EACzB,QAAiC;IAEjC,OAAO,SAAS,IAAI,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3E,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAG5B;IACF,QAAQ,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;QACpE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,sBAAsB,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3E,OAAO,MAAM,wBAAwB,CACnC;YACE,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,IAAI,SAAS;SAC9D,EACD,KAAK,IAAI,EAAE;YACT,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACpD,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;YACjD,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBACzB,OAAO,MAAM,MAAM,CAAC;oBAClB,QAAQ;oBACR,MAAM,EAAE,MAAM,CAAC,IAAI;oBACnB,IAAI;oBACJ,SAAS,EAAE,OAAO;oBAClB,UAAU;iBACX,CAAC,CAAC;YACL,CAAC;YACD,OAAO,MAAM,eAAe,CAAC;gBAC3B,QAAQ;gBACR,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,eAAe,CAAC,IAAI,CAAC;gBAC5B,SAAS,EAAE,OAAO;gBAClB,UAAU;aACX,CAAC,CAAC;QACL,CAAC,CACF,CAAC;IACJ,CAAC;IACD,SAAS,EAAE,KAAK,EAAE,EAChB,GAAG,EACH,EAAE,EACF,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,SAAS,EACT,QAAQ,GACT,EAAE,EAAE;QACH,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,sBAAsB,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3E,OAAO,MAAM,wBAAwB,CACnC;YACE,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,IAAI,SAAS;SAC9D,EACD,KAAK,IAAI,EAAE;YACT,MAAM,WAAW,GAAG,QAAQ;gBAC1B,CAAC,CAAC,MAAM,kBAAkB,CAAC,QAAQ,CAAC;gBACpC,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACpD,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;YACjD,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBACzB,OAAO,MAAM,eAAe,CAAC;oBAC3B,QAAQ;oBACR,MAAM,EAAE,MAAM,CAAC,IAAI;oBACnB,KAAK;oBACL,SAAS,EAAE,OAAO;oBAClB,UAAU;iBACX,CAAC,CAAC;YACL,CAAC;YACD,OAAO,MAAM,eAAe,CAAC;gBAC3B,QAAQ;gBACR,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK;gBACL,SAAS,EAAE,OAAO;gBAClB,UAAU;aACX,CAAC,CAAC;QACL,CAAC,CACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAA8B;IACnE,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,iCAAiC,CAClD,OAAO,CAAC,mBAAmB,CAC5B,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE;YAC3D,UAAU;SACX,CAAC,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,UAAU,CAAC;YAC7C,OAAO,EAAE,OAAO,CAAC,GAAG;YACpB,IAAI,EAAE,SAAS;YACf,IAAI,EAAE;gBACJ,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;aAC5B;YACD,UAAU;YACV,SAAS,EAAE,MAAM;YACjB,YAAY,EAAE,oBAAoB;SACnC,CAAC,CAAC;QACH,IAAI,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAwB,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YACzE,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;QACtB,CAAC;gBAAS,CAAC;YACT,MAAM,OAAO,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAG,KAA8B,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC;SACjE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,GAEI;IAEJ,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAC5B,GAAG,CAAC,SAAS,CAAC;QACZ,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,GAAG,EAAE,OAAO,CAAC,GAAG;KACS,CAAC,CAAC;IAC7B,GAAG,CAAC,GAAG,EAAE,IAAI,CACX,IAAI,OAAO,CAAC,SAAS,gCAAgC,OAAO,CAAC,IAAI,IAAI,MAAM,EAAE,CAC9E,CAAC;IACF,OAAO,mBAAmB,CAAC;QACzB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -1,20 +1,34 @@
|
|
|
1
|
-
import { buildChannelConfigSchema } from
|
|
2
|
-
import { z } from
|
|
1
|
+
import { buildChannelConfigSchema } from 'openclaw/plugin-sdk/core';
|
|
2
|
+
import { z } from 'zod';
|
|
3
3
|
const ShipSchema = z.string().min(1);
|
|
4
4
|
const ChannelNestSchema = z.string().min(1);
|
|
5
5
|
export const TlonChannelRuleSchema = z.object({
|
|
6
|
-
mode: z.enum([
|
|
6
|
+
mode: z.enum(['restricted', 'open']).optional(),
|
|
7
7
|
allowedShips: z.array(ShipSchema).optional(),
|
|
8
8
|
});
|
|
9
9
|
export const TlonAuthorizationSchema = z.object({
|
|
10
10
|
channelRules: z.record(z.string(), TlonChannelRuleSchema).optional(),
|
|
11
11
|
});
|
|
12
|
-
export const ReactionLevelSchema = z.enum([
|
|
12
|
+
export const ReactionLevelSchema = z.enum([
|
|
13
|
+
'off',
|
|
14
|
+
'ack',
|
|
15
|
+
'minimal',
|
|
16
|
+
'extensive',
|
|
17
|
+
]);
|
|
13
18
|
export const TlonTelemetrySchema = z.object({
|
|
14
19
|
enabled: z.boolean().optional(),
|
|
15
20
|
apiKey: z.string().min(1).optional(),
|
|
16
21
|
host: z.string().min(1).optional(),
|
|
17
22
|
});
|
|
23
|
+
/**
|
|
24
|
+
* Canonical private-network opt-in. The flat top-level
|
|
25
|
+
* `allowPrivateNetwork` field below is kept as a deprecated alias; new
|
|
26
|
+
* configs should use `network.dangerouslyAllowPrivateNetwork`.
|
|
27
|
+
* `openclaw doctor --fix` migrates the legacy field automatically.
|
|
28
|
+
*/
|
|
29
|
+
export const TlonNetworkSchema = z.object({
|
|
30
|
+
dangerouslyAllowPrivateNetwork: z.boolean().optional(),
|
|
31
|
+
});
|
|
18
32
|
/**
|
|
19
33
|
* Explicit opt-in for the plugin-driven owner re-engagement nudge scheduler.
|
|
20
34
|
*
|
|
@@ -44,9 +58,12 @@ export const TlonAccountSchema = z.object({
|
|
|
44
58
|
ship: ShipSchema.optional(),
|
|
45
59
|
url: z.string().optional(),
|
|
46
60
|
code: z.string().optional(),
|
|
61
|
+
network: TlonNetworkSchema.optional(),
|
|
62
|
+
/** @deprecated Use `network.dangerouslyAllowPrivateNetwork`. Migrated by `openclaw doctor --fix`. */
|
|
47
63
|
allowPrivateNetwork: z.boolean().optional(),
|
|
48
64
|
groupChannels: z.array(ChannelNestSchema).optional(),
|
|
49
65
|
dmAllowlist: z.array(ShipSchema).optional(),
|
|
66
|
+
groupInviteAllowlist: z.array(ShipSchema).optional(),
|
|
50
67
|
autoDiscoverChannels: z.boolean().optional(),
|
|
51
68
|
showModelSignature: z.boolean().optional(),
|
|
52
69
|
// Auto-accept settings
|
|
@@ -73,9 +90,12 @@ export const TlonConfigSchema = z.object({
|
|
|
73
90
|
ship: ShipSchema.optional(),
|
|
74
91
|
url: z.string().optional(),
|
|
75
92
|
code: z.string().optional(),
|
|
93
|
+
network: TlonNetworkSchema.optional(),
|
|
94
|
+
/** @deprecated Use `network.dangerouslyAllowPrivateNetwork`. Migrated by `openclaw doctor --fix`. */
|
|
76
95
|
allowPrivateNetwork: z.boolean().optional(),
|
|
77
96
|
groupChannels: z.array(ChannelNestSchema).optional(),
|
|
78
97
|
dmAllowlist: z.array(ShipSchema).optional(),
|
|
98
|
+
groupInviteAllowlist: z.array(ShipSchema).optional(),
|
|
79
99
|
autoDiscoverChannels: z.boolean().optional(),
|
|
80
100
|
showModelSignature: z.boolean().optional(),
|
|
81
101
|
authorization: TlonAuthorizationSchema.optional(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../../src/config-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAE5C,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC/C,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE;CAC7C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC,QAAQ,EAAE;CACrE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../../src/config-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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,
|
|
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,CACnC,SAAiB,EACjB,IAAmB;IAEnB,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"}
|
|
@@ -1,5 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { gatewayHeartbeat, gatewayStop } from '@tloncorp/api';
|
|
2
|
+
import { randomUUID } from 'node:crypto';
|
|
3
|
+
import { sharedSlot } from './shared-state.js';
|
|
4
|
+
import { configureTlonApiWithPoke } from './urbit/api-client.js';
|
|
5
|
+
// Shared-state slot for the @tloncorp/api client params. The monitor
|
|
6
|
+
// publishes its SSE-bound poke + ship coords here; every other module
|
|
7
|
+
// context (notably this one) reads them and configures its OWN local
|
|
8
|
+
// @tloncorp/api singleton before any poke call. Storing a callback would
|
|
9
|
+
// configure the publisher's @tloncorp/api instance, not the reader's, so
|
|
10
|
+
// we deliberately move *data* through the slot, not behavior.
|
|
11
|
+
export const API_CLIENT_PARAMS_SLOT = '@tloncorp/openclaw.api-client-params';
|
|
12
|
+
const apiClientParamsSlot = sharedSlot(API_CLIENT_PARAMS_SLOT);
|
|
3
13
|
// ── Constants (matching design doc recommendations) ─────────
|
|
4
14
|
const HEARTBEAT_INTERVAL_MS = 30_000; // 30s
|
|
5
15
|
const LEASE_DURATION_MS = 90_000; // 90s
|
|
@@ -12,6 +22,7 @@ export function computeLeaseUntil() {
|
|
|
12
22
|
export function createGatewayStatusManager(opts) {
|
|
13
23
|
const bootId = randomUUID();
|
|
14
24
|
let heartbeatInterval = null;
|
|
25
|
+
let starting = false;
|
|
15
26
|
let activated = false;
|
|
16
27
|
let stopped = false;
|
|
17
28
|
let resolveStarted;
|
|
@@ -26,6 +37,12 @@ export function createGatewayStatusManager(opts) {
|
|
|
26
37
|
waitForGatewayStart() {
|
|
27
38
|
return startedPromise;
|
|
28
39
|
},
|
|
40
|
+
get starting() {
|
|
41
|
+
return starting;
|
|
42
|
+
},
|
|
43
|
+
markStarting() {
|
|
44
|
+
starting = true;
|
|
45
|
+
},
|
|
29
46
|
get activated() {
|
|
30
47
|
return activated;
|
|
31
48
|
},
|
|
@@ -44,6 +61,19 @@ export function createGatewayStatusManager(opts) {
|
|
|
44
61
|
}
|
|
45
62
|
heartbeatInterval = setInterval(async () => {
|
|
46
63
|
try {
|
|
64
|
+
// Configure THIS module's @tloncorp/api instance against the
|
|
65
|
+
// monitor-published params every tick. Under OpenClaw plugin
|
|
66
|
+
// module isolation this code path can hold a separate
|
|
67
|
+
// @tloncorp/api instance from the monitor; outbound DMs via
|
|
68
|
+
// `withAuthenticatedTlonApi` can also rotate the global
|
|
69
|
+
// client between heartbeats. Reapplying here keeps the
|
|
70
|
+
// heartbeat poke pointed at the SSE-bound client.
|
|
71
|
+
const params = apiClientParamsSlot.get();
|
|
72
|
+
if (!params) {
|
|
73
|
+
opts.logger?.error?.('[gateway-status] heartbeat skipped: api-client params not published');
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
configureTlonApiWithPoke(params.poke, params.shipName, params.shipUrl);
|
|
47
77
|
await gatewayHeartbeat({ bootId, leaseUntil: computeLeaseUntil() });
|
|
48
78
|
}
|
|
49
79
|
catch (err) {
|
|
@@ -56,17 +86,35 @@ export function createGatewayStatusManager(opts) {
|
|
|
56
86
|
if (heartbeatInterval) {
|
|
57
87
|
clearInterval(heartbeatInterval);
|
|
58
88
|
heartbeatInterval = null;
|
|
59
|
-
opts.logger?.log?.(
|
|
89
|
+
opts.logger?.log?.('[gateway-status] heartbeat stopped');
|
|
60
90
|
}
|
|
61
91
|
},
|
|
62
92
|
};
|
|
63
93
|
}
|
|
64
|
-
//
|
|
65
|
-
|
|
94
|
+
// Routed through shared-state so the slot survives plugin module isolation —
|
|
95
|
+
// the extension sets, the monitor reads, and they live in separate contexts.
|
|
96
|
+
const managerSlot = sharedSlot('gateway-status.manager');
|
|
66
97
|
export function setGatewayStatusManager(m) {
|
|
67
|
-
|
|
98
|
+
managerSlot.set(m);
|
|
68
99
|
}
|
|
69
100
|
export function getGatewayStatusManager() {
|
|
70
|
-
return
|
|
101
|
+
return managerSlot.get();
|
|
102
|
+
}
|
|
103
|
+
// Configure THIS module's @tloncorp/api singleton against the
|
|
104
|
+
// monitor-published params, then send the gateway-stop poke. Callers
|
|
105
|
+
// (notably the gateway_stop hook in index.ts) must go through this helper
|
|
106
|
+
// instead of importing `gatewayStop` directly, because under OpenClaw
|
|
107
|
+
// >=2026.4.27 plugin module isolation the entry module's @tloncorp/api
|
|
108
|
+
// instance is never configured — only the monitor's is. Routing through
|
|
109
|
+
// gateway-status.ts reuses the same configured instance the heartbeat uses.
|
|
110
|
+
// Returns true if the poke was sent, false if the params slot was empty.
|
|
111
|
+
export async function sendGatewayStop(params) {
|
|
112
|
+
const apiParams = apiClientParamsSlot.get();
|
|
113
|
+
if (!apiParams) {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
configureTlonApiWithPoke(apiParams.poke, apiParams.shipName, apiParams.shipUrl);
|
|
117
|
+
await gatewayStop({ bootId: params.bootId, reason: params.reason });
|
|
118
|
+
return true;
|
|
71
119
|
}
|
|
72
120
|
//# sourceMappingURL=gateway-status.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway-status.js","sourceRoot":"","sources":["../../src/gateway-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"gateway-status.js","sourceRoot":"","sources":["../../src/gateway-status.ts"],"names":[],"mappings":"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"}
|