rudel 0.3.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +13 -111
- package/bin/rudel.js +5 -0
- package/package.json +13 -41
- package/dist/cli.js +0 -25012
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Opaline Labs, Inc.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,120 +1,22 @@
|
|
|
1
1
|
# rudel
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Compatibility alias for [`@opalinehq/cli`](https://www.npmjs.com/package/@opalinehq/cli).
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
## Installation
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
npm install -g rudel
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## Quick Start
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
# 1. Log in via your browser
|
|
19
|
-
rudel login
|
|
20
|
-
|
|
21
|
-
# 2. Enable automatic session uploads
|
|
22
|
-
rudel enable
|
|
23
|
-
|
|
24
|
-
# That's it! Your Claude Code / Codex sessions will now be uploaded automatically.
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## Commands
|
|
28
|
-
|
|
29
|
-
### `rudel login`
|
|
30
|
-
|
|
31
|
-
Authenticate with Rudel. Opens your browser to [app.rudel.ai](https://app.rudel.ai) where you sign in, then the CLI receives a token automatically.
|
|
32
|
-
|
|
33
|
-
Flags:
|
|
34
|
-
|
|
35
|
-
| Flag | Description |
|
|
36
|
-
|---|---|
|
|
37
|
-
| `--api-base <url>` | API server to authenticate against. Defaults to `RUDEL_API_BASE`, else `https://app.rudel.ai`. Must be `https://`, or `http://` on a loopback host. |
|
|
38
|
-
| `--allow-insecure-api-base` | Permit plaintext `http://` on a non-loopback host, for **both** the API base and the browser verification URL it returns. Your access token and ingest API key are then sent unencrypted, so only use this on a trusted network. Also settable as `RUDEL_ALLOW_INSECURE_API_BASE=1`. |
|
|
39
|
-
| `--no-browser` | Print the verification URL instead of opening a browser. |
|
|
40
|
-
|
|
41
|
-
The API base must not carry a query string or fragment — `https://host?tenant=acme` is rejected, because the CLI appends paths such as `/api/auth/device/code` to it.
|
|
42
|
-
|
|
43
|
-
Self-hosting over plain HTTP therefore needs `--allow-insecure-api-base` on every `rudel login`. The server also logs a warning at startup when its own verification origin is plaintext. Serving your deployment over HTTPS is strongly preferred; plaintext exposes the login token, the ingest API key, and every uploaded transcript to anyone on the network path.
|
|
44
|
-
|
|
45
|
-
### `rudel enable`
|
|
46
|
-
|
|
47
|
-
Registers the available Claude Code / Codex hooks so your session transcript uploads automatically when a session ends. This is the recommended way to use Rudel -- set it and forget it.
|
|
48
|
-
|
|
49
|
-
### `rudel disable`
|
|
50
|
-
|
|
51
|
-
Removes the auto-upload hook.
|
|
52
|
-
|
|
53
|
-
### `rudel upload [session]`
|
|
54
|
-
|
|
55
|
-
Upload session transcripts. Run without arguments to interactively select projects for batch upload, or pass a session ID / file path to upload a single session.
|
|
5
|
+
Existing `rudel` commands, hooks, cron jobs, arguments, standard input/output,
|
|
6
|
+
and exit codes continue through the Opaline CLI. The alias prints
|
|
7
|
+
`rudel is now opaline` once to stderr per invocation, then delegates to the
|
|
8
|
+
canonical CLI without changing stdout. New installations should use:
|
|
56
9
|
|
|
57
10
|
```bash
|
|
58
|
-
|
|
59
|
-
rudel upload
|
|
60
|
-
|
|
61
|
-
# Upload by session ID
|
|
62
|
-
rudel upload abc123
|
|
63
|
-
|
|
64
|
-
# Upload a specific file
|
|
65
|
-
rudel upload ./path/to/session.jsonl
|
|
66
|
-
|
|
67
|
-
# Preview without uploading
|
|
68
|
-
rudel upload --dry-run
|
|
69
|
-
|
|
70
|
-
# Auto-classify sessions
|
|
71
|
-
rudel upload --classify
|
|
11
|
+
npm install --global opaline
|
|
72
12
|
```
|
|
73
13
|
|
|
74
|
-
|
|
75
|
-
`
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
`
|
|
79
|
-
from `--allow-insecure-api-base`: it permits the ingest API key and full
|
|
80
|
-
transcript to cross the network unencrypted and should only be used on a
|
|
81
|
-
trusted network. Non-HTTP URLs, malformed URLs, and URLs with embedded
|
|
82
|
-
credentials are always refused.
|
|
83
|
-
|
|
84
|
-
Automatic Claude Code and Codex uploads use the environment form because hooks
|
|
85
|
-
run unattended. If `RUDEL_API_BASE` names an unsafe destination, the hook
|
|
86
|
-
refuses the upload, reports the reason in stderr and
|
|
87
|
-
`~/.rudel/logs/hook-upload.log`, and adds the session to the failed-upload queue
|
|
88
|
-
for `rudel upload --retry`; it does not fall back to the saved API base.
|
|
89
|
-
|
|
90
|
-
When run without arguments, `rudel upload` scans `~/.claude/projects/` for all projects with session transcripts and presents an interactive picker. The current project (matched from your working directory) and its subfolders are pre-selected. Use arrow keys to navigate, space to toggle, and enter to confirm.
|
|
91
|
-
|
|
92
|
-
### `rudel whoami`
|
|
93
|
-
|
|
94
|
-
Show the currently authenticated user.
|
|
95
|
-
|
|
96
|
-
### `rudel logout`
|
|
97
|
-
|
|
98
|
-
Clear stored credentials.
|
|
99
|
-
|
|
100
|
-
## What Data Is Collected
|
|
101
|
-
|
|
102
|
-
Each uploaded session includes:
|
|
103
|
-
|
|
104
|
-
- Session ID & timestamps (start, last interaction)
|
|
105
|
-
- User ID & organization ID
|
|
106
|
-
- Project path & package name
|
|
107
|
-
- Git context (repository, branch, SHA, remote)
|
|
108
|
-
- Session transcript (full prompt & response content)
|
|
109
|
-
- Sub-agent usage
|
|
110
|
-
|
|
111
|
-
## Known-secret Redaction
|
|
112
|
-
|
|
113
|
-
Before upload, the CLI redacts known secret patterns in both the main transcript and every sub-agent transcript. The Rudel API reapplies the same deterministic filter before storage and reports counts by pattern; matched values are removed in full and never included in the summary. Uploads are stopped if known-pattern redaction exceeds 20% of the transcript or the bounded filter cannot establish a stable result.
|
|
114
|
-
|
|
115
|
-
This substantially reduces exposure, but it does not catch `DB_PASSWORD=hunter2`, bare custom tokens without a distinguishing prefix, secrets split across lines, base64-encoded or paraphrased secrets, credentials in screenshots, or double-escaped JSON embedded inside another JSON string. Seven of the 18 selected rules also require a restricted trailing delimiter, so ordinary punctuation immediately after a secret can prevent a match. Keep secrets out of coding-agent sessions whenever possible.
|
|
14
|
+
Existing users can keep installing and updating `rudel`. It is released with
|
|
15
|
+
`opaline` and `@opalinehq/cli` and depends on the exact matching CLI version.
|
|
16
|
+
Both `rudel` and `opaline` keep using the same `~/.rudel` state directory.
|
|
17
|
+
Running `rudel upload` installs hooks using the `rudel` executable, so no
|
|
18
|
+
separate global `opaline` installation is required.
|
|
116
19
|
|
|
117
|
-
##
|
|
20
|
+
## License
|
|
118
21
|
|
|
119
|
-
|
|
120
|
-
- **Issues**: [GitHub Issues](https://github.com/evrendom/rudel/issues)
|
|
22
|
+
Copyright (c) 2026 Opaline Labs, Inc. Licensed under [MIT](LICENSE).
|
package/bin/rudel.js
ADDED
package/package.json
CHANGED
|
@@ -1,64 +1,36 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rudel",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"description": "
|
|
5
|
+
"description": "Compatibility alias for the Opaline CLI",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"engines": {
|
|
8
8
|
"node": ">=20"
|
|
9
9
|
},
|
|
10
|
-
"homepage": "https://app.rudel.ai",
|
|
11
10
|
"repository": {
|
|
12
11
|
"type": "git",
|
|
13
|
-
"url": "https://github.com/
|
|
14
|
-
"directory": "
|
|
12
|
+
"url": "git+https://github.com/opalinehq/cli.git",
|
|
13
|
+
"directory": "packages/rudel-alias"
|
|
15
14
|
},
|
|
16
15
|
"bugs": {
|
|
17
|
-
"url": "https://github.com/
|
|
16
|
+
"url": "https://github.com/opalinehq/cli/issues"
|
|
18
17
|
},
|
|
19
18
|
"keywords": [
|
|
20
|
-
"
|
|
19
|
+
"opaline",
|
|
20
|
+
"rudel",
|
|
21
21
|
"claude-code",
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"transcript",
|
|
25
|
-
"coding-agent"
|
|
22
|
+
"codex",
|
|
23
|
+
"cli"
|
|
26
24
|
],
|
|
27
|
-
"author": "
|
|
25
|
+
"author": "Opaline",
|
|
28
26
|
"bin": {
|
|
29
|
-
"rudel": "
|
|
27
|
+
"rudel": "bin/rudel.js"
|
|
30
28
|
},
|
|
31
29
|
"files": [
|
|
32
|
-
"
|
|
30
|
+
"bin",
|
|
33
31
|
"README.md"
|
|
34
32
|
],
|
|
35
|
-
"scripts": {
|
|
36
|
-
"dev": "bun run src/bin/cli.ts",
|
|
37
|
-
"check-types": "tsc --noEmit",
|
|
38
|
-
"build": "bun build src/bin/cli.ts --outdir dist --target node",
|
|
39
|
-
"prepack": "bun run build",
|
|
40
|
-
"test": "bun test",
|
|
41
|
-
"test:integration": "bun test ./src/__tests__/api-upload.integration.ts ./src/__tests__/uploader-rate-limit.integration.ts ./src/__tests__/auth-verify.integration.ts ./src/__tests__/auth.e2e.integration.ts ./src/__tests__/release-pressure.integration.ts",
|
|
42
|
-
"test:integration:skew": "bun test ./src/__tests__/version-skew.integration.ts",
|
|
43
|
-
"test:packed-smoke": "bun test ./src/__tests__/packed-cli-smoke.integration.ts"
|
|
44
|
-
},
|
|
45
33
|
"dependencies": {
|
|
46
|
-
"@
|
|
47
|
-
"@logtape/file": "^2.0.4",
|
|
48
|
-
"@logtape/logtape": "^2.0.4",
|
|
49
|
-
"@orpc/client": "^1.13.5",
|
|
50
|
-
"@orpc/contract": "^1.13.5",
|
|
51
|
-
"@stricli/core": "^1.2.5",
|
|
52
|
-
"posthog-node": "5.46.1",
|
|
53
|
-
"p-map": "^7.0.4"
|
|
54
|
-
},
|
|
55
|
-
"devDependencies": {
|
|
56
|
-
"@rudel/agent-adapters": "workspace:*",
|
|
57
|
-
"@rudel/api-routes": "workspace:*",
|
|
58
|
-
"@rudel/secret-filter": "workspace:*",
|
|
59
|
-
"@rudel/typescript-config": "workspace:*",
|
|
60
|
-
"@types/node": "^22",
|
|
61
|
-
"bun-types": "latest",
|
|
62
|
-
"typescript": "5.9.2"
|
|
34
|
+
"@opalinehq/cli": "0.6.0"
|
|
63
35
|
}
|
|
64
36
|
}
|