mimetic-cli 0.1.4 → 0.1.5
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.
- package/README.md +67 -12
- package/dist/env-file.d.ts +14 -0
- package/dist/env-file.js +108 -0
- package/dist/env-file.js.map +1 -0
- package/dist/feedback.d.ts +7 -5
- package/dist/feedback.js +61 -4
- package/dist/feedback.js.map +1 -1
- package/dist/init-templates.js +29 -0
- package/dist/init-templates.js.map +1 -1
- package/dist/lab-app-runner.d.ts +78 -0
- package/dist/lab-app-runner.js +403 -0
- package/dist/lab-app-runner.js.map +1 -0
- package/dist/labs.d.ts +67 -0
- package/dist/labs.js +257 -0
- package/dist/labs.js.map +1 -0
- package/dist/observer-assets.js +473 -25
- package/dist/observer-assets.js.map +1 -1
- package/dist/observer.d.ts +6 -0
- package/dist/observer.js +49 -8
- package/dist/observer.js.map +1 -1
- package/dist/oss-lab.d.ts +1 -1
- package/dist/oss-lab.js +6 -6
- package/dist/oss-lab.js.map +1 -1
- package/dist/oss-meta-lab.d.ts +113 -1
- package/dist/oss-meta-lab.js +2753 -200
- package/dist/oss-meta-lab.js.map +1 -1
- package/dist/oss-remote-telemetry.d.ts +77 -0
- package/dist/oss-remote-telemetry.js +393 -0
- package/dist/oss-remote-telemetry.js.map +1 -0
- package/dist/program.d.ts +8 -0
- package/dist/program.js +668 -70
- package/dist/program.js.map +1 -1
- package/dist/run.d.ts +105 -3
- package/dist/run.js +684 -22
- package/dist/run.js.map +1 -1
- package/docs/architecture/local-codex-tui-actor.md +9 -6
- package/docs/architecture/oss-lab-poc.md +119 -47
- package/docs/architecture/project-layout.md +40 -6
- package/docs/contracts/feedback.md +15 -12
- package/docs/contracts/policy.md +9 -2
- package/docs/contracts/run-bundle.md +62 -0
- package/docs/contracts/schemas.md +21 -0
- package/docs/goals/current.md +50 -17
- package/docs/product/open-source-install-experience.md +63 -8
- package/docs/ramp/README.md +26 -8
- package/docs/roadmap/world-class-open-source-v0.md +41 -20
- package/package.json +8 -6
- package/skills/mimetic-cli/SKILL.md +89 -4
- package/skills/mimetic-cli/agents/openai.yaml +1 -1
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ It creates committed simulation source under `mimetic/`, ignored run evidence
|
|
|
9
9
|
under `.mimetic/`, a watchable Observer UI, verification gates, and public-safe
|
|
10
10
|
feedback drafts.
|
|
11
11
|
|
|
12
|
-

|
|
13
13
|
|
|
14
14
|
## Install
|
|
15
15
|
|
|
@@ -19,6 +19,10 @@ npx mimetic init --yes
|
|
|
19
19
|
npx mimetic watch
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
+
The package is `mimetic-cli`; the installed binary is `mimetic`. For a one-shot
|
|
23
|
+
command before installation, use `npx --package mimetic-cli mimetic ...` so npm
|
|
24
|
+
does not resolve an unrelated package named `mimetic`.
|
|
25
|
+
|
|
22
26
|
For coding agents, install the repo skill first:
|
|
23
27
|
|
|
24
28
|
```bash
|
|
@@ -43,7 +47,7 @@ env var names without values. Generated run bundles belong under ignored
|
|
|
43
47
|
## How It Works
|
|
44
48
|
|
|
45
49
|
```text
|
|
46
|
-
mimetic/ committed source plane: personas, scenarios, policy, adapters
|
|
50
|
+
mimetic/ committed source plane: labs, personas, scenarios, policy, adapters
|
|
47
51
|
.mimetic/ ignored runtime plane: runs, Observer output, reviews, local state
|
|
48
52
|
```
|
|
49
53
|
|
|
@@ -58,6 +62,14 @@ npx mimetic feedback issue --run latest --repo owner/repo --format markdown
|
|
|
58
62
|
|
|
59
63
|
`mimetic watch` starts a fresh four-lane synthetic run, renders the Observer,
|
|
60
64
|
opens it in the browser, serves it over localhost, and keeps the shell attached.
|
|
65
|
+
After `mimetic init`, named lab manifests can be run the same way:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
npx mimetic watch first-run
|
|
69
|
+
npx mimetic lab list
|
|
70
|
+
npx mimetic lab inspect first-run
|
|
71
|
+
```
|
|
72
|
+
|
|
61
73
|
The CI-safe equivalent is:
|
|
62
74
|
|
|
63
75
|
```bash
|
|
@@ -71,27 +83,60 @@ npx mimetic watch --json --no-open
|
|
|
71
83
|
| `mimetic init` | Scaffold committed `mimetic/` source and ignored `.mimetic/` runtime state. |
|
|
72
84
|
| `mimetic doctor` | Explain readiness and missing setup. |
|
|
73
85
|
| `mimetic run --dry-run` | Generate a synthetic run bundle without browser, keys, or provider spend. |
|
|
74
|
-
| `mimetic
|
|
86
|
+
| `mimetic run --app-url http://127.0.0.1:<port>` | Capture live desktop/mobile browser evidence against a running local app. |
|
|
87
|
+
| `mimetic watch [lab]` | Run sims or a named lab, open Observer, and keep watching. |
|
|
88
|
+
| `mimetic lab list` | List committed and ignored lab manifests. |
|
|
89
|
+
| `mimetic lab inspect <lab>` | Show the source manifest for a lab without running it. |
|
|
90
|
+
| `mimetic lab run <lab>` | Run a lab manifest in human or JSON mode. |
|
|
75
91
|
| `mimetic verify` | Validate a run bundle and public-safety gates. |
|
|
76
92
|
| `mimetic review` | Read review evidence for a run. |
|
|
77
93
|
| `mimetic runs` | List local runs and latest pointers. |
|
|
78
94
|
| `mimetic feedback issue` | Print a public-safe GitHub issue draft without API mutation. |
|
|
79
|
-
| `mimetic lab oss` |
|
|
80
|
-
| `mimetic lab oss-smoke` |
|
|
95
|
+
| `mimetic lab run oss` | Repo-maintainer dogfood example: Observer-of-Observers for headed authorized-repo app setup attempts. |
|
|
96
|
+
| `mimetic lab run oss-smoke` | Repo-maintainer dogfood example: disposable clone smoke test against public OSS repos. |
|
|
81
97
|
|
|
82
|
-
##
|
|
98
|
+
## Lab Manifests
|
|
99
|
+
|
|
100
|
+
Labs are authored as `.yaml` source:
|
|
101
|
+
|
|
102
|
+
```text
|
|
103
|
+
mimetic/labs/*.yaml committed public-safe labs
|
|
104
|
+
.mimetic/labs/*.yaml ignored local labs
|
|
105
|
+
.mimetic/local/labs/*.yaml ignored private or machine-specific labs
|
|
106
|
+
```
|
|
83
107
|
|
|
84
|
-
|
|
108
|
+
Committed labs should be useful to anyone who clones the project. Private repo
|
|
109
|
+
targets, token-backed provider settings, and local-only dogfood variants belong
|
|
110
|
+
in ignored `.mimetic/` lab manifests and can be run explicitly:
|
|
85
111
|
|
|
86
112
|
```bash
|
|
87
|
-
|
|
88
|
-
|
|
113
|
+
npx mimetic watch .mimetic/labs/local-dogfood.yaml --env-file .mimetic/local/provider.env
|
|
114
|
+
npx mimetic lab run .mimetic/labs/local-dogfood.yaml --json --no-open
|
|
89
115
|
```
|
|
90
116
|
|
|
117
|
+
`--env-file` loads values for the current process only. Mimetic reports loaded
|
|
118
|
+
env var names, never values, and does not persist those values into run bundles
|
|
119
|
+
or Observer data.
|
|
120
|
+
|
|
121
|
+
## Maintainer OSS Meta-Lab Example
|
|
122
|
+
|
|
123
|
+
This repository includes an experimental authorized-repo dogfood lab:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
pnpm mimetic -- watch oss
|
|
127
|
+
pnpm mimetic -- lab run oss --repos CorentinTh/it-tools,drawdb-io/drawdb,maciekt07/TodoApp,lissy93/dashy
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Default lab targets are intentionally app/tool-like repos with visible,
|
|
131
|
+
locally runnable user surfaces. Avoid libraries and frameworks for public
|
|
132
|
+
dogfood unless the scenario is explicitly testing developer experience.
|
|
133
|
+
|
|
91
134
|
With `E2B_API_KEY` and `OPENAI_API_KEY` present, Mimetic launches headed E2B
|
|
92
|
-
desktop lanes, uploads the local package tarball, clones each assigned
|
|
135
|
+
desktop lanes, uploads the local package tarball, clones each assigned
|
|
93
136
|
repository inside the sandbox, initializes Mimetic, runs nested proof commands,
|
|
94
|
-
|
|
137
|
+
starts the target app when a runnable script is present, opens desktop/mobile
|
|
138
|
+
app windows plus the nested Observer in the sandbox browser, and starts a
|
|
139
|
+
nonblocking Codex actor attempt.
|
|
95
140
|
Install the optional desktop substrate first:
|
|
96
141
|
|
|
97
142
|
```bash
|
|
@@ -101,9 +146,18 @@ npm i -D @e2b/desktop
|
|
|
101
146
|
The contract-safe path for agents and CI is:
|
|
102
147
|
|
|
103
148
|
```bash
|
|
104
|
-
pnpm mimetic -- lab oss --dry-run --json --no-open
|
|
149
|
+
pnpm mimetic -- lab run oss --dry-run --json --no-open
|
|
105
150
|
```
|
|
106
151
|
|
|
152
|
+
The `oss` lab accepts GitHub `owner/repo` slugs. Private repositories are
|
|
153
|
+
maintainer-only and should be supplied from ignored local lab manifests with an
|
|
154
|
+
authorized `GH_TOKEN` or `GITHUB_TOKEN` loaded via `--env-file`. When a GitHub
|
|
155
|
+
token is present, durable run artifacts redact repo labels by default; pass
|
|
156
|
+
`--no-redact-repos` only for public-safe repo selections. Live E2B stream URLs
|
|
157
|
+
are runtime-only for the attached Observer server and are not persisted to
|
|
158
|
+
`run.json` or `observer-data.json`. Local bundles remain ignored under
|
|
159
|
+
`.mimetic/`; do not publish private screenshots, logs, or upstream details.
|
|
160
|
+
|
|
107
161
|
## Development
|
|
108
162
|
|
|
109
163
|
```bash
|
|
@@ -119,6 +173,7 @@ Local dogfood:
|
|
|
119
173
|
pnpm mimetic:watch
|
|
120
174
|
pnpm mimetic:verify
|
|
121
175
|
pnpm mimetic:feedback
|
|
176
|
+
pnpm mimetic:lab:list
|
|
122
177
|
```
|
|
123
178
|
|
|
124
179
|
## Docs
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const ENV_FILE_RESULT_SCHEMA = "mimetic.env-file-result.v1";
|
|
2
|
+
export interface EnvFileLoadResult {
|
|
3
|
+
schema: typeof ENV_FILE_RESULT_SCHEMA;
|
|
4
|
+
ok: boolean;
|
|
5
|
+
cwd: string;
|
|
6
|
+
envFile: string;
|
|
7
|
+
loaded: string[];
|
|
8
|
+
skipped: string[];
|
|
9
|
+
error?: {
|
|
10
|
+
code: "MIMETIC_ENV_FILE_NOT_FOUND" | "MIMETIC_ENV_FILE_INVALID";
|
|
11
|
+
message: string;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export declare function loadEnvFile(cwd: string, envFile: string, env?: NodeJS.ProcessEnv): Promise<EnvFileLoadResult>;
|
package/dist/env-file.js
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
export const ENV_FILE_RESULT_SCHEMA = "mimetic.env-file-result.v1";
|
|
4
|
+
const envNamePattern = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
5
|
+
export async function loadEnvFile(cwd, envFile, env = process.env) {
|
|
6
|
+
const resolvedCwd = path.resolve(cwd);
|
|
7
|
+
const envPath = path.resolve(resolvedCwd, envFile);
|
|
8
|
+
const loaded = [];
|
|
9
|
+
const skipped = [];
|
|
10
|
+
let text;
|
|
11
|
+
try {
|
|
12
|
+
text = await readFile(envPath, "utf8");
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return {
|
|
16
|
+
schema: ENV_FILE_RESULT_SCHEMA,
|
|
17
|
+
ok: false,
|
|
18
|
+
cwd: resolvedCwd,
|
|
19
|
+
envFile,
|
|
20
|
+
loaded,
|
|
21
|
+
skipped,
|
|
22
|
+
error: {
|
|
23
|
+
code: "MIMETIC_ENV_FILE_NOT_FOUND",
|
|
24
|
+
message: `Env file was not readable: ${envFile}`
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
const lines = text.split(/\r?\n/);
|
|
29
|
+
for (let index = 0; index < lines.length; index += 1) {
|
|
30
|
+
const parsed = parseEnvLine(lines[index] ?? "");
|
|
31
|
+
if (parsed === null) {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if (!parsed.ok) {
|
|
35
|
+
return {
|
|
36
|
+
schema: ENV_FILE_RESULT_SCHEMA,
|
|
37
|
+
ok: false,
|
|
38
|
+
cwd: resolvedCwd,
|
|
39
|
+
envFile,
|
|
40
|
+
loaded,
|
|
41
|
+
skipped,
|
|
42
|
+
error: {
|
|
43
|
+
code: "MIMETIC_ENV_FILE_INVALID",
|
|
44
|
+
message: `Invalid env assignment on line ${index + 1}.`
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
if (env[parsed.name] !== undefined) {
|
|
49
|
+
skipped.push(parsed.name);
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
env[parsed.name] = parsed.value;
|
|
53
|
+
loaded.push(parsed.name);
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
schema: ENV_FILE_RESULT_SCHEMA,
|
|
57
|
+
ok: true,
|
|
58
|
+
cwd: resolvedCwd,
|
|
59
|
+
envFile,
|
|
60
|
+
loaded,
|
|
61
|
+
skipped
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function parseEnvLine(line) {
|
|
65
|
+
const trimmed = line.trim();
|
|
66
|
+
if (!trimmed || trimmed.startsWith("#")) {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
const assignment = trimmed.startsWith("export ") ? trimmed.slice("export ".length).trim() : trimmed;
|
|
70
|
+
const separator = assignment.indexOf("=");
|
|
71
|
+
if (separator <= 0) {
|
|
72
|
+
return { ok: false };
|
|
73
|
+
}
|
|
74
|
+
const name = assignment.slice(0, separator).trim();
|
|
75
|
+
if (!envNamePattern.test(name)) {
|
|
76
|
+
return { ok: false };
|
|
77
|
+
}
|
|
78
|
+
const rawValue = assignment.slice(separator + 1).trim();
|
|
79
|
+
const value = unquoteEnvValue(rawValue);
|
|
80
|
+
if (value === null) {
|
|
81
|
+
return { ok: false };
|
|
82
|
+
}
|
|
83
|
+
return { ok: true, name, value };
|
|
84
|
+
}
|
|
85
|
+
function unquoteEnvValue(value) {
|
|
86
|
+
if (!value) {
|
|
87
|
+
return "";
|
|
88
|
+
}
|
|
89
|
+
const first = value[0];
|
|
90
|
+
const last = value[value.length - 1];
|
|
91
|
+
if ((first === "\"" || first === "'") && last !== first) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
if (first === "\"" && last === "\"") {
|
|
95
|
+
return value
|
|
96
|
+
.slice(1, -1)
|
|
97
|
+
.replace(/\\n/g, "\n")
|
|
98
|
+
.replace(/\\r/g, "\r")
|
|
99
|
+
.replace(/\\t/g, "\t")
|
|
100
|
+
.replace(/\\"/g, "\"")
|
|
101
|
+
.replace(/\\\\/g, "\\");
|
|
102
|
+
}
|
|
103
|
+
if (first === "'" && last === "'") {
|
|
104
|
+
return value.slice(1, -1);
|
|
105
|
+
}
|
|
106
|
+
return value.replace(/\s+#.*$/, "");
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=env-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-file.js","sourceRoot":"","sources":["../src/env-file.ts"],"names":[],"mappings":"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"}
|
package/dist/feedback.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { RunFeedbackCandidate } from "./run.js";
|
|
1
2
|
export declare const FEEDBACK_SCHEMA = "mimetic.feedback.v1";
|
|
2
3
|
export declare const FEEDBACK_RESULT_SCHEMA = "mimetic.feedback-result.v1";
|
|
3
4
|
export interface FeedbackDraft {
|
|
@@ -6,16 +7,17 @@ export interface FeedbackDraft {
|
|
|
6
7
|
adapter_id: string;
|
|
7
8
|
scenario_id: string;
|
|
8
9
|
persona_id: string;
|
|
9
|
-
actor: "
|
|
10
|
-
substrate: "
|
|
11
|
-
failure_owner: "
|
|
10
|
+
actor: RunFeedbackCandidate["actor"];
|
|
11
|
+
substrate: RunFeedbackCandidate["substrate"];
|
|
12
|
+
failure_owner: RunFeedbackCandidate["failure_owner"];
|
|
12
13
|
summary: string;
|
|
13
14
|
expected: string;
|
|
14
15
|
actual: string;
|
|
16
|
+
source_candidate_id?: string;
|
|
15
17
|
source_bundle: string;
|
|
16
18
|
evidence: Array<{
|
|
17
19
|
path: string;
|
|
18
|
-
kind: "
|
|
20
|
+
kind: RunFeedbackCandidate["evidence"][number]["kind"];
|
|
19
21
|
note: string;
|
|
20
22
|
}>;
|
|
21
23
|
redaction: {
|
|
@@ -23,7 +25,7 @@ export interface FeedbackDraft {
|
|
|
23
25
|
notes: string;
|
|
24
26
|
};
|
|
25
27
|
idempotency_key: string;
|
|
26
|
-
proposed_next_state: "
|
|
28
|
+
proposed_next_state: RunFeedbackCandidate["proposed_next_state"];
|
|
27
29
|
acceptance_proof: string[];
|
|
28
30
|
}
|
|
29
31
|
export interface FeedbackResult {
|
package/dist/feedback.js
CHANGED
|
@@ -124,6 +124,43 @@ export async function listFeedback(cwdInput, runInput) {
|
|
|
124
124
|
};
|
|
125
125
|
}
|
|
126
126
|
function buildDraft(bundle, bundlePath) {
|
|
127
|
+
const candidate = bundle.feedbackCandidates.find((item) => isUsableFeedbackCandidate(item));
|
|
128
|
+
if (candidate) {
|
|
129
|
+
return {
|
|
130
|
+
schema: FEEDBACK_SCHEMA,
|
|
131
|
+
run_id: bundle.runId,
|
|
132
|
+
adapter_id: candidate.adapter_id,
|
|
133
|
+
scenario_id: candidate.scenario_id,
|
|
134
|
+
persona_id: candidate.persona_id,
|
|
135
|
+
actor: candidate.actor,
|
|
136
|
+
substrate: candidate.substrate,
|
|
137
|
+
failure_owner: candidate.failure_owner,
|
|
138
|
+
summary: candidate.summary,
|
|
139
|
+
expected: candidate.expected,
|
|
140
|
+
actual: candidate.actual,
|
|
141
|
+
source_candidate_id: candidate.id,
|
|
142
|
+
source_bundle: bundlePath,
|
|
143
|
+
evidence: [
|
|
144
|
+
{
|
|
145
|
+
path: bundlePath,
|
|
146
|
+
kind: "state",
|
|
147
|
+
note: "Source run bundle."
|
|
148
|
+
},
|
|
149
|
+
...candidate.evidence.map((item) => ({
|
|
150
|
+
path: path.join(path.dirname(bundlePath), item.path),
|
|
151
|
+
kind: item.kind,
|
|
152
|
+
note: item.note
|
|
153
|
+
}))
|
|
154
|
+
],
|
|
155
|
+
redaction: {
|
|
156
|
+
status: "passed",
|
|
157
|
+
notes: candidate.redaction.notes
|
|
158
|
+
},
|
|
159
|
+
idempotency_key: candidate.idempotency_key,
|
|
160
|
+
proposed_next_state: candidate.proposed_next_state,
|
|
161
|
+
acceptance_proof: candidate.acceptance_proof
|
|
162
|
+
};
|
|
163
|
+
}
|
|
127
164
|
return {
|
|
128
165
|
schema: FEEDBACK_SCHEMA,
|
|
129
166
|
run_id: bundle.runId,
|
|
@@ -161,10 +198,30 @@ function buildDraft(bundle, bundlePath) {
|
|
|
161
198
|
]
|
|
162
199
|
};
|
|
163
200
|
}
|
|
201
|
+
function isUsableFeedbackCandidate(candidate) {
|
|
202
|
+
if (!isRecord(candidate)
|
|
203
|
+
|| candidate.schema !== "mimetic.feedback-candidate.v1"
|
|
204
|
+
|| !isRecord(candidate.redaction)
|
|
205
|
+
|| candidate.redaction.status !== "passed"
|
|
206
|
+
|| typeof candidate.summary !== "string"
|
|
207
|
+
|| candidate.summary.trim().length === 0
|
|
208
|
+
|| !Array.isArray(candidate.evidence)) {
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
return candidate.evidence.every((item) => isRecord(item)
|
|
212
|
+
&& typeof item.path === "string"
|
|
213
|
+
&& item.path.length > 0
|
|
214
|
+
&& !path.isAbsolute(item.path)
|
|
215
|
+
&& !item.path.includes("://")
|
|
216
|
+
&& !item.path.includes(".."));
|
|
217
|
+
}
|
|
218
|
+
function isRecord(value) {
|
|
219
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
220
|
+
}
|
|
164
221
|
function renderMarkdown(draft, repo) {
|
|
165
|
-
return `This issue was drafted by Mimetic from a verified
|
|
222
|
+
return `This issue was drafted by Mimetic from a verified Mimetic run bundle.
|
|
166
223
|
|
|
167
|
-
It contributes to public-safe simulation harness coverage.
|
|
224
|
+
It contributes to public-safe simulation harness coverage. The feedback command did not mutate GitHub, commit code, or claim unobserved product behavior.
|
|
168
225
|
|
|
169
226
|
## Summary
|
|
170
227
|
|
|
@@ -186,7 +243,7 @@ ${draft.evidence.map((item) => `- ${item.kind}: \`${item.path}\` - ${item.note}`
|
|
|
186
243
|
|
|
187
244
|
- Repository: ${repo}
|
|
188
245
|
- GitHub mutation: not performed
|
|
189
|
-
-
|
|
246
|
+
- Substrate: ${draft.substrate}
|
|
190
247
|
- Production data: not used
|
|
191
248
|
|
|
192
249
|
\`\`\`yaml
|
|
@@ -199,7 +256,7 @@ mimetic_feedback:
|
|
|
199
256
|
actor: ${draft.actor}
|
|
200
257
|
substrate: ${draft.substrate}
|
|
201
258
|
failure_owner: ${draft.failure_owner}
|
|
202
|
-
source_bundle: ${draft.source_bundle}
|
|
259
|
+
${draft.source_candidate_id ? ` source_candidate_id: ${draft.source_candidate_id}\n` : ""} source_bundle: ${draft.source_bundle}
|
|
203
260
|
evidence:
|
|
204
261
|
${draft.evidence.map((item) => ` - path: ${item.path}\n kind: ${item.kind}\n note: ${item.note}`).join("\n")}
|
|
205
262
|
redaction:
|
package/dist/feedback.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feedback.js","sourceRoot":"","sources":["../src/feedback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGpD,MAAM,CAAC,MAAM,eAAe,GAAG,qBAAqB,CAAC;AACrD,MAAM,CAAC,MAAM,sBAAsB,GAAG,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"feedback.js","sourceRoot":"","sources":["../src/feedback.ts"],"names":[],"mappings":"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"}
|
package/dist/init-templates.js
CHANGED
|
@@ -14,6 +14,19 @@ Keep this directory public-safe:
|
|
|
14
14
|
- no PII, PHI, secrets, raw private transcripts, private screenshots, customer data, or patient data.
|
|
15
15
|
|
|
16
16
|
Generated run bundles, screenshots, traces, logs, and local overrides belong in ignored \`.mimetic/\`.
|
|
17
|
+
|
|
18
|
+
Labs:
|
|
19
|
+
|
|
20
|
+
- committed reusable labs live in mimetic/labs/*.yaml;
|
|
21
|
+
- private or machine-local labs live in ignored .mimetic/labs/*.yaml or .mimetic/local/labs/*.yaml;
|
|
22
|
+
- run a lab with \`mimetic watch <lab>\` or \`mimetic lab run <lab>\`.
|
|
23
|
+
|
|
24
|
+
Format standard:
|
|
25
|
+
|
|
26
|
+
- human-authored Mimetic source uses .yaml;
|
|
27
|
+
- executable integration uses .ts;
|
|
28
|
+
- generated artifacts, synthetic fixtures, and event streams use .json or .ndjson;
|
|
29
|
+
- .yml is reserved for outside ecosystem files such as GitHub Actions, not Mimetic source.
|
|
17
30
|
`
|
|
18
31
|
},
|
|
19
32
|
{
|
|
@@ -101,6 +114,20 @@ steps:
|
|
|
101
114
|
expectation: No real user data is entered.
|
|
102
115
|
- name: Check recovery path
|
|
103
116
|
expectation: The user can back out or retry safely.
|
|
117
|
+
`
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
path: "mimetic/labs/first-run.yaml",
|
|
121
|
+
plane: "source",
|
|
122
|
+
contents: `schema: mimetic.lab.v1
|
|
123
|
+
id: first-run
|
|
124
|
+
kind: synthetic
|
|
125
|
+
title: First-run synthetic Observer
|
|
126
|
+
description: Public-safe starter lab that generates a synthetic run bundle and Observer without provider spend.
|
|
127
|
+
sims: 4
|
|
128
|
+
defaults:
|
|
129
|
+
dryRun: true
|
|
130
|
+
open: true
|
|
104
131
|
`
|
|
105
132
|
},
|
|
106
133
|
{
|
|
@@ -236,6 +263,8 @@ export const runtimeDirectories = [
|
|
|
236
263
|
{ path: ".mimetic/cache", plane: "runtime" },
|
|
237
264
|
{ path: ".mimetic/tmp", plane: "runtime" },
|
|
238
265
|
{ path: ".mimetic/logs", plane: "runtime" },
|
|
266
|
+
{ path: ".mimetic/labs", plane: "runtime" },
|
|
267
|
+
{ path: ".mimetic/local/labs", plane: "runtime" },
|
|
239
268
|
{ path: ".mimetic/local/personas", plane: "runtime" },
|
|
240
269
|
{ path: ".mimetic/local/policies", plane: "runtime" },
|
|
241
270
|
{ path: ".mimetic/secrets", plane: "runtime" }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-templates.js","sourceRoot":"","sources":["../src/init-templates.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,YAAY,GAAkB;IACzC;QACE,IAAI,EAAE,mBAAmB;QACzB,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE
|
|
1
|
+
{"version":3,"file":"init-templates.js","sourceRoot":"","sources":["../src/init-templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
export declare const LAB_APP_RUNNER_PLAN_SCHEMA = "mimetic.lab-app-runner-plan.v1";
|
|
2
|
+
export type LabAppFramework = "next" | "vite" | "generic" | "none";
|
|
3
|
+
export type LabPackageManager = "npm" | "pnpm" | "yarn" | "bun";
|
|
4
|
+
export type LabInstallMode = "run" | "skip" | "when-missing";
|
|
5
|
+
export type LabSurfaceKind = "desktop" | "mobile";
|
|
6
|
+
export interface LabPackageJsonMetadata {
|
|
7
|
+
dependencies?: Record<string, string>;
|
|
8
|
+
devDependencies?: Record<string, string>;
|
|
9
|
+
packageManager?: string;
|
|
10
|
+
scripts?: Record<string, string>;
|
|
11
|
+
}
|
|
12
|
+
export interface LabAppRunnerMetadata {
|
|
13
|
+
dependencies?: Record<string, string>;
|
|
14
|
+
devDependencies?: Record<string, string>;
|
|
15
|
+
hasNodeModules?: boolean;
|
|
16
|
+
lockfiles?: string[];
|
|
17
|
+
packageJson?: LabPackageJsonMetadata;
|
|
18
|
+
packageManager?: string;
|
|
19
|
+
preferredPort?: number;
|
|
20
|
+
readinessIntervalMs?: number;
|
|
21
|
+
readinessTimeoutMs?: number;
|
|
22
|
+
scripts?: Record<string, string>;
|
|
23
|
+
}
|
|
24
|
+
export interface LabAppRunnerInstallPlan {
|
|
25
|
+
command: string;
|
|
26
|
+
mode: LabInstallMode;
|
|
27
|
+
reason: string;
|
|
28
|
+
}
|
|
29
|
+
export interface LabAppRunnerDevServerPlan {
|
|
30
|
+
command: string;
|
|
31
|
+
framework: Exclude<LabAppFramework, "none">;
|
|
32
|
+
port: number;
|
|
33
|
+
reason: string;
|
|
34
|
+
scriptName: string;
|
|
35
|
+
url: string;
|
|
36
|
+
}
|
|
37
|
+
export interface LabAppRunnerReadinessPlan {
|
|
38
|
+
command: string;
|
|
39
|
+
intervalMs: number;
|
|
40
|
+
timeoutMs: number;
|
|
41
|
+
url: string;
|
|
42
|
+
}
|
|
43
|
+
export interface LabAppSurface {
|
|
44
|
+
command: string;
|
|
45
|
+
id: LabSurfaceKind;
|
|
46
|
+
label: string;
|
|
47
|
+
url: string;
|
|
48
|
+
viewport: {
|
|
49
|
+
deviceScaleFactor: number;
|
|
50
|
+
height: number;
|
|
51
|
+
isMobile: boolean;
|
|
52
|
+
width: number;
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export interface LabAppRunnerShellPlan {
|
|
56
|
+
commands: string[];
|
|
57
|
+
script: string;
|
|
58
|
+
}
|
|
59
|
+
export interface LabAppRunnerPlan {
|
|
60
|
+
devServer?: LabAppRunnerDevServerPlan;
|
|
61
|
+
framework: LabAppFramework;
|
|
62
|
+
install: LabAppRunnerInstallPlan;
|
|
63
|
+
ok: boolean;
|
|
64
|
+
packageManager: LabPackageManager;
|
|
65
|
+
readiness?: LabAppRunnerReadinessPlan;
|
|
66
|
+
schema: typeof LAB_APP_RUNNER_PLAN_SCHEMA;
|
|
67
|
+
shell: LabAppRunnerShellPlan;
|
|
68
|
+
surfaces: LabAppSurface[];
|
|
69
|
+
warnings: string[];
|
|
70
|
+
}
|
|
71
|
+
export declare function buildLabAppRunnerPlan(metadata: LabAppRunnerMetadata): LabAppRunnerPlan;
|
|
72
|
+
export declare function renderLabAppRunnerShell(args: {
|
|
73
|
+
devServer?: LabAppRunnerDevServerPlan;
|
|
74
|
+
install: LabAppRunnerInstallPlan;
|
|
75
|
+
packageManager: LabPackageManager;
|
|
76
|
+
readiness?: LabAppRunnerReadinessPlan;
|
|
77
|
+
surfaces?: LabAppSurface[];
|
|
78
|
+
}): LabAppRunnerShellPlan;
|