create-message-kit 1.1.7-beta.31 → 1.1.7-beta.33

Sign up to get free protection for your applications and to get access to all the features.
package/README.md CHANGED
@@ -9,13 +9,13 @@ bun create message-kit
9
9
  ```
10
10
 
11
11
  ```bash
12
- npx create-message-kit@latest
12
+ npx create-message-kit
13
13
  ```
14
14
 
15
15
  ```bash
16
- yarn create message-kit@latest
16
+ yarn create message-kit
17
17
  ```
18
18
 
19
19
  ```bash [npm]
20
- npm init message-kit@latest
20
+ npm init message-kit
21
21
  ```
package/index.js CHANGED
@@ -22,6 +22,8 @@ program
22
22
  // Add Yarn 4 check at the start of the action
23
23
  const pkgManager = await detectPackageManager();
24
24
 
25
+ log.info(pc.cyan(`pkgManager detected: ${pkgManager}`));
26
+
25
27
  log.info(pc.cyan(`Welcome to MessageKit CLI v${version}!`));
26
28
  const coolLogo = `
27
29
  ███╗ ███╗███████╗███████╗███████╗ █████╗ ██████╗ ███████╗██╗ ██╗██╗████████╗
@@ -203,16 +205,17 @@ yarn-error.log*
203
205
  async function detectPackageManager() {
204
206
  try {
205
207
  const pkgManager = await detect();
206
- // Still maintain the Yarn 4 check if needed
207
- if (
208
- pkgManager === "yarn" &&
209
- process.env.npm_config_user_agent?.includes("yarn/4")
210
- ) {
211
- //yarn/4.5.1 npm/? node/v20.15.0 darwin arm64
212
- const version = process.env.npm_config_user_agent?.split("/")[1];
213
- return `yarn@${version}`;
208
+ const userAgent = process.env.npm_config_user_agent;
209
+ let version = "";
210
+
211
+ if (userAgent && pkgManager === "yarn") {
212
+ const parts = userAgent.split(" ")[0]?.split("/");
213
+ if (parts && parts.length > 1) {
214
+ version = `@${parts[1]}`;
215
+ }
214
216
  }
215
- return pkgManager;
217
+
218
+ return pkgManager + version;
216
219
  } catch (error) {
217
220
  // Fallback to npm if detection fails
218
221
  return "npm";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-message-kit",
3
- "version": "1.1.7-beta.31",
3
+ "version": "1.1.7-beta.33",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -64,5 +64,6 @@ export async function agent_prompt(userInfo: UserInfo) {
64
64
  userInfo,
65
65
  "@ens",
66
66
  );
67
+ // console.log(systemPrompt);
67
68
  return systemPrompt;
68
69
  }
@@ -1 +1 @@
1
- KEY= # the private key of the bot wallet
1
+ KEY= # the private key of the agent wallet
@@ -1,20 +1,5 @@
1
1
  import { run, HandlerContext } from "@xmtp/message-kit";
2
- run(async (context: HandlerContext) => {
3
- // To reply, just call `reply` on the HandlerContext
4
- await context.send(`gm`);
5
2
 
6
- // Set the awaited handler to process the user's response
7
- context.setAwaitedHandler(async (responseContext: HandlerContext) => {
8
- console.log("awaited handler");
9
- const userResponse = responseContext?.message?.content?.text?.toLowerCase();
10
- if (userResponse === "yes") {
11
- await responseContext.send("Action confirmed.");
12
- } else if (userResponse === "no") {
13
- await responseContext.send("Action canceled.");
14
- } else {
15
- await responseContext.send("Please respond with 'yes' or 'no'.");
16
- // Re-set the handler to await the correct response again
17
- context.setAwaitedHandler(responseContext?.awaitedHandler!);
18
- }
19
- });
3
+ run(async (context: HandlerContext) => {
4
+ context.send("gm");
20
5
  });
@@ -1,2 +1,2 @@
1
- KEY= # the private key of the bot wallet
1
+ KEY= # the private key of the agent wallet
2
2
  OPEN_AI_API_KEY= # openai api key
@@ -0,0 +1,28 @@
1
+ import { getUserInfo, HandlerContext } from "@xmtp/message-kit";
2
+
3
+ export async function handler(context: HandlerContext) {
4
+ const {
5
+ message: {
6
+ content: { skill, params },
7
+ },
8
+ } = context;
9
+ const baseUrl = "https://txpay.vercel.app";
10
+
11
+ if (skill === "pay") {
12
+ const { amount: amountSend, token: tokenSend, username } = params; // [!code hl] // [!code focus]
13
+ let senderInfo = await getUserInfo(username);
14
+ if (!amountSend || !tokenSend || !senderInfo) {
15
+ context.reply(
16
+ "Missing required parameters. Please provide amount, token, and username.",
17
+ );
18
+ return {
19
+ code: 400,
20
+ message:
21
+ "Missing required parameters. Please provide amount, token, and username.",
22
+ };
23
+ }
24
+
25
+ let sendUrl = `${baseUrl}/?transaction_type=send&amount=${amountSend}&token=${tokenSend}&receiver=${senderInfo.address}`;
26
+ await context.send(`${sendUrl}`);
27
+ }
28
+ }
@@ -5,14 +5,10 @@ import {
5
5
  } from "@xmtp/message-kit";
6
6
  import { getUserInfo } from "@xmtp/message-kit";
7
7
 
8
- export async function handler(context: HandlerContext): Promise<SkillResponse> {
8
+ export async function handler(context: HandlerContext) {
9
9
  const {
10
- members,
11
10
  message: {
12
11
  content: {
13
- reference,
14
- reply,
15
- text,
16
12
  skill,
17
13
  params: { amount, username },
18
14
  },
@@ -28,10 +24,6 @@ export async function handler(context: HandlerContext): Promise<SkillResponse> {
28
24
  }
29
25
  if (!sender || receivers.length === 0 || amount === 0) {
30
26
  context.reply("Sender or receiver or amount not found.");
31
- return {
32
- code: 400,
33
- message: "Sender or receiver or amount not found.",
34
- };
35
27
  }
36
28
  const receiverAddresses = receivers.map((receiver) => receiver.address);
37
29
 
@@ -45,8 +37,4 @@ export async function handler(context: HandlerContext): Promise<SkillResponse> {
45
37
  `You sent ${amount * receiverAddresses.length} tokens in total.`,
46
38
  [sender.address],
47
39
  );
48
- return {
49
- code: 200,
50
- message: "Success",
51
- };
52
40
  }
@@ -9,7 +9,6 @@ run(async (context: HandlerContext) => {
9
9
  content: { text, params },
10
10
  sender,
11
11
  },
12
- group,
13
12
  } = context;
14
13
 
15
14
  try {
@@ -13,6 +13,15 @@ export async function agent_prompt(userInfo: UserInfo) {
13
13
  PROMPT_USER_CONTENT(userInfo) +
14
14
  PROMPT_SKILLS_AND_EXAMPLES(skills, "@bot");
15
15
 
16
+ let fineTunedPrompt = `
17
+ ## Example response
18
+ 1. If user wants to play a game, use the skill 'game' and specify the game type.
19
+ Hey! Sure let's do that.\n/game wordle
20
+ 1. If user wants to pay, use the skill 'pay' and if not specified default to 1 USDC.
21
+ Hey! Sure let's do that.\n/pay 1 USDC vitalik.eth
22
+ `;
23
+
24
+ systemPrompt += fineTunedPrompt;
16
25
  // Replace the variables in the system prompt
17
26
  systemPrompt = PROMPT_REPLACE_VARIABLES(
18
27
  systemPrompt,
@@ -1,5 +1,5 @@
1
1
  import { handler as tipping } from "./handler/tipping.js";
2
- import { handler as transaction } from "./handler/transaction.js";
2
+ import { handler as payment } from "./handler/payment.js";
3
3
  import { handler as games } from "./handler/game.js";
4
4
  import { handler as help } from "./handler/helpers.js";
5
5
  import type { SkillGroup } from "@xmtp/message-kit";
@@ -8,7 +8,7 @@ export const skills: SkillGroup[] = [
8
8
  {
9
9
  name: "Group bot",
10
10
  tag: "@bot",
11
- description: "Group bot for tipping and transactions.",
11
+ description: "Group agent for tipping and transactions.",
12
12
  skills: [
13
13
  {
14
14
  skill: "/tip [usernames] [amount] [token]",
@@ -29,12 +29,12 @@ export const skills: SkillGroup[] = [
29
29
  },
30
30
  },
31
31
  {
32
- skill: "/send [amount] [token] [username]",
33
- triggers: ["/send"],
34
- examples: ["/send 10 usdc @vitalik"],
32
+ skill: "/pay [amount] [token] [username]",
33
+ triggers: ["/pay"],
34
+ examples: ["/pay 10 vitalik.eth"],
35
35
  description:
36
36
  "Send a specified amount of a cryptocurrency to a destination address.",
37
- handler: transaction,
37
+ handler: payment,
38
38
  params: {
39
39
  amount: {
40
40
  default: 10,
@@ -51,37 +51,6 @@ export const skills: SkillGroup[] = [
51
51
  },
52
52
  },
53
53
  },
54
- {
55
- skill: "/swap [amount] [token_from] [token_to]",
56
- triggers: ["/swap"],
57
- examples: ["/swap 10 usdc eth"],
58
- description: "Exchange one type of cryptocurrency for another.",
59
- handler: transaction,
60
- params: {
61
- amount: {
62
- default: 10,
63
- type: "number",
64
- },
65
- token_from: {
66
- default: "usdc",
67
- type: "string",
68
- values: ["eth", "dai", "usdc", "degen"], // Accepted tokens
69
- },
70
- token_to: {
71
- default: "eth",
72
- type: "string",
73
- values: ["eth", "dai", "usdc", "degen"], // Accepted tokenss
74
- },
75
- },
76
- },
77
- {
78
- skill: "/show",
79
- triggers: ["/show"],
80
- examples: ["/show"],
81
- handler: transaction,
82
- description: "Show the whole frame.",
83
- params: {},
84
- },
85
54
  {
86
55
  skill: "/game [game]",
87
56
  triggers: ["/game", "🔎", "🔍"],
@@ -1,31 +0,0 @@
1
- import { run, HandlerContext } from "@xmtp/message-kit";
2
- import { textGeneration, processMultilineResponse } from "@xmtp/message-kit";
3
- import { agent_prompt } from "../prompt.js";
4
- import { getUserInfo } from "@xmtp/message-kit";
5
-
6
- run(async (context: HandlerContext) => {
7
- const {
8
- message: {
9
- content: { text, params },
10
- sender,
11
- },
12
- } = context;
13
-
14
- try {
15
- let userPrompt = params?.prompt ?? text;
16
- const userInfo = await getUserInfo(sender.address);
17
- if (!userInfo) {
18
- console.log("User info not found");
19
- return;
20
- }
21
- const { reply } = await textGeneration(
22
- sender.address,
23
- userPrompt,
24
- await agent_prompt(userInfo),
25
- );
26
- await processMultilineResponse(sender.address, reply, context);
27
- } catch (error) {
28
- console.error("Error during OpenAI call:", error);
29
- await context.send("An error occurred while processing your request.");
30
- }
31
- });
@@ -1,69 +0,0 @@
1
- import { getUserInfo, HandlerContext, SkillResponse } from "@xmtp/message-kit";
2
-
3
- // Main handler function for processing
4
- export async function handler(context: HandlerContext): Promise<SkillResponse> {
5
- const {
6
- message: {
7
- content: { skill, params },
8
- },
9
- } = context;
10
- const baseUrl = "https://base-tx-frame.vercel.app/transaction";
11
-
12
- switch (skill) {
13
- case "send":
14
- // Destructure and validate parameters for the send
15
- const { amount: amountSend, token: tokenSend, username } = params; // [!code hl] // [!code focus]
16
- let senderInfo = await getUserInfo(username);
17
- if (!amountSend || !tokenSend || !senderInfo) {
18
- context.reply(
19
- "Missing required parameters. Please provide amount, token, and username.",
20
- );
21
- return {
22
- code: 400,
23
- message:
24
- "Missing required parameters. Please provide amount, token, and username.",
25
- };
26
- }
27
-
28
- let sendUrl = `${baseUrl}/?transaction_type=send&amount=${amountSend}&token=${tokenSend}&receiver=${senderInfo.address}`;
29
- context.send(`${sendUrl}`);
30
- return {
31
- code: 200,
32
- message: `${sendUrl}`,
33
- };
34
- case "swap":
35
- // Destructure and validate parameters for the swap
36
- const { amount, token_from, token_to } = params; // [!code hl] // [!code focus]
37
-
38
- if (!amount || !token_from || !token_to) {
39
- context.reply(
40
- "Missing required parameters. Please provide amount, token_from, and token_to.",
41
- );
42
- return {
43
- code: 400,
44
- message:
45
- "Missing required parameters. Please provide amount, token_from, and token_to.",
46
- };
47
- }
48
-
49
- let swapUrl = `${baseUrl}/?transaction_type=swap&token_from=${token_from}&token_to=${token_to}&amount=${amount}`;
50
- context.send(`${swapUrl}`);
51
- return {
52
- code: 200,
53
- message: `${swapUrl}`,
54
- };
55
- case "show": // [!code hl] // [!code focus]
56
- // Show the base URL without the transaction path
57
- context.reply(`${baseUrl.replace("/transaction", "")}`);
58
- return {
59
- code: 200,
60
- message: `${baseUrl.replace("/transaction", "")}`,
61
- };
62
- default:
63
- context.reply("Unknown skill. Use help to see all available skills.");
64
- return {
65
- code: 400,
66
- message: "Unknown skill. Use help to see all available skills.",
67
- };
68
- }
69
- }