maesttro 0.4.4 → 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/README.md +15 -9
- package/dist/maesttro.js +3292 -614
- package/docker/Dockerfile +65 -10
- package/docker/entrypoint.sh +9 -3
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -51,8 +51,8 @@ cd stagehand && bun run build && npm i -g .
|
|
|
51
51
|
## Usage
|
|
52
52
|
|
|
53
53
|
```bash
|
|
54
|
-
maesttro setup # one-time: build image,
|
|
55
|
-
maesttro login / logout / status # manage
|
|
54
|
+
maesttro setup # one-time: build image, log in to GitHub and Claude
|
|
55
|
+
maesttro login / logout / status # manage both logins, or one with `github` / `claude`
|
|
56
56
|
maesttro list # see available clients
|
|
57
57
|
maesttro doctor # health check anytime
|
|
58
58
|
|
|
@@ -63,7 +63,7 @@ maesttro bash # plain shell inside the runner, for de
|
|
|
63
63
|
maesttro sessions # list this repo's kept sessions
|
|
64
64
|
maesttro sessions remove <id> # drop one (preserves branches; --force discards unbranched commits)
|
|
65
65
|
maesttro sessions remove --all # drop all of this repo's sessions
|
|
66
|
-
maesttro resume <id>
|
|
66
|
+
maesttro resume [client] <id> # continue one, in its mode and with its last client
|
|
67
67
|
maesttro push [branch] # push a branch a session created (shows what goes out, asks first)
|
|
68
68
|
maesttro push [branch] --force # same, as a force push
|
|
69
69
|
|
|
@@ -105,7 +105,7 @@ other hosts.
|
|
|
105
105
|
Inside a session, `gh` works for **that repo only** (issues, pull requests,
|
|
106
106
|
comments). It acts as the Maesttro GitHub App's bot:
|
|
107
107
|
|
|
108
|
-
- `maesttro login` runs once. It's a GitHub device flow, and your token is kept in the OS keychain.
|
|
108
|
+
- `maesttro login github` runs once. It's a GitHub device flow, and your token is kept in the OS keychain.
|
|
109
109
|
- Each launch asks the Maesttro broker for a token that is scoped to the repo and lasts at most an hour. The CLI refreshes it quietly and revokes it when you exit.
|
|
110
110
|
- The token can read code and write issues and PRs, but can't push, merge or delete branches.
|
|
111
111
|
- Commits are authored by you (your repo's `user.name` / `user.email`) and committed by the bot.
|
|
@@ -159,7 +159,11 @@ thinking blocks shown. The two providers replace yours of the same name; the
|
|
|
159
159
|
rest (`mcp`, `plugin`, other providers) is merged. Removed secrets are listed
|
|
160
160
|
at launch by path. `{env:X}` / `$X` references are kept.
|
|
161
161
|
|
|
162
|
-
Claude Code keeps its own
|
|
162
|
+
Claude Code keeps its own defaults. Its subscription login comes from
|
|
163
|
+
`maesttro login claude`: the host keeps the only copy of the refresh token,
|
|
164
|
+
rotates it for every session, and hands each session just the access token.
|
|
165
|
+
Without it, a session shows Claude Code's own login screen, which lasts for
|
|
166
|
+
that session only. Claude Code is pointed at envoy's
|
|
163
167
|
`$MAESTTRO_URL/claude-code` (`ANTHROPIC_BASE_URL`), with Maesttro added to the
|
|
164
168
|
model picker as a custom option (`maesttro`), with its context window read
|
|
165
169
|
from envoy at launch. Anthropic models pass
|
|
@@ -178,8 +182,8 @@ config, keeping your own keys. So `maesttro update` has two steps:
|
|
|
178
182
|
which the next session picks up.
|
|
179
183
|
2. It rebuilds the runner image, for new client and tool versions.
|
|
180
184
|
|
|
181
|
-
Your session
|
|
182
|
-
untouched by an update.
|
|
185
|
+
Your session homes (under `~/.config/maesttro/sessions`) and your project files
|
|
186
|
+
are untouched by an update.
|
|
183
187
|
|
|
184
188
|
On start, `maesttro` checks for a newer published version and offers to update.
|
|
185
189
|
Declining only skips it for that run; the next start asks again.
|
|
@@ -190,7 +194,8 @@ Declining only skips it for that run; the next start asks again.
|
|
|
190
194
|
|
|
191
195
|
| Mount | Source | Purpose |
|
|
192
196
|
|---|---|---|
|
|
193
|
-
| `/home/agent` |
|
|
197
|
+
| `/home/agent` | `~/.config/maesttro/sessions/<id>/home` | The session's own home, reused by `maesttro resume` and deleted with the session. Never shared with another session. Holds no GitHub credential. |
|
|
198
|
+
| `/home/agent/.claude` | `~/.config/maesttro/sessions/<id>/claude` | Claude Code's directory, kept outside the home so the host can write the session's Claude login (no refresh token) without following anything the agent planted. |
|
|
194
199
|
| `/home/agent/.config/gh-maesttro` (read-only) | per-session temp dir on host | The session's GitHub token (`hosts.yml`). The CLI refreshes it before its 1 h expiry and revokes it on exit. Not mounted in `--strict` sessions, or when GitHub access is unavailable. |
|
|
195
200
|
| `/opt/maesttro-objects` (read-only) | your repo's `.git/objects` | Base history, borrowed by the clone through its `alternates`, which is pinned to this fixed path so it resolves the same on every host OS. The real `.git` is never mounted. |
|
|
196
201
|
| `/workspace` | the session clone (`.worktrees/<id>`) | The working directory: a `git clone --shared` detached at the default branch. |
|
|
@@ -217,6 +222,8 @@ maesttro/
|
|
|
217
222
|
│ ├── paths.ts # locates bundled Dockerfile wherever npm installs the package
|
|
218
223
|
│ ├── account.ts, device-flow.ts, credential-store.ts, github-login.ts
|
|
219
224
|
│ │ # `maesttro login` / `logout` / `status`, keychain storage
|
|
225
|
+
│ ├── claude-keeper.ts, claude-refresher.ts, session-home.ts
|
|
226
|
+
│ │ # host-managed Claude login: capture, rotate, push to sessions
|
|
220
227
|
│ └── github-session.ts, broker-client.ts, session-dir.ts, refresher.ts
|
|
221
228
|
│ # per-session GitHub token: mint, mount, refresh, revoke
|
|
222
229
|
├── broker/ # server-side token broker (not published; see libretto)
|
|
@@ -249,5 +256,4 @@ registry it was installed from.
|
|
|
249
256
|
## Open items
|
|
250
257
|
|
|
251
258
|
- Pin exact client CLI versions in the Dockerfile once stable
|
|
252
|
-
- Decide whether each client gets its own volume, or shares one (current setup: shared)
|
|
253
259
|
- Homebrew tap as an alternative install path for non-Node users — optional
|