hyperclaw 5.2.7 โ 5.2.9
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/dist/a2ui-protocol-DEsfqO7h.js +75 -0
- package/dist/agents-routing-Cee7wrfi.js +398 -0
- package/dist/agents-routing-ChorJKFL.js +6 -0
- package/dist/agents-routing-Cpg20-1e.js +398 -0
- package/dist/agents-routing-uNzqjgOr.js +6 -0
- package/dist/api-key-validation-DgOBmp8Y.js +64 -0
- package/dist/api-key-validation-DydlUth1.js +64 -0
- package/dist/api-keys-guide--73Bq0Ey.js +149 -0
- package/dist/api-keys-guide-DqRGa4x7.js +149 -0
- package/dist/audit-CX5poVMR.js +445 -0
- package/dist/audit-Dntx9fG9.js +445 -0
- package/dist/banner-B_rR7FPO.js +7 -0
- package/dist/banner-Bb7CderS.js +143 -0
- package/dist/bounty-tools-BoU1NN5N.js +211 -0
- package/dist/bounty-tools-Dn9Yq7V1.js +211 -0
- package/dist/browser-tools-CJ9M9o22.js +179 -0
- package/dist/browser-tools-CXxWxA1c.js +5 -0
- package/dist/chat-C07wF0mM.js +494 -0
- package/dist/chat-D1Zc73I5.js +513 -0
- package/dist/claw-tasks-BLqd1a0Q.js +80 -0
- package/dist/claw-tasks-ChqkHdFs.js +80 -0
- package/dist/config-BlLlJ6Er.js +7 -0
- package/dist/config-Bzues-G2.js +7 -0
- package/dist/config-DGAAJ49A.js +261 -0
- package/dist/config-SgDxKyfV.js +261 -0
- package/dist/connector-1efnZgQN.js +566 -0
- package/dist/connector-B5q1_srT.js +286 -0
- package/dist/connector-BMFLJ4fr.js +508 -0
- package/dist/connector-BZYv9siY.js +189 -0
- package/dist/connector-B_XkXm-j.js +218 -0
- package/dist/connector-BkY1I6gf.js +189 -0
- package/dist/connector-C2Z3RN1z.js +350 -0
- package/dist/connector-C7aYvVzU.js +225 -0
- package/dist/connector-CXXYOyHw.js +164 -0
- package/dist/connector-Ca1J23HX.js +167 -0
- package/dist/connector-Cjqc656I.js +181 -0
- package/dist/connector-CluRienN.js +425 -0
- package/dist/connector-CuNz2eP-.js +305 -0
- package/dist/connector-DHL_oeHy.js +552 -0
- package/dist/connector-DJ79rd1L.js +173 -0
- package/dist/connector-DcLE6xCZ.js +239 -0
- package/dist/connector-DcyQTJnJ.js +162 -0
- package/dist/connector-DgyX9qSc.js +192 -0
- package/dist/connector-DnDXXZ7L.js +182 -0
- package/dist/connector-DqUslg-X.js +213 -0
- package/dist/connector-Duc-HmRZ.js +85 -0
- package/dist/connector-IV0QFer8.js +498 -0
- package/dist/connector-OnsLxE8G.js +194 -0
- package/dist/connector-UYu_TS0X.js +204 -0
- package/dist/connector-cCA5ffmp.js +340 -0
- package/dist/connector-fbNfx4_L.js +568 -0
- package/dist/connector-fi2vlwbO.js +276 -0
- package/dist/connector-l3LD8IDN.js +419 -0
- package/dist/cost-tracker-CgEXyEtz.js +103 -0
- package/dist/cost-tracker-DCXDUzBI.js +103 -0
- package/dist/credentials-store-1LDtNReY.js +89 -0
- package/dist/credentials-store-BFxEJR00.js +7 -0
- package/dist/credentials-store-Bmm9e1SS.js +7 -0
- package/dist/credentials-store-D8ERbGR2.js +89 -0
- package/dist/cron-tasks-1E6wKpTv.js +85 -0
- package/dist/cron-tasks-OQbgmenS.js +85 -0
- package/dist/daemon-B13UIqvL.js +7 -0
- package/dist/daemon-CzOW-1PS.js +421 -0
- package/dist/daemon-aVX-WGz1.js +421 -0
- package/dist/daemon-iFmVBPXN.js +7 -0
- package/dist/delivery-B8YGmrq5.js +4 -0
- package/dist/delivery-DWsU6gx-.js +95 -0
- package/dist/delivery-Pko6sSkt.js +4 -0
- package/dist/delivery-hMHFRZwy.js +95 -0
- package/dist/destructive-gate-C2TrWsp2.js +101 -0
- package/dist/destructive-gate-bnkroJWG.js +101 -0
- package/dist/developer-keys-BWXHaWxY.js +127 -0
- package/dist/developer-keys-CzDxVczE.js +8 -0
- package/dist/device-auth-store-C1bCwXO2.js +7 -0
- package/dist/device-auth-store-DIZTOz4V.js +88 -0
- package/dist/doctor-C6nAGdH8.js +233 -0
- package/dist/doctor-mgWumA25.js +6 -0
- package/dist/engine-BGRTi0fo.js +327 -0
- package/dist/engine-BvCEhaUn.js +7 -0
- package/dist/engine-ByQ-0sWM.js +7 -0
- package/dist/engine-gnMjO743.js +327 -0
- package/dist/env-resolve-BdagnXhK.js +151 -0
- package/dist/env-resolve-CHxjGo8u.js +151 -0
- package/dist/env-resolve-NEtsGacw.js +10 -0
- package/dist/env-resolve-pIETNTpQ.js +10 -0
- package/dist/extraction-tools-BE6z_Yw5.js +91 -0
- package/dist/extraction-tools-CJsdyBST.js +5 -0
- package/dist/form_data-B2_0EoWj.js +8657 -0
- package/dist/gmail-watch-setup-1RGIHNdu.js +42 -0
- package/dist/gmail-watch-setup-Brkj94Sy.js +42 -0
- package/dist/health-BMUmUNoe.js +152 -0
- package/dist/health-C8n9RH5O.js +6 -0
- package/dist/heartbeat-engine-D6oSpgxx.js +89 -0
- package/dist/heartbeat-engine-aRbab8a5.js +89 -0
- package/dist/hub-BJM2KXLO.js +6 -0
- package/dist/hub-Bb_dYECE.js +512 -0
- package/dist/hyperclawbot-CgrV46DA.js +516 -0
- package/dist/hyperclawbot-DzP_v3iA.js +516 -0
- package/dist/inference-BHJFPEKL.js +8 -0
- package/dist/inference-CFBkvLpE.js +2854 -0
- package/dist/inference-G4MbdErG.js +8 -0
- package/dist/inference-vweXyh27.js +2854 -0
- package/dist/knowledge-graph-9UNrsiIY.js +134 -0
- package/dist/knowledge-graph-yeMPBPP8.js +134 -0
- package/dist/loader-BXYJl25e.js +6 -0
- package/dist/loader-DIPs649t.js +410 -0
- package/dist/loader-Dq_cDlOW.js +6 -0
- package/dist/loader-gTdKBwiI.js +410 -0
- package/dist/logger-C3ZCDSkc.js +86 -0
- package/dist/logger-CG38Idq4.js +86 -0
- package/dist/manager--wG9JdFW.js +120 -0
- package/dist/manager-BI3izlRG.js +120 -0
- package/dist/manager-BNc21xgG.js +6 -0
- package/dist/manager-CQ3MWNHY.js +250 -0
- package/dist/manager-DWJ7WZcY.js +250 -0
- package/dist/manager-DYfzqckn.js +35 -0
- package/dist/mcp-CklaYr_6.js +142 -0
- package/dist/mcp-SsMEvl28.js +142 -0
- package/dist/mcp-loader-9v8eUsNI.js +93 -0
- package/dist/mcp-loader-DLrp_oZJ.js +93 -0
- package/dist/memory-BCYvdqwo.js +273 -0
- package/dist/memory-BGgCBSx1.js +6 -0
- package/dist/memory-auto-Bh52cQJP.js +5 -0
- package/dist/memory-auto-Bow9u_L7.js +306 -0
- package/dist/memory-auto-BupvVwNd.js +306 -0
- package/dist/memory-auto-CgBAI8mm.js +5 -0
- package/dist/memory-integration-4oGqX6rr.js +91 -0
- package/dist/memory-integration-CveUEI3V.js +91 -0
- package/dist/moltbook-B3DNdh40.js +81 -0
- package/dist/moltbook-xP7VXKlX.js +81 -0
- package/dist/node-C4esBfbX.js +226 -0
- package/dist/node-urDjajMt.js +226 -0
- package/dist/nodes-registry-Cd4eWw80.js +52 -0
- package/dist/nodes-registry-DLUZhEMS.js +52 -0
- package/dist/oauth-flow-BbLQTzZk.js +148 -0
- package/dist/oauth-flow-Bt-LaRHV.js +148 -0
- package/dist/oauth-provider-CVTKgj35.js +111 -0
- package/dist/oauth-provider-UZyG84s7.js +111 -0
- package/dist/observability-BtLyuxcz.js +89 -0
- package/dist/observability-lwYm4aoB.js +89 -0
- package/dist/onboard-B3drurt-.js +3812 -0
- package/dist/onboard-BV5Poocl.js +13 -0
- package/dist/onboard-DEwuHrMj.js +14 -0
- package/dist/onboard-UiynbNQy.js +3909 -0
- package/dist/orchestrator-BXyIgAeH.js +189 -0
- package/dist/orchestrator-DMZkAVa5.js +189 -0
- package/dist/orchestrator-MLTc4NYu.js +6 -0
- package/dist/orchestrator-rVGu7yYr.js +6 -0
- package/dist/osint-Bsf6RGPv.js +283 -0
- package/dist/osint-chat-Ark94iFc.js +789 -0
- package/dist/osint-chat-Hn8qpsC1.js +836 -0
- package/dist/osint-f9DeXT6j.js +283 -0
- package/dist/pairing-2vAiDBjN.js +6 -0
- package/dist/pairing-B4NoBvyE.js +207 -0
- package/dist/pc-access-BLnc-DYp.js +858 -0
- package/dist/pc-access-CTNtG2LD.js +8 -0
- package/dist/pending-approval-C4ZaHHWl.js +22 -0
- package/dist/pending-approval-CHUZ_qT6.js +22 -0
- package/dist/reminders-store-BixTWL1h.js +58 -0
- package/dist/renderer-B1ToXngl.js +228 -0
- package/dist/rules-Cqen1Mpt.js +106 -0
- package/dist/run-main.js +98 -94
- package/dist/runner-B9xANekJ.js +1274 -0
- package/dist/runner-Cr1_mwnU.js +1274 -0
- package/dist/security--17Fxo5Z.js +4 -0
- package/dist/security-B4vH02lO.js +4 -0
- package/dist/security-DP1qtJfL.js +90 -0
- package/dist/security-HOOGCw5z.js +90 -0
- package/dist/server-CRhXiGI9.js +4 -0
- package/dist/server-DUDXqJSo.js +1365 -0
- package/dist/server-De4H45Ju.js +1365 -0
- package/dist/server-ha59nA8a.js +4 -0
- package/dist/session-store-7sEPyV16.js +5 -0
- package/dist/session-store-Ce2QMSL_.js +141 -0
- package/dist/sessions-tools-CWr_pDtp.js +5 -0
- package/dist/sessions-tools-DKVu9aIN.js +95 -0
- package/dist/skill-loader-DK19Jm4e.js +7 -0
- package/dist/skill-loader-Dfs9VNM-.js +160 -0
- package/dist/skill-runtime-BRp2D8Jb.js +5 -0
- package/dist/skill-runtime-BeKh2rD_.js +5 -0
- package/dist/skill-runtime-C8bNwKwz.js +104 -0
- package/dist/skill-runtime-CcpC2Zfc.js +104 -0
- package/dist/src-B8LzGLSY.js +63 -0
- package/dist/src-BxmkZ9RH.js +63 -0
- package/dist/src-DUoc6_kn.js +458 -0
- package/dist/src-DjTtmSRg.js +20 -0
- package/dist/src-n_46LPDi.js +458 -0
- package/dist/sub-agent-tools-CldaMfd5.js +39 -0
- package/dist/sub-agent-tools-q5JqEze_.js +39 -0
- package/dist/tool-policy-DtGf3Ifq.js +189 -0
- package/dist/tool-policy-QXF3MMxu.js +189 -0
- package/dist/tts-elevenlabs-1zWD3QJw.js +64 -0
- package/dist/tts-elevenlabs-y6HGWWDS.js +64 -0
- package/dist/update-check-C4te7JmY.js +6 -0
- package/dist/update-check-GDue_it1.js +98 -0
- package/dist/vision-DV2ubVjr.js +167 -0
- package/dist/vision-tools-Cb86uMdh.js +5 -0
- package/dist/vision-tools-CbVfyTZT.js +5 -0
- package/dist/vision-tools-DieVQp6s.js +51 -0
- package/dist/vision-tools-DlnxaZjg.js +51 -0
- package/dist/vision-u4kMThdo.js +167 -0
- package/dist/voice-transcription-BolTT_HG.js +170 -0
- package/dist/voice-transcription-DgON5qaF.js +170 -0
- package/dist/website-watch-tools-B8L_NgwT.js +5 -0
- package/dist/website-watch-tools-Drm5HjIX.js +176 -0
- package/package.json +4 -1
- package/static/chat.html +9 -3
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
const require_chunk = require('./chunk-jS-bbMI5.js');
|
|
2
|
+
|
|
3
|
+
//#region packages/core/src/agent/orchestrator.ts
|
|
4
|
+
/** Parse parallel plan into waves: [['A'], ['B','C'], ['D']] = A then B||C then D. */
|
|
5
|
+
function parseParallelWaves(text) {
|
|
6
|
+
const waves = [];
|
|
7
|
+
const lines = (text || "").trim().split(/\n/);
|
|
8
|
+
for (const line of lines) {
|
|
9
|
+
const m = line.match(/^\s*\d+\.\s*(.+)$/);
|
|
10
|
+
if (!m) continue;
|
|
11
|
+
const parts = m[1].split(/\|/).map((s) => s.trim()).filter(Boolean);
|
|
12
|
+
if (parts.length > 0) waves.push(parts);
|
|
13
|
+
}
|
|
14
|
+
return waves;
|
|
15
|
+
}
|
|
16
|
+
/** Parse "1. X\n2. Y" into step strings. */
|
|
17
|
+
function parseSteps(text) {
|
|
18
|
+
const steps = [];
|
|
19
|
+
const lines = (text || "").trim().split(/\n/);
|
|
20
|
+
for (const line of lines) {
|
|
21
|
+
const m = line.match(/^\s*\d+\.\s*(.+)$/);
|
|
22
|
+
if (m) steps.push(m[1].trim());
|
|
23
|
+
}
|
|
24
|
+
return steps.length > 0 ? steps : [];
|
|
25
|
+
}
|
|
26
|
+
/** Multi-step with retry, session context, checkpointing, error recovery. */
|
|
27
|
+
async function runMultiStep(goal, opts) {
|
|
28
|
+
const { runAgentEngine } = await Promise.resolve().then(() => require("./engine-BvCEhaUn.js"));
|
|
29
|
+
const maxRetries = opts.maxStepRetries ?? 2;
|
|
30
|
+
const checkpointable = opts.checkpointable ?? false;
|
|
31
|
+
let steps;
|
|
32
|
+
let results = [];
|
|
33
|
+
let startIndex = 0;
|
|
34
|
+
if (opts.checkpoint && opts.checkpoint.goal === goal && opts.checkpoint.steps.length > 0) {
|
|
35
|
+
steps = opts.checkpoint.steps;
|
|
36
|
+
results = [...opts.checkpoint.results ?? []];
|
|
37
|
+
startIndex = results.length;
|
|
38
|
+
} else {
|
|
39
|
+
const planOpts = opts.sessionId && opts.appendTranscript ? opts : {
|
|
40
|
+
...opts,
|
|
41
|
+
sessionId: opts.sessionId,
|
|
42
|
+
appendTranscript: opts.appendTranscript
|
|
43
|
+
};
|
|
44
|
+
const planResult = await runAgentEngine(`${PLAN_PROMPT}\n\nGoal: ${goal}`, planOpts);
|
|
45
|
+
steps = parseSteps(planResult.text);
|
|
46
|
+
if (steps.length === 0) return runAgentEngine(goal, opts);
|
|
47
|
+
}
|
|
48
|
+
let lastUsage;
|
|
49
|
+
for (let i = startIndex; i < steps.length; i++) {
|
|
50
|
+
const step = steps[i];
|
|
51
|
+
const ctx = results.length > 0 ? `Previous results:\n${results.map((r, j) => `Step ${j + 1}: ${r.slice(0, 400)}${r.length > 400 ? "..." : ""}`).join("\n")}\n\n` : "";
|
|
52
|
+
const message = `${ctx}Step ${i + 1}: ${step}`;
|
|
53
|
+
let lastErr;
|
|
54
|
+
let stepResult;
|
|
55
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
56
|
+
stepResult = await runAgentEngine(message, opts);
|
|
57
|
+
if (stepResult.usage) lastUsage = stepResult.usage;
|
|
58
|
+
if (!stepResult.error) {
|
|
59
|
+
results.push(stepResult.text);
|
|
60
|
+
if (checkpointable && opts.onCheckpoint) await Promise.resolve(opts.onCheckpoint({
|
|
61
|
+
goal,
|
|
62
|
+
steps,
|
|
63
|
+
completedIndices: [...Array(results.length)].map((_, k) => k),
|
|
64
|
+
results: [...results]
|
|
65
|
+
}));
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
lastErr = stepResult.error;
|
|
69
|
+
if (attempt < maxRetries && opts.onToken) opts.onToken(`[Retry ${attempt + 1}/${maxRetries} for step ${i + 1}โฆ]\n`);
|
|
70
|
+
}
|
|
71
|
+
if (lastErr) {
|
|
72
|
+
const summary$1 = results.length > 0 ? results.map((r, j) => `**Step ${j + 1}**\n${r}`).join("\n\n---\n\n") + `\n\n**Step ${i + 1}** (failed): ${lastErr}` : `Step ${i + 1} failed: ${lastErr}`;
|
|
73
|
+
opts.onDone?.(summary$1);
|
|
74
|
+
return {
|
|
75
|
+
text: summary$1,
|
|
76
|
+
error: lastErr,
|
|
77
|
+
usage: lastUsage
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
const summary = results.map((r, i) => `**Step ${i + 1}**\n${r}`).join("\n\n---\n\n");
|
|
82
|
+
opts.onDone?.(summary);
|
|
83
|
+
return {
|
|
84
|
+
text: summary,
|
|
85
|
+
usage: lastUsage
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/** Parallel sub-agents: plan waves โ run each wave in parallel (Promise.all) โ aggregate. */
|
|
89
|
+
async function runMultiStepParallel(goal, opts) {
|
|
90
|
+
const { runAgentEngine } = await Promise.resolve().then(() => require("./engine-BvCEhaUn.js"));
|
|
91
|
+
const planOpts = {
|
|
92
|
+
...opts,
|
|
93
|
+
sessionId: void 0,
|
|
94
|
+
appendTranscript: void 0
|
|
95
|
+
};
|
|
96
|
+
const planResult = await runAgentEngine(`${PARALLEL_PLAN_PROMPT}\n\nGoal: ${goal}`, planOpts);
|
|
97
|
+
const waves = parseParallelWaves(planResult.text);
|
|
98
|
+
if (waves.length === 0) return runAgentEngine(goal, opts);
|
|
99
|
+
const allResults = [];
|
|
100
|
+
let lastUsage = planResult.usage;
|
|
101
|
+
for (let w = 0; w < waves.length; w++) {
|
|
102
|
+
const wave = waves[w];
|
|
103
|
+
const ctx = allResults.length > 0 ? `Previous results:\n${allResults.map((r, j) => `Result ${j + 1}: ${r.slice(0, 300)}${r.length > 300 ? "..." : ""}`).join("\n")}\n\n` : "";
|
|
104
|
+
const messages = wave.map((step, i) => `${ctx}Sub-task ${w + 1}.${i + 1}: ${step}`);
|
|
105
|
+
const runOpts = {
|
|
106
|
+
...opts,
|
|
107
|
+
onToken: void 0,
|
|
108
|
+
onDone: void 0
|
|
109
|
+
};
|
|
110
|
+
const results = await Promise.all(messages.map((msg) => runAgentEngine(msg, runOpts)));
|
|
111
|
+
for (const r of results) {
|
|
112
|
+
if (r.usage) lastUsage = r.usage;
|
|
113
|
+
if (r.error) {
|
|
114
|
+
const summary$1 = allResults.map((r0, j) => `**Sub-agent ${j + 1}**\n${r0}`).join("\n\n---\n\n") + `\n\n**Failed**\n${r.text}`;
|
|
115
|
+
opts.onDone?.(summary$1);
|
|
116
|
+
return {
|
|
117
|
+
text: summary$1,
|
|
118
|
+
error: r.error,
|
|
119
|
+
usage: lastUsage
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
allResults.push(r.text);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
const summary = allResults.map((r, i) => `**Sub-agent ${i + 1}**\n${r}`).join("\n\n---\n\n");
|
|
126
|
+
opts.onDone?.(summary);
|
|
127
|
+
return {
|
|
128
|
+
text: summary,
|
|
129
|
+
usage: lastUsage
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/** Single-run passthrough (unchanged). */
|
|
133
|
+
async function runWithPlan(message, opts) {
|
|
134
|
+
const { runAgentEngine } = await Promise.resolve().then(() => require("./engine-BvCEhaUn.js"));
|
|
135
|
+
return runAgentEngine(message, opts);
|
|
136
|
+
}
|
|
137
|
+
async function planSteps(goal) {
|
|
138
|
+
const { runAgentEngine } = await Promise.resolve().then(() => require("./engine-BvCEhaUn.js"));
|
|
139
|
+
const r = await runAgentEngine(`${PLAN_PROMPT}\n\nGoal: ${goal}`, {});
|
|
140
|
+
return parseSteps(r.text).map((g) => ({ goal: g }));
|
|
141
|
+
}
|
|
142
|
+
var PLAN_PROMPT, PARALLEL_PLAN_PROMPT;
|
|
143
|
+
var init_orchestrator = require_chunk.__esm({ "packages/core/src/agent/orchestrator.ts"() {
|
|
144
|
+
PLAN_PROMPT = `Break this goal into 1-4 concrete, executable steps. Output ONLY numbered lines.
|
|
145
|
+
Format: 1. step one
|
|
146
|
+
2. step two
|
|
147
|
+
...
|
|
148
|
+
No other text.`;
|
|
149
|
+
PARALLEL_PLAN_PROMPT = `Break this goal into 2-6 steps. Steps that can run IN PARALLEL (independent) put on the SAME line with | between them.
|
|
150
|
+
Format:
|
|
151
|
+
1. step one
|
|
152
|
+
2. step A | step B
|
|
153
|
+
3. step three
|
|
154
|
+
Example: "Compare Python vs Node for APIs" โ 1. research Python for APIs | research Node for APIs
|
|
155
|
+
2. summarize comparison
|
|
156
|
+
Output ONLY numbered lines. No other text.`;
|
|
157
|
+
} });
|
|
158
|
+
|
|
159
|
+
//#endregion
|
|
160
|
+
Object.defineProperty(exports, 'init_orchestrator', {
|
|
161
|
+
enumerable: true,
|
|
162
|
+
get: function () {
|
|
163
|
+
return init_orchestrator;
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
Object.defineProperty(exports, 'planSteps', {
|
|
167
|
+
enumerable: true,
|
|
168
|
+
get: function () {
|
|
169
|
+
return planSteps;
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
Object.defineProperty(exports, 'runMultiStep', {
|
|
173
|
+
enumerable: true,
|
|
174
|
+
get: function () {
|
|
175
|
+
return runMultiStep;
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
Object.defineProperty(exports, 'runMultiStepParallel', {
|
|
179
|
+
enumerable: true,
|
|
180
|
+
get: function () {
|
|
181
|
+
return runMultiStepParallel;
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
Object.defineProperty(exports, 'runWithPlan', {
|
|
185
|
+
enumerable: true,
|
|
186
|
+
get: function () {
|
|
187
|
+
return runWithPlan;
|
|
188
|
+
}
|
|
189
|
+
});
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
const require_chunk = require('./chunk-jS-bbMI5.js');
|
|
2
|
+
|
|
3
|
+
//#region packages/core/src/agent/orchestrator.ts
|
|
4
|
+
/** Parse parallel plan into waves: [['A'], ['B','C'], ['D']] = A then B||C then D. */
|
|
5
|
+
function parseParallelWaves(text) {
|
|
6
|
+
const waves = [];
|
|
7
|
+
const lines = (text || "").trim().split(/\n/);
|
|
8
|
+
for (const line of lines) {
|
|
9
|
+
const m = line.match(/^\s*\d+\.\s*(.+)$/);
|
|
10
|
+
if (!m) continue;
|
|
11
|
+
const parts = m[1].split(/\|/).map((s) => s.trim()).filter(Boolean);
|
|
12
|
+
if (parts.length > 0) waves.push(parts);
|
|
13
|
+
}
|
|
14
|
+
return waves;
|
|
15
|
+
}
|
|
16
|
+
/** Parse "1. X\n2. Y" into step strings. */
|
|
17
|
+
function parseSteps(text) {
|
|
18
|
+
const steps = [];
|
|
19
|
+
const lines = (text || "").trim().split(/\n/);
|
|
20
|
+
for (const line of lines) {
|
|
21
|
+
const m = line.match(/^\s*\d+\.\s*(.+)$/);
|
|
22
|
+
if (m) steps.push(m[1].trim());
|
|
23
|
+
}
|
|
24
|
+
return steps.length > 0 ? steps : [];
|
|
25
|
+
}
|
|
26
|
+
/** Multi-step with retry, session context, checkpointing, error recovery. */
|
|
27
|
+
async function runMultiStep(goal, opts) {
|
|
28
|
+
const { runAgentEngine } = await Promise.resolve().then(() => require("./engine-ByQ-0sWM.js"));
|
|
29
|
+
const maxRetries = opts.maxStepRetries ?? 2;
|
|
30
|
+
const checkpointable = opts.checkpointable ?? false;
|
|
31
|
+
let steps;
|
|
32
|
+
let results = [];
|
|
33
|
+
let startIndex = 0;
|
|
34
|
+
if (opts.checkpoint && opts.checkpoint.goal === goal && opts.checkpoint.steps.length > 0) {
|
|
35
|
+
steps = opts.checkpoint.steps;
|
|
36
|
+
results = [...opts.checkpoint.results ?? []];
|
|
37
|
+
startIndex = results.length;
|
|
38
|
+
} else {
|
|
39
|
+
const planOpts = opts.sessionId && opts.appendTranscript ? opts : {
|
|
40
|
+
...opts,
|
|
41
|
+
sessionId: opts.sessionId,
|
|
42
|
+
appendTranscript: opts.appendTranscript
|
|
43
|
+
};
|
|
44
|
+
const planResult = await runAgentEngine(`${PLAN_PROMPT}\n\nGoal: ${goal}`, planOpts);
|
|
45
|
+
steps = parseSteps(planResult.text);
|
|
46
|
+
if (steps.length === 0) return runAgentEngine(goal, opts);
|
|
47
|
+
}
|
|
48
|
+
let lastUsage;
|
|
49
|
+
for (let i = startIndex; i < steps.length; i++) {
|
|
50
|
+
const step = steps[i];
|
|
51
|
+
const ctx = results.length > 0 ? `Previous results:\n${results.map((r, j) => `Step ${j + 1}: ${r.slice(0, 400)}${r.length > 400 ? "..." : ""}`).join("\n")}\n\n` : "";
|
|
52
|
+
const message = `${ctx}Step ${i + 1}: ${step}`;
|
|
53
|
+
let lastErr;
|
|
54
|
+
let stepResult;
|
|
55
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
56
|
+
stepResult = await runAgentEngine(message, opts);
|
|
57
|
+
if (stepResult.usage) lastUsage = stepResult.usage;
|
|
58
|
+
if (!stepResult.error) {
|
|
59
|
+
results.push(stepResult.text);
|
|
60
|
+
if (checkpointable && opts.onCheckpoint) await Promise.resolve(opts.onCheckpoint({
|
|
61
|
+
goal,
|
|
62
|
+
steps,
|
|
63
|
+
completedIndices: [...Array(results.length)].map((_, k) => k),
|
|
64
|
+
results: [...results]
|
|
65
|
+
}));
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
lastErr = stepResult.error;
|
|
69
|
+
if (attempt < maxRetries && opts.onToken) opts.onToken(`[Retry ${attempt + 1}/${maxRetries} for step ${i + 1}โฆ]\n`);
|
|
70
|
+
}
|
|
71
|
+
if (lastErr) {
|
|
72
|
+
const summary$1 = results.length > 0 ? results.map((r, j) => `**Step ${j + 1}**\n${r}`).join("\n\n---\n\n") + `\n\n**Step ${i + 1}** (failed): ${lastErr}` : `Step ${i + 1} failed: ${lastErr}`;
|
|
73
|
+
opts.onDone?.(summary$1);
|
|
74
|
+
return {
|
|
75
|
+
text: summary$1,
|
|
76
|
+
error: lastErr,
|
|
77
|
+
usage: lastUsage
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
const summary = results.map((r, i) => `**Step ${i + 1}**\n${r}`).join("\n\n---\n\n");
|
|
82
|
+
opts.onDone?.(summary);
|
|
83
|
+
return {
|
|
84
|
+
text: summary,
|
|
85
|
+
usage: lastUsage
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/** Parallel sub-agents: plan waves โ run each wave in parallel (Promise.all) โ aggregate. */
|
|
89
|
+
async function runMultiStepParallel(goal, opts) {
|
|
90
|
+
const { runAgentEngine } = await Promise.resolve().then(() => require("./engine-ByQ-0sWM.js"));
|
|
91
|
+
const planOpts = {
|
|
92
|
+
...opts,
|
|
93
|
+
sessionId: void 0,
|
|
94
|
+
appendTranscript: void 0
|
|
95
|
+
};
|
|
96
|
+
const planResult = await runAgentEngine(`${PARALLEL_PLAN_PROMPT}\n\nGoal: ${goal}`, planOpts);
|
|
97
|
+
const waves = parseParallelWaves(planResult.text);
|
|
98
|
+
if (waves.length === 0) return runAgentEngine(goal, opts);
|
|
99
|
+
const allResults = [];
|
|
100
|
+
let lastUsage = planResult.usage;
|
|
101
|
+
for (let w = 0; w < waves.length; w++) {
|
|
102
|
+
const wave = waves[w];
|
|
103
|
+
const ctx = allResults.length > 0 ? `Previous results:\n${allResults.map((r, j) => `Result ${j + 1}: ${r.slice(0, 300)}${r.length > 300 ? "..." : ""}`).join("\n")}\n\n` : "";
|
|
104
|
+
const messages = wave.map((step, i) => `${ctx}Sub-task ${w + 1}.${i + 1}: ${step}`);
|
|
105
|
+
const runOpts = {
|
|
106
|
+
...opts,
|
|
107
|
+
onToken: void 0,
|
|
108
|
+
onDone: void 0
|
|
109
|
+
};
|
|
110
|
+
const results = await Promise.all(messages.map((msg) => runAgentEngine(msg, runOpts)));
|
|
111
|
+
for (const r of results) {
|
|
112
|
+
if (r.usage) lastUsage = r.usage;
|
|
113
|
+
if (r.error) {
|
|
114
|
+
const summary$1 = allResults.map((r0, j) => `**Sub-agent ${j + 1}**\n${r0}`).join("\n\n---\n\n") + `\n\n**Failed**\n${r.text}`;
|
|
115
|
+
opts.onDone?.(summary$1);
|
|
116
|
+
return {
|
|
117
|
+
text: summary$1,
|
|
118
|
+
error: r.error,
|
|
119
|
+
usage: lastUsage
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
allResults.push(r.text);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
const summary = allResults.map((r, i) => `**Sub-agent ${i + 1}**\n${r}`).join("\n\n---\n\n");
|
|
126
|
+
opts.onDone?.(summary);
|
|
127
|
+
return {
|
|
128
|
+
text: summary,
|
|
129
|
+
usage: lastUsage
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/** Single-run passthrough (unchanged). */
|
|
133
|
+
async function runWithPlan(message, opts) {
|
|
134
|
+
const { runAgentEngine } = await Promise.resolve().then(() => require("./engine-ByQ-0sWM.js"));
|
|
135
|
+
return runAgentEngine(message, opts);
|
|
136
|
+
}
|
|
137
|
+
async function planSteps(goal) {
|
|
138
|
+
const { runAgentEngine } = await Promise.resolve().then(() => require("./engine-ByQ-0sWM.js"));
|
|
139
|
+
const r = await runAgentEngine(`${PLAN_PROMPT}\n\nGoal: ${goal}`, {});
|
|
140
|
+
return parseSteps(r.text).map((g) => ({ goal: g }));
|
|
141
|
+
}
|
|
142
|
+
var PLAN_PROMPT, PARALLEL_PLAN_PROMPT;
|
|
143
|
+
var init_orchestrator = require_chunk.__esm({ "packages/core/src/agent/orchestrator.ts"() {
|
|
144
|
+
PLAN_PROMPT = `Break this goal into 1-4 concrete, executable steps. Output ONLY numbered lines.
|
|
145
|
+
Format: 1. step one
|
|
146
|
+
2. step two
|
|
147
|
+
...
|
|
148
|
+
No other text.`;
|
|
149
|
+
PARALLEL_PLAN_PROMPT = `Break this goal into 2-6 steps. Steps that can run IN PARALLEL (independent) put on the SAME line with | between them.
|
|
150
|
+
Format:
|
|
151
|
+
1. step one
|
|
152
|
+
2. step A | step B
|
|
153
|
+
3. step three
|
|
154
|
+
Example: "Compare Python vs Node for APIs" โ 1. research Python for APIs | research Node for APIs
|
|
155
|
+
2. summarize comparison
|
|
156
|
+
Output ONLY numbered lines. No other text.`;
|
|
157
|
+
} });
|
|
158
|
+
|
|
159
|
+
//#endregion
|
|
160
|
+
Object.defineProperty(exports, 'init_orchestrator', {
|
|
161
|
+
enumerable: true,
|
|
162
|
+
get: function () {
|
|
163
|
+
return init_orchestrator;
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
Object.defineProperty(exports, 'planSteps', {
|
|
167
|
+
enumerable: true,
|
|
168
|
+
get: function () {
|
|
169
|
+
return planSteps;
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
Object.defineProperty(exports, 'runMultiStep', {
|
|
173
|
+
enumerable: true,
|
|
174
|
+
get: function () {
|
|
175
|
+
return runMultiStep;
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
Object.defineProperty(exports, 'runMultiStepParallel', {
|
|
179
|
+
enumerable: true,
|
|
180
|
+
get: function () {
|
|
181
|
+
return runMultiStepParallel;
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
Object.defineProperty(exports, 'runWithPlan', {
|
|
185
|
+
enumerable: true,
|
|
186
|
+
get: function () {
|
|
187
|
+
return runWithPlan;
|
|
188
|
+
}
|
|
189
|
+
});
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
const require_chunk = require('./chunk-jS-bbMI5.js');
|
|
2
|
+
const require_orchestrator = require('./orchestrator-BXyIgAeH.js');
|
|
3
|
+
|
|
4
|
+
require_orchestrator.init_orchestrator();
|
|
5
|
+
exports.runMultiStep = require_orchestrator.runMultiStep;
|
|
6
|
+
exports.runMultiStepParallel = require_orchestrator.runMultiStepParallel;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
const require_chunk = require('./chunk-jS-bbMI5.js');
|
|
2
|
+
const require_orchestrator = require('./orchestrator-DMZkAVa5.js');
|
|
3
|
+
|
|
4
|
+
require_orchestrator.init_orchestrator();
|
|
5
|
+
exports.runMultiStep = require_orchestrator.runMultiStep;
|
|
6
|
+
exports.runMultiStepParallel = require_orchestrator.runMultiStepParallel;
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
const require_chunk = require('./chunk-jS-bbMI5.js');
|
|
2
|
+
const require_paths = require('./paths-AIyBxIzm.js');
|
|
3
|
+
const require_paths$1 = require('./paths-DPovhojT.js');
|
|
4
|
+
const chalk = require_chunk.__toESM(require("chalk"));
|
|
5
|
+
const inquirer = require_chunk.__toESM(require("inquirer"));
|
|
6
|
+
const ora = require_chunk.__toESM(require("ora"));
|
|
7
|
+
const fs_extra = require_chunk.__toESM(require("fs-extra"));
|
|
8
|
+
const path = require_chunk.__toESM(require("path"));
|
|
9
|
+
|
|
10
|
+
//#region src/commands/osint.ts
|
|
11
|
+
require_paths$1.init_paths();
|
|
12
|
+
const getConfigFile = () => require_paths.getConfigPath();
|
|
13
|
+
const getOsintProfileFile = () => path.default.join(require_paths.getHyperClawDir(), "osint-profile.json");
|
|
14
|
+
const MODE_DESCRIPTIONS = {
|
|
15
|
+
recon: "Passive reconnaissance โ WHOIS, DNS, subdomains, public info gathering",
|
|
16
|
+
bugbounty: "Bug bounty workflow โ target scope, vulnerability research, report drafting",
|
|
17
|
+
pentest: "Penetration testing โ active recon, service enumeration, exploit research",
|
|
18
|
+
footprint: "Digital footprint โ social media, email leaks, username tracking",
|
|
19
|
+
custom: "Custom โ configure your own tools and system prompt"
|
|
20
|
+
};
|
|
21
|
+
const MODE_SYSTEM_PROMPTS = {
|
|
22
|
+
recon: `You are a professional OSINT analyst specializing in passive reconnaissance.
|
|
23
|
+
Your goal is to gather publicly available information about the target without triggering detection.
|
|
24
|
+
Use DNS lookups, WHOIS data, web scraping, and public databases.
|
|
25
|
+
Always cite sources and stay within legal boundaries.
|
|
26
|
+
Never attempt active exploitation โ only passive information gathering.`,
|
|
27
|
+
bugbounty: `You are an experienced bug bounty hunter working within an authorized scope.
|
|
28
|
+
Your goal is to identify security vulnerabilities in web applications and infrastructure.
|
|
29
|
+
Follow responsible disclosure principles. Report findings clearly with reproduction steps.
|
|
30
|
+
Focus on: XSS, SQLi, SSRF, authentication issues, business logic flaws, IDOR.
|
|
31
|
+
Use tools methodically. Document everything for your report.`,
|
|
32
|
+
pentest: `You are a professional penetration tester with explicit written authorization.
|
|
33
|
+
Conduct a thorough security assessment following the PTES methodology.
|
|
34
|
+
Phases: Intelligence Gathering โ Scanning โ Exploitation โ Post-Exploitation โ Reporting.
|
|
35
|
+
Document all findings with CVSS scores. Stay within defined scope at all times.
|
|
36
|
+
Never exfiltrate real data โ only demonstrate access.`,
|
|
37
|
+
footprint: `You are a digital forensics investigator mapping a target's online presence.
|
|
38
|
+
Your goal is to build a comprehensive profile using only public sources.
|
|
39
|
+
Search social media, data breach databases (HaveIBeenPwned, Dehashed), LinkedIn, GitHub.
|
|
40
|
+
Create a timeline of online activity. Identify connected accounts, email patterns, usernames.
|
|
41
|
+
This is for defensive intelligence gathering and authorized investigations only.`,
|
|
42
|
+
custom: `You are a security researcher with access to OSINT and analysis tools.
|
|
43
|
+
Use available tools to assist with the research task.`
|
|
44
|
+
};
|
|
45
|
+
const MODE_MCP_SERVERS = {
|
|
46
|
+
recon: ["mcp-browser", "mcp-filesystem"],
|
|
47
|
+
bugbounty: [
|
|
48
|
+
"mcp-browser",
|
|
49
|
+
"mcp-filesystem",
|
|
50
|
+
"mcp-github"
|
|
51
|
+
],
|
|
52
|
+
pentest: [
|
|
53
|
+
"mcp-browser",
|
|
54
|
+
"mcp-filesystem",
|
|
55
|
+
"mcp-terminal",
|
|
56
|
+
"mcp-github"
|
|
57
|
+
],
|
|
58
|
+
footprint: ["mcp-browser", "mcp-filesystem"],
|
|
59
|
+
custom: ["mcp-browser", "mcp-filesystem"]
|
|
60
|
+
};
|
|
61
|
+
function printBanner() {
|
|
62
|
+
console.log();
|
|
63
|
+
console.log(chalk.default.red.bold(" โโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโ"));
|
|
64
|
+
console.log(chalk.default.red.bold(" โโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโ"));
|
|
65
|
+
console.log(chalk.default.yellow.bold(" โโโ โโโโโโโโโโโโโโโโโโโโ โโโ โโโ "));
|
|
66
|
+
console.log(chalk.default.yellow.bold(" โโโ โโโโโโโโโโโโโโโโโโโโโโโโ โโโ "));
|
|
67
|
+
console.log(chalk.default.red.bold(" โโโโโโโโโโโโโโโโโโโโโโโ โโโโโโ โโโ "));
|
|
68
|
+
console.log(chalk.default.red.bold(" โโโโโโโ โโโโโโโโโโโโโโ โโโโโ โโโ "));
|
|
69
|
+
console.log();
|
|
70
|
+
console.log(chalk.default.gray(" HyperClaw OSINT / Ethical Hacking Mode"));
|
|
71
|
+
console.log(chalk.default.gray(" โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ"));
|
|
72
|
+
console.log(chalk.default.yellow(" โ ๏ธ For authorized security research only."));
|
|
73
|
+
console.log(chalk.default.yellow(" โ ๏ธ Always have explicit written permission."));
|
|
74
|
+
console.log();
|
|
75
|
+
}
|
|
76
|
+
async function osintSetup(options) {
|
|
77
|
+
printBanner();
|
|
78
|
+
if (options.show) {
|
|
79
|
+
try {
|
|
80
|
+
const profile$1 = await fs_extra.default.readJson(getOsintProfileFile());
|
|
81
|
+
console.log(chalk.default.cyan.bold(" ๐ Current OSINT Profile:\n"));
|
|
82
|
+
console.log(` โ๏ธ Mode: ${chalk.default.yellow(profile$1.mode)}`);
|
|
83
|
+
console.log(` ๐ฏ Target: ${chalk.default.white(profile$1.target || "(not set)")}`);
|
|
84
|
+
console.log(` ๐ท๏ธ Type: ${profile$1.targetType || "N/A"}`);
|
|
85
|
+
console.log(` ๐ MCP: ${profile$1.mcpServers.join(", ")}`);
|
|
86
|
+
console.log(` ๐ Created: ${profile$1.createdAt}`);
|
|
87
|
+
if (profile$1.notes) console.log(` ๐ Notes: ${profile$1.notes}`);
|
|
88
|
+
console.log();
|
|
89
|
+
} catch {
|
|
90
|
+
console.log(chalk.default.gray(" โน๏ธ No OSINT profile saved yet. Run: hyperclaw osint setup\n"));
|
|
91
|
+
}
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (options.reset) {
|
|
95
|
+
await fs_extra.default.remove(getOsintProfileFile());
|
|
96
|
+
const osintActivePath = path.default.join(require_paths.getHyperClawDir(), "OSINT-ACTIVE.md");
|
|
97
|
+
await fs_extra.default.remove(osintActivePath).catch(() => {});
|
|
98
|
+
console.log(chalk.default.green(" ๐งน OSINT profile cleared.\n"));
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
console.log(chalk.default.bold(" ๐ Select OSINT workflow:\n"));
|
|
102
|
+
for (const [mode$1, desc] of Object.entries(MODE_DESCRIPTIONS)) console.log(` ${chalk.default.cyan(mode$1.padEnd(12))} ${chalk.default.gray(desc)}`);
|
|
103
|
+
console.log();
|
|
104
|
+
const { mode } = await inquirer.default.prompt([{
|
|
105
|
+
type: "list",
|
|
106
|
+
name: "mode",
|
|
107
|
+
message: "Workflow:",
|
|
108
|
+
choices: Object.keys(MODE_DESCRIPTIONS).map((m) => ({
|
|
109
|
+
name: `${m.padEnd(12)} โ ${MODE_DESCRIPTIONS[m]}`,
|
|
110
|
+
value: m
|
|
111
|
+
})),
|
|
112
|
+
default: options.mode || "recon"
|
|
113
|
+
}]);
|
|
114
|
+
const { hasTarget } = await inquirer.default.prompt([{
|
|
115
|
+
type: "confirm",
|
|
116
|
+
name: "hasTarget",
|
|
117
|
+
message: "Set a target for this session?",
|
|
118
|
+
default: true
|
|
119
|
+
}]);
|
|
120
|
+
let target;
|
|
121
|
+
let targetType;
|
|
122
|
+
if (hasTarget) {
|
|
123
|
+
const resp = await inquirer.default.prompt([{
|
|
124
|
+
type: "list",
|
|
125
|
+
name: "targetType",
|
|
126
|
+
message: "Target type:",
|
|
127
|
+
choices: [
|
|
128
|
+
"domain",
|
|
129
|
+
"ip",
|
|
130
|
+
"username",
|
|
131
|
+
"email",
|
|
132
|
+
"org",
|
|
133
|
+
"custom"
|
|
134
|
+
]
|
|
135
|
+
}, {
|
|
136
|
+
type: "input",
|
|
137
|
+
name: "target",
|
|
138
|
+
message: "Target value (e.g. example.com):",
|
|
139
|
+
validate: (v) => v.trim().length > 0 || "Required"
|
|
140
|
+
}]);
|
|
141
|
+
target = resp.target.trim();
|
|
142
|
+
targetType = resp.targetType;
|
|
143
|
+
}
|
|
144
|
+
const { notes } = await inquirer.default.prompt([{
|
|
145
|
+
type: "input",
|
|
146
|
+
name: "notes",
|
|
147
|
+
message: "Session notes (optional, e.g. \"HackerOne program XYZ\"):"
|
|
148
|
+
}]);
|
|
149
|
+
console.log();
|
|
150
|
+
const { confirmed } = await inquirer.default.prompt([{
|
|
151
|
+
type: "confirm",
|
|
152
|
+
name: "confirmed",
|
|
153
|
+
message: chalk.default.yellow("I confirm I have explicit written authorization to test this target."),
|
|
154
|
+
default: false
|
|
155
|
+
}]);
|
|
156
|
+
if (!confirmed) {
|
|
157
|
+
console.log(chalk.default.red("\n ๐ซ Aborted. OSINT mode requires authorization confirmation.\n"));
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const spinner = (0, ora.default)("โ๏ธ Applying OSINT configuration...").start();
|
|
161
|
+
const mcpServers = MODE_MCP_SERVERS[mode];
|
|
162
|
+
const systemPrompt = MODE_SYSTEM_PROMPTS[mode];
|
|
163
|
+
const profile = {
|
|
164
|
+
mode,
|
|
165
|
+
target,
|
|
166
|
+
targetType,
|
|
167
|
+
notes: notes || void 0,
|
|
168
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
169
|
+
mcpServers,
|
|
170
|
+
systemPromptOverride: systemPrompt
|
|
171
|
+
};
|
|
172
|
+
await fs_extra.default.ensureDir(require_paths.getHyperClawDir());
|
|
173
|
+
await fs_extra.default.writeJson(getOsintProfileFile(), profile, { spaces: 2 });
|
|
174
|
+
let config = {};
|
|
175
|
+
try {
|
|
176
|
+
config = await fs_extra.default.readJson(getConfigFile());
|
|
177
|
+
} catch {}
|
|
178
|
+
if (!config.agent) config.agent = {};
|
|
179
|
+
const agent = config.agent;
|
|
180
|
+
agent.systemPromptOverride = systemPrompt;
|
|
181
|
+
agent.osintMode = mode;
|
|
182
|
+
if (target) agent.osintTarget = `${targetType}: ${target}`;
|
|
183
|
+
const mcpFile = path.default.join(require_paths.getHyperClawDir(), "mcp-servers.json");
|
|
184
|
+
let mcpServersJson = [];
|
|
185
|
+
try {
|
|
186
|
+
mcpServersJson = await fs_extra.default.readJson(mcpFile);
|
|
187
|
+
} catch {}
|
|
188
|
+
const extensionsDir = path.default.join(path.default.dirname(getConfigFile()), "..", "..");
|
|
189
|
+
const serverDefs = {
|
|
190
|
+
"mcp-filesystem": {
|
|
191
|
+
command: `node ${path.default.join(process.cwd(), "extensions/mcp-filesystem/server.mjs")}`,
|
|
192
|
+
label: "Filesystem (OSINT)"
|
|
193
|
+
},
|
|
194
|
+
"mcp-browser": {
|
|
195
|
+
command: `node ${path.default.join(process.cwd(), "extensions/mcp-browser/server.mjs")}`,
|
|
196
|
+
label: "Browser/Web (OSINT)"
|
|
197
|
+
},
|
|
198
|
+
"mcp-terminal": {
|
|
199
|
+
command: `node ${path.default.join(process.cwd(), "extensions/mcp-terminal/server.mjs")}`,
|
|
200
|
+
label: "Terminal (OSINT)"
|
|
201
|
+
},
|
|
202
|
+
"mcp-github": {
|
|
203
|
+
command: `node ${path.default.join(process.cwd(), "extensions/mcp-github/server.mjs")}`,
|
|
204
|
+
label: "GitHub (OSINT)"
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
for (const serverId of mcpServers) {
|
|
208
|
+
const already = mcpServersJson.find((s) => s.id === serverId);
|
|
209
|
+
if (!already && serverDefs[serverId]) mcpServersJson.push({
|
|
210
|
+
id: serverId,
|
|
211
|
+
name: serverDefs[serverId].label,
|
|
212
|
+
transport: "stdio",
|
|
213
|
+
command: serverDefs[serverId].command,
|
|
214
|
+
enabled: true,
|
|
215
|
+
addedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
216
|
+
});
|
|
217
|
+
else if (already) already.enabled = true;
|
|
218
|
+
}
|
|
219
|
+
await fs_extra.default.ensureDir(path.default.dirname(mcpFile));
|
|
220
|
+
await fs_extra.default.writeJson(mcpFile, mcpServersJson, { spaces: 2 });
|
|
221
|
+
await fs_extra.default.writeJson(getConfigFile(), config, { spaces: 2 });
|
|
222
|
+
spinner.succeed("โ
OSINT configuration applied");
|
|
223
|
+
console.log();
|
|
224
|
+
console.log(chalk.default.bold.red(" ๐ฉธ OSINT mode ready:"));
|
|
225
|
+
console.log(` โ๏ธ Workflow: ${chalk.default.yellow(mode)}`);
|
|
226
|
+
if (target) console.log(` ๐ฏ Target: ${chalk.default.white(target)} ${chalk.default.gray(`(${targetType})`)}`);
|
|
227
|
+
console.log(` ๐ MCP: ${chalk.default.cyan(mcpServers.join(", "))}`);
|
|
228
|
+
console.log();
|
|
229
|
+
const { launchNow } = await inquirer.default.prompt([{
|
|
230
|
+
type: "confirm",
|
|
231
|
+
name: "launchNow",
|
|
232
|
+
message: chalk.default.red("๐ Launch OSINT chat session now?"),
|
|
233
|
+
default: true
|
|
234
|
+
}]);
|
|
235
|
+
if (!launchNow) {
|
|
236
|
+
console.log(chalk.default.gray("\n ๐ Run: hyperclaw osint chat โ to start your session later."));
|
|
237
|
+
console.log(chalk.default.gray(" ๐๏ธ To view profile: hyperclaw osint --show"));
|
|
238
|
+
console.log(chalk.default.gray(" ๐งน To reset: hyperclaw osint --reset\n"));
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
const { runOsintChat } = await Promise.resolve().then(() => require("./osint-chat-Ark94iFc.js"));
|
|
242
|
+
await runOsintChat({});
|
|
243
|
+
}
|
|
244
|
+
async function osintQuickStart(mode) {
|
|
245
|
+
printBanner();
|
|
246
|
+
console.log(chalk.default.bold(" ๐ Available OSINT workflows:\n"));
|
|
247
|
+
const workflowEmojis = {
|
|
248
|
+
recon: "๐",
|
|
249
|
+
bugbounty: "๐",
|
|
250
|
+
pentest: "๐ญ",
|
|
251
|
+
footprint: "๐ค",
|
|
252
|
+
custom: "๐ง"
|
|
253
|
+
};
|
|
254
|
+
for (const [m, desc] of Object.entries(MODE_DESCRIPTIONS)) {
|
|
255
|
+
const isActive = m === mode;
|
|
256
|
+
const bullet = isActive ? chalk.default.green("โถ") : chalk.default.gray("โ");
|
|
257
|
+
const emoji = workflowEmojis[m] ?? "โข";
|
|
258
|
+
console.log(` ${bullet} ${emoji} ${chalk.default.cyan(m.padEnd(12))} ${chalk.default.white(desc)}`);
|
|
259
|
+
}
|
|
260
|
+
console.log();
|
|
261
|
+
console.log(chalk.default.bold(" ๐ Commands:\n"));
|
|
262
|
+
console.log(` ${chalk.default.cyan("hyperclaw osint setup")} โ โ๏ธ interactive OSINT session setup`);
|
|
263
|
+
console.log(` ${chalk.default.cyan("hyperclaw osint chat")} โ ๐ฌ start OSINT chat session`);
|
|
264
|
+
console.log(` ${chalk.default.cyan("hyperclaw osint --show")} โ ๐๏ธ show current profile`);
|
|
265
|
+
console.log(` ${chalk.default.cyan("hyperclaw osint --reset")} โ ๐งน clear OSINT profile`);
|
|
266
|
+
console.log();
|
|
267
|
+
console.log(chalk.default.bold.red(" ๐ฉธ Daemon mode (full shell/tool access):\n"));
|
|
268
|
+
console.log(` ${chalk.default.gray("1.")} ${chalk.default.cyan("hyperclaw daemon start")} โ ๐ฉธ start the daemon (keep running)`);
|
|
269
|
+
console.log(` ${chalk.default.gray("2.")} ${chalk.default.cyan("hyperclaw osint chat")} โ ๐ auto-connects to daemon`);
|
|
270
|
+
console.log(` ${chalk.default.gray(" ")} ${chalk.default.gray("๐ง Gives: nmap, curl, dig, whois, msfconsole, dirb, nikto, sqlmap...")}`);
|
|
271
|
+
console.log();
|
|
272
|
+
console.log(chalk.default.bold(" ๐ MCP servers for OSINT:\n"));
|
|
273
|
+
console.log(` ${chalk.default.cyan("mcp-browser")} โ ๐ web_fetch, web_search, dns_lookup, whois_lookup, extract_links`);
|
|
274
|
+
console.log(` ${chalk.default.cyan("mcp-filesystem")} โ ๐ read_file, write_file, search_files (for saving reports)`);
|
|
275
|
+
console.log(` ${chalk.default.cyan("mcp-github")} โ ๐ list_repos, search_code, get_file`);
|
|
276
|
+
console.log(` ${chalk.default.cyan("mcp-terminal")} โ ๐ป run_command (pentest mode only, requires authorization)`);
|
|
277
|
+
console.log();
|
|
278
|
+
console.log(chalk.default.yellow(" โ ๏ธ Always operate within authorized scope and applicable laws.\n"));
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
//#endregion
|
|
282
|
+
exports.osintQuickStart = osintQuickStart;
|
|
283
|
+
exports.osintSetup = osintSetup;
|