@elaraai/east-plugin 0.0.0-stage → 1.0.87

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 (133) hide show
  1. package/LICENSE.md +682 -0
  2. package/README.md +104 -2
  3. package/dist/daemon/east-py-lsp.d.ts +2 -0
  4. package/dist/daemon/east-py-lsp.d.ts.map +1 -0
  5. package/dist/daemon/east-py-lsp.js +9 -0
  6. package/dist/daemon/east-py-lsp.js.map +1 -0
  7. package/dist/daemon/lsp.d.ts +2 -0
  8. package/dist/daemon/lsp.d.ts.map +1 -0
  9. package/dist/daemon/lsp.js +7 -0
  10. package/dist/daemon/lsp.js.map +1 -0
  11. package/dist/daemon/server.d.ts +2 -0
  12. package/dist/daemon/server.d.ts.map +1 -0
  13. package/dist/daemon/server.js +71 -0
  14. package/dist/daemon/server.js.map +1 -0
  15. package/dist/hooks/diagnose-bash.d.ts +2 -0
  16. package/dist/hooks/diagnose-bash.d.ts.map +1 -0
  17. package/dist/hooks/diagnose-bash.js +28 -0
  18. package/dist/hooks/diagnose-bash.js.map +1 -0
  19. package/dist/hooks/diagnose.d.ts +2 -0
  20. package/dist/hooks/diagnose.d.ts.map +1 -0
  21. package/dist/hooks/diagnose.js +33 -0
  22. package/dist/hooks/diagnose.js.map +1 -0
  23. package/dist/hooks/pre-read.d.ts +2 -0
  24. package/dist/hooks/pre-read.d.ts.map +1 -0
  25. package/dist/hooks/pre-read.js +11 -0
  26. package/dist/hooks/pre-read.js.map +1 -0
  27. package/dist/hooks/pre-write.d.ts +2 -0
  28. package/dist/hooks/pre-write.d.ts.map +1 -0
  29. package/dist/hooks/pre-write.js +11 -0
  30. package/dist/hooks/pre-write.js.map +1 -0
  31. package/dist/hooks/session-start.d.ts +2 -0
  32. package/dist/hooks/session-start.d.ts.map +1 -0
  33. package/dist/hooks/session-start.js +34 -0
  34. package/dist/hooks/session-start.js.map +1 -0
  35. package/dist/hooks/subagent-start.d.ts +2 -0
  36. package/dist/hooks/subagent-start.d.ts.map +1 -0
  37. package/dist/hooks/subagent-start.js +29 -0
  38. package/dist/hooks/subagent-start.js.map +1 -0
  39. package/dist/lib/bash-writes.d.ts +11 -0
  40. package/dist/lib/bash-writes.d.ts.map +1 -0
  41. package/dist/lib/bash-writes.js +74 -0
  42. package/dist/lib/bash-writes.js.map +1 -0
  43. package/dist/lib/codex-hook.d.ts +64 -0
  44. package/dist/lib/codex-hook.d.ts.map +1 -0
  45. package/dist/lib/codex-hook.js +94 -0
  46. package/dist/lib/codex-hook.js.map +1 -0
  47. package/dist/lib/codex-skills.d.ts +38 -0
  48. package/dist/lib/codex-skills.d.ts.map +1 -0
  49. package/dist/lib/codex-skills.js +80 -0
  50. package/dist/lib/codex-skills.js.map +1 -0
  51. package/dist/lib/codex-tools.d.ts +11 -0
  52. package/dist/lib/codex-tools.d.ts.map +1 -0
  53. package/dist/lib/codex-tools.js +41 -0
  54. package/dist/lib/codex-tools.js.map +1 -0
  55. package/dist/lib/diagnostics-client.d.ts +9 -0
  56. package/dist/lib/diagnostics-client.d.ts.map +1 -0
  57. package/dist/lib/diagnostics-client.js +123 -0
  58. package/dist/lib/diagnostics-client.js.map +1 -0
  59. package/dist/lib/east-index.d.ts +3 -0
  60. package/dist/lib/east-index.d.ts.map +1 -0
  61. package/dist/lib/east-index.js +9 -0
  62. package/dist/lib/east-index.js.map +1 -0
  63. package/dist/lib/east-project.d.ts +49 -0
  64. package/dist/lib/east-project.d.ts.map +1 -0
  65. package/dist/lib/east-project.js +121 -0
  66. package/dist/lib/east-project.js.map +1 -0
  67. package/dist/lib/east-py-lint.d.ts +7 -0
  68. package/dist/lib/east-py-lint.d.ts.map +1 -0
  69. package/dist/lib/east-py-lint.js +22 -0
  70. package/dist/lib/east-py-lint.js.map +1 -0
  71. package/dist/lib/east-rules-context.d.ts +7 -0
  72. package/dist/lib/east-rules-context.d.ts.map +1 -0
  73. package/dist/lib/east-rules-context.js +91 -0
  74. package/dist/lib/east-rules-context.js.map +1 -0
  75. package/dist/lib/hook-io.d.ts +30 -0
  76. package/dist/lib/hook-io.d.ts.map +1 -0
  77. package/dist/lib/hook-io.js +29 -0
  78. package/dist/lib/hook-io.js.map +1 -0
  79. package/dist/lib/host.d.ts +3 -0
  80. package/dist/lib/host.d.ts.map +1 -0
  81. package/dist/lib/host.js +9 -0
  82. package/dist/lib/host.js.map +1 -0
  83. package/dist/lib/lsp-client.d.ts +34 -0
  84. package/dist/lib/lsp-client.d.ts.map +1 -0
  85. package/dist/lib/lsp-client.js +200 -0
  86. package/dist/lib/lsp-client.js.map +1 -0
  87. package/dist/lib/plugin-status.d.ts +9 -0
  88. package/dist/lib/plugin-status.d.ts.map +1 -0
  89. package/dist/lib/plugin-status.js +164 -0
  90. package/dist/lib/plugin-status.js.map +1 -0
  91. package/dist/lib/review.d.ts +16 -0
  92. package/dist/lib/review.d.ts.map +1 -0
  93. package/dist/lib/review.js +74 -0
  94. package/dist/lib/review.js.map +1 -0
  95. package/dist/lib/search-guidance.d.ts +44 -0
  96. package/dist/lib/search-guidance.d.ts.map +1 -0
  97. package/dist/lib/search-guidance.js +73 -0
  98. package/dist/lib/search-guidance.js.map +1 -0
  99. package/dist/lib/search-hooks.d.ts +75 -0
  100. package/dist/lib/search-hooks.d.ts.map +1 -0
  101. package/dist/lib/search-hooks.js +117 -0
  102. package/dist/lib/search-hooks.js.map +1 -0
  103. package/dist/lib/search.d.ts +121 -0
  104. package/dist/lib/search.d.ts.map +1 -0
  105. package/dist/lib/search.js +181 -0
  106. package/dist/lib/search.js.map +1 -0
  107. package/dist/lib/transcript.d.ts +29 -0
  108. package/dist/lib/transcript.d.ts.map +1 -0
  109. package/dist/lib/transcript.js +109 -0
  110. package/dist/lib/transcript.js.map +1 -0
  111. package/dist/mcp/example-tools.d.ts +33 -0
  112. package/dist/mcp/example-tools.d.ts.map +1 -0
  113. package/dist/mcp/example-tools.js +97 -0
  114. package/dist/mcp/example-tools.js.map +1 -0
  115. package/dist/mcp/server.d.ts +2 -0
  116. package/dist/mcp/server.d.ts.map +1 -0
  117. package/dist/mcp/server.js +52 -0
  118. package/dist/mcp/server.js.map +1 -0
  119. package/dist/scripts/examples-file.d.ts +38 -0
  120. package/dist/scripts/examples-file.d.ts.map +1 -0
  121. package/dist/scripts/examples-file.js +224 -0
  122. package/dist/scripts/examples-file.js.map +1 -0
  123. package/dist/scripts/generate-index.d.ts +127 -0
  124. package/dist/scripts/generate-index.d.ts.map +1 -0
  125. package/dist/scripts/generate-index.js +315 -0
  126. package/dist/scripts/generate-index.js.map +1 -0
  127. package/dist/status/report.d.ts +2 -0
  128. package/dist/status/report.d.ts.map +1 -0
  129. package/dist/status/report.js +9 -0
  130. package/dist/status/report.js.map +1 -0
  131. package/index.json +44926 -0
  132. package/package.json +65 -3
  133. package/scripts/render-python.py +67 -0
@@ -0,0 +1,315 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * generate-index.ts
4
+ *
5
+ * Builds the example search index (index.json) the plugin's MCP search tool
6
+ * serves (#654) — East's, or a plugin's that builds on East's: the sources,
7
+ * the libraries and the hand-written entries are the caller's.
8
+ *
9
+ * Usage: east-plugin-generate-index --base-dir <dir> [--config <index.config.json>]
10
+ * [--static <index.static.json>] [--out <index.json>]
11
+ *
12
+ * Each path defaults to this package's own (East's index). From code, call
13
+ * `generateIndex` with the config and entries themselves.
14
+ *
15
+ * Two kinds of source, declared in index.config.json:
16
+ *
17
+ * - `ir: true` — a package whose `*.examples.ts` are East programs (east,
18
+ * east-node-std, east-node-io, east-py-datascience). Each `example()` export
19
+ * is imported from the package's BUILT test modules (`distTest`) and stored
20
+ * as its IR — the example itself, loc_ids zeroed — with its declared types,
21
+ * inputs, expected return, the builtins and platform functions it calls,
22
+ * and the TypeScript printed from that IR by `East.toSource` — with the
23
+ * `libraries` of the config imported and given to the printer, so a
24
+ * platform call prints as the library exports it (`Compression.Tar.create`)
25
+ * rather than as a hoisted declaration. The python rendering is added by
26
+ * `scripts/render-python.py` (the python printer), which fills the
27
+ * `python` field this script leaves null. No authored source text is
28
+ * stored: both languages are printings of the IR.
29
+ * - otherwise — a package whose examples are not printable programs (UI
30
+ * components authored as JSX, hand-written CLI stubs): the authored
31
+ * TypeScript source is extracted from the file text, as before.
32
+ *
33
+ * Each example uses the `example()` pattern:
34
+ * export const name = example({ keywords, description, fn, inputs, returns })
35
+ *
36
+ * Section comments (// ---\n// Name\n// ---) provide suite grouping. Each
37
+ * file is read by `examples-file.ts`, through the TypeScript parser.
38
+ */
39
+ import * as fs from "node:fs";
40
+ import * as path from "node:path";
41
+ import { fileURLToPath, pathToFileURL } from "node:url";
42
+ import { Expr, IRType, toJSONFor, toEastTypeValue, toSource, typeSource } from "@elaraai/east";
43
+ import { parseExamplesFile } from "./examples-file.js";
44
+ // ---------------------------------------------------------------------------
45
+ // Glob-style pattern matching (minimal, supports * and **)
46
+ // ---------------------------------------------------------------------------
47
+ function patternToRegex(pattern) {
48
+ let re = pattern
49
+ .replace(/[.+^${}()|[\]\\]/g, "\\$&")
50
+ .replace(/\*\*/g, "\0GLOBSTAR\0")
51
+ .replace(/\*/g, "[^/]*")
52
+ .replace(/\0GLOBSTAR\0/g, ".*");
53
+ return new RegExp(`^${re}$`);
54
+ }
55
+ function findFiles(dir, pattern) {
56
+ const regex = patternToRegex(pattern);
57
+ const results = [];
58
+ function walk(currentDir, relativePath) {
59
+ let entries;
60
+ try {
61
+ entries = fs.readdirSync(currentDir, { withFileTypes: true });
62
+ }
63
+ catch {
64
+ return;
65
+ }
66
+ for (const entry of entries) {
67
+ const rel = relativePath ? `${relativePath}/${entry.name}` : entry.name;
68
+ if (entry.isDirectory()) {
69
+ if (entry.name === "node_modules" || entry.name === "dist")
70
+ continue;
71
+ walk(path.join(currentDir, entry.name), rel);
72
+ }
73
+ else if (entry.isFile() && regex.test(rel)) {
74
+ results.push(path.join(currentDir, entry.name));
75
+ }
76
+ }
77
+ }
78
+ walk(dir, "");
79
+ return results.sort();
80
+ }
81
+ // ---------------------------------------------------------------------------
82
+ // Program entries: the example's IR and what is printed from it
83
+ // ---------------------------------------------------------------------------
84
+ /** The JSON of `value` with every `loc_id` zeroed — an index carries no source map. */
85
+ function zeroLocations(value) {
86
+ if (Array.isArray(value))
87
+ return value.map(zeroLocations);
88
+ if (value !== null && typeof value === "object") {
89
+ const out = {};
90
+ for (const [k, v] of Object.entries(value)) {
91
+ out[k] = k === "loc_id" ? "0" : zeroLocations(v);
92
+ }
93
+ return out;
94
+ }
95
+ return value;
96
+ }
97
+ /** The builtin and platform function names an IR (as JSON) calls, sorted and unique. */
98
+ function builtinsOf(irJson) {
99
+ const names = new Set();
100
+ const walk = (v) => {
101
+ if (Array.isArray(v)) {
102
+ for (const x of v)
103
+ walk(x);
104
+ return;
105
+ }
106
+ if (v === null || typeof v !== "object")
107
+ return;
108
+ const node = v;
109
+ if (typeof node.type === "string" && node.value !== null && typeof node.value === "object") {
110
+ const p = node.value;
111
+ if (node.type === "Builtin" && typeof p["builtin"] === "string")
112
+ names.add(p["builtin"]);
113
+ if (node.type === "Platform" && typeof p["name"] === "string")
114
+ names.add(p["name"]);
115
+ }
116
+ for (const x of Object.values(v))
117
+ walk(x);
118
+ };
119
+ walk(irJson);
120
+ return [...names].sort();
121
+ }
122
+ const exportIR = toJSONFor(IRType);
123
+ /**
124
+ * The program fields of one built `example()` export: IR, printed
125
+ * TypeScript, signature, inputs, expected return, builtins.
126
+ */
127
+ function programFields(exportName, ex, libraries) {
128
+ const fnType = Expr.type(ex.fn);
129
+ const bundle = ex.fn.toIR();
130
+ const irJson = zeroLocations(exportIR(bundle.ir));
131
+ const isExpr = (v) => v instanceof Expr;
132
+ const inputs = ex.inputs.some(isExpr) ? null : JSON.stringify(ex.inputs.map((v, i) => toJSONFor(fnType.inputs[i])(v)));
133
+ const returns = ex.returns === undefined || isExpr(ex.returns) ? null : JSON.stringify(toJSONFor(fnType.output)(ex.returns));
134
+ return {
135
+ ir: JSON.stringify(irJson),
136
+ ts: toSource(bundle.ir, { name: exportName, libraries }),
137
+ python: null,
138
+ signature: {
139
+ inputs: fnType.inputs.map((t) => typeSource(toEastTypeValue(t))),
140
+ output: typeSource(toEastTypeValue(fnType.output)),
141
+ async: fnType.type === "AsyncFunction",
142
+ },
143
+ inputs,
144
+ returns,
145
+ builtins: builtinsOf(irJson),
146
+ };
147
+ }
148
+ /** The built module of an examples file: the package's `dist` mirrors its layout, so `test/a/b.examples.ts` is `dist/test/a/b.examples.js`. */
149
+ async function loadExamplesModule(packageDir, dist, filePath) {
150
+ const built = path.join(dist, path.relative(packageDir, filePath)).replace(/\.tsx?$/, ".js");
151
+ if (!fs.existsSync(built)) {
152
+ throw new Error(`built example module not found: ${built} — build the package first (its tsconfig must include the test directory)`);
153
+ }
154
+ return (await import(pathToFileURL(built).href));
155
+ }
156
+ /**
157
+ * Builds an index: every `example()` of each source's examples files, a
158
+ * program's as its IR and the TypeScript printed from it, any other's as its
159
+ * authored source, then the hand-written entries. The python printings are
160
+ * `scripts/render-python.py`'s, run over the written index.
161
+ *
162
+ * @param options - The base directory, the config and the hand-written entries
163
+ * @returns The index, ready to write as `index.json`
164
+ * @throws {Error} When a program package or a library is not built, or an export is not an `example()`
165
+ */
166
+ export async function generateIndex(options) {
167
+ const log = options.log ?? ((line) => console.log(line));
168
+ const resolvedBaseDir = path.resolve(options.baseDir);
169
+ const config = options.config;
170
+ if (!Array.isArray(config.sources) || config.sources.length === 0) {
171
+ throw new Error("Invalid config: sources array is empty or missing");
172
+ }
173
+ const entries = [];
174
+ const fileCount = new Set();
175
+ const packageCounts = {};
176
+ // The libraries whose exports spell platform calls in the printed
177
+ // TypeScript — imported once, by the specifier the printed code imports.
178
+ const libraries = {};
179
+ for (const [specifier, entry] of Object.entries(config.libraries ?? {})) {
180
+ const built = path.resolve(resolvedBaseDir, entry);
181
+ if (!fs.existsSync(built)) {
182
+ throw new Error(`library ${specifier} is not built: ${built} — build the package first`);
183
+ }
184
+ libraries[specifier] = (await import(pathToFileURL(built).href));
185
+ }
186
+ if (Object.keys(libraries).length > 0)
187
+ log(`[libraries] ${Object.keys(libraries).join(", ")}`);
188
+ for (const source of config.sources) {
189
+ const testDir = path.resolve(resolvedBaseDir, source.testDir);
190
+ if (!fs.existsSync(testDir)) {
191
+ console.warn(`Warning: Test directory not found, skipping: ${testDir}`);
192
+ continue;
193
+ }
194
+ // Support pattern as string or string[]
195
+ const patterns = Array.isArray(source.pattern) ? source.pattern : [source.pattern];
196
+ const files = patterns.flatMap(p => findFiles(testDir, p));
197
+ const uniqueFiles = [...new Set(files)].sort();
198
+ log(`[${source.package}] Found ${uniqueFiles.length} files in ${testDir}${source.ir ? " (programs: IR)" : ""}`);
199
+ for (const filePath of uniqueFiles) {
200
+ let examples;
201
+ try {
202
+ examples = parseExamplesFile(filePath);
203
+ }
204
+ catch (err) {
205
+ console.warn(` Warning: Could not parse ${filePath}: ${err}`);
206
+ continue;
207
+ }
208
+ if (examples.length === 0)
209
+ continue;
210
+ fileCount.add(filePath);
211
+ // Forward slashes so the index is byte-identical whether generated
212
+ // on Windows or POSIX (path.relative emits os-native separators).
213
+ const relFile = path.relative(resolvedBaseDir, filePath).split(path.sep).join("/");
214
+ // A program package: the built module supplies the IR; the text
215
+ // parse supplies the suite each export sits in and its order.
216
+ const built = source.ir
217
+ ? await loadExamplesModule(testDir, path.resolve(resolvedBaseDir, source.dist ?? path.join(source.testDir, "dist")), filePath)
218
+ : null;
219
+ for (const ex of examples) {
220
+ const entry = {
221
+ id: `${source.package}:${path.basename(filePath)}:${ex.exportName}`,
222
+ skill: source.skill,
223
+ package: source.package,
224
+ file: relFile,
225
+ suite: ex.suiteName,
226
+ test: ex.description,
227
+ keywords: ex.keywords,
228
+ imports: ex.imports,
229
+ languages: built !== null ? ["typescript", "python"] : filePath.endsWith(".tsx") ? ["tsx"] : ["typescript"],
230
+ };
231
+ if (built !== null) {
232
+ const value = built[ex.exportName];
233
+ if (value === undefined || typeof value !== "object" || !("fn" in value) || !Array.isArray(value.inputs)) {
234
+ throw new Error(`${relFile}: export "${ex.exportName}" is not an example() in the built module`);
235
+ }
236
+ Object.assign(entry, programFields(ex.exportName, value, libraries));
237
+ }
238
+ else {
239
+ entry.source = ex.source;
240
+ }
241
+ entries.push(entry);
242
+ packageCounts[source.package] = (packageCounts[source.package] ?? 0) + 1;
243
+ }
244
+ }
245
+ }
246
+ // Merge static entries (e.g. hand-written e3 examples)
247
+ const staticEntries = options.staticEntries ?? [];
248
+ for (const entry of staticEntries) {
249
+ entries.push({ ...entry, languages: entry.languages ?? ["typescript"] });
250
+ packageCounts[entry.package] = (packageCounts[entry.package] ?? 0) + 1;
251
+ }
252
+ if (staticEntries.length > 0)
253
+ log(`\n[static] Merged ${staticEntries.length} hand-written entries`);
254
+ return {
255
+ version: 2,
256
+ stats: {
257
+ totalEntries: entries.length,
258
+ totalFiles: fileCount.size,
259
+ packages: packageCounts,
260
+ },
261
+ entries,
262
+ };
263
+ }
264
+ // ---------------------------------------------------------------------------
265
+ // CLI
266
+ // ---------------------------------------------------------------------------
267
+ /** The value after `flag`, if given. */
268
+ function argument(args, flag) {
269
+ const idx = args.indexOf(flag);
270
+ if (idx === -1)
271
+ return undefined;
272
+ const value = args[idx + 1];
273
+ if (value === undefined)
274
+ throw new Error(`${flag} needs a value`);
275
+ return value;
276
+ }
277
+ async function main() {
278
+ const args = process.argv.slice(2);
279
+ const baseDir = argument(args, "--base-dir");
280
+ if (baseDir === undefined) {
281
+ console.error("Usage: east-plugin-generate-index --base-dir <dir> [--config <index.config.json>] [--static <index.static.json>] [--out <index.json>]");
282
+ process.exit(1);
283
+ }
284
+ // This package's own files (dist/scripts -> package root is ../../): East's index.
285
+ const projectRoot = path.resolve(import.meta.dirname, "..", "..");
286
+ const configPath = path.resolve(argument(args, "--config") ?? path.join(projectRoot, "index.config.json"));
287
+ if (!fs.existsSync(configPath)) {
288
+ console.error(`Config not found: ${configPath}`);
289
+ process.exit(1);
290
+ }
291
+ const config = JSON.parse(fs.readFileSync(configPath, "utf-8"));
292
+ const staticFlag = argument(args, "--static");
293
+ const staticPath = path.resolve(staticFlag ?? path.join(projectRoot, "index.static.json"));
294
+ const staticEntries = staticFlag !== undefined || fs.existsSync(staticPath)
295
+ ? JSON.parse(fs.readFileSync(staticPath, "utf-8")).entries
296
+ : [];
297
+ const output = await generateIndex({ baseDir, config, staticEntries });
298
+ const outPath = path.resolve(argument(args, "--out") ?? path.join(projectRoot, "index.json"));
299
+ fs.writeFileSync(outPath, JSON.stringify(output, null, 2) + "\n");
300
+ const programs = output.entries.filter((e) => e.ir !== undefined).length;
301
+ console.log(`\nGenerated ${outPath}`);
302
+ console.log(` Entries: ${output.entries.length} (${programs} programs with IR, python pending: scripts/render-python.py)`);
303
+ console.log(` Files: ${output.stats.totalFiles}`);
304
+ for (const [pkg, count] of Object.entries(output.stats.packages)) {
305
+ console.log(` ${pkg}: ${count}`);
306
+ }
307
+ }
308
+ // Run only as a command (the bin's link resolves to this file), never on import.
309
+ if (process.argv[1] !== undefined && fs.realpathSync(process.argv[1]) === fileURLToPath(import.meta.url)) {
310
+ main().catch((err) => {
311
+ console.error(err instanceof Error ? err.message : String(err));
312
+ process.exit(1);
313
+ });
314
+ }
315
+ //# sourceMappingURL=generate-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-index.js","sourceRoot":"","sources":["../../scripts/generate-index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../status/report.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import { dirname, resolve } from "node:path";
2
+ import { fileURLToPath } from "node:url";
3
+ import { checkPluginStatus, formatStatus } from "../lib/plugin-status.js";
4
+ // Bundled to .build/status/report.js → the plugin root is two dirs up.
5
+ const pluginRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..", "..");
6
+ const cwd = resolve(process.argv[2] ?? process.cwd());
7
+ const checks = await checkPluginStatus(pluginRoot, cwd);
8
+ console.log(formatStatus(checks));
9
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../status/report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE1E,uEAAuE;AACvE,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAChF,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AAEtD,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AACxD,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC"}