UNPKG

@growthub/primitives

Version:

Stateless utility functions and primitives for the Growthub Marketing OS

1 lines 5.53 kB
{"version":3,"sources":["../src/agent.ts"],"sourcesContent":["/**\n * Agent utilities for the Growthub Marketing OS\n */\n\n/**\n * Agent task status utilities\n */\nexport type AgentTaskStatus = 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';\n\n/**\n * Check if an agent task status indicates completion\n */\nexport function isTaskCompleted(status: AgentTaskStatus): boolean {\n return ['completed', 'failed', 'cancelled'].includes(status);\n}\n\n/**\n * Check if an agent task is currently active\n */\nexport function isTaskActive(status: AgentTaskStatus): boolean {\n return ['pending', 'running'].includes(status);\n}\n\n/**\n * Calculate task progress based on status\n */\nexport function getTaskProgress(status: AgentTaskStatus): number {\n const progressMap: Record<AgentTaskStatus, number> = {\n pending: 0,\n running: 50,\n completed: 100,\n failed: 100,\n cancelled: 0\n };\n \n return progressMap[status] ?? 0;\n}\n\n/**\n * Generate a unique run ID for agent tasks\n */\nexport function generateRunId(): string {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substr(2, 5);\n return `run_${timestamp}_${random}`;\n}\n\n/**\n * Generate a unique thread ID\n */\nexport function generateThreadId(): string {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substr(2, 8);\n return `thread_${timestamp}_${random}`;\n}\n\n/**\n * Parse agent context from a string\n */\nexport function parseAgentContext(contextStr: string): Record<string, unknown> {\n try {\n return JSON.parse(contextStr);\n } catch {\n return {};\n }\n}\n\n/**\n * Serialize agent context to string\n */\nexport function serializeAgentContext(context: Record<string, unknown>): string {\n try {\n return JSON.stringify(context, null, 2);\n } catch {\n return '{}';\n }\n}\n\n/**\n * Extract agent type from a run ID or context\n */\nexport function extractAgentType(input: string): string | null {\n // Try to extract from run ID pattern\n const runIdMatch = input.match(/agent_([A-Z_]+)/);\n if (runIdMatch) {\n return runIdMatch[1];\n }\n \n // Try to parse as JSON and extract agentType\n try {\n const parsed = JSON.parse(input);\n return parsed.agentType || null;\n } catch {\n return null;\n }\n}\n\n/**\n * Calculate estimated completion time based on task complexity\n */\nexport function estimateTaskDuration(taskType: string, complexity: 'low' | 'medium' | 'high'): number {\n const baseTimes: Record<string, number> = {\n 'CONTENT_GENERATION_AGENT': 30000, // 30 seconds\n 'IMAGE_GENERATION_AGENT': 60000, // 60 seconds\n 'EMAIL_MARKETING_AGENT': 45000, // 45 seconds\n 'SOCIAL_MEDIA_AGENT': 20000, // 20 seconds\n 'BRAND_ANALYSIS_AGENT': 90000, // 90 seconds\n 'SEO_OPTIMIZATION_AGENT': 120000, // 2 minutes\n };\n\n const multipliers = {\n low: 0.7,\n medium: 1.0,\n high: 1.5\n };\n\n const baseTime = baseTimes[taskType] || 60000;\n const multiplier = multipliers[complexity];\n \n return Math.round(baseTime * multiplier);\n}\n\n/**\n * Format agent execution metadata for display\n */\nexport function formatExecutionMetadata(metadata: Record<string, unknown>): string {\n const entries = Object.entries(metadata)\n .filter(([key]) => !key.startsWith('_'))\n .map(([key, value]) => {\n const formattedKey = key.replace(/([A-Z])/g, ' $1').toLowerCase().trim();\n const formattedValue = typeof value === 'object' ? JSON.stringify(value) : String(value);\n return `${formattedKey}: ${formattedValue}`;\n });\n \n return entries.join('\\n');\n} "],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYO,SAAS,gBAAgB,QAAkC;AAChE,SAAO,CAAC,aAAa,UAAU,WAAW,EAAE,SAAS,MAAM;AAC7D;AAKO,SAAS,aAAa,QAAkC;AAC7D,SAAO,CAAC,WAAW,SAAS,EAAE,SAAS,MAAM;AAC/C;AAKO,SAAS,gBAAgB,QAAiC;AAC/D,QAAM,cAA+C;AAAA,IACnD,SAAS;AAAA,IACT,SAAS;AAAA,IACT,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,WAAW;AAAA,EACb;AAEA,SAAO,YAAY,MAAM,KAAK;AAChC;AAKO,SAAS,gBAAwB;AACtC,QAAM,YAAY,KAAK,IAAI,EAAE,SAAS,EAAE;AACxC,QAAM,SAAS,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC;AACrD,SAAO,OAAO,SAAS,IAAI,MAAM;AACnC;AAKO,SAAS,mBAA2B;AACzC,QAAM,YAAY,KAAK,IAAI,EAAE,SAAS,EAAE;AACxC,QAAM,SAAS,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC;AACrD,SAAO,UAAU,SAAS,IAAI,MAAM;AACtC;AAKO,SAAS,kBAAkB,YAA6C;AAC7E,MAAI;AACF,WAAO,KAAK,MAAM,UAAU;AAAA,EAC9B,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAKO,SAAS,sBAAsB,SAA0C;AAC9E,MAAI;AACF,WAAO,KAAK,UAAU,SAAS,MAAM,CAAC;AAAA,EACxC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAKO,SAAS,iBAAiB,OAA8B;AAE7D,QAAM,aAAa,MAAM,MAAM,iBAAiB;AAChD,MAAI,YAAY;AACd,WAAO,WAAW,CAAC;AAAA,EACrB;AAGA,MAAI;AACF,UAAM,SAAS,KAAK,MAAM,KAAK;AAC/B,WAAO,OAAO,aAAa;AAAA,EAC7B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAKO,SAAS,qBAAqB,UAAkB,YAA+C;AACpG,QAAM,YAAoC;AAAA,IACxC,4BAA4B;AAAA;AAAA,IAC5B,0BAA0B;AAAA;AAAA,IAC1B,yBAAyB;AAAA;AAAA,IACzB,sBAAsB;AAAA;AAAA,IACtB,wBAAwB;AAAA;AAAA,IACxB,0BAA0B;AAAA;AAAA,EAC5B;AAEA,QAAM,cAAc;AAAA,IAClB,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAEA,QAAM,WAAW,UAAU,QAAQ,KAAK;AACxC,QAAM,aAAa,YAAY,UAAU;AAEzC,SAAO,KAAK,MAAM,WAAW,UAAU;AACzC;AAKO,SAAS,wBAAwB,UAA2C;AACjF,QAAM,UAAU,OAAO,QAAQ,QAAQ,EACpC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,WAAW,GAAG,CAAC,EACtC,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AACrB,UAAM,eAAe,IAAI,QAAQ,YAAY,KAAK,EAAE,YAAY,EAAE,KAAK;AACvE,UAAM,iBAAiB,OAAO,UAAU,WAAW,KAAK,UAAU,KAAK,IAAI,OAAO,KAAK;AACvF,WAAO,GAAG,YAAY,KAAK,cAAc;AAAA,EAC3C,CAAC;AAEH,SAAO,QAAQ,KAAK,IAAI;AAC1B;","names":[]}