ue-mcp 1.0.28 → 1.0.29
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/flow/schema.d.ts +220 -16
- package/dist/flow/schema.js +36 -1
- package/dist/flow/schema.js.map +1 -1
- package/dist/hook-handler.js +34 -17
- package/dist/hook-handler.js.map +1 -1
- package/dist/hook-installer.d.ts +4 -4
- package/dist/hook-installer.js +53 -33
- package/dist/hook-installer.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/init.js +85 -23
- package/dist/init.js.map +1 -1
- package/dist/project.js +98 -12
- package/dist/project.js.map +1 -1
- package/dist/tool-counts.json +2 -2
- package/dist/tools/feedback.js +4 -4
- package/dist/tools/feedback.js.map +1 -1
- package/dist/uninstall-hooks.d.ts +3 -3
- package/dist/uninstall-hooks.js +10 -7
- package/dist/uninstall-hooks.js.map +1 -1
- package/package.json +1 -1
package/dist/flow/schema.d.ts
CHANGED
|
@@ -1,11 +1,100 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* The `ue-mcp:` block at the top of ue-mcp.yml. Historically just had
|
|
4
|
+
* `version: 1`. As of 1.0.29, also hosts the project-level config that
|
|
5
|
+
* used to live in the separate `.ue-mcp.json` file (killed for one-config-
|
|
6
|
+
* format consistency).
|
|
7
|
+
*
|
|
8
|
+
* ue-mcp:
|
|
9
|
+
* version: 1
|
|
10
|
+
* contentRoots: ["/Game/"]
|
|
11
|
+
* disable: ["gas"]
|
|
12
|
+
* http: { enabled: false, port: 7723 }
|
|
13
|
+
* feedback: { mode: "interactive" }
|
|
14
|
+
* installedHooks: [...] # user-local; lives in ue-mcp.local.yml
|
|
15
|
+
*
|
|
16
|
+
* Tracked vs untracked split is by convention:
|
|
17
|
+
* ue-mcp.yml - tracked. version, contentRoots, disable, http, feedback.
|
|
18
|
+
* ue-mcp.local.yml - gitignored. installedHooks and anything else user-local.
|
|
19
|
+
* flowkit's loader deep-merges local on top of yml so both surface as one
|
|
20
|
+
* resolved config to the server.
|
|
21
|
+
*/
|
|
2
22
|
export declare const FlowVersionSchema: z.ZodObject<{
|
|
3
23
|
version: z.ZodLiteral<1>;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
24
|
+
contentRoots: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
25
|
+
disable: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
26
|
+
http: z.ZodOptional<z.ZodObject<{
|
|
27
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
28
|
+
port: z.ZodOptional<z.ZodNumber>;
|
|
29
|
+
host: z.ZodOptional<z.ZodString>;
|
|
30
|
+
}, "strip", z.ZodTypeAny, {
|
|
31
|
+
enabled?: boolean | undefined;
|
|
32
|
+
port?: number | undefined;
|
|
33
|
+
host?: string | undefined;
|
|
34
|
+
}, {
|
|
35
|
+
enabled?: boolean | undefined;
|
|
36
|
+
port?: number | undefined;
|
|
37
|
+
host?: string | undefined;
|
|
38
|
+
}>>;
|
|
39
|
+
feedback: z.ZodOptional<z.ZodObject<{
|
|
40
|
+
mode: z.ZodOptional<z.ZodEnum<["interactive", "auto-approve", "defer"]>>;
|
|
41
|
+
}, "strip", z.ZodTypeAny, {
|
|
42
|
+
mode?: "interactive" | "auto-approve" | "defer" | undefined;
|
|
43
|
+
}, {
|
|
44
|
+
mode?: "interactive" | "auto-approve" | "defer" | undefined;
|
|
45
|
+
}>>;
|
|
46
|
+
installedHooks: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
47
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
48
|
+
version: z.ZodLiteral<1>;
|
|
49
|
+
contentRoots: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
50
|
+
disable: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
51
|
+
http: z.ZodOptional<z.ZodObject<{
|
|
52
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
53
|
+
port: z.ZodOptional<z.ZodNumber>;
|
|
54
|
+
host: z.ZodOptional<z.ZodString>;
|
|
55
|
+
}, "strip", z.ZodTypeAny, {
|
|
56
|
+
enabled?: boolean | undefined;
|
|
57
|
+
port?: number | undefined;
|
|
58
|
+
host?: string | undefined;
|
|
59
|
+
}, {
|
|
60
|
+
enabled?: boolean | undefined;
|
|
61
|
+
port?: number | undefined;
|
|
62
|
+
host?: string | undefined;
|
|
63
|
+
}>>;
|
|
64
|
+
feedback: z.ZodOptional<z.ZodObject<{
|
|
65
|
+
mode: z.ZodOptional<z.ZodEnum<["interactive", "auto-approve", "defer"]>>;
|
|
66
|
+
}, "strip", z.ZodTypeAny, {
|
|
67
|
+
mode?: "interactive" | "auto-approve" | "defer" | undefined;
|
|
68
|
+
}, {
|
|
69
|
+
mode?: "interactive" | "auto-approve" | "defer" | undefined;
|
|
70
|
+
}>>;
|
|
71
|
+
installedHooks: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
72
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
73
|
+
version: z.ZodLiteral<1>;
|
|
74
|
+
contentRoots: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
75
|
+
disable: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
76
|
+
http: z.ZodOptional<z.ZodObject<{
|
|
77
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
78
|
+
port: z.ZodOptional<z.ZodNumber>;
|
|
79
|
+
host: z.ZodOptional<z.ZodString>;
|
|
80
|
+
}, "strip", z.ZodTypeAny, {
|
|
81
|
+
enabled?: boolean | undefined;
|
|
82
|
+
port?: number | undefined;
|
|
83
|
+
host?: string | undefined;
|
|
84
|
+
}, {
|
|
85
|
+
enabled?: boolean | undefined;
|
|
86
|
+
port?: number | undefined;
|
|
87
|
+
host?: string | undefined;
|
|
88
|
+
}>>;
|
|
89
|
+
feedback: z.ZodOptional<z.ZodObject<{
|
|
90
|
+
mode: z.ZodOptional<z.ZodEnum<["interactive", "auto-approve", "defer"]>>;
|
|
91
|
+
}, "strip", z.ZodTypeAny, {
|
|
92
|
+
mode?: "interactive" | "auto-approve" | "defer" | undefined;
|
|
93
|
+
}, {
|
|
94
|
+
mode?: "interactive" | "auto-approve" | "defer" | undefined;
|
|
95
|
+
}>>;
|
|
96
|
+
installedHooks: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
97
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
9
98
|
export declare const FlowProjectSchema: z.ZodOptional<z.ZodObject<{
|
|
10
99
|
name: z.ZodOptional<z.ZodString>;
|
|
11
100
|
engine: z.ZodOptional<z.ZodString>;
|
|
@@ -343,11 +432,80 @@ export declare const FlowConfigSchema: z.ZodObject<{
|
|
|
343
432
|
} & {
|
|
344
433
|
"ue-mcp": z.ZodOptional<z.ZodObject<{
|
|
345
434
|
version: z.ZodLiteral<1>;
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
435
|
+
contentRoots: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
436
|
+
disable: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
437
|
+
http: z.ZodOptional<z.ZodObject<{
|
|
438
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
439
|
+
port: z.ZodOptional<z.ZodNumber>;
|
|
440
|
+
host: z.ZodOptional<z.ZodString>;
|
|
441
|
+
}, "strip", z.ZodTypeAny, {
|
|
442
|
+
enabled?: boolean | undefined;
|
|
443
|
+
port?: number | undefined;
|
|
444
|
+
host?: string | undefined;
|
|
445
|
+
}, {
|
|
446
|
+
enabled?: boolean | undefined;
|
|
447
|
+
port?: number | undefined;
|
|
448
|
+
host?: string | undefined;
|
|
449
|
+
}>>;
|
|
450
|
+
feedback: z.ZodOptional<z.ZodObject<{
|
|
451
|
+
mode: z.ZodOptional<z.ZodEnum<["interactive", "auto-approve", "defer"]>>;
|
|
452
|
+
}, "strip", z.ZodTypeAny, {
|
|
453
|
+
mode?: "interactive" | "auto-approve" | "defer" | undefined;
|
|
454
|
+
}, {
|
|
455
|
+
mode?: "interactive" | "auto-approve" | "defer" | undefined;
|
|
456
|
+
}>>;
|
|
457
|
+
installedHooks: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
458
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
459
|
+
version: z.ZodLiteral<1>;
|
|
460
|
+
contentRoots: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
461
|
+
disable: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
462
|
+
http: z.ZodOptional<z.ZodObject<{
|
|
463
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
464
|
+
port: z.ZodOptional<z.ZodNumber>;
|
|
465
|
+
host: z.ZodOptional<z.ZodString>;
|
|
466
|
+
}, "strip", z.ZodTypeAny, {
|
|
467
|
+
enabled?: boolean | undefined;
|
|
468
|
+
port?: number | undefined;
|
|
469
|
+
host?: string | undefined;
|
|
470
|
+
}, {
|
|
471
|
+
enabled?: boolean | undefined;
|
|
472
|
+
port?: number | undefined;
|
|
473
|
+
host?: string | undefined;
|
|
474
|
+
}>>;
|
|
475
|
+
feedback: z.ZodOptional<z.ZodObject<{
|
|
476
|
+
mode: z.ZodOptional<z.ZodEnum<["interactive", "auto-approve", "defer"]>>;
|
|
477
|
+
}, "strip", z.ZodTypeAny, {
|
|
478
|
+
mode?: "interactive" | "auto-approve" | "defer" | undefined;
|
|
479
|
+
}, {
|
|
480
|
+
mode?: "interactive" | "auto-approve" | "defer" | undefined;
|
|
481
|
+
}>>;
|
|
482
|
+
installedHooks: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
483
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
484
|
+
version: z.ZodLiteral<1>;
|
|
485
|
+
contentRoots: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
486
|
+
disable: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
487
|
+
http: z.ZodOptional<z.ZodObject<{
|
|
488
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
489
|
+
port: z.ZodOptional<z.ZodNumber>;
|
|
490
|
+
host: z.ZodOptional<z.ZodString>;
|
|
491
|
+
}, "strip", z.ZodTypeAny, {
|
|
492
|
+
enabled?: boolean | undefined;
|
|
493
|
+
port?: number | undefined;
|
|
494
|
+
host?: string | undefined;
|
|
495
|
+
}, {
|
|
496
|
+
enabled?: boolean | undefined;
|
|
497
|
+
port?: number | undefined;
|
|
498
|
+
host?: string | undefined;
|
|
499
|
+
}>>;
|
|
500
|
+
feedback: z.ZodOptional<z.ZodObject<{
|
|
501
|
+
mode: z.ZodOptional<z.ZodEnum<["interactive", "auto-approve", "defer"]>>;
|
|
502
|
+
}, "strip", z.ZodTypeAny, {
|
|
503
|
+
mode?: "interactive" | "auto-approve" | "defer" | undefined;
|
|
504
|
+
}, {
|
|
505
|
+
mode?: "interactive" | "auto-approve" | "defer" | undefined;
|
|
506
|
+
}>>;
|
|
507
|
+
installedHooks: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
508
|
+
}, z.ZodTypeAny, "passthrough">>>;
|
|
351
509
|
project: z.ZodOptional<z.ZodObject<{
|
|
352
510
|
name: z.ZodOptional<z.ZodString>;
|
|
353
511
|
engine: z.ZodOptional<z.ZodString>;
|
|
@@ -441,9 +599,32 @@ export declare const FlowConfigSchema: z.ZodObject<{
|
|
|
441
599
|
}[] | undefined;
|
|
442
600
|
rollback_on_failure?: boolean | undefined;
|
|
443
601
|
}>;
|
|
444
|
-
"ue-mcp"?: {
|
|
445
|
-
version: 1
|
|
446
|
-
|
|
602
|
+
"ue-mcp"?: z.objectOutputType<{
|
|
603
|
+
version: z.ZodLiteral<1>;
|
|
604
|
+
contentRoots: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
605
|
+
disable: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
606
|
+
http: z.ZodOptional<z.ZodObject<{
|
|
607
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
608
|
+
port: z.ZodOptional<z.ZodNumber>;
|
|
609
|
+
host: z.ZodOptional<z.ZodString>;
|
|
610
|
+
}, "strip", z.ZodTypeAny, {
|
|
611
|
+
enabled?: boolean | undefined;
|
|
612
|
+
port?: number | undefined;
|
|
613
|
+
host?: string | undefined;
|
|
614
|
+
}, {
|
|
615
|
+
enabled?: boolean | undefined;
|
|
616
|
+
port?: number | undefined;
|
|
617
|
+
host?: string | undefined;
|
|
618
|
+
}>>;
|
|
619
|
+
feedback: z.ZodOptional<z.ZodObject<{
|
|
620
|
+
mode: z.ZodOptional<z.ZodEnum<["interactive", "auto-approve", "defer"]>>;
|
|
621
|
+
}, "strip", z.ZodTypeAny, {
|
|
622
|
+
mode?: "interactive" | "auto-approve" | "defer" | undefined;
|
|
623
|
+
}, {
|
|
624
|
+
mode?: "interactive" | "auto-approve" | "defer" | undefined;
|
|
625
|
+
}>>;
|
|
626
|
+
installedHooks: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
627
|
+
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
447
628
|
project?: {
|
|
448
629
|
name?: string | undefined;
|
|
449
630
|
engine?: string | undefined;
|
|
@@ -455,9 +636,32 @@ export declare const FlowConfigSchema: z.ZodObject<{
|
|
|
455
636
|
max_age_hours: number;
|
|
456
637
|
} | undefined;
|
|
457
638
|
}, {
|
|
458
|
-
"ue-mcp"?: {
|
|
459
|
-
version: 1
|
|
460
|
-
|
|
639
|
+
"ue-mcp"?: z.objectInputType<{
|
|
640
|
+
version: z.ZodLiteral<1>;
|
|
641
|
+
contentRoots: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
642
|
+
disable: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
643
|
+
http: z.ZodOptional<z.ZodObject<{
|
|
644
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
645
|
+
port: z.ZodOptional<z.ZodNumber>;
|
|
646
|
+
host: z.ZodOptional<z.ZodString>;
|
|
647
|
+
}, "strip", z.ZodTypeAny, {
|
|
648
|
+
enabled?: boolean | undefined;
|
|
649
|
+
port?: number | undefined;
|
|
650
|
+
host?: string | undefined;
|
|
651
|
+
}, {
|
|
652
|
+
enabled?: boolean | undefined;
|
|
653
|
+
port?: number | undefined;
|
|
654
|
+
host?: string | undefined;
|
|
655
|
+
}>>;
|
|
656
|
+
feedback: z.ZodOptional<z.ZodObject<{
|
|
657
|
+
mode: z.ZodOptional<z.ZodEnum<["interactive", "auto-approve", "defer"]>>;
|
|
658
|
+
}, "strip", z.ZodTypeAny, {
|
|
659
|
+
mode?: "interactive" | "auto-approve" | "defer" | undefined;
|
|
660
|
+
}, {
|
|
661
|
+
mode?: "interactive" | "auto-approve" | "defer" | undefined;
|
|
662
|
+
}>>;
|
|
663
|
+
installedHooks: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
664
|
+
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
461
665
|
project?: {
|
|
462
666
|
name?: string | undefined;
|
|
463
667
|
engine?: string | undefined;
|
package/dist/flow/schema.js
CHANGED
|
@@ -1,8 +1,43 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { EngineConfigSchema } from "@db-lyon/flowkit";
|
|
3
|
+
/**
|
|
4
|
+
* The `ue-mcp:` block at the top of ue-mcp.yml. Historically just had
|
|
5
|
+
* `version: 1`. As of 1.0.29, also hosts the project-level config that
|
|
6
|
+
* used to live in the separate `.ue-mcp.json` file (killed for one-config-
|
|
7
|
+
* format consistency).
|
|
8
|
+
*
|
|
9
|
+
* ue-mcp:
|
|
10
|
+
* version: 1
|
|
11
|
+
* contentRoots: ["/Game/"]
|
|
12
|
+
* disable: ["gas"]
|
|
13
|
+
* http: { enabled: false, port: 7723 }
|
|
14
|
+
* feedback: { mode: "interactive" }
|
|
15
|
+
* installedHooks: [...] # user-local; lives in ue-mcp.local.yml
|
|
16
|
+
*
|
|
17
|
+
* Tracked vs untracked split is by convention:
|
|
18
|
+
* ue-mcp.yml - tracked. version, contentRoots, disable, http, feedback.
|
|
19
|
+
* ue-mcp.local.yml - gitignored. installedHooks and anything else user-local.
|
|
20
|
+
* flowkit's loader deep-merges local on top of yml so both surface as one
|
|
21
|
+
* resolved config to the server.
|
|
22
|
+
*/
|
|
3
23
|
export const FlowVersionSchema = z.object({
|
|
4
24
|
version: z.literal(1),
|
|
5
|
-
|
|
25
|
+
contentRoots: z.array(z.string()).optional(),
|
|
26
|
+
disable: z.array(z.string()).optional(),
|
|
27
|
+
http: z
|
|
28
|
+
.object({
|
|
29
|
+
enabled: z.boolean().optional(),
|
|
30
|
+
port: z.number().int().min(1).max(65535).optional(),
|
|
31
|
+
host: z.string().optional(),
|
|
32
|
+
})
|
|
33
|
+
.optional(),
|
|
34
|
+
feedback: z
|
|
35
|
+
.object({
|
|
36
|
+
mode: z.enum(["interactive", "auto-approve", "defer"]).optional(),
|
|
37
|
+
})
|
|
38
|
+
.optional(),
|
|
39
|
+
installedHooks: z.array(z.string()).optional(),
|
|
40
|
+
}).passthrough();
|
|
6
41
|
export const FlowProjectSchema = z.object({
|
|
7
42
|
name: z.string().optional(),
|
|
8
43
|
engine: z.string().optional(),
|
package/dist/flow/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/flow/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/flow/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC5C,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvC,IAAI,EAAE,CAAC;SACJ,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;QACnD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC5B,CAAC;SACD,QAAQ,EAAE;IACb,QAAQ,EAAE,CAAC;SACR,MAAM,CAAC;QACN,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;KAClE,CAAC;SACD,QAAQ,EAAE;IACb,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC/C,CAAC,CAAC,WAAW,EAAE,CAAC;AAEjB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC,QAAQ,EAAE,CAAC;AAEd,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACnC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACzD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,sBAAsB,CAAC;IACxD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CACtC,CAAC,CAAC,QAAQ,EAAE,CAAC;AAEd;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,MAAM,CAAC;IACxD,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACtC,OAAO,EAAE,iBAAiB;IAC1B,YAAY,EAAE,iBAAiB;IAC/B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAChD,CAAC,CAAC"}
|
package/dist/hook-handler.js
CHANGED
|
@@ -20,37 +20,54 @@ function readStdin() {
|
|
|
20
20
|
});
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
|
-
* Walk up from cwd looking for a
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
23
|
+
* Walk up from cwd looking for a ue-mcp.yml. Returns true if the merged
|
|
24
|
+
* `ue-mcp.disable[]` block (from ue-mcp.yml + ue-mcp.local.yml) contains
|
|
25
|
+
* "feedback" (hook should silently no-op) or if cwd is not inside a ue-mcp
|
|
26
|
+
* project at all (don't nudge an unrelated repo). Defense in depth against
|
|
27
|
+
* stale install — even if `npx ue-mcp uninstall-hooks` was never run, the
|
|
28
|
+
* hook self-disables once the user opts out via config.
|
|
29
|
+
*
|
|
30
|
+
* Reads YAML lazily via require so the hook handler doesn't pull in
|
|
31
|
+
* js-yaml's full module graph until it actually needs to.
|
|
28
32
|
*/
|
|
29
33
|
async function feedbackDisabledForCwd() {
|
|
30
34
|
try {
|
|
31
35
|
const fs = await import("node:fs");
|
|
32
36
|
const path = await import("node:path");
|
|
37
|
+
const yaml = (await import("js-yaml")).default;
|
|
33
38
|
let dir = process.cwd();
|
|
34
|
-
// Guard against runaway loops on detached / unusual paths.
|
|
35
39
|
for (let i = 0; i < 32; i++) {
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
40
|
+
const ymlPath = path.join(dir, "ue-mcp.yml");
|
|
41
|
+
const localPath = path.join(dir, "ue-mcp.local.yml");
|
|
42
|
+
const ymlExists = fs.existsSync(ymlPath);
|
|
43
|
+
const localExists = fs.existsSync(localPath);
|
|
44
|
+
if (ymlExists || localExists) {
|
|
45
|
+
const disable = new Set();
|
|
46
|
+
for (const file of [ymlPath, localPath]) {
|
|
47
|
+
if (!fs.existsSync(file))
|
|
48
|
+
continue;
|
|
49
|
+
try {
|
|
50
|
+
const doc = yaml.load(fs.readFileSync(file, "utf-8"));
|
|
51
|
+
const block = doc && typeof doc === "object" ? doc["ue-mcp"] : undefined;
|
|
52
|
+
const list = block && Array.isArray(block.disable) ? block.disable : [];
|
|
53
|
+
for (const item of list) {
|
|
54
|
+
if (typeof item === "string")
|
|
55
|
+
disable.add(item);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// Malformed config: don't nudge, safer to no-op.
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
46
62
|
}
|
|
63
|
+
return disable.has("feedback");
|
|
47
64
|
}
|
|
48
65
|
const parent = path.dirname(dir);
|
|
49
66
|
if (parent === dir)
|
|
50
67
|
break;
|
|
51
68
|
dir = parent;
|
|
52
69
|
}
|
|
53
|
-
// No
|
|
70
|
+
// No ue-mcp.yml found above cwd — this isn't a ue-mcp project.
|
|
54
71
|
// A hook running outside its own project is stale; silent no-op.
|
|
55
72
|
return true;
|
|
56
73
|
}
|
package/dist/hook-handler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook-handler.js","sourceRoot":"","sources":["../src/hook-handler.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG;AASH,SAAS,SAAS;IAChB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAChF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAClC,4DAA4D;QAC5D,IAAI,OAAO,CAAC,KAAK,CAAC,aAAa;YAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"hook-handler.js","sourceRoot":"","sources":["../src/hook-handler.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG;AASH,SAAS,SAAS;IAChB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAChF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAClC,4DAA4D;QAC5D,IAAI,OAAO,CAAC,KAAK,CAAC,aAAa;YAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;GAUG;AACH,KAAK,UAAU,sBAAsB;IACnC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;QAC/C,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;YACrD,MAAM,SAAS,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACzC,MAAM,WAAW,GAAG,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAC7C,IAAI,SAAS,IAAI,WAAW,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;gBAClC,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC;oBACxC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;wBAAE,SAAS;oBACnC,IAAI,CAAC;wBACH,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAE5C,CAAC;wBACT,MAAM,KAAK,GAAG,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;wBACzE,MAAM,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;wBACxE,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;4BACxB,IAAI,OAAO,IAAI,KAAK,QAAQ;gCAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBAClD,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,iDAAiD;wBACjD,OAAO,IAAI,CAAC;oBACd,CAAC;gBACH,CAAC;gBACD,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACjC,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,MAAM,KAAK,GAAG;gBAAE,MAAM;YAC1B,GAAG,GAAG,MAAM,CAAC;QACf,CAAC;QACD,+DAA+D;QAC/D,iEAAiE;QACjE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW;IACxB,IAAI,MAAM,sBAAsB,EAAE;QAAE,OAAO;IAE3C,IAAI,KAAgB,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;YAAE,OAAO;QACxB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,yEAAyE;QACzE,yEAAyE;QACzE,+DAA+D;QAC/D,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;YACnC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;YACnC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;YACvC,EAAE,CAAC,cAAc,CACf,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,EACzC,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,wCAAwC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAClH,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,yDAAyD;QAC3D,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,UAAU,EAAE,MAAM,KAAK,gBAAgB;QAAE,OAAO;IAE1D,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QACzB,aAAa,EAAE;YACb,6GAA6G;YAC7G,iDAAiD;YACjD,+HAA+H;YAC/H,4GAA4G;YAC5G,gLAAgL;YAChL,kJAAkJ;SACnJ,CAAC,IAAI,CAAC,IAAI,CAAC;KACb,CAAC,CAAC;IAEH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,wEAAwE;AAExE,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,sCAAsC;AAErE,QAAQ,KAAK,EAAE,CAAC;IACd,KAAK,eAAe;QAClB,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM;IACR;QACE,2DAA2D;QAC3D,MAAM;AACV,CAAC"}
|
package/dist/hook-installer.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Install the ue-mcp PostToolUse hook into a Claude Code settings.json. If
|
|
3
3
|
* `projectDir` is supplied, the settings path is also recorded in the
|
|
4
|
-
* project's
|
|
4
|
+
* project's ue-mcp.local.yml installedHooks registry.
|
|
5
5
|
*/
|
|
6
6
|
export declare function installClaudeHooks(settingsPath: string, projectDir?: string): void;
|
|
7
7
|
/**
|
|
@@ -12,9 +12,9 @@ export declare function installClaudeHooks(settingsPath: string, projectDir?: st
|
|
|
12
12
|
*/
|
|
13
13
|
export declare function uninstallClaudeHooks(settingsPath: string, projectDir?: string): boolean;
|
|
14
14
|
/**
|
|
15
|
-
* Uninstall the hook from every path recorded in
|
|
16
|
-
* `installedHooks[]`. Used by `npx ue-mcp uninstall-hooks` and by
|
|
17
|
-
* the user disables feedback or opts out of the prompt checkbox.
|
|
15
|
+
* Uninstall the hook from every path recorded in ue-mcp.local.yml's
|
|
16
|
+
* `ue-mcp.installedHooks[]`. Used by `npx ue-mcp uninstall-hooks` and by
|
|
17
|
+
* init when the user disables feedback or opts out of the prompt checkbox.
|
|
18
18
|
*/
|
|
19
19
|
export declare function uninstallAllRegisteredHooks(projectDir: string): {
|
|
20
20
|
removed: string[];
|
package/dist/hook-installer.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as fs from "node:fs";
|
|
2
2
|
import * as path from "node:path";
|
|
3
|
+
import yaml from "js-yaml";
|
|
3
4
|
import { warn as logWarn } from "./log.js";
|
|
4
5
|
/**
|
|
5
6
|
* Symmetric install/uninstall for the Claude Code PostToolUse hook that
|
|
@@ -7,9 +8,10 @@ import { warn as logWarn } from "./log.js";
|
|
|
7
8
|
* workaround.
|
|
8
9
|
*
|
|
9
10
|
* Two invariants:
|
|
10
|
-
* 1. Every install records the settings path in
|
|
11
|
-
* `installedHooks[]`, so uninstall can reach every site even
|
|
12
|
-
* the user moves their MCP client config.
|
|
11
|
+
* 1. Every install records the settings path in ue-mcp.local.yml's
|
|
12
|
+
* `ue-mcp.installedHooks[]`, so uninstall can reach every site even
|
|
13
|
+
* after the user moves their MCP client config. The local file is
|
|
14
|
+
* gitignored — these paths are user-machine-specific.
|
|
13
15
|
* 2. Uninstall is idempotent — calling it against a settings file that
|
|
14
16
|
* doesn't have our matcher is a no-op, not an error.
|
|
15
17
|
*/
|
|
@@ -32,46 +34,66 @@ function writeSettings(settingsPath, settings) {
|
|
|
32
34
|
fs.mkdirSync(dir, { recursive: true });
|
|
33
35
|
fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
|
|
34
36
|
}
|
|
35
|
-
function
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
function localPath(projectDir) {
|
|
38
|
+
return path.join(projectDir, "ue-mcp.local.yml");
|
|
39
|
+
}
|
|
40
|
+
function readLocal(projectDir) {
|
|
41
|
+
const file = localPath(projectDir);
|
|
42
|
+
if (!fs.existsSync(file))
|
|
43
|
+
return {};
|
|
39
44
|
try {
|
|
40
|
-
return {
|
|
41
|
-
configPath,
|
|
42
|
-
config: JSON.parse(fs.readFileSync(configPath, "utf-8")),
|
|
43
|
-
};
|
|
45
|
+
return yaml.load(fs.readFileSync(file, "utf-8")) ?? {};
|
|
44
46
|
}
|
|
45
47
|
catch (e) {
|
|
46
|
-
logWarn("hook-installer",
|
|
47
|
-
return {
|
|
48
|
+
logWarn("hook-installer", `ue-mcp.local.yml at ${file} did not parse — installedHooks registry will be rewritten`, e);
|
|
49
|
+
return {};
|
|
48
50
|
}
|
|
49
51
|
}
|
|
50
|
-
function
|
|
51
|
-
|
|
52
|
+
function writeLocal(projectDir, doc) {
|
|
53
|
+
const file = localPath(projectDir);
|
|
54
|
+
// Empty doc → remove the file rather than leaving a stub behind.
|
|
55
|
+
const block = doc["ue-mcp"];
|
|
56
|
+
if (!block ||
|
|
57
|
+
Object.keys(block).filter((k) => block[k] !== undefined).length === 0) {
|
|
58
|
+
if (fs.existsSync(file))
|
|
59
|
+
fs.unlinkSync(file);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
fs.writeFileSync(file, yaml.dump(doc, { indent: 2 }), "utf-8");
|
|
63
|
+
}
|
|
64
|
+
function getInstalledHooks(projectDir) {
|
|
65
|
+
const local = readLocal(projectDir);
|
|
66
|
+
const hooks = local["ue-mcp"]?.installedHooks;
|
|
67
|
+
return Array.isArray(hooks) ? hooks : [];
|
|
68
|
+
}
|
|
69
|
+
function setInstalledHooks(projectDir, hooks) {
|
|
70
|
+
const local = readLocal(projectDir);
|
|
71
|
+
const block = (local["ue-mcp"] ??= {});
|
|
72
|
+
if (hooks.length > 0) {
|
|
73
|
+
block.installedHooks = hooks;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
delete block.installedHooks;
|
|
77
|
+
}
|
|
78
|
+
writeLocal(projectDir, local);
|
|
52
79
|
}
|
|
53
80
|
function registerInstalledHook(projectDir, settingsPath) {
|
|
54
81
|
const abs = path.resolve(settingsPath);
|
|
55
|
-
const
|
|
56
|
-
const installed = new Set(config.installedHooks ?? []);
|
|
82
|
+
const installed = new Set(getInstalledHooks(projectDir));
|
|
57
83
|
installed.add(abs);
|
|
58
|
-
|
|
59
|
-
writeProjectConfig(configPath, config);
|
|
84
|
+
setInstalledHooks(projectDir, [...installed].sort());
|
|
60
85
|
}
|
|
61
86
|
function unregisterInstalledHook(projectDir, settingsPath) {
|
|
62
87
|
const abs = path.resolve(settingsPath);
|
|
63
|
-
const
|
|
64
|
-
if (
|
|
88
|
+
const existing = getInstalledHooks(projectDir);
|
|
89
|
+
if (existing.length === 0)
|
|
65
90
|
return;
|
|
66
|
-
|
|
67
|
-
if (config.installedHooks.length === 0)
|
|
68
|
-
delete config.installedHooks;
|
|
69
|
-
writeProjectConfig(configPath, config);
|
|
91
|
+
setInstalledHooks(projectDir, existing.filter((p) => path.resolve(p) !== abs));
|
|
70
92
|
}
|
|
71
93
|
/**
|
|
72
94
|
* Install the ue-mcp PostToolUse hook into a Claude Code settings.json. If
|
|
73
95
|
* `projectDir` is supplied, the settings path is also recorded in the
|
|
74
|
-
* project's
|
|
96
|
+
* project's ue-mcp.local.yml installedHooks registry.
|
|
75
97
|
*/
|
|
76
98
|
export function installClaudeHooks(settingsPath, projectDir) {
|
|
77
99
|
const settings = readSettings(settingsPath);
|
|
@@ -120,13 +142,12 @@ export function uninstallClaudeHooks(settingsPath, projectDir) {
|
|
|
120
142
|
return removed;
|
|
121
143
|
}
|
|
122
144
|
/**
|
|
123
|
-
* Uninstall the hook from every path recorded in
|
|
124
|
-
* `installedHooks[]`. Used by `npx ue-mcp uninstall-hooks` and by
|
|
125
|
-
* the user disables feedback or opts out of the prompt checkbox.
|
|
145
|
+
* Uninstall the hook from every path recorded in ue-mcp.local.yml's
|
|
146
|
+
* `ue-mcp.installedHooks[]`. Used by `npx ue-mcp uninstall-hooks` and by
|
|
147
|
+
* init when the user disables feedback or opts out of the prompt checkbox.
|
|
126
148
|
*/
|
|
127
149
|
export function uninstallAllRegisteredHooks(projectDir) {
|
|
128
|
-
const
|
|
129
|
-
const paths = config.installedHooks ?? [];
|
|
150
|
+
const paths = getInstalledHooks(projectDir);
|
|
130
151
|
const removed = [];
|
|
131
152
|
const skipped = [];
|
|
132
153
|
for (const p of paths) {
|
|
@@ -136,8 +157,7 @@ export function uninstallAllRegisteredHooks(projectDir) {
|
|
|
136
157
|
else
|
|
137
158
|
skipped.push(p);
|
|
138
159
|
}
|
|
139
|
-
|
|
140
|
-
writeProjectConfig(configPath, config);
|
|
160
|
+
setInstalledHooks(projectDir, []);
|
|
141
161
|
return { removed, skipped };
|
|
142
162
|
}
|
|
143
163
|
//# sourceMappingURL=hook-installer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook-installer.js","sourceRoot":"","sources":["../src/hook-installer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,MAAM,UAAU,CAAC;AAE3C
|
|
1
|
+
{"version":3,"file":"hook-installer.js","sourceRoot":"","sources":["../src/hook-installer.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -201,7 +201,7 @@ async function main() {
|
|
|
201
201
|
}
|
|
202
202
|
});
|
|
203
203
|
// ── Optional HTTP surface for flow.run (#144) ───────────────────
|
|
204
|
-
// Off by default; opt-in via
|
|
204
|
+
// Off by default; opt-in via ue-mcp.yml `ue-mcp.http: { enabled: true, port: 7723 }`.
|
|
205
205
|
// Binds to 127.0.0.1 only — do NOT expose to the network without adding auth.
|
|
206
206
|
if (project.config.http?.enabled) {
|
|
207
207
|
try {
|