mimetic-cli 0.1.4 → 0.1.6

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 (49) hide show
  1. package/README.md +67 -12
  2. package/dist/env-file.d.ts +14 -0
  3. package/dist/env-file.js +108 -0
  4. package/dist/env-file.js.map +1 -0
  5. package/dist/feedback.d.ts +7 -5
  6. package/dist/feedback.js +61 -4
  7. package/dist/feedback.js.map +1 -1
  8. package/dist/init-templates.js +29 -0
  9. package/dist/init-templates.js.map +1 -1
  10. package/dist/lab-app-runner.d.ts +78 -0
  11. package/dist/lab-app-runner.js +403 -0
  12. package/dist/lab-app-runner.js.map +1 -0
  13. package/dist/labs.d.ts +67 -0
  14. package/dist/labs.js +257 -0
  15. package/dist/labs.js.map +1 -0
  16. package/dist/observer-assets.js +473 -25
  17. package/dist/observer-assets.js.map +1 -1
  18. package/dist/observer.d.ts +6 -0
  19. package/dist/observer.js +49 -8
  20. package/dist/observer.js.map +1 -1
  21. package/dist/oss-lab.d.ts +1 -1
  22. package/dist/oss-lab.js +6 -6
  23. package/dist/oss-lab.js.map +1 -1
  24. package/dist/oss-meta-lab.d.ts +113 -1
  25. package/dist/oss-meta-lab.js +2756 -203
  26. package/dist/oss-meta-lab.js.map +1 -1
  27. package/dist/oss-remote-telemetry.d.ts +77 -0
  28. package/dist/oss-remote-telemetry.js +393 -0
  29. package/dist/oss-remote-telemetry.js.map +1 -0
  30. package/dist/program.d.ts +8 -0
  31. package/dist/program.js +668 -70
  32. package/dist/program.js.map +1 -1
  33. package/dist/run.d.ts +105 -3
  34. package/dist/run.js +684 -22
  35. package/dist/run.js.map +1 -1
  36. package/docs/architecture/local-codex-tui-actor.md +9 -6
  37. package/docs/architecture/oss-lab-poc.md +119 -47
  38. package/docs/architecture/project-layout.md +40 -6
  39. package/docs/contracts/feedback.md +15 -12
  40. package/docs/contracts/policy.md +9 -2
  41. package/docs/contracts/run-bundle.md +62 -0
  42. package/docs/contracts/schemas.md +21 -0
  43. package/docs/goals/current.md +50 -17
  44. package/docs/product/open-source-install-experience.md +63 -8
  45. package/docs/ramp/README.md +26 -8
  46. package/docs/roadmap/world-class-open-source-v0.md +41 -20
  47. package/package.json +8 -6
  48. package/skills/mimetic-cli/SKILL.md +89 -4
  49. package/skills/mimetic-cli/agents/openai.yaml +1 -1
package/dist/labs.js ADDED
@@ -0,0 +1,257 @@
1
+ import { readdir, readFile, stat } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { parse } from "yaml";
4
+ export const LAB_MANIFEST_SCHEMA = "mimetic.lab.v1";
5
+ export const LAB_LIST_SCHEMA = "mimetic.lab-list.v1";
6
+ export const LAB_INSPECT_SCHEMA = "mimetic.lab-inspect.v1";
7
+ const committedLabsDir = path.join("mimetic", "labs");
8
+ const ignoredLabsDirs = [
9
+ path.join(".mimetic", "labs"),
10
+ path.join(".mimetic", "local", "labs")
11
+ ];
12
+ export async function resolveLabManifest(cwd, lab) {
13
+ const resolvedCwd = path.resolve(cwd);
14
+ const warnings = [];
15
+ const candidates = labLooksLikePath(lab)
16
+ ? [{ origin: "explicit", path: path.resolve(resolvedCwd, lab) }]
17
+ : [
18
+ { origin: "committed", path: path.join(resolvedCwd, committedLabsDir, `${lab}.yaml`) },
19
+ { origin: "committed", path: path.join(resolvedCwd, committedLabsDir, `${lab}.yml`) },
20
+ ...ignoredLabsDirs.flatMap((dir) => [
21
+ { origin: "ignored", path: path.join(resolvedCwd, dir, `${lab}.yaml`) },
22
+ { origin: "ignored", path: path.join(resolvedCwd, dir, `${lab}.yml`) }
23
+ ])
24
+ ];
25
+ for (const candidate of candidates) {
26
+ if (!await fileExists(candidate.path)) {
27
+ continue;
28
+ }
29
+ return parseLabManifest({
30
+ cwd: resolvedCwd,
31
+ lab,
32
+ origin: candidate.origin,
33
+ path: candidate.path,
34
+ warnings
35
+ });
36
+ }
37
+ return {
38
+ ok: false,
39
+ cwd: resolvedCwd,
40
+ lab,
41
+ error: {
42
+ code: "MIMETIC_LAB_NOT_FOUND",
43
+ message: `Lab not found: ${lab}. Look in mimetic/labs/ or pass a .yaml path.`
44
+ },
45
+ warnings
46
+ };
47
+ }
48
+ export async function listLabManifests(cwd) {
49
+ const resolvedCwd = path.resolve(cwd);
50
+ const warnings = [];
51
+ const labs = new Map();
52
+ const dirs = [
53
+ { origin: "committed", dir: path.join(resolvedCwd, committedLabsDir) },
54
+ ...ignoredLabsDirs.map((dir) => ({ origin: "ignored", dir: path.join(resolvedCwd, dir) }))
55
+ ];
56
+ for (const entry of dirs) {
57
+ const names = await safeReadDir(entry.dir);
58
+ for (const name of names.filter((value) => value.endsWith(".yaml") || value.endsWith(".yml"))) {
59
+ const candidatePath = path.join(entry.dir, name);
60
+ const parsed = await parseLabManifest({
61
+ cwd: resolvedCwd,
62
+ lab: name.replace(/\.(?:ya?ml)$/i, ""),
63
+ origin: entry.origin,
64
+ path: candidatePath,
65
+ warnings: []
66
+ });
67
+ if (!parsed.ok) {
68
+ warnings.push(`${relativeToCwd(resolvedCwd, candidatePath)}: ${parsed.error.message}`);
69
+ continue;
70
+ }
71
+ const key = `${parsed.manifest.id}:${entry.origin}:${relativeToCwd(resolvedCwd, candidatePath)}`;
72
+ labs.set(key, {
73
+ id: parsed.manifest.id,
74
+ kind: parsed.manifest.kind,
75
+ origin: entry.origin,
76
+ path: relativeToCwd(resolvedCwd, candidatePath),
77
+ ...(parsed.manifest.title ? { title: parsed.manifest.title } : {})
78
+ });
79
+ }
80
+ }
81
+ return {
82
+ schema: LAB_LIST_SCHEMA,
83
+ ok: true,
84
+ cwd: resolvedCwd,
85
+ labs: [...labs.values()].sort((left, right) => `${left.origin}:${left.id}`.localeCompare(`${right.origin}:${right.id}`)),
86
+ warnings
87
+ };
88
+ }
89
+ export async function inspectLabManifest(cwd, lab) {
90
+ const resolved = await resolveLabManifest(cwd, lab);
91
+ if (!resolved.ok) {
92
+ return {
93
+ schema: LAB_INSPECT_SCHEMA,
94
+ ok: false,
95
+ cwd: resolved.cwd,
96
+ lab,
97
+ error: resolved.error,
98
+ warnings: resolved.warnings
99
+ };
100
+ }
101
+ return {
102
+ schema: LAB_INSPECT_SCHEMA,
103
+ ok: true,
104
+ cwd: path.resolve(cwd),
105
+ lab,
106
+ manifest: resolved.manifest,
107
+ origin: resolved.origin,
108
+ path: resolved.path,
109
+ warnings: resolved.warnings
110
+ };
111
+ }
112
+ async function parseLabManifest(args) {
113
+ let raw;
114
+ try {
115
+ raw = parse(await readFile(args.path, "utf8"));
116
+ }
117
+ catch (error) {
118
+ return {
119
+ ok: false,
120
+ cwd: args.cwd,
121
+ lab: args.lab,
122
+ error: {
123
+ code: "MIMETIC_LAB_INVALID",
124
+ message: error instanceof Error ? error.message : "Lab YAML could not be parsed."
125
+ },
126
+ warnings: args.warnings
127
+ };
128
+ }
129
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
130
+ return invalidLab(args, "Lab manifest must be a YAML object.");
131
+ }
132
+ const record = raw;
133
+ const schema = stringValue(record.schema);
134
+ const id = stringValue(record.id);
135
+ const kind = stringValue(record.kind);
136
+ if (schema !== LAB_MANIFEST_SCHEMA) {
137
+ return invalidLab(args, `Lab schema must be ${LAB_MANIFEST_SCHEMA}.`);
138
+ }
139
+ if (!id || !/^[A-Za-z0-9_.-]+$/.test(id)) {
140
+ return invalidLab(args, "Lab id must be a public-safe token.");
141
+ }
142
+ if (!isLabKind(kind)) {
143
+ return invalidLab(args, "Lab kind must be synthetic, oss-meta, or oss-smoke.");
144
+ }
145
+ const title = stringValue(record.title);
146
+ const description = stringValue(record.description);
147
+ const sims = positiveIntegerValue(record.sims);
148
+ const count = positiveIntegerValue(record.count);
149
+ const limit = positiveIntegerValue(record.limit);
150
+ const repos = repoListValue(record.repos);
151
+ const defaults = defaultsValue(record.defaults);
152
+ const manifest = {
153
+ schema: LAB_MANIFEST_SCHEMA,
154
+ id,
155
+ kind,
156
+ ...(title === undefined ? {} : { title }),
157
+ ...(description === undefined ? {} : { description }),
158
+ ...(sims === undefined ? {} : { sims }),
159
+ ...(count === undefined ? {} : { count }),
160
+ ...(limit === undefined ? {} : { limit }),
161
+ ...(repos === undefined ? {} : { repos }),
162
+ ...(defaults === undefined ? {} : { defaults })
163
+ };
164
+ const warnings = [...args.warnings];
165
+ if (args.path.endsWith(".yml")) {
166
+ warnings.push("Prefer .yaml for Mimetic-authored lab source; .yml is accepted for compatibility only.");
167
+ }
168
+ return {
169
+ ok: true,
170
+ manifest,
171
+ origin: args.origin,
172
+ path: relativeToCwd(args.cwd, args.path),
173
+ warnings
174
+ };
175
+ }
176
+ function invalidLab(args, message) {
177
+ return {
178
+ ok: false,
179
+ cwd: args.cwd,
180
+ lab: args.lab,
181
+ error: {
182
+ code: "MIMETIC_LAB_INVALID",
183
+ message
184
+ },
185
+ warnings: args.warnings
186
+ };
187
+ }
188
+ function stringValue(value) {
189
+ return typeof value === "string" && value.trim() ? value.trim() : undefined;
190
+ }
191
+ function positiveIntegerValue(value) {
192
+ if (typeof value === "number" && Number.isSafeInteger(value) && value >= 1) {
193
+ return value;
194
+ }
195
+ if (typeof value === "string" && /^\d+$/.test(value)) {
196
+ const parsed = Number.parseInt(value, 10);
197
+ return Number.isSafeInteger(parsed) && parsed >= 1 ? parsed : undefined;
198
+ }
199
+ return undefined;
200
+ }
201
+ function repoListValue(value) {
202
+ if (typeof value === "string") {
203
+ return value.split(",").map((repo) => repo.trim()).filter(Boolean);
204
+ }
205
+ if (!Array.isArray(value)) {
206
+ return undefined;
207
+ }
208
+ const repos = value.filter((entry) => typeof entry === "string")
209
+ .map((repo) => repo.trim())
210
+ .filter(Boolean);
211
+ return repos.length > 0 ? repos : undefined;
212
+ }
213
+ function defaultsValue(value) {
214
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
215
+ return undefined;
216
+ }
217
+ const record = value;
218
+ const defaults = {};
219
+ if (typeof record.dryRun === "boolean")
220
+ defaults.dryRun = record.dryRun;
221
+ if (typeof record.open === "boolean")
222
+ defaults.open = record.open;
223
+ if (typeof record.redactRepos === "boolean")
224
+ defaults.redactRepos = record.redactRepos;
225
+ return Object.keys(defaults).length > 0 ? defaults : undefined;
226
+ }
227
+ function isLabKind(kind) {
228
+ return kind === "synthetic" || kind === "oss-meta" || kind === "oss-smoke";
229
+ }
230
+ function labLooksLikePath(lab) {
231
+ return lab.endsWith(".yaml")
232
+ || lab.endsWith(".yml")
233
+ || lab.includes("/")
234
+ || lab.includes("\\")
235
+ || lab.startsWith(".");
236
+ }
237
+ async function fileExists(filePath) {
238
+ try {
239
+ return (await stat(filePath)).isFile();
240
+ }
241
+ catch {
242
+ return false;
243
+ }
244
+ }
245
+ async function safeReadDir(dir) {
246
+ try {
247
+ return await readdir(dir);
248
+ }
249
+ catch {
250
+ return [];
251
+ }
252
+ }
253
+ function relativeToCwd(cwd, filePath) {
254
+ const relative = path.relative(cwd, filePath);
255
+ return relative && !relative.startsWith("..") ? relative : filePath;
256
+ }
257
+ //# sourceMappingURL=labs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"labs.js","sourceRoot":"","sources":["../src/labs.ts"],"names":[],"mappings":"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"}