reeval 0.0.1
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 +202 -0
- package/THIRD_PARTY_NOTICES.md +2160 -0
- package/assets/package.json +9 -0
- package/assets/pnpm-lock.yaml +1336 -0
- package/dist/agent-DVHkx8aT.js +532 -0
- package/dist/agent-DVHkx8aT.js.map +1 -0
- package/dist/analysis-CxSCt1YY.js +16 -0
- package/dist/analysis-CxSCt1YY.js.map +1 -0
- package/dist/assemble-B-nmz8oH.js +695 -0
- package/dist/assemble-B-nmz8oH.js.map +1 -0
- package/dist/assemble-CmRVDZ2Q.js +2 -0
- package/dist/attempt-BdRQ9jKX.js +176 -0
- package/dist/attempt-BdRQ9jKX.js.map +1 -0
- package/dist/bridge/index.mjs +1911 -0
- package/dist/bridge/package.json +13 -0
- package/dist/bridge/pnpm-lock.yaml +1041 -0
- package/dist/bridge/pnpm-workspace.yaml +2 -0
- package/dist/budget-DBUrH4jX.js +8 -0
- package/dist/budget-DBUrH4jX.js.map +1 -0
- package/dist/cli--CQ3Iy9q.js +1865 -0
- package/dist/cli--CQ3Iy9q.js.map +1 -0
- package/dist/cli-spec-DKAu09Gi.js +478 -0
- package/dist/cli-spec-DKAu09Gi.js.map +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +8 -0
- package/dist/cli.js.map +1 -0
- package/dist/colors-QV9dFVhN.js +34 -0
- package/dist/colors-QV9dFVhN.js.map +1 -0
- package/dist/command-BSJzHMtP.js +280 -0
- package/dist/command-BSJzHMtP.js.map +1 -0
- package/dist/command-CEm8PZ1N.js +1043 -0
- package/dist/command-CEm8PZ1N.js.map +1 -0
- package/dist/command-D-jnQWVG.js +673 -0
- package/dist/command-D-jnQWVG.js.map +1 -0
- package/dist/command-DQAvbG7d.js +432 -0
- package/dist/command-DQAvbG7d.js.map +1 -0
- package/dist/commands-A4udfyKZ.js +2 -0
- package/dist/commands-CF8mOfiu.js +207 -0
- package/dist/commands-CF8mOfiu.js.map +1 -0
- package/dist/config-Cuj0kVYj.js +415 -0
- package/dist/config-Cuj0kVYj.js.map +1 -0
- package/dist/context-loi9OCZv.js +106 -0
- package/dist/context-loi9OCZv.js.map +1 -0
- package/dist/core-tLN-z1Be.js +96 -0
- package/dist/core-tLN-z1Be.js.map +1 -0
- package/dist/db-Cjj2ZsfQ.js +2 -0
- package/dist/db-DxDzMhtB.js +827 -0
- package/dist/db-DxDzMhtB.js.map +1 -0
- package/dist/debug-D24NOQH1.js +89 -0
- package/dist/debug-D24NOQH1.js.map +1 -0
- package/dist/debug-SEmW4w8f.js +2 -0
- package/dist/dist-BZXYHN2X.js +1673 -0
- package/dist/dist-BZXYHN2X.js.map +1 -0
- package/dist/docker-DQDZWXF9.js +20 -0
- package/dist/docker-DQDZWXF9.js.map +1 -0
- package/dist/docker-DnWAVdEm.js +2 -0
- package/dist/docker-oSbCExHL.js +153 -0
- package/dist/docker-oSbCExHL.js.map +1 -0
- package/dist/doctor-CxlH1pDM.js +525 -0
- package/dist/doctor-CxlH1pDM.js.map +1 -0
- package/dist/egress-73SQfKdx.js +619 -0
- package/dist/egress-73SQfKdx.js.map +1 -0
- package/dist/env-BQqj93gu.js +21 -0
- package/dist/env-BQqj93gu.js.map +1 -0
- package/dist/environment-Mz7wvrtD.js +552 -0
- package/dist/environment-Mz7wvrtD.js.map +1 -0
- package/dist/errors-C9w_ud7g.js +160 -0
- package/dist/errors-C9w_ud7g.js.map +1 -0
- package/dist/errors-CSxfJ4qu.js +11 -0
- package/dist/errors-CSxfJ4qu.js.map +1 -0
- package/dist/files--6CEUXm7.js +2 -0
- package/dist/files-BLlrhU4-.js +62 -0
- package/dist/files-BLlrhU4-.js.map +1 -0
- package/dist/files-Bd25OAQH.js +2 -0
- package/dist/files-BvHCFWgD.js +2 -0
- package/dist/files-D2-qn_Dl.js +275 -0
- package/dist/files-D2-qn_Dl.js.map +1 -0
- package/dist/files-bF2fPuT9.js +99 -0
- package/dist/files-bF2fPuT9.js.map +1 -0
- package/dist/git-D6hMeieS.js +44 -0
- package/dist/git-D6hMeieS.js.map +1 -0
- package/dist/harness-ls5aX1UO.js +131 -0
- package/dist/harness-ls5aX1UO.js.map +1 -0
- package/dist/harness.d.ts +74 -0
- package/dist/harness.js +2 -0
- package/dist/header-DzFDoMCI.js +78 -0
- package/dist/header-DzFDoMCI.js.map +1 -0
- package/dist/ids-Bp6ut7ZD.js +49 -0
- package/dist/ids-Bp6ut7ZD.js.map +1 -0
- package/dist/images-Cc1-coFc.js +286 -0
- package/dist/images-Cc1-coFc.js.map +1 -0
- package/dist/index.d.ts +97 -0
- package/dist/index.js +1959 -0
- package/dist/index.js.map +1 -0
- package/dist/init-CFljS8BJ.js +344 -0
- package/dist/init-CFljS8BJ.js.map +1 -0
- package/dist/init-z2ZPn9Tj.js +2 -0
- package/dist/invocations-rXktgSAn.js +157 -0
- package/dist/invocations-rXktgSAn.js.map +1 -0
- package/dist/jiti-BOLXpKyG.js +46 -0
- package/dist/jiti-BOLXpKyG.js.map +1 -0
- package/dist/judge-D8Uf4dA9.js +146 -0
- package/dist/judge-D8Uf4dA9.js.map +1 -0
- package/dist/judge.d.ts +21 -0
- package/dist/judge.js +19 -0
- package/dist/judge.js.map +1 -0
- package/dist/live-Bs3LReMV.js +98 -0
- package/dist/live-Bs3LReMV.js.map +1 -0
- package/dist/matchers-DyLvm7EG.js +374 -0
- package/dist/matchers-DyLvm7EG.js.map +1 -0
- package/dist/model-BdO79gWz.js +44 -0
- package/dist/model-BdO79gWz.js.map +1 -0
- package/dist/model-CDL98xue.js +725 -0
- package/dist/model-CDL98xue.js.map +1 -0
- package/dist/model-v-0_Ik7S.js +2 -0
- package/dist/node-kG64XxdE.js +506 -0
- package/dist/node-kG64XxdE.js.map +1 -0
- package/dist/opencode-providers-DZuD_oYt.js +3149 -0
- package/dist/opencode-providers-DZuD_oYt.js.map +1 -0
- package/dist/options-CAQhu--C.js +452 -0
- package/dist/options-CAQhu--C.js.map +1 -0
- package/dist/patch-BkKje4cp.js +69 -0
- package/dist/patch-BkKje4cp.js.map +1 -0
- package/dist/paths-CBvm6pap.js +72 -0
- package/dist/paths-CBvm6pap.js.map +1 -0
- package/dist/plan-gwk6dJ8c.js +237 -0
- package/dist/plan-gwk6dJ8c.js.map +1 -0
- package/dist/preflight-BtubXKQ8.js +2 -0
- package/dist/preflight-BypZMNBG.js +185 -0
- package/dist/preflight-BypZMNBG.js.map +1 -0
- package/dist/prepare-Cwv0bHs_.js +3 -0
- package/dist/prepare-D6Uzcubb.js +213 -0
- package/dist/prepare-D6Uzcubb.js.map +1 -0
- package/dist/provenance-Dfb8YY5Y.js +129 -0
- package/dist/provenance-Dfb8YY5Y.js.map +1 -0
- package/dist/provider-BDbNOQhQ.js +2 -0
- package/dist/provider-CmAYTQQs.js +14 -0
- package/dist/provider-CmAYTQQs.js.map +1 -0
- package/dist/providers-2p3ylMHI.js +107 -0
- package/dist/providers-2p3ylMHI.js.map +1 -0
- package/dist/providers-BUOxitcT.js +2 -0
- package/dist/query-CFATHZmV.js +91 -0
- package/dist/query-CFATHZmV.js.map +1 -0
- package/dist/query-DR4m6CXf.js +2 -0
- package/dist/record-DQ8wzyco.js +99 -0
- package/dist/record-DQ8wzyco.js.map +1 -0
- package/dist/redact-C4fL_bZP.js +167 -0
- package/dist/redact-C4fL_bZP.js.map +1 -0
- package/dist/results-CeXb8Wde.js +37 -0
- package/dist/results-CeXb8Wde.js.map +1 -0
- package/dist/root-CFDjpWuc.js +110 -0
- package/dist/root-CFDjpWuc.js.map +1 -0
- package/dist/sandbox-By2gkdkC.js +133 -0
- package/dist/sandbox-By2gkdkC.js.map +1 -0
- package/dist/sandbox.d.ts +41 -0
- package/dist/sandbox.js +2 -0
- package/dist/server-Bi61uiY0.js +350 -0
- package/dist/server-Bi61uiY0.js.map +1 -0
- package/dist/server-CsSBL8NC.js +2 -0
- package/dist/source-BXzrmof5.js +2 -0
- package/dist/source-Bsfa3LZH.js +40 -0
- package/dist/source-Bsfa3LZH.js.map +1 -0
- package/dist/src-55j1zNHH.js +3 -0
- package/dist/src-AEwxd1UP.js +602 -0
- package/dist/src-AEwxd1UP.js.map +1 -0
- package/dist/src-BDwSuyIo.js +3 -0
- package/dist/src-BQyMiWri.js +490 -0
- package/dist/src-BQyMiWri.js.map +1 -0
- package/dist/src-C-LHyTSV.js +3 -0
- package/dist/src-Cmp-7YrD.js +1136 -0
- package/dist/src-Cmp-7YrD.js.map +1 -0
- package/dist/src-D0RdqpNb.js +252 -0
- package/dist/src-D0RdqpNb.js.map +1 -0
- package/dist/src-D8KYzxBX.js +793 -0
- package/dist/src-D8KYzxBX.js.map +1 -0
- package/dist/src-DEgff9Z7.js +4 -0
- package/dist/src-DXx_29pq.js +567 -0
- package/dist/src-DXx_29pq.js.map +1 -0
- package/dist/src-DwwiVLqv.js +2937 -0
- package/dist/src-DwwiVLqv.js.map +1 -0
- package/dist/src-N7E_mfcZ.js +2 -0
- package/dist/src-W9g-y5X5.js +3 -0
- package/dist/src-daS0wKH2.js +3 -0
- package/dist/state-Cyw3QTsN.js +2 -0
- package/dist/state-DZ7eqb1F.js +167 -0
- package/dist/state-DZ7eqb1F.js.map +1 -0
- package/dist/stats-BNAHlNMD.js +114 -0
- package/dist/stats-BNAHlNMD.js.map +1 -0
- package/dist/studio-app/assets/index-D6XyfFSH.js +58 -0
- package/dist/studio-app/assets/index-xwzWdcE_.css +2 -0
- package/dist/studio-app/favicon.svg +1 -0
- package/dist/studio-app/index.html +15 -0
- package/dist/summary-D7Ttky0z.js +166 -0
- package/dist/summary-D7Ttky0z.js.map +1 -0
- package/dist/text-gEcKjAyp.js +29 -0
- package/dist/text-gEcKjAyp.js.map +1 -0
- package/dist/types-C5vI3g1C.js +9 -0
- package/dist/types-C5vI3g1C.js.map +1 -0
- package/dist/types-DLec-6Cx.d.ts +1535 -0
- package/dist/usage-DsYUqIUM.js +24 -0
- package/dist/usage-DsYUqIUM.js.map +1 -0
- package/dist/view/index.d.ts +645 -0
- package/dist/view/index.js +8 -0
- package/dist/views-BrHOv6wg.js +220 -0
- package/dist/views-BrHOv6wg.js.map +1 -0
- package/dist/views-CwCWLWqo.js +3 -0
- package/dist/worker-entry-DnYkANPG.js +506 -0
- package/dist/worker-entry-DnYkANPG.js.map +1 -0
- package/dist/workspace-C2S0Z6gl.js +327 -0
- package/dist/workspace-C2S0Z6gl.js.map +1 -0
- package/dist/workspace-CyoXG6CY.js +2 -0
- package/docker/Dockerfile +19 -0
- package/package.json +79 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
//#region src/attempt/context.ts
|
|
2
|
+
/** Under the home directory, and under each adapter's own home, which an installed CLI runs with. */
|
|
3
|
+
const HOME_CONTEXT_PATHS = [
|
|
4
|
+
".cursor/mcp.json",
|
|
5
|
+
".cursor/cli-config.json",
|
|
6
|
+
".cursor/rules",
|
|
7
|
+
".cursor/skills",
|
|
8
|
+
".cursor/skills-cursor",
|
|
9
|
+
".agents/skills",
|
|
10
|
+
".claude/CLAUDE.md",
|
|
11
|
+
".claude/settings.json",
|
|
12
|
+
".claude/skills",
|
|
13
|
+
".gemini/GEMINI.md",
|
|
14
|
+
".gemini/AGENTS.md",
|
|
15
|
+
".gemini/config/skills",
|
|
16
|
+
".gemini/config/rules",
|
|
17
|
+
".gemini/config/mcp_config.json",
|
|
18
|
+
".gemini/antigravity-cli/settings.json",
|
|
19
|
+
".config/opencode/skills",
|
|
20
|
+
".config/opencode/opencode.json",
|
|
21
|
+
".config/opencode/opencode.jsonc",
|
|
22
|
+
".config/opencode/AGENTS.md",
|
|
23
|
+
".opencode/skills",
|
|
24
|
+
".config/goose/skills",
|
|
25
|
+
".config/goose/config.yaml",
|
|
26
|
+
".config/goose/.goosehints",
|
|
27
|
+
".pi/agent/skills",
|
|
28
|
+
".pi/agent/AGENTS.md",
|
|
29
|
+
".pi/agent/settings.json",
|
|
30
|
+
".codex/AGENTS.md",
|
|
31
|
+
".codex/config.toml",
|
|
32
|
+
".codex/skills"
|
|
33
|
+
];
|
|
34
|
+
/** Where the AI SDK adapters install their CLI; the CLI's `$HOME` is `home` under it. */
|
|
35
|
+
const ADAPTER_HOMES = "\"$HOME\"/.ai-sdk-harness/.harness-bootstrap/*/implementation/home";
|
|
36
|
+
/**
|
|
37
|
+
* Skills, rules and MCP config the agent could load, with content hashes (never contents).
|
|
38
|
+
* Paths under the home directory are shown as `~/…`; others are relative to the workspace.
|
|
39
|
+
*/
|
|
40
|
+
const CONTEXT_PATHS = [
|
|
41
|
+
...HOME_CONTEXT_PATHS.map((p) => `$HOME/${p}`),
|
|
42
|
+
"AGENTS.md",
|
|
43
|
+
"CLAUDE.md",
|
|
44
|
+
"GEMINI.md",
|
|
45
|
+
".cursorrules",
|
|
46
|
+
".cursor/rules",
|
|
47
|
+
".cursor/skills",
|
|
48
|
+
".cursor/mcp.json",
|
|
49
|
+
".claude/settings.json",
|
|
50
|
+
".claude/skills",
|
|
51
|
+
".agents/skills",
|
|
52
|
+
".agents/rules",
|
|
53
|
+
".agents/mcp_config.json",
|
|
54
|
+
".mcp.json",
|
|
55
|
+
".opencode/skills",
|
|
56
|
+
"opencode.json",
|
|
57
|
+
"opencode.jsonc",
|
|
58
|
+
".goosehints",
|
|
59
|
+
".goose/skills",
|
|
60
|
+
".pi/skills",
|
|
61
|
+
".pi/settings.json",
|
|
62
|
+
".codex/config.toml"
|
|
63
|
+
];
|
|
64
|
+
async function agentContext(box, signal) {
|
|
65
|
+
const adapterPaths = `for h in ${ADAPTER_HOMES}; do for p in ${HOME_CONTEXT_PATHS.join(" ")}; do echo "$h/$p"; done; done`;
|
|
66
|
+
const script = `{ for p in ${CONTEXT_PATHS.map((p) => `"${p}"`).join(" ")}; do echo "$p"; done; ${adapterPaths}; } | while IFS= read -r p; do [ -e "$p" ] && find "$p" -type f 2>/dev/null; done | sort | head -500 | while IFS= read -r f; do printf '%s\t%s\n' "$(sha256sum "$f" | cut -d' ' -f1)" "$f"; done`;
|
|
67
|
+
const r = await box.exec(script, { signal }).catch(() => null);
|
|
68
|
+
if (r?.exitCode !== 0) return [];
|
|
69
|
+
const home = (await box.exec("printf %s \"$HOME\"", { signal }).catch(() => null))?.stdout ?? "";
|
|
70
|
+
return r.stdout.split("\n").filter(Boolean).map((line) => {
|
|
71
|
+
const [sha, ...rest] = line.split(" ");
|
|
72
|
+
const path = rest.join(" ");
|
|
73
|
+
return {
|
|
74
|
+
path: home && path.startsWith(`${home}/`) ? `~${path.slice(home.length)}` : path,
|
|
75
|
+
sha256: sha ?? ""
|
|
76
|
+
};
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Records the agent's context once, after the first turn (or at teardown when there was none):
|
|
81
|
+
* adapters write harness skills when a turn starts, so before it the record would miss them.
|
|
82
|
+
*/
|
|
83
|
+
function contextTaker(a) {
|
|
84
|
+
let taken = false;
|
|
85
|
+
return async (box, signal) => {
|
|
86
|
+
if (taken || a.spec.sandbox.kind !== "docker") return;
|
|
87
|
+
taken = true;
|
|
88
|
+
a.record.context = await agentContext(box, signal);
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
const ADAPTER_HOME = /^~\/\.ai-sdk-harness\/\.harness-bootstrap\/[^/]+\/implementation\/home\//;
|
|
92
|
+
/**
|
|
93
|
+
* Files the Cursor CLI (the ACP harness `cursor()` used before the Cursor SDK) rewrote every
|
|
94
|
+
* session, under `~/` or its adapter's home. Records from then still list them; no current
|
|
95
|
+
* harness writes session state into the paths reeval records.
|
|
96
|
+
*/
|
|
97
|
+
const RETIRED_RUNTIME_STATE = /* @__PURE__ */ new Set([".cursor/cli-config.json", ".cursor/skills-cursor/.sync-manifest.json"]);
|
|
98
|
+
/** A context path that is some agent CLI's own runtime state, whichever harness recorded it. */
|
|
99
|
+
function isRuntimeState(path) {
|
|
100
|
+
if (!path.startsWith("~/")) return false;
|
|
101
|
+
return RETIRED_RUNTIME_STATE.has(path.replace(ADAPTER_HOME, "~/").slice(2));
|
|
102
|
+
}
|
|
103
|
+
//#endregion
|
|
104
|
+
export { isRuntimeState as n, contextTaker as t };
|
|
105
|
+
|
|
106
|
+
//# sourceMappingURL=context-loi9OCZv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-loi9OCZv.js","names":[],"sources":["../src/attempt/context.ts"],"mappings":";;AAKA,MAAM,qBAAqB;CACzB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;;AAEA,MAAM,gBAAgB;;;;;AAMtB,MAAM,gBAAgB;CACpB,GAAG,mBAAmB,KAAK,MAAM,SAAS,GAAG;CAC7C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,eAAe,aAAa,KAAc,QAAqD;CAC7F,MAAM,eAAe,YAAY,cAAc,gBAAgB,mBAAmB,KAAK,GAAG,EAAE;CAC5F,MAAM,SAAS,cAAc,cAAc,KAAK,MAAM,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE,wBAAwB,aAAa;CAC/G,MAAM,IAAI,MAAM,IAAI,KAAK,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI;CAC7D,IAAI,GAAG,aAAa,GAAG,OAAO,CAAC;CAC/B,MAAM,QAAQ,MAAM,IAAI,KAAK,uBAAqB,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,EAAA,EAAI,UAAU;CAC5F,OAAO,EAAE,OACN,MAAM,IAAI,CAAC,CACX,OAAO,OAAO,CAAC,CACf,KAAK,SAAS;EACb,MAAM,CAAC,KAAK,GAAG,QAAQ,KAAK,MAAM,GAAI;EACtC,MAAM,OAAO,KAAK,KAAK,GAAI;EAC3B,OAAO;GACL,MAAM,QAAQ,KAAK,WAAW,GAAG,KAAK,EAAE,IAAI,IAAI,KAAK,MAAM,KAAK,MAAM,MAAM;GAC5E,QAAQ,OAAO;EACjB;CACF,CAAC;AACL;;;;;AAMA,SAAgB,aAAa,GAAY;CACvC,IAAI,QAAQ;CACZ,OAAO,OAAO,KAAc,WAAwB;EAClD,IAAI,SAAS,EAAE,KAAK,QAAQ,SAAS,UAAU;EAC/C,QAAQ;EACR,EAAE,OAAO,UAAU,MAAM,aAAa,KAAK,MAAM;CACnD;AACF;AAEA,MAAM,eAAe;;;;;;AAOrB,MAAM,wCAAwB,IAAI,IAAI,CACpC,2BACA,2CACF,CAAC;;AAGD,SAAgB,eAAe,MAAuB;CACpD,IAAI,CAAC,KAAK,WAAW,IAAI,GAAG,OAAO;CACnC,OAAO,sBAAsB,IAAI,KAAK,QAAQ,cAAc,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5E"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
//#region src/scheduler/core.ts
|
|
2
|
+
const runKey = (r) => `${r.eval}\0${r.n}`;
|
|
3
|
+
/**
|
|
4
|
+
* Leases are granted when every named resource has room under the request's own limit, so a
|
|
5
|
+
* request that asks for `docker: 2` waits while two Docker leases are out, whatever other
|
|
6
|
+
* requests allow. Among attempts that could start, the order is:
|
|
7
|
+
*
|
|
8
|
+
* 1. the rest of a run already started (the other cells of the same eval and run number), so a
|
|
9
|
+
* control and its variants run close together;
|
|
10
|
+
* 2. the eval with the fewest runs started, so every eval gets a first result early;
|
|
11
|
+
* 3. lower run number, then file, registration order and cell.
|
|
12
|
+
*/
|
|
13
|
+
var Scheduler = class {
|
|
14
|
+
#waiting = [];
|
|
15
|
+
#held = /* @__PURE__ */ new Map();
|
|
16
|
+
#inUse = /* @__PURE__ */ new Map();
|
|
17
|
+
#runsStarted = /* @__PURE__ */ new Map();
|
|
18
|
+
#onGrant;
|
|
19
|
+
#seq = 0;
|
|
20
|
+
#paused = false;
|
|
21
|
+
constructor(onGrant) {
|
|
22
|
+
this.#onGrant = onGrant;
|
|
23
|
+
}
|
|
24
|
+
get held() {
|
|
25
|
+
return this.#held.size;
|
|
26
|
+
}
|
|
27
|
+
get waiting() {
|
|
28
|
+
return this.#waiting.length;
|
|
29
|
+
}
|
|
30
|
+
inUse(resource) {
|
|
31
|
+
return this.#inUse.get(resource) ?? 0;
|
|
32
|
+
}
|
|
33
|
+
request(request) {
|
|
34
|
+
this.#waiting.push({
|
|
35
|
+
...request,
|
|
36
|
+
seq: this.#seq++
|
|
37
|
+
});
|
|
38
|
+
this.#pump();
|
|
39
|
+
}
|
|
40
|
+
/** Drops a request that's still waiting, or releases its lease. */
|
|
41
|
+
release(id) {
|
|
42
|
+
const index = this.#waiting.findIndex((w) => w.id === id);
|
|
43
|
+
if (index >= 0) this.#waiting.splice(index, 1);
|
|
44
|
+
const held = this.#held.get(id);
|
|
45
|
+
if (held) {
|
|
46
|
+
this.#held.delete(id);
|
|
47
|
+
for (const name of Object.keys(held.limits)) this.#inUse.set(name, (this.#inUse.get(name) ?? 1) - 1);
|
|
48
|
+
}
|
|
49
|
+
this.#pump();
|
|
50
|
+
}
|
|
51
|
+
/** Everything a connection asked for or held, e.g. when its worker exits. */
|
|
52
|
+
releaseOwner(owner) {
|
|
53
|
+
const ids = [...this.#waiting.filter((w) => w.owner === owner).map((w) => w.id), ...[...this.#held.values()].filter((h) => h.owner === owner).map((h) => h.id)];
|
|
54
|
+
for (const id of ids) this.release(id);
|
|
55
|
+
}
|
|
56
|
+
/** While paused, requests queue up but nothing is granted. */
|
|
57
|
+
pause() {
|
|
58
|
+
this.#paused = true;
|
|
59
|
+
}
|
|
60
|
+
resume() {
|
|
61
|
+
this.#paused = false;
|
|
62
|
+
this.#pump();
|
|
63
|
+
}
|
|
64
|
+
#fits(r) {
|
|
65
|
+
return Object.entries(r.limits).every(([name, limit]) => (this.#inUse.get(name) ?? 0) < limit);
|
|
66
|
+
}
|
|
67
|
+
#compare = (a, b) => {
|
|
68
|
+
if (!a.rank || !b.rank) return a.rank ? 1 : b.rank ? -1 : a.seq - b.seq;
|
|
69
|
+
const ra = a.rank;
|
|
70
|
+
const rb = b.rank;
|
|
71
|
+
const started = (r) => this.#runsStarted.get(r.eval)?.has(runKey(r)) ? 0 : 1;
|
|
72
|
+
const runs = (r) => this.#runsStarted.get(r.eval)?.size ?? 0;
|
|
73
|
+
return started(ra) - started(rb) || runs(ra) - runs(rb) || ra.n - rb.n || (ra.file < rb.file ? -1 : ra.file > rb.file ? 1 : 0) || ra.order - rb.order || ra.cell - rb.cell || a.seq - b.seq;
|
|
74
|
+
};
|
|
75
|
+
#pump() {
|
|
76
|
+
if (this.#paused) return;
|
|
77
|
+
for (;;) {
|
|
78
|
+
const next = this.#waiting.filter((w) => this.#fits(w)).sort(this.#compare)[0];
|
|
79
|
+
if (!next) return;
|
|
80
|
+
this.#waiting.splice(this.#waiting.indexOf(next), 1);
|
|
81
|
+
const { seq: _, ...request } = next;
|
|
82
|
+
this.#held.set(request.id, request);
|
|
83
|
+
for (const name of Object.keys(request.limits)) this.#inUse.set(name, (this.#inUse.get(name) ?? 0) + 1);
|
|
84
|
+
if (request.rank) {
|
|
85
|
+
const runs = this.#runsStarted.get(request.rank.eval) ?? /* @__PURE__ */ new Set();
|
|
86
|
+
runs.add(runKey(request.rank));
|
|
87
|
+
this.#runsStarted.set(request.rank.eval, runs);
|
|
88
|
+
}
|
|
89
|
+
this.#onGrant(request);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
//#endregion
|
|
94
|
+
export { Scheduler as t };
|
|
95
|
+
|
|
96
|
+
//# sourceMappingURL=core-tLN-z1Be.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-tLN-z1Be.js","names":[],"sources":["../src/scheduler/core.ts"],"mappings":";AA6BA,MAAM,UAAU,MAAY,GAAG,EAAE,KAAK,IAAI,EAAE;;;;;;;;;;;AAY5C,IAAa,YAAb,MAAuB;CACrB,WAA+B,CAAC;CAChC,wBAAiB,IAAI,IAAqB;CAC1C,yBAAkB,IAAI,IAAoB;CAC1C,+BAAwB,IAAI,IAAyB;CACrD;CACA,OAAO;CACP,UAAU;CAEV,YAAY,SAAqC;EAC/C,KAAK,WAAW;CAClB;CAEA,IAAI,OAAe;EACjB,OAAO,KAAK,MAAM;CACpB;CAEA,IAAI,UAAkB;EACpB,OAAO,KAAK,SAAS;CACvB;CAEA,MAAM,UAA0B;EAC9B,OAAO,KAAK,OAAO,IAAI,QAAQ,KAAK;CACtC;CAEA,QAAQ,SAAwB;EAC9B,KAAK,SAAS,KAAK;GAAE,GAAG;GAAS,KAAK,KAAK;EAAO,CAAC;EACnD,KAAK,MAAM;CACb;;CAGA,QAAQ,IAAkB;EACxB,MAAM,QAAQ,KAAK,SAAS,WAAW,MAAM,EAAE,OAAO,EAAE;EACxD,IAAI,SAAS,GAAG,KAAK,SAAS,OAAO,OAAO,CAAC;EAC7C,MAAM,OAAO,KAAK,MAAM,IAAI,EAAE;EAC9B,IAAI,MAAM;GACR,KAAK,MAAM,OAAO,EAAE;GACpB,KAAK,MAAM,QAAQ,OAAO,KAAK,KAAK,MAAM,GACxC,KAAK,OAAO,IAAI,OAAO,KAAK,OAAO,IAAI,IAAI,KAAK,KAAK,CAAC;EAE1D;EACA,KAAK,MAAM;CACb;;CAGA,aAAa,OAAqB;EAChC,MAAM,MAAM,CACV,GAAG,KAAK,SAAS,QAAQ,MAAM,EAAE,UAAU,KAAK,CAAC,CAAC,KAAK,MAAM,EAAE,EAAE,GACjE,GAAG,CAAC,GAAG,KAAK,MAAM,OAAO,CAAC,CAAC,CAAC,QAAQ,MAAM,EAAE,UAAU,KAAK,CAAC,CAAC,KAAK,MAAM,EAAE,EAAE,CAC9E;EACA,KAAK,MAAM,MAAM,KAAK,KAAK,QAAQ,EAAE;CACvC;;CAGA,QAAc;EACZ,KAAK,UAAU;CACjB;CAEA,SAAe;EACb,KAAK,UAAU;EACf,KAAK,MAAM;CACb;CAEA,MAAM,GAAqB;EACzB,OAAO,OAAO,QAAQ,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,YAAY,KAAK,OAAO,IAAI,IAAI,KAAK,KAAK,KAAK;CAC/F;CAEA,YAAY,GAAY,MAAuB;EAC7C,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,OAAO,EAAE,OAAO,IAAI,EAAE,OAAO,KAAK,EAAE,MAAM,EAAE;EACpE,MAAM,KAAK,EAAE;EACb,MAAM,KAAK,EAAE;EACb,MAAM,WAAW,MAAa,KAAK,aAAa,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,IAAI,IAAI;EAClF,MAAM,QAAQ,MAAY,KAAK,aAAa,IAAI,EAAE,IAAI,CAAC,EAAE,QAAQ;EACjE,OACE,QAAQ,EAAE,IAAI,QAAQ,EAAE,KACxB,KAAK,EAAE,IAAI,KAAK,EAAE,KAClB,GAAG,IAAI,GAAG,MACT,GAAG,OAAO,GAAG,OAAO,KAAK,GAAG,OAAO,GAAG,OAAO,IAAI,MAClD,GAAG,QAAQ,GAAG,SACd,GAAG,OAAO,GAAG,QACb,EAAE,MAAM,EAAE;CAEd;CAEA,QAAc;EACZ,IAAI,KAAK,SAAS;EAClB,SAAS;GACP,MAAM,OAAO,KAAK,SAAS,QAAQ,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;GAC5E,IAAI,CAAC,MAAM;GACX,KAAK,SAAS,OAAO,KAAK,SAAS,QAAQ,IAAI,GAAG,CAAC;GACnD,MAAM,EAAE,KAAK,GAAG,GAAG,YAAY;GAC/B,KAAK,MAAM,IAAI,QAAQ,IAAI,OAAO;GAClC,KAAK,MAAM,QAAQ,OAAO,KAAK,QAAQ,MAAM,GAC3C,KAAK,OAAO,IAAI,OAAO,KAAK,OAAO,IAAI,IAAI,KAAK,KAAK,CAAC;GAExD,IAAI,QAAQ,MAAM;IAChB,MAAM,OAAO,KAAK,aAAa,IAAI,QAAQ,KAAK,IAAI,qBAAK,IAAI,IAAI;IACjE,KAAK,IAAI,OAAO,QAAQ,IAAI,CAAC;IAC7B,KAAK,aAAa,IAAI,QAAQ,KAAK,MAAM,IAAI;GAC/C;GACA,KAAK,SAAS,OAAO;EACvB;CACF;AACF"}
|