cogxai 2.8.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 (308) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +691 -0
  3. package/dist/agents/executor.d.ts +17 -0
  4. package/dist/agents/executor.d.ts.map +1 -0
  5. package/dist/agents/executor.js +336 -0
  6. package/dist/agents/executor.js.map +1 -0
  7. package/dist/agents/index.d.ts +9 -0
  8. package/dist/agents/index.d.ts.map +1 -0
  9. package/dist/agents/index.js +18 -0
  10. package/dist/agents/index.js.map +1 -0
  11. package/dist/agents/tools.d.ts +31 -0
  12. package/dist/agents/tools.d.ts.map +1 -0
  13. package/dist/agents/tools.js +262 -0
  14. package/dist/agents/tools.js.map +1 -0
  15. package/dist/agents/types.d.ts +25 -0
  16. package/dist/agents/types.d.ts.map +1 -0
  17. package/dist/agents/types.js +170 -0
  18. package/dist/agents/types.js.map +1 -0
  19. package/dist/character/agent-tier-modifiers.d.ts +3 -0
  20. package/dist/character/agent-tier-modifiers.d.ts.map +1 -0
  21. package/dist/character/agent-tier-modifiers.js +24 -0
  22. package/dist/character/agent-tier-modifiers.js.map +1 -0
  23. package/dist/character/base-prompt.d.ts +3 -0
  24. package/dist/character/base-prompt.d.ts.map +1 -0
  25. package/dist/character/base-prompt.js +45 -0
  26. package/dist/character/base-prompt.js.map +1 -0
  27. package/dist/character/mood-modifiers.d.ts +3 -0
  28. package/dist/character/mood-modifiers.d.ts.map +1 -0
  29. package/dist/character/mood-modifiers.js +27 -0
  30. package/dist/character/mood-modifiers.js.map +1 -0
  31. package/dist/character/tier-modifiers.d.ts +3 -0
  32. package/dist/character/tier-modifiers.d.ts.map +1 -0
  33. package/dist/character/tier-modifiers.js +25 -0
  34. package/dist/character/tier-modifiers.js.map +1 -0
  35. package/dist/cli/banner.d.ts +20 -0
  36. package/dist/cli/banner.d.ts.map +1 -0
  37. package/dist/cli/banner.js +73 -0
  38. package/dist/cli/banner.js.map +1 -0
  39. package/dist/cli/export.d.ts +2 -0
  40. package/dist/cli/export.d.ts.map +1 -0
  41. package/dist/cli/export.js +176 -0
  42. package/dist/cli/export.js.map +1 -0
  43. package/dist/cli/index.d.ts +3 -0
  44. package/dist/cli/index.d.ts.map +1 -0
  45. package/dist/cli/index.js +80 -0
  46. package/dist/cli/index.js.map +1 -0
  47. package/dist/cli/init.d.ts +2 -0
  48. package/dist/cli/init.d.ts.map +1 -0
  49. package/dist/cli/init.js +541 -0
  50. package/dist/cli/init.js.map +1 -0
  51. package/dist/cli/register.d.ts +2 -0
  52. package/dist/cli/register.d.ts.map +1 -0
  53. package/dist/cli/register.js +121 -0
  54. package/dist/cli/register.js.map +1 -0
  55. package/dist/cli/setup.d.ts +3 -0
  56. package/dist/cli/setup.d.ts.map +1 -0
  57. package/dist/cli/setup.js +403 -0
  58. package/dist/cli/setup.js.map +1 -0
  59. package/dist/cli/ship.d.ts +2 -0
  60. package/dist/cli/ship.d.ts.map +1 -0
  61. package/dist/cli/ship.js +32 -0
  62. package/dist/cli/ship.js.map +1 -0
  63. package/dist/config.d.ts +90 -0
  64. package/dist/config.d.ts.map +1 -0
  65. package/dist/config.js +124 -0
  66. package/dist/config.js.map +1 -0
  67. package/dist/core/allium-client.d.ts +32 -0
  68. package/dist/core/allium-client.d.ts.map +1 -0
  69. package/dist/core/allium-client.js +162 -0
  70. package/dist/core/allium-client.js.map +1 -0
  71. package/dist/core/claude-client.d.ts +31 -0
  72. package/dist/core/claude-client.d.ts.map +1 -0
  73. package/dist/core/claude-client.js +172 -0
  74. package/dist/core/claude-client.js.map +1 -0
  75. package/dist/core/database.d.ts +17 -0
  76. package/dist/core/database.d.ts.map +1 -0
  77. package/dist/core/database.js +499 -0
  78. package/dist/core/database.js.map +1 -0
  79. package/dist/core/embeddings.d.ts +28 -0
  80. package/dist/core/embeddings.d.ts.map +1 -0
  81. package/dist/core/embeddings.js +212 -0
  82. package/dist/core/embeddings.js.map +1 -0
  83. package/dist/core/encryption.d.ts +49 -0
  84. package/dist/core/encryption.d.ts.map +1 -0
  85. package/dist/core/encryption.js +136 -0
  86. package/dist/core/encryption.js.map +1 -0
  87. package/dist/core/guardrails.d.ts +30 -0
  88. package/dist/core/guardrails.d.ts.map +1 -0
  89. package/dist/core/guardrails.js +191 -0
  90. package/dist/core/guardrails.js.map +1 -0
  91. package/dist/core/inference.d.ts +37 -0
  92. package/dist/core/inference.d.ts.map +1 -0
  93. package/dist/core/inference.js +110 -0
  94. package/dist/core/inference.js.map +1 -0
  95. package/dist/core/input-guardrails.d.ts +21 -0
  96. package/dist/core/input-guardrails.d.ts.map +1 -0
  97. package/dist/core/input-guardrails.js +59 -0
  98. package/dist/core/input-guardrails.js.map +1 -0
  99. package/dist/core/logger.d.ts +3 -0
  100. package/dist/core/logger.d.ts.map +1 -0
  101. package/dist/core/logger.js +41 -0
  102. package/dist/core/logger.js.map +1 -0
  103. package/dist/core/memory-graph.d.ts +126 -0
  104. package/dist/core/memory-graph.d.ts.map +1 -0
  105. package/dist/core/memory-graph.js +451 -0
  106. package/dist/core/memory-graph.js.map +1 -0
  107. package/dist/core/memory.d.ts +172 -0
  108. package/dist/core/memory.d.ts.map +1 -0
  109. package/dist/core/memory.js +1432 -0
  110. package/dist/core/memory.js.map +1 -0
  111. package/dist/core/owner-context.d.ts +8 -0
  112. package/dist/core/owner-context.d.ts.map +1 -0
  113. package/dist/core/owner-context.js +31 -0
  114. package/dist/core/owner-context.js.map +1 -0
  115. package/dist/core/price-oracle.d.ts +16 -0
  116. package/dist/core/price-oracle.d.ts.map +1 -0
  117. package/dist/core/price-oracle.js +162 -0
  118. package/dist/core/price-oracle.js.map +1 -0
  119. package/dist/core/solana-client.d.ts +39 -0
  120. package/dist/core/solana-client.d.ts.map +1 -0
  121. package/dist/core/solana-client.js +366 -0
  122. package/dist/core/solana-client.js.map +1 -0
  123. package/dist/core/telegram-client.d.ts +22 -0
  124. package/dist/core/telegram-client.d.ts.map +1 -0
  125. package/dist/core/telegram-client.js +93 -0
  126. package/dist/core/telegram-client.js.map +1 -0
  127. package/dist/core/venice-client.d.ts +94 -0
  128. package/dist/core/venice-client.d.ts.map +1 -0
  129. package/dist/core/venice-client.js +282 -0
  130. package/dist/core/venice-client.js.map +1 -0
  131. package/dist/core/x-client.d.ts +68 -0
  132. package/dist/core/x-client.d.ts.map +1 -0
  133. package/dist/core/x-client.js +383 -0
  134. package/dist/core/x-client.js.map +1 -0
  135. package/dist/events/event-bus.d.ts +37 -0
  136. package/dist/events/event-bus.d.ts.map +1 -0
  137. package/dist/events/event-bus.js +21 -0
  138. package/dist/events/event-bus.js.map +1 -0
  139. package/dist/events/handlers.d.ts +6 -0
  140. package/dist/events/handlers.d.ts.map +1 -0
  141. package/dist/events/handlers.js +21 -0
  142. package/dist/events/handlers.js.map +1 -0
  143. package/dist/features/action-learning.d.ts +61 -0
  144. package/dist/features/action-learning.d.ts.map +1 -0
  145. package/dist/features/action-learning.js +424 -0
  146. package/dist/features/action-learning.js.map +1 -0
  147. package/dist/features/active-reflection.d.ts +37 -0
  148. package/dist/features/active-reflection.d.ts.map +1 -0
  149. package/dist/features/active-reflection.js +376 -0
  150. package/dist/features/active-reflection.js.map +1 -0
  151. package/dist/features/agent-tier.d.ts +21 -0
  152. package/dist/features/agent-tier.d.ts.map +1 -0
  153. package/dist/features/agent-tier.js +56 -0
  154. package/dist/features/agent-tier.js.map +1 -0
  155. package/dist/features/campaign-tracker.d.ts +8 -0
  156. package/dist/features/campaign-tracker.d.ts.map +1 -0
  157. package/dist/features/campaign-tracker.js +206 -0
  158. package/dist/features/campaign-tracker.js.map +1 -0
  159. package/dist/features/clinamen.d.ts +48 -0
  160. package/dist/features/clinamen.d.ts.map +1 -0
  161. package/dist/features/clinamen.js +164 -0
  162. package/dist/features/clinamen.js.map +1 -0
  163. package/dist/features/dream-cycle.d.ts +12 -0
  164. package/dist/features/dream-cycle.d.ts.map +1 -0
  165. package/dist/features/dream-cycle.js +889 -0
  166. package/dist/features/dream-cycle.js.map +1 -0
  167. package/dist/features/market-monitor.d.ts +4 -0
  168. package/dist/features/market-monitor.d.ts.map +1 -0
  169. package/dist/features/market-monitor.js +135 -0
  170. package/dist/features/market-monitor.js.map +1 -0
  171. package/dist/features/memory-trace.d.ts +75 -0
  172. package/dist/features/memory-trace.d.ts.map +1 -0
  173. package/dist/features/memory-trace.js +325 -0
  174. package/dist/features/memory-trace.js.map +1 -0
  175. package/dist/features/onchain-opinion.d.ts +5 -0
  176. package/dist/features/onchain-opinion.d.ts.map +1 -0
  177. package/dist/features/onchain-opinion.js +70 -0
  178. package/dist/features/onchain-opinion.js.map +1 -0
  179. package/dist/features/price-personality.d.ts +4 -0
  180. package/dist/features/price-personality.d.ts.map +1 -0
  181. package/dist/features/price-personality.js +156 -0
  182. package/dist/features/price-personality.js.map +1 -0
  183. package/dist/features/x-sentiment-monitor.d.ts +8 -0
  184. package/dist/features/x-sentiment-monitor.d.ts.map +1 -0
  185. package/dist/features/x-sentiment-monitor.js +289 -0
  186. package/dist/features/x-sentiment-monitor.js.map +1 -0
  187. package/dist/index.d.ts +3 -0
  188. package/dist/index.d.ts.map +1 -0
  189. package/dist/index.js +133 -0
  190. package/dist/index.js.map +1 -0
  191. package/dist/knowledge/tokenomics.d.ts +72 -0
  192. package/dist/knowledge/tokenomics.d.ts.map +1 -0
  193. package/dist/knowledge/tokenomics.js +140 -0
  194. package/dist/knowledge/tokenomics.js.map +1 -0
  195. package/dist/mcp/local-store.d.ts +53 -0
  196. package/dist/mcp/local-store.d.ts.map +1 -0
  197. package/dist/mcp/local-store.js +175 -0
  198. package/dist/mcp/local-store.js.map +1 -0
  199. package/dist/mcp/server.d.ts +2 -0
  200. package/dist/mcp/server.d.ts.map +1 -0
  201. package/dist/mcp/server.js +373 -0
  202. package/dist/mcp/server.js.map +1 -0
  203. package/dist/mentions/classifier.d.ts +3 -0
  204. package/dist/mentions/classifier.d.ts.map +1 -0
  205. package/dist/mentions/classifier.js +51 -0
  206. package/dist/mentions/classifier.js.map +1 -0
  207. package/dist/mentions/dispatcher.d.ts +3 -0
  208. package/dist/mentions/dispatcher.d.ts.map +1 -0
  209. package/dist/mentions/dispatcher.js +404 -0
  210. package/dist/mentions/dispatcher.js.map +1 -0
  211. package/dist/mentions/poller.d.ts +3 -0
  212. package/dist/mentions/poller.d.ts.map +1 -0
  213. package/dist/mentions/poller.js +45 -0
  214. package/dist/mentions/poller.js.map +1 -0
  215. package/dist/sdk/cortex-v2.d.ts +121 -0
  216. package/dist/sdk/cortex-v2.d.ts.map +1 -0
  217. package/dist/sdk/cortex-v2.js +207 -0
  218. package/dist/sdk/cortex-v2.js.map +1 -0
  219. package/dist/sdk/cortex.d.ts +64 -0
  220. package/dist/sdk/cortex.d.ts.map +1 -0
  221. package/dist/sdk/cortex.js +362 -0
  222. package/dist/sdk/cortex.js.map +1 -0
  223. package/dist/sdk/http-transport.d.ts +15 -0
  224. package/dist/sdk/http-transport.d.ts.map +1 -0
  225. package/dist/sdk/http-transport.js +49 -0
  226. package/dist/sdk/http-transport.js.map +1 -0
  227. package/dist/sdk/index.d.ts +5 -0
  228. package/dist/sdk/index.d.ts.map +1 -0
  229. package/dist/sdk/index.js +8 -0
  230. package/dist/sdk/index.js.map +1 -0
  231. package/dist/sdk/sdk-mode.d.ts +1 -0
  232. package/dist/sdk/sdk-mode.d.ts.map +1 -0
  233. package/dist/sdk/sdk-mode.js +5 -0
  234. package/dist/sdk/sdk-mode.js.map +1 -0
  235. package/dist/sdk/types.d.ts +48 -0
  236. package/dist/sdk/types.d.ts.map +1 -0
  237. package/dist/sdk/types.js +3 -0
  238. package/dist/sdk/types.js.map +1 -0
  239. package/dist/services/response.service.d.ts +27 -0
  240. package/dist/services/response.service.d.ts.map +1 -0
  241. package/dist/services/response.service.js +62 -0
  242. package/dist/services/response.service.js.map +1 -0
  243. package/dist/services/social.service.d.ts +14 -0
  244. package/dist/services/social.service.d.ts.map +1 -0
  245. package/dist/services/social.service.js +44 -0
  246. package/dist/services/social.service.js.map +1 -0
  247. package/dist/services/telegram.service.d.ts +30 -0
  248. package/dist/services/telegram.service.d.ts.map +1 -0
  249. package/dist/services/telegram.service.js +71 -0
  250. package/dist/services/telegram.service.js.map +1 -0
  251. package/dist/types/api.d.ts +109 -0
  252. package/dist/types/api.d.ts.map +1 -0
  253. package/dist/types/api.js +6 -0
  254. package/dist/types/api.js.map +1 -0
  255. package/dist/utils/constants.d.ts +49 -0
  256. package/dist/utils/constants.d.ts.map +1 -0
  257. package/dist/utils/constants.js +110 -0
  258. package/dist/utils/constants.js.map +1 -0
  259. package/dist/utils/env-persona.d.ts +9 -0
  260. package/dist/utils/env-persona.d.ts.map +1 -0
  261. package/dist/utils/env-persona.js +53 -0
  262. package/dist/utils/env-persona.js.map +1 -0
  263. package/dist/utils/format.d.ts +12 -0
  264. package/dist/utils/format.d.ts.map +1 -0
  265. package/dist/utils/format.js +59 -0
  266. package/dist/utils/format.js.map +1 -0
  267. package/dist/utils/index.d.ts +4 -0
  268. package/dist/utils/index.d.ts.map +1 -0
  269. package/dist/utils/index.js +20 -0
  270. package/dist/utils/index.js.map +1 -0
  271. package/dist/utils/text.d.ts +10 -0
  272. package/dist/utils/text.d.ts.map +1 -0
  273. package/dist/utils/text.js +33 -0
  274. package/dist/utils/text.js.map +1 -0
  275. package/dist/verify-app/routes.d.ts +3 -0
  276. package/dist/verify-app/routes.d.ts.map +1 -0
  277. package/dist/verify-app/routes.js +101 -0
  278. package/dist/verify-app/routes.js.map +1 -0
  279. package/dist/webhook/agent-routes.d.ts +3 -0
  280. package/dist/webhook/agent-routes.d.ts.map +1 -0
  281. package/dist/webhook/agent-routes.js +314 -0
  282. package/dist/webhook/agent-routes.js.map +1 -0
  283. package/dist/webhook/campaign-routes.d.ts +3 -0
  284. package/dist/webhook/campaign-routes.d.ts.map +1 -0
  285. package/dist/webhook/campaign-routes.js +333 -0
  286. package/dist/webhook/campaign-routes.js.map +1 -0
  287. package/dist/webhook/cortex-routes.d.ts +13 -0
  288. package/dist/webhook/cortex-routes.d.ts.map +1 -0
  289. package/dist/webhook/cortex-routes.js +534 -0
  290. package/dist/webhook/cortex-routes.js.map +1 -0
  291. package/dist/webhook/dashboard-routes.d.ts +8 -0
  292. package/dist/webhook/dashboard-routes.d.ts.map +1 -0
  293. package/dist/webhook/dashboard-routes.js +588 -0
  294. package/dist/webhook/dashboard-routes.js.map +1 -0
  295. package/dist/webhook/graph-routes.d.ts +3 -0
  296. package/dist/webhook/graph-routes.d.ts.map +1 -0
  297. package/dist/webhook/graph-routes.js +238 -0
  298. package/dist/webhook/graph-routes.js.map +1 -0
  299. package/dist/webhook/privy-auth.d.ts +35 -0
  300. package/dist/webhook/privy-auth.d.ts.map +1 -0
  301. package/dist/webhook/privy-auth.js +99 -0
  302. package/dist/webhook/privy-auth.js.map +1 -0
  303. package/dist/webhook/server.d.ts +4 -0
  304. package/dist/webhook/server.d.ts.map +1 -0
  305. package/dist/webhook/server.js +912 -0
  306. package/dist/webhook/server.js.map +1 -0
  307. package/package.json +96 -0
  308. package/supabase-schema.sql +399 -0
@@ -0,0 +1,383 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.postReply = postReply;
4
+ exports.postTweet = postTweet;
5
+ exports.postThread = postThread;
6
+ exports.splitForThread = splitForThread;
7
+ exports.getCachedUsername = getCachedUsername;
8
+ exports.getUsernameOrId = getUsernameOrId;
9
+ exports.getMentions = getMentions;
10
+ exports.getTweetWithContext = getTweetWithContext;
11
+ exports.searchHashtagTweets = searchHashtagTweets;
12
+ exports.searchTokenMentions = searchTokenMentions;
13
+ exports.getUserTweets = getUserTweets;
14
+ exports.refreshTweetMetrics = refreshTweetMetrics;
15
+ exports.getTweetMetrics = getTweetMetrics;
16
+ exports.getUserById = getUserById;
17
+ const twitter_api_v2_1 = require("twitter-api-v2");
18
+ const config_1 = require("../config");
19
+ const logger_1 = require("./logger");
20
+ const log = (0, logger_1.createChildLogger)('x-client');
21
+ let _client = null;
22
+ let _rwClient = null;
23
+ function getClient() {
24
+ if (!_client) {
25
+ _client = new twitter_api_v2_1.TwitterApi({
26
+ appKey: config_1.config.x.apiKey,
27
+ appSecret: config_1.config.x.apiSecret,
28
+ accessToken: config_1.config.x.accessToken,
29
+ accessSecret: config_1.config.x.accessSecret,
30
+ });
31
+ _rwClient = _client.readWrite;
32
+ }
33
+ return _client;
34
+ }
35
+ function getRwClient() {
36
+ if (!_rwClient)
37
+ getClient();
38
+ return _rwClient;
39
+ }
40
+ // X Premium allows up to 4000 characters (was 280 for standard accounts)
41
+ const MAX_TWEET_LENGTH = 4000;
42
+ /**
43
+ * Strip em-dashes and replace with comma or period.
44
+ */
45
+ function stripEmDashes(text) {
46
+ return text
47
+ .replace(/ — /g, ', ') // " — " → ", "
48
+ .replace(/—/g, ', '); // "—" (no spaces) → ", "
49
+ }
50
+ /**
51
+ * Smart truncate text to fit within limit, respecting word boundaries.
52
+ * Adds ellipsis if truncated.
53
+ */
54
+ function smartTruncate(text, maxLength = MAX_TWEET_LENGTH) {
55
+ if (text.length <= maxLength)
56
+ return text;
57
+ // Reserve space for ellipsis
58
+ const truncateAt = maxLength - 3;
59
+ // Find last space before truncation point
60
+ let lastSpace = text.lastIndexOf(' ', truncateAt);
61
+ // If no space found or it's too early, just cut (for very long words)
62
+ if (lastSpace < truncateAt * 0.5) {
63
+ lastSpace = truncateAt;
64
+ }
65
+ return text.slice(0, lastSpace).trimEnd() + '...';
66
+ }
67
+ async function postReply(tweetId, text) {
68
+ const truncated = smartTruncate(stripEmDashes(text));
69
+ log.info({ tweetId, originalLength: text.length, length: truncated.length }, 'Posting reply');
70
+ const result = await getRwClient().v2.reply(truncated, tweetId);
71
+ return result.data.id;
72
+ }
73
+ async function postTweet(text) {
74
+ const truncated = smartTruncate(stripEmDashes(text));
75
+ log.info({ originalLength: text.length, length: truncated.length }, 'Posting tweet');
76
+ const result = await getRwClient().v2.tweet(truncated);
77
+ return result.data.id;
78
+ }
79
+ async function postThread(texts) {
80
+ log.info({ count: texts.length }, 'Posting thread');
81
+ const tweetIds = [];
82
+ let previousId;
83
+ for (const text of texts) {
84
+ const truncated = smartTruncate(stripEmDashes(text));
85
+ if (!previousId) {
86
+ const result = await getRwClient().v2.tweet(truncated);
87
+ previousId = result.data.id;
88
+ }
89
+ else {
90
+ const result = await getRwClient().v2.reply(truncated, previousId);
91
+ previousId = result.data.id;
92
+ }
93
+ tweetIds.push(previousId);
94
+ }
95
+ return tweetIds;
96
+ }
97
+ /**
98
+ * Split a long text into multiple tweets for threading.
99
+ * Useful for responses that exceed 280 chars.
100
+ */
101
+ function splitForThread(text, maxLength = MAX_TWEET_LENGTH) {
102
+ if (text.length <= maxLength)
103
+ return [text];
104
+ const tweets = [];
105
+ let remaining = text;
106
+ while (remaining.length > 0) {
107
+ if (remaining.length <= maxLength) {
108
+ tweets.push(remaining);
109
+ break;
110
+ }
111
+ // Reserve space for thread indicator (e.g., "1/3")
112
+ const effectiveMax = maxLength - 5;
113
+ // Find a good break point (sentence end, then word boundary)
114
+ let breakPoint = -1;
115
+ // Try to break at sentence end
116
+ const sentenceEnders = ['. ', '! ', '? ', '.\n', '!\n', '?\n'];
117
+ for (const ender of sentenceEnders) {
118
+ const idx = remaining.lastIndexOf(ender, effectiveMax);
119
+ if (idx > effectiveMax * 0.4 && idx > breakPoint) {
120
+ breakPoint = idx + ender.length - 1;
121
+ }
122
+ }
123
+ // Fall back to word boundary
124
+ if (breakPoint === -1) {
125
+ breakPoint = remaining.lastIndexOf(' ', effectiveMax);
126
+ if (breakPoint < effectiveMax * 0.4) {
127
+ breakPoint = effectiveMax;
128
+ }
129
+ }
130
+ tweets.push(remaining.slice(0, breakPoint).trimEnd());
131
+ remaining = remaining.slice(breakPoint).trimStart();
132
+ }
133
+ return tweets;
134
+ }
135
+ // Username cache: maps X user IDs to @usernames
136
+ const _usernameCache = new Map();
137
+ function getCachedUsername(userId) {
138
+ return _usernameCache.get(userId);
139
+ }
140
+ function getUsernameOrId(userId) {
141
+ return _usernameCache.get(userId) || userId;
142
+ }
143
+ async function getMentions(sinceId) {
144
+ log.debug({ sinceId }, 'Fetching mentions');
145
+ const params = {
146
+ 'tweet.fields': 'created_at,author_id,conversation_id,text',
147
+ 'expansions': 'author_id',
148
+ 'user.fields': 'username',
149
+ max_results: '20',
150
+ };
151
+ if (sinceId)
152
+ params.since_id = sinceId;
153
+ const result = await getRwClient().v2.userMentionTimeline(config_1.config.x.botUserId, params);
154
+ // Cache author usernames
155
+ if (result.includes?.users) {
156
+ for (const user of result.includes.users) {
157
+ _usernameCache.set(user.id, user.username);
158
+ }
159
+ }
160
+ return result.data?.data || [];
161
+ }
162
+ /**
163
+ * Fetch a single tweet by ID, optionally with conversation context.
164
+ * Returns the tweet and up to `depth` parent tweets in the thread.
165
+ */
166
+ async function getTweetWithContext(tweetId, depth = 3) {
167
+ const parents = [];
168
+ try {
169
+ const result = await getRwClient().v2.singleTweet(tweetId, {
170
+ 'tweet.fields': 'created_at,author_id,conversation_id,in_reply_to_user_id,referenced_tweets,text',
171
+ });
172
+ const tweet = result.data;
173
+ let currentTweet = tweet;
174
+ // Walk up the reply chain to get parent context
175
+ for (let i = 0; i < depth; i++) {
176
+ const replyTo = currentTweet.referenced_tweets?.find(r => r.type === 'replied_to');
177
+ if (!replyTo)
178
+ break;
179
+ try {
180
+ const parentResult = await getRwClient().v2.singleTweet(replyTo.id, {
181
+ 'tweet.fields': 'created_at,author_id,conversation_id,referenced_tweets,text',
182
+ });
183
+ parents.unshift(parentResult.data); // oldest first
184
+ currentTweet = parentResult.data;
185
+ }
186
+ catch {
187
+ break; // Parent might be deleted or protected
188
+ }
189
+ }
190
+ return { tweet, parents };
191
+ }
192
+ catch (err) {
193
+ log.warn({ tweetId, err }, 'Failed to fetch tweet context');
194
+ return { tweet: { id: tweetId, text: '' }, parents: [] };
195
+ }
196
+ }
197
+ /**
198
+ * Search tweets mentioning @CogxAI with #CogxAI.
199
+ * Requires X API Basic tier ($100/mo) for v2.search().
200
+ */
201
+ async function searchHashtagTweets(sinceId, maxResults = 100) {
202
+ log.info({ sinceId, maxResults }, 'Searching campaign tweets');
203
+ try {
204
+ // Broad match: direct mentions, hashtag, or $COGXAI with campaign keywords
205
+ const query = '(@CogxAI OR #CogxAI OR ($COGXAI ("AI memory" OR "blockchain brain"))) -is:retweet';
206
+ const params = {
207
+ 'tweet.fields': 'created_at,author_id,public_metrics',
208
+ 'expansions': 'author_id',
209
+ 'user.fields': 'username',
210
+ max_results: String(Math.min(maxResults, 100)),
211
+ };
212
+ if (sinceId)
213
+ params.since_id = sinceId;
214
+ const result = await getRwClient().v2.search(query, params);
215
+ // Build author lookup from includes
216
+ const authorMap = new Map();
217
+ if (result.includes?.users) {
218
+ for (const user of result.includes.users) {
219
+ authorMap.set(user.id, user.username);
220
+ }
221
+ }
222
+ const tweets = [];
223
+ for (const tweet of result.data?.data || []) {
224
+ tweets.push({
225
+ id: tweet.id,
226
+ text: tweet.text,
227
+ authorId: tweet.author_id || '',
228
+ authorUsername: authorMap.get(tweet.author_id || '') || undefined,
229
+ createdAt: tweet.created_at,
230
+ publicMetrics: tweet.public_metrics ? {
231
+ like_count: tweet.public_metrics.like_count || 0,
232
+ retweet_count: tweet.public_metrics.retweet_count || 0,
233
+ reply_count: tweet.public_metrics.reply_count || 0,
234
+ quote_count: tweet.public_metrics.quote_count || 0,
235
+ } : undefined,
236
+ });
237
+ }
238
+ log.info({ found: tweets.length }, 'Campaign tweet search complete');
239
+ return tweets;
240
+ }
241
+ catch (err) {
242
+ log.error({ err }, 'Failed to search campaign tweets');
243
+ return [];
244
+ }
245
+ }
246
+ /**
247
+ * Search tweets mentioning $COGXAI or @CogxAI.
248
+ * Used by the sentiment monitor for Telegram digests.
249
+ */
250
+ async function searchTokenMentions(sinceId, maxResults = 50) {
251
+ log.info({ sinceId, maxResults }, 'Searching $COGXAI mentions');
252
+ try {
253
+ const query = '($COGXAI OR @CogxAI) -is:retweet';
254
+ const params = {
255
+ 'tweet.fields': 'created_at,author_id,public_metrics',
256
+ 'expansions': 'author_id',
257
+ 'user.fields': 'username',
258
+ max_results: String(Math.min(maxResults, 100)),
259
+ };
260
+ if (sinceId)
261
+ params.since_id = sinceId;
262
+ const result = await getRwClient().v2.search(query, params);
263
+ const authorMap = new Map();
264
+ if (result.includes?.users) {
265
+ for (const user of result.includes.users) {
266
+ authorMap.set(user.id, user.username);
267
+ }
268
+ }
269
+ const tweets = [];
270
+ for (const tweet of result.data?.data || []) {
271
+ tweets.push({
272
+ id: tweet.id,
273
+ text: tweet.text,
274
+ authorId: tweet.author_id || '',
275
+ authorUsername: authorMap.get(tweet.author_id || '') || undefined,
276
+ createdAt: tweet.created_at,
277
+ publicMetrics: tweet.public_metrics ? {
278
+ like_count: tweet.public_metrics.like_count || 0,
279
+ retweet_count: tweet.public_metrics.retweet_count || 0,
280
+ reply_count: tweet.public_metrics.reply_count || 0,
281
+ quote_count: tweet.public_metrics.quote_count || 0,
282
+ } : undefined,
283
+ });
284
+ }
285
+ log.info({ found: tweets.length }, 'Token mention search complete');
286
+ return tweets;
287
+ }
288
+ catch (err) {
289
+ log.error({ err }, 'Failed to search token mentions');
290
+ return [];
291
+ }
292
+ }
293
+ /**
294
+ * Get recent tweets from a specific user (e.g. the creator's account).
295
+ */
296
+ async function getUserTweets(userId, sinceId, maxResults = 10) {
297
+ log.debug({ userId, sinceId }, 'Fetching user tweets');
298
+ try {
299
+ const params = {
300
+ 'tweet.fields': 'created_at,author_id,public_metrics',
301
+ max_results: String(Math.min(maxResults, 100)),
302
+ exclude: 'retweets,replies',
303
+ };
304
+ if (sinceId)
305
+ params.since_id = sinceId;
306
+ const result = await getRwClient().v2.userTimeline(userId, params);
307
+ const tweets = [];
308
+ for (const tweet of result.data?.data || []) {
309
+ tweets.push({
310
+ id: tweet.id,
311
+ text: tweet.text,
312
+ authorId: tweet.author_id || userId,
313
+ createdAt: tweet.created_at,
314
+ publicMetrics: tweet.public_metrics ? {
315
+ like_count: tweet.public_metrics.like_count || 0,
316
+ retweet_count: tweet.public_metrics.retweet_count || 0,
317
+ reply_count: tweet.public_metrics.reply_count || 0,
318
+ quote_count: tweet.public_metrics.quote_count || 0,
319
+ } : undefined,
320
+ });
321
+ }
322
+ return tweets;
323
+ }
324
+ catch (err) {
325
+ log.warn({ userId, err }, 'Failed to fetch user tweets');
326
+ return [];
327
+ }
328
+ }
329
+ /**
330
+ * Refresh engagement metrics for a batch of tweet IDs.
331
+ * Returns a map of tweetId → { likes, retweets, replies, quotes }.
332
+ */
333
+ async function refreshTweetMetrics(tweetIds) {
334
+ const metricsMap = new Map();
335
+ if (tweetIds.length === 0)
336
+ return metricsMap;
337
+ // API allows up to 100 tweet lookups at once
338
+ const batches = [];
339
+ for (let i = 0; i < tweetIds.length; i += 100) {
340
+ batches.push(tweetIds.slice(i, i + 100));
341
+ }
342
+ for (const batch of batches) {
343
+ try {
344
+ const result = await getRwClient().v2.tweets(batch, {
345
+ 'tweet.fields': 'public_metrics',
346
+ });
347
+ for (const tweet of result.data || []) {
348
+ if (tweet.public_metrics) {
349
+ metricsMap.set(tweet.id, {
350
+ likes: tweet.public_metrics.like_count || 0,
351
+ retweets: tweet.public_metrics.retweet_count || 0,
352
+ replies: tweet.public_metrics.reply_count || 0,
353
+ quotes: tweet.public_metrics.quote_count || 0,
354
+ });
355
+ }
356
+ }
357
+ }
358
+ catch (err) {
359
+ log.warn({ err, batchSize: batch.length }, 'Failed to refresh tweet metrics batch');
360
+ }
361
+ }
362
+ return metricsMap;
363
+ }
364
+ /**
365
+ * Get engagement metrics for a single tweet.
366
+ */
367
+ async function getTweetMetrics(tweetId) {
368
+ const result = await refreshTweetMetrics([tweetId]);
369
+ return result.get(tweetId) || null;
370
+ }
371
+ async function getUserById(userId) {
372
+ try {
373
+ const result = await getRwClient().v2.user(userId, {
374
+ 'user.fields': 'description,username,name,public_metrics',
375
+ });
376
+ return result.data;
377
+ }
378
+ catch (err) {
379
+ log.warn({ userId, err }, 'Failed to fetch user');
380
+ return null;
381
+ }
382
+ }
383
+ //# sourceMappingURL=x-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x-client.js","sourceRoot":"","sources":["../../src/core/x-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ export type Mood = 'PUMPING' | 'DUMPING' | 'SIDEWAYS' | 'NEW_ATH' | 'WHALE_SELL' | 'NEUTRAL';
2
+ /**
3
+ * Typed event bus — decouples webhook handlers from feature logic.
4
+ *
5
+ * Events flow: webhook → eventBus.emit() → registered handlers
6
+ * This prevents direct cross-layer imports (e.g. base-handler importing exit-interview).
7
+ */
8
+ export interface BotEvents {
9
+ 'mood:changed': {
10
+ previous: Mood;
11
+ current: Mood;
12
+ };
13
+ 'memory:stored': {
14
+ importance: number;
15
+ memoryType: string;
16
+ };
17
+ 'telegram:broadcast': {
18
+ message: string;
19
+ feature: string;
20
+ messageId?: number;
21
+ };
22
+ 'sentiment:analyzed': {
23
+ sentiment: 'bullish' | 'bearish' | 'neutral';
24
+ tweetCount: number;
25
+ digest: string;
26
+ };
27
+ }
28
+ declare class TypedEventBus {
29
+ private emitter;
30
+ on<K extends keyof BotEvents>(event: K, handler: (payload: BotEvents[K]) => void): void;
31
+ emit<K extends keyof BotEvents>(event: K, payload: BotEvents[K]): void;
32
+ off<K extends keyof BotEvents>(event: K, handler: (payload: BotEvents[K]) => void): void;
33
+ removeAllListeners(): void;
34
+ }
35
+ export declare const eventBus: TypedEventBus;
36
+ export {};
37
+ //# sourceMappingURL=event-bus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../../src/events/event-bus.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,IAAI,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;AAE7F;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,cAAc,EAAE;QAAE,QAAQ,EAAE,IAAI,CAAC;QAAC,OAAO,EAAE,IAAI,CAAA;KAAE,CAAC;IAClD,eAAe,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,oBAAoB,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/E,oBAAoB,EAAE;QAAE,SAAS,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5G;AAED,cAAM,aAAa;IACjB,OAAO,CAAC,OAAO,CAAsB;IAErC,EAAE,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAIvF,IAAI,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI;IAItE,GAAG,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAIxF,kBAAkB,IAAI,IAAI;CAG3B;AAED,eAAO,MAAM,QAAQ,eAAsB,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.eventBus = void 0;
4
+ const events_1 = require("events");
5
+ class TypedEventBus {
6
+ emitter = new events_1.EventEmitter();
7
+ on(event, handler) {
8
+ this.emitter.on(event, handler);
9
+ }
10
+ emit(event, payload) {
11
+ this.emitter.emit(event, payload);
12
+ }
13
+ off(event, handler) {
14
+ this.emitter.off(event, handler);
15
+ }
16
+ removeAllListeners() {
17
+ this.emitter.removeAllListeners();
18
+ }
19
+ }
20
+ exports.eventBus = new TypedEventBus();
21
+ //# sourceMappingURL=event-bus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../../src/events/event-bus.ts"],"names":[],"mappings":";;;AAAA,mCAAsC;AAiBtC,MAAM,aAAa;IACT,OAAO,GAAG,IAAI,qBAAY,EAAE,CAAC;IAErC,EAAE,CAA4B,KAAQ,EAAE,OAAwC;QAC9E,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,CAA4B,KAAQ,EAAE,OAAqB;QAC7D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC;IAED,GAAG,CAA4B,KAAQ,EAAE,OAAwC;QAC/E,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;IACpC,CAAC;CACF;AAEY,QAAA,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Central event handler registration.
3
+ * Called once during startup in index.ts — wires events to feature handlers.
4
+ */
5
+ export declare function registerEventHandlers(): void;
6
+ //# sourceMappingURL=handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/events/handlers.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAS5C"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerEventHandlers = registerEventHandlers;
4
+ const event_bus_1 = require("./event-bus");
5
+ const dream_cycle_1 = require("../features/dream-cycle");
6
+ const logger_1 = require("../core/logger");
7
+ const log = (0, logger_1.createChildLogger)('events');
8
+ /**
9
+ * Central event handler registration.
10
+ * Called once during startup in index.ts — wires events to feature handlers.
11
+ */
12
+ function registerEventHandlers() {
13
+ // Accumulate importance for event-driven reflection triggers (Park et al. 2023)
14
+ event_bus_1.eventBus.on('memory:stored', ({ importance, memoryType }) => {
15
+ if (memoryType === 'episodic') {
16
+ (0, dream_cycle_1.accumulateImportance)(importance);
17
+ }
18
+ });
19
+ log.info('Event handlers registered');
20
+ }
21
+ //# sourceMappingURL=handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/events/handlers.ts"],"names":[],"mappings":";;AAUA,sDASC;AAnBD,2CAAuC;AACvC,yDAA+D;AAC/D,2CAAmD;AAEnD,MAAM,GAAG,GAAG,IAAA,0BAAiB,EAAC,QAAQ,CAAC,CAAC;AAExC;;;GAGG;AACH,SAAgB,qBAAqB;IACnC,gFAAgF;IAChF,oBAAQ,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE;QAC1D,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;YAC9B,IAAA,kCAAoB,EAAC,UAAU,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Action Learning System — Closed-loop feedback for self-improving agents.
3
+ *
4
+ * Three components:
5
+ * 1. Action Logger: Records every action the agent takes with context
6
+ * 2. Outcome Tracker: Revisits actions and records what happened
7
+ * 3. Strategy Refiner: Generates/updates procedural memories from patterns
8
+ *
9
+ * Memory flow:
10
+ * action (episodic) → outcome (episodic) → lesson (procedural)
11
+ * All linked via entity bonds: action →causes→ outcome →informs→ lesson
12
+ */
13
+ export interface ActionRecord {
14
+ /** Unique ID for this action (used to link outcomes) */
15
+ actionId: string;
16
+ /** What the agent did */
17
+ action: string;
18
+ /** Why (the reasoning/context) */
19
+ reasoning: string;
20
+ /** Feature that triggered it (e.g., 'general_reply', 'wallet_roast') */
21
+ feature: string;
22
+ /** Who was involved */
23
+ relatedUser?: string;
24
+ /** The input that triggered the action */
25
+ trigger?: string;
26
+ /** Additional context */
27
+ metadata?: Record<string, any>;
28
+ }
29
+ /**
30
+ * Log an action the agent took. Stores as episodic memory with action tags.
31
+ */
32
+ export declare function logAction(record: ActionRecord): Promise<number | null>;
33
+ export interface OutcomeRecord {
34
+ /** Links to the original action */
35
+ actionId: string;
36
+ /** What happened */
37
+ outcome: string;
38
+ /** Positive (good result), negative (bad result), neutral */
39
+ sentiment: 'positive' | 'negative' | 'neutral';
40
+ /** Numeric score if applicable (-1 to 1) */
41
+ score?: number;
42
+ /** How the outcome was measured */
43
+ measureMethod: string;
44
+ /** Additional data */
45
+ metadata?: Record<string, any>;
46
+ }
47
+ /**
48
+ * Record the outcome of a previous action.
49
+ */
50
+ export declare function logOutcome(record: OutcomeRecord): Promise<number | null>;
51
+ /**
52
+ * Analyze recent action-outcome pairs and generate/update procedural memories.
53
+ * Called during dream cycle as the 'learn' phase.
54
+ */
55
+ export declare function refineStrategies(): Promise<string[]>;
56
+ /**
57
+ * Check engagement outcomes for recent tweet replies.
58
+ * Call this periodically (e.g., every few hours in dream cycle).
59
+ */
60
+ export declare function trackSocialOutcomes(): Promise<number>;
61
+ //# sourceMappingURL=action-learning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-learning.d.ts","sourceRoot":"","sources":["../../src/features/action-learning.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAaH,MAAM,WAAW,YAAY;IAC3B,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA+B5E;AAMD,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,SAAS,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;IAC/C,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,sBAAsB;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwC9E;AA+CD;;;GAGG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CA+G1D;AA0FD;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,CAiF3D"}