@lyupro/skillforge-mcp 1.3.0 → 1.4.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.
Files changed (60) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +33 -0
  4. package/README.md +2 -1
  5. package/dist/cli/dispatcher.d.ts +11 -0
  6. package/dist/cli/dispatcher.d.ts.map +1 -1
  7. package/dist/cli/dispatcher.js +39 -14
  8. package/dist/cli/dispatcher.js.map +1 -1
  9. package/dist/cli/folders-handlers.js +1 -1
  10. package/dist/cli/folders-handlers.js.map +1 -1
  11. package/dist/cli/skills-format.d.ts +15 -0
  12. package/dist/cli/skills-format.d.ts.map +1 -0
  13. package/dist/cli/skills-format.js +84 -0
  14. package/dist/cli/skills-format.js.map +1 -0
  15. package/dist/cli/skills-handlers.d.ts +15 -0
  16. package/dist/cli/skills-handlers.d.ts.map +1 -0
  17. package/dist/cli/skills-handlers.js +112 -0
  18. package/dist/cli/skills-handlers.js.map +1 -0
  19. package/dist/cli/skills-shared.d.ts +32 -0
  20. package/dist/cli/skills-shared.d.ts.map +1 -0
  21. package/dist/cli/skills-shared.js +90 -0
  22. package/dist/cli/skills-shared.js.map +1 -0
  23. package/dist/cli/skills.d.ts +46 -0
  24. package/dist/cli/skills.d.ts.map +1 -0
  25. package/dist/cli/skills.js +107 -0
  26. package/dist/cli/skills.js.map +1 -0
  27. package/dist/config/config-schema.d.ts +246 -142
  28. package/dist/config/config-schema.d.ts.map +1 -1
  29. package/dist/config/config-schema.js +28 -14
  30. package/dist/config/config-schema.js.map +1 -1
  31. package/dist/detect/skill-source-conflict.d.ts +24 -7
  32. package/dist/detect/skill-source-conflict.d.ts.map +1 -1
  33. package/dist/detect/skill-source-conflict.js +62 -10
  34. package/dist/detect/skill-source-conflict.js.map +1 -1
  35. package/dist/reconcile.d.ts +5 -0
  36. package/dist/reconcile.d.ts.map +1 -0
  37. package/dist/reconcile.js +20 -0
  38. package/dist/reconcile.js.map +1 -0
  39. package/dist/runtime.d.ts +14 -0
  40. package/dist/runtime.d.ts.map +1 -0
  41. package/dist/runtime.js +29 -0
  42. package/dist/runtime.js.map +1 -0
  43. package/dist/server-deps.d.ts +3 -1
  44. package/dist/server-deps.d.ts.map +1 -1
  45. package/dist/server.d.ts.map +1 -1
  46. package/dist/server.js +23 -8
  47. package/dist/server.js.map +1 -1
  48. package/dist/tools/configure.d.ts.map +1 -1
  49. package/dist/tools/configure.js +8 -25
  50. package/dist/tools/configure.js.map +1 -1
  51. package/dist/watcher/config-watcher.d.ts +25 -0
  52. package/dist/watcher/config-watcher.d.ts.map +1 -0
  53. package/dist/watcher/config-watcher.js +92 -0
  54. package/dist/watcher/config-watcher.js.map +1 -0
  55. package/dist/watcher/index.d.ts +2 -0
  56. package/dist/watcher/index.d.ts.map +1 -1
  57. package/dist/watcher/index.js +1 -0
  58. package/dist/watcher/index.js.map +1 -1
  59. package/manifest.json +1 -1
  60. package/package.json +1 -1
@@ -5,19 +5,19 @@ declare const folderEntrySchema: z.ZodObject<{
5
5
  enabled: z.ZodDefault<z.ZodBoolean>;
6
6
  tags: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
7
7
  alias: z.ZodOptional<z.ZodString>;
8
- }, "strip", z.ZodTypeAny, {
9
- path: string;
10
- priority: number;
11
- enabled: boolean;
12
- tags: string[];
13
- alias?: string | undefined;
14
- }, {
15
- path: string;
16
- priority?: number | undefined;
17
- enabled?: boolean | undefined;
18
- tags?: string[] | undefined;
19
- alias?: string | undefined;
20
- }>;
8
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
9
+ path: z.ZodString;
10
+ priority: z.ZodDefault<z.ZodNumber>;
11
+ enabled: z.ZodDefault<z.ZodBoolean>;
12
+ tags: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
13
+ alias: z.ZodOptional<z.ZodString>;
14
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
15
+ path: z.ZodString;
16
+ priority: z.ZodDefault<z.ZodNumber>;
17
+ enabled: z.ZodDefault<z.ZodBoolean>;
18
+ tags: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
19
+ alias: z.ZodOptional<z.ZodString>;
20
+ }, z.ZodTypeAny, "passthrough">>;
21
21
  export declare const configSchema: z.ZodObject<{
22
22
  version: z.ZodDefault<z.ZodLiteral<"1.0">>;
23
23
  folders: z.ZodDefault<z.ZodArray<z.ZodObject<{
@@ -26,19 +26,193 @@ export declare const configSchema: z.ZodObject<{
26
26
  enabled: z.ZodDefault<z.ZodBoolean>;
27
27
  tags: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
28
28
  alias: z.ZodOptional<z.ZodString>;
29
- }, "strip", z.ZodTypeAny, {
30
- path: string;
31
- priority: number;
32
- enabled: boolean;
33
- tags: string[];
34
- alias?: string | undefined;
35
- }, {
36
- path: string;
37
- priority?: number | undefined;
38
- enabled?: boolean | undefined;
39
- tags?: string[] | undefined;
40
- alias?: string | undefined;
41
- }>, "many">>;
29
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
30
+ path: z.ZodString;
31
+ priority: z.ZodDefault<z.ZodNumber>;
32
+ enabled: z.ZodDefault<z.ZodBoolean>;
33
+ tags: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
34
+ alias: z.ZodOptional<z.ZodString>;
35
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
36
+ path: z.ZodString;
37
+ priority: z.ZodDefault<z.ZodNumber>;
38
+ enabled: z.ZodDefault<z.ZodBoolean>;
39
+ tags: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
40
+ alias: z.ZodOptional<z.ZodString>;
41
+ }, z.ZodTypeAny, "passthrough">>, "many">>;
42
+ blacklist: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
43
+ security: z.ZodDefault<z.ZodObject<{
44
+ autoAudit: z.ZodDefault<z.ZodBoolean>;
45
+ auditPatterns: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
46
+ allowScripts: z.ZodDefault<z.ZodBoolean>;
47
+ sandboxScripts: z.ZodDefault<z.ZodBoolean>;
48
+ sandboxRestrictedPaths: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
49
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
50
+ autoAudit: z.ZodDefault<z.ZodBoolean>;
51
+ auditPatterns: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
52
+ allowScripts: z.ZodDefault<z.ZodBoolean>;
53
+ sandboxScripts: z.ZodDefault<z.ZodBoolean>;
54
+ sandboxRestrictedPaths: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
55
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
56
+ autoAudit: z.ZodDefault<z.ZodBoolean>;
57
+ auditPatterns: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
58
+ allowScripts: z.ZodDefault<z.ZodBoolean>;
59
+ sandboxScripts: z.ZodDefault<z.ZodBoolean>;
60
+ sandboxRestrictedPaths: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
61
+ }, z.ZodTypeAny, "passthrough">>>;
62
+ cache: z.ZodDefault<z.ZodObject<{
63
+ metadataTtlMs: z.ZodDefault<z.ZodNumber>;
64
+ contentTtlMs: z.ZodDefault<z.ZodNumber>;
65
+ maxSizeMb: z.ZodDefault<z.ZodNumber>;
66
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
67
+ metadataTtlMs: z.ZodDefault<z.ZodNumber>;
68
+ contentTtlMs: z.ZodDefault<z.ZodNumber>;
69
+ maxSizeMb: z.ZodDefault<z.ZodNumber>;
70
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
71
+ metadataTtlMs: z.ZodDefault<z.ZodNumber>;
72
+ contentTtlMs: z.ZodDefault<z.ZodNumber>;
73
+ maxSizeMb: z.ZodDefault<z.ZodNumber>;
74
+ }, z.ZodTypeAny, "passthrough">>>;
75
+ watcher: z.ZodDefault<z.ZodObject<{
76
+ enabled: z.ZodDefault<z.ZodBoolean>;
77
+ debounceMs: z.ZodDefault<z.ZodNumber>;
78
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
79
+ enabled: z.ZodDefault<z.ZodBoolean>;
80
+ debounceMs: z.ZodDefault<z.ZodNumber>;
81
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
82
+ enabled: z.ZodDefault<z.ZodBoolean>;
83
+ debounceMs: z.ZodDefault<z.ZodNumber>;
84
+ }, z.ZodTypeAny, "passthrough">>>;
85
+ logging: z.ZodDefault<z.ZodObject<{
86
+ level: z.ZodDefault<z.ZodEnum<["debug", "info", "warn", "error"]>>;
87
+ file: z.ZodDefault<z.ZodNullable<z.ZodString>>;
88
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
89
+ level: z.ZodDefault<z.ZodEnum<["debug", "info", "warn", "error"]>>;
90
+ file: z.ZodDefault<z.ZodNullable<z.ZodString>>;
91
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
92
+ level: z.ZodDefault<z.ZodEnum<["debug", "info", "warn", "error"]>>;
93
+ file: z.ZodDefault<z.ZodNullable<z.ZodString>>;
94
+ }, z.ZodTypeAny, "passthrough">>>;
95
+ invocation: z.ZodDefault<z.ZodObject<{
96
+ defaultTimeoutMs: z.ZodDefault<z.ZodNumber>;
97
+ cacheTtlMs: z.ZodDefault<z.ZodNumber>;
98
+ cacheMaxEntries: z.ZodDefault<z.ZodNumber>;
99
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
100
+ defaultTimeoutMs: z.ZodDefault<z.ZodNumber>;
101
+ cacheTtlMs: z.ZodDefault<z.ZodNumber>;
102
+ cacheMaxEntries: z.ZodDefault<z.ZodNumber>;
103
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
104
+ defaultTimeoutMs: z.ZodDefault<z.ZodNumber>;
105
+ cacheTtlMs: z.ZodDefault<z.ZodNumber>;
106
+ cacheMaxEntries: z.ZodDefault<z.ZodNumber>;
107
+ }, z.ZodTypeAny, "passthrough">>>;
108
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
109
+ version: z.ZodDefault<z.ZodLiteral<"1.0">>;
110
+ folders: z.ZodDefault<z.ZodArray<z.ZodObject<{
111
+ path: z.ZodString;
112
+ priority: z.ZodDefault<z.ZodNumber>;
113
+ enabled: z.ZodDefault<z.ZodBoolean>;
114
+ tags: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
115
+ alias: z.ZodOptional<z.ZodString>;
116
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
117
+ path: z.ZodString;
118
+ priority: z.ZodDefault<z.ZodNumber>;
119
+ enabled: z.ZodDefault<z.ZodBoolean>;
120
+ tags: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
121
+ alias: z.ZodOptional<z.ZodString>;
122
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
123
+ path: z.ZodString;
124
+ priority: z.ZodDefault<z.ZodNumber>;
125
+ enabled: z.ZodDefault<z.ZodBoolean>;
126
+ tags: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
127
+ alias: z.ZodOptional<z.ZodString>;
128
+ }, z.ZodTypeAny, "passthrough">>, "many">>;
129
+ blacklist: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
130
+ security: z.ZodDefault<z.ZodObject<{
131
+ autoAudit: z.ZodDefault<z.ZodBoolean>;
132
+ auditPatterns: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
133
+ allowScripts: z.ZodDefault<z.ZodBoolean>;
134
+ sandboxScripts: z.ZodDefault<z.ZodBoolean>;
135
+ sandboxRestrictedPaths: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
136
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
137
+ autoAudit: z.ZodDefault<z.ZodBoolean>;
138
+ auditPatterns: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
139
+ allowScripts: z.ZodDefault<z.ZodBoolean>;
140
+ sandboxScripts: z.ZodDefault<z.ZodBoolean>;
141
+ sandboxRestrictedPaths: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
142
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
143
+ autoAudit: z.ZodDefault<z.ZodBoolean>;
144
+ auditPatterns: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
145
+ allowScripts: z.ZodDefault<z.ZodBoolean>;
146
+ sandboxScripts: z.ZodDefault<z.ZodBoolean>;
147
+ sandboxRestrictedPaths: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
148
+ }, z.ZodTypeAny, "passthrough">>>;
149
+ cache: z.ZodDefault<z.ZodObject<{
150
+ metadataTtlMs: z.ZodDefault<z.ZodNumber>;
151
+ contentTtlMs: z.ZodDefault<z.ZodNumber>;
152
+ maxSizeMb: z.ZodDefault<z.ZodNumber>;
153
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
154
+ metadataTtlMs: z.ZodDefault<z.ZodNumber>;
155
+ contentTtlMs: z.ZodDefault<z.ZodNumber>;
156
+ maxSizeMb: z.ZodDefault<z.ZodNumber>;
157
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
158
+ metadataTtlMs: z.ZodDefault<z.ZodNumber>;
159
+ contentTtlMs: z.ZodDefault<z.ZodNumber>;
160
+ maxSizeMb: z.ZodDefault<z.ZodNumber>;
161
+ }, z.ZodTypeAny, "passthrough">>>;
162
+ watcher: z.ZodDefault<z.ZodObject<{
163
+ enabled: z.ZodDefault<z.ZodBoolean>;
164
+ debounceMs: z.ZodDefault<z.ZodNumber>;
165
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
166
+ enabled: z.ZodDefault<z.ZodBoolean>;
167
+ debounceMs: z.ZodDefault<z.ZodNumber>;
168
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
169
+ enabled: z.ZodDefault<z.ZodBoolean>;
170
+ debounceMs: z.ZodDefault<z.ZodNumber>;
171
+ }, z.ZodTypeAny, "passthrough">>>;
172
+ logging: z.ZodDefault<z.ZodObject<{
173
+ level: z.ZodDefault<z.ZodEnum<["debug", "info", "warn", "error"]>>;
174
+ file: z.ZodDefault<z.ZodNullable<z.ZodString>>;
175
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
176
+ level: z.ZodDefault<z.ZodEnum<["debug", "info", "warn", "error"]>>;
177
+ file: z.ZodDefault<z.ZodNullable<z.ZodString>>;
178
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
179
+ level: z.ZodDefault<z.ZodEnum<["debug", "info", "warn", "error"]>>;
180
+ file: z.ZodDefault<z.ZodNullable<z.ZodString>>;
181
+ }, z.ZodTypeAny, "passthrough">>>;
182
+ invocation: z.ZodDefault<z.ZodObject<{
183
+ defaultTimeoutMs: z.ZodDefault<z.ZodNumber>;
184
+ cacheTtlMs: z.ZodDefault<z.ZodNumber>;
185
+ cacheMaxEntries: z.ZodDefault<z.ZodNumber>;
186
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
187
+ defaultTimeoutMs: z.ZodDefault<z.ZodNumber>;
188
+ cacheTtlMs: z.ZodDefault<z.ZodNumber>;
189
+ cacheMaxEntries: z.ZodDefault<z.ZodNumber>;
190
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
191
+ defaultTimeoutMs: z.ZodDefault<z.ZodNumber>;
192
+ cacheTtlMs: z.ZodDefault<z.ZodNumber>;
193
+ cacheMaxEntries: z.ZodDefault<z.ZodNumber>;
194
+ }, z.ZodTypeAny, "passthrough">>>;
195
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
196
+ version: z.ZodDefault<z.ZodLiteral<"1.0">>;
197
+ folders: z.ZodDefault<z.ZodArray<z.ZodObject<{
198
+ path: z.ZodString;
199
+ priority: z.ZodDefault<z.ZodNumber>;
200
+ enabled: z.ZodDefault<z.ZodBoolean>;
201
+ tags: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
202
+ alias: z.ZodOptional<z.ZodString>;
203
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
204
+ path: z.ZodString;
205
+ priority: z.ZodDefault<z.ZodNumber>;
206
+ enabled: z.ZodDefault<z.ZodBoolean>;
207
+ tags: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
208
+ alias: z.ZodOptional<z.ZodString>;
209
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
210
+ path: z.ZodString;
211
+ priority: z.ZodDefault<z.ZodNumber>;
212
+ enabled: z.ZodDefault<z.ZodBoolean>;
213
+ tags: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
214
+ alias: z.ZodOptional<z.ZodString>;
215
+ }, z.ZodTypeAny, "passthrough">>, "many">>;
42
216
  blacklist: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
43
217
  security: z.ZodDefault<z.ZodObject<{
44
218
  autoAudit: z.ZodDefault<z.ZodBoolean>;
@@ -46,136 +220,66 @@ export declare const configSchema: z.ZodObject<{
46
220
  allowScripts: z.ZodDefault<z.ZodBoolean>;
47
221
  sandboxScripts: z.ZodDefault<z.ZodBoolean>;
48
222
  sandboxRestrictedPaths: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
49
- }, "strip", z.ZodTypeAny, {
50
- autoAudit: boolean;
51
- auditPatterns: string[];
52
- allowScripts: boolean;
53
- sandboxScripts: boolean;
54
- sandboxRestrictedPaths: string[];
55
- }, {
56
- autoAudit?: boolean | undefined;
57
- auditPatterns?: string[] | undefined;
58
- allowScripts?: boolean | undefined;
59
- sandboxScripts?: boolean | undefined;
60
- sandboxRestrictedPaths?: string[] | undefined;
61
- }>>;
223
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
224
+ autoAudit: z.ZodDefault<z.ZodBoolean>;
225
+ auditPatterns: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
226
+ allowScripts: z.ZodDefault<z.ZodBoolean>;
227
+ sandboxScripts: z.ZodDefault<z.ZodBoolean>;
228
+ sandboxRestrictedPaths: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
229
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
230
+ autoAudit: z.ZodDefault<z.ZodBoolean>;
231
+ auditPatterns: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
232
+ allowScripts: z.ZodDefault<z.ZodBoolean>;
233
+ sandboxScripts: z.ZodDefault<z.ZodBoolean>;
234
+ sandboxRestrictedPaths: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
235
+ }, z.ZodTypeAny, "passthrough">>>;
62
236
  cache: z.ZodDefault<z.ZodObject<{
63
237
  metadataTtlMs: z.ZodDefault<z.ZodNumber>;
64
238
  contentTtlMs: z.ZodDefault<z.ZodNumber>;
65
239
  maxSizeMb: z.ZodDefault<z.ZodNumber>;
66
- }, "strip", z.ZodTypeAny, {
67
- metadataTtlMs: number;
68
- contentTtlMs: number;
69
- maxSizeMb: number;
70
- }, {
71
- metadataTtlMs?: number | undefined;
72
- contentTtlMs?: number | undefined;
73
- maxSizeMb?: number | undefined;
74
- }>>;
240
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
241
+ metadataTtlMs: z.ZodDefault<z.ZodNumber>;
242
+ contentTtlMs: z.ZodDefault<z.ZodNumber>;
243
+ maxSizeMb: z.ZodDefault<z.ZodNumber>;
244
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
245
+ metadataTtlMs: z.ZodDefault<z.ZodNumber>;
246
+ contentTtlMs: z.ZodDefault<z.ZodNumber>;
247
+ maxSizeMb: z.ZodDefault<z.ZodNumber>;
248
+ }, z.ZodTypeAny, "passthrough">>>;
75
249
  watcher: z.ZodDefault<z.ZodObject<{
76
250
  enabled: z.ZodDefault<z.ZodBoolean>;
77
251
  debounceMs: z.ZodDefault<z.ZodNumber>;
78
- }, "strip", z.ZodTypeAny, {
79
- enabled: boolean;
80
- debounceMs: number;
81
- }, {
82
- enabled?: boolean | undefined;
83
- debounceMs?: number | undefined;
84
- }>>;
252
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
253
+ enabled: z.ZodDefault<z.ZodBoolean>;
254
+ debounceMs: z.ZodDefault<z.ZodNumber>;
255
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
256
+ enabled: z.ZodDefault<z.ZodBoolean>;
257
+ debounceMs: z.ZodDefault<z.ZodNumber>;
258
+ }, z.ZodTypeAny, "passthrough">>>;
85
259
  logging: z.ZodDefault<z.ZodObject<{
86
260
  level: z.ZodDefault<z.ZodEnum<["debug", "info", "warn", "error"]>>;
87
261
  file: z.ZodDefault<z.ZodNullable<z.ZodString>>;
88
- }, "strip", z.ZodTypeAny, {
89
- level: "debug" | "info" | "warn" | "error";
90
- file: string | null;
91
- }, {
92
- level?: "debug" | "info" | "warn" | "error" | undefined;
93
- file?: string | null | undefined;
94
- }>>;
262
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
263
+ level: z.ZodDefault<z.ZodEnum<["debug", "info", "warn", "error"]>>;
264
+ file: z.ZodDefault<z.ZodNullable<z.ZodString>>;
265
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
266
+ level: z.ZodDefault<z.ZodEnum<["debug", "info", "warn", "error"]>>;
267
+ file: z.ZodDefault<z.ZodNullable<z.ZodString>>;
268
+ }, z.ZodTypeAny, "passthrough">>>;
95
269
  invocation: z.ZodDefault<z.ZodObject<{
96
270
  defaultTimeoutMs: z.ZodDefault<z.ZodNumber>;
97
271
  cacheTtlMs: z.ZodDefault<z.ZodNumber>;
98
272
  cacheMaxEntries: z.ZodDefault<z.ZodNumber>;
99
- }, "strip", z.ZodTypeAny, {
100
- defaultTimeoutMs: number;
101
- cacheTtlMs: number;
102
- cacheMaxEntries: number;
103
- }, {
104
- defaultTimeoutMs?: number | undefined;
105
- cacheTtlMs?: number | undefined;
106
- cacheMaxEntries?: number | undefined;
107
- }>>;
108
- }, "strip", z.ZodTypeAny, {
109
- version: "1.0";
110
- folders: {
111
- path: string;
112
- priority: number;
113
- enabled: boolean;
114
- tags: string[];
115
- alias?: string | undefined;
116
- }[];
117
- blacklist: string[];
118
- security: {
119
- autoAudit: boolean;
120
- auditPatterns: string[];
121
- allowScripts: boolean;
122
- sandboxScripts: boolean;
123
- sandboxRestrictedPaths: string[];
124
- };
125
- cache: {
126
- metadataTtlMs: number;
127
- contentTtlMs: number;
128
- maxSizeMb: number;
129
- };
130
- watcher: {
131
- enabled: boolean;
132
- debounceMs: number;
133
- };
134
- logging: {
135
- level: "debug" | "info" | "warn" | "error";
136
- file: string | null;
137
- };
138
- invocation: {
139
- defaultTimeoutMs: number;
140
- cacheTtlMs: number;
141
- cacheMaxEntries: number;
142
- };
143
- }, {
144
- version?: "1.0" | undefined;
145
- folders?: {
146
- path: string;
147
- priority?: number | undefined;
148
- enabled?: boolean | undefined;
149
- tags?: string[] | undefined;
150
- alias?: string | undefined;
151
- }[] | undefined;
152
- blacklist?: string[] | undefined;
153
- security?: {
154
- autoAudit?: boolean | undefined;
155
- auditPatterns?: string[] | undefined;
156
- allowScripts?: boolean | undefined;
157
- sandboxScripts?: boolean | undefined;
158
- sandboxRestrictedPaths?: string[] | undefined;
159
- } | undefined;
160
- cache?: {
161
- metadataTtlMs?: number | undefined;
162
- contentTtlMs?: number | undefined;
163
- maxSizeMb?: number | undefined;
164
- } | undefined;
165
- watcher?: {
166
- enabled?: boolean | undefined;
167
- debounceMs?: number | undefined;
168
- } | undefined;
169
- logging?: {
170
- level?: "debug" | "info" | "warn" | "error" | undefined;
171
- file?: string | null | undefined;
172
- } | undefined;
173
- invocation?: {
174
- defaultTimeoutMs?: number | undefined;
175
- cacheTtlMs?: number | undefined;
176
- cacheMaxEntries?: number | undefined;
177
- } | undefined;
178
- }>;
273
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
274
+ defaultTimeoutMs: z.ZodDefault<z.ZodNumber>;
275
+ cacheTtlMs: z.ZodDefault<z.ZodNumber>;
276
+ cacheMaxEntries: z.ZodDefault<z.ZodNumber>;
277
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
278
+ defaultTimeoutMs: z.ZodDefault<z.ZodNumber>;
279
+ cacheTtlMs: z.ZodDefault<z.ZodNumber>;
280
+ cacheMaxEntries: z.ZodDefault<z.ZodNumber>;
281
+ }, z.ZodTypeAny, "passthrough">>>;
282
+ }, z.ZodTypeAny, "passthrough">>;
179
283
  export type PersistedConfig = z.infer<typeof configSchema>;
180
284
  export type FolderEntry = z.infer<typeof folderEntrySchema>;
181
285
  export declare function defaultConfig(): PersistedConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"config-schema.d.ts","sourceRoot":"","sources":["../../src/config/config-schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;EAWrB,CAAC;AAkCH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASvB,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAC3D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,wBAAgB,aAAa,IAAI,eAAe,CAE/C"}
1
+ {"version":3,"file":"config-schema.d.ts","sourceRoot":"","sources":["../../src/config/config-schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;gCAaP,CAAC;AA4CjB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAWT,CAAC;AAEjB,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAC3D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,wBAAgB,aAAa,IAAI,eAAe,CAE/C"}
@@ -1,6 +1,7 @@
1
1
  // Why: camelCase keys match TS identifiers 1:1 — no key transforms needed between code and JSON.
2
2
  import { z } from 'zod';
3
- const folderEntrySchema = z.object({
3
+ const folderEntrySchema = z
4
+ .object({
4
5
  path: z.string().min(1),
5
6
  priority: z.number().int().default(100),
6
7
  enabled: z.boolean().default(true),
@@ -11,8 +12,10 @@ const folderEntrySchema = z.object({
11
12
  .string()
12
13
  .regex(/^[a-z0-9]+(-[a-z0-9]+)*$/)
13
14
  .optional(),
14
- });
15
- const securitySchema = z.object({
15
+ })
16
+ .passthrough();
17
+ const securitySchema = z
18
+ .object({
16
19
  autoAudit: z.boolean().default(true),
17
20
  auditPatterns: z
18
21
  .array(z.string())
@@ -20,26 +23,36 @@ const securitySchema = z.object({
20
23
  allowScripts: z.boolean().default(false),
21
24
  sandboxScripts: z.boolean().default(true),
22
25
  sandboxRestrictedPaths: z.array(z.string()).default(['~/.ssh', '~/.aws', '~/.gnupg']),
23
- });
24
- const cacheSchema = z.object({
26
+ })
27
+ .passthrough();
28
+ const cacheSchema = z
29
+ .object({
25
30
  metadataTtlMs: z.number().nonnegative().default(300_000),
26
31
  contentTtlMs: z.number().nonnegative().default(300_000),
27
32
  maxSizeMb: z.number().nonnegative().default(50),
28
- });
29
- const watcherSchema = z.object({
33
+ })
34
+ .passthrough();
35
+ const watcherSchema = z
36
+ .object({
30
37
  enabled: z.boolean().default(true),
31
38
  debounceMs: z.number().nonnegative().default(500),
32
- });
33
- const loggingSchema = z.object({
39
+ })
40
+ .passthrough();
41
+ const loggingSchema = z
42
+ .object({
34
43
  level: z.enum(['debug', 'info', 'warn', 'error']).default('info'),
35
44
  file: z.string().nullable().default(null),
36
- });
37
- const invocationSchema = z.object({
45
+ })
46
+ .passthrough();
47
+ const invocationSchema = z
48
+ .object({
38
49
  defaultTimeoutMs: z.number().nonnegative().default(30_000),
39
50
  cacheTtlMs: z.number().nonnegative().default(60_000),
40
51
  cacheMaxEntries: z.number().nonnegative().default(128),
41
- });
42
- export const configSchema = z.object({
52
+ })
53
+ .passthrough();
54
+ export const configSchema = z
55
+ .object({
43
56
  version: z.literal('1.0').default('1.0'),
44
57
  folders: z.array(folderEntrySchema).default([]),
45
58
  blacklist: z.array(z.string()).default([]),
@@ -48,7 +61,8 @@ export const configSchema = z.object({
48
61
  watcher: watcherSchema.default({}),
49
62
  logging: loggingSchema.default({}),
50
63
  invocation: invocationSchema.default({}),
51
- });
64
+ })
65
+ .passthrough();
52
66
  export function defaultConfig() {
53
67
  return configSchema.parse({});
54
68
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../../src/config/config-schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../../src/config/config-schema.ts"],"names":[],"mappings":"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"}
@@ -7,11 +7,19 @@
7
7
  * user can disable one source. We NEVER mutate another tool's config: this is
8
8
  * detection + hint only.
9
9
  *
10
- * Detection is pure path logic no host config file is read or written.
11
- * The home directory is injectable so tests can supply a fake root.
10
+ * For Claude Code plugins, the detector reads ~/.claude/settings.json to check
11
+ * whether the plugin is actually enabled. The home directory and the settings
12
+ * reader are both injectable so tests never touch real host files.
12
13
  */
13
14
  /** A host CLI whose native plugin/extension system can double-load skills. */
14
15
  export type ConflictHost = 'claude' | 'gemini';
16
+ /**
17
+ * Whether the conflicting host plugin/extension is currently enabled.
18
+ * - 'enabled' — key present in host settings with value true.
19
+ * - 'disabled' — key present in host settings with value false.
20
+ * - 'unknown' — settings file missing, unreadable, malformed, or no state API.
21
+ */
22
+ export type PluginEnabledState = 'enabled' | 'disabled' | 'unknown';
15
23
  export interface SkillSourceConflict {
16
24
  /** The host CLI that natively serves skills from this path. */
17
25
  host: ConflictHost;
@@ -21,6 +29,8 @@ export interface SkillSourceConflict {
21
29
  name: string;
22
30
  /** The absolute folder path that triggered the conflict. */
23
31
  folderPath: string;
32
+ /** Whether the conflicting plugin/extension is currently enabled in host settings. */
33
+ enabledState: PluginEnabledState;
24
34
  }
25
35
  /**
26
36
  * Detect whether `folderPath` is served by a host CLI's native plugin or
@@ -28,20 +38,27 @@ export interface SkillSourceConflict {
28
38
  *
29
39
  * - Claude Code — `~/.claude/plugins/cache/<marketplace>/<plugin>/<version>/...`
30
40
  * The plugin name is the `<plugin>` segment (the marketplace prefix is
31
- * included when present for a clearer label).
41
+ * included when present for a clearer label). The enabled state is read from
42
+ * `~/.claude/settings.json` via the injectable `readPluginEnabled` resolver.
43
+ * When the plugin is DISABLED, returns null (no conflict).
32
44
  * - Gemini CLI — `~/.gemini/extensions/<extension>/...`
33
- * The extension name is the first segment after `extensions/`.
45
+ * The extension name is the first segment after `extensions/`. No reliable
46
+ * enabled-state file is available; always returns `enabledState: 'unknown'`.
34
47
  *
35
48
  * Codex and Cursor have no native skill system — they never conflict.
36
49
  *
37
- * @param folderPath Absolute folder path being registered.
38
- * @param home Home directory root, injectable for tests.
50
+ * @param folderPath Absolute folder path being registered.
51
+ * @param home Home directory root, injectable for tests.
52
+ * @param readPluginEnabled Injectable resolver for Claude plugin enabled state.
39
53
  * @returns A conflict descriptor, or null when there is no conflict.
40
54
  */
41
- export declare function detectSkillSourceConflict(folderPath: string, home?: string): SkillSourceConflict | null;
55
+ export declare function detectSkillSourceConflict(folderPath: string, home?: string, readPluginEnabled?: (home: string, pluginKey: string) => Promise<PluginEnabledState>): Promise<SkillSourceConflict | null>;
42
56
  /**
43
57
  * Build the user-facing warning for a detected conflict. SkillForge prints
44
58
  * this as an informational hint — it does not disable anything itself.
59
+ *
60
+ * - enabledState 'enabled' → direct "disable it" wording.
61
+ * - enabledState 'unknown' → conditional "IF enabled" wording.
45
62
  */
46
63
  export declare function formatConflictHint(conflict: SkillSourceConflict): string;
47
64
  //# sourceMappingURL=skill-source-conflict.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"skill-source-conflict.d.ts","sourceRoot":"","sources":["../../src/detect/skill-source-conflict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,8EAA8E;AAC9E,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE/C,MAAM,WAAW,mBAAmB;IAClC,+DAA+D;IAC/D,IAAI,EAAE,YAAY,CAAC;IACnB,4EAA4E;IAC5E,IAAI,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC7B,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;CACpB;AAuBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,MAAkB,GACvB,mBAAmB,GAAG,IAAI,CA6B5B;AAeD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM,CAMxE"}
1
+ {"version":3,"file":"skill-source-conflict.d.ts","sourceRoot":"","sources":["../../src/detect/skill-source-conflict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,8EAA8E;AAC9E,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE/C;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;AAEpE,MAAM,WAAW,mBAAmB;IAClC,+DAA+D;IAC/D,IAAI,EAAE,YAAY,CAAC;IACnB,4EAA4E;IAC5E,IAAI,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC7B,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,sFAAsF;IACtF,YAAY,EAAE,kBAAkB,CAAC;CAClC;AAmED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,MAAkB,EACxB,iBAAiB,GAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAA4B,GAC7G,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAkCrC;AAeD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM,CAaxE"}