agent-merge-broker 0.4.1 → 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 +79 -20
- package/dist/broker.d.ts +59 -1
- package/dist/broker.d.ts.map +1 -1
- package/dist/broker.js +382 -18
- package/dist/broker.js.map +1 -1
- package/dist/cli.js +145 -13
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +33 -2
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/provenance.d.ts +12 -0
- package/dist/provenance.d.ts.map +1 -1
- package/dist/provenance.js +104 -0
- package/dist/provenance.js.map +1 -1
- package/dist/publisher.d.ts +11 -4
- package/dist/publisher.d.ts.map +1 -1
- package/dist/publisher.js +56 -5
- package/dist/publisher.js.map +1 -1
- package/dist/serve-log.d.ts +67 -0
- package/dist/serve-log.d.ts.map +1 -0
- package/dist/serve-log.js +62 -0
- package/dist/serve-log.js.map +1 -0
- package/dist/service.d.ts +64 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +200 -0
- package/dist/service.js.map +1 -0
- package/dist/store.d.ts +16 -0
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +73 -0
- package/dist/store.js.map +1 -1
- package/dist/types.d.ts +38 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +1 -1
- package/dist/validation.js.map +1 -1
- package/dist/verify.d.ts +8 -0
- package/dist/verify.d.ts.map +1 -1
- package/dist/verify.js +131 -42
- package/dist/verify.js.map +1 -1
- package/docs/ARCHITECTURE.md +26 -11
- package/docs/PROTOCOL.md +14 -4
- package/docs/RELEASING.md +17 -8
- package/docs/SECURITY.md +31 -6
- package/package.json +2 -2
- package/schemas/config.schema.json +18 -2
- package/schemas/provenance.schema.json +11 -1
package/README.md
CHANGED
|
@@ -43,7 +43,9 @@ It is deliberately **not** an agent framework and **not** a replacement for prot
|
|
|
43
43
|
|
|
44
44
|
## Status
|
|
45
45
|
|
|
46
|
-
`0.3.0`
|
|
46
|
+
`0.3.0` was the first public release: the local broker core, the GitHub CLI publishing adapter with auto-merge, and the remote provenance verifier.
|
|
47
|
+
|
|
48
|
+
`0.6.0` is current. Batch manifests are authenticated with a repository Ed25519 identity, post-assembly branch mutation is rejected, interrupted integration state recovers without rebuilding tasks, and the integration loop can run as a supervised per-user service.
|
|
47
49
|
|
|
48
50
|
The on-disk state, receipt, and provenance formats are versioned, but compatibility is not guaranteed until `1.0.0`. Expect format migrations before then.
|
|
49
51
|
|
|
@@ -78,7 +80,10 @@ npm link
|
|
|
78
80
|
- `.merge-broker/config.json` — repository policy and commands
|
|
79
81
|
- `.merge-broker/agent-instructions.md` — a reusable worker contract
|
|
80
82
|
|
|
81
|
-
|
|
83
|
+
It also creates an Ed25519 provenance private key, mode `0600`, under Git's common runtime directory.
|
|
84
|
+
Only its public key is written to the committed configuration. Runtime state, receipt records,
|
|
85
|
+
manifests, keys, locks, and integration worktrees therefore stay outside commits while every linked
|
|
86
|
+
worktree sees the same broker authority.
|
|
82
87
|
|
|
83
88
|
## Quick start
|
|
84
89
|
|
|
@@ -86,6 +91,7 @@ Initialize an existing Git repository and edit its generated configuration:
|
|
|
86
91
|
|
|
87
92
|
```bash
|
|
88
93
|
merge-broker init --base main --base-ref origin/main --remote origin
|
|
94
|
+
git add .merge-broker && git commit -m 'Configure authenticated merge brokerage'
|
|
89
95
|
merge-broker doctor
|
|
90
96
|
```
|
|
91
97
|
|
|
@@ -176,29 +182,49 @@ This sets `core.hooksPath`, so it refuses to run when the repository already has
|
|
|
176
182
|
stop working, and `--uninstall` puts everything back. `MERGE_BROKER_ALLOW_DIRECT_PUSH=1` is the
|
|
177
183
|
deliberate emergency bypass.
|
|
178
184
|
|
|
179
|
-
|
|
180
|
-
|
|
185
|
+
### Publishing without a terminal
|
|
186
|
+
|
|
187
|
+
`serve` polls for verified batches and publishes them, but only while somebody keeps it running in a
|
|
188
|
+
terminal. When nobody does, a submitted task sits in `submitted` indefinitely — and to the agent
|
|
189
|
+
that submitted it, waiting forever is indistinguishable from being rejected. Install the loop as a
|
|
190
|
+
per-user service instead:
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
merge-broker install-service
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
This writes a launchd agent on macOS or a systemd user unit on Linux, one per repository, and starts
|
|
197
|
+
it. It is deliberately a *user* service on both platforms: a system daemon would need root and would
|
|
198
|
+
run as the wrong user for the repository's SSH and forge credentials. `--uninstall` removes it, and
|
|
199
|
+
the service writes to `$(git rev-parse --git-common-dir)/merge-broker/serve.log`, including when it
|
|
200
|
+
was installed from a linked worktree whose `.git` is a file.
|
|
201
|
+
|
|
202
|
+
A remote gate authenticates a pull request as an immutable broker batch. It reads the trusted public
|
|
203
|
+
key from the protected base branch, so it can reject unsigned, forged, or post-assembly work before
|
|
204
|
+
installing dependencies:
|
|
181
205
|
|
|
182
206
|
```yaml
|
|
183
207
|
- uses: actions/checkout@v4
|
|
184
208
|
with:
|
|
185
209
|
ref: ${{ github.event.pull_request.head.sha }}
|
|
186
210
|
fetch-depth: 0
|
|
187
|
-
- uses: WeSpitfire/agent-merge-broker/verify@
|
|
211
|
+
- uses: WeSpitfire/agent-merge-broker/verify@v0.6.0
|
|
188
212
|
```
|
|
189
213
|
|
|
190
|
-
The check
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
214
|
+
The check verifies the Ed25519 signature, branch and batch identity, real base history, one-file
|
|
215
|
+
manifest commit, integrated diff, submitted commit trail, and recorded validation results. The
|
|
216
|
+
provenance commit must remain the branch head. Even a normal base-update merge can carry arbitrary
|
|
217
|
+
conflict resolution, so any post-assembly merge is rejected; re-cut a stale batch with `batch
|
|
218
|
+
refresh` instead.
|
|
195
219
|
|
|
196
220
|
Verification policy is read from the configuration committed on the *base* branch, never from the
|
|
197
|
-
change under review.
|
|
221
|
+
change under review. Repositories initialized before `0.6.0` must run `merge-broker provenance
|
|
222
|
+
setup-signing`, commit the resulting public-key policy, and keep the private key outside the working
|
|
223
|
+
tree. Until then verification reports structural-only rather than authenticated provenance.
|
|
198
224
|
|
|
199
225
|
## Automatic merging
|
|
200
226
|
|
|
201
|
-
With `publish.mode` set to `pull-request` and `publish.autoMerge` enabled, the broker enables GitHub auto-merge on each published batch. GitHub lands the pull request once required status checks pass
|
|
227
|
+
With `publish.mode` set to `pull-request` and `publish.autoMerge` enabled, the broker enables GitHub auto-merge on each published batch. GitHub lands the pull request once required status checks pass. The broker never pushes to the base branch itself, so branch protection remains the authority on what may merge. If the base moves first, re-cut the batch; do not use GitHub's update-branch merge because immutable provenance deliberately rejects it.
|
|
202
228
|
|
|
203
229
|
Two configuration combinations cannot work and are rejected at load time rather than stalling silently:
|
|
204
230
|
|
|
@@ -227,7 +253,34 @@ final and ends the lease — is not the way back.
|
|
|
227
253
|
`integrate --dry-run` is a rehearsal in both directions: it retains no branch when it succeeds, and
|
|
228
254
|
returns every task to the queue when it fails, so verifying costs nothing.
|
|
229
255
|
|
|
230
|
-
|
|
256
|
+
Only one batch is in flight at a time. A batch is cut from the base branch tip so it is born
|
|
257
|
+
mergeable, and cutting a second while the first is still open makes that expire — whichever merges
|
|
258
|
+
first leaves the other behind a base that requires branches to be up to date. `integrate` refuses
|
|
259
|
+
with `BATCH_OUTSTANDING` and names the batch to land first; `--force` overrides it.
|
|
260
|
+
|
|
261
|
+
When a batch does end up behind — something landed on the base by another route, or `--force` was
|
|
262
|
+
used — re-cut it:
|
|
263
|
+
|
|
264
|
+
```bash
|
|
265
|
+
merge-broker batch refresh <batch-id>
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
That closes the superseded pull request, returns the tasks to the queue without spending their retry
|
|
269
|
+
budget, and integrates them again from the current tip, re-validating against the base that is
|
|
270
|
+
actually being merged into. A batch already cut from the current tip is left alone.
|
|
271
|
+
|
|
272
|
+
Publication is safe to retry. The pull request is recorded before auto-merge is attempted, so a
|
|
273
|
+
forge that fails halfway leaves a published batch carrying a `publishWarning` rather than a batch
|
|
274
|
+
whose pull request exists but whose state does not admit it. Running `batch publish` again finds the
|
|
275
|
+
existing pull request and retries what is left.
|
|
276
|
+
|
|
277
|
+
A process that dies mid-integration can leave both a lock and durable `running` state. A holder on
|
|
278
|
+
this machine is reclaimed automatically once its process is gone; a holder on another machine cannot
|
|
279
|
+
be probed and waits out the stale window. Once the integration lock is safely acquired, `serve` and
|
|
280
|
+
`integrate` automatically mark the abandoned batch failed, clean its broker-owned worktree and
|
|
281
|
+
branch, and return its tasks to `submitted` without spending their attempt budget. `merge-broker
|
|
282
|
+
recover` performs that reconciliation explicitly. `unlock --force` remains only for an owner that
|
|
283
|
+
cannot be proven gone and must follow confirming no integration is active.
|
|
231
284
|
|
|
232
285
|
## Housekeeping
|
|
233
286
|
|
|
@@ -275,7 +328,9 @@ The generated `.merge-broker/config.json` is intentionally explicit and reviewab
|
|
|
275
328
|
"maxAttempts": 3,
|
|
276
329
|
"provenance": {
|
|
277
330
|
"enabled": true,
|
|
278
|
-
"directory": ".merge-broker/attestations"
|
|
331
|
+
"directory": ".merge-broker/attestations",
|
|
332
|
+
"requireSignature": true,
|
|
333
|
+
"publicKey": "-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----\n"
|
|
279
334
|
}
|
|
280
335
|
},
|
|
281
336
|
"validation": {
|
|
@@ -307,8 +362,9 @@ The generated `.merge-broker/config.json` is intentionally explicit and reviewab
|
|
|
307
362
|
Validator commands run inside the isolated integration worktree, under `/bin/sh` unless
|
|
308
363
|
`validation.shell` names another interpreter. The shell is deliberately fixed and is never a login
|
|
309
364
|
shell: an integration decision must not depend on whose machine assembled the batch. The environment
|
|
310
|
-
is inherited from the process that invoked the broker, minus `MERGE_BROKER_TOKEN`,
|
|
311
|
-
|
|
365
|
+
is inherited from the process that invoked the broker, minus `MERGE_BROKER_TOKEN`,
|
|
366
|
+
`MERGE_BROKER_SIGNING_KEY`, and `MERGE_BROKER_SIGNING_KEY_FILE`, so PATH and toolchain managers work
|
|
367
|
+
while broker credentials stay out of repository-defined commands.
|
|
312
368
|
|
|
313
369
|
Validators receive these environment variables:
|
|
314
370
|
|
|
@@ -330,8 +386,8 @@ The JSON schemas in [`schemas/`](schemas/) can be used by editors, adapters, and
|
|
|
330
386
|
### One authoritative CI pass
|
|
331
387
|
|
|
332
388
|
Repositories that make GitHub the authoritative validator can leave broker
|
|
333
|
-
authoritative validators empty,
|
|
334
|
-
without
|
|
389
|
+
authoritative validators empty, require signed provenance, and reject any PR
|
|
390
|
+
without an authenticated broker manifest before installing dependencies. The full lint,
|
|
335
391
|
type, test, and build suite then runs exactly once on the assembled broker PR.
|
|
336
392
|
Task worktrees retain only fast changed-scope feedback, while deployment builds
|
|
337
393
|
the already-checked revision without repeating the whole suite.
|
|
@@ -341,19 +397,22 @@ the already-checked revision without repeating the whole suite.
|
|
|
341
397
|
```text
|
|
342
398
|
merge-broker init
|
|
343
399
|
merge-broker doctor
|
|
400
|
+
merge-broker provenance setup-signing [--private-key <path>] [--rotate]
|
|
344
401
|
merge-broker install-hooks [--force] [--uninstall]
|
|
402
|
+
merge-broker install-service [--uninstall] [--interval <seconds>] [--no-eager]
|
|
345
403
|
merge-broker verify-provenance --branch <ref> --head <sha> --base <sha>
|
|
346
404
|
merge-broker validate [--task <id>] [--scope focused|authoritative|all] [--base <ref>] [--cwd <path>]
|
|
347
405
|
merge-broker task register|claim|extend|heartbeat|submit|retry|release|cancel|show
|
|
348
406
|
merge-broker status
|
|
349
407
|
merge-broker plan
|
|
350
|
-
merge-broker integrate [--dry-run] [--publish]
|
|
351
|
-
merge-broker batch list|show|publish|sync|complete
|
|
408
|
+
merge-broker integrate [--dry-run] [--publish] [--force]
|
|
409
|
+
merge-broker batch list|show|publish|refresh|sync|complete
|
|
352
410
|
merge-broker audit
|
|
353
411
|
merge-broker metrics
|
|
354
412
|
merge-broker events
|
|
355
413
|
merge-broker prune [--older-than <days>] [--dry-run]
|
|
356
414
|
merge-broker unlock [state|integration] [--force]
|
|
415
|
+
merge-broker recover
|
|
357
416
|
merge-broker serve [--publish] [--eager]
|
|
358
417
|
```
|
|
359
418
|
|
package/dist/broker.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { GitRepository } from "./git.js";
|
|
2
2
|
import { StateStore, type LockStatus } from "./store.js";
|
|
3
3
|
import { type HookInstallation } from "./hooks.js";
|
|
4
|
-
import
|
|
4
|
+
import { type ServiceInstallation } from "./service.js";
|
|
5
|
+
import type { BatchRecord, BrokerConfig, BrokerState, IntegrationOptions, IntegrationResult, LocalValidationResult, RefreshResult, RecoveryResult, PruneOptions, PruneResult, SchedulePlan, TaskRecord } from "./types.js";
|
|
5
6
|
export interface RegisterTaskInput {
|
|
6
7
|
id: string;
|
|
7
8
|
title?: string;
|
|
@@ -35,6 +36,19 @@ export declare class MergeBroker {
|
|
|
35
36
|
configPath: string;
|
|
36
37
|
created: boolean;
|
|
37
38
|
}>;
|
|
39
|
+
/**
|
|
40
|
+
* Enables authenticated provenance for an existing repository or rotates/imports its identity.
|
|
41
|
+
* The private key stays in Git's runtime state; configuration receives only the public key.
|
|
42
|
+
*/
|
|
43
|
+
setupProvenanceSigning(options?: {
|
|
44
|
+
privateKeyFile?: string;
|
|
45
|
+
rotate?: boolean;
|
|
46
|
+
}): Promise<{
|
|
47
|
+
publicKey: string;
|
|
48
|
+
keyId: string;
|
|
49
|
+
keyPath: string;
|
|
50
|
+
}>;
|
|
51
|
+
private provenanceSigningPrivateKey;
|
|
38
52
|
registerTask(input: RegisterTaskInput): Promise<TaskRecord>;
|
|
39
53
|
claimTask(input: ClaimTaskInput): Promise<{
|
|
40
54
|
task: TaskRecord;
|
|
@@ -81,6 +95,12 @@ export declare class MergeBroker {
|
|
|
81
95
|
cwd?: string;
|
|
82
96
|
}): Promise<LocalValidationResult>;
|
|
83
97
|
integrate(options?: IntegrationOptions): Promise<IntegrationResult>;
|
|
98
|
+
private recoverAbandonedIntegrationsLocked;
|
|
99
|
+
/**
|
|
100
|
+
* Recovers durable `running` state left by a killed integration process. Acquiring the integration
|
|
101
|
+
* lock is the proof that the former process is no longer allowed to make progress.
|
|
102
|
+
*/
|
|
103
|
+
recoverAbandonedIntegrations(): Promise<RecoveryResult>;
|
|
84
104
|
publishBatch(id: string): Promise<BatchRecord>;
|
|
85
105
|
syncBatch(id: string): Promise<BatchRecord>;
|
|
86
106
|
syncPublishedBatches(): Promise<{
|
|
@@ -97,6 +117,24 @@ export declare class MergeBroker {
|
|
|
97
117
|
* is re-planned against a fresh base instead of being silently lost.
|
|
98
118
|
*/
|
|
99
119
|
closeBatch(id: string, reason: string): Promise<BatchRecord>;
|
|
120
|
+
/**
|
|
121
|
+
* Replaces a batch that can no longer merge because the base branch moved under it.
|
|
122
|
+
*
|
|
123
|
+
* A batch is cut from the base tip so it is born mergeable. When something else lands first, a
|
|
124
|
+
* base that requires branches to be up to date will refuse it, and there was previously no way
|
|
125
|
+
* back: the operator closed the pull request by hand, reconciled state by hand, and integrated
|
|
126
|
+
* again. This re-cuts the same tasks from the current tip and re-validates them, which is the
|
|
127
|
+
* point — a stale batch was only ever checked against a base nobody is merging into any more.
|
|
128
|
+
*
|
|
129
|
+
* Re-cutting rather than merging the base into the branch keeps every batch an immutable artifact
|
|
130
|
+
* whose manifest describes exactly the base it was assembled on.
|
|
131
|
+
*
|
|
132
|
+
* Attempts are deliberately not incremented. Nothing about the work failed; the world moved.
|
|
133
|
+
* Charging it against `maxAttempts` would eventually retire a task for being unlucky.
|
|
134
|
+
*/
|
|
135
|
+
refreshBatch(id: string, options?: {
|
|
136
|
+
publish?: boolean;
|
|
137
|
+
}): Promise<RefreshResult>;
|
|
100
138
|
markBatchMerged(id: string, mergedAt?: string, mergeCommitSha?: string): Promise<BatchRecord>;
|
|
101
139
|
auditWorktrees(): Promise<{
|
|
102
140
|
worktrees: Array<{
|
|
@@ -118,6 +156,26 @@ export declare class MergeBroker {
|
|
|
118
156
|
force?: boolean;
|
|
119
157
|
uninstall?: boolean;
|
|
120
158
|
}): Promise<HookInstallation>;
|
|
159
|
+
/**
|
|
160
|
+
* Installs the integration loop as a per-user service.
|
|
161
|
+
*
|
|
162
|
+
* Without it `serve` only runs while a terminal is open, so a submitted task
|
|
163
|
+
* waits for a human to notice — indistinguishable, to the agent that
|
|
164
|
+
* submitted it, from the broker rejecting the work.
|
|
165
|
+
*/
|
|
166
|
+
installService(options?: {
|
|
167
|
+
uninstall?: boolean;
|
|
168
|
+
intervalSeconds?: number;
|
|
169
|
+
eager?: boolean;
|
|
170
|
+
nodePath?: string;
|
|
171
|
+
cliPath?: string;
|
|
172
|
+
pathEntries?: string[];
|
|
173
|
+
logFile?: string;
|
|
174
|
+
}): Promise<ServiceInstallation | {
|
|
175
|
+
name: string;
|
|
176
|
+
file: string;
|
|
177
|
+
removed: boolean;
|
|
178
|
+
}>;
|
|
121
179
|
inspectLocks(): Promise<LockStatus[]>;
|
|
122
180
|
releaseLock(name: string, options?: {
|
|
123
181
|
force?: boolean;
|
package/dist/broker.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broker.d.ts","sourceRoot":"","sources":["../src/broker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"broker.d.ts","sourceRoot":"","sources":["../src/broker.ts"],"names":[],"mappings":"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"}
|