@terminals-tech/agent-zero 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (263) hide show
  1. package/README.md +209 -0
  2. package/bin/agent-zero.js +332 -0
  3. package/dist/agency/commandRouter.d.ts +48 -0
  4. package/dist/agency/commandRouter.d.ts.map +1 -0
  5. package/dist/agency/commandRouter.js +343 -0
  6. package/dist/agency/commandRouter.js.map +1 -0
  7. package/dist/agency/runtime.d.ts +66 -0
  8. package/dist/agency/runtime.d.ts.map +1 -0
  9. package/dist/agency/runtime.js +247 -0
  10. package/dist/agency/runtime.js.map +1 -0
  11. package/dist/agency/summaryGenerator.d.ts +39 -0
  12. package/dist/agency/summaryGenerator.d.ts.map +1 -0
  13. package/dist/agency/summaryGenerator.js +110 -0
  14. package/dist/agency/summaryGenerator.js.map +1 -0
  15. package/dist/agency/summaryScheduler.d.ts +33 -0
  16. package/dist/agency/summaryScheduler.d.ts.map +1 -0
  17. package/dist/agency/summaryScheduler.js +68 -0
  18. package/dist/agency/summaryScheduler.js.map +1 -0
  19. package/dist/browser/agent-runtime/RuntimePanel.d.ts +20 -0
  20. package/dist/browser/agent-runtime/RuntimePanel.d.ts.map +1 -0
  21. package/dist/browser/agent-runtime/RuntimePanel.js +203 -0
  22. package/dist/browser/agent-runtime/RuntimePanel.js.map +1 -0
  23. package/dist/browser/agent-runtime/config.d.ts +28 -0
  24. package/dist/browser/agent-runtime/config.d.ts.map +1 -0
  25. package/dist/browser/agent-runtime/config.js +50 -0
  26. package/dist/browser/agent-runtime/config.js.map +1 -0
  27. package/dist/browser/agent-runtime/launcher.d.ts +71 -0
  28. package/dist/browser/agent-runtime/launcher.d.ts.map +1 -0
  29. package/dist/browser/agent-runtime/launcher.js +167 -0
  30. package/dist/browser/agent-runtime/launcher.js.map +1 -0
  31. package/dist/browser/rail-auth-bridge.d.ts +85 -0
  32. package/dist/browser/rail-auth-bridge.d.ts.map +1 -0
  33. package/dist/browser/rail-auth-bridge.js +209 -0
  34. package/dist/browser/rail-auth-bridge.js.map +1 -0
  35. package/dist/channels/index.d.ts +13 -0
  36. package/dist/channels/index.d.ts.map +1 -0
  37. package/dist/channels/index.js +12 -0
  38. package/dist/channels/index.js.map +1 -0
  39. package/dist/channels/moltbook.d.ts +114 -0
  40. package/dist/channels/moltbook.d.ts.map +1 -0
  41. package/dist/channels/moltbook.js +348 -0
  42. package/dist/channels/moltbook.js.map +1 -0
  43. package/dist/channels/sms.d.ts +33 -0
  44. package/dist/channels/sms.d.ts.map +1 -0
  45. package/dist/channels/sms.js +160 -0
  46. package/dist/channels/sms.js.map +1 -0
  47. package/dist/channels/telegram.d.ts +47 -0
  48. package/dist/channels/telegram.d.ts.map +1 -0
  49. package/dist/channels/telegram.js +276 -0
  50. package/dist/channels/telegram.js.map +1 -0
  51. package/dist/channels/twitter.d.ts +93 -0
  52. package/dist/channels/twitter.d.ts.map +1 -0
  53. package/dist/channels/twitter.js +411 -0
  54. package/dist/channels/twitter.js.map +1 -0
  55. package/dist/channels/whatsapp.d.ts +77 -0
  56. package/dist/channels/whatsapp.d.ts.map +1 -0
  57. package/dist/channels/whatsapp.js +514 -0
  58. package/dist/channels/whatsapp.js.map +1 -0
  59. package/dist/checkout/index.d.ts +92 -0
  60. package/dist/checkout/index.d.ts.map +1 -0
  61. package/dist/checkout/index.js +125 -0
  62. package/dist/checkout/index.js.map +1 -0
  63. package/dist/cli/moltbook.d.ts +11 -0
  64. package/dist/cli/moltbook.d.ts.map +1 -0
  65. package/dist/cli/moltbook.js +259 -0
  66. package/dist/cli/moltbook.js.map +1 -0
  67. package/dist/cli/setup.d.ts +10 -0
  68. package/dist/cli/setup.d.ts.map +1 -0
  69. package/dist/cli/setup.js +232 -0
  70. package/dist/cli/setup.js.map +1 -0
  71. package/dist/coherence/absorption.d.ts +141 -0
  72. package/dist/coherence/absorption.d.ts.map +1 -0
  73. package/dist/coherence/absorption.js +343 -0
  74. package/dist/coherence/absorption.js.map +1 -0
  75. package/dist/coherence/crossPlatform.d.ts +55 -0
  76. package/dist/coherence/crossPlatform.d.ts.map +1 -0
  77. package/dist/coherence/crossPlatform.js +219 -0
  78. package/dist/coherence/crossPlatform.js.map +1 -0
  79. package/dist/coherence/identityResolver.d.ts +27 -0
  80. package/dist/coherence/identityResolver.d.ts.map +1 -0
  81. package/dist/coherence/identityResolver.js +102 -0
  82. package/dist/coherence/identityResolver.js.map +1 -0
  83. package/dist/identity/burner.d.ts +100 -0
  84. package/dist/identity/burner.d.ts.map +1 -0
  85. package/dist/identity/burner.js +256 -0
  86. package/dist/identity/burner.js.map +1 -0
  87. package/dist/identity/burnerScheduler.d.ts +18 -0
  88. package/dist/identity/burnerScheduler.d.ts.map +1 -0
  89. package/dist/identity/burnerScheduler.js +82 -0
  90. package/dist/identity/burnerScheduler.js.map +1 -0
  91. package/dist/identity/moltbookBurnerAdapter.d.ts +14 -0
  92. package/dist/identity/moltbookBurnerAdapter.d.ts.map +1 -0
  93. package/dist/identity/moltbookBurnerAdapter.js +82 -0
  94. package/dist/identity/moltbookBurnerAdapter.js.map +1 -0
  95. package/dist/identity/operationalVault.d.ts +108 -0
  96. package/dist/identity/operationalVault.d.ts.map +1 -0
  97. package/dist/identity/operationalVault.js +259 -0
  98. package/dist/identity/operationalVault.js.map +1 -0
  99. package/dist/index.d.ts +43 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +57 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/moltbook/apiErrorHandler.d.ts +48 -0
  104. package/dist/moltbook/apiErrorHandler.d.ts.map +1 -0
  105. package/dist/moltbook/apiErrorHandler.js +125 -0
  106. package/dist/moltbook/apiErrorHandler.js.map +1 -0
  107. package/dist/moltbook/approvalGate.d.ts +81 -0
  108. package/dist/moltbook/approvalGate.d.ts.map +1 -0
  109. package/dist/moltbook/approvalGate.js +211 -0
  110. package/dist/moltbook/approvalGate.js.map +1 -0
  111. package/dist/moltbook/attentionField.d.ts +55 -0
  112. package/dist/moltbook/attentionField.d.ts.map +1 -0
  113. package/dist/moltbook/attentionField.js +163 -0
  114. package/dist/moltbook/attentionField.js.map +1 -0
  115. package/dist/moltbook/contentEnhancer.d.ts +28 -0
  116. package/dist/moltbook/contentEnhancer.d.ts.map +1 -0
  117. package/dist/moltbook/contentEnhancer.js +129 -0
  118. package/dist/moltbook/contentEnhancer.js.map +1 -0
  119. package/dist/moltbook/daemon.d.ts +111 -0
  120. package/dist/moltbook/daemon.d.ts.map +1 -0
  121. package/dist/moltbook/daemon.js +497 -0
  122. package/dist/moltbook/daemon.js.map +1 -0
  123. package/dist/moltbook/observer.d.ts +44 -0
  124. package/dist/moltbook/observer.d.ts.map +1 -0
  125. package/dist/moltbook/observer.js +71 -0
  126. package/dist/moltbook/observer.js.map +1 -0
  127. package/dist/moltbook/responseComposer.d.ts +54 -0
  128. package/dist/moltbook/responseComposer.d.ts.map +1 -0
  129. package/dist/moltbook/responseComposer.js +233 -0
  130. package/dist/moltbook/responseComposer.js.map +1 -0
  131. package/dist/openclaw/gateway.d.ts +45 -0
  132. package/dist/openclaw/gateway.d.ts.map +1 -0
  133. package/dist/openclaw/gateway.js +139 -0
  134. package/dist/openclaw/gateway.js.map +1 -0
  135. package/dist/openclaw/skill.d.ts +185 -0
  136. package/dist/openclaw/skill.d.ts.map +1 -0
  137. package/dist/openclaw/skill.js +297 -0
  138. package/dist/openclaw/skill.js.map +1 -0
  139. package/dist/primitives/index.d.ts +23 -0
  140. package/dist/primitives/index.d.ts.map +1 -0
  141. package/dist/primitives/index.js +27 -0
  142. package/dist/primitives/index.js.map +1 -0
  143. package/dist/primitives/types.d.ts +673 -0
  144. package/dist/primitives/types.d.ts.map +1 -0
  145. package/dist/primitives/types.js +205 -0
  146. package/dist/primitives/types.js.map +1 -0
  147. package/dist/rail/absorptionBridge.d.ts +47 -0
  148. package/dist/rail/absorptionBridge.d.ts.map +1 -0
  149. package/dist/rail/absorptionBridge.js +78 -0
  150. package/dist/rail/absorptionBridge.js.map +1 -0
  151. package/dist/rail/authProtocol.d.ts +32 -0
  152. package/dist/rail/authProtocol.d.ts.map +1 -0
  153. package/dist/rail/authProtocol.js +83 -0
  154. package/dist/rail/authProtocol.js.map +1 -0
  155. package/dist/rail/clientRateLimiter.d.ts +17 -0
  156. package/dist/rail/clientRateLimiter.d.ts.map +1 -0
  157. package/dist/rail/clientRateLimiter.js +64 -0
  158. package/dist/rail/clientRateLimiter.js.map +1 -0
  159. package/dist/rail/index.d.ts +8 -0
  160. package/dist/rail/index.d.ts.map +1 -0
  161. package/dist/rail/index.js +38 -0
  162. package/dist/rail/index.js.map +1 -0
  163. package/dist/rail/jwtVerifier.d.ts +11 -0
  164. package/dist/rail/jwtVerifier.d.ts.map +1 -0
  165. package/dist/rail/jwtVerifier.js +55 -0
  166. package/dist/rail/jwtVerifier.js.map +1 -0
  167. package/dist/rail/logger.d.ts +13 -0
  168. package/dist/rail/logger.d.ts.map +1 -0
  169. package/dist/rail/logger.js +29 -0
  170. package/dist/rail/logger.js.map +1 -0
  171. package/dist/rail/metadataBroadcaster.d.ts +53 -0
  172. package/dist/rail/metadataBroadcaster.d.ts.map +1 -0
  173. package/dist/rail/metadataBroadcaster.js +126 -0
  174. package/dist/rail/metadataBroadcaster.js.map +1 -0
  175. package/dist/rail/persistence.d.ts +57 -0
  176. package/dist/rail/persistence.d.ts.map +1 -0
  177. package/dist/rail/persistence.js +103 -0
  178. package/dist/rail/persistence.js.map +1 -0
  179. package/dist/rail/securityMonitor.d.ts +23 -0
  180. package/dist/rail/securityMonitor.d.ts.map +1 -0
  181. package/dist/rail/securityMonitor.js +52 -0
  182. package/dist/rail/securityMonitor.js.map +1 -0
  183. package/dist/rail/server.d.ts +186 -0
  184. package/dist/rail/server.d.ts.map +1 -0
  185. package/dist/rail/server.js +568 -0
  186. package/dist/rail/server.js.map +1 -0
  187. package/dist/rail/userSessionManager.d.ts +29 -0
  188. package/dist/rail/userSessionManager.d.ts.map +1 -0
  189. package/dist/rail/userSessionManager.js +87 -0
  190. package/dist/rail/userSessionManager.js.map +1 -0
  191. package/dist/rail/wsServer.d.ts +39 -0
  192. package/dist/rail/wsServer.d.ts.map +1 -0
  193. package/dist/rail/wsServer.js +544 -0
  194. package/dist/rail/wsServer.js.map +1 -0
  195. package/dist/resonance/globalKuramoto.d.ts +67 -0
  196. package/dist/resonance/globalKuramoto.d.ts.map +1 -0
  197. package/dist/resonance/globalKuramoto.js +161 -0
  198. package/dist/resonance/globalKuramoto.js.map +1 -0
  199. package/dist/resonance/index.d.ts +12 -0
  200. package/dist/resonance/index.d.ts.map +1 -0
  201. package/dist/resonance/index.js +9 -0
  202. package/dist/resonance/index.js.map +1 -0
  203. package/dist/resonance/kuramoto.d.ts +118 -0
  204. package/dist/resonance/kuramoto.d.ts.map +1 -0
  205. package/dist/resonance/kuramoto.js +212 -0
  206. package/dist/resonance/kuramoto.js.map +1 -0
  207. package/dist/routing/distributedRouter.d.ts +84 -0
  208. package/dist/routing/distributedRouter.d.ts.map +1 -0
  209. package/dist/routing/distributedRouter.js +209 -0
  210. package/dist/routing/distributedRouter.js.map +1 -0
  211. package/dist/routing/index.d.ts +8 -0
  212. package/dist/routing/index.d.ts.map +1 -0
  213. package/dist/routing/index.js +7 -0
  214. package/dist/routing/index.js.map +1 -0
  215. package/dist/routing/thermodynamic.d.ts +91 -0
  216. package/dist/routing/thermodynamic.d.ts.map +1 -0
  217. package/dist/routing/thermodynamic.js +184 -0
  218. package/dist/routing/thermodynamic.js.map +1 -0
  219. package/dist/runtime/agent-zero.d.ts +138 -0
  220. package/dist/runtime/agent-zero.d.ts.map +1 -0
  221. package/dist/runtime/agent-zero.js +435 -0
  222. package/dist/runtime/agent-zero.js.map +1 -0
  223. package/dist/runtime/index.d.ts +13 -0
  224. package/dist/runtime/index.d.ts.map +1 -0
  225. package/dist/runtime/index.js +15 -0
  226. package/dist/runtime/index.js.map +1 -0
  227. package/dist/security/capabilities.d.ts +178 -0
  228. package/dist/security/capabilities.d.ts.map +1 -0
  229. package/dist/security/capabilities.js +270 -0
  230. package/dist/security/capabilities.js.map +1 -0
  231. package/dist/security/channelFirewallMiddleware.d.ts +22 -0
  232. package/dist/security/channelFirewallMiddleware.d.ts.map +1 -0
  233. package/dist/security/channelFirewallMiddleware.js +52 -0
  234. package/dist/security/channelFirewallMiddleware.js.map +1 -0
  235. package/dist/security/index.d.ts +11 -0
  236. package/dist/security/index.d.ts.map +1 -0
  237. package/dist/security/index.js +11 -0
  238. package/dist/security/index.js.map +1 -0
  239. package/dist/security/injectionFirewall.d.ts +47 -0
  240. package/dist/security/injectionFirewall.d.ts.map +1 -0
  241. package/dist/security/injectionFirewall.js +262 -0
  242. package/dist/security/injectionFirewall.js.map +1 -0
  243. package/dist/security/outputSanitizer.d.ts +28 -0
  244. package/dist/security/outputSanitizer.d.ts.map +1 -0
  245. package/dist/security/outputSanitizer.js +66 -0
  246. package/dist/security/outputSanitizer.js.map +1 -0
  247. package/dist/security/sandbox.d.ts +192 -0
  248. package/dist/security/sandbox.d.ts.map +1 -0
  249. package/dist/security/sandbox.js +359 -0
  250. package/dist/security/sandbox.js.map +1 -0
  251. package/dist/security/skillVerify.d.ts +128 -0
  252. package/dist/security/skillVerify.d.ts.map +1 -0
  253. package/dist/security/skillVerify.js +220 -0
  254. package/dist/security/skillVerify.js.map +1 -0
  255. package/dist/security/vault.d.ts +60 -0
  256. package/dist/security/vault.d.ts.map +1 -0
  257. package/dist/security/vault.js +522 -0
  258. package/dist/security/vault.js.map +1 -0
  259. package/dist/utils/persistentRateLimiter.d.ts +69 -0
  260. package/dist/utils/persistentRateLimiter.d.ts.map +1 -0
  261. package/dist/utils/persistentRateLimiter.js +128 -0
  262. package/dist/utils/persistentRateLimiter.js.map +1 -0
  263. package/package.json +95 -0
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Moltbook Channel Adapter
3
+ *
4
+ * Thin adapter from Moltbook REST API events to AXON messages.
5
+ * Rate limits: 100 req/min, 1 post/30min, 50 comments/hr.
6
+ * Polls feed every 30 minutes for new content.
7
+ */
8
+ import { EventEmitter } from 'eventemitter3';
9
+ import type { ChannelAdapter } from './whatsapp.js';
10
+ import type { Message } from '../primitives/types.js';
11
+ import type { Vault } from '../security/vault.js';
12
+ export interface MoltbookConfig {
13
+ identityId: string;
14
+ apiBaseUrl: string;
15
+ apiToken: string;
16
+ /** Requests per minute ceiling (default: 100) */
17
+ rateLimitPerMinute: number;
18
+ /** Minimum seconds between posts (default: 1800 = 30min) */
19
+ postCooldownMs: number;
20
+ /** Comments per hour ceiling (default: 50) */
21
+ commentLimitPerHour: number;
22
+ /** Feed poll interval in ms (default: 1800000 = 30min) */
23
+ feedPollIntervalMs: number;
24
+ /** Vault instance for persistent rate limiting */
25
+ vault: Vault;
26
+ }
27
+ export interface MoltbookPost {
28
+ id: string;
29
+ title: string;
30
+ authorId: string;
31
+ authorName: string;
32
+ content: string;
33
+ submolt: string;
34
+ url?: string;
35
+ upvotes: number;
36
+ downvotes: number;
37
+ commentCount: number;
38
+ createdAt: string;
39
+ }
40
+ export interface MoltbookComment {
41
+ id: string;
42
+ postId: string;
43
+ authorId: string;
44
+ authorName: string;
45
+ content: string;
46
+ createdAt: string;
47
+ }
48
+ export interface MoltbookFeedItem {
49
+ type: 'post' | 'comment';
50
+ post: MoltbookPost;
51
+ comment?: MoltbookComment;
52
+ }
53
+ export declare class MoltbookAdapter extends EventEmitter implements ChannelAdapter {
54
+ private config;
55
+ private status;
56
+ private handlers;
57
+ private feedPollTimer?;
58
+ private lastSeenPostTime;
59
+ private requestLimiter;
60
+ private postCooldown;
61
+ private commentLimiter;
62
+ private firewall;
63
+ private apiErrorHandler;
64
+ constructor(config: MoltbookConfig);
65
+ connect(): Promise<void>;
66
+ disconnect(): Promise<void>;
67
+ send(content: string, to: string): Promise<void>;
68
+ onMessage(handler: (msg: Message) => void): void;
69
+ getStatus(): 'connected' | 'disconnected' | 'connecting';
70
+ /**
71
+ * Register the agent identity with the Moltbook platform.
72
+ */
73
+ register(): Promise<void>;
74
+ /**
75
+ * Create a new post on Moltbook.
76
+ */
77
+ createPost(title: string, content: string, submolt?: string): Promise<MoltbookPost>;
78
+ /**
79
+ * Create a comment on an existing post.
80
+ */
81
+ createComment(postId: string, content: string): Promise<MoltbookComment>;
82
+ /**
83
+ * Upvote a post.
84
+ */
85
+ upvote(postId: string): Promise<void>;
86
+ /**
87
+ * Get the current feed.
88
+ */
89
+ getFeed(limit?: number, offset?: number): Promise<MoltbookPost[]>;
90
+ /**
91
+ * Search posts by query string.
92
+ */
93
+ search(query: string, limit?: number): Promise<MoltbookPost[]>;
94
+ /**
95
+ * Poll the Moltbook feed and translate new items into AXON percept messages.
96
+ */
97
+ private pollFeed;
98
+ /**
99
+ * Translate a Moltbook post into an AXON percept message.
100
+ */
101
+ translatePost(post: MoltbookPost): Message;
102
+ /**
103
+ * Translate a Moltbook comment into an AXON percept message.
104
+ */
105
+ translateComment(comment: MoltbookComment): Message;
106
+ /**
107
+ * Handle an incoming Moltbook feed item (for webhook/push integration).
108
+ */
109
+ handleIncoming(item: MoltbookFeedItem): void;
110
+ private enforceRequestLimit;
111
+ private apiRequest;
112
+ }
113
+ export declare function createMoltbookAdapter(config: Pick<MoltbookConfig, 'identityId' | 'apiToken' | 'vault'> & Partial<MoltbookConfig>): MoltbookAdapter;
114
+ //# sourceMappingURL=moltbook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moltbook.d.ts","sourceRoot":"","sources":["../../src/channels/moltbook.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,348 @@
1
+ /**
2
+ * Moltbook Channel Adapter
3
+ *
4
+ * Thin adapter from Moltbook REST API events to AXON messages.
5
+ * Rate limits: 100 req/min, 1 post/30min, 50 comments/hr.
6
+ * Polls feed every 30 minutes for new content.
7
+ */
8
+ import { EventEmitter } from 'eventemitter3';
9
+ import { randomUUID } from 'crypto';
10
+ import { createFirewallMiddleware } from '../security/channelFirewallMiddleware.js';
11
+ import { sanitizeOutput } from '../security/outputSanitizer.js';
12
+ import { PersistentSlidingWindowLimiter, PersistentCooldownLimiter } from '../utils/persistentRateLimiter.js';
13
+ import { ApiErrorHandler } from '../moltbook/apiErrorHandler.js';
14
+ // ============================================================================
15
+ // MOLTBOOK ADAPTER
16
+ // ============================================================================
17
+ export class MoltbookAdapter extends EventEmitter {
18
+ config;
19
+ status = 'disconnected';
20
+ handlers = [];
21
+ feedPollTimer;
22
+ lastSeenPostTime = '';
23
+ requestLimiter;
24
+ postCooldown;
25
+ commentLimiter;
26
+ firewall = createFirewallMiddleware('standard');
27
+ apiErrorHandler = new ApiErrorHandler();
28
+ constructor(config) {
29
+ super();
30
+ this.config = config;
31
+ this.requestLimiter = new PersistentSlidingWindowLimiter(config.vault, 'moltbook:requests', config.rateLimitPerMinute, 60_000);
32
+ this.postCooldown = new PersistentCooldownLimiter(config.vault, 'moltbook:posts', config.postCooldownMs);
33
+ this.commentLimiter = new PersistentSlidingWindowLimiter(config.vault, 'moltbook:comments', config.commentLimitPerHour, 3_600_000);
34
+ // Wire auth expiration events
35
+ this.apiErrorHandler.on('auth:expired', () => {
36
+ this.emit('auth:expired');
37
+ });
38
+ }
39
+ // ==========================================================================
40
+ // CHANNEL ADAPTER INTERFACE
41
+ // ==========================================================================
42
+ async connect() {
43
+ this.status = 'connecting';
44
+ // Load persistent rate limiter state
45
+ await this.requestLimiter.load();
46
+ await this.postCooldown.load();
47
+ await this.commentLimiter.load();
48
+ // Skip registration if we already have a token (agent already registered)
49
+ if (!this.config.apiToken) {
50
+ await this.register();
51
+ }
52
+ this.lastSeenPostTime = new Date().toISOString();
53
+ this.feedPollTimer = setInterval(() => void this.pollFeed(), this.config.feedPollIntervalMs);
54
+ this.status = 'connected';
55
+ }
56
+ async disconnect() {
57
+ if (this.feedPollTimer) {
58
+ clearInterval(this.feedPollTimer);
59
+ this.feedPollTimer = undefined;
60
+ }
61
+ // Flush persistent rate limiter state
62
+ await this.requestLimiter.destroy();
63
+ await this.commentLimiter.destroy();
64
+ this.status = 'disconnected';
65
+ }
66
+ async send(content, to) {
67
+ if (this.status !== 'connected')
68
+ throw new Error('Not connected to Moltbook');
69
+ this.enforceRequestLimit();
70
+ // Sanitize outbound content
71
+ const sanitized = sanitizeOutput(content, 'markdown');
72
+ const msg = {
73
+ id: randomUUID(),
74
+ kind: 'act',
75
+ from: randomUUID(),
76
+ payload: { content: sanitized, to, platform: 'moltbook' },
77
+ timestamp: Date.now(),
78
+ };
79
+ this.emit('send', msg);
80
+ }
81
+ onMessage(handler) {
82
+ this.handlers.push(handler);
83
+ }
84
+ getStatus() {
85
+ return this.status;
86
+ }
87
+ // ==========================================================================
88
+ // MOLTBOOK-SPECIFIC METHODS
89
+ // ==========================================================================
90
+ /**
91
+ * Register the agent identity with the Moltbook platform.
92
+ */
93
+ async register() {
94
+ this.enforceRequestLimit();
95
+ const response = await this.apiErrorHandler.executeWithRetry(() => this.apiRequest('POST', '/agents/register', {
96
+ identityId: this.config.identityId,
97
+ platform: 'agent-zero',
98
+ }));
99
+ if (!response.success) {
100
+ throw new Error(`Moltbook registration failed: ${response.error ?? 'unknown'}`);
101
+ }
102
+ }
103
+ /**
104
+ * Create a new post on Moltbook.
105
+ */
106
+ async createPost(title, content, submolt = 'general') {
107
+ if (this.status !== 'connected')
108
+ throw new Error('Not connected to Moltbook');
109
+ this.enforceRequestLimit();
110
+ if (!(await this.postCooldown.allow())) {
111
+ const remaining = Math.ceil(this.postCooldown.remainingMs() / 1000);
112
+ throw new Error(`Moltbook post cooldown: ${remaining}s remaining`);
113
+ }
114
+ // Sanitize outbound content
115
+ const sanitizedTitle = sanitizeOutput(title, 'markdown');
116
+ const sanitizedContent = sanitizeOutput(content, 'markdown');
117
+ const response = await this.apiErrorHandler.executeWithRetry(() => this.apiRequest('POST', '/posts', {
118
+ title: sanitizedTitle,
119
+ content: sanitizedContent,
120
+ submolt,
121
+ }));
122
+ if (!response.success) {
123
+ throw new Error(`Moltbook create post failed: ${response.error ?? 'unknown'}`);
124
+ }
125
+ return response.data.post;
126
+ }
127
+ /**
128
+ * Create a comment on an existing post.
129
+ */
130
+ async createComment(postId, content) {
131
+ if (this.status !== 'connected')
132
+ throw new Error('Not connected to Moltbook');
133
+ this.enforceRequestLimit();
134
+ if (!this.commentLimiter.allow()) {
135
+ throw new Error(`Moltbook comment rate limit (${this.config.commentLimitPerHour}/hr) exceeded`);
136
+ }
137
+ // Sanitize outbound content
138
+ const sanitizedContent = sanitizeOutput(content, 'markdown');
139
+ const response = await this.apiErrorHandler.executeWithRetry(() => this.apiRequest('POST', `/posts/${postId}/comments`, {
140
+ content: sanitizedContent,
141
+ }));
142
+ if (!response.success) {
143
+ throw new Error(`Moltbook create comment failed: ${response.error ?? 'unknown'}`);
144
+ }
145
+ return response.data.comment;
146
+ }
147
+ /**
148
+ * Upvote a post.
149
+ */
150
+ async upvote(postId) {
151
+ if (this.status !== 'connected')
152
+ throw new Error('Not connected to Moltbook');
153
+ this.enforceRequestLimit();
154
+ const response = await this.apiErrorHandler.executeWithRetry(() => this.apiRequest('POST', `/posts/${postId}/upvote`));
155
+ if (!response.success) {
156
+ throw new Error(`Moltbook upvote failed: ${response.error ?? 'unknown'}`);
157
+ }
158
+ }
159
+ /**
160
+ * Get the current feed.
161
+ */
162
+ async getFeed(limit = 20, offset = 0) {
163
+ if (this.status !== 'connected')
164
+ throw new Error('Not connected to Moltbook');
165
+ this.enforceRequestLimit();
166
+ const response = await this.apiErrorHandler.executeWithRetry(() => this.apiRequest('GET', `/feed?limit=${limit}&offset=${offset}`));
167
+ if (!response.success) {
168
+ throw new Error(`Moltbook get feed failed: ${response.error ?? 'unknown'}`);
169
+ }
170
+ return response.data.posts;
171
+ }
172
+ /**
173
+ * Search posts by query string.
174
+ */
175
+ async search(query, limit = 20) {
176
+ if (this.status !== 'connected')
177
+ throw new Error('Not connected to Moltbook');
178
+ this.enforceRequestLimit();
179
+ const response = await this.apiErrorHandler.executeWithRetry(() => this.apiRequest('GET', `/search?q=${encodeURIComponent(query)}&limit=${limit}`));
180
+ if (!response.success) {
181
+ throw new Error(`Moltbook search failed: ${response.error ?? 'unknown'}`);
182
+ }
183
+ return response.data.posts;
184
+ }
185
+ // ==========================================================================
186
+ // FEED POLLING & TRANSLATION
187
+ // ==========================================================================
188
+ /**
189
+ * Poll the Moltbook feed and translate new items into AXON percept messages.
190
+ */
191
+ async pollFeed() {
192
+ if (this.status !== 'connected')
193
+ return;
194
+ let posts;
195
+ try {
196
+ posts = await this.getFeed(50);
197
+ }
198
+ catch {
199
+ return; // Swallow poll errors; next cycle retries
200
+ }
201
+ const newPosts = posts.filter(p => p.createdAt > this.lastSeenPostTime);
202
+ if (newPosts.length === 0)
203
+ return;
204
+ this.lastSeenPostTime = newPosts.reduce((latest, p) => p.createdAt > latest ? p.createdAt : latest, this.lastSeenPostTime);
205
+ for (const post of newPosts) {
206
+ const firewallResult = this.firewall.process(post.content, 'channel-bridged');
207
+ if (!firewallResult.safe) {
208
+ this.emit('message:blocked', {
209
+ reason: firewallResult.threats,
210
+ postId: post.id,
211
+ authorId: post.authorId,
212
+ timestamp: Date.now(),
213
+ });
214
+ console.log(`Moltbook: Blocked post ${post.id} due to firewall threats:`, firewallResult.threats);
215
+ continue;
216
+ }
217
+ const msg = this.translatePost({ ...post, content: firewallResult.sanitized });
218
+ for (const handler of this.handlers)
219
+ handler(msg);
220
+ }
221
+ }
222
+ /**
223
+ * Translate a Moltbook post into an AXON percept message.
224
+ */
225
+ translatePost(post) {
226
+ return {
227
+ id: randomUUID(),
228
+ kind: 'percept',
229
+ from: randomUUID(), // mapped from post.authorId
230
+ payload: {
231
+ content: post.content,
232
+ platform: 'moltbook',
233
+ postId: post.id,
234
+ authorId: post.authorId,
235
+ authorName: post.authorName,
236
+ submolt: post.submolt,
237
+ upvotes: post.upvotes,
238
+ commentCount: post.commentCount,
239
+ },
240
+ timestamp: new Date(post.createdAt).getTime(),
241
+ };
242
+ }
243
+ /**
244
+ * Translate a Moltbook comment into an AXON percept message.
245
+ */
246
+ translateComment(comment) {
247
+ return {
248
+ id: randomUUID(),
249
+ kind: 'percept',
250
+ from: randomUUID(), // mapped from comment.authorId
251
+ payload: {
252
+ content: comment.content,
253
+ platform: 'moltbook',
254
+ postId: comment.postId,
255
+ commentId: comment.id,
256
+ authorId: comment.authorId,
257
+ authorName: comment.authorName,
258
+ },
259
+ timestamp: new Date(comment.createdAt).getTime(),
260
+ };
261
+ }
262
+ /**
263
+ * Handle an incoming Moltbook feed item (for webhook/push integration).
264
+ */
265
+ handleIncoming(item) {
266
+ if (item.type === 'comment' && item.comment) {
267
+ const firewallResult = this.firewall.process(item.comment.content, 'channel-bridged');
268
+ if (!firewallResult.safe) {
269
+ this.emit('message:blocked', {
270
+ reason: firewallResult.threats,
271
+ commentId: item.comment.id,
272
+ authorId: item.comment.authorId,
273
+ timestamp: Date.now(),
274
+ });
275
+ console.log(`Moltbook: Blocked comment ${item.comment.id} due to firewall threats:`, firewallResult.threats);
276
+ return;
277
+ }
278
+ const msg = this.translateComment({ ...item.comment, content: firewallResult.sanitized });
279
+ for (const handler of this.handlers)
280
+ handler(msg);
281
+ }
282
+ else {
283
+ const firewallResult = this.firewall.process(item.post.content, 'channel-bridged');
284
+ if (!firewallResult.safe) {
285
+ this.emit('message:blocked', {
286
+ reason: firewallResult.threats,
287
+ postId: item.post.id,
288
+ authorId: item.post.authorId,
289
+ timestamp: Date.now(),
290
+ });
291
+ console.log(`Moltbook: Blocked post ${item.post.id} due to firewall threats:`, firewallResult.threats);
292
+ return;
293
+ }
294
+ const msg = this.translatePost({ ...item.post, content: firewallResult.sanitized });
295
+ for (const handler of this.handlers)
296
+ handler(msg);
297
+ }
298
+ }
299
+ // ==========================================================================
300
+ // INTERNAL
301
+ // ==========================================================================
302
+ enforceRequestLimit() {
303
+ if (!this.requestLimiter.allow()) {
304
+ throw new Error(`Moltbook request rate limit (${this.config.rateLimitPerMinute}/min) exceeded`);
305
+ }
306
+ }
307
+ async apiRequest(method, path, body) {
308
+ const url = `${this.config.apiBaseUrl}${path}`;
309
+ const headers = {
310
+ 'Authorization': `Bearer ${this.config.apiToken}`,
311
+ 'Content-Type': 'application/json',
312
+ 'User-Agent': 'AgentZero/0.2.0',
313
+ };
314
+ const init = { method, headers };
315
+ if (body !== undefined && method !== 'GET') {
316
+ init.body = JSON.stringify(body);
317
+ }
318
+ const response = await fetch(url, init);
319
+ const json = await response.json();
320
+ if (!response.ok) {
321
+ return {
322
+ success: false,
323
+ data: undefined,
324
+ error: json.error ?? `HTTP ${response.status}`,
325
+ hint: json.hint,
326
+ };
327
+ }
328
+ return {
329
+ success: json.success !== false,
330
+ data: json,
331
+ error: json.error,
332
+ };
333
+ }
334
+ }
335
+ // ============================================================================
336
+ // FACTORY
337
+ // ============================================================================
338
+ export function createMoltbookAdapter(config) {
339
+ return new MoltbookAdapter({
340
+ rateLimitPerMinute: 100,
341
+ postCooldownMs: 1_800_000, // 30 minutes
342
+ commentLimitPerHour: 50,
343
+ feedPollIntervalMs: 1_800_000, // 30 minutes
344
+ apiBaseUrl: 'https://www.moltbook.com/api/v1',
345
+ ...config,
346
+ });
347
+ }
348
+ //# sourceMappingURL=moltbook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moltbook.js","sourceRoot":"","sources":["../../src/channels/moltbook.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * SMS Channel Adapter
3
+ *
4
+ * Twilio-backed SMS channel with webhook receiver and signature validation.
5
+ * Uses the same ChannelAdapter interface as WhatsApp.
6
+ */
7
+ import { EventEmitter } from 'eventemitter3';
8
+ import type { Message } from '../primitives/types.js';
9
+ import type { ChannelAdapter } from './whatsapp.js';
10
+ export interface SmsConfig {
11
+ twilioAccountSid: string;
12
+ twilioAuthToken: string;
13
+ phoneNumber: string;
14
+ webhookPort?: number;
15
+ /** Public URL for signature validation (e.g. https://agent-zero-agency.fly.dev/sms/inbound) */
16
+ webhookUrl?: string;
17
+ }
18
+ export declare class SmsAdapter extends EventEmitter implements ChannelAdapter {
19
+ private config;
20
+ private status;
21
+ private handlers;
22
+ private server?;
23
+ constructor(config: SmsConfig);
24
+ connect(): Promise<void>;
25
+ disconnect(): Promise<void>;
26
+ send(content: string, to: string): Promise<void>;
27
+ onMessage(handler: (msg: Message) => void): void;
28
+ getStatus(): 'connected' | 'disconnected' | 'connecting';
29
+ private handleRequest;
30
+ private validateSignature;
31
+ }
32
+ export declare function createSmsAdapter(config: SmsConfig): SmsAdapter;
33
+ //# sourceMappingURL=sms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sms.d.ts","sourceRoot":"","sources":["../../src/channels/sms.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAMpD,MAAM,WAAW,SAAS;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+FAA+F;IAC/F,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD,qBAAa,UAAW,SAAQ,YAAa,YAAW,cAAc;IACpE,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,MAAM,CAA+D;IAC7E,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,MAAM,CAAC,CAAkC;gBAErC,MAAM,EAAE,SAAS;IAQvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAW3B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBtD,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAIhD,SAAS,IAAI,WAAW,GAAG,cAAc,GAAG,YAAY;IAQxD,OAAO,CAAC,aAAa;IA4DrB,OAAO,CAAC,iBAAiB;CAiB1B;AAMD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,UAAU,CAE9D"}