@t-req/core 0.2.0 → 0.2.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/README.md +47 -0
- package/dist/config/engine-options.d.ts +4 -2
- package/dist/config/engine-options.d.ts.map +1 -1
- package/dist/config/index.js +9 -5
- package/dist/config/index.js.map +18 -5
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/types.d.ts +14 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/cookies/persistence.js +2 -2
- package/dist/cookies/persistence.js.map +2 -2
- package/dist/cookies.js +5 -5
- package/dist/cookies.js.map +2 -2
- package/dist/engine/engine.d.ts +3 -0
- package/dist/engine/engine.d.ts.map +1 -1
- package/dist/engine/index.js +4 -4
- package/dist/engine/index.js.map +3 -3
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -4
- package/dist/index.js.map +17 -5
- package/dist/plugin/define.d.ts +65 -0
- package/dist/plugin/define.d.ts.map +1 -0
- package/dist/plugin/index.d.ts +7 -0
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/index.js +8 -0
- package/dist/plugin/index.js.map +22 -0
- package/dist/plugin/loader.d.ts +69 -0
- package/dist/plugin/loader.d.ts.map +1 -0
- package/dist/plugin/manager.d.ts +186 -0
- package/dist/plugin/manager.d.ts.map +1 -0
- package/dist/plugin/permissions.d.ts +33 -0
- package/dist/plugin/permissions.d.ts.map +1 -0
- package/dist/plugin/subprocess.d.ts +100 -0
- package/dist/plugin/subprocess.d.ts.map +1 -0
- package/dist/plugin/types.d.ts +668 -0
- package/dist/plugin/types.d.ts.map +1 -0
- package/dist/resolver/index.js +3 -3
- package/dist/resolver/index.js.map +2 -2
- package/dist/runtime/index.js +2 -2
- package/dist/runtime/index.js.map +2 -2
- package/dist/runtime/types.d.ts.map +1 -1
- package/package.json +9 -3
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { LoadedPlugin, PluginConfigRef, PluginPermission, PluginPermissionsConfig, SubprocessPluginConfig, TreqPlugin } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Get the unique identifier for a plugin: name#instanceId
|
|
4
|
+
*/
|
|
5
|
+
export declare function getPluginId(plugin: TreqPlugin): string;
|
|
6
|
+
/**
|
|
7
|
+
* Parse a plugin ID into name and instanceId.
|
|
8
|
+
*/
|
|
9
|
+
export declare function parsePluginId(id: string): {
|
|
10
|
+
name: string;
|
|
11
|
+
instanceId: string;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Check if a config ref is a subprocess plugin config.
|
|
15
|
+
*/
|
|
16
|
+
export declare function isSubprocessPluginConfig(ref: PluginConfigRef): ref is SubprocessPluginConfig;
|
|
17
|
+
/**
|
|
18
|
+
* Check if a config ref is an inline plugin.
|
|
19
|
+
*/
|
|
20
|
+
export declare function isInlinePlugin(ref: PluginConfigRef): ref is TreqPlugin;
|
|
21
|
+
/**
|
|
22
|
+
* Check if a config ref is a file:// path.
|
|
23
|
+
*/
|
|
24
|
+
export declare function isFilePlugin(ref: PluginConfigRef): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Check if a config ref is an npm package.
|
|
27
|
+
*/
|
|
28
|
+
export declare function isNpmPlugin(ref: PluginConfigRef): boolean;
|
|
29
|
+
export declare function resolveFilePath(fileUrl: string, projectRoot: string, allowOutsideProject: boolean): string;
|
|
30
|
+
/**
|
|
31
|
+
* Resolve and validate a file path, following symlinks.
|
|
32
|
+
* This is called after the initial path resolution to verify the real path.
|
|
33
|
+
*/
|
|
34
|
+
export declare function resolveAndValidateFilePath(filePath: string, projectRoot: string, allowOutsideProject: boolean): Promise<string>;
|
|
35
|
+
/**
|
|
36
|
+
* Resolve permissions for a plugin.
|
|
37
|
+
*/
|
|
38
|
+
export declare function resolvePermissions(plugin: TreqPlugin, permissionsConfig: PluginPermissionsConfig | undefined, warnings: string[]): PluginPermission[];
|
|
39
|
+
export interface LoadPluginsOptions {
|
|
40
|
+
/** Project root directory */
|
|
41
|
+
projectRoot: string;
|
|
42
|
+
/** Plugin configuration references */
|
|
43
|
+
plugins: PluginConfigRef[];
|
|
44
|
+
/** Security settings */
|
|
45
|
+
security?: {
|
|
46
|
+
allowPluginsOutsideProject?: boolean;
|
|
47
|
+
};
|
|
48
|
+
/** Permission configuration */
|
|
49
|
+
pluginPermissions?: PluginPermissionsConfig;
|
|
50
|
+
/** Warning collector */
|
|
51
|
+
warnings?: string[];
|
|
52
|
+
}
|
|
53
|
+
export interface LoadPluginsResult {
|
|
54
|
+
/** Loaded plugins in order */
|
|
55
|
+
plugins: LoadedPlugin[];
|
|
56
|
+
/** Warnings generated during loading */
|
|
57
|
+
warnings: string[];
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Load plugins from configuration.
|
|
61
|
+
* Handles npm packages, file:// URLs, inline plugins, and subprocess plugins.
|
|
62
|
+
*/
|
|
63
|
+
export declare function loadPlugins(options: LoadPluginsOptions): Promise<LoadPluginsResult>;
|
|
64
|
+
/**
|
|
65
|
+
* Merge plugin arrays with deduplication by name#instanceId.
|
|
66
|
+
* Later definitions override earlier ones.
|
|
67
|
+
*/
|
|
68
|
+
export declare function mergePluginRefs(base: PluginConfigRef[], overlay: PluginConfigRef[]): PluginConfigRef[];
|
|
69
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/plugin/loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,uBAAuB,EACvB,sBAAsB,EACtB,UAAU,EACX,MAAM,SAAS,CAAC;AAYjB;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAS9E;AAMD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,eAAe,GAAG,GAAG,IAAI,sBAAsB,CAQ5F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,GAAG,IAAI,UAAU,CAStE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAQ1D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAQzD;AAaD,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,mBAAmB,EAAE,OAAO,GAC3B,MAAM,CA+BR;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,mBAAmB,EAAE,OAAO,GAC3B,OAAO,CAAC,MAAM,CAAC,CA6BjB;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,UAAU,EAClB,iBAAiB,EAAE,uBAAuB,GAAG,SAAS,EACtD,QAAQ,EAAE,MAAM,EAAE,GACjB,gBAAgB,EAAE,CAqCpB;AAMD,MAAM,WAAW,kBAAkB;IACjC,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,sCAAsC;IACtC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,wBAAwB;IACxB,QAAQ,CAAC,EAAE;QACT,0BAA0B,CAAC,EAAE,OAAO,CAAC;KACtC,CAAC;IACF,+BAA+B;IAC/B,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;IAC5C,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,8BAA8B;IAC9B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,wCAAwC;IACxC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAqCzF;AAyMD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,eAAe,EAAE,EACvB,OAAO,EAAE,eAAe,EAAE,GACzB,eAAe,EAAE,CAInB"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import type { EngineEvent } from '../runtime/types';
|
|
2
|
+
import type { Resolver } from '../types';
|
|
3
|
+
import type { CombinedEventSink, CommandHandler, CompiledInput, CompiledOutput, EnterpriseContext, ErrorInput, ErrorOutput, HookContext, LoadedPlugin, MiddlewareFunction, ParseInput, ParseOutput, PluginConfigRef, PluginPermissionsConfig, RequestAfterInput, RequestInput, RequestOutput, ResponseInput, ResponseOutput, RetrySignal, ToolDefinition } from './types';
|
|
4
|
+
export interface PluginManagerOptions {
|
|
5
|
+
/** Project root directory */
|
|
6
|
+
projectRoot: string;
|
|
7
|
+
/** Plugin configuration references */
|
|
8
|
+
plugins?: PluginConfigRef[];
|
|
9
|
+
/** Security settings */
|
|
10
|
+
security?: {
|
|
11
|
+
allowPluginsOutsideProject?: boolean;
|
|
12
|
+
};
|
|
13
|
+
/** Permission configuration */
|
|
14
|
+
pluginPermissions?: PluginPermissionsConfig;
|
|
15
|
+
/** Event sink for combined events */
|
|
16
|
+
onEvent?: CombinedEventSink;
|
|
17
|
+
/** Enterprise context (if available) */
|
|
18
|
+
enterprise?: EnterpriseContext;
|
|
19
|
+
/** Initial secrets for secrets API */
|
|
20
|
+
secrets?: Record<string, string>;
|
|
21
|
+
}
|
|
22
|
+
export interface HookExecutionResult<TOutput> {
|
|
23
|
+
/** Final output after all plugins processed */
|
|
24
|
+
output: TOutput;
|
|
25
|
+
/** Whether any plugin modified the output */
|
|
26
|
+
modified: boolean;
|
|
27
|
+
/** Retry signal if any plugin requested retry */
|
|
28
|
+
retry?: RetrySignal;
|
|
29
|
+
/** Whether to skip the request */
|
|
30
|
+
skip?: boolean;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Central manager for plugin lifecycle, hook execution, and event emission.
|
|
34
|
+
*/
|
|
35
|
+
export declare class PluginManager {
|
|
36
|
+
private options;
|
|
37
|
+
private plugins;
|
|
38
|
+
private resolvers;
|
|
39
|
+
private commands;
|
|
40
|
+
private middleware;
|
|
41
|
+
private tools;
|
|
42
|
+
private warnings;
|
|
43
|
+
private initialized;
|
|
44
|
+
private config;
|
|
45
|
+
private onEvent?;
|
|
46
|
+
private enterprise?;
|
|
47
|
+
private secrets?;
|
|
48
|
+
private session;
|
|
49
|
+
constructor(options: PluginManagerOptions);
|
|
50
|
+
/**
|
|
51
|
+
* Set the event sink for plugin events.
|
|
52
|
+
* This allows setting the event handler after the plugin manager is created,
|
|
53
|
+
* which is useful when the event handler depends on runtime context.
|
|
54
|
+
*/
|
|
55
|
+
setEventSink(sink: CombinedEventSink): void;
|
|
56
|
+
/**
|
|
57
|
+
* Load and initialize all plugins.
|
|
58
|
+
*/
|
|
59
|
+
initialize(): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* Initialize a single plugin.
|
|
62
|
+
*/
|
|
63
|
+
private initializePlugin;
|
|
64
|
+
/**
|
|
65
|
+
* Register a plugin's contributions (resolvers, commands, middleware, tools).
|
|
66
|
+
*/
|
|
67
|
+
private registerPluginContributions;
|
|
68
|
+
/**
|
|
69
|
+
* Teardown all plugins in reverse order.
|
|
70
|
+
*/
|
|
71
|
+
teardown(): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* Create a hook context.
|
|
74
|
+
*/
|
|
75
|
+
createHookContext(options: {
|
|
76
|
+
retries?: number;
|
|
77
|
+
maxRetries?: number;
|
|
78
|
+
variables?: Record<string, unknown>;
|
|
79
|
+
}): HookContext;
|
|
80
|
+
/**
|
|
81
|
+
* Execute parse.after hooks.
|
|
82
|
+
*/
|
|
83
|
+
triggerParseAfter(input: ParseInput, output: ParseOutput): Promise<HookExecutionResult<ParseOutput>>;
|
|
84
|
+
/**
|
|
85
|
+
* Execute request.before hooks.
|
|
86
|
+
*/
|
|
87
|
+
triggerRequestBefore(input: RequestInput, output: RequestOutput): Promise<HookExecutionResult<RequestOutput>>;
|
|
88
|
+
/**
|
|
89
|
+
* Execute request.compiled hooks.
|
|
90
|
+
*/
|
|
91
|
+
triggerRequestCompiled(input: CompiledInput, output: CompiledOutput): Promise<HookExecutionResult<CompiledOutput>>;
|
|
92
|
+
/**
|
|
93
|
+
* Execute request.after hooks (read-only).
|
|
94
|
+
*/
|
|
95
|
+
triggerRequestAfter(input: RequestAfterInput): Promise<void>;
|
|
96
|
+
/**
|
|
97
|
+
* Execute response.after hooks.
|
|
98
|
+
*/
|
|
99
|
+
triggerResponseAfter(input: ResponseInput, output: ResponseOutput): Promise<HookExecutionResult<ResponseOutput>>;
|
|
100
|
+
/**
|
|
101
|
+
* Execute error hooks.
|
|
102
|
+
*/
|
|
103
|
+
triggerError(input: ErrorInput, output: ErrorOutput): Promise<HookExecutionResult<ErrorOutput>>;
|
|
104
|
+
/**
|
|
105
|
+
* Generic hook execution with input/output pattern.
|
|
106
|
+
*/
|
|
107
|
+
private executeHook;
|
|
108
|
+
/**
|
|
109
|
+
* Execute a read-only hook (no output parameter).
|
|
110
|
+
*/
|
|
111
|
+
private executeReadOnlyHook;
|
|
112
|
+
/**
|
|
113
|
+
* Emit a plugin event.
|
|
114
|
+
*/
|
|
115
|
+
private emitPluginEvent;
|
|
116
|
+
/**
|
|
117
|
+
* Emit an engine event to all plugins.
|
|
118
|
+
*/
|
|
119
|
+
emitEngineEvent(event: EngineEvent): void;
|
|
120
|
+
/**
|
|
121
|
+
* Get all registered resolvers.
|
|
122
|
+
*/
|
|
123
|
+
getResolvers(): Record<string, Resolver>;
|
|
124
|
+
/**
|
|
125
|
+
* Get a specific resolver.
|
|
126
|
+
*/
|
|
127
|
+
getResolver(name: string): Resolver | undefined;
|
|
128
|
+
/**
|
|
129
|
+
* Call a resolver and handle errors.
|
|
130
|
+
*/
|
|
131
|
+
callResolver(name: string, args: string[]): Promise<string>;
|
|
132
|
+
/**
|
|
133
|
+
* Get all registered commands.
|
|
134
|
+
*/
|
|
135
|
+
getCommands(): Record<string, CommandHandler>;
|
|
136
|
+
/**
|
|
137
|
+
* Get a specific command.
|
|
138
|
+
*/
|
|
139
|
+
getCommand(name: string): CommandHandler | undefined;
|
|
140
|
+
/**
|
|
141
|
+
* Get all registered middleware.
|
|
142
|
+
*/
|
|
143
|
+
getMiddleware(): MiddlewareFunction[];
|
|
144
|
+
/**
|
|
145
|
+
* Get all registered tools.
|
|
146
|
+
*/
|
|
147
|
+
getTools(): Record<string, ToolDefinition>;
|
|
148
|
+
/**
|
|
149
|
+
* Get all loaded plugins.
|
|
150
|
+
*/
|
|
151
|
+
getPlugins(): LoadedPlugin[];
|
|
152
|
+
/**
|
|
153
|
+
* Get all warnings.
|
|
154
|
+
*/
|
|
155
|
+
getWarnings(): string[];
|
|
156
|
+
/**
|
|
157
|
+
* Check if plugins are loaded.
|
|
158
|
+
*/
|
|
159
|
+
hasPlugins(): boolean;
|
|
160
|
+
/**
|
|
161
|
+
* Get plugin by name.
|
|
162
|
+
*/
|
|
163
|
+
getPlugin(name: string): LoadedPlugin | undefined;
|
|
164
|
+
/**
|
|
165
|
+
* Get plugin info for display.
|
|
166
|
+
*/
|
|
167
|
+
getPluginInfo(): Array<{
|
|
168
|
+
name: string;
|
|
169
|
+
version?: string;
|
|
170
|
+
source: string;
|
|
171
|
+
permissions: string[];
|
|
172
|
+
}>;
|
|
173
|
+
/**
|
|
174
|
+
* Update session variables.
|
|
175
|
+
*/
|
|
176
|
+
setSessionVariable(key: string, value: unknown): void;
|
|
177
|
+
/**
|
|
178
|
+
* Get session variables.
|
|
179
|
+
*/
|
|
180
|
+
getSessionVariables(): Record<string, unknown>;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Create a new plugin manager.
|
|
184
|
+
*/
|
|
185
|
+
export declare function createPluginManager(options: PluginManagerOptions): PluginManager;
|
|
186
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/plugin/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { EnterpriseContext, PluginContext, PluginPermission, ResolvedPluginConfig, TreqPlugin } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Error thrown when a plugin tries to access a capability without permission.
|
|
4
|
+
*/
|
|
5
|
+
export declare class PermissionDeniedError extends Error {
|
|
6
|
+
readonly permission: PluginPermission;
|
|
7
|
+
readonly pluginName: string;
|
|
8
|
+
constructor(permission: PluginPermission, pluginName: string);
|
|
9
|
+
}
|
|
10
|
+
export interface CreateRestrictedContextOptions {
|
|
11
|
+
plugin: TreqPlugin;
|
|
12
|
+
permissions: PluginPermission[];
|
|
13
|
+
config: ResolvedPluginConfig;
|
|
14
|
+
enterprise?: EnterpriseContext;
|
|
15
|
+
secrets?: Record<string, string>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Create a restricted context for a plugin based on its permissions.
|
|
19
|
+
*/
|
|
20
|
+
export declare function createRestrictedContext(options: CreateRestrictedContextOptions): PluginContext;
|
|
21
|
+
/**
|
|
22
|
+
* Validate that a plugin has the required permissions.
|
|
23
|
+
*/
|
|
24
|
+
export declare function validatePermissions(plugin: TreqPlugin, grantedPermissions: PluginPermission[], requiredPermissions: PluginPermission[]): string[];
|
|
25
|
+
/**
|
|
26
|
+
* Check if a plugin has a specific permission.
|
|
27
|
+
*/
|
|
28
|
+
export declare function hasPermission(grantedPermissions: PluginPermission[], permission: PluginPermission): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Assert that a plugin has a specific permission.
|
|
31
|
+
*/
|
|
32
|
+
export declare function assertPermission(grantedPermissions: PluginPermission[], permission: PluginPermission, pluginName: string): void;
|
|
33
|
+
//# sourceMappingURL=permissions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/plugin/permissions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,UAAU,EACX,MAAM,SAAS,CAAC;AAMjB;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;aAE5B,UAAU,EAAE,gBAAgB;aAC5B,UAAU,EAAE,MAAM;gBADlB,UAAU,EAAE,gBAAgB,EAC5B,UAAU,EAAE,MAAM;CAKrC;AAuOD,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,UAAU,CAAC;IACnB,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,MAAM,EAAE,oBAAoB,CAAC;IAC7B,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,8BAA8B,GAAG,aAAa,CA4C9F;AAMD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,UAAU,EAClB,kBAAkB,EAAE,gBAAgB,EAAE,EACtC,mBAAmB,EAAE,gBAAgB,EAAE,GACtC,MAAM,EAAE,CAUV;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,kBAAkB,EAAE,gBAAgB,EAAE,EACtC,UAAU,EAAE,gBAAgB,GAC3B,OAAO,CAET;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,kBAAkB,EAAE,gBAAgB,EAAE,EACtC,UAAU,EAAE,gBAAgB,EAC5B,UAAU,EAAE,MAAM,GACjB,IAAI,CAIN"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type { EngineEvent } from '../runtime/types';
|
|
2
|
+
import type { LoadedPlugin, PluginHooks, PluginPermission, SubprocessPluginConfig, TreqPlugin } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Manages a subprocess plugin process.
|
|
5
|
+
* Communicates via NDJSON over stdin/stdout.
|
|
6
|
+
*/
|
|
7
|
+
export declare class SubprocessPlugin {
|
|
8
|
+
private config;
|
|
9
|
+
private projectRoot;
|
|
10
|
+
private process;
|
|
11
|
+
private requestId;
|
|
12
|
+
private pendingRequests;
|
|
13
|
+
private buffer;
|
|
14
|
+
private initialized;
|
|
15
|
+
private restartCount;
|
|
16
|
+
private capabilities;
|
|
17
|
+
private pluginInfo;
|
|
18
|
+
constructor(config: SubprocessPluginConfig, projectRoot: string);
|
|
19
|
+
/**
|
|
20
|
+
* Start the subprocess and initialize it.
|
|
21
|
+
*/
|
|
22
|
+
start(): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Spawn the subprocess.
|
|
25
|
+
*/
|
|
26
|
+
private spawn;
|
|
27
|
+
/**
|
|
28
|
+
* Initialize the plugin by sending init message.
|
|
29
|
+
*/
|
|
30
|
+
private initialize;
|
|
31
|
+
/**
|
|
32
|
+
* Handle stdout data.
|
|
33
|
+
*/
|
|
34
|
+
private handleStdout;
|
|
35
|
+
/**
|
|
36
|
+
* Handle a parsed response.
|
|
37
|
+
*/
|
|
38
|
+
private handleResponse;
|
|
39
|
+
/**
|
|
40
|
+
* Handle process close.
|
|
41
|
+
*/
|
|
42
|
+
private handleClose;
|
|
43
|
+
/**
|
|
44
|
+
* Handle spawn error.
|
|
45
|
+
*/
|
|
46
|
+
private handleError;
|
|
47
|
+
/**
|
|
48
|
+
* Get the next request ID.
|
|
49
|
+
*/
|
|
50
|
+
private nextId;
|
|
51
|
+
/**
|
|
52
|
+
* Send a request and wait for response.
|
|
53
|
+
*/
|
|
54
|
+
private sendRequest;
|
|
55
|
+
/**
|
|
56
|
+
* Send an event notification (fire-and-forget).
|
|
57
|
+
*/
|
|
58
|
+
sendEvent(event: EngineEvent): void;
|
|
59
|
+
/**
|
|
60
|
+
* Call a resolver.
|
|
61
|
+
*/
|
|
62
|
+
callResolver(name: string, args: string[]): Promise<string>;
|
|
63
|
+
/**
|
|
64
|
+
* Call a hook.
|
|
65
|
+
*/
|
|
66
|
+
callHook(name: keyof PluginHooks, input: Record<string, unknown>, output: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
67
|
+
/**
|
|
68
|
+
* Shutdown the plugin gracefully.
|
|
69
|
+
*/
|
|
70
|
+
shutdown(): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* Get plugin info.
|
|
73
|
+
*/
|
|
74
|
+
getPluginInfo(): {
|
|
75
|
+
name: string;
|
|
76
|
+
version?: string;
|
|
77
|
+
permissions?: PluginPermission[];
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Get plugin capabilities.
|
|
81
|
+
*/
|
|
82
|
+
getCapabilities(): {
|
|
83
|
+
hooks: string[];
|
|
84
|
+
resolvers: string[];
|
|
85
|
+
commands: string[];
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Check if the plugin is initialized.
|
|
89
|
+
*/
|
|
90
|
+
isInitialized(): boolean;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Create a TreqPlugin wrapper for a subprocess plugin.
|
|
94
|
+
*/
|
|
95
|
+
export declare function createSubprocessPluginWrapper(subprocessPlugin: SubprocessPlugin): TreqPlugin;
|
|
96
|
+
/**
|
|
97
|
+
* Load and initialize a subprocess plugin.
|
|
98
|
+
*/
|
|
99
|
+
export declare function loadSubprocessPlugin(config: SubprocessPluginConfig, projectRoot: string): Promise<LoadedPlugin>;
|
|
100
|
+
//# sourceMappingURL=subprocess.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subprocess.d.ts","sourceRoot":"","sources":["../../src/plugin/subprocess.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAEV,YAAY,EACZ,WAAW,EACX,gBAAgB,EAMhB,sBAAsB,EAGtB,UAAU,EACX,MAAM,SAAS,CAAC;AAoCjB;;;GAGG;AACH,qBAAa,gBAAgB;IAmBzB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,WAAW;IAnBrB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,YAAY,CAI2B;IAC/C,OAAO,CAAC,UAAU,CAIM;gBAGd,MAAM,EAAE,sBAAsB,EAC9B,WAAW,EAAE,MAAM;IAG7B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;OAEG;YACW,KAAK;IAoCnB;;OAEG;YACW,UAAU;IAiDxB;;OAEG;IACH,OAAO,CAAC,YAAY;IA6BpB;;OAEG;IACH,OAAO,CAAC,cAAc;IAYtB;;OAEG;IACH,OAAO,CAAC,WAAW;IAwBnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;IACH,OAAO,CAAC,MAAM;IAId;;OAEG;YACW,WAAW;IAyBzB;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAOnC;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAqBjE;;OAEG;IACG,QAAQ,CACZ,IAAI,EAAE,MAAM,WAAW,EACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAsBnC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA+B/B;;OAEG;IACH,aAAa,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAA;KAAE;IAIrF;;OAEG;IACH,eAAe,IAAI;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE;IAI/E;;OAEG;IACH,aAAa,IAAI,OAAO;CAGzB;AAMD;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,UAAU,CA8J5F;AA4CD;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,sBAAsB,EAC9B,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC,CAcvB"}
|