ghostrail 0.13.0 → 0.15.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 +2 -2
- package/dist/board/index.d.ts +1 -1
- package/dist/board/index.d.ts.map +1 -1
- package/dist/board/index.js.map +1 -1
- package/dist/board/page.d.ts +1 -1
- package/dist/board/page.d.ts.map +1 -1
- package/dist/board/page.js +169 -11
- package/dist/board/page.js.map +1 -1
- package/dist/board/server.d.ts +19 -2
- package/dist/board/server.d.ts.map +1 -1
- package/dist/board/server.js +38 -3
- package/dist/board/server.js.map +1 -1
- package/dist/cli/commands.d.ts +1 -1
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +164 -14
- package/dist/cli/commands.js.map +1 -1
- package/dist/commands/help.js +3 -3
- package/dist/commands/help.js.map +1 -1
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +7 -5
- package/dist/config/load.js.map +1 -1
- package/dist/config/schema.d.ts +15 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +5 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/dashboard/server.d.ts +2 -2
- package/dist/dashboard/server.d.ts.map +1 -1
- package/dist/dashboard/server.js +8 -4
- package/dist/dashboard/server.js.map +1 -1
- package/dist/factory/build.d.ts +22 -2
- package/dist/factory/build.d.ts.map +1 -1
- package/dist/factory/build.js +11 -6
- package/dist/factory/build.js.map +1 -1
- package/dist/factory/checkout.d.ts +41 -0
- package/dist/factory/checkout.d.ts.map +1 -0
- package/dist/factory/checkout.js +90 -0
- package/dist/factory/checkout.js.map +1 -0
- package/dist/factory/state.d.ts +85 -0
- package/dist/factory/state.d.ts.map +1 -0
- package/dist/factory/state.js +157 -0
- package/dist/factory/state.js.map +1 -0
- package/dist/global/index.d.ts +3 -1
- package/dist/global/index.d.ts.map +1 -1
- package/dist/global/index.js +3 -1
- package/dist/global/index.js.map +1 -1
- package/dist/global/registry.d.ts +38 -5
- package/dist/global/registry.d.ts.map +1 -1
- package/dist/global/registry.js +40 -14
- package/dist/global/registry.js.map +1 -1
- package/dist/global/repo-id.d.ts +50 -0
- package/dist/global/repo-id.d.ts.map +1 -0
- package/dist/global/repo-id.js +149 -0
- package/dist/global/repo-id.js.map +1 -0
- package/dist/global/state-dir.d.ts +32 -0
- package/dist/global/state-dir.d.ts.map +1 -0
- package/dist/global/state-dir.js +43 -0
- package/dist/global/state-dir.js.map +1 -0
- package/dist/global/store.d.ts +2 -0
- package/dist/global/store.d.ts.map +1 -1
- package/dist/global/store.js.map +1 -1
- package/dist/loop/advice.d.ts +11 -0
- package/dist/loop/advice.d.ts.map +1 -0
- package/dist/loop/advice.js +48 -0
- package/dist/loop/advice.js.map +1 -0
- package/dist/loop/control.d.ts +15 -1
- package/dist/loop/control.d.ts.map +1 -1
- package/dist/loop/control.js +8 -1
- package/dist/loop/control.js.map +1 -1
- package/dist/loop/engine.d.ts.map +1 -1
- package/dist/loop/engine.js +1 -0
- package/dist/loop/engine.js.map +1 -1
- package/dist/loop/index.d.ts +1 -0
- package/dist/loop/index.d.ts.map +1 -1
- package/dist/loop/index.js +1 -0
- package/dist/loop/index.js.map +1 -1
- package/dist/publish/gh.d.ts +4 -1
- package/dist/publish/gh.d.ts.map +1 -1
- package/dist/publish/gh.js +58 -0
- package/dist/publish/gh.js.map +1 -1
- package/dist/publish/githost.d.ts +19 -0
- package/dist/publish/githost.d.ts.map +1 -1
- package/dist/publish/githost.js.map +1 -1
- package/dist/publish/index.d.ts +2 -2
- package/dist/publish/index.d.ts.map +1 -1
- package/dist/publish/index.js +1 -1
- package/dist/publish/index.js.map +1 -1
- package/dist/service/manager.d.ts +2 -0
- package/dist/service/manager.d.ts.map +1 -1
- package/dist/service/manager.js +2 -1
- package/dist/service/manager.js.map +1 -1
- package/dist/service/unit.d.ts +16 -7
- package/dist/service/unit.d.ts.map +1 -1
- package/dist/service/unit.js +11 -7
- package/dist/service/unit.js.map +1 -1
- package/dist/store/events.d.ts +3 -0
- package/dist/store/events.d.ts.map +1 -1
- package/dist/store/events.js +2 -0
- package/dist/store/events.js.map +1 -1
- package/dist/store/file-store.d.ts +5 -18
- package/dist/store/file-store.d.ts.map +1 -1
- package/dist/store/file-store.js +1 -1
- package/dist/store/file-store.js.map +1 -1
- package/dist/store/index.d.ts +2 -1
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js.map +1 -1
- package/dist/store/port.d.ts +53 -0
- package/dist/store/port.d.ts.map +1 -0
- package/dist/store/port.js +2 -0
- package/dist/store/port.js.map +1 -0
- package/package.json +1 -1
- package/skill/ghostrail/SKILL.md +2 -2
- package/templates/{code-local → code}/README.md +2 -2
- package/templates/{code-local → code}/ghostrail.toml +2 -2
- package/templates/{content-loop → content}/README.md +2 -2
- package/templates/{content-loop → content}/ghostrail.toml +1 -1
- /package/templates/{code-local → code}/prompts/resolve-issue.md +0 -0
- /package/templates/{code-local → code}/prompts/respond.md +0 -0
- /package/templates/{code-local → code}/prompts/triage.md +0 -0
- /package/templates/{content-loop → content}/prompts/draft.md +0 -0
- /package/templates/{content-loop → content}/prompts/respond.md +0 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
/**
|
|
3
|
+
* What identifies a ghostrail: the repo it works on, not the directory it was
|
|
4
|
+
* set up from. Pure, so the normalization rules that decide whether two clones
|
|
5
|
+
* are one repo can be checked without a git repository.
|
|
6
|
+
*/
|
|
7
|
+
/** Ports that carry no information, per scheme. */
|
|
8
|
+
const DEFAULT_PORTS = {
|
|
9
|
+
ssh: "22",
|
|
10
|
+
git: "9418",
|
|
11
|
+
http: "80",
|
|
12
|
+
https: "443",
|
|
13
|
+
};
|
|
14
|
+
/** Longest readable stem in a {@link repoKey}, before the hash is appended. */
|
|
15
|
+
const MAX_STEM = 48;
|
|
16
|
+
/**
|
|
17
|
+
* The canonical identity of the repo a git remote points at, as
|
|
18
|
+
* `host[:port]/path/to/repo`, or undefined when the remote is not one.
|
|
19
|
+
*
|
|
20
|
+
* The point is that every spelling of one repo collapses to one string:
|
|
21
|
+
* scp-like and URL forms, with or without `.git`, with or without a default
|
|
22
|
+
* port, are the same repo and must key the same ghostrail.
|
|
23
|
+
*
|
|
24
|
+
* Strict everywhere except case. Anything unrecognised is undefined rather than
|
|
25
|
+
* guessed, because the two failure directions are not symmetric: wrongly
|
|
26
|
+
* merging two repos pools their history and cannot be undone, while wrongly
|
|
27
|
+
* separating two clones only leaves today's behavior in place. The exception is
|
|
28
|
+
* lowercasing, which is deliberately lenient: hosts are case-insensitive and so
|
|
29
|
+
* are repos on the forges people use, so `Owner/Repo` and `owner/repo` are one
|
|
30
|
+
* repo. On a case-sensitive host that could merge two repos differing only in
|
|
31
|
+
* case, which is judged far less likely than someone typing a clone URL with
|
|
32
|
+
* different capitalisation.
|
|
33
|
+
*
|
|
34
|
+
* Never throws. A remote that cannot be read is a missing identity, and the
|
|
35
|
+
* caller falls back to {@link localRepoId}.
|
|
36
|
+
*/
|
|
37
|
+
export function canonicalRepoId(remote) {
|
|
38
|
+
const trimmed = remote.trim();
|
|
39
|
+
if (trimmed.length === 0)
|
|
40
|
+
return undefined;
|
|
41
|
+
const parsed = splitRemote(trimmed);
|
|
42
|
+
if (parsed === undefined)
|
|
43
|
+
return undefined;
|
|
44
|
+
const path = parsed.path
|
|
45
|
+
.split("/")
|
|
46
|
+
.filter((segment) => segment.length > 0)
|
|
47
|
+
.join("/")
|
|
48
|
+
.replace(/\.git$/i, "");
|
|
49
|
+
// A bare host names no repo, and neither does a path that was only slashes.
|
|
50
|
+
if (path.length === 0)
|
|
51
|
+
return undefined;
|
|
52
|
+
return `${parsed.host}/${path}`.toLowerCase();
|
|
53
|
+
}
|
|
54
|
+
/** Host (with any non-default port) and raw path, or undefined. */
|
|
55
|
+
function splitRemote(remote) {
|
|
56
|
+
// A local path is not a remote. Checked first so `/srv/git/repo` and
|
|
57
|
+
// `C:\repos\thing` never reach the URL branch and acquire a bogus host.
|
|
58
|
+
if (remote.startsWith("/") || remote.startsWith(".") || /^[a-z]:[\\/]/i.test(remote)) {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
const url = remote.match(/^([a-z][a-z0-9+.-]*):\/\/([^/\s]+)(\/.*)?$/i);
|
|
62
|
+
if (url !== null) {
|
|
63
|
+
const [, scheme = "", authority = "", path = ""] = url;
|
|
64
|
+
// `file://` addresses a directory, not a remote repo identity.
|
|
65
|
+
if (scheme.toLowerCase() === "file")
|
|
66
|
+
return undefined;
|
|
67
|
+
return { host: stripPort(dropUserinfo(authority), scheme.toLowerCase()), path };
|
|
68
|
+
}
|
|
69
|
+
// scp-like: [user@]host:path. The colon must not be followed by `/`, which
|
|
70
|
+
// would make it a scheme, and the host must carry no slash.
|
|
71
|
+
const scp = remote.match(/^([^/\s]+):(?!\/)(.+)$/);
|
|
72
|
+
if (scp !== null) {
|
|
73
|
+
const [, authority = "", path = ""] = scp;
|
|
74
|
+
return { host: stripPort(dropUserinfo(authority), "ssh"), path };
|
|
75
|
+
}
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
/** Drop `user@` and any password: a credential is not part of an identity. */
|
|
79
|
+
function dropUserinfo(authority) {
|
|
80
|
+
const at = authority.lastIndexOf("@");
|
|
81
|
+
return at === -1 ? authority : authority.slice(at + 1);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Drop the scheme's default port, and any empty one. Keep every other.
|
|
85
|
+
*
|
|
86
|
+
* The empty case is not a curiosity. `ssh://local:/owner/repo` left the host as
|
|
87
|
+
* `local:` and produced `local:/owner/repo`, which is character-for-character a
|
|
88
|
+
* {@link localRepoId} for `/owner/repo`: a remote repo and a path-keyed one
|
|
89
|
+
* colliding on a single identity. A trailing colon with no digits is not a
|
|
90
|
+
* port, and treating it as part of the host was the whole bug.
|
|
91
|
+
*/
|
|
92
|
+
function stripPort(host, scheme) {
|
|
93
|
+
const empty = host.match(/^(.*):$/);
|
|
94
|
+
if (empty !== null)
|
|
95
|
+
return empty[1] ?? host;
|
|
96
|
+
const match = host.match(/^(.*):(\d+)$/);
|
|
97
|
+
if (match === null)
|
|
98
|
+
return host;
|
|
99
|
+
const [, name = "", port = ""] = match;
|
|
100
|
+
return port === DEFAULT_PORTS[scheme] ? name : host;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* The identity of a repo with no usable remote, from its absolute path.
|
|
104
|
+
*
|
|
105
|
+
* The `local:` prefix means it can never collide with a `host/...` identity,
|
|
106
|
+
* and makes a path-keyed entry visibly path-keyed rather than silently so. The
|
|
107
|
+
* path is kept verbatim: it is already absolute, and case-folding it would be
|
|
108
|
+
* wrong on a case-sensitive filesystem.
|
|
109
|
+
*/
|
|
110
|
+
export function localRepoId(path) {
|
|
111
|
+
// Always `local:/...`, never bare `local:`. A canonical identity puts a port
|
|
112
|
+
// after the colon and a path segment after that, so `local:22/a/a` is a real
|
|
113
|
+
// canonical id for a host named `local`. The two can never be equal, but only
|
|
114
|
+
// because a local id's colon is always followed by `/` and a canonical one's
|
|
115
|
+
// never is. Guaranteeing that here, rather than relying on every caller to
|
|
116
|
+
// pass an absolute path, is what makes {@link isLocalRepoId} safe.
|
|
117
|
+
return path.startsWith("/") ? `local:${path}` : `local:/${path}`;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Whether an identity is path-keyed rather than derived from a remote.
|
|
121
|
+
*
|
|
122
|
+
* Checks `local:/`, not `local:`. The shorter prefix looks like the marker and
|
|
123
|
+
* is not one: a host genuinely named `local` on a non-default port produces
|
|
124
|
+
* `local:22/owner/repo`, which is an ordinary canonical identity.
|
|
125
|
+
*/
|
|
126
|
+
export function isLocalRepoId(id) {
|
|
127
|
+
return id.startsWith("local:/");
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* A filesystem-safe directory name for an identity.
|
|
131
|
+
*
|
|
132
|
+
* The hash is not decoration. Folding characters and truncating both lose
|
|
133
|
+
* information, so two different identities can reduce to the same readable
|
|
134
|
+
* stem; the hash of the *full* identity is what keeps the key unique. The stem
|
|
135
|
+
* is there so a human browsing the state directory can tell what they are
|
|
136
|
+
* looking at.
|
|
137
|
+
*/
|
|
138
|
+
export function repoKey(id) {
|
|
139
|
+
const hash = createHash("sha256").update(id, "utf8").digest("hex").slice(0, 8);
|
|
140
|
+
const stem = id
|
|
141
|
+
.toLowerCase()
|
|
142
|
+
.replace(/[^a-z0-9._-]+/g, "-")
|
|
143
|
+
.replace(/-+/g, "-")
|
|
144
|
+
.replace(/^-+|-+$/g, "")
|
|
145
|
+
.slice(0, MAX_STEM)
|
|
146
|
+
.replace(/-+$/, "");
|
|
147
|
+
return stem.length === 0 ? hash : `${stem}-${hash}`;
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=repo-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-id.js","sourceRoot":"","sources":["../../src/global/repo-id.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { GlobalEnv } from "./store.js";
|
|
2
|
+
/**
|
|
3
|
+
* Where a ghostrail's state lives: its runs, events, artifacts, lock, pause
|
|
4
|
+
* flag, and respond watermarks.
|
|
5
|
+
*
|
|
6
|
+
* Outside the repo, keyed by the repo's identity. Inside the checkout, all of
|
|
7
|
+
* it was per-directory, so two clones of one repo had two stores and two locks
|
|
8
|
+
* and therefore raced each other, split their history, and each got a full
|
|
9
|
+
* `max_cost_usd_per_run` ceiling of their own.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* The root for ghostrail's state, honouring `$XDG_STATE_HOME`.
|
|
13
|
+
*
|
|
14
|
+
* State, not config, so this is the state dir rather than the config dir the
|
|
15
|
+
* registry and `secrets.env` live in. The XDG spec is explicit that state is
|
|
16
|
+
* for data that persists between runs but is neither configuration nor a cache,
|
|
17
|
+
* which is exactly a run history.
|
|
18
|
+
*
|
|
19
|
+
* `GHOSTRAIL_HOME` still wins, as it does for the global dir: a caller who has
|
|
20
|
+
* pinned everything to one directory means it, and splitting their state
|
|
21
|
+
* somewhere else would be a surprise. Tests rely on this too.
|
|
22
|
+
*/
|
|
23
|
+
export declare function stateHome(env: GlobalEnv, homedir: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* The state directory for one repo: `<stateHome>/repos/<key>`.
|
|
26
|
+
*
|
|
27
|
+
* `repos/` rather than the root so the layout has room for state that belongs
|
|
28
|
+
* to the account rather than to a repo, without a future addition colliding
|
|
29
|
+
* with a repo whose key happens to match.
|
|
30
|
+
*/
|
|
31
|
+
export declare function repoStateDir(repoId: string, env: GlobalEnv, homedir: string): string;
|
|
32
|
+
//# sourceMappingURL=state-dir.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-dir.d.ts","sourceRoot":"","sources":["../../src/global/state-dir.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;;;;;GAQG;AAEH;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CASjE;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpF"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { repoKey } from "./repo-id.js";
|
|
3
|
+
/**
|
|
4
|
+
* Where a ghostrail's state lives: its runs, events, artifacts, lock, pause
|
|
5
|
+
* flag, and respond watermarks.
|
|
6
|
+
*
|
|
7
|
+
* Outside the repo, keyed by the repo's identity. Inside the checkout, all of
|
|
8
|
+
* it was per-directory, so two clones of one repo had two stores and two locks
|
|
9
|
+
* and therefore raced each other, split their history, and each got a full
|
|
10
|
+
* `max_cost_usd_per_run` ceiling of their own.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* The root for ghostrail's state, honouring `$XDG_STATE_HOME`.
|
|
14
|
+
*
|
|
15
|
+
* State, not config, so this is the state dir rather than the config dir the
|
|
16
|
+
* registry and `secrets.env` live in. The XDG spec is explicit that state is
|
|
17
|
+
* for data that persists between runs but is neither configuration nor a cache,
|
|
18
|
+
* which is exactly a run history.
|
|
19
|
+
*
|
|
20
|
+
* `GHOSTRAIL_HOME` still wins, as it does for the global dir: a caller who has
|
|
21
|
+
* pinned everything to one directory means it, and splitting their state
|
|
22
|
+
* somewhere else would be a surprise. Tests rely on this too.
|
|
23
|
+
*/
|
|
24
|
+
export function stateHome(env, homedir) {
|
|
25
|
+
if (env.GHOSTRAIL_HOME !== undefined && env.GHOSTRAIL_HOME.length > 0) {
|
|
26
|
+
return join(env.GHOSTRAIL_HOME, "state");
|
|
27
|
+
}
|
|
28
|
+
const base = env.XDG_STATE_HOME !== undefined && env.XDG_STATE_HOME.length > 0
|
|
29
|
+
? env.XDG_STATE_HOME
|
|
30
|
+
: join(homedir, ".local", "state");
|
|
31
|
+
return join(base, "ghostrail");
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The state directory for one repo: `<stateHome>/repos/<key>`.
|
|
35
|
+
*
|
|
36
|
+
* `repos/` rather than the root so the layout has room for state that belongs
|
|
37
|
+
* to the account rather than to a repo, without a future addition colliding
|
|
38
|
+
* with a repo whose key happens to match.
|
|
39
|
+
*/
|
|
40
|
+
export function repoStateDir(repoId, env, homedir) {
|
|
41
|
+
return join(stateHome(env, homedir), "repos", repoKey(repoId));
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=state-dir.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-dir.js","sourceRoot":"","sources":["../../src/global/state-dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC;;;;;;;;GAQG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,SAAS,CAAC,GAAc,EAAE,OAAe;IACvD,IAAI,GAAG,CAAC,cAAc,KAAK,SAAS,IAAI,GAAG,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtE,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,IAAI,GACR,GAAG,CAAC,cAAc,KAAK,SAAS,IAAI,GAAG,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;QAC/D,CAAC,CAAC,GAAG,CAAC,cAAc;QACpB,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,GAAc,EAAE,OAAe;IAC1E,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACjE,CAAC"}
|
package/dist/global/store.d.ts
CHANGED
|
@@ -2,6 +2,8 @@ import { type Ghostrail } from "./registry.js";
|
|
|
2
2
|
export interface GlobalEnv {
|
|
3
3
|
GHOSTRAIL_HOME?: string;
|
|
4
4
|
XDG_CONFIG_HOME?: string;
|
|
5
|
+
/** Where run state goes. Config and state are different XDG directories. */
|
|
6
|
+
XDG_STATE_HOME?: string;
|
|
5
7
|
}
|
|
6
8
|
/**
|
|
7
9
|
* Resolve the global ghostrail config directory that holds account-level
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/global/store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAgD,MAAM,eAAe,CAAC;AAE7F,MAAM,WAAW,SAAS;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/global/store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAgD,MAAM,eAAe,CAAC;AAE7F,MAAM,WAAW,SAAS;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAOxE;AAED,yDAAyD;AACzD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;GAIG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;gBAEjB,GAAG,EAAE,MAAM;IAIvB,YAAY,IAAI,MAAM;IAItB,mEAAmE;IAC7D,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAQjD,wDAAwD;IAClD,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAQxC,YAAY,IAAI,MAAM;IAItB;;;;OAIG;IACG,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,GAAG,SAAS,CAAC;IAUtD,8EAA8E;IACxE,aAAa,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjE,4EAA4E;IACtE,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAU9D"}
|
package/dist/global/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/global/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAkB,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/global/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { GhostrailConfig } from "../config/schema.js";
|
|
2
|
+
/**
|
|
3
|
+
* One line about what concurrent runs will share, or undefined when there is
|
|
4
|
+
* nothing worth saying.
|
|
5
|
+
*
|
|
6
|
+
* Silent at `concurrency` 1, because nothing overlaps and a warning on the
|
|
7
|
+
* default configuration is noise that teaches people to ignore warnings. Silent
|
|
8
|
+
* on a backend that clones per run, because the sharing does not exist there.
|
|
9
|
+
*/
|
|
10
|
+
export declare function concurrencyAdvice(config: GhostrailConfig): string | undefined;
|
|
11
|
+
//# sourceMappingURL=advice.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advice.d.ts","sourceRoot":"","sources":["../../src/loop/advice.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAsBxE;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAmB7E"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What raising `concurrency` costs, on the backend you actually have.
|
|
3
|
+
*
|
|
4
|
+
* Not a gate. Six concurrent `git worktree add -B` calls against one repo were
|
|
5
|
+
* tried before any of this was written, and all six succeeded: git is not the
|
|
6
|
+
* constraint, so refusing would be the tool overruling someone who knows their
|
|
7
|
+
* own setup. What is worth saying is what concurrent runs share, which depends
|
|
8
|
+
* on the backend and on whether the factory owns its clone.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Backends that give each run its own filesystem by cloning into it.
|
|
12
|
+
*
|
|
13
|
+
* Listed by what they do rather than by excluding `local-worktree`, so a
|
|
14
|
+
* backend added later does not silently inherit a warning that does not apply
|
|
15
|
+
* to it. Getting added here is a claim about isolation, which is the right
|
|
16
|
+
* thing to have to make deliberately.
|
|
17
|
+
*/
|
|
18
|
+
const CLONES_PER_RUN = ["container", "firecracker", "e2b", "remote"];
|
|
19
|
+
/**
|
|
20
|
+
* One line about what concurrent runs will share, or undefined when there is
|
|
21
|
+
* nothing worth saying.
|
|
22
|
+
*
|
|
23
|
+
* Silent at `concurrency` 1, because nothing overlaps and a warning on the
|
|
24
|
+
* default configuration is noise that teaches people to ignore warnings. Silent
|
|
25
|
+
* on a backend that clones per run, because the sharing does not exist there.
|
|
26
|
+
*/
|
|
27
|
+
export function concurrencyAdvice(config) {
|
|
28
|
+
const { concurrency } = config.guardrails;
|
|
29
|
+
if (!Number.isFinite(concurrency) || concurrency <= 1)
|
|
30
|
+
return undefined;
|
|
31
|
+
if (CLONES_PER_RUN.includes(config.backend.kind))
|
|
32
|
+
return undefined;
|
|
33
|
+
// Only when the factory is still borrowing the operator's checkout. With its
|
|
34
|
+
// own clone (TJ-1586) this hazard is gone, and a warning describing something
|
|
35
|
+
// the operator already turned off costs trust in every other warning.
|
|
36
|
+
const shared = [
|
|
37
|
+
...(config.backend.managedCheckout ? [] : ["a git object store shared with your own work"]),
|
|
38
|
+
"your tool caches (one pnpm/cargo store for every gate at once)",
|
|
39
|
+
"this machine (N agents plus N gate runs)",
|
|
40
|
+
];
|
|
41
|
+
// Joined, not newline-separated: the caller decides framing, and a warning
|
|
42
|
+
// that smuggles line breaks into someone else's log format is rude.
|
|
43
|
+
return [
|
|
44
|
+
`concurrency ${concurrency} on local-worktree: runs will share ${shared.join(", ")}.`,
|
|
45
|
+
"The container backend gives each run its own filesystem.",
|
|
46
|
+
].join(" ");
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=advice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advice.js","sourceRoot":"","sources":["../../src/loop/advice.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH;;;;;;;GAOG;AACH,MAAM,cAAc,GAA2B,CAAC,WAAW,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AAE7F;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAuB;IACvD,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACxE,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAEnE,6EAA6E;IAC7E,8EAA8E;IAC9E,sEAAsE;IACtE,MAAM,MAAM,GAAG;QACb,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,8CAA8C,CAAC,CAAC;QAC3F,gEAAgE;QAChE,0CAA0C;KAC3C,CAAC;IACF,2EAA2E;IAC3E,oEAAoE;IACpE,OAAO;QACL,eAAe,WAAW,uCAAuC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QACrF,0DAA0D;KAC3D,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC"}
|
package/dist/loop/control.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
export interface ControlState {
|
|
3
3
|
enabled: boolean;
|
|
4
4
|
}
|
|
5
|
-
/** The control file's path inside a store directory (
|
|
5
|
+
/** The control file's path inside a store directory (this repo's state dir). */
|
|
6
6
|
export declare function controlPath(dir: string): string;
|
|
7
7
|
/**
|
|
8
8
|
* Read the run/pause state written for a ghostrail. Absent, unreadable, or
|
|
@@ -12,4 +12,18 @@ export declare function controlPath(dir: string): string;
|
|
|
12
12
|
export declare function readControl(dir: string): Promise<ControlState>;
|
|
13
13
|
/** Persist the run/pause state so any process reading the same directory sees it. */
|
|
14
14
|
export declare function writeControl(dir: string, state: ControlState): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Reading and writing a ghostrail's run/pause flag, behind a port.
|
|
17
|
+
*
|
|
18
|
+
* Separate from the run store because they are different concerns that only
|
|
19
|
+
* happened to share a directory. The board used to reach through the store to
|
|
20
|
+
* its `dir` to get at this, which worked exactly as long as every store was a
|
|
21
|
+
* directory on this machine.
|
|
22
|
+
*/
|
|
23
|
+
export interface RunControl {
|
|
24
|
+
read(): Promise<ControlState>;
|
|
25
|
+
write(state: ControlState): Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
/** The control flag as a file in `dir`, which is what a local ghostrail has. */
|
|
28
|
+
export declare function fileControl(dir: string): RunControl;
|
|
15
29
|
//# sourceMappingURL=control.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control.d.ts","sourceRoot":"","sources":["../../src/loop/control.ts"],"names":[],"mappings":"AAGA,yEAAyE;AACzE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;CAClB;AAID,
|
|
1
|
+
{"version":3,"file":"control.d.ts","sourceRoot":"","sources":["../../src/loop/control.ts"],"names":[],"mappings":"AAGA,yEAAyE;AACzE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;CAClB;AAID,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAWpE;AAED,qFAAqF;AACrF,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAGlF;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;IAC9B,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAED,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAKnD"}
|
package/dist/loop/control.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
const CONTROL_FILE = "control.json";
|
|
4
|
-
/** The control file's path inside a store directory (
|
|
4
|
+
/** The control file's path inside a store directory (this repo's state dir). */
|
|
5
5
|
export function controlPath(dir) {
|
|
6
6
|
return join(dir, CONTROL_FILE);
|
|
7
7
|
}
|
|
@@ -27,4 +27,11 @@ export async function writeControl(dir, state) {
|
|
|
27
27
|
await mkdir(dir, { recursive: true });
|
|
28
28
|
await writeFile(controlPath(dir), `${JSON.stringify(state)}\n`, "utf8");
|
|
29
29
|
}
|
|
30
|
+
/** The control flag as a file in `dir`, which is what a local ghostrail has. */
|
|
31
|
+
export function fileControl(dir) {
|
|
32
|
+
return {
|
|
33
|
+
read: () => readControl(dir),
|
|
34
|
+
write: (state) => writeControl(dir, state),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
30
37
|
//# sourceMappingURL=control.js.map
|
package/dist/loop/control.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control.js","sourceRoot":"","sources":["../../src/loop/control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAOjC,MAAM,YAAY,GAAG,cAAc,CAAC;AAEpC,
|
|
1
|
+
{"version":3,"file":"control.js","sourceRoot":"","sources":["../../src/loop/control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAOjC,MAAM,YAAY,GAAG,cAAc,CAAC;AAEpC,gFAAgF;AAChF,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,OAAO,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAW;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7E,MAAM,OAAO,GACX,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,SAAS,IAAI,MAAM;YAClE,CAAC,CAAE,MAA+B,CAAC,OAAO;YAC1C,CAAC,CAAC,SAAS,CAAC;QAChB,OAAO,EAAE,OAAO,EAAE,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,qFAAqF;AACrF,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,KAAmB;IACjE,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,MAAM,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC1E,CAAC;AAeD,gFAAgF;AAChF,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,OAAO;QACL,IAAI,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC;QAC5B,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;KAC3C,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/loop/engine.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAa,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAY,MAAM,oBAAoB,CAAC;AAI9D,OAAO,KAAK,EACV,KAAK,EAEL,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,SAAS,EAET,MAAM,EAEP,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAa,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzD,qDAAqD;AACrD,MAAM,WAAW,QAAQ;IACvB,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/loop/engine.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAa,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAY,MAAM,oBAAoB,CAAC;AAI9D,OAAO,KAAK,EACV,KAAK,EAEL,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,SAAS,EAET,MAAM,EAEP,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAa,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzD,qDAAqD;AACrD,MAAM,WAAW,QAAQ;IACvB,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAsDD;;;;;;;;;;;;GAYG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CA0C1F"}
|
package/dist/loop/engine.js
CHANGED
|
@@ -39,6 +39,7 @@ async function recordResult(sink, runId, result) {
|
|
|
39
39
|
ts,
|
|
40
40
|
state: result.state,
|
|
41
41
|
...(result.error === undefined ? {} : { error: result.error }),
|
|
42
|
+
...(result.summary === undefined ? {} : { summary: result.summary }),
|
|
42
43
|
});
|
|
43
44
|
}
|
|
44
45
|
/** Swallow errors from a best-effort cleanup call so it can't mask the real outcome. */
|
package/dist/loop/engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/loop/engine.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/loop/engine.ts"],"names":[],"mappings":"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"}
|
package/dist/loop/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { branchName, slugify } from "./branch.js";
|
|
2
|
+
export { concurrencyAdvice } from "./advice.js";
|
|
2
3
|
export { mapWithConcurrency } from "./concurrency.js";
|
|
3
4
|
export { type RunBudget, createRunBudget } from "./budget.js";
|
|
4
5
|
export { type LoopDeps, runTick } from "./engine.js";
|
package/dist/loop/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/loop/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,KAAK,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,KAAK,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,KAAK,KAAK,EAAE,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1F,YAAY,EACV,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,IAAI,EACJ,WAAW,EACX,UAAU,EACV,cAAc,EACd,MAAM,EACN,IAAI,EACJ,SAAS,EACT,WAAW,EACX,MAAM,EACN,QAAQ,GACT,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACnE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/loop/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,KAAK,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,KAAK,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,KAAK,KAAK,EAAE,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1F,YAAY,EACV,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,IAAI,EACJ,WAAW,EACX,UAAU,EACV,cAAc,EACd,MAAM,EACN,IAAI,EACJ,SAAS,EACT,WAAW,EACX,MAAM,EACN,QAAQ,GACT,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACnE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/loop/index.js
CHANGED
package/dist/loop/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/loop/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAkB,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAiB,OAAO,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAc,SAAS,EAAqB,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/loop/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAkB,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAiB,OAAO,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAc,SAAS,EAAqB,MAAM,YAAY,CAAC"}
|
package/dist/publish/gh.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { GitHost, OpenPr, PrComment, PrRef, PrSpec } from "./githost.js";
|
|
1
|
+
import type { GitHost, OpenPr, PrComment, PrRef, PrSpec, PrStatus } from "./githost.js";
|
|
2
2
|
/** Runs `gh` with the given args (in the repo) and resolves its result. */
|
|
3
3
|
export type GhRunner = (args: readonly string[]) => Promise<{
|
|
4
4
|
exitCode: number;
|
|
@@ -31,6 +31,8 @@ export declare function ghOpenPrArgs(spec: PrSpec): string[];
|
|
|
31
31
|
export declare function parseOpenPrList(stdout: string): OpenPr[];
|
|
32
32
|
/** Parse `gh pr view --json comments` output into comments. */
|
|
33
33
|
export declare function parseCommentList(stdout: string): PrComment[];
|
|
34
|
+
/** Parse `gh pr view --json state,mergedAt,url,statusCheckRollup` output into a {@link PrStatus}. */
|
|
35
|
+
export declare function parsePrStatus(stdout: string): PrStatus;
|
|
34
36
|
/** The GitHub implementation of {@link GitHost} over the `gh` CLI. */
|
|
35
37
|
export declare class GhHost implements GitHost {
|
|
36
38
|
private readonly run;
|
|
@@ -71,6 +73,7 @@ export declare class GhHost implements GitHost {
|
|
|
71
73
|
findOpenPrByBranch(headBranch: string): Promise<OpenPr | undefined>;
|
|
72
74
|
listComments(prNumber: number): Promise<PrComment[]>;
|
|
73
75
|
postComment(prNumber: number, body: string): Promise<void>;
|
|
76
|
+
getPrStatus(prNumber: number): Promise<PrStatus>;
|
|
74
77
|
private exec;
|
|
75
78
|
}
|
|
76
79
|
//# sourceMappingURL=gh.d.ts.map
|
package/dist/publish/gh.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gh.d.ts","sourceRoot":"","sources":["../../src/publish/gh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"gh.d.ts","sourceRoot":"","sources":["../../src/publish/gh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAGlG,2EAA2E;AAC3E,MAAM,MAAM,QAAQ,GAAG,CACrB,IAAI,EAAE,SAAS,MAAM,EAAE,KACpB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEnE;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAUhE;AAED;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,WAAW,CAAC;AAC9C,eAAO,MAAM,2BAA2B,oCAAoC,CAAC;AAE7E,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAUzD;AAED,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAgBnD;AAED,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAYxD;AAED,+DAA+D;AAC/D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,CAqB5D;AAqCD,qGAAqG;AACrG,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CActD;AAWD,sEAAsE;AACtE,qBAAa,MAAO,YAAW,OAAO;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAW;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IAEnC;;;;;;OAMG;gBACS,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM;IAKtC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAM1C;;;;;;;;;;;;;;;;;;;;;OAqBG;YACW,WAAW;IAMnB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAc7C,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAcnE,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAKpD,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1D,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;YAWxC,IAAI;CAUnB"}
|
package/dist/publish/gh.js
CHANGED
|
@@ -102,6 +102,54 @@ export function parseCommentList(stdout) {
|
|
|
102
102
|
}
|
|
103
103
|
return result;
|
|
104
104
|
}
|
|
105
|
+
/** Map GitHub's PR state (`OPEN`/`CLOSED`/`MERGED`) to the lowercase form the board uses. */
|
|
106
|
+
function normalizePrState(value) {
|
|
107
|
+
if (value === "CLOSED")
|
|
108
|
+
return "closed";
|
|
109
|
+
if (value === "MERGED")
|
|
110
|
+
return "merged";
|
|
111
|
+
return "open";
|
|
112
|
+
}
|
|
113
|
+
/** One entry of `gh`'s `statusCheckRollup`, as a GitHub Actions check run or a legacy commit status. */
|
|
114
|
+
function parseCheckRun(row) {
|
|
115
|
+
if (row === null || typeof row !== "object")
|
|
116
|
+
return undefined;
|
|
117
|
+
const record = row;
|
|
118
|
+
if (typeof record.name === "string" && typeof record.status === "string") {
|
|
119
|
+
const conclusion = typeof record.conclusion === "string" ? record.conclusion : "";
|
|
120
|
+
return {
|
|
121
|
+
name: record.name,
|
|
122
|
+
status: record.status.toLowerCase(),
|
|
123
|
+
...(conclusion.length > 0 ? { conclusion: conclusion.toLowerCase() } : {}),
|
|
124
|
+
...(typeof record.detailsUrl === "string" ? { url: record.detailsUrl } : {}),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
if (typeof record.context === "string" && typeof record.state === "string") {
|
|
128
|
+
const pending = record.state.toUpperCase() === "PENDING";
|
|
129
|
+
return {
|
|
130
|
+
name: record.context,
|
|
131
|
+
status: pending ? "in_progress" : "completed",
|
|
132
|
+
...(pending ? {} : { conclusion: record.state.toLowerCase() }),
|
|
133
|
+
...(typeof record.targetUrl === "string" ? { url: record.targetUrl } : {}),
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
return undefined;
|
|
137
|
+
}
|
|
138
|
+
/** Parse `gh pr view --json state,mergedAt,url,statusCheckRollup` output into a {@link PrStatus}. */
|
|
139
|
+
export function parsePrStatus(stdout) {
|
|
140
|
+
const parsed = JSON.parse(stdout);
|
|
141
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
142
|
+
throw new Error(`expected a JSON object from gh pr view, got: ${stdout.trim()}`);
|
|
143
|
+
}
|
|
144
|
+
const record = parsed;
|
|
145
|
+
const rollup = Array.isArray(record.statusCheckRollup) ? record.statusCheckRollup : [];
|
|
146
|
+
return {
|
|
147
|
+
state: normalizePrState(record.state),
|
|
148
|
+
...(typeof record.mergedAt === "string" ? { mergedAt: record.mergedAt } : {}),
|
|
149
|
+
url: typeof record.url === "string" ? record.url : "",
|
|
150
|
+
checks: rollup.map(parseCheckRun).filter((check) => check !== undefined),
|
|
151
|
+
};
|
|
152
|
+
}
|
|
105
153
|
function safeJsonArray(text) {
|
|
106
154
|
try {
|
|
107
155
|
const value = JSON.parse(text);
|
|
@@ -192,6 +240,16 @@ export class GhHost {
|
|
|
192
240
|
async postComment(prNumber, body) {
|
|
193
241
|
await this.exec(["pr", "comment", String(prNumber), "--body", body]);
|
|
194
242
|
}
|
|
243
|
+
async getPrStatus(prNumber) {
|
|
244
|
+
const result = await this.exec([
|
|
245
|
+
"pr",
|
|
246
|
+
"view",
|
|
247
|
+
String(prNumber),
|
|
248
|
+
"--json",
|
|
249
|
+
"state,mergedAt,url,statusCheckRollup",
|
|
250
|
+
]);
|
|
251
|
+
return parsePrStatus(result.stdout);
|
|
252
|
+
}
|
|
195
253
|
async exec(args) {
|
|
196
254
|
const scoped = this.repoSlug === undefined ? args : [...args, "--repo", this.repoSlug];
|
|
197
255
|
const result = await this.run(scoped);
|