0sec-cli 0.22.4 → 0.24.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/0.js +73 -68
- package/README.md +95 -61
- package/chunks/{adapt-loop-3CCOWE43.js → adapt-loop-TEJPXWFG.js} +4 -4
- package/chunks/{artifact-scraper-Z4UUIOH3.js → artifact-scraper-AJZ3LOQY.js} +2 -2
- package/chunks/{assumption-mining-2UAKQB6V.js → assumption-mining-EATDC4BB.js} +18 -18
- package/chunks/backend-connections-QE4NASAK.js +23 -0
- package/chunks/chunk-3XLEDCFX.js +566 -0
- package/chunks/{chunk-BGX53365.js → chunk-3XLFB46W.js} +5 -3
- package/chunks/{chunk-IXAHQICR.js → chunk-4TUR47H5.js} +8 -3
- package/chunks/{chunk-5WAJGLCW.js → chunk-4YRXIVPZ.js} +3 -3
- package/chunks/{chunk-4ZYYX5GY.js → chunk-52AWIBCT.js} +1 -1
- package/chunks/{chunk-TO35Y326.js → chunk-554D4AYM.js} +5 -2
- package/chunks/{chunk-GQ3DGHWE.js → chunk-5FHFG5P2.js} +174 -710
- package/chunks/chunk-5POT5OYF.js +733 -0
- package/chunks/chunk-62PGWN7Y.js +700 -0
- package/chunks/{chunk-H6Q2QAIY.js → chunk-A3EKBUEM.js} +1424 -859
- package/chunks/{chunk-6WQDXWQC.js → chunk-A6AZZ6XX.js} +2 -2
- package/chunks/{chunk-6YZE552K.js → chunk-AV5BF4V7.js} +1281 -2580
- package/chunks/{chunk-2WWAPKAW.js → chunk-BIJPMYFA.js} +6 -6
- package/chunks/{chunk-SCWWLABR.js → chunk-CIMN2AO6.js} +1 -1
- package/chunks/{chunk-H4DH7COV.js → chunk-CSPF47S3.js} +30 -20
- package/chunks/{chunk-RCRTSKQN.js → chunk-DNV3ZMPX.js} +1 -1
- package/chunks/{chunk-GVY3S5E5.js → chunk-E42XEJTK.js} +2 -2
- package/chunks/{chunk-VDOWARMJ.js → chunk-ESM447R6.js} +15 -1
- package/chunks/{chunk-WBRGXCU2.js → chunk-EXTN4SQV.js} +1 -1
- package/chunks/{chunk-QVIRWJ45.js → chunk-EYBMTELO.js} +108 -24
- package/chunks/chunk-FEOPHBMY.js +56 -0
- package/chunks/{chunk-IHPTOTLL.js → chunk-FKGFHLLS.js} +1 -1
- package/chunks/chunk-G2EJ3R5I.js +5198 -0
- package/chunks/chunk-GHEBZKUS.js +5417 -0
- package/chunks/chunk-GNR3APR6.js +295 -0
- package/chunks/{chunk-ELI3BVIK.js → chunk-H76JYUPE.js} +3 -3
- package/chunks/{chunk-E74LXQFY.js → chunk-HRBOZBMC.js} +1 -1
- package/chunks/{chunk-TM74SSHC.js → chunk-IIBNQTOK.js} +3 -2
- package/chunks/{chunk-UELXHK2Y.js → chunk-IK27KMVV.js} +16 -5
- package/chunks/{chunk-WHUAUFSX.js → chunk-J6G73WYF.js} +1 -1
- package/chunks/chunk-JSTLXPJS.js +284 -0
- package/chunks/{chunk-G2BE2FC7.js → chunk-O3ADFN2A.js} +1 -1
- package/chunks/chunk-O7Q2G2KW.js +117 -0
- package/chunks/{chunk-XODDLNBI.js → chunk-QEA2VHBD.js} +284 -33
- package/chunks/{chunk-C6JPA32H.js → chunk-RBOMXUYL.js} +3 -111
- package/chunks/{chunk-L2CCO4KE.js → chunk-RCHAFSWS.js} +838 -39
- package/chunks/{chunk-3BPX75OR.js → chunk-RD4FKFWR.js} +1 -1
- package/chunks/{chunk-DPUXXMJW.js → chunk-RPTO5FY2.js} +1 -1
- package/chunks/{chunk-6KFB6AYN.js → chunk-RZR2XXAK.js} +531 -17
- package/chunks/chunk-SGILXLR3.js +289 -0
- package/chunks/{chunk-E3OOBVOK.js → chunk-TOAAYJVN.js} +2 -2
- package/chunks/chunk-TOFIGQ63.js +83 -0
- package/chunks/{chunk-QWK4R3DB.js → chunk-TTDFBFNZ.js} +6 -6
- package/chunks/chunk-TZRHWP7R.js +736 -0
- package/chunks/chunk-UHUW45S3.js +164 -0
- package/chunks/{chunk-5JNTMWPK.js → chunk-V4BD7GSP.js} +2 -2
- package/chunks/{chunk-OAS5SAVZ.js → chunk-V5I5GAQH.js} +3226 -1683
- package/chunks/{chunk-PS5E7LUQ.js → chunk-W6IYTSZH.js} +79 -9
- package/chunks/{chunk-RTBZ36BD.js → chunk-WUPN3D37.js} +22 -248
- package/chunks/{chunk-CF3MNS3O.js → chunk-Y7KV7WV6.js} +2 -2
- package/chunks/{chunk-2OQOQ2FZ.js → chunk-YERUDEXT.js} +763 -688
- package/chunks/{chunk-CPCHLL6A.js → chunk-YJU7QACE.js} +1 -1
- package/chunks/{chunk-YED25PA4.js → chunk-YORL5S5V.js} +1 -1
- package/chunks/{chunk-YAZARMJY.js → chunk-YYOQADBB.js} +4 -3
- package/chunks/chunk-ZPFBQ3SD.js +127 -0
- package/chunks/{codex-models-Z43V3427.js → codex-models-FQPCWRPC.js} +7 -7
- package/chunks/{commands-EUGF4FUZ.js → commands-I5L3VD2A.js} +6187 -12196
- package/chunks/dashboard-B2AEGCFM.js +76 -0
- package/chunks/{db-NVAW4WWR.js → db-P5EIKMLP.js} +3 -3
- package/chunks/deep-review-I7RD5QSS.js +82 -0
- package/chunks/{disclose-LDNKAVRH.js → disclose-PFBWESVJ.js} +4 -2
- package/chunks/{dist-7RUOKPRJ.js → dist-3SWWY5FZ.js} +18 -2
- package/chunks/{dist-27BNG6WD.js → dist-AJU25UXA.js} +112 -63
- package/chunks/{dist-NG2HT5XU.js → dist-VK2M4HNW.js} +85 -1
- package/chunks/eval-runner-XVRX3R2Y.js +31 -0
- package/chunks/{exploit-agent-FCCR2HYX.js → exploit-agent-A4RTIJ4J.js} +1 -1
- package/chunks/{exploit-autoclimb-X5ZS5FAO.js → exploit-autoclimb-ABMMBC3M.js} +1 -1
- package/chunks/{exploit-climb-3JHGEO36.js → exploit-climb-BQ2SVU63.js} +2 -2
- package/chunks/{fix-NSNPU33B.js → fix-4YCLHFDT.js} +7 -7
- package/chunks/{harness-KXQOVIDQ.js → harness-DHWULEIZ.js} +3 -3
- package/chunks/{hunt-scan-ELTKGKC4.js → hunt-scan-DXV5H6YN.js} +16 -16
- package/chunks/{kernel-primitive-MT7YZSIG.js → kernel-primitive-SF4NALVR.js} +2 -2
- package/chunks/{kernel-vm-runner-YFRHYC6G.js → kernel-vm-runner-WEBEZEIC.js} +2 -2
- package/chunks/local-engine-XUG7XRKM.js +21 -0
- package/chunks/managed-operation-SQFMBWHG.js +60 -0
- package/chunks/{memsafety-scan-FCPAXIZE.js → memsafety-scan-L2Z7E7TE.js} +2 -2
- package/chunks/{native-loop-OFJDRHPI.js → native-loop-ZNAELJGB.js} +14 -13
- package/chunks/orchestrate-YHFJXGID.js +63 -0
- package/chunks/{prepare-72GWTRVI.js → prepare-SODWQN6O.js} +5 -5
- package/chunks/provider-model-discovery-QGUGL3XW.js +277 -0
- package/chunks/remote-workflow-runtime-XNNGI2PG.js +12 -0
- package/chunks/{run-WTJCZZHV.js → run-5T4Z3Q2D.js} +924 -327
- package/chunks/{runtime-LCJ4XSKE.js → runtime-HFFRUOPL.js} +4 -2
- package/chunks/{runtime-FCKOUB7V.js → runtime-MB4GEFBY.js} +7 -7
- package/chunks/{scan-stream-GT6GKQ3U.js → scan-stream-GXBJHCDF.js} +3 -2
- package/chunks/{scope-E5QZUOOH.js → scope-M7L3CD6X.js} +2 -2
- package/chunks/service-plugins-BGS6QKSZ.js +64 -0
- package/chunks/{session-store-H3Q7KCYG.js → session-store-K7I4GLNH.js} +2 -2
- package/chunks/{variant-candidates-SZKDCOLK.js → variant-candidates-2KSP5EHH.js} +7 -7
- package/chunks/{web-recon-prepass-IO3GXQMW.js → web-recon-prepass-RAXXTEWH.js} +5 -5
- package/chunks/workflow-runtime-V26HIJO3.js +178 -0
- package/dashboard/assets/abnfDiagram-VCTEODGH-CGCueOp5.js +1 -0
- package/dashboard/assets/arc-BjZaQcCc.js +1 -0
- package/dashboard/assets/architecture-7GRP2DOG-hcbO-9zX.js +1 -0
- package/dashboard/assets/architectureDiagram-5GKGNRK7-DReOXTSq.js +36 -0
- package/dashboard/assets/array-BifhSqXX.js +1 -0
- package/dashboard/assets/blockDiagram-I7D4REHJ-C-byT12_.js +129 -0
- package/dashboard/assets/c4Diagram-7LVT6UL2-DoYjz-Uv.js +38 -0
- package/dashboard/assets/channel-CUURBnpZ.js +1 -0
- package/dashboard/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
- package/dashboard/assets/chunk-4HAMMTFA-NBNp2zdt.js +62 -0
- package/dashboard/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
- package/dashboard/assets/chunk-75Z2AOVW-BHmkuP0B.js +2 -0
- package/dashboard/assets/chunk-DU6HZSFF-DgfLNaL2.js +127 -0
- package/dashboard/assets/chunk-F27PBJKO-3wwNFUgZ.js +1 -0
- package/dashboard/assets/chunk-FOHPRMQF-DHwB1DNv.js +161 -0
- package/dashboard/assets/chunk-GMAD6QVW-Btg7huZW.js +72 -0
- package/dashboard/assets/chunk-GVQU2GXP-ihCURK5O.js +1 -0
- package/dashboard/assets/chunk-IMKFNOWR-FsXj7slg.js +231 -0
- package/dashboard/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
- package/dashboard/assets/chunk-L3NEJ4N5-DorFIxJY.js +1 -0
- package/dashboard/assets/chunk-OSK3NFVY-DKun_KfC.js +10 -0
- package/dashboard/assets/chunk-P2QGCYS3-XGgiU1Bz.js +1 -0
- package/dashboard/assets/chunk-POPQ4Y6H-BTXEnGhJ.js +1 -0
- package/dashboard/assets/chunk-PWAF6VOD-DYZcGkTL.js +1 -0
- package/dashboard/assets/chunk-SHT3W25Y-C4WQfwf8.js +168 -0
- package/dashboard/assets/chunk-SVP7TREG-C4nCh0-1.js +88 -0
- package/dashboard/assets/chunk-TICWLB2K-DSB-IiGc.js +206 -0
- package/dashboard/assets/chunk-XXDRQBXY-CS6fjUcj.js +1 -0
- package/dashboard/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
- package/dashboard/assets/classDiagram-ZZMXUADV-CD1Buc26.js +1 -0
- package/dashboard/assets/classDiagram-v2-VYDZK3BY-CD1Buc26.js +1 -0
- package/dashboard/assets/common-BMdQBwfR.js +5 -0
- package/dashboard/assets/cose-bilkent-JH36ORCC-CUjQHTML.js +1 -0
- package/dashboard/assets/cynefin-OW5HDTMX-BC7zCtFq.js +1 -0
- package/dashboard/assets/cynefinDiagram-5FMLGOSQ-CgDOOY67.js +62 -0
- package/dashboard/assets/cytoscape.esm-CGd-uY3x.js +321 -0
- package/dashboard/assets/dagre-GXQ25YYZ-Dqc8FS9x.js +4 -0
- package/dashboard/assets/dagre-PrKaheQc.js +1 -0
- package/dashboard/assets/defaultLocale-BFoDCU3G.js +1 -0
- package/dashboard/assets/diagram-S7CK7UJ4-CrKqRXZb.js +30 -0
- package/dashboard/assets/diagram-UQ7AKVKN-Cu6Es0-v.js +41 -0
- package/dashboard/assets/diagram-VSXAHHWV-eK4d8FwS.js +3 -0
- package/dashboard/assets/diagram-VX7I27RA-bFxeFKOc.js +24 -0
- package/dashboard/assets/diagram-Z3DM3KII-C0ClmnhC.js +24 -0
- package/dashboard/assets/dist-BZh8Kb3O.js +1 -0
- package/dashboard/assets/ebnfDiagram-PWID7BFC-CUqxFPzf.js +1 -0
- package/dashboard/assets/erDiagram-RLTQ6QDP-CcYM7pLi.js +99 -0
- package/dashboard/assets/eventmodeling-NTZA5JFV-D8ZNnPkV.js +1 -0
- package/dashboard/assets/flowDiagram-HODETNUW-pDb1AYm8.js +1 -0
- package/dashboard/assets/ganttDiagram-EL5Y4UJY-UmZfbMyD.js +292 -0
- package/dashboard/assets/gitGraph-4MIJSDKK-mvNUo0ZA.js +1 -0
- package/dashboard/assets/gitGraphDiagram-WWUBYQGX-CvzeCxVy.js +106 -0
- package/dashboard/assets/graphlib-DS17s2tU.js +1 -0
- package/dashboard/assets/info-A6RAGUB7-DChKqZMi.js +1 -0
- package/dashboard/assets/infoDiagram-27XIBGKW-DjkpNtVW.js +2 -0
- package/dashboard/assets/init-C-OQMol4.js +1 -0
- package/dashboard/assets/ishikawaDiagram-5VMMS53U-8FhjJaWT.js +70 -0
- package/dashboard/assets/journeyDiagram-3NMN7TZE-DyNJ755f.js +139 -0
- package/dashboard/assets/kanban-definition-UXKFOSKX-_jCmtaY1.js +89 -0
- package/dashboard/assets/katex-BdBmVSus.js +257 -0
- package/dashboard/assets/line-Bf0nxyWf.js +1 -0
- package/dashboard/assets/linear-Bl6JKbf4.js +1 -0
- package/dashboard/assets/mermaid-parser.core-Cc6sgCzs.js +7 -0
- package/dashboard/assets/mermaid.core-B4yCwiN-.js +44 -0
- package/dashboard/assets/mindmap-definition-YA3MSWOX-D5DjWyXj.js +96 -0
- package/dashboard/assets/operations-B7JAWOi6.js +130 -0
- package/dashboard/assets/operations-QjKT0Hwi.css +1 -0
- package/dashboard/assets/ordinal-BDEzSJ7C.js +1 -0
- package/dashboard/assets/packet-AYTQ26CC-bQXLDhQC.js +1 -0
- package/dashboard/assets/path-fybaL0A-.js +1 -0
- package/dashboard/assets/pegDiagram-XKGWAZYB-Bf6a1vaf.js +1 -0
- package/dashboard/assets/pie-WAS4IAKB-DfzoABIi.js +1 -0
- package/dashboard/assets/pieDiagram-E7YTZNPT-D0L1qbch.js +39 -0
- package/dashboard/assets/quadrantDiagram-AXDQQJYC-CbFyy2Pe.js +7 -0
- package/dashboard/assets/radar-RG4KPBEZ-CZ2pyeUT.js +1 -0
- package/dashboard/assets/railroad-74A4TZTK-CP4Jazfd.js +1 -0
- package/dashboard/assets/railroad-abnf-HS5TGJTU-3MvEiHwD.js +1 -0
- package/dashboard/assets/railroad-ebnf-LZEXJU2U-BWto6cXE.js +1 -0
- package/dashboard/assets/railroad-peg-WCYAUIDC-DasEjbyf.js +1 -0
- package/dashboard/assets/railroadDiagram-O6MQD6OU-t7Gp9g2R.js +1 -0
- package/dashboard/assets/requirementDiagram-BXWQKSXE-LYmqeBXi.js +84 -0
- package/dashboard/assets/rough.esm-Dy-Kn_BL.js +1 -0
- package/dashboard/assets/sankeyDiagram-P5KCCOFB-DnpfA_94.js +40 -0
- package/dashboard/assets/sequenceDiagram-WJ2MYXX4-C8s3pTUE.js +162 -0
- package/dashboard/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -0
- package/dashboard/assets/src-CaNUT1AQ.js +1 -0
- package/dashboard/assets/stateDiagram-D77RDMKH-BMzm6fK1.js +1 -0
- package/dashboard/assets/stateDiagram-v2-MP3YSRHH-B3REMjpY.js +1 -0
- package/dashboard/assets/swimlanes-42K2YHIH-uJE05Tt_.js +1 -0
- package/dashboard/assets/swimlanesDiagram-VR7AAH4N-CIaVMZEy.js +8 -0
- package/dashboard/assets/timeline-definition-24CTP7MA-BfLJMVeG.js +120 -0
- package/dashboard/assets/treeView-Q6P3EWNA-ZOE2enu2.js +1 -0
- package/dashboard/assets/treemap-WGGIJYW6-yIZoPBF5.js +1 -0
- package/dashboard/assets/vennDiagram-4TSXK5OY-BYJRHEaL.js +34 -0
- package/dashboard/assets/wardley-WFR3VGLG-D5V-jLbB.js +1 -0
- package/dashboard/assets/wardleyDiagram-VM6X3IG4-DgPN4nSe.js +78 -0
- package/dashboard/assets/xychartDiagram-S5SC5T6Z-BhkAMAOT.js +7 -0
- package/dashboard/index.html +3 -3
- package/package.json +3 -2
- package/worker-assets/demo-target/README.md +15 -0
- package/worker-assets/demo-target/include/decoder.h +27 -0
- package/worker-assets/demo-target/patched-decoder.c +40 -0
- package/worker-assets/demo-target/src/decoder.c +50 -0
- package/worker-assets/demo-target/witness-65537x1.bin +0 -0
- package/chunks/chunk-FFHRANYC.js +0 -547
- package/chunks/eval-runner-6Q3H52SP.js +0 -30
- package/chunks/orchestrate-DRZ2SVCP.js +0 -62
- package/chunks/service-plugins-MSK2EQP6.js +0 -62
- package/dashboard/assets/operations-BvB5Qpmk.css +0 -1
- package/dashboard/assets/operations-D8Ii01SV.js +0 -114
- package/dashboard/assets/zero-peek-Dzm3MT3X.png +0 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __0CreateRequire } from "node:module";
|
|
3
|
+
const require = __0CreateRequire(import.meta.url);
|
|
4
|
+
import {
|
|
5
|
+
createRemoteWorkflowRuntime
|
|
6
|
+
} from "./chunk-ZPFBQ3SD.js";
|
|
7
|
+
import {
|
|
8
|
+
BackendConnectionRegistry
|
|
9
|
+
} from "./chunk-TZRHWP7R.js";
|
|
10
|
+
import {
|
|
11
|
+
resolveOsecDbPath
|
|
12
|
+
} from "./chunk-RCHAFSWS.js";
|
|
13
|
+
import {
|
|
14
|
+
homeStateDir
|
|
15
|
+
} from "./chunk-RZR2XXAK.js";
|
|
16
|
+
import {
|
|
17
|
+
external_exports
|
|
18
|
+
} from "./chunk-VIT5ALXF.js";
|
|
19
|
+
|
|
20
|
+
// packages/cli/src/local-engine.ts
|
|
21
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
22
|
+
import { constants, closeSync, fstatSync, lstatSync, mkdirSync, openSync, readSync, realpathSync, unlinkSync, writeFileSync } from "node:fs";
|
|
23
|
+
import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
24
|
+
var MAX_DESCRIPTOR = 16 * 1024;
|
|
25
|
+
var HAS_POSIX_PERMISSIONS = process.platform !== "win32";
|
|
26
|
+
var schema = external_exports.object({
|
|
27
|
+
schemaVersion: external_exports.literal(1),
|
|
28
|
+
nonce: external_exports.string().uuid(),
|
|
29
|
+
url: external_exports.string().min(1).max(4096),
|
|
30
|
+
token: external_exports.string().min(32).max(4096).regex(/^[^\s\x00-\x1f\x7f]+$/),
|
|
31
|
+
engineId: external_exports.string().min(1).max(128),
|
|
32
|
+
serverInstanceId: external_exports.string().min(1).max(128),
|
|
33
|
+
pid: external_exports.number().int().positive(),
|
|
34
|
+
workspace: external_exports.string().min(1).max(4096)
|
|
35
|
+
}).strict();
|
|
36
|
+
function localEngineDescriptorPath(dbPath, homeDir) {
|
|
37
|
+
const db = resolveOsecDbPath(dbPath);
|
|
38
|
+
const key = createHash("sha256").update(db === ":memory:" ? db : resolve(db)).digest("hex");
|
|
39
|
+
return join(homeStateDir(homeDir), "engines", `${key}.json`);
|
|
40
|
+
}
|
|
41
|
+
function secureMetadata(path, create) {
|
|
42
|
+
const directory = dirname(path);
|
|
43
|
+
if (create) mkdirSync(directory, { recursive: true, mode: 448 });
|
|
44
|
+
let stat;
|
|
45
|
+
try {
|
|
46
|
+
stat = lstatSync(directory);
|
|
47
|
+
} catch (error) {
|
|
48
|
+
if (!create && error.code === "ENOENT") return false;
|
|
49
|
+
throw error;
|
|
50
|
+
}
|
|
51
|
+
if (!stat.isDirectory() || stat.isSymbolicLink() || HAS_POSIX_PERMISSIONS && (stat.mode & 63) !== 0 || process.getuid && stat.uid !== process.getuid()) throw new Error("Local engine discovery directory must be owned by this user with private permissions (0700).");
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
function loopbackUrl(value) {
|
|
55
|
+
const url = new URL(value);
|
|
56
|
+
if (!["http:", "https:"].includes(url.protocol) || !(url.hostname === "localhost" || url.hostname === "[::1]" || /^127\.(?:\d{1,3}\.){2}\d{1,3}$/.test(url.hostname)) || url.username || url.password || url.search || url.hash || url.pathname !== "/") throw new Error("Local engine discovery requires a credential-free loopback URL.");
|
|
57
|
+
return url.href;
|
|
58
|
+
}
|
|
59
|
+
function readDescriptor(path) {
|
|
60
|
+
if (!secureMetadata(path, false)) return null;
|
|
61
|
+
let fd;
|
|
62
|
+
try {
|
|
63
|
+
const entry = lstatSync(path);
|
|
64
|
+
if (entry.isSymbolicLink() || !entry.isFile()) throw new Error("Discovery metadata must be a regular file, never a symlink.");
|
|
65
|
+
fd = openSync(path, constants.O_RDONLY | constants.O_NONBLOCK | constants.O_NOFOLLOW);
|
|
66
|
+
} catch (error) {
|
|
67
|
+
if (error.code === "ENOENT") return null;
|
|
68
|
+
throw new Error("Cannot safely read local engine discovery metadata.", { cause: error });
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
const stat = fstatSync(fd);
|
|
72
|
+
if (!stat.isFile() || stat.size > MAX_DESCRIPTOR || HAS_POSIX_PERMISSIONS && (stat.mode & 63) !== 0 || process.getuid && stat.uid !== process.getuid()) throw new Error("Local engine descriptor must be a private regular file owned by this user, at most 16 KiB.");
|
|
73
|
+
const buffer = Buffer.alloc(MAX_DESCRIPTOR + 1);
|
|
74
|
+
let length = 0;
|
|
75
|
+
while (length < buffer.length) {
|
|
76
|
+
const bytes = readSync(fd, buffer, length, buffer.length - length, length);
|
|
77
|
+
if (!bytes) break;
|
|
78
|
+
length += bytes;
|
|
79
|
+
}
|
|
80
|
+
if (length > MAX_DESCRIPTOR) throw new Error("Local engine descriptor exceeds 16 KiB.");
|
|
81
|
+
const descriptor = schema.parse(JSON.parse(buffer.subarray(0, length).toString("utf8")));
|
|
82
|
+
loopbackUrl(descriptor.url);
|
|
83
|
+
if (!isAbsolute(descriptor.workspace) || /[\x00-\x1f]/.test(descriptor.workspace)) throw new Error("Local engine descriptor workspace must be an absolute path.");
|
|
84
|
+
return descriptor;
|
|
85
|
+
} finally {
|
|
86
|
+
closeSync(fd);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function deadPid(pid) {
|
|
90
|
+
try {
|
|
91
|
+
process.kill(pid, 0);
|
|
92
|
+
return false;
|
|
93
|
+
} catch (error) {
|
|
94
|
+
return error.code === "ESRCH";
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function removeMatching(path, nonce) {
|
|
98
|
+
if (readDescriptor(path)?.nonce === nonce) unlinkSync(path);
|
|
99
|
+
}
|
|
100
|
+
function assertLocalEngineAvailable(dbPath, homeDir) {
|
|
101
|
+
if (resolveOsecDbPath(dbPath) === ":memory:") return;
|
|
102
|
+
const path = localEngineDescriptorPath(dbPath, homeDir);
|
|
103
|
+
const descriptor = readDescriptor(path);
|
|
104
|
+
if (!descriptor) return;
|
|
105
|
+
if (!deadPid(descriptor.pid)) throw new Error("A running local engine already owns this database. Attach to it or shut it down before starting another engine.");
|
|
106
|
+
removeMatching(path, descriptor.nonce);
|
|
107
|
+
}
|
|
108
|
+
function registerLocalEngine(input, dbPath, options = {}) {
|
|
109
|
+
if (resolveOsecDbPath(dbPath) === ":memory:") return () => {
|
|
110
|
+
};
|
|
111
|
+
const path = localEngineDescriptorPath(dbPath, options.homeDir);
|
|
112
|
+
secureMetadata(path, true);
|
|
113
|
+
const descriptor = schema.parse({ ...input, url: loopbackUrl(input.url), workspace: realpathSync(input.workspace), schemaVersion: 1, nonce: randomUUID() });
|
|
114
|
+
const previous = readDescriptor(path);
|
|
115
|
+
if (previous) {
|
|
116
|
+
if (!deadPid(previous.pid)) throw new Error("A local engine already owns this database. Attach to it or shut it down before starting another engine.");
|
|
117
|
+
removeMatching(path, previous.nonce);
|
|
118
|
+
}
|
|
119
|
+
writeFileSync(path, JSON.stringify(descriptor), { flag: "wx", mode: 384 });
|
|
120
|
+
return () => removeMatching(path, descriptor.nonce);
|
|
121
|
+
}
|
|
122
|
+
async function connectLocalEngine(options) {
|
|
123
|
+
if (resolveOsecDbPath(options.dbPath) === ":memory:") return null;
|
|
124
|
+
const path = localEngineDescriptorPath(options.dbPath, options.homeDir);
|
|
125
|
+
const descriptor = readDescriptor(path);
|
|
126
|
+
if (!descriptor) return null;
|
|
127
|
+
if (deadPid(descriptor.pid)) {
|
|
128
|
+
removeMatching(path, descriptor.nonce);
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
if (realpathSync(options.workspace) !== descriptor.workspace) throw new Error("The running local engine owns this database in another workspace. Select its workspace or a separate engine database.");
|
|
132
|
+
if (options.model !== void 0 || options.scopePath !== void 0 || options.allowApply === true) throw new Error("The running local engine owns model, scope and application permissions. Attach using its configuration instead of overriding it.");
|
|
133
|
+
const backendId = "discovered-local-engine";
|
|
134
|
+
const registry = new BackendConnectionRegistry({
|
|
135
|
+
connections: [{ id: backendId, name: "Running local engine", url: descriptor.url, bearerTokenEnv: "LOCAL_ENGINE_DISCOVERY_TOKEN", expectedEngineId: descriptor.engineId }],
|
|
136
|
+
env: { LOCAL_ENGINE_DISCOVERY_TOKEN: descriptor.token },
|
|
137
|
+
timeoutMs: 3e3,
|
|
138
|
+
localHandshake: { protocolVersion: 1, engineId: descriptor.engineId, serverInstanceId: descriptor.serverInstanceId, capabilities: [], platform: { os: process.platform, pathStyle: process.platform === "win32" ? "windows" : "posix" } }
|
|
139
|
+
});
|
|
140
|
+
try {
|
|
141
|
+
const runtime = await createRemoteWorkflowRuntime({ backendId }, {
|
|
142
|
+
handshake: async (id) => {
|
|
143
|
+
const connection = await registry.handshake(id);
|
|
144
|
+
if (connection.handshake?.serverInstanceId !== descriptor.serverInstanceId) throw new Error("The discovered local engine instance changed. Refresh its registration before attaching.");
|
|
145
|
+
return connection;
|
|
146
|
+
},
|
|
147
|
+
request: (id, path2, request) => registry.request(id, path2, request)
|
|
148
|
+
});
|
|
149
|
+
return { ...runtime, dispose: async () => {
|
|
150
|
+
await runtime.dispose();
|
|
151
|
+
registry.dispose();
|
|
152
|
+
} };
|
|
153
|
+
} catch (error) {
|
|
154
|
+
registry.dispose();
|
|
155
|
+
throw new Error("The registered local engine could not be reached or authenticated. Restart that engine; no replacement host was started.", { cause: error });
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
export {
|
|
160
|
+
localEngineDescriptorPath,
|
|
161
|
+
assertLocalEngineAvailable,
|
|
162
|
+
registerLocalEngine,
|
|
163
|
+
connectLocalEngine
|
|
164
|
+
};
|
|
@@ -4,10 +4,10 @@ const require = __0CreateRequire(import.meta.url);
|
|
|
4
4
|
import {
|
|
5
5
|
getToolsForRole,
|
|
6
6
|
runNativeAgentLoop
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-A3EKBUEM.js";
|
|
8
8
|
import {
|
|
9
9
|
LlmApiRuntime
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-EYBMTELO.js";
|
|
11
11
|
|
|
12
12
|
// packages/core/dist/eval-runner.js
|
|
13
13
|
import { randomUUID } from "node:crypto";
|