@jean.gnc/harness-kit 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +190 -0
  3. package/dist/agent/index.d.ts +3 -0
  4. package/dist/agent/index.d.ts.map +1 -0
  5. package/dist/agent/index.js +2 -0
  6. package/dist/agent/index.js.map +1 -0
  7. package/dist/agent/schema.d.ts +20 -0
  8. package/dist/agent/schema.d.ts.map +1 -0
  9. package/dist/agent/schema.js +20 -0
  10. package/dist/agent/schema.js.map +1 -0
  11. package/dist/build.d.ts +9 -0
  12. package/dist/build.d.ts.map +1 -0
  13. package/dist/build.js +18 -0
  14. package/dist/build.js.map +1 -0
  15. package/dist/check/index.d.ts +27 -0
  16. package/dist/check/index.d.ts.map +1 -0
  17. package/dist/check/index.js +160 -0
  18. package/dist/check/index.js.map +1 -0
  19. package/dist/check/kinds.d.ts +11 -0
  20. package/dist/check/kinds.d.ts.map +1 -0
  21. package/dist/check/kinds.js +65 -0
  22. package/dist/check/kinds.js.map +1 -0
  23. package/dist/check/suggest.d.ts +2 -0
  24. package/dist/check/suggest.d.ts.map +1 -0
  25. package/dist/check/suggest.js +37 -0
  26. package/dist/check/suggest.js.map +1 -0
  27. package/dist/cli.d.ts +3 -0
  28. package/dist/cli.d.ts.map +1 -0
  29. package/dist/cli.js +146 -0
  30. package/dist/cli.js.map +1 -0
  31. package/dist/command/index.d.ts +3 -0
  32. package/dist/command/index.d.ts.map +1 -0
  33. package/dist/command/index.js +2 -0
  34. package/dist/command/index.js.map +1 -0
  35. package/dist/command/schema.d.ts +23 -0
  36. package/dist/command/schema.d.ts.map +1 -0
  37. package/dist/command/schema.js +21 -0
  38. package/dist/command/schema.js.map +1 -0
  39. package/dist/compile/discovery.d.ts +2 -0
  40. package/dist/compile/discovery.d.ts.map +1 -0
  41. package/dist/compile/discovery.js +4 -0
  42. package/dist/compile/discovery.js.map +1 -0
  43. package/dist/compile/emit.d.ts +15 -0
  44. package/dist/compile/emit.d.ts.map +1 -0
  45. package/dist/compile/emit.js +123 -0
  46. package/dist/compile/emit.js.map +1 -0
  47. package/dist/compile/frontmatter.d.ts +7 -0
  48. package/dist/compile/frontmatter.d.ts.map +1 -0
  49. package/dist/compile/frontmatter.js +44 -0
  50. package/dist/compile/frontmatter.js.map +1 -0
  51. package/dist/compile/index.d.ts +9 -0
  52. package/dist/compile/index.d.ts.map +1 -0
  53. package/dist/compile/index.js +123 -0
  54. package/dist/compile/index.js.map +1 -0
  55. package/dist/compile/validators.d.ts +9 -0
  56. package/dist/compile/validators.d.ts.map +1 -0
  57. package/dist/compile/validators.js +112 -0
  58. package/dist/compile/validators.js.map +1 -0
  59. package/dist/errors/index.d.ts +2 -0
  60. package/dist/errors/index.d.ts.map +1 -0
  61. package/dist/errors/index.js +2 -0
  62. package/dist/errors/index.js.map +1 -0
  63. package/dist/errors/zod.d.ts +3 -0
  64. package/dist/errors/zod.d.ts.map +1 -0
  65. package/dist/errors/zod.js +4 -0
  66. package/dist/errors/zod.js.map +1 -0
  67. package/dist/fs.d.ts +2 -0
  68. package/dist/fs.d.ts.map +1 -0
  69. package/dist/fs.js +11 -0
  70. package/dist/fs.js.map +1 -0
  71. package/dist/ids.d.ts +5 -0
  72. package/dist/ids.d.ts.map +1 -0
  73. package/dist/ids.js +9 -0
  74. package/dist/ids.js.map +1 -0
  75. package/dist/index.d.ts +23 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +12 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/install/claude.d.ts +4 -0
  80. package/dist/install/claude.d.ts.map +1 -0
  81. package/dist/install/claude.js +37 -0
  82. package/dist/install/claude.js.map +1 -0
  83. package/dist/install/codex.d.ts +4 -0
  84. package/dist/install/codex.d.ts.map +1 -0
  85. package/dist/install/codex.js +29 -0
  86. package/dist/install/codex.js.map +1 -0
  87. package/dist/install/discovery.d.ts +21 -0
  88. package/dist/install/discovery.d.ts.map +1 -0
  89. package/dist/install/discovery.js +51 -0
  90. package/dist/install/discovery.js.map +1 -0
  91. package/dist/install/index.d.ts +28 -0
  92. package/dist/install/index.d.ts.map +1 -0
  93. package/dist/install/index.js +44 -0
  94. package/dist/install/index.js.map +1 -0
  95. package/dist/install/runner.d.ts +4 -0
  96. package/dist/install/runner.d.ts.map +1 -0
  97. package/dist/install/runner.js +15 -0
  98. package/dist/install/runner.js.map +1 -0
  99. package/dist/installed.d.ts +36 -0
  100. package/dist/installed.d.ts.map +1 -0
  101. package/dist/installed.js +155 -0
  102. package/dist/installed.js.map +1 -0
  103. package/dist/layout/index.d.ts +63 -0
  104. package/dist/layout/index.d.ts.map +1 -0
  105. package/dist/layout/index.js +159 -0
  106. package/dist/layout/index.js.map +1 -0
  107. package/dist/lint.d.ts +9 -0
  108. package/dist/lint.d.ts.map +1 -0
  109. package/dist/lint.js +27 -0
  110. package/dist/lint.js.map +1 -0
  111. package/dist/marketplace/index.d.ts +3 -0
  112. package/dist/marketplace/index.d.ts.map +1 -0
  113. package/dist/marketplace/index.js +2 -0
  114. package/dist/marketplace/index.js.map +1 -0
  115. package/dist/marketplace/schema.d.ts +495 -0
  116. package/dist/marketplace/schema.d.ts.map +1 -0
  117. package/dist/marketplace/schema.js +92 -0
  118. package/dist/marketplace/schema.js.map +1 -0
  119. package/dist/parsing/frontmatter.d.ts +16 -0
  120. package/dist/parsing/frontmatter.d.ts.map +1 -0
  121. package/dist/parsing/frontmatter.js +45 -0
  122. package/dist/parsing/frontmatter.js.map +1 -0
  123. package/dist/parsing/index.d.ts +3 -0
  124. package/dist/parsing/index.d.ts.map +1 -0
  125. package/dist/parsing/index.js +2 -0
  126. package/dist/parsing/index.js.map +1 -0
  127. package/dist/placeholders/index.d.ts +5 -0
  128. package/dist/placeholders/index.d.ts.map +1 -0
  129. package/dist/placeholders/index.js +3 -0
  130. package/dist/placeholders/index.js.map +1 -0
  131. package/dist/placeholders/source-position.d.ts +6 -0
  132. package/dist/placeholders/source-position.d.ts.map +1 -0
  133. package/dist/placeholders/source-position.js +13 -0
  134. package/dist/placeholders/source-position.js.map +1 -0
  135. package/dist/placeholders/tokens.d.ts +26 -0
  136. package/dist/placeholders/tokens.d.ts.map +1 -0
  137. package/dist/placeholders/tokens.js +50 -0
  138. package/dist/placeholders/tokens.js.map +1 -0
  139. package/dist/plugin/index.d.ts +3 -0
  140. package/dist/plugin/index.d.ts.map +1 -0
  141. package/dist/plugin/index.js +2 -0
  142. package/dist/plugin/index.js.map +1 -0
  143. package/dist/plugin/schema.d.ts +164 -0
  144. package/dist/plugin/schema.d.ts.map +1 -0
  145. package/dist/plugin/schema.js +61 -0
  146. package/dist/plugin/schema.js.map +1 -0
  147. package/dist/readme/index.d.ts +24 -0
  148. package/dist/readme/index.d.ts.map +1 -0
  149. package/dist/readme/index.js +119 -0
  150. package/dist/readme/index.js.map +1 -0
  151. package/dist/result.d.ts +10 -0
  152. package/dist/result.d.ts.map +1 -0
  153. package/dist/result.js +7 -0
  154. package/dist/result.js.map +1 -0
  155. package/dist/skill/includes.d.ts +29 -0
  156. package/dist/skill/includes.d.ts.map +1 -0
  157. package/dist/skill/includes.js +81 -0
  158. package/dist/skill/includes.js.map +1 -0
  159. package/dist/skill/index.d.ts +8 -0
  160. package/dist/skill/index.d.ts.map +1 -0
  161. package/dist/skill/index.js +5 -0
  162. package/dist/skill/index.js.map +1 -0
  163. package/dist/skill/invariants.d.ts +3 -0
  164. package/dist/skill/invariants.d.ts.map +1 -0
  165. package/dist/skill/invariants.js +17 -0
  166. package/dist/skill/invariants.js.map +1 -0
  167. package/dist/skill/schema.d.ts +50 -0
  168. package/dist/skill/schema.d.ts.map +1 -0
  169. package/dist/skill/schema.js +36 -0
  170. package/dist/skill/schema.js.map +1 -0
  171. package/dist/skill/source.d.ts +48 -0
  172. package/dist/skill/source.d.ts.map +1 -0
  173. package/dist/skill/source.js +114 -0
  174. package/dist/skill/source.js.map +1 -0
  175. package/package.json +91 -0
@@ -0,0 +1,9 @@
1
+ import type { ValidatorRegistry } from "../placeholders/index.js";
2
+ import type { Companion } from "../skill/index.js";
3
+ import type { LocalIds } from "../layout/index.js";
4
+ export interface OwningPlugin {
5
+ readonly name: string;
6
+ readonly dependencies: ReadonlySet<string>;
7
+ }
8
+ export declare function buildRegistry(companions: readonly Companion[] | undefined, localIds: LocalIds, existingRefs: ReadonlySet<string>, skillDir: string, owner: OwningPlugin): ValidatorRegistry;
9
+ //# sourceMappingURL=validators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/compile/validators.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAInD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC5C;AAED,wBAAgB,aAAa,CAC3B,UAAU,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,EAC5C,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,EACjC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,YAAY,GAClB,iBAAiB,CAoFnB"}
@@ -0,0 +1,112 @@
1
+ import { FQ_ID } from "../ids.js";
2
+ import { COMPANIONS_PREFIX, renderCompanions } from "./frontmatter.js";
3
+ export function buildRegistry(companions, localIds, existingRefs, skillDir, owner) {
4
+ return {
5
+ skill: (value) => {
6
+ if (value === null)
7
+ return { ok: false, error: "expected `{{skill:<plugin>:<name>}}`" };
8
+ if (!localIds.skills.has(value)) {
9
+ return { ok: false, error: `unknown skill id "${value}" — not a local skill` };
10
+ }
11
+ const crossPlugin = crossPluginViolation(value, owner);
12
+ if (crossPlugin)
13
+ return { ok: false, error: crossPlugin };
14
+ return { ok: true, rendered: `\`${value}\`` };
15
+ },
16
+ command: (value) => {
17
+ if (value === null)
18
+ return { ok: false, error: "expected `{{command:<plugin>:<command>}}`" };
19
+ if (!FQ_ID.test(value)) {
20
+ return {
21
+ ok: false,
22
+ error: `command id "${value}" must match <plugin>:<command> (kebab-case)`,
23
+ };
24
+ }
25
+ if (!localIds.commands.has(value)) {
26
+ return { ok: false, error: `unknown command id "${value}" — not a local command` };
27
+ }
28
+ const crossPlugin = crossPluginViolation(value, owner);
29
+ if (crossPlugin)
30
+ return { ok: false, error: crossPlugin };
31
+ return { ok: true, rendered: `\`/${value}\`` };
32
+ },
33
+ agent: (value) => {
34
+ if (value === null)
35
+ return { ok: false, error: "expected `{{agent:<plugin>:<agent>}}`" };
36
+ if (!FQ_ID.test(value)) {
37
+ return {
38
+ ok: false,
39
+ error: `agent id "${value}" must match <plugin>:<agent> (kebab-case)`,
40
+ };
41
+ }
42
+ if (!localIds.agents.has(value)) {
43
+ return { ok: false, error: `unknown agent id "${value}" — not a local agent` };
44
+ }
45
+ const crossPlugin = crossPluginViolation(value, owner);
46
+ if (crossPlugin)
47
+ return { ok: false, error: crossPlugin };
48
+ return { ok: true, rendered: `\`${bareName(value)}\`` };
49
+ },
50
+ ext: (value) => {
51
+ if (value === null)
52
+ return { ok: false, error: "expected `{{ext:<plugin>:<skill>}}`" };
53
+ if (!FQ_ID.test(value)) {
54
+ return { ok: false, error: `ext id "${value}" must match <plugin>:<skill> (kebab-case)` };
55
+ }
56
+ return { ok: true, rendered: `\`${value}\`` };
57
+ },
58
+ "ext-command": (value) => {
59
+ if (value === null) {
60
+ return { ok: false, error: "expected `{{ext-command:<plugin>:<command>}}`" };
61
+ }
62
+ if (!FQ_ID.test(value)) {
63
+ return {
64
+ ok: false,
65
+ error: `ext-command id "${value}" must match <plugin>:<command> (kebab-case)`,
66
+ };
67
+ }
68
+ return { ok: true, rendered: `\`/${value}\`` };
69
+ },
70
+ "ext-agent": (value) => {
71
+ if (value === null)
72
+ return { ok: false, error: "expected `{{ext-agent:<plugin>:<agent>}}`" };
73
+ if (!FQ_ID.test(value)) {
74
+ return {
75
+ ok: false,
76
+ error: `ext-agent id "${value}" must match <plugin>:<agent> (kebab-case)`,
77
+ };
78
+ }
79
+ return { ok: true, rendered: `\`${bareName(value)}\`` };
80
+ },
81
+ ref: (value) => {
82
+ if (value === null)
83
+ return { ok: false, error: "expected `{{ref:<relative-path>}}`" };
84
+ if (!existingRefs.has(value)) {
85
+ return { ok: false, error: `ref "${value}" not found relative to skill at ${skillDir}` };
86
+ }
87
+ return { ok: true, rendered: `\`${value}\`` };
88
+ },
89
+ [COMPANIONS_PREFIX]: () => {
90
+ if (!companions?.length) {
91
+ return { ok: false, error: "no companions are declared on this skill" };
92
+ }
93
+ return { ok: true, rendered: renderCompanions(companions) };
94
+ },
95
+ };
96
+ }
97
+ function bareName(id) {
98
+ const idx = id.indexOf(":");
99
+ return idx === -1 ? id : id.slice(idx + 1);
100
+ }
101
+ function crossPluginViolation(id, owner) {
102
+ const idx = id.indexOf(":");
103
+ if (idx === -1)
104
+ return null;
105
+ const otherPlugin = id.slice(0, idx);
106
+ if (otherPlugin === owner.name)
107
+ return null;
108
+ if (owner.dependencies.has(otherPlugin))
109
+ return null;
110
+ return `cross-plugin reference to "${otherPlugin}" requires "${otherPlugin}" in ${owner.name}'s dependencies`;
111
+ }
112
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/compile/validators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { formatZodIssues } from "./zod.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { formatZodIssues } from "./zod.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ZodError } from "zod";
2
+ export declare function formatZodIssues(error: ZodError): string[];
3
+ //# sourceMappingURL=zod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod.d.ts","sourceRoot":"","sources":["../../src/errors/zod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAEpC,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,EAAE,CAEzD"}
@@ -0,0 +1,4 @@
1
+ export function formatZodIssues(error) {
2
+ return error.issues.map((i) => `${i.path.join(".") || "(root)"}: ${i.message}`);
3
+ }
4
+ //# sourceMappingURL=zod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod.js","sourceRoot":"","sources":["../../src/errors/zod.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,eAAe,CAAC,KAAe;IAC7C,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAClF,CAAC"}
package/dist/fs.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare function pathExists(p: string): Promise<boolean>;
2
+ //# sourceMappingURL=fs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAEA,wBAAsB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO5D"}
package/dist/fs.js ADDED
@@ -0,0 +1,11 @@
1
+ import { stat } from "node:fs/promises";
2
+ export async function pathExists(p) {
3
+ try {
4
+ await stat(p);
5
+ return true;
6
+ }
7
+ catch {
8
+ return false;
9
+ }
10
+ }
11
+ //# sourceMappingURL=fs.js.map
package/dist/fs.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,CAAS;IACxC,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
package/dist/ids.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ export declare const PLUGIN_ID: RegExp;
2
+ export declare const FQ_ID: RegExp;
3
+ export declare function isPluginId(value: string): boolean;
4
+ export declare function isFqId(value: string): boolean;
5
+ //# sourceMappingURL=ids.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../src/ids.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,QAAiB,CAAC;AACxC,eAAO,MAAM,KAAK,QAA4B,CAAC;AAE/C,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7C"}
package/dist/ids.js ADDED
@@ -0,0 +1,9 @@
1
+ export const PLUGIN_ID = /^[a-z0-9-]+$/;
2
+ export const FQ_ID = /^[a-z0-9-]+:[a-z0-9-]+$/;
3
+ export function isPluginId(value) {
4
+ return PLUGIN_ID.test(value);
5
+ }
6
+ export function isFqId(value) {
7
+ return FQ_ID.test(value);
8
+ }
9
+ //# sourceMappingURL=ids.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.js","sourceRoot":"","sources":["../src/ids.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,cAAc,CAAC;AACxC,MAAM,CAAC,MAAM,KAAK,GAAG,yBAAyB,CAAC;AAE/C,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAAa;IAClC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,23 @@
1
+ export { CompanionSchema, SkillSchema, checkCompanionFiles, defineSkill, findSkillFile, formatLoadSkillError, isReservedCompanionFilename, loadSkill, } from "./skill/index.js";
2
+ export type { Companion, FindSkillFileError, LoadedSkill, LoadSkillError, Skill, SkillFile, SkillSource, } from "./skill/index.js";
3
+ export { ContextEntrySchema, PluginSchema, definePlugin } from "./plugin/index.js";
4
+ export type { ContextEntry, Plugin } from "./plugin/index.js";
5
+ export { formatFrontmatterError, parseFrontmatter } from "./parsing/index.js";
6
+ export type { FrontmatterError, ParsedFrontmatter } from "./parsing/index.js";
7
+ export { err, ok } from "./result.js";
8
+ export type { Result } from "./result.js";
9
+ export { parsePlaceholders, substitute } from "./placeholders/index.js";
10
+ export type { Placeholder, SubstituteResult, Validator, ValidatorRegistry, ValidatorResult, } from "./placeholders/index.js";
11
+ export { compile } from "./compile/index.js";
12
+ export type { BodyInvariant, CompileOptions } from "./compile/index.js";
13
+ export { build } from "./build.js";
14
+ export type { BuildOptions } from "./build.js";
15
+ export { lint } from "./lint.js";
16
+ export type { LintOptions, LintResult } from "./lint.js";
17
+ export { install, uninstall } from "./install/index.js";
18
+ export type { InstallOptions, Target } from "./install/index.js";
19
+ export { check } from "./check/index.js";
20
+ export type { CheckOptions, CheckResult, ExtViolation, ExtViolationKind, SourceSummary, } from "./check/index.js";
21
+ export { defaultSources, discoverInstalled, indexInstalled } from "./installed.js";
22
+ export type { InstalledAgent, InstalledArtifacts, InstalledCommand, InstalledIndex, InstalledSkill, PluginSource, } from "./installed.js";
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,WAAW,EACX,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,oBAAoB,EACpB,2BAA2B,EAC3B,SAAS,GACV,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,SAAS,EACT,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,KAAK,EACL,SAAS,EACT,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACnF,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE9E,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACtC,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACxE,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,iBAAiB,EACjB,eAAe,GAChB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAExE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEzD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACxD,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,YAAY,EACV,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,aAAa,GACd,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACnF,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,YAAY,GACb,MAAM,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,12 @@
1
+ export { CompanionSchema, SkillSchema, checkCompanionFiles, defineSkill, findSkillFile, formatLoadSkillError, isReservedCompanionFilename, loadSkill, } from "./skill/index.js";
2
+ export { ContextEntrySchema, PluginSchema, definePlugin } from "./plugin/index.js";
3
+ export { formatFrontmatterError, parseFrontmatter } from "./parsing/index.js";
4
+ export { err, ok } from "./result.js";
5
+ export { parsePlaceholders, substitute } from "./placeholders/index.js";
6
+ export { compile } from "./compile/index.js";
7
+ export { build } from "./build.js";
8
+ export { lint } from "./lint.js";
9
+ export { install, uninstall } from "./install/index.js";
10
+ export { check } from "./check/index.js";
11
+ export { defaultSources, discoverInstalled, indexInstalled } from "./installed.js";
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,WAAW,EACX,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,oBAAoB,EACpB,2BAA2B,EAC3B,SAAS,GACV,MAAM,kBAAkB,CAAC;AAW1B,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGnF,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG9E,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAGtC,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AASxE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAG7C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGxD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AASzC,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { InstallContext } from "./index.js";
2
+ export declare function installClaude(ctx: InstallContext): Promise<void>;
3
+ export declare function uninstallClaude(ctx: InstallContext): Promise<void>;
4
+ //# sourceMappingURL=claude.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/install/claude.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAsB,aAAa,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBtE;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAWxE"}
@@ -0,0 +1,37 @@
1
+ import { rm } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { runIgnoreFailure } from "./runner.js";
4
+ export async function installClaude(ctx) {
5
+ const claudePlugins = ctx.plugins.filter((p) => p.claudeManifest !== null);
6
+ if (claudePlugins.length === 0)
7
+ return;
8
+ ctx.log(`[claude] refreshing ${claudePlugins.length} plugin(s) on marketplace ${ctx.marketplace}`);
9
+ for (const plugin of claudePlugins) {
10
+ await runIgnoreFailure(ctx.run, "claude", [
11
+ "plugin",
12
+ "uninstall",
13
+ `${plugin.name}@${ctx.marketplace}`,
14
+ ]);
15
+ await rm(join(ctx.claudeHome, "plugins/cache", ctx.marketplace, plugin.name), {
16
+ recursive: true,
17
+ force: true,
18
+ });
19
+ }
20
+ for (const plugin of claudePlugins) {
21
+ await ctx.run("claude", ["plugin", "install", `${plugin.name}@${ctx.marketplace}`]);
22
+ ctx.log(`[claude] installed ${plugin.name}`);
23
+ }
24
+ }
25
+ export async function uninstallClaude(ctx) {
26
+ const claudePlugins = ctx.plugins.filter((p) => p.claudeManifest !== null);
27
+ for (const plugin of claudePlugins) {
28
+ await runIgnoreFailure(ctx.run, "claude", [
29
+ "plugin",
30
+ "uninstall",
31
+ `${plugin.name}@${ctx.marketplace}`,
32
+ ]);
33
+ ctx.log(`[claude] uninstalled ${plugin.name}`);
34
+ }
35
+ await runIgnoreFailure(ctx.run, "claude", ["plugin", "marketplace", "remove", ctx.marketplace]);
36
+ }
37
+ //# sourceMappingURL=claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/install/claude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAmB;IACrD,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC;IAC3E,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACvC,GAAG,CAAC,GAAG,CACL,uBAAuB,aAAa,CAAC,MAAM,6BAA6B,GAAG,CAAC,WAAW,EAAE,CAC1F,CAAC;IACF,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;QACnC,MAAM,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE;YACxC,QAAQ;YACR,WAAW;YACX,GAAG,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;QACH,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe,EAAE,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;YAC5E,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;IACL,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;QACnC,MAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACpF,GAAG,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAmB;IACvD,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC;IAC3E,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;QACnC,MAAM,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE;YACxC,QAAQ;YACR,WAAW;YACX,GAAG,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;QACH,GAAG,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;AAClG,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { InstallContext } from "./index.js";
2
+ export declare function installCodex(ctx: InstallContext): Promise<void>;
3
+ export declare function uninstallCodex(ctx: InstallContext): Promise<void>;
4
+ //# sourceMappingURL=codex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/install/codex.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAsB,YAAY,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBrE;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAOvE"}
@@ -0,0 +1,29 @@
1
+ import { cp, mkdir, rm } from "node:fs/promises";
2
+ import { dirname, join } from "node:path";
3
+ import { runIgnoreFailure } from "./runner.js";
4
+ export async function installCodex(ctx) {
5
+ const codexPlugins = ctx.plugins.filter((p) => p.codexManifest !== null);
6
+ if (codexPlugins.length === 0)
7
+ return;
8
+ ctx.log(`[codex] priming ${codexPlugins.length} plugin(s) on marketplace ${ctx.marketplace}`);
9
+ await rm(join(ctx.codexHome, "plugins/cache", ctx.marketplace), {
10
+ recursive: true,
11
+ force: true,
12
+ });
13
+ await runIgnoreFailure(ctx.run, "codex", ["plugin", "marketplace", "add", ctx.distRoot]);
14
+ for (const plugin of codexPlugins) {
15
+ const dest = join(ctx.codexHome, "plugins/cache", ctx.marketplace, plugin.name, plugin.codexManifest.version);
16
+ await mkdir(dirname(dest), { recursive: true });
17
+ await cp(plugin.path, dest, { recursive: true });
18
+ ctx.log(`[codex] cached ${plugin.name}@${plugin.codexManifest.version}`);
19
+ }
20
+ }
21
+ export async function uninstallCodex(ctx) {
22
+ await runIgnoreFailure(ctx.run, "codex", ["plugin", "marketplace", "remove", ctx.marketplace]);
23
+ await rm(join(ctx.codexHome, "plugins/cache", ctx.marketplace), {
24
+ recursive: true,
25
+ force: true,
26
+ });
27
+ ctx.log(`[codex] removed ${ctx.marketplace} cache`);
28
+ }
29
+ //# sourceMappingURL=codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/install/codex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAG1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAmB;IACpD,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CACrC,CAAC,CAAC,EAA6D,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,IAAI,CAC3F,CAAC;IACF,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACtC,GAAG,CAAC,GAAG,CAAC,mBAAmB,YAAY,CAAC,MAAM,6BAA6B,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9F,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,CAAC,WAAW,CAAC,EAAE;QAC9D,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;IACH,MAAM,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzF,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,CACf,GAAG,CAAC,SAAS,EACb,eAAe,EACf,GAAG,CAAC,WAAW,EACf,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,aAAa,CAAC,OAAO,CAC7B,CAAC;QACF,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,GAAG,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAmB;IACtD,MAAM,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;IAC/F,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,CAAC,WAAW,CAAC,EAAE;QAC9D,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CAAC,mBAAmB,GAAG,CAAC,WAAW,QAAQ,CAAC,CAAC;AACtD,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { z } from "zod";
2
+ export declare const PluginManifestSchema: z.ZodObject<{
3
+ name: z.ZodString;
4
+ version: z.ZodString;
5
+ }, "strip", z.ZodTypeAny, {
6
+ name: string;
7
+ version: string;
8
+ }, {
9
+ name: string;
10
+ version: string;
11
+ }>;
12
+ export type PluginManifest = z.infer<typeof PluginManifestSchema>;
13
+ export interface DiscoveredPlugin {
14
+ readonly name: string;
15
+ readonly path: string;
16
+ readonly claudeManifest: PluginManifest | null;
17
+ readonly codexManifest: PluginManifest | null;
18
+ }
19
+ export declare function readMarketplaceName(distRoot: string): Promise<string>;
20
+ export declare function discoverPlugins(distRoot: string): Promise<readonly DiscoveredPlugin[]>;
21
+ //# sourceMappingURL=discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/install/discovery.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,oBAAoB;;;;;;;;;EAG/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAMlE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/C,QAAQ,CAAC,aAAa,EAAE,cAAc,GAAG,IAAI,CAAC;CAC/C;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAU3E;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,gBAAgB,EAAE,CAAC,CAa5F"}
@@ -0,0 +1,51 @@
1
+ import { readdir, readFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { z } from "zod";
4
+ import { formatZodIssues } from "../errors/index.js";
5
+ export const PluginManifestSchema = z.object({
6
+ name: z.string().min(1),
7
+ version: z.string().min(1),
8
+ });
9
+ const MarketplaceManifestSchema = z.object({
10
+ name: z.string().min(1),
11
+ });
12
+ export async function readMarketplaceName(distRoot) {
13
+ const manifestPath = join(distRoot, ".claude-plugin/marketplace.json");
14
+ const raw = await readFile(manifestPath, "utf8");
15
+ const parsed = MarketplaceManifestSchema.safeParse(JSON.parse(raw));
16
+ if (!parsed.success) {
17
+ throw new Error(`invalid marketplace manifest at ${manifestPath}: ${formatZodIssues(parsed.error).join("; ")}`);
18
+ }
19
+ return parsed.data.name;
20
+ }
21
+ export async function discoverPlugins(distRoot) {
22
+ const pluginsDir = join(distRoot, "plugins");
23
+ const entries = await readdir(pluginsDir, { withFileTypes: true });
24
+ const result = [];
25
+ for (const entry of entries) {
26
+ if (!entry.isDirectory())
27
+ continue;
28
+ const path = join(pluginsDir, entry.name);
29
+ const claudeManifest = await tryReadManifest(join(path, ".claude-plugin/plugin.json"));
30
+ const codexManifest = await tryReadManifest(join(path, ".codex-plugin/plugin.json"));
31
+ if (!claudeManifest && !codexManifest)
32
+ continue;
33
+ result.push({ name: entry.name, path, claudeManifest, codexManifest });
34
+ }
35
+ return result;
36
+ }
37
+ async function tryReadManifest(path) {
38
+ let raw;
39
+ try {
40
+ raw = await readFile(path, "utf8");
41
+ }
42
+ catch {
43
+ return null;
44
+ }
45
+ const parsed = PluginManifestSchema.safeParse(JSON.parse(raw));
46
+ if (!parsed.success) {
47
+ throw new Error(`invalid plugin manifest at ${path}: ${formatZodIssues(parsed.error).join("; ")}`);
48
+ }
49
+ return parsed.data;
50
+ }
51
+ //# sourceMappingURL=discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/install/discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { DiscoveredPlugin } from "./discovery.js";
2
+ import { type CommandRunner } from "./runner.js";
3
+ export type Target = "claude" | "codex";
4
+ export interface InstallOptions {
5
+ readonly distRoot?: string;
6
+ readonly targets?: readonly Target[];
7
+ readonly claudeHome?: string;
8
+ readonly codexHome?: string;
9
+ readonly silent?: boolean;
10
+ }
11
+ /** @internal Used by per-target modules; not part of the public surface. */
12
+ export interface InstallContext {
13
+ readonly distRoot: string;
14
+ readonly claudeHome: string;
15
+ readonly codexHome: string;
16
+ readonly targets: ReadonlySet<Target>;
17
+ readonly marketplace: string;
18
+ readonly plugins: readonly DiscoveredPlugin[];
19
+ readonly run: CommandRunner;
20
+ readonly log: (msg: string) => void;
21
+ }
22
+ export declare function install(options?: InstallOptions): Promise<void>;
23
+ export declare function uninstall(options?: InstallOptions): Promise<void>;
24
+ /** @internal Test-only entry; lets callers inject a recording runner. */
25
+ export declare function installWithRunner(options: InstallOptions, runner: CommandRunner): Promise<void>;
26
+ /** @internal Test-only entry; lets callers inject a recording runner. */
27
+ export declare function uninstallWithRunner(options: InstallOptions, runner: CommandRunner): Promise<void>;
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/install/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAIhE,MAAM,MAAM,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAExC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,4EAA4E;AAC5E,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC9C,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAID,wBAAsB,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzE;AAED,wBAAsB,SAAS,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3E;AAED,yEAAyE;AACzE,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,yEAAyE;AACzE,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CAIf"}
@@ -0,0 +1,44 @@
1
+ import { homedir } from "node:os";
2
+ import { resolve, join } from "node:path";
3
+ import { discoverPlugins, readMarketplaceName } from "./discovery.js";
4
+ import { defaultRunner } from "./runner.js";
5
+ import { installClaude, uninstallClaude } from "./claude.js";
6
+ import { installCodex, uninstallCodex } from "./codex.js";
7
+ const ALL_TARGETS = ["claude", "codex"];
8
+ export async function install(options = {}) {
9
+ await installWithRunner(options, defaultRunner);
10
+ }
11
+ export async function uninstall(options = {}) {
12
+ await uninstallWithRunner(options, defaultRunner);
13
+ }
14
+ /** @internal Test-only entry; lets callers inject a recording runner. */
15
+ export async function installWithRunner(options, runner) {
16
+ const ctx = await resolveContext(options, runner);
17
+ if (ctx.targets.has("claude"))
18
+ await installClaude(ctx);
19
+ if (ctx.targets.has("codex"))
20
+ await installCodex(ctx);
21
+ }
22
+ /** @internal Test-only entry; lets callers inject a recording runner. */
23
+ export async function uninstallWithRunner(options, runner) {
24
+ const ctx = await resolveContext(options, runner);
25
+ if (ctx.targets.has("claude"))
26
+ await uninstallClaude(ctx);
27
+ if (ctx.targets.has("codex"))
28
+ await uninstallCodex(ctx);
29
+ }
30
+ async function resolveContext(options, runner) {
31
+ const distRoot = resolve(options.distRoot ?? "./dist");
32
+ const claudeHome = options.claudeHome ?? join(homedir(), ".claude");
33
+ const codexHome = options.codexHome ?? join(homedir(), ".codex");
34
+ const targets = new Set(options.targets ?? ALL_TARGETS);
35
+ const silent = options.silent ?? false;
36
+ const log = (msg) => {
37
+ if (!silent)
38
+ console.log(msg);
39
+ };
40
+ const marketplace = await readMarketplaceName(distRoot);
41
+ const plugins = await discoverPlugins(distRoot);
42
+ return { distRoot, claudeHome, codexHome, targets, marketplace, plugins, run: runner, log };
43
+ }
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/install/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAG1C,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAsB,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAwB1D,MAAM,WAAW,GAAsB,CAAC,QAAQ,EAAE,OAAO,CAAU,CAAC;AAEpE,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,UAA0B,EAAE;IACxD,MAAM,iBAAiB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,UAA0B,EAAE;IAC1D,MAAM,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AACpD,CAAC;AAED,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAuB,EACvB,MAAqB;IAErB,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAClD,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;IACxD,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;AACxD,CAAC;AAED,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAuB,EACvB,MAAqB;IAErB,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAClD,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;IAC1D,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,OAAuB,EACvB,MAAqB;IAErB,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,OAAO,CAAC,OAAO,IAAI,WAAW,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;IACvC,MAAM,GAAG,GAAG,CAAC,GAAW,EAAQ,EAAE;QAChC,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC,CAAC;IACF,MAAM,WAAW,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;IAChD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC9F,CAAC"}
@@ -0,0 +1,4 @@
1
+ export type CommandRunner = (cmd: string, args: readonly string[]) => Promise<void>;
2
+ export declare const defaultRunner: CommandRunner;
3
+ export declare function runIgnoreFailure(run: CommandRunner, cmd: string, args: readonly string[]): Promise<void>;
4
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/install/runner.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpF,eAAO,MAAM,aAAa,EAAE,aAE3B,CAAC;AAEF,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,aAAa,EAClB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,SAAS,MAAM,EAAE,GACtB,OAAO,CAAC,IAAI,CAAC,CAMf"}
@@ -0,0 +1,15 @@
1
+ import { execFile } from "node:child_process";
2
+ import { promisify } from "node:util";
3
+ const execFileAsync = promisify(execFile);
4
+ export const defaultRunner = async (cmd, args) => {
5
+ await execFileAsync(cmd, [...args]);
6
+ };
7
+ export async function runIgnoreFailure(run, cmd, args) {
8
+ try {
9
+ await run(cmd, args);
10
+ }
11
+ catch {
12
+ /* ignore */
13
+ }
14
+ }
15
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/install/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAI1C,MAAM,CAAC,MAAM,aAAa,GAAkB,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IAC9D,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAkB,EAClB,GAAW,EACX,IAAuB;IAEvB,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,36 @@
1
+ export interface PluginSource {
2
+ readonly name: string;
3
+ readonly root: string;
4
+ }
5
+ export interface InstalledSkill {
6
+ readonly source: string;
7
+ readonly plugin: string;
8
+ readonly skill: string;
9
+ readonly path: string;
10
+ }
11
+ export interface InstalledCommand {
12
+ readonly source: string;
13
+ readonly plugin: string;
14
+ readonly command: string;
15
+ readonly path: string;
16
+ }
17
+ export interface InstalledAgent {
18
+ readonly source: string;
19
+ readonly plugin: string;
20
+ readonly agent: string;
21
+ readonly path: string;
22
+ }
23
+ export interface InstalledArtifacts {
24
+ readonly skills: readonly InstalledSkill[];
25
+ readonly commands: readonly InstalledCommand[];
26
+ readonly agents: readonly InstalledAgent[];
27
+ }
28
+ export interface InstalledIndex {
29
+ readonly skills: ReadonlyMap<string, readonly InstalledSkill[]>;
30
+ readonly commands: ReadonlyMap<string, readonly InstalledCommand[]>;
31
+ readonly agents: ReadonlyMap<string, readonly InstalledAgent[]>;
32
+ }
33
+ export declare function defaultSources(): readonly PluginSource[];
34
+ export declare function discoverInstalled(sources: readonly PluginSource[]): Promise<InstalledArtifacts>;
35
+ export declare function indexInstalled(artifacts: InstalledArtifacts): InstalledIndex;
36
+ //# sourceMappingURL=installed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installed.d.ts","sourceRoot":"","sources":["../src/installed.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC/C,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC,CAAC;IAChE,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC,CAAC;IACpE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC,CAAC;CACjE;AAED,wBAAgB,cAAc,IAAI,SAAS,YAAY,EAAE,CAMxD;AAOD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,SAAS,YAAY,EAAE,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAiC7B;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,kBAAkB,GAAG,cAAc,CAM5E"}