humanish 0.0.1 → 0.15.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.
- package/AGENTS.md +77 -0
- package/CONTRIBUTING.md +39 -0
- package/LICENSE +21 -0
- package/README.md +435 -8
- package/SECURITY.md +34 -0
- package/dist/actor-contract.d.ts +107 -0
- package/dist/actor-contract.js +286 -0
- package/dist/actor-contract.js.map +1 -0
- package/dist/actor-registry.d.ts +73 -0
- package/dist/actor-registry.js +93 -0
- package/dist/actor-registry.js.map +1 -0
- package/dist/adapter-extension.d.ts +54 -0
- package/dist/adapter-extension.js +214 -0
- package/dist/adapter-extension.js.map +1 -0
- package/dist/argv.d.ts +1 -0
- package/dist/argv.js +8 -0
- package/dist/argv.js.map +1 -0
- package/dist/artifact-reference.d.ts +22 -0
- package/dist/artifact-reference.js +47 -0
- package/dist/artifact-reference.js.map +1 -0
- package/dist/browser-evidence-hygiene.d.ts +7 -0
- package/dist/browser-evidence-hygiene.js +40 -0
- package/dist/browser-evidence-hygiene.js.map +1 -0
- package/dist/claude-agent-sdk.d.ts +94 -0
- package/dist/claude-agent-sdk.js +356 -0
- package/dist/claude-agent-sdk.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +5 -0
- package/dist/cli.js.map +1 -0
- package/dist/codex-app-server-ui.d.ts +39 -0
- package/dist/codex-app-server-ui.js +327 -0
- package/dist/codex-app-server-ui.js.map +1 -0
- package/dist/codex-app-server.d.ts +141 -0
- package/dist/codex-app-server.js +747 -0
- package/dist/codex-app-server.js.map +1 -0
- package/dist/command-failure.d.ts +29 -0
- package/dist/command-failure.js +54 -0
- package/dist/command-failure.js.map +1 -0
- package/dist/computer-use-actor.d.ts +52 -0
- package/dist/computer-use-actor.js +48 -0
- package/dist/computer-use-actor.js.map +1 -0
- package/dist/computer-use.d.ts +232 -0
- package/dist/computer-use.js +615 -0
- package/dist/computer-use.js.map +1 -0
- package/dist/concurrency.d.ts +1 -0
- package/dist/concurrency.js +27 -0
- package/dist/concurrency.js.map +1 -0
- package/dist/concurrent-shared-world-lab.d.ts +115 -0
- package/dist/concurrent-shared-world-lab.js +1092 -0
- package/dist/concurrent-shared-world-lab.js.map +1 -0
- package/dist/core/git-state.d.ts +31 -0
- package/dist/core/git-state.js +142 -0
- package/dist/core/git-state.js.map +1 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.js +3 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/run-primitives.d.ts +66 -0
- package/dist/core/run-primitives.js +120 -0
- package/dist/core/run-primitives.js.map +1 -0
- package/dist/cua-actor-lab.d.ts +620 -0
- package/dist/cua-actor-lab.js +2834 -0
- package/dist/cua-actor-lab.js.map +1 -0
- package/dist/device-presets.d.ts +67 -0
- package/dist/device-presets.js +50 -0
- package/dist/device-presets.js.map +1 -0
- package/dist/e2b-desktop-executor.d.ts +101 -0
- package/dist/e2b-desktop-executor.js +309 -0
- package/dist/e2b-desktop-executor.js.map +1 -0
- package/dist/e2b-desktop-launch.d.ts +144 -0
- package/dist/e2b-desktop-launch.js +59 -0
- package/dist/e2b-desktop-launch.js.map +1 -0
- package/dist/e2b-detached.d.ts +53 -0
- package/dist/e2b-detached.js +130 -0
- package/dist/e2b-detached.js.map +1 -0
- package/dist/e2b-terminal-lab.d.ts +345 -0
- package/dist/e2b-terminal-lab.js +1467 -0
- package/dist/e2b-terminal-lab.js.map +1 -0
- 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 +51 -0
- package/dist/feedback.js +313 -0
- package/dist/feedback.js.map +1 -0
- package/dist/image-evidence.d.ts +2 -0
- package/dist/image-evidence.js +33 -0
- package/dist/image-evidence.js.map +1 -0
- package/dist/index.d.ts +63 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/init-templates.d.ts +12 -0
- package/dist/init-templates.js +369 -0
- package/dist/init-templates.js.map +1 -0
- package/dist/init.d.ts +26 -0
- package/dist/init.js +343 -0
- package/dist/init.js.map +1 -0
- 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/lab-config.d.ts +578 -0
- package/dist/lab-config.js +1751 -0
- package/dist/lab-config.js.map +1 -0
- package/dist/lab-engine.d.ts +77 -0
- package/dist/lab-engine.js +216 -0
- package/dist/lab-engine.js.map +1 -0
- package/dist/lab-preflight.d.ts +67 -0
- package/dist/lab-preflight.js +385 -0
- package/dist/lab-preflight.js.map +1 -0
- package/dist/labs.d.ts +53 -0
- package/dist/labs.js +176 -0
- package/dist/labs.js.map +1 -0
- package/dist/observer-assets.d.ts +2 -0
- package/dist/observer-assets.js +2630 -0
- package/dist/observer-assets.js.map +1 -0
- package/dist/observer-data.d.ts +63 -0
- package/dist/observer-data.js +145 -0
- package/dist/observer-data.js.map +1 -0
- package/dist/observer-static.d.ts +39 -0
- package/dist/observer-static.js +192 -0
- package/dist/observer-static.js.map +1 -0
- package/dist/observer.d.ts +46 -0
- package/dist/observer.js +353 -0
- package/dist/observer.js.map +1 -0
- package/dist/openai-responses-cu.d.ts +113 -0
- package/dist/openai-responses-cu.js +531 -0
- package/dist/openai-responses-cu.js.map +1 -0
- package/dist/oss-lab.d.ts +52 -0
- package/dist/oss-lab.js +299 -0
- package/dist/oss-lab.js.map +1 -0
- package/dist/oss-meta-lab-scoring.d.ts +15 -0
- package/dist/oss-meta-lab-scoring.js +145 -0
- package/dist/oss-meta-lab-scoring.js.map +1 -0
- package/dist/oss-meta-lab.d.ts +279 -0
- package/dist/oss-meta-lab.js +4889 -0
- package/dist/oss-meta-lab.js.map +1 -0
- package/dist/oss-remote-telemetry.d.ts +77 -0
- package/dist/oss-remote-telemetry.js +403 -0
- package/dist/oss-remote-telemetry.js.map +1 -0
- package/dist/persona.d.ts +35 -0
- package/dist/persona.js +133 -0
- package/dist/persona.js.map +1 -0
- package/dist/pi-agent-core.d.ts +77 -0
- package/dist/pi-agent-core.js +203 -0
- package/dist/pi-agent-core.js.map +1 -0
- package/dist/program.d.ts +54 -0
- package/dist/program.js +2347 -0
- package/dist/program.js.map +1 -0
- package/dist/redaction.d.ts +90 -0
- package/dist/redaction.js +292 -0
- package/dist/redaction.js.map +1 -0
- package/dist/run.d.ts +784 -0
- package/dist/run.js +4555 -0
- package/dist/run.js.map +1 -0
- package/dist/scripted-browser-actor.d.ts +294 -0
- package/dist/scripted-browser-actor.js +1286 -0
- package/dist/scripted-browser-actor.js.map +1 -0
- package/dist/scripted-browser-lab.d.ts +107 -0
- package/dist/scripted-browser-lab.js +738 -0
- package/dist/scripted-browser-lab.js.map +1 -0
- package/dist/shared-world-lab.d.ts +208 -0
- package/dist/shared-world-lab.js +1048 -0
- package/dist/shared-world-lab.js.map +1 -0
- package/dist/source-archive.d.ts +82 -0
- package/dist/source-archive.js +365 -0
- package/dist/source-archive.js.map +1 -0
- package/dist/stop-conditions.d.ts +26 -0
- package/dist/stop-conditions.js +66 -0
- package/dist/stop-conditions.js.map +1 -0
- package/dist/terminal-agent-actor.d.ts +36 -0
- package/dist/terminal-agent-actor.js +23 -0
- package/dist/terminal-agent-actor.js.map +1 -0
- package/docs/architecture/actor-contract.md +431 -0
- package/docs/architecture/github-feedback-loop.md +189 -0
- package/docs/architecture/local-codex-tui-actor.md +213 -0
- package/docs/architecture/observer.md +118 -0
- package/docs/architecture/oss-lab-poc.md +242 -0
- package/docs/architecture/project-layout.md +166 -0
- package/docs/architecture/state-driven-executor.md +203 -0
- package/docs/architecture/terminal-product-lane.md +148 -0
- package/docs/contracts/adapter-fixtures.md +80 -0
- package/docs/contracts/core.md +71 -0
- package/docs/contracts/feedback.md +145 -0
- package/docs/contracts/policy.md +305 -0
- package/docs/contracts/run-bundle.md +358 -0
- package/docs/contracts/schemas.md +984 -0
- package/docs/goals/current.md +409 -0
- package/docs/principles/invariants-and-defaults.md +135 -0
- package/docs/principles/self-driving-harness.md +129 -0
- package/docs/product/open-source-install-experience.md +229 -0
- package/docs/ramp/README.md +200 -0
- package/docs/release/open-source-readiness.md +208 -0
- package/docs/release/public-readiness-standard.md +205 -0
- package/docs/roadmap/world-class-open-source-v0.md +311 -0
- package/package.json +102 -8
- package/skills/humanish/SKILL.md +244 -0
- package/skills/humanish/agents/openai.yaml +7 -0
- package/index.js +0 -1
package/dist/oss-lab.js
ADDED
|
@@ -0,0 +1,299 @@
|
|
|
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 = "humanish.oss-lab-result.v1";
|
|
11
|
+
export const DEFAULT_OSS_REPOS = [
|
|
12
|
+
"CorentinTh/it-tools",
|
|
13
|
+
"drawdb-io/drawdb",
|
|
14
|
+
"maciekt07/TodoApp",
|
|
15
|
+
"lissy93/dashy"
|
|
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, ".humanish", "lab", "oss", runId);
|
|
43
|
+
const sandboxPath = path.join(cwd, ".humanish", "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) {
|
|
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: "HUMANISH_INVALID_OSS_LIMIT",
|
|
56
|
+
message: "--limit must be a positive integer."
|
|
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: "HUMANISH_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 humanishRunId = `${args.runId}-${repoSlug(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("humanish 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("humanish 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("humanish watch evidence", async () => {
|
|
173
|
+
const runResult = await runDryRun({
|
|
174
|
+
cwd: clonePath,
|
|
175
|
+
dryRun: true,
|
|
176
|
+
runId: humanishRunId,
|
|
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("humanish verify", async () => {
|
|
195
|
+
const result = await verifyRun(clonePath, humanishRunId);
|
|
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
|
+
humanishRunId,
|
|
211
|
+
observerPath: `.humanish/runs/${humanishRunId}/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
|
+
/** Repo slug for run-id suffixes/artifact tokens: lowercased, non-alnum -> "-", trimmed. */
|
|
268
|
+
export function repoSlug(repo) {
|
|
269
|
+
return repo.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
|
|
270
|
+
}
|
|
271
|
+
function relativeToCwd(cwd, absolutePath) {
|
|
272
|
+
const relative = path.relative(cwd, absolutePath);
|
|
273
|
+
return relative.length === 0 ? "." : relative;
|
|
274
|
+
}
|
|
275
|
+
function renderOssLabMarkdown(result) {
|
|
276
|
+
return [
|
|
277
|
+
"# OSS Lab Report",
|
|
278
|
+
"",
|
|
279
|
+
`Run: \`${result.runId}\``,
|
|
280
|
+
`Started: ${result.startedAt}`,
|
|
281
|
+
`Completed: ${result.completedAt}`,
|
|
282
|
+
`Sandbox: ${result.cleanup.kept ? result.sandboxPath : "removed"}`,
|
|
283
|
+
"",
|
|
284
|
+
"| Repo | Result | Steps | Changed files |",
|
|
285
|
+
"| --- | --- | --- | --- |",
|
|
286
|
+
...result.repos.map((repo) => {
|
|
287
|
+
const steps = repo.steps
|
|
288
|
+
.map((step) => `${step.ok ? "ok" : "fail"} ${step.name}`)
|
|
289
|
+
.join("<br>");
|
|
290
|
+
const changed = repo.changedFiles.length > 0
|
|
291
|
+
? repo.changedFiles.map((file) => `\`${file}\``).join("<br>")
|
|
292
|
+
: "none";
|
|
293
|
+
return `| \`${repo.repo}\` | ${repo.ok ? "pass" : "fail"} | ${steps} | ${changed} |`;
|
|
294
|
+
}),
|
|
295
|
+
"",
|
|
296
|
+
"All clones are disposable public OSS trials. Do not commit cloned target changes."
|
|
297
|
+
].join("\n") + "\n";
|
|
298
|
+
}
|
|
299
|
+
//# 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,15 @@
|
|
|
1
|
+
import type { RunMeaningfulUseScore, RunSetupQualitySnapshot } from "./run.js";
|
|
2
|
+
export interface OssMetaMeaningfulUseInput {
|
|
3
|
+
actorLastMessageTail?: string;
|
|
4
|
+
actorLogTail?: string;
|
|
5
|
+
actorRequired: boolean;
|
|
6
|
+
actorStatus?: "not_started" | "running" | "passed" | "failed" | "blocked" | "timed_out" | "suspended" | "unknown";
|
|
7
|
+
appStatus?: "not_started" | "running" | "blocked" | "failed" | "missing" | "unknown";
|
|
8
|
+
appUrl?: string;
|
|
9
|
+
nestedObserverPresent?: boolean;
|
|
10
|
+
nestedVerifyPassed?: boolean;
|
|
11
|
+
setupQuality?: RunSetupQualitySnapshot;
|
|
12
|
+
status: "running" | "passed" | "failed" | "blocked" | "timed_out";
|
|
13
|
+
visualStatus?: "not_started" | "visible" | "blocked" | "unknown";
|
|
14
|
+
}
|
|
15
|
+
export declare function scoreOssMetaMeaningfulUse(input: OssMetaMeaningfulUseInput): RunMeaningfulUseScore;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
const SCORE = {
|
|
2
|
+
actor: 15,
|
|
3
|
+
feedback: 25,
|
|
4
|
+
filesystem: 10,
|
|
5
|
+
nested: 20,
|
|
6
|
+
product: 15,
|
|
7
|
+
setup: 15
|
|
8
|
+
};
|
|
9
|
+
export function scoreOssMetaMeaningfulUse(input) {
|
|
10
|
+
const hardFailures = [];
|
|
11
|
+
const components = [
|
|
12
|
+
scoreSetupCorrectness(input.setupQuality),
|
|
13
|
+
scoreFilesystemEvidence(input.setupQuality),
|
|
14
|
+
scoreNestedHumanishEvidence(input, hardFailures),
|
|
15
|
+
scoreActorActivity(input, hardFailures),
|
|
16
|
+
scoreProductSurface(input, hardFailures),
|
|
17
|
+
scoreFeedbackQuality(input)
|
|
18
|
+
];
|
|
19
|
+
if (input.status === "failed") {
|
|
20
|
+
hardFailures.push("Remote bootstrap failed.");
|
|
21
|
+
}
|
|
22
|
+
else if (input.status === "timed_out") {
|
|
23
|
+
hardFailures.push("Remote bootstrap timed out.");
|
|
24
|
+
}
|
|
25
|
+
const score = Math.max(0, Math.min(100, Math.round(components.reduce((total, component) => total + component.score, 0))));
|
|
26
|
+
const allComponentsPassed = components.every((component) => component.status === "pass");
|
|
27
|
+
const status = hardFailures.length > 0 || score < 45
|
|
28
|
+
? "fail"
|
|
29
|
+
: score >= 80 && allComponentsPassed
|
|
30
|
+
? "pass"
|
|
31
|
+
: "partial";
|
|
32
|
+
return {
|
|
33
|
+
schema: "humanish.meaningful-use-score.v1",
|
|
34
|
+
status,
|
|
35
|
+
score,
|
|
36
|
+
summary: meaningfulUseSummary(status, score, hardFailures, components),
|
|
37
|
+
hardFailures,
|
|
38
|
+
components
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function scoreSetupCorrectness(setupQuality) {
|
|
42
|
+
if (!setupQuality) {
|
|
43
|
+
return component("setup-correctness", "Setup correctness", "fail", 0, "No setup-quality snapshot was captured.");
|
|
44
|
+
}
|
|
45
|
+
const total = setupQuality.checks.length;
|
|
46
|
+
const passed = setupQuality.checks.filter((check) => check.ok).length;
|
|
47
|
+
if (setupQuality.status === "passed" && total > 0 && passed === total) {
|
|
48
|
+
return component("setup-correctness", "Setup correctness", "pass", SCORE.setup, `All ${total} setup checks passed.`);
|
|
49
|
+
}
|
|
50
|
+
if (passed > 0) {
|
|
51
|
+
return component("setup-correctness", "Setup correctness", "partial", 8, `${passed}/${Math.max(total, 1)} setup checks passed.`);
|
|
52
|
+
}
|
|
53
|
+
return component("setup-correctness", "Setup correctness", "fail", 0, "No setup checks passed.");
|
|
54
|
+
}
|
|
55
|
+
function scoreFilesystemEvidence(setupQuality) {
|
|
56
|
+
if (!setupQuality) {
|
|
57
|
+
return component("filesystem-evidence", "Filesystem evidence", "fail", 0, "No filesystem setup evidence was captured.");
|
|
58
|
+
}
|
|
59
|
+
const treeCount = setupQuality.tree.length;
|
|
60
|
+
const previewCount = setupQuality.previews.length;
|
|
61
|
+
const hasHumanishSource = setupQuality.tree.some((entry) => entry.path === "humanish" || entry.path.startsWith("humanish/"));
|
|
62
|
+
const previewsSuppressed = setupQuality.redaction.rawPreviews === "suppressed";
|
|
63
|
+
if (treeCount >= 3 && hasHumanishSource && (previewCount > 0 || previewsSuppressed)) {
|
|
64
|
+
return component("filesystem-evidence", "Filesystem evidence", "pass", SCORE.filesystem, previewsSuppressed
|
|
65
|
+
? `Captured ${treeCount} safe tree entries; previews intentionally suppressed by redaction.`
|
|
66
|
+
: `Captured ${treeCount} safe tree entries and ${previewCount} allowlisted preview(s).`);
|
|
67
|
+
}
|
|
68
|
+
if (treeCount > 0) {
|
|
69
|
+
return component("filesystem-evidence", "Filesystem evidence", "partial", 8, `Captured ${treeCount} safe tree entr${treeCount === 1 ? "y" : "ies"}, but Humanish setup evidence is thin.`);
|
|
70
|
+
}
|
|
71
|
+
return component("filesystem-evidence", "Filesystem evidence", "fail", 0, "Filesystem tree evidence is empty.");
|
|
72
|
+
}
|
|
73
|
+
function scoreNestedHumanishEvidence(input, hardFailures) {
|
|
74
|
+
if (input.nestedVerifyPassed === true && input.nestedObserverPresent === true) {
|
|
75
|
+
return component("nested-humanish-evidence", "Nested Humanish evidence", "pass", SCORE.nested, "Nested verify passed and the nested Observer is present.");
|
|
76
|
+
}
|
|
77
|
+
if (input.status !== "running") {
|
|
78
|
+
if (input.nestedVerifyPassed === false)
|
|
79
|
+
hardFailures.push("Nested Humanish verification failed.");
|
|
80
|
+
if (input.nestedObserverPresent === false)
|
|
81
|
+
hardFailures.push("Nested Humanish Observer was missing.");
|
|
82
|
+
}
|
|
83
|
+
if (input.nestedVerifyPassed === true || input.nestedObserverPresent === true) {
|
|
84
|
+
return component("nested-humanish-evidence", "Nested Humanish evidence", "partial", 10, "Only one of nested verify or nested Observer presence was proven.");
|
|
85
|
+
}
|
|
86
|
+
return component("nested-humanish-evidence", "Nested Humanish evidence", input.status === "running" ? "partial" : "fail", input.status === "running" ? 5 : 0, "Nested Humanish proof is not complete.");
|
|
87
|
+
}
|
|
88
|
+
function scoreActorActivity(input, hardFailures) {
|
|
89
|
+
const actorText = `${input.actorLastMessageTail ?? ""}\n${input.actorLogTail ?? ""}`.trim();
|
|
90
|
+
if (input.actorStatus === "passed") {
|
|
91
|
+
return component("actor-activity", "Actor activity", "pass", SCORE.actor, actorText ? "Actor reached passed with public-safe evidence." : "Actor reached passed.");
|
|
92
|
+
}
|
|
93
|
+
if (input.actorRequired && input.status !== "running") {
|
|
94
|
+
hardFailures.push(`Required actor did not pass${input.actorStatus ? ` (${input.actorStatus})` : ""}.`);
|
|
95
|
+
}
|
|
96
|
+
if (input.actorStatus === "running" || input.actorStatus === "suspended") {
|
|
97
|
+
return component("actor-activity", "Actor activity", "partial", input.actorRequired ? 6 : 10, `Actor is ${input.actorStatus}; evidence may be incomplete.`);
|
|
98
|
+
}
|
|
99
|
+
if (actorText) {
|
|
100
|
+
return component("actor-activity", "Actor activity", "partial", 7, "Actor emitted public-safe evidence but no passed terminal state.");
|
|
101
|
+
}
|
|
102
|
+
return component("actor-activity", "Actor activity", input.actorRequired ? "fail" : "partial", input.actorRequired ? 0 : 5, "No actor completion evidence was captured.");
|
|
103
|
+
}
|
|
104
|
+
function scoreProductSurface(input, hardFailures) {
|
|
105
|
+
if (input.appStatus === "running" && input.visualStatus === "visible" && Boolean(input.appUrl)) {
|
|
106
|
+
return component("product-surface", "Product surface", "pass", SCORE.product, "Target app URL was running and visible in the headed desktop.");
|
|
107
|
+
}
|
|
108
|
+
if (input.status === "passed" && (input.appStatus !== "running" || input.visualStatus !== "visible")) {
|
|
109
|
+
hardFailures.push("Completed lane did not prove a running, visible product surface.");
|
|
110
|
+
}
|
|
111
|
+
if (input.appStatus === "running" || input.visualStatus === "visible") {
|
|
112
|
+
return component("product-surface", "Product surface", "partial", 8, "Target app or visual surface was partially proven.");
|
|
113
|
+
}
|
|
114
|
+
return component("product-surface", "Product surface", input.status === "running" ? "partial" : "fail", input.status === "running" ? 4 : 0, "Target app surface was not proven running and visible.");
|
|
115
|
+
}
|
|
116
|
+
function scoreFeedbackQuality(input) {
|
|
117
|
+
const studyQuality = input.setupQuality?.studyQuality;
|
|
118
|
+
if (!studyQuality) {
|
|
119
|
+
return component("feedback-quality", "Feedback quality", "fail", 0, "No study-quality rubric was captured.");
|
|
120
|
+
}
|
|
121
|
+
switch (studyQuality.rating) {
|
|
122
|
+
case "high_leverage":
|
|
123
|
+
return component("feedback-quality", "Feedback quality", "pass", SCORE.feedback, studyQuality.summary);
|
|
124
|
+
case "useful":
|
|
125
|
+
return component("feedback-quality", "Feedback quality", "pass", 20, studyQuality.summary);
|
|
126
|
+
case "ceremonial":
|
|
127
|
+
return component("feedback-quality", "Feedback quality", "partial", 8, studyQuality.summary);
|
|
128
|
+
case "none":
|
|
129
|
+
return component("feedback-quality", "Feedback quality", "fail", 0, studyQuality.summary);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
function component(id, label, status, score, detail) {
|
|
133
|
+
return { id, label, status, score, detail };
|
|
134
|
+
}
|
|
135
|
+
function meaningfulUseSummary(status, score, hardFailures, components) {
|
|
136
|
+
if (hardFailures.length > 0) {
|
|
137
|
+
return `Meaningful-use ${status} (${score}/100): ${hardFailures[0]}`;
|
|
138
|
+
}
|
|
139
|
+
const weak = components.filter((entry) => entry.status !== "pass").map((entry) => entry.label.toLowerCase());
|
|
140
|
+
if (weak.length === 0) {
|
|
141
|
+
return `Meaningful-use pass (${score}/100): setup, evidence, actor, product surface, and feedback signals are all strong.`;
|
|
142
|
+
}
|
|
143
|
+
return `Meaningful-use ${status} (${score}/100): needs stronger ${weak.slice(0, 3).join(", ")}${weak.length > 3 ? ", ..." : ""}.`;
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=oss-meta-lab-scoring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oss-meta-lab-scoring.js","sourceRoot":"","sources":["../src/oss-meta-lab-scoring.ts"],"names":[],"mappings":"AAqBA,MAAM,KAAK,GAAG;IACZ,KAAK,EAAE,EAAE;IACT,QAAQ,EAAE,EAAE;IACZ,UAAU,EAAE,EAAE;IACd,MAAM,EAAE,EAAE;IACV,OAAO,EAAE,EAAE;IACX,KAAK,EAAE,EAAE;CACD,CAAC;AAEX,MAAM,UAAU,yBAAyB,CAAC,KAAgC;IACxE,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,UAAU,GAAgB;QAC9B,qBAAqB,CAAC,KAAK,CAAC,YAAY,CAAC;QACzC,uBAAuB,CAAC,KAAK,CAAC,YAAY,CAAC;QAC3C,2BAA2B,CAAC,KAAK,EAAE,YAAY,CAAC;QAChD,kBAAkB,CAAC,KAAK,EAAE,YAAY,CAAC;QACvC,mBAAmB,CAAC,KAAK,EAAE,YAAY,CAAC;QACxC,oBAAoB,CAAC,KAAK,CAAC;KAC5B,CAAC;IAEF,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC9B,YAAY,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAChD,CAAC;SAAM,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QACxC,YAAY,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAChD,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CACpE,CAAC,CAAC,CAAC;IACJ,MAAM,mBAAmB,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IACzF,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE;QAClD,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,KAAK,IAAI,EAAE,IAAI,mBAAmB;YAClC,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,SAAS,CAAC;IAEhB,OAAO;QACL,MAAM,EAAE,kCAAkC;QAC1C,MAAM;QACN,KAAK;QACL,OAAO,EAAE,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,CAAC;QACtE,YAAY;QACZ,UAAU;KACX,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,YAAiD;IAC9E,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,SAAS,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC,EAAE,yCAAyC,CAAC,CAAC;IACnH,CAAC;IAED,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC;IACzC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;IACtE,IAAI,YAAY,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,GAAG,CAAC,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACtE,OAAO,SAAS,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,KAAK,uBAAuB,CAAC,CAAC;IACvH,CAAC;IACD,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,OAAO,SAAS,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,uBAAuB,CAAC,CAAC;IACnI,CAAC;IACD,OAAO,SAAS,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC,EAAE,yBAAyB,CAAC,CAAC;AACnG,CAAC;AAED,SAAS,uBAAuB,CAAC,YAAiD;IAChF,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,SAAS,CAAC,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,EAAE,CAAC,EAAE,4CAA4C,CAAC,CAAC;IAC1H,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;IAC3C,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;IAClD,MAAM,iBAAiB,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;IAC7H,MAAM,kBAAkB,GAAG,YAAY,CAAC,SAAS,CAAC,WAAW,KAAK,YAAY,CAAC;IAC/E,IAAI,SAAS,IAAI,CAAC,IAAI,iBAAiB,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,kBAAkB,CAAC,EAAE,CAAC;QACpF,OAAO,SAAS,CACd,qBAAqB,EACrB,qBAAqB,EACrB,MAAM,EACN,KAAK,CAAC,UAAU,EAChB,kBAAkB;YAChB,CAAC,CAAC,YAAY,SAAS,qEAAqE;YAC5F,CAAC,CAAC,YAAY,SAAS,0BAA0B,YAAY,0BAA0B,CAC1F,CAAC;IACJ,CAAC;IACD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,OAAO,SAAS,CAAC,qBAAqB,EAAE,qBAAqB,EAAE,SAAS,EAAE,CAAC,EAAE,YAAY,SAAS,kBAAkB,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,wCAAwC,CAAC,CAAC;IAC7L,CAAC;IACD,OAAO,SAAS,CAAC,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,EAAE,CAAC,EAAE,oCAAoC,CAAC,CAAC;AAClH,CAAC;AAED,SAAS,2BAA2B,CAAC,KAAgC,EAAE,YAAsB;IAC3F,IAAI,KAAK,CAAC,kBAAkB,KAAK,IAAI,IAAI,KAAK,CAAC,qBAAqB,KAAK,IAAI,EAAE,CAAC;QAC9E,OAAO,SAAS,CAAC,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,0DAA0D,CAAC,CAAC;IAC7J,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC,kBAAkB,KAAK,KAAK;YAAE,YAAY,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QAClG,IAAI,KAAK,CAAC,qBAAqB,KAAK,KAAK;YAAE,YAAY,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IACxG,CAAC;IAED,IAAI,KAAK,CAAC,kBAAkB,KAAK,IAAI,IAAI,KAAK,CAAC,qBAAqB,KAAK,IAAI,EAAE,CAAC;QAC9E,OAAO,SAAS,CAAC,0BAA0B,EAAE,0BAA0B,EAAE,SAAS,EAAE,EAAE,EAAE,mEAAmE,CAAC,CAAC;IAC/J,CAAC;IACD,OAAO,SAAS,CAAC,0BAA0B,EAAE,0BAA0B,EAAE,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,wCAAwC,CAAC,CAAC;AAC1M,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAgC,EAAE,YAAsB;IAClF,MAAM,SAAS,GAAG,GAAG,KAAK,CAAC,oBAAoB,IAAI,EAAE,KAAK,KAAK,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;IAC5F,IAAI,KAAK,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QACnC,OAAO,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,iDAAiD,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC;IACrK,CAAC;IAED,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACtD,YAAY,CAAC,IAAI,CAAC,8BAA8B,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACzG,CAAC;IAED,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,KAAK,CAAC,WAAW,KAAK,WAAW,EAAE,CAAC;QACzE,OAAO,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,YAAY,KAAK,CAAC,WAAW,+BAA+B,CAAC,CAAC;IAC9J,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC,EAAE,kEAAkE,CAAC,CAAC;IACzI,CAAC;IACD,OAAO,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,4CAA4C,CAAC,CAAC;AAC5K,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAgC,EAAE,YAAsB;IACnF,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/F,OAAO,SAAS,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,+DAA+D,CAAC,CAAC;IACjJ,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,EAAE,CAAC;QACrG,YAAY,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;IACxF,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACtE,OAAO,SAAS,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC,EAAE,oDAAoD,CAAC,CAAC;IAC7H,CAAC;IACD,OAAO,SAAS,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,wDAAwD,CAAC,CAAC;AACxM,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAgC;IAC5D,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,EAAE,YAAY,CAAC;IACtD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,EAAE,uCAAuC,CAAC,CAAC;IAC/G,CAAC;IAED,QAAQ,YAAY,CAAC,MAAM,EAAE,CAAC;QAC5B,KAAK,eAAe;YAClB,OAAO,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QACzG,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAC7F,KAAK,YAAY;YACf,OAAO,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,SAAS,EAAE,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAC/F,KAAK,MAAM;YACT,OAAO,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IAC9F,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAChB,EAAmB,EACnB,KAAa,EACb,MAA2B,EAC3B,KAAa,EACb,MAAc;IAEd,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC9C,CAAC;AAED,SAAS,oBAAoB,CAC3B,MAAuC,EACvC,KAAa,EACb,YAAsB,EACtB,UAAuB;IAEvB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,kBAAkB,MAAM,KAAK,KAAK,UAAU,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,CAAC;IACD,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7G,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,wBAAwB,KAAK,sFAAsF,CAAC;IAC7H,CAAC;IACD,OAAO,kBAAkB,MAAM,KAAK,KAAK,yBAAyB,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;AACpI,CAAC"}
|