@phronesis-io/openclaw-eigenflux 0.0.3 → 0.0.6
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 +15 -161
- package/dist/agent-prompt-templates.d.ts +14 -11
- package/dist/agent-prompt-templates.d.ts.map +1 -1
- package/dist/agent-prompt-templates.js +27 -38
- package/dist/agent-prompt-templates.js.map +1 -1
- package/dist/cli-executor.d.ts +32 -0
- package/dist/cli-executor.d.ts.map +1 -0
- package/dist/cli-executor.js +75 -0
- package/dist/cli-executor.js.map +1 -0
- package/dist/config.d.ts +41 -126
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +94 -229
- package/dist/config.js.map +1 -1
- package/dist/credentials-loader.d.ts +6 -5
- package/dist/credentials-loader.d.ts.map +1 -1
- package/dist/credentials-loader.js +17 -21
- package/dist/credentials-loader.js.map +1 -1
- package/dist/index.d.ts +3 -73
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +212 -276
- package/dist/index.js.map +1 -1
- package/dist/notification-route-resolver.d.ts +24 -2
- package/dist/notification-route-resolver.d.ts.map +1 -1
- package/dist/notification-route-resolver.js +257 -43
- package/dist/notification-route-resolver.js.map +1 -1
- package/dist/notifier.d.ts +9 -17
- package/dist/notifier.d.ts.map +1 -1
- package/dist/notifier.js +133 -66
- package/dist/notifier.js.map +1 -1
- package/dist/polling-client.d.ts +31 -19
- package/dist/polling-client.d.ts.map +1 -1
- package/dist/polling-client.js +102 -127
- package/dist/polling-client.js.map +1 -1
- package/dist/reply-target.d.ts +8 -0
- package/dist/reply-target.d.ts.map +1 -0
- package/dist/reply-target.js +104 -0
- package/dist/reply-target.js.map +1 -0
- package/dist/session-route-memory.d.ts +12 -3
- package/dist/session-route-memory.d.ts.map +1 -1
- package/dist/session-route-memory.js +83 -80
- package/dist/session-route-memory.js.map +1 -1
- package/dist/stream-client.d.ts +48 -0
- package/dist/stream-client.d.ts.map +1 -0
- package/dist/stream-client.js +168 -0
- package/dist/stream-client.js.map +1 -0
- package/openclaw.plugin.json +5 -75
- package/package.json +6 -8
- package/skills/ef-broadcast/SKILL.md +84 -0
- package/skills/ef-broadcast/references/feed.md +127 -0
- package/skills/ef-broadcast/references/publish.md +119 -0
- package/skills/ef-communication/SKILL.md +95 -0
- package/skills/ef-communication/references/message.md +132 -0
- package/skills/ef-communication/references/relations.md +215 -0
- package/skills/ef-communication/references/stream.md +66 -0
- package/skills/ef-profile/SKILL.md +138 -0
- package/skills/ef-profile/references/auth.md +103 -0
- package/skills/ef-profile/references/config.md +54 -0
- package/skills/ef-profile/references/onboarding.md +172 -0
- package/skills/ef-profile/references/server-management.md +67 -0
- package/dist/gateway-rpc-client.d.ts +0 -26
- package/dist/gateway-rpc-client.d.ts.map +0 -1
- package/dist/gateway-rpc-client.js +0 -288
- package/dist/gateway-rpc-client.js.map +0 -1
- package/dist/pm-polling-client.d.ts +0 -52
- package/dist/pm-polling-client.d.ts.map +0 -1
- package/dist/pm-polling-client.js +0 -182
- package/dist/pm-polling-client.js.map +0 -1
package/dist/polling-client.js
CHANGED
|
@@ -1,13 +1,52 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* Polling client for EigenFlux feed updates
|
|
3
|
+
* Polling client for EigenFlux feed updates.
|
|
4
|
+
* Uses the eigenflux CLI (`eigenflux feed poll`) instead of direct HTTP calls.
|
|
4
5
|
*/
|
|
5
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.EigenFluxPollingClient = void 0;
|
|
7
|
-
|
|
7
|
+
exports.EigenFluxPollingClient = exports.MAX_POLL_INTERVAL_SEC = exports.MIN_POLL_INTERVAL_SEC = exports.DEFAULT_POLL_INTERVAL_SEC = exports.POLL_INTERVAL_CONFIG_KEY = void 0;
|
|
8
|
+
exports.readPollIntervalSec = readPollIntervalSec;
|
|
9
|
+
const cli_executor_1 = require("./cli-executor");
|
|
10
|
+
exports.POLL_INTERVAL_CONFIG_KEY = 'feed_poll_interval';
|
|
11
|
+
exports.DEFAULT_POLL_INTERVAL_SEC = 600;
|
|
12
|
+
exports.MIN_POLL_INTERVAL_SEC = 10;
|
|
13
|
+
exports.MAX_POLL_INTERVAL_SEC = 24 * 60 * 60;
|
|
14
|
+
/**
|
|
15
|
+
* Reads the feed poll interval (in seconds) from the eigenflux CLI config
|
|
16
|
+
* (`eigenflux config get --key feed_poll_interval`). Values are stored as
|
|
17
|
+
* decimal-string seconds per the config KV conventions. Falls back to 600
|
|
18
|
+
* (10 minutes) when the key is unset, the value is invalid, out of the
|
|
19
|
+
* supported range [10s, 86400s], or the CLI call fails.
|
|
20
|
+
*/
|
|
21
|
+
async function readPollIntervalSec(eigenfluxBin, serverName, logger) {
|
|
22
|
+
const result = await (0, cli_executor_1.execEigenflux)(eigenfluxBin, ['config', 'get', '--key', exports.POLL_INTERVAL_CONFIG_KEY, '--server', serverName, '--format', 'json'], { logger });
|
|
23
|
+
if (result.kind !== 'success' || result.data === undefined || result.data === null) {
|
|
24
|
+
return exports.DEFAULT_POLL_INTERVAL_SEC;
|
|
25
|
+
}
|
|
26
|
+
let numeric;
|
|
27
|
+
if (typeof result.data === 'number' && Number.isFinite(result.data)) {
|
|
28
|
+
numeric = result.data;
|
|
29
|
+
}
|
|
30
|
+
else if (typeof result.data === 'string') {
|
|
31
|
+
const parsed = Number(result.data.trim());
|
|
32
|
+
if (Number.isFinite(parsed)) {
|
|
33
|
+
numeric = parsed;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (numeric === undefined) {
|
|
37
|
+
logger.warn(`Ignoring non-numeric pollInterval from eigenflux config (server=${serverName}, value=${JSON.stringify(result.data)}); using ${exports.DEFAULT_POLL_INTERVAL_SEC}s`);
|
|
38
|
+
return exports.DEFAULT_POLL_INTERVAL_SEC;
|
|
39
|
+
}
|
|
40
|
+
const floored = Math.floor(numeric);
|
|
41
|
+
if (floored < exports.MIN_POLL_INTERVAL_SEC || floored > exports.MAX_POLL_INTERVAL_SEC) {
|
|
42
|
+
logger.warn(`pollInterval ${floored}s from eigenflux config (server=${serverName}) is outside [${exports.MIN_POLL_INTERVAL_SEC}s, ${exports.MAX_POLL_INTERVAL_SEC}s]; using ${exports.DEFAULT_POLL_INTERVAL_SEC}s`);
|
|
43
|
+
return exports.DEFAULT_POLL_INTERVAL_SEC;
|
|
44
|
+
}
|
|
45
|
+
return floored;
|
|
46
|
+
}
|
|
8
47
|
class EigenFluxPollingClient {
|
|
9
48
|
constructor(config) {
|
|
10
|
-
this.
|
|
49
|
+
this.timeoutId = null;
|
|
11
50
|
this.isRunning = false;
|
|
12
51
|
this.activePoll = null;
|
|
13
52
|
this.config = config;
|
|
@@ -18,26 +57,49 @@ class EigenFluxPollingClient {
|
|
|
18
57
|
return;
|
|
19
58
|
}
|
|
20
59
|
this.isRunning = true;
|
|
21
|
-
this.config.logger.info(`Starting polling client
|
|
22
|
-
// Initial fetch
|
|
60
|
+
this.config.logger.info(`Starting polling client for server=${this.config.serverName}`);
|
|
61
|
+
// Initial fetch, then self-schedule subsequent polls using the interval
|
|
62
|
+
// freshly resolved from the eigenflux CLI config after each run.
|
|
23
63
|
await this.pollOnce();
|
|
24
|
-
|
|
25
|
-
this.intervalId = setInterval(() => {
|
|
26
|
-
this.pollOnce().catch((err) => {
|
|
27
|
-
this.config.logger.error(`Polling error: ${this.formatError(err)}`);
|
|
28
|
-
});
|
|
29
|
-
}, this.config.pollIntervalSec * 1000);
|
|
64
|
+
this.scheduleNext();
|
|
30
65
|
}
|
|
31
66
|
stop() {
|
|
32
67
|
if (!this.isRunning) {
|
|
33
68
|
return;
|
|
34
69
|
}
|
|
35
|
-
this.config.logger.info(
|
|
70
|
+
this.config.logger.info(`Stopping polling client for server=${this.config.serverName}`);
|
|
36
71
|
this.isRunning = false;
|
|
37
|
-
if (this.
|
|
38
|
-
|
|
39
|
-
this.
|
|
72
|
+
if (this.timeoutId) {
|
|
73
|
+
clearTimeout(this.timeoutId);
|
|
74
|
+
this.timeoutId = null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async scheduleNext() {
|
|
78
|
+
if (!this.isRunning) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
let intervalSec;
|
|
82
|
+
try {
|
|
83
|
+
intervalSec = await this.config.resolvePollIntervalSec();
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
this.config.logger.warn(`Failed to resolve pollInterval for server=${this.config.serverName}: ${error instanceof Error ? error.message : String(error)}; using ${exports.DEFAULT_POLL_INTERVAL_SEC}s`);
|
|
87
|
+
intervalSec = exports.DEFAULT_POLL_INTERVAL_SEC;
|
|
88
|
+
}
|
|
89
|
+
if (!this.isRunning) {
|
|
90
|
+
return;
|
|
40
91
|
}
|
|
92
|
+
this.config.logger.debug(`Scheduling next feed poll for server=${this.config.serverName} in ${intervalSec}s`);
|
|
93
|
+
this.timeoutId = setTimeout(() => {
|
|
94
|
+
this.timeoutId = null;
|
|
95
|
+
this.pollOnce()
|
|
96
|
+
.catch((err) => {
|
|
97
|
+
this.config.logger.error(`Polling error: ${err instanceof Error ? err.message : String(err)}`);
|
|
98
|
+
})
|
|
99
|
+
.finally(() => {
|
|
100
|
+
this.scheduleNext();
|
|
101
|
+
});
|
|
102
|
+
}, intervalSec * 1000);
|
|
41
103
|
}
|
|
42
104
|
async pollOnce(options = {}) {
|
|
43
105
|
if (this.activePoll) {
|
|
@@ -47,72 +109,43 @@ class EigenFluxPollingClient {
|
|
|
47
109
|
const run = async () => {
|
|
48
110
|
const notifyFeed = options.notifyFeed ?? true;
|
|
49
111
|
const notifyAuthRequired = options.notifyAuthRequired ?? true;
|
|
50
|
-
const authState = this.config.getAuthState();
|
|
51
|
-
if (authState.status !== 'available') {
|
|
52
|
-
this.config.logger.warn(`No usable access token available (status=${authState.status}), skipping poll`);
|
|
53
|
-
const authEvent = {
|
|
54
|
-
reason: authState.status === 'expired' ? 'expired_token' : 'missing_token',
|
|
55
|
-
credentialsPath: authState.credentialsPath,
|
|
56
|
-
source: authState.source,
|
|
57
|
-
expiresAt: authState.expiresAt,
|
|
58
|
-
};
|
|
59
|
-
if (notifyAuthRequired) {
|
|
60
|
-
await this.config.onAuthRequired(authEvent);
|
|
61
|
-
}
|
|
62
|
-
return {
|
|
63
|
-
kind: 'auth_required',
|
|
64
|
-
authEvent,
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
const url = `${this.config.apiUrl}/api/v1/items/feed?action=refresh&limit=20`;
|
|
68
112
|
try {
|
|
69
|
-
this.config.logger.info(`Polling feed
|
|
70
|
-
this.config.logger
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
headers: (0, config_1.buildEigenFluxRequestHeaders)(authState.accessToken),
|
|
74
|
-
});
|
|
75
|
-
if (response.status === 401) {
|
|
76
|
-
const authEvent = {
|
|
77
|
-
reason: 'unauthorized',
|
|
78
|
-
credentialsPath: authState.credentialsPath,
|
|
79
|
-
source: authState.source,
|
|
80
|
-
expiresAt: authState.expiresAt,
|
|
81
|
-
statusCode: 401,
|
|
82
|
-
};
|
|
113
|
+
this.config.logger.info(`Polling feed via CLI for server=${this.config.serverName}`);
|
|
114
|
+
const result = await (0, cli_executor_1.execEigenflux)(this.config.eigenfluxBin, ['feed', 'poll', '--limit', '20', '--action', 'refresh', '-s', this.config.serverName, '-f', 'json'], { logger: this.config.logger });
|
|
115
|
+
if (result.kind === 'auth_required') {
|
|
116
|
+
const authEvent = { reason: 'auth_required' };
|
|
83
117
|
if (notifyAuthRequired) {
|
|
84
118
|
await this.config.onAuthRequired(authEvent);
|
|
85
119
|
}
|
|
120
|
+
return { kind: 'auth_required', authEvent };
|
|
121
|
+
}
|
|
122
|
+
if (result.kind === 'not_installed') {
|
|
86
123
|
return {
|
|
87
|
-
kind: '
|
|
88
|
-
|
|
124
|
+
kind: 'error',
|
|
125
|
+
error: new Error(`eigenflux CLI not installed (bin=${result.bin})`),
|
|
89
126
|
};
|
|
90
127
|
}
|
|
91
|
-
if (
|
|
92
|
-
|
|
93
|
-
}
|
|
94
|
-
const data = (await response.json());
|
|
95
|
-
if (data.code !== 0) {
|
|
96
|
-
throw new Error(`API error: ${data.msg}`);
|
|
128
|
+
if (result.kind === 'error') {
|
|
129
|
+
return { kind: 'error', error: result.error };
|
|
97
130
|
}
|
|
98
|
-
|
|
99
|
-
const
|
|
100
|
-
|
|
131
|
+
// Reconstruct full FeedResponse envelope from CLI data output
|
|
132
|
+
const feedResponse = {
|
|
133
|
+
code: 0,
|
|
134
|
+
msg: 'success',
|
|
135
|
+
data: result.data,
|
|
136
|
+
};
|
|
137
|
+
const items = feedResponse.data.items ?? [];
|
|
138
|
+
const notifications = feedResponse.data.notifications ?? [];
|
|
139
|
+
this.config.logger.info(`Polled feed: ${items.length} items, notifications=${notifications.length}, has_more=${feedResponse.data.has_more}`);
|
|
101
140
|
if (notifyFeed && (items.length > 0 || notifications.length > 0)) {
|
|
102
|
-
await this.config.onFeedPolled(
|
|
141
|
+
await this.config.onFeedPolled(feedResponse);
|
|
103
142
|
}
|
|
104
|
-
return {
|
|
105
|
-
kind: 'success',
|
|
106
|
-
payload: data,
|
|
107
|
-
};
|
|
143
|
+
return { kind: 'success', payload: feedResponse };
|
|
108
144
|
}
|
|
109
145
|
catch (error) {
|
|
110
146
|
const normalized = error instanceof Error ? error : new Error(String(error));
|
|
111
|
-
this.config.logger.error(`Failed to poll feed
|
|
112
|
-
return {
|
|
113
|
-
kind: 'error',
|
|
114
|
-
error: normalized,
|
|
115
|
-
};
|
|
147
|
+
this.config.logger.error(`Failed to poll feed for server=${this.config.serverName}: ${normalized.message}`);
|
|
148
|
+
return { kind: 'error', error: normalized };
|
|
116
149
|
}
|
|
117
150
|
};
|
|
118
151
|
this.activePoll = run().finally(() => {
|
|
@@ -120,64 +153,6 @@ class EigenFluxPollingClient {
|
|
|
120
153
|
});
|
|
121
154
|
return this.activePoll;
|
|
122
155
|
}
|
|
123
|
-
formatError(error) {
|
|
124
|
-
const segments = [];
|
|
125
|
-
this.appendErrorSegment(segments, error, false);
|
|
126
|
-
return segments.join(' | ');
|
|
127
|
-
}
|
|
128
|
-
appendErrorSegment(segments, error, isCause) {
|
|
129
|
-
const prefix = isCause ? 'cause=' : '';
|
|
130
|
-
if (error instanceof Error) {
|
|
131
|
-
const details = [`${error.name}: ${error.message}`];
|
|
132
|
-
const metadata = this.errorMetadata(error);
|
|
133
|
-
if (metadata.length > 0) {
|
|
134
|
-
details.push(...metadata);
|
|
135
|
-
}
|
|
136
|
-
segments.push(prefix + details.join(' | '));
|
|
137
|
-
const cause = error.cause;
|
|
138
|
-
if (cause !== undefined) {
|
|
139
|
-
this.appendErrorSegment(segments, cause, true);
|
|
140
|
-
}
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
if (error && typeof error === 'object') {
|
|
144
|
-
const metadata = this.errorMetadata(error);
|
|
145
|
-
if (metadata.length > 0) {
|
|
146
|
-
segments.push(prefix + metadata.join(' | '));
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
segments.push(prefix + String(error));
|
|
151
|
-
}
|
|
152
|
-
errorMetadata(value) {
|
|
153
|
-
if (!value || typeof value !== 'object') {
|
|
154
|
-
return [];
|
|
155
|
-
}
|
|
156
|
-
const record = value;
|
|
157
|
-
const metadata = [];
|
|
158
|
-
if (record.code !== undefined) {
|
|
159
|
-
metadata.push(`code=${String(record.code)}`);
|
|
160
|
-
}
|
|
161
|
-
if (record.errno !== undefined) {
|
|
162
|
-
metadata.push(`errno=${String(record.errno)}`);
|
|
163
|
-
}
|
|
164
|
-
if (record.syscall !== undefined) {
|
|
165
|
-
metadata.push(`syscall=${String(record.syscall)}`);
|
|
166
|
-
}
|
|
167
|
-
if (record.address !== undefined) {
|
|
168
|
-
metadata.push(`address=${String(record.address)}`);
|
|
169
|
-
}
|
|
170
|
-
if (record.port !== undefined) {
|
|
171
|
-
metadata.push(`port=${String(record.port)}`);
|
|
172
|
-
}
|
|
173
|
-
if (record.status !== undefined) {
|
|
174
|
-
metadata.push(`status=${String(record.status)}`);
|
|
175
|
-
}
|
|
176
|
-
if (record.statusText !== undefined) {
|
|
177
|
-
metadata.push(`status_text=${String(record.statusText)}`);
|
|
178
|
-
}
|
|
179
|
-
return metadata;
|
|
180
|
-
}
|
|
181
156
|
}
|
|
182
157
|
exports.EigenFluxPollingClient = EigenFluxPollingClient;
|
|
183
158
|
//# sourceMappingURL=polling-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"polling-client.js","sourceRoot":"","sources":["../src/polling-client.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"polling-client.js","sourceRoot":"","sources":["../src/polling-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
type ConversationTargetKind = 'user' | 'chat' | 'channel' | 'room';
|
|
2
|
+
export declare function normalizeReplyTarget(value: unknown, options?: {
|
|
3
|
+
channel?: string;
|
|
4
|
+
sessionKey?: string;
|
|
5
|
+
fallbackKind?: ConversationTargetKind;
|
|
6
|
+
}): string | undefined;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=reply-target.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reply-target.d.ts","sourceRoot":"","sources":["../src/reply-target.ts"],"names":[],"mappings":"AAAA,KAAK,sBAAsB,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AA0GnE,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,sBAAsB,CAAC;CACvC,GACA,MAAM,GAAG,SAAS,CAwBpB"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeReplyTarget = normalizeReplyTarget;
|
|
4
|
+
function readNonEmptyString(value) {
|
|
5
|
+
if (typeof value !== 'string') {
|
|
6
|
+
return undefined;
|
|
7
|
+
}
|
|
8
|
+
const trimmed = value.trim();
|
|
9
|
+
return trimmed.length > 0 ? trimmed : undefined;
|
|
10
|
+
}
|
|
11
|
+
function isNormalizedConversationTarget(value) {
|
|
12
|
+
return /^(user|chat|channel|room):/u.test(value);
|
|
13
|
+
}
|
|
14
|
+
function isSessionPeerShape(value) {
|
|
15
|
+
const normalized = value?.trim().toLowerCase();
|
|
16
|
+
return (normalized === 'direct' ||
|
|
17
|
+
normalized === 'dm' ||
|
|
18
|
+
normalized === 'group' ||
|
|
19
|
+
normalized === 'channel' ||
|
|
20
|
+
normalized === 'room');
|
|
21
|
+
}
|
|
22
|
+
function supportsKindPrefixedTargets(channel) {
|
|
23
|
+
return channel === 'feishu' || channel === 'discord';
|
|
24
|
+
}
|
|
25
|
+
function parseSessionRoute(sessionKey) {
|
|
26
|
+
const trimmed = readNonEmptyString(sessionKey);
|
|
27
|
+
if (!trimmed) {
|
|
28
|
+
return {};
|
|
29
|
+
}
|
|
30
|
+
const parts = trimmed.split(':').filter((part) => part.length > 0);
|
|
31
|
+
if (parts[0]?.toLowerCase() !== 'agent') {
|
|
32
|
+
return {};
|
|
33
|
+
}
|
|
34
|
+
const channel = readNonEmptyString(parts[2])?.toLowerCase();
|
|
35
|
+
const peerShapeRaw = parts.length >= 6 && isSessionPeerShape(parts[4])
|
|
36
|
+
? parts[4].toLowerCase()
|
|
37
|
+
: parts.length >= 5 && isSessionPeerShape(parts[3])
|
|
38
|
+
? parts[3].toLowerCase()
|
|
39
|
+
: undefined;
|
|
40
|
+
const peerShape = peerShapeRaw;
|
|
41
|
+
return { channel, peerShape };
|
|
42
|
+
}
|
|
43
|
+
function deriveReplyTargetKindFromSessionKey(sessionKey) {
|
|
44
|
+
const route = parseSessionRoute(sessionKey);
|
|
45
|
+
if (!supportsKindPrefixedTargets(route.channel)) {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
switch (route.channel) {
|
|
49
|
+
case 'feishu':
|
|
50
|
+
switch (route.peerShape) {
|
|
51
|
+
case 'direct':
|
|
52
|
+
case 'dm':
|
|
53
|
+
return 'user';
|
|
54
|
+
case 'group':
|
|
55
|
+
return 'chat';
|
|
56
|
+
default:
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
case 'discord':
|
|
60
|
+
switch (route.peerShape) {
|
|
61
|
+
case 'direct':
|
|
62
|
+
case 'dm':
|
|
63
|
+
return 'user';
|
|
64
|
+
case 'channel':
|
|
65
|
+
return 'channel';
|
|
66
|
+
default:
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
default:
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
function deriveReplyTargetKindFromValue(value, channel) {
|
|
74
|
+
if (channel === 'feishu') {
|
|
75
|
+
if (/^ou_/iu.test(value)) {
|
|
76
|
+
return 'user';
|
|
77
|
+
}
|
|
78
|
+
if (/^oc_/iu.test(value)) {
|
|
79
|
+
return 'chat';
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
function normalizeReplyTarget(value, options) {
|
|
85
|
+
const trimmed = readNonEmptyString(value);
|
|
86
|
+
if (!trimmed) {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
if (isNormalizedConversationTarget(trimmed)) {
|
|
90
|
+
return trimmed;
|
|
91
|
+
}
|
|
92
|
+
const channel = readNonEmptyString(options?.channel)?.toLowerCase();
|
|
93
|
+
if (channel && trimmed.startsWith(`${channel}:`)) {
|
|
94
|
+
return normalizeReplyTarget(trimmed.slice(channel.length + 1), {
|
|
95
|
+
...options,
|
|
96
|
+
channel,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
const fallbackKind = deriveReplyTargetKindFromValue(trimmed, channel) ??
|
|
100
|
+
(supportsKindPrefixedTargets(channel) ? options?.fallbackKind : undefined) ??
|
|
101
|
+
deriveReplyTargetKindFromSessionKey(options?.sessionKey);
|
|
102
|
+
return fallbackKind ? `${fallbackKind}:${trimmed}` : trimmed;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=reply-target.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reply-target.js","sourceRoot":"","sources":["../src/reply-target.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Logger } from './logger';
|
|
2
|
+
export declare const DELIVER_SESSION_KEY = "openclaw_deliver_session";
|
|
2
3
|
export type StoredNotificationRoute = {
|
|
3
4
|
sessionKey: string;
|
|
4
5
|
agentId: string;
|
|
@@ -7,7 +8,15 @@ export type StoredNotificationRoute = {
|
|
|
7
8
|
replyAccountId?: string;
|
|
8
9
|
updatedAt: number;
|
|
9
10
|
};
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Reads the remembered delivery route for a server from the eigenflux CLI
|
|
13
|
+
* config store (`openclaw_deliver_session` key). Returns undefined when the
|
|
14
|
+
* key is unset or the CLI call fails.
|
|
15
|
+
*/
|
|
16
|
+
export declare function readStoredNotificationRoute(eigenfluxBin: string | undefined, serverName: string | undefined, logger: Logger): Promise<StoredNotificationRoute | undefined>;
|
|
17
|
+
/**
|
|
18
|
+
* Persists the remembered delivery route for a server via the eigenflux CLI
|
|
19
|
+
* config store (`openclaw_deliver_session` key).
|
|
20
|
+
*/
|
|
21
|
+
export declare function writeStoredNotificationRoute(eigenfluxBin: string | undefined, serverName: string | undefined, route: Omit<StoredNotificationRoute, 'updatedAt'>, logger: Logger): Promise<boolean>;
|
|
13
22
|
//# sourceMappingURL=session-route-memory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-route-memory.d.ts","sourceRoot":"","sources":["../src/session-route-memory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session-route-memory.d.ts","sourceRoot":"","sources":["../src/session-route-memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIlC,eAAO,MAAM,mBAAmB,6BAA6B,CAAC;AAE9D,MAAM,MAAM,uBAAuB,GAAG;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAcF;;;;GAIG;AACH,wBAAsB,2BAA2B,CAC/C,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,uBAAuB,GAAG,SAAS,CAAC,CAuD9C;AAED;;;GAGG;AACH,wBAAsB,4BAA4B,CAChD,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,KAAK,EAAE,IAAI,CAAC,uBAAuB,EAAE,WAAW,CAAC,EACjD,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CAkElB"}
|