mimetic-cli 0.1.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 (44) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +132 -0
  3. package/dist/argv.d.ts +1 -0
  4. package/dist/argv.js +8 -0
  5. package/dist/argv.js.map +1 -0
  6. package/dist/cli.d.ts +2 -0
  7. package/dist/cli.js +5 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/feedback.d.ts +48 -0
  10. package/dist/feedback.js +243 -0
  11. package/dist/feedback.js.map +1 -0
  12. package/dist/index.d.ts +15 -0
  13. package/dist/index.js +9 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/init-templates.d.ts +12 -0
  16. package/dist/init-templates.js +251 -0
  17. package/dist/init-templates.js.map +1 -0
  18. package/dist/init.d.ts +26 -0
  19. package/dist/init.js +343 -0
  20. package/dist/init.js.map +1 -0
  21. package/dist/observer-assets.d.ts +2 -0
  22. package/dist/observer-assets.js +2322 -0
  23. package/dist/observer-assets.js.map +1 -0
  24. package/dist/observer-data.d.ts +53 -0
  25. package/dist/observer-data.js +123 -0
  26. package/dist/observer-data.js.map +1 -0
  27. package/dist/observer.d.ts +36 -0
  28. package/dist/observer.js +360 -0
  29. package/dist/observer.js.map +1 -0
  30. package/dist/oss-lab.d.ts +50 -0
  31. package/dist/oss-lab.js +298 -0
  32. package/dist/oss-lab.js.map +1 -0
  33. package/dist/oss-meta-lab.d.ts +43 -0
  34. package/dist/oss-meta-lab.js +901 -0
  35. package/dist/oss-meta-lab.js.map +1 -0
  36. package/dist/program.d.ts +36 -0
  37. package/dist/program.js +825 -0
  38. package/dist/program.js.map +1 -0
  39. package/dist/run.d.ts +206 -0
  40. package/dist/run.js +688 -0
  41. package/dist/run.js.map +1 -0
  42. package/package.json +78 -0
  43. package/skills/mimetic-cli/SKILL.md +92 -0
  44. package/skills/mimetic-cli/agents/openai.yaml +7 -0
@@ -0,0 +1,298 @@
1
+ import { execFile } from "node:child_process";
2
+ import { randomBytes } from "node:crypto";
3
+ import { mkdir, rm, writeFile } from "node:fs/promises";
4
+ import path from "node:path";
5
+ import { promisify } from "node:util";
6
+ import { runInit } from "./init.js";
7
+ import { renderObserver } from "./observer.js";
8
+ import { doctor, runDryRun, verifyRun } from "./run.js";
9
+ const execFileAsync = promisify(execFile);
10
+ export const OSS_LAB_SCHEMA = "mimetic.oss-lab-result.v1";
11
+ export const DEFAULT_OSS_REPOS = [
12
+ "developit/mitt",
13
+ "lukeed/clsx",
14
+ "sindresorhus/is-plain-obj",
15
+ "ai/nanoid"
16
+ ];
17
+ export function normalizeOssRepoSlugs(input) {
18
+ const values = input && input.length > 0 ? input : [...DEFAULT_OSS_REPOS];
19
+ const seen = new Set();
20
+ const repos = [];
21
+ for (const value of values) {
22
+ for (const part of value.split(",")) {
23
+ const slug = part.trim();
24
+ if (slug.length === 0 || seen.has(slug)) {
25
+ continue;
26
+ }
27
+ seen.add(slug);
28
+ repos.push(slug);
29
+ }
30
+ }
31
+ return repos;
32
+ }
33
+ export function validateOssRepoSlug(slug) {
34
+ return /^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/.test(slug)
35
+ && !slug.includes("..")
36
+ && !slug.includes("//");
37
+ }
38
+ export async function runOssLab(options) {
39
+ const cwd = path.resolve(options.cwd);
40
+ const startedAt = new Date().toISOString();
41
+ const runId = options.runId ?? makeRunId();
42
+ const reportRoot = path.join(cwd, ".mimetic", "lab", "oss", runId);
43
+ const sandboxPath = path.join(cwd, ".mimetic", "tmp", "oss-lab", runId);
44
+ const warnings = [];
45
+ const repos = normalizeOssRepoSlugs(options.repos);
46
+ const limit = options.limit ?? repos.length;
47
+ if (!Number.isInteger(limit) || limit < 1 || limit > 16) {
48
+ return {
49
+ schema: OSS_LAB_SCHEMA,
50
+ ok: false,
51
+ cleanup: { kept: Boolean(options.keep), sandboxRemoved: false },
52
+ completedAt: new Date().toISOString(),
53
+ cwd,
54
+ error: {
55
+ code: "MIMETIC_INVALID_OSS_LIMIT",
56
+ message: "--limit must be an integer between 1 and 16."
57
+ },
58
+ repos: [],
59
+ runId,
60
+ sandboxPath: relativeToCwd(cwd, sandboxPath),
61
+ startedAt,
62
+ warnings
63
+ };
64
+ }
65
+ const selectedRepos = repos.slice(0, limit);
66
+ const invalid = selectedRepos.find((repo) => !validateOssRepoSlug(repo));
67
+ if (invalid) {
68
+ return {
69
+ schema: OSS_LAB_SCHEMA,
70
+ ok: false,
71
+ cleanup: { kept: Boolean(options.keep), sandboxRemoved: false },
72
+ completedAt: new Date().toISOString(),
73
+ cwd,
74
+ error: {
75
+ code: "MIMETIC_INVALID_OSS_REPO",
76
+ message: `Only public GitHub owner/repo slugs are supported: ${invalid}`
77
+ },
78
+ repos: [],
79
+ runId,
80
+ sandboxPath: relativeToCwd(cwd, sandboxPath),
81
+ startedAt,
82
+ warnings
83
+ };
84
+ }
85
+ await mkdir(reportRoot, { recursive: true });
86
+ await mkdir(sandboxPath, { recursive: true });
87
+ const repoResults = [];
88
+ for (const repo of selectedRepos) {
89
+ repoResults.push(await runRepoTrial({ cwd, repo, runId, sandboxPath }));
90
+ }
91
+ let sandboxRemoved = false;
92
+ if (!options.keep) {
93
+ await rm(sandboxPath, { force: true, recursive: true });
94
+ sandboxRemoved = true;
95
+ }
96
+ const completedAt = new Date().toISOString();
97
+ const result = {
98
+ schema: OSS_LAB_SCHEMA,
99
+ ok: repoResults.every((repo) => repo.ok),
100
+ cleanup: { kept: Boolean(options.keep), sandboxRemoved },
101
+ completedAt,
102
+ cwd,
103
+ reportJsonPath: relativeToCwd(cwd, path.join(reportRoot, "report.json")),
104
+ reportMarkdownPath: relativeToCwd(cwd, path.join(reportRoot, "report.md")),
105
+ repos: repoResults.map((repo) => ({
106
+ ...repo,
107
+ clonePath: relativeToCwd(cwd, repo.clonePath)
108
+ })),
109
+ runId,
110
+ sandboxPath: relativeToCwd(cwd, sandboxPath),
111
+ startedAt,
112
+ warnings
113
+ };
114
+ await writeFile(path.join(reportRoot, "report.json"), `${JSON.stringify(result, null, 2)}\n`, "utf8");
115
+ await writeFile(path.join(reportRoot, "report.md"), renderOssLabMarkdown(result), "utf8");
116
+ return result;
117
+ }
118
+ function makeRunId() {
119
+ const stamp = new Date().toISOString().replace(/[:.]/g, "-");
120
+ return `oss-lab-${stamp}-${randomBytes(4).toString("hex")}`;
121
+ }
122
+ async function runRepoTrial(args) {
123
+ const clonePath = path.join(args.sandboxPath, args.repo.replace(/\//g, "__"));
124
+ const url = `https://github.com/${args.repo}.git`;
125
+ const steps = [];
126
+ const warnings = [];
127
+ const mimeticRunId = `${args.runId}-${repoRunSuffix(args.repo)}`;
128
+ const clone = await measureStep("clone", async () => {
129
+ const result = await runCommand(args.cwd, "git", [
130
+ "clone",
131
+ "--depth",
132
+ "1",
133
+ url,
134
+ clonePath
135
+ ], 120_000);
136
+ return {
137
+ ok: result.ok,
138
+ summary: result.ok ? "shallow public clone created" : compactCommandFailure(result)
139
+ };
140
+ });
141
+ steps.push(clone);
142
+ if (!clone.ok) {
143
+ return {
144
+ changedFiles: [],
145
+ clonePath,
146
+ ok: false,
147
+ repo: args.repo,
148
+ steps,
149
+ url,
150
+ warnings
151
+ };
152
+ }
153
+ const init = await measureStep("mimetic init", async () => {
154
+ const result = await runInit({ cwd: clonePath, yes: true });
155
+ warnings.push(...result.warnings.map((warning) => `init: ${warning}`));
156
+ return {
157
+ ok: result.ok,
158
+ summary: result.ok
159
+ ? summarizeInit(result)
160
+ : result.error?.message ?? "init failed"
161
+ };
162
+ });
163
+ steps.push(init);
164
+ const readiness = await measureStep("mimetic doctor", async () => {
165
+ const result = await doctor(clonePath);
166
+ return {
167
+ ok: result.ok,
168
+ summary: `${result.checks.filter((check) => check.ok).length}/${result.checks.length} checks passed`
169
+ };
170
+ });
171
+ steps.push(readiness);
172
+ const run = await measureStep("mimetic watch evidence", async () => {
173
+ const runResult = await runDryRun({
174
+ cwd: clonePath,
175
+ dryRun: true,
176
+ runId: mimeticRunId,
177
+ simCount: 4
178
+ });
179
+ if (!runResult.ok || !runResult.runId) {
180
+ return {
181
+ ok: false,
182
+ summary: runResult.error?.message ?? "dry-run bundle failed"
183
+ };
184
+ }
185
+ const observer = await renderObserver(clonePath, runResult.runId, { open: false });
186
+ return {
187
+ ok: observer.ok,
188
+ summary: observer.ok
189
+ ? `observer rendered at ${observer.observerPath}`
190
+ : observer.error?.message ?? "observer render failed"
191
+ };
192
+ });
193
+ steps.push(run);
194
+ const verify = await measureStep("mimetic verify", async () => {
195
+ const result = await verifyRun(clonePath, mimeticRunId);
196
+ return {
197
+ ok: result.ok,
198
+ summary: `${result.checks.filter((check) => check.ok).length}/${result.checks.length} checks passed`
199
+ };
200
+ });
201
+ steps.push(verify);
202
+ const status = await runCommand(clonePath, "git", ["status", "--short", "--untracked-files=all"], 30_000);
203
+ const changedFiles = status.stdout
204
+ .split(/\r?\n/)
205
+ .map((line) => line.trim())
206
+ .filter(Boolean);
207
+ return {
208
+ changedFiles,
209
+ clonePath,
210
+ mimeticRunId,
211
+ observerPath: `.mimetic/runs/${mimeticRunId}/observer/index.html`,
212
+ ok: steps.every((step) => step.ok),
213
+ repo: args.repo,
214
+ steps,
215
+ url,
216
+ warnings
217
+ };
218
+ }
219
+ async function measureStep(name, callback) {
220
+ const started = Date.now();
221
+ const result = await callback();
222
+ return {
223
+ durationMs: Date.now() - started,
224
+ name,
225
+ ok: result.ok,
226
+ summary: result.summary
227
+ };
228
+ }
229
+ async function runCommand(cwd, command, args, timeout) {
230
+ try {
231
+ const result = await execFileAsync(command, args, {
232
+ cwd,
233
+ env: {
234
+ ...process.env,
235
+ GIT_TERMINAL_PROMPT: "0"
236
+ },
237
+ maxBuffer: 1024 * 1024,
238
+ timeout
239
+ });
240
+ return {
241
+ exitCode: 0,
242
+ ok: true,
243
+ stderr: result.stderr,
244
+ stdout: result.stdout
245
+ };
246
+ }
247
+ catch (error) {
248
+ const commandError = error;
249
+ return {
250
+ exitCode: typeof commandError.code === "number" ? commandError.code : 1,
251
+ ok: false,
252
+ stderr: commandError.stderr ?? commandError.message ?? "",
253
+ stdout: commandError.stdout ?? ""
254
+ };
255
+ }
256
+ }
257
+ function compactCommandFailure(result) {
258
+ const text = `${result.stderr}\n${result.stdout}`.trim().replace(/\s+/g, " ");
259
+ return text.length > 180 ? `${text.slice(0, 177)}...` : text || `exit ${result.exitCode}`;
260
+ }
261
+ function summarizeInit(result) {
262
+ const created = result.changes.filter((change) => change.action === "create").length;
263
+ const updated = result.changes.filter((change) => change.action === "update").length;
264
+ const mkdirs = result.changes.filter((change) => change.action === "mkdir").length;
265
+ return `${created} files created, ${updated} files updated, ${mkdirs} runtime dirs planned/applied`;
266
+ }
267
+ function repoRunSuffix(repo) {
268
+ return repo.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
269
+ }
270
+ function relativeToCwd(cwd, absolutePath) {
271
+ const relative = path.relative(cwd, absolutePath);
272
+ return relative.length === 0 ? "." : relative;
273
+ }
274
+ function renderOssLabMarkdown(result) {
275
+ return [
276
+ "# OSS Lab Report",
277
+ "",
278
+ `Run: \`${result.runId}\``,
279
+ `Started: ${result.startedAt}`,
280
+ `Completed: ${result.completedAt}`,
281
+ `Sandbox: ${result.cleanup.kept ? result.sandboxPath : "removed"}`,
282
+ "",
283
+ "| Repo | Result | Steps | Changed files |",
284
+ "| --- | --- | --- | --- |",
285
+ ...result.repos.map((repo) => {
286
+ const steps = repo.steps
287
+ .map((step) => `${step.ok ? "ok" : "fail"} ${step.name}`)
288
+ .join("<br>");
289
+ const changed = repo.changedFiles.length > 0
290
+ ? repo.changedFiles.map((file) => `\`${file}\``).join("<br>")
291
+ : "none";
292
+ return `| \`${repo.repo}\` | ${repo.ok ? "pass" : "fail"} | ${steps} | ${changed} |`;
293
+ }),
294
+ "",
295
+ "All clones are disposable public OSS trials. Do not commit cloned target changes."
296
+ ].join("\n") + "\n";
297
+ }
298
+ //# sourceMappingURL=oss-lab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oss-lab.js","sourceRoot":"","sources":["../src/oss-lab.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { ObserverResult } from "./observer.js";
2
+ export declare const OSS_META_LAB_SCHEMA = "mimetic.oss-meta-lab-result.v1";
3
+ export interface OssMetaLabOptions {
4
+ count?: number;
5
+ cwd: string;
6
+ dryRun?: boolean;
7
+ open?: boolean;
8
+ repos?: string[];
9
+ runId?: string;
10
+ }
11
+ export interface OssMetaLabAssignment {
12
+ index: number;
13
+ repo: string;
14
+ scenarioId: string;
15
+ simId: string;
16
+ streamId: string;
17
+ }
18
+ export interface OssMetaLabResult {
19
+ schema: typeof OSS_META_LAB_SCHEMA;
20
+ ok: boolean;
21
+ assignments: OssMetaLabAssignment[];
22
+ count?: number;
23
+ cwd: string;
24
+ dryRun: boolean;
25
+ error?: {
26
+ code: "MIMETIC_INVALID_OSS_COUNT" | "MIMETIC_INVALID_OSS_REPO" | "MIMETIC_META_RUN_FAILED";
27
+ message: string;
28
+ };
29
+ liveRequested: boolean;
30
+ observer?: ObserverResult;
31
+ repos: string[];
32
+ runId?: string;
33
+ sandboxes: Array<{
34
+ bootstrapStatus?: "started" | "failed";
35
+ repo: string;
36
+ sandboxId?: string;
37
+ streamId: string;
38
+ urlPresent: boolean;
39
+ }>;
40
+ warnings: string[];
41
+ }
42
+ export declare function buildOssRepoAssignments(repos: string[], count: number): OssMetaLabAssignment[];
43
+ export declare function runOssMetaLab(options: OssMetaLabOptions): Promise<OssMetaLabResult>;