melete-ai 0.88.2
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/LICENSE +21 -0
- package/README.md +72 -0
- package/bin/melete-server.mjs +345 -0
- package/bin/melete.mjs +165 -0
- package/dist/achievability.d.ts +38 -0
- package/dist/achievability.d.ts.map +1 -0
- package/dist/achievability.js +135 -0
- package/dist/achievability.js.map +1 -0
- package/dist/aegis.d.ts +52 -0
- package/dist/aegis.d.ts.map +1 -0
- package/dist/aegis.js +191 -0
- package/dist/aegis.js.map +1 -0
- package/dist/arms.d.ts +70 -0
- package/dist/arms.d.ts.map +1 -0
- package/dist/arms.js +399 -0
- package/dist/arms.js.map +1 -0
- package/dist/batch.d.ts +30 -0
- package/dist/batch.d.ts.map +1 -0
- package/dist/batch.js +151 -0
- package/dist/batch.js.map +1 -0
- package/dist/bench.d.ts +49 -0
- package/dist/bench.d.ts.map +1 -0
- package/dist/bench.js +124 -0
- package/dist/bench.js.map +1 -0
- package/dist/certify.d.ts +48 -0
- package/dist/certify.d.ts.map +1 -0
- package/dist/certify.js +125 -0
- package/dist/certify.js.map +1 -0
- package/dist/cliff.d.ts +41 -0
- package/dist/cliff.d.ts.map +1 -0
- package/dist/cliff.js +132 -0
- package/dist/cliff.js.map +1 -0
- package/dist/confidence.d.ts +38 -0
- package/dist/confidence.d.ts.map +1 -0
- package/dist/confidence.js +98 -0
- package/dist/confidence.js.map +1 -0
- package/dist/constrained.d.ts +59 -0
- package/dist/constrained.d.ts.map +1 -0
- package/dist/constrained.js +191 -0
- package/dist/constrained.js.map +1 -0
- package/dist/cortex.d.ts +56 -0
- package/dist/cortex.d.ts.map +1 -0
- package/dist/cortex.js +81 -0
- package/dist/cortex.js.map +1 -0
- package/dist/costaware.d.ts +49 -0
- package/dist/costaware.d.ts.map +1 -0
- package/dist/costaware.js +185 -0
- package/dist/costaware.js.map +1 -0
- package/dist/drift.d.ts +36 -0
- package/dist/drift.d.ts.map +1 -0
- package/dist/drift.js +157 -0
- package/dist/drift.js.map +1 -0
- package/dist/efficiency.d.ts +49 -0
- package/dist/efficiency.d.ts.map +1 -0
- package/dist/efficiency.js +143 -0
- package/dist/efficiency.js.map +1 -0
- package/dist/engine.d.ts +64 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +130 -0
- package/dist/engine.js.map +1 -0
- package/dist/federated.d.ts +38 -0
- package/dist/federated.d.ts.map +1 -0
- package/dist/federated.js +121 -0
- package/dist/federated.js.map +1 -0
- package/dist/frontier.d.ts +51 -0
- package/dist/frontier.d.ts.map +1 -0
- package/dist/frontier.js +117 -0
- package/dist/frontier.js.map +1 -0
- package/dist/guardian.d.ts +46 -0
- package/dist/guardian.d.ts.map +1 -0
- package/dist/guardian.js +101 -0
- package/dist/guardian.js.map +1 -0
- package/dist/index.d.ts +90 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +189 -0
- package/dist/index.js.map +1 -0
- package/dist/interaction.d.ts +44 -0
- package/dist/interaction.d.ts.map +1 -0
- package/dist/interaction.js +167 -0
- package/dist/interaction.js.map +1 -0
- package/dist/interactive.d.ts +25 -0
- package/dist/interactive.d.ts.map +1 -0
- package/dist/interactive.js +75 -0
- package/dist/interactive.js.map +1 -0
- package/dist/inverse.d.ts +44 -0
- package/dist/inverse.d.ts.map +1 -0
- package/dist/inverse.js +141 -0
- package/dist/inverse.js.map +1 -0
- package/dist/ipshield.d.ts +62 -0
- package/dist/ipshield.d.ts.map +1 -0
- package/dist/ipshield.js +104 -0
- package/dist/ipshield.js.map +1 -0
- package/dist/journalist.d.ts +56 -0
- package/dist/journalist.d.ts.map +1 -0
- package/dist/journalist.js +132 -0
- package/dist/journalist.js.map +1 -0
- package/dist/lineage.d.ts +43 -0
- package/dist/lineage.d.ts.map +1 -0
- package/dist/lineage.js +112 -0
- package/dist/lineage.js.map +1 -0
- package/dist/metabrain.d.ts +59 -0
- package/dist/metabrain.d.ts.map +1 -0
- package/dist/metabrain.js +215 -0
- package/dist/metabrain.js.map +1 -0
- package/dist/mixedspace.d.ts +61 -0
- package/dist/mixedspace.d.ts.map +1 -0
- package/dist/mixedspace.js +267 -0
- package/dist/mixedspace.js.map +1 -0
- package/dist/multiobjective.d.ts +42 -0
- package/dist/multiobjective.d.ts.map +1 -0
- package/dist/multiobjective.js +123 -0
- package/dist/multiobjective.js.map +1 -0
- package/dist/noise.d.ts +45 -0
- package/dist/noise.d.ts.map +1 -0
- package/dist/noise.js +148 -0
- package/dist/noise.js.map +1 -0
- package/dist/noiserobust.d.ts +71 -0
- package/dist/noiserobust.d.ts.map +1 -0
- package/dist/noiserobust.js +215 -0
- package/dist/noiserobust.js.map +1 -0
- package/dist/oracle.d.ts +63 -0
- package/dist/oracle.d.ts.map +1 -0
- package/dist/oracle.js +106 -0
- package/dist/oracle.js.map +1 -0
- package/dist/poopt.d.ts +79 -0
- package/dist/poopt.d.ts.map +1 -0
- package/dist/poopt.js +148 -0
- package/dist/poopt.js.map +1 -0
- package/dist/portfolio.d.ts +51 -0
- package/dist/portfolio.d.ts.map +1 -0
- package/dist/portfolio.js +132 -0
- package/dist/portfolio.js.map +1 -0
- package/dist/prescription.d.ts +57 -0
- package/dist/prescription.d.ts.map +1 -0
- package/dist/prescription.js +131 -0
- package/dist/prescription.js.map +1 -0
- package/dist/prime.d.ts +85 -0
- package/dist/prime.d.ts.map +1 -0
- package/dist/prime.js +157 -0
- package/dist/prime.js.map +1 -0
- package/dist/provenance.d.ts +77 -0
- package/dist/provenance.d.ts.map +1 -0
- package/dist/provenance.js +155 -0
- package/dist/provenance.js.map +1 -0
- package/dist/rashomon.d.ts +40 -0
- package/dist/rashomon.d.ts.map +1 -0
- package/dist/rashomon.js +93 -0
- package/dist/rashomon.js.map +1 -0
- package/dist/reliability.d.ts +79 -0
- package/dist/reliability.d.ts.map +1 -0
- package/dist/reliability.js +197 -0
- package/dist/reliability.js.map +1 -0
- package/dist/replay.d.ts +62 -0
- package/dist/replay.d.ts.map +1 -0
- package/dist/replay.js +146 -0
- package/dist/replay.js.map +1 -0
- package/dist/replicate.d.ts +72 -0
- package/dist/replicate.d.ts.map +1 -0
- package/dist/replicate.js +103 -0
- package/dist/replicate.js.map +1 -0
- package/dist/resonance.d.ts +32 -0
- package/dist/resonance.d.ts.map +1 -0
- package/dist/resonance.js +190 -0
- package/dist/resonance.js.map +1 -0
- package/dist/sensitivity.d.ts +44 -0
- package/dist/sensitivity.d.ts.map +1 -0
- package/dist/sensitivity.js +109 -0
- package/dist/sensitivity.js.map +1 -0
- package/dist/server.d.ts +26 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +1410 -0
- package/dist/server.js.map +1 -0
- package/dist/shape.d.ts +37 -0
- package/dist/shape.d.ts.map +1 -0
- package/dist/shape.js +170 -0
- package/dist/shape.js.map +1 -0
- package/dist/sloppiness.d.ts +44 -0
- package/dist/sloppiness.d.ts.map +1 -0
- package/dist/sloppiness.js +194 -0
- package/dist/sloppiness.js.map +1 -0
- package/dist/sovereign.d.ts +77 -0
- package/dist/sovereign.d.ts.map +1 -0
- package/dist/sovereign.js +144 -0
- package/dist/sovereign.js.map +1 -0
- package/dist/space.d.ts +38 -0
- package/dist/space.d.ts.map +1 -0
- package/dist/space.js +107 -0
- package/dist/space.js.map +1 -0
- package/dist/surprise.d.ts +43 -0
- package/dist/surprise.d.ts.map +1 -0
- package/dist/surprise.js +123 -0
- package/dist/surprise.js.map +1 -0
- package/dist/territory.d.ts +43 -0
- package/dist/territory.d.ts.map +1 -0
- package/dist/territory.js +102 -0
- package/dist/territory.js.map +1 -0
- package/dist/trace.d.ts +58 -0
- package/dist/trace.d.ts.map +1 -0
- package/dist/trace.js +0 -0
- package/dist/trace.js.map +1 -0
- package/dist/transfer.d.ts +46 -0
- package/dist/transfer.d.ts.map +1 -0
- package/dist/transfer.js +112 -0
- package/dist/transfer.js.map +1 -0
- package/dist/twin.d.ts +41 -0
- package/dist/twin.d.ts.map +1 -0
- package/dist/twin.js +116 -0
- package/dist/twin.js.map +1 -0
- package/examples/train.mjs +8 -0
- package/examples/tune.mjs +11 -0
- package/package.json +56 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SENSITIVITY — the diamond no simple optimizer ships: not just "what's the best setting?" but "how tightly
|
|
3
|
+
* must you hold each knob, and is this optimum robust or fragile?"
|
|
4
|
+
*
|
|
5
|
+
* A factory or lab can hit the perfect setting once — but in production every variable DRIFTS. If the optimum
|
|
6
|
+
* is a sharp spike, a tiny drift ruins the batch; if it sits on a plateau, you can be sloppy and still win.
|
|
7
|
+
* SENSITIVITY reads the measurements you already collected and reports, per variable: how much the score
|
|
8
|
+
* moves when that variable moves (a local slope), how important it is relative to the others, and the
|
|
9
|
+
* TOLERANCE — how far it may drift before the score drops meaningfully. It then rates the optimum
|
|
10
|
+
* robust / moderate / fragile. That is process-control guidance (Taguchi-style robust design) straight out
|
|
11
|
+
* of the optimization run — actionable for real manufacturing, not just a number.
|
|
12
|
+
*
|
|
13
|
+
* Honest by construction (DIAKRISIS): this is a LOCAL estimate from your own data via distance-weighted
|
|
14
|
+
* regression (it assumes a roughly smooth response near the best, and sharpens with more measurements);
|
|
15
|
+
* it abstains to UNKNOWN when there are too few points. It is decision support, not a guarantee.
|
|
16
|
+
*/
|
|
17
|
+
import { type Space } from "./space.js";
|
|
18
|
+
import { type Observation, type Goal } from "./engine.js";
|
|
19
|
+
export interface VarSensitivity {
|
|
20
|
+
name: string;
|
|
21
|
+
sensitivity: number;
|
|
22
|
+
importancePct: number;
|
|
23
|
+
toleranceFrac: number;
|
|
24
|
+
toleranceAbs: number;
|
|
25
|
+
}
|
|
26
|
+
export interface SensitivityReport {
|
|
27
|
+
n: number;
|
|
28
|
+
best: Observation | null;
|
|
29
|
+
valueRange: number;
|
|
30
|
+
variables: VarSensitivity[];
|
|
31
|
+
robustness: "robust" | "moderate" | "fragile" | "unknown";
|
|
32
|
+
note: string;
|
|
33
|
+
}
|
|
34
|
+
/** Per-variable sensitivity + tolerance at the best, estimated from the observations. */
|
|
35
|
+
export declare function analyzeSensitivity(obs: ReadonlyArray<Observation>, space: Space, goal?: Goal): SensitivityReport;
|
|
36
|
+
export declare function sensitivityGauntlet(): {
|
|
37
|
+
score: 0 | 100;
|
|
38
|
+
checks: Array<{
|
|
39
|
+
name: string;
|
|
40
|
+
pass: boolean;
|
|
41
|
+
detail: string;
|
|
42
|
+
}>;
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=sensitivity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sensitivity.d.ts","sourceRoot":"","sources":["../src/sensitivity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,KAAK,KAAK,EAAmB,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAE1D,MAAM,WAAW,cAAc;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE;AACzI,MAAM,WAAW,iBAAiB;IAChC,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,UAAU,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;IAC1D,IAAI,EAAE,MAAM,CAAC;CACd;AAMD,yFAAyF;AACzF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,GAAE,IAAiB,GAAG,iBAAiB,CA6C5H;AAKD,wBAAgB,mBAAmB,IAAI;IAAE,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAmCxH"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
function norm(space, e) {
|
|
2
|
+
return space.dims.map((d) => { const lo = d.min ?? 0, hi = d.max ?? 1; const span = hi - lo || 1; return Math.max(0, Math.min(1, ((+e[d.name] || 0) - lo) / span)); });
|
|
3
|
+
}
|
|
4
|
+
/** Per-variable sensitivity + tolerance at the best, estimated from the observations. */
|
|
5
|
+
export function analyzeSensitivity(obs, space, goal = "maximize") {
|
|
6
|
+
const dims = space?.dims ?? [];
|
|
7
|
+
const D = dims.length;
|
|
8
|
+
const hist = (obs ?? []).filter((o) => o && o.experiment && Number.isFinite(o.value));
|
|
9
|
+
const n = hist.length;
|
|
10
|
+
if (D === 0 || n < Math.max(5, 2 * D)) {
|
|
11
|
+
return { n, best: n ? hist.reduce((a, b) => (goal === "minimize" ? (b.value < a.value ? b : a) : (b.value > a.value ? b : a))) : null, valueRange: 0, variables: [], robustness: "unknown", note: `need ≈${Math.max(5, 2 * D)} measurements for a reliable estimate (have ${n})` };
|
|
12
|
+
}
|
|
13
|
+
const pts = hist.map((o) => norm(space, o.experiment));
|
|
14
|
+
const vals = hist.map((o) => o.value);
|
|
15
|
+
const best = hist.reduce((a, b) => (goal === "minimize" ? (b.value < a.value ? b : a) : (b.value > a.value ? b : a)));
|
|
16
|
+
const bestN = norm(space, best.experiment);
|
|
17
|
+
const vMin = Math.min(...vals), vMax = Math.max(...vals);
|
|
18
|
+
const valueRange = Math.max(1e-12, vMax - vMin);
|
|
19
|
+
const dir = goal === "minimize" ? -1 : 1;
|
|
20
|
+
const bestVal = dir * best.value;
|
|
21
|
+
const sens = [];
|
|
22
|
+
for (let j = 0; j < D; j++) {
|
|
23
|
+
// At an optimum the first-order slope is ~0 — sensitivity is CURVATURE: how fast the score DROPS as the
|
|
24
|
+
// variable deviates from best. Weighted regression of drop (≥0) on squared deviation along x_j, weighting
|
|
25
|
+
// points close to `best` in the OTHER dims. The coefficient ≈ how sharply this knob hurts when it drifts.
|
|
26
|
+
let sw = 0, swx = 0, swy = 0, swxx = 0, swxy = 0;
|
|
27
|
+
for (let i = 0; i < n; i++) {
|
|
28
|
+
let od = 0;
|
|
29
|
+
for (let k = 0; k < D; k++)
|
|
30
|
+
if (k !== j)
|
|
31
|
+
od += (pts[i][k] - bestN[k]) ** 2;
|
|
32
|
+
const w = Math.exp(-od / (2 * 0.25 * 0.25));
|
|
33
|
+
const x = (pts[i][j] - bestN[j]) ** 2; // squared deviation along this variable
|
|
34
|
+
const y = Math.max(0, bestVal - dir * vals[i]); // how much WORSE than the best (the drop)
|
|
35
|
+
sw += w;
|
|
36
|
+
swx += w * x;
|
|
37
|
+
swy += w * y;
|
|
38
|
+
swxx += w * x * x;
|
|
39
|
+
swxy += w * x * y;
|
|
40
|
+
}
|
|
41
|
+
const denom = sw * swxx - swx * swx;
|
|
42
|
+
const curv = Math.abs(denom) > 1e-12 ? (sw * swxy - swx * swy) / denom : 0; // drop per (normalised-range deviation)²
|
|
43
|
+
sens.push(Math.max(0, curv));
|
|
44
|
+
}
|
|
45
|
+
const sumSens = sens.reduce((a, b) => a + b, 0) || 1;
|
|
46
|
+
const variables = dims.map((d, j) => {
|
|
47
|
+
const span = (d.max ?? 1) - (d.min ?? 0);
|
|
48
|
+
// tolerance: how far (fraction of the variable's range) it can drift before the score drops > 5% of its
|
|
49
|
+
// range — from the curvature: curv·Δ² ≤ 0.05·range ⇒ Δ ≤ √(0.05·range / curv)
|
|
50
|
+
const tolFrac = sens[j] > 1e-9 ? Math.min(1, Math.sqrt((0.05 * valueRange) / sens[j])) : 1;
|
|
51
|
+
return { name: d.name, sensitivity: +(sens[j] / valueRange).toFixed(4), importancePct: +(100 * sens[j] / sumSens).toFixed(1), toleranceFrac: +tolFrac.toFixed(4), toleranceAbs: +(tolFrac * span).toFixed(4) };
|
|
52
|
+
});
|
|
53
|
+
const meanTol = variables.reduce((a, v) => a + v.toleranceFrac, 0) / (variables.length || 1);
|
|
54
|
+
const robustness = meanTol > 0.3 ? "robust" : meanTol < 0.1 ? "fragile" : "moderate";
|
|
55
|
+
const worst = variables.slice().sort((a, b) => b.importancePct - a.importancePct)[0];
|
|
56
|
+
const note = worst ? `hold ${worst.name} tightest (${worst.importancePct}% of the sensitivity); the optimum looks ${robustness}` : "";
|
|
57
|
+
return { n, best, valueRange: +valueRange.toFixed(6), variables, robustness, note };
|
|
58
|
+
}
|
|
59
|
+
// ── gauntlet ──────────────────────────────────────────────────────────────────
|
|
60
|
+
import { lcg } from "./space.js";
|
|
61
|
+
export function sensitivityGauntlet() {
|
|
62
|
+
const space = { dims: [{ name: "x", type: "real", min: 0, max: 10 }, { name: "y", type: "real", min: 0, max: 10 }] };
|
|
63
|
+
// x is ~13x more sensitive than y (slope 4 vs 0.3 per unit); optimum at (5,5)
|
|
64
|
+
const f = (e) => -((((e.x ?? 0) - 5) * 4) ** 2) - ((((e.y ?? 0) - 5) * 0.3) ** 2);
|
|
65
|
+
const rnd = lcg(7);
|
|
66
|
+
const obs = [];
|
|
67
|
+
for (let i = 0; i < 50; i++) {
|
|
68
|
+
const e = { x: rnd() * 10, y: rnd() * 10 };
|
|
69
|
+
obs.push({ experiment: e, value: f(e) });
|
|
70
|
+
}
|
|
71
|
+
// bias some points near the optimum for a good local estimate
|
|
72
|
+
for (let i = 0; i < 14; i++) {
|
|
73
|
+
const e = { x: 5 + (rnd() - 0.5) * 2, y: 5 + (rnd() - 0.5) * 2 };
|
|
74
|
+
obs.push({ experiment: e, value: f(e) });
|
|
75
|
+
}
|
|
76
|
+
const r = analyzeSensitivity(obs, space, "maximize");
|
|
77
|
+
const vx = r.variables.find((v) => v.name === "x"), vy = r.variables.find((v) => v.name === "y");
|
|
78
|
+
const ranksX = !!vx && !!vy && vx.sensitivity > vy.sensitivity; // x more sensitive
|
|
79
|
+
const importanceX = !!vx && vx.importancePct > 60; // x dominates the sensitivity
|
|
80
|
+
const toleranceY = !!vx && !!vy && vy.toleranceFrac > vx.toleranceFrac; // y can drift more (looser)
|
|
81
|
+
const sumImportance = Math.abs(r.variables.reduce((a, v) => a + v.importancePct, 0) - 100) < 0.5; // importances sum to ~100%
|
|
82
|
+
const robustnessSet = r.robustness !== "unknown";
|
|
83
|
+
// thin data → UNKNOWN (abstain, never bluff)
|
|
84
|
+
const thin = analyzeSensitivity(obs.slice(0, 3), space, "maximize");
|
|
85
|
+
const abstains = thin.robustness === "unknown" && thin.variables.length === 0;
|
|
86
|
+
// deterministic
|
|
87
|
+
const det = JSON.stringify(analyzeSensitivity(obs, space, "maximize")) === JSON.stringify(analyzeSensitivity(obs, space, "maximize"));
|
|
88
|
+
// total
|
|
89
|
+
const total = (() => { try {
|
|
90
|
+
analyzeSensitivity(null, space);
|
|
91
|
+
analyzeSensitivity([], space);
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return false;
|
|
96
|
+
} })();
|
|
97
|
+
const checks = [
|
|
98
|
+
{ name: "RANKS-SENSITIVITY", pass: ranksX, detail: `correctly finds x more sensitive than y (x=${vx?.sensitivity}, y=${vy?.sensitivity})` },
|
|
99
|
+
{ name: "IMPORTANCE", pass: importanceX, detail: `x carries the dominant importance (${vx?.importancePct}%)` },
|
|
100
|
+
{ name: "TOLERANCE", pass: toleranceY, detail: `the less-sensitive y gets a wider drift tolerance (y=${vy?.toleranceFrac} > x=${vx?.toleranceFrac})` },
|
|
101
|
+
{ name: "IMPORTANCE-SUMS-100", pass: sumImportance, detail: "per-variable importance sums to 100%" },
|
|
102
|
+
{ name: "ROBUSTNESS-VERDICT", pass: robustnessSet, detail: `classifies the optimum (got "${r.robustness}")` },
|
|
103
|
+
{ name: "ABSTAINS-WHEN-THIN", pass: abstains, detail: "too few measurements → UNKNOWN, never a bluffed estimate" },
|
|
104
|
+
{ name: "DETERMINISTIC", pass: det, detail: "same data → same report" },
|
|
105
|
+
{ name: "TOTAL", pass: total, detail: "null / empty never throws" },
|
|
106
|
+
];
|
|
107
|
+
return { score: checks.every((c) => c.pass) ? 100 : 0, checks };
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=sensitivity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sensitivity.js","sourceRoot":"","sources":["../src/sensitivity.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MELETE WEB — discovery-as-a-service. A self-contained HTTP surface so anyone (or any agent) can POST an
|
|
3
|
+
* objective + a search space and get back the discovered optimum AND its signed, verifiable trace — no
|
|
4
|
+
* install. The landing page is a live demo; the JSON endpoints are the product; /pitch is the buyer deck.
|
|
5
|
+
*
|
|
6
|
+
* This module owns the landing page + the pitch deck (pure strings) + the endpoint catalogue. The HTTP
|
|
7
|
+
* server + the sandboxed objective evaluation live in bin/melete-server.mjs (node:http + node:vm).
|
|
8
|
+
*/
|
|
9
|
+
export declare const ENDPOINTS: {
|
|
10
|
+
method: string;
|
|
11
|
+
path: string;
|
|
12
|
+
what: string;
|
|
13
|
+
}[];
|
|
14
|
+
export declare function vizProject(gi: number, gj: number, t: number, nx: number, ny: number): [number, number];
|
|
15
|
+
export declare function landingPage(version?: string): string;
|
|
16
|
+
export declare function pitchDeck(version?: string): string;
|
|
17
|
+
export declare function serverGauntlet(): {
|
|
18
|
+
score: 0 | 100;
|
|
19
|
+
checks: Array<{
|
|
20
|
+
name: string;
|
|
21
|
+
pass: boolean;
|
|
22
|
+
detail: string;
|
|
23
|
+
}>;
|
|
24
|
+
};
|
|
25
|
+
export declare function docsPage(version: string | number): string;
|
|
26
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS;;;;GAKrB,CAAC;AA4TF,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAGtG;AAED,wBAAgB,WAAW,CAAC,OAAO,SAAU,GAAG,MAAM,CAi+BrD;AAED,wBAAgB,SAAS,CAAC,OAAO,SAAU,GAAG,MAAM,CA0DnD;AAGD,wBAAgB,cAAc,IAAI;IAAE,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAkBnH;AAGD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,UAAixZ"}
|