peak6-x-intelligence-plugin 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.
- package/README.md +33 -0
- package/dist/manifest.js +375 -0
- package/dist/manifest.js.map +7 -0
- package/dist/ui/index.js +118 -0
- package/dist/ui/index.js.map +7 -0
- package/dist/worker.js +2060 -0
- package/dist/worker.js.map +7 -0
- package/package.json +55 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../node_modules/.pnpm/@paperclipai+plugin-sdk@file+.paperclip-sdk+paperclipai-plugin-sdk-1.0.0.tgz_react@19.2.4/node_modules/@paperclipai/plugin-sdk/src/define-plugin.ts", "../node_modules/.pnpm/@paperclipai+plugin-sdk@file+.paperclip-sdk+paperclipai-plugin-sdk-1.0.0.tgz_react@19.2.4/node_modules/@paperclipai/plugin-sdk/src/worker-rpc-host.ts", "../node_modules/.pnpm/@paperclipai+plugin-sdk@file+.paperclip-sdk+paperclipai-plugin-sdk-1.0.0.tgz_react@19.2.4/node_modules/@paperclipai/plugin-sdk/src/protocol.ts", "../src/constants.ts", "../src/pipeline/xai-client.ts", "../src/pipeline/x-api-client.ts", "../src/pipeline/scoring.ts", "../src/pipeline/queries.ts", "../src/pipeline/handles.ts", "../src/worker.ts"],
|
|
4
|
+
"sourcesContent": [null, null, null, "export const PLUGIN_ID = \"peak6-labs.x-intelligence\";\nexport const PLUGIN_VERSION = \"0.1.0\";\n\nexport const JOB_KEYS = {\n discoveryRun: \"discovery-run\",\n authorityDecay: \"authority-decay\",\n complianceCheck: \"compliance-check\",\n corpusRetention: \"corpus-retention\",\n} as const;\n\nexport const TOOL_NAMES = {\n searchCorpus: \"search-corpus\",\n getToday: \"get-today\",\n getAuthorities: \"get-authorities\",\n suggestHandles: \"suggest-handles\",\n trackHandle: \"track-handle\",\n} as const;\n\nexport const SLOT_IDS = {\n dashboardWidget: \"x-intelligence-dashboard\",\n settingsPage: \"x-intelligence-settings\",\n} as const;\n\nexport const EXPORT_NAMES = {\n dashboardWidget: \"DashboardWidget\",\n settingsPage: \"SettingsPage\",\n} as const;\n\nexport const ENTITY_TYPES = {\n tweet: \"tweet\",\n handle: \"handle\",\n} as const;\n\nexport const STATE_KEYS = {\n corpusPrefix: \"corpus:\",\n lastDiscoveryRun: \"last-discovery-run\",\n pipelineStats: \"pipeline-stats\",\n} as const;\n\nexport const EVENT_NAMES = {\n corpusUpdated: \"corpus.updated\",\n handlePromoted: \"handle.promoted\",\n gapIdentified: \"gap.identified\",\n} as const;\n\nexport const DEFAULT_CONFIG = {\n company_id: \"\",\n xai_api_key_ref: \"XAI_API_KEY\",\n x_api_bearer_ref: \"BEARER_TOKEN\",\n semantic_topics: [\n \"institutional investors discussing market structure reform\",\n \"fintech companies disrupting traditional trading\",\n \"SEC regulatory changes affecting options trading\",\n \"algorithmic trading and quantitative strategies\",\n \"venture capital investing in financial infrastructure\",\n \"PEAK6\",\n \"options market making technology\",\n \"Chicago trading community news\",\n ],\n keyword_searches: [\n \"\\\"PEAK6 Investments\\\" OR \\\"PEAK6\\\" trading fintech\",\n \"fintech and trading technology\",\n \"market structure and regulation\",\n \"options trading strategies and platforms\",\n ],\n content_pillars: [\n \"market structure & regulation\",\n \"fintech & trading technology\",\n \"venture capital & investment\",\n \"Chicago business ecosystem\",\n \"company culture & talent\",\n ],\n scoring_weights: {\n relevance: 0.45,\n recency: 0.25,\n engagement: 0.30,\n },\n engagement_sub_weights: {\n likes: 0.55,\n reposts: 0.25,\n replies: 0.15,\n quotes: 0.05,\n },\n max_corpus_size: 200,\n dedup_threshold: 0.70,\n authority_boost: 0.15,\n authority_lists: {\n market_structure: {\n description: \"Market structure, regulation, SEC reform, options trading\",\n handles: [\n \"LizAnnSonders\",\n \"matt_levine\",\n \"unusual_whales\",\n \"CMEGroup\",\n \"CBOE\",\n \"OptionsHawk\",\n \"InvestorDenis\",\n ],\n last_reviewed: \"2026-03-29\",\n },\n fintech: {\n description: \"Fintech, trading technology, AI in finance\",\n handles: [\n \"twifintech\",\n \"IBSIntelligence\",\n \"privy_io\",\n \"i_Know_First\",\n \"fintech_germany\",\n \"venture_radar\",\n ],\n last_reviewed: \"2026-03-29\",\n },\n venture_capital: {\n description: \"Venture capital investing in financial infrastructure\",\n handles: [\n \"a16z\",\n \"FundersVC\",\n ],\n last_reviewed: \"2026-03-29\",\n },\n chicago_trading: {\n description: \"Chicago trading community, prop firms, PEAK6 ecosystem\",\n handles: [\n \"CBOE\",\n \"CMEGroup\",\n \"boogeymantradez\",\n \"adealafia\",\n ],\n last_reviewed: \"2026-03-29\",\n },\n } as Record<string, AuthorityList>,\n global_excluded: [\"elonmusk\", \"openai\", \"google\", \"microsoft\"],\n authority_promotion_policy: {\n auto_promote_threshold: {\n min_appearances: 7,\n min_avg_relevance: 0.8,\n min_mutual_overlap: 3,\n },\n candidate_threshold: {\n min_appearances: 5,\n min_avg_relevance: 0.7,\n min_mutual_overlap: 2,\n },\n tracking_window_days: 14,\n },\n corpus_retention_days: 90,\n} as const;\n\nexport interface AuthorityList {\n description: string;\n handles: string[];\n last_reviewed: string;\n}\n", "import type { PluginHttpClient, PluginSecretsClient, PluginLogger } from \"@paperclipai/plugin-sdk\";\nimport type { XaiResponse, XaiAnnotation } from \"../types.js\";\n\nconst XAI_RESPONSES_URL = \"https://api.x.ai/v1/responses\";\nconst XAI_MODEL = \"grok-4-fast-reasoning\";\n\nconst TWEET_ID_PATTERN = /x\\.com\\/(?:i\\/status|[^/]+\\/status)\\/(\\d+)/;\n\nexport interface XaiSearchOptions {\n query: string;\n fromDate: string;\n toDate: string;\n allowedHandles?: string[];\n excludedHandles?: string[];\n}\n\nexport interface XaiSearchResult {\n tweetIds: string[];\n synthesisText: string;\n annotations: XaiAnnotation[];\n tokensUsed: number;\n costUsdTicks: number;\n}\n\nexport function extractTweetIds(annotations: XaiAnnotation[]): string[] {\n const ids: string[] = [];\n for (const ann of annotations) {\n if (ann.type !== \"url_citation\" || !ann.url) continue;\n const match = TWEET_ID_PATTERN.exec(ann.url);\n if (match?.[1]) {\n ids.push(match[1]);\n }\n }\n return ids;\n}\n\nexport function deduplicateIds(idArrays: string[][]): string[] {\n const seen = new Set<string>();\n const result: string[] = [];\n for (const ids of idArrays) {\n for (const id of ids) {\n if (!seen.has(id)) {\n seen.add(id);\n result.push(id);\n }\n }\n }\n return result;\n}\n\nexport async function xaiSearch(\n http: PluginHttpClient,\n secrets: PluginSecretsClient,\n logger: PluginLogger,\n apiKeyRef: string,\n options: XaiSearchOptions,\n): Promise<XaiSearchResult> {\n const apiKey = await secrets.resolve(apiKeyRef);\n\n const tool: Record<string, unknown> = {\n type: \"x_search\",\n from_date: options.fromDate,\n to_date: options.toDate,\n };\n if (options.allowedHandles?.length) {\n tool.allowed_x_handles = options.allowedHandles.slice(0, 10);\n }\n if (options.excludedHandles?.length) {\n tool.excluded_x_handles = options.excludedHandles.slice(0, 10);\n }\n\n const body = {\n model: XAI_MODEL,\n input: [{ role: \"user\", content: options.query }],\n tools: [tool],\n inline_citations: true,\n };\n\n logger.debug(\"xAI search request\", { query: options.query, handles: options.allowedHandles });\n\n const response = await globalThis.fetch(XAI_RESPONSES_URL, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${apiKey}`,\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`xAI API error ${response.status}: ${errorText}`);\n }\n\n const data = (await response.json()) as XaiResponse;\n\n let synthesisText = \"\";\n const allAnnotations: XaiAnnotation[] = [];\n\n for (const output of data.output) {\n if (output.type === \"message\" && output.content) {\n for (const content of output.content) {\n if (content.type === \"output_text\") {\n if (content.text) synthesisText += content.text + \"\\n\";\n if (content.annotations) allAnnotations.push(...content.annotations);\n }\n }\n }\n }\n\n const tweetIds = extractTweetIds(allAnnotations);\n\n logger.debug(\"xAI search result\", {\n tweetIdsFound: tweetIds.length,\n annotationsCount: allAnnotations.length,\n tokensUsed: data.usage?.total_tokens ?? 0,\n firstAnnotationUrl: allAnnotations[0]?.url ?? \"NONE\",\n });\n\n return {\n tweetIds,\n synthesisText: synthesisText.trim(),\n annotations: allAnnotations,\n tokensUsed: data.usage?.total_tokens ?? 0,\n costUsdTicks: data.usage?.cost_in_usd_ticks ?? 0,\n };\n}\n", "import type { PluginHttpClient, PluginSecretsClient, PluginLogger } from \"@paperclipai/plugin-sdk\";\nimport type { XApiTweetLookupResponse, EnrichedTweet, XApiTweet, XApiUser } from \"../types.js\";\n\nconst X_API_BASE = \"https://api.x.com/2\";\nconst TWEET_FIELDS = \"text,author_id,created_at,public_metrics,entities\";\nconst USER_FIELDS = \"username,name,verified_type,public_metrics\";\nconst EXPANSIONS = \"author_id\";\nconst BATCH_SIZE = 100;\n\nexport async function batchLookupTweets(\n http: PluginHttpClient,\n secrets: PluginSecretsClient,\n logger: PluginLogger,\n bearerRef: string,\n tweetIds: string[],\n source: EnrichedTweet[\"source\"],\n): Promise<EnrichedTweet[]> {\n if (tweetIds.length === 0) return [];\n\n const bearerToken = await secrets.resolve(bearerRef);\n const results: EnrichedTweet[] = [];\n\n for (let i = 0; i < tweetIds.length; i += BATCH_SIZE) {\n const batch = tweetIds.slice(i, i + BATCH_SIZE);\n const url = `${X_API_BASE}/tweets?ids=${batch.join(\",\")}&tweet.fields=${TWEET_FIELDS}&expansions=${EXPANSIONS}&user.fields=${USER_FIELDS}`;\n\n logger.debug(\"X API v2 batch lookup\", { batchSize: batch.length, offset: i });\n\n const response = await http.fetch(url, {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${bearerToken}`,\n },\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n logger.warn(\"X API v2 error\", { status: response.status, error: errorText });\n continue;\n }\n\n const data = (await response.json()) as XApiTweetLookupResponse;\n\n if (data.errors?.length) {\n logger.debug(\"X API v2 partial errors\", {\n errors: data.errors.map((e) => `${e.value}: ${e.title}`),\n });\n }\n\n const userMap = new Map<string, XApiUser>();\n if (data.includes?.users) {\n for (const user of data.includes.users) {\n userMap.set(user.id, user);\n }\n }\n\n if (data.data) {\n for (const tweet of data.data) {\n const author = userMap.get(tweet.author_id);\n results.push(mapToEnrichedTweet(tweet, author, source));\n }\n }\n }\n\n return results;\n}\n\nfunction mapToEnrichedTweet(\n tweet: XApiTweet,\n author: XApiUser | undefined,\n source: EnrichedTweet[\"source\"],\n): EnrichedTweet {\n return {\n tweet_id: tweet.id,\n text: tweet.text,\n author_id: tweet.author_id,\n author_username: author?.username ?? \"unknown\",\n author_name: author?.name ?? \"Unknown\",\n author_verified_type: author?.verified_type,\n author_followers_count: author?.public_metrics?.followers_count ?? 0,\n created_at: tweet.created_at,\n metrics: tweet.public_metrics,\n entities: tweet.entities,\n source,\n };\n}\n\nexport async function verifyTweetExists(\n http: PluginHttpClient,\n secrets: PluginSecretsClient,\n bearerRef: string,\n tweetId: string,\n): Promise<boolean> {\n const bearerToken = await secrets.resolve(bearerRef);\n const url = `${X_API_BASE}/tweets?ids=${tweetId}&tweet.fields=id`;\n const response = await http.fetch(url, {\n method: \"GET\",\n headers: { Authorization: `Bearer ${bearerToken}` },\n });\n if (!response.ok) return false;\n const data = (await response.json()) as XApiTweetLookupResponse;\n return (data.data?.length ?? 0) > 0;\n}\n", "import type {\n EnrichedTweet,\n ScoredTweet,\n ScoringWeights,\n EngagementSubWeights,\n} from \"../types.js\";\n\n// ---------------------------------------------------------------------------\n// Trigram Jaccard deduplication\n// ---------------------------------------------------------------------------\n\nexport function trigrams(text: string): Set<string> {\n const normalized = text.toLowerCase().replace(/\\s+/g, \" \").trim();\n const set = new Set<string>();\n for (let i = 0; i <= normalized.length - 3; i++) {\n set.add(normalized.substring(i, i + 3));\n }\n return set;\n}\n\nexport function jaccardSimilarity(a: Set<string>, b: Set<string>): number {\n if (a.size === 0 && b.size === 0) return 1;\n let intersection = 0;\n for (const item of a) {\n if (b.has(item)) intersection++;\n }\n const union = a.size + b.size - intersection;\n return union === 0 ? 0 : intersection / union;\n}\n\nexport function deduplicateTweets(\n tweets: ScoredTweet[],\n threshold: number,\n): ScoredTweet[] {\n const sorted = [...tweets].sort((a, b) => b.score - a.score);\n const kept: ScoredTweet[] = [];\n const keptTrigrams: Set<string>[] = [];\n\n for (const tweet of sorted) {\n const tweetTri = trigrams(tweet.text);\n let isDuplicate = false;\n\n for (const existingTri of keptTrigrams) {\n if (jaccardSimilarity(tweetTri, existingTri) >= threshold) {\n isDuplicate = true;\n break;\n }\n }\n\n if (!isDuplicate) {\n kept.push(tweet);\n keptTrigrams.push(tweetTri);\n }\n }\n\n return kept;\n}\n\n// ---------------------------------------------------------------------------\n// Scoring\n// ---------------------------------------------------------------------------\n\nfunction logNormalize(value: number): number {\n return Math.log1p(value) / Math.log1p(1000000);\n}\n\nfunction computeEngagementScore(\n metrics: EnrichedTweet[\"metrics\"],\n subWeights: EngagementSubWeights,\n): number {\n const likes = logNormalize(metrics.like_count) * subWeights.likes;\n const reposts = logNormalize(metrics.retweet_count) * subWeights.reposts;\n const replies = logNormalize(metrics.reply_count) * subWeights.replies;\n const quotes = logNormalize(metrics.quote_count) * subWeights.quotes;\n return likes + reposts + replies + quotes;\n}\n\nfunction computeRecencyScore(createdAt: string, now: Date): number {\n const created = new Date(createdAt);\n const ageHours = (now.getTime() - created.getTime()) / (1000 * 60 * 60);\n if (ageHours <= 0) return 1;\n if (ageHours <= 6) return 1;\n if (ageHours <= 24) return 0.9;\n if (ageHours <= 48) return 0.7;\n if (ageHours <= 168) return 0.4;\n return 0.1;\n}\n\nfunction computeRelevanceScore(\n tweet: EnrichedTweet,\n topics: string[],\n): number {\n const textLower = tweet.text.toLowerCase();\n let matchCount = 0;\n for (const topic of topics) {\n const words = topic.toLowerCase().split(/\\s+/);\n const wordMatches = words.filter((w) => textLower.includes(w)).length;\n if (wordMatches >= Math.ceil(words.length * 0.5)) {\n matchCount++;\n }\n }\n // Base relevance: xAI selected it (0.5 baseline) + topic match boost\n const topicBoost = Math.min(matchCount * 0.1, 0.5);\n return Math.min(0.5 + topicBoost, 1.0);\n}\n\nexport function scoreTweets(\n tweets: EnrichedTweet[],\n weights: ScoringWeights,\n subWeights: EngagementSubWeights,\n authorityBoost: number,\n authorityHandles: Set<string>,\n authorityByDomain: Map<string, string[]>,\n topics: string[],\n now?: Date,\n): ScoredTweet[] {\n const scoreTime = now ?? new Date();\n\n return tweets.map((tweet) => {\n const relevance = computeRelevanceScore(tweet, topics);\n const recency = computeRecencyScore(tweet.created_at, scoreTime);\n const engagement = computeEngagementScore(tweet.metrics, subWeights);\n\n const isAuthority = authorityHandles.has(tweet.author_username.toLowerCase());\n const authorityDomains: string[] = [];\n for (const [domain, handles] of authorityByDomain) {\n if (handles.some((h) => h.toLowerCase() === tweet.author_username.toLowerCase())) {\n authorityDomains.push(domain);\n }\n }\n\n const score =\n relevance * weights.relevance +\n (isAuthority ? authorityBoost : 0) +\n recency * weights.recency +\n engagement * weights.engagement;\n\n return {\n ...tweet,\n score: Math.min(score, 1.0),\n relevance_score: relevance,\n recency_score: recency,\n engagement_score: engagement,\n is_authority: isAuthority,\n authority_domains: authorityDomains,\n };\n });\n}\n", "/**\n * Query decomposition \u2014 builds the set of xAI search queries from config topics.\n */\n\nexport interface DecomposedQuery {\n text: string;\n topic: string;\n phase: \"open\" | \"focused\";\n handles?: string[];\n}\n\nexport function buildOpenQueries(\n topics: string[],\n keywords: string[],\n dateStr: string,\n): DecomposedQuery[] {\n const queries: DecomposedQuery[] = [];\n\n for (const topic of topics) {\n queries.push({\n text: `What are people saying about ${topic} today (${dateStr})?`,\n topic,\n phase: \"open\",\n });\n }\n\n for (const keyword of keywords) {\n queries.push({\n text: `What are people saying about ${keyword} today (${dateStr})?`,\n topic: keyword,\n phase: \"open\",\n });\n }\n\n return queries;\n}\n\nexport function buildFocusedQueries(\n topics: string[],\n authorityByDomain: Map<string, string[]>,\n activeHandles: Map<string, { engagement: number; relevance: number; domains: string[] }>,\n dateStr: string,\n): DecomposedQuery[] {\n const queries: DecomposedQuery[] = [];\n\n // Get top active handles sorted by combined engagement + relevance\n const sortedActive = [...activeHandles.entries()]\n .sort(([, a], [, b]) => (b.engagement + b.relevance) - (a.engagement + a.relevance))\n .map(([handle]) => handle);\n\n for (const topic of topics) {\n // Find which domain this topic best matches\n const domainHandles = findBestDomainHandles(topic, authorityByDomain);\n\n // Build handle rotation: top 5 authority + top 5 active = max 10\n const authoritySlice = domainHandles.slice(0, 5);\n const activeSlice = sortedActive\n .filter((h) => !authoritySlice.includes(h))\n .slice(0, 5);\n const combinedHandles = [...authoritySlice, ...activeSlice].slice(0, 10);\n\n if (combinedHandles.length === 0) continue;\n\n queries.push({\n text: `What are these accounts saying about ${topic} today (${dateStr})?`,\n topic,\n phase: \"focused\",\n handles: combinedHandles,\n });\n }\n\n // Rotation queries for large authority lists\n for (const [domain, handles] of authorityByDomain) {\n if (handles.length <= 5) continue;\n\n // Generate additional rotation queries for handles [6-10], [11-15], etc.\n for (let offset = 5; offset < handles.length; offset += 5) {\n const rotationSlice = handles.slice(offset, offset + 5);\n const activeSlice = sortedActive\n .filter((h) => !rotationSlice.includes(h))\n .slice(0, 5);\n const combinedHandles = [...rotationSlice, ...activeSlice].slice(0, 10);\n\n if (combinedHandles.length === 0) continue;\n\n queries.push({\n text: `What are these accounts saying about ${domain} today (${dateStr})?`,\n topic: domain,\n phase: \"focused\",\n handles: combinedHandles,\n });\n }\n }\n\n return queries;\n}\n\nfunction findBestDomainHandles(\n topic: string,\n authorityByDomain: Map<string, string[]>,\n): string[] {\n const topicLower = topic.toLowerCase();\n let bestMatch = \"\";\n let bestScore = 0;\n\n for (const [domain] of authorityByDomain) {\n const domainWords = domain.toLowerCase().split(/[_\\s]+/);\n const matchCount = domainWords.filter((w) => topicLower.includes(w)).length;\n if (matchCount > bestScore) {\n bestScore = matchCount;\n bestMatch = domain;\n }\n }\n\n return bestMatch ? (authorityByDomain.get(bestMatch) ?? []) : [];\n}\n", "import type { PluginEntitiesClient, PluginLogger } from \"@paperclipai/plugin-sdk\";\nimport type { HandleTrackerData, HandleStatus, PromotionPolicy, EnrichedTweet } from \"../types.js\";\nimport { ENTITY_TYPES } from \"../constants.js\";\n\nexport interface HandleUpdate {\n username: string;\n relevance: number;\n domains: string[];\n followedByExisting: string[];\n tweetId?: string;\n userId?: string;\n followersCount?: number;\n verifiedType?: string;\n}\n\nexport async function updateHandleTracker(\n entities: PluginEntitiesClient,\n logger: PluginLogger,\n updates: HandleUpdate[],\n existingAuthority: Set<string>,\n): Promise<{ discovered: number; updated: number }> {\n let discovered = 0;\n let updated = 0;\n\n for (const update of updates) {\n const usernameLower = update.username.toLowerCase();\n if (existingAuthority.has(usernameLower)) continue;\n\n const existing = await entities.list({\n entityType: ENTITY_TYPES.handle,\n externalId: usernameLower,\n limit: 1,\n });\n\n const now = new Date().toISOString().split(\"T\")[0]!;\n\n if (existing.length > 0) {\n const record = existing[0]!;\n const data = record.data as unknown as HandleTrackerData;\n const newAppearances = data.appearances + 1;\n const newAvgRelevance =\n (data.avg_relevance * data.appearances + update.relevance) / newAppearances;\n const newDomains = [...new Set([...data.domains, ...update.domains])];\n const newSampleIds = update.tweetId\n ? [...new Set([...data.sample_tweet_ids, update.tweetId])].slice(-10)\n : data.sample_tweet_ids;\n const newFollowedBy = [...new Set([...data.followed_by_existing, ...update.followedByExisting])];\n\n await entities.upsert({\n entityType: ENTITY_TYPES.handle,\n scopeKind: \"instance\",\n externalId: usernameLower,\n title: usernameLower,\n status: record.status ?? \"discovered\",\n data: {\n ...data,\n last_seen: now,\n appearances: newAppearances,\n avg_relevance: Math.round(newAvgRelevance * 1000) / 1000,\n domains: newDomains,\n followed_by_existing: newFollowedBy,\n sample_tweet_ids: newSampleIds,\n followers_count: update.followersCount ?? data.followers_count,\n verified_type: update.verifiedType ?? data.verified_type,\n x_user_id: update.userId ?? data.x_user_id,\n } satisfies HandleTrackerData,\n });\n updated++;\n } else {\n const data: HandleTrackerData = {\n first_seen: now,\n last_seen: now,\n appearances: 1,\n avg_relevance: update.relevance,\n domains: update.domains,\n followed_by_existing: update.followedByExisting,\n x_user_id: update.userId,\n followers_count: update.followersCount ?? 0,\n verified_type: update.verifiedType,\n sample_tweet_ids: update.tweetId ? [update.tweetId] : [],\n promoted_to_list: null,\n notes: \"\",\n };\n\n await entities.upsert({\n entityType: ENTITY_TYPES.handle,\n scopeKind: \"instance\",\n externalId: usernameLower,\n title: usernameLower,\n status: \"discovered\",\n data: data as unknown as Record<string, unknown>,\n });\n discovered++;\n }\n }\n\n logger.info(\"Handle tracker updated\", { discovered, updated });\n return { discovered, updated };\n}\n\nexport async function evaluatePromotions(\n entities: PluginEntitiesClient,\n logger: PluginLogger,\n policy: PromotionPolicy,\n): Promise<Array<{ username: string; status: HandleStatus; data: HandleTrackerData }>> {\n const candidates: Array<{ username: string; status: HandleStatus; data: HandleTrackerData }> = [];\n\n const handles = await entities.list({\n entityType: ENTITY_TYPES.handle,\n limit: 200,\n });\n\n for (const handle of handles) {\n const data = handle.data as unknown as HandleTrackerData;\n const currentStatus = (handle.status ?? \"discovered\") as HandleStatus;\n\n if (currentStatus === \"promoted\") continue;\n\n // Check auto-promote threshold\n if (\n data.appearances >= policy.auto_promote_threshold.min_appearances &&\n data.avg_relevance >= policy.auto_promote_threshold.min_avg_relevance &&\n data.followed_by_existing.length >= policy.auto_promote_threshold.min_mutual_overlap\n ) {\n await entities.upsert({\n entityType: ENTITY_TYPES.handle,\n scopeKind: \"instance\",\n externalId: handle.externalId!,\n title: handle.title ?? handle.externalId!,\n status: \"promoted\",\n data: handle.data,\n });\n candidates.push({ username: handle.externalId!, status: \"promoted\", data });\n logger.info(\"Handle auto-promoted\", { handle: handle.externalId });\n continue;\n }\n\n // Check candidate threshold\n if (\n currentStatus === \"discovered\" &&\n data.appearances >= policy.candidate_threshold.min_appearances &&\n data.avg_relevance >= policy.candidate_threshold.min_avg_relevance\n ) {\n await entities.upsert({\n entityType: ENTITY_TYPES.handle,\n scopeKind: \"instance\",\n externalId: handle.externalId!,\n title: handle.title ?? handle.externalId!,\n status: \"candidate\",\n data: handle.data,\n });\n candidates.push({ username: handle.externalId!, status: \"candidate\", data });\n logger.info(\"Handle promoted to candidate\", { handle: handle.externalId });\n }\n }\n\n return candidates;\n}\n\nexport async function decayHandles(\n entities: PluginEntitiesClient,\n logger: PluginLogger,\n trackingWindowDays: number,\n): Promise<number> {\n const handles = await entities.list({\n entityType: ENTITY_TYPES.handle,\n limit: 500,\n });\n\n const cutoffDate = new Date();\n cutoffDate.setDate(cutoffDate.getDate() - trackingWindowDays);\n const cutoffStr = cutoffDate.toISOString().split(\"T\")[0]!;\n\n let decayed = 0;\n\n for (const handle of handles) {\n const data = handle.data as unknown as HandleTrackerData;\n const status = (handle.status ?? \"discovered\") as HandleStatus;\n\n if (status === \"promoted\") continue;\n if (data.last_seen >= cutoffStr) continue;\n\n // Downgrade: candidate \u2192 discovered, discovered \u2192 remove\n if (status === \"candidate\") {\n await entities.upsert({\n entityType: ENTITY_TYPES.handle,\n scopeKind: \"instance\",\n externalId: handle.externalId!,\n title: handle.title ?? handle.externalId!,\n status: \"discovered\",\n data: handle.data,\n });\n decayed++;\n }\n // Note: We don't delete discovered handles \u2014 they just become stale\n // and won't be used in queries since they don't meet any threshold\n }\n\n logger.info(\"Handle decay complete\", { decayed });\n return decayed;\n}\n\nexport function buildHandleUpdatesFromTweets(\n tweets: EnrichedTweet[],\n topics: string[],\n authorityByDomain: Map<string, string[]>,\n): HandleUpdate[] {\n const handleMap = new Map<string, HandleUpdate>();\n\n // Build reverse lookup: authority handle \u2192 domains\n const authorityDomains = new Map<string, string[]>();\n for (const [domain, handles] of authorityByDomain) {\n for (const h of handles) {\n const lower = h.toLowerCase();\n const existing = authorityDomains.get(lower) ?? [];\n existing.push(domain);\n authorityDomains.set(lower, existing);\n }\n }\n\n // Map each topic to authority domain keys where ALL key words appear in the topic\n const topicToDomainKeys = new Map<string, string[]>();\n for (const topic of topics) {\n const topicLower = topic.toLowerCase();\n const matched: string[] = [];\n for (const [domainKey] of authorityByDomain) {\n const keyWords = domainKey.toLowerCase().split(/[_\\s]+/);\n if (keyWords.every((w) => topicLower.includes(w))) {\n matched.push(domainKey);\n }\n }\n if (matched.length > 0) topicToDomainKeys.set(topic, matched);\n }\n\n // Collect which authority domain keys each handle's tweets match\n const handleDomainKeyMap = new Map<string, Set<string>>();\n\n for (const tweet of tweets) {\n const username = tweet.author_username.toLowerCase();\n const existing = handleMap.get(username);\n\n // Topic matching: require \u226550% of topic words to match (aligned with scoring.ts)\n const domains: string[] = [];\n const textLower = tweet.text.toLowerCase();\n for (const topic of topics) {\n const words = topic.toLowerCase().split(/\\s+/);\n const wordMatches = words.filter((w) => textLower.includes(w)).length;\n if (wordMatches >= Math.ceil(words.length * 0.5)) {\n domains.push(topic);\n }\n }\n\n // Track authority domain keys (not topic strings) for co-occurrence\n const domainKeySet = handleDomainKeyMap.get(username) ?? new Set<string>();\n for (const d of domains) {\n const keys = topicToDomainKeys.get(d);\n if (keys) for (const k of keys) domainKeySet.add(k);\n }\n handleDomainKeyMap.set(username, domainKeySet);\n\n if (existing) {\n existing.relevance = Math.max(existing.relevance, 0.5);\n existing.domains = [...new Set([...existing.domains, ...domains])];\n if (tweet.tweet_id) existing.tweetId = tweet.tweet_id;\n } else {\n handleMap.set(username, {\n username,\n relevance: 0.5,\n domains,\n followedByExisting: [],\n tweetId: tweet.tweet_id,\n userId: tweet.author_id,\n followersCount: tweet.author_followers_count,\n verifiedType: tweet.author_verified_type,\n });\n }\n }\n\n // Compute followed_by_existing: authority handles that share domain keys with this handle\n for (const [username, update] of handleMap) {\n const myDomainKeys = handleDomainKeyMap.get(username);\n if (!myDomainKeys || myDomainKeys.size === 0) continue;\n\n const coOccurring = new Set<string>();\n for (const [authHandle, authDomainKeys] of authorityDomains) {\n if (authDomainKeys.some((d) => myDomainKeys.has(d))) {\n coOccurring.add(authHandle);\n }\n }\n update.followedByExisting = [...coOccurring];\n }\n\n return [...handleMap.values()];\n}\n", "import {\n definePlugin,\n runWorker,\n type PluginContext,\n type PluginJobContext,\n type ToolResult,\n type ToolRunContext,\n} from \"@paperclipai/plugin-sdk\";\nimport {\n DEFAULT_CONFIG,\n ENTITY_TYPES,\n EVENT_NAMES,\n JOB_KEYS,\n STATE_KEYS,\n TOOL_NAMES,\n} from \"./constants.js\";\nimport type { PluginConfig, ScoredTweet, CorpusSummary, EnrichedTweet, HandleTrackerData } from \"./types.js\";\nimport {\n xaiSearch,\n deduplicateIds,\n batchLookupTweets,\n scoreTweets,\n deduplicateTweets,\n buildOpenQueries,\n buildFocusedQueries,\n updateHandleTracker,\n evaluatePromotions,\n decayHandles,\n buildHandleUpdatesFromTweets,\n verifyTweetExists,\n} from \"./pipeline/index.js\";\n\n// ---------------------------------------------------------------------------\n// Config helper\n// ---------------------------------------------------------------------------\n\nasync function getConfig(ctx: PluginContext): Promise<PluginConfig> {\n const raw = await ctx.config.get();\n return { ...DEFAULT_CONFIG, ...raw } as unknown as PluginConfig;\n}\n\nfunction buildAuthorityMaps(config: PluginConfig) {\n const allHandles = new Set<string>();\n const byDomain = new Map<string, string[]>();\n for (const [domain, list] of Object.entries(config.authority_lists)) {\n const handles = list.handles.map((h) => h.toLowerCase());\n byDomain.set(domain, handles);\n for (const h of handles) allHandles.add(h);\n }\n return { allHandles, byDomain };\n}\n\n// ---------------------------------------------------------------------------\n// Discovery pipeline (runs as job handler)\n// ---------------------------------------------------------------------------\n\nasync function runDiscoveryPipeline(ctx: PluginContext, job: PluginJobContext): Promise<void> {\n const config = await getConfig(ctx);\n const today = new Date().toISOString().split(\"T\")[0]!;\n const threeDaysAgo = new Date(Date.now() - 3 * 86400000).toISOString().split(\"T\")[0]!;\n const { allHandles, byDomain } = buildAuthorityMaps(config);\n\n ctx.logger.info(\"Discovery pipeline started\", { date: today, jobRunId: job.runId });\n await ctx.metrics.write(\"pipeline.run.started\", 1);\n\n // ----- Stage 1: Open Discovery -----\n const openQueries = buildOpenQueries(config.semantic_topics, config.keyword_searches, today);\n const openTweetIdArrays: string[][] = [];\n let totalXaiCost = 0;\n\n for (const query of openQueries) {\n try {\n const result = await xaiSearch(\n ctx.http,\n ctx.secrets,\n ctx.logger,\n config.xai_api_key_ref,\n { query: query.text, fromDate: threeDaysAgo, toDate: today, excludedHandles: config.global_excluded },\n );\n openTweetIdArrays.push(result.tweetIds);\n totalXaiCost += result.costUsdTicks;\n } catch (err) {\n ctx.logger.warn(\"Open discovery query failed\", {\n query: query.text,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n const openTweetIds = deduplicateIds(openTweetIdArrays);\n ctx.logger.info(\"Stage 1 complete: open discovery\", {\n queriesRun: openQueries.length,\n uniqueTweetIds: openTweetIds.length,\n });\n\n // Intermediate enrichment to identify active handles\n const openTweets = await batchLookupTweets(\n ctx.http, ctx.secrets, ctx.logger,\n config.x_api_bearer_ref, openTweetIds, \"open_discovery\",\n );\n\n // Build active handle map from open discovery results\n const activeHandles = new Map<string, { engagement: number; relevance: number; domains: string[] }>();\n for (const tweet of openTweets) {\n const username = tweet.author_username.toLowerCase();\n if (allHandles.has(username) || config.global_excluded.includes(username)) continue;\n const engagement = tweet.metrics.like_count + tweet.metrics.retweet_count * 2;\n const existing = activeHandles.get(username);\n if (existing) {\n existing.engagement = Math.max(existing.engagement, engagement);\n } else {\n activeHandles.set(username, { engagement, relevance: 0.5, domains: [] });\n }\n }\n\n // ----- Stage 2: Focused Discovery -----\n const focusedQueries = buildFocusedQueries(\n config.semantic_topics, byDomain, activeHandles, today,\n );\n const focusedTweetIdArrays: string[][] = [];\n\n for (const query of focusedQueries) {\n try {\n const result = await xaiSearch(\n ctx.http, ctx.secrets, ctx.logger,\n config.xai_api_key_ref,\n {\n query: query.text,\n fromDate: threeDaysAgo,\n toDate: today,\n allowedHandles: query.handles,\n },\n );\n focusedTweetIdArrays.push(result.tweetIds);\n totalXaiCost += result.costUsdTicks;\n\n if (result.tweetIds.length === 0 && query.handles?.length) {\n ctx.logger.warn(\"Focused query returned 0 results \u2014 handle set may be inactive\", {\n topic: query.topic,\n handles: query.handles,\n });\n }\n } catch (err) {\n ctx.logger.warn(\"Focused discovery query failed\", {\n query: query.text,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n const focusedTweetIds = deduplicateIds(focusedTweetIdArrays);\n // Remove IDs already fetched in Stage 1\n const openIdSet = new Set(openTweetIds);\n const newFocusedIds = focusedTweetIds.filter((id) => !openIdSet.has(id));\n\n ctx.logger.info(\"Stage 2 complete: focused discovery\", {\n queriesRun: focusedQueries.length,\n newTweetIds: newFocusedIds.length,\n });\n\n // ----- Stage 3: Enrichment -----\n const focusedTweets = await batchLookupTweets(\n ctx.http, ctx.secrets, ctx.logger,\n config.x_api_bearer_ref, newFocusedIds, \"focused\",\n );\n\n // Mark tweets found in both stages\n const focusedIdSet = new Set(focusedTweetIds);\n const allTweets: EnrichedTweet[] = openTweets.map((t) =>\n focusedIdSet.has(t.tweet_id) ? { ...t, source: \"both\" as const } : t,\n );\n allTweets.push(...focusedTweets);\n\n ctx.logger.info(\"Stage 3 complete: enrichment\", { totalTweets: allTweets.length });\n\n // ----- Stage 4: Scoring & Storage -----\n const scored = scoreTweets(\n allTweets,\n config.scoring_weights,\n config.engagement_sub_weights,\n config.authority_boost,\n allHandles,\n byDomain,\n config.semantic_topics,\n );\n\n const deduplicated = deduplicateTweets(scored, config.dedup_threshold);\n const corpus = deduplicated.slice(0, config.max_corpus_size);\n\n ctx.logger.info(\"Stage 4: scoring & dedup\", {\n scored: scored.length,\n afterDedup: deduplicated.length,\n finalCorpus: corpus.length,\n });\n\n // Store tweets as entities\n for (const tweet of corpus) {\n await ctx.entities.upsert({\n entityType: ENTITY_TYPES.tweet,\n scopeKind: \"instance\",\n externalId: tweet.tweet_id,\n title: `@${tweet.author_username}: ${tweet.text.slice(0, 80)}`,\n status: \"active\",\n data: tweet as unknown as Record<string, unknown>,\n });\n }\n\n // Update handle tracker\n const handleUpdates = buildHandleUpdatesFromTweets(allTweets, config.semantic_topics, byDomain);\n const handleStats = await updateHandleTracker(\n ctx.entities, ctx.logger, handleUpdates, allHandles,\n );\n\n // Evaluate promotions\n const promotions = await evaluatePromotions(\n ctx.entities, ctx.logger, config.authority_promotion_policy,\n );\n\n // Store daily corpus summary\n const summary: CorpusSummary = {\n date: today,\n total_tweets: corpus.length,\n top_items: corpus.slice(0, 10),\n by_pillar: {},\n discovery_stats: {\n open_queries: openQueries.length,\n focused_queries: focusedQueries.length,\n total_tweet_ids_extracted: openTweetIds.length + focusedTweetIds.length,\n tweets_after_dedup: deduplicated.length,\n tweets_after_scoring: corpus.length,\n new_handles_discovered: handleStats.discovered,\n handles_promoted: promotions.length,\n xai_cost_estimate: totalXaiCost / 1_000_000_000,\n x_api_cost_estimate: allTweets.length * 0.01,\n },\n generated_at: new Date().toISOString(),\n };\n\n await ctx.state.set(\n { scopeKind: \"instance\", stateKey: `${STATE_KEYS.corpusPrefix}${today}` },\n summary,\n );\n await ctx.state.set(\n { scopeKind: \"instance\", stateKey: STATE_KEYS.lastDiscoveryRun },\n { date: today, corpusSize: corpus.length, generatedAt: summary.generated_at },\n );\n\n // Emit events\n await ctx.events.emit(EVENT_NAMES.corpusUpdated, config.company_id, {\n date: today,\n corpusSize: corpus.length,\n topScore: corpus[0]?.score ?? 0,\n });\n\n for (const promo of promotions) {\n if (promo.status === \"promoted\") {\n await ctx.events.emit(EVENT_NAMES.handlePromoted, config.company_id, {\n handle: promo.username,\n status: promo.status,\n appearances: promo.data.appearances,\n avgRelevance: promo.data.avg_relevance,\n });\n }\n }\n\n await ctx.activity.log({\n companyId: config.company_id,\n message: `X Intelligence discovery complete: ${corpus.length} tweets scored, ${handleStats.discovered} new handles discovered`,\n metadata: summary.discovery_stats as unknown as Record<string, unknown>,\n });\n\n await ctx.metrics.write(\"pipeline.run.completed\", 1);\n await ctx.metrics.write(\"pipeline.corpus.size\", corpus.length);\n await ctx.metrics.write(\"pipeline.handles.discovered\", handleStats.discovered);\n await ctx.metrics.write(\"pipeline.cost.xai\", totalXaiCost / 1_000_000_000);\n\n ctx.logger.info(\"Discovery pipeline complete\", {\n date: today,\n corpusSize: corpus.length,\n totalCostEstimate: `$${(totalXaiCost / 1_000_000_000 + allTweets.length * 0.01).toFixed(2)}`,\n });\n}\n\n// ---------------------------------------------------------------------------\n// Job handlers\n// ---------------------------------------------------------------------------\n\nasync function handleAuthorityDecay(ctx: PluginContext, _job: PluginJobContext): Promise<void> {\n const config = await getConfig(ctx);\n const decayed = await decayHandles(\n ctx.entities, ctx.logger, config.authority_promotion_policy.tracking_window_days,\n );\n await ctx.metrics.write(\"handles.decayed\", decayed);\n ctx.logger.info(\"Authority decay job complete\", { decayed });\n}\n\nasync function handleComplianceCheck(ctx: PluginContext, _job: PluginJobContext): Promise<void> {\n const config = await getConfig(ctx);\n const tweets = await ctx.entities.list({ entityType: ENTITY_TYPES.tweet, limit: 200 });\n let removed = 0;\n\n for (const tweet of tweets) {\n const tweetId = tweet.externalId;\n if (!tweetId) continue;\n try {\n const exists = await verifyTweetExists(\n ctx.http, ctx.secrets, config.x_api_bearer_ref, tweetId,\n );\n if (!exists) {\n await ctx.entities.upsert({\n entityType: ENTITY_TYPES.tweet,\n scopeKind: \"instance\",\n externalId: tweetId,\n title: tweet.title ?? tweetId,\n status: \"removed\",\n data: { ...tweet.data, removed_reason: \"deleted_or_suspended\", removed_at: new Date().toISOString() },\n });\n removed++;\n }\n } catch {\n // Rate limit or network error \u2014 skip this tweet\n }\n }\n\n await ctx.metrics.write(\"compliance.tweets_removed\", removed);\n ctx.logger.info(\"Compliance check complete\", { checked: tweets.length, removed });\n}\n\nasync function handleCorpusRetention(ctx: PluginContext, _job: PluginJobContext): Promise<void> {\n const config = await getConfig(ctx);\n const cutoff = new Date();\n cutoff.setDate(cutoff.getDate() - config.corpus_retention_days);\n const cutoffStr = cutoff.toISOString().split(\"T\")[0]!;\n\n const tweets = await ctx.entities.list({ entityType: ENTITY_TYPES.tweet, limit: 500 });\n let archived = 0;\n\n for (const tweet of tweets) {\n const data = tweet.data as Record<string, unknown>;\n const createdAt = typeof data.created_at === \"string\" ? data.created_at.split(\"T\")[0] : null;\n if (createdAt && createdAt < cutoffStr) {\n await ctx.entities.upsert({\n entityType: ENTITY_TYPES.tweet,\n scopeKind: \"instance\",\n externalId: tweet.externalId!,\n title: tweet.title ?? tweet.externalId!,\n status: \"archived\",\n data: { ...tweet.data, archived_at: new Date().toISOString() },\n });\n archived++;\n }\n }\n\n await ctx.metrics.write(\"retention.tweets_archived\", archived);\n ctx.logger.info(\"Corpus retention complete\", { archived });\n}\n\n// ---------------------------------------------------------------------------\n// Tool handlers\n// ---------------------------------------------------------------------------\n\nasync function handleSearchCorpus(\n ctx: PluginContext,\n params: unknown,\n _runCtx: ToolRunContext,\n): Promise<ToolResult> {\n const p = params as Record<string, unknown>;\n const query = typeof p.query === \"string\" ? p.query.toLowerCase() : \"\";\n const date = typeof p.date === \"string\" ? p.date : undefined;\n const pillar = typeof p.pillar === \"string\" ? p.pillar.toLowerCase() : undefined;\n const limit = typeof p.limit === \"number\" ? p.limit : 20;\n\n const tweets = await ctx.entities.list({\n entityType: ENTITY_TYPES.tweet,\n limit: 200,\n });\n\n const results: ScoredTweet[] = [];\n for (const tweet of tweets) {\n if (tweet.status === \"removed\" || tweet.status === \"archived\") continue;\n const data = tweet.data as unknown as ScoredTweet;\n const textMatch = query ? data.text.toLowerCase().includes(query) : true;\n const dateMatch = date ? (data.created_at?.startsWith(date) ?? false) : true;\n const pillarMatch = pillar\n ? data.authority_domains?.some((d) => d.toLowerCase().includes(pillar)) ?? false\n : true;\n\n if (textMatch && dateMatch && pillarMatch) {\n results.push(data);\n }\n }\n\n results.sort((a, b) => b.score - a.score);\n const limited = results.slice(0, limit);\n\n return {\n content: `Found ${limited.length} tweets matching \"${query}\"`,\n data: limited,\n };\n}\n\nasync function handleGetToday(\n ctx: PluginContext,\n params: unknown,\n _runCtx: ToolRunContext,\n): Promise<ToolResult> {\n const p = params as Record<string, unknown>;\n const pillar = typeof p.pillar === \"string\" ? p.pillar : undefined;\n const limit = typeof p.limit === \"number\" ? p.limit : 20;\n const today = new Date().toISOString().split(\"T\")[0]!;\n\n const summary = (await ctx.state.get({\n scopeKind: \"instance\",\n stateKey: `${STATE_KEYS.corpusPrefix}${today}`,\n })) as CorpusSummary | null;\n\n if (!summary) {\n return { content: \"No corpus available for today. Discovery may not have run yet.\" };\n }\n\n let items = summary.top_items;\n if (pillar) {\n items = items.filter((t) =>\n t.authority_domains?.some((d) => d.toLowerCase().includes(pillar.toLowerCase())) ?? false,\n );\n }\n\n return {\n content: `Today's corpus: ${summary.total_tweets} tweets. Showing top ${Math.min(limit, items.length)}.`,\n data: {\n date: summary.date,\n total: summary.total_tweets,\n items: items.slice(0, limit),\n stats: summary.discovery_stats,\n },\n };\n}\n\nasync function handleGetAuthorities(\n ctx: PluginContext,\n params: unknown,\n _runCtx: ToolRunContext,\n): Promise<ToolResult> {\n const p = params as Record<string, unknown>;\n const listName = typeof p.list_name === \"string\" ? p.list_name : undefined;\n const config = await getConfig(ctx);\n\n if (listName) {\n const list = config.authority_lists[listName];\n if (!list) {\n return { error: `Authority list \"${listName}\" not found. Available: ${Object.keys(config.authority_lists).join(\", \")}` };\n }\n return {\n content: `Authority list \"${listName}\": ${list.handles.length} handles`,\n data: { name: listName, ...list },\n };\n }\n\n const summary = Object.entries(config.authority_lists).map(([name, list]) => ({\n name,\n description: list.description,\n handleCount: list.handles.length,\n handles: list.handles,\n lastReviewed: list.last_reviewed,\n }));\n\n return {\n content: `${summary.length} authority lists configured`,\n data: summary,\n };\n}\n\nasync function handleSuggestHandles(\n ctx: PluginContext,\n _params: unknown,\n _runCtx: ToolRunContext,\n): Promise<ToolResult> {\n const handles = await ctx.entities.list({\n entityType: ENTITY_TYPES.handle,\n limit: 200,\n });\n\n const candidates = handles\n .filter((h) => h.status === \"candidate\" || h.status === \"promoted\")\n .map((h) => {\n const data = h.data as unknown as HandleTrackerData;\n return {\n username: h.externalId,\n status: h.status,\n appearances: data.appearances,\n avg_relevance: data.avg_relevance,\n domains: data.domains,\n followers_count: data.followers_count,\n first_seen: data.first_seen,\n last_seen: data.last_seen,\n };\n });\n\n candidates.sort((a, b) => {\n const scoreA = (a.avg_relevance ?? 0) * (a.appearances ?? 0);\n const scoreB = (b.avg_relevance ?? 0) * (b.appearances ?? 0);\n return scoreB - scoreA;\n });\n\n return {\n content: `${candidates.length} handles are candidates or recently promoted`,\n data: candidates,\n };\n}\n\nasync function handleTrackHandle(\n ctx: PluginContext,\n params: unknown,\n _runCtx: ToolRunContext,\n): Promise<ToolResult> {\n const p = params as Record<string, unknown>;\n const handle = typeof p.handle === \"string\" ? p.handle.toLowerCase().replace(/^@/, \"\") : \"\";\n const relevance = typeof p.relevance === \"number\" ? p.relevance : 0.5;\n const domain = typeof p.domain === \"string\" ? p.domain : \"\";\n\n if (!handle) return { error: \"handle is required\" };\n if (!domain) return { error: \"domain is required\" };\n\n const config = await getConfig(ctx);\n const { allHandles } = buildAuthorityMaps(config);\n\n await updateHandleTracker(ctx.entities, ctx.logger, [\n { username: handle, relevance, domains: [domain], followedByExisting: [] },\n ], allHandles);\n\n return {\n content: `Handle @${handle} tracked with relevance ${relevance} in domain \"${domain}\"`,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Plugin definition\n// ---------------------------------------------------------------------------\n\nconst plugin = definePlugin({\n async setup(ctx) {\n // Register job handlers\n ctx.jobs.register(JOB_KEYS.discoveryRun, (job) => runDiscoveryPipeline(ctx, job));\n ctx.jobs.register(JOB_KEYS.authorityDecay, (job) => handleAuthorityDecay(ctx, job));\n ctx.jobs.register(JOB_KEYS.complianceCheck, (job) => handleComplianceCheck(ctx, job));\n ctx.jobs.register(JOB_KEYS.corpusRetention, (job) => handleCorpusRetention(ctx, job));\n\n // Register agent tools\n ctx.tools.register(\n TOOL_NAMES.searchCorpus,\n { displayName: \"Search X Corpus\", description: \"Search the scored X intelligence corpus\", parametersSchema: {} },\n (params, runCtx) => handleSearchCorpus(ctx, params, runCtx),\n );\n ctx.tools.register(\n TOOL_NAMES.getToday,\n { displayName: \"Get Today's Intelligence\", description: \"Get today's scored corpus\", parametersSchema: {} },\n (params, runCtx) => handleGetToday(ctx, params, runCtx),\n );\n ctx.tools.register(\n TOOL_NAMES.getAuthorities,\n { displayName: \"Get Authority Handles\", description: \"Get authority handle lists\", parametersSchema: {} },\n (params, runCtx) => handleGetAuthorities(ctx, params, runCtx),\n );\n ctx.tools.register(\n TOOL_NAMES.suggestHandles,\n { displayName: \"Suggest Handle Promotions\", description: \"Get promotion candidates\", parametersSchema: {} },\n (params, runCtx) => handleSuggestHandles(ctx, params, runCtx),\n );\n ctx.tools.register(\n TOOL_NAMES.trackHandle,\n { displayName: \"Track Handle\", description: \"Record a handle appearance\", parametersSchema: {} },\n (params, runCtx) => handleTrackHandle(ctx, params, runCtx),\n );\n\n // Register data handlers for UI\n ctx.data.register(\"dashboard-summary\", async () => {\n const today = new Date().toISOString().split(\"T\")[0]!;\n const summary = (await ctx.state.get({\n scopeKind: \"instance\",\n stateKey: `${STATE_KEYS.corpusPrefix}${today}`,\n })) as CorpusSummary | null;\n\n const lastRun = await ctx.state.get({\n scopeKind: \"instance\",\n stateKey: STATE_KEYS.lastDiscoveryRun,\n });\n\n const handleCount = (await ctx.entities.list({\n entityType: ENTITY_TYPES.handle,\n limit: 1,\n })).length;\n\n return {\n today: summary ?? null,\n lastRun,\n trackedHandles: handleCount,\n };\n });\n\n ctx.data.register(\"corpus\", async (params) => {\n const date = typeof params.date === \"string\"\n ? params.date\n : new Date().toISOString().split(\"T\")[0]!;\n return await ctx.state.get({\n scopeKind: \"instance\",\n stateKey: `${STATE_KEYS.corpusPrefix}${date}`,\n });\n });\n\n ctx.data.register(\"plugin-config\", async () => {\n return await ctx.config.get();\n });\n\n // Register action handlers for UI\n let discoveryRunning = false;\n ctx.actions.register(\"trigger-discovery\", async () => {\n if (discoveryRunning) {\n return { message: \"Discovery pipeline already running.\" };\n }\n ctx.logger.info(\"Manual discovery trigger requested via UI\");\n discoveryRunning = true;\n const fakeJob = { runId: `manual-${Date.now()}`, jobKey: JOB_KEYS.discoveryRun } as PluginJobContext;\n runDiscoveryPipeline(ctx, fakeJob)\n .catch((err) => {\n ctx.logger.error(\"Manual discovery failed\", { error: err instanceof Error ? err.message : String(err) });\n })\n .finally(() => { discoveryRunning = false; });\n return { message: \"Discovery pipeline started. Check logs for progress.\" };\n });\n\n // Subscribe to events\n ctx.events.on(\"issue.created\", async (event) => {\n ctx.logger.debug(\"Issue created event received\", { issueId: event.entityId });\n });\n\n ctx.logger.info(\"X Intelligence plugin initialized\");\n },\n\n async onHealth() {\n return { status: \"ok\", message: \"X Intelligence plugin is running\" };\n },\n});\n\nexport default plugin;\nrunWorker(plugin, import.meta.url);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["plugin"]
|
|
7
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "peak6-x-intelligence-plugin",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"packageManager": "pnpm@10.33.0",
|
|
6
|
+
"description": "X/Twitter intelligence plugin for Paperclip",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/peak6-labs/x-intelligence-plugin"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist/"
|
|
13
|
+
],
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "node ./esbuild.config.mjs",
|
|
16
|
+
"build:rollup": "rollup -c",
|
|
17
|
+
"dev": "node ./esbuild.config.mjs --watch",
|
|
18
|
+
"dev:ui": "paperclip-plugin-dev-server --root . --ui-dir dist/ui --port 4177",
|
|
19
|
+
"test": "vitest run --config ./vitest.config.ts",
|
|
20
|
+
"typecheck": "tsc --noEmit"
|
|
21
|
+
},
|
|
22
|
+
"paperclipPlugin": {
|
|
23
|
+
"manifest": "./dist/manifest.js",
|
|
24
|
+
"worker": "./dist/worker.js",
|
|
25
|
+
"ui": "./dist/ui/"
|
|
26
|
+
},
|
|
27
|
+
"keywords": [
|
|
28
|
+
"paperclip",
|
|
29
|
+
"plugin",
|
|
30
|
+
"connector"
|
|
31
|
+
],
|
|
32
|
+
"author": "peak6-labs",
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"pnpm": {
|
|
35
|
+
"overrides": {
|
|
36
|
+
"@paperclipai/shared": "file:.paperclip-sdk/paperclipai-shared-0.3.1.tgz"
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@paperclipai/shared": "file:.paperclip-sdk/paperclipai-shared-0.3.1.tgz",
|
|
41
|
+
"@paperclipai/plugin-sdk": "file:.paperclip-sdk/paperclipai-plugin-sdk-1.0.0.tgz",
|
|
42
|
+
"@rollup/plugin-node-resolve": "^16.0.1",
|
|
43
|
+
"@rollup/plugin-typescript": "^12.1.2",
|
|
44
|
+
"@types/node": "^24.6.0",
|
|
45
|
+
"@types/react": "^19.0.8",
|
|
46
|
+
"esbuild": "^0.27.3",
|
|
47
|
+
"rollup": "^4.38.0",
|
|
48
|
+
"tslib": "^2.8.1",
|
|
49
|
+
"typescript": "^5.7.3",
|
|
50
|
+
"vitest": "^3.0.5"
|
|
51
|
+
},
|
|
52
|
+
"peerDependencies": {
|
|
53
|
+
"react": ">=18"
|
|
54
|
+
}
|
|
55
|
+
}
|