@virtualkitchenco/multiverse-sdk 0.0.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/dist/adapters/langchain.d.ts +65 -0
- package/dist/adapters/langchain.d.ts.map +1 -0
- package/dist/adapters/langchain.js +80 -0
- package/dist/adapters/langchain.js.map +1 -0
- package/dist/ci.d.ts +31 -0
- package/dist/ci.d.ts.map +1 -0
- package/dist/ci.js +105 -0
- package/dist/ci.js.map +1 -0
- package/dist/client.d.ts +136 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +92 -0
- package/dist/client.js.map +1 -0
- package/dist/github.d.ts +35 -0
- package/dist/github.d.ts.map +1 -0
- package/dist/github.js +113 -0
- package/dist/github.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/anthropic.d.ts +18 -0
- package/dist/llm/anthropic.d.ts.map +1 -0
- package/dist/llm/anthropic.js +91 -0
- package/dist/llm/anthropic.js.map +1 -0
- package/dist/llm/google.d.ts +18 -0
- package/dist/llm/google.d.ts.map +1 -0
- package/dist/llm/google.js +97 -0
- package/dist/llm/google.js.map +1 -0
- package/dist/llm/index.d.ts +14 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +29 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/openai.d.ts +18 -0
- package/dist/llm/openai.d.ts.map +1 -0
- package/dist/llm/openai.js +78 -0
- package/dist/llm/openai.js.map +1 -0
- package/dist/llm/provider.d.ts +42 -0
- package/dist/llm/provider.d.ts.map +1 -0
- package/dist/llm/provider.js +7 -0
- package/dist/llm/provider.js.map +1 -0
- package/dist/multiverse.d.ts +105 -0
- package/dist/multiverse.d.ts.map +1 -0
- package/dist/multiverse.js +449 -0
- package/dist/multiverse.js.map +1 -0
- package/dist/report.d.ts +30 -0
- package/dist/report.d.ts.map +1 -0
- package/dist/report.js +128 -0
- package/dist/report.js.map +1 -0
- package/dist/simulate.d.ts +49 -0
- package/dist/simulate.d.ts.map +1 -0
- package/dist/simulate.js +476 -0
- package/dist/simulate.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LangChain Adapter
|
|
3
|
+
*
|
|
4
|
+
* Provides wrap() integration for LangChain Runnables.
|
|
5
|
+
*/
|
|
6
|
+
import type { EffectsFn, Invariant, ZodLikeSchema } from '@virtualkitchenco/multiverse-types';
|
|
7
|
+
/**
|
|
8
|
+
* Registry of tool configurations for simulation
|
|
9
|
+
* Maps tool name -> config with output schema, effects, invariants
|
|
10
|
+
*/
|
|
11
|
+
export declare const toolConfigRegistry: Map<string, {
|
|
12
|
+
outputSchema?: ZodLikeSchema;
|
|
13
|
+
effects?: EffectsFn<unknown>;
|
|
14
|
+
invariants?: Invariant[];
|
|
15
|
+
}>;
|
|
16
|
+
/**
|
|
17
|
+
* Configuration for wrapping a Runnable.
|
|
18
|
+
* TOutput is inferred from the Runnable being wrapped.
|
|
19
|
+
*/
|
|
20
|
+
export interface WrapConfig<TOutput = unknown> {
|
|
21
|
+
/** Name for the runnable (used in traces and simulation) */
|
|
22
|
+
name: string;
|
|
23
|
+
/** Description of what this runnable does */
|
|
24
|
+
description: string;
|
|
25
|
+
/** Zod-like schema for the output (helps simulation generate valid responses) */
|
|
26
|
+
outputSchema?: ZodLikeSchema;
|
|
27
|
+
/** Function to derive world state mutations from output */
|
|
28
|
+
effects?: EffectsFn<TOutput>;
|
|
29
|
+
/** Invariants to check after mutations */
|
|
30
|
+
invariants?: Invariant[];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Wrap any LangChain Runnable (tool, retriever, chain, etc.) for Multiverse simulation.
|
|
34
|
+
*
|
|
35
|
+
* During tests, calls are intercepted and simulated based on world state.
|
|
36
|
+
* In production, calls pass through to the real implementation.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* import { wrap } from 'multiverse';
|
|
41
|
+
*
|
|
42
|
+
* // Wrap a retriever
|
|
43
|
+
* const wrappedRetriever = wrap(vectorStore.asRetriever(), {
|
|
44
|
+
* name: 'documentRetriever',
|
|
45
|
+
* description: 'Retrieves relevant documents from the knowledge base',
|
|
46
|
+
* });
|
|
47
|
+
*
|
|
48
|
+
* // Wrap a tool with effects
|
|
49
|
+
* const wrappedSearch = wrap(searchFlights, {
|
|
50
|
+
* name: 'searchFlights',
|
|
51
|
+
* description: 'Search for available flights',
|
|
52
|
+
* outputSchema: SearchResultSchema,
|
|
53
|
+
* effects: (output) => output.flights.map(f => ({
|
|
54
|
+
* operation: 'create',
|
|
55
|
+
* collection: 'flights',
|
|
56
|
+
* id: f.id,
|
|
57
|
+
* data: f,
|
|
58
|
+
* })),
|
|
59
|
+
* });
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export declare function wrap<R extends {
|
|
63
|
+
invoke(input: unknown, ...rest: unknown[]): Promise<unknown>;
|
|
64
|
+
}, TOutput = unknown>(runnable: R, config: WrapConfig<TOutput>): R;
|
|
65
|
+
//# sourceMappingURL=langchain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"langchain.d.ts","sourceRoot":"","sources":["../../src/adapters/langchain.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAG9F;;;GAGG;AACH,eAAO,MAAM,kBAAkB;mBACd,aAAa;cAClB,SAAS,CAAC,OAAO,CAAC;iBACf,SAAS,EAAE;EACtB,CAAC;AAEL;;;GAGG;AACH,MAAM,WAAW,UAAU,CAAC,OAAO,GAAG,OAAO;IAC3C,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,2DAA2D;IAC3D,OAAO,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAC7B,0CAA0C;IAC1C,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,IAAI,CAClB,CAAC,SAAS;IAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,EAC1E,OAAO,GAAG,OAAO,EAEjB,QAAQ,EAAE,CAAC,EACX,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,GAC1B,CAAC,CA4CH"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LangChain Adapter
|
|
3
|
+
*
|
|
4
|
+
* Provides wrap() integration for LangChain Runnables.
|
|
5
|
+
*/
|
|
6
|
+
import { tool, registeredTools } from '../multiverse.js';
|
|
7
|
+
/**
|
|
8
|
+
* Registry of tool configurations for simulation
|
|
9
|
+
* Maps tool name -> config with output schema, effects, invariants
|
|
10
|
+
*/
|
|
11
|
+
export const toolConfigRegistry = new Map();
|
|
12
|
+
/**
|
|
13
|
+
* Wrap any LangChain Runnable (tool, retriever, chain, etc.) for Multiverse simulation.
|
|
14
|
+
*
|
|
15
|
+
* During tests, calls are intercepted and simulated based on world state.
|
|
16
|
+
* In production, calls pass through to the real implementation.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* import { wrap } from 'multiverse';
|
|
21
|
+
*
|
|
22
|
+
* // Wrap a retriever
|
|
23
|
+
* const wrappedRetriever = wrap(vectorStore.asRetriever(), {
|
|
24
|
+
* name: 'documentRetriever',
|
|
25
|
+
* description: 'Retrieves relevant documents from the knowledge base',
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* // Wrap a tool with effects
|
|
29
|
+
* const wrappedSearch = wrap(searchFlights, {
|
|
30
|
+
* name: 'searchFlights',
|
|
31
|
+
* description: 'Search for available flights',
|
|
32
|
+
* outputSchema: SearchResultSchema,
|
|
33
|
+
* effects: (output) => output.flights.map(f => ({
|
|
34
|
+
* operation: 'create',
|
|
35
|
+
* collection: 'flights',
|
|
36
|
+
* id: f.id,
|
|
37
|
+
* data: f,
|
|
38
|
+
* })),
|
|
39
|
+
* });
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export function wrap(runnable, config) {
|
|
43
|
+
const { name, description, outputSchema, effects, invariants } = config;
|
|
44
|
+
// Store in registry for simulation to access
|
|
45
|
+
if (outputSchema || effects) {
|
|
46
|
+
toolConfigRegistry.set(name, {
|
|
47
|
+
outputSchema,
|
|
48
|
+
effects: effects,
|
|
49
|
+
invariants,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
// Create the wrapped invoke function using the core tool() infrastructure
|
|
53
|
+
const wrappedInvoke = tool(async (input) => runnable.invoke(input), {
|
|
54
|
+
name,
|
|
55
|
+
description,
|
|
56
|
+
outputSchema,
|
|
57
|
+
effects: effects,
|
|
58
|
+
invariants,
|
|
59
|
+
});
|
|
60
|
+
// Register the tool so it appears in getTools() and scenario generation
|
|
61
|
+
registeredTools.set(name, {
|
|
62
|
+
name,
|
|
63
|
+
description,
|
|
64
|
+
fn: wrappedInvoke,
|
|
65
|
+
outputSchema,
|
|
66
|
+
effects: effects,
|
|
67
|
+
invariants,
|
|
68
|
+
});
|
|
69
|
+
// Create a proxy that intercepts invoke() but preserves everything else
|
|
70
|
+
return new Proxy(runnable, {
|
|
71
|
+
get(target, prop, receiver) {
|
|
72
|
+
if (prop === 'invoke') {
|
|
73
|
+
return wrappedInvoke;
|
|
74
|
+
}
|
|
75
|
+
// Preserve all other properties/methods
|
|
76
|
+
return Reflect.get(target, prop, receiver);
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=langchain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"langchain.js","sourceRoot":"","sources":["../../src/adapters/langchain.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEzD;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAIrC,CAAC;AAmBL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,IAAI,CAIlB,QAAW,EACX,MAA2B;IAE3B,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAExE,6CAA6C;IAC7C,IAAI,YAAY,IAAI,OAAO,EAAE,CAAC;QAC5B,kBAAkB,CAAC,GAAG,CAAC,IAAI,EAAE;YAC3B,YAAY;YACZ,OAAO,EAAE,OAA6B;YACtC,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAED,0EAA0E;IAC1E,MAAM,aAAa,GAAG,IAAI,CACxB,KAAK,EAAE,KAAc,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAChD;QACE,IAAI;QACJ,WAAW;QACX,YAAY;QACZ,OAAO,EAAE,OAA6B;QACtC,UAAU;KACX,CACF,CAAC;IAEF,wEAAwE;IACxE,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE;QACxB,IAAI;QACJ,WAAW;QACX,EAAE,EAAE,aAAqD;QACzD,YAAY;QACZ,OAAO,EAAE,OAA6B;QACtC,UAAU;KACX,CAAC,CAAC;IAEH,wEAAwE;IACxE,OAAO,IAAI,KAAK,CAAC,QAAkB,EAAE;QACnC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ;YACxB,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtB,OAAO,aAAa,CAAC;YACvB,CAAC;YACD,wCAAwC;YACxC,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC7C,CAAC;KACF,CAAM,CAAC;AACV,CAAC"}
|
package/dist/ci.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CI Environment Detection
|
|
3
|
+
*
|
|
4
|
+
* Detects CI environment (CircleCI, GitHub Actions, etc.)
|
|
5
|
+
* and extracts PR/repo information.
|
|
6
|
+
*/
|
|
7
|
+
export interface CIContext {
|
|
8
|
+
provider: 'circleci' | 'github-actions' | 'unknown';
|
|
9
|
+
isCI: boolean;
|
|
10
|
+
isPR: boolean;
|
|
11
|
+
prNumber: number | null;
|
|
12
|
+
repo: {
|
|
13
|
+
owner: string;
|
|
14
|
+
name: string;
|
|
15
|
+
} | null;
|
|
16
|
+
branch: string | null;
|
|
17
|
+
sha: string | null;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Detect CI environment and extract context
|
|
21
|
+
*/
|
|
22
|
+
export declare function detectCI(): CIContext;
|
|
23
|
+
/**
|
|
24
|
+
* Check if GitHub token is available
|
|
25
|
+
*/
|
|
26
|
+
export declare function hasGitHubToken(): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Get GitHub token
|
|
29
|
+
*/
|
|
30
|
+
export declare function getGitHubToken(): string | null;
|
|
31
|
+
//# sourceMappingURL=ci.d.ts.map
|
package/dist/ci.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci.d.ts","sourceRoot":"","sources":["../src/ci.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,UAAU,GAAG,gBAAgB,GAAG,SAAS,CAAC;IACpD,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;KACd,GAAG,IAAI,CAAC;IACT,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,SAAS,CA2CpC;AAiDD;;GAEG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAE9C"}
|
package/dist/ci.js
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CI Environment Detection
|
|
3
|
+
*
|
|
4
|
+
* Detects CI environment (CircleCI, GitHub Actions, etc.)
|
|
5
|
+
* and extracts PR/repo information.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Detect CI environment and extract context
|
|
9
|
+
*/
|
|
10
|
+
export function detectCI() {
|
|
11
|
+
// CircleCI
|
|
12
|
+
if (process.env.CIRCLECI === 'true') {
|
|
13
|
+
return {
|
|
14
|
+
provider: 'circleci',
|
|
15
|
+
isCI: true,
|
|
16
|
+
isPR: !!process.env.CIRCLE_PULL_REQUEST,
|
|
17
|
+
prNumber: extractCircleCIPRNumber(),
|
|
18
|
+
repo: extractCircleCIRepo(),
|
|
19
|
+
branch: process.env.CIRCLE_BRANCH || null,
|
|
20
|
+
sha: process.env.CIRCLE_SHA1 || null,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
// GitHub Actions
|
|
24
|
+
if (process.env.GITHUB_ACTIONS === 'true') {
|
|
25
|
+
return {
|
|
26
|
+
provider: 'github-actions',
|
|
27
|
+
isCI: true,
|
|
28
|
+
isPR: process.env.GITHUB_EVENT_NAME === 'pull_request',
|
|
29
|
+
prNumber: extractGitHubActionsPRNumber(),
|
|
30
|
+
repo: extractGitHubActionsRepo(),
|
|
31
|
+
branch: process.env.GITHUB_HEAD_REF || process.env.GITHUB_REF_NAME || null,
|
|
32
|
+
sha: process.env.GITHUB_SHA || null,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
// Generic CI detection
|
|
36
|
+
const isCI = !!(process.env.CI ||
|
|
37
|
+
process.env.CONTINUOUS_INTEGRATION ||
|
|
38
|
+
process.env.BUILD_NUMBER);
|
|
39
|
+
return {
|
|
40
|
+
provider: 'unknown',
|
|
41
|
+
isCI,
|
|
42
|
+
isPR: false,
|
|
43
|
+
prNumber: null,
|
|
44
|
+
repo: null,
|
|
45
|
+
branch: null,
|
|
46
|
+
sha: null,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Extract PR number from CircleCI environment
|
|
51
|
+
*/
|
|
52
|
+
function extractCircleCIPRNumber() {
|
|
53
|
+
const prUrl = process.env.CIRCLE_PULL_REQUEST;
|
|
54
|
+
if (!prUrl)
|
|
55
|
+
return null;
|
|
56
|
+
const match = prUrl.match(/\/pull\/(\d+)$/);
|
|
57
|
+
return match ? parseInt(match[1], 10) : null;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Extract repo info from CircleCI environment
|
|
61
|
+
*/
|
|
62
|
+
function extractCircleCIRepo() {
|
|
63
|
+
const owner = process.env.CIRCLE_PROJECT_USERNAME;
|
|
64
|
+
const name = process.env.CIRCLE_PROJECT_REPONAME;
|
|
65
|
+
if (!owner || !name)
|
|
66
|
+
return null;
|
|
67
|
+
return { owner, name };
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Extract PR number from GitHub Actions environment
|
|
71
|
+
*/
|
|
72
|
+
function extractGitHubActionsPRNumber() {
|
|
73
|
+
// GITHUB_REF format for PRs: refs/pull/123/merge
|
|
74
|
+
const ref = process.env.GITHUB_REF;
|
|
75
|
+
if (!ref)
|
|
76
|
+
return null;
|
|
77
|
+
const match = ref.match(/^refs\/pull\/(\d+)\/merge$/);
|
|
78
|
+
return match ? parseInt(match[1], 10) : null;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Extract repo info from GitHub Actions environment
|
|
82
|
+
*/
|
|
83
|
+
function extractGitHubActionsRepo() {
|
|
84
|
+
// GITHUB_REPOSITORY format: owner/repo
|
|
85
|
+
const repo = process.env.GITHUB_REPOSITORY;
|
|
86
|
+
if (!repo)
|
|
87
|
+
return null;
|
|
88
|
+
const [owner, name] = repo.split('/');
|
|
89
|
+
if (!owner || !name)
|
|
90
|
+
return null;
|
|
91
|
+
return { owner, name };
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Check if GitHub token is available
|
|
95
|
+
*/
|
|
96
|
+
export function hasGitHubToken() {
|
|
97
|
+
return !!process.env.GITHUB_TOKEN;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get GitHub token
|
|
101
|
+
*/
|
|
102
|
+
export function getGitHubToken() {
|
|
103
|
+
return process.env.GITHUB_TOKEN || null;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=ci.js.map
|
package/dist/ci.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci.js","sourceRoot":"","sources":["../src/ci.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multiverse API Client
|
|
3
|
+
*
|
|
4
|
+
* Thin client that calls the Multiverse API for all simulation logic.
|
|
5
|
+
*/
|
|
6
|
+
import type { Scenario, Trace, QualityResult } from '@virtualkitchenco/multiverse-types';
|
|
7
|
+
export interface APIClientConfig {
|
|
8
|
+
baseUrl: string;
|
|
9
|
+
apiKey?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface CreateSessionRequest {
|
|
12
|
+
task: string;
|
|
13
|
+
tools: Array<{
|
|
14
|
+
name: string;
|
|
15
|
+
description: string;
|
|
16
|
+
}>;
|
|
17
|
+
scenarioConfig?: {
|
|
18
|
+
count?: number;
|
|
19
|
+
};
|
|
20
|
+
seed?: Record<string, Record<string, unknown>>;
|
|
21
|
+
llmConfig: {
|
|
22
|
+
provider: string;
|
|
23
|
+
model?: string;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export interface SimulateRequest {
|
|
27
|
+
tool: string;
|
|
28
|
+
input: unknown;
|
|
29
|
+
description: string;
|
|
30
|
+
outputSchema?: unknown;
|
|
31
|
+
/** If true, client will compute effects - server should not apply LLM mutations */
|
|
32
|
+
hasClientEffects?: boolean;
|
|
33
|
+
}
|
|
34
|
+
export interface SimulateResponse {
|
|
35
|
+
output: unknown;
|
|
36
|
+
mutations: Array<{
|
|
37
|
+
operation: string;
|
|
38
|
+
collection: string;
|
|
39
|
+
id: string;
|
|
40
|
+
data?: Record<string, unknown>;
|
|
41
|
+
}>;
|
|
42
|
+
worldState: Record<string, unknown>;
|
|
43
|
+
analysis?: {
|
|
44
|
+
action: string;
|
|
45
|
+
matches: string[];
|
|
46
|
+
gaps: string[];
|
|
47
|
+
reasoning: string;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Multiverse API Client
|
|
52
|
+
*/
|
|
53
|
+
export declare class MultiverseClient {
|
|
54
|
+
private baseUrl;
|
|
55
|
+
private apiKey?;
|
|
56
|
+
constructor(config: APIClientConfig);
|
|
57
|
+
private request;
|
|
58
|
+
/**
|
|
59
|
+
* Create a new test session
|
|
60
|
+
*/
|
|
61
|
+
createSession(request: CreateSessionRequest): Promise<{
|
|
62
|
+
sessionId: string;
|
|
63
|
+
scenarios: Scenario[];
|
|
64
|
+
}>;
|
|
65
|
+
/**
|
|
66
|
+
* Start a new run
|
|
67
|
+
*/
|
|
68
|
+
createRun(sessionId: string, scenarioId: string, runIndex?: number): Promise<{
|
|
69
|
+
runId: string;
|
|
70
|
+
initialUserMessage: string;
|
|
71
|
+
worldState: Record<string, unknown>;
|
|
72
|
+
}>;
|
|
73
|
+
/**
|
|
74
|
+
* Simulate a tool call
|
|
75
|
+
*/
|
|
76
|
+
simulate(sessionId: string, runId: string, request: SimulateRequest): Promise<SimulateResponse>;
|
|
77
|
+
/**
|
|
78
|
+
* Record a trace entry
|
|
79
|
+
*/
|
|
80
|
+
recordTrace(sessionId: string, runId: string, type: 'user' | 'agent', message: string): Promise<void>;
|
|
81
|
+
/**
|
|
82
|
+
* Get user response (multi-turn)
|
|
83
|
+
*/
|
|
84
|
+
getUserResponse(sessionId: string, runId: string, agentMessage: string): Promise<{
|
|
85
|
+
userMessage: string;
|
|
86
|
+
conversationComplete: boolean;
|
|
87
|
+
mood: number;
|
|
88
|
+
}>;
|
|
89
|
+
/**
|
|
90
|
+
* Get run state
|
|
91
|
+
*/
|
|
92
|
+
getState(sessionId: string, runId: string): Promise<{
|
|
93
|
+
worldState: Record<string, unknown>;
|
|
94
|
+
trace: Trace;
|
|
95
|
+
}>;
|
|
96
|
+
/**
|
|
97
|
+
* Judge a run
|
|
98
|
+
*/
|
|
99
|
+
judge(sessionId: string, runId: string, taskCompleted: boolean): Promise<QualityResult>;
|
|
100
|
+
/**
|
|
101
|
+
* Apply mutations to world state
|
|
102
|
+
*/
|
|
103
|
+
applyMutations(sessionId: string, runId: string, mutations: Array<{
|
|
104
|
+
operation: 'create' | 'update' | 'delete';
|
|
105
|
+
collection: string;
|
|
106
|
+
id: string;
|
|
107
|
+
data?: Record<string, unknown>;
|
|
108
|
+
}>, tool?: string): Promise<void>;
|
|
109
|
+
/**
|
|
110
|
+
* Sync test results to server for dashboard
|
|
111
|
+
*/
|
|
112
|
+
sync(results: {
|
|
113
|
+
id: string;
|
|
114
|
+
runs: Array<{
|
|
115
|
+
id: string;
|
|
116
|
+
runId: string;
|
|
117
|
+
testId: string;
|
|
118
|
+
scenario: Scenario;
|
|
119
|
+
trace: Trace;
|
|
120
|
+
taskCompleted: boolean;
|
|
121
|
+
quality: QualityResult;
|
|
122
|
+
passed: boolean;
|
|
123
|
+
duration: number;
|
|
124
|
+
}>;
|
|
125
|
+
passRate: number;
|
|
126
|
+
weakSpots: Array<{
|
|
127
|
+
scenario: string;
|
|
128
|
+
passRate: number;
|
|
129
|
+
}>;
|
|
130
|
+
duration: number;
|
|
131
|
+
}): Promise<{
|
|
132
|
+
success: boolean;
|
|
133
|
+
url: string;
|
|
134
|
+
}>;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAEzF,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,cAAc,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/C,SAAS,EAAE;QACT,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAEhB,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mFAAmF;IACnF,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,KAAK,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAChC,CAAC,CAAC;IACH,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE;QACT,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,MAAM,EAAE,eAAe;YAKrB,OAAO;IA2BrB;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC;QAC1D,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,QAAQ,EAAE,CAAC;KACvB,CAAC;IAIF;;OAEG;IACG,SAAS,CACb,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,MAAU,GACnB,OAAO,CAAC;QACT,KAAK,EAAE,MAAM,CAAC;QACd,kBAAkB,EAAE,MAAM,CAAC;QAC3B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACrC,CAAC;IAOF;;OAEG;IACG,QAAQ,CACZ,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,gBAAgB,CAAC;IAQ5B;;OAEG;IACG,WAAW,CACf,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GAAG,OAAO,EACtB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IAQhB;;OAEG;IACG,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC;QACT,WAAW,EAAE,MAAM,CAAC;QACpB,oBAAoB,EAAE,OAAO,CAAC;QAC9B,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IAQF;;OAEG;IACG,QAAQ,CACZ,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QACT,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,KAAK,EAAE,KAAK,CAAC;KACd,CAAC;IAIF;;OAEG;IACG,KAAK,CACT,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,OAAO,GACrB,OAAO,CAAC,aAAa,CAAC;IAQzB;;OAEG;IACG,cAAc,CAClB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,KAAK,CAAC;QACf,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;QAC1C,UAAU,EAAE,MAAM,CAAC;QACnB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAChC,CAAC,EACF,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC;IAQhB;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE;QAClB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,KAAK,CAAC;YACV,EAAE,EAAE,MAAM,CAAC;YACX,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,EAAE,MAAM,CAAC;YACf,QAAQ,EAAE,QAAQ,CAAC;YACnB,KAAK,EAAE,KAAK,CAAC;YACb,aAAa,EAAE,OAAO,CAAC;YACvB,OAAO,EAAE,aAAa,CAAC;YACvB,MAAM,EAAE,OAAO,CAAC;YAChB,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC,CAAC;QACH,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,KAAK,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACzD,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CAG/C"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multiverse API Client
|
|
3
|
+
*
|
|
4
|
+
* Thin client that calls the Multiverse API for all simulation logic.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Multiverse API Client
|
|
8
|
+
*/
|
|
9
|
+
export class MultiverseClient {
|
|
10
|
+
baseUrl;
|
|
11
|
+
apiKey;
|
|
12
|
+
constructor(config) {
|
|
13
|
+
this.baseUrl = config.baseUrl.replace(/\/$/, ''); // Remove trailing slash
|
|
14
|
+
this.apiKey = config.apiKey;
|
|
15
|
+
}
|
|
16
|
+
async request(method, path, body) {
|
|
17
|
+
const headers = {
|
|
18
|
+
'Content-Type': 'application/json',
|
|
19
|
+
};
|
|
20
|
+
if (this.apiKey) {
|
|
21
|
+
headers['Authorization'] = `Bearer ${this.apiKey}`;
|
|
22
|
+
}
|
|
23
|
+
const response = await fetch(`${this.baseUrl}${path}`, {
|
|
24
|
+
method,
|
|
25
|
+
headers,
|
|
26
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
27
|
+
});
|
|
28
|
+
if (!response.ok) {
|
|
29
|
+
const error = await response.text();
|
|
30
|
+
throw new Error(`API error ${response.status}: ${error}`);
|
|
31
|
+
}
|
|
32
|
+
return response.json();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Create a new test session
|
|
36
|
+
*/
|
|
37
|
+
async createSession(request) {
|
|
38
|
+
return this.request('POST', '/api/sessions', request);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Start a new run
|
|
42
|
+
*/
|
|
43
|
+
async createRun(sessionId, scenarioId, runIndex = 0) {
|
|
44
|
+
return this.request('POST', `/api/sessions/${sessionId}/runs`, {
|
|
45
|
+
scenarioId,
|
|
46
|
+
runIndex,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Simulate a tool call
|
|
51
|
+
*/
|
|
52
|
+
async simulate(sessionId, runId, request) {
|
|
53
|
+
return this.request('POST', `/api/sessions/${sessionId}/runs/${runId}/simulate`, request);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Record a trace entry
|
|
57
|
+
*/
|
|
58
|
+
async recordTrace(sessionId, runId, type, message) {
|
|
59
|
+
await this.request('POST', `/api/sessions/${sessionId}/runs/${runId}/trace`, { type, message });
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get user response (multi-turn)
|
|
63
|
+
*/
|
|
64
|
+
async getUserResponse(sessionId, runId, agentMessage) {
|
|
65
|
+
return this.request('POST', `/api/sessions/${sessionId}/runs/${runId}/user-respond`, { agentMessage });
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get run state
|
|
69
|
+
*/
|
|
70
|
+
async getState(sessionId, runId) {
|
|
71
|
+
return this.request('GET', `/api/sessions/${sessionId}/runs/${runId}/state`);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Judge a run
|
|
75
|
+
*/
|
|
76
|
+
async judge(sessionId, runId, taskCompleted) {
|
|
77
|
+
return this.request('POST', `/api/sessions/${sessionId}/runs/${runId}/judge`, { taskCompleted });
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Apply mutations to world state
|
|
81
|
+
*/
|
|
82
|
+
async applyMutations(sessionId, runId, mutations, tool) {
|
|
83
|
+
await this.request('POST', `/api/sessions/${sessionId}/runs/${runId}/mutations`, { mutations, tool });
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Sync test results to server for dashboard
|
|
87
|
+
*/
|
|
88
|
+
async sync(results) {
|
|
89
|
+
return this.request('POST', '/api/sync', results);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/github.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub PR Integration
|
|
3
|
+
*
|
|
4
|
+
* Posts report cards to GitHub PRs via the GitHub API.
|
|
5
|
+
*/
|
|
6
|
+
import type { CIContext } from './ci.js';
|
|
7
|
+
export interface GitHubOptions {
|
|
8
|
+
token: string;
|
|
9
|
+
owner: string;
|
|
10
|
+
repo: string;
|
|
11
|
+
prNumber: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Post or update a comment on a GitHub PR
|
|
15
|
+
*
|
|
16
|
+
* Uses a marker comment to find and update existing comments
|
|
17
|
+
* instead of creating duplicates on each run.
|
|
18
|
+
*/
|
|
19
|
+
export declare function postToPR(markdown: string, options: GitHubOptions): Promise<{
|
|
20
|
+
commentId: number;
|
|
21
|
+
url: string;
|
|
22
|
+
}>;
|
|
23
|
+
/**
|
|
24
|
+
* Build GitHub options from CI context
|
|
25
|
+
*/
|
|
26
|
+
export declare function buildGitHubOptions(ci: CIContext, token: string): GitHubOptions | null;
|
|
27
|
+
/**
|
|
28
|
+
* Post report to PR if running in CI with appropriate context
|
|
29
|
+
*/
|
|
30
|
+
export declare function postReportToPR(markdown: string, ci: CIContext): Promise<{
|
|
31
|
+
posted: boolean;
|
|
32
|
+
url?: string;
|
|
33
|
+
error?: string;
|
|
34
|
+
}>;
|
|
35
|
+
//# sourceMappingURL=github.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../src/github.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAIzC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAuD7C;AAsCD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,SAAS,EACb,KAAK,EAAE,MAAM,GACZ,aAAa,GAAG,IAAI,CAWtB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,SAAS,GACZ,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAmB5D"}
|