@voiden/runner 2.2.0 → 2.3.0-beta.10

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.
Files changed (70) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/bundled-runners/versions.json +8 -6
  3. package/bundled-runners/voiden-advanced-auth-runner.js +1 -1
  4. package/bundled-runners/voiden-graphql-runner.js +1 -1
  5. package/bundled-runners/voiden-mcp-client-runner.js +1 -0
  6. package/bundled-runners/voiden-mcp-tool-runner.js +143 -0
  7. package/bundled-runners/voiden-rest-api-runner.js +1 -1
  8. package/bundled-runners/voiden-sockets-grpcs-runner.js +1 -1
  9. package/dist/cliPrint.d.ts +7 -0
  10. package/dist/cliPrint.d.ts.map +1 -0
  11. package/dist/cliPrint.js +166 -0
  12. package/dist/cliPrint.js.map +1 -0
  13. package/dist/envFile.d.ts +13 -0
  14. package/dist/envFile.d.ts.map +1 -0
  15. package/dist/envFile.js +117 -0
  16. package/dist/envFile.js.map +1 -0
  17. package/dist/headlessContext.d.ts.map +1 -1
  18. package/dist/headlessContext.js +43 -0
  19. package/dist/headlessContext.js.map +1 -1
  20. package/dist/index.js +271 -33
  21. package/dist/index.js.map +1 -1
  22. package/dist/lib.d.ts +12 -8
  23. package/dist/lib.d.ts.map +1 -1
  24. package/dist/lib.js +16 -9
  25. package/dist/lib.js.map +1 -1
  26. package/dist/mcpServing.d.ts +39 -0
  27. package/dist/mcpServing.d.ts.map +1 -0
  28. package/dist/mcpServing.js +154 -0
  29. package/dist/mcpServing.js.map +1 -0
  30. package/dist/mcpToolCapability.d.ts +158 -0
  31. package/dist/mcpToolCapability.d.ts.map +1 -0
  32. package/dist/mcpToolCapability.js +87 -0
  33. package/dist/mcpToolCapability.js.map +1 -0
  34. package/dist/plugins/loader.d.ts.map +1 -1
  35. package/dist/plugins/loader.js +6 -0
  36. package/dist/plugins/loader.js.map +1 -1
  37. package/dist/requestContainerRegistry.d.ts +36 -0
  38. package/dist/requestContainerRegistry.d.ts.map +1 -0
  39. package/dist/requestContainerRegistry.js +42 -0
  40. package/dist/requestContainerRegistry.js.map +1 -0
  41. package/dist/resultBlock.d.ts +7 -1
  42. package/dist/resultBlock.d.ts.map +1 -1
  43. package/dist/resultBlock.js +28 -6
  44. package/dist/resultBlock.js.map +1 -1
  45. package/dist/runner.d.ts +9 -0
  46. package/dist/runner.d.ts.map +1 -1
  47. package/dist/runner.js +32 -11
  48. package/dist/runner.js.map +1 -1
  49. package/dist/runtimeVars.d.ts.map +1 -1
  50. package/dist/runtimeVars.js +18 -0
  51. package/dist/runtimeVars.js.map +1 -1
  52. package/dist/toolRegistry.d.ts +102 -0
  53. package/dist/toolRegistry.d.ts.map +1 -0
  54. package/dist/toolRegistry.js +38 -0
  55. package/dist/toolRegistry.js.map +1 -0
  56. package/dist/types.d.ts +1 -5
  57. package/dist/types.d.ts.map +1 -1
  58. package/package.json +11 -5
  59. package/dist/mcpInstall.d.ts +0 -48
  60. package/dist/mcpInstall.d.ts.map +0 -1
  61. package/dist/mcpInstall.js +0 -194
  62. package/dist/mcpInstall.js.map +0 -1
  63. package/dist/parser.d.ts +0 -24
  64. package/dist/parser.d.ts.map +0 -1
  65. package/dist/parser.js +0 -87
  66. package/dist/parser.js.map +0 -1
  67. package/dist/skillContent.d.ts +0 -8
  68. package/dist/skillContent.d.ts.map +0 -1
  69. package/dist/skillContent.js +0 -42
  70. package/dist/skillContent.js.map +0 -1
@@ -0,0 +1,158 @@
1
+ /**
2
+ * MCP tool capability registry — the /tool-block equivalent of
3
+ * requestContainerRegistry.ts's "core owns an empty registry + accessor;
4
+ * a plugin populates it via context.registerXxx() in its own runner.ts
5
+ * onload(); core never hardcodes knowledge of a block's shape."
6
+ *
7
+ * Everything that actually INTERPRETS the tool/toolparams/toolverifies
8
+ * block's own semantics — what "unbound param" means, that role:
9
+ * 'auth-check' gates other rows, that mode: 'none' skips a row, what
10
+ * onFailure: 'advertise-degraded' does to a description — lives in
11
+ * voiden-mcp-tool's own runner bundle, not here. This file only holds:
12
+ *
13
+ * 1. The stable *protocol* types (ToolState/ToolStatus/ServeDecision/etc.)
14
+ * — these describe a generic verified/unverified/failing, served/
15
+ * excluded shape, not the /tool block's own attrs, so they're
16
+ * legitimately core's public @voiden/runner contract.
17
+ * 2. A single optional provider slot (there's only ever one plugin that
18
+ * owns the /tool capability, unlike registerToolProvider's providers[]
19
+ * array, where multiple protocol plugins each contribute request-
20
+ * container extraction).
21
+ * 3. Thin dispatchers with the same names/signatures the old
22
+ * toolVerification.ts/toolStatusBlock.ts/mcpServing.ts exported
23
+ * directly — so @voiden/mcp (and anything else importing
24
+ * discoverTools/verifyTools/etc. from @voiden/runner) needs zero
25
+ * changes. They gracefully no-op when no provider is registered
26
+ * (e.g. voiden-mcp-tool disabled), matching how toolRegistry.ts's
27
+ * own extractTools() already returns [] with no providers.
28
+ */
29
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
30
+ import type { ToolDef } from './toolRegistry.js';
31
+ export type ToolState = 'verified' | 'unverified' | 'failing';
32
+ export interface ToolVerifyResult {
33
+ entry: any;
34
+ passed: boolean;
35
+ reason?: 'auth-failure' | 'contract-failure';
36
+ runResult?: any;
37
+ }
38
+ export interface ToolStatus {
39
+ tool: ToolDef;
40
+ state: ToolState;
41
+ results: ToolVerifyResult[];
42
+ note?: string;
43
+ }
44
+ export interface DiscoverToolsOptions {
45
+ activePlugins?: string[];
46
+ }
47
+ export interface ToolValidationIssue {
48
+ tool: ToolDef;
49
+ check: 'unbound-param' | 'unresolved-placeholder' | 'missing-section' | 'duplicate-name' | 'readonly-mutating';
50
+ message: string;
51
+ }
52
+ export interface VerifyToolsOptions {
53
+ /** Only run verify entries whose `cadence` matches exactly. Omit to run every entry regardless of cadence. */
54
+ cadence?: string;
55
+ env?: Record<string, string>;
56
+ runtimeVars?: Record<string, any>;
57
+ activePlugins?: string[];
58
+ /** When provided, each tool's own source: environment params (with their
59
+ * own envProfile/envName) are resolved per-tool and merged over `env`
60
+ * before its verification requests run — so verification sees the same
61
+ * values a real call would. Omit to skip this and use `env` as-is. */
62
+ projectRoot?: string;
63
+ }
64
+ export interface ToolStatusRecord {
65
+ state: ToolState;
66
+ lastCheckedAt: string;
67
+ note?: string;
68
+ }
69
+ /** One verify entry's last-known result, cached across scheduler ticks so
70
+ * each entry can be re-verified on its own declared `cadence` instead of
71
+ * the whole server sharing one fixed interval. Keyed by
72
+ * `${tool.toolBlockUid}::${entryIndex}` — stable across re-discovery as
73
+ * long as verify rows aren't reordered/added/removed; if they are, a
74
+ * cache miss just means that one entry is treated as never-verified
75
+ * (immediately due), which is the correct, safe fallback either way. */
76
+ export interface VerifyEntryCacheRecord {
77
+ passed: boolean;
78
+ reason?: 'auth-failure' | 'contract-failure';
79
+ runResult?: any;
80
+ verifiedAt: number;
81
+ }
82
+ export type VerifyEntryCache = Map<string, VerifyEntryCacheRecord>;
83
+ export interface PlanServedToolsOptions {
84
+ /** Reused across calls (the caller owns and persists it — typically the
85
+ * scheduler in @voiden/mcp) so each verify entry is only actually
86
+ * re-run when its own cadence says it's due; entries not yet due reuse
87
+ * their cached result instead of a fresh network call. Omit for a
88
+ * fully-fresh run with no caching (e.g. `--check`, or a one-shot
89
+ * discoverDecisions call with no scheduler behind it). */
90
+ entryCache?: VerifyEntryCache;
91
+ /** Epoch ms "now" — defaults to Date.now() if omitted. Threaded through
92
+ * explicitly (rather than each cache check calling Date.now() itself)
93
+ * so every entry in the same planServedTools() call is judged against
94
+ * the exact same instant. */
95
+ now?: number;
96
+ }
97
+ export interface ServeDecision {
98
+ tool: ToolDef;
99
+ served: boolean;
100
+ /** Set only for tools voiden-mcp-blocks-spec.md §1.6 structurally excludes — never reached verification at all. */
101
+ excluded?: boolean;
102
+ excludedReasons?: string[];
103
+ /** Set only for tools that reached verification. */
104
+ status?: ToolStatus;
105
+ /** Prefixed onto the description when unverified/degraded, so the agent reads it. */
106
+ descriptionNote?: string;
107
+ }
108
+ /**
109
+ * Everything voiden-runner core needs from the plugin that owns the /tool
110
+ * block. voiden-mcp-tool constructs one of these in its own runner.ts
111
+ * onload() and hands it to context.registerMcpToolCapabilityProvider().
112
+ */
113
+ export interface McpToolCapabilityProvider {
114
+ discoverTools(projectRoot: string, opts: {
115
+ activePlugins: string[];
116
+ }): Promise<ToolDef[]>;
117
+ validateTools(projectRoot: string, tools: ToolDef[]): Promise<{
118
+ validTools: ToolDef[];
119
+ issues: ToolValidationIssue[];
120
+ }>;
121
+ verifyTools(tools: ToolDef[], opts: VerifyToolsOptions & {
122
+ activePlugins: string[];
123
+ entryCache?: VerifyEntryCache;
124
+ now?: number;
125
+ }): Promise<ToolStatus[]>;
126
+ planServedTools(projectRoot: string, env: Record<string, string>, activePlugins: string[], opts?: PlanServedToolsOptions): Promise<ServeDecision[]>;
127
+ registerServedTools(server: McpServer, decisions: ServeDecision[], baseEnv: Record<string, string>, runtimeVars: Record<string, any>, activePlugins: string[], commitSha: string | undefined, projectRoot: string): void;
128
+ upsertToolStatus(filePath: string, toolBlockUid: string, status: {
129
+ state: ToolState;
130
+ note?: string;
131
+ }): void;
132
+ /** Best-effort — never throws. Not every project is a git repo. */
133
+ getCommitSha(projectRoot: string): string | undefined;
134
+ }
135
+ export declare function registerMcpToolCapabilityProvider(p: McpToolCapabilityProvider): void;
136
+ export declare function clearMcpToolCapabilityProvider(): void;
137
+ export declare function getMcpToolCapabilityProvider(): McpToolCapabilityProvider | undefined;
138
+ export declare function discoverTools(projectRoot: string, opts?: DiscoverToolsOptions): Promise<ToolDef[]>;
139
+ export declare function validateTools(projectRoot: string, tools: ToolDef[]): Promise<{
140
+ validTools: ToolDef[];
141
+ issues: ToolValidationIssue[];
142
+ }>;
143
+ export declare function verifyTools(tools: ToolDef[], opts?: VerifyToolsOptions & {
144
+ entryCache?: VerifyEntryCache;
145
+ now?: number;
146
+ }): Promise<ToolStatus[]>;
147
+ export declare function planServedTools(projectRoot: string, env: Record<string, string>, activePlugins: string[], opts?: PlanServedToolsOptions): Promise<ServeDecision[]>;
148
+ export declare function registerToolsFromDecisions(server: McpServer, decisions: ServeDecision[], baseEnv: Record<string, string>, runtimeVars: Record<string, any>, activePlugins: string[], commitSha: string | undefined, projectRoot: string): void;
149
+ /** Computes decisions once, then registers them. Used by the stdio path,
150
+ * where one McpServer instance lives for the whole process. */
151
+ export declare function registerDynamicTools(server: McpServer, projectRoot: string, baseEnv: Record<string, string>, runtimeVars: Record<string, any>, activePlugins: string[]): Promise<ServeDecision[]>;
152
+ export declare function upsertToolStatus(filePath: string, toolBlockUid: string, status: {
153
+ state: ToolState;
154
+ note?: string;
155
+ }): void;
156
+ /** Best-effort — returns undefined (never throws) when no provider is registered. */
157
+ export declare function getCommitSha(projectRoot: string): string | undefined;
158
+ //# sourceMappingURL=mcpToolCapability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpToolCapability.d.ts","sourceRoot":"","sources":["../src/mcpToolCapability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAEhD,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,SAAS,CAAA;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,GAAG,CAAA;IACV,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,cAAc,GAAG,kBAAkB,CAAA;IAC5C,SAAS,CAAC,EAAE,GAAG,CAAA;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,SAAS,CAAA;IAChB,OAAO,EAAE,gBAAgB,EAAE,CAAA;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,eAAe,GAAG,wBAAwB,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,mBAAmB,CAAA;IAC9G,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,8GAA8G;IAC9G,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACjC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB;;;2EAGuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,SAAS,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;;;;yEAMyE;AACzE,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,cAAc,GAAG,kBAAkB,CAAA;IAC5C,SAAS,CAAC,EAAE,GAAG,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;CACnB;AACD,MAAM,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAA;AAElE,MAAM,WAAW,sBAAsB;IACrC;;;;;+DAK2D;IAC3D,UAAU,CAAC,EAAE,gBAAgB,CAAA;IAC7B;;;kCAG8B;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,OAAO,CAAA;IACf,mHAAmH;IACnH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,oDAAoD;IACpD,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,qFAAqF;IACrF,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED;;;;GAIG;AACH,MAAM,WAAW,yBAAyB;IACxC,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,aAAa,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;IACzF,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,OAAO,EAAE,CAAC;QAAC,MAAM,EAAE,mBAAmB,EAAE,CAAA;KAAE,CAAC,CAAA;IACvH,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,kBAAkB,GAAG;QAAE,aAAa,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;IACzJ,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;IACnJ,mBAAmB,CACjB,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,aAAa,EAAE,EAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChC,aAAa,EAAE,MAAM,EAAE,EACvB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,WAAW,EAAE,MAAM,GAClB,IAAI,CAAA;IACP,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAC3G,mEAAmE;IACnE,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CACtD;AAID,wBAAgB,iCAAiC,CAAC,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAEpF;AAED,wBAAgB,8BAA8B,IAAI,IAAI,CAErD;AAED,wBAAgB,4BAA4B,IAAI,yBAAyB,GAAG,SAAS,CAEpF;AAMD,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,GAAE,oBAAyB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAG5G;AAED,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAAE,UAAU,EAAE,OAAO,EAAE,CAAC;IAAC,MAAM,EAAE,mBAAmB,EAAE,CAAA;CAAE,CAAC,CAQ5I;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,GAAE,kBAAkB,GAAG;IAAE,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAG1J;AAED,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAGxK;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,aAAa,EAAE,EAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChC,aAAa,EAAE,MAAM,EAAE,EACvB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,WAAW,EAAE,MAAM,GAClB,IAAI,CAEN;AAED;gEACgE;AAChE,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChC,aAAa,EAAE,MAAM,EAAE,GACtB,OAAO,CAAC,aAAa,EAAE,CAAC,CAI1B;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAK1H;AAED,qFAAqF;AACrF,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEpE"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * MCP tool capability registry — the /tool-block equivalent of
3
+ * requestContainerRegistry.ts's "core owns an empty registry + accessor;
4
+ * a plugin populates it via context.registerXxx() in its own runner.ts
5
+ * onload(); core never hardcodes knowledge of a block's shape."
6
+ *
7
+ * Everything that actually INTERPRETS the tool/toolparams/toolverifies
8
+ * block's own semantics — what "unbound param" means, that role:
9
+ * 'auth-check' gates other rows, that mode: 'none' skips a row, what
10
+ * onFailure: 'advertise-degraded' does to a description — lives in
11
+ * voiden-mcp-tool's own runner bundle, not here. This file only holds:
12
+ *
13
+ * 1. The stable *protocol* types (ToolState/ToolStatus/ServeDecision/etc.)
14
+ * — these describe a generic verified/unverified/failing, served/
15
+ * excluded shape, not the /tool block's own attrs, so they're
16
+ * legitimately core's public @voiden/runner contract.
17
+ * 2. A single optional provider slot (there's only ever one plugin that
18
+ * owns the /tool capability, unlike registerToolProvider's providers[]
19
+ * array, where multiple protocol plugins each contribute request-
20
+ * container extraction).
21
+ * 3. Thin dispatchers with the same names/signatures the old
22
+ * toolVerification.ts/toolStatusBlock.ts/mcpServing.ts exported
23
+ * directly — so @voiden/mcp (and anything else importing
24
+ * discoverTools/verifyTools/etc. from @voiden/runner) needs zero
25
+ * changes. They gracefully no-op when no provider is registered
26
+ * (e.g. voiden-mcp-tool disabled), matching how toolRegistry.ts's
27
+ * own extractTools() already returns [] with no providers.
28
+ */
29
+ let provider;
30
+ export function registerMcpToolCapabilityProvider(p) {
31
+ provider = p;
32
+ }
33
+ export function clearMcpToolCapabilityProvider() {
34
+ provider = undefined;
35
+ }
36
+ export function getMcpToolCapabilityProvider() {
37
+ return provider;
38
+ }
39
+ // ─── Thin dispatchers — same names/signatures the old core implementation
40
+ // exported directly, so every existing caller (index.ts, @voiden/mcp)
41
+ // needs zero changes at the call site. ───────────────────────────────────
42
+ export async function discoverTools(projectRoot, opts = {}) {
43
+ if (!provider)
44
+ return [];
45
+ return provider.discoverTools(projectRoot, { activePlugins: opts.activePlugins ?? [] });
46
+ }
47
+ export async function validateTools(projectRoot, tools) {
48
+ // No capability plugin registered → nothing to validate against; treat
49
+ // every discovered tool as valid rather than silently excluding all of
50
+ // them (discoverTools() already returns [] in that case anyway, but this
51
+ // keeps validateTools() correct if ever called with a tool list from
52
+ // elsewhere).
53
+ if (!provider)
54
+ return { validTools: tools, issues: [] };
55
+ return provider.validateTools(projectRoot, tools);
56
+ }
57
+ export async function verifyTools(tools, opts = {}) {
58
+ if (!provider)
59
+ return [];
60
+ return provider.verifyTools(tools, { ...opts, activePlugins: opts.activePlugins ?? [] });
61
+ }
62
+ export async function planServedTools(projectRoot, env, activePlugins, opts) {
63
+ if (!provider)
64
+ return [];
65
+ return provider.planServedTools(projectRoot, env, activePlugins, opts);
66
+ }
67
+ export function registerToolsFromDecisions(server, decisions, baseEnv, runtimeVars, activePlugins, commitSha, projectRoot) {
68
+ provider?.registerServedTools(server, decisions, baseEnv, runtimeVars, activePlugins, commitSha, projectRoot);
69
+ }
70
+ /** Computes decisions once, then registers them. Used by the stdio path,
71
+ * where one McpServer instance lives for the whole process. */
72
+ export async function registerDynamicTools(server, projectRoot, baseEnv, runtimeVars, activePlugins) {
73
+ const decisions = await planServedTools(projectRoot, baseEnv, activePlugins);
74
+ registerToolsFromDecisions(server, decisions, baseEnv, runtimeVars, activePlugins, getCommitSha(projectRoot), projectRoot);
75
+ return decisions;
76
+ }
77
+ export function upsertToolStatus(filePath, toolBlockUid, status) {
78
+ if (!provider) {
79
+ throw new Error('No /tool-block capability plugin is registered — is voiden-mcp-tool enabled?');
80
+ }
81
+ provider.upsertToolStatus(filePath, toolBlockUid, status);
82
+ }
83
+ /** Best-effort — returns undefined (never throws) when no provider is registered. */
84
+ export function getCommitSha(projectRoot) {
85
+ return provider?.getCommitSha(projectRoot);
86
+ }
87
+ //# sourceMappingURL=mcpToolCapability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpToolCapability.js","sourceRoot":"","sources":["../src/mcpToolCapability.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAqCH;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CA8B/I;AAKD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAIzD;AAuDD,wBAAsB,kBAAkB,CACtC,OAAO,UAAQ,EACf,WAAW,GAAE,WAAW,CAAC,MAAM,CAAa,GAC3C,OAAO,CAAC,MAAM,EAAE,CAAC,CAqEnB"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAwCH;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CA8B/I;AAKD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAIzD;AAuDD,wBAAsB,kBAAkB,CACtC,OAAO,UAAQ,EACf,WAAW,GAAE,WAAW,CAAC,MAAM,CAAa,GAC3C,OAAO,CAAC,MAAM,EAAE,CAAC,CAwEnB"}
@@ -18,6 +18,9 @@ import { getCorePlugins, hasCoreRunner, getCoreRunnerImportUrl, getCoreRunnerPat
18
18
  import { fetchCommunityPlugins, findCommunityPlugin, hasCommunityRunner, getCommunityRunnerImportUrl, } from './community.js';
19
19
  import { createHeadlessPluginContext } from '../headlessContext.js';
20
20
  import { clearSchemas } from '../blockSchemaRegistry.js';
21
+ import { clearRequestContainers } from '../requestContainerRegistry.js';
22
+ import { clearToolProviders } from '../toolRegistry.js';
23
+ import { clearMcpToolCapabilityProvider } from '../mcpToolCapability.js';
21
24
  import { readStore, setPluginVersion } from './store.js';
22
25
  import * as https from 'https';
23
26
  import { mkdirSync, createWriteStream } from 'fs';
@@ -140,6 +143,9 @@ export async function loadEnabledPlugins(verbose = false, skipPlugins = new Set(
140
143
  requestOrchestrator.clear();
141
144
  hookRegistry.clearAll();
142
145
  clearSchemas();
146
+ clearRequestContainers();
147
+ clearToolProviders();
148
+ clearMcpToolCapabilityProvider();
143
149
  const loaded = [];
144
150
  // ── Core plugins ──────────────────────────────────────────────────────────
145
151
  // Core plugins default to enabled but can be disabled via ~/.voiden/plugins.json.
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Request Container Registry — lets each protocol plugin (REST, GraphQL,
3
+ * sockets/gRPC, or any third-party protocol plugin) declare its own "this
4
+ * block is the request" shape, instead of voiden-runner's core hardcoding
5
+ * knowledge of every plugin's block types.
6
+ *
7
+ * Mirrors blockSchemaRegistry.ts exactly: plugins call
8
+ * context.registerRequestContainer() in their runner.ts onload(), and the
9
+ * registry is cleared/rebuilt fresh on every loadEnabledPlugins() call (same
10
+ * as block schemas — a disabled plugin's registration shouldn't linger).
11
+ *
12
+ * Used by list_requests (preview) and write_result (finding which block to
13
+ * attach a response to) so both work across whatever protocol plugins happen
14
+ * to be installed, not just the ones bundled with voiden-runner by default.
15
+ */
16
+ export interface RequestContainerDef {
17
+ /** Block type string, e.g. 'gqlquery'. Matches the YAML `type:` field. */
18
+ type: string;
19
+ /** Child block type holding the request URL as its (string) content. */
20
+ urlType: string;
21
+ /** Child block type holding the method/protocol tag as its (string) content, if any. */
22
+ methodType?: string;
23
+ /** Fixed method when the protocol has no explicit method child (e.g. GraphQL is always POST). */
24
+ defaultMethod?: string;
25
+ }
26
+ export declare function registerRequestContainer(def: RequestContainerDef): void;
27
+ export declare function clearRequestContainers(): void;
28
+ export declare function getRequestContainerDef(type: string): RequestContainerDef | undefined;
29
+ /**
30
+ * Finds the block that represents "the request" in a section, across
31
+ * whichever protocol plugins are currently registered.
32
+ */
33
+ export declare function findRequestBlock(blocks: any[]): any | undefined;
34
+ /** Returns all registered container type names — useful for debugging. */
35
+ export declare function getRegisteredContainerTypes(): string[];
36
+ //# sourceMappingURL=requestContainerRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestContainerRegistry.d.ts","sourceRoot":"","sources":["../src/requestContainerRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,mBAAmB;IAClC,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAA;IACZ,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAA;IACf,wFAAwF;IACxF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,iGAAiG;IACjG,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAID,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,mBAAmB,GAAG,IAAI,CAEvE;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAEpF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,SAAS,CAM/D;AAED,0EAA0E;AAC1E,wBAAgB,2BAA2B,IAAI,MAAM,EAAE,CAEtD"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Request Container Registry — lets each protocol plugin (REST, GraphQL,
3
+ * sockets/gRPC, or any third-party protocol plugin) declare its own "this
4
+ * block is the request" shape, instead of voiden-runner's core hardcoding
5
+ * knowledge of every plugin's block types.
6
+ *
7
+ * Mirrors blockSchemaRegistry.ts exactly: plugins call
8
+ * context.registerRequestContainer() in their runner.ts onload(), and the
9
+ * registry is cleared/rebuilt fresh on every loadEnabledPlugins() call (same
10
+ * as block schemas — a disabled plugin's registration shouldn't linger).
11
+ *
12
+ * Used by list_requests (preview) and write_result (finding which block to
13
+ * attach a response to) so both work across whatever protocol plugins happen
14
+ * to be installed, not just the ones bundled with voiden-runner by default.
15
+ */
16
+ const containers = new Map();
17
+ export function registerRequestContainer(def) {
18
+ containers.set(def.type, def);
19
+ }
20
+ export function clearRequestContainers() {
21
+ containers.clear();
22
+ }
23
+ export function getRequestContainerDef(type) {
24
+ return containers.get(type);
25
+ }
26
+ /**
27
+ * Finds the block that represents "the request" in a section, across
28
+ * whichever protocol plugins are currently registered.
29
+ */
30
+ export function findRequestBlock(blocks) {
31
+ for (const type of containers.keys()) {
32
+ const req = blocks.find((b) => b.type === type);
33
+ if (req)
34
+ return req;
35
+ }
36
+ return undefined;
37
+ }
38
+ /** Returns all registered container type names — useful for debugging. */
39
+ export function getRegisteredContainerTypes() {
40
+ return Array.from(containers.keys());
41
+ }
42
+ //# sourceMappingURL=requestContainerRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestContainerRegistry.js","sourceRoot":"","sources":["../src/requestContainerRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAaH,MAAM,UAAU,GAAG,IAAI,GAAG,EAA+B,CAAA;AAEzD,MAAM,UAAU,wBAAwB,CAAC,GAAwB;IAC/D,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;AAC/B,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,UAAU,CAAC,KAAK,EAAE,CAAA;AACpB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,OAAO,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAa;IAC5C,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;QACpD,IAAI,GAAG;YAAE,OAAO,GAAG,CAAA;IACrB,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,2BAA2B;IACzC,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAA;AACtC,CAAC"}
@@ -25,7 +25,13 @@ export declare function buildResponseBlockText(result: RunResult, requestUid: st
25
25
  * section (i.e. before the next request-separator, or EOF), it's replaced.
26
26
  * - Otherwise the new block is inserted immediately after the request block.
27
27
  *
28
- * Throws if no `request` block with a matching `uid` exists in the file.
28
+ * Matches purely by `uid`, not block `type` deliberately protocol-agnostic:
29
+ * REST's request-container block is typed `request`, GraphQL's is `gqlquery`,
30
+ * WebSocket/gRPC's is `socket-request`, and other plugins may use their own
31
+ * type name entirely. uids are unique per block regardless of type, so there's
32
+ * no need to hardcode (and keep updating) a list of "known request types".
33
+ *
34
+ * Throws if no block with a matching `uid` exists in the file.
29
35
  */
30
36
  export declare function upsertResponseBlock(filePath: string, requestUid: string, result: RunResult): void;
31
37
  //# sourceMappingURL=resultBlock.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resultBlock.d.ts","sourceRoot":"","sources":["../src/resultBlock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAkD3C,uEAAuE;AACvE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CA2BpF;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CA4BjG"}
1
+ {"version":3,"file":"resultBlock.d.ts","sourceRoot":"","sources":["../src/resultBlock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAwD3C,uEAAuE;AACvE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CA2BpF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAsCjG"}
@@ -20,6 +20,11 @@ import { readFileSync, writeFileSync } from 'fs';
20
20
  import { randomUUID } from 'crypto';
21
21
  import YAML from 'yaml';
22
22
  const MAX_BODY_CHARS = 20_000;
23
+ // Plain markdown heading placed right before the fenced `response` block —
24
+ // makes the record visible/readable even without the voiden-rest-api plugin's
25
+ // dedicated renderer (e.g. in a raw markdown viewer, or before that plugin
26
+ // picks up this change).
27
+ const RESPONSE_HEADING = '## Response recorded';
23
28
  // Same fence shape as parser.ts's regex, but tracking raw text offsets too
24
29
  // (parser.ts only returns parsed Block[], with no position info) since we
25
30
  // need to splice the source text rather than just read it.
@@ -97,14 +102,20 @@ export function buildResponseBlockText(result, requestUid) {
97
102
  * section (i.e. before the next request-separator, or EOF), it's replaced.
98
103
  * - Otherwise the new block is inserted immediately after the request block.
99
104
  *
100
- * Throws if no `request` block with a matching `uid` exists in the file.
105
+ * Matches purely by `uid`, not block `type` deliberately protocol-agnostic:
106
+ * REST's request-container block is typed `request`, GraphQL's is `gqlquery`,
107
+ * WebSocket/gRPC's is `socket-request`, and other plugins may use their own
108
+ * type name entirely. uids are unique per block regardless of type, so there's
109
+ * no need to hardcode (and keep updating) a list of "known request types".
110
+ *
111
+ * Throws if no block with a matching `uid` exists in the file.
101
112
  */
102
113
  export function upsertResponseBlock(filePath, requestUid, result) {
103
114
  const content = readFileSync(filePath, 'utf-8');
104
115
  const fences = scanFences(content);
105
- const requestFence = fences.find(f => f.type === 'request' && f.uid === requestUid);
116
+ const requestFence = fences.find(f => f.uid === requestUid);
106
117
  if (!requestFence) {
107
- throw new Error(`No request block with uid "${requestUid}" found in ${filePath}`);
118
+ throw new Error(`No block with uid "${requestUid}" found in ${filePath}`);
108
119
  }
109
120
  const nextSeparator = fences.find(f => f.type === 'request-separator' && f.start > requestFence.end);
110
121
  const sectionEnd = nextSeparator ? nextSeparator.start : content.length;
@@ -113,9 +124,20 @@ export function upsertResponseBlock(filePath, requestUid, result) {
113
124
  && f.start > requestFence.end
114
125
  && f.start < sectionEnd);
115
126
  const blockText = buildResponseBlockText(result, requestUid);
116
- const newContent = existingResponse
117
- ? content.slice(0, existingResponse.start) + blockText + content.slice(existingResponse.end)
118
- : content.slice(0, requestFence.end) + '\n\n' + blockText + content.slice(requestFence.end);
127
+ const blockWithHeading = RESPONSE_HEADING + '\n\n' + blockText;
128
+ let newContent;
129
+ if (existingResponse) {
130
+ // Replace the heading together with the block if we recognise one directly
131
+ // preceding it (written by a prior run) — otherwise leave whatever precedes
132
+ // it untouched and just add a heading now.
133
+ const before = content.slice(0, existingResponse.start);
134
+ const headingMatch = before.match(/## Response recorded\s*$/);
135
+ const replaceStart = headingMatch ? existingResponse.start - headingMatch[0].length : existingResponse.start;
136
+ newContent = content.slice(0, replaceStart) + blockWithHeading + content.slice(existingResponse.end);
137
+ }
138
+ else {
139
+ newContent = content.slice(0, requestFence.end) + '\n\n' + blockWithHeading + content.slice(requestFence.end);
140
+ }
119
141
  writeFileSync(filePath, newContent, 'utf-8');
120
142
  }
121
143
  //# sourceMappingURL=resultBlock.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resultBlock.js","sourceRoot":"","sources":["../src/resultBlock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resultBlock.js","sourceRoot":"","sources":["../src/resultBlock.ts"],"names":[],"mappings":"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"}
package/dist/runner.d.ts CHANGED
@@ -25,6 +25,15 @@ export interface RawRequestInfo {
25
25
  /** Public alias — lets callers (e.g. the MCP server's list_requests tool) preview
26
26
  * a section's method/url without executing anything. */
27
27
  export declare function getRequestPreview(blocks: any[]): RawRequestInfo;
28
+ /**
29
+ * Finds the block that represents "the request" in a section, whichever
30
+ * protocol it belongs to. Backed by requestContainerRegistry.ts, populated
31
+ * by each protocol plugin's own context.registerRequestContainer() call —
32
+ * exported so callers that only need the block's `uid` (e.g. the MCP
33
+ * server's list_requests tool) share this same registry instead of
34
+ * hardcoding their own list of protocol block types.
35
+ */
36
+ export declare function findRequestBlock(blocks: any[]): any | undefined;
28
37
  export interface RunOptions {
29
38
  env?: Record<string, string>;
30
39
  verbose?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAYH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AA0D3C,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAM,MAAM,CAAA;IACf,MAAM,EAAG,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,IAAI,CAAC,EAAI,MAAM,CAAA;CAChB;AAED;yDACyD;AACzD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,cAAc,CAE/D;AA+FD,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAU,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,OAAO,CAAC,EAAM,OAAO,CAAA;IACrB,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACjC,qGAAqG;IACrG,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACjC;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,gHAAgH;IAChH,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,SAAS,CAAA;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAQ,aAAa,EAAE,CAAA;IAC9B,aAAa,EAAE,MAAM,EAAE,CAAA;CACxB;AAED,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,aAAa,CAAC,CA8IxB"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAYH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AA0D3C,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAM,MAAM,CAAA;IACf,MAAM,EAAG,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,IAAI,CAAC,EAAI,MAAM,CAAA;CAChB;AAED;yDACyD;AACzD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,cAAc,CAE/D;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,SAAS,CAE/D;AAoGD,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAU,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,OAAO,CAAC,EAAM,OAAO,CAAA;IACrB,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACjC,qGAAqG;IACrG,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACjC;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,gHAAgH;IAChH,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,SAAS,CAAA;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAQ,aAAa,EAAE,CAAA;IAC9B,aAAa,EAAE,MAAM,EAAE,CAAA;CACxB;AAED,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,aAAa,CAAC,CAmJxB"}
package/dist/runner.js CHANGED
@@ -16,12 +16,12 @@
16
16
  * 3. Map PipelineResponse → RunResult
17
17
  */
18
18
  import { readFileSync } from 'fs';
19
- import { parseVoidFileSections } from './parser.js';
20
- import { requestOrchestrator, classifyBlockVersion } from '@voiden/executors';
19
+ import { requestOrchestrator, classifyBlockVersion, parseVoidFileSections } from '@voiden/executors';
21
20
  import { createCliElectron } from './cliElectron.js';
22
21
  import { loadEnabledPlugins } from './plugins/loader.js';
23
22
  import { getInstalledPluginInfo } from './plugins/versionInfo.js';
24
23
  import { normalizeBlocks } from './blockSchemaRegistry.js';
24
+ import { findRequestBlock as findRegisteredRequestBlock, getRequestContainerDef } from './requestContainerRegistry.js';
25
25
  import { extractRuntimeVarRows, captureRuntimeVars } from './runtimeVars.js';
26
26
  // ─── Declared plugin+version check (tagged blocks only — legacy files with no
27
27
  // pluginId attr are skipped entirely, unchanged behaviour) ────────────────────
@@ -63,16 +63,32 @@ function formatVersionError(blockType, pluginId, pluginVersion, status, installe
63
63
  export function getRequestPreview(blocks) {
64
64
  return extractRawRequest(blocks);
65
65
  }
66
+ /**
67
+ * Finds the block that represents "the request" in a section, whichever
68
+ * protocol it belongs to. Backed by requestContainerRegistry.ts, populated
69
+ * by each protocol plugin's own context.registerRequestContainer() call —
70
+ * exported so callers that only need the block's `uid` (e.g. the MCP
71
+ * server's list_requests tool) share this same registry instead of
72
+ * hardcoding their own list of protocol block types.
73
+ */
74
+ export function findRequestBlock(blocks) {
75
+ return findRegisteredRequestBlock(blocks);
76
+ }
66
77
  function extractRawRequest(blocks) {
67
- const req = blocks.find((b) => b.type === 'request');
68
78
  let url = '';
69
79
  let method = 'GET';
70
- if (req && Array.isArray(req.content)) {
71
- for (const node of req.content) {
72
- if (node.type === 'method' && typeof node.content === 'string')
73
- method = node.content.trim();
74
- if (node.type === 'url' && typeof node.content === 'string')
75
- url = node.content.trim();
80
+ const req = findRequestBlock(blocks);
81
+ if (req) {
82
+ const cfg = getRequestContainerDef(req.type);
83
+ if (cfg && Array.isArray(req.content)) {
84
+ for (const node of req.content) {
85
+ if (cfg.methodType && node.type === cfg.methodType && typeof node.content === 'string')
86
+ method = node.content.trim();
87
+ if (node.type === cfg.urlType && typeof node.content === 'string')
88
+ url = node.content.trim();
89
+ }
90
+ if (cfg.defaultMethod)
91
+ method = cfg.defaultMethod;
76
92
  }
77
93
  }
78
94
  const headers = {};
@@ -150,10 +166,15 @@ export async function runVoidFile(filePath, options = {}) {
150
166
  const activePlugins = options.activePlugins ?? await loadEnabledPlugins(verbose, skipPlugins);
151
167
  const content = readFileSync(filePath, 'utf-8');
152
168
  const allSections = parseVoidFileSections(content);
153
- const sections = options.sectionLabel
169
+ // A file with no request-separators has no real "sections" to disambiguate
170
+ // between — it's just one request. Only apply the label filter when
171
+ // there's more than one section to choose from; a single-section file
172
+ // always means "run the one request present", regardless of what
173
+ // sectionLabel was asked for (including none, or a stale/mismatched one).
174
+ const sections = (options.sectionLabel && allSections.length > 1)
154
175
  ? allSections.filter(s => s.label === options.sectionLabel)
155
176
  : allSections;
156
- if (options.sectionLabel && sections.length === 0 && allSections.length > 0) {
177
+ if (options.sectionLabel && allSections.length > 1 && sections.length === 0) {
157
178
  return {
158
179
  results: [{
159
180
  result: {