@elizaos/plugin-farcaster 1.0.5 → 1.7.2

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 (80) hide show
  1. package/README.md +42 -1
  2. package/dist/__tests__/e2e/scenarios.d.ts +4 -0
  3. package/dist/__tests__/e2e/scenarios.d.ts.map +1 -0
  4. package/dist/__tests__/suite.d.ts +130 -0
  5. package/dist/__tests__/suite.d.ts.map +1 -0
  6. package/dist/__tests__/test-utils.d.ts +29 -0
  7. package/dist/__tests__/test-utils.d.ts.map +1 -0
  8. package/dist/__tests__/types.d.ts +88 -0
  9. package/dist/__tests__/types.d.ts.map +1 -0
  10. package/dist/actions/index.d.ts +4 -0
  11. package/dist/actions/index.d.ts.map +1 -0
  12. package/dist/actions/replyCast.d.ts +3 -0
  13. package/dist/actions/replyCast.d.ts.map +1 -0
  14. package/dist/actions/sendCast.d.ts +3 -0
  15. package/dist/actions/sendCast.d.ts.map +1 -0
  16. package/dist/client.d.ts +26 -0
  17. package/dist/client.d.ts.map +1 -0
  18. package/dist/common/asyncqueue.d.ts +13 -0
  19. package/dist/common/asyncqueue.d.ts.map +1 -0
  20. package/dist/common/callbacks.d.ts +14 -0
  21. package/dist/common/callbacks.d.ts.map +1 -0
  22. package/dist/common/config.d.ts +24 -0
  23. package/dist/common/config.d.ts.map +1 -0
  24. package/dist/common/constants.d.ts +9 -0
  25. package/dist/common/constants.d.ts.map +1 -0
  26. package/dist/common/prompts.d.ts +5 -0
  27. package/dist/common/prompts.d.ts.map +1 -0
  28. package/dist/common/types.d.ts +106 -0
  29. package/dist/common/types.d.ts.map +1 -0
  30. package/dist/common/utils.d.ts +28 -0
  31. package/dist/common/utils.d.ts.map +1 -0
  32. package/dist/events/messageHandler.d.ts +29 -0
  33. package/dist/events/messageHandler.d.ts.map +1 -0
  34. package/dist/index.d.ts +9 -500
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +1538 -889
  37. package/dist/index.js.map +36 -1
  38. package/dist/managers/agent.d.ts +21 -0
  39. package/dist/managers/agent.d.ts.map +1 -0
  40. package/dist/managers/embedManager.d.ts +89 -0
  41. package/dist/managers/embedManager.d.ts.map +1 -0
  42. package/dist/managers/interaction-processor.d.ts +12 -0
  43. package/dist/managers/interaction-processor.d.ts.map +1 -0
  44. package/dist/managers/interaction-source.d.ts +50 -0
  45. package/dist/managers/interaction-source.d.ts.map +1 -0
  46. package/dist/managers/interactions.d.ts +50 -0
  47. package/dist/managers/interactions.d.ts.map +1 -0
  48. package/dist/managers/post.d.ts +24 -0
  49. package/dist/managers/post.d.ts.map +1 -0
  50. package/dist/providers/index.d.ts +5 -0
  51. package/dist/providers/index.d.ts.map +1 -0
  52. package/dist/providers/profileProvider.d.ts +3 -0
  53. package/dist/providers/profileProvider.d.ts.map +1 -0
  54. package/dist/providers/threadProvider.d.ts +3 -0
  55. package/dist/providers/threadProvider.d.ts.map +1 -0
  56. package/dist/providers/timelineProvider.d.ts +3 -0
  57. package/dist/providers/timelineProvider.d.ts.map +1 -0
  58. package/dist/routes/webhook.d.ts +3 -0
  59. package/dist/routes/webhook.d.ts.map +1 -0
  60. package/dist/service.d.ts +31 -0
  61. package/dist/service.d.ts.map +1 -0
  62. package/dist/services/CastService.d.ts +142 -0
  63. package/dist/services/CastService.d.ts.map +1 -0
  64. package/dist/services/MessageService.d.ts +50 -0
  65. package/dist/services/MessageService.d.ts.map +1 -0
  66. package/package.json +6 -6
  67. package/dist/chunk-FNDASAYG.js +0 -83
  68. package/dist/chunk-FNDASAYG.js.map +0 -1
  69. package/dist/chunk-IOTLJXKN.js +0 -72
  70. package/dist/chunk-IOTLJXKN.js.map +0 -1
  71. package/dist/chunk-OAXQ6Z2Q.js +0 -105
  72. package/dist/chunk-OAXQ6Z2Q.js.map +0 -1
  73. package/dist/chunk-Y2URJ4EZ.js +0 -21
  74. package/dist/chunk-Y2URJ4EZ.js.map +0 -1
  75. package/dist/profileProvider-TNRU42OO.js +0 -8
  76. package/dist/profileProvider-TNRU42OO.js.map +0 -1
  77. package/dist/sendCast-OW6DBKQB.js +0 -8
  78. package/dist/sendCast-OW6DBKQB.js.map +0 -1
  79. package/dist/timelineProvider-GPRPFEVJ.js +0 -8
  80. package/dist/timelineProvider-GPRPFEVJ.js.map +0 -1
@@ -1,83 +0,0 @@
1
- import {
2
- FARCASTER_SERVICE_NAME
3
- } from "./chunk-Y2URJ4EZ.js";
4
-
5
- // src/providers/timelineProvider.ts
6
- import {
7
- logger
8
- } from "@elizaos/core";
9
- var farcasterTimelineProvider = {
10
- name: "farcasterTimeline",
11
- description: "Provides recent casts from the agent's Farcaster timeline",
12
- get: async (runtime, message, state) => {
13
- var _a, _b, _c;
14
- try {
15
- const service = runtime.getService(FARCASTER_SERVICE_NAME);
16
- const castService = service == null ? void 0 : service.getCastService(runtime.agentId);
17
- if (!castService) {
18
- return {
19
- text: "Farcaster timeline not available.",
20
- data: { available: false }
21
- };
22
- }
23
- const casts = await castService.getCasts({
24
- agentId: runtime.agentId,
25
- limit: 5
26
- });
27
- if (!casts || casts.length === 0) {
28
- return {
29
- text: "No recent casts in your timeline.",
30
- data: {
31
- available: true,
32
- casts: [],
33
- count: 0
34
- }
35
- };
36
- }
37
- const formattedCasts = casts.map((cast, index) => {
38
- const timeAgo = getTimeAgo(new Date(cast.timestamp));
39
- return `${index + 1}. @${cast.username} (${timeAgo}): ${cast.text}`;
40
- }).join("\n");
41
- return {
42
- text: `Recent casts from your timeline:
43
- ${formattedCasts}`,
44
- data: {
45
- available: true,
46
- casts: casts.map((c) => {
47
- var _a2;
48
- return {
49
- id: c.id,
50
- username: c.username,
51
- text: c.text,
52
- timestamp: c.timestamp,
53
- castHash: (_a2 = c.metadata) == null ? void 0 : _a2.castHash
54
- };
55
- }),
56
- count: casts.length
57
- },
58
- values: {
59
- latestCastHash: (_b = (_a = casts[0]) == null ? void 0 : _a.metadata) == null ? void 0 : _b.castHash,
60
- latestCastText: (_c = casts[0]) == null ? void 0 : _c.text
61
- }
62
- };
63
- } catch (error) {
64
- logger.error("[FarcasterTimelineProvider] Error:", error);
65
- return {
66
- text: "Unable to fetch Farcaster timeline.",
67
- data: { available: false, error: error instanceof Error ? error.message : "Unknown error" }
68
- };
69
- }
70
- }
71
- };
72
- function getTimeAgo(date) {
73
- const seconds = Math.floor(((/* @__PURE__ */ new Date()).getTime() - date.getTime()) / 1e3);
74
- if (seconds < 60) return "just now";
75
- if (seconds < 3600) return `${Math.floor(seconds / 60)}m ago`;
76
- if (seconds < 86400) return `${Math.floor(seconds / 3600)}h ago`;
77
- return `${Math.floor(seconds / 86400)}d ago`;
78
- }
79
-
80
- export {
81
- farcasterTimelineProvider
82
- };
83
- //# sourceMappingURL=chunk-FNDASAYG.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/providers/timelineProvider.ts"],"sourcesContent":["import {\n type Provider,\n type IAgentRuntime,\n type Memory,\n type State,\n type ProviderResult,\n logger,\n} from '@elizaos/core';\nimport { FARCASTER_SERVICE_NAME } from '../common/constants';\nimport type { FarcasterService } from '../service';\n\nexport const farcasterTimelineProvider: Provider = {\n name: 'farcasterTimeline',\n description: \"Provides recent casts from the agent's Farcaster timeline\",\n\n get: async (runtime: IAgentRuntime, message: Memory, state: State): Promise<ProviderResult> => {\n try {\n const service = runtime.getService(FARCASTER_SERVICE_NAME) as FarcasterService;\n const castService = service?.getCastService(runtime.agentId);\n\n if (!castService) {\n return {\n text: 'Farcaster timeline not available.',\n data: { available: false },\n };\n }\n\n // Get recent casts from timeline\n const casts = await castService.getCasts({\n agentId: runtime.agentId,\n limit: 5,\n });\n\n if (!casts || casts.length === 0) {\n return {\n text: 'No recent casts in your timeline.',\n data: {\n available: true,\n casts: [],\n count: 0,\n },\n };\n }\n\n // Format casts for context\n const formattedCasts = casts\n .map((cast, index) => {\n const timeAgo = getTimeAgo(new Date(cast.timestamp));\n return `${index + 1}. @${cast.username} (${timeAgo}): ${cast.text}`;\n })\n .join('\\n');\n\n return {\n text: `Recent casts from your timeline:\\n${formattedCasts}`,\n data: {\n available: true,\n casts: casts.map((c) => ({\n id: c.id,\n username: c.username,\n text: c.text,\n timestamp: c.timestamp,\n castHash: c.metadata?.castHash,\n })),\n count: casts.length,\n },\n values: {\n latestCastHash: casts[0]?.metadata?.castHash,\n latestCastText: casts[0]?.text,\n },\n };\n } catch (error) {\n logger.error('[FarcasterTimelineProvider] Error:', error);\n return {\n text: 'Unable to fetch Farcaster timeline.',\n data: { available: false, error: error instanceof Error ? error.message : 'Unknown error' },\n };\n }\n },\n};\n\n// Helper function to format time ago\nfunction getTimeAgo(date: Date): string {\n const seconds = Math.floor((new Date().getTime() - date.getTime()) / 1000);\n\n if (seconds < 60) return 'just now';\n if (seconds < 3600) return `${Math.floor(seconds / 60)}m ago`;\n if (seconds < 86400) return `${Math.floor(seconds / 3600)}h ago`;\n return `${Math.floor(seconds / 86400)}d ago`;\n}\n"],"mappings":";;;;;AAAA;AAAA,EAME;AAAA,OACK;AAIA,IAAM,4BAAsC;AAAA,EACjD,MAAM;AAAA,EACN,aAAa;AAAA,EAEb,KAAK,OAAO,SAAwB,SAAiB,UAA0C;AAfjG;AAgBI,QAAI;AACF,YAAM,UAAU,QAAQ,WAAW,sBAAsB;AACzD,YAAM,cAAc,mCAAS,eAAe,QAAQ;AAEpD,UAAI,CAAC,aAAa;AAChB,eAAO;AAAA,UACL,MAAM;AAAA,UACN,MAAM,EAAE,WAAW,MAAM;AAAA,QAC3B;AAAA,MACF;AAGA,YAAM,QAAQ,MAAM,YAAY,SAAS;AAAA,QACvC,SAAS,QAAQ;AAAA,QACjB,OAAO;AAAA,MACT,CAAC;AAED,UAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,eAAO;AAAA,UACL,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,WAAW;AAAA,YACX,OAAO,CAAC;AAAA,YACR,OAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAGA,YAAM,iBAAiB,MACpB,IAAI,CAAC,MAAM,UAAU;AACpB,cAAM,UAAU,WAAW,IAAI,KAAK,KAAK,SAAS,CAAC;AACnD,eAAO,GAAG,QAAQ,CAAC,MAAM,KAAK,QAAQ,KAAK,OAAO,MAAM,KAAK,IAAI;AAAA,MACnE,CAAC,EACA,KAAK,IAAI;AAEZ,aAAO;AAAA,QACL,MAAM;AAAA,EAAqC,cAAc;AAAA,QACzD,MAAM;AAAA,UACJ,WAAW;AAAA,UACX,OAAO,MAAM,IAAI,CAAC,MAAG;AAxD/B,gBAAAA;AAwDmC;AAAA,cACvB,IAAI,EAAE;AAAA,cACN,UAAU,EAAE;AAAA,cACZ,MAAM,EAAE;AAAA,cACR,WAAW,EAAE;AAAA,cACb,WAAUA,MAAA,EAAE,aAAF,gBAAAA,IAAY;AAAA,YACxB;AAAA,WAAE;AAAA,UACF,OAAO,MAAM;AAAA,QACf;AAAA,QACA,QAAQ;AAAA,UACN,iBAAgB,iBAAM,CAAC,MAAP,mBAAU,aAAV,mBAAoB;AAAA,UACpC,iBAAgB,WAAM,CAAC,MAAP,mBAAU;AAAA,QAC5B;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,aAAO,MAAM,sCAAsC,KAAK;AACxD,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,EAAE,WAAW,OAAO,OAAO,iBAAiB,QAAQ,MAAM,UAAU,gBAAgB;AAAA,MAC5F;AAAA,IACF;AAAA,EACF;AACF;AAGA,SAAS,WAAW,MAAoB;AACtC,QAAM,UAAU,KAAK,QAAO,oBAAI,KAAK,GAAE,QAAQ,IAAI,KAAK,QAAQ,KAAK,GAAI;AAEzE,MAAI,UAAU,GAAI,QAAO;AACzB,MAAI,UAAU,KAAM,QAAO,GAAG,KAAK,MAAM,UAAU,EAAE,CAAC;AACtD,MAAI,UAAU,MAAO,QAAO,GAAG,KAAK,MAAM,UAAU,IAAI,CAAC;AACzD,SAAO,GAAG,KAAK,MAAM,UAAU,KAAK,CAAC;AACvC;","names":["_a"]}
@@ -1,72 +0,0 @@
1
- import {
2
- FARCASTER_SERVICE_NAME
3
- } from "./chunk-Y2URJ4EZ.js";
4
-
5
- // src/providers/profileProvider.ts
6
- import {
7
- logger
8
- } from "@elizaos/core";
9
- var farcasterProfileProvider = {
10
- name: "farcasterProfile",
11
- description: "Provides information about the agent's Farcaster profile",
12
- get: async (runtime, message, state) => {
13
- try {
14
- const service = runtime.getService(FARCASTER_SERVICE_NAME);
15
- const managers = service == null ? void 0 : service.getActiveManagers();
16
- if (!managers || managers.size === 0) {
17
- return {
18
- text: "Farcaster profile not available.",
19
- data: { available: false }
20
- };
21
- }
22
- const manager = managers.get(runtime.agentId);
23
- if (!manager) {
24
- return {
25
- text: "Farcaster profile not available for this agent.",
26
- data: { available: false }
27
- };
28
- }
29
- const fid = parseInt(runtime.getSetting("FARCASTER_FID"), 10);
30
- if (!fid || isNaN(fid)) {
31
- return {
32
- text: "Invalid Farcaster FID configured.",
33
- data: { available: false, error: "Invalid FID" }
34
- };
35
- }
36
- try {
37
- const profile = await manager.client.getProfile(fid);
38
- return {
39
- text: `Your Farcaster profile: @${profile.username} (FID: ${profile.fid}). ${profile.name ? `Display name: ${profile.name}` : ""}`,
40
- data: {
41
- available: true,
42
- fid: profile.fid,
43
- username: profile.username,
44
- name: profile.name,
45
- pfp: profile.pfp
46
- },
47
- values: {
48
- fid: profile.fid,
49
- username: profile.username
50
- }
51
- };
52
- } catch (error) {
53
- logger.error("[FarcasterProfileProvider] Error fetching profile:", error);
54
- return {
55
- text: "Unable to fetch Farcaster profile at this time.",
56
- data: { available: false, error: "Fetch failed" }
57
- };
58
- }
59
- } catch (error) {
60
- logger.error("[FarcasterProfileProvider] Error:", error);
61
- return {
62
- text: "Farcaster service is not available.",
63
- data: { available: false }
64
- };
65
- }
66
- }
67
- };
68
-
69
- export {
70
- farcasterProfileProvider
71
- };
72
- //# sourceMappingURL=chunk-IOTLJXKN.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/providers/profileProvider.ts"],"sourcesContent":["import {\n type Provider,\n type IAgentRuntime,\n type Memory,\n type State,\n type ProviderResult,\n logger,\n} from '@elizaos/core';\nimport { FARCASTER_SERVICE_NAME } from '../common/constants';\nimport type { FarcasterService } from '../service';\n\nexport const farcasterProfileProvider: Provider = {\n name: 'farcasterProfile',\n description: \"Provides information about the agent's Farcaster profile\",\n\n get: async (runtime: IAgentRuntime, message: Memory, state: State): Promise<ProviderResult> => {\n try {\n const service = runtime.getService(FARCASTER_SERVICE_NAME) as FarcasterService;\n const managers = service?.getActiveManagers();\n\n if (!managers || managers.size === 0) {\n return {\n text: 'Farcaster profile not available.',\n data: { available: false },\n };\n }\n\n const manager = managers.get(runtime.agentId);\n if (!manager) {\n return {\n text: 'Farcaster profile not available for this agent.',\n data: { available: false },\n };\n }\n\n const fid = parseInt(runtime.getSetting('FARCASTER_FID') as string, 10);\n if (!fid || isNaN(fid)) {\n return {\n text: 'Invalid Farcaster FID configured.',\n data: { available: false, error: 'Invalid FID' },\n };\n }\n\n try {\n const profile = await manager.client.getProfile(fid);\n\n return {\n text: `Your Farcaster profile: @${profile.username} (FID: ${profile.fid}). ${profile.name ? `Display name: ${profile.name}` : ''}`,\n data: {\n available: true,\n fid: profile.fid,\n username: profile.username,\n name: profile.name,\n pfp: profile.pfp,\n },\n values: {\n fid: profile.fid,\n username: profile.username,\n },\n };\n } catch (error) {\n logger.error('[FarcasterProfileProvider] Error fetching profile:', error);\n return {\n text: 'Unable to fetch Farcaster profile at this time.',\n data: { available: false, error: 'Fetch failed' },\n };\n }\n } catch (error) {\n logger.error('[FarcasterProfileProvider] Error:', error);\n return {\n text: 'Farcaster service is not available.',\n data: { available: false },\n };\n }\n },\n};\n"],"mappings":";;;;;AAAA;AAAA,EAME;AAAA,OACK;AAIA,IAAM,2BAAqC;AAAA,EAChD,MAAM;AAAA,EACN,aAAa;AAAA,EAEb,KAAK,OAAO,SAAwB,SAAiB,UAA0C;AAC7F,QAAI;AACF,YAAM,UAAU,QAAQ,WAAW,sBAAsB;AACzD,YAAM,WAAW,mCAAS;AAE1B,UAAI,CAAC,YAAY,SAAS,SAAS,GAAG;AACpC,eAAO;AAAA,UACL,MAAM;AAAA,UACN,MAAM,EAAE,WAAW,MAAM;AAAA,QAC3B;AAAA,MACF;AAEA,YAAM,UAAU,SAAS,IAAI,QAAQ,OAAO;AAC5C,UAAI,CAAC,SAAS;AACZ,eAAO;AAAA,UACL,MAAM;AAAA,UACN,MAAM,EAAE,WAAW,MAAM;AAAA,QAC3B;AAAA,MACF;AAEA,YAAM,MAAM,SAAS,QAAQ,WAAW,eAAe,GAAa,EAAE;AACtE,UAAI,CAAC,OAAO,MAAM,GAAG,GAAG;AACtB,eAAO;AAAA,UACL,MAAM;AAAA,UACN,MAAM,EAAE,WAAW,OAAO,OAAO,cAAc;AAAA,QACjD;AAAA,MACF;AAEA,UAAI;AACF,cAAM,UAAU,MAAM,QAAQ,OAAO,WAAW,GAAG;AAEnD,eAAO;AAAA,UACL,MAAM,4BAA4B,QAAQ,QAAQ,UAAU,QAAQ,GAAG,MAAM,QAAQ,OAAO,iBAAiB,QAAQ,IAAI,KAAK,EAAE;AAAA,UAChI,MAAM;AAAA,YACJ,WAAW;AAAA,YACX,KAAK,QAAQ;AAAA,YACb,UAAU,QAAQ;AAAA,YAClB,MAAM,QAAQ;AAAA,YACd,KAAK,QAAQ;AAAA,UACf;AAAA,UACA,QAAQ;AAAA,YACN,KAAK,QAAQ;AAAA,YACb,UAAU,QAAQ;AAAA,UACpB;AAAA,QACF;AAAA,MACF,SAAS,OAAO;AACd,eAAO,MAAM,sDAAsD,KAAK;AACxE,eAAO;AAAA,UACL,MAAM;AAAA,UACN,MAAM,EAAE,WAAW,OAAO,OAAO,eAAe;AAAA,QAClD;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,aAAO,MAAM,qCAAqC,KAAK;AACvD,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,EAAE,WAAW,MAAM;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
@@ -1,105 +0,0 @@
1
- import {
2
- FARCASTER_SERVICE_NAME
3
- } from "./chunk-Y2URJ4EZ.js";
4
-
5
- // src/actions/sendCast.ts
6
- import {
7
- logger,
8
- createUniqueUuid
9
- } from "@elizaos/core";
10
- var sendCastAction = {
11
- name: "SEND_CAST",
12
- description: "Posts a cast (message) on Farcaster",
13
- examples: [
14
- [
15
- {
16
- name: "user",
17
- content: { text: "Can you post about the new ElizaOS features on Farcaster?" }
18
- },
19
- {
20
- name: "assistant",
21
- content: {
22
- text: "I'll post about the new ElizaOS features on Farcaster now.",
23
- actions: ["SEND_CAST"]
24
- }
25
- }
26
- ],
27
- [
28
- {
29
- name: "user",
30
- content: { text: "Share on Farcaster that we just launched version 2.0!" }
31
- },
32
- {
33
- name: "assistant",
34
- content: {
35
- text: "I'll share the version 2.0 launch announcement on Farcaster.",
36
- actions: ["SEND_CAST"]
37
- }
38
- }
39
- ]
40
- ],
41
- validate: async (runtime, message) => {
42
- var _a;
43
- const text = ((_a = message.content.text) == null ? void 0 : _a.toLowerCase()) || "";
44
- const keywords = ["post", "cast", "share", "announce", "farcaster", "tweet"];
45
- const hasKeyword = keywords.some((keyword) => text.includes(keyword));
46
- const service = runtime.getService(FARCASTER_SERVICE_NAME);
47
- const isServiceAvailable = !!(service == null ? void 0 : service.getCastService(runtime.agentId));
48
- return hasKeyword && isServiceAvailable;
49
- },
50
- handler: async (runtime, message, state) => {
51
- var _a;
52
- try {
53
- const service = runtime.getService(FARCASTER_SERVICE_NAME);
54
- const postService = service == null ? void 0 : service.getCastService(runtime.agentId);
55
- if (!postService) {
56
- logger.error("[SEND_CAST] PostService not available");
57
- return false;
58
- }
59
- let castContent = "";
60
- if (state == null ? void 0 : state.castContent) {
61
- castContent = state.castContent;
62
- } else {
63
- const prompt = `Based on this request: "${message.content.text}", generate a concise Farcaster cast (max 320 characters). Be engaging and use appropriate hashtags if relevant.`;
64
- const response = await runtime.useModel("text_large", { prompt });
65
- castContent = typeof response === "string" ? response : response.text || "";
66
- }
67
- if (castContent.length > 320) {
68
- castContent = castContent.substring(0, 317) + "...";
69
- }
70
- const cast = await postService.createCast({
71
- agentId: runtime.agentId,
72
- roomId: createUniqueUuid(runtime, "farcaster-timeline"),
73
- text: castContent
74
- });
75
- logger.info(`[SEND_CAST] Successfully posted cast: ${cast.id}`);
76
- await runtime.createMemory(
77
- {
78
- agentId: runtime.agentId,
79
- roomId: cast.roomId,
80
- // userId removed - not part of Memory type
81
- entityId: runtime.agentId,
82
- content: {
83
- text: castContent,
84
- source: "farcaster",
85
- metadata: {
86
- castHash: (_a = cast.metadata) == null ? void 0 : _a.castHash,
87
- action: "SEND_CAST"
88
- }
89
- },
90
- createdAt: cast.timestamp
91
- },
92
- "messages"
93
- );
94
- return true;
95
- } catch (error) {
96
- logger.error("[SEND_CAST] Error posting cast:", error);
97
- throw error;
98
- }
99
- }
100
- };
101
-
102
- export {
103
- sendCastAction
104
- };
105
- //# sourceMappingURL=chunk-OAXQ6Z2Q.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/actions/sendCast.ts"],"sourcesContent":["import {\n type Action,\n type IAgentRuntime,\n type Memory,\n type State,\n logger,\n createUniqueUuid,\n} from '@elizaos/core';\nimport { FARCASTER_SERVICE_NAME } from '../common/constants';\nimport type { FarcasterService } from '../service';\n\nexport const sendCastAction: Action = {\n name: 'SEND_CAST',\n description: 'Posts a cast (message) on Farcaster',\n examples: [\n [\n {\n name: 'user',\n content: { text: 'Can you post about the new ElizaOS features on Farcaster?' },\n },\n {\n name: 'assistant',\n content: {\n text: \"I'll post about the new ElizaOS features on Farcaster now.\",\n actions: ['SEND_CAST'],\n },\n },\n ],\n [\n {\n name: 'user',\n content: { text: 'Share on Farcaster that we just launched version 2.0!' },\n },\n {\n name: 'assistant',\n content: {\n text: \"I'll share the version 2.0 launch announcement on Farcaster.\",\n actions: ['SEND_CAST'],\n },\n },\n ],\n ],\n\n validate: async (runtime: IAgentRuntime, message: Memory): Promise<boolean> => {\n const text = message.content.text?.toLowerCase() || '';\n const keywords = ['post', 'cast', 'share', 'announce', 'farcaster', 'tweet'];\n\n // Check if the message contains relevant keywords\n const hasKeyword = keywords.some((keyword) => text.includes(keyword));\n\n // Check if Farcaster service is available\n const service = runtime.getService(FARCASTER_SERVICE_NAME) as FarcasterService;\n const isServiceAvailable = !!service?.getCastService(runtime.agentId);\n\n return hasKeyword && isServiceAvailable;\n },\n\n handler: async (runtime: IAgentRuntime, message: Memory, state?: State): Promise<boolean> => {\n try {\n const service = runtime.getService(FARCASTER_SERVICE_NAME) as FarcasterService;\n const postService = service?.getCastService(runtime.agentId);\n\n if (!postService) {\n logger.error('[SEND_CAST] PostService not available');\n return false;\n }\n\n // Extract the content to post from the message or generate it\n let castContent = '';\n\n if (state?.castContent) {\n // Use provided cast content from state\n castContent = state.castContent as string;\n } else {\n // Generate content based on the conversation context\n const prompt = `Based on this request: \"${message.content.text}\", generate a concise Farcaster cast (max 320 characters). Be engaging and use appropriate hashtags if relevant.`;\n\n const response = await runtime.useModel('text_large', { prompt });\n castContent = typeof response === 'string' ? response : response.text || '';\n }\n\n // Ensure content fits Farcaster's character limit\n if (castContent.length > 320) {\n castContent = castContent.substring(0, 317) + '...';\n }\n\n // Create the cast\n const cast = await postService.createCast({\n agentId: runtime.agentId,\n roomId: createUniqueUuid(runtime, 'farcaster-timeline'),\n text: castContent,\n });\n\n logger.info(`[SEND_CAST] Successfully posted cast: ${cast.id}`);\n\n // Store the cast in memory\n await runtime.createMemory(\n {\n agentId: runtime.agentId,\n roomId: cast.roomId,\n // userId removed - not part of Memory type\n entityId: runtime.agentId,\n content: {\n text: castContent,\n source: 'farcaster',\n metadata: {\n castHash: cast.metadata?.castHash,\n action: 'SEND_CAST',\n },\n },\n createdAt: cast.timestamp,\n },\n 'messages'\n );\n\n return true;\n } catch (error) {\n logger.error('[SEND_CAST] Error posting cast:', error);\n // Re-throw the error so it's visible in the agent's logs\n throw error;\n }\n },\n};\n"],"mappings":";;;;;AAAA;AAAA,EAKE;AAAA,EACA;AAAA,OACK;AAIA,IAAM,iBAAyB;AAAA,EACpC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACR;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,SAAS,EAAE,MAAM,4DAA4D;AAAA,MAC/E;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,SAAS,CAAC,WAAW;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,SAAS,EAAE,MAAM,wDAAwD;AAAA,MAC3E;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP,MAAM;AAAA,UACN,SAAS,CAAC,WAAW;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,UAAU,OAAO,SAAwB,YAAsC;AA3CjF;AA4CI,UAAM,SAAO,aAAQ,QAAQ,SAAhB,mBAAsB,kBAAiB;AACpD,UAAM,WAAW,CAAC,QAAQ,QAAQ,SAAS,YAAY,aAAa,OAAO;AAG3E,UAAM,aAAa,SAAS,KAAK,CAAC,YAAY,KAAK,SAAS,OAAO,CAAC;AAGpE,UAAM,UAAU,QAAQ,WAAW,sBAAsB;AACnD,UAAM,qBAAqB,CAAC,EAAC,mCAAS,eAAe,QAAQ;AAEnE,WAAO,cAAc;AAAA,EACvB;AAAA,EAEA,SAAS,OAAO,SAAwB,SAAiB,UAAoC;AAzD/F;AA0DI,QAAI;AACF,YAAM,UAAU,QAAQ,WAAW,sBAAsB;AACzD,YAAM,cAAc,mCAAS,eAAe,QAAQ;AAEpD,UAAI,CAAC,aAAa;AAChB,eAAO,MAAM,uCAAuC;AACpD,eAAO;AAAA,MACT;AAGA,UAAI,cAAc;AAElB,UAAI,+BAAO,aAAa;AAEtB,sBAAc,MAAM;AAAA,MACtB,OAAO;AAEL,cAAM,SAAS,2BAA2B,QAAQ,QAAQ,IAAI;AAE9D,cAAM,WAAW,MAAM,QAAQ,SAAS,cAAc,EAAE,OAAO,CAAC;AAChE,sBAAc,OAAO,aAAa,WAAW,WAAW,SAAS,QAAQ;AAAA,MAC3E;AAGA,UAAI,YAAY,SAAS,KAAK;AAC5B,sBAAc,YAAY,UAAU,GAAG,GAAG,IAAI;AAAA,MAChD;AAGA,YAAM,OAAO,MAAM,YAAY,WAAW;AAAA,QACxC,SAAS,QAAQ;AAAA,QACjB,QAAQ,iBAAiB,SAAS,oBAAoB;AAAA,QACtD,MAAM;AAAA,MACR,CAAC;AAED,aAAO,KAAK,yCAAyC,KAAK,EAAE,EAAE;AAG9D,YAAM,QAAQ;AAAA,QACZ;AAAA,UACE,SAAS,QAAQ;AAAA,UACjB,QAAQ,KAAK;AAAA;AAAA,UAEb,UAAU,QAAQ;AAAA,UAClB,SAAS;AAAA,YACP,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,UAAU;AAAA,cACR,WAAU,UAAK,aAAL,mBAAe;AAAA,cACzB,QAAQ;AAAA,YACV;AAAA,UACF;AAAA,UACA,WAAW,KAAK;AAAA,QAClB;AAAA,QACA;AAAA,MACF;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,aAAO,MAAM,mCAAmC,KAAK;AAErD,YAAM;AAAA,IACR;AAAA,EACF;AACF;","names":[]}
@@ -1,21 +0,0 @@
1
- // src/common/constants.ts
2
- var FARCASTER_SERVICE_NAME = "farcaster";
3
- var FARCASTER_SOURCE = "farcaster";
4
- var DEFAULT_MAX_CAST_LENGTH = 320;
5
- var DEFAULT_POLL_INTERVAL = 120;
6
- var DEFAULT_CAST_INTERVAL_MIN = 90;
7
- var DEFAULT_CAST_INTERVAL_MAX = 180;
8
- var DEFAULT_CAST_CACHE_TTL = 1e3 * 30 * 60;
9
- var DEFAULT_CAST_CACHE_SIZE = 9e3;
10
-
11
- export {
12
- FARCASTER_SERVICE_NAME,
13
- FARCASTER_SOURCE,
14
- DEFAULT_MAX_CAST_LENGTH,
15
- DEFAULT_POLL_INTERVAL,
16
- DEFAULT_CAST_INTERVAL_MIN,
17
- DEFAULT_CAST_INTERVAL_MAX,
18
- DEFAULT_CAST_CACHE_TTL,
19
- DEFAULT_CAST_CACHE_SIZE
20
- };
21
- //# sourceMappingURL=chunk-Y2URJ4EZ.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/common/constants.ts"],"sourcesContent":["export const FARCASTER_SERVICE_NAME = 'farcaster';\nexport const FARCASTER_SOURCE = 'farcaster';\nexport const DEFAULT_MAX_CAST_LENGTH = 320;\nexport const DEFAULT_POLL_INTERVAL = 120; // 2 minutes\nexport const DEFAULT_CAST_INTERVAL_MIN = 90; // 1.5 hours\nexport const DEFAULT_CAST_INTERVAL_MAX = 180; // 3 hours\nexport const DEFAULT_CAST_CACHE_TTL = 1000 * 30 * 60; // 30 minutes\nexport const DEFAULT_CAST_CACHE_SIZE = 9000;\n"],"mappings":";AAAO,IAAM,yBAAyB;AAC/B,IAAM,mBAAmB;AACzB,IAAM,0BAA0B;AAChC,IAAM,wBAAwB;AAC9B,IAAM,4BAA4B;AAClC,IAAM,4BAA4B;AAClC,IAAM,yBAAyB,MAAO,KAAK;AAC3C,IAAM,0BAA0B;","names":[]}
@@ -1,8 +0,0 @@
1
- import {
2
- farcasterProfileProvider
3
- } from "./chunk-IOTLJXKN.js";
4
- import "./chunk-Y2URJ4EZ.js";
5
- export {
6
- farcasterProfileProvider
7
- };
8
- //# sourceMappingURL=profileProvider-TNRU42OO.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,8 +0,0 @@
1
- import {
2
- sendCastAction
3
- } from "./chunk-OAXQ6Z2Q.js";
4
- import "./chunk-Y2URJ4EZ.js";
5
- export {
6
- sendCastAction
7
- };
8
- //# sourceMappingURL=sendCast-OW6DBKQB.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,8 +0,0 @@
1
- import {
2
- farcasterTimelineProvider
3
- } from "./chunk-FNDASAYG.js";
4
- import "./chunk-Y2URJ4EZ.js";
5
- export {
6
- farcasterTimelineProvider
7
- };
8
- //# sourceMappingURL=timelineProvider-GPRPFEVJ.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}