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.
@@ -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
- }, "strip", z.ZodTypeAny, {
5
- version: 1;
6
- }, {
7
- version: 1;
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
- }, "strip", z.ZodTypeAny, {
347
- version: 1;
348
- }, {
349
- version: 1;
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
- } | undefined;
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
- } | undefined;
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;
@@ -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(),
@@ -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;CACtB,CAAC,CAAC;AAEH,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"}
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"}
@@ -20,37 +20,54 @@ function readStdin() {
20
20
  });
21
21
  }
22
22
  /**
23
- * Walk up from cwd looking for a .ue-mcp.json. Returns true if feedback is
24
- * present in `disable[]` (hook should silently no-op) or if cwd is not inside
25
- * a ue-mcp project at all (don't nudge an unrelated repo). Defense in depth
26
- * against stale install even if `npx ue-mcp uninstall-hooks` was never run,
27
- * the hook self-disables once the user opts out via config.
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 candidate = path.join(dir, ".ue-mcp.json");
37
- if (fs.existsSync(candidate)) {
38
- try {
39
- const cfg = JSON.parse(fs.readFileSync(candidate, "utf-8"));
40
- const disable = Array.isArray(cfg.disable) ? cfg.disable : [];
41
- return disable.includes("feedback");
42
- }
43
- catch {
44
- // Malformed config: don't nudge, safer to no-op.
45
- return true;
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 .ue-mcp.json found above cwd — this isn't a ue-mcp project.
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"hook-handler.js","sourceRoot":"","sources":["../src/hook-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hook-handler.js","sourceRoot":"","sources":["../src/hook-handler.ts"],"names":[],"mappings":"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"}
@@ -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 .ue-mcp.json installedHooks registry.
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 .ue-mcp.json
16
- * `installedHooks[]`. Used by `npx ue-mcp uninstall-hooks` and by init when
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[];
@@ -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 .ue-mcp.json
11
- * `installedHooks[]`, so uninstall can reach every site even after
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 readProjectConfig(projectDir) {
36
- const configPath = path.join(projectDir, ".ue-mcp.json");
37
- if (!fs.existsSync(configPath))
38
- return { configPath, config: {} };
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", `.ue-mcp.json at ${configPath} was not valid JSON — registry will be rewritten`, e);
47
- return { configPath, config: {} };
48
+ logWarn("hook-installer", `ue-mcp.local.yml at ${file} did not parseinstalledHooks registry will be rewritten`, e);
49
+ return {};
48
50
  }
49
51
  }
50
- function writeProjectConfig(configPath, config) {
51
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
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 { configPath, config } = readProjectConfig(projectDir);
56
- const installed = new Set(config.installedHooks ?? []);
82
+ const installed = new Set(getInstalledHooks(projectDir));
57
83
  installed.add(abs);
58
- config.installedHooks = [...installed].sort();
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 { configPath, config } = readProjectConfig(projectDir);
64
- if (!config.installedHooks || config.installedHooks.length === 0)
88
+ const existing = getInstalledHooks(projectDir);
89
+ if (existing.length === 0)
65
90
  return;
66
- config.installedHooks = config.installedHooks.filter((p) => path.resolve(p) !== abs);
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 .ue-mcp.json installedHooks registry.
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 .ue-mcp.json
124
- * `installedHooks[]`. Used by `npx ue-mcp uninstall-hooks` and by init when
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 { configPath, config } = readProjectConfig(projectDir);
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
- delete config.installedHooks;
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":"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"}
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 ".ue-mcp.json" { "http": { "enabled": true, "port": 7723 } }.
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 {