@g3nomaly/core 0.2.0 → 0.3.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 (113) hide show
  1. package/dist/cli/commands/installFromSources.d.ts +49 -0
  2. package/dist/cli/commands/installFromSources.d.ts.map +1 -0
  3. package/dist/cli/commands/installFromSources.js +138 -0
  4. package/dist/cli/commands/installFromSources.js.map +1 -0
  5. package/dist/cli/commands/ls.d.ts +11 -0
  6. package/dist/cli/commands/ls.d.ts.map +1 -1
  7. package/dist/cli/commands/ls.js +43 -0
  8. package/dist/cli/commands/ls.js.map +1 -1
  9. package/dist/cli/commands/sources.d.ts +45 -0
  10. package/dist/cli/commands/sources.d.ts.map +1 -0
  11. package/dist/cli/commands/sources.js +89 -0
  12. package/dist/cli/commands/sources.js.map +1 -0
  13. package/dist/cli/index.d.ts +9 -0
  14. package/dist/cli/index.d.ts.map +1 -1
  15. package/dist/cli/index.js +6 -0
  16. package/dist/cli/index.js.map +1 -1
  17. package/dist/cli/installDialogues.d.ts +15 -0
  18. package/dist/cli/installDialogues.d.ts.map +1 -0
  19. package/dist/cli/installDialogues.js +72 -0
  20. package/dist/cli/installDialogues.js.map +1 -0
  21. package/dist/cli/pick.d.ts +14 -0
  22. package/dist/cli/pick.d.ts.map +1 -0
  23. package/dist/cli/pick.js +35 -0
  24. package/dist/cli/pick.js.map +1 -0
  25. package/dist/cli/report.d.ts +34 -0
  26. package/dist/cli/report.d.ts.map +1 -0
  27. package/dist/cli/report.js +71 -0
  28. package/dist/cli/report.js.map +1 -0
  29. package/dist/config/types.d.ts +0 -16
  30. package/dist/config/types.d.ts.map +1 -1
  31. package/dist/config/types.js +0 -2
  32. package/dist/config/types.js.map +1 -1
  33. package/dist/installer/files.d.ts +15 -0
  34. package/dist/installer/files.d.ts.map +1 -0
  35. package/dist/installer/files.js +22 -0
  36. package/dist/installer/files.js.map +1 -0
  37. package/dist/installer/index.d.ts +13 -0
  38. package/dist/installer/index.d.ts.map +1 -1
  39. package/dist/installer/index.js +7 -0
  40. package/dist/installer/index.js.map +1 -1
  41. package/dist/installer/manifest.d.ts +59 -0
  42. package/dist/installer/manifest.d.ts.map +1 -0
  43. package/dist/installer/manifest.js +60 -0
  44. package/dist/installer/manifest.js.map +1 -0
  45. package/dist/installer/manifestSources.d.ts +21 -0
  46. package/dist/installer/manifestSources.d.ts.map +1 -0
  47. package/dist/installer/manifestSources.js +39 -0
  48. package/dist/installer/manifestSources.js.map +1 -0
  49. package/dist/installer/marketplace.d.ts +34 -0
  50. package/dist/installer/marketplace.d.ts.map +1 -0
  51. package/dist/installer/marketplace.js +64 -0
  52. package/dist/installer/marketplace.js.map +1 -0
  53. package/dist/installer/origin.d.ts +43 -0
  54. package/dist/installer/origin.d.ts.map +1 -0
  55. package/dist/installer/origin.js +22 -0
  56. package/dist/installer/origin.js.map +1 -0
  57. package/dist/installer/resolve.d.ts +78 -0
  58. package/dist/installer/resolve.d.ts.map +1 -0
  59. package/dist/installer/resolve.js +184 -0
  60. package/dist/installer/resolve.js.map +1 -0
  61. package/dist/installer/sourceRegistry.d.ts +59 -0
  62. package/dist/installer/sourceRegistry.d.ts.map +1 -0
  63. package/dist/installer/sourceRegistry.js +71 -0
  64. package/dist/installer/sourceRegistry.js.map +1 -0
  65. package/dist/sources/checkout.d.ts +14 -0
  66. package/dist/sources/checkout.d.ts.map +1 -0
  67. package/dist/sources/checkout.js +27 -0
  68. package/dist/sources/checkout.js.map +1 -0
  69. package/dist/sources/git.d.ts +9 -0
  70. package/dist/sources/git.d.ts.map +1 -0
  71. package/dist/sources/git.js +22 -0
  72. package/dist/sources/git.js.map +1 -0
  73. package/dist/sources/index.d.ts +5 -0
  74. package/dist/sources/index.d.ts.map +1 -0
  75. package/dist/sources/index.js +6 -0
  76. package/dist/sources/index.js.map +1 -0
  77. package/dist/sources/local.d.ts +10 -0
  78. package/dist/sources/local.d.ts.map +1 -0
  79. package/dist/sources/local.js +20 -0
  80. package/dist/sources/local.js.map +1 -0
  81. package/dist/sources/npm.d.ts +13 -0
  82. package/dist/sources/npm.d.ts.map +1 -0
  83. package/dist/sources/npm.js +128 -0
  84. package/dist/sources/npm.js.map +1 -0
  85. package/dist/sources/packageJson.d.ts +3 -0
  86. package/dist/sources/packageJson.d.ts.map +1 -0
  87. package/dist/sources/packageJson.js +13 -0
  88. package/dist/sources/packageJson.js.map +1 -0
  89. package/dist/sources/parse.d.ts +34 -0
  90. package/dist/sources/parse.d.ts.map +1 -0
  91. package/dist/sources/parse.js +92 -0
  92. package/dist/sources/parse.js.map +1 -0
  93. package/dist/sources/process.d.ts +18 -0
  94. package/dist/sources/process.d.ts.map +1 -0
  95. package/dist/sources/process.js +43 -0
  96. package/dist/sources/process.js.map +1 -0
  97. package/dist/sources/register.d.ts +16 -0
  98. package/dist/sources/register.d.ts.map +1 -0
  99. package/dist/sources/register.js +37 -0
  100. package/dist/sources/register.js.map +1 -0
  101. package/dist/sources/types.d.ts +73 -0
  102. package/dist/sources/types.d.ts.map +1 -0
  103. package/dist/sources/types.js +36 -0
  104. package/dist/sources/types.js.map +1 -0
  105. package/dist/utils/errors.d.ts +3 -0
  106. package/dist/utils/errors.d.ts.map +1 -0
  107. package/dist/utils/errors.js +6 -0
  108. package/dist/utils/errors.js.map +1 -0
  109. package/dist/utils/index.d.ts +1 -0
  110. package/dist/utils/index.d.ts.map +1 -1
  111. package/dist/utils/index.js +1 -0
  112. package/dist/utils/index.js.map +1 -1
  113. package/package.json +5 -1
@@ -0,0 +1,35 @@
1
+ // packages/core/src/cli/pick.ts
2
+ import chalk from "chalk";
3
+ import { z } from "zod";
4
+ import { guardCancel } from "../utils/prompt";
5
+ import { StepKind, runDialogueValue } from "./dialogue";
6
+ import { c } from "./theme";
7
+ const PicksSchema = z.array(z.string());
8
+ /** The multi-select `pickOffers` asks through, by step id `selectEntries`, for preset answers. */
9
+ export function selectEntriesDialogue(noun) {
10
+ return {
11
+ steps: {
12
+ selectEntries: {
13
+ kind: StepKind.MultiSelect,
14
+ message: `Select ${noun}s to install:`,
15
+ choices: (input) => input.keyChoices ?? [],
16
+ },
17
+ },
18
+ };
19
+ }
20
+ /**
21
+ * Asks which offers to install, each as `<key>@<source>`, so two sources
22
+ * offering one key stay apart. Exits when the prompt is cancelled.
23
+ *
24
+ * @returns the picked requests, e.g. `["emphasise@g3n-skills"]`
25
+ */
26
+ export async function pickOffers(available, noun, answers) {
27
+ const keyChoices = [...available]
28
+ .sort((a, b) => a.key.localeCompare(b.key) || a.entry.origin.source.localeCompare(b.entry.origin.source))
29
+ .map(({ key, entry }) => ({
30
+ value: `${key}@${entry.origin.source}`,
31
+ label: `${c.key(key)} ${chalk.dim(`@${entry.origin.source}`)} ${chalk.dim("—")} ${chalk.dim(entry.description ?? entry.name)}`,
32
+ }));
33
+ return PicksSchema.parse(guardCancel(await runDialogueValue(selectEntriesDialogue(noun), { keyChoices }, answers)) ?? []);
34
+ }
35
+ //# sourceMappingURL=pick.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pick.js","sourceRoot":"","sources":["../../src/cli/pick.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGxD,OAAO,EAAE,CAAC,EAAE,MAAM,SAAS,CAAC;AAE5B,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAExC,kGAAkG;AAClG,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,OAAO;QACL,KAAK,EAAE;YACL,aAAa,EAAE;gBACb,IAAI,EAAK,QAAQ,CAAC,WAAW;gBAC7B,OAAO,EAAE,UAAU,IAAI,eAAe;gBACtC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE;aAC3C;SACF;KACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAwB,SAAoC,EAAE,IAAY,EAAE,OAAyB;IACnI,MAAM,UAAU,GAAG,CAAC,GAAG,SAAS,CAAC;SAC9B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SACxG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACxB,KAAK,EAAE,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;QACtC,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE;KACjI,CAAC,CAAC,CAAC;IACN,OAAO,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,gBAAgB,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5H,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { OriginEntry } from "../installer/origin";
2
+ import type { SourceRegistry } from "../installer/sourceRegistry";
3
+ import type { Resolution } from "../installer/resolve";
4
+ import type { Dialogue, DialogueAnswers } from "./dialogue";
5
+ import type { InstallInput } from "./types";
6
+ /** Prints every warning of a source registry and every source it could not read. */
7
+ export declare function reportSourceRegistry<T extends OriginEntry>(registry: SourceRegistry<T>): void;
8
+ /** Runs `read`, and on a throw prints its message and exits with code 1. */
9
+ export declare function orExit<T>(read: () => T): T;
10
+ /** What `reportResolution` names in its messages. */
11
+ export interface ResolutionContext {
12
+ /** Installer binary, e.g. `g3n-skills` */
13
+ bin: string;
14
+ /** What one entry is called, e.g. `skill` */
15
+ noun: string;
16
+ }
17
+ /** The confirm step `reportResolution` asks through, by step id `entryNotFound`, for preset answers. */
18
+ export declare function entryNotFoundDialogue(noun: string): Dialogue<InstallInput>;
19
+ /**
20
+ * Prints what a resolution could not settle and why each unnamed entry is in
21
+ * it. Exits on an ambiguous name; on unknown names, asks whether to go on
22
+ * with the rest and exits when the answer is no or nothing is left.
23
+ */
24
+ export declare function reportResolution<T extends OriginEntry>(resolution: Resolution<T>, context: ResolutionContext, answers?: DialogueAnswers): Promise<void>;
25
+ /**
26
+ * The sources narrowed to `only`, or all of them when it is absent. Exits
27
+ * naming the `source ls` command when no source has that name.
28
+ *
29
+ * @param bin - Installer binary for the hint, e.g. `g3n-skills`
30
+ */
31
+ export declare function narrowSources<S extends {
32
+ name: string;
33
+ }>(sources: readonly S[], only: string | undefined, bin: string): S[];
34
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/cli/report.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAElE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5C,oFAAoF;AACpF,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,WAAW,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAG7F;AAED,4EAA4E;AAC5E,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAO1C;AAED,qDAAqD;AACrD,MAAM,WAAW,iBAAiB;IAChC,0CAA0C;IAC1C,GAAG,EAAG,MAAM,CAAC;IACb,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wGAAwG;AACxG,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,CAU1E;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,SAAS,WAAW,EAC1D,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EACzB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC,CAaf;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,CAQ3H"}
@@ -0,0 +1,71 @@
1
+ import { errorMessage } from "../utils/errors";
2
+ import { StepKind, runDialogueValue } from "./dialogue";
3
+ import { c, lineError, lineInfo, lineWarn } from "./theme";
4
+ /** Prints every warning of a source registry and every source it could not read. */
5
+ export function reportSourceRegistry(registry) {
6
+ for (const warning of registry.warnings)
7
+ console.log(lineWarn(warning));
8
+ for (const failed of registry.failed)
9
+ console.log(lineWarn(`${c.key(failed.name)} could not be read: ${failed.error}`));
10
+ }
11
+ /** Runs `read`, and on a throw prints its message and exits with code 1. */
12
+ export function orExit(read) {
13
+ try {
14
+ return read();
15
+ }
16
+ catch (error) {
17
+ console.error(lineError(errorMessage(error)));
18
+ process.exit(1);
19
+ }
20
+ }
21
+ /** The confirm step `reportResolution` asks through, by step id `entryNotFound`, for preset answers. */
22
+ export function entryNotFoundDialogue(noun) {
23
+ return {
24
+ steps: {
25
+ entryNotFound: {
26
+ kind: StepKind.Confirm,
27
+ message: `Unknown ${noun}(s): {unknown}. Continue with the remaining selection?`,
28
+ initial: false,
29
+ },
30
+ },
31
+ };
32
+ }
33
+ /**
34
+ * Prints what a resolution could not settle and why each unnamed entry is in
35
+ * it. Exits on an ambiguous name; on unknown names, asks whether to go on
36
+ * with the rest and exits when the answer is no or nothing is left.
37
+ */
38
+ export async function reportResolution(resolution, context, answers) {
39
+ if (resolution.ambiguous.length > 0) {
40
+ for (const message of resolution.ambiguous)
41
+ console.error(lineError(message));
42
+ process.exit(1);
43
+ }
44
+ if (resolution.unknown.length > 0) {
45
+ const unknown = resolution.unknown.map((k) => c.key(k)).join(", ");
46
+ console.error(lineError(`Unknown ${context.noun}(s): ${unknown}. Run ${c.cmd(`${context.bin} ls`)} to see what the sources offer.`));
47
+ const proceed = resolution.entries.size > 0
48
+ && (await runDialogueValue(entryNotFoundDialogue(context.noun), { unknown }, answers)) === true;
49
+ if (!proceed)
50
+ process.exit(1);
51
+ }
52
+ for (const [key, why] of Object.entries(resolution.notes))
53
+ console.log(lineInfo(`${c.key(key)}: ${why}`));
54
+ }
55
+ /**
56
+ * The sources narrowed to `only`, or all of them when it is absent. Exits
57
+ * naming the `source ls` command when no source has that name.
58
+ *
59
+ * @param bin - Installer binary for the hint, e.g. `g3n-skills`
60
+ */
61
+ export function narrowSources(sources, only, bin) {
62
+ if (only === undefined)
63
+ return [...sources];
64
+ const narrowed = sources.filter((source) => source.name === only);
65
+ if (narrowed.length === 0) {
66
+ console.error(lineError(`No source named ${c.key(only)} is registered. Run ${c.cmd(`${bin} source ls`)} to see them.`));
67
+ process.exit(1);
68
+ }
69
+ return narrowed;
70
+ }
71
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/cli/report.ts"],"names":[],"mappings":"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"}
@@ -3,10 +3,6 @@ export declare const G3nuiSettingsSchema: z.ZodObject<{
3
3
  componentsDir: z.ZodDefault<z.ZodString>;
4
4
  includeDebugFiles: z.ZodDefault<z.ZodBoolean>;
5
5
  includeMetaFiles: z.ZodDefault<z.ZodBoolean>;
6
- manifestFormat: z.ZodDefault<z.ZodEnum<{
7
- json: "json";
8
- ts: "ts";
9
- }>>;
10
6
  registeredPackages: z.ZodDefault<z.ZodArray<z.ZodString>>;
11
7
  }, z.core.$strip>;
12
8
  export declare const G3nuiConfigSchema: z.ZodObject<{
@@ -14,10 +10,6 @@ export declare const G3nuiConfigSchema: z.ZodObject<{
14
10
  componentsDir: z.ZodDefault<z.ZodString>;
15
11
  includeDebugFiles: z.ZodDefault<z.ZodBoolean>;
16
12
  includeMetaFiles: z.ZodDefault<z.ZodBoolean>;
17
- manifestFormat: z.ZodDefault<z.ZodEnum<{
18
- json: "json";
19
- ts: "ts";
20
- }>>;
21
13
  registeredPackages: z.ZodDefault<z.ZodArray<z.ZodString>>;
22
14
  }, z.core.$strip>>;
23
15
  }, z.core.$strip>;
@@ -68,10 +60,6 @@ export declare const G3nConfigFileSchema: z.ZodObject<{
68
60
  componentsDir: z.ZodDefault<z.ZodString>;
69
61
  includeDebugFiles: z.ZodDefault<z.ZodBoolean>;
70
62
  includeMetaFiles: z.ZodDefault<z.ZodBoolean>;
71
- manifestFormat: z.ZodDefault<z.ZodEnum<{
72
- json: "json";
73
- ts: "ts";
74
- }>>;
75
63
  registeredPackages: z.ZodDefault<z.ZodArray<z.ZodString>>;
76
64
  }, z.core.$strip>>;
77
65
  }, z.core.$strip>>;
@@ -101,10 +89,6 @@ export declare const G3nConfigSchema: z.ZodObject<{
101
89
  componentsDir: z.ZodDefault<z.ZodString>;
102
90
  includeDebugFiles: z.ZodDefault<z.ZodBoolean>;
103
91
  includeMetaFiles: z.ZodDefault<z.ZodBoolean>;
104
- manifestFormat: z.ZodDefault<z.ZodEnum<{
105
- json: "json";
106
- ts: "ts";
107
- }>>;
108
92
  registeredPackages: z.ZodDefault<z.ZodArray<z.ZodString>>;
109
93
  }, z.core.$strip>>;
110
94
  }, z.core.$strip>>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,mBAAmB;;;;;;;;;iBAW9B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;iBAE5B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;iBAGjC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;iBAE/B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;EAA8B,CAAC;AAE7D,eAAO,MAAM,uBAAuB;;;iBAKlC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;iBAO/B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;iBAE7B,CAAC;AAMH,6FAA6F;AAC7F,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAI9B,CAAC;AAEH,0EAA0E;AAC1E,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAI1B,CAAC;AAMH,MAAM,MAAM,aAAa,GAAS,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,MAAM,MAAM,WAAW,GAAW,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AACpE,MAAM,MAAM,gBAAgB,GAAM,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACzE,MAAM,MAAM,cAAc,GAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACvE,MAAM,MAAM,WAAW,GAAW,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AACpE,MAAM,MAAM,iBAAiB,GAAK,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC1E,MAAM,MAAM,cAAc,GAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACvE,MAAM,MAAM,YAAY,GAAU,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AACrE,MAAM,MAAM,aAAa,GAAS,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,MAAM,MAAM,SAAS,GAAa,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,mBAAmB;;;;;iBAS9B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;iBAE5B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;iBAGjC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;iBAE/B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;EAA8B,CAAC;AAE7D,eAAO,MAAM,uBAAuB;;;iBAKlC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;iBAO/B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;iBAE7B,CAAC;AAMH,6FAA6F;AAC7F,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAI9B,CAAC;AAEH,0EAA0E;AAC1E,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAI1B,CAAC;AAMH,MAAM,MAAM,aAAa,GAAS,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,MAAM,MAAM,WAAW,GAAW,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AACpE,MAAM,MAAM,gBAAgB,GAAM,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACzE,MAAM,MAAM,cAAc,GAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACvE,MAAM,MAAM,WAAW,GAAW,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AACpE,MAAM,MAAM,iBAAiB,GAAK,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC1E,MAAM,MAAM,cAAc,GAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACvE,MAAM,MAAM,YAAY,GAAU,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AACrE,MAAM,MAAM,aAAa,GAAS,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,MAAM,MAAM,SAAS,GAAa,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
@@ -12,8 +12,6 @@ export const G3nuiSettingsSchema = z.object({
12
12
  includeDebugFiles: z.boolean().default(false),
13
13
  /** Whether to copy .meta.ts files alongside components */
14
14
  includeMetaFiles: z.boolean().default(false),
15
- /** Format of the user manifest file: json (default) or ts */
16
- manifestFormat: z.enum(["json", "ts"]).default("json"),
17
15
  /** External package adapters to load (e.g. ["shadcn"]) */
18
16
  registeredPackages: z.array(z.string()).default([]),
19
17
  });
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /** What `listFiles` leaves out. Folders always skipped: `node_modules` and `.git`. */
2
+ export interface FileFilter {
3
+ /** Folder names, or folder paths relative to the listed root, e.g. `tests` or `.claude-plugin/types` */
4
+ skipDirs?: readonly string[];
5
+ /** Tested against each file name, e.g. `/\.test\.tsx?$/` */
6
+ skipFiles?: RegExp;
7
+ }
8
+ /**
9
+ * Paths of every file below `dir`, relative to it and sorted, without the
10
+ * folders and files `filter` names.
11
+ *
12
+ * @param dir - Absolute folder to list
13
+ */
14
+ export declare function listFiles(dir: string, filter?: FileFilter): string[];
15
+ //# sourceMappingURL=files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/installer/files.ts"],"names":[],"mappings":"AAIA,sFAAsF;AACtF,MAAM,WAAW,UAAU;IACzB,wGAAwG;IACxG,QAAQ,CAAC,EAAG,SAAS,MAAM,EAAE,CAAA;IAC7B,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAID;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,UAAe,GAAG,MAAM,EAAE,CAUxE"}
@@ -0,0 +1,22 @@
1
+ // packages/core/src/installer/files.ts
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ const ALWAYS_SKIPPED = ["node_modules", ".git"];
5
+ /**
6
+ * Paths of every file below `dir`, relative to it and sorted, without the
7
+ * folders and files `filter` names.
8
+ *
9
+ * @param dir - Absolute folder to list
10
+ */
11
+ export function listFiles(dir, filter = {}) {
12
+ const skipDirs = new Set([...ALWAYS_SKIPPED, ...(filter.skipDirs ?? [])]);
13
+ const walk = (current) => fs.readdirSync(current, { withFileTypes: true }).flatMap((d) => {
14
+ const full = path.join(current, d.name);
15
+ const rel = path.relative(dir, full);
16
+ if (d.isDirectory())
17
+ return skipDirs.has(d.name) || skipDirs.has(rel) ? [] : walk(full);
18
+ return filter.skipFiles?.test(d.name) === true ? [] : [rel];
19
+ });
20
+ return walk(dir).sort();
21
+ }
22
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/installer/files.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAU5B,MAAM,cAAc,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;AAE/C;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,MAAM,GAAe,EAAE;IAC5D,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IACzE,MAAM,IAAI,GAAG,CAAC,OAAe,EAAY,EAAE,CACzC,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA;QACvC,MAAM,GAAG,GAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QACrC,IAAI,CAAC,CAAC,WAAW,EAAE;YAAE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACvF,OAAO,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAC7D,CAAC,CAAC,CAAA;IACJ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;AACzB,CAAC"}
@@ -3,4 +3,17 @@ export { createInstallerIO } from "./io";
3
3
  export { classifyFile, classifyFiles, recordedHashes } from "./classify";
4
4
  export { applyClassifications, copySource } from "./install";
5
5
  export { removeInstalledFiles, pruneEmptyDirs } from "./remove";
6
+ export { EntryOriginSchema, OriginEntrySchema } from "./origin";
7
+ export type { EntryOrigin, OriginEntry, ReadContext } from "./origin";
8
+ export { listFiles } from "./files";
9
+ export type { FileFilter } from "./files";
10
+ export { MANIFEST_DIRS, manifestFile, readMarketplace, resolveInside } from "./marketplace";
11
+ export type { MarketplacePlugin } from "./marketplace";
12
+ export { installManifestSchema, loadInstallManifest, installedEntries, saveInstallManifest } from "./manifest";
13
+ export type { InstallManifest } from "./manifest";
14
+ export { manifestSources, registerSource, unregisterSource } from "./manifestSources";
15
+ export { loadSourceRegistry, offers, offerRegistry, entrySource } from "./sourceRegistry";
16
+ export type { SourceRegistry, SourceEntries, SourceOffer, ReadSource, FailedSource } from "./sourceRegistry";
17
+ export { parseRequest, formatRequest, resolveDependencies, resolveRequests, resolveInstalled, resolveUpdates, installedOrigins } from "./resolve";
18
+ export type { EntryRequest, Resolution, ResolvedDependencies } from "./resolve";
6
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACxE,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACxE,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC/D,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC3F,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAC9G,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACzF,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC5G,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AACjJ,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA"}
@@ -4,4 +4,11 @@ export { createInstallerIO } from "./io";
4
4
  export { classifyFile, classifyFiles, recordedHashes } from "./classify";
5
5
  export { applyClassifications, copySource } from "./install";
6
6
  export { removeInstalledFiles, pruneEmptyDirs } from "./remove";
7
+ export { EntryOriginSchema, OriginEntrySchema } from "./origin";
8
+ export { listFiles } from "./files";
9
+ export { MANIFEST_DIRS, manifestFile, readMarketplace, resolveInside } from "./marketplace";
10
+ export { installManifestSchema, loadInstallManifest, installedEntries, saveInstallManifest } from "./manifest";
11
+ export { manifestSources, registerSource, unregisterSource } from "./manifestSources";
12
+ export { loadSourceRegistry, offers, offerRegistry, entrySource } from "./sourceRegistry";
13
+ export { parseRequest, formatRequest, resolveDependencies, resolveRequests, resolveInstalled, resolveUpdates, installedOrigins } from "./resolve";
7
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACxE,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACxE,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAE/D,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAEnC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE3F,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAE9G,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEzF,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA"}
@@ -0,0 +1,59 @@
1
+ import { z } from "zod";
2
+ import { type RegistryStore } from "../registry/registry.store";
3
+ import type { BaseRegistryEntry } from "../registry/types";
4
+ import { type SourceRecord } from "../sources/types";
5
+ /**
6
+ * One install manifest: the sources registered for an install target and
7
+ * the entries installed into it, as `{ "sources": {...}, "entries": {...} }`
8
+ * on disk.
9
+ *
10
+ * Created by `loadInstallManifest` in each installer's project setup
11
+ * (`skills.json`, `mods.json`, the g3nui manifest). The installer changes
12
+ * `sources` directly and hands `store` to the core `add`, `update` and
13
+ * `remove` commands; `saveInstallManifest` writes both back.
14
+ */
15
+ export interface InstallManifest {
16
+ /** Absolute path of the file, e.g. `/home/me/app/.claude/skills.json` */
17
+ filePath: string;
18
+ sources: SourceRecord;
19
+ /** Installed entries by key */
20
+ store: RegistryStore<BaseRegistryEntry>;
21
+ }
22
+ /** Schema of a manifest file whose entries match `entrySchema`. */
23
+ export declare function installManifestSchema<S extends z.ZodType>(entrySchema: S): z.ZodObject<{
24
+ sources: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
25
+ kind: z.ZodLiteral<"git">;
26
+ url: z.ZodString;
27
+ ref: z.ZodOptional<z.ZodString>;
28
+ }, z.core.$strip>, z.ZodObject<{
29
+ kind: z.ZodLiteral<"npm">;
30
+ package: z.ZodString;
31
+ version: z.ZodOptional<z.ZodString>;
32
+ }, z.core.$strip>, z.ZodObject<{
33
+ kind: z.ZodLiteral<"local">;
34
+ path: z.ZodString;
35
+ }, z.core.$strip>], "kind">>>;
36
+ entries: z.ZodDefault<z.ZodRecord<z.ZodString, S>>;
37
+ }, z.core.$strict>;
38
+ /**
39
+ * Reads a manifest file and checks every entry against `entrySchema`; a
40
+ * missing file reads as no sources and no entries.
41
+ *
42
+ * @param filePath - Absolute path of the manifest
43
+ * @throws naming the file when it is not JSON or does not match the schema
44
+ */
45
+ export declare function loadInstallManifest(filePath: string, entrySchema: z.ZodType<BaseRegistryEntry>): InstallManifest;
46
+ /**
47
+ * Installed entries of a manifest, each checked against `entrySchema`.
48
+ *
49
+ * @throws when an entry the install commands wrote does not match the schema
50
+ */
51
+ export declare function installedEntries<T extends BaseRegistryEntry>(manifest: InstallManifest, entrySchema: z.ZodType<T>): Record<string, T>;
52
+ /**
53
+ * Writes sources and entries back, each sorted by name, after checking every
54
+ * entry against `entrySchema`.
55
+ *
56
+ * @throws when an entry does not match the schema; nothing is written then
57
+ */
58
+ export declare function saveInstallManifest(manifest: InstallManifest, entrySchema: z.ZodType<BaseRegistryEntry>): void;
59
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/installer/manifest.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAEpF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAGxE;;;;;;;;;GASG;AACH,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAG,YAAY,CAAA;IACtB,+BAA+B;IAC/B,KAAK,EAAK,aAAa,CAAC,iBAAiB,CAAC,CAAA;CAC3C;AAED,mEAAmE;AACnE,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC;;;;;;;;;;;;;;mBAKxE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,eAAe,CAehH;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,iBAAiB,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAErI;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAK9G"}
@@ -0,0 +1,60 @@
1
+ // packages/core/src/installer/manifest.ts
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { z } from "zod";
5
+ import { createRegistryStore } from "../registry/registry.store";
6
+ import { entries } from "../registry/registry.selectors";
7
+ import { SourceRecordSchema } from "../sources/types";
8
+ import { errorMessage } from "../utils/errors";
9
+ /** Schema of a manifest file whose entries match `entrySchema`. */
10
+ export function installManifestSchema(entrySchema) {
11
+ return z.strictObject({
12
+ sources: SourceRecordSchema.default({}),
13
+ entries: z.record(z.string(), entrySchema).default({}),
14
+ });
15
+ }
16
+ /**
17
+ * Reads a manifest file and checks every entry against `entrySchema`; a
18
+ * missing file reads as no sources and no entries.
19
+ *
20
+ * @param filePath - Absolute path of the manifest
21
+ * @throws naming the file when it is not JSON or does not match the schema
22
+ */
23
+ export function loadInstallManifest(filePath, entrySchema) {
24
+ const store = createRegistryStore();
25
+ if (!fs.existsSync(filePath))
26
+ return { filePath, sources: {}, store };
27
+ let raw;
28
+ try {
29
+ raw = JSON.parse(fs.readFileSync(filePath, "utf8"));
30
+ }
31
+ catch (error) {
32
+ throw new Error(`${filePath} is not valid JSON: ${errorMessage(error)}`);
33
+ }
34
+ const parsed = installManifestSchema(entrySchema).safeParse(raw);
35
+ if (!parsed.success)
36
+ throw new Error(`${filePath} is not a valid install manifest:\n${z.prettifyError(parsed.error)}`);
37
+ store.store.setState(() => ({ ...parsed.data.entries }));
38
+ return { filePath, sources: parsed.data.sources, store };
39
+ }
40
+ /**
41
+ * Installed entries of a manifest, each checked against `entrySchema`.
42
+ *
43
+ * @throws when an entry the install commands wrote does not match the schema
44
+ */
45
+ export function installedEntries(manifest, entrySchema) {
46
+ return z.record(z.string(), entrySchema).parse(entries(manifest.store));
47
+ }
48
+ /**
49
+ * Writes sources and entries back, each sorted by name, after checking every
50
+ * entry against `entrySchema`.
51
+ *
52
+ * @throws when an entry does not match the schema; nothing is written then
53
+ */
54
+ export function saveInstallManifest(manifest, entrySchema) {
55
+ const sorted = (record) => Object.fromEntries(Object.entries(record).sort(([a], [b]) => a.localeCompare(b)));
56
+ const content = { sources: sorted(manifest.sources), entries: sorted(installedEntries(manifest, entrySchema)) };
57
+ fs.mkdirSync(path.dirname(manifest.filePath), { recursive: true });
58
+ fs.writeFileSync(manifest.filePath, JSON.stringify(content, null, 2) + "\n");
59
+ }
60
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/installer/manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { RegisteredSource, SourceRecord, SourceSpec } from "../sources/types";
2
+ import type { InstallManifest } from "./manifest";
3
+ /**
4
+ * Sources of one or more manifests plus the built-in ones, each name once and
5
+ * built-in sources first. When two manifests register one name for different
6
+ * places, the first manifest's spec is used.
7
+ */
8
+ export declare function manifestSources(manifests: readonly InstallManifest[], builtins: SourceRecord): RegisteredSource[];
9
+ /**
10
+ * Registers a source in every manifest. Nothing changes unless every manifest accepts it.
11
+ *
12
+ * @throws when the name is built in, invalid, or already registered in any manifest
13
+ */
14
+ export declare function registerSource(manifests: readonly InstallManifest[], name: string, spec: SourceSpec, builtins: SourceRecord): void;
15
+ /**
16
+ * Unregisters a source from every manifest that has it.
17
+ *
18
+ * @throws when the name is built in or no manifest registers it
19
+ */
20
+ export declare function unregisterSource(manifests: readonly InstallManifest[], name: string, builtins: SourceRecord): void;
21
+ //# sourceMappingURL=manifestSources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifestSources.d.ts","sourceRoot":"","sources":["../../src/installer/manifestSources.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,eAAe,EAAE,EAAE,QAAQ,EAAE,YAAY,GAAG,gBAAgB,EAAE,CAMjH;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,eAAe,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAGlI;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,eAAe,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAKlH"}
@@ -0,0 +1,39 @@
1
+ // packages/core/src/installer/manifestSources.ts
2
+ import { addSource, listSources, removeSource } from "../sources/register";
3
+ /**
4
+ * Sources of one or more manifests plus the built-in ones, each name once and
5
+ * built-in sources first. When two manifests register one name for different
6
+ * places, the first manifest's spec is used.
7
+ */
8
+ export function manifestSources(manifests, builtins) {
9
+ const byName = new Map();
10
+ for (const manifest of manifests) {
11
+ for (const source of listSources(manifest.sources, builtins))
12
+ if (!byName.has(source.name))
13
+ byName.set(source.name, source);
14
+ }
15
+ return [...byName.values()];
16
+ }
17
+ /**
18
+ * Registers a source in every manifest. Nothing changes unless every manifest accepts it.
19
+ *
20
+ * @throws when the name is built in, invalid, or already registered in any manifest
21
+ */
22
+ export function registerSource(manifests, name, spec, builtins) {
23
+ const updated = manifests.map((manifest) => addSource(manifest.sources, name, spec, builtins));
24
+ manifests.forEach((manifest, index) => { manifest.sources = updated[index] ?? manifest.sources; });
25
+ }
26
+ /**
27
+ * Unregisters a source from every manifest that has it.
28
+ *
29
+ * @throws when the name is built in or no manifest registers it
30
+ */
31
+ export function unregisterSource(manifests, name, builtins) {
32
+ const holding = manifests.filter((manifest) => manifest.sources[name] !== undefined);
33
+ // With no manifest holding it, removeSource throws the reason: built in, or never registered.
34
+ if (holding.length === 0)
35
+ removeSource({}, name, builtins);
36
+ for (const manifest of holding)
37
+ manifest.sources = removeSource(manifest.sources, name, builtins);
38
+ }
39
+ //# sourceMappingURL=manifestSources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifestSources.js","sourceRoot":"","sources":["../../src/installer/manifestSources.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAI1E;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,SAAqC,EAAE,QAAsB;IAC3F,MAAM,MAAM,GAAG,IAAI,GAAG,EAA4B,CAAA;IAClD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;YAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAC7H,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,SAAqC,EAAE,IAAY,EAAE,IAAgB,EAAE,QAAsB;IAC1H,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAA;IAC9F,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,GAAG,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAA,CAAC,CAAC,CAAC,CAAA;AACnG,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAqC,EAAE,IAAY,EAAE,QAAsB;IAC1G,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAA;IACpF,8FAA8F;IAC9F,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC1D,KAAK,MAAM,QAAQ,IAAI,OAAO;QAAE,QAAQ,CAAC,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;AACnG,CAAC"}
@@ -0,0 +1,34 @@
1
+ /** Folders a plugin or marketplace manifest may sit in, in the order they are tried. */
2
+ export declare const MANIFEST_DIRS: string[];
3
+ /** One plugin a marketplace lists, by its folder inside the source. */
4
+ export interface MarketplacePlugin {
5
+ name: string;
6
+ /** Absolute plugin folder */
7
+ dir: string;
8
+ }
9
+ /**
10
+ * First existing `<dir>/.claude-plugin/<file>` or `<dir>/.cursor-plugin/<file>`.
11
+ *
12
+ * @returns absolute path, or `null` when neither exists
13
+ */
14
+ export declare function manifestFile(dir: string, file: string): string | null;
15
+ /**
16
+ * Resolves `rel` against `base` and rejects a result outside `root`.
17
+ *
18
+ * @param root - Absolute folder nothing may leave, e.g. a source checkout
19
+ * @throws when the path points outside `root`
20
+ */
21
+ export declare function resolveInside(root: string, base: string, rel: string): string;
22
+ /**
23
+ * The plugins a source's `marketplace.json` lists. Plugins whose `source` is
24
+ * not a relative path (a git or npm reference) are skipped with a warning.
25
+ *
26
+ * @param root - Absolute root of the source
27
+ * @returns `null` when the source has no marketplace
28
+ * @throws when the marketplace is not valid JSON, or a plugin path leaves the source
29
+ */
30
+ export declare function readMarketplace(root: string): {
31
+ plugins: MarketplacePlugin[];
32
+ warnings: string[];
33
+ } | null;
34
+ //# sourceMappingURL=marketplace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace.d.ts","sourceRoot":"","sources":["../../src/installer/marketplace.ts"],"names":[],"mappings":"AAKA,wFAAwF;AACxF,eAAO,MAAM,aAAa,UAAuC,CAAA;AAWjE,uEAAuE;AACvE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,6BAA6B;IAC7B,GAAG,EAAG,MAAM,CAAA;CACb;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMrE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAM7E;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAezG"}