pipeline-worker 0.1.21 → 0.1.23
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/dist/agent/claude.js +87 -65
- package/dist/agent/claude.js.map +1 -1
- package/dist/agent/copilot.js +19 -14
- package/dist/agent/copilot.js.map +1 -1
- package/dist/cli.js +45 -39
- package/dist/cli.js.map +1 -1
- package/dist/config/detectChecks.js +30 -15
- package/dist/config/detectChecks.js.map +1 -1
- package/dist/config/loader.js +30 -15
- package/dist/config/loader.js.map +1 -1
- package/dist/forge/github.d.ts +0 -7
- package/dist/forge/github.js +13 -19
- package/dist/forge/github.js.map +1 -1
- package/dist/forge/gitlab.d.ts +0 -6
- package/dist/forge/gitlab.js +8 -17
- package/dist/forge/gitlab.js.map +1 -1
- package/dist/forge/shared.d.ts +9 -0
- package/dist/forge/shared.js +27 -0
- package/dist/forge/shared.js.map +1 -0
- package/dist/git/commit.d.ts +0 -1
- package/dist/git/commit.js +0 -4
- package/dist/git/commit.js.map +1 -1
- package/dist/git/resolveProjectPath.d.ts +0 -6
- package/dist/git/resolveProjectPath.js +1 -1
- package/dist/git/resolveProjectPath.js.map +1 -1
- package/dist/git/worktree.d.ts +0 -7
- package/dist/git/worktree.js +42 -25
- package/dist/git/worktree.js.map +1 -1
- package/dist/mcp/server.js +8 -6
- package/dist/mcp/server.js.map +1 -1
- package/dist/process/signalCleanup.d.ts +15 -0
- package/dist/process/signalCleanup.js +19 -0
- package/dist/process/signalCleanup.js.map +1 -0
- package/dist/state/lock.d.ts +0 -6
- package/dist/state/lock.js +36 -21
- package/dist/state/lock.js.map +1 -1
- package/dist/state/runState.js +1 -0
- package/dist/state/runState.js.map +1 -1
- package/dist/toon/envelope.js +30 -17
- package/dist/toon/envelope.js.map +1 -1
- package/dist/ui/sessions.js +26 -8
- package/dist/ui/sessions.js.map +1 -1
- package/dist/ui/steps.d.ts +8 -11
- package/dist/ui/steps.js +24 -2
- package/dist/ui/steps.js.map +1 -1
- package/dist/version/autoUpdate.js +23 -15
- package/dist/version/autoUpdate.js.map +1 -1
- package/dist/workflow/orchestrate.js +130 -96
- package/dist/workflow/orchestrate.js.map +1 -1
- package/dist/workflow/runChecks.js +2 -0
- package/dist/workflow/runChecks.js.map +1 -1
- package/dist/workflow/updateChangelog.js +43 -28
- package/dist/workflow/updateChangelog.js.map +1 -1
- package/dist/workflow/watchPipeline.d.ts +0 -19
- package/dist/workflow/watchPipeline.js +115 -87
- package/dist/workflow/watchPipeline.js.map +1 -1
- package/package.json +1 -1
package/dist/forge/github.js
CHANGED
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
* jobs -> PipelineJob. The token is deliberately sourced only from an
|
|
6
6
|
* environment variable and never logged.
|
|
7
7
|
*/
|
|
8
|
-
|
|
8
|
+
import { forgeFetch, firstOrUndefined, parseIdResponse } from './shared.js';
|
|
9
|
+
// fallow-ignore-next-line complexity
|
|
10
|
+
function resolveGithubAuth(config) {
|
|
9
11
|
// config.github.repo is already env/.env-resolved by config/loader.ts; the
|
|
10
12
|
// token and the API URL override are read directly from the environment here.
|
|
11
13
|
const apiUrl = process.env.PIPELINE_WORKER_GITHUB_API_URL || 'https://api.github.com';
|
|
@@ -19,21 +21,12 @@ export function resolveGithubAuth(config) {
|
|
|
19
21
|
return { apiUrl: apiUrl.replace(/\/$/, ''), repo, token };
|
|
20
22
|
}
|
|
21
23
|
async function githubRequest(auth, path, init) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
'Content-Type': 'application/json',
|
|
29
|
-
...(init?.headers ?? {}),
|
|
30
|
-
},
|
|
31
|
-
});
|
|
32
|
-
if (!res.ok) {
|
|
33
|
-
const body = await res.text().catch(() => '');
|
|
34
|
-
throw new Error(`GitHub API ${init?.method ?? 'GET'} ${path} failed: ${res.status} ${res.statusText} — ${body}`);
|
|
35
|
-
}
|
|
36
|
-
return res;
|
|
24
|
+
return forgeFetch('GitHub API', path, `${auth.apiUrl}/repos/${auth.repo}${path}`, {
|
|
25
|
+
Authorization: `Bearer ${auth.token}`,
|
|
26
|
+
Accept: 'application/vnd.github+json',
|
|
27
|
+
'X-GitHub-Api-Version': '2022-11-28',
|
|
28
|
+
'Content-Type': 'application/json',
|
|
29
|
+
}, init);
|
|
37
30
|
}
|
|
38
31
|
function toMergeRequest(raw) {
|
|
39
32
|
return {
|
|
@@ -44,6 +37,7 @@ function toMergeRequest(raw) {
|
|
|
44
37
|
state: raw.state,
|
|
45
38
|
};
|
|
46
39
|
}
|
|
40
|
+
// fallow-ignore-next-line complexity
|
|
47
41
|
function runStatus(run) {
|
|
48
42
|
if (run.status !== 'completed')
|
|
49
43
|
return 'running';
|
|
@@ -66,6 +60,7 @@ function runStatus(run) {
|
|
|
66
60
|
* else any failed -> failed (its id is what getFailedJobs needs); else any
|
|
67
61
|
* canceled -> canceled; else success unless every run was skipped.
|
|
68
62
|
*/
|
|
63
|
+
// fallow-ignore-next-line complexity
|
|
69
64
|
export function aggregateRuns(runs) {
|
|
70
65
|
if (runs.length === 0)
|
|
71
66
|
return undefined;
|
|
@@ -83,7 +78,7 @@ export function createGithubForge(config) {
|
|
|
83
78
|
async findExistingMr(sourceBranch) {
|
|
84
79
|
const res = await githubRequest(auth, `/pulls?head=${encodeURIComponent(`${owner}:${sourceBranch}`)}&state=open`);
|
|
85
80
|
const list = (await res.json());
|
|
86
|
-
return list
|
|
81
|
+
return firstOrUndefined(list, toMergeRequest);
|
|
87
82
|
},
|
|
88
83
|
async createMergeRequest(args) {
|
|
89
84
|
const res = await githubRequest(auth, '/pulls', {
|
|
@@ -128,8 +123,7 @@ export function createGithubForge(config) {
|
|
|
128
123
|
method: 'POST',
|
|
129
124
|
body: JSON.stringify({ body }),
|
|
130
125
|
});
|
|
131
|
-
|
|
132
|
-
return { id: note.id };
|
|
126
|
+
return parseIdResponse(res);
|
|
133
127
|
},
|
|
134
128
|
async hasMergeConflicts(mrIid) {
|
|
135
129
|
const res = await githubRequest(auth, `/pulls/${mrIid}`);
|
package/dist/forge/github.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/forge/github.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/forge/github.ts"],"names":[],"mappings":"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"}
|
package/dist/forge/gitlab.d.ts
CHANGED
|
@@ -6,10 +6,4 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import type { PipelineWorkerConfig } from '../types.js';
|
|
8
8
|
import type { ForgeClient } from './types.js';
|
|
9
|
-
export interface GitlabAuth {
|
|
10
|
-
host: string;
|
|
11
|
-
projectId: number | string;
|
|
12
|
-
token: string;
|
|
13
|
-
}
|
|
14
|
-
export declare function resolveGitlabAuth(config: PipelineWorkerConfig): GitlabAuth;
|
|
15
9
|
export declare function createGitlabForge(config: PipelineWorkerConfig): ForgeClient;
|
package/dist/forge/gitlab.js
CHANGED
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* orchestrator and the MCP tool handlers, so there is exactly one place that
|
|
5
5
|
* knows how to talk to GitLab.
|
|
6
6
|
*/
|
|
7
|
-
|
|
7
|
+
import { forgeFetch, firstOrUndefined, parseIdResponse } from './shared.js';
|
|
8
|
+
function resolveGitlabAuth(config) {
|
|
8
9
|
// config.gitlab.host/projectId are already env/.env-resolved by
|
|
9
10
|
// config/loader.ts; the token is read directly from the environment here.
|
|
10
11
|
const host = config.gitlab.host;
|
|
@@ -23,19 +24,10 @@ async function gitlabRequest(auth, path, init) {
|
|
|
23
24
|
// so slashes don't collide with the API route structure.
|
|
24
25
|
const projectSegment = typeof auth.projectId === 'string' ? encodeURIComponent(auth.projectId) : auth.projectId;
|
|
25
26
|
const url = `${auth.host.replace(/\/$/, '')}/api/v4/projects/${projectSegment}${path}`;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
'Content-Type': 'application/json',
|
|
31
|
-
...(init?.headers ?? {}),
|
|
32
|
-
},
|
|
33
|
-
});
|
|
34
|
-
if (!res.ok) {
|
|
35
|
-
const body = await res.text().catch(() => '');
|
|
36
|
-
throw new Error(`GitLab API ${init?.method ?? 'GET'} ${path} failed: ${res.status} ${res.statusText} — ${body}`);
|
|
37
|
-
}
|
|
38
|
-
return res;
|
|
27
|
+
return forgeFetch('GitLab API', path, url, {
|
|
28
|
+
'PRIVATE-TOKEN': auth.token,
|
|
29
|
+
'Content-Type': 'application/json',
|
|
30
|
+
}, init);
|
|
39
31
|
}
|
|
40
32
|
function toMergeRequest(raw) {
|
|
41
33
|
return {
|
|
@@ -58,7 +50,7 @@ export function createGitlabForge(config) {
|
|
|
58
50
|
async findExistingMr(sourceBranch) {
|
|
59
51
|
const res = await gitlabRequest(auth, `/merge_requests?source_branch=${encodeURIComponent(sourceBranch)}&state=opened`);
|
|
60
52
|
const list = (await res.json());
|
|
61
|
-
return list
|
|
53
|
+
return firstOrUndefined(list, toMergeRequest);
|
|
62
54
|
},
|
|
63
55
|
async createMergeRequest(args) {
|
|
64
56
|
const res = await gitlabRequest(auth, '/merge_requests', {
|
|
@@ -95,8 +87,7 @@ export function createGitlabForge(config) {
|
|
|
95
87
|
method: 'POST',
|
|
96
88
|
body: JSON.stringify({ body }),
|
|
97
89
|
});
|
|
98
|
-
|
|
99
|
-
return { id: note.id };
|
|
90
|
+
return parseIdResponse(res);
|
|
100
91
|
},
|
|
101
92
|
async hasMergeConflicts(mrIid) {
|
|
102
93
|
const res = await gitlabRequest(auth, `/merge_requests/${mrIid}`);
|
package/dist/forge/gitlab.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../src/forge/gitlab.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../src/forge/gitlab.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Small pieces genuinely identical between the GitHub and GitLab ForgeClient implementations. */
|
|
2
|
+
/** Performs `fetch` and throws a labeled error on a non-ok response; the caller supplies the URL and headers since those differ per forge. */
|
|
3
|
+
export declare function forgeFetch(apiLabel: string, path: string, url: string, headers: Record<string, string>, init?: RequestInit): Promise<Response>;
|
|
4
|
+
/** The `list.length > 0 ? map(list[0]) : undefined` idiom shared by both findExistingMr implementations. */
|
|
5
|
+
export declare function firstOrUndefined<T, R>(list: T[], map: (item: T) => R): R | undefined;
|
|
6
|
+
/** Both createMrNote implementations parse the response the same way, just against differently-shaped request paths. */
|
|
7
|
+
export declare function parseIdResponse(res: Response): Promise<{
|
|
8
|
+
id: number;
|
|
9
|
+
}>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** Small pieces genuinely identical between the GitHub and GitLab ForgeClient implementations. */
|
|
2
|
+
/** Performs `fetch` and throws a labeled error on a non-ok response; the caller supplies the URL and headers since those differ per forge. */
|
|
3
|
+
// fallow-ignore-next-line complexity
|
|
4
|
+
export async function forgeFetch(apiLabel, path, url, headers, init) {
|
|
5
|
+
const res = await fetch(url, {
|
|
6
|
+
...init,
|
|
7
|
+
headers: {
|
|
8
|
+
...headers,
|
|
9
|
+
...(init?.headers ?? {}),
|
|
10
|
+
},
|
|
11
|
+
});
|
|
12
|
+
if (!res.ok) {
|
|
13
|
+
const body = await res.text().catch(() => '');
|
|
14
|
+
throw new Error(`${apiLabel} ${init?.method ?? 'GET'} ${path} failed: ${res.status} ${res.statusText} — ${body}`);
|
|
15
|
+
}
|
|
16
|
+
return res;
|
|
17
|
+
}
|
|
18
|
+
/** The `list.length > 0 ? map(list[0]) : undefined` idiom shared by both findExistingMr implementations. */
|
|
19
|
+
export function firstOrUndefined(list, map) {
|
|
20
|
+
return list.length > 0 ? map(list[0]) : undefined;
|
|
21
|
+
}
|
|
22
|
+
/** Both createMrNote implementations parse the response the same way, just against differently-shaped request paths. */
|
|
23
|
+
export async function parseIdResponse(res) {
|
|
24
|
+
const note = (await res.json());
|
|
25
|
+
return { id: note.id };
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/forge/shared.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAElG,8IAA8I;AAC9I,qCAAqC;AACrC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB,EAAE,IAAY,EAAE,GAAW,EAAE,OAA+B,EAAE,IAAkB;IAC/H,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,GAAG,IAAI;QACP,OAAO,EAAE;YACP,GAAG,OAAO;YACV,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;SACzB;KACF,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,IAAI,IAAI,EAAE,MAAM,IAAI,KAAK,IAAI,IAAI,YAAY,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,MAAM,IAAI,EAAE,CAAC,CAAC;IACpH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,4GAA4G;AAC5G,MAAM,UAAU,gBAAgB,CAAO,IAAS,EAAE,GAAmB;IACnE,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACpD,CAAC;AAED,wHAAwH;AACxH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAa;IACjD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAmB,CAAC;IAClD,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;AACzB,CAAC"}
|
package/dist/git/commit.d.ts
CHANGED
|
@@ -19,7 +19,6 @@ export declare function listConflictedFiles(worktreePath: string): Promise<strin
|
|
|
19
19
|
* that still has markers in it.
|
|
20
20
|
*/
|
|
21
21
|
export declare function findUnresolvedConflictMarkers(worktreePath: string, files: string[]): string[];
|
|
22
|
-
export declare function currentSha(worktreePath: string): Promise<string>;
|
|
23
22
|
export declare function currentBranch(cwd: string): Promise<string>;
|
|
24
23
|
/** Reads git config user.name/user.email for display purposes; never throws — unset config just reads as ''. */
|
|
25
24
|
export declare function getGitUser(cwd: string): Promise<{
|
package/dist/git/commit.js
CHANGED
|
@@ -39,10 +39,6 @@ const CONFLICT_MARKER = /^(<{7} |>{7} )/m;
|
|
|
39
39
|
export function findUnresolvedConflictMarkers(worktreePath, files) {
|
|
40
40
|
return files.filter((file) => CONFLICT_MARKER.test(readFileSync(join(worktreePath, file), 'utf-8')));
|
|
41
41
|
}
|
|
42
|
-
export async function currentSha(worktreePath) {
|
|
43
|
-
const { stdout } = await execFileAsync('git', ['rev-parse', 'HEAD'], { cwd: worktreePath });
|
|
44
|
-
return stdout.trim();
|
|
45
|
-
}
|
|
46
42
|
export async function currentBranch(cwd) {
|
|
47
43
|
const { stdout } = await execFileAsync('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { cwd });
|
|
48
44
|
return stdout.trim();
|
package/dist/git/commit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commit.js","sourceRoot":"","sources":["../../src/git/commit.ts"],"names":[],"mappings":"AAAA,qEAAqE;AAErE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,YAAoB;IACjD,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,YAAoB,EAAE,OAAe;IAChE,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,YAAoB,EAAE,MAAc,EAAE,MAAc;IAC7E,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;AAChG,CAAC;AAED,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,YAAoB;IACnD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;IAChG,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,mIAAmI;AACnI,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,YAAoB;IAC5D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,iBAAiB,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;IACjH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAE1C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,6BAA6B,CAAC,YAAoB,EAAE,KAAe;IACjF,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACvG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"commit.js","sourceRoot":"","sources":["../../src/git/commit.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,12 +4,6 @@
|
|
|
4
4
|
* is set and no explicit projectId is configured, so the user can run
|
|
5
5
|
* `pipeline-worker run` from any repo under the base without per-project config.
|
|
6
6
|
*/
|
|
7
|
-
/**
|
|
8
|
-
* Converts a single path segment to lowercase kebab-case.
|
|
9
|
-
* Handles both PascalCase ("RetailMediaPortal" → "retail-media-portal") and
|
|
10
|
-
* already-hyphenated names ("Store-Media-Api" → "store-media-api").
|
|
11
|
-
*/
|
|
12
|
-
export declare function toKebabCase(segment: string): string;
|
|
13
7
|
/**
|
|
14
8
|
* Derives the GitLab project path from a local repo root and a base directory.
|
|
15
9
|
*
|
|
@@ -10,7 +10,7 @@ import { relative, sep } from 'node:path';
|
|
|
10
10
|
* Handles both PascalCase ("RetailMediaPortal" → "retail-media-portal") and
|
|
11
11
|
* already-hyphenated names ("Store-Media-Api" → "store-media-api").
|
|
12
12
|
*/
|
|
13
|
-
|
|
13
|
+
function toKebabCase(segment) {
|
|
14
14
|
return segment
|
|
15
15
|
.replace(/([a-z\d])([A-Z])/g, '$1-$2')
|
|
16
16
|
.replace(/([A-Z]+)([A-Z][a-z])/g, '$1-$2')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveProjectPath.js","sourceRoot":"","sources":["../../src/git/resolveProjectPath.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAE1C;;;;GAIG;AACH,
|
|
1
|
+
{"version":3,"file":"resolveProjectPath.js","sourceRoot":"","sources":["../../src/git/resolveProjectPath.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAE1C;;;;GAIG;AACH,SAAS,WAAW,CAAC,OAAe;IAClC,OAAO,OAAO;SACX,OAAO,CAAC,mBAAmB,EAAE,OAAO,CAAC;SACrC,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC;SACzC,WAAW,EAAE,CAAC;AACnB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,QAAgB;IAClE,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACzC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,uCAAuC,QAAQ,6BAA6B,QAAQ,KAAK;YACvF,0GAA0G,CAC7G,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnD,CAAC"}
|
package/dist/git/worktree.d.ts
CHANGED
|
@@ -45,13 +45,6 @@ export interface ApplyDiffResult {
|
|
|
45
45
|
/**
|
|
46
46
|
* Applies a captured diff (staged+unstaged) and copies untracked files into
|
|
47
47
|
* the worktree, so it ends up with exactly the caller's original change set.
|
|
48
|
-
*
|
|
49
|
-
* Uses `--3way`: the diff was captured against repoRoot's HEAD *before*
|
|
50
|
-
* syncWithOrigin rebased the worktree onto the latest origin, so a plain
|
|
51
|
-
* `git apply` can fail outright once origin has moved. `--3way` falls back
|
|
52
|
-
* to a real three-way merge using the blobs recorded in the diff, leaving
|
|
53
|
-
* standard conflict markers (like a merge conflict) instead of a hard
|
|
54
|
-
* failure — the caller resolves them the same way as any other conflict.
|
|
55
48
|
*/
|
|
56
49
|
export declare function applyDiffToWorktree(worktreePath: string, diffText: string, untrackedFiles: string[], repoRoot: string): Promise<ApplyDiffResult>;
|
|
57
50
|
/**
|
package/dist/git/worktree.js
CHANGED
|
@@ -104,42 +104,57 @@ export async function syncWithOrigin(worktreePath, targetBranch) {
|
|
|
104
104
|
await execFileAsync('git', ['pull', '--rebase', 'origin', targetBranch], { cwd: worktreePath });
|
|
105
105
|
}
|
|
106
106
|
/**
|
|
107
|
-
* Applies
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
107
|
+
* Applies the captured diff via `git apply --3way`, returning conflicted
|
|
108
|
+
* files if the 3-way merge left conflict markers (empty when diffText is
|
|
109
|
+
* blank, or the diff applied cleanly). Uses `--3way` because the diff was
|
|
110
|
+
* captured against repoRoot's HEAD *before* syncWithOrigin rebased the
|
|
111
|
+
* worktree onto the latest origin, so a plain `git apply` can fail outright
|
|
112
|
+
* once origin has moved; `--3way` falls back to a real three-way merge using
|
|
113
|
+
* the blobs recorded in the diff, leaving standard conflict markers (like a
|
|
114
|
+
* merge conflict) instead of a hard failure. Kept as one function: the
|
|
115
|
+
* catch/rethrow decision below depends on the same `error` the try produced,
|
|
116
|
+
* so splitting the two would need to pass the error back out artificially.
|
|
116
117
|
*/
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
catch (error) {
|
|
126
|
-
conflictedFiles = await listConflictedFiles(worktreePath);
|
|
127
|
-
if (conflictedFiles.length === 0)
|
|
128
|
-
throw error; // not a recoverable conflict — surface the real error
|
|
129
|
-
}
|
|
130
|
-
finally {
|
|
131
|
-
unlinkSync(diffFile);
|
|
132
|
-
}
|
|
118
|
+
async function applyDiffPatch(worktreePath, diffText) {
|
|
119
|
+
if (diffText.trim().length === 0)
|
|
120
|
+
return [];
|
|
121
|
+
const diffFile = join(tmpdir(), `pipeline-worker-diff-${randomUUID()}.patch`);
|
|
122
|
+
writeFileSync(diffFile, diffText, 'utf-8');
|
|
123
|
+
try {
|
|
124
|
+
await execFileAsync('git', ['apply', '--3way', '--index', diffFile], { cwd: worktreePath });
|
|
125
|
+
return [];
|
|
133
126
|
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
const conflictedFiles = await listConflictedFiles(worktreePath);
|
|
129
|
+
if (conflictedFiles.length === 0)
|
|
130
|
+
throw error; // not a recoverable conflict — surface the real error
|
|
131
|
+
return conflictedFiles;
|
|
132
|
+
}
|
|
133
|
+
finally {
|
|
134
|
+
unlinkSync(diffFile);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
function copyUntrackedFiles(repoRoot, worktreePath, untrackedFiles) {
|
|
134
138
|
for (const relativePath of untrackedFiles) {
|
|
135
139
|
const src = join(repoRoot, relativePath);
|
|
136
140
|
const dest = join(worktreePath, relativePath);
|
|
137
141
|
mkdirSync(dirname(dest), { recursive: true });
|
|
138
142
|
cpSync(src, dest, { recursive: true });
|
|
139
143
|
}
|
|
144
|
+
}
|
|
145
|
+
async function stageUntrackedIfNeeded(worktreePath, untrackedFiles, conflictedFiles) {
|
|
140
146
|
if (untrackedFiles.length > 0 && conflictedFiles.length === 0) {
|
|
141
147
|
await execFileAsync('git', ['add', '-A'], { cwd: worktreePath });
|
|
142
148
|
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Applies a captured diff (staged+unstaged) and copies untracked files into
|
|
152
|
+
* the worktree, so it ends up with exactly the caller's original change set.
|
|
153
|
+
*/
|
|
154
|
+
export async function applyDiffToWorktree(worktreePath, diffText, untrackedFiles, repoRoot) {
|
|
155
|
+
const conflictedFiles = await applyDiffPatch(worktreePath, diffText);
|
|
156
|
+
copyUntrackedFiles(repoRoot, worktreePath, untrackedFiles);
|
|
157
|
+
await stageUntrackedIfNeeded(worktreePath, untrackedFiles, conflictedFiles);
|
|
143
158
|
linkNodeModules(repoRoot, worktreePath);
|
|
144
159
|
return { conflicted: conflictedFiles.length > 0, conflictedFiles };
|
|
145
160
|
}
|
|
@@ -152,6 +167,7 @@ const RENAME_BRANCH_MAX_ATTEMPTS = 5;
|
|
|
152
167
|
* inferring the same descriptive slug), retries with a short random suffix
|
|
153
168
|
* appended instead of failing the run outright.
|
|
154
169
|
*/
|
|
170
|
+
// fallow-ignore-next-line complexity
|
|
155
171
|
export async function renameBranch(worktreePath, newBranchName) {
|
|
156
172
|
let candidate = newBranchName;
|
|
157
173
|
for (let attempt = 1; attempt <= RENAME_BRANCH_MAX_ATTEMPTS; attempt++) {
|
|
@@ -174,6 +190,7 @@ export async function renameBranch(worktreePath, newBranchName) {
|
|
|
174
190
|
* in. Tolerates its own failures (logs + continues) so a cleanup problem
|
|
175
191
|
* never masks the real error from the workflow that called it.
|
|
176
192
|
*/
|
|
193
|
+
// fallow-ignore-next-line complexity
|
|
177
194
|
export async function removeWorktree(repoRoot, worktreePath) {
|
|
178
195
|
try {
|
|
179
196
|
await execFileAsync('git', ['worktree', 'remove', '--force', worktreePath], { cwd: repoRoot });
|
package/dist/git/worktree.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/git/worktree.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/git/worktree.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACrH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,MAAM,UAAU,sBAAsB;IACpC,OAAO,uBAAuB,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAC3D,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,eAAe,CAAC,QAAgB,EAAE,YAAoB;IAC7D,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACzD,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAAE,OAAO;IAC3C,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IAC3D,IAAI,CAAC;QACH,UAAU,CAAC,eAAe,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,KAAK,CAAC;IACtE,CAAC;IACD,WAAW,CAAC,iBAAiB,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,cAAc;IACrB,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAClE,OAAO,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AACrC,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB,EAAE,UAAkB;IACvE,MAAM,YAAY,GAAG,cAAc,EAAE,CAAC;IACtC,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3G,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,YAAoB,EAAE,MAAc;IAC3E,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;QAC5G,OAAO,MAAM,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,QAAgB,EAAE,MAAc;IAC3E,MAAM,YAAY,GAAG,cAAc,EAAE,CAAC;IACtC,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3E,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;IACnH,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,YAAoB,EAAE,YAAoB;IAC7E,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;AAClG,CAAC;AAQD;;;;;;;;;;;GAWG;AACH,KAAK,UAAU,cAAc,CAAC,YAAoB,EAAE,QAAgB;IAClE,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAE5C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,wBAAwB,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC9E,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;QAC5F,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,eAAe,GAAG,MAAM,mBAAmB,CAAC,YAAY,CAAC,CAAC;QAChE,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,KAAK,CAAC,CAAC,sDAAsD;QACrG,OAAO,eAAe,CAAC;IACzB,CAAC;YAAS,CAAC;QACT,UAAU,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAgB,EAAE,YAAoB,EAAE,cAAwB;IAC1F,KAAK,MAAM,YAAY,IAAI,cAAc,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QAC9C,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,YAAoB,EAAE,cAAwB,EAAE,eAAyB;IAC7G,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9D,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,YAAoB,EACpB,QAAgB,EAChB,cAAwB,EACxB,QAAgB;IAEhB,MAAM,eAAe,GAAG,MAAM,cAAc,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IACrE,kBAAkB,CAAC,QAAQ,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;IAC3D,MAAM,sBAAsB,CAAC,YAAY,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;IAC5E,eAAe,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACxC,OAAO,EAAE,UAAU,EAAE,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,eAAe,EAAE,CAAC;AACrE,CAAC;AAED,yEAAyE;AACzE,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAErC;;;;;;GAMG;AACH,qCAAqC;AACrC,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,YAAoB,EAAE,aAAqB;IAC5E,IAAI,SAAS,GAAG,aAAa,CAAC;IAC9B,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,0BAA0B,EAAE,OAAO,EAAE,EAAE,CAAC;QACvE,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;YAC/E,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,GAAI,KAA6B,CAAC,MAAM,IAAI,EAAE,CAAC;YAC3D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,OAAO,KAAK,0BAA0B;gBAAE,MAAM,KAAK,CAAC;YAC1F,SAAS,GAAG,GAAG,aAAa,IAAI,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC7D,CAAC;IACH,CAAC;IACD,wDAAwD;IACxD,MAAM,IAAI,KAAK,CAAC,6DAA6D,aAAa,GAAG,CAAC,CAAC;AACjG,CAAC;AAED;;;;GAIG;AACH,qCAAqC;AACrC,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB,EAAE,YAAoB;IACzE,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;IACjG,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CAAC,sCAAsC,YAAY,KAAK,OAAO,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,yEAAyE;IACzE,yFAAyF;IACzF,IAAI,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAClE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CAAC,mDAAmD,YAAY,KAAK,OAAO,EAAE,CAAC,CAAC;IAC/F,CAAC;AACH,CAAC"}
|
package/dist/mcp/server.js
CHANGED
|
@@ -30,6 +30,13 @@ function wrap(handler) {
|
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
32
|
const fullFlag = z.boolean().describe('Skip truncation and return the full payload').optional();
|
|
33
|
+
function describeNextPipelineAction(status) {
|
|
34
|
+
if (status === 'failed')
|
|
35
|
+
return 'call get_failed_jobs with this pipeline id';
|
|
36
|
+
if (status === 'running' || status === 'pending')
|
|
37
|
+
return 'poll again shortly';
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
33
40
|
export async function createServer() {
|
|
34
41
|
const server = new McpServer({ name: 'pipeline-worker-forge', version: '0.1.0' });
|
|
35
42
|
server.registerTool('create_merge_request', {
|
|
@@ -53,12 +60,7 @@ export async function createServer() {
|
|
|
53
60
|
if (!latest) {
|
|
54
61
|
return buildEnvelope({ status: 'success', counts: { pipelines: 0 }, next: 'no pipeline yet, poll again shortly' });
|
|
55
62
|
}
|
|
56
|
-
|
|
57
|
-
? 'call get_failed_jobs with this pipeline id'
|
|
58
|
-
: latest.status === 'running' || latest.status === 'pending'
|
|
59
|
-
? 'poll again shortly'
|
|
60
|
-
: undefined;
|
|
61
|
-
return buildEnvelope({ status: 'success', data: latest, next });
|
|
63
|
+
return buildEnvelope({ status: 'success', data: latest, next: describeNextPipelineAction(latest.status) });
|
|
62
64
|
}));
|
|
63
65
|
server.registerTool('get_failed_jobs', {
|
|
64
66
|
description: 'List the failed jobs for a pipeline',
|
package/dist/mcp/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Idempotent-cleanup + SIGINT/SIGTERM wiring shared by `run` (orchestrate.ts)
|
|
3
|
+
* and `resume` (cli.ts): both remove the worktree at most once on interrupt,
|
|
4
|
+
* then exit with the signal's conventional code. `markDone` lets a caller
|
|
5
|
+
* (e.g. orchestrate.ts's "preserve worktree for resume" branch) mark cleanup
|
|
6
|
+
* as already satisfied without running `fn` — kept separate from `cleanup`
|
|
7
|
+
* itself since callers may need to skip the side effect for reasons the
|
|
8
|
+
* shared flag-guard alone can't express.
|
|
9
|
+
*/
|
|
10
|
+
export interface IdempotentCleanup {
|
|
11
|
+
cleanup: () => Promise<void>;
|
|
12
|
+
markDone: () => void;
|
|
13
|
+
}
|
|
14
|
+
export declare function makeIdempotentCleanup(fn: () => Promise<void> | void): IdempotentCleanup;
|
|
15
|
+
export declare function registerExitSignals(onSignal: (exitCode: number) => void): void;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export function makeIdempotentCleanup(fn) {
|
|
2
|
+
let cleanedUp = false;
|
|
3
|
+
return {
|
|
4
|
+
cleanup: async () => {
|
|
5
|
+
if (cleanedUp)
|
|
6
|
+
return;
|
|
7
|
+
cleanedUp = true;
|
|
8
|
+
await fn();
|
|
9
|
+
},
|
|
10
|
+
markDone: () => {
|
|
11
|
+
cleanedUp = true;
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export function registerExitSignals(onSignal) {
|
|
16
|
+
process.once('SIGINT', () => onSignal(130));
|
|
17
|
+
process.once('SIGTERM', () => onSignal(143));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=signalCleanup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signalCleanup.js","sourceRoot":"","sources":["../../src/process/signalCleanup.ts"],"names":[],"mappings":"AAcA,MAAM,UAAU,qBAAqB,CAAC,EAA8B;IAClE,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,OAAO;QACL,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,SAAS;gBAAE,OAAO;YACtB,SAAS,GAAG,IAAI,CAAC;YACjB,MAAM,EAAE,EAAE,CAAC;QACb,CAAC;QACD,QAAQ,EAAE,GAAG,EAAE;YACb,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAoC;IACtE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/C,CAAC"}
|
package/dist/state/lock.d.ts
CHANGED
|
@@ -9,11 +9,5 @@
|
|
|
9
9
|
* lock left behind by a process that's no longer running (crash, kill -9) is
|
|
10
10
|
* treated as stale and reclaimed. Returns a release function; safe to call
|
|
11
11
|
* more than once.
|
|
12
|
-
*
|
|
13
|
-
* The final write uses the 'wx' flag (fails with EEXIST if the path already
|
|
14
|
-
* exists) as the actual mutual-exclusion guard — the existsSync/liveness
|
|
15
|
-
* check above is only a fast path to produce a clear "who's holding it"
|
|
16
|
-
* error message, since it's inherently racy against another process doing
|
|
17
|
-
* the same check concurrently.
|
|
18
12
|
*/
|
|
19
13
|
export declare function acquireLock(repoRoot: string): () => void;
|