@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,155 @@
1
+ import { readFile, readdir } from "node:fs/promises";
2
+ import { homedir } from "node:os";
3
+ import { join } from "node:path";
4
+ import { z } from "zod";
5
+ const PluginManifestSchema = z.object({ name: z.string().min(1) });
6
+ export function defaultSources() {
7
+ const home = homedir();
8
+ return [
9
+ { name: "claude", root: join(home, ".claude/plugins/cache") },
10
+ { name: "codex", root: join(home, ".codex/plugins/cache") },
11
+ ];
12
+ }
13
+ const PLUGIN_MANIFEST_RELATIVE_PATHS = [
14
+ ".claude-plugin/plugin.json",
15
+ ".codex-plugin/plugin.json",
16
+ ];
17
+ export async function discoverInstalled(sources) {
18
+ const skills = [];
19
+ const commands = [];
20
+ const agents = [];
21
+ for (const source of sources) {
22
+ for await (const plugin of findPluginRoots(source.root)) {
23
+ for await (const skill of collectSkills(plugin.root)) {
24
+ skills.push({
25
+ source: source.name,
26
+ plugin: plugin.name,
27
+ skill: skill.name,
28
+ path: skill.path,
29
+ });
30
+ }
31
+ for await (const cmd of collectFlat(plugin.root, "commands")) {
32
+ commands.push({
33
+ source: source.name,
34
+ plugin: plugin.name,
35
+ command: cmd.name,
36
+ path: cmd.path,
37
+ });
38
+ }
39
+ for await (const agent of collectFlat(plugin.root, "agents")) {
40
+ agents.push({
41
+ source: source.name,
42
+ plugin: plugin.name,
43
+ agent: agent.name,
44
+ path: agent.path,
45
+ });
46
+ }
47
+ }
48
+ }
49
+ return { skills, commands, agents };
50
+ }
51
+ export function indexInstalled(artifacts) {
52
+ return {
53
+ skills: groupBy(artifacts.skills, (s) => `${s.plugin}:${s.skill}`),
54
+ commands: groupBy(artifacts.commands, (c) => `${c.plugin}:${c.command}`),
55
+ agents: groupBy(artifacts.agents, (a) => `${a.plugin}:${a.agent}`),
56
+ };
57
+ }
58
+ function groupBy(items, key) {
59
+ const result = new Map();
60
+ for (const item of items) {
61
+ const k = key(item);
62
+ const existing = result.get(k);
63
+ if (existing)
64
+ existing.push(item);
65
+ else
66
+ result.set(k, [item]);
67
+ }
68
+ return result;
69
+ }
70
+ async function* findPluginRoots(dir) {
71
+ const name = await readPluginNameAt(dir);
72
+ if (name !== null) {
73
+ yield { name, root: dir };
74
+ return;
75
+ }
76
+ let entries;
77
+ try {
78
+ entries = await readdir(dir, { withFileTypes: true });
79
+ }
80
+ catch {
81
+ return;
82
+ }
83
+ for (const entry of entries) {
84
+ if (entry.isSymbolicLink())
85
+ continue;
86
+ if (entry.isDirectory())
87
+ yield* findPluginRoots(join(dir, entry.name));
88
+ }
89
+ }
90
+ async function readPluginNameAt(dir) {
91
+ for (const rel of PLUGIN_MANIFEST_RELATIVE_PATHS) {
92
+ const name = await readPluginName(join(dir, rel));
93
+ if (name)
94
+ return name;
95
+ }
96
+ return null;
97
+ }
98
+ async function* collectSkills(pluginRoot) {
99
+ const skillsDir = join(pluginRoot, "skills");
100
+ let entries;
101
+ try {
102
+ entries = await readdir(skillsDir, { withFileTypes: true });
103
+ }
104
+ catch {
105
+ return;
106
+ }
107
+ for (const entry of entries) {
108
+ if (!entry.isDirectory() || entry.isSymbolicLink())
109
+ continue;
110
+ const skillFile = join(skillsDir, entry.name, "SKILL.md");
111
+ try {
112
+ await readFile(skillFile, "utf8");
113
+ }
114
+ catch {
115
+ continue;
116
+ }
117
+ yield { name: entry.name, path: skillFile };
118
+ }
119
+ }
120
+ async function* collectFlat(pluginRoot, subdir) {
121
+ const dir = join(pluginRoot, subdir);
122
+ let entries;
123
+ try {
124
+ entries = await readdir(dir, { withFileTypes: true });
125
+ }
126
+ catch {
127
+ return;
128
+ }
129
+ for (const entry of entries) {
130
+ if (entry.isSymbolicLink())
131
+ continue;
132
+ if (entry.isFile() && entry.name.endsWith(".md")) {
133
+ yield { name: entry.name.slice(0, -3), path: join(dir, entry.name) };
134
+ }
135
+ }
136
+ }
137
+ async function readPluginName(manifestPath) {
138
+ let raw;
139
+ try {
140
+ raw = await readFile(manifestPath, "utf8");
141
+ }
142
+ catch {
143
+ return null;
144
+ }
145
+ let json;
146
+ try {
147
+ json = JSON.parse(raw);
148
+ }
149
+ catch {
150
+ return null;
151
+ }
152
+ const parsed = PluginManifestSchema.safeParse(json);
153
+ return parsed.success ? parsed.data.name : null;
154
+ }
155
+ //# sourceMappingURL=installed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installed.js","sourceRoot":"","sources":["../src/installed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import { type Marketplace, type PluginEntry } from "../marketplace/index.js";
2
+ import { type Plugin } from "../plugin/index.js";
3
+ import { type Result } from "../result.js";
4
+ export interface ResolvedPlugin {
5
+ readonly name: string;
6
+ readonly pluginDir: string;
7
+ readonly manifest: Plugin;
8
+ readonly manifestSource: "PLUGIN.ts" | "plugin.json";
9
+ readonly skillsDir: string;
10
+ readonly commandsDir: string;
11
+ readonly agentsDir: string;
12
+ readonly hooksDir: string;
13
+ }
14
+ export interface OpaquePlugin {
15
+ readonly name: string;
16
+ readonly source: Exclude<PluginEntry["source"], {
17
+ kind: "relative";
18
+ }>;
19
+ }
20
+ export interface LayoutAdapter {
21
+ readonly srcRoot: string;
22
+ readonly marketplace: Marketplace;
23
+ readonly plugins: readonly ResolvedPlugin[];
24
+ readonly opaquePlugins: readonly OpaquePlugin[];
25
+ }
26
+ export type LayoutError = {
27
+ readonly kind: "marketplace-missing";
28
+ readonly path: string;
29
+ } | {
30
+ readonly kind: "marketplace-invalid";
31
+ readonly path: string;
32
+ readonly issues: readonly string[];
33
+ } | {
34
+ readonly kind: "plugin-missing";
35
+ readonly name: string;
36
+ readonly path: string;
37
+ } | {
38
+ readonly kind: "manifest-missing";
39
+ readonly name: string;
40
+ readonly pluginDir: string;
41
+ } | {
42
+ readonly kind: "manifest-collision";
43
+ readonly name: string;
44
+ readonly pluginDir: string;
45
+ } | {
46
+ readonly kind: "manifest-invalid";
47
+ readonly name: string;
48
+ readonly path: string;
49
+ readonly issues: readonly string[];
50
+ } | {
51
+ readonly kind: "plugin-name-mismatch";
52
+ readonly entryName: string;
53
+ readonly manifestName: string;
54
+ readonly path: string;
55
+ };
56
+ export declare function loadLayout(srcRoot: string): Promise<Result<LayoutAdapter, LayoutError>>;
57
+ export interface LocalIds {
58
+ readonly skills: ReadonlySet<string>;
59
+ readonly commands: ReadonlySet<string>;
60
+ readonly agents: ReadonlySet<string>;
61
+ }
62
+ export declare function collectLocalIds(adapter: LayoutAdapter): Promise<LocalIds>;
63
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/layout/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,159 @@
1
+ import { readdir, readFile } from "node:fs/promises";
2
+ import { join, resolve } from "node:path";
3
+ import { pathToFileURL } from "node:url";
4
+ import { formatZodIssues } from "../errors/index.js";
5
+ import { pathExists } from "../fs.js";
6
+ import { MarketplaceSchema } from "../marketplace/index.js";
7
+ import { PluginSchema } from "../plugin/index.js";
8
+ import { err, ok } from "../result.js";
9
+ const MANIFEST_JSON = ".claude-plugin/plugin.json";
10
+ const MANIFEST_TS = "PLUGIN.ts";
11
+ function resolvePluginDir(srcRoot, pluginRoot, source) {
12
+ if (source.startsWith("./") || source.startsWith("../") || source === ".") {
13
+ return resolve(srcRoot, source);
14
+ }
15
+ if (pluginRoot !== undefined) {
16
+ return resolve(srcRoot, pluginRoot, source);
17
+ }
18
+ return resolve(srcRoot, source);
19
+ }
20
+ function joinUnder(pluginDir, override, fallback) {
21
+ return join(pluginDir, override ?? fallback);
22
+ }
23
+ async function loadPluginManifest(entryName, pluginDir) {
24
+ const tsPath = join(pluginDir, MANIFEST_TS);
25
+ const jsonPath = join(pluginDir, MANIFEST_JSON);
26
+ const [hasTs, hasJson] = await Promise.all([pathExists(tsPath), pathExists(jsonPath)]);
27
+ if (hasTs && hasJson) {
28
+ return err({ kind: "manifest-collision", name: entryName, pluginDir });
29
+ }
30
+ if (!hasTs && !hasJson) {
31
+ return err({ kind: "manifest-missing", name: entryName, pluginDir });
32
+ }
33
+ if (hasTs) {
34
+ const mod = (await import(pathToFileURL(tsPath).href));
35
+ const parsed = PluginSchema.safeParse(mod.default);
36
+ if (!parsed.success) {
37
+ return err({
38
+ kind: "manifest-invalid",
39
+ name: entryName,
40
+ path: tsPath,
41
+ issues: formatZodIssues(parsed.error),
42
+ });
43
+ }
44
+ return ok({ manifest: parsed.data, source: "PLUGIN.ts" });
45
+ }
46
+ const raw = await readFile(jsonPath, "utf8");
47
+ const parsed = PluginSchema.safeParse(JSON.parse(raw));
48
+ if (!parsed.success) {
49
+ return err({
50
+ kind: "manifest-invalid",
51
+ name: entryName,
52
+ path: jsonPath,
53
+ issues: formatZodIssues(parsed.error),
54
+ });
55
+ }
56
+ return ok({ manifest: parsed.data, source: "plugin.json" });
57
+ }
58
+ export async function loadLayout(srcRoot) {
59
+ const marketplacePath = join(srcRoot, ".claude-plugin/marketplace.json");
60
+ if (!(await pathExists(marketplacePath))) {
61
+ return err({ kind: "marketplace-missing", path: marketplacePath });
62
+ }
63
+ const rawMarketplace = await readFile(marketplacePath, "utf8");
64
+ const parsed = MarketplaceSchema.safeParse(JSON.parse(rawMarketplace));
65
+ if (!parsed.success) {
66
+ return err({
67
+ kind: "marketplace-invalid",
68
+ path: marketplacePath,
69
+ issues: formatZodIssues(parsed.error),
70
+ });
71
+ }
72
+ const marketplace = parsed.data;
73
+ const pluginRoot = marketplace.metadata?.pluginRoot;
74
+ const plugins = [];
75
+ const opaquePlugins = [];
76
+ for (const entry of marketplace.plugins) {
77
+ if (entry.source.kind !== "relative") {
78
+ opaquePlugins.push({ name: entry.name, source: entry.source });
79
+ continue;
80
+ }
81
+ const pluginDir = resolvePluginDir(srcRoot, pluginRoot, entry.source.path);
82
+ if (!(await pathExists(pluginDir))) {
83
+ return err({ kind: "plugin-missing", name: entry.name, path: pluginDir });
84
+ }
85
+ const manifestResult = await loadPluginManifest(entry.name, pluginDir);
86
+ if (!manifestResult.ok)
87
+ return manifestResult;
88
+ const { manifest, source: manifestSource } = manifestResult.value;
89
+ if (manifest.name !== entry.name) {
90
+ return err({
91
+ kind: "plugin-name-mismatch",
92
+ entryName: entry.name,
93
+ manifestName: manifest.name,
94
+ path: join(pluginDir, manifestSource === "PLUGIN.ts" ? MANIFEST_TS : MANIFEST_JSON),
95
+ });
96
+ }
97
+ plugins.push({
98
+ name: entry.name,
99
+ pluginDir,
100
+ manifest,
101
+ manifestSource,
102
+ skillsDir: joinUnder(pluginDir, undefined, "skills"),
103
+ commandsDir: joinUnder(pluginDir, manifest.commands, "commands"),
104
+ agentsDir: joinUnder(pluginDir, manifest.agents, "agents"),
105
+ hooksDir: joinUnder(pluginDir, manifest.hooks, "hooks"),
106
+ });
107
+ }
108
+ return ok({ srcRoot, marketplace, plugins, opaquePlugins });
109
+ }
110
+ export async function collectLocalIds(adapter) {
111
+ const skills = new Set();
112
+ const commands = new Set();
113
+ const agents = new Set();
114
+ for (const plugin of adapter.plugins) {
115
+ for (const name of await listSkillNames(plugin.skillsDir)) {
116
+ skills.add(`${plugin.name}:${name}`);
117
+ }
118
+ for (const name of await listMarkdownNames(plugin.commandsDir)) {
119
+ commands.add(`${plugin.name}:${name}`);
120
+ }
121
+ for (const name of await listMarkdownNames(plugin.agentsDir)) {
122
+ agents.add(`${plugin.name}:${name}`);
123
+ }
124
+ }
125
+ return { skills, commands, agents };
126
+ }
127
+ async function listSkillNames(dir) {
128
+ if (!(await pathExists(dir)))
129
+ return [];
130
+ const entries = await readdir(dir, { withFileTypes: true });
131
+ const out = [];
132
+ for (const entry of entries) {
133
+ if (!entry.isDirectory())
134
+ continue;
135
+ const skillDir = join(dir, entry.name);
136
+ const [hasTs, hasMd] = await Promise.all([
137
+ pathExists(join(skillDir, "SKILL.ts")),
138
+ pathExists(join(skillDir, "SKILL.md")),
139
+ ]);
140
+ if (hasTs || hasMd)
141
+ out.push(entry.name);
142
+ }
143
+ return out;
144
+ }
145
+ async function listMarkdownNames(dir) {
146
+ if (!(await pathExists(dir)))
147
+ return [];
148
+ const entries = await readdir(dir, { withFileTypes: true });
149
+ const out = [];
150
+ for (const entry of entries) {
151
+ if (!entry.isFile())
152
+ continue;
153
+ if (!entry.name.endsWith(".md"))
154
+ continue;
155
+ out.push(entry.name.slice(0, -3));
156
+ }
157
+ return out;
158
+ }
159
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/layout/index.ts"],"names":[],"mappings":"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"}
package/dist/lint.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ export interface LintOptions {
2
+ readonly outRoot?: string;
3
+ readonly silent?: boolean;
4
+ }
5
+ export interface LintResult {
6
+ readonly errorCount: number;
7
+ }
8
+ export declare function lint(options?: LintOptions): Promise<LintResult>;
9
+ //# sourceMappingURL=lint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../src/lint.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAaD,wBAAsB,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAczE"}
package/dist/lint.js ADDED
@@ -0,0 +1,27 @@
1
+ import { resolve } from "node:path";
2
+ import { main as markdownlintCli2Main } from "markdownlint-cli2";
3
+ const DEFAULT_GLOBS = ["plugins/**/*.md"];
4
+ const DEFAULT_CONFIG = {
5
+ default: true,
6
+ MD013: false,
7
+ MD024: { siblings_only: true },
8
+ MD031: { list_items: false },
9
+ MD033: false,
10
+ MD041: false,
11
+ };
12
+ export async function lint(options = {}) {
13
+ const outRoot = resolve(options.outRoot ?? "./dist");
14
+ const silent = options.silent ?? false;
15
+ const log = silent
16
+ ? (_line) => undefined
17
+ : (line) => console.log(line);
18
+ const exitCode = await markdownlintCli2Main({
19
+ directory: outRoot,
20
+ argv: [...DEFAULT_GLOBS],
21
+ optionsDefault: { config: { ...DEFAULT_CONFIG } },
22
+ logMessage: log,
23
+ logError: log,
24
+ });
25
+ return { errorCount: exitCode };
26
+ }
27
+ //# sourceMappingURL=lint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lint.js","sourceRoot":"","sources":["../src/lint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,IAAI,IAAI,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAWjE,MAAM,aAAa,GAAG,CAAC,iBAAiB,CAAU,CAAC;AAEnD,MAAM,cAAc,GAAG;IACrB,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,KAAK;IACZ,KAAK,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE;IAC9B,KAAK,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE;IAC5B,KAAK,EAAE,KAAK;IACZ,KAAK,EAAE,KAAK;CACJ,CAAC;AAEX,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,UAAuB,EAAE;IAClD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;IACvC,MAAM,GAAG,GAAG,MAAM;QAChB,CAAC,CAAC,CAAC,KAAa,EAAQ,EAAE,CAAC,SAAS;QACpC,CAAC,CAAC,CAAC,IAAY,EAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC;QAC1C,SAAS,EAAE,OAAO;QAClB,IAAI,EAAE,CAAC,GAAG,aAAa,CAAC;QACxB,cAAc,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,cAAc,EAAE,EAAE;QACjD,UAAU,EAAE,GAAG;QACf,QAAQ,EAAE,GAAG;KACd,CAAC,CAAC;IACH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AAClC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { MarketplaceSchema, PluginEntrySchema, defineMarketplace } from "./schema.js";
2
+ export type { Marketplace, PluginEntry, PluginSource } from "./schema.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/marketplace/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACtF,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { MarketplaceSchema, PluginEntrySchema, defineMarketplace } from "./schema.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/marketplace/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}