← back to Norma
agents/moveon-agent/server.js
74 lines
/**
* Norma MoveOn Agent — Port 9801
*
* Discovers, creates, and monitors petitions on MoveOn.org.
* Skills: discover, post, monitor, report
*/
const { createAgentServer } = require('../shared/agent-base');
// Import skills
const discover = require('./skills/discover');
const post = require('./skills/post');
const monitor = require('./skills/monitor');
const report = require('./skills/report');
const PORT = 9801;
const AGENT_NAME = 'moveon-agent';
const { app, start, scheduler } = createAgentServer({
name: AGENT_NAME,
port: PORT,
skills: {
discover,
post,
monitor,
report,
},
cronJobs: [
{
name: 'monitor-petitions',
schedule: '0 */2 * * *', // every 2 hours
fn: async () => {
console.log(`[${AGENT_NAME}] Cron: monitoring petitions...`);
try {
const result = await monitor({ check_all: true });
console.log(`[${AGENT_NAME}] Cron monitor complete: ${result.tracked} petitions tracked`);
} catch (err) {
console.error(`[${AGENT_NAME}] Cron monitor error:`, err.message);
}
},
},
{
name: 'report-to-pulse',
schedule: '30 */6 * * *', // every 6 hours at :30
fn: async () => {
console.log(`[${AGENT_NAME}] Cron: reporting to Pulse...`);
try {
const result = await report({ hours_back: 6 });
console.log(`[${AGENT_NAME}] Cron report complete`);
} catch (err) {
console.error(`[${AGENT_NAME}] Cron report error:`, err.message);
}
},
},
{
name: 'discover-new',
schedule: '0 8,14,20 * * *', // 3x/day at 8am, 2pm, 8pm
fn: async () => {
console.log(`[${AGENT_NAME}] Cron: discovering new petitions...`);
try {
const queries = ['nonprofit advocacy', 'civic engagement', 'education policy reform'];
const randomQuery = queries[Math.floor(Math.random() * queries.length)];
const result = await discover({ query: randomQuery, max_results: 5 });
console.log(`[${AGENT_NAME}] Cron discover complete: ${result.count} petitions found for "${randomQuery}"`);
} catch (err) {
console.error(`[${AGENT_NAME}] Cron discover error:`, err.message);
}
},
},
],
});
start();