maesttro 0.5.0 → 0.6.1

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 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, create volume, log in to GitHub
55
- maesttro login / logout / status # manage the GitHub login
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> # continue one, in the mode it started with
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.
@@ -153,13 +153,17 @@ config on top (`$MAESTTRO_URL`, default `http://100.64.0.2`). Only the result
153
153
  is mounted into the runner, read-only, and copied into place at start. Your
154
154
  raw config never enters the container, and your host's config is never written.
155
155
 
156
- Injected: a `maesttro` provider (Orchestrate) at `/v1`, a `dgx-spark` provider
157
- (lorem direct on the DGX), compaction, default model `maesttro/maesttro`, and
156
+ Injected: a `esatto` provider (Maesttro) at `/v1`, a `dgx-spark` provider
157
+ (lorem direct on the DGX), compaction, default model `esatto/maesttro`, and
158
158
  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 login and defaults. It is pointed at envoy's
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 state (in the `maesttro-home` volume) and your project files are
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` | `maesttro-home` named volume | Per-client session state. Survives across runs, lives only in Docker. Holds no GitHub credential. |
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