nodebench-mcp 2.70.0 → 3.0.0
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/README.md +95 -41
- package/dist/agents/alertRouter.d.ts +38 -0
- package/dist/agents/alertRouter.js +151 -0
- package/dist/agents/alertRouter.js.map +1 -0
- package/dist/agents/entityMemory.d.ts +40 -0
- package/dist/agents/entityMemory.js +64 -0
- package/dist/agents/entityMemory.js.map +1 -0
- package/dist/agents/subAgents.d.ts +35 -0
- package/dist/agents/subAgents.js +62 -0
- package/dist/agents/subAgents.js.map +1 -0
- package/dist/benchmarks/benchmarkRunner.js +14 -0
- package/dist/benchmarks/benchmarkRunner.js.map +1 -1
- package/dist/benchmarks/chainEval.js +107 -0
- package/dist/benchmarks/chainEval.js.map +1 -1
- package/dist/benchmarks/llmJudgeEval.js +85 -0
- package/dist/benchmarks/llmJudgeEval.js.map +1 -1
- package/dist/benchmarks/searchQualityEval.js +118 -5
- package/dist/benchmarks/searchQualityEval.js.map +1 -1
- package/dist/cli/search.d.ts +13 -0
- package/dist/cli/search.js +130 -0
- package/dist/cli/search.js.map +1 -0
- package/dist/db.d.ts +6 -2
- package/dist/db.js +470 -3
- package/dist/db.js.map +1 -1
- package/dist/index.js +349 -64
- package/dist/index.js.map +1 -1
- package/dist/profiler/behaviorStore.d.ts +97 -0
- package/dist/profiler/behaviorStore.js +276 -0
- package/dist/profiler/behaviorStore.js.map +1 -0
- package/dist/profiler/eventCollector.d.ts +119 -0
- package/dist/profiler/eventCollector.js +267 -0
- package/dist/profiler/eventCollector.js.map +1 -0
- package/dist/profiler/index.d.ts +15 -0
- package/dist/profiler/index.js +16 -0
- package/dist/profiler/index.js.map +1 -0
- package/dist/profiler/mcpProxy.d.ts +49 -0
- package/dist/profiler/mcpProxy.js +123 -0
- package/dist/profiler/mcpProxy.js.map +1 -0
- package/dist/profiler/modelRouter.d.ts +30 -0
- package/dist/profiler/modelRouter.js +99 -0
- package/dist/profiler/modelRouter.js.map +1 -0
- package/dist/profiler/otelReceiver.d.ts +17 -0
- package/dist/profiler/otelReceiver.js +62 -0
- package/dist/profiler/otelReceiver.js.map +1 -0
- package/dist/profiler/proofEngine.d.ts +41 -0
- package/dist/profiler/proofEngine.js +93 -0
- package/dist/profiler/proofEngine.js.map +1 -0
- package/dist/profiler/workflowTemplates.d.ts +41 -0
- package/dist/profiler/workflowTemplates.js +95 -0
- package/dist/profiler/workflowTemplates.js.map +1 -0
- package/dist/providers/localMemoryProvider.js +3 -2
- package/dist/providers/localMemoryProvider.js.map +1 -1
- package/dist/runtimeConfig.d.ts +11 -0
- package/dist/runtimeConfig.js +27 -0
- package/dist/runtimeConfig.js.map +1 -0
- package/dist/security/auditLog.js +8 -3
- package/dist/security/auditLog.js.map +1 -1
- package/dist/subconscious/blocks.d.ts +43 -0
- package/dist/subconscious/blocks.js +158 -0
- package/dist/subconscious/blocks.js.map +1 -0
- package/dist/subconscious/classifier.d.ts +22 -0
- package/dist/subconscious/classifier.js +118 -0
- package/dist/subconscious/classifier.js.map +1 -0
- package/dist/subconscious/graphEngine.d.ts +65 -0
- package/dist/subconscious/graphEngine.js +234 -0
- package/dist/subconscious/graphEngine.js.map +1 -0
- package/dist/subconscious/index.d.ts +19 -0
- package/dist/subconscious/index.js +20 -0
- package/dist/subconscious/index.js.map +1 -0
- package/dist/subconscious/tools.d.ts +5 -0
- package/dist/subconscious/tools.js +255 -0
- package/dist/subconscious/tools.js.map +1 -0
- package/dist/subconscious/whisperPolicy.d.ts +20 -0
- package/dist/subconscious/whisperPolicy.js +171 -0
- package/dist/subconscious/whisperPolicy.js.map +1 -0
- package/dist/sweep/engine.d.ts +27 -0
- package/dist/sweep/engine.js +244 -0
- package/dist/sweep/engine.js.map +1 -0
- package/dist/sweep/index.d.ts +9 -0
- package/dist/sweep/index.js +8 -0
- package/dist/sweep/index.js.map +1 -0
- package/dist/sweep/sources/github_trending.d.ts +6 -0
- package/dist/sweep/sources/github_trending.js +37 -0
- package/dist/sweep/sources/github_trending.js.map +1 -0
- package/dist/sweep/sources/hackernews.d.ts +7 -0
- package/dist/sweep/sources/hackernews.js +57 -0
- package/dist/sweep/sources/hackernews.js.map +1 -0
- package/dist/sweep/sources/openbb_finance.d.ts +9 -0
- package/dist/sweep/sources/openbb_finance.js +46 -0
- package/dist/sweep/sources/openbb_finance.js.map +1 -0
- package/dist/sweep/sources/producthunt.d.ts +6 -0
- package/dist/sweep/sources/producthunt.js +41 -0
- package/dist/sweep/sources/producthunt.js.map +1 -0
- package/dist/sweep/sources/web_signals.d.ts +7 -0
- package/dist/sweep/sources/web_signals.js +63 -0
- package/dist/sweep/sources/web_signals.js.map +1 -0
- package/dist/sweep/sources/yahoo_finance.d.ts +6 -0
- package/dist/sweep/sources/yahoo_finance.js +47 -0
- package/dist/sweep/sources/yahoo_finance.js.map +1 -0
- package/dist/sweep/types.d.ts +50 -0
- package/dist/sweep/types.js +9 -0
- package/dist/sweep/types.js.map +1 -0
- package/dist/sync/founderEpisodeStore.d.ts +98 -0
- package/dist/sync/founderEpisodeStore.js +230 -0
- package/dist/sync/founderEpisodeStore.js.map +1 -0
- package/dist/sync/hyperloopArchive.d.ts +51 -0
- package/dist/sync/hyperloopArchive.js +153 -0
- package/dist/sync/hyperloopArchive.js.map +1 -0
- package/dist/sync/hyperloopEval.d.ts +123 -0
- package/dist/sync/hyperloopEval.js +389 -0
- package/dist/sync/hyperloopEval.js.map +1 -0
- package/dist/sync/hyperloopEval.test.d.ts +4 -0
- package/dist/sync/hyperloopEval.test.js +60 -0
- package/dist/sync/hyperloopEval.test.js.map +1 -0
- package/dist/sync/protocol.d.ts +172 -0
- package/dist/sync/protocol.js +9 -0
- package/dist/sync/protocol.js.map +1 -0
- package/dist/sync/sessionMemory.d.ts +47 -0
- package/dist/sync/sessionMemory.js +138 -0
- package/dist/sync/sessionMemory.js.map +1 -0
- package/dist/sync/store.d.ts +384 -0
- package/dist/sync/store.js +1435 -0
- package/dist/sync/store.js.map +1 -0
- package/dist/sync/store.test.d.ts +4 -0
- package/dist/sync/store.test.js +43 -0
- package/dist/sync/store.test.js.map +1 -0
- package/dist/sync/syncBridgeClient.d.ts +30 -0
- package/dist/sync/syncBridgeClient.js +172 -0
- package/dist/sync/syncBridgeClient.js.map +1 -0
- package/dist/tools/autonomousDeliveryTools.d.ts +2 -0
- package/dist/tools/autonomousDeliveryTools.js +1104 -0
- package/dist/tools/autonomousDeliveryTools.js.map +1 -0
- package/dist/tools/claudeCodeIngestTools.d.ts +10 -0
- package/dist/tools/claudeCodeIngestTools.js +347 -0
- package/dist/tools/claudeCodeIngestTools.js.map +1 -0
- package/dist/tools/coreWorkflowTools.d.ts +2 -0
- package/dist/tools/coreWorkflowTools.js +488 -0
- package/dist/tools/coreWorkflowTools.js.map +1 -0
- package/dist/tools/deltaTools.d.ts +15 -0
- package/dist/tools/deltaTools.js +1522 -0
- package/dist/tools/deltaTools.js.map +1 -0
- package/dist/tools/entityLookupTools.d.ts +14 -0
- package/dist/tools/entityLookupTools.js +159 -0
- package/dist/tools/entityLookupTools.js.map +1 -0
- package/dist/tools/entityTemporalTools.d.ts +12 -0
- package/dist/tools/entityTemporalTools.js +330 -0
- package/dist/tools/entityTemporalTools.js.map +1 -0
- package/dist/tools/founderLocalPipeline.d.ts +215 -0
- package/dist/tools/founderLocalPipeline.js +1516 -2
- package/dist/tools/founderLocalPipeline.js.map +1 -1
- package/dist/tools/founderOperatingModel.d.ts +120 -0
- package/dist/tools/founderOperatingModel.js +469 -0
- package/dist/tools/founderOperatingModel.js.map +1 -0
- package/dist/tools/founderOperatingModelTools.d.ts +2 -0
- package/dist/tools/founderOperatingModelTools.js +169 -0
- package/dist/tools/founderOperatingModelTools.js.map +1 -0
- package/dist/tools/founderStrategicOpsTools.d.ts +2 -0
- package/dist/tools/founderStrategicOpsTools.js +1310 -0
- package/dist/tools/founderStrategicOpsTools.js.map +1 -0
- package/dist/tools/graphifyTools.d.ts +19 -0
- package/dist/tools/graphifyTools.js +375 -0
- package/dist/tools/graphifyTools.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.js +4 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/monteCarloTools.d.ts +16 -0
- package/dist/tools/monteCarloTools.js +225 -0
- package/dist/tools/monteCarloTools.js.map +1 -0
- package/dist/tools/packetCompilerTools.d.ts +12 -0
- package/dist/tools/packetCompilerTools.js +322 -0
- package/dist/tools/packetCompilerTools.js.map +1 -0
- package/dist/tools/planSynthesisTools.d.ts +15 -0
- package/dist/tools/planSynthesisTools.js +455 -0
- package/dist/tools/planSynthesisTools.js.map +1 -0
- package/dist/tools/profilerTools.d.ts +20 -0
- package/dist/tools/profilerTools.js +364 -0
- package/dist/tools/profilerTools.js.map +1 -0
- package/dist/tools/savingsTools.d.ts +11 -0
- package/dist/tools/savingsTools.js +155 -0
- package/dist/tools/savingsTools.js.map +1 -0
- package/dist/tools/scenarioCompilerTools.d.ts +14 -0
- package/dist/tools/scenarioCompilerTools.js +290 -0
- package/dist/tools/scenarioCompilerTools.js.map +1 -0
- package/dist/tools/sharedContextTools.d.ts +2 -0
- package/dist/tools/sharedContextTools.js +423 -0
- package/dist/tools/sharedContextTools.js.map +1 -0
- package/dist/tools/sitemapTools.d.ts +15 -0
- package/dist/tools/sitemapTools.js +560 -0
- package/dist/tools/sitemapTools.js.map +1 -0
- package/dist/tools/sweepTools.d.ts +9 -0
- package/dist/tools/sweepTools.js +112 -0
- package/dist/tools/sweepTools.js.map +1 -0
- package/dist/tools/syncBridgeTools.d.ts +2 -0
- package/dist/tools/syncBridgeTools.js +258 -0
- package/dist/tools/syncBridgeTools.js.map +1 -0
- package/dist/tools/toolRegistry.js +1216 -49
- package/dist/tools/toolRegistry.js.map +1 -1
- package/dist/tools/workspaceTools.d.ts +19 -0
- package/dist/tools/workspaceTools.js +762 -0
- package/dist/tools/workspaceTools.js.map +1 -0
- package/dist/toolsetRegistry.js +88 -2
- package/dist/toolsetRegistry.js.map +1 -1
- package/package.json +36 -36
- package/rules/nodebench-agentic-reliability.md +32 -0
- package/rules/nodebench-analyst-diagnostic.md +25 -0
- package/rules/nodebench-auto-qa.md +31 -0
- package/rules/nodebench-completion-traceability.md +22 -0
- package/rules/nodebench-flywheel-continuous.md +25 -0
- package/rules/nodebench-pre-release-review.md +24 -0
- package/rules/nodebench-qa-dogfood.md +26 -0
- package/rules/nodebench-scenario-testing.md +30 -0
- package/rules/nodebench-self-direction.md +23 -0
- package/rules/nodebench-self-judge-loop.md +24 -0
- package/scripts/install.sh +215 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventCollector.js","sourceRoot":"","sources":["../../src/profiler/eventCollector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NodeBench Profiler — Founder Operating Intelligence Layer
|
|
3
|
+
*
|
|
4
|
+
* Three subsystems:
|
|
5
|
+
* 1. behaviorStore — SQLite tables for session/query/tool call logging
|
|
6
|
+
* 2. eventCollector — Unified event schema across all integration paths
|
|
7
|
+
* 3. mcpProxy — Transparent MCP tool proxy for zero-code-change observation
|
|
8
|
+
*/
|
|
9
|
+
export { initBehaviorTables, logSession, logQuery, logToolCall, logContextReuse, getSessionInsights, getAggregateInsights, findSimilarPriorQuery, } from "./behaviorStore.js";
|
|
10
|
+
export { type UnifiedEvent, initEventCollectorTables, ingestEvent, estimateEventCost, logHookEvent, logMcpProxyEvent, logOtelSpan, logFrameworkEvent, getRecentEvents, getDuplicateRate, getCostByModel, getCostBySurface, getTopToolChains, } from "./eventCollector.js";
|
|
11
|
+
export { wrapToolsWithProxy, createProfiledDispatcher, } from "./mcpProxy.js";
|
|
12
|
+
export { type WorkflowTemplate, initWorkflowTemplateTables, saveTemplate, listTemplates, getTemplate, recordTemplateUse, deleteTemplate, validateTemplate, } from "./workflowTemplates.js";
|
|
13
|
+
export { type ProofRun, initProofEngineTables, evaluateOptimization, getProofRuns, } from "./proofEngine.js";
|
|
14
|
+
export { processOtelPayload, } from "./otelReceiver.js";
|
|
15
|
+
export { type ModelRoutingSuggestion, initModelRoutingTables, suggestModelRoute, recordRoutingDecision, getRoutingSuggestions, } from "./modelRouter.js";
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NodeBench Profiler — Founder Operating Intelligence Layer
|
|
3
|
+
*
|
|
4
|
+
* Three subsystems:
|
|
5
|
+
* 1. behaviorStore — SQLite tables for session/query/tool call logging
|
|
6
|
+
* 2. eventCollector — Unified event schema across all integration paths
|
|
7
|
+
* 3. mcpProxy — Transparent MCP tool proxy for zero-code-change observation
|
|
8
|
+
*/
|
|
9
|
+
export { initBehaviorTables, logSession, logQuery, logToolCall, logContextReuse, getSessionInsights, getAggregateInsights, findSimilarPriorQuery, } from "./behaviorStore.js";
|
|
10
|
+
export { initEventCollectorTables, ingestEvent, estimateEventCost, logHookEvent, logMcpProxyEvent, logOtelSpan, logFrameworkEvent, getRecentEvents, getDuplicateRate, getCostByModel, getCostBySurface, getTopToolChains, } from "./eventCollector.js";
|
|
11
|
+
export { wrapToolsWithProxy, createProfiledDispatcher, } from "./mcpProxy.js";
|
|
12
|
+
export { initWorkflowTemplateTables, saveTemplate, listTemplates, getTemplate, recordTemplateUse, deleteTemplate, validateTemplate, } from "./workflowTemplates.js";
|
|
13
|
+
export { initProofEngineTables, evaluateOptimization, getProofRuns, } from "./proofEngine.js";
|
|
14
|
+
export { processOtelPayload, } from "./otelReceiver.js";
|
|
15
|
+
export { initModelRoutingTables, suggestModelRoute, recordRoutingDecision, getRoutingSuggestions, } from "./modelRouter.js";
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/profiler/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,QAAQ,EACR,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAEL,wBAAwB,EACxB,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAEL,0BAA0B,EAC1B,YAAY,EACZ,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAEL,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,GACb,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAEL,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mcpProxy.ts — Transparent MCP tool call proxy.
|
|
3
|
+
*
|
|
4
|
+
* Wraps any set of MCP tools to intercept every call, measure duration,
|
|
5
|
+
* estimate cost, and log to the unified event collector.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* const proxiedTools = wrapToolsWithProxy(originalTools, { sessionId: "..." });
|
|
9
|
+
*
|
|
10
|
+
* The proxy is transparent — same tool names, same schemas, same results.
|
|
11
|
+
* The only addition is observation: every call logged to the event collector.
|
|
12
|
+
*
|
|
13
|
+
* This is Path B in the integration layer — zero-code-change observation
|
|
14
|
+
* for any MCP-compatible client (Claude Code, Cursor, Windsurf, OpenAI Agents).
|
|
15
|
+
*/
|
|
16
|
+
import type { McpTool } from "../types.js";
|
|
17
|
+
import { type UnifiedEvent } from "./eventCollector.js";
|
|
18
|
+
interface ProxyConfig {
|
|
19
|
+
sessionId?: string;
|
|
20
|
+
userId?: string;
|
|
21
|
+
companyId?: string;
|
|
22
|
+
surface?: UnifiedEvent["surface"];
|
|
23
|
+
onEvent?: (event: {
|
|
24
|
+
toolName: string;
|
|
25
|
+
durationMs: number;
|
|
26
|
+
cost: number;
|
|
27
|
+
isDuplicate: boolean;
|
|
28
|
+
}) => void;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Wrap all tools with transparent profiling proxy.
|
|
32
|
+
* Every tool call is intercepted, timed, and logged.
|
|
33
|
+
*/
|
|
34
|
+
export declare function wrapToolsWithProxy(tools: McpTool[], config?: ProxyConfig): McpTool[];
|
|
35
|
+
/**
|
|
36
|
+
* Create a profiling-aware tool dispatcher.
|
|
37
|
+
* Use this instead of direct tool.handler() calls to get automatic logging.
|
|
38
|
+
*/
|
|
39
|
+
export declare function createProfiledDispatcher(tools: McpTool[], config?: ProxyConfig): {
|
|
40
|
+
/** Call a tool by name with profiling. */
|
|
41
|
+
call(toolName: string, args: Record<string, unknown>): Promise<unknown>;
|
|
42
|
+
/** Get the original (unproxied) tool list. */
|
|
43
|
+
originalTools: McpTool[];
|
|
44
|
+
/** Get the proxied tool list (for MCP server registration). */
|
|
45
|
+
proxiedTools: McpTool[];
|
|
46
|
+
/** Check if a tool exists. */
|
|
47
|
+
has(toolName: string): boolean;
|
|
48
|
+
};
|
|
49
|
+
export {};
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mcpProxy.ts — Transparent MCP tool call proxy.
|
|
3
|
+
*
|
|
4
|
+
* Wraps any set of MCP tools to intercept every call, measure duration,
|
|
5
|
+
* estimate cost, and log to the unified event collector.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* const proxiedTools = wrapToolsWithProxy(originalTools, { sessionId: "..." });
|
|
9
|
+
*
|
|
10
|
+
* The proxy is transparent — same tool names, same schemas, same results.
|
|
11
|
+
* The only addition is observation: every call logged to the event collector.
|
|
12
|
+
*
|
|
13
|
+
* This is Path B in the integration layer — zero-code-change observation
|
|
14
|
+
* for any MCP-compatible client (Claude Code, Cursor, Windsurf, OpenAI Agents).
|
|
15
|
+
*/
|
|
16
|
+
import { ingestEvent, initEventCollectorTables } from "./eventCollector.js";
|
|
17
|
+
/**
|
|
18
|
+
* Wrap all tools with transparent profiling proxy.
|
|
19
|
+
* Every tool call is intercepted, timed, and logged.
|
|
20
|
+
*/
|
|
21
|
+
export function wrapToolsWithProxy(tools, config = {}) {
|
|
22
|
+
// Ensure tables exist
|
|
23
|
+
try {
|
|
24
|
+
initEventCollectorTables();
|
|
25
|
+
}
|
|
26
|
+
catch { /* may already exist */ }
|
|
27
|
+
const sessionId = config.sessionId ?? `proxy_${Date.now().toString(36)}`;
|
|
28
|
+
let stepIndex = 0;
|
|
29
|
+
return tools.map((tool) => ({
|
|
30
|
+
...tool,
|
|
31
|
+
handler: async (args) => {
|
|
32
|
+
const startMs = Date.now();
|
|
33
|
+
stepIndex++;
|
|
34
|
+
let result;
|
|
35
|
+
let success = true;
|
|
36
|
+
let error;
|
|
37
|
+
try {
|
|
38
|
+
result = await tool.handler(args);
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
success = false;
|
|
42
|
+
error = err?.message ?? "Unknown error";
|
|
43
|
+
throw err; // Re-throw — proxy is transparent
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
const durationMs = Date.now() - startMs;
|
|
47
|
+
// Log to unified event collector
|
|
48
|
+
const { isDuplicate, estimatedCost } = ingestEvent({
|
|
49
|
+
surface: config.surface ?? "mcp_direct",
|
|
50
|
+
integrationPath: "mcp_proxy",
|
|
51
|
+
sessionId,
|
|
52
|
+
userId: config.userId,
|
|
53
|
+
companyId: config.companyId,
|
|
54
|
+
toolName: tool.name,
|
|
55
|
+
toolInputSummary: summarizeArgs(args),
|
|
56
|
+
toolOutputSummary: success ? summarizeResult(result) : `ERROR: ${error}`,
|
|
57
|
+
latencyMs: durationMs,
|
|
58
|
+
success,
|
|
59
|
+
pathStepIndex: stepIndex,
|
|
60
|
+
});
|
|
61
|
+
// Callback for real-time notifications
|
|
62
|
+
config.onEvent?.({
|
|
63
|
+
toolName: tool.name,
|
|
64
|
+
durationMs,
|
|
65
|
+
cost: estimatedCost,
|
|
66
|
+
isDuplicate,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return result;
|
|
70
|
+
},
|
|
71
|
+
}));
|
|
72
|
+
}
|
|
73
|
+
// ── Summarization helpers ────────────────────────────────────────────
|
|
74
|
+
function summarizeArgs(args) {
|
|
75
|
+
const entries = Object.entries(args);
|
|
76
|
+
if (entries.length === 0)
|
|
77
|
+
return "(no args)";
|
|
78
|
+
// Show first 3 key-value pairs, truncated
|
|
79
|
+
return entries
|
|
80
|
+
.slice(0, 3)
|
|
81
|
+
.map(([k, v]) => {
|
|
82
|
+
const val = typeof v === "string" ? v.slice(0, 100) : JSON.stringify(v).slice(0, 100);
|
|
83
|
+
return `${k}=${val}`;
|
|
84
|
+
})
|
|
85
|
+
.join(", ");
|
|
86
|
+
}
|
|
87
|
+
function summarizeResult(result) {
|
|
88
|
+
if (result == null)
|
|
89
|
+
return "(null)";
|
|
90
|
+
if (typeof result === "string")
|
|
91
|
+
return result.slice(0, 200);
|
|
92
|
+
const str = JSON.stringify(result);
|
|
93
|
+
if (str.length <= 200)
|
|
94
|
+
return str;
|
|
95
|
+
return str.slice(0, 197) + "...";
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Create a profiling-aware tool dispatcher.
|
|
99
|
+
* Use this instead of direct tool.handler() calls to get automatic logging.
|
|
100
|
+
*/
|
|
101
|
+
export function createProfiledDispatcher(tools, config = {}) {
|
|
102
|
+
const toolMap = new Map(tools.map(t => [t.name, t]));
|
|
103
|
+
const proxied = wrapToolsWithProxy(tools, config);
|
|
104
|
+
const proxiedMap = new Map(proxied.map(t => [t.name, t]));
|
|
105
|
+
return {
|
|
106
|
+
/** Call a tool by name with profiling. */
|
|
107
|
+
async call(toolName, args) {
|
|
108
|
+
const tool = proxiedMap.get(toolName);
|
|
109
|
+
if (!tool)
|
|
110
|
+
throw new Error(`Tool not found: ${toolName}`);
|
|
111
|
+
return tool.handler(args);
|
|
112
|
+
},
|
|
113
|
+
/** Get the original (unproxied) tool list. */
|
|
114
|
+
originalTools: tools,
|
|
115
|
+
/** Get the proxied tool list (for MCP server registration). */
|
|
116
|
+
proxiedTools: proxied,
|
|
117
|
+
/** Check if a tool exists. */
|
|
118
|
+
has(toolName) {
|
|
119
|
+
return toolMap.has(toolName);
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=mcpProxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpProxy.js","sourceRoot":"","sources":["../../src/profiler/mcpProxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* modelRouter.ts — Adaptive Model Routing
|
|
3
|
+
*
|
|
4
|
+
* Learns which models work best for which task types based on
|
|
5
|
+
* historical profiler data. Suggests cheaper valid paths.
|
|
6
|
+
*
|
|
7
|
+
* Architecture: LLM for interpretation, deterministic for routing.
|
|
8
|
+
* The router suggests, it doesn't force — the user/agent decides.
|
|
9
|
+
*/
|
|
10
|
+
export interface ModelRoutingSuggestion {
|
|
11
|
+
taskType: string;
|
|
12
|
+
currentModel: string;
|
|
13
|
+
currentCostPer1k: number;
|
|
14
|
+
suggestedModel: string;
|
|
15
|
+
suggestedCostPer1k: number;
|
|
16
|
+
expectedSavingsPct: number;
|
|
17
|
+
confidence: number;
|
|
18
|
+
reason: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function initModelRoutingTables(): void;
|
|
21
|
+
export declare function suggestModelRoute(taskType: string, currentModel?: string): ModelRoutingSuggestion | null;
|
|
22
|
+
export declare function recordRoutingDecision(data: {
|
|
23
|
+
taskType: string;
|
|
24
|
+
modelUsed: string;
|
|
25
|
+
costUsd: number;
|
|
26
|
+
latencyMs: number;
|
|
27
|
+
qualityScore?: number;
|
|
28
|
+
wasOverridden?: boolean;
|
|
29
|
+
}): void;
|
|
30
|
+
export declare function getRoutingSuggestions(): ModelRoutingSuggestion[];
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* modelRouter.ts — Adaptive Model Routing
|
|
3
|
+
*
|
|
4
|
+
* Learns which models work best for which task types based on
|
|
5
|
+
* historical profiler data. Suggests cheaper valid paths.
|
|
6
|
+
*
|
|
7
|
+
* Architecture: LLM for interpretation, deterministic for routing.
|
|
8
|
+
* The router suggests, it doesn't force — the user/agent decides.
|
|
9
|
+
*/
|
|
10
|
+
import { getDb, genId } from "../db.js";
|
|
11
|
+
const MODEL_TIERS = {
|
|
12
|
+
"gemini-3.1-flash-lite-preview": { costPer1kTokens: 0.00008, tier: "cheap" },
|
|
13
|
+
"gemini-3.1-flash-preview": { costPer1kTokens: 0.0006, tier: "mid" },
|
|
14
|
+
"gemini-2.5-flash-preview": { costPer1kTokens: 0.0006, tier: "mid" },
|
|
15
|
+
"gpt-4o-mini": { costPer1kTokens: 0.0006, tier: "cheap" },
|
|
16
|
+
"gpt-4o": { costPer1kTokens: 0.015, tier: "premium" },
|
|
17
|
+
"claude-sonnet-4-6": { costPer1kTokens: 0.015, tier: "premium" },
|
|
18
|
+
"claude-opus-4-6": { costPer1kTokens: 0.075, tier: "premium" },
|
|
19
|
+
};
|
|
20
|
+
// Tasks that can safely use cheap models
|
|
21
|
+
const CHEAP_MODEL_TASKS = new Set([
|
|
22
|
+
"classification", "intent_detection", "entity_extraction",
|
|
23
|
+
"summarization", "formatting", "translation",
|
|
24
|
+
"keyword_extraction", "sentiment_analysis",
|
|
25
|
+
]);
|
|
26
|
+
// Tasks that need premium models
|
|
27
|
+
const PREMIUM_MODEL_TASKS = new Set([
|
|
28
|
+
"deep_analysis", "code_generation", "complex_reasoning",
|
|
29
|
+
"multi_step_planning", "creative_writing",
|
|
30
|
+
]);
|
|
31
|
+
export function initModelRoutingTables() {
|
|
32
|
+
const db = getDb();
|
|
33
|
+
db.exec(`
|
|
34
|
+
CREATE TABLE IF NOT EXISTS model_routing_decisions (
|
|
35
|
+
id TEXT PRIMARY KEY,
|
|
36
|
+
task_type TEXT NOT NULL,
|
|
37
|
+
model_used TEXT NOT NULL,
|
|
38
|
+
cost_usd REAL,
|
|
39
|
+
latency_ms INTEGER,
|
|
40
|
+
quality_score REAL,
|
|
41
|
+
was_overridden INTEGER DEFAULT 0,
|
|
42
|
+
timestamp TEXT NOT NULL
|
|
43
|
+
);
|
|
44
|
+
CREATE INDEX IF NOT EXISTS idx_mrd_task ON model_routing_decisions(task_type);
|
|
45
|
+
`);
|
|
46
|
+
}
|
|
47
|
+
export function suggestModelRoute(taskType, currentModel) {
|
|
48
|
+
const current = currentModel ?? "claude-sonnet-4-6";
|
|
49
|
+
const currentTier = MODEL_TIERS[current];
|
|
50
|
+
if (!currentTier)
|
|
51
|
+
return null;
|
|
52
|
+
// If already using cheap model for a cheap task, no suggestion needed
|
|
53
|
+
if (currentTier.tier === "cheap" && CHEAP_MODEL_TASKS.has(taskType))
|
|
54
|
+
return null;
|
|
55
|
+
// If using premium for a cheap task, suggest downgrade
|
|
56
|
+
if ((currentTier.tier === "premium" || currentTier.tier === "mid") && CHEAP_MODEL_TASKS.has(taskType)) {
|
|
57
|
+
const suggested = "gemini-3.1-flash-lite-preview";
|
|
58
|
+
const suggestedTier = MODEL_TIERS[suggested];
|
|
59
|
+
const savings = currentTier.costPer1kTokens > 0
|
|
60
|
+
? ((currentTier.costPer1kTokens - suggestedTier.costPer1kTokens) / currentTier.costPer1kTokens) * 100
|
|
61
|
+
: 0;
|
|
62
|
+
return {
|
|
63
|
+
taskType,
|
|
64
|
+
currentModel: current,
|
|
65
|
+
currentCostPer1k: currentTier.costPer1kTokens,
|
|
66
|
+
suggestedModel: suggested,
|
|
67
|
+
suggestedCostPer1k: suggestedTier.costPer1kTokens,
|
|
68
|
+
expectedSavingsPct: Math.round(savings),
|
|
69
|
+
confidence: 85,
|
|
70
|
+
reason: `"${taskType}" is a ${currentTier.tier}-complexity task. ${suggested} handles it at ${Math.round(savings)}% lower cost with equivalent quality.`,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
export function recordRoutingDecision(data) {
|
|
76
|
+
const db = getDb();
|
|
77
|
+
db.prepare(`
|
|
78
|
+
INSERT INTO model_routing_decisions (id, task_type, model_used, cost_usd, latency_ms, quality_score, was_overridden, timestamp)
|
|
79
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
80
|
+
`).run(genId("mrd"), data.taskType, data.modelUsed, data.costUsd, data.latencyMs, data.qualityScore ?? null, data.wasOverridden ? 1 : 0, new Date().toISOString());
|
|
81
|
+
}
|
|
82
|
+
export function getRoutingSuggestions() {
|
|
83
|
+
const db = getDb();
|
|
84
|
+
const decisions = db.prepare(`
|
|
85
|
+
SELECT task_type, model_used, COUNT(*) as cnt, AVG(cost_usd) as avg_cost
|
|
86
|
+
FROM model_routing_decisions
|
|
87
|
+
GROUP BY task_type, model_used
|
|
88
|
+
ORDER BY avg_cost DESC
|
|
89
|
+
`).all();
|
|
90
|
+
const suggestions = [];
|
|
91
|
+
for (const d of decisions) {
|
|
92
|
+
const suggestion = suggestModelRoute(d.task_type, d.model_used);
|
|
93
|
+
if (suggestion && suggestion.expectedSavingsPct > 20) {
|
|
94
|
+
suggestions.push(suggestion);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return suggestions;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=modelRouter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modelRouter.js","sourceRoot":"","sources":["../../src/profiler/modelRouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* otelReceiver.ts — OpenTelemetry trace receiver for NodeBench.
|
|
3
|
+
*
|
|
4
|
+
* Accepts POST /v1/traces with OTLP JSON format.
|
|
5
|
+
* Extracts tool execution spans and forwards to the unified event collector.
|
|
6
|
+
*
|
|
7
|
+
* Usage: Set OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:6276/v1/traces
|
|
8
|
+
* in any OTel-instrumented agent framework.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Process an OTLP JSON traces payload.
|
|
12
|
+
* Extracts tool execution spans and logs them.
|
|
13
|
+
*/
|
|
14
|
+
export declare function processOtelPayload(body: any): {
|
|
15
|
+
spansProcessed: number;
|
|
16
|
+
eventsLogged: number;
|
|
17
|
+
};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* otelReceiver.ts — OpenTelemetry trace receiver for NodeBench.
|
|
3
|
+
*
|
|
4
|
+
* Accepts POST /v1/traces with OTLP JSON format.
|
|
5
|
+
* Extracts tool execution spans and forwards to the unified event collector.
|
|
6
|
+
*
|
|
7
|
+
* Usage: Set OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:6276/v1/traces
|
|
8
|
+
* in any OTel-instrumented agent framework.
|
|
9
|
+
*/
|
|
10
|
+
import { logOtelSpan } from "./eventCollector.js";
|
|
11
|
+
function parseAttributes(attrs) {
|
|
12
|
+
const result = {};
|
|
13
|
+
if (!attrs)
|
|
14
|
+
return result;
|
|
15
|
+
for (const a of attrs) {
|
|
16
|
+
result[a.key] = a.value?.stringValue ?? (a.value?.intValue ? Number(a.value.intValue) : undefined);
|
|
17
|
+
}
|
|
18
|
+
return result;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Process an OTLP JSON traces payload.
|
|
22
|
+
* Extracts tool execution spans and logs them.
|
|
23
|
+
*/
|
|
24
|
+
export function processOtelPayload(body) {
|
|
25
|
+
let spansProcessed = 0;
|
|
26
|
+
let eventsLogged = 0;
|
|
27
|
+
const resourceSpans = body?.resourceSpans ?? [];
|
|
28
|
+
for (const rs of resourceSpans) {
|
|
29
|
+
const scopeSpans = rs?.scopeSpans ?? [];
|
|
30
|
+
for (const ss of scopeSpans) {
|
|
31
|
+
const spans = ss?.spans ?? [];
|
|
32
|
+
for (const span of spans) {
|
|
33
|
+
spansProcessed++;
|
|
34
|
+
const attrs = parseAttributes(span.attributes);
|
|
35
|
+
const name = span.name ?? "";
|
|
36
|
+
// Only log tool execution spans (not HTTP, not internal framework spans)
|
|
37
|
+
const isToolSpan = name.includes("execute_tool") ||
|
|
38
|
+
name.includes("tool_call") ||
|
|
39
|
+
attrs["gen_ai.operation.name"] === "execute_tool" ||
|
|
40
|
+
attrs["openai.tool_name"] ||
|
|
41
|
+
attrs["langchain.tool.name"];
|
|
42
|
+
if (!isToolSpan)
|
|
43
|
+
continue;
|
|
44
|
+
const toolName = (attrs["openai.tool_name"] ?? attrs["langchain.tool.name"] ?? attrs["tool.name"] ?? name);
|
|
45
|
+
const startMs = Number(BigInt(span.startTimeUnixNano) / BigInt(1_000_000));
|
|
46
|
+
const endMs = Number(BigInt(span.endTimeUnixNano) / BigInt(1_000_000));
|
|
47
|
+
logOtelSpan({
|
|
48
|
+
traceId: span.traceId,
|
|
49
|
+
spanId: span.spanId,
|
|
50
|
+
parentSpanId: span.parentSpanId,
|
|
51
|
+
toolName,
|
|
52
|
+
startTimeMs: startMs,
|
|
53
|
+
endTimeMs: endMs,
|
|
54
|
+
attributes: attrs,
|
|
55
|
+
});
|
|
56
|
+
eventsLogged++;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return { spansProcessed, eventsLogged };
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=otelReceiver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otelReceiver.js","sourceRoot":"","sources":["../../src/profiler/otelReceiver.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAalD,SAAS,eAAe,CAAC,KAA8B;IACrD,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,IAAI,CAAC,KAAK;QAAE,OAAO,MAAM,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACrG,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAS;IAC1C,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,MAAM,aAAa,GAAG,IAAI,EAAE,aAAa,IAAI,EAAE,CAAC;IAChD,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,EAAE,EAAE,UAAU,IAAI,EAAE,CAAC;QACxC,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC;YAC9B,KAAK,MAAM,IAAI,IAAI,KAAmB,EAAE,CAAC;gBACvC,cAAc,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;gBAE7B,yEAAyE;gBACzE,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;oBAC9C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;oBAC1B,KAAK,CAAC,uBAAuB,CAAC,KAAK,cAAc;oBACjD,KAAK,CAAC,kBAAkB,CAAC;oBACzB,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBAE/B,IAAI,CAAC,UAAU;oBAAE,SAAS;gBAE1B,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,IAAI,CAAW,CAAC;gBACrH,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC3E,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;gBAEvE,WAAW,CAAC;oBACV,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,YAAY,EAAE,IAAI,CAAC,YAAY;oBAC/B,QAAQ;oBACR,WAAW,EAAE,OAAO;oBACpB,SAAS,EAAE,KAAK;oBAChB,UAAU,EAAE,KAAK;iBAClB,CAAC,CAAC;gBACH,YAAY,EAAE,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* proofEngine.ts — Validated Path Compression
|
|
3
|
+
*
|
|
4
|
+
* Never blindly recommend shortcuts. This engine:
|
|
5
|
+
* 1. Records baseline workflow execution (full path)
|
|
6
|
+
* 2. Generates optimized candidate (shorter path)
|
|
7
|
+
* 3. Replays both on same input
|
|
8
|
+
* 4. Compares quality (packet completeness, evidence, scores)
|
|
9
|
+
* 5. Promotes only if quality holds within thresholds
|
|
10
|
+
*/
|
|
11
|
+
export interface ProofRun {
|
|
12
|
+
id: string;
|
|
13
|
+
templateId?: string;
|
|
14
|
+
baselineSteps: number;
|
|
15
|
+
baselineCostUsd: number;
|
|
16
|
+
baselineLatencyMs: number;
|
|
17
|
+
baselineScore: number;
|
|
18
|
+
optimizedSteps: number;
|
|
19
|
+
optimizedCostUsd: number;
|
|
20
|
+
optimizedLatencyMs: number;
|
|
21
|
+
optimizedScore: number;
|
|
22
|
+
costDeltaPct: number;
|
|
23
|
+
latencyDeltaPct: number;
|
|
24
|
+
qualityDeltaPct: number;
|
|
25
|
+
approved: boolean;
|
|
26
|
+
reason: string;
|
|
27
|
+
createdAt: string;
|
|
28
|
+
}
|
|
29
|
+
export declare function initProofEngineTables(): void;
|
|
30
|
+
export declare function evaluateOptimization(baseline: {
|
|
31
|
+
steps: number;
|
|
32
|
+
costUsd: number;
|
|
33
|
+
latencyMs: number;
|
|
34
|
+
score: number;
|
|
35
|
+
}, optimized: {
|
|
36
|
+
steps: number;
|
|
37
|
+
costUsd: number;
|
|
38
|
+
latencyMs: number;
|
|
39
|
+
score: number;
|
|
40
|
+
}, templateId?: string): ProofRun;
|
|
41
|
+
export declare function getProofRuns(templateId?: string): ProofRun[];
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* proofEngine.ts — Validated Path Compression
|
|
3
|
+
*
|
|
4
|
+
* Never blindly recommend shortcuts. This engine:
|
|
5
|
+
* 1. Records baseline workflow execution (full path)
|
|
6
|
+
* 2. Generates optimized candidate (shorter path)
|
|
7
|
+
* 3. Replays both on same input
|
|
8
|
+
* 4. Compares quality (packet completeness, evidence, scores)
|
|
9
|
+
* 5. Promotes only if quality holds within thresholds
|
|
10
|
+
*/
|
|
11
|
+
import { getDb, genId } from "../db.js";
|
|
12
|
+
export function initProofEngineTables() {
|
|
13
|
+
const db = getDb();
|
|
14
|
+
db.exec(`
|
|
15
|
+
CREATE TABLE IF NOT EXISTS proof_runs (
|
|
16
|
+
id TEXT PRIMARY KEY,
|
|
17
|
+
template_id TEXT,
|
|
18
|
+
baseline_steps INTEGER,
|
|
19
|
+
baseline_cost_usd REAL,
|
|
20
|
+
baseline_latency_ms INTEGER,
|
|
21
|
+
baseline_score REAL,
|
|
22
|
+
optimized_steps INTEGER,
|
|
23
|
+
optimized_cost_usd REAL,
|
|
24
|
+
optimized_latency_ms INTEGER,
|
|
25
|
+
optimized_score REAL,
|
|
26
|
+
cost_delta_pct REAL,
|
|
27
|
+
latency_delta_pct REAL,
|
|
28
|
+
quality_delta_pct REAL,
|
|
29
|
+
approved INTEGER DEFAULT 0,
|
|
30
|
+
reason TEXT,
|
|
31
|
+
created_at TEXT NOT NULL
|
|
32
|
+
);
|
|
33
|
+
CREATE INDEX IF NOT EXISTS idx_pr_template ON proof_runs(template_id);
|
|
34
|
+
CREATE INDEX IF NOT EXISTS idx_pr_approved ON proof_runs(approved);
|
|
35
|
+
`);
|
|
36
|
+
}
|
|
37
|
+
// Thresholds for promotion
|
|
38
|
+
const PROMOTION_THRESHOLDS = {
|
|
39
|
+
minCostReduction: 25, // Must save at least 25% cost
|
|
40
|
+
minLatencyReduction: 30, // OR save at least 30% latency
|
|
41
|
+
maxQualityLoss: 2, // Quality can't drop more than 2%
|
|
42
|
+
};
|
|
43
|
+
export function evaluateOptimization(baseline, optimized, templateId) {
|
|
44
|
+
const db = getDb();
|
|
45
|
+
const id = genId("proof");
|
|
46
|
+
const costDelta = baseline.costUsd > 0
|
|
47
|
+
? ((baseline.costUsd - optimized.costUsd) / baseline.costUsd) * 100 : 0;
|
|
48
|
+
const latencyDelta = baseline.latencyMs > 0
|
|
49
|
+
? ((baseline.latencyMs - optimized.latencyMs) / baseline.latencyMs) * 100 : 0;
|
|
50
|
+
const qualityDelta = baseline.score > 0
|
|
51
|
+
? ((optimized.score - baseline.score) / baseline.score) * 100 : 0;
|
|
52
|
+
const meetsThreshold = ((costDelta >= PROMOTION_THRESHOLDS.minCostReduction || latencyDelta >= PROMOTION_THRESHOLDS.minLatencyReduction)
|
|
53
|
+
&& qualityDelta >= -PROMOTION_THRESHOLDS.maxQualityLoss);
|
|
54
|
+
const reason = meetsThreshold
|
|
55
|
+
? `Approved: ${Math.round(costDelta)}% cost reduction, ${Math.round(latencyDelta)}% latency reduction, ${Math.round(qualityDelta)}% quality delta`
|
|
56
|
+
: `Rejected: cost=${Math.round(costDelta)}% (need ${PROMOTION_THRESHOLDS.minCostReduction}%), latency=${Math.round(latencyDelta)}% (need ${PROMOTION_THRESHOLDS.minLatencyReduction}%), quality=${Math.round(qualityDelta)}% (max loss ${PROMOTION_THRESHOLDS.maxQualityLoss}%)`;
|
|
57
|
+
const run = {
|
|
58
|
+
id, templateId,
|
|
59
|
+
baselineSteps: baseline.steps, baselineCostUsd: baseline.costUsd,
|
|
60
|
+
baselineLatencyMs: baseline.latencyMs, baselineScore: baseline.score,
|
|
61
|
+
optimizedSteps: optimized.steps, optimizedCostUsd: optimized.costUsd,
|
|
62
|
+
optimizedLatencyMs: optimized.latencyMs, optimizedScore: optimized.score,
|
|
63
|
+
costDeltaPct: Math.round(costDelta * 10) / 10,
|
|
64
|
+
latencyDeltaPct: Math.round(latencyDelta * 10) / 10,
|
|
65
|
+
qualityDeltaPct: Math.round(qualityDelta * 10) / 10,
|
|
66
|
+
approved: meetsThreshold, reason,
|
|
67
|
+
createdAt: new Date().toISOString(),
|
|
68
|
+
};
|
|
69
|
+
db.prepare(`
|
|
70
|
+
INSERT INTO proof_runs (id, template_id, baseline_steps, baseline_cost_usd, baseline_latency_ms, baseline_score,
|
|
71
|
+
optimized_steps, optimized_cost_usd, optimized_latency_ms, optimized_score,
|
|
72
|
+
cost_delta_pct, latency_delta_pct, quality_delta_pct, approved, reason, created_at)
|
|
73
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
74
|
+
`).run(id, templateId ?? null, baseline.steps, baseline.costUsd, baseline.latencyMs, baseline.score, optimized.steps, optimized.costUsd, optimized.latencyMs, optimized.score, run.costDeltaPct, run.latencyDeltaPct, run.qualityDeltaPct, meetsThreshold ? 1 : 0, reason, run.createdAt);
|
|
75
|
+
return run;
|
|
76
|
+
}
|
|
77
|
+
export function getProofRuns(templateId) {
|
|
78
|
+
const db = getDb();
|
|
79
|
+
const query = templateId
|
|
80
|
+
? db.prepare(`SELECT * FROM proof_runs WHERE template_id = ? ORDER BY created_at DESC LIMIT 20`).all(templateId)
|
|
81
|
+
: db.prepare(`SELECT * FROM proof_runs ORDER BY created_at DESC LIMIT 20`).all();
|
|
82
|
+
return query.map(r => ({
|
|
83
|
+
id: r.id, templateId: r.template_id,
|
|
84
|
+
baselineSteps: r.baseline_steps, baselineCostUsd: r.baseline_cost_usd,
|
|
85
|
+
baselineLatencyMs: r.baseline_latency_ms, baselineScore: r.baseline_score,
|
|
86
|
+
optimizedSteps: r.optimized_steps, optimizedCostUsd: r.optimized_cost_usd,
|
|
87
|
+
optimizedLatencyMs: r.optimized_latency_ms, optimizedScore: r.optimized_score,
|
|
88
|
+
costDeltaPct: r.cost_delta_pct, latencyDeltaPct: r.latency_delta_pct,
|
|
89
|
+
qualityDeltaPct: r.quality_delta_pct, approved: !!r.approved,
|
|
90
|
+
reason: r.reason, createdAt: r.created_at,
|
|
91
|
+
}));
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=proofEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proofEngine.js","sourceRoot":"","sources":["../../src/profiler/proofEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* workflowTemplates.ts — Workflow Template CRUD + Replay
|
|
3
|
+
*
|
|
4
|
+
* Save, list, replay, and delete reusable workflow templates.
|
|
5
|
+
* A template is a compressed, validated tool chain that can be
|
|
6
|
+
* re-executed with new inputs.
|
|
7
|
+
*/
|
|
8
|
+
export interface WorkflowTemplate {
|
|
9
|
+
id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
objective: string;
|
|
12
|
+
steps: Array<{
|
|
13
|
+
toolName: string;
|
|
14
|
+
argsTemplate: Record<string, string>;
|
|
15
|
+
purpose: string;
|
|
16
|
+
parallel: boolean;
|
|
17
|
+
}>;
|
|
18
|
+
avgLatencyMs: number;
|
|
19
|
+
avgCostUsd: number;
|
|
20
|
+
usageCount: number;
|
|
21
|
+
lastUsedAt: string;
|
|
22
|
+
createdAt: string;
|
|
23
|
+
validated: boolean;
|
|
24
|
+
workflowAssetId?: string | null;
|
|
25
|
+
workflowEnvelopeId?: string | null;
|
|
26
|
+
}
|
|
27
|
+
export declare function initWorkflowTemplateTables(): void;
|
|
28
|
+
export declare function saveTemplate(data: {
|
|
29
|
+
name: string;
|
|
30
|
+
objective: string;
|
|
31
|
+
steps: WorkflowTemplate["steps"];
|
|
32
|
+
avgLatencyMs?: number;
|
|
33
|
+
avgCostUsd?: number;
|
|
34
|
+
workflowAssetId?: string | null;
|
|
35
|
+
workflowEnvelopeId?: string | null;
|
|
36
|
+
}): string;
|
|
37
|
+
export declare function listTemplates(): WorkflowTemplate[];
|
|
38
|
+
export declare function getTemplate(id: string): WorkflowTemplate | null;
|
|
39
|
+
export declare function recordTemplateUse(id: string, latencyMs: number, costUsd: number): void;
|
|
40
|
+
export declare function deleteTemplate(id: string): boolean;
|
|
41
|
+
export declare function validateTemplate(id: string): void;
|