agent-merge-broker 0.3.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/LICENSE +201 -0
- package/README.md +352 -0
- package/dist/broker.d.ts +110 -0
- package/dist/broker.d.ts.map +1 -0
- package/dist/broker.js +1023 -0
- package/dist/broker.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +558 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +19 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +312 -0
- package/dist/config.js.map +1 -0
- package/dist/errors.d.ts +16 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +36 -0
- package/dist/errors.js.map +1 -0
- package/dist/git.d.ts +46 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +195 -0
- package/dist/git.js.map +1 -0
- package/dist/hooks.d.ts +22 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +110 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/patterns.d.ts +9 -0
- package/dist/patterns.d.ts.map +1 -0
- package/dist/patterns.js +66 -0
- package/dist/patterns.js.map +1 -0
- package/dist/process.d.ts +30 -0
- package/dist/process.d.ts.map +1 -0
- package/dist/process.js +91 -0
- package/dist/process.js.map +1 -0
- package/dist/provenance.d.ts +10 -0
- package/dist/provenance.d.ts.map +1 -0
- package/dist/provenance.js +36 -0
- package/dist/provenance.js.map +1 -0
- package/dist/publisher.d.ts +37 -0
- package/dist/publisher.d.ts.map +1 -0
- package/dist/publisher.js +144 -0
- package/dist/publisher.js.map +1 -0
- package/dist/scheduler.d.ts +6 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +96 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/store.d.ts +73 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +323 -0
- package/dist/store.js.map +1 -0
- package/dist/types.d.ts +219 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/validation.d.ts +13 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +75 -0
- package/dist/validation.js.map +1 -0
- package/dist/verify.d.ts +40 -0
- package/dist/verify.d.ts.map +1 -0
- package/dist/verify.js +177 -0
- package/dist/verify.js.map +1 -0
- package/docs/ARCHITECTURE.md +144 -0
- package/docs/PROTOCOL.md +127 -0
- package/docs/RELEASING.md +23 -0
- package/docs/SECURITY.md +57 -0
- package/package.json +68 -0
- package/schemas/config.schema.json +149 -0
- package/schemas/provenance.schema.json +56 -0
- package/schemas/receipt.schema.json +39 -0
- package/templates/AGENTS.snippet.md +5 -0
package/dist/git.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
|
package/dist/hooks.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { GitRepository } from "./git.js";
|
|
2
|
+
export declare const HOOKS_DIRECTORY = ".githooks";
|
|
3
|
+
export declare const BYPASS_VARIABLE = "MERGE_BROKER_ALLOW_DIRECT_PUSH";
|
|
4
|
+
export interface HookInstallation {
|
|
5
|
+
hooksPath: string;
|
|
6
|
+
hookFile: string;
|
|
7
|
+
installed: boolean;
|
|
8
|
+
previousHooksPath?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Refuses a direct push of an implementation branch. Integration branches still publish normally,
|
|
12
|
+
* deletions and tags are untouched, and an operator can bypass the guard deliberately for an
|
|
13
|
+
* emergency.
|
|
14
|
+
*/
|
|
15
|
+
export declare function prePushHook(branchPrefix: string): string;
|
|
16
|
+
export declare function installHooks(options: {
|
|
17
|
+
repo: GitRepository;
|
|
18
|
+
branchPrefix: string;
|
|
19
|
+
force?: boolean;
|
|
20
|
+
}): Promise<HookInstallation>;
|
|
21
|
+
export declare function uninstallHooks(repo: GitRepository): Promise<HookInstallation>;
|
|
22
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,eAAO,MAAM,eAAe,cAAc,CAAC;AAC3C,eAAO,MAAM,eAAe,mCAAmC,CAAC;AAGhE,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CA2BxD;AA0BD,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAC1C,IAAI,EAAE,aAAa,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmC5B;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAkBnF"}
|
package/dist/hooks.js
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { chmod, mkdir, readdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
3
|
+
import { BrokerError } from "./errors.js";
|
|
4
|
+
export const HOOKS_DIRECTORY = ".githooks";
|
|
5
|
+
export const BYPASS_VARIABLE = "MERGE_BROKER_ALLOW_DIRECT_PUSH";
|
|
6
|
+
const MARKER = "Installed by Agent Merge Broker";
|
|
7
|
+
/**
|
|
8
|
+
* Refuses a direct push of an implementation branch. Integration branches still publish normally,
|
|
9
|
+
* deletions and tags are untouched, and an operator can bypass the guard deliberately for an
|
|
10
|
+
* emergency.
|
|
11
|
+
*/
|
|
12
|
+
export function prePushHook(branchPrefix) {
|
|
13
|
+
return `#!/bin/sh
|
|
14
|
+
# ${MARKER}. Remove with: merge-broker install-hooks --uninstall
|
|
15
|
+
#
|
|
16
|
+
# Work reaches the base branch through the broker: commit locally, then run
|
|
17
|
+
# merge-broker task submit <task-id> --since-base
|
|
18
|
+
# Only ${branchPrefix}* branches may be pushed directly.
|
|
19
|
+
|
|
20
|
+
if [ "\${${BYPASS_VARIABLE}:-}" = "1" ]; then
|
|
21
|
+
exit 0
|
|
22
|
+
fi
|
|
23
|
+
|
|
24
|
+
while read -r local_ref _local_sha _remote_ref _remote_sha; do
|
|
25
|
+
case "$local_ref" in
|
|
26
|
+
refs/heads/${branchPrefix}*)
|
|
27
|
+
;;
|
|
28
|
+
refs/heads/*)
|
|
29
|
+
echo "Direct implementation pushes are disabled by Agent Merge Broker." >&2
|
|
30
|
+
echo "Submit the work instead: merge-broker task submit <task-id> --since-base" >&2
|
|
31
|
+
echo "Emergency bypass: ${BYPASS_VARIABLE}=1 git push ..." >&2
|
|
32
|
+
exit 1
|
|
33
|
+
;;
|
|
34
|
+
esac
|
|
35
|
+
done
|
|
36
|
+
|
|
37
|
+
exit 0
|
|
38
|
+
`;
|
|
39
|
+
}
|
|
40
|
+
async function configuredHooksPath(repo) {
|
|
41
|
+
const result = await repo.git(["config", "--get", "core.hooksPath"], repo.root, true);
|
|
42
|
+
const value = result.stdout.trim();
|
|
43
|
+
return result.exitCode === 0 && value !== "" ? value : undefined;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Hooks already living in Git's default directory stop running the moment core.hooksPath moves.
|
|
47
|
+
* Silently disabling somebody's existing tooling is not an acceptable side effect of installing a
|
|
48
|
+
* guard, so they have to be acknowledged.
|
|
49
|
+
*/
|
|
50
|
+
async function existingDefaultHooks(repo) {
|
|
51
|
+
const directory = path.join(repo.commonGitDir, "hooks");
|
|
52
|
+
try {
|
|
53
|
+
const entries = await readdir(directory, { withFileTypes: true });
|
|
54
|
+
return entries
|
|
55
|
+
.filter((entry) => entry.isFile() && !entry.name.endsWith(".sample"))
|
|
56
|
+
.map((entry) => entry.name)
|
|
57
|
+
.sort();
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
export async function installHooks(options) {
|
|
64
|
+
const { repo, branchPrefix, force = false } = options;
|
|
65
|
+
const current = await configuredHooksPath(repo);
|
|
66
|
+
if (current !== undefined && current !== HOOKS_DIRECTORY && !force) {
|
|
67
|
+
throw new BrokerError("HOOKS_PATH_CONFLICT", `core.hooksPath is already set to ${current}. Installing would disable those hooks. Re-run with --force to replace it, or add the pre-push guard to ${current} yourself.`, { current });
|
|
68
|
+
}
|
|
69
|
+
if (current === undefined) {
|
|
70
|
+
const inherited = await existingDefaultHooks(repo);
|
|
71
|
+
if (inherited.length > 0 && !force) {
|
|
72
|
+
throw new BrokerError("HOOKS_PATH_CONFLICT", `This repository already has Git hooks that would stop running once core.hooksPath moves: ${inherited.join(", ")}. Move them into ${HOOKS_DIRECTORY}/ and re-run with --force.`, { hooks: inherited });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
const hooksPath = path.join(repo.root, HOOKS_DIRECTORY);
|
|
76
|
+
const hookFile = path.join(hooksPath, "pre-push");
|
|
77
|
+
await mkdir(hooksPath, { recursive: true });
|
|
78
|
+
await writeFile(hookFile, prePushHook(branchPrefix), { encoding: "utf8", mode: 0o755 });
|
|
79
|
+
await chmod(hookFile, 0o755).catch(() => undefined);
|
|
80
|
+
await repo.git(["config", "core.hooksPath", HOOKS_DIRECTORY]);
|
|
81
|
+
return {
|
|
82
|
+
hooksPath,
|
|
83
|
+
hookFile,
|
|
84
|
+
installed: true,
|
|
85
|
+
...(current !== undefined && current !== HOOKS_DIRECTORY ? { previousHooksPath: current } : {}),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
export async function uninstallHooks(repo) {
|
|
89
|
+
const hooksPath = path.join(repo.root, HOOKS_DIRECTORY);
|
|
90
|
+
const hookFile = path.join(hooksPath, "pre-push");
|
|
91
|
+
let ours = false;
|
|
92
|
+
try {
|
|
93
|
+
ours = (await readFile(hookFile, "utf8")).includes(MARKER);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
ours = false;
|
|
97
|
+
}
|
|
98
|
+
// Only ever remove the broker's own hook; a hand-written one at the same path is not ours to
|
|
99
|
+
// delete.
|
|
100
|
+
if (ours)
|
|
101
|
+
await rm(hookFile, { force: true });
|
|
102
|
+
const current = await configuredHooksPath(repo);
|
|
103
|
+
if (current === HOOKS_DIRECTORY) {
|
|
104
|
+
const remaining = await readdir(hooksPath).catch(() => []);
|
|
105
|
+
if (remaining.length === 0)
|
|
106
|
+
await repo.git(["config", "--unset", "core.hooksPath"], repo.root, true);
|
|
107
|
+
}
|
|
108
|
+
return { hooksPath, hookFile, installed: false };
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { MergeBroker, type ClaimTaskInput, type RegisterTaskInput } from "./broker.js";
|
|
2
|
+
export { GitRepository, type WorktreeInfo } from "./git.js";
|
|
3
|
+
export { StateStore, type LockStatus } from "./store.js";
|
|
4
|
+
export { installHooks, prePushHook, uninstallHooks, type HookInstallation } from "./hooks.js";
|
|
5
|
+
export { defaultConfig, initializeConfig, loadConfig, validateConfig } from "./config.js";
|
|
6
|
+
export { scheduleTasks } from "./scheduler.js";
|
|
7
|
+
export { buildBatchProvenance, provenancePath } from "./provenance.js";
|
|
8
|
+
export { batchIdFromBranch, policyFromBase, verifyProvenance, type ProvenanceVerification, type VerifyProvenanceOptions, } from "./verify.js";
|
|
9
|
+
export { BrokerError, CommandError, ValidationError } from "./errors.js";
|
|
10
|
+
export type * from "./types.js";
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,GAC7B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACzE,mBAAmB,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { MergeBroker } from "./broker.js";
|
|
2
|
+
export { GitRepository } from "./git.js";
|
|
3
|
+
export { StateStore } from "./store.js";
|
|
4
|
+
export { installHooks, prePushHook, uninstallHooks } from "./hooks.js";
|
|
5
|
+
export { defaultConfig, initializeConfig, loadConfig, validateConfig } from "./config.js";
|
|
6
|
+
export { scheduleTasks } from "./scheduler.js";
|
|
7
|
+
export { buildBatchProvenance, provenancePath } from "./provenance.js";
|
|
8
|
+
export { batchIdFromBranch, policyFromBase, verifyProvenance, } from "./verify.js";
|
|
9
|
+
export { BrokerError, CommandError, ValidationError } from "./errors.js";
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA+C,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,aAAa,EAAqB,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAmB,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAyB,MAAM,YAAY,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,gBAAgB,GAGjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function normalizeGitPath(value: string): string;
|
|
2
|
+
export declare function matchesPattern(file: string, pattern: string): boolean;
|
|
3
|
+
export declare function matchesAny(file: string, patterns: string[]): boolean;
|
|
4
|
+
export declare function unexpectedPaths(actual: string[], expected: string[]): string[];
|
|
5
|
+
export declare function patternsMayOverlap(left: string, right: string): boolean;
|
|
6
|
+
export declare function patternSetsMayOverlap(left: string[], right: string[]): boolean;
|
|
7
|
+
export declare function pathsOverlap(left: string[], right: string[]): string | undefined;
|
|
8
|
+
export declare function matchedSerializedPatterns(paths: string[], patterns: string[]): string[];
|
|
9
|
+
//# sourceMappingURL=patterns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../src/patterns.ts"],"names":[],"mappings":"AAEA,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAIrE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAEpE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAG9E;AAsBD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAWvE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAE9E;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAGhF;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAEvF"}
|
package/dist/patterns.js
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import picomatch from "picomatch";
|
|
2
|
+
export function normalizeGitPath(value) {
|
|
3
|
+
return value
|
|
4
|
+
.replace(/\\(?![?*{[(\]})])/gu, "/")
|
|
5
|
+
.replace(/^\.\//u, "")
|
|
6
|
+
.replace(/^\/+|\/+$/gu, "");
|
|
7
|
+
}
|
|
8
|
+
export function matchesPattern(file, pattern) {
|
|
9
|
+
const normalizedFile = normalizeGitPath(file);
|
|
10
|
+
const normalizedPattern = normalizeGitPath(pattern);
|
|
11
|
+
return picomatch.isMatch(normalizedFile, normalizedPattern, { dot: true });
|
|
12
|
+
}
|
|
13
|
+
export function matchesAny(file, patterns) {
|
|
14
|
+
return patterns.some((pattern) => matchesPattern(file, pattern));
|
|
15
|
+
}
|
|
16
|
+
export function unexpectedPaths(actual, expected) {
|
|
17
|
+
if (expected.length === 0)
|
|
18
|
+
return [...actual];
|
|
19
|
+
return actual.filter((file) => !matchesAny(file, expected));
|
|
20
|
+
}
|
|
21
|
+
function firstUnescapedMagicIndex(pattern) {
|
|
22
|
+
for (let index = 0; index < pattern.length; index += 1) {
|
|
23
|
+
const character = pattern[index];
|
|
24
|
+
if (!character)
|
|
25
|
+
continue;
|
|
26
|
+
if (character === "\\") {
|
|
27
|
+
index += 1;
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
if (/[?*{[(]/u.test(character))
|
|
31
|
+
return index;
|
|
32
|
+
}
|
|
33
|
+
return -1;
|
|
34
|
+
}
|
|
35
|
+
function literalPrefix(pattern) {
|
|
36
|
+
const normalized = normalizeGitPath(pattern);
|
|
37
|
+
const magic = firstUnescapedMagicIndex(normalized);
|
|
38
|
+
const prefix = magic === -1 ? normalized : normalized.slice(0, magic);
|
|
39
|
+
return prefix.slice(0, prefix.lastIndexOf("/") + 1);
|
|
40
|
+
}
|
|
41
|
+
export function patternsMayOverlap(left, right) {
|
|
42
|
+
const a = normalizeGitPath(left);
|
|
43
|
+
const b = normalizeGitPath(right);
|
|
44
|
+
if (a === b || matchesPattern(a, b) || matchesPattern(b, a))
|
|
45
|
+
return true;
|
|
46
|
+
const aHasMagic = firstUnescapedMagicIndex(a) !== -1;
|
|
47
|
+
const bHasMagic = firstUnescapedMagicIndex(b) !== -1;
|
|
48
|
+
if (!aHasMagic || !bHasMagic)
|
|
49
|
+
return false;
|
|
50
|
+
const aPrefix = literalPrefix(a);
|
|
51
|
+
const bPrefix = literalPrefix(b);
|
|
52
|
+
if (!aPrefix || !bPrefix)
|
|
53
|
+
return true;
|
|
54
|
+
return aPrefix.startsWith(bPrefix) || bPrefix.startsWith(aPrefix);
|
|
55
|
+
}
|
|
56
|
+
export function patternSetsMayOverlap(left, right) {
|
|
57
|
+
return left.some((a) => right.some((b) => patternsMayOverlap(a, b)));
|
|
58
|
+
}
|
|
59
|
+
export function pathsOverlap(left, right) {
|
|
60
|
+
const rightSet = new Set(right.map(normalizeGitPath));
|
|
61
|
+
return left.map(normalizeGitPath).find((file) => rightSet.has(file));
|
|
62
|
+
}
|
|
63
|
+
export function matchedSerializedPatterns(paths, patterns) {
|
|
64
|
+
return patterns.filter((pattern) => paths.some((file) => matchesPattern(file, pattern)));
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=patterns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../src/patterns.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface CommandResult {
|
|
2
|
+
command: string;
|
|
3
|
+
exitCode: number;
|
|
4
|
+
stdout: string;
|
|
5
|
+
stderr: string;
|
|
6
|
+
}
|
|
7
|
+
export interface RunOptions {
|
|
8
|
+
cwd: string;
|
|
9
|
+
env?: NodeJS.ProcessEnv;
|
|
10
|
+
input?: string;
|
|
11
|
+
allowFailure?: boolean;
|
|
12
|
+
timeoutMs?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface ResolvedShell {
|
|
15
|
+
executable: string;
|
|
16
|
+
args: string[];
|
|
17
|
+
quote: (value: string) => string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Validators must run in a predictable interpreter. Deliberately not the operator's `$SHELL`, and
|
|
21
|
+
* deliberately not a login shell: sourcing personal dotfiles would make an integration decision
|
|
22
|
+
* depend on whose machine assembled the batch. The environment still comes from the calling
|
|
23
|
+
* process, so PATH and toolchain managers work; a validator that needs more can set `env`.
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolveShell(configured?: string): ResolvedShell;
|
|
26
|
+
export declare function runCommand(executable: string, args: string[], options: RunOptions): Promise<CommandResult>;
|
|
27
|
+
export declare function runShell(command: string, options: RunOptions & {
|
|
28
|
+
shell?: ResolvedShell;
|
|
29
|
+
}): Promise<CommandResult>;
|
|
30
|
+
//# sourceMappingURL=process.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../src/process.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CAClC;AAeD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa,CAU/D;AAMD,wBAAsB,UAAU,CAC9B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,aAAa,CAAC,CAkDxB;AAED,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,UAAU,GAAG;IAAE,KAAK,CAAC,EAAE,aAAa,CAAA;CAAE,GAC9C,OAAO,CAAC,aAAa,CAAC,CAGxB"}
|
package/dist/process.js
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { CommandError } from "./errors.js";
|
|
3
|
+
function quotePosix(value) {
|
|
4
|
+
return `'${value.replaceAll("'", `'"'"'`)}'`;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* cmd.exe has no escape for a literal `%`, so a path containing one can still be expanded as an
|
|
8
|
+
* environment reference. Git paths that contain `%` or `"` are pathological; POSIX shells are the
|
|
9
|
+
* supported and tested surface.
|
|
10
|
+
*/
|
|
11
|
+
function quoteCmd(value) {
|
|
12
|
+
return `"${value.replaceAll('"', '""')}"`;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Validators must run in a predictable interpreter. Deliberately not the operator's `$SHELL`, and
|
|
16
|
+
* deliberately not a login shell: sourcing personal dotfiles would make an integration decision
|
|
17
|
+
* depend on whose machine assembled the batch. The environment still comes from the calling
|
|
18
|
+
* process, so PATH and toolchain managers work; a validator that needs more can set `env`.
|
|
19
|
+
*/
|
|
20
|
+
export function resolveShell(configured) {
|
|
21
|
+
if (configured) {
|
|
22
|
+
const isCmd = /(^|[\\/])cmd(\.exe)?$/iu.test(configured);
|
|
23
|
+
return isCmd
|
|
24
|
+
? { executable: configured, args: ["/d", "/s", "/c"], quote: quoteCmd }
|
|
25
|
+
: { executable: configured, args: ["-c"], quote: quotePosix };
|
|
26
|
+
}
|
|
27
|
+
return process.platform === "win32"
|
|
28
|
+
? { executable: process.env.ComSpec ?? "cmd.exe", args: ["/d", "/s", "/c"], quote: quoteCmd }
|
|
29
|
+
: { executable: "/bin/sh", args: ["-c"], quote: quotePosix };
|
|
30
|
+
}
|
|
31
|
+
function quoteForDisplay(value) {
|
|
32
|
+
return /[\s"'\\]/u.test(value) ? JSON.stringify(value) : value;
|
|
33
|
+
}
|
|
34
|
+
export async function runCommand(executable, args, options) {
|
|
35
|
+
const rendered = [executable, ...args].map(quoteForDisplay).join(" ");
|
|
36
|
+
return await new Promise((resolve, reject) => {
|
|
37
|
+
const child = spawn(executable, args, {
|
|
38
|
+
cwd: options.cwd,
|
|
39
|
+
env: options.env ?? process.env,
|
|
40
|
+
shell: false,
|
|
41
|
+
stdio: "pipe",
|
|
42
|
+
});
|
|
43
|
+
let stdout = "";
|
|
44
|
+
let stderr = "";
|
|
45
|
+
let timedOut = false;
|
|
46
|
+
const timer = options.timeoutMs
|
|
47
|
+
? setTimeout(() => {
|
|
48
|
+
timedOut = true;
|
|
49
|
+
child.kill("SIGTERM");
|
|
50
|
+
setTimeout(() => child.kill("SIGKILL"), 2_000).unref();
|
|
51
|
+
}, options.timeoutMs)
|
|
52
|
+
: undefined;
|
|
53
|
+
child.stdout.setEncoding("utf8");
|
|
54
|
+
child.stderr.setEncoding("utf8");
|
|
55
|
+
child.stdout.on("data", (chunk) => {
|
|
56
|
+
stdout += chunk;
|
|
57
|
+
});
|
|
58
|
+
child.stderr.on("data", (chunk) => {
|
|
59
|
+
stderr += chunk;
|
|
60
|
+
});
|
|
61
|
+
child.once("error", (error) => {
|
|
62
|
+
if (timer)
|
|
63
|
+
clearTimeout(timer);
|
|
64
|
+
reject(error);
|
|
65
|
+
});
|
|
66
|
+
child.once("close", (code, signal) => {
|
|
67
|
+
if (timer)
|
|
68
|
+
clearTimeout(timer);
|
|
69
|
+
const exitCode = code ?? (signal ? 128 : 1);
|
|
70
|
+
if (timedOut) {
|
|
71
|
+
stderr += `\nTimed out after ${options.timeoutMs}ms`;
|
|
72
|
+
}
|
|
73
|
+
const result = { command: rendered, exitCode, stdout, stderr };
|
|
74
|
+
if (exitCode !== 0 && !options.allowFailure) {
|
|
75
|
+
reject(new CommandError(rendered, exitCode, stdout, stderr));
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
resolve(result);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
if (options.input !== undefined)
|
|
82
|
+
child.stdin.end(options.input);
|
|
83
|
+
else
|
|
84
|
+
child.stdin.end();
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
export async function runShell(command, options) {
|
|
88
|
+
const shell = options.shell ?? resolveShell();
|
|
89
|
+
return await runCommand(shell.executable, [...shell.args, command], options);
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../src/process.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { BatchProvenance, BatchRecord, HistoryMode, TaskRecord } from "./types.js";
|
|
2
|
+
export declare function provenancePath(directory: string, batchId: string): string;
|
|
3
|
+
export declare function buildBatchProvenance(options: {
|
|
4
|
+
batch: BatchRecord;
|
|
5
|
+
tasks: TaskRecord[];
|
|
6
|
+
integratedHeadSha: string;
|
|
7
|
+
integratedPaths: string[];
|
|
8
|
+
history?: HistoryMode;
|
|
9
|
+
}): BatchProvenance;
|
|
10
|
+
//# sourceMappingURL=provenance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provenance.d.ts","sourceRoot":"","sources":["../src/provenance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExF,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB,GAAG,eAAe,CA8BlB"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
export function provenancePath(directory, batchId) {
|
|
3
|
+
return path.posix.join(directory.replaceAll("\\", "/"), `${batchId}.json`);
|
|
4
|
+
}
|
|
5
|
+
export function buildBatchProvenance(options) {
|
|
6
|
+
const { batch, tasks, integratedHeadSha, integratedPaths, history } = options;
|
|
7
|
+
const integratedPathSet = new Set(integratedPaths);
|
|
8
|
+
return {
|
|
9
|
+
version: 1,
|
|
10
|
+
generator: "agent-merge-broker",
|
|
11
|
+
batchId: batch.id,
|
|
12
|
+
baseBranch: batch.baseBranch,
|
|
13
|
+
...(history ? { history } : {}),
|
|
14
|
+
baseSha: batch.baseSha,
|
|
15
|
+
integratedHeadSha,
|
|
16
|
+
taskIds: [...batch.taskIds],
|
|
17
|
+
tasks: tasks.map((task) => ({
|
|
18
|
+
id: task.id,
|
|
19
|
+
commits: [...task.commits],
|
|
20
|
+
// A corrective commit may intentionally cancel an earlier change. The
|
|
21
|
+
// attestation describes the integrated result, while task receipts retain
|
|
22
|
+
// the historical union used for scope checks and validation routing.
|
|
23
|
+
actualPaths: task.actualPaths.filter((file) => integratedPathSet.has(file)),
|
|
24
|
+
dependsOn: [...task.dependsOn],
|
|
25
|
+
})),
|
|
26
|
+
validations: batch.validations.map((result) => ({
|
|
27
|
+
name: result.name,
|
|
28
|
+
scope: result.scope,
|
|
29
|
+
...(result.taskId ? { taskId: result.taskId } : {}),
|
|
30
|
+
exitCode: result.exitCode,
|
|
31
|
+
durationMs: result.durationMs,
|
|
32
|
+
})),
|
|
33
|
+
createdAt: new Date().toISOString(),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=provenance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provenance.js","sourceRoot":"","sources":["../src/provenance.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,OAAe;IAC/D,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,OAAO,OAAO,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAMpC;IACC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAC9E,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;IACnD,OAAO;QACL,OAAO,EAAE,CAAC;QACV,SAAS,EAAE,oBAAoB;QAC/B,OAAO,EAAE,KAAK,CAAC,EAAE;QACjB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,iBAAiB;QACjB,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;QAC3B,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC1B,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;YAC1B,sEAAsE;YACtE,0EAA0E;YAC1E,qEAAqE;YACrE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3E,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;SAC/B,CAAC,CAAC;QACH,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC9C,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CAAC;QACH,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { BatchRecord, BrokerConfig, TaskRecord } from "./types.js";
|
|
2
|
+
import type { GitRepository } from "./git.js";
|
|
3
|
+
export interface PublicationResult {
|
|
4
|
+
mode: "branch" | "pull-request";
|
|
5
|
+
branchName: string;
|
|
6
|
+
pullRequestUrl?: string;
|
|
7
|
+
autoMergeEnabled?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function publishBatch(options: {
|
|
10
|
+
repo: GitRepository;
|
|
11
|
+
config: BrokerConfig;
|
|
12
|
+
batch: BatchRecord;
|
|
13
|
+
tasks: TaskRecord[];
|
|
14
|
+
}): Promise<PublicationResult>;
|
|
15
|
+
export interface PullRequestMergeState {
|
|
16
|
+
state: string;
|
|
17
|
+
mergeStateStatus: string;
|
|
18
|
+
mergeable: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* GitHub's own view of whether a pull request can merge. Returns undefined when the state cannot be
|
|
22
|
+
* read at all, which is treated as "do not merge" rather than as permission to proceed.
|
|
23
|
+
*/
|
|
24
|
+
export declare function readMergeState(repoRoot: string, pullRequestUrl: string): Promise<PullRequestMergeState | undefined>;
|
|
25
|
+
/**
|
|
26
|
+
* Hands the merge decision to GitHub: it lands the pull request once required checks pass, and
|
|
27
|
+
* updates the branch itself when the base branch requires it. The broker never pushes to the base
|
|
28
|
+
* branch, so branch protection stays authoritative.
|
|
29
|
+
*/
|
|
30
|
+
export declare function enableAutoMerge(repoRoot: string, pullRequestUrl: string, config: BrokerConfig): Promise<boolean>;
|
|
31
|
+
export declare function inspectPullRequest(repoRoot: string, pullRequestUrl: string): Promise<{
|
|
32
|
+
state: string;
|
|
33
|
+
mergedAt?: string;
|
|
34
|
+
mergeCommitSha?: string;
|
|
35
|
+
}>;
|
|
36
|
+
export declare function defaultProjectTitle(repoRoot: string): string;
|
|
37
|
+
//# sourceMappingURL=publisher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publisher.d.ts","sourceRoot":"","sources":["../src/publisher.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,QAAQ,GAAG,cAAc,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AA6BD,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAC1C,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA0C7B;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAiB5C;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,OAAO,CAAC,CAsClB;AAED,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAgBxE;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE5D"}
|