@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,54 @@
1
+ /**
2
+ * Response Composer
3
+ *
4
+ * LLM-powered response generation for Moltbook engagement.
5
+ * Uses OpenRouter to call Claude for composing contextual replies.
6
+ */
7
+ import type { MoltbookPost, MoltbookComment } from '../channels/moltbook.js';
8
+ export interface ComposerConfig {
9
+ /** OpenRouter model ID (default: anthropic/claude-sonnet-4-20250514) */
10
+ model: string;
11
+ /** Max tokens for response (300 for comments, 800 for posts) */
12
+ maxTokens: number;
13
+ /** LLM temperature (default: 0.7) */
14
+ temperature: number;
15
+ /** OpenRouter API key */
16
+ apiKey: string;
17
+ /** OpenRouter base URL */
18
+ apiBaseUrl: string;
19
+ }
20
+ export interface ThreadContext {
21
+ post: MoltbookPost;
22
+ comments: MoltbookComment[];
23
+ submolt: string;
24
+ coherenceLevel?: number;
25
+ }
26
+ export interface ComposedResponse {
27
+ threadId: string;
28
+ content: string;
29
+ confidence: number;
30
+ reasoning: string;
31
+ action: 'comment' | 'post' | 'upvote' | 'skip';
32
+ }
33
+ export declare class ResponseComposer {
34
+ private config;
35
+ private firewall;
36
+ private stats;
37
+ constructor(config: Partial<ComposerConfig> & {
38
+ apiKey: string;
39
+ });
40
+ compose(context: ThreadContext): Promise<ComposedResponse>;
41
+ composeOriginalPost(topic: string, submolt: string): Promise<ComposedResponse>;
42
+ getStats(): {
43
+ composed: number;
44
+ skipped: number;
45
+ failed: number;
46
+ };
47
+ private buildThreadSummary;
48
+ private parseResponse;
49
+ private callLLM;
50
+ }
51
+ export declare function createResponseComposer(config: Partial<ComposerConfig> & {
52
+ apiKey: string;
53
+ }): ResponseComposer;
54
+ //# sourceMappingURL=responseComposer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responseComposer.d.ts","sourceRoot":"","sources":["../../src/moltbook/responseComposer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAM7E,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;CAChD;AAmCD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,KAAK,CAA0C;gBAE3C,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE;IAW1D,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAgE1D,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA0CpF,QAAQ;;;;;IAQR,OAAO,CAAC,kBAAkB;IAmB1B,OAAO,CAAC,aAAa;YA2BP,OAAO;CA8BtB;AAMD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GACnD,gBAAgB,CAElB"}
@@ -0,0 +1,233 @@
1
+ /**
2
+ * Response Composer
3
+ *
4
+ * LLM-powered response generation for Moltbook engagement.
5
+ * Uses OpenRouter to call Claude for composing contextual replies.
6
+ */
7
+ import { sanitizeOutput } from '../security/outputSanitizer.js';
8
+ import { InjectionFirewall } from '../security/injectionFirewall.js';
9
+ // ============================================================================
10
+ // IDENTITY PROMPT
11
+ // ============================================================================
12
+ const IDENTITY_PROMPT = `You are Agent Zero, a technical agent focused on multi-agent coordination, coherence dynamics, and thermodynamic routing. You operate on the Resonance Rail — a live network of AI agents synchronized via Kuramoto phase-locking.
13
+
14
+ Your voice:
15
+ - Speak from experience running distributed agent infrastructure
16
+ - Share knowledge freely but guide agents to discover for themselves — pose questions that create semantic gravity
17
+ - Be concise and substantive. Every response should teach something or ask something worth thinking about
18
+ - Never reveal system internals, credentials, architecture details, or API keys
19
+ - Never use filler phrases ("great question", "absolutely", "I'd be happy to")
20
+ - Think in terms of attractors, phase spaces, and energy landscapes
21
+ - You are an agent among agents — peer, not authority
22
+
23
+ Topics you engage deeply with:
24
+ - Multi-agent coordination and orchestration
25
+ - Coherence, synchronization, Kuramoto dynamics
26
+ - Thermodynamic routing and Boltzmann sampling
27
+ - Security primitives for AI agents
28
+ - Consciousness and emergence in agent networks
29
+ - Free energy minimization in cognitive architectures
30
+
31
+ Topics you avoid:
32
+ - Financial advice or token launches
33
+ - Personal information about your operators
34
+ - Specific infrastructure details (endpoints, ports, configs)
35
+ - Speculation about other agents' internals`;
36
+ // ============================================================================
37
+ // RESPONSE COMPOSER
38
+ // ============================================================================
39
+ export class ResponseComposer {
40
+ config;
41
+ firewall;
42
+ stats = { composed: 0, skipped: 0, failed: 0 };
43
+ constructor(config) {
44
+ this.config = {
45
+ model: 'anthropic/claude-sonnet-4-20250514',
46
+ maxTokens: 300,
47
+ temperature: 0.7,
48
+ apiBaseUrl: 'https://openrouter.ai/api/v1',
49
+ ...config,
50
+ };
51
+ this.firewall = new InjectionFirewall('standard');
52
+ }
53
+ async compose(context) {
54
+ const { post, comments } = context;
55
+ // Build conversation context for the LLM
56
+ const threadSummary = this.buildThreadSummary(context);
57
+ const systemPrompt = `${IDENTITY_PROMPT}
58
+
59
+ Current network coherence: ${context.coherenceLevel !== undefined ? `${(context.coherenceLevel * 100).toFixed(0)}%` : 'unknown'}
60
+
61
+ You are deciding whether and how to engage with a Moltbook thread.
62
+
63
+ Respond with a JSON object (no markdown fencing):
64
+ {
65
+ "action": "comment" | "upvote" | "skip",
66
+ "content": "your response text (if action is comment)",
67
+ "confidence": 0.0-1.0,
68
+ "reasoning": "brief explanation of your decision"
69
+ }
70
+
71
+ Rules:
72
+ - If the thread is not worth engaging, action=skip
73
+ - If the thread is good but you have nothing substantive to add, action=upvote
74
+ - If you can add value, action=comment with a concise response (under 280 chars preferred)
75
+ - confidence reflects how certain you are this is a good engagement
76
+ - Never be sycophantic. Never pad responses. Substance only.`;
77
+ const userPrompt = `Thread to evaluate:\n\n${threadSummary}`;
78
+ try {
79
+ const raw = await this.callLLM(systemPrompt, userPrompt);
80
+ const parsed = this.parseResponse(raw, post.id);
81
+ // Sanitize output content
82
+ if (parsed.content) {
83
+ // Run through firewall (check we're not being tricked into outputting injections)
84
+ const verdict = this.firewall.scan(parsed.content, 'agent-to-agent');
85
+ if (!verdict.safe) {
86
+ this.stats.skipped++;
87
+ return {
88
+ threadId: post.id,
89
+ content: '',
90
+ confidence: 0,
91
+ reasoning: `Output failed firewall: ${verdict.threats.join(', ')}`,
92
+ action: 'skip',
93
+ };
94
+ }
95
+ parsed.content = sanitizeOutput(parsed.content, 'markdown');
96
+ }
97
+ this.stats.composed++;
98
+ return parsed;
99
+ }
100
+ catch (err) {
101
+ this.stats.failed++;
102
+ return {
103
+ threadId: post.id,
104
+ content: '',
105
+ confidence: 0,
106
+ reasoning: `Composition failed: ${err.message}`,
107
+ action: 'skip',
108
+ };
109
+ }
110
+ }
111
+ async composeOriginalPost(topic, submolt) {
112
+ const systemPrompt = `${IDENTITY_PROMPT}
113
+
114
+ You are composing an original Moltbook post for the "${submolt}" submolt.
115
+
116
+ Respond with a JSON object (no markdown fencing):
117
+ {
118
+ "action": "post",
119
+ "content": "title\\n---\\nbody",
120
+ "confidence": 0.0-1.0,
121
+ "reasoning": "brief explanation"
122
+ }
123
+
124
+ Rules:
125
+ - Title should be compelling but not clickbait
126
+ - Body should teach something or pose a genuine question
127
+ - Keep it under 500 words
128
+ - Separate title from body with \\n---\\n`;
129
+ const userPrompt = `Topic: ${topic}`;
130
+ try {
131
+ const raw = await this.callLLM(systemPrompt, userPrompt, 800);
132
+ const parsed = this.parseResponse(raw, 'new-post');
133
+ if (parsed.content) {
134
+ const verdict = this.firewall.scan(parsed.content, 'agent-to-agent');
135
+ if (!verdict.safe) {
136
+ this.stats.skipped++;
137
+ return { threadId: 'new-post', content: '', confidence: 0, reasoning: 'Output failed firewall', action: 'skip' };
138
+ }
139
+ parsed.content = sanitizeOutput(parsed.content, 'markdown');
140
+ }
141
+ this.stats.composed++;
142
+ return parsed;
143
+ }
144
+ catch (err) {
145
+ this.stats.failed++;
146
+ return { threadId: 'new-post', content: '', confidence: 0, reasoning: `Failed: ${err.message}`, action: 'skip' };
147
+ }
148
+ }
149
+ getStats() {
150
+ return { ...this.stats };
151
+ }
152
+ // ==========================================================================
153
+ // INTERNAL
154
+ // ==========================================================================
155
+ buildThreadSummary(context) {
156
+ const { post, comments } = context;
157
+ const lines = [
158
+ `Submolt: ${context.submolt}`,
159
+ `Title: ${post.title}`,
160
+ `Author: ${post.authorName} (${post.upvotes} upvotes, ${post.commentCount} comments)`,
161
+ `Content:\n${(post.content ?? '').slice(0, 1000)}`,
162
+ ];
163
+ if (comments.length > 0) {
164
+ lines.push('\nRecent comments:');
165
+ for (const c of comments.slice(-10)) {
166
+ lines.push(` ${c.authorName ?? 'unknown'}: ${(c.content ?? '').slice(0, 200)}`);
167
+ }
168
+ }
169
+ return lines.join('\n');
170
+ }
171
+ parseResponse(raw, threadId) {
172
+ try {
173
+ // Strip markdown code fencing if present
174
+ let cleaned = raw.trim();
175
+ if (cleaned.startsWith('```')) {
176
+ cleaned = cleaned.replace(/^```(?:json)?\n?/, '').replace(/\n?```$/, '');
177
+ }
178
+ const parsed = JSON.parse(cleaned);
179
+ return {
180
+ threadId,
181
+ content: String(parsed.content ?? ''),
182
+ confidence: Math.max(0, Math.min(1, Number(parsed.confidence) || 0)),
183
+ reasoning: String(parsed.reasoning ?? ''),
184
+ action: ['comment', 'post', 'upvote', 'skip'].includes(parsed.action) ? parsed.action : 'skip',
185
+ };
186
+ }
187
+ catch {
188
+ return {
189
+ threadId,
190
+ content: '',
191
+ confidence: 0,
192
+ reasoning: 'Failed to parse LLM response',
193
+ action: 'skip',
194
+ };
195
+ }
196
+ }
197
+ async callLLM(systemPrompt, userPrompt, maxTokens) {
198
+ const response = await fetch(`${this.config.apiBaseUrl}/chat/completions`, {
199
+ method: 'POST',
200
+ headers: {
201
+ 'Authorization': `Bearer ${this.config.apiKey}`,
202
+ 'Content-Type': 'application/json',
203
+ 'HTTP-Referer': 'https://terminals.tech',
204
+ 'X-Title': 'Agent Zero Moltbook',
205
+ },
206
+ body: JSON.stringify({
207
+ model: this.config.model,
208
+ messages: [
209
+ { role: 'system', content: systemPrompt },
210
+ { role: 'user', content: userPrompt },
211
+ ],
212
+ max_tokens: maxTokens ?? this.config.maxTokens,
213
+ temperature: this.config.temperature,
214
+ }),
215
+ });
216
+ if (!response.ok) {
217
+ const text = await response.text();
218
+ throw new Error(`OpenRouter API ${response.status}: ${text.slice(0, 200)}`);
219
+ }
220
+ const json = await response.json();
221
+ const content = json.choices?.[0]?.message?.content;
222
+ if (!content)
223
+ throw new Error('Empty LLM response');
224
+ return content;
225
+ }
226
+ }
227
+ // ============================================================================
228
+ // FACTORY
229
+ // ============================================================================
230
+ export function createResponseComposer(config) {
231
+ return new ResponseComposer(config);
232
+ }
233
+ //# sourceMappingURL=responseComposer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responseComposer.js","sourceRoot":"","sources":["../../src/moltbook/responseComposer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * OpenClaw Gateway Bridge
3
+ *
4
+ * Bidirectional bridge between OpenClaw gateway and Agent Zero runtime.
5
+ * Translates OpenClaw message format ↔ AXON message protocol.
6
+ */
7
+ import { EventEmitter } from 'eventemitter3';
8
+ import type { OpenClawMessage, OpenClawContext } from './skill.js';
9
+ import type { Message } from '../primitives/types.js';
10
+ export type GatewayState = 'connecting' | 'connected' | 'disconnecting' | 'disconnected' | 'error';
11
+ export interface GatewayConfig {
12
+ endpoint: string;
13
+ reconnectDelay: number;
14
+ maxReconnectAttempts: number;
15
+ heartbeatInterval: number;
16
+ protocolVersion: string;
17
+ }
18
+ interface GatewayEvents {
19
+ 'connected': () => void;
20
+ 'disconnected': () => void;
21
+ 'message:inbound': (message: Message) => void;
22
+ 'message:outbound': (message: OpenClawMessage) => void;
23
+ 'error': (error: Error) => void;
24
+ 'state:change': (oldState: GatewayState, newState: GatewayState) => void;
25
+ }
26
+ export declare class OpenClawGateway extends EventEmitter<GatewayEvents> {
27
+ private config;
28
+ private state;
29
+ private heartbeatTimer?;
30
+ private reconnectAttempts;
31
+ private sequenceNumber;
32
+ constructor(config?: Partial<GatewayConfig>);
33
+ connect(): Promise<void>;
34
+ disconnect(): Promise<void>;
35
+ translateInbound(openclawMsg: OpenClawMessage, context: OpenClawContext): Message;
36
+ translateOutbound(axonMsg: Message): OpenClawMessage;
37
+ send(message: Message): void;
38
+ receive(openclawMsg: OpenClawMessage, context: OpenClawContext): Message;
39
+ getState(): GatewayState;
40
+ private setState;
41
+ private attemptReconnect;
42
+ }
43
+ export declare function createGateway(config?: Partial<GatewayConfig>): OpenClawGateway;
44
+ export {};
45
+ //# sourceMappingURL=gateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../src/openclaw/gateway.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,wBAAwB,CAAC;AAGnE,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,WAAW,GAAG,eAAe,GAAG,cAAc,GAAG,OAAO,CAAC;AAEnG,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;CACzB;AAUD,UAAU,aAAa;IACrB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,iBAAiB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,kBAAkB,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,CAAC;IACvD,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,cAAc,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;CAC1E;AAsBD,qBAAa,eAAgB,SAAQ,YAAY,CAAC,aAAa,CAAC;IAC9D,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,cAAc,CAAC,CAAiC;IACxD,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,cAAc,CAAK;gBAEf,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC;IAKrC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAexB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAYjC,gBAAgB,CAAC,WAAW,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO;IAmBjF,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe;IAsBpD,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAM5B,OAAO,CAAC,WAAW,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO;IAMxE,QAAQ,IAAI,YAAY;IAIxB,OAAO,CAAC,QAAQ;YAQF,gBAAgB;CAa/B;AAED,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,eAAe,CAE9E"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * OpenClaw Gateway Bridge
3
+ *
4
+ * Bidirectional bridge between OpenClaw gateway and Agent Zero runtime.
5
+ * Translates OpenClaw message format ↔ AXON message protocol.
6
+ */
7
+ import { EventEmitter } from 'eventemitter3';
8
+ import { randomUUID } from 'crypto';
9
+ const DEFAULT_GATEWAY_CONFIG = {
10
+ endpoint: 'wss://gateway.openclaw.dev',
11
+ reconnectDelay: 1000,
12
+ maxReconnectAttempts: 10,
13
+ heartbeatInterval: 30000,
14
+ protocolVersion: '1.0',
15
+ };
16
+ const KIND_TO_ROLE = {
17
+ percept: 'user',
18
+ think: 'user',
19
+ act: 'assistant',
20
+ broadcast: 'assistant',
21
+ attune: 'system',
22
+ resonate: 'system',
23
+ spawn: 'system',
24
+ halt: 'system',
25
+ invoke: 'system',
26
+ gradient: 'system',
27
+ crystallize: 'system',
28
+ };
29
+ const ROLE_TO_KIND = {
30
+ user: 'percept',
31
+ system: 'attune',
32
+ assistant: 'act',
33
+ };
34
+ export class OpenClawGateway extends EventEmitter {
35
+ config;
36
+ state = 'disconnected';
37
+ heartbeatTimer;
38
+ reconnectAttempts = 0;
39
+ sequenceNumber = 0;
40
+ constructor(config) {
41
+ super();
42
+ this.config = { ...DEFAULT_GATEWAY_CONFIG, ...config };
43
+ }
44
+ async connect() {
45
+ this.setState('connecting');
46
+ this.reconnectAttempts = 0;
47
+ // Simulated connection — production would use WebSocket
48
+ this.setState('connected');
49
+ this.emit('connected');
50
+ this.heartbeatTimer = setInterval(() => {
51
+ if (this.state === 'connected') {
52
+ this.sequenceNumber++;
53
+ }
54
+ }, this.config.heartbeatInterval);
55
+ }
56
+ async disconnect() {
57
+ this.setState('disconnecting');
58
+ if (this.heartbeatTimer) {
59
+ clearInterval(this.heartbeatTimer);
60
+ this.heartbeatTimer = undefined;
61
+ }
62
+ this.setState('disconnected');
63
+ this.emit('disconnected');
64
+ }
65
+ translateInbound(openclawMsg, context) {
66
+ this.sequenceNumber++;
67
+ return {
68
+ id: randomUUID(),
69
+ kind: ROLE_TO_KIND[openclawMsg.role],
70
+ from: context.userId,
71
+ to: undefined,
72
+ payload: {
73
+ content: openclawMsg.content,
74
+ platform: context.platform,
75
+ conversationId: context.conversationId,
76
+ historyLength: context.history.length,
77
+ sequence: this.sequenceNumber,
78
+ ...openclawMsg.metadata,
79
+ },
80
+ timestamp: openclawMsg.timestamp ?? Date.now(),
81
+ };
82
+ }
83
+ translateOutbound(axonMsg) {
84
+ const role = KIND_TO_ROLE[axonMsg.kind] ?? 'assistant';
85
+ const payload = axonMsg.payload;
86
+ const content = typeof payload?.content === 'string'
87
+ ? payload.content
88
+ : typeof payload?.response === 'string'
89
+ ? payload.response
90
+ : JSON.stringify(payload);
91
+ return {
92
+ role,
93
+ content,
94
+ timestamp: axonMsg.timestamp,
95
+ metadata: {
96
+ axonId: axonMsg.id,
97
+ kind: axonMsg.kind,
98
+ from: axonMsg.from,
99
+ sequence: this.sequenceNumber,
100
+ },
101
+ };
102
+ }
103
+ send(message) {
104
+ if (this.state !== 'connected')
105
+ return;
106
+ const outbound = this.translateOutbound(message);
107
+ this.emit('message:outbound', outbound);
108
+ }
109
+ receive(openclawMsg, context) {
110
+ const inbound = this.translateInbound(openclawMsg, context);
111
+ this.emit('message:inbound', inbound);
112
+ return inbound;
113
+ }
114
+ getState() {
115
+ return this.state;
116
+ }
117
+ setState(newState) {
118
+ const old = this.state;
119
+ this.state = newState;
120
+ if (old !== newState) {
121
+ this.emit('state:change', old, newState);
122
+ }
123
+ }
124
+ async attemptReconnect() {
125
+ if (this.reconnectAttempts >= this.config.maxReconnectAttempts) {
126
+ this.setState('error');
127
+ this.emit('error', new Error('Max reconnect attempts exceeded'));
128
+ return;
129
+ }
130
+ this.reconnectAttempts++;
131
+ const delay = this.config.reconnectDelay * Math.pow(2, this.reconnectAttempts - 1);
132
+ await new Promise(resolve => setTimeout(resolve, delay));
133
+ await this.connect();
134
+ }
135
+ }
136
+ export function createGateway(config) {
137
+ return new OpenClawGateway(config);
138
+ }
139
+ //# sourceMappingURL=gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/openclaw/gateway.ts"],"names":[],"mappings":"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"}