prompt-version-manager
Version:
Centralized prompt management system for Human Behavior AI agents
123 lines • 5.1 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const express_1 = __importDefault(require("express"));
const path = __importStar(require("path"));
const fs = __importStar(require("fs/promises"));
const app = (0, express_1.default)();
const port = process.env.DASHBOARD_PORT || 3000;
// Serve static files
app.use(express_1.default.static(path.join(__dirname)));
// API endpoints
app.get('/api/dashboard', async (_req, res) => {
try {
// Read analytics data
const analyticsPath = process.env.ANALYTICS_EXPORT_PATH || './analytics-reports';
let totalRuns = 0;
let successfulRuns = 0;
let totalCost = 0;
let totalTokens = 0;
const costHistory = { labels: [], data: [] };
const providerTokens = {};
try {
const files = await fs.readdir(analyticsPath);
const analyticsFiles = files.filter(f => f.startsWith('market-research-analytics-'));
for (const file of analyticsFiles.slice(-10)) {
const content = await fs.readFile(path.join(analyticsPath, file), 'utf-8');
const data = JSON.parse(content);
totalRuns++;
if (data.pipelineMetrics?.successfulSteps === data.pipelineMetrics?.totalSteps) {
successfulRuns++;
}
const runCost = data.pipelineMetrics?.totalCost || 0;
totalCost += runCost;
totalTokens += data.pipelineMetrics?.totalTokens?.total || 0;
costHistory.labels.push(`Run ${totalRuns}`);
costHistory.data.push(runCost);
// Aggregate provider tokens
if (data.pipelineMetrics?.providerBreakdown) {
for (const [provider, stats] of Object.entries(data.pipelineMetrics.providerBreakdown)) {
providerTokens[provider] = (providerTokens[provider] || 0) + stats.tokens.total;
}
}
}
}
catch (error) {
console.error('Failed to read analytics data:', error);
}
// Calculate metrics
const successRate = totalRuns > 0 ? (successfulRuns / totalRuns) * 100 : 0;
const avgCost = totalRuns > 0 ? totalCost / totalRuns : 0;
const totalProviderTokens = Object.values(providerTokens).reduce((a, b) => a + b, 0) || 1;
const providerDistribution = {
labels: Object.keys(providerTokens),
data: Object.values(providerTokens).map(t => Math.round((t / totalProviderTokens) * 100))
};
res.json({
metrics: {
totalRuns,
successRate,
avgCost,
totalTokens,
costHistory,
tokenUsage: {
labels: Object.keys(providerTokens),
data: Object.values(providerTokens)
},
providerDistribution
}
});
}
catch (error) {
res.status(500).json({ error: 'Failed to fetch dashboard data' });
}
});
// Simple health check
app.get('/api/health', (_req, res) => {
res.json({ status: 'ok', timestamp: new Date().toISOString() });
});
// Serve the dashboard HTML
app.get('/', (_req, res) => {
res.sendFile(path.join(__dirname, 'minimal-dashboard.html'));
});
// Start server
app.listen(port, () => {
console.log(`Dashboard server running at http://localhost:${port}`);
console.log('Press Ctrl+C to stop');
});
//# sourceMappingURL=simple-dashboard-server.js.map