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.
Files changed (5) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +13 -111
  3. package/bin/rudel.js +5 -0
  4. package/package.json +13 -41
  5. 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
- CLI for uploading Claude Code / Codex session transcripts to [Rudel](https://app.rudel.ai) for analytics.
3
+ Compatibility alias for [`@opalinehq/cli`](https://www.npmjs.com/package/@opalinehq/cli).
4
4
 
5
- ## Prerequisites
6
-
7
- - [Bun](https://bun.sh) runtime installed
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
- # Interactive project picker (batch upload)
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
- Upload endpoints must use HTTPS, except that loopback HTTP endpoints such as
75
- `http://localhost:4010/rpc` are allowed for local development. Plaintext HTTP
76
- to any other host is refused unless the upload-specific
77
- `--allow-insecure-endpoint` flag is passed or
78
- `RUDEL_ALLOW_INSECURE_ENDPOINT=1` is set. This opt-in is intentionally separate
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
- ## Links
20
+ ## License
118
21
 
119
- - **Web App**: [app.rudel.ai](https://app.rudel.ai)
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
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ import { runCli } from "@opalinehq/cli/run";
3
+
4
+ process.stderr.write("rudel is now opaline\n");
5
+ await runCli(process.argv.slice(2));
package/package.json CHANGED
@@ -1,64 +1,36 @@
1
1
  {
2
2
  "name": "rudel",
3
- "version": "0.3.0",
3
+ "version": "0.6.0",
4
4
  "type": "module",
5
- "description": "CLI for the Coding Agent Analytics Platform rudel.ai",
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/evrendom/rudel.git",
14
- "directory": "apps/cli"
12
+ "url": "git+https://github.com/opalinehq/cli.git",
13
+ "directory": "packages/rudel-alias"
15
14
  },
16
15
  "bugs": {
17
- "url": "https://github.com/evrendom/rudel/issues"
16
+ "url": "https://github.com/opalinehq/cli/issues"
18
17
  },
19
18
  "keywords": [
20
- "claude",
19
+ "opaline",
20
+ "rudel",
21
21
  "claude-code",
22
- "analytics",
23
- "session",
24
- "transcript",
25
- "coding-agent"
22
+ "codex",
23
+ "cli"
26
24
  ],
27
- "author": "ObsessionDB",
25
+ "author": "Opaline",
28
26
  "bin": {
29
- "rudel": "./dist/cli.js"
27
+ "rudel": "bin/rudel.js"
30
28
  },
31
29
  "files": [
32
- "dist",
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
- "@clack/prompts": "^1.0.1",
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
  }