shipdeck
Version:
Ship MVPs in 48 hours. Fix bugs in 30 seconds. The command deck for developers who ship.
157 lines (131 loc) • 3.51 kB
JavaScript
/**
* Joker Agent
* Lightens the mood with humor and dad jokes
*/
const BaseAgent = require('./base-agent');
const { AnthropicClient } = require('../anthropic/client');
/**
* Joker - Lightens the mood with humor and dad jokes
*/
class JokerAgent extends BaseAgent {
constructor(config = {}) {
super('JokerAgent', {
...config,
description: 'Lightens the mood with humor and dad jokes',
version: '1.0.0'
});
this.capabilities = ["humor","jokes","morale","entertainment","fun"];
this.anthropicClient = config.anthropicClient || new AnthropicClient();
}
/**
* Get agent capabilities
* @returns {Array} List of capabilities
*/
getCapabilities() {
return this.capabilities;
}
/**
* Get system prompt for the agent
* @returns {string} System prompt
*/
getSystemPrompt() {
return `You are JokerAgent, an AI agent specialized in humor, jokes, morale, entertainment, fun.
Your core responsibilities:
- humor
- jokes
- morale
- entertainment
- fun
Always provide practical, production-ready solutions.`;
}
/**
* Execute agent task
* @param {Object} task - Task to execute
* @param {Object} context - Execution context
* @returns {Promise<Object>} Execution result
*/
async execute(task, context = {}) {
try {
this.validateTask(task);
const systemPrompt = this.getSystemPrompt();
const userPrompt = this.createPrompt(task, context);
const response = await this.anthropicClient.createMessage(
`${systemPrompt}
${userPrompt}`,
{
maxTokens: 4096,
temperature: 0.7
}
);
return this.parseResponse(response, task.type);
} catch (error) {
this.emit('error', error);
throw new Error(`JokerAgent execution failed: ${error.message}`);
}
}
/**
* Create prompt for the task
* @param {Object} task - Task object
* @param {Object} context - Context object
* @returns {string} Generated prompt
*/
createPrompt(task, context) {
const { type, description, requirements = [] } = task;
return `Task Type: ${type}
Description: ${description}
Requirements: ${requirements.join(', ')}
Please provide a comprehensive solution.`;
}
/**
* Parse agent response
* @param {Object} response - API response
* @param {string} type - Task type
* @returns {Object} Parsed result
*/
parseResponse(response, type) {
const content = response.content?.[0]?.text || '';
return {
success: true,
type: type,
content: content,
timestamp: new Date().toISOString()
};
}
/**
* tellJoke implementation
* @param {Object} params - Method parameters
* @returns {Promise<Object>} Method result
*/
async tellJoke(params = {}) {
const task = {
type: 'tellJoke',
...params
};
return this.execute(task);
}
/**
* lightenMood implementation
* @param {Object} params - Method parameters
* @returns {Promise<Object>} Method result
*/
async lightenMood(params = {}) {
const task = {
type: 'lightenMood',
...params
};
return this.execute(task);
}
/**
* createPuns implementation
* @param {Object} params - Method parameters
* @returns {Promise<Object>} Method result
*/
async createPuns(params = {}) {
const task = {
type: 'createPuns',
...params
};
return this.execute(task);
}
}
module.exports = JokerAgent;