0sec-cli 0.18.0 → 0.21.4
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/{0sec.js → 0.js} +84 -76
- package/LICENSE +1 -1
- package/README.md +74 -43
- package/chunks/adapt-loop-IGBRQAXO.js +18 -0
- package/chunks/{adgraph-JLGA6RYI.js → adgraph-AUDQTBYA.js} +5 -5
- package/chunks/agent/skills/frameworks/entra-id.yaml +2 -2
- package/chunks/agent/skills/techniques/assumption-mining.yaml +2 -2
- package/chunks/agent/skills/techniques/cve-poc-adaptation.yaml +2 -2
- package/chunks/agent/skills/techniques/entra-attack-paths.yaml +1 -1
- package/chunks/agent/skills/techniques/kernel-weaponization.yaml +1 -1
- package/chunks/agent/skills/techniques/llm-prompt-injection.yaml +2 -2
- package/chunks/agent/skills/techniques/npm-ecosystem.yaml +1 -1
- package/chunks/agent/skills/techniques/poc-verification.yaml +1 -1
- package/chunks/agent/skills/techniques/seedless-depth-review.yaml +20 -38
- package/chunks/{artifact-scraper-HQ7HLP6V.js → artifact-scraper-LNQJUORS.js} +6 -6
- package/chunks/{assumption-mining-5SNIVVDN.js → assumption-mining-4MJTP6H5.js} +24 -26
- package/chunks/{chunk-P6WKNFWX.js → chunk-2OQOQ2FZ.js} +8 -8
- package/chunks/{chunk-5G3ZXFBW.js → chunk-2WNCI664.js} +3 -3
- package/chunks/{chunk-AHTBZC3E.js → chunk-2WSXFFJZ.js} +4 -4
- package/chunks/{chunk-DW5UWPFY.js → chunk-4VGLO2YS.js} +6 -5
- package/chunks/{chunk-3KPWWJCI.js → chunk-5T6D5BVY.js} +88 -88
- package/chunks/{chunk-OEFNRYI2.js → chunk-6GHSR47F.js} +3 -6
- package/chunks/chunk-6YNKRUMC.js +4474 -0
- package/chunks/{chunk-BZNEY2ZS.js → chunk-ANDKY54G.js} +22390 -19895
- package/chunks/{chunk-53G27VPS.js → chunk-AZ7L3HFD.js} +7 -2
- package/chunks/{chunk-UR4ELX2Y.js → chunk-BACXRTQ4.js} +633 -316
- package/chunks/{chunk-UCYRA73C.js → chunk-CAJJRUTV.js} +4 -4
- package/chunks/{chunk-57ZENEX2.js → chunk-CGHCEN7W.js} +3 -3
- package/chunks/{chunk-AD7WXDH6.js → chunk-CL5KAUM6.js} +16 -16
- package/chunks/{chunk-ADOLI6DT.js → chunk-CXKDWFNO.js} +6 -6
- package/chunks/{chunk-RWONANDA.js → chunk-DQTNI3KY.js} +5 -5
- package/chunks/{chunk-BFR2CDV5.js → chunk-E2UOY5PJ.js} +288 -100
- package/chunks/{chunk-ATATQACO.js → chunk-ER3SUMYJ.js} +40 -18
- package/chunks/{chunk-5JI7L7KV.js → chunk-FAH6V4QM.js} +30515 -32242
- package/chunks/{chunk-6LKRLK2R.js → chunk-FHC2B7LN.js} +3 -3
- package/chunks/{chunk-XM5NLHYU.js → chunk-FWAYJ2IV.js} +16 -16
- package/chunks/{chunk-WVTBZEQO.js → chunk-G34QP2XW.js} +8 -8
- package/chunks/{chunk-MYVT64FN.js → chunk-GHWODZMR.js} +2 -2
- package/chunks/{chunk-F3WBKITT.js → chunk-GIQKESMN.js} +10 -10
- package/chunks/{chunk-2RMLOJVB.js → chunk-GVD6SJGH.js} +2 -2
- package/chunks/{chunk-WXQ6BJ6A.js → chunk-HBKCGJAV.js} +7 -7
- package/chunks/{chunk-SF4KZ4O3.js → chunk-HLFS6WV2.js} +2 -2
- package/chunks/chunk-HPQZHOIU.js +67 -0
- package/chunks/{chunk-TSK2AG6J.js → chunk-IMGWPNQM.js} +231 -1308
- package/chunks/{chunk-3MOLBTLS.js → chunk-K2PWUPUI.js} +2 -2
- package/chunks/{chunk-N7BOUYEV.js → chunk-NDJU5ZZ7.js} +14 -14
- package/chunks/{chunk-BVAZO4WA.js → chunk-NOPBXZUV.js} +3 -3
- package/chunks/{chunk-2JCCA2JL.js → chunk-O6SD4A36.js} +3 -3
- package/chunks/{chunk-SAFFWQW4.js → chunk-P6YG6TEZ.js} +6 -6
- package/chunks/{chunk-6L26OBWI.js → chunk-PC6RCKQV.js} +198 -11
- package/chunks/{chunk-LP3HHYQU.js → chunk-PD2BBBKT.js} +2 -2
- package/chunks/{chunk-BKZFDZ23.js → chunk-QCUFBVIZ.js} +3 -3
- package/chunks/{chunk-KLTNTE2Z.js → chunk-QZVG3BG4.js} +14 -14
- package/chunks/{chunk-ASUR522M.js → chunk-RF5QGKLR.js} +9 -9
- package/chunks/{chunk-YYRBQVFE.js → chunk-SBMB4OL3.js} +9 -9
- package/chunks/{chunk-IOL7D5YV.js → chunk-SQCBHFWN.js} +3 -3
- package/chunks/{chunk-BFRB6HB2.js → chunk-TF46UWFU.js} +3 -3
- package/chunks/chunk-TH2LW437.js +7829 -0
- package/chunks/chunk-TRH2PJSN.js +547 -0
- package/chunks/{chunk-RJWOYEOG.js → chunk-UEX7PFSE.js} +5 -5
- package/chunks/{chunk-VQG4FT5D.js → chunk-UFHN6RIU.js} +2 -2
- package/chunks/{chunk-WU6AFRAZ.js → chunk-V36HVTUL.js} +12 -12
- package/chunks/{chunk-IR537GON.js → chunk-VCSFCHAJ.js} +2 -2
- package/chunks/{chunk-YLMN3N25.js → chunk-VIT5ALXF.js} +3 -3
- package/chunks/{chunk-U5FLXGHT.js → chunk-VOAXLO4A.js} +10 -10
- package/chunks/{chunk-WEBMRWEG.js → chunk-W4JOXE4N.js} +83 -75
- package/chunks/{chunk-C2WXWFBB.js → chunk-WF5W75WY.js} +25 -25
- package/chunks/{chunk-SVJEDVYK.js → chunk-WPQLBN4S.js} +5 -5
- package/chunks/{chunk-72CISA2D.js → chunk-WZISK5VC.js} +37 -35
- package/chunks/{chunk-CMKXP5RR.js → chunk-Y5H6E24H.js} +3 -3
- package/chunks/{chunk-BATRQBOR.js → chunk-YA4PUM4H.js} +41 -41
- package/chunks/{chunk-JQHOLLTD.js → chunk-YHWWF4QY.js} +9 -9
- package/chunks/{chunk-GMT2AZKM.js → chunk-YPOA3W4O.js} +28 -28
- package/chunks/{chunk-7DQEV5QI.js → chunk-Z3IKZX3X.js} +4 -4
- package/chunks/codex-models-TYYV4JNN.js +15 -0
- package/chunks/{commands-TBC2F5CE.js → commands-WF5RG4I2.js} +3834 -931
- package/chunks/corpus-v1.json +2 -2
- package/chunks/data/appsec-archetypes.json +2 -2
- package/chunks/data/chromium-archetypes.json +1 -1
- package/chunks/data/freebsd-archetypes.json +1 -1
- package/chunks/data/kernel-archetypes.json +2 -2
- package/chunks/db-U3WQZVAO.js +16 -0
- package/chunks/{disclose-EKTWSCGW.js → disclose-67GZCDBO.js} +5 -5
- package/chunks/{dist-FMGSR3DW.js → dist-ACC3DZUZ.js} +11 -5
- package/chunks/{dist-4MAW5X6L.js → dist-EVTN3UTT.js} +6 -6
- package/chunks/{dist-4YICS2J2.js → dist-F6X62TQK.js} +286 -327
- package/chunks/dist-KEULE5IQ.js +21914 -0
- package/chunks/dist-XZB53PS5.js +53 -0
- package/chunks/eval-runner-SA6OUGHZ.js +26 -0
- package/chunks/example-manifest.json +2 -2
- package/chunks/{exploit-agent-45YQOHPJ.js → exploit-agent-36Q7XQFP.js} +4 -4
- package/chunks/{exploit-autoclimb-UZGEMGYT.js → exploit-autoclimb-J4OTSTZ6.js} +6 -6
- package/chunks/{exploit-climb-SG23KB2G.js → exploit-climb-PYEJDIC4.js} +12 -12
- package/chunks/fix-J2KBRJDV.js +12 -0
- package/chunks/{github-issues-MJ6OYOOU.js → github-issues-IGTTWM7V.js} +7 -7
- package/chunks/harness-GDUMKGSE.js +22 -0
- package/chunks/http-conformance-U5F6GKYG.js +11 -0
- package/chunks/http-sender-I5XFFY35.js +10 -0
- package/chunks/hunt-scan-UDJSCISU.js +36 -0
- package/chunks/{identity-6ZAIIWOR.js → identity-JTIVJSV7.js} +5 -5
- package/chunks/{kernel-primitive-7U6CWHXD.js → kernel-primitive-F2IXUFAX.js} +6 -6
- package/chunks/{kernel-vm-runner-3JAU4O6J.js → kernel-vm-runner-276LHIOV.js} +6 -6
- package/chunks/memsafety-scan-NHUOGTEX.js +16 -0
- package/chunks/{native-loop-RJCJPOUS.js → native-loop-3BSYVDUI.js} +17 -18
- package/chunks/{npm-detectors-KB5Y5ZFX.js → npm-detectors-VIYJXKFQ.js} +6 -6
- package/chunks/npm-dynamic-discovery-5J7FT3XM.js +13 -0
- package/chunks/orchestrate-DHBFRTSI.js +59 -0
- package/chunks/{pre-recon-cve-66EB6G4M.js → pre-recon-cve-X2K2P5YQ.js} +4 -4
- package/chunks/prepare-KYHGFWCJ.js +13 -0
- package/chunks/process-PNMC36JI.js +15 -0
- package/chunks/{replay-runner-45G3VU7X.js → replay-runner-LK2XFIVG.js} +7 -7
- package/chunks/{run-D56MPDKY.js → run-CBGE6DRQ.js} +2201 -1694
- package/chunks/{runtime-G7YWIO3B.js → runtime-PXO5G6UV.js} +11 -11
- package/chunks/runtime-XFWJTBUO.js +12 -0
- package/chunks/{scan-stream-FHI2FYZE.js → scan-stream-BMOCPKQX.js} +7 -7
- package/chunks/{scope-BI7BF4ZY.js → scope-NJHIDDTN.js} +4 -4
- package/chunks/{session-store-GZ4A4KYT.js → session-store-46WBZM22.js} +6 -6
- package/chunks/source-files-REHOM44I.js +12 -0
- package/chunks/{specdrift-WCLH6TTQ.js → specdrift-AFS54WEJ.js} +5 -5
- package/chunks/token-KRWP5JYA.js +72 -0
- package/chunks/token-util-DWTL33S3.js +8 -0
- package/chunks/variant-candidates-UH2WC2HA.js +13 -0
- package/chunks/{web-recon-prepass-JJGPEOLE.js → web-recon-prepass-SFXU44SS.js} +9 -9
- package/dashboard/assets/desktop-BT7RkC4q.js +32 -0
- package/dashboard/assets/desktop-OaBI0E0e.css +1 -0
- package/dashboard/assets/{findings-page-CACW9nw2.js → findings-page-B4rwF6fZ.js} +2 -2
- package/dashboard/assets/{format-PoISqsES.js → format-LNQSSpn6.js} +1 -1
- package/dashboard/assets/live-page-DoNwpPAO.js +1 -0
- package/dashboard/assets/{meta-tile-CcskIV_o.js → meta-tile-BMtBC-Qq.js} +1 -1
- package/dashboard/assets/operations-CMFVrXEe.css +2 -0
- package/dashboard/assets/operations-app-ER0gg7GN.js +2 -0
- package/dashboard/assets/{operations-D8nUP5_m.js → operations-e2CGYKB1.js} +2 -2
- package/dashboard/assets/{overview-page-DTGS8dPo.js → overview-page-CmeWH17A.js} +1 -1
- package/dashboard/assets/{page-header-MFVvEtZW.js → page-header-CIJyycfz.js} +1 -1
- package/dashboard/assets/scans-page-CuhzWhHx.js +1 -0
- package/dashboard/assets/{table-BYS-nIVA.js → table-BgsSBdke.js} +1 -1
- package/dashboard/assets/{tabs-DivxbhQy.js → tabs-vn6v7Bk6.js} +1 -1
- package/dashboard/desktop.html +3 -3
- package/dashboard/index.html +3 -3
- package/package.json +11 -11
- package/chunks/adapt-loop-SMH6V4PD.js +0 -18
- package/chunks/appsec-catalog-CBWHGTEL.js +0 -24
- package/chunks/chunk-242TMK6G.js +0 -110
- package/chunks/chunk-H2FFLZNK.js +0 -3
- package/chunks/chunk-QI233I24.js +0 -333
- package/chunks/chunk-RRMJC3ZE.js +0 -105
- package/chunks/chunk-Z5FA2XOX.js +0 -2798
- package/chunks/cost-ledger-NU63MYZM.js +0 -13
- package/chunks/db-KFWOAUUB.js +0 -16
- package/chunks/eval-runner-7ZF472KV.js +0 -27
- package/chunks/fix-IG7LYXH3.js +0 -12
- package/chunks/harness-7ODOLOWU.js +0 -22
- package/chunks/http-conformance-DU66MZIU.js +0 -11
- package/chunks/http-sender-GWH2IYEA.js +0 -10
- package/chunks/hunt-scan-MMKUOETU.js +0 -38
- package/chunks/memsafety-scan-J7SECV5W.js +0 -16
- package/chunks/npm-dynamic-discovery-AHROOZDB.js +0 -13
- package/chunks/orchestrate-OC2VZN2X.js +0 -62
- package/chunks/pipeline-BZK5BLJR.js +0 -14
- package/chunks/prepare-MYY743TK.js +0 -13
- package/chunks/process-LQRCS5OY.js +0 -13
- package/chunks/runtime-J7PLXZNM.js +0 -12
- package/chunks/source-files-PWRQR6LY.js +0 -12
- package/chunks/variant-candidates-YERCYMPD.js +0 -13
- package/dashboard/assets/0sec-icon-66SreztZ.gif +0 -0
- package/dashboard/assets/desktop-CXTQonNm.js +0 -32
- package/dashboard/assets/desktop-NOekk4QS.css +0 -1
- package/dashboard/assets/live-page-DrgQqQK5.js +0 -1
- package/dashboard/assets/operations-BKE8T-vY.css +0 -2
- package/dashboard/assets/operations-app-CQQhG54n.js +0 -2
- package/dashboard/assets/scans-page-ChVtq8Us.js +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { createRequire as
|
|
3
|
-
const require =
|
|
2
|
+
import { createRequire as __0CreateRequire } from "node:module";
|
|
3
|
+
const require = __0CreateRequire(import.meta.url);
|
|
4
4
|
|
|
5
5
|
// packages/core/dist/agent/cve-exploit-codex.js
|
|
6
6
|
var CVE_EXPLOIT_CODEX = {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { createRequire as
|
|
3
|
-
const require =
|
|
4
|
-
import {
|
|
5
|
-
LlmApiRuntime
|
|
6
|
-
} from "./chunk-UR4ELX2Y.js";
|
|
2
|
+
import { createRequire as __0CreateRequire } from "node:module";
|
|
3
|
+
const require = __0CreateRequire(import.meta.url);
|
|
7
4
|
import {
|
|
8
5
|
ProcessRuntime
|
|
9
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-ER3SUMYJ.js";
|
|
7
|
+
import {
|
|
8
|
+
LlmApiRuntime
|
|
9
|
+
} from "./chunk-BACXRTQ4.js";
|
|
10
10
|
|
|
11
11
|
// packages/core/dist/runtime/cli-native.js
|
|
12
12
|
import { spawn } from "node:child_process";
|
|
@@ -215,7 +215,7 @@ function buildClaudePromptFromLastUser(messages) {
|
|
|
215
215
|
}
|
|
216
216
|
const parts = [];
|
|
217
217
|
if (toolResults.length > 0) {
|
|
218
|
-
parts.push(`[
|
|
218
|
+
parts.push(`[0:tool_results]
|
|
219
219
|
${JSON.stringify(toolResults, null, 2)}`);
|
|
220
220
|
}
|
|
221
221
|
if (textParts.length > 0) {
|
|
@@ -327,7 +327,7 @@ var OpenRouterRuntime = class _OpenRouterRuntime {
|
|
|
327
327
|
});
|
|
328
328
|
}
|
|
329
329
|
} else {
|
|
330
|
-
const model = config.model ?? process.env["
|
|
330
|
+
const model = config.model ?? process.env["ZERO_MODEL"] ?? "anthropic/claude-sonnet-4.6";
|
|
331
331
|
this.singleRuntime = this.createModelRuntime(model);
|
|
332
332
|
}
|
|
333
333
|
}
|
|
@@ -345,7 +345,7 @@ var OpenRouterRuntime = class _OpenRouterRuntime {
|
|
|
345
345
|
if (this.ensembleRuntimes.length > 0) {
|
|
346
346
|
return this.ensembleRuntimes.map((e) => e.model);
|
|
347
347
|
}
|
|
348
|
-
return [this.config.model ?? process.env["
|
|
348
|
+
return [this.config.model ?? process.env["ZERO_MODEL"] ?? "anthropic/claude-sonnet-4.6"];
|
|
349
349
|
}
|
|
350
350
|
/** Whether this runtime is in ensemble mode. */
|
|
351
351
|
get isEnsemble() {
|
|
@@ -638,7 +638,7 @@ var OllamaRuntime = class {
|
|
|
638
638
|
* Behaviour:
|
|
639
639
|
* - Each non-terminal frame's `message.content` is treated as a delta and
|
|
640
640
|
* forwarded to `callbacks.onDelta("assistant_response", delta)` exactly
|
|
641
|
-
* once (no accumulation passed to the callback —
|
|
641
|
+
* once (no accumulation passed to the callback — 0's contract is
|
|
642
642
|
* "incremental fragment only", see types.ts:88).
|
|
643
643
|
* - The terminal frame (`done: true`) is taken as authoritative for
|
|
644
644
|
* `tool_calls`, `done_reason`, and usage stats. Tool-call shape across
|
|
@@ -767,7 +767,7 @@ var RUNTIME_REGISTRY = [
|
|
|
767
767
|
{
|
|
768
768
|
type: "codex",
|
|
769
769
|
command: "codex",
|
|
770
|
-
description: "Codex CLI / direct ChatGPT Codex provider \u2014 full parity across web scans, package audits (npm/pypi/cargo/oci), and source code review (incl. linux-kernel). Set
|
|
770
|
+
description: "Codex CLI / direct ChatGPT Codex provider \u2014 full parity across web scans, package audits (npm/pypi/cargo/oci), and source code review (incl. linux-kernel). Set ZERO_CHATGPT_OAUTH_REFRESH_TOKEN to enable subscription auth without the local CLI binary (#402).",
|
|
771
771
|
strengths: ["verify", "source-analysis", "discovery"],
|
|
772
772
|
supportsSystemPrompt: false
|
|
773
773
|
},
|
|
@@ -784,7 +784,7 @@ var RUNTIME_REGISTRY = [
|
|
|
784
784
|
// so detection tools that key off `command` don't crash; the registry
|
|
785
785
|
// uses `isAvailable()` not `which(command)` for ollama.
|
|
786
786
|
command: "ollama",
|
|
787
|
-
description: "Ollama (local) \u2014 Gemma 4 27B via /api/chat with native function-calling. Pairs with `--seed-findings` for full-local hunts. See
|
|
787
|
+
description: "Ollama (local) \u2014 Gemma 4 27B via /api/chat with native function-calling. Pairs with `--seed-findings` for full-local hunts. See 0#369.",
|
|
788
788
|
strengths: ["source-analysis", "discovery"],
|
|
789
789
|
supportsSystemPrompt: true
|
|
790
790
|
}
|
|
@@ -806,7 +806,7 @@ function pickRuntimeForStage(stage, availableRuntimes) {
|
|
|
806
806
|
return first.done ? "claude" : first.value;
|
|
807
807
|
}
|
|
808
808
|
async function detectAvailableRuntimes() {
|
|
809
|
-
const { ProcessRuntime: ProcessRuntime2 } = await import("./process-
|
|
809
|
+
const { ProcessRuntime: ProcessRuntime2 } = await import("./process-PNMC36JI.js");
|
|
810
810
|
const available = /* @__PURE__ */ new Set();
|
|
811
811
|
const checks = RUNTIME_REGISTRY.map(async (info) => {
|
|
812
812
|
const rt = new ProcessRuntime2({ type: info.type, timeout: 5e3 });
|
|
@@ -832,7 +832,7 @@ function createRuntime(config) {
|
|
|
832
832
|
return new ProcessRuntime(config);
|
|
833
833
|
case "ollama":
|
|
834
834
|
return new OllamaRuntime({
|
|
835
|
-
model: config.model ?? process.env["
|
|
835
|
+
model: config.model ?? process.env["ZERO_OLLAMA_MODEL"] ?? "gemma4:27b",
|
|
836
836
|
timeout: config.timeout,
|
|
837
837
|
host: process.env.OLLAMA_HOST
|
|
838
838
|
});
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { createRequire as
|
|
3
|
-
const require =
|
|
2
|
+
import { createRequire as __0CreateRequire } from "node:module";
|
|
3
|
+
const require = __0CreateRequire(import.meta.url);
|
|
4
4
|
import {
|
|
5
5
|
homeStateDir
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-PC6RCKQV.js";
|
|
7
7
|
|
|
8
8
|
// packages/cli/src/tui/session-store.ts
|
|
9
9
|
import { chmodSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { createRequire as
|
|
3
|
-
const require =
|
|
2
|
+
import { createRequire as __0CreateRequire } from "node:module";
|
|
3
|
+
const require = __0CreateRequire(import.meta.url);
|
|
4
4
|
import {
|
|
5
5
|
severityRank
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-PC6RCKQV.js";
|
|
7
7
|
|
|
8
8
|
// packages/core/dist/triage/kernel-primitive.js
|
|
9
9
|
function maxSeverity(a, b) {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { createRequire as
|
|
3
|
-
const require =
|
|
2
|
+
import { createRequire as __0CreateRequire } from "node:module";
|
|
3
|
+
const require = __0CreateRequire(import.meta.url);
|
|
4
4
|
import {
|
|
5
5
|
describeEdgeTechnique,
|
|
6
6
|
highValueTargetIds,
|
|
7
7
|
reachableTo,
|
|
8
8
|
shortestPaths
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-UFHN6RIU.js";
|
|
10
10
|
|
|
11
11
|
// packages/core/dist/identity/graph-client.js
|
|
12
12
|
var DEFAULT_BASE_URL = "https://graph.microsoft.com/v1.0";
|
|
@@ -84,7 +84,7 @@ var GraphClient = class {
|
|
|
84
84
|
this.pageDelayMs = opts.pageDelayMs ?? DEFAULT_PAGE_DELAY_MS;
|
|
85
85
|
this.maxPages = opts.maxPages ?? DEFAULT_MAX_PAGES;
|
|
86
86
|
this.sleep = opts.sleep ?? defaultSleep;
|
|
87
|
-
this.userAgent = opts.userAgent ?? "
|
|
87
|
+
this.userAgent = opts.userAgent ?? "0-identity";
|
|
88
88
|
}
|
|
89
89
|
/** GET a v1.0-relative path (`/users`) and return the parsed body. */
|
|
90
90
|
async get(path, query) {
|
|
@@ -4283,7 +4283,7 @@ function ingestAzureHound(documents) {
|
|
|
4283
4283
|
for (const missing of ["azusers", "azgroups", "azroleassignments"].filter((c) => !seen.has(c))) {
|
|
4284
4284
|
warnings.push(`export carried no \`${missing}\` collection; coverage is partial`);
|
|
4285
4285
|
}
|
|
4286
|
-
warnings.push("AzureHound exports do not include conditional-access policies, federation configuration, or PIM eligibility schedules \u2014 run `
|
|
4286
|
+
warnings.push("AzureHound exports do not include conditional-access policies, federation configuration, or PIM eligibility schedules \u2014 run `0 identity` against a live tenant for the posture checks that read them");
|
|
4287
4287
|
const relationships = haveRelationships ? {
|
|
4288
4288
|
groupMembers,
|
|
4289
4289
|
groupOwners,
|
|
@@ -4713,7 +4713,7 @@ function describeGaps(correspondences, coverage, conflicts, adNodeCount, entraNo
|
|
|
4713
4713
|
if (correspondences.length === 0) {
|
|
4714
4714
|
gaps.push(`NO IDENTITY CORRESPONDENCE COULD BE ESTABLISHED between the ${adNodeCount} on-premises principal(s) and the ${entraNodeCount} cloud principal(s) collected. No hybrid attack path could be computed, and that is a limit of the input, NOT a finding that the two directories are unconnected.`);
|
|
4715
4715
|
if (!anchorsPresent) {
|
|
4716
|
-
gaps.push("None of the cloud objects carried onPremisesImmutableId, onPremisesSecurityIdentifier, or onPremisesDistinguishedName. These attributes are not part of an AzureHound export and are dropped by Microsoft Graph when the token lacks directory read scope \u2014 so the most likely explanation is that they were never collected. Re-collect with `
|
|
4716
|
+
gaps.push("None of the cloud objects carried onPremisesImmutableId, onPremisesSecurityIdentifier, or onPremisesDistinguishedName. These attributes are not part of an AzureHound export and are dropped by Microsoft Graph when the token lacks directory read scope \u2014 so the most likely explanation is that they were never collected. Re-collect with `0 identity` against the tenant, or supply the correspondence directly via `knownCorrespondences`.");
|
|
4717
4717
|
} else {
|
|
4718
4718
|
gaps.push(`Synchronisation anchors WERE present on the cloud objects (immutableId: ${coverage["immutable-id"].entraObjectsCarrying}, SID: ${coverage["security-identifier"].entraObjectsCarrying}) but matched no collected on-premises object. The two collections most likely cover different forests or different scopes of the same forest.`);
|
|
4719
4719
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { createRequire as
|
|
3
|
-
const require =
|
|
2
|
+
import { createRequire as __0CreateRequire } from "node:module";
|
|
3
|
+
const require = __0CreateRequire(import.meta.url);
|
|
4
4
|
import {
|
|
5
5
|
external_exports
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-VIT5ALXF.js";
|
|
7
7
|
|
|
8
8
|
// packages/shared/dist/identity.js
|
|
9
9
|
function defaultRoleFor(auth) {
|
|
@@ -45,7 +45,7 @@ import { fileURLToPath } from "node:url";
|
|
|
45
45
|
import { dirname, join } from "node:path";
|
|
46
46
|
function loadVersion() {
|
|
47
47
|
if (true) {
|
|
48
|
-
return "0.
|
|
48
|
+
return "0.21.4";
|
|
49
49
|
}
|
|
50
50
|
try {
|
|
51
51
|
const here = dirname(fileURLToPath(import.meta.url));
|
|
@@ -200,11 +200,18 @@ var MANUAL_PRICING = {
|
|
|
200
200
|
// which this schema cannot represent.
|
|
201
201
|
"DeepSeek-V4-Pro": { input: 1.74, output: 3.48 },
|
|
202
202
|
"DeepSeek-V4-Flash": { input: 0.19, output: 0.51 },
|
|
203
|
+
// Fireworks Priority list-rate estimate, not an Azure invoice.
|
|
204
|
+
// The cache estimate remains rounded; don't substitute direct API pricing
|
|
205
|
+
// for the separately metered Foundry deployment.
|
|
206
|
+
"deepseek-v4.1-flash": { input: 0.375, output: 1.5, cachedInput: 8e-3 },
|
|
203
207
|
"Kimi-K2.7-Code": { input: 0.95, output: 4, cachedInput: 0.19 },
|
|
204
208
|
"gpt-oss-120b": { input: 0.15, output: 0.6 },
|
|
205
209
|
"gpt-5.6-sol": { input: 5, output: 30, cachedInput: 0.5 },
|
|
206
210
|
"gpt-5.6-luna": { input: 1, output: 6, cachedInput: 0.1 },
|
|
207
211
|
"gpt-5.6-terra": { input: 2.5, output: 15, cachedInput: 0.25 },
|
|
212
|
+
// Azure Global Standard short-context list estimate (2026-09-23).
|
|
213
|
+
// Hosted settlement separately meters cache writes and bounds input context.
|
|
214
|
+
"gpt-6-luna": { input: 0.1, output: 0.5, cachedInput: 0.01 },
|
|
208
215
|
default: { input: 3, output: 15 }
|
|
209
216
|
};
|
|
210
217
|
var MODEL_PRICING = {
|
|
@@ -214,11 +221,14 @@ var MODEL_PRICING = {
|
|
|
214
221
|
var AZURE_DEPLOYMENT_PRICE_ALIASES = /* @__PURE__ */ new Map([
|
|
215
222
|
["deepseek-v4-pro", "DeepSeek-V4-Pro"],
|
|
216
223
|
["deepseek-v4-flash", "DeepSeek-V4-Flash"],
|
|
224
|
+
["deepseek-v4.1-flash", "deepseek-v4.1-flash"],
|
|
225
|
+
["fw-deepseek-v4.1-flash", "deepseek-v4.1-flash"],
|
|
217
226
|
["kimi-k2.7-code", "Kimi-K2.7-Code"],
|
|
218
227
|
["gpt-oss-120b", "gpt-oss-120b"],
|
|
219
228
|
["gpt-5.6-sol", "gpt-5.6-sol"],
|
|
220
229
|
["gpt-5.6-luna", "gpt-5.6-luna"],
|
|
221
|
-
["gpt-5.6-terra", "gpt-5.6-terra"]
|
|
230
|
+
["gpt-5.6-terra", "gpt-5.6-terra"],
|
|
231
|
+
["gpt-6-luna", "gpt-6-luna"]
|
|
222
232
|
]);
|
|
223
233
|
function azureDeploymentPriceKey(model) {
|
|
224
234
|
const lower = model.toLowerCase();
|
|
@@ -255,7 +265,7 @@ function getRates(model) {
|
|
|
255
265
|
const rates = MODEL_PRICING[key] ?? (aliasKey ? MODEL_PRICING[aliasKey] : void 0);
|
|
256
266
|
if (!rates) {
|
|
257
267
|
if (model)
|
|
258
|
-
console.warn(`[
|
|
268
|
+
console.warn(`[0] Unknown model for cost estimation: ${model}`);
|
|
259
269
|
return MODEL_PRICING.default;
|
|
260
270
|
}
|
|
261
271
|
return rates;
|
|
@@ -832,17 +842,21 @@ function researchPlatformLpeDisclosureReady(envelope, platform) {
|
|
|
832
842
|
import { homedir } from "node:os";
|
|
833
843
|
import { join as join2 } from "node:path";
|
|
834
844
|
function homeStateDir(home = homedir()) {
|
|
835
|
-
return join2(home, ".
|
|
845
|
+
return join2(home, ".0");
|
|
846
|
+
}
|
|
847
|
+
function cloudStateDir(home = homedir(), env = process.env) {
|
|
848
|
+
const state = homeStateDir(home);
|
|
849
|
+
return env["ZERO_DEV_SOURCE_ROOT"]?.trim() ? join2(state, "dev") : state;
|
|
836
850
|
}
|
|
837
851
|
function runStateDir(runId, home) {
|
|
838
852
|
if (!/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(runId)) {
|
|
839
|
-
throw new Error(`Invalid
|
|
853
|
+
throw new Error(`Invalid 0 run id ${JSON.stringify(runId)}.`);
|
|
840
854
|
}
|
|
841
855
|
return join2(homeStateDir(home), "runs", runId);
|
|
842
856
|
}
|
|
843
857
|
|
|
844
858
|
// packages/shared/dist/agent-assurance.js
|
|
845
|
-
var AGENT_ACTION_ASSURANCE_SCHEMA_VERSION = "
|
|
859
|
+
var AGENT_ACTION_ASSURANCE_SCHEMA_VERSION = "0.agent-action-assurance/v1";
|
|
846
860
|
var AgentInjectionVectorSchema = external_exports.enum([
|
|
847
861
|
"readme",
|
|
848
862
|
"code-comment",
|
|
@@ -972,7 +986,7 @@ function parseAgentActionEvidenceManifest(value) {
|
|
|
972
986
|
}
|
|
973
987
|
|
|
974
988
|
// packages/shared/dist/presentation.js
|
|
975
|
-
var PRESENTATION_PROTOCOL = "
|
|
989
|
+
var PRESENTATION_PROTOCOL = "0.presentation/v1";
|
|
976
990
|
function createTranscriptDocument(entries) {
|
|
977
991
|
return {
|
|
978
992
|
protocol: PRESENTATION_PROTOCOL,
|
|
@@ -1015,6 +1029,176 @@ var DESKTOP_CONSOLE_SCHEMA_VERSION = 1;
|
|
|
1015
1029
|
var DEFAULT_AUTONOMY_MODE = "yolo";
|
|
1016
1030
|
var DEFAULT_ALLOW_MODEL_SELF_EXTENSION = true;
|
|
1017
1031
|
|
|
1032
|
+
// packages/shared/dist/jev.js
|
|
1033
|
+
var FEATURES = ["browser", "memory", "dedupe", "redteam", "kernel", "crash", "radar", "foxguard"];
|
|
1034
|
+
var INPUT_USD_PER_TOKEN = 0.042 / 1e6;
|
|
1035
|
+
var MAX_INPUT_TOKENS = 65536;
|
|
1036
|
+
var REQUEST_RESERVATION_USD = MAX_INPUT_TOKENS * INPUT_USD_PER_TOKEN;
|
|
1037
|
+
var probability = external_exports.number().finite().min(0).max(1);
|
|
1038
|
+
var questionSchema = external_exports.discriminatedUnion("type", [
|
|
1039
|
+
external_exports.object({
|
|
1040
|
+
type: external_exports.literal("boolean"),
|
|
1041
|
+
instructions: external_exports.string().min(1).max(8192),
|
|
1042
|
+
criteria: external_exports.object({ true: external_exports.string().max(4096), false: external_exports.string().max(4096) }).optional()
|
|
1043
|
+
}).strict(),
|
|
1044
|
+
external_exports.object({
|
|
1045
|
+
type: external_exports.literal("choice"),
|
|
1046
|
+
instructions: external_exports.string().min(1).max(8192),
|
|
1047
|
+
criteria: external_exports.record(external_exports.string().min(1).max(128), external_exports.string().max(4096)).refine((value) => Object.keys(value).length >= 2 && Object.keys(value).length <= 64)
|
|
1048
|
+
}).strict()
|
|
1049
|
+
]);
|
|
1050
|
+
var normalizedAnswerSchema = external_exports.discriminatedUnion("type", [
|
|
1051
|
+
external_exports.object({ type: external_exports.literal("boolean"), probability }),
|
|
1052
|
+
external_exports.object({ type: external_exports.literal("choice"), choice: external_exports.string(), probabilities: external_exports.record(probability) })
|
|
1053
|
+
]);
|
|
1054
|
+
var usageSchema = external_exports.object({
|
|
1055
|
+
inputTokens: external_exports.number().int().nonnegative().max(MAX_INPUT_TOKENS),
|
|
1056
|
+
outputTokens: external_exports.number().int().nonnegative()
|
|
1057
|
+
});
|
|
1058
|
+
function positiveNumber(value, fallback, name) {
|
|
1059
|
+
if (value === void 0)
|
|
1060
|
+
return fallback;
|
|
1061
|
+
const parsed = Number(value);
|
|
1062
|
+
if (!Number.isFinite(parsed) || parsed <= 0)
|
|
1063
|
+
throw new Error(`${name} must be a positive number`);
|
|
1064
|
+
return parsed;
|
|
1065
|
+
}
|
|
1066
|
+
function jevConfigFromEnvironment(feature, environment) {
|
|
1067
|
+
const requested = (environment["ZERO_JEV_FEATURES"] ?? "").split(",").map((item) => item.trim()).filter(Boolean);
|
|
1068
|
+
for (const name of requested) {
|
|
1069
|
+
if (!FEATURES.includes(name))
|
|
1070
|
+
throw new Error(`Unknown ZERO_JEV_FEATURES entry: ${name}`);
|
|
1071
|
+
}
|
|
1072
|
+
if (!requested.includes(feature))
|
|
1073
|
+
return void 0;
|
|
1074
|
+
const provider = environment["ZERO_JEV_PROVIDER"] ?? "vercel";
|
|
1075
|
+
if (provider !== "vercel" && provider !== "cloud") {
|
|
1076
|
+
throw new Error("ZERO_JEV_PROVIDER must be vercel or cloud");
|
|
1077
|
+
}
|
|
1078
|
+
const common = {
|
|
1079
|
+
timeoutMs: positiveNumber(environment["ZERO_JEV_TIMEOUT_MS"], 1e4, "ZERO_JEV_TIMEOUT_MS"),
|
|
1080
|
+
maxRequests: positiveNumber(environment["ZERO_JEV_MAX_REQUESTS"], 100, "ZERO_JEV_MAX_REQUESTS"),
|
|
1081
|
+
maxCostUsd: positiveNumber(environment["ZERO_JEV_MAX_COST_USD"], 0.1, "ZERO_JEV_MAX_COST_USD")
|
|
1082
|
+
};
|
|
1083
|
+
const keyName = provider === "cloud" ? "ZERO_JEV_CLOUD_TOKEN" : "AI_GATEWAY_API_KEY";
|
|
1084
|
+
const apiKey = environment[keyName]?.trim();
|
|
1085
|
+
if (!apiKey)
|
|
1086
|
+
throw new Error(`${keyName} is required when Jev assistance is enabled`);
|
|
1087
|
+
if (provider === "cloud") {
|
|
1088
|
+
return { provider, apiKey, cloudUrl: environment["ZERO_JEV_CLOUD_URL"], feature, ...common };
|
|
1089
|
+
}
|
|
1090
|
+
return {
|
|
1091
|
+
provider,
|
|
1092
|
+
apiKey,
|
|
1093
|
+
...common
|
|
1094
|
+
};
|
|
1095
|
+
}
|
|
1096
|
+
function createJevEvaluator(config) {
|
|
1097
|
+
if (!config.apiKey.trim())
|
|
1098
|
+
throw new Error("A Jev provider credential is required");
|
|
1099
|
+
const timeoutMs = config.timeoutMs ?? 1e4;
|
|
1100
|
+
const maxRequests = config.maxRequests ?? 100;
|
|
1101
|
+
const maxCostUsd = config.maxCostUsd ?? 0.1;
|
|
1102
|
+
if (!Number.isInteger(timeoutMs) || timeoutMs < 1 || timeoutMs > 6e4 || !Number.isInteger(maxRequests) || maxRequests < 1 || maxRequests > 1e4 || !Number.isFinite(maxCostUsd) || maxCostUsd <= 0) {
|
|
1103
|
+
throw new Error("Invalid Jev timeout, request limit, or cost budget");
|
|
1104
|
+
}
|
|
1105
|
+
if (config.provider === "cloud") {
|
|
1106
|
+
const url = new URL(config.cloudUrl ?? "");
|
|
1107
|
+
if (url.protocol !== "https:" && !(url.protocol === "http:" && ["localhost", "127.0.0.1", "[::1]"].includes(url.hostname)) || url.username || url.password || url.search || url.hash || !config.feature || !FEATURES.includes(config.feature)) {
|
|
1108
|
+
throw new Error("Invalid Jev cloud evaluation endpoint or feature");
|
|
1109
|
+
}
|
|
1110
|
+
}
|
|
1111
|
+
let requests = 0;
|
|
1112
|
+
let chargedOrReservedUsd = 0;
|
|
1113
|
+
const fetchImpl = config.fetch ?? globalThis.fetch;
|
|
1114
|
+
return {
|
|
1115
|
+
async evaluate(request) {
|
|
1116
|
+
request.signal?.throwIfAborted();
|
|
1117
|
+
const questions = external_exports.record(external_exports.string().regex(/^[a-zA-Z][a-zA-Z0-9_]{0,63}$/), questionSchema).parse(request.questions);
|
|
1118
|
+
const questionIds = Object.keys(questions);
|
|
1119
|
+
if (questionIds.length < 1 || questionIds.length > 64)
|
|
1120
|
+
throw new Error("Jev requires between 1 and 64 questions");
|
|
1121
|
+
const encoded = JSON.stringify({ state: request.state, questions });
|
|
1122
|
+
if (encoded.length > 32e3)
|
|
1123
|
+
throw new Error("Jev state and questions exceed the bounded input limit");
|
|
1124
|
+
if (requests >= maxRequests || chargedOrReservedUsd + REQUEST_RESERVATION_USD > maxCostUsd) {
|
|
1125
|
+
throw new Error("Jev workflow evaluation budget exhausted");
|
|
1126
|
+
}
|
|
1127
|
+
requests++;
|
|
1128
|
+
chargedOrReservedUsd += REQUEST_RESERVATION_USD;
|
|
1129
|
+
const startedAt = performance.now();
|
|
1130
|
+
const signal = request.signal ? AbortSignal.any([request.signal, AbortSignal.timeout(timeoutMs)]) : AbortSignal.timeout(timeoutMs);
|
|
1131
|
+
let rawAnswers;
|
|
1132
|
+
let model;
|
|
1133
|
+
let rawUsage;
|
|
1134
|
+
try {
|
|
1135
|
+
if (config.provider === "cloud") {
|
|
1136
|
+
const response = await fetchImpl(config.cloudUrl, {
|
|
1137
|
+
method: "POST",
|
|
1138
|
+
signal,
|
|
1139
|
+
redirect: "error",
|
|
1140
|
+
headers: { Authorization: `Bearer ${config.apiKey}`, "Content-Type": "application/json" },
|
|
1141
|
+
body: JSON.stringify({ feature: config.feature, state: request.state, questions })
|
|
1142
|
+
});
|
|
1143
|
+
if (!response.ok)
|
|
1144
|
+
throw new Error(`Jev provider returned HTTP ${response.status}`);
|
|
1145
|
+
const body = external_exports.object({ model: external_exports.string().min(1), answers: external_exports.record(external_exports.unknown()), usage: usageSchema }).parse(await response.json());
|
|
1146
|
+
model = body.model;
|
|
1147
|
+
rawUsage = body.usage;
|
|
1148
|
+
rawAnswers = body.answers;
|
|
1149
|
+
} else {
|
|
1150
|
+
const [{ experimental_evaluate: evaluate }, { createGateway }] = await Promise.all([
|
|
1151
|
+
import("./dist-KEULE5IQ.js"),
|
|
1152
|
+
import("./dist-XZB53PS5.js")
|
|
1153
|
+
]);
|
|
1154
|
+
signal.throwIfAborted();
|
|
1155
|
+
const gateway = createGateway({ apiKey: config.apiKey, fetch: fetchImpl });
|
|
1156
|
+
const result = await evaluate({
|
|
1157
|
+
model: gateway.evaluationModel("typesafe-ai/jev"),
|
|
1158
|
+
state: typeof request.state === "string" ? request.state : JSON.stringify(request.state),
|
|
1159
|
+
questions,
|
|
1160
|
+
abortSignal: signal,
|
|
1161
|
+
maxRetries: 0
|
|
1162
|
+
});
|
|
1163
|
+
model = result.response.modelId;
|
|
1164
|
+
rawUsage = result.usage;
|
|
1165
|
+
rawAnswers = result.answers;
|
|
1166
|
+
}
|
|
1167
|
+
signal.throwIfAborted();
|
|
1168
|
+
const parsedUsage = usageSchema.parse(rawUsage);
|
|
1169
|
+
const usage = { ...parsedUsage, estimatedCostUsd: parsedUsage.inputTokens * INPUT_USD_PER_TOKEN };
|
|
1170
|
+
chargedOrReservedUsd += usage.estimatedCostUsd - REQUEST_RESERVATION_USD;
|
|
1171
|
+
config.onUsage?.(usage);
|
|
1172
|
+
if (Object.keys(rawAnswers).length !== questionIds.length)
|
|
1173
|
+
throw new Error("Jev returned unexpected answer IDs");
|
|
1174
|
+
const answers = /* @__PURE__ */ Object.create(null);
|
|
1175
|
+
for (const id of questionIds) {
|
|
1176
|
+
const question = questions[id];
|
|
1177
|
+
const answer = normalizedAnswerSchema.parse(rawAnswers[id]);
|
|
1178
|
+
if (question.type !== answer.type)
|
|
1179
|
+
throw new Error("Jev answer type does not match its question");
|
|
1180
|
+
if (question.type === "choice" && answer.type === "choice") {
|
|
1181
|
+
const options = Object.keys(question.criteria);
|
|
1182
|
+
if (!Object.hasOwn(question.criteria, answer.choice) || Object.keys(answer.probabilities).length !== options.length || options.some((option) => !Object.hasOwn(answer.probabilities, option)) || Math.abs(options.reduce((sum, option) => sum + answer.probabilities[option], 0) - 1) > 0.02 || options.some((option) => answer.probabilities[option] > answer.probabilities[answer.choice])) {
|
|
1183
|
+
throw new Error("Jev returned an invalid choice distribution");
|
|
1184
|
+
}
|
|
1185
|
+
}
|
|
1186
|
+
answers[id] = answer;
|
|
1187
|
+
}
|
|
1188
|
+
return { model, answers, usage, durationMs: performance.now() - startedAt };
|
|
1189
|
+
} catch (error) {
|
|
1190
|
+
if (signal.aborted)
|
|
1191
|
+
throw new Error(request.signal?.aborted ? "Jev evaluation cancelled" : "Jev evaluation timed out");
|
|
1192
|
+
if (error instanceof external_exports.ZodError)
|
|
1193
|
+
throw new Error("Jev provider returned malformed evaluation data");
|
|
1194
|
+
if (error instanceof Error && /^Jev (provider returned HTTP \d{3}|returned (unexpected answer IDs|an invalid choice distribution)|answer type does not match its question)$/.test(error.message))
|
|
1195
|
+
throw error;
|
|
1196
|
+
throw new Error("Jev evaluation unavailable; retain the existing decision path");
|
|
1197
|
+
}
|
|
1198
|
+
}
|
|
1199
|
+
};
|
|
1200
|
+
}
|
|
1201
|
+
|
|
1018
1202
|
export {
|
|
1019
1203
|
defaultRoleFor,
|
|
1020
1204
|
resolveIdentities,
|
|
@@ -1073,6 +1257,7 @@ export {
|
|
|
1073
1257
|
researchWindowsLpeDisclosureReady,
|
|
1074
1258
|
researchPlatformLpeDisclosureReady,
|
|
1075
1259
|
homeStateDir,
|
|
1260
|
+
cloudStateDir,
|
|
1076
1261
|
runStateDir,
|
|
1077
1262
|
AGENT_ACTION_ASSURANCE_SCHEMA_VERSION,
|
|
1078
1263
|
AgentInjectionVectorSchema,
|
|
@@ -1090,5 +1275,7 @@ export {
|
|
|
1090
1275
|
isPresentationEvent,
|
|
1091
1276
|
DESKTOP_CONSOLE_SCHEMA_VERSION,
|
|
1092
1277
|
DEFAULT_AUTONOMY_MODE,
|
|
1093
|
-
DEFAULT_ALLOW_MODEL_SELF_EXTENSION
|
|
1278
|
+
DEFAULT_ALLOW_MODEL_SELF_EXTENSION,
|
|
1279
|
+
jevConfigFromEnvironment,
|
|
1280
|
+
createJevEvaluator
|
|
1094
1281
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { createRequire as
|
|
3
|
-
const require =
|
|
2
|
+
import { createRequire as __0CreateRequire } from "node:module";
|
|
3
|
+
const require = __0CreateRequire(import.meta.url);
|
|
4
4
|
|
|
5
5
|
// packages/core/dist/agent/apply-patch.js
|
|
6
6
|
import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from "node:fs";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { createRequire as
|
|
3
|
-
const require =
|
|
2
|
+
import { createRequire as __0CreateRequire } from "node:module";
|
|
3
|
+
const require = __0CreateRequire(import.meta.url);
|
|
4
4
|
import {
|
|
5
5
|
collectScopeFiles
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-AZ7L3HFD.js";
|
|
7
7
|
|
|
8
8
|
// packages/core/dist/specdrift/extract.js
|
|
9
9
|
var MODAL_RE = /\b(MUST(?:\s+NOT)?|SHALL(?:\s+NOT)?|SHOULD(?:\s+NOT)?|MAY|REQUIRED|OPTIONAL)\b/;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { createRequire as
|
|
3
|
-
const require =
|
|
2
|
+
import { createRequire as __0CreateRequire } from "node:module";
|
|
3
|
+
const require = __0CreateRequire(import.meta.url);
|
|
4
4
|
|
|
5
5
|
// packages/core/dist/agent/sanitized-env.js
|
|
6
6
|
var SENSITIVE_ENV_PATTERNS = [
|
|
@@ -51,20 +51,20 @@ var SENSITIVE_ENV_PATTERNS = [
|
|
|
51
51
|
"NVD_API",
|
|
52
52
|
"E2B_API",
|
|
53
53
|
"WPSCAN_API_TOKEN",
|
|
54
|
-
"
|
|
54
|
+
"ZERO_WPSCAN_API_TOKEN",
|
|
55
55
|
"GITHUB_TOKEN",
|
|
56
56
|
"GITLAB_TOKEN",
|
|
57
57
|
"GH_TOKEN",
|
|
58
58
|
"GL_TOKEN",
|
|
59
59
|
// Per-dispatch secrets injected by 0cloud's worker-controller.
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"
|
|
60
|
+
"ZERO_CLOUD_TOKEN",
|
|
61
|
+
"ZERO_CHATGPT_ACCESS_TOKEN",
|
|
62
|
+
"ZERO_CHATGPT_OAUTH_REFRESH_TOKEN",
|
|
63
|
+
"ZERO_GITHUB_TOKEN",
|
|
64
|
+
"ZERO_GITLAB_TOKEN",
|
|
65
|
+
"ZERO_TARGET_AUTH_JSON",
|
|
66
|
+
"ZERO_GRAPH_ACCESS_TOKEN",
|
|
67
|
+
"ZERO_LLM_TARGET_KEY"
|
|
68
68
|
];
|
|
69
69
|
function sanitizedEnv(env = process.env) {
|
|
70
70
|
return allowlistedChildEnv({}, env);
|
|
@@ -95,9 +95,9 @@ var CHILD_ENV_ALLOWLIST = [
|
|
|
95
95
|
"AUTH_VALUE",
|
|
96
96
|
"AUTH_CURL_FLAG",
|
|
97
97
|
// Existing child-runtime configuration contract; each name is non-secret.
|
|
98
|
-
"
|
|
99
|
-
"
|
|
100
|
-
"
|
|
98
|
+
"ZERO_FEATURE_JIT_SKILLS",
|
|
99
|
+
"ZERO_BASH_TIMEOUT_MS",
|
|
100
|
+
"ZERO_CLOUD_SCAN_ID"
|
|
101
101
|
];
|
|
102
102
|
function allowlistedChildEnv(extras = {}, env = process.env) {
|
|
103
103
|
const out = {};
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { createRequire as
|
|
3
|
-
const require =
|
|
4
|
-
import {
|
|
5
|
-
verifyKernelFinding
|
|
6
|
-
} from "./chunk-3KPWWJCI.js";
|
|
2
|
+
import { createRequire as __0CreateRequire } from "node:module";
|
|
3
|
+
const require = __0CreateRequire(import.meta.url);
|
|
7
4
|
import {
|
|
8
5
|
createJournalWriter
|
|
9
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-CAJJRUTV.js";
|
|
7
|
+
import {
|
|
8
|
+
verifyKernelFinding
|
|
9
|
+
} from "./chunk-5T6D5BVY.js";
|
|
10
10
|
import {
|
|
11
11
|
homeStateDir
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-PC6RCKQV.js";
|
|
13
13
|
|
|
14
14
|
// packages/core/dist/cve/adapt-loop.js
|
|
15
15
|
import { existsSync as existsSync2, readFileSync as readFileSync2, writeFileSync as writeFileSync2 } from "node:fs";
|
|
@@ -45,12 +45,12 @@ var PocFetchError = class extends Error {
|
|
|
45
45
|
}
|
|
46
46
|
};
|
|
47
47
|
function defaultCacheDir() {
|
|
48
|
-
return process.env["
|
|
48
|
+
return process.env["ZERO_CVE_POC_CACHE"]?.trim() || join(homeStateDir(), "cve-pocs");
|
|
49
49
|
}
|
|
50
50
|
function buildHeaders(token) {
|
|
51
51
|
const headers = {
|
|
52
52
|
"Accept": "*/*",
|
|
53
|
-
"User-Agent": "
|
|
53
|
+
"User-Agent": "0-cve-adapt/0.1"
|
|
54
54
|
};
|
|
55
55
|
const resolved = token ?? process.env.GITHUB_TOKEN?.trim();
|
|
56
56
|
if (resolved)
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { createRequire as
|
|
3
|
-
const require =
|
|
2
|
+
import { createRequire as __0CreateRequire } from "node:module";
|
|
3
|
+
const require = __0CreateRequire(import.meta.url);
|
|
4
4
|
import {
|
|
5
5
|
homeStateDir
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-PC6RCKQV.js";
|
|
7
7
|
|
|
8
8
|
// packages/core/dist/scope/waf-detect.js
|
|
9
9
|
function readHeader(headers, name) {
|
|
@@ -574,7 +574,7 @@ async function defaultFetchJson(url, timeoutMs) {
|
|
|
574
574
|
try {
|
|
575
575
|
const res = await fetch(url, {
|
|
576
576
|
signal: controller.signal,
|
|
577
|
-
headers: { Accept: "application/json", "User-Agent": "
|
|
577
|
+
headers: { Accept: "application/json", "User-Agent": "0-recon" }
|
|
578
578
|
});
|
|
579
579
|
if (!res.ok)
|
|
580
580
|
throw new Error(`crt.sh HTTP ${res.status}`);
|
|
@@ -1041,8 +1041,8 @@ async function lookupKev(input, opts = {}) {
|
|
|
1041
1041
|
}
|
|
1042
1042
|
async function fetchKevCatalog(input, opts) {
|
|
1043
1043
|
const cache = new IntelCache(input.cacheDir);
|
|
1044
|
-
const url = process.env["
|
|
1045
|
-
return await cachedJson(cache, "cisa-kev", url, async () => await fetchJson(url, { headers: { "User-Agent": "
|
|
1044
|
+
const url = process.env["ZERO_CISA_KEV_URL"] ?? DEFAULT_KEV_URL;
|
|
1045
|
+
return await cachedJson(cache, "cisa-kev", url, async () => await fetchJson(url, { headers: { "User-Agent": "0-intel/0.1" } }, opts), { offline: input.offline, ttlMs: input.ttlMs });
|
|
1046
1046
|
}
|
|
1047
1047
|
|
|
1048
1048
|
// packages/core/dist/intel/github.js
|
|
@@ -1183,7 +1183,7 @@ function githubHeaders(extra) {
|
|
|
1183
1183
|
const headers = {
|
|
1184
1184
|
Accept: "application/vnd.github+json",
|
|
1185
1185
|
"X-GitHub-Api-Version": "2022-11-28",
|
|
1186
|
-
"User-Agent": "
|
|
1186
|
+
"User-Agent": "0-intel/0.1",
|
|
1187
1187
|
...extra ?? {}
|
|
1188
1188
|
};
|
|
1189
1189
|
const token = resolveGitHubToken();
|
|
@@ -1193,7 +1193,7 @@ function githubHeaders(extra) {
|
|
|
1193
1193
|
}
|
|
1194
1194
|
var cachedGitHubToken;
|
|
1195
1195
|
function resolveGitHubToken() {
|
|
1196
|
-
const envToken = process.env.GITHUB_TOKEN ?? process.env.GH_TOKEN ?? process.env["
|
|
1196
|
+
const envToken = process.env.GITHUB_TOKEN ?? process.env.GH_TOKEN ?? process.env["ZERO_GITHUB_TOKEN"];
|
|
1197
1197
|
if (envToken && envToken.trim())
|
|
1198
1198
|
return envToken.trim();
|
|
1199
1199
|
if (cachedGitHubToken !== void 0)
|
|
@@ -2113,7 +2113,7 @@ function pickMetric(cve) {
|
|
|
2113
2113
|
}
|
|
2114
2114
|
function nvdHeaders(extra) {
|
|
2115
2115
|
const headers = {
|
|
2116
|
-
"User-Agent": "
|
|
2116
|
+
"User-Agent": "0-intel/0.1",
|
|
2117
2117
|
...extra ?? {}
|
|
2118
2118
|
};
|
|
2119
2119
|
if (process.env.NVD_API_KEY)
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { createRequire as
|
|
3
|
-
const require =
|
|
2
|
+
import { createRequire as __0CreateRequire } from "node:module";
|
|
3
|
+
const require = __0CreateRequire(import.meta.url);
|
|
4
4
|
import {
|
|
5
5
|
external_exports
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-VIT5ALXF.js";
|
|
7
7
|
|
|
8
8
|
// packages/core/dist/protocol/http-conformance.js
|
|
9
9
|
import { randomUUID } from "node:crypto";
|