@rebon/cli-darwin-x64 0.1.3
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 +133 -0
- package/bin/rebon +0 -0
- package/package.json +23 -0
- package/scripts/postinstall.js +112 -0
package/README.md
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# rebon
|
|
2
|
+
|
|
3
|
+
An agent CLI for coding and more — a terminal harness that drives an LLM through
|
|
4
|
+
a real agent loop with tools, sessions, permissions, and a full TUI.
|
|
5
|
+
|
|
6
|
+
## Install
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
npm install -g @rebon/cli
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Upgrade later:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm install -g @rebon/cli@latest
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
`@rebon/cli` is a thin launcher that pulls the matching native binary as
|
|
19
|
+
an optional dependency. Supported platforms: `win32-x64`, `darwin-x64`,
|
|
20
|
+
`darwin-arm64`, `linux-x64`, `linux-arm64`.
|
|
21
|
+
|
|
22
|
+
> If install fails with "missing optional platform package", you likely passed
|
|
23
|
+
> `--omit=optional` or `--no-optional`. Reinstall without that flag.
|
|
24
|
+
|
|
25
|
+
## Quick start
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# Local TUI in the current directory
|
|
29
|
+
rebon
|
|
30
|
+
|
|
31
|
+
# Resume a previous session
|
|
32
|
+
rebon --resume sess-0-1712937600000
|
|
33
|
+
|
|
34
|
+
# Override the active provider / model
|
|
35
|
+
rebon --provider openrouter --model gpt-5.5
|
|
36
|
+
|
|
37
|
+
# Run as an ACP JSON-RPC server on stdio (for editor / IDE integrations)
|
|
38
|
+
rebon --acp
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
The first run drops you into onboarding: pick a provider, sign in (OAuth +
|
|
42
|
+
PKCE for Claude / OpenAI, or paste an API key), and you're in.
|
|
43
|
+
|
|
44
|
+
## CLI flags
|
|
45
|
+
|
|
46
|
+
| Flag | Purpose |
|
|
47
|
+
| ------------------- | ------------------------------------------------------------ |
|
|
48
|
+
| `--acp` | Run as an ACP JSON-RPC server on stdio. |
|
|
49
|
+
| `--provider <name>` | Override `activeCustomProvider` from `~/.rebon/config.json`. |
|
|
50
|
+
| `--model <id>` | Override the resolved provider's default model. |
|
|
51
|
+
| `--resume <id>` | Load an on-disk transcript and replay it into the TUI. |
|
|
52
|
+
|
|
53
|
+
## Config & data
|
|
54
|
+
|
|
55
|
+
- `~/.rebon/config.json` — providers, models, credentials, defaults.
|
|
56
|
+
- `~/.rebon/sessions/` — saved transcripts.
|
|
57
|
+
- `~/.rebon/skills/`, `~/.rebon/agents/`, `~/.rebon/memory/` — user assets.
|
|
58
|
+
- `$REBON_LOG_DIR/rebon.log` — TUI log file (defaults to
|
|
59
|
+
`%TEMP%/rebon/logs/rebon.log` on Windows, `$TMPDIR/rebon/logs/rebon.log`
|
|
60
|
+
elsewhere). `--acp` mode logs to stderr instead.
|
|
61
|
+
|
|
62
|
+
Project-level overrides live under `.rebon/` and `.claude/` in your working
|
|
63
|
+
directory.
|
|
64
|
+
|
|
65
|
+
## What you get
|
|
66
|
+
|
|
67
|
+
- **Local TUI** — prompt input with history, paste, image paste, `@`-mention
|
|
68
|
+
and slash-command pickers, queued submissions, mode cycling; streaming
|
|
69
|
+
transcript with markdown, tool grouping, thinking blocks, plan approval,
|
|
70
|
+
permission modal; full dialog stack for onboarding, settings, resume,
|
|
71
|
+
rewind, quick-open, history search, global search, tasks, background
|
|
72
|
+
tasks, teams, agents.
|
|
73
|
+
- **Agentic tool loop** — Bash / PowerShell, Read / Write / Edit, Glob /
|
|
74
|
+
Grep, Sleep, TaskCreate / TaskUpdate / TaskList / TaskGet / TaskStop,
|
|
75
|
+
Agent, SkillTool, AskUserQuestion, SendMessage, EnterPlanMode /
|
|
76
|
+
ExitPlanMode, ToolSearch, Team{Create,Delete,Files,Mailbox,Manager},
|
|
77
|
+
Worktree, plus MCP tools (stdio, Streamable HTTP, legacy SSE).
|
|
78
|
+
- **Providers** — Anthropic, OpenAI, and OpenAI-Responses, with streaming,
|
|
79
|
+
compact / context-prune passes, and automatic session titles.
|
|
80
|
+
- **Permissions, hooks, sandbox** — fine-grained allow / deny for shell,
|
|
81
|
+
filesystem, web-fetch, and skill invocations; user-defined hooks; sandbox
|
|
82
|
+
config with violation reporting.
|
|
83
|
+
- **Skills, agents, memory** — bundled and user skills; spawnable
|
|
84
|
+
worker agents and a coordinator for background tasks; a persistent memory
|
|
85
|
+
layer with recall and surfacing.
|
|
86
|
+
- **ACP server** — drive Rebon from an editor over stdio JSON-RPC:
|
|
87
|
+
`initialize`, `session/new`, `session/load`, `session/list`,
|
|
88
|
+
`session/prompt`, `session/cancel`, reverse-RPC permission prompts,
|
|
89
|
+
streamed tool output.
|
|
90
|
+
|
|
91
|
+
## Common tasks
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
# Start a fresh session in the current repo
|
|
95
|
+
rebon
|
|
96
|
+
|
|
97
|
+
# Resume the last session you worked on (use Tab in the TUI to browse)
|
|
98
|
+
rebon --resume <session-id>
|
|
99
|
+
|
|
100
|
+
# Plug Rebon into an editor over ACP (the editor manages stdio for you)
|
|
101
|
+
rebon --acp
|
|
102
|
+
|
|
103
|
+
# Override provider/model without editing config
|
|
104
|
+
rebon --provider anthropic --model claude-opus-4-7
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Inside the TUI:
|
|
108
|
+
|
|
109
|
+
- `?` — keyboard help
|
|
110
|
+
- `/` — slash-command picker
|
|
111
|
+
- `@` — file / symbol mention
|
|
112
|
+
- `Tab` — switch panel / list
|
|
113
|
+
- `Esc` — cancel current step or dismiss a dialog
|
|
114
|
+
|
|
115
|
+
## Updating
|
|
116
|
+
|
|
117
|
+
`rebon` ships with a built-in updater that checks for new releases on launch.
|
|
118
|
+
You can also just rerun:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
npm install -g @rebon/cli@latest
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Troubleshooting
|
|
125
|
+
|
|
126
|
+
- **"missing optional platform package"** — reinstall without
|
|
127
|
+
`--omit=optional` / `--no-optional` / `--ignore-optional`.
|
|
128
|
+
- **"unsupported platform"** — your `process.platform`/`process.arch` is not
|
|
129
|
+
one of the five supported targets.
|
|
130
|
+
- **TUI looks scrambled** — make sure your terminal supports truecolor and
|
|
131
|
+
Unicode width tables (modern Windows Terminal, iTerm2, Alacritty, WezTerm,
|
|
132
|
+
Kitty all work). The legacy `cmd.exe` and `conhost` are not supported.
|
|
133
|
+
- **Logs** — check `$REBON_LOG_DIR/rebon.log` (TUI) or stderr (`--acp`).
|
package/bin/rebon
ADDED
|
Binary file
|
package/package.json
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@rebon/cli-darwin-x64",
|
|
3
|
+
"version": "0.1.3",
|
|
4
|
+
"description": "Agent cli for coding and more.",
|
|
5
|
+
"license": "MIT OR Apache-2.0",
|
|
6
|
+
"bin": {
|
|
7
|
+
"rebon": "bin/rebon"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"bin",
|
|
11
|
+
"README.md",
|
|
12
|
+
"scripts"
|
|
13
|
+
],
|
|
14
|
+
"os": [
|
|
15
|
+
"darwin"
|
|
16
|
+
],
|
|
17
|
+
"cpu": [
|
|
18
|
+
"x64"
|
|
19
|
+
],
|
|
20
|
+
"scripts": {
|
|
21
|
+
"postinstall": "node scripts/postinstall.js"
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const childProcess = require("child_process");
|
|
4
|
+
const fs = require("fs");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
|
|
7
|
+
const INSTALL_SUPERVISOR_ENV = "REBON_INSTALL_SUPERVISOR";
|
|
8
|
+
|
|
9
|
+
function log(message) {
|
|
10
|
+
console.log(`[rebon postinstall] ${message}`);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function envFlagEnabled(value) {
|
|
14
|
+
return /^(1|true|yes|on)$/i.test(String(value || "").trim());
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function supervisorHintMessage() {
|
|
18
|
+
return "background supervisor scheduler was not registered; run `rebon agents service install` to keep queued jobs moving after login, or set REBON_INSTALL_SUPERVISOR=1 before install to opt in.";
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function packageRootFromScript() {
|
|
22
|
+
return path.resolve(__dirname, "..");
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function installWindowsPayload(packageRoot) {
|
|
26
|
+
const {
|
|
27
|
+
installManagedPackage,
|
|
28
|
+
readPackageInfo,
|
|
29
|
+
requireManagedBinDir,
|
|
30
|
+
} = require("../lib/windows-managed");
|
|
31
|
+
|
|
32
|
+
requireManagedBinDir();
|
|
33
|
+
const packageInfo = readPackageInfo(packageRoot);
|
|
34
|
+
if (!fs.existsSync(packageInfo.payloadPath)) {
|
|
35
|
+
throw new Error(`payload executable is missing: ${packageInfo.payloadPath}`);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const managedExe = installManagedPackage(packageInfo);
|
|
39
|
+
if (!managedExe) {
|
|
40
|
+
throw new Error("could not install payload executable into managed bin directory");
|
|
41
|
+
}
|
|
42
|
+
return managedExe;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function packageExecutable(packageRoot, platform) {
|
|
46
|
+
if (platform === "win32") {
|
|
47
|
+
return installWindowsPayload(packageRoot);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const exePath = path.join(packageRoot, "bin", "rebon");
|
|
51
|
+
if (!fs.existsSync(exePath)) {
|
|
52
|
+
throw new Error(`payload executable is missing: ${exePath}`);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
try {
|
|
56
|
+
fs.chmodSync(exePath, 0o755);
|
|
57
|
+
} catch (_) {
|
|
58
|
+
}
|
|
59
|
+
return exePath;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function installSupervisorScheduler(exePath, spawnSyncImpl) {
|
|
63
|
+
const result = spawnSyncImpl(exePath, ["agents", "service", "install"], {
|
|
64
|
+
stdio: "inherit",
|
|
65
|
+
windowsHide: true,
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
if (result.error) {
|
|
69
|
+
throw result.error;
|
|
70
|
+
}
|
|
71
|
+
if (result.status !== 0) {
|
|
72
|
+
throw new Error(`supervisor scheduler install exited with status ${result.status}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function runPostinstall(options = {}) {
|
|
77
|
+
const platform = options.platform || process.platform;
|
|
78
|
+
const env = options.env || process.env;
|
|
79
|
+
const logger = options.log || log;
|
|
80
|
+
const spawnSyncImpl = options.spawnSync || childProcess.spawnSync;
|
|
81
|
+
const packageRoot = options.packageRoot || packageRootFromScript();
|
|
82
|
+
const exePath = packageExecutable(packageRoot, platform);
|
|
83
|
+
|
|
84
|
+
logger(`installed ${exePath}`);
|
|
85
|
+
|
|
86
|
+
if (envFlagEnabled(env[INSTALL_SUPERVISOR_ENV])) {
|
|
87
|
+
logger(`registering per-user background supervisor scheduler because ${INSTALL_SUPERVISOR_ENV} is enabled`);
|
|
88
|
+
installSupervisorScheduler(exePath, spawnSyncImpl);
|
|
89
|
+
logger("registered background supervisor scheduler");
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
logger(supervisorHintMessage());
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
try {
|
|
97
|
+
if (require.main === module) {
|
|
98
|
+
runPostinstall();
|
|
99
|
+
}
|
|
100
|
+
} catch (error) {
|
|
101
|
+
console.error(`[rebon postinstall] ${error.message}`);
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
module.exports = {
|
|
106
|
+
INSTALL_SUPERVISOR_ENV,
|
|
107
|
+
envFlagEnabled,
|
|
108
|
+
installSupervisorScheduler,
|
|
109
|
+
packageExecutable,
|
|
110
|
+
runPostinstall,
|
|
111
|
+
supervisorHintMessage,
|
|
112
|
+
};
|