@guanxing1/plugin-elizaos 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/services/guanxingService.ts","../src/actions/bazi.ts","../src/actions/fortune.ts","../src/actions/qiuqian.ts","../src/actions/tarot.ts","../src/actions/dream.ts","../src/actions/almanac.ts","../src/actions/fengshui.ts","../src/actions/nameScore.ts","../src/actions/compatibility.ts","../src/actions/zodiac.ts","../src/index.ts"],"sourcesContent":["import { Service, type IAgentRuntime } from '@elizaos/core';\n\nconst BASE_URL = 'https://heartai.zeabur.app';\n\nexport interface GuanXingResponse<T = Record<string, unknown>> {\n success: boolean;\n data?: T;\n error?: string;\n meta?: {\n skill: string;\n version: string;\n tokensUsed: number;\n latencyMs: number;\n timestamp: string;\n };\n}\n\nexport class GuanXingService extends Service {\n static serviceType = 'guanxing' as const;\n\n capabilityDescription = 'Chinese metaphysics API client (观星 GuanXing)';\n\n async stop(): Promise<void> {\n // No persistent connections to close\n }\n\n static async start(_runtime: IAgentRuntime): Promise<GuanXingService> {\n return new GuanXingService();\n }\n\n static async callAPI<T = Record<string, unknown>>(\n endpoint: string,\n body: Record<string, unknown>,\n apiKey: string,\n ): Promise<GuanXingResponse<T>> {\n const res = await fetch(`${BASE_URL}/api/v1/${endpoint}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${apiKey}`,\n },\n body: JSON.stringify(body),\n });\n\n const json = (await res.json()) as GuanXingResponse<T>;\n\n if (!res.ok || !json.success) {\n throw new Error(json.error ?? `GuanXing API error: ${res.status}`);\n }\n\n return json;\n }\n}\n","import type { Action, IAgentRuntime, Memory, State, HandlerCallback } from '@elizaos/core';\nimport { GuanXingService } from '../services/guanxingService';\n\n/**\n * Extract a date string (YYYY-MM-DD) from text.\n * Matches patterns like: 1990-06-15, 1990/06/15, June 15 1990, 15 June 1990\n */\nfunction extractDate(text: string): string | null {\n // ISO-style: 1990-06-15 or 1990/06/15\n const isoMatch = text.match(/(\\d{4})[-/](\\d{1,2})[-/](\\d{1,2})/);\n if (isoMatch) {\n const [, y, m, d] = isoMatch;\n return `${y}-${m.padStart(2, '0')}-${d.padStart(2, '0')}`;\n }\n\n // English month names\n const months: Record<string, string> = {\n january: '01', february: '02', march: '03', april: '04',\n may: '05', june: '06', july: '07', august: '08',\n september: '09', october: '10', november: '11', december: '12',\n jan: '01', feb: '02', mar: '03', apr: '04',\n jun: '06', jul: '07', aug: '08', sep: '09', oct: '10', nov: '11', dec: '12',\n };\n const monthPattern = Object.keys(months).join('|');\n\n // \"June 15, 1990\" or \"June 15 1990\"\n const mdyMatch = text.match(new RegExp(`(${monthPattern})\\\\s+(\\\\d{1,2}),?\\\\s+(\\\\d{4})`, 'i'));\n if (mdyMatch) {\n const m = months[mdyMatch[1].toLowerCase()];\n return `${mdyMatch[3]}-${m}-${mdyMatch[2].padStart(2, '0')}`;\n }\n\n // \"15 June 1990\"\n const dmyMatch = text.match(new RegExp(`(\\\\d{1,2})\\\\s+(${monthPattern}),?\\\\s+(\\\\d{4})`, 'i'));\n if (dmyMatch) {\n const m = months[dmyMatch[2].toLowerCase()];\n return `${dmyMatch[3]}-${m}-${dmyMatch[1].padStart(2, '0')}`;\n }\n\n return null;\n}\n\n/** Extract birth hour (0-23) from text. */\nfunction extractHour(text: string): number | undefined {\n // \"at 2pm\", \"at 14:00\", \"2 pm\", \"14时\"\n const pmMatch = text.match(/(\\d{1,2})\\s*pm/i);\n if (pmMatch) {\n const h = parseInt(pmMatch[1], 10);\n return h === 12 ? 12 : h + 12;\n }\n const amMatch = text.match(/(\\d{1,2})\\s*am/i);\n if (amMatch) {\n const h = parseInt(amMatch[1], 10);\n return h === 12 ? 0 : h;\n }\n const timeMatch = text.match(/(\\d{1,2}):(\\d{2})/);\n if (timeMatch) return parseInt(timeMatch[1], 10);\n\n const cnMatch = text.match(/(\\d{1,2})\\s*[时点]/);\n if (cnMatch) return parseInt(cnMatch[1], 10);\n\n return undefined;\n}\n\ninterface BaZiData {\n bazi: string;\n wuxing: Record<string, number>;\n dayMaster: string;\n analysis: string;\n}\n\nexport const baziAction: Action = {\n name: 'BAZI_ANALYSIS',\n description: 'Analyze Chinese Four Pillars of Destiny (BaZi/八字) based on birth date and time. Returns heavenly stems, earthly branches, five elements balance, and life analysis.',\n\n similes: [\n 'BAZI', 'FOUR_PILLARS', 'EIGHT_CHARACTERS', 'CHINESE_ASTROLOGY',\n 'BIRTH_CHART', 'BAZI_READING', 'FOUR_PILLARS_OF_DESTINY',\n ],\n\n validate: async (runtime: IAgentRuntime, _message: Memory, _state?: State) => {\n return !!runtime.getSetting('GUANXING_API_KEY');\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: Record<string, unknown>,\n callback?: HandlerCallback,\n ) => {\n const apiKey = String(runtime.getSetting('GUANXING_API_KEY'));\n const text = typeof message.content === 'string' ? message.content : message.content.text ?? '';\n\n const birthDate = extractDate(text);\n if (!birthDate) {\n const reply = \"I need a birth date to perform BaZi analysis. Please provide a date like: **1990-06-15** or **June 15, 1990**.\";\n callback?.({ text: reply });\n return;\n }\n\n const birthHour = extractHour(text);\n\n try {\n const res = await GuanXingService.callAPI<BaZiData>('bazi', {\n birthDate,\n ...(birthHour !== undefined && { birthHour }),\n }, apiKey);\n\n const d = res.data!;\n const wuxing = Object.entries(d.wuxing).map(([k, v]) => `${k}: ${v}`).join(' | ');\n\n const reply = [\n `**八字 BaZi Analysis** for ${birthDate}${birthHour !== undefined ? ` at ${birthHour}:00` : ''}`,\n '',\n `**Four Pillars:** ${d.bazi}`,\n `**Day Master (日主):** ${d.dayMaster}`,\n `**Five Elements (五行):** ${wuxing}`,\n '',\n d.analysis,\n ].join('\\n');\n\n callback?.({ text: reply });\n return;\n } catch (err) {\n const reply = `Sorry, I couldn't complete the BaZi analysis: ${(err as Error).message}`;\n callback?.({ text: reply });\n return;\n }\n },\n\n examples: [\n [\n { name: 'user', content: { text: \"Can you do a BaZi reading for someone born on 1990-06-15 at 2pm?\" } },\n { name: 'agent', content: { text: \"**八字 BaZi Analysis** for 1990-06-15 at 14:00\\n\\n**Four Pillars:** 庚午 壬午 丁巳 丁未\\n**Day Master (日主):** 丁火\\n**Five Elements (五行):** 金: 1 | 木: 0 | 水: 1 | 火: 4 | 土: 2\\n\\nYour chart shows strong Fire energy...\" } },\n ],\n [\n { name: 'user', content: { text: \"What are my eight characters? I was born March 3, 1985\" } },\n { name: 'agent', content: { text: \"**八字 BaZi Analysis** for 1985-03-03\\n\\n**Four Pillars:** 乙丑 戊寅 辛亥 ...\" } },\n ],\n ],\n};\n","import type { Action, IAgentRuntime, Memory, State, HandlerCallback } from '@elizaos/core';\nimport { GuanXingService } from '../services/guanxingService';\n\nconst ZODIAC_MAP: Record<string, string> = {\n // English -> Chinese\n aries: '白羊座', taurus: '金牛座', gemini: '双子座', cancer: '巨蟹座',\n leo: '狮子座', virgo: '处女座', libra: '天秤座', scorpio: '天蝎座',\n sagittarius: '射手座', capricorn: '摩羯座', aquarius: '水瓶座', pisces: '双鱼座',\n // Chinese names pass through\n 白羊座: '白羊座', 金牛座: '金牛座', 双子座: '双子座', 巨蟹座: '巨蟹座',\n 狮子座: '狮子座', 处女座: '处女座', 天秤座: '天秤座', 天蝎座: '天蝎座',\n 射手座: '射手座', 摩羯座: '摩羯座', 水瓶座: '水瓶座', 双鱼座: '双鱼座',\n};\n\nfunction extractZodiac(text: string): string | null {\n const lower = text.toLowerCase();\n for (const [key, val] of Object.entries(ZODIAC_MAP)) {\n if (lower.includes(key.toLowerCase())) return val;\n }\n return null;\n}\n\nfunction stars(n: number): string {\n return '★'.repeat(n) + '☆'.repeat(5 - n);\n}\n\ninterface FortuneData {\n overall: number;\n career: number;\n love: number;\n wealth: number;\n health: number;\n advice: string;\n luckyColor: string;\n luckyNumber: number;\n keywords: string[];\n}\n\nexport const fortuneAction: Action = {\n name: 'DAILY_FORTUNE',\n description: 'Get today\\'s fortune and luck forecast by zodiac sign (每日运势). Covers career, love, wealth, and health with lucky color/number.',\n\n similes: [\n 'DAILY_LUCK', 'HOROSCOPE', 'TODAY_FORTUNE', 'LUCK_FORECAST',\n 'FORTUNE_TODAY', 'DAILY_HOROSCOPE',\n ],\n\n validate: async (runtime: IAgentRuntime) => {\n return !!runtime.getSetting('GUANXING_API_KEY');\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: Record<string, unknown>,\n callback?: HandlerCallback,\n ) => {\n const apiKey = String(runtime.getSetting('GUANXING_API_KEY'));\n const text = typeof message.content === 'string' ? message.content : message.content.text ?? '';\n\n const zodiac = extractZodiac(text);\n if (!zodiac) {\n const reply = \"Which zodiac sign should I check? Please mention a sign like **Aries**, **Leo**, or **天秤座**.\";\n callback?.({ text: reply });\n return;\n }\n\n try {\n const res = await GuanXingService.callAPI<FortuneData>('fortune', { zodiac }, apiKey);\n const d = res.data!;\n\n const reply = [\n `**${zodiac} — Today's Fortune 每日运势**`,\n '',\n `Overall: ${stars(d.overall)}`,\n `Career: ${stars(d.career)}`,\n `Love: ${stars(d.love)}`,\n `Wealth: ${stars(d.wealth)}`,\n `Health: ${stars(d.health)}`,\n '',\n `🎨 Lucky Color: ${d.luckyColor}`,\n `🔢 Lucky Number: ${d.luckyNumber}`,\n `🏷️ Keywords: ${d.keywords.join(', ')}`,\n '',\n `💡 ${d.advice}`,\n ].join('\\n');\n\n callback?.({ text: reply });\n return;\n } catch (err) {\n const reply = `Sorry, I couldn't fetch the fortune: ${(err as Error).message}`;\n callback?.({ text: reply });\n return;\n }\n },\n\n examples: [\n [\n { name: 'user', content: { text: \"What's my daily fortune? I'm a Leo.\" } },\n { name: 'agent', content: { text: \"**狮子座 — Today's Fortune 每日运势**\\n\\nOverall: ★★★★☆\\nCareer: ★★★★★\\n...\" } },\n ],\n ],\n};\n","import type { Action, IAgentRuntime, Memory, State, HandlerCallback } from '@elizaos/core';\nimport { GuanXingService } from '../services/guanxingService';\n\nfunction extractType(text: string): string {\n const lower = text.toLowerCase();\n if (lower.includes('guandi') || lower.includes('关帝') || lower.includes('关公')) return 'guandi';\n return 'guanyin';\n}\n\ninterface QiuqianData {\n qianNumber: number;\n qianTitle: string;\n qianType: string;\n poem: string;\n interpretation: string;\n}\n\nexport const qiuqianAction: Action = {\n name: 'QIUQIAN',\n description: 'Draw a divine fortune stick (求签) from Guanyin or Guandi temple. Ask a question and receive a numbered lot with poem and interpretation.',\n\n similes: [\n 'FORTUNE_STICK', 'DIVINE_LOT', 'TEMPLE_FORTUNE', 'DRAW_LOT',\n 'KAUCIM', 'CHI_CHI_STICKS', 'ORACLE_STICKS',\n ],\n\n validate: async (runtime: IAgentRuntime) => {\n return !!runtime.getSetting('GUANXING_API_KEY');\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: Record<string, unknown>,\n callback?: HandlerCallback,\n ) => {\n const apiKey = String(runtime.getSetting('GUANXING_API_KEY'));\n const text = typeof message.content === 'string' ? message.content : message.content.text ?? '';\n\n // The user's message IS the question; strip leading command words\n const question = text\n .replace(/^(draw|pull|get)\\s+(a\\s+)?(fortune\\s+stick|lot|qiuqian|签)/i, '')\n .replace(/^(求签|抽签|问签)\\s*/i, '')\n .trim() || 'General guidance for my path ahead';\n\n const type = extractType(text);\n\n try {\n const res = await GuanXingService.callAPI<QiuqianData>('qiuqian', { question, type }, apiKey);\n const d = res.data!;\n\n const reply = [\n `**🏮 Fortune Stick #${d.qianNumber} — ${d.qianTitle}**`,\n `Grade: **${d.qianType}**`,\n '',\n `> ${d.poem.replace(/\\n/g, '\\n> ')}`,\n '',\n `**Interpretation:** ${d.interpretation}`,\n ].join('\\n');\n\n callback?.({ text: reply });\n return;\n } catch (err) {\n const reply = `Sorry, I couldn't draw a fortune stick: ${(err as Error).message}`;\n callback?.({ text: reply });\n return;\n }\n },\n\n examples: [\n [\n { name: 'user', content: { text: \"Draw a fortune stick — should I change jobs this year?\" } },\n { name: 'agent', content: { text: \"**🏮 Fortune Stick #42 — 旧燕衔泥**\\nGrade: **中上**\\n\\n> 旧燕重来返故巢...\\n\\n**Interpretation:** This lot suggests returning to familiar ground...\" } },\n ],\n ],\n};\n","import type { Action, IAgentRuntime, Memory, State, HandlerCallback } from '@elizaos/core';\nimport { GuanXingService } from '../services/guanxingService';\n\nfunction extractSpread(text: string): string {\n const lower = text.toLowerCase();\n if (lower.includes('celtic') || lower.includes('凯尔特')) return 'celtic_cross';\n if (lower.includes('three') || lower.includes('3') || lower.includes('三张') || lower.includes('past present future')) return 'three';\n return 'single';\n}\n\ninterface TarotCard {\n name: string;\n reversed: boolean;\n meaning: string;\n}\n\ninterface TarotData {\n cards: TarotCard[];\n spread: string;\n interpretation: string;\n advice: string;\n}\n\nexport const tarotAction: Action = {\n name: 'TAROT_READING',\n description: 'Perform a tarot card reading (塔罗占卜). Supports single card, three-card (past/present/future), and Celtic Cross spreads.',\n\n similes: [\n 'TAROT', 'TAROT_CARD', 'CARD_READING', 'DRAW_TAROT',\n 'TAROT_SPREAD', 'PULL_A_CARD',\n ],\n\n validate: async (runtime: IAgentRuntime) => {\n return !!runtime.getSetting('GUANXING_API_KEY');\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: Record<string, unknown>,\n callback?: HandlerCallback,\n ) => {\n const apiKey = String(runtime.getSetting('GUANXING_API_KEY'));\n const text = typeof message.content === 'string' ? message.content : message.content.text ?? '';\n\n const question = text\n .replace(/^(do\\s+a\\s+)?tarot\\s+(reading|spread|card)/i, '')\n .replace(/^(塔罗|占卜)\\s*/i, '')\n .trim() || 'General guidance';\n\n const spread = extractSpread(text);\n\n try {\n const res = await GuanXingService.callAPI<TarotData>('tarot', { question, spread }, apiKey);\n const d = res.data!;\n\n const cardLines = d.cards.map((c, i) => {\n const pos = d.cards.length > 1 ? `**Card ${i + 1}:** ` : '';\n const rev = c.reversed ? ' (Reversed)' : '';\n return `${pos}${c.name}${rev} — ${c.meaning}`;\n });\n\n const reply = [\n `**🃏 Tarot Reading — ${d.spread}**`,\n '',\n ...cardLines,\n '',\n `**Reading:** ${d.interpretation}`,\n '',\n `💡 ${d.advice}`,\n ].join('\\n');\n\n callback?.({ text: reply });\n return;\n } catch (err) {\n const reply = `Sorry, I couldn't complete the tarot reading: ${(err as Error).message}`;\n callback?.({ text: reply });\n return;\n }\n },\n\n examples: [\n [\n { name: 'user', content: { text: \"Do a three-card tarot reading about my career\" } },\n { name: 'agent', content: { text: \"**🃏 Tarot Reading — Past / Present / Future**\\n\\n**Card 1:** The Tower (Reversed) — Past upheaval is settling...\\n**Card 2:** The Star — Current hope and inspiration...\\n**Card 3:** The World — Completion and fulfillment ahead...\" } },\n ],\n ],\n};\n","import type { Action, IAgentRuntime, Memory, State, HandlerCallback } from '@elizaos/core';\nimport { GuanXingService } from '../services/guanxingService';\n\nfunction extractMood(text: string): string | undefined {\n const moods = ['scared', 'happy', 'sad', 'confused', 'anxious', 'peaceful', 'excited',\n '害怕', '开心', '难过', '困惑', '焦虑', '平静'];\n const lower = text.toLowerCase();\n return moods.find(m => lower.includes(m));\n}\n\ninterface DreamData {\n symbols: string[];\n interpretation: string;\n psychAnalysis: string;\n advice: string;\n}\n\nexport const dreamAction: Action = {\n name: 'DREAM_INTERPRET',\n description: 'Interpret a dream using Chinese dream analysis (周公解梦) combined with modern psychology. Describe your dream and receive symbol analysis, interpretation, and advice.',\n\n similes: [\n 'DREAM_ANALYSIS', 'DREAM_MEANING', 'INTERPRET_DREAM',\n 'DREAM_DICTIONARY', 'DREAM_READING',\n ],\n\n validate: async (runtime: IAgentRuntime) => {\n return !!runtime.getSetting('GUANXING_API_KEY');\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: Record<string, unknown>,\n callback?: HandlerCallback,\n ) => {\n const apiKey = String(runtime.getSetting('GUANXING_API_KEY'));\n const text = typeof message.content === 'string' ? message.content : message.content.text ?? '';\n\n const dream = text\n .replace(/^(interpret|analyze|what does)\\s+(my\\s+)?dream\\s*(mean|about)?:?\\s*/i, '')\n .replace(/^(解梦|梦见)\\s*/i, '')\n .trim();\n\n if (dream.length < 5) {\n const reply = \"Please describe your dream in more detail so I can interpret it.\";\n callback?.({ text: reply });\n return;\n }\n\n const mood = extractMood(text);\n\n try {\n const res = await GuanXingService.callAPI<DreamData>('dream', {\n dream,\n ...(mood && { mood }),\n }, apiKey);\n\n const d = res.data!;\n\n const reply = [\n `**🌙 Dream Interpretation 周公解梦**`,\n '',\n `**Symbols:** ${d.symbols.join(', ')}`,\n '',\n `**Interpretation:** ${d.interpretation}`,\n '',\n `**Psychological Insight:** ${d.psychAnalysis}`,\n '',\n `💡 ${d.advice}`,\n ].join('\\n');\n\n callback?.({ text: reply });\n return;\n } catch (err) {\n const reply = `Sorry, I couldn't interpret the dream: ${(err as Error).message}`;\n callback?.({ text: reply });\n return;\n }\n },\n\n examples: [\n [\n { name: 'user', content: { text: \"Interpret my dream: I was flying over a vast ocean and saw a golden dragon\" } },\n { name: 'agent', content: { text: \"**🌙 Dream Interpretation 周公解梦**\\n\\n**Symbols:** flying, ocean, golden dragon\\n\\n**Interpretation:** Flying over water represents emotional freedom...\" } },\n ],\n ],\n};\n","import type { Action, IAgentRuntime, Memory, State, HandlerCallback } from '@elizaos/core';\nimport { GuanXingService } from '../services/guanxingService';\n\nfunction extractDate(text: string): string | undefined {\n const match = text.match(/(\\d{4})[-/](\\d{1,2})[-/](\\d{1,2})/);\n if (match) {\n const [, y, m, d] = match;\n return `${y}-${m.padStart(2, '0')}-${d.padStart(2, '0')}`;\n }\n if (/tomorrow|明天/i.test(text)) {\n const d = new Date();\n d.setDate(d.getDate() + 1);\n return d.toISOString().slice(0, 10);\n }\n if (/yesterday|昨天/i.test(text)) {\n const d = new Date();\n d.setDate(d.getDate() - 1);\n return d.toISOString().slice(0, 10);\n }\n // \"today\" or no date → let API default to today\n return undefined;\n}\n\ninterface JiShiEntry {\n hour: string;\n luck: string;\n}\n\ninterface AlmanacData {\n lunarDate: string;\n ganzhi: string;\n yi: string[];\n ji: string[];\n chongsha: string;\n jishi: JiShiEntry[];\n summary: string;\n}\n\nexport const almanacAction: Action = {\n name: 'ALMANAC_LOOKUP',\n description: 'Look up the Chinese almanac / Huang Li (黄历) for a date. Shows lunar date, auspicious/inauspicious activities, hourly fortunes, and daily summary.',\n\n similes: [\n 'ALMANAC', 'HUANGLI', 'CHINESE_CALENDAR', 'AUSPICIOUS_DATE',\n 'LUCKY_DAY', 'TONG_SHING',\n ],\n\n validate: async (runtime: IAgentRuntime) => {\n return !!runtime.getSetting('GUANXING_API_KEY');\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: Record<string, unknown>,\n callback?: HandlerCallback,\n ) => {\n const apiKey = String(runtime.getSetting('GUANXING_API_KEY'));\n const text = typeof message.content === 'string' ? message.content : message.content.text ?? '';\n const date = extractDate(text);\n\n try {\n const res = await GuanXingService.callAPI<AlmanacData>('almanac', {\n ...(date && { date }),\n }, apiKey);\n\n const d = res.data!;\n\n const reply = [\n `**📅 Chinese Almanac 黄历** — ${date ?? 'Today'}`,\n '',\n `**Lunar Date:** ${d.lunarDate}`,\n `**Gan-Zhi:** ${d.ganzhi}`,\n '',\n `✅ **Auspicious (宜):** ${d.yi.join(', ')}`,\n `❌ **Inauspicious (忌):** ${d.ji.join(', ')}`,\n '',\n `**Chong-Sha:** ${d.chongsha}`,\n '',\n d.summary,\n ].join('\\n');\n\n callback?.({ text: reply });\n return;\n } catch (err) {\n const reply = `Sorry, I couldn't look up the almanac: ${(err as Error).message}`;\n callback?.({ text: reply });\n return;\n }\n },\n\n examples: [\n [\n { name: 'user', content: { text: \"Check the Chinese almanac for today\" } },\n { name: 'agent', content: { text: \"**📅 Chinese Almanac 黄历** — Today\\n\\n**Lunar Date:** 二月十九\\n**Gan-Zhi:** 乙巳年 己卯月 壬申日\\n\\n✅ **Auspicious (宜):** 开业, 搬家, 签约...\" } },\n ],\n ],\n};\n","import type { Action, IAgentRuntime, Memory, State, HandlerCallback } from '@elizaos/core';\nimport { GuanXingService } from '../services/guanxingService';\n\nfunction extractSpaceType(text: string): string {\n const lower = text.toLowerCase();\n if (lower.includes('office') || lower.includes('办公') || lower.includes('workplace')) return 'office';\n if (lower.includes('shop') || lower.includes('store') || lower.includes('商铺') || lower.includes('店')) return 'shop';\n return 'home';\n}\n\nfunction extractDirection(text: string): string | undefined {\n const directions = [\n 'north', 'south', 'east', 'west',\n 'northeast', 'northwest', 'southeast', 'southwest',\n '北', '南', '东', '西', '东北', '西北', '东南', '西南',\n ];\n const lower = text.toLowerCase();\n return directions.find(d => lower.includes(d));\n}\n\ninterface FengshuiData {\n score: number;\n analysis: string;\n suggestions: string[];\n luckyItems: string[];\n avoidItems: string[];\n}\n\nexport const fengshuiAction: Action = {\n name: 'FENGSHUI_ASSESSMENT',\n description: 'Assess Feng Shui (风水) for a home, office, or shop. Get score, analysis, improvement suggestions, and lucky/unlucky items.',\n\n similes: [\n 'FENGSHUI', 'FENG_SHUI', 'GEOMANCY', 'SPACE_ENERGY',\n 'FENGSHUI_TIPS', 'FENGSHUI_ANALYSIS',\n ],\n\n validate: async (runtime: IAgentRuntime) => {\n return !!runtime.getSetting('GUANXING_API_KEY');\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: Record<string, unknown>,\n callback?: HandlerCallback,\n ) => {\n const apiKey = String(runtime.getSetting('GUANXING_API_KEY'));\n const text = typeof message.content === 'string' ? message.content : message.content.text ?? '';\n\n const spaceType = extractSpaceType(text);\n const direction = extractDirection(text);\n\n // Everything after removing command keywords serves as concerns\n const concerns = text\n .replace(/feng\\s*shui|风水|assess(ment)?|check|analyze/gi, '')\n .replace(/(home|office|shop|house|apartment)/gi, '')\n .trim() || undefined;\n\n try {\n const res = await GuanXingService.callAPI<FengshuiData>('fengshui', {\n spaceType,\n ...(direction && { direction }),\n ...(concerns && { concerns }),\n }, apiKey);\n\n const d = res.data!;\n\n const reply = [\n `**🏡 Feng Shui Assessment 风水评估** — ${spaceType}`,\n '',\n `**Score:** ${d.score}/100`,\n '',\n d.analysis,\n '',\n `**Suggestions:**`,\n ...d.suggestions.map(s => `• ${s}`),\n '',\n `✅ **Lucky Items:** ${d.luckyItems.join(', ')}`,\n `❌ **Avoid:** ${d.avoidItems.join(', ')}`,\n ].join('\\n');\n\n callback?.({ text: reply });\n return;\n } catch (err) {\n const reply = `Sorry, I couldn't complete the Feng Shui assessment: ${(err as Error).message}`;\n callback?.({ text: reply });\n return;\n }\n },\n\n examples: [\n [\n { name: 'user', content: { text: \"Check the feng shui of my home office facing south\" } },\n { name: 'agent', content: { text: \"**🏡 Feng Shui Assessment 风水评估** — office\\n\\n**Score:** 72/100\\n\\nSouth-facing offices benefit from strong Fire energy...\" } },\n ],\n ],\n};\n","import type { Action, IAgentRuntime, Memory, State, HandlerCallback } from '@elizaos/core';\nimport { GuanXingService } from '../services/guanxingService';\n\n/**\n * Extract surname + given name from text.\n * Handles: \"score the name Zhang Wei\", \"张 伟\", \"surname Li given name Na\"\n */\nfunction extractName(text: string): { surname: string; givenName: string } | null {\n // \"surname X given name Y\" or \"last name X first name Y\"\n const explicit = text.match(/(?:surname|last\\s*name|姓)\\s*[::]?\\s*(\\S+)\\s+(?:given\\s*name|first\\s*name|名)\\s*[::]?\\s*(\\S+)/i);\n if (explicit) return { surname: explicit[1], givenName: explicit[2] };\n\n // Chinese name: 2-4 chars where first is surname. Look for a standalone Chinese name.\n const cnMatch = text.match(/([\\u4e00-\\u9fff]{2,4})/);\n if (cnMatch) {\n const name = cnMatch[1];\n return { surname: name[0], givenName: name.slice(1) };\n }\n\n // English name: \"score Zhang Wei\" → assume first token is surname\n const cleaned = text\n .replace(/score|name|rate|analyze|check|姓名|打分/gi, '')\n .trim();\n const parts = cleaned.split(/\\s+/).filter(p => p.length > 0);\n if (parts.length >= 2) {\n return { surname: parts[0], givenName: parts.slice(1).join(' ') };\n }\n\n return null;\n}\n\ninterface NameScoreData {\n totalScore: number;\n breakdown: {\n tianGe: number;\n renGe: number;\n diGe: number;\n waiGe: number;\n zongGe: number;\n };\n wuxingAnalysis: string;\n analysis: string;\n}\n\nexport const nameScoreAction: Action = {\n name: 'NAME_SCORE',\n description: 'Score and analyze a Chinese name using numerology and five-element theory (姓名打分). Returns Tian/Ren/Di/Wai/Zong grid scores and five-element analysis.',\n\n similes: [\n 'NAME_ANALYSIS', 'NAME_NUMEROLOGY', 'NAME_SCORE',\n 'NAME_MEANING', 'SCORE_NAME', 'NAME_RATING',\n ],\n\n validate: async (runtime: IAgentRuntime) => {\n return !!runtime.getSetting('GUANXING_API_KEY');\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: Record<string, unknown>,\n callback?: HandlerCallback,\n ) => {\n const apiKey = String(runtime.getSetting('GUANXING_API_KEY'));\n const text = typeof message.content === 'string' ? message.content : message.content.text ?? '';\n\n const name = extractName(text);\n if (!name) {\n const reply = \"Please provide a name to score. Example: **张伟** or **surname: Zhang, given name: Wei**.\";\n callback?.({ text: reply });\n return;\n }\n\n try {\n const res = await GuanXingService.callAPI<NameScoreData>('name-score', {\n surname: name.surname,\n givenName: name.givenName,\n }, apiKey);\n\n const d = res.data!;\n const b = d.breakdown;\n\n const reply = [\n `**📝 Name Score 姓名打分** — ${name.surname}${name.givenName}`,\n '',\n `**Total Score: ${d.totalScore}/100**`,\n '',\n `| Grid | Score |`,\n `|------|-------|`,\n `| 天格 Tian | ${b.tianGe} |`,\n `| 人格 Ren | ${b.renGe} |`,\n `| 地格 Di | ${b.diGe} |`,\n `| 外格 Wai | ${b.waiGe} |`,\n `| 总格 Zong | ${b.zongGe} |`,\n '',\n `**Five Elements:** ${d.wuxingAnalysis}`,\n '',\n d.analysis,\n ].join('\\n');\n\n callback?.({ text: reply });\n return;\n } catch (err) {\n const reply = `Sorry, I couldn't score the name: ${(err as Error).message}`;\n callback?.({ text: reply });\n return;\n }\n },\n\n examples: [\n [\n { name: 'user', content: { text: \"Score the name 张伟\" } },\n { name: 'agent', content: { text: \"**📝 Name Score 姓名打分** — 张伟\\n\\n**Total Score: 85/100**\\n\\n| Grid | Score |\\n|------|-------|\\n| 天格 Tian | 12 |...\" } },\n ],\n ],\n};\n","import type { Action, IAgentRuntime, Memory, State, HandlerCallback } from '@elizaos/core';\nimport { GuanXingService } from '../services/guanxingService';\n\nconst ZODIAC_MAP: Record<string, string> = {\n aries: '白羊座', taurus: '金牛座', gemini: '双子座', cancer: '巨蟹座',\n leo: '狮子座', virgo: '处女座', libra: '天秤座', scorpio: '天蝎座',\n sagittarius: '射手座', capricorn: '摩羯座', aquarius: '水瓶座', pisces: '双鱼座',\n 白羊座: '白羊座', 金牛座: '金牛座', 双子座: '双子座', 巨蟹座: '巨蟹座',\n 狮子座: '狮子座', 处女座: '处女座', 天秤座: '天秤座', 天蝎座: '天蝎座',\n 射手座: '射手座', 摩羯座: '摩羯座', 水瓶座: '水瓶座', 双鱼座: '双鱼座',\n};\n\nfunction findZodiacs(text: string): string[] {\n const found: string[] = [];\n const lower = text.toLowerCase();\n for (const [key, val] of Object.entries(ZODIAC_MAP)) {\n if (lower.includes(key.toLowerCase()) && !found.includes(val)) {\n found.push(val);\n }\n }\n return found;\n}\n\nfunction extractDates(text: string): string[] {\n const matches = [...text.matchAll(/(\\d{4})[-/](\\d{1,2})[-/](\\d{1,2})/g)];\n return matches.map(m => `${m[1]}-${m[2].padStart(2, '0')}-${m[3].padStart(2, '0')}`);\n}\n\ninterface CompatibilityData {\n score: number;\n dimensions: {\n love: number;\n career: number;\n friendship: number;\n };\n analysis: string;\n advice: string;\n}\n\nexport const compatibilityAction: Action = {\n name: 'COMPATIBILITY_CHECK',\n description: 'Check compatibility between two people using zodiac signs and/or birth dates (缘分配对). Returns love, career, and friendship compatibility scores.',\n\n similes: [\n 'COMPATIBILITY', 'MATCH', 'LOVE_MATCH', 'RELATIONSHIP_CHECK',\n 'COUPLE_MATCH', 'ZODIAC_COMPATIBILITY',\n ],\n\n validate: async (runtime: IAgentRuntime) => {\n return !!runtime.getSetting('GUANXING_API_KEY');\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: Record<string, unknown>,\n callback?: HandlerCallback,\n ) => {\n const apiKey = String(runtime.getSetting('GUANXING_API_KEY'));\n const text = typeof message.content === 'string' ? message.content : message.content.text ?? '';\n\n const zodiacs = findZodiacs(text);\n const dates = extractDates(text);\n\n if (zodiacs.length < 2 && dates.length < 2) {\n const reply = \"I need two zodiac signs or birth dates to check compatibility. Example: **Leo and Pisces** or **1990-06-15 and 1992-03-20**.\";\n callback?.({ text: reply });\n return;\n }\n\n const person1: Record<string, string> = { zodiac: zodiacs[0] ?? '' };\n const person2: Record<string, string> = { zodiac: zodiacs[1] ?? zodiacs[0] ?? '' };\n if (dates[0]) person1.birthDate = dates[0];\n if (dates[1]) person2.birthDate = dates[1];\n\n try {\n const res = await GuanXingService.callAPI<CompatibilityData>('compatibility', {\n person1,\n person2,\n }, apiKey);\n\n const d = res.data!;\n const dim = d.dimensions;\n\n function bar(value: number): string {\n const filled = Math.round(value / 10);\n return '█'.repeat(filled) + '░'.repeat(10 - filled) + ` ${value}%`;\n }\n\n const reply = [\n `**💕 Compatibility Check 缘分配对**`,\n `${zodiacs[0] || dates[0]} × ${zodiacs[1] || dates[1]}`,\n '',\n `**Overall Score: ${d.score}/100**`,\n '',\n `Love: ${bar(dim.love)}`,\n `Career: ${bar(dim.career)}`,\n `Friendship: ${bar(dim.friendship)}`,\n '',\n d.analysis,\n '',\n `💡 ${d.advice}`,\n ].join('\\n');\n\n callback?.({ text: reply });\n return;\n } catch (err) {\n const reply = `Sorry, I couldn't check compatibility: ${(err as Error).message}`;\n callback?.({ text: reply });\n return;\n }\n },\n\n examples: [\n [\n { name: 'user', content: { text: \"Check compatibility between Leo and Pisces\" } },\n { name: 'agent', content: { text: \"**💕 Compatibility Check 缘分配对**\\n狮子座 × 双鱼座\\n\\n**Overall Score: 68/100**\\n\\nLove: ██████████░░ 75%...\" } },\n ],\n ],\n};\n","import type { Action, IAgentRuntime, Memory, State, HandlerCallback } from '@elizaos/core';\nimport { GuanXingService } from '../services/guanxingService';\n\nconst ZODIAC_MAP: Record<string, string> = {\n aries: '白羊座', taurus: '金牛座', gemini: '双子座', cancer: '巨蟹座',\n leo: '狮子座', virgo: '处女座', libra: '天秤座', scorpio: '天蝎座',\n sagittarius: '射手座', capricorn: '摩羯座', aquarius: '水瓶座', pisces: '双鱼座',\n 白羊座: '白羊座', 金牛座: '金牛座', 双子座: '双子座', 巨蟹座: '巨蟹座',\n 狮子座: '狮子座', 处女座: '处女座', 天秤座: '天秤座', 天蝎座: '天蝎座',\n 射手座: '射手座', 摩羯座: '摩羯座', 水瓶座: '水瓶座', 双鱼座: '双鱼座',\n};\n\nconst ASPECTS = ['personality', 'love', 'career', 'compatibility'];\n\nfunction extractZodiac(text: string): string | null {\n const lower = text.toLowerCase();\n for (const [key, val] of Object.entries(ZODIAC_MAP)) {\n if (lower.includes(key.toLowerCase())) return val;\n }\n return null;\n}\n\nfunction extractAspect(text: string): string | undefined {\n const lower = text.toLowerCase();\n return ASPECTS.find(a => lower.includes(a));\n}\n\ninterface ZodiacData {\n analysis: string;\n traits: string[];\n element: string;\n rulingPlanet: string;\n compatibility: string[];\n}\n\nexport const zodiacAction: Action = {\n name: 'ZODIAC_READING',\n description: 'Get a detailed zodiac sign reading (星座解读). Covers personality, love, career, and compatibility aspects with traits, element, and ruling planet.',\n\n similes: [\n 'ZODIAC', 'STAR_SIGN', 'ZODIAC_READING', 'ZODIAC_ANALYSIS',\n 'ASTROLOGY', 'SIGN_READING',\n ],\n\n validate: async (runtime: IAgentRuntime) => {\n return !!runtime.getSetting('GUANXING_API_KEY');\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: Record<string, unknown>,\n callback?: HandlerCallback,\n ) => {\n const apiKey = String(runtime.getSetting('GUANXING_API_KEY'));\n const text = typeof message.content === 'string' ? message.content : message.content.text ?? '';\n\n const zodiac = extractZodiac(text);\n if (!zodiac) {\n const reply = \"Which zodiac sign should I analyze? Please mention a sign like **Aries**, **Scorpio**, or **天蝎座**.\";\n callback?.({ text: reply });\n return;\n }\n\n const aspect = extractAspect(text);\n\n try {\n const res = await GuanXingService.callAPI<ZodiacData>('zodiac', {\n zodiac,\n ...(aspect && { aspect }),\n }, apiKey);\n\n const d = res.data!;\n\n const reply = [\n `**⭐ ${zodiac} Zodiac Reading 星座解读**${aspect ? ` — ${aspect}` : ''}`,\n '',\n `**Element:** ${d.element}`,\n `**Ruling Planet:** ${d.rulingPlanet}`,\n `**Key Traits:** ${d.traits.join(', ')}`,\n `**Best Match:** ${d.compatibility.join(', ')}`,\n '',\n d.analysis,\n ].join('\\n');\n\n callback?.({ text: reply });\n return;\n } catch (err) {\n const reply = `Sorry, I couldn't complete the zodiac reading: ${(err as Error).message}`;\n callback?.({ text: reply });\n return;\n }\n },\n\n examples: [\n [\n { name: 'user', content: { text: \"Tell me about Scorpio's personality\" } },\n { name: 'agent', content: { text: \"**⭐ 天蝎座 Zodiac Reading 星座解读** — personality\\n\\n**Element:** Water\\n**Ruling Planet:** Pluto\\n**Key Traits:** Passionate, Determined, Mysterious...\" } },\n ],\n ],\n};\n","import type { Plugin } from '@elizaos/core';\nimport { baziAction } from './actions/bazi';\nimport { fortuneAction } from './actions/fortune';\nimport { qiuqianAction } from './actions/qiuqian';\nimport { tarotAction } from './actions/tarot';\nimport { dreamAction } from './actions/dream';\nimport { almanacAction } from './actions/almanac';\nimport { fengshuiAction } from './actions/fengshui';\nimport { nameScoreAction } from './actions/nameScore';\nimport { compatibilityAction } from './actions/compatibility';\nimport { zodiacAction } from './actions/zodiac';\nimport { GuanXingService } from './services/guanxingService';\n\nexport const guanxingPlugin: Plugin = {\n name: '@guanxing/plugin-elizaos',\n description:\n 'Chinese metaphysics AI tools — BaZi (八字), Tarot, I-Ching (求签), Feng Shui, fortune telling, dream interpretation, and more. Powered by 观星 GuanXing.',\n\n actions: [\n baziAction,\n fortuneAction,\n qiuqianAction,\n tarotAction,\n dreamAction,\n almanacAction,\n fengshuiAction,\n nameScoreAction,\n compatibilityAction,\n zodiacAction,\n ],\n\n services: [GuanXingService],\n\n init: async (_config: Record<string, string>, runtime) => {\n const apiKey = runtime.getSetting('GUANXING_API_KEY');\n if (!apiKey) {\n console.warn(\n '[guanxing] No GUANXING_API_KEY set. Get one at https://heartai.zeabur.app',\n );\n }\n },\n};\n\n// Re-export for convenience\nexport { GuanXingService } from './services/guanxingService';\nexport { baziAction } from './actions/bazi';\nexport { fortuneAction } from './actions/fortune';\nexport { qiuqianAction } from './actions/qiuqian';\nexport { tarotAction } from './actions/tarot';\nexport { dreamAction } from './actions/dream';\nexport { almanacAction } from './actions/almanac';\nexport { fengshuiAction } from './actions/fengshui';\nexport { nameScoreAction } from './actions/nameScore';\nexport { compatibilityAction } from './actions/compatibility';\nexport { zodiacAction } from './actions/zodiac';\n\nexport default guanxingPlugin;\n"],"mappings":"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","names":["extractDate","ZODIAC_MAP","bar","ZODIAC_MAP","extractZodiac"]}
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "@guanxing1/plugin-elizaos",
3
+ "version": "0.1.0",
4
+ "description": "ElizaOS plugin for 观星 GuanXing — Chinese metaphysics AI tools (BaZi, Tarot, I-Ching, Feng Shui, fortune telling)",
5
+ "main": "dist/index.js",
6
+ "module": "dist/index.mjs",
7
+ "types": "dist/index.d.ts",
8
+ "type": "module",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.mjs",
13
+ "require": "./dist/index.js"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "scripts": {
20
+ "build": "tsup",
21
+ "dev": "tsup --watch",
22
+ "typecheck": "tsc --noEmit"
23
+ },
24
+ "keywords": [
25
+ "elizaos",
26
+ "eliza",
27
+ "plugin",
28
+ "astrology",
29
+ "bazi",
30
+ "tarot",
31
+ "fortune",
32
+ "chinese",
33
+ "metaphysics",
34
+ "fengshui",
35
+ "zodiac",
36
+ "i-ching",
37
+ "web3",
38
+ "ai-agent"
39
+ ],
40
+ "author": "Ryan Cheung <ryan.c.cheung@gmail.com>",
41
+ "license": "MIT",
42
+ "repository": {
43
+ "type": "git",
44
+ "url": "https://github.com/doggychip/plugin-guanxing.git"
45
+ },
46
+ "homepage": "https://heartai.zeabur.app",
47
+ "peerDependencies": {
48
+ "@elizaos/core": ">=0.2.0"
49
+ },
50
+ "devDependencies": {
51
+ "@elizaos/core": "latest",
52
+ "typescript": "^5.7.0",
53
+ "tsup": "^8.0.0",
54
+ "@types/node": "^22.0.0"
55
+ }
56
+ }