@yuaone/core 0.3.3 → 0.4.0
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/agent-loop.d.ts +62 -0
- package/dist/agent-loop.d.ts.map +1 -1
- package/dist/agent-loop.js +705 -18
- package/dist/agent-loop.js.map +1 -1
- package/dist/background-agent.d.ts +110 -0
- package/dist/background-agent.d.ts.map +1 -0
- package/dist/background-agent.js +255 -0
- package/dist/background-agent.js.map +1 -0
- package/dist/coding-standards.d.ts +45 -0
- package/dist/coding-standards.d.ts.map +1 -0
- package/dist/coding-standards.js +1152 -0
- package/dist/coding-standards.js.map +1 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +2 -6
- package/dist/constants.js.map +1 -1
- package/dist/context-manager.d.ts +6 -0
- package/dist/context-manager.d.ts.map +1 -1
- package/dist/context-manager.js +23 -4
- package/dist/context-manager.js.map +1 -1
- package/dist/index.d.ts +28 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -2
- package/dist/index.js.map +1 -1
- package/dist/llm-client.d.ts +8 -3
- package/dist/llm-client.d.ts.map +1 -1
- package/dist/llm-client.js +64 -13
- package/dist/llm-client.js.map +1 -1
- package/dist/plugin-auto-loader.d.ts +108 -0
- package/dist/plugin-auto-loader.d.ts.map +1 -0
- package/dist/plugin-auto-loader.js +743 -0
- package/dist/plugin-auto-loader.js.map +1 -0
- package/dist/plugin-registry.d.ts +112 -0
- package/dist/plugin-registry.d.ts.map +1 -0
- package/dist/plugin-registry.js +319 -0
- package/dist/plugin-registry.js.map +1 -0
- package/dist/plugin-types.d.ts +388 -0
- package/dist/plugin-types.d.ts.map +1 -0
- package/dist/plugin-types.js +8 -0
- package/dist/plugin-types.js.map +1 -0
- package/dist/plugin-validator.d.ts +54 -0
- package/dist/plugin-validator.d.ts.map +1 -0
- package/dist/plugin-validator.js +129 -0
- package/dist/plugin-validator.js.map +1 -0
- package/dist/repo-knowledge-graph.d.ts +112 -0
- package/dist/repo-knowledge-graph.d.ts.map +1 -0
- package/dist/repo-knowledge-graph.js +561 -0
- package/dist/repo-knowledge-graph.js.map +1 -0
- package/dist/role-registry.js +1 -1
- package/dist/role-registry.js.map +1 -1
- package/dist/self-debug-loop.d.ts +257 -0
- package/dist/self-debug-loop.d.ts.map +1 -0
- package/dist/self-debug-loop.js +870 -0
- package/dist/self-debug-loop.js.map +1 -0
- package/dist/skill-learner.d.ts +136 -0
- package/dist/skill-learner.d.ts.map +1 -0
- package/dist/skill-learner.js +382 -0
- package/dist/skill-learner.js.map +1 -0
- package/dist/skill-loader.d.ts +90 -0
- package/dist/skill-loader.d.ts.map +1 -0
- package/dist/skill-loader.js +309 -0
- package/dist/skill-loader.js.map +1 -0
- package/dist/specialist-registry.d.ts +132 -0
- package/dist/specialist-registry.d.ts.map +1 -0
- package/dist/specialist-registry.js +413 -0
- package/dist/specialist-registry.js.map +1 -0
- package/dist/sub-agent-prompts.d.ts +45 -0
- package/dist/sub-agent-prompts.d.ts.map +1 -0
- package/dist/sub-agent-prompts.js +177 -0
- package/dist/sub-agent-prompts.js.map +1 -0
- package/dist/sub-agent-router.d.ts +75 -0
- package/dist/sub-agent-router.d.ts.map +1 -0
- package/dist/sub-agent-router.js +174 -0
- package/dist/sub-agent-router.js.map +1 -0
- package/dist/sub-agent.d.ts +48 -0
- package/dist/sub-agent.d.ts.map +1 -1
- package/dist/sub-agent.js +108 -5
- package/dist/sub-agent.js.map +1 -1
- package/dist/system-prompt.d.ts +26 -0
- package/dist/system-prompt.d.ts.map +1 -1
- package/dist/system-prompt.js +177 -7
- package/dist/system-prompt.js.map +1 -1
- package/dist/task-classifier.d.ts +25 -1
- package/dist/task-classifier.d.ts.map +1 -1
- package/dist/task-classifier.js +171 -1
- package/dist/task-classifier.js.map +1 -1
- package/dist/tool-planner.d.ts +160 -0
- package/dist/tool-planner.d.ts.map +1 -0
- package/dist/tool-planner.js +501 -0
- package/dist/tool-planner.js.map +1 -0
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -1
- package/plugins/git/patterns/branch-patterns.json +101 -0
- package/plugins/git/patterns/commit-patterns.json +186 -0
- package/plugins/git/plugin.yaml +128 -0
- package/plugins/git/skills/branch-strategy.md +172 -0
- package/plugins/git/skills/commit-conv.md +178 -0
- package/plugins/git/skills/conflict-resolve.md +159 -0
- package/plugins/git/skills/history-clean.md +199 -0
- package/plugins/git/skills/pr-review.md +196 -0
- package/plugins/git/strategies/conflict-resolve.json +244 -0
- package/plugins/git/strategies/release-flow.json +292 -0
- package/plugins/git/validators/rules.json +348 -0
- package/plugins/react/patterns/anti-patterns.json +88 -0
- package/plugins/react/patterns/components.json +80 -0
- package/plugins/react/patterns/hooks.json +72 -0
- package/plugins/react/plugin.yaml +229 -0
- package/plugins/react/skills/bugfix.md +208 -0
- package/plugins/react/skills/component-gen.md +206 -0
- package/plugins/react/skills/hook-extract.md +208 -0
- package/plugins/react/skills/ssr.md +256 -0
- package/plugins/react/skills/test.md +273 -0
- package/plugins/react/strategies/build-fix.json +43 -0
- package/plugins/react/strategies/hook-loop-fix.json +36 -0
- package/plugins/react/strategies/hydration-fix.json +42 -0
- package/plugins/react/validators/rules.json +92 -0
- package/plugins/typescript/patterns/best-practices.json +25 -0
- package/plugins/typescript/patterns/common-errors.json +32 -0
- package/plugins/typescript/plugin.yaml +74 -0
- package/plugins/typescript/skills/debug.md +23 -0
- package/plugins/typescript/skills/migration.md +24 -0
- package/plugins/typescript/skills/refactor.md +22 -0
- package/plugins/typescript/skills/strict-mode.md +23 -0
- package/plugins/typescript/strategies/strict-migration.json +37 -0
- package/plugins/typescript/strategies/type-error-fix.json +37 -0
- package/plugins/typescript/validators/rules.json +28 -0
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin System Types — YUAN Agent Plugin & Skill Framework
|
|
3
|
+
*
|
|
4
|
+
* Defines the complete type system for plugins, skills, strategies,
|
|
5
|
+
* patterns, validators, and their runtime states.
|
|
6
|
+
*/
|
|
7
|
+
/** Trust levels for plugins — determines security policy */
|
|
8
|
+
export type PluginTrustLevel = "official" | "verified" | "community" | "local";
|
|
9
|
+
/** Plugin categories for organization and discovery */
|
|
10
|
+
export type PluginCategory = "coding" | "devops" | "security" | "design" | "no-code" | "data" | "general";
|
|
11
|
+
/** Plugin type — determines security policy */
|
|
12
|
+
export type PluginType = "knowledge" | "tool" | "hybrid";
|
|
13
|
+
/** Sandbox mode for tool plugins */
|
|
14
|
+
export type PluginSandboxMode = "none" | "restricted" | "isolated";
|
|
15
|
+
/** How a plugin's triggers activate */
|
|
16
|
+
export type PluginTriggerMode = "auto" | "suggest" | "manual";
|
|
17
|
+
/** Plugin manifest — the SSOT for a plugin's metadata and contents */
|
|
18
|
+
export interface PluginManifest {
|
|
19
|
+
/** Unique plugin ID, e.g. "@yuaone/plugin-typescript" */
|
|
20
|
+
id: string;
|
|
21
|
+
/** Display name */
|
|
22
|
+
name: string;
|
|
23
|
+
/** Semver version string */
|
|
24
|
+
version: string;
|
|
25
|
+
/** Human-readable description */
|
|
26
|
+
description: string;
|
|
27
|
+
/** Author name or org */
|
|
28
|
+
author: string;
|
|
29
|
+
/** Plugin category */
|
|
30
|
+
category: PluginCategory;
|
|
31
|
+
/** Trust level */
|
|
32
|
+
trustLevel: PluginTrustLevel;
|
|
33
|
+
/** Plugin type — knowledge, tool, or hybrid */
|
|
34
|
+
type: PluginType;
|
|
35
|
+
/** Sandbox mode for tool execution */
|
|
36
|
+
sandbox?: PluginSandboxMode;
|
|
37
|
+
/** Default trigger mode */
|
|
38
|
+
triggerMode?: PluginTriggerMode;
|
|
39
|
+
/** Plugin API version (for compatibility checks) */
|
|
40
|
+
pluginApiVersion?: number;
|
|
41
|
+
/** Estimated prompt tokens when injected */
|
|
42
|
+
estimatedPromptTokens?: number;
|
|
43
|
+
/** Integrity checksum, e.g. "sha256:abc123..." */
|
|
44
|
+
checksum?: string;
|
|
45
|
+
/** Auto-detect configuration */
|
|
46
|
+
detect?: PluginDetectConfig;
|
|
47
|
+
/** Skill definitions */
|
|
48
|
+
skills?: SkillDefinition[];
|
|
49
|
+
/** Tool definitions */
|
|
50
|
+
tools?: PluginToolDefinition[];
|
|
51
|
+
/** Code pattern definitions */
|
|
52
|
+
patterns?: PatternDefinition[];
|
|
53
|
+
/** Strategy definitions */
|
|
54
|
+
strategies?: StrategyDefinition[];
|
|
55
|
+
/** Validator definitions */
|
|
56
|
+
validators?: ValidatorDefinition[];
|
|
57
|
+
/** Trigger definitions */
|
|
58
|
+
triggers?: PluginTrigger[];
|
|
59
|
+
/** Required permissions */
|
|
60
|
+
permissions?: PluginPermissions;
|
|
61
|
+
/** User-configurable settings */
|
|
62
|
+
config?: Record<string, PluginConfigField>;
|
|
63
|
+
/** Other plugin dependencies (id → semver range) */
|
|
64
|
+
dependencies?: Record<string, string>;
|
|
65
|
+
/** Minimum YUAN engine version */
|
|
66
|
+
engineVersion?: string;
|
|
67
|
+
/** License identifier */
|
|
68
|
+
license?: string;
|
|
69
|
+
}
|
|
70
|
+
/** Configuration for automatic plugin detection */
|
|
71
|
+
export interface PluginDetectConfig {
|
|
72
|
+
/** Files that must exist */
|
|
73
|
+
files?: string[];
|
|
74
|
+
/** Package dependencies to check */
|
|
75
|
+
dependencies?: string[];
|
|
76
|
+
/** Glob patterns for file existence */
|
|
77
|
+
glob?: string[];
|
|
78
|
+
/** Environment variables to check */
|
|
79
|
+
env?: string[];
|
|
80
|
+
}
|
|
81
|
+
/** Skill definition within a plugin */
|
|
82
|
+
export interface SkillDefinition {
|
|
83
|
+
/** Unique skill ID within the plugin */
|
|
84
|
+
id: string;
|
|
85
|
+
/** Display name */
|
|
86
|
+
name: string;
|
|
87
|
+
/** Human-readable description */
|
|
88
|
+
description: string;
|
|
89
|
+
/** How this skill gets triggered */
|
|
90
|
+
trigger: SkillTrigger;
|
|
91
|
+
/** Markdown template path (relative to plugin) or inline content */
|
|
92
|
+
template: string;
|
|
93
|
+
/** Whether this skill is enabled by default */
|
|
94
|
+
enabled: boolean;
|
|
95
|
+
/** Tags for search/matching */
|
|
96
|
+
tags?: string[];
|
|
97
|
+
}
|
|
98
|
+
/** How a skill gets triggered */
|
|
99
|
+
export interface SkillTrigger {
|
|
100
|
+
/** Trigger kind */
|
|
101
|
+
kind: "file_pattern" | "command" | "auto" | "manual";
|
|
102
|
+
/** Glob or regex pattern (for file_pattern / auto) */
|
|
103
|
+
pattern?: string;
|
|
104
|
+
/** Slash command name (for command kind) */
|
|
105
|
+
command?: string;
|
|
106
|
+
/** Auto-trigger confidence threshold (0–1) */
|
|
107
|
+
confidence?: number;
|
|
108
|
+
/** Required context items for activation */
|
|
109
|
+
requires?: string[];
|
|
110
|
+
/** Exclusion patterns */
|
|
111
|
+
exclude?: string[];
|
|
112
|
+
/** Minimum ms between triggers (debounce) */
|
|
113
|
+
cooldown?: number;
|
|
114
|
+
}
|
|
115
|
+
/** Plugin-level trigger — maps error/task patterns to skills and strategies */
|
|
116
|
+
export interface PluginTrigger {
|
|
117
|
+
/** Regex pattern to match against errors/tasks */
|
|
118
|
+
pattern: string;
|
|
119
|
+
/** Trigger kind classification */
|
|
120
|
+
kind?: "error" | "task" | "file" | "dependency";
|
|
121
|
+
/** Skill to activate */
|
|
122
|
+
skill: string;
|
|
123
|
+
/** Strategy to apply (optional) */
|
|
124
|
+
strategy?: string;
|
|
125
|
+
/** Priority (higher = more preferred) */
|
|
126
|
+
priority?: number;
|
|
127
|
+
/** Required dependencies for this trigger */
|
|
128
|
+
requires?: string[];
|
|
129
|
+
/** Exclusion conditions */
|
|
130
|
+
exclude?: string[];
|
|
131
|
+
/** Cooldown in minutes */
|
|
132
|
+
cooldown?: number;
|
|
133
|
+
/** Max matches per session */
|
|
134
|
+
maxMatches?: number;
|
|
135
|
+
/** Trigger activation mode */
|
|
136
|
+
triggerMode?: PluginTriggerMode;
|
|
137
|
+
}
|
|
138
|
+
/** Side effect level for tools — determines approval requirements */
|
|
139
|
+
export type ToolSideEffectLevel = "none" | "read" | "write" | "execute" | "destructive";
|
|
140
|
+
/** Tool provided by a plugin */
|
|
141
|
+
export interface PluginToolDefinition {
|
|
142
|
+
/** Tool name (snake_case) */
|
|
143
|
+
name: string;
|
|
144
|
+
/** Human-readable description */
|
|
145
|
+
description: string;
|
|
146
|
+
/** JSON Schema for input parameters */
|
|
147
|
+
inputSchema: Record<string, unknown>;
|
|
148
|
+
/** Whether this tool requires user approval */
|
|
149
|
+
requiresApproval?: boolean;
|
|
150
|
+
/** Risk level classification */
|
|
151
|
+
riskLevel?: "low" | "medium" | "high";
|
|
152
|
+
/** Side effect level — determines approval policy */
|
|
153
|
+
sideEffectLevel?: ToolSideEffectLevel;
|
|
154
|
+
}
|
|
155
|
+
/** Code pattern for recognition and action */
|
|
156
|
+
export interface PatternDefinition {
|
|
157
|
+
/** Unique pattern ID */
|
|
158
|
+
id: string;
|
|
159
|
+
/** Display name */
|
|
160
|
+
name: string;
|
|
161
|
+
/** Detection regex or AST query */
|
|
162
|
+
detect: string;
|
|
163
|
+
/** Action to take when detected */
|
|
164
|
+
action: "suggest" | "auto-fix" | "warn";
|
|
165
|
+
/** Fix template (if action is auto-fix or suggest) */
|
|
166
|
+
template?: string;
|
|
167
|
+
}
|
|
168
|
+
/** Strategy for agent behavior — a multi-step plan for solving a problem class */
|
|
169
|
+
export interface StrategyDefinition {
|
|
170
|
+
/** Unique strategy ID */
|
|
171
|
+
id: string;
|
|
172
|
+
/** Display name */
|
|
173
|
+
name: string;
|
|
174
|
+
/** Human-readable description */
|
|
175
|
+
description: string;
|
|
176
|
+
/** Problem class this strategy addresses */
|
|
177
|
+
problemClass?: string;
|
|
178
|
+
/** Ordered execution phases */
|
|
179
|
+
phases: StrategyPhase[];
|
|
180
|
+
/** Criteria that must be met for success */
|
|
181
|
+
exitCriteria?: string[];
|
|
182
|
+
/** Fallback strategy ID if this one fails */
|
|
183
|
+
fallback?: string;
|
|
184
|
+
/** Estimated token cost */
|
|
185
|
+
estimatedTokens?: number;
|
|
186
|
+
/** Confidence level (0–1) */
|
|
187
|
+
confidence?: number;
|
|
188
|
+
}
|
|
189
|
+
/** A phase within a strategy */
|
|
190
|
+
export interface StrategyPhase {
|
|
191
|
+
/** Phase name */
|
|
192
|
+
name: string;
|
|
193
|
+
/** Tools allowed in this phase */
|
|
194
|
+
tools: string[];
|
|
195
|
+
/** Maximum iterations for this phase */
|
|
196
|
+
maxIterations: number;
|
|
197
|
+
/** Human-readable success criteria */
|
|
198
|
+
successCriteria: string;
|
|
199
|
+
}
|
|
200
|
+
/** Validator for quality/safety checks */
|
|
201
|
+
export interface ValidatorDefinition {
|
|
202
|
+
/** Unique validator ID */
|
|
203
|
+
id: string;
|
|
204
|
+
/** Validation stage */
|
|
205
|
+
stage: "pre" | "post" | "quality" | "safety";
|
|
206
|
+
/** Display name */
|
|
207
|
+
name: string;
|
|
208
|
+
/** Command or function reference to execute */
|
|
209
|
+
check: string;
|
|
210
|
+
/** Severity level */
|
|
211
|
+
severity?: "warning" | "error" | "critical";
|
|
212
|
+
}
|
|
213
|
+
/** Plugin permissions — what a plugin is allowed to do */
|
|
214
|
+
export interface PluginPermissions {
|
|
215
|
+
/** Can read files */
|
|
216
|
+
fileRead?: boolean;
|
|
217
|
+
/** Can write/modify files */
|
|
218
|
+
fileWrite?: boolean;
|
|
219
|
+
/** Can execute shell commands */
|
|
220
|
+
shellExec?: boolean;
|
|
221
|
+
/** Can make network requests */
|
|
222
|
+
networkAccess?: boolean;
|
|
223
|
+
/** Can perform git operations */
|
|
224
|
+
gitOps?: boolean;
|
|
225
|
+
/** Maximum tokens per tool call */
|
|
226
|
+
maxTokensPerCall?: number;
|
|
227
|
+
}
|
|
228
|
+
/** Plugin config field definition — for user-configurable settings */
|
|
229
|
+
export interface PluginConfigField {
|
|
230
|
+
/** Value type */
|
|
231
|
+
type: "string" | "number" | "boolean" | "select";
|
|
232
|
+
/** Default value */
|
|
233
|
+
default: unknown;
|
|
234
|
+
/** Human-readable description */
|
|
235
|
+
description: string;
|
|
236
|
+
/** Options for select type */
|
|
237
|
+
options?: string[];
|
|
238
|
+
}
|
|
239
|
+
/** Installed plugin state — tracks an installed plugin and its config */
|
|
240
|
+
export interface InstalledPlugin {
|
|
241
|
+
/** The plugin manifest */
|
|
242
|
+
manifest: PluginManifest;
|
|
243
|
+
/** Whether the plugin is currently enabled */
|
|
244
|
+
enabled: boolean;
|
|
245
|
+
/** User-configured values (overrides manifest defaults) */
|
|
246
|
+
config: Record<string, unknown>;
|
|
247
|
+
/** Installation timestamp (epoch ms) */
|
|
248
|
+
installedAt: number;
|
|
249
|
+
/** Last update timestamp (epoch ms) */
|
|
250
|
+
updatedAt: number;
|
|
251
|
+
}
|
|
252
|
+
/** Plugin search result from marketplace */
|
|
253
|
+
export interface PluginSearchResult {
|
|
254
|
+
/** Plugin ID */
|
|
255
|
+
id: string;
|
|
256
|
+
/** Display name */
|
|
257
|
+
name: string;
|
|
258
|
+
/** Description */
|
|
259
|
+
description: string;
|
|
260
|
+
/** Latest version */
|
|
261
|
+
version: string;
|
|
262
|
+
/** Author */
|
|
263
|
+
author: string;
|
|
264
|
+
/** Category */
|
|
265
|
+
category: PluginCategory;
|
|
266
|
+
/** Trust level */
|
|
267
|
+
trustLevel: PluginTrustLevel;
|
|
268
|
+
/** Total downloads */
|
|
269
|
+
downloads: number;
|
|
270
|
+
/** Average rating (0–5) */
|
|
271
|
+
rating: number;
|
|
272
|
+
/** Number of ratings */
|
|
273
|
+
ratingCount: number;
|
|
274
|
+
}
|
|
275
|
+
/** Context passed to skill trigger matching */
|
|
276
|
+
export interface SkillContext {
|
|
277
|
+
/** Current file path being worked on */
|
|
278
|
+
filePath?: string;
|
|
279
|
+
/** Slash command entered by user */
|
|
280
|
+
command?: string;
|
|
281
|
+
/** Error message (if triggered by error) */
|
|
282
|
+
errorMessage?: string;
|
|
283
|
+
/** Current task description */
|
|
284
|
+
taskDescription?: string;
|
|
285
|
+
/** Project dependencies (package names) */
|
|
286
|
+
projectDependencies?: string[];
|
|
287
|
+
}
|
|
288
|
+
/** A fully loaded plugin with parsed resources */
|
|
289
|
+
export interface LoadedPlugin {
|
|
290
|
+
/** The original manifest */
|
|
291
|
+
manifest: PluginManifest;
|
|
292
|
+
/** Parsed skills keyed by ID */
|
|
293
|
+
skills: Map<string, ParsedSkill>;
|
|
294
|
+
/** Parsed strategies keyed by ID */
|
|
295
|
+
strategies: Map<string, StrategyDefinition>;
|
|
296
|
+
/** Patterns keyed by ID */
|
|
297
|
+
patterns: Map<string, PatternDefinition>;
|
|
298
|
+
/** Validators */
|
|
299
|
+
validators: ValidatorDefinition[];
|
|
300
|
+
/** Base path of the plugin on disk */
|
|
301
|
+
basePath: string;
|
|
302
|
+
}
|
|
303
|
+
/** A parsed skill with resolved template content */
|
|
304
|
+
export interface ParsedSkill {
|
|
305
|
+
/** Original definition */
|
|
306
|
+
definition: SkillDefinition;
|
|
307
|
+
/** Resolved template content (markdown) */
|
|
308
|
+
content: string;
|
|
309
|
+
/** Extracted domain from ## Identity section */
|
|
310
|
+
domain?: string;
|
|
311
|
+
/** Extracted type from ## Identity section */
|
|
312
|
+
type?: string;
|
|
313
|
+
/** Extracted confidence from ## Identity section */
|
|
314
|
+
confidence?: number;
|
|
315
|
+
/** Extracted known patterns */
|
|
316
|
+
knownPatterns?: ParsedKnownPattern[];
|
|
317
|
+
/** Extracted validation checklist items */
|
|
318
|
+
validationChecklist?: string[];
|
|
319
|
+
/** Extracted tool sequence */
|
|
320
|
+
toolSequence?: string[];
|
|
321
|
+
}
|
|
322
|
+
/** A known pattern extracted from skill markdown */
|
|
323
|
+
export interface ParsedKnownPattern {
|
|
324
|
+
/** Pattern name */
|
|
325
|
+
name: string;
|
|
326
|
+
/** Symptoms list */
|
|
327
|
+
symptoms: string[];
|
|
328
|
+
/** Root causes */
|
|
329
|
+
causes: string[];
|
|
330
|
+
/** Resolution strategies */
|
|
331
|
+
strategy: string[];
|
|
332
|
+
/** Tools to use */
|
|
333
|
+
tools: string[];
|
|
334
|
+
/** Common pitfalls */
|
|
335
|
+
pitfalls: string[];
|
|
336
|
+
}
|
|
337
|
+
/** Plugin lifecycle hooks — optional hooks plugins can implement */
|
|
338
|
+
export interface PluginLifecycle {
|
|
339
|
+
/** Called when the plugin is loaded */
|
|
340
|
+
onLoad?(context: PluginLifecycleContext): Promise<void>;
|
|
341
|
+
/** Called when the plugin is unloaded */
|
|
342
|
+
onUnload?(): Promise<void>;
|
|
343
|
+
/** Called before the agent runs a task */
|
|
344
|
+
beforeAgentRun?(task: string): Promise<PluginAdvice | null>;
|
|
345
|
+
/** Called after the agent completes a task */
|
|
346
|
+
afterAgentRun?(result: PluginAgentResult): Promise<void>;
|
|
347
|
+
/** Called when an error occurs */
|
|
348
|
+
onError?(error: string): Promise<PluginAdvice | null>;
|
|
349
|
+
/** Called when the project is scanned */
|
|
350
|
+
onProjectScan?(projectInfo: PluginProjectInfo): Promise<void>;
|
|
351
|
+
}
|
|
352
|
+
/** Context provided to plugin lifecycle hooks */
|
|
353
|
+
export interface PluginLifecycleContext {
|
|
354
|
+
/** Project root path */
|
|
355
|
+
workDir: string;
|
|
356
|
+
/** Plugin configuration */
|
|
357
|
+
config: Record<string, unknown>;
|
|
358
|
+
}
|
|
359
|
+
/** Advice returned by plugin hooks */
|
|
360
|
+
export interface PluginAdvice {
|
|
361
|
+
/** Suggested skill to use */
|
|
362
|
+
skill?: string;
|
|
363
|
+
/** Suggested strategy to apply */
|
|
364
|
+
strategy?: string;
|
|
365
|
+
/** Additional context to inject */
|
|
366
|
+
context?: string;
|
|
367
|
+
/** Confidence in the advice */
|
|
368
|
+
confidence?: number;
|
|
369
|
+
}
|
|
370
|
+
/** Simplified agent result for plugin hooks */
|
|
371
|
+
export interface PluginAgentResult {
|
|
372
|
+
/** Whether the task succeeded */
|
|
373
|
+
success: boolean;
|
|
374
|
+
/** Summary of what was done */
|
|
375
|
+
summary: string;
|
|
376
|
+
/** Files that were changed */
|
|
377
|
+
changedFiles: string[];
|
|
378
|
+
}
|
|
379
|
+
/** Project info for plugin detection hooks */
|
|
380
|
+
export interface PluginProjectInfo {
|
|
381
|
+
/** Project root path */
|
|
382
|
+
workDir: string;
|
|
383
|
+
/** Detected dependencies */
|
|
384
|
+
dependencies: string[];
|
|
385
|
+
/** Detected files */
|
|
386
|
+
files: string[];
|
|
387
|
+
}
|
|
388
|
+
//# sourceMappingURL=plugin-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-types.d.ts","sourceRoot":"","sources":["../src/plugin-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-types.js","sourceRoot":"","sources":["../src/plugin-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin Validator Engine — Executes validation rules from plugins.
|
|
3
|
+
*
|
|
4
|
+
* Validators run at 4 stages: pre (before changes), post (after changes),
|
|
5
|
+
* quality (code quality), safety (security checks).
|
|
6
|
+
*
|
|
7
|
+
* ValidatorDefinition.check is interpreted as:
|
|
8
|
+
* - If it starts with "/" → treated as a regex pattern to match against outputs
|
|
9
|
+
* - If it contains spaces → treated as a shell command (informational)
|
|
10
|
+
* - Otherwise → treated as a regex pattern
|
|
11
|
+
*/
|
|
12
|
+
import type { ValidatorDefinition } from "./plugin-types.js";
|
|
13
|
+
export type ValidatorStage = "pre" | "post" | "quality" | "safety";
|
|
14
|
+
export interface ValidationResult {
|
|
15
|
+
passed: boolean;
|
|
16
|
+
stage: ValidatorStage;
|
|
17
|
+
validatorId: string;
|
|
18
|
+
message: string;
|
|
19
|
+
severity: "error" | "warning" | "info";
|
|
20
|
+
file?: string;
|
|
21
|
+
line?: number;
|
|
22
|
+
}
|
|
23
|
+
export interface ValidationReport {
|
|
24
|
+
results: ValidationResult[];
|
|
25
|
+
passed: boolean;
|
|
26
|
+
errorCount: number;
|
|
27
|
+
warningCount: number;
|
|
28
|
+
}
|
|
29
|
+
export declare class PluginValidator {
|
|
30
|
+
private validators;
|
|
31
|
+
addValidators(validators: ValidatorDefinition[]): void;
|
|
32
|
+
clearValidators(): void;
|
|
33
|
+
/**
|
|
34
|
+
* Run all validators for a given stage.
|
|
35
|
+
* Returns a report with pass/fail status per validator.
|
|
36
|
+
*/
|
|
37
|
+
validate(stage: ValidatorStage, context: {
|
|
38
|
+
changedFiles: string[];
|
|
39
|
+
toolResults: Array<{
|
|
40
|
+
name: string;
|
|
41
|
+
output: string;
|
|
42
|
+
success: boolean;
|
|
43
|
+
}>;
|
|
44
|
+
errorOutput?: string;
|
|
45
|
+
}): Promise<ValidationReport>;
|
|
46
|
+
private runValidator;
|
|
47
|
+
/**
|
|
48
|
+
* Map ValidatorDefinition severity to ValidationResult severity.
|
|
49
|
+
* "critical" maps to "error" for the report's pass/fail logic.
|
|
50
|
+
*/
|
|
51
|
+
private mapSeverity;
|
|
52
|
+
getValidators(stage?: ValidatorStage): ValidatorDefinition[];
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=plugin-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-validator.d.ts","sourceRoot":"","sources":["../src/plugin-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEnE,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,cAAc,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,UAAU,CAA6B;IAE/C,aAAa,CAAC,UAAU,EAAE,mBAAmB,EAAE,GAAG,IAAI;IAItD,eAAe,IAAI,IAAI;IAIvB;;;OAGG;IACG,QAAQ,CACZ,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE;QACP,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,WAAW,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;QACvE,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GACA,OAAO,CAAC,gBAAgB,CAAC;IAkC5B,OAAO,CAAC,YAAY;IAoEpB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAcnB,aAAa,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,mBAAmB,EAAE;CAI7D"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin Validator Engine — Executes validation rules from plugins.
|
|
3
|
+
*
|
|
4
|
+
* Validators run at 4 stages: pre (before changes), post (after changes),
|
|
5
|
+
* quality (code quality), safety (security checks).
|
|
6
|
+
*
|
|
7
|
+
* ValidatorDefinition.check is interpreted as:
|
|
8
|
+
* - If it starts with "/" → treated as a regex pattern to match against outputs
|
|
9
|
+
* - If it contains spaces → treated as a shell command (informational)
|
|
10
|
+
* - Otherwise → treated as a regex pattern
|
|
11
|
+
*/
|
|
12
|
+
export class PluginValidator {
|
|
13
|
+
validators = [];
|
|
14
|
+
addValidators(validators) {
|
|
15
|
+
this.validators.push(...validators);
|
|
16
|
+
}
|
|
17
|
+
clearValidators() {
|
|
18
|
+
this.validators = [];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Run all validators for a given stage.
|
|
22
|
+
* Returns a report with pass/fail status per validator.
|
|
23
|
+
*/
|
|
24
|
+
async validate(stage, context) {
|
|
25
|
+
const stageValidators = this.validators.filter((v) => v.stage === stage);
|
|
26
|
+
const results = [];
|
|
27
|
+
for (const validator of stageValidators) {
|
|
28
|
+
try {
|
|
29
|
+
const result = this.runValidator(validator, context);
|
|
30
|
+
results.push(result);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
results.push({
|
|
34
|
+
passed: false,
|
|
35
|
+
stage,
|
|
36
|
+
validatorId: validator.id,
|
|
37
|
+
message: `Validator ${validator.id} threw an error`,
|
|
38
|
+
severity: "warning",
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const errorCount = results.filter((r) => !r.passed && (r.severity === "error")).length;
|
|
43
|
+
const warningCount = results.filter((r) => !r.passed && r.severity === "warning").length;
|
|
44
|
+
return {
|
|
45
|
+
results,
|
|
46
|
+
passed: errorCount === 0,
|
|
47
|
+
errorCount,
|
|
48
|
+
warningCount,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
runValidator(validator, context) {
|
|
52
|
+
const stage = validator.stage;
|
|
53
|
+
const severity = this.mapSeverity(validator.severity);
|
|
54
|
+
const check = validator.check;
|
|
55
|
+
// Determine if `check` is a command or a pattern
|
|
56
|
+
const isCommand = check.includes(" ") && !check.startsWith("/");
|
|
57
|
+
if (!isCommand) {
|
|
58
|
+
// Pattern-based validation: treat `check` as a regex
|
|
59
|
+
const patternStr = check.startsWith("/") ? check.slice(1) : check;
|
|
60
|
+
try {
|
|
61
|
+
const regex = new RegExp(patternStr, "i");
|
|
62
|
+
// Check against error output
|
|
63
|
+
if (context.errorOutput && regex.test(context.errorOutput)) {
|
|
64
|
+
return {
|
|
65
|
+
passed: false,
|
|
66
|
+
stage,
|
|
67
|
+
validatorId: validator.id,
|
|
68
|
+
message: `Pattern matched: ${patternStr}`,
|
|
69
|
+
severity,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
// Check against failed tool outputs
|
|
73
|
+
for (const result of context.toolResults) {
|
|
74
|
+
if (!result.success && regex.test(result.output)) {
|
|
75
|
+
return {
|
|
76
|
+
passed: false,
|
|
77
|
+
stage,
|
|
78
|
+
validatorId: validator.id,
|
|
79
|
+
message: `Pattern matched in ${result.name}: ${patternStr}`,
|
|
80
|
+
severity,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// Invalid regex — treat as non-matching
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
// Command-based validation — informational only.
|
|
91
|
+
// Actual execution is handled by the agent; we just report it.
|
|
92
|
+
return {
|
|
93
|
+
passed: true,
|
|
94
|
+
stage,
|
|
95
|
+
validatorId: validator.id,
|
|
96
|
+
message: `Run: ${check}`,
|
|
97
|
+
severity: "info",
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
passed: true,
|
|
102
|
+
stage,
|
|
103
|
+
validatorId: validator.id,
|
|
104
|
+
message: "OK",
|
|
105
|
+
severity: "info",
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Map ValidatorDefinition severity to ValidationResult severity.
|
|
110
|
+
* "critical" maps to "error" for the report's pass/fail logic.
|
|
111
|
+
*/
|
|
112
|
+
mapSeverity(severity) {
|
|
113
|
+
switch (severity) {
|
|
114
|
+
case "error":
|
|
115
|
+
case "critical":
|
|
116
|
+
return "error";
|
|
117
|
+
case "warning":
|
|
118
|
+
return "warning";
|
|
119
|
+
default:
|
|
120
|
+
return "warning";
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
getValidators(stage) {
|
|
124
|
+
if (!stage)
|
|
125
|
+
return [...this.validators];
|
|
126
|
+
return this.validators.filter((v) => v.stage === stage);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=plugin-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-validator.js","sourceRoot":"","sources":["../src/plugin-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAuBH,MAAM,OAAO,eAAe;IAClB,UAAU,GAA0B,EAAE,CAAC;IAE/C,aAAa,CAAC,UAAiC;QAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;IACtC,CAAC;IAED,eAAe;QACb,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,QAAQ,CACZ,KAAqB,EACrB,OAIC;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;QACzE,MAAM,OAAO,GAAuB,EAAE,CAAC;QAEvC,KAAK,MAAM,SAAS,IAAI,eAAe,EAAE,CAAC;YACxC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBACrD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC;oBACX,MAAM,EAAE,KAAK;oBACb,KAAK;oBACL,WAAW,EAAE,SAAS,CAAC,EAAE;oBACzB,OAAO,EAAE,aAAa,SAAS,CAAC,EAAE,iBAAiB;oBACnD,QAAQ,EAAE,SAAS;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAC/B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAC7C,CAAC,MAAM,CAAC;QACT,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CACjC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,CAC7C,CAAC,MAAM,CAAC;QAET,OAAO;YACL,OAAO;YACP,MAAM,EAAE,UAAU,KAAK,CAAC;YACxB,UAAU;YACV,YAAY;SACb,CAAC;IACJ,CAAC;IAEO,YAAY,CAClB,SAA8B,EAC9B,OAIC;QAED,MAAM,KAAK,GAAG,SAAS,CAAC,KAAuB,CAAC;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;QAE9B,iDAAiD;QACjD,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAEhE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,qDAAqD;YACrD,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAClE,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;gBAE1C,6BAA6B;gBAC7B,IAAI,OAAO,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC3D,OAAO;wBACL,MAAM,EAAE,KAAK;wBACb,KAAK;wBACL,WAAW,EAAE,SAAS,CAAC,EAAE;wBACzB,OAAO,EAAE,oBAAoB,UAAU,EAAE;wBACzC,QAAQ;qBACT,CAAC;gBACJ,CAAC;gBAED,oCAAoC;gBACpC,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;oBACzC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;wBACjD,OAAO;4BACL,MAAM,EAAE,KAAK;4BACb,KAAK;4BACL,WAAW,EAAE,SAAS,CAAC,EAAE;4BACzB,OAAO,EAAE,sBAAsB,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;4BAC3D,QAAQ;yBACT,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,wCAAwC;YAC1C,CAAC;QACH,CAAC;aAAM,CAAC;YACN,iDAAiD;YACjD,+DAA+D;YAC/D,OAAO;gBACL,MAAM,EAAE,IAAI;gBACZ,KAAK;gBACL,WAAW,EAAE,SAAS,CAAC,EAAE;gBACzB,OAAO,EAAE,QAAQ,KAAK,EAAE;gBACxB,QAAQ,EAAE,MAAM;aACjB,CAAC;QACJ,CAAC;QAED,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,KAAK;YACL,WAAW,EAAE,SAAS,CAAC,EAAE;YACzB,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,MAAM;SACjB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACK,WAAW,CACjB,QAAyC;QAEzC,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,OAAO,CAAC;YACb,KAAK,UAAU;gBACb,OAAO,OAAO,CAAC;YACjB,KAAK,SAAS;gBACZ,OAAO,SAAS,CAAC;YACnB;gBACE,OAAO,SAAS,CAAC;QACrB,CAAC;IACH,CAAC;IAED,aAAa,CAAC,KAAsB;QAClC,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;IAC1D,CAAC;CACF"}
|