@voiden/runner 2.3.0-beta.1 → 2.3.0-beta.11
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/CHANGELOG.md +68 -0
- package/bundled-runners/versions.json +2 -0
- package/bundled-runners/voiden-faker-runner.js +6 -13
- package/bundled-runners/voiden-mcp-client-runner.js +1 -0
- package/bundled-runners/voiden-mcp-tool-runner.js +143 -0
- package/dist/cliPrint.d.ts +7 -0
- package/dist/cliPrint.d.ts.map +1 -0
- package/dist/cliPrint.js +166 -0
- package/dist/cliPrint.js.map +1 -0
- package/dist/envFile.d.ts +12 -1
- package/dist/envFile.d.ts.map +1 -1
- package/dist/envFile.js +77 -19
- package/dist/envFile.js.map +1 -1
- package/dist/headlessContext.d.ts.map +1 -1
- package/dist/headlessContext.js +34 -0
- package/dist/headlessContext.js.map +1 -1
- package/dist/index.js +268 -9
- package/dist/index.js.map +1 -1
- package/dist/lib.d.ts +8 -1
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +10 -2
- package/dist/lib.js.map +1 -1
- package/dist/mcpServing.d.ts +39 -0
- package/dist/mcpServing.d.ts.map +1 -0
- package/dist/mcpServing.js +154 -0
- package/dist/mcpServing.js.map +1 -0
- package/dist/mcpToolCapability.d.ts +158 -0
- package/dist/mcpToolCapability.d.ts.map +1 -0
- package/dist/mcpToolCapability.js +87 -0
- package/dist/mcpToolCapability.js.map +1 -0
- package/dist/plugins/loader.d.ts.map +1 -1
- package/dist/plugins/loader.js +4 -0
- package/dist/plugins/loader.js.map +1 -1
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +7 -2
- package/dist/runner.js.map +1 -1
- package/dist/runtimeVars.d.ts.map +1 -1
- package/dist/runtimeVars.js +18 -0
- package/dist/runtimeVars.js.map +1 -1
- package/dist/toolRegistry.d.ts +102 -0
- package/dist/toolRegistry.d.ts.map +1 -0
- package/dist/toolRegistry.js +38 -0
- package/dist/toolRegistry.js.map +1 -0
- package/package.json +11 -5
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { RunResult } from './types.js';
|
|
2
|
+
export declare function printRequestResult(result: RunResult, filePath: string, index: number, total: number, showReq: boolean, showRes: boolean, verbose: boolean): void;
|
|
3
|
+
export declare function printRunSummary(results: Array<{
|
|
4
|
+
file: string;
|
|
5
|
+
result: RunResult;
|
|
6
|
+
}>, totalMs: number): void;
|
|
7
|
+
//# sourceMappingURL=cliPrint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliPrint.d.ts","sourceRoot":"","sources":["../src/cliPrint.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAkB,MAAM,YAAY,CAAA;AA8E3D,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,GACf,IAAI,CAmEN;AAID,wBAAgB,eAAe,CAC7B,OAAO,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,CAAC,EACnD,OAAO,EAAE,MAAM,GACd,IAAI,CAkBN"}
|
package/dist/cliPrint.js
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared CLI pretty-printing for a single request's RunResult — the
|
|
3
|
+
* per-request "[i/n] file METHOD url status time", --show-req/--show-res
|
|
4
|
+
* detail, and report-entry (assertions/logs/sections) rendering.
|
|
5
|
+
*
|
|
6
|
+
* Lives here (not left private inside index.ts) so both @voiden/runner's
|
|
7
|
+
* own `run`/`mcp serve` CLI and apps/electron's bundled `voiden run` render
|
|
8
|
+
* identical output — one implementation, not two copies that can drift.
|
|
9
|
+
*/
|
|
10
|
+
import chalk from 'chalk';
|
|
11
|
+
import { basename } from 'path';
|
|
12
|
+
function formatBytes(bytes) {
|
|
13
|
+
if (bytes < 1024)
|
|
14
|
+
return `${bytes}B`;
|
|
15
|
+
if (bytes < 1024 * 1024)
|
|
16
|
+
return `${(bytes / 1024).toFixed(1)}KB`;
|
|
17
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
|
|
18
|
+
}
|
|
19
|
+
function formatDuration(ms) {
|
|
20
|
+
if (ms < 1000)
|
|
21
|
+
return `${ms}ms`;
|
|
22
|
+
return `${(ms / 1000).toFixed(2)}s`;
|
|
23
|
+
}
|
|
24
|
+
function renderReportEntries(entries, verbose) {
|
|
25
|
+
const assertions = entries.filter(e => e.type === 'assertion');
|
|
26
|
+
const logs = entries.filter(e => e.type === 'log');
|
|
27
|
+
const sections = entries.filter(e => e.type === 'section');
|
|
28
|
+
// Assertions — always shown (mirrors the test panel in the app)
|
|
29
|
+
if (assertions.length > 0) {
|
|
30
|
+
const passed = assertions.filter(e => e.type === 'assertion' && e.passed).length;
|
|
31
|
+
const failed = assertions.length - passed;
|
|
32
|
+
console.log(` assertions: ${chalk.green(`${passed} passed`)}` +
|
|
33
|
+
(failed > 0 ? chalk.red(` · ${failed} failed`) : ''));
|
|
34
|
+
for (const e of assertions) {
|
|
35
|
+
if (e.type !== 'assertion')
|
|
36
|
+
continue;
|
|
37
|
+
const icon = e.passed ? chalk.green(' ✓') : chalk.red(' ✗');
|
|
38
|
+
let line = ` ${icon} ${e.message}`;
|
|
39
|
+
if (!e.passed && e.actual !== undefined && e.expected !== undefined) {
|
|
40
|
+
line += chalk.gray(` (got ${JSON.stringify(e.actual)}, expected ${e.operator ?? '=='} ${JSON.stringify(e.expected)})`);
|
|
41
|
+
}
|
|
42
|
+
console.log(line);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Script logs — only shown in verbose mode (same as app behaviour: logs visible in console panel)
|
|
46
|
+
if (verbose && logs.length > 0) {
|
|
47
|
+
const levelIcon = {
|
|
48
|
+
info: chalk.blue('ℹ'),
|
|
49
|
+
debug: chalk.gray('•'),
|
|
50
|
+
warn: chalk.yellow('⚠'),
|
|
51
|
+
error: chalk.red('✗'),
|
|
52
|
+
log: chalk.gray('·'),
|
|
53
|
+
};
|
|
54
|
+
for (const e of logs) {
|
|
55
|
+
if (e.type !== 'log')
|
|
56
|
+
continue;
|
|
57
|
+
const icon = (e.level ? levelIcon[e.level] : undefined) ?? chalk.gray('·');
|
|
58
|
+
console.log(chalk.gray(` ${icon} ${e.message}`));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Section titles — shown when verbose, useful for grouping named test blocks
|
|
62
|
+
if (verbose) {
|
|
63
|
+
for (const e of sections) {
|
|
64
|
+
if (e.type !== 'section')
|
|
65
|
+
continue;
|
|
66
|
+
console.log(chalk.bold.gray(` ── ${e.title} ──`));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function printKeyValue(label, obj) {
|
|
71
|
+
if (!obj || Object.keys(obj).length === 0)
|
|
72
|
+
return;
|
|
73
|
+
console.log(chalk.gray(` ${label}:`));
|
|
74
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
75
|
+
console.log(chalk.gray(` ${chalk.dim(k + ':')} ${v}`));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function printBody(label, body) {
|
|
79
|
+
if (!body)
|
|
80
|
+
return;
|
|
81
|
+
console.log(chalk.gray(` ${label}:`));
|
|
82
|
+
for (const line of body.split('\n')) {
|
|
83
|
+
console.log(chalk.gray(` ${line}`));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export function printRequestResult(result, filePath, index, total, showReq, showRes, verbose) {
|
|
87
|
+
const icon = result.success ? chalk.green(' ✓') : chalk.red(' ✗');
|
|
88
|
+
const counter = chalk.gray(`[${index}/${total}]`);
|
|
89
|
+
const fileName = chalk.bold(basename(filePath));
|
|
90
|
+
console.log();
|
|
91
|
+
console.log(`${counter} ${fileName}`);
|
|
92
|
+
const proto = chalk.cyan(result.protocol.toUpperCase().padEnd(4));
|
|
93
|
+
const method = result.method ? chalk.bold(result.method.padEnd(6)) + ' ' : ' ';
|
|
94
|
+
const url = chalk.underline(result.url || '—');
|
|
95
|
+
const time = chalk.gray(formatDuration(result.durationMs));
|
|
96
|
+
let statusPart = '';
|
|
97
|
+
if (result.status !== undefined) {
|
|
98
|
+
const statusColor = result.success ? chalk.green : chalk.red;
|
|
99
|
+
statusPart = statusColor(` ${result.status} ${result.statusText ?? ''}`);
|
|
100
|
+
}
|
|
101
|
+
else if (result.connected !== undefined) {
|
|
102
|
+
statusPart = result.connected
|
|
103
|
+
? chalk.green(' Connected')
|
|
104
|
+
: chalk.red(' Failed to connect');
|
|
105
|
+
}
|
|
106
|
+
let sizePart = '';
|
|
107
|
+
if (result.size !== undefined) {
|
|
108
|
+
sizePart = chalk.gray(` ${formatBytes(result.size)}`);
|
|
109
|
+
}
|
|
110
|
+
console.log(`${icon} ${proto} ${method}${url}${statusPart} ${time}${sizePart}`);
|
|
111
|
+
// ── Always show request details on failure (helps debug "fetch failed") ────
|
|
112
|
+
if (!result.success) {
|
|
113
|
+
if (result.error)
|
|
114
|
+
console.log(chalk.red(` ${result.error}`));
|
|
115
|
+
console.log(chalk.gray(' ↳ request sent:'));
|
|
116
|
+
console.log(chalk.gray(` url: ${result.url || '—'}`));
|
|
117
|
+
if (result.method)
|
|
118
|
+
console.log(chalk.gray(` method: ${result.method}`));
|
|
119
|
+
printKeyValue('headers', result.requestHeaders);
|
|
120
|
+
if (result.requestBody)
|
|
121
|
+
printBody('body', result.requestBody);
|
|
122
|
+
}
|
|
123
|
+
// ── Report entries (emitted by plugins) ───────────────────────────────────
|
|
124
|
+
if (result.reportEntries && result.reportEntries.length > 0) {
|
|
125
|
+
renderReportEntries(result.reportEntries, verbose);
|
|
126
|
+
}
|
|
127
|
+
// ── Legacy assertion fields ───────────────────────────────────────────────
|
|
128
|
+
if (!result.reportEntries && (result.assertionsPassed !== undefined || result.assertionsFailed !== undefined)) {
|
|
129
|
+
const p = result.assertionsPassed ?? 0;
|
|
130
|
+
const f = result.assertionsFailed ?? 0;
|
|
131
|
+
console.log(` assertions: ${chalk.green(`${p} passed`)}${f > 0 ? chalk.red(` · ${f} failed`) : ''}`);
|
|
132
|
+
}
|
|
133
|
+
// ── --show-req ────────────────────────────────────────────────────────────
|
|
134
|
+
if (showReq && result.success) {
|
|
135
|
+
console.log(chalk.gray(' ↳ request:'));
|
|
136
|
+
console.log(chalk.gray(` url: ${result.url || '—'}`));
|
|
137
|
+
if (result.method)
|
|
138
|
+
console.log(chalk.gray(` method: ${result.method}`));
|
|
139
|
+
printKeyValue('headers', result.requestHeaders);
|
|
140
|
+
if (result.requestBody)
|
|
141
|
+
printBody('body', result.requestBody);
|
|
142
|
+
}
|
|
143
|
+
// ── --show-res ────────────────────────────────────────────────────────────
|
|
144
|
+
if (showRes) {
|
|
145
|
+
console.log(chalk.gray(' ↳ response:'));
|
|
146
|
+
printKeyValue('headers', result.responseHeaders);
|
|
147
|
+
if (result.body)
|
|
148
|
+
printBody('body', result.body);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
const DIVIDER = chalk.gray('─'.repeat(64));
|
|
152
|
+
export function printRunSummary(results, totalMs) {
|
|
153
|
+
const passed = results.filter(r => r.result.success).length;
|
|
154
|
+
const failed = results.length - passed;
|
|
155
|
+
console.log();
|
|
156
|
+
console.log(DIVIDER);
|
|
157
|
+
const passedStr = passed > 0 ? chalk.green(`${passed} passed`) : chalk.gray('0 passed');
|
|
158
|
+
const failedStr = failed > 0 ? chalk.red(`${failed} failed`) : chalk.gray('0 failed');
|
|
159
|
+
console.log(` ${chalk.bold('Summary')} ` +
|
|
160
|
+
`${results.length} request${results.length !== 1 ? 's' : ''} · ` +
|
|
161
|
+
`${passedStr} · ${failedStr} · ` +
|
|
162
|
+
chalk.gray(formatDuration(totalMs) + ' total'));
|
|
163
|
+
console.log(DIVIDER);
|
|
164
|
+
console.log();
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=cliPrint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliPrint.js","sourceRoot":"","sources":["../src/cliPrint.ts"],"names":[],"mappings":"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"}
|
package/dist/envFile.d.ts
CHANGED
|
@@ -1,2 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* `environmentName`, when given, scopes YAML loading to exactly one named
|
|
3
|
+
* environment (e.g. "dev") instead of the default "flatten every
|
|
4
|
+
* environment in the file together" behavior — the latter merges every
|
|
5
|
+
* top-level key's `variables:` (and nested `children:`) into one map
|
|
6
|
+
* regardless of name, which silently lets same-named keys from different
|
|
7
|
+
* environments collide (last one processed wins). Meaningless for a plain
|
|
8
|
+
* .env file (nothing named to select) or a flat YAML mapping with no
|
|
9
|
+
* `variables:`/`children:` structure — ignored in both cases rather than
|
|
10
|
+
* treated as an error, since there's genuinely nothing to scope to.
|
|
11
|
+
*/
|
|
12
|
+
export declare function loadEnvFile(envPath: string, environmentName?: string): Record<string, string>;
|
|
2
13
|
//# sourceMappingURL=envFile.d.ts.map
|
package/dist/envFile.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envFile.d.ts","sourceRoot":"","sources":["../src/envFile.ts"],"names":[],"mappings":"AASA,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"envFile.d.ts","sourceRoot":"","sources":["../src/envFile.ts"],"names":[],"mappings":"AASA;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAS7F"}
|
package/dist/envFile.js
CHANGED
|
@@ -1,11 +1,22 @@
|
|
|
1
1
|
import { readFileSync } from 'fs';
|
|
2
2
|
import { extname } from 'path';
|
|
3
3
|
import YAML from 'yaml';
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* `environmentName`, when given, scopes YAML loading to exactly one named
|
|
6
|
+
* environment (e.g. "dev") instead of the default "flatten every
|
|
7
|
+
* environment in the file together" behavior — the latter merges every
|
|
8
|
+
* top-level key's `variables:` (and nested `children:`) into one map
|
|
9
|
+
* regardless of name, which silently lets same-named keys from different
|
|
10
|
+
* environments collide (last one processed wins). Meaningless for a plain
|
|
11
|
+
* .env file (nothing named to select) or a flat YAML mapping with no
|
|
12
|
+
* `variables:`/`children:` structure — ignored in both cases rather than
|
|
13
|
+
* treated as an error, since there's genuinely nothing to scope to.
|
|
14
|
+
*/
|
|
15
|
+
export function loadEnvFile(envPath, environmentName) {
|
|
5
16
|
const content = readFileSync(envPath, 'utf-8');
|
|
6
17
|
const ext = extname(envPath).toLowerCase();
|
|
7
18
|
if (ext === '.yaml' || ext === '.yml') {
|
|
8
|
-
return parseYamlEnv(content);
|
|
19
|
+
return parseYamlEnv(content, environmentName);
|
|
9
20
|
}
|
|
10
21
|
return parseDotEnv(content);
|
|
11
22
|
}
|
|
@@ -27,33 +38,80 @@ function parseDotEnv(content) {
|
|
|
27
38
|
}
|
|
28
39
|
return env;
|
|
29
40
|
}
|
|
30
|
-
function
|
|
41
|
+
function ownVariables(node) {
|
|
42
|
+
const vars = {};
|
|
43
|
+
if (node.variables != null && typeof node.variables === 'object') {
|
|
44
|
+
for (const [k, v] of Object.entries(node.variables)) {
|
|
45
|
+
if (v != null && typeof v !== 'object')
|
|
46
|
+
vars[k] = String(v);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return vars;
|
|
50
|
+
}
|
|
51
|
+
/** Depth-first search for a named environment node anywhere in the tree
|
|
52
|
+
* (top-level or nested under some ancestor's `children:`), returning its
|
|
53
|
+
* resolved variables — its own `variables:` merged on top of every
|
|
54
|
+
* ancestor's, same inheritance order `collect()` below already produces
|
|
55
|
+
* implicitly for the whole-tree case, just scoped to one branch instead
|
|
56
|
+
* of every branch at once. */
|
|
57
|
+
function findEnvironment(tree, name, inherited = {}) {
|
|
58
|
+
for (const [key, value] of Object.entries(tree)) {
|
|
59
|
+
if (value === null || value === undefined || Array.isArray(value) || typeof value !== 'object')
|
|
60
|
+
continue;
|
|
61
|
+
const node = value;
|
|
62
|
+
const resolved = { ...inherited, ...ownVariables(node) };
|
|
63
|
+
if (key === name)
|
|
64
|
+
return resolved;
|
|
65
|
+
if (node.children != null && typeof node.children === 'object') {
|
|
66
|
+
const found = findEnvironment(node.children, name, resolved);
|
|
67
|
+
if (found)
|
|
68
|
+
return found;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
/** Top-level environment names only (for an error message listing what IS
|
|
74
|
+
* available) — deliberately not the full nested tree, to keep that
|
|
75
|
+
* message short and scannable. */
|
|
76
|
+
function topLevelEnvironmentNames(tree) {
|
|
77
|
+
return Object.entries(tree)
|
|
78
|
+
.filter(([, value]) => value != null && typeof value === 'object' && !Array.isArray(value))
|
|
79
|
+
.map(([key]) => key);
|
|
80
|
+
}
|
|
81
|
+
function parseYamlEnv(content, environmentName) {
|
|
82
|
+
const parsed = YAML.parse(content);
|
|
83
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
|
|
84
|
+
return {};
|
|
85
|
+
const tree = parsed;
|
|
86
|
+
if (environmentName) {
|
|
87
|
+
const found = findEnvironment(tree, environmentName);
|
|
88
|
+
if (found)
|
|
89
|
+
return found;
|
|
90
|
+
// No named-environment structure at all (a flat mapping) means nothing
|
|
91
|
+
// to scope to — fall through to the flatten-everything behavior below
|
|
92
|
+
// rather than erroring on a flag that's simply inapplicable to this file.
|
|
93
|
+
const available = topLevelEnvironmentNames(tree);
|
|
94
|
+
if (available.length > 0) {
|
|
95
|
+
throw new Error(`Environment "${environmentName}" not found in this file. Available: ${available.join(', ')}`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
31
98
|
const env = {};
|
|
32
|
-
const collect = (
|
|
33
|
-
for (const [key, value] of Object.entries(
|
|
99
|
+
const collect = (node) => {
|
|
100
|
+
for (const [key, value] of Object.entries(node)) {
|
|
34
101
|
if (value === null || value === undefined || Array.isArray(value))
|
|
35
102
|
continue;
|
|
36
103
|
if (typeof value !== 'object') {
|
|
37
104
|
env[key] = String(value);
|
|
38
105
|
continue;
|
|
39
106
|
}
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
for (const [k, v] of Object.entries(node.variables)) {
|
|
45
|
-
if (v != null && typeof v !== 'object')
|
|
46
|
-
env[k] = String(v);
|
|
47
|
-
}
|
|
107
|
+
const envNode = value;
|
|
108
|
+
Object.assign(env, ownVariables(envNode));
|
|
109
|
+
if (envNode.children != null && typeof envNode.children === 'object') {
|
|
110
|
+
collect(envNode.children);
|
|
48
111
|
}
|
|
49
|
-
if (hasChildren)
|
|
50
|
-
collect(node.children);
|
|
51
112
|
}
|
|
52
113
|
};
|
|
53
|
-
|
|
54
|
-
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
55
|
-
collect(parsed);
|
|
56
|
-
}
|
|
114
|
+
collect(tree);
|
|
57
115
|
return env;
|
|
58
116
|
}
|
|
59
117
|
//# sourceMappingURL=envFile.js.map
|
package/dist/envFile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envFile.js","sourceRoot":"","sources":["../src/envFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAA;AAOvB,MAAM,UAAU,WAAW,CAAC,OAAe;
|
|
1
|
+
{"version":3,"file":"envFile.js","sourceRoot":"","sources":["../src/envFile.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headlessContext.d.ts","sourceRoot":"","sources":["../src/headlessContext.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"headlessContext.d.ts","sourceRoot":"","sources":["../src/headlessContext.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAUH,OAAO,KAAK,EAAE,aAAa,EAA+C,MAAM,oBAAoB,CAAA;AAEpG,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,OAAe,GACvB,aAAa,CAoHf"}
|
package/dist/headlessContext.js
CHANGED
|
@@ -16,6 +16,10 @@
|
|
|
16
16
|
import { hookRegistry, requestOrchestrator, executeWebSocket, executeGrpc } from '@voiden/executors';
|
|
17
17
|
import { registerBlockSchema } from './blockSchemaRegistry.js';
|
|
18
18
|
import { registerRequestContainer as registerContainerDef } from './requestContainerRegistry.js';
|
|
19
|
+
import { registerToolProvider as registerToolProviderFn } from './toolRegistry.js';
|
|
20
|
+
import { registerMcpToolCapabilityProvider as registerMcpToolCapabilityProviderFn } from './mcpToolCapability.js';
|
|
21
|
+
import { collectVoidFiles } from './discovery.js';
|
|
22
|
+
import { runVoidFile, getRequestPreview } from './runner.js';
|
|
19
23
|
export function createHeadlessPluginContext(extensionId, verbose = false) {
|
|
20
24
|
return {
|
|
21
25
|
// ── Pipeline hook registration (for hook plugins: scripting, auth, etc.) ─
|
|
@@ -61,6 +65,20 @@ export function createHeadlessPluginContext(extensionId, verbose = false) {
|
|
|
61
65
|
},
|
|
62
66
|
// ── Verbosity ────────────────────────────────────────────────────────
|
|
63
67
|
verbose,
|
|
68
|
+
// ── Runner primitives (for the plugin owning the /tool block) ─────────
|
|
69
|
+
// A plugin's runner bundle can't `import` from @voiden/runner itself —
|
|
70
|
+
// it's the host loading the plugin, not an externalized dependency, and
|
|
71
|
+
// the standalone-installed plugin copy has no node_modules to resolve it
|
|
72
|
+
// from anyway. So the handful of core-internal functions the /tool
|
|
73
|
+
// capability's relocated discover/verify/serve logic needs are handed
|
|
74
|
+
// over as already-bound closures here instead, the same way
|
|
75
|
+
// `protocols.executeWebSocket` already exposes a core-internal
|
|
76
|
+
// implementation to socket plugins without them importing it.
|
|
77
|
+
runnerPrimitives: {
|
|
78
|
+
collectVoidFiles: (inputPath) => collectVoidFiles(inputPath),
|
|
79
|
+
runVoidFile: (filePath, options) => runVoidFile(filePath, options),
|
|
80
|
+
getRequestPreview: (blocks) => getRequestPreview(blocks),
|
|
81
|
+
},
|
|
64
82
|
// ── Reporting ────────────────────────────────────────────────────────
|
|
65
83
|
report: {
|
|
66
84
|
add: (_entry) => {
|
|
@@ -88,6 +106,22 @@ export function createHeadlessPluginContext(extensionId, verbose = false) {
|
|
|
88
106
|
registerRequestContainer: (def) => {
|
|
89
107
|
registerContainerDef(def);
|
|
90
108
|
},
|
|
109
|
+
// Host capability not yet in the published @voiden/sdk RunnerContext
|
|
110
|
+
// type, same treatment as registerRequestContainer above — lets the
|
|
111
|
+
// plugin owning the /tool block declare its own block→tool-declaration
|
|
112
|
+
// extraction function, so voiden-runner's tool discovery/verification
|
|
113
|
+
// works without hardcoding knowledge of that block's shape.
|
|
114
|
+
registerToolProvider: (extractFn) => {
|
|
115
|
+
registerToolProviderFn(extractFn);
|
|
116
|
+
},
|
|
117
|
+
// Host capability not yet in the published @voiden/sdk RunnerContext
|
|
118
|
+
// type, same treatment as registerToolProvider above — lets the plugin
|
|
119
|
+
// owning the /tool block hand back its discover/validate/verify/serve
|
|
120
|
+
// implementation (mcpToolCapability.ts's McpToolCapabilityProvider),
|
|
121
|
+
// so voiden-runner core never hardcodes that block's own semantics.
|
|
122
|
+
registerMcpToolCapabilityProvider: (p) => {
|
|
123
|
+
registerMcpToolCapabilityProviderFn(p);
|
|
124
|
+
},
|
|
91
125
|
},
|
|
92
126
|
};
|
|
93
127
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headlessContext.js","sourceRoot":"","sources":["../src/headlessContext.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAiB,mBAAmB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEnH,OAAO,EAAE,mBAAmB,EAAuB,MAAM,0BAA0B,CAAA;AACnF,OAAO,EAAE,wBAAwB,IAAI,oBAAoB,EAA4B,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"headlessContext.js","sourceRoot":"","sources":["../src/headlessContext.ts"],"names":[],"mappings":"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"}
|