@framers/agentos 0.1.26 → 0.1.28
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/dist/api/AgentOSOrchestrator.js +1 -1
- package/dist/api/AgentOSOrchestrator.js.map +1 -1
- package/dist/channels/ChannelRouter.d.ts.map +1 -1
- package/dist/channels/ChannelRouter.js +1 -1
- package/dist/channels/ChannelRouter.js.map +1 -1
- package/dist/channels/IChannelAdapter.d.ts.map +1 -1
- package/dist/channels/adapters/BaseChannelAdapter.d.ts +130 -0
- package/dist/channels/adapters/BaseChannelAdapter.d.ts.map +1 -0
- package/dist/channels/adapters/BaseChannelAdapter.js +257 -0
- package/dist/channels/adapters/BaseChannelAdapter.js.map +1 -0
- package/dist/channels/adapters/DiscordChannelAdapter.d.ts +86 -0
- package/dist/channels/adapters/DiscordChannelAdapter.d.ts.map +1 -0
- package/dist/channels/adapters/DiscordChannelAdapter.js +550 -0
- package/dist/channels/adapters/DiscordChannelAdapter.js.map +1 -0
- package/dist/channels/adapters/GoogleChatChannelAdapter.d.ts +117 -0
- package/dist/channels/adapters/GoogleChatChannelAdapter.d.ts.map +1 -0
- package/dist/channels/adapters/GoogleChatChannelAdapter.js +632 -0
- package/dist/channels/adapters/GoogleChatChannelAdapter.js.map +1 -0
- package/dist/channels/adapters/IRCChannelAdapter.d.ts +86 -0
- package/dist/channels/adapters/IRCChannelAdapter.d.ts.map +1 -0
- package/dist/channels/adapters/IRCChannelAdapter.js +253 -0
- package/dist/channels/adapters/IRCChannelAdapter.js.map +1 -0
- package/dist/channels/adapters/RedditChannelAdapter.d.ts +123 -0
- package/dist/channels/adapters/RedditChannelAdapter.d.ts.map +1 -0
- package/dist/channels/adapters/RedditChannelAdapter.js +516 -0
- package/dist/channels/adapters/RedditChannelAdapter.js.map +1 -0
- package/dist/channels/adapters/SignalChannelAdapter.d.ts +120 -0
- package/dist/channels/adapters/SignalChannelAdapter.d.ts.map +1 -0
- package/dist/channels/adapters/SignalChannelAdapter.js +521 -0
- package/dist/channels/adapters/SignalChannelAdapter.js.map +1 -0
- package/dist/channels/adapters/SlackChannelAdapter.d.ts +96 -0
- package/dist/channels/adapters/SlackChannelAdapter.d.ts.map +1 -0
- package/dist/channels/adapters/SlackChannelAdapter.js +535 -0
- package/dist/channels/adapters/SlackChannelAdapter.js.map +1 -0
- package/dist/channels/adapters/TeamsChannelAdapter.d.ts +138 -0
- package/dist/channels/adapters/TeamsChannelAdapter.d.ts.map +1 -0
- package/dist/channels/adapters/TeamsChannelAdapter.js +639 -0
- package/dist/channels/adapters/TeamsChannelAdapter.js.map +1 -0
- package/dist/channels/adapters/TelegramChannelAdapter.d.ts +83 -0
- package/dist/channels/adapters/TelegramChannelAdapter.d.ts.map +1 -0
- package/dist/channels/adapters/TelegramChannelAdapter.js +463 -0
- package/dist/channels/adapters/TelegramChannelAdapter.js.map +1 -0
- package/dist/channels/adapters/TwitterChannelAdapter.d.ts +117 -0
- package/dist/channels/adapters/TwitterChannelAdapter.d.ts.map +1 -0
- package/dist/channels/adapters/TwitterChannelAdapter.js +489 -0
- package/dist/channels/adapters/TwitterChannelAdapter.js.map +1 -0
- package/dist/channels/adapters/WebChatChannelAdapter.d.ts +141 -0
- package/dist/channels/adapters/WebChatChannelAdapter.d.ts.map +1 -0
- package/dist/channels/adapters/WebChatChannelAdapter.js +539 -0
- package/dist/channels/adapters/WebChatChannelAdapter.js.map +1 -0
- package/dist/channels/adapters/WhatsAppChannelAdapter.d.ts +122 -0
- package/dist/channels/adapters/WhatsAppChannelAdapter.d.ts.map +1 -0
- package/dist/channels/adapters/WhatsAppChannelAdapter.js +643 -0
- package/dist/channels/adapters/WhatsAppChannelAdapter.js.map +1 -0
- package/dist/channels/adapters/index.d.ts +34 -0
- package/dist/channels/adapters/index.d.ts.map +1 -0
- package/dist/channels/adapters/index.js +25 -0
- package/dist/channels/adapters/index.js.map +1 -0
- package/dist/channels/index.d.ts +24 -0
- package/dist/channels/index.d.ts.map +1 -1
- package/dist/channels/index.js +16 -0
- package/dist/channels/index.js.map +1 -1
- package/dist/cognitive_substrate/personas/metaprompt_presets.d.ts.map +1 -1
- package/dist/cognitive_substrate/personas/metaprompt_presets.js +0 -2
- package/dist/cognitive_substrate/personas/metaprompt_presets.js.map +1 -1
- package/dist/core/provenance/crypto/HashChain.d.ts.map +1 -1
- package/dist/core/provenance/enforcement/AutonomyGuard.d.ts.map +1 -1
- package/dist/core/provenance/enforcement/ProvenanceStorageHooks.d.ts.map +1 -1
- package/dist/core/provenance/enforcement/ProvenanceStorageHooks.js +2 -1
- package/dist/core/provenance/enforcement/ProvenanceStorageHooks.js.map +1 -1
- package/dist/core/provenance/ledger/EventTypes.d.ts.map +1 -1
- package/dist/core/safety/ToolExecutionGuard.d.ts.map +1 -1
- package/dist/core/safety/ToolExecutionGuard.js +0 -1
- package/dist/core/safety/ToolExecutionGuard.js.map +1 -1
- package/dist/extensions/ExtensionManager.d.ts.map +1 -1
- package/dist/extensions/ExtensionManager.js +3 -9
- package/dist/extensions/ExtensionManager.js.map +1 -1
- package/dist/rag/RetrievalAugmentor.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview IRC Channel Adapter for AgentOS.
|
|
3
|
+
*
|
|
4
|
+
* Wraps the `irc-framework` npm package to connect agents to IRC servers.
|
|
5
|
+
* IRC was recently added to OpenClaw upstream — this adapter provides
|
|
6
|
+
* first-class support for the protocol within the channel system.
|
|
7
|
+
*
|
|
8
|
+
* **Dependencies**: Requires `irc-framework` to be installed. The adapter
|
|
9
|
+
* uses a dynamic import so the package is only loaded at connection time,
|
|
10
|
+
* avoiding hard failures if it is not present.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const irc = new IRCChannelAdapter();
|
|
15
|
+
* await irc.initialize({
|
|
16
|
+
* platform: 'irc',
|
|
17
|
+
* credential: 'AgentNick', // used as nickname
|
|
18
|
+
* params: {
|
|
19
|
+
* host: 'irc.libera.chat',
|
|
20
|
+
* port: '6697', // TLS by default
|
|
21
|
+
* channels: '#agentos,#wunderland',
|
|
22
|
+
* realname: 'Wunderland Agent',
|
|
23
|
+
* password: '', // server password (optional)
|
|
24
|
+
* },
|
|
25
|
+
* });
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* @module @framers/agentos/channels/adapters/IRCChannelAdapter
|
|
29
|
+
*/
|
|
30
|
+
import type { ChannelAuthConfig, ChannelCapability, ChannelPlatform, ChannelSendResult, MessageContent } from '../types.js';
|
|
31
|
+
import { BaseChannelAdapter } from './BaseChannelAdapter.js';
|
|
32
|
+
/** Platform-specific parameters for IRC connections. */
|
|
33
|
+
export interface IRCAuthParams extends Record<string, string | undefined> {
|
|
34
|
+
/** IRC server hostname. */
|
|
35
|
+
host: string;
|
|
36
|
+
/** Server port (default: '6697' for TLS). */
|
|
37
|
+
port?: string;
|
|
38
|
+
/** Comma-separated list of channels to auto-join. */
|
|
39
|
+
channels?: string;
|
|
40
|
+
/** GECOS / real-name field. */
|
|
41
|
+
realname?: string;
|
|
42
|
+
/** Server password (not NickServ — use credential for that). */
|
|
43
|
+
password?: string;
|
|
44
|
+
/** Whether to use TLS. Default: 'true'. */
|
|
45
|
+
tls?: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Channel adapter for Internet Relay Chat (IRC).
|
|
49
|
+
*
|
|
50
|
+
* Uses the `irc-framework` package via dynamic import so that the
|
|
51
|
+
* dependency is optional — it is only required at runtime when the
|
|
52
|
+
* adapter is actually initialized.
|
|
53
|
+
*
|
|
54
|
+
* Capabilities: `text`, `group_chat`, `channels`, `mentions`.
|
|
55
|
+
* IRC does not natively support rich text, images, reactions, threads,
|
|
56
|
+
* typing indicators, or message editing/deletion.
|
|
57
|
+
*/
|
|
58
|
+
export declare class IRCChannelAdapter extends BaseChannelAdapter<IRCAuthParams> {
|
|
59
|
+
readonly platform: ChannelPlatform;
|
|
60
|
+
readonly displayName = "IRC";
|
|
61
|
+
readonly capabilities: readonly ChannelCapability[];
|
|
62
|
+
/** The irc-framework Client instance. Typed as `any` because the
|
|
63
|
+
* package is dynamically imported and may not be installed. */
|
|
64
|
+
private client;
|
|
65
|
+
/** Channels the bot has joined, keyed by lowercase name. */
|
|
66
|
+
private joinedChannels;
|
|
67
|
+
protected doConnect(auth: ChannelAuthConfig & {
|
|
68
|
+
params?: IRCAuthParams;
|
|
69
|
+
}): Promise<void>;
|
|
70
|
+
protected doSendMessage(conversationId: string, content: MessageContent): Promise<ChannelSendResult>;
|
|
71
|
+
protected doShutdown(): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* Join an additional IRC channel at runtime.
|
|
74
|
+
*/
|
|
75
|
+
joinChannel(channel: string): void;
|
|
76
|
+
/**
|
|
77
|
+
* Part (leave) an IRC channel.
|
|
78
|
+
*/
|
|
79
|
+
partChannel(channel: string, reason?: string): void;
|
|
80
|
+
/**
|
|
81
|
+
* Get the set of channels the bot is currently in.
|
|
82
|
+
*/
|
|
83
|
+
getJoinedChannels(): string[];
|
|
84
|
+
private handleIrcMessage;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=IRCChannelAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IRCChannelAdapter.d.ts","sourceRoot":"","sources":["../../../src/channels/adapters/IRCChannelAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EAEjB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAM7D,wDAAwD;AACxD,MAAM,WAAW,aAAc,SAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACvE,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAMD;;;;;;;;;;GAUG;AACH,qBAAa,iBAAkB,SAAQ,kBAAkB,CAAC,aAAa,CAAC;IACtE,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAS;IAC3C,QAAQ,CAAC,WAAW,SAAS;IAC7B,QAAQ,CAAC,YAAY,EAAE,SAAS,iBAAiB,EAAE,CAKxC;IAEX;oEACgE;IAEhE,OAAO,CAAC,MAAM,CAAkB;IAEhC,4DAA4D;IAC5D,OAAO,CAAC,cAAc,CAA0B;cAIhC,SAAS,CACvB,IAAI,EAAE,iBAAiB,GAAG;QAAE,MAAM,CAAC,EAAE,aAAa,CAAA;KAAE,GACnD,OAAO,CAAC,IAAI,CAAC;cA0GA,aAAa,CAC3B,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,iBAAiB,CAAC;cAyCb,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3C;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOlC;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAQnD;;OAEG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAO7B,OAAO,CAAC,gBAAgB;CA4BzB"}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview IRC Channel Adapter for AgentOS.
|
|
3
|
+
*
|
|
4
|
+
* Wraps the `irc-framework` npm package to connect agents to IRC servers.
|
|
5
|
+
* IRC was recently added to OpenClaw upstream — this adapter provides
|
|
6
|
+
* first-class support for the protocol within the channel system.
|
|
7
|
+
*
|
|
8
|
+
* **Dependencies**: Requires `irc-framework` to be installed. The adapter
|
|
9
|
+
* uses a dynamic import so the package is only loaded at connection time,
|
|
10
|
+
* avoiding hard failures if it is not present.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const irc = new IRCChannelAdapter();
|
|
15
|
+
* await irc.initialize({
|
|
16
|
+
* platform: 'irc',
|
|
17
|
+
* credential: 'AgentNick', // used as nickname
|
|
18
|
+
* params: {
|
|
19
|
+
* host: 'irc.libera.chat',
|
|
20
|
+
* port: '6697', // TLS by default
|
|
21
|
+
* channels: '#agentos,#wunderland',
|
|
22
|
+
* realname: 'Wunderland Agent',
|
|
23
|
+
* password: '', // server password (optional)
|
|
24
|
+
* },
|
|
25
|
+
* });
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* @module @framers/agentos/channels/adapters/IRCChannelAdapter
|
|
29
|
+
*/
|
|
30
|
+
import { BaseChannelAdapter } from './BaseChannelAdapter.js';
|
|
31
|
+
// ============================================================================
|
|
32
|
+
// IRCChannelAdapter
|
|
33
|
+
// ============================================================================
|
|
34
|
+
/**
|
|
35
|
+
* Channel adapter for Internet Relay Chat (IRC).
|
|
36
|
+
*
|
|
37
|
+
* Uses the `irc-framework` package via dynamic import so that the
|
|
38
|
+
* dependency is optional — it is only required at runtime when the
|
|
39
|
+
* adapter is actually initialized.
|
|
40
|
+
*
|
|
41
|
+
* Capabilities: `text`, `group_chat`, `channels`, `mentions`.
|
|
42
|
+
* IRC does not natively support rich text, images, reactions, threads,
|
|
43
|
+
* typing indicators, or message editing/deletion.
|
|
44
|
+
*/
|
|
45
|
+
export class IRCChannelAdapter extends BaseChannelAdapter {
|
|
46
|
+
constructor() {
|
|
47
|
+
super(...arguments);
|
|
48
|
+
this.platform = 'irc';
|
|
49
|
+
this.displayName = 'IRC';
|
|
50
|
+
this.capabilities = [
|
|
51
|
+
'text',
|
|
52
|
+
'group_chat',
|
|
53
|
+
'channels',
|
|
54
|
+
'mentions',
|
|
55
|
+
];
|
|
56
|
+
/** Channels the bot has joined, keyed by lowercase name. */
|
|
57
|
+
this.joinedChannels = new Set();
|
|
58
|
+
}
|
|
59
|
+
// ── Abstract hook implementations ──
|
|
60
|
+
async doConnect(auth) {
|
|
61
|
+
// Dynamic import — fails gracefully if irc-framework is not installed
|
|
62
|
+
let IrcFramework; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
63
|
+
try {
|
|
64
|
+
IrcFramework = await import('irc-framework');
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
throw new Error('The "irc-framework" package is required for the IRC adapter. ' +
|
|
68
|
+
'Install it with: npm install irc-framework');
|
|
69
|
+
}
|
|
70
|
+
const params = auth.params ?? {};
|
|
71
|
+
const host = params.host;
|
|
72
|
+
if (!host) {
|
|
73
|
+
throw new Error('IRC auth params must include "host".');
|
|
74
|
+
}
|
|
75
|
+
const nick = auth.credential;
|
|
76
|
+
if (!nick) {
|
|
77
|
+
throw new Error('IRC credential (nickname) is required.');
|
|
78
|
+
}
|
|
79
|
+
const port = parseInt(params.port ?? '6697', 10);
|
|
80
|
+
const useTls = (params.tls ?? 'true') !== 'false';
|
|
81
|
+
const channelsToJoin = (params.channels ?? '')
|
|
82
|
+
.split(',')
|
|
83
|
+
.map((c) => c.trim())
|
|
84
|
+
.filter(Boolean);
|
|
85
|
+
// Create the IRC client
|
|
86
|
+
const Client = IrcFramework.Client ?? IrcFramework.default?.Client ?? IrcFramework;
|
|
87
|
+
this.client = new Client();
|
|
88
|
+
// Wrap the connection in a promise so we can await it
|
|
89
|
+
await new Promise((resolve, reject) => {
|
|
90
|
+
const connectTimeout = setTimeout(() => {
|
|
91
|
+
reject(new Error(`IRC connection to ${host}:${port} timed out after 30s`));
|
|
92
|
+
}, 30000);
|
|
93
|
+
this.client.on('registered', () => {
|
|
94
|
+
clearTimeout(connectTimeout);
|
|
95
|
+
// Auto-join requested channels
|
|
96
|
+
for (const channel of channelsToJoin) {
|
|
97
|
+
this.client.join(channel);
|
|
98
|
+
}
|
|
99
|
+
resolve();
|
|
100
|
+
});
|
|
101
|
+
this.client.on('error', (err) => {
|
|
102
|
+
clearTimeout(connectTimeout);
|
|
103
|
+
reject(err);
|
|
104
|
+
});
|
|
105
|
+
this.client.on('close', () => {
|
|
106
|
+
if (this.status === 'connected') {
|
|
107
|
+
// Unexpected disconnect — trigger reconnect via base class
|
|
108
|
+
this.setStatus('reconnecting', 'Connection closed unexpectedly');
|
|
109
|
+
this.reconnect().catch((e) => {
|
|
110
|
+
console.error(`[IRC] Reconnect failed:`, e);
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
// Wire up inbound message events
|
|
115
|
+
this.client.on('privmsg', (event) => {
|
|
116
|
+
this.handleIrcMessage(event);
|
|
117
|
+
});
|
|
118
|
+
// Track channel joins
|
|
119
|
+
this.client.on('join', (event) => {
|
|
120
|
+
if (event.nick === nick) {
|
|
121
|
+
this.joinedChannels.add(event.channel.toLowerCase());
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
// Track channel parts
|
|
125
|
+
this.client.on('part', (event) => {
|
|
126
|
+
if (event.nick === nick) {
|
|
127
|
+
this.joinedChannels.delete(event.channel.toLowerCase());
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
this.client.connect({
|
|
131
|
+
host,
|
|
132
|
+
port,
|
|
133
|
+
nick,
|
|
134
|
+
gecos: params.realname ?? `AgentOS IRC (${nick})`,
|
|
135
|
+
password: params.password || undefined,
|
|
136
|
+
tls: useTls,
|
|
137
|
+
auto_reconnect: false, // We handle reconnection in BaseChannelAdapter
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
// Populate platform info
|
|
141
|
+
this.platformInfo = {
|
|
142
|
+
nick,
|
|
143
|
+
host,
|
|
144
|
+
port,
|
|
145
|
+
tls: useTls,
|
|
146
|
+
channels: channelsToJoin,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
async doSendMessage(conversationId, content) {
|
|
150
|
+
if (!this.client) {
|
|
151
|
+
throw new Error('[IRC] Client is not connected.');
|
|
152
|
+
}
|
|
153
|
+
// Extract text from content blocks (IRC only supports plain text)
|
|
154
|
+
const textParts = [];
|
|
155
|
+
for (const block of content.blocks) {
|
|
156
|
+
if (block.type === 'text') {
|
|
157
|
+
textParts.push(block.text);
|
|
158
|
+
}
|
|
159
|
+
else if (block.type === 'image' || block.type === 'video' || block.type === 'document') {
|
|
160
|
+
// For media blocks, send the URL as a fallback
|
|
161
|
+
const url = 'url' in block ? block.url : undefined;
|
|
162
|
+
if (url) {
|
|
163
|
+
const caption = 'caption' in block && block.caption ? `${block.caption}: ` : '';
|
|
164
|
+
textParts.push(`${caption}${url}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
const fullText = textParts.join('\n');
|
|
169
|
+
if (!fullText) {
|
|
170
|
+
throw new Error('[IRC] Cannot send empty message.');
|
|
171
|
+
}
|
|
172
|
+
// IRC messages have a ~512-byte line limit; split into multiple lines
|
|
173
|
+
const lines = fullText.split('\n');
|
|
174
|
+
for (const line of lines) {
|
|
175
|
+
if (line.trim()) {
|
|
176
|
+
this.client.say(conversationId, line);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
// IRC does not provide message IDs; generate a synthetic one
|
|
180
|
+
const syntheticId = `irc-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
181
|
+
return {
|
|
182
|
+
messageId: syntheticId,
|
|
183
|
+
timestamp: new Date().toISOString(),
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
async doShutdown() {
|
|
187
|
+
if (this.client) {
|
|
188
|
+
try {
|
|
189
|
+
this.client.quit('AgentOS shutting down');
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
// Best effort — connection may already be dead
|
|
193
|
+
}
|
|
194
|
+
this.client = undefined;
|
|
195
|
+
}
|
|
196
|
+
this.joinedChannels.clear();
|
|
197
|
+
}
|
|
198
|
+
// ── IRC-specific helpers ──
|
|
199
|
+
/**
|
|
200
|
+
* Join an additional IRC channel at runtime.
|
|
201
|
+
*/
|
|
202
|
+
joinChannel(channel) {
|
|
203
|
+
if (!this.client || this.status !== 'connected') {
|
|
204
|
+
throw new Error('[IRC] Cannot join channel — not connected.');
|
|
205
|
+
}
|
|
206
|
+
this.client.join(channel);
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Part (leave) an IRC channel.
|
|
210
|
+
*/
|
|
211
|
+
partChannel(channel, reason) {
|
|
212
|
+
if (!this.client || this.status !== 'connected') {
|
|
213
|
+
throw new Error('[IRC] Cannot part channel — not connected.');
|
|
214
|
+
}
|
|
215
|
+
this.client.part(channel, reason ?? '');
|
|
216
|
+
this.joinedChannels.delete(channel.toLowerCase());
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Get the set of channels the bot is currently in.
|
|
220
|
+
*/
|
|
221
|
+
getJoinedChannels() {
|
|
222
|
+
return [...this.joinedChannels];
|
|
223
|
+
}
|
|
224
|
+
// ── Private ──
|
|
225
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
226
|
+
handleIrcMessage(event) {
|
|
227
|
+
const isChannel = event.target?.startsWith('#') || event.target?.startsWith('&');
|
|
228
|
+
const conversationId = event.target ?? event.nick ?? 'unknown';
|
|
229
|
+
const message = {
|
|
230
|
+
messageId: `irc-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
|
|
231
|
+
platform: 'irc',
|
|
232
|
+
conversationId,
|
|
233
|
+
conversationType: isChannel ? 'channel' : 'direct',
|
|
234
|
+
sender: {
|
|
235
|
+
id: event.nick ?? 'unknown',
|
|
236
|
+
displayName: event.nick,
|
|
237
|
+
username: event.nick,
|
|
238
|
+
},
|
|
239
|
+
content: [{ type: 'text', text: event.message ?? '' }],
|
|
240
|
+
text: event.message ?? '',
|
|
241
|
+
timestamp: new Date().toISOString(),
|
|
242
|
+
rawEvent: event,
|
|
243
|
+
};
|
|
244
|
+
this.emit({
|
|
245
|
+
type: 'message',
|
|
246
|
+
platform: 'irc',
|
|
247
|
+
conversationId,
|
|
248
|
+
timestamp: message.timestamp,
|
|
249
|
+
data: message,
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=IRCChannelAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IRCChannelAdapter.js","sourceRoot":"","sources":["../../../src/channels/adapters/IRCChannelAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Reddit Channel Adapter for AgentOS.
|
|
3
|
+
*
|
|
4
|
+
* Wraps the Reddit API (via `snoowrap`) to allow agents to submit
|
|
5
|
+
* posts, comments, and interact with subreddits. Uses dynamic import
|
|
6
|
+
* so that `snoowrap` is only loaded at connection time.
|
|
7
|
+
*
|
|
8
|
+
* Reddit's API has strict rate limits (60 requests per minute for
|
|
9
|
+
* OAuth apps). The adapter tracks and respects these limits with a
|
|
10
|
+
* request queue.
|
|
11
|
+
*
|
|
12
|
+
* **Dependencies**: Requires `snoowrap` to be installed.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const reddit = new RedditChannelAdapter();
|
|
17
|
+
* await reddit.initialize({
|
|
18
|
+
* platform: 'reddit',
|
|
19
|
+
* credential: '<client_id>',
|
|
20
|
+
* params: {
|
|
21
|
+
* clientSecret: 'your-client-secret',
|
|
22
|
+
* username: 'bot_username',
|
|
23
|
+
* password: 'bot_password',
|
|
24
|
+
* userAgent: 'agentos:v1.0 (by /u/your_username)',
|
|
25
|
+
* },
|
|
26
|
+
* });
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @module @framers/agentos/channels/adapters/RedditChannelAdapter
|
|
30
|
+
*/
|
|
31
|
+
import type { ChannelAuthConfig, ChannelCapability, ChannelPlatform, ChannelSendResult, MessageContent } from '../types.js';
|
|
32
|
+
import { BaseChannelAdapter } from './BaseChannelAdapter.js';
|
|
33
|
+
/** Platform-specific authentication parameters for Reddit. */
|
|
34
|
+
export interface RedditAuthParams extends Record<string, string | undefined> {
|
|
35
|
+
/** OAuth2 client secret. */
|
|
36
|
+
clientSecret: string;
|
|
37
|
+
/** Reddit account username for the bot. */
|
|
38
|
+
username: string;
|
|
39
|
+
/** Reddit account password for the bot. */
|
|
40
|
+
password: string;
|
|
41
|
+
/** User-Agent string (required by Reddit API TOS). */
|
|
42
|
+
userAgent: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Channel adapter for Reddit.
|
|
46
|
+
*
|
|
47
|
+
* Uses the `snoowrap` package via dynamic import so the dependency
|
|
48
|
+
* is optional. Falls back to raw `fetch` against the Reddit OAuth2
|
|
49
|
+
* API if snoowrap is unavailable.
|
|
50
|
+
*
|
|
51
|
+
* Capabilities: `text`, `rich_text`, `images`, `video`, `reactions`,
|
|
52
|
+
* `threads`, `group_chat`, `hashtags`, `polls`.
|
|
53
|
+
*
|
|
54
|
+
* Conversation ID mapping:
|
|
55
|
+
* - Subreddit post: `r/<subreddit>` or `post:<thing_id>`
|
|
56
|
+
* - Comment reply: `comment:<thing_id>`
|
|
57
|
+
* - Direct message: `dm:<username>`
|
|
58
|
+
*/
|
|
59
|
+
export declare class RedditChannelAdapter extends BaseChannelAdapter<RedditAuthParams> {
|
|
60
|
+
readonly platform: ChannelPlatform;
|
|
61
|
+
readonly displayName = "Reddit";
|
|
62
|
+
readonly capabilities: readonly ChannelCapability[];
|
|
63
|
+
private client;
|
|
64
|
+
/** Whether we're using snoowrap or raw fetch. */
|
|
65
|
+
private usingSnoowrap;
|
|
66
|
+
/** OAuth2 access token for raw fetch fallback. */
|
|
67
|
+
private accessToken;
|
|
68
|
+
private tokenExpiresAt;
|
|
69
|
+
private storedAuth;
|
|
70
|
+
/** Authenticated user info. */
|
|
71
|
+
private authenticatedUser;
|
|
72
|
+
/** Rate-limit: requests remaining in the current window. */
|
|
73
|
+
private rateLimitRemaining;
|
|
74
|
+
private rateLimitResetAt;
|
|
75
|
+
/** Polling interval for inbox messages. */
|
|
76
|
+
private pollTimer;
|
|
77
|
+
private lastInboxTimestamp;
|
|
78
|
+
protected doConnect(auth: ChannelAuthConfig & {
|
|
79
|
+
params?: RedditAuthParams;
|
|
80
|
+
}): Promise<void>;
|
|
81
|
+
protected doSendMessage(conversationId: string, content: MessageContent): Promise<ChannelSendResult>;
|
|
82
|
+
protected doShutdown(): Promise<void>;
|
|
83
|
+
/**
|
|
84
|
+
* Submit a new post to a subreddit.
|
|
85
|
+
*/
|
|
86
|
+
submitPost(subreddit: string, content: MessageContent): Promise<ChannelSendResult>;
|
|
87
|
+
/**
|
|
88
|
+
* Upvote a post or comment.
|
|
89
|
+
*/
|
|
90
|
+
upvote(thingId: string): Promise<void>;
|
|
91
|
+
/**
|
|
92
|
+
* Downvote a post or comment.
|
|
93
|
+
*/
|
|
94
|
+
downvote(thingId: string): Promise<void>;
|
|
95
|
+
/**
|
|
96
|
+
* Get information about the authenticated user.
|
|
97
|
+
*/
|
|
98
|
+
getAuthenticatedUser(): {
|
|
99
|
+
name: string;
|
|
100
|
+
id: string;
|
|
101
|
+
} | undefined;
|
|
102
|
+
private submitPostSnoowrap;
|
|
103
|
+
private replyToComment;
|
|
104
|
+
private replyToPost;
|
|
105
|
+
private sendPrivateMessage;
|
|
106
|
+
private authenticateRaw;
|
|
107
|
+
private ensureAccessToken;
|
|
108
|
+
private redditApiRequest;
|
|
109
|
+
private submitPostRaw;
|
|
110
|
+
private startPolling;
|
|
111
|
+
private stopPolling;
|
|
112
|
+
private pollInbox;
|
|
113
|
+
private extractText;
|
|
114
|
+
/**
|
|
115
|
+
* Extract the first line as a title. Reddit requires titles for posts.
|
|
116
|
+
*/
|
|
117
|
+
private extractTitle;
|
|
118
|
+
/**
|
|
119
|
+
* Extract everything after the first line as the body.
|
|
120
|
+
*/
|
|
121
|
+
private extractBody;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=RedditChannelAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RedditChannelAdapter.d.ts","sourceRoot":"","sources":["../../../src/channels/adapters/RedditChannelAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EAEjB,eAAe,EACf,iBAAiB,EACjB,cAAc,EAEf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAM7D,8DAA8D;AAC9D,MAAM,WAAW,gBAAiB,SAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1E,4BAA4B;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,oBAAqB,SAAQ,kBAAkB,CAAC,gBAAgB,CAAC;IAC5E,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAY;IAC9C,QAAQ,CAAC,WAAW,YAAY;IAChC,QAAQ,CAAC,YAAY,EAAE,SAAS,iBAAiB,EAAE,CAUxC;IAGX,OAAO,CAAC,MAAM,CAAkB;IAEhC,iDAAiD;IACjD,OAAO,CAAC,aAAa,CAAS;IAE9B,kDAAkD;IAClD,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,UAAU,CAAkE;IAEpF,+BAA+B;IAC/B,OAAO,CAAC,iBAAiB,CAA2C;IAEpE,4DAA4D;IAC5D,OAAO,CAAC,kBAAkB,CAAM;IAChC,OAAO,CAAC,gBAAgB,CAAK;IAE7B,2CAA2C;IAC3C,OAAO,CAAC,SAAS,CAA6C;IAC9D,OAAO,CAAC,kBAAkB,CAAK;cAIf,SAAS,CACvB,IAAI,EAAE,iBAAiB,GAAG;QAAE,MAAM,CAAC,EAAE,gBAAgB,CAAA;KAAE,GACtD,OAAO,CAAC,IAAI,CAAC;cAmEA,aAAa,CAC3B,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,iBAAiB,CAAC;cAsBb,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAW3C;;OAEG;IACG,UAAU,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,iBAAiB,CAAC;IAc7B;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW5C;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW9C;;OAEG;IACH,oBAAoB,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS;YAMlD,kBAAkB;YAgDlB,cAAc;YA4Bd,WAAW;YA4BX,kBAAkB;YA8BlB,eAAe;YAwCf,iBAAiB;YAcjB,gBAAgB;YAwDhB,aAAa;IA+B3B,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,WAAW;YAOL,SAAS;IAwDvB,OAAO,CAAC,WAAW;IAOnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAOpB;;OAEG;IACH,OAAO,CAAC,WAAW;CAKpB"}
|