baselineos 0.2.0-beta.1
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/LICENSE +17 -0
- package/README.md +198 -0
- package/dist/__evals__/runner.d.ts +2 -0
- package/dist/__evals__/runner.js +14687 -0
- package/dist/__evals__/runner.js.map +1 -0
- package/dist/api/server.d.ts +21 -0
- package/dist/api/server.js +1007 -0
- package/dist/api/server.js.map +1 -0
- package/dist/cli/bin.d.ts +1 -0
- package/dist/cli/bin.js +8427 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/core/agent-bus.d.ts +110 -0
- package/dist/core/agent-bus.js +242 -0
- package/dist/core/agent-bus.js.map +1 -0
- package/dist/core/cache.d.ts +66 -0
- package/dist/core/cache.js +160 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/config.d.ts +1002 -0
- package/dist/core/config.js +429 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/indexer.d.ts +152 -0
- package/dist/core/indexer.js +481 -0
- package/dist/core/indexer.js.map +1 -0
- package/dist/core/llm-tracer.d.ts +2 -0
- package/dist/core/llm-tracer.js +241 -0
- package/dist/core/llm-tracer.js.map +1 -0
- package/dist/core/memory.d.ts +86 -0
- package/dist/core/memory.js +346 -0
- package/dist/core/memory.js.map +1 -0
- package/dist/core/opa-client.d.ts +51 -0
- package/dist/core/opa-client.js +157 -0
- package/dist/core/opa-client.js.map +1 -0
- package/dist/core/opa-policy-gate.d.ts +133 -0
- package/dist/core/opa-policy-gate.js +454 -0
- package/dist/core/opa-policy-gate.js.map +1 -0
- package/dist/core/orchestrator.d.ts +14 -0
- package/dist/core/orchestrator.js +1297 -0
- package/dist/core/orchestrator.js.map +1 -0
- package/dist/core/pii-detector.d.ts +82 -0
- package/dist/core/pii-detector.js +126 -0
- package/dist/core/pii-detector.js.map +1 -0
- package/dist/core/rag-engine.d.ts +121 -0
- package/dist/core/rag-engine.js +504 -0
- package/dist/core/rag-engine.js.map +1 -0
- package/dist/core/task-queue.d.ts +69 -0
- package/dist/core/task-queue.js +124 -0
- package/dist/core/task-queue.js.map +1 -0
- package/dist/core/telemetry.d.ts +56 -0
- package/dist/core/telemetry.js +94 -0
- package/dist/core/telemetry.js.map +1 -0
- package/dist/core/types.d.ts +328 -0
- package/dist/core/types.js +24 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.js +12444 -0
- package/dist/index.js.map +1 -0
- package/dist/llm-tracer-CIIujuO-.d.ts +493 -0
- package/dist/mcp/server.d.ts +2651 -0
- package/dist/mcp/server.js +676 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/orchestrator-DF89k_AK.d.ts +506 -0
- package/package.json +157 -0
- package/templates/README.md +7 -0
- package/templates/baseline.config.ts +207 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/core/telemetry.ts","../../src/api/server.ts"],"names":["context"],"mappings":"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","file":"server.js","sourcesContent":["/**\n * BaselineOS OpenTelemetry — SIGNAL-012\n *\n * Distributed tracing for the multi-agent orchestration layer.\n * Initializes the OTel Node SDK and exports a shared tracer.\n *\n * Spans emitted:\n * task.execute root span per executeTask() call\n * task.policy.pre OPA pre-execution gate\n * task.policy.post OPA post-execution gate\n * task.perform performExecution() step loop\n * task.self_verify selfVerify() LLM call\n * task.review conductReview() LLM call\n *\n * Trace context is propagated through AgentBus messages via the\n * optional `traceContext` field (W3C traceparent format).\n *\n * Configuration:\n * OTEL_EXPORTER_OTLP_ENDPOINT OTLP HTTP collector (default: http://localhost:4318)\n * OTEL_SERVICE_NAME service name override (default: baselineos)\n * BASELINE_OTEL_DISABLED set to '1' to disable entirely (e.g. in tests)\n *\n * @license Apache-2.0\n */\n\nimport { NodeSDK } from '@opentelemetry/sdk-node';\nimport { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';\nimport { resourceFromAttributes } from '@opentelemetry/resources';\nimport { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';\nimport { trace, context, propagation, SpanStatusCode, SpanKind } from '@opentelemetry/api';\nimport type { Span, Tracer, Context } from '@opentelemetry/api';\n\nexport { SpanStatusCode, SpanKind };\nexport type { Span, Tracer, Context };\n\n// ─── SDK init ────────────────────────────────────────────────────────────────\n\nlet _sdk: NodeSDK | null = null;\n\n/**\n * Initialize the OTel SDK. Safe to call multiple times — subsequent calls\n * are no-ops. Should be called once at process startup before any spans.\n *\n * Silently disabled when BASELINE_OTEL_DISABLED=1.\n */\nexport function initTelemetry(): void {\n if (_sdk || process.env['BASELINE_OTEL_DISABLED'] === '1') return;\n\n const endpoint =\n process.env['OTEL_EXPORTER_OTLP_ENDPOINT'] ?? 'http://localhost:4318';\n\n const exporter = new OTLPTraceExporter({\n url: `${endpoint}/v1/traces`,\n });\n\n _sdk = new NodeSDK({\n resource: resourceFromAttributes({\n [ATTR_SERVICE_NAME]: process.env['OTEL_SERVICE_NAME'] ?? 'baselineos',\n [ATTR_SERVICE_VERSION]: '0.2.0-beta.1',\n }),\n traceExporter: exporter,\n // W3C traceparent propagation is the default — no explicit config needed\n });\n\n _sdk.start();\n\n process.on('SIGTERM', () => { _sdk?.shutdown().catch(() => {}); });\n process.on('SIGINT', () => { _sdk?.shutdown().catch(() => {}); });\n}\n\n/** Gracefully shut down the SDK and flush pending spans. */\nexport async function shutdownTelemetry(): Promise<void> {\n await _sdk?.shutdown();\n _sdk = null;\n}\n\n// ─── Tracer ───────────────────────────────────────────────────────────────────\n\nexport const tracer: Tracer = new Proxy({} as Tracer, {\n get(_target, prop) {\n return trace.getTracer('baselineos', '0.2.0-beta.1')[prop as keyof Tracer];\n },\n});\n\n// ─── Trace context helpers ───────────────────────────────────────────────────\n\n/**\n * Serialize the active W3C trace context to a string for propagation\n * through AgentBus messages.\n * Returns undefined when there is no active span.\n */\nexport function extractTraceContext(): string | undefined {\n const carrier: Record<string, string> = {};\n propagation.inject(context.active(), carrier);\n return carrier['traceparent'];\n}\n\n/**\n * Restore a serialized trace context as the active context.\n * Use as the second argument to `context.with()` before creating child spans.\n */\nexport function injectTraceContext(traceparent: string): Context {\n const carrier: Record<string, string> = { traceparent };\n return propagation.extract(context.active(), carrier);\n}\n\n// ─── Span wrapper ─────────────────────────────────────────────────────────────\n\n/**\n * Run an async function inside a named span.\n * Sets ERROR status and records exception on throw.\n */\nexport async function withSpan<T>(\n name: string,\n attributes: Record<string, string | number | boolean>,\n fn: (span: Span) => Promise<T>,\n): Promise<T> {\n return tracer.startActiveSpan(name, { kind: SpanKind.INTERNAL, attributes }, async (span) => {\n try {\n const result = await fn(span);\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (err) {\n span.recordException(err as Error);\n span.setStatus({ code: SpanStatusCode.ERROR, message: (err as Error).message });\n throw err;\n } finally {\n span.end();\n }\n });\n}\n","/**\n * BaselineOS API Server\n * \n * REST API and WebSocket for programmatic access.\n * \n * @license Apache-2.0\n */\n\nimport express, { Express, Request, Response, NextFunction } from 'express';\nimport { WebSocketServer, WebSocket } from 'ws';\nimport { createServer, Server } from 'http';\nimport { initTelemetry, extractTraceContext } from '../core/telemetry.js';\n\nimport type { Baseline } from '../index.js';\nimport type { TaskInput, TaskStatus, OrchestratorEvent } from '../core/types.js';\nimport type { Overlay, ContextLevel, PolicyFilter, RetrievalBudget } from '../core/indexer.js';\nimport type { RetrieveOptions } from '../core/memory.js';\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\ninterface APIServerConfig {\n port: number;\n allowedOrigins?: string[];\n}\n\ntype SocketMessage = { type: 'subscribe'; taskId?: string } | { type: 'ping' };\n\nconst TASK_STATUSES: TaskStatus[] = [\n 'pending',\n 'planning',\n 'executing',\n 'verifying',\n 'reviewing',\n 'correcting',\n 'completed',\n 'failed',\n 'blocked',\n];\n\nconst CONTEXT_LEVELS: ContextLevel[] = ['oneliner', 'summary', 'working', 'full', 'expanded'];\nconst MEMORY_SCOPES: NonNullable<RetrieveOptions['scope']>[] = ['working', 'session', 'long-term', 'shared', 'all'];\n\nfunction parseTaskStatus(value: unknown): TaskStatus | undefined {\n return typeof value === 'string' && TASK_STATUSES.includes(value as TaskStatus)\n ? (value as TaskStatus)\n : undefined;\n}\n\nfunction parseContextLevel(value: unknown): ContextLevel {\n if (typeof value === 'string' && CONTEXT_LEVELS.includes(value as ContextLevel)) {\n return value as ContextLevel;\n }\n return 'working';\n}\n\nfunction parseScope(value: unknown): RetrieveOptions['scope'] | undefined {\n if (typeof value === 'string' && MEMORY_SCOPES.includes(value as NonNullable<RetrieveOptions['scope']>)) {\n return value as RetrieveOptions['scope'];\n }\n return undefined;\n}\n\nfunction parseJson(value?: string): unknown {\n if (!value) return undefined;\n try {\n return JSON.parse(value) as unknown;\n } catch {\n return undefined;\n }\n}\n\nfunction parsePolicy(value: unknown): PolicyFilter | undefined {\n if (!value || typeof value !== 'object') return undefined;\n return value as PolicyFilter;\n}\n\nfunction parseBudget(value: unknown): RetrievalBudget | undefined {\n if (!value || typeof value !== 'object') return undefined;\n return value as RetrievalBudget;\n}\n\nfunction parseSocketMessage(value: unknown): SocketMessage | null {\n if (!value || typeof value !== 'object') return null;\n const message = value as Record<string, unknown>;\n if (message.type === 'ping') return { type: 'ping' };\n if (message.type === 'subscribe') {\n return {\n type: 'subscribe',\n taskId: typeof message.taskId === 'string' ? message.taskId : undefined,\n };\n }\n return null;\n}\n\n// ─── API Server ──────────────────────────────────────────────────────────────\n\nexport class APIServer {\n private app: Express;\n private server: Server;\n private wss: WebSocketServer;\n private baseline: Baseline;\n private config: APIServerConfig;\n private clients: Set<WebSocket>;\n private unsubscribeEvents: Array<() => void>;\n\n // ── Prometheus counters (in-process, reset on restart) ──────────────────\n private metricsCounters = {\n requestsTotal: new Map<string, number>(), // label: \"method_path_status\"\n requestDurationMs: new Map<string, number[]>(), // label: \"method\"\n tasksTotal: new Map<string, number>(), // label: task status\n tokensByAgentRole: new Map<string, number>(), // label: agent role (SIGNAL-013)\n wsConnections: 0,\n wsMessagesTotal: 0,\n serverStartTime: Date.now(),\n /** Running ratio of autonomous tasks that passed self-verification (SIGNAL-046) */\n autonomousAccuracy: 1.0,\n autonomousTotal: 0,\n autonomousPassed: 0,\n };\n\n /** Optional CostGuard for per-tenant cost metrics (SIGNAL-052) */\n private costGuard?: import('../core/cost-guard.js').CostGuard;\n /** Optional TraceCurator for dataset size gauge (SIGNAL-049) */\n private traceCurator?: import('../core/trace-curator.js').TraceCurator;\n /** Optional ModelVersionRegistry for active model version gauge (SIGNAL-049) */\n private modelVersionRegistry?: import('../core/model-version-registry.js').ModelVersionRegistry;\n /** Optional ProductionEvalPipeline for latest eval score gauge (SIGNAL-056) */\n private productionEvalPipeline?: import('../core/production-eval-pipeline.js').ProductionEvalPipeline;\n /** Optional DriftDetector for model drift metrics (SIGNAL-071) */\n private driftDetector?: import('../core/drift-detector.js').DriftDetector;\n /** Optional OPAPolicyGate for SLO-6 latency metrics */\n private opaPolicyGate?: import('../core/opa-policy-gate.js').OPAPolicyGate;\n\n constructor(baseline: Baseline, config: APIServerConfig) {\n this.baseline = baseline;\n this.config = config;\n this.clients = new Set();\n this.unsubscribeEvents = [];\n\n // Initialize OTel SDK (no-op when BASELINE_OTEL_DISABLED=1 or already initialized)\n initTelemetry();\n\n this.app = express();\n this.server = createServer(this.app);\n this.wss = new WebSocketServer({ server: this.server, path: '/api/stream' });\n this.wss.on('error', (error) => {\n const code = (error as NodeJS.ErrnoException)?.code;\n if (code !== 'EADDRINUSE') {\n console.error('[WS Error]', error);\n }\n });\n\n this.setupMiddleware();\n this.setupRoutes();\n this.setupWebSocket();\n this.attachEventBridge();\n }\n\n // ─── Setup ─────────────────────────────────────────────────────────────────\n\n private setupMiddleware(): void {\n this.app.use(express.json());\n \n // CORS\n const allowedOrigins = this.config.allowedOrigins ?? ['http://localhost:3000', 'http://localhost:3141', 'http://localhost:5173', 'tauri://localhost'];\n this.app.use((req, res, next) => {\n const origin = req.headers.origin;\n if (origin && allowedOrigins.includes(origin)) {\n res.header('Access-Control-Allow-Origin', origin);\n }\n res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');\n res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');\n if (req.method === 'OPTIONS') {\n return res.sendStatus(200);\n }\n next();\n });\n\n // Propagate active OTel trace context in response headers (SIGNAL-012)\n this.app.use((_req, res, next) => {\n const traceparent = extractTraceContext();\n if (traceparent) res.setHeader('traceparent', traceparent);\n next();\n });\n\n // Request logging + metrics collection\n this.app.use((req, res, next) => {\n const start = Date.now();\n res.on('finish', () => {\n const duration = Date.now() - start;\n console.log(`[API] ${req.method} ${req.path} ${res.statusCode} ${duration}ms`);\n\n // Skip /metrics endpoint itself to avoid self-referential noise\n if (req.path !== '/metrics') {\n const reqKey = `${req.method}_${res.statusCode}`;\n this.metricsCounters.requestsTotal.set(\n reqKey,\n (this.metricsCounters.requestsTotal.get(reqKey) ?? 0) + 1\n );\n const durKey = req.method;\n const existing = this.metricsCounters.requestDurationMs.get(durKey) ?? [];\n existing.push(duration);\n if (existing.length > 1000) existing.shift(); // cap sliding window\n this.metricsCounters.requestDurationMs.set(durKey, existing);\n }\n });\n next();\n });\n }\n\n private setupRoutes(): void {\n // Health check — lightweight liveness probe\n this.app.get('/api/health', (req, res) => {\n res.json({ status: 'ok', version: '0.2.0-beta.1', timestamp: new Date().toISOString() });\n });\n\n // Readiness check — verifies core system is initialized\n this.app.get('/api/ready', (req, res) => {\n const ready = !!this.baseline;\n res.status(ready ? 200 : 503).json({\n ready,\n timestamp: new Date().toISOString(),\n });\n });\n\n // Tasks\n this.app.post('/api/tasks', this.createTask.bind(this));\n this.app.get('/api/tasks', this.listTasks.bind(this));\n this.app.get('/api/tasks/:id', this.getTask.bind(this));\n this.app.delete('/api/tasks/:id', this.cancelTask.bind(this));\n this.app.post('/api/tasks/:id/approve', this.approveTask.bind(this));\n this.app.get('/api/tasks/:id/artifacts', this.getTaskArtifacts.bind(this));\n this.app.get('/api/tasks/:id/audit', this.getTaskAudit.bind(this));\n this.app.get('/api/tasks/:id/evidence', this.getTaskEvidence.bind(this));\n this.app.get('/api/workflows', this.listWorkflows.bind(this));\n this.app.post('/api/workflows/:id/run', this.runWorkflow.bind(this));\n this.app.get('/api/checkpoints/:id', this.getCheckpoint.bind(this));\n this.app.post('/api/checkpoints/:id/recover', this.recoverCheckpoint.bind(this));\n\n // Agents\n this.app.get('/api/agents', this.listAgents.bind(this));\n\n // Knowledge\n this.app.post('/api/search', this.search.bind(this));\n this.app.get('/api/context/:subject', this.getContext.bind(this));\n this.app.post('/api/index', this.indexKnowledge.bind(this));\n\n // Init & Scan (GA-07, GA-08)\n this.app.post('/api/init', this.initDeployment.bind(this));\n this.app.post('/api/scan', this.scanDeployment.bind(this));\n\n // Memory\n this.app.post('/api/memory', this.remember.bind(this));\n this.app.get('/api/memory/:key', this.recall.bind(this));\n\n // Stats\n this.app.get('/api/stats', this.getStats.bind(this));\n\n // Prometheus metrics endpoint (SIGNAL-005)\n this.app.get('/metrics', this.getMetrics.bind(this));\n\n // Error handler\n this.app.use(this.errorHandler.bind(this));\n }\n\n private setupWebSocket(): void {\n this.wss.on('connection', (ws) => {\n this.clients.add(ws);\n console.log('[WS] Client connected');\n \n this.metricsCounters.wsConnections++;\n ws.on('close', () => {\n this.clients.delete(ws);\n console.log('[WS] Client disconnected');\n });\n\n ws.on('message', async (data) => {\n try {\n const message = JSON.parse(data.toString());\n await this.handleWebSocketMessage(ws, message);\n } catch {\n ws.send(JSON.stringify({ error: 'Invalid message' }));\n }\n });\n\n // Send welcome\n ws.send(JSON.stringify({ \n type: 'connected', \n timestamp: Date.now(),\n message: 'Connected to BaselineOS',\n }));\n });\n }\n\n private attachEventBridge(): void {\n const events: Array<import('../core/types.js').OrchestratorEvent['type']> = [\n 'task:created',\n 'task:decomposed',\n 'task:assigned',\n 'task:started',\n 'task:checkpoint',\n 'task:verified',\n 'task:review-requested',\n 'task:reviewed',\n 'task:correction-needed',\n 'task:corrected',\n 'task:completed',\n 'task:failed',\n 'task:blocked',\n 'task:approved',\n 'agent:status-changed',\n 'agent:trust-updated',\n 'escalation',\n ];\n\n for (const event of events) {\n const unsubscribe = this.baseline.onEvent(event, (payload: Extract<OrchestratorEvent, { type: typeof event }>) => {\n this.broadcast({ ...payload, timestamp: Date.now() });\n\n // Track task lifecycle metrics\n if (event === 'task:completed' || event === 'task:failed') {\n const status = event === 'task:completed' ? 'completed' : 'failed';\n this.metricsCounters.tasksTotal.set(\n status,\n (this.metricsCounters.tasksTotal.get(status) ?? 0) + 1\n );\n\n // Per-agent-role token tracking (SIGNAL-013)\n if (event === 'task:completed') {\n const completedPayload = payload as Extract<OrchestratorEvent, { type: 'task:completed' }>;\n const tokens = completedPayload.task.actualTokens ?? 0;\n if (tokens > 0 && completedPayload.task.assignedAgent) {\n const agents = this.baseline.listAgents();\n const agent = agents.find(a => a.id === completedPayload.task.assignedAgent);\n const role = agent?.role ?? 'unknown';\n this.metricsCounters.tokensByAgentRole.set(\n role,\n (this.metricsCounters.tokensByAgentRole.get(role) ?? 0) + tokens\n );\n }\n\n // Autonomous accuracy tracking (SIGNAL-046):\n // A completion counts as \"autonomous\" when assignedAgent is set.\n // It counts as \"passed\" when verificationResults show no failures.\n const task = completedPayload.task;\n if (task.assignedAgent) {\n this.metricsCounters.autonomousTotal += 1;\n const hasFailure = task.verificationResults?.some((v) => !v.passed);\n if (!hasFailure) {\n this.metricsCounters.autonomousPassed += 1;\n }\n this.metricsCounters.autonomousAccuracy =\n this.metricsCounters.autonomousTotal > 0\n ? this.metricsCounters.autonomousPassed / this.metricsCounters.autonomousTotal\n : 1.0;\n }\n }\n }\n if (event === 'task:created') {\n this.metricsCounters.tasksTotal.set(\n 'created',\n (this.metricsCounters.tasksTotal.get('created') ?? 0) + 1\n );\n }\n });\n this.unsubscribeEvents.push(unsubscribe);\n }\n }\n\n // ─── Task Handlers ─────────────────────────────────────────────────────────\n\n private async createTask(req: Request, res: Response, next: NextFunction): Promise<void> {\n try {\n const acceptanceCriteriaInput = Array.isArray(req.body.acceptanceCriteria)\n ? (req.body.acceptanceCriteria as Array<{\n description?: string;\n type?: 'automated' | 'agent-review' | 'human-review';\n weight?: number;\n }>)\n : [];\n const acceptanceCriteria = acceptanceCriteriaInput\n .filter(item => typeof item?.description === 'string' && item.description.trim().length > 0)\n .map((item, index) => ({\n description: item.description?.trim() || `Criteria ${index + 1}`,\n type: item.type ?? 'automated',\n weight: typeof item.weight === 'number' ? item.weight : 1,\n }));\n const input: TaskInput = {\n title: req.body.title,\n description: req.body.description,\n priority: req.body.priority || 'medium',\n requiredCapabilities: Array.isArray(req.body.requiredCapabilities)\n ? req.body.requiredCapabilities\n : [],\n acceptanceCriteria,\n context: req.body.context && typeof req.body.context === 'object' ? req.body.context : {},\n };\n\n const handle = await this.baseline.run(input);\n\n // Broadcast to WebSocket clients\n this.broadcast({\n type: 'task:created',\n taskId: handle.id,\n title: input.title,\n timestamp: Date.now(),\n });\n\n // If blocking, wait for completion\n if (req.body.blocking) {\n const result = await handle.wait(req.body.timeout);\n res.json({ task: result });\n } else {\n res.status(201).json({ \n taskId: handle.id,\n status: handle.status,\n });\n }\n } catch (error) {\n next(error);\n }\n }\n\n private async listTasks(req: Request, res: Response, next: NextFunction): Promise<void> {\n try {\n const status = parseTaskStatus(req.query.status);\n const tasks = this.baseline.listTasks(status ? { status } : undefined);\n \n res.json({ \n tasks: tasks.map(t => ({\n id: t.id,\n title: t.title,\n status: t.status,\n priority: t.priority,\n complexity: t.complexity,\n createdAt: t.createdAt,\n completedAt: t.completedAt,\n })),\n });\n } catch (error) {\n next(error);\n }\n }\n\n private async getTask(req: Request, res: Response, next: NextFunction): Promise<void> {\n try {\n const task = this.baseline.getTask(req.params.id);\n \n if (!task) {\n res.status(404).json({ error: 'not_found', message: 'Task not found' });\n return;\n }\n\n res.json({ task });\n } catch (error) {\n next(error);\n }\n }\n\n private async cancelTask(req: Request, res: Response, next: NextFunction): Promise<void> {\n try {\n const cancelled = this.baseline.cancelTask(\n req.params.id,\n typeof req.body?.reason === 'string' ? req.body.reason : undefined\n );\n if (!cancelled) {\n res.status(404).json({ error: 'not_found', message: 'Task not found or not cancellable' });\n return;\n }\n res.json({ cancelled: true });\n } catch (error) {\n next(error);\n }\n }\n\n private async approveTask(req: Request, res: Response, next: NextFunction): Promise<void> {\n try {\n const approvedBy = typeof req.body?.approvedBy === 'string' ? req.body.approvedBy : 'human';\n const approvalToken = typeof req.body?.approvalToken === 'string' ? req.body.approvalToken : undefined;\n const task = await this.baseline.approveTask(req.params.id, approvedBy, approvalToken);\n res.json({ task });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (message.includes('not found')) {\n res.status(404).json({ error: 'not_found', message });\n } else if (message.includes('not blocked')) {\n res.status(409).json({ error: 'conflict', message });\n } else if (message.includes('token') || message.includes('expired')) {\n res.status(403).json({ error: 'forbidden', message });\n } else {\n next(error);\n }\n }\n }\n\n private async getTaskArtifacts(req: Request, res: Response, next: NextFunction): Promise<void> {\n try {\n const task = this.baseline.getTask(req.params.id);\n \n if (!task) {\n res.status(404).json({ error: 'not_found', message: 'Task not found' });\n return;\n }\n\n res.json({ artifacts: task.artifacts });\n } catch (error) {\n next(error);\n }\n }\n\n private async getTaskAudit(req: Request, res: Response, next: NextFunction): Promise<void> {\n try {\n const taskId = req.params.id;\n const audit = this.baseline.getAuditTrail(taskId);\n res.json({ taskId, audit });\n } catch (error) {\n next(error);\n }\n }\n\n private async getTaskEvidence(req: Request, res: Response, next: NextFunction): Promise<void> {\n try {\n const taskId = req.params.id;\n const bundle = this.baseline.getEvidenceBundle(taskId);\n if (!bundle.task) {\n res.status(404).json({ error: 'not_found', message: 'Task not found' });\n return;\n }\n res.json({ taskId, bundle });\n } catch (error) {\n next(error);\n }\n }\n\n private async listWorkflows(req: Request, res: Response, next: NextFunction): Promise<void> {\n try {\n const workflows = this.baseline.listWorkflows();\n res.json({ workflows });\n } catch (error) {\n next(error);\n }\n }\n\n private async runWorkflow(req: Request, res: Response, next: NextFunction): Promise<void> {\n try {\n const handle = await this.baseline.runWorkflow(req.params.id, {\n title: req.body.title,\n description: req.body.description,\n priority: req.body.priority,\n requiredCapabilities: Array.isArray(req.body.requiredCapabilities)\n ? req.body.requiredCapabilities\n : undefined,\n acceptanceCriteria: Array.isArray(req.body.acceptanceCriteria)\n ? req.body.acceptanceCriteria\n : undefined,\n context: req.body.context && typeof req.body.context === 'object' ? req.body.context : undefined,\n });\n\n if (req.body.blocking) {\n const result = await handle.wait(req.body.timeout);\n res.json({ task: result });\n } else {\n res.status(201).json({ taskId: handle.id, status: handle.status });\n }\n } catch (error) {\n next(error);\n }\n }\n\n private async getCheckpoint(req: Request, res: Response, next: NextFunction): Promise<void> {\n try {\n const checkpoint = this.baseline.loadCheckpoint(req.params.id);\n if (!checkpoint) {\n res.status(404).json({ error: 'not_found', message: 'Checkpoint not found' });\n return;\n }\n res.json({ checkpoint });\n } catch (error) {\n next(error);\n }\n }\n\n private async recoverCheckpoint(req: Request, res: Response, next: NextFunction): Promise<void> {\n try {\n const task = this.baseline.recoverTaskFromCheckpoint(req.params.id);\n if (!task) {\n res.status(404).json({ error: 'not_found', message: 'Checkpoint not found' });\n return;\n }\n res.json({ task });\n } catch (error) {\n next(error);\n }\n }\n\n // ─── Agent Handlers ────────────────────────────────────────────────────────\n\n private async listAgents(req: Request, res: Response, next: NextFunction): Promise<void> {\n try {\n const agents = this.baseline.listAgents();\n res.json({ agents });\n } catch (error) {\n next(error);\n }\n }\n\n // ─── Knowledge Handlers ────────────────────────────────────────────────────\n\n private async search(req: Request, res: Response, next: NextFunction): Promise<void> {\n try {\n const policy = req.body.policy && typeof req.body.policy === 'object'\n ? req.body.policy\n : undefined;\n const results = await this.baseline.search(req.body.query, {\n limit: req.body.limit,\n policy,\n });\n res.json({ results });\n } catch (error) {\n next(error);\n }\n }\n\n private async getContext(req: Request, res: Response, next: NextFunction): Promise<void> {\n try {\n const level = parseContextLevel(req.query.level);\n const policy = parsePolicy(parseJson(req.query.policy ? String(req.query.policy) : undefined));\n const overlayOrder = req.query.overlayOrder\n ? String(req.query.overlayOrder)\n .split(',')\n .map(v => v.trim())\n .filter((v): v is Overlay => v === 'org' || v === 'repo' || v === 'public')\n : undefined;\n const budget = parseBudget(parseJson(req.query.budget ? String(req.query.budget) : undefined));\n const context = await this.baseline.getContext(req.params.subject, level, {\n policy,\n overlayOrder,\n budget,\n });\n \n if (!context) {\n res.status(404).json({ error: 'not_found', message: 'Context not found' });\n return;\n }\n\n res.json({ context });\n } catch (error) {\n next(error);\n }\n }\n\n private async indexKnowledge(req: Request, res: Response, next: NextFunction): Promise<void> {\n try {\n const result = await this.baseline.index({ full: req.body.full });\n res.json({ \n indexed: result.indexed, \n errors: result.errors,\n skipped: result.skipped,\n changed: result.changed,\n removed: result.removed,\n message: `Indexed ${result.indexed} documents`,\n });\n } catch (error) {\n next(error);\n }\n }\n\n // ─── Init & Scan Handlers (GA-07, GA-08) ───────────────────────────────────\n\n private async initDeployment(req: Request, res: Response, next: NextFunction): Promise<void> {\n try {\n const contextPath = req.body.contextPath || process.cwd();\n const scan = await this.scanPath(contextPath);\n const result = await this.baseline.index({ full: false });\n res.json({\n initialized: true,\n contextPath,\n detected: scan,\n indexed: result.indexed,\n message: `Baseline initialized for ${contextPath}`,\n });\n } catch (error) {\n next(error);\n }\n }\n\n private async scanDeployment(req: Request, res: Response, next: NextFunction): Promise<void> {\n try {\n const contextPath = req.body.contextPath || process.cwd();\n const detected = await this.scanPath(contextPath);\n res.json({ contextPath, detected });\n } catch (error) {\n next(error);\n }\n }\n\n private async scanPath(contextPath: string): Promise<Record<string, unknown>> {\n const detected: Record<string, unknown> = {};\n try {\n const { existsSync, readFileSync } = await import('fs');\n const { join } = await import('path');\n const pkgPath = join(contextPath, 'package.json');\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));\n const allDeps = { ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}) };\n if (allDeps['@anthropic-ai/sdk']) detected.provider = 'anthropic';\n else if (allDeps['openai']) detected.provider = 'openai';\n if (allDeps['langchain'] || allDeps['@langchain/core']) detected.framework = 'langchain';\n if (allDeps['@modelcontextprotocol/sdk']) detected.mcp = true;\n if (allDeps['bullmq'] || allDeps['@temporalio/client']) detected.orchestration = true;\n detected.runtime = 'node';\n detected.name = pkg.name;\n }\n const pyReq = join(contextPath, 'requirements.txt');\n if (existsSync(pyReq)) {\n const reqs = readFileSync(pyReq, 'utf8');\n if (reqs.includes('anthropic')) detected.provider = 'anthropic';\n else if (reqs.includes('openai')) detected.provider = 'openai';\n if (reqs.includes('langchain')) detected.framework = 'langchain';\n detected.runtime = 'python';\n }\n } catch {\n // Scan is best-effort\n }\n return detected;\n }\n\n // ─── Memory Handlers ───────────────────────────────────────────────────────\n\n private async remember(req: Request, res: Response, next: NextFunction): Promise<void> {\n try {\n await this.baseline.remember(req.body.key, req.body.value, {\n scope: req.body.scope,\n sessionId: req.body.sessionId,\n taskId: req.body.taskId,\n repo: req.body.repo,\n persona: req.body.persona,\n ttl: req.body.ttl,\n tags: Array.isArray(req.body.tags) ? req.body.tags : undefined,\n });\n res.json({ stored: true });\n } catch (error) {\n next(error);\n }\n }\n\n private async recall(req: Request, res: Response, next: NextFunction): Promise<void> {\n try {\n const scope = parseScope(req.query.scope);\n const sessionId = req.query.sessionId ? String(req.query.sessionId) : undefined;\n const taskId = req.query.taskId ? String(req.query.taskId) : undefined;\n const repo = req.query.repo ? String(req.query.repo) : undefined;\n const persona = req.query.persona ? String(req.query.persona) : undefined;\n const value = await this.baseline.recall(req.params.key, {\n scope,\n sessionId,\n taskId,\n repo,\n persona,\n });\n \n if (value === undefined) {\n res.status(404).json({ error: 'not_found', message: 'Key not found' });\n return;\n }\n\n res.json({ value });\n } catch (error) {\n next(error);\n }\n }\n\n // ─── Stats Handler ─────────────────────────────────────────────────────────\n\n private async getStats(req: Request, res: Response, next: NextFunction): Promise<void> {\n try {\n const stats = this.baseline.getStats();\n res.json(stats);\n } catch (error) {\n next(error);\n }\n }\n\n // ─── Prometheus Metrics (SIGNAL-005) ───────────────────────────────────────\n\n private async getMetrics(req: Request, res: Response, next: NextFunction): Promise<void> {\n try {\n const stats = this.baseline.getStats();\n const lines: string[] = [];\n\n const gauge = (name: string, help: string, value: number, labels?: string) => {\n lines.push(`# HELP ${name} ${help}`);\n lines.push(`# TYPE ${name} gauge`);\n lines.push(labels ? `${name}{${labels}} ${value}` : `${name} ${value}`);\n };\n\n const counter = (name: string, help: string, value: number, labels?: string) => {\n lines.push(`# HELP ${name} ${help}`);\n lines.push(`# TYPE ${name} counter`);\n lines.push(labels ? `${name}{${labels}} ${value}` : `${name} ${value}`);\n };\n\n // ── Uptime ──────────────────────────────────────────────────────────\n gauge('baseline_uptime_seconds', 'Seconds since API server started',\n Math.round((Date.now() - this.metricsCounters.serverStartTime) / 1000));\n\n // ── Tasks ───────────────────────────────────────────────────────────\n const tasks = this.baseline.listTasks();\n const tasksByStatus = tasks.reduce((acc, t) => {\n acc[t.status] = (acc[t.status] ?? 0) + 1;\n return acc;\n }, {} as Record<string, number>);\n\n lines.push('# HELP baseline_tasks_active Current tasks by status');\n lines.push('# TYPE baseline_tasks_active gauge');\n for (const [status, count] of Object.entries(tasksByStatus)) {\n lines.push(`baseline_tasks_active{status=\"${status}\"} ${count}`);\n }\n\n lines.push('# HELP baseline_tasks_total Cumulative tasks by terminal status');\n lines.push('# TYPE baseline_tasks_total counter');\n for (const [status, count] of this.metricsCounters.tasksTotal) {\n lines.push(`baseline_tasks_total{status=\"${status}\"} ${count}`);\n }\n\n // ── Agents ──────────────────────────────────────────────────────────\n const agentStats = stats.orchestrator;\n gauge('baseline_agents_total', 'Total registered agents', agentStats.agents?.total ?? 0);\n gauge('baseline_agents_active', 'Currently active agents',\n Object.values(agentStats.agents?.byRole ?? {}).reduce((a: number, b) => a + (b as number), 0));\n\n // ── Memory ──────────────────────────────────────────────────────────\n const memStats = stats.memory;\n const memTotal = (memStats.working ?? 0) + (memStats.session ?? 0) +\n (memStats.longTerm ?? 0) + (memStats.shared ?? 0);\n gauge('baseline_memory_entries', 'Total memory entries stored', memTotal);\n\n // ── Knowledge Indexer ───────────────────────────────────────────────\n const idxStats = stats.indexer;\n gauge('baseline_knowledge_documents', 'Documents indexed in knowledge base', idxStats.documents ?? 0);\n gauge('baseline_knowledge_compressions', 'Pre-computed compressions in index', idxStats.compressions ?? 0);\n\n // ── Cache ────────────────────────────────────────────────────────────\n const cacheStats = stats.cache;\n if (typeof cacheStats.hits === 'number') {\n counter('baseline_cache_hits_total', 'Total semantic cache hits', cacheStats.hits);\n counter('baseline_cache_misses_total', 'Total semantic cache misses', cacheStats.misses ?? 0);\n if (cacheStats.hits + (cacheStats.misses ?? 0) > 0) {\n gauge('baseline_cache_hit_rate', 'Cache hit rate (0–1)',\n cacheStats.hits / (cacheStats.hits + (cacheStats.misses ?? 0)));\n }\n }\n\n // ── HTTP requests ────────────────────────────────────────────────────\n lines.push('# HELP baseline_http_requests_total HTTP requests by method and status');\n lines.push('# TYPE baseline_http_requests_total counter');\n for (const [label, count] of this.metricsCounters.requestsTotal) {\n const [method, status] = label.split('_');\n lines.push(`baseline_http_requests_total{method=\"${method}\",status=\"${status}\"} ${count}`);\n }\n\n // p50 + p95 latency per method\n lines.push('# HELP baseline_http_request_duration_p50_ms HTTP request duration p50 in ms');\n lines.push('# TYPE baseline_http_request_duration_p50_ms gauge');\n lines.push('# HELP baseline_http_request_duration_p95_ms HTTP request duration p95 in ms');\n lines.push('# TYPE baseline_http_request_duration_p95_ms gauge');\n for (const [method, durations] of this.metricsCounters.requestDurationMs) {\n if (durations.length > 0) {\n const sorted = [...durations].sort((a, b) => a - b);\n const p50 = sorted[Math.floor(sorted.length * 0.5)];\n const p95 = sorted[Math.floor(sorted.length * 0.95)];\n lines.push(`baseline_http_request_duration_p50_ms{method=\"${method}\"} ${p50}`);\n lines.push(`baseline_http_request_duration_p95_ms{method=\"${method}\"} ${p95}`);\n }\n }\n\n // ── Per-agent-role token usage (SIGNAL-013) ──────────────────────────\n if (this.metricsCounters.tokensByAgentRole.size > 0) {\n lines.push('# HELP baseline_task_tokens_total Cumulative tokens used by agent role');\n lines.push('# TYPE baseline_task_tokens_total counter');\n for (const [role, tokens] of this.metricsCounters.tokensByAgentRole) {\n lines.push(`baseline_task_tokens_total{role=\"${role}\"} ${tokens}`);\n }\n }\n\n // ── WebSocket ────────────────────────────────────────────────────────\n gauge('baseline_ws_active_connections', 'Currently active WebSocket connections', this.clients.size);\n counter('baseline_ws_connections_total', 'Total WebSocket connections since start', this.metricsCounters.wsConnections);\n\n // ── Rollback & Autonomous Accuracy (SIGNAL-046) ──────────────────────\n const rollbackTotal = this.metricsCounters.tasksTotal.get('rolledback') ?? 0;\n counter('baseline_rollback_total', 'Cumulative rollbacks since start', rollbackTotal);\n gauge('baseline_autonomous_accuracy',\n 'Ratio of self-verified autonomous task completions to total autonomous completions (0–1)',\n this.metricsCounters.autonomousAccuracy);\n\n // ── Per-Tenant Cost (SIGNAL-052) ──────────────────────────────────────\n if (this.costGuard) {\n const tenantCosts = this.costGuard.getCostByTenant();\n if (tenantCosts.length > 0) {\n lines.push('# HELP baseline_tenant_cost_usd Estimated LLM cost in USD by tenant');\n lines.push('# TYPE baseline_tenant_cost_usd gauge');\n for (const tc of tenantCosts) {\n lines.push(`baseline_tenant_cost_usd{tenant_id=\"${tc.tenantId}\"} ${tc.totalCostUsd.toFixed(6)}`);\n }\n }\n }\n\n // ── Intelligence Loop (SIGNAL-049) ───────────────────────────────────\n if (this.traceCurator) {\n gauge('baseline_trace_curator_dataset_size',\n 'Number of ground-truth cases in the TraceCurator dataset',\n this.traceCurator.getDatasetSize());\n }\n if (this.modelVersionRegistry) {\n const activeProviders = this.modelVersionRegistry.listActiveProviders();\n if (activeProviders.length > 0) {\n lines.push('# HELP baseline_active_model_version Active model version per provider (info metric, value=1)');\n lines.push('# TYPE baseline_active_model_version gauge');\n for (const { provider, modelId } of activeProviders) {\n lines.push(`baseline_active_model_version{provider=\"${provider}\",model=\"${modelId}\"} 1`);\n }\n }\n }\n if (this.productionEvalPipeline) {\n const history = this.productionEvalPipeline.getHistory();\n if (history.length > 0) {\n // Emit latest score per model_id\n const latestByModel = new Map<string, number>();\n for (const entry of history) {\n latestByModel.set(entry.modelId, entry.score);\n }\n lines.push('# HELP baseline_eval_score_latest Latest production eval score per model (0-100)');\n lines.push('# TYPE baseline_eval_score_latest gauge');\n for (const [modelId, score] of latestByModel) {\n lines.push(`baseline_eval_score_latest{model_id=\"${modelId}\"} ${score}`);\n }\n }\n }\n\n // ── Model Drift (SIGNAL-071) ──────────────────────────────────────────\n if (this.driftDetector && this.productionEvalPipeline) {\n const history = this.productionEvalPipeline.getHistory();\n if (history.length >= 3) {\n const driftReport = this.driftDetector.check(history);\n const severityNum = driftReport.severity === 'critical' ? 2\n : driftReport.severity === 'warning' ? 1 : 0;\n gauge('baseline_model_drift_severity',\n 'Model quality drift severity: 0=none 1=warning 2=critical',\n severityNum);\n gauge('baseline_model_drift_delta',\n 'Score delta from rolling baseline (negative = regression)',\n driftReport.delta);\n gauge('baseline_model_drift_baseline_score',\n 'Rolling baseline score used for drift comparison',\n driftReport.baselineScore);\n gauge('baseline_model_drift_current_score',\n 'Current model eval score from latest run',\n driftReport.currentScore);\n counter('baseline_model_drift_samples_analyzed',\n 'Number of eval history entries analyzed for drift',\n driftReport.samplesAnalyzed);\n }\n }\n\n // ── OPA Policy Latency (SLO-6) ────────────────────────────────────────\n if (this.opaPolicyGate) {\n const opaMetrics = this.opaPolicyGate.getEvalMetrics();\n if (opaMetrics.count > 0) {\n gauge('baseline_opa_evaluation_p50_ms', 'OPA policy evaluation p50 latency in ms', opaMetrics.p50Ms);\n gauge('baseline_opa_evaluation_p95_ms', 'OPA policy evaluation p95 latency in ms', opaMetrics.p95Ms);\n gauge('baseline_opa_evaluation_p99_ms', 'OPA policy evaluation p99 latency in ms (SLO-6 target: < 500ms)', opaMetrics.p99Ms);\n counter('baseline_opa_evaluations_total', 'Total OPA policy evaluations', opaMetrics.count);\n }\n }\n\n // ── Governance ───────────────────────────────────────────────────────\n gauge('baseline_governance_required_approvals', 'Operations requiring human approval',\n stats.governance.requireApproval);\n gauge('baseline_governance_restricted_operations', 'Restricted operation count',\n stats.governance.restricted);\n\n res.set('Content-Type', 'text/plain; version=0.0.4; charset=utf-8');\n res.send(lines.join('\\n') + '\\n');\n } catch (error) {\n next(error);\n }\n }\n\n /** Inject a CostGuard instance for per-tenant cost metrics (SIGNAL-052). */\n setCostGuard(guard: import('../core/cost-guard.js').CostGuard): void {\n this.costGuard = guard;\n }\n\n /** Inject a TraceCurator for the dataset-size gauge (SIGNAL-049). */\n setTraceCurator(curator: import('../core/trace-curator.js').TraceCurator): void {\n this.traceCurator = curator;\n }\n\n /** Inject a ModelVersionRegistry for the active-model gauge (SIGNAL-049). */\n setModelVersionRegistry(registry: import('../core/model-version-registry.js').ModelVersionRegistry): void {\n this.modelVersionRegistry = registry;\n }\n\n /** Inject a ProductionEvalPipeline for the eval score gauge (SIGNAL-056). */\n setProductionEvalPipeline(pipeline: import('../core/production-eval-pipeline.js').ProductionEvalPipeline): void {\n this.productionEvalPipeline = pipeline;\n }\n\n /** Inject a DriftDetector for model drift metrics (SIGNAL-071). */\n setDriftDetector(detector: import('../core/drift-detector.js').DriftDetector): void {\n this.driftDetector = detector;\n }\n\n /** Inject an OPAPolicyGate for SLO-6 latency metrics. */\n setOPAPolicyGate(gate: import('../core/opa-policy-gate.js').OPAPolicyGate): void {\n this.opaPolicyGate = gate;\n }\n\n // ─── WebSocket ─────────────────────────────────────────────────────────────\n\n private async handleWebSocketMessage(ws: WebSocket, message: unknown): Promise<void> {\n const parsed = parseSocketMessage(message);\n if (!parsed) {\n ws.send(JSON.stringify({ error: 'Unknown message type' }));\n return;\n }\n\n switch (parsed.type) {\n case 'subscribe':\n // Subscribe to task updates\n ws.send(JSON.stringify({ type: 'subscribed', taskId: parsed.taskId }));\n break;\n\n case 'ping':\n ws.send(JSON.stringify({ type: 'pong', timestamp: Date.now() }));\n break;\n\n default:\n ws.send(JSON.stringify({ error: 'Unknown message type' }));\n }\n }\n\n /**\n * Broadcast message to all connected WebSocket clients.\n */\n broadcast(message: object): void {\n const data = JSON.stringify(message);\n for (const client of this.clients) {\n if (client.readyState === WebSocket.OPEN) {\n client.send(data);\n }\n }\n }\n\n // ─── Error Handler ─────────────────────────────────────────────────────────\n\n private errorHandler(err: Error, req: Request, res: Response, _next: NextFunction): void {\n process.stderr.write(`[baseline:api] ${req.method} ${req.path} — ${err.stack ?? err.message}\\n`);\n\n res.status(500).json({\n error: 'internal_error',\n message: 'An unexpected error occurred. Check server logs for details.',\n });\n }\n\n // ─── Lifecycle ─────────────────────────────────────────────────────────────\n\n private formatStartError(error: NodeJS.ErrnoException): Error {\n if (error.code === 'EADDRINUSE') {\n return new Error(\n `Port ${this.config.port} is already in use. Stop the existing Baseline API process or choose a different port.`\n );\n }\n if (error.code === 'EACCES') {\n return new Error(\n `Insufficient permission to bind port ${this.config.port}. Try a non-privileged port (for example: 3141).`\n );\n }\n return new Error(`Failed to start API server on port ${this.config.port}: ${error.message}`);\n }\n\n async start(): Promise<void> {\n if (this.server.listening) return;\n\n return new Promise((resolve, reject) => {\n const onError = (error: NodeJS.ErrnoException) => {\n this.server.off('listening', onListening);\n reject(this.formatStartError(error));\n };\n\n const onListening = () => {\n this.server.off('error', onError);\n resolve();\n };\n\n this.server.once('error', onError);\n this.server.once('listening', onListening);\n this.server.listen(this.config.port);\n });\n }\n\n async stop(): Promise<void> {\n this.wss.close();\n if (!this.server.listening) return;\n\n return new Promise((resolve, reject) => {\n this.server.close((error) => {\n if (error) {\n reject(error);\n return;\n }\n resolve();\n });\n });\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
#!/usr/bin/env node
|