@juspay/neurolink
Version:
Universal AI Development Platform with working MCP integration, multi-provider support, voice (TTS/STT/realtime), and professional CLI. 58+ external MCP servers discoverable, multimodal file processing, RAG pipelines. Build, test, and deploy AI applicatio
207 lines (206 loc) • 6.26 kB
TypeScript
/**
* Type definitions for the NeuroLink AutoResearch system.
*
* An autonomous experiment loop that proposes code changes, executes
* experiments, evaluates results against a deterministic metric, and
* keeps or discards each change — running unattended for hours.
*/
import type { RepoPolicy } from "../autoresearch/repoPolicy.js";
import type { ResearchStateStore } from "../autoresearch/stateStore.js";
import type { ResultRecorder } from "../autoresearch/resultRecorder.js";
import type { ExperimentRunner } from "../autoresearch/runner.js";
import type { ThinkingLevel } from "./config.js";
export type MetricDirection = "lower" | "higher";
export type MetricConfig = {
name: string;
direction: MetricDirection;
pattern: string;
};
export type MemoryMetricConfig = {
name: string;
pattern: string;
};
export type ResearchConfig = {
repoPath: string;
programPath: string;
mutablePaths: string[];
immutablePaths: string[];
resultsPath: string;
statePath: string;
runCommand: string;
logPath: string;
metric: MetricConfig;
memoryMetric?: MemoryMetricConfig;
timeoutMs: number;
branchPrefix: string;
provider?: string;
model?: string;
maxExperiments?: number;
thinkingLevel?: ThinkingLevel;
};
export type ExperimentStatus = "keep" | "discard" | "crash" | "timeout";
export type ExperimentPhase = "bootstrap" | "baseline" | "propose" | "edit" | "commit" | "run" | "evaluate" | "record" | "accept_or_revert";
export type ResearchState = {
branch: string;
acceptedCommit: string | null;
baselineMetric: number | null;
bestMetric: number | null;
candidateCommit: string | null;
runCount: number;
keepCount: number;
lastStatus: ExperimentStatus | null;
currentPhase: ExperimentPhase;
tag: string;
startedAt: string;
updatedAt: string;
lastSummary?: ExperimentSummary | null;
};
export type ExperimentSummary = {
crashed: boolean;
timedOut: boolean;
metric: number | null;
memoryValue: number | null;
trainingSeconds: number | null;
rawTail: string;
};
export type ExperimentRecord = {
commit: string;
metric: number | null;
memoryGb: number | null;
status: ExperimentStatus;
description: string;
timestamp: string;
};
export type ExperimentStats = {
total: number;
keepCount: number;
discardCount: number;
crashCount: number;
timeoutCount: number;
keepRate: number;
bestMetric: number | null;
bestCommit: string | null;
};
export type ResearchWorkerConfig = Omit<Partial<ResearchConfig>, "repoPath" | "mutablePaths" | "runCommand" | "metric"> & {
repoPath: string;
mutablePaths: string[];
runCommand: string;
metric: MetricConfig;
};
export type PhaseToolPolicy = {
activeTools: string[];
forcedTool?: string;
};
export type AutoresearchInitializedEvent = {
tag: string;
branch: string;
config: {
repoPath: string;
runCommand: string;
metric: MetricConfig;
timeoutMs: number;
};
};
export type AutoresearchResumedEvent = {
tag: string;
branch: string;
runCount: number;
currentPhase: ExperimentPhase;
};
export type AutoresearchPhaseChangedEvent = {
from: ExperimentPhase;
to: ExperimentPhase;
runCount: number;
tag: string;
};
export type AutoresearchExperimentStartedEvent = {
tag: string;
runCount: number;
description: string;
};
export type AutoresearchExperimentCompletedEvent = {
tag: string;
runCount: number;
status: ExperimentStatus;
metric: number | null;
commit: string;
description: string;
durationMs: number;
};
export type AutoresearchMetricImprovedEvent = {
tag: string;
previousBest: number | null;
newBest: number;
commit: string;
direction: MetricDirection;
runCount: number;
};
export type AutoresearchRevertEvent = {
tag: string;
targetCommit: string;
reason: ExperimentStatus;
runCount: number;
};
export type AutoresearchRevertFailedEvent = {
tag: string;
targetCommit: string;
error: string;
runCount: number;
};
export type AutoresearchStateUpdatedEvent = {
tag: string;
phase: ExperimentPhase;
runCount: number;
keepCount: number;
bestMetric: number | null;
};
export type AutoresearchErrorEvent = {
tag: string;
error: string;
code?: string;
phase?: ExperimentPhase;
runCount?: number;
};
/**
* Union map of all autoresearch event names to their payload types.
* Used by TypedEventEmitter consumers for documentation;
* NeuroLinkEvents uses `unknown` payloads for flexibility.
*/
export type AutoresearchEventMap = {
"autoresearch:initialized": AutoresearchInitializedEvent;
"autoresearch:resumed": AutoresearchResumedEvent;
"autoresearch:phase-changed": AutoresearchPhaseChangedEvent;
"autoresearch:experiment-started": AutoresearchExperimentStartedEvent;
"autoresearch:experiment-completed": AutoresearchExperimentCompletedEvent;
"autoresearch:metric-improved": AutoresearchMetricImprovedEvent;
"autoresearch:revert": AutoresearchRevertEvent;
"autoresearch:revert-failed": AutoresearchRevertFailedEvent;
"autoresearch:state-updated": AutoresearchStateUpdatedEvent;
"autoresearch:error": AutoresearchErrorEvent;
};
/** All known autoresearch event names. */
export type AutoresearchEventName = keyof AutoresearchEventMap;
/**
* Minimal emitter interface accepted by autoresearch subsystems.
* Matches the shape injected by NeuroLink via setEmitter().
*/
export type AutoresearchEmitter = {
emit(event: string, ...args: unknown[]): boolean;
};
export declare const AUTORESEARCH_DEFAULTS: {
readonly programPath: "program.md";
readonly resultsPath: "results.tsv";
readonly statePath: ".autoresearch/state.json";
readonly logPath: "run.log";
readonly timeoutMs: 600000;
readonly branchPrefix: "autoresearch/";
readonly thinkingLevel: ThinkingLevel;
};
/** Dependencies required to create research tools. */
export type ResearchToolsDeps = {
config: ResearchConfig;
stateStore: ResearchStateStore;
repoPolicy: RepoPolicy;
runner: ExperimentRunner;
recorder: ResultRecorder;
};