@aiaiai-pt/martha-cli 0.51.2 → 0.53.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/CHANGELOG.md +109 -1
- package/dist/index.js +1553 -76
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,7 +2,115 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `@aiaiai-pt/martha-cli`. Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). This project adheres to semver — `0.x` releases may include breaking changes between minor versions.
|
|
4
4
|
|
|
5
|
-
## [
|
|
5
|
+
## [0.53.0] — 2026-08-02
|
|
6
|
+
|
|
7
|
+
### Added — `martha channels`: connect an agent to a channel from either side (#1140)
|
|
8
|
+
|
|
9
|
+
- `martha channels install-harness buzz` registers Martha as a **runtime** in
|
|
10
|
+
Buzz Desktop — a tier-3 custom harness definition written into Desktop's
|
|
11
|
+
app-data dir (auto-detected per platform, release or dev build; `--print`,
|
|
12
|
+
`--app-data`, `--force`). The user then picks **Martha** in New agent and sets
|
|
13
|
+
`MARTHA_CLIENT_ID`/`MARTHA_CLIENT_SECRET` per agent in Edit Agent. Desktop
|
|
14
|
+
keeps ownership of the keypair, the NIP-OA attestation, spawning and channel
|
|
15
|
+
attachment; we contribute a definition and the adapter, nothing else. The
|
|
16
|
+
definition pins `BUZZ_ACP_MULTIPLE_EVENT_HANDLING=queue` — Desktop's `steer`
|
|
17
|
+
cancels the in-flight turn, which is right for a local LLM and wrong for a
|
|
18
|
+
remote Martha turn.
|
|
19
|
+
- `martha channels connect buzz` and `martha channels preflight buzz` — the
|
|
20
|
+
same setup starting from Martha. Preflight checks every precondition (both
|
|
21
|
+
binaries, that the `martha` on PATH actually has `acp-serve`, API + credential,
|
|
22
|
+
agent existence/hosting/takeover, its principal, relay reachability, the
|
|
23
|
+
channel identity, and membership) and names the one command that fixes each
|
|
24
|
+
gap. It **exits non-zero rather than half-starting**, and reports a check it
|
|
25
|
+
could not evaluate as WARN rather than claiming the thing is missing.
|
|
26
|
+
`--emit docker|compose|k8s` prints a deployable unit with secrets referenced
|
|
27
|
+
instead of inlined; `--dry-run` shows the launch without starting it.
|
|
28
|
+
|
|
29
|
+
### Fixed — a service-account invocation could run as a logged-in human
|
|
30
|
+
|
|
31
|
+
- With `MARTHA_CLIENT_ID`/`MARTHA_CLIENT_SECRET` set, the CLI reused whatever
|
|
32
|
+
token was stored for the profile if it was still valid — including a human
|
|
33
|
+
token left by an earlier `martha auth login`. A long-running adapter then
|
|
34
|
+
answered as the developer instead of as its agent, and chat takeover never
|
|
35
|
+
fired. A stored token is now only reused when it belongs to the same client
|
|
36
|
+
(`auth_type` + the JWT's `azp`), which is what the documented auth precedence
|
|
37
|
+
always said. Found by running `martha channels connect` on a real relay.
|
|
38
|
+
- `agents doctor` reported a correctly-bound agent as unbound on any tenant with
|
|
39
|
+
more than 25 clients: the client scan was capped at 25 and swallowed per-client
|
|
40
|
+
errors. The scan now walks the whole list (bounded, with concurrency) and says
|
|
41
|
+
"inconclusive" when it cannot read all of it — an incomplete scan can never
|
|
42
|
+
justify "no client grants this agent", which was advice to mint a second
|
|
43
|
+
principal for an agent that already had one.
|
|
44
|
+
- A failed `client_credentials` login now raises an auth-typed error (exit 2)
|
|
45
|
+
instead of a generic one, so callers can tell "this credential is wrong" apart
|
|
46
|
+
from "the server is unreachable".
|
|
47
|
+
|
|
48
|
+
### Added — `martha acp-serve`: ACP stdio bridge (#1117)
|
|
49
|
+
|
|
50
|
+
- New `acp-serve` command speaks the Agent Client Protocol (newline-delimited
|
|
51
|
+
JSON-RPC 2.0) over stdio so an ACP harness — Buzz's `buzz-acp`, Zed, or any
|
|
52
|
+
ACP client — can drive a Martha agent as its runtime. `session/new` opens a
|
|
53
|
+
Martha chat session, `session/prompt` sends the user message and re-emits
|
|
54
|
+
Martha's SSE tokens as `session/update` agent_message_chunk notifications,
|
|
55
|
+
`session/cancel` aborts the in-flight turn (`stopReason: "cancelled"`).
|
|
56
|
+
Mid-session Martha errors surface as ACP error results without killing the
|
|
57
|
+
process; unrecoverable startup errors (bad token, unreachable API) exit
|
|
58
|
+
non-zero with a clear stderr line for the harness's circuit breaker. All
|
|
59
|
+
logging is JSON lines on stderr — stdout carries only protocol frames.
|
|
60
|
+
- `--post-reply` (opt-in) posts the turn's final answer back to the triggering
|
|
61
|
+
Buzz channel via the `buzz` CLI — the same reply mechanism Buzz's own
|
|
62
|
+
agents use — parsing the channel and thread anchor from the prompt's
|
|
63
|
+
`[Context]` section. The shim itself never holds or signs with Nostr keys.
|
|
64
|
+
- `martha principals bootstrap` — the CLI now exposes the API's own principal
|
|
65
|
+
noun (`/principals/bootstrap`, #535) with three modes: `human` (what
|
|
66
|
+
`martha init` wraps), `integration` (headless service account), and `agent`
|
|
67
|
+
— a service account bound to ONE Martha-hosted agent via chat takeover, so
|
|
68
|
+
the credential acts as the agent. Agent mode is the one-shot an external
|
|
69
|
+
ACP driver needs: resolve-or-create the agent, provision the principal
|
|
70
|
+
(idempotent — same label returns the same secret), bind, and print the
|
|
71
|
+
`MARTHA_CLIENT_ID/SECRET` + harness env block. The same orchestration ships
|
|
72
|
+
as a "Provision principal" action in the admin UI agents page. (Agent mode
|
|
73
|
+
is composed client-side in v1; a follow-up promotes it server-side.)
|
|
74
|
+
- Fixed in review: `--api-url` now flows through `createContext` — mutating
|
|
75
|
+
`ctx.profile.api_url` after construction (the pattern elsewhere in the CLI)
|
|
76
|
+
never reaches the already-constructed API client.
|
|
77
|
+
|
|
78
|
+
## [0.51.5] — 2026-07-20
|
|
79
|
+
|
|
80
|
+
### Fixed — host tools ran in a doubled working directory
|
|
81
|
+
|
|
82
|
+
- The runner concatenated its scoped `--cwd` with a per-call `cwd`
|
|
83
|
+
(`` `${state.cwd}/${req.cwd}` ``), so an ABSOLUTE request path — what an agent
|
|
84
|
+
sends naturally when its prompt names the repo — became
|
|
85
|
+
`/Users/me/repo//Users/me/repo` and every `host_exec` failed with ENOENT /
|
|
86
|
+
MODULE_NOT_FOUND. Now resolved properly (absolute used as-is, relative joined)
|
|
87
|
+
and still confined inside the scoped workspace.
|
|
88
|
+
|
|
89
|
+
## [0.51.4] — 2026-07-20
|
|
90
|
+
|
|
91
|
+
### Added — `MARTHA_BROWSER_HEADFUL` for WAF-protected pages
|
|
92
|
+
|
|
93
|
+
- `host_browser` launched Chromium headless unconditionally, so any site that
|
|
94
|
+
fingerprints headless Chrome (Cloudflare & co.) served it 403 — exactly the
|
|
95
|
+
pages the tool exists to reach. Set `MARTHA_BROWSER_HEADFUL=1` on the runner
|
|
96
|
+
to launch headful with a real Chrome UA and a 1440x900 viewport. Default is
|
|
97
|
+
unchanged (headless), so CI and display-less servers are unaffected.
|
|
98
|
+
- Verified against `piscapisca.pt/carros`: 403 headless, 200 headful with live
|
|
99
|
+
listing data, same machine and same tool.
|
|
100
|
+
|
|
101
|
+
## [0.51.3] — 2026-07-20
|
|
102
|
+
|
|
103
|
+
### Fixed — `host_browser` could never find playwright
|
|
104
|
+
|
|
105
|
+
- `host_browser` resolved `playwright` with a bare specifier, i.e. relative to
|
|
106
|
+
`martha-cli/dist/` — never the runner's `--cwd`. Its own error message told
|
|
107
|
+
users to `npm i -D playwright` (naturally read as "in my project"), which was
|
|
108
|
+
exactly where the CLI would not look, so the tool reported "not installed"
|
|
109
|
+
forever on fully-provisioned machines. Now resolved from `process.cwd()`
|
|
110
|
+
first, falling back to the CLI-local install; the failure message names both
|
|
111
|
+
locations searched.
|
|
112
|
+
- Accept playwright's CJS export shape (`.default`) when loaded by file URL —
|
|
113
|
+
otherwise resolution succeeded but `chromium` was `undefined`.
|
|
6
114
|
|
|
7
115
|
## [0.51.2] — 2026-07-19
|
|
8
116
|
|