riciplay 1.8.81
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/README.md +34 -0
- package/bin/riciplay +50 -0
- package/package.json +49 -0
- package/scripts/postinstall.js +40 -0
package/README.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Riciplay
|
|
2
|
+
|
|
3
|
+
AI-powered bug bounty reconnaissance and penetration testing agent. This npm package is a launcher for the Python implementation ([`riciplay-cli` on PyPI](https://pypi.org/project/riciplay-cli/)) — postinstall installs it via pip, and the `riciplay` command behaves identically to a native pip install.
|
|
4
|
+
|
|
5
|
+
## What it does
|
|
6
|
+
|
|
7
|
+
- **Agent sessions** — an AI agent that plans and executes full investigations: recon → browsing → interception → findings
|
|
8
|
+
- **Real browser control** — trusted-input mouse/keyboard (hover menus, slider drags, canvas clicks), form-state autosave/restore, Cloudflare handling
|
|
9
|
+
- **MiniProxy v4 interception** — capture with TTFB/total timing, scope guard, Burp-style replay with response diffing, bounded payload sweeps
|
|
10
|
+
- **Recon pipeline** — subdomain/endpoint/tech discovery with durable per-program storage
|
|
11
|
+
- **Notebook + findings** — evidence-linked reporting across sessions
|
|
12
|
+
|
|
13
|
+
## Install
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install -g riciplay
|
|
17
|
+
# or the native Python path:
|
|
18
|
+
pip install riciplay-cli
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Requires Python 3.10+ (installed automatically when possible). Chrome and mitmproxy integrations are pulled in as Python dependencies.
|
|
22
|
+
|
|
23
|
+
## Usage
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
riciplay login # interactive login with key
|
|
27
|
+
riciplay chat # start an agent session
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## The npm wrapper
|
|
31
|
+
|
|
32
|
+
`bin/riciplay` prefers the pip-installed console script on PATH and falls back to invoking `riciplay_cli.main:app` through `python3`. `scripts/postinstall.js` pip-installs `riciplay-cli` if the module isn't importable — and degrades to a printed manual instruction when it can't (no network, `--ignore-scripts`, managed Python).
|
|
33
|
+
|
|
34
|
+
Repository: [Zaidux/Riciplay](https://github.com/Zaidux/Riciplay)
|
package/bin/riciplay
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Riciplay launcher — delegates to the Python package (riciplay-cli).
|
|
3
|
+
//
|
|
4
|
+
// riciplay <args> → the pip-installed console script, else
|
|
5
|
+
// python3 -c "from riciplay_cli.main import app; app()"
|
|
6
|
+
//
|
|
7
|
+
// The Python package is installed by scripts/postinstall.js (pip install
|
|
8
|
+
// riciplay-cli). When the pip console script exists on PATH, exec it
|
|
9
|
+
// directly (identical behavior to a native install); otherwise invoke
|
|
10
|
+
// the app entry through python3 with argv[0] normalized so the CLI's
|
|
11
|
+
// own help/version output stays correct.
|
|
12
|
+
|
|
13
|
+
const { spawn } = require('child_process');
|
|
14
|
+
const { existsSync } = require('fs');
|
|
15
|
+
const path = require('path');
|
|
16
|
+
const { EOL } = require('os');
|
|
17
|
+
|
|
18
|
+
const args = process.argv.slice(2);
|
|
19
|
+
|
|
20
|
+
function fail(msg) {
|
|
21
|
+
process.stderr.write(`Error: ${msg}${EOL}`);
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function run(cmd, argv) {
|
|
26
|
+
const proc = spawn(cmd, argv, { stdio: 'inherit' });
|
|
27
|
+
proc.on('error', (err) => fail(err.code === 'ENOENT'
|
|
28
|
+
? 'python3 not found. Riciplay is a Python tool — install Python 3.10+ first.'
|
|
29
|
+
: err.message));
|
|
30
|
+
proc.on('close', (code) => process.exit(code ?? 1));
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Prefer an installed console script (same PATH resolution pip used).
|
|
34
|
+
const isWin = process.platform === 'win32';
|
|
35
|
+
const exe = isWin ? 'riciplay.exe' : 'riciplay';
|
|
36
|
+
for (const dir of ['/usr/local/bin', '/usr/bin', path.join(process.env.HOME || '', '.local', 'bin')]) {
|
|
37
|
+
const candidate = path.join(dir, exe);
|
|
38
|
+
if (existsSync(candidate)) {
|
|
39
|
+
run(candidate, args);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Module fallback — app() reads sys.argv; normalize argv[0] so usage
|
|
45
|
+
// strings and version output match the real console script.
|
|
46
|
+
run('python3', [
|
|
47
|
+
'-c',
|
|
48
|
+
"import sys; sys.argv[0] = 'riciplay'; from riciplay_cli.main import app; app()",
|
|
49
|
+
...args,
|
|
50
|
+
]);
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "riciplay",
|
|
3
|
+
"version": "1.8.81",
|
|
4
|
+
"description": "AI-powered bug bounty reconnaissance and penetration testing agent — browser, proxy interception, recon, and exploit workflows",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"riciplay": "./bin/riciplay"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"test": "echo \"Error: no test specified\" && exit 1",
|
|
11
|
+
"prepublishOnly": "echo \"Ensure riciplay-cli is published to PyPI first\"",
|
|
12
|
+
"postinstall": "node scripts/postinstall.js"
|
|
13
|
+
},
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "git+https://github.com/Zaidux/Riciplay.git"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"bugbounty",
|
|
20
|
+
"pentesting",
|
|
21
|
+
"security",
|
|
22
|
+
"recon",
|
|
23
|
+
"osint",
|
|
24
|
+
"proxy",
|
|
25
|
+
"mitmproxy",
|
|
26
|
+
"ai-agent",
|
|
27
|
+
"riciplay"
|
|
28
|
+
],
|
|
29
|
+
"author": "Zaidux <zaiduabubakar777@gmail.com>",
|
|
30
|
+
"license": "MIT",
|
|
31
|
+
"bugs": {
|
|
32
|
+
"url": "https://github.com/Zaidux/Riciplay/issues"
|
|
33
|
+
},
|
|
34
|
+
"homepage": "https://github.com/Zaidux/Riciplay#readme",
|
|
35
|
+
"engines": {
|
|
36
|
+
"node": ">=14.0.0"
|
|
37
|
+
},
|
|
38
|
+
"os": [
|
|
39
|
+
"darwin",
|
|
40
|
+
"linux"
|
|
41
|
+
],
|
|
42
|
+
"files": [
|
|
43
|
+
"bin/",
|
|
44
|
+
"scripts/postinstall.js",
|
|
45
|
+
"README.md"
|
|
46
|
+
],
|
|
47
|
+
"dependencies": {},
|
|
48
|
+
"peerDependencies": {}
|
|
49
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Riciplay npm postinstall — installs the Python package from PyPI.
|
|
3
|
+
//
|
|
4
|
+
// This npm package is a launcher; the implementation is the Python
|
|
5
|
+
// package `riciplay-cli` (PyPI). If it is not importable, pip install
|
|
6
|
+
// it. Failures are warnings, not errors: the user may be installing
|
|
7
|
+
// with --ignore-scripts, without network, or managing Python manually —
|
|
8
|
+
// print the manual command instead of failing the install.
|
|
9
|
+
|
|
10
|
+
const { execSync, spawnSync } = require('child_process');
|
|
11
|
+
const os = require('os');
|
|
12
|
+
|
|
13
|
+
console.log('\n🕷️ Installing Riciplay (bug bounty AI agent)...\n');
|
|
14
|
+
|
|
15
|
+
const isWin = os.platform() === 'win32';
|
|
16
|
+
const python = isWin ? 'python' : 'python3';
|
|
17
|
+
const pip = isWin ? 'pip' : 'pip3';
|
|
18
|
+
|
|
19
|
+
function probe(module) {
|
|
20
|
+
const r = spawnSync(python, ['-c', `import ${module}`], { stdio: 'ignore' });
|
|
21
|
+
return r.status === 0;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
try {
|
|
25
|
+
if (probe('riciplay_cli')) {
|
|
26
|
+
console.log('✓ Python package `riciplay_cli` already importable.');
|
|
27
|
+
} else {
|
|
28
|
+
console.log('Installing riciplay-cli from PyPI (this also pulls Chrome/mitmproxy deps)...');
|
|
29
|
+
execSync(`${pip} install --upgrade riciplay-cli`, { stdio: 'inherit' });
|
|
30
|
+
console.log('✓ Installed riciplay-cli.');
|
|
31
|
+
}
|
|
32
|
+
} catch (err) {
|
|
33
|
+
console.warn(
|
|
34
|
+
`\n⚠ Could not install the Python package automatically (${err.message}).\n` +
|
|
35
|
+
' Riciplay needs Python 3.10+. Install manually with:\n' +
|
|
36
|
+
' pip install riciplay-cli\n'
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
console.log('\nUsage: riciplay chat # start an agent session\n');
|