@jwillert/forgeflow 0.1.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 +21 -0
- package/README.md +94 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +119 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +11 -0
- package/dist/cli/init.js +198 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/lock.d.ts +4 -0
- package/dist/cli/lock.js +55 -0
- package/dist/cli/lock.js.map +1 -0
- package/dist/cli/templates/Dockerfile +38 -0
- package/dist/cli/templates/build-image.sh +11 -0
- package/dist/core/capabilities.d.ts +75 -0
- package/dist/core/capabilities.js +2 -0
- package/dist/core/capabilities.js.map +1 -0
- package/dist/core/config.d.ts +38 -0
- package/dist/core/config.js +25 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/engine.d.ts +44 -0
- package/dist/core/engine.js +225 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/state.d.ts +42 -0
- package/dist/core/state.js +8 -0
- package/dist/core/state.js.map +1 -0
- package/dist/core/types.d.ts +141 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/workflow.d.ts +72 -0
- package/dist/core/workflow.js +38 -0
- package/dist/core/workflow.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/process/index.d.ts +14 -0
- package/dist/process/index.js +46 -0
- package/dist/process/index.js.map +1 -0
- package/dist/providers/github/index.d.ts +81 -0
- package/dist/providers/github/index.js +271 -0
- package/dist/providers/github/index.js.map +1 -0
- package/dist/providers/gitlab/index.d.ts +79 -0
- package/dist/providers/gitlab/index.js +263 -0
- package/dist/providers/gitlab/index.js.map +1 -0
- package/dist/state/sqlite/index.d.ts +2 -0
- package/dist/state/sqlite/index.js +138 -0
- package/dist/state/sqlite/index.js.map +1 -0
- package/dist/workflows/implement.d.ts +14 -0
- package/dist/workflows/implement.js +154 -0
- package/dist/workflows/implement.js.map +1 -0
- package/dist/workflows/index.d.ts +9 -0
- package/dist/workflows/index.js +5 -0
- package/dist/workflows/index.js.map +1 -0
- package/dist/workflows/prompts/implement.md +43 -0
- package/dist/workflows/prompts/review/extraction.md +21 -0
- package/dist/workflows/prompts/review/prompt.md +49 -0
- package/dist/workflows/prompts/update-branch/extraction.md +13 -0
- package/dist/workflows/prompts/update-branch/prompt.md +41 -0
- package/dist/workflows/review.d.ts +14 -0
- package/dist/workflows/review.js +134 -0
- package/dist/workflows/review.js.map +1 -0
- package/dist/workflows/shared/git.d.ts +17 -0
- package/dist/workflows/shared/git.js +28 -0
- package/dist/workflows/shared/git.js.map +1 -0
- package/dist/workflows/shared/lifecycle.d.ts +21 -0
- package/dist/workflows/shared/lifecycle.js +29 -0
- package/dist/workflows/shared/lifecycle.js.map +1 -0
- package/dist/workflows/shared/review-output.d.ts +44 -0
- package/dist/workflows/shared/review-output.js +100 -0
- package/dist/workflows/shared/review-output.js.map +1 -0
- package/dist/workflows/shared/sandcastle.d.ts +26 -0
- package/dist/workflows/shared/sandcastle.js +112 -0
- package/dist/workflows/shared/sandcastle.js.map +1 -0
- package/dist/workflows/shared/schema.d.ts +4 -0
- package/dist/workflows/shared/schema.js +17 -0
- package/dist/workflows/shared/schema.js.map +1 -0
- package/dist/workflows/update-branch.d.ts +12 -0
- package/dist/workflows/update-branch.js +148 -0
- package/dist/workflows/update-branch.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { CodeHost, CodeReviewHost, PollingEventSource, WorkTracker } from "../../core/capabilities.js";
|
|
2
|
+
import type { AgentCommand, BranchRef, ChangeRequestDetails, ChangeRequestRef, CheckoutSpec, CodeTargetRef, GeneralComment, InlineReviewComment, NormalizedEvent, ReviewThread, WorkTargetRef, WorkTargetSnapshot } from "../../core/types.js";
|
|
3
|
+
export type GitLabOptions = {
|
|
4
|
+
token: string;
|
|
5
|
+
baseUrl?: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function gitlab(options: GitLabOptions): {
|
|
8
|
+
project(path: string, config: {
|
|
9
|
+
workflows: import("../../core/workflow.js").Workflow[];
|
|
10
|
+
baseBranch?: string;
|
|
11
|
+
}): {
|
|
12
|
+
provider: string;
|
|
13
|
+
id: string;
|
|
14
|
+
codeRepo: string;
|
|
15
|
+
baseBranch: string | undefined;
|
|
16
|
+
workflows: import("../../core/workflow.js").Workflow[];
|
|
17
|
+
pollingSource: GitLabProjectAdapter;
|
|
18
|
+
workReader: GitLabProjectAdapter;
|
|
19
|
+
workTracker: GitLabProjectAdapter;
|
|
20
|
+
codeReader: GitLabProjectAdapter;
|
|
21
|
+
codeHost: GitLabProjectAdapter;
|
|
22
|
+
codeReviewHost: GitLabProjectAdapter;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
declare class GitLabApi {
|
|
26
|
+
private options;
|
|
27
|
+
private base;
|
|
28
|
+
constructor(options: GitLabOptions);
|
|
29
|
+
request<T>(path: string, init?: RequestInit): Promise<T>;
|
|
30
|
+
}
|
|
31
|
+
declare class GitLabProjectAdapter implements PollingEventSource, WorkTracker, CodeHost, CodeReviewHost {
|
|
32
|
+
private api;
|
|
33
|
+
private project;
|
|
34
|
+
private baseBranch?;
|
|
35
|
+
readonly provider = "gitlab";
|
|
36
|
+
readonly targetId: string;
|
|
37
|
+
private encoded;
|
|
38
|
+
constructor(api: GitLabApi, project: string, baseBranch?: string | undefined);
|
|
39
|
+
poll(input: {
|
|
40
|
+
cursor?: {
|
|
41
|
+
value?: string;
|
|
42
|
+
};
|
|
43
|
+
maxEvents: number;
|
|
44
|
+
}): Promise<{
|
|
45
|
+
events: NormalizedEvent[];
|
|
46
|
+
nextCursor: {
|
|
47
|
+
value: string;
|
|
48
|
+
};
|
|
49
|
+
}>;
|
|
50
|
+
getTarget(target: WorkTargetRef): Promise<WorkTargetSnapshot>;
|
|
51
|
+
listBlockingIssues(target: WorkTargetRef): Promise<WorkTargetRef[]>;
|
|
52
|
+
addLabel(target: WorkTargetRef, label: string): Promise<void>;
|
|
53
|
+
removeLabel(target: WorkTargetRef, label: string): Promise<void>;
|
|
54
|
+
addComment(target: WorkTargetRef, body: string): Promise<{
|
|
55
|
+
id: string;
|
|
56
|
+
}>;
|
|
57
|
+
resolveCheckout(target: CodeTargetRef, command: AgentCommand): Promise<CheckoutSpec>;
|
|
58
|
+
openOrUpdateChangeRequest(input: {
|
|
59
|
+
existing?: ChangeRequestRef;
|
|
60
|
+
sourceBranch: BranchRef;
|
|
61
|
+
targetBranch: string;
|
|
62
|
+
title: string;
|
|
63
|
+
body: string;
|
|
64
|
+
}): Promise<ChangeRequestRef>;
|
|
65
|
+
getChangeRequestDetails(target: WorkTargetRef): Promise<ChangeRequestDetails>;
|
|
66
|
+
listGeneralComments(target: WorkTargetRef): Promise<GeneralComment[]>;
|
|
67
|
+
listReviewThreads(target: WorkTargetRef): Promise<ReviewThread[]>;
|
|
68
|
+
postReview(target: WorkTargetRef, input: {
|
|
69
|
+
commitSha: string;
|
|
70
|
+
summary: string;
|
|
71
|
+
inlineComments: InlineReviewComment[];
|
|
72
|
+
}): Promise<void>;
|
|
73
|
+
replyToThread(target: WorkTargetRef, input: {
|
|
74
|
+
threadId: string;
|
|
75
|
+
body: string;
|
|
76
|
+
}): Promise<void>;
|
|
77
|
+
markReady(target: WorkTargetRef): Promise<void>;
|
|
78
|
+
}
|
|
79
|
+
export {};
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import { defaultWorkBranch } from "../../core/workflow.js";
|
|
2
|
+
export function gitlab(options) {
|
|
3
|
+
const api = new GitLabApi(options);
|
|
4
|
+
return {
|
|
5
|
+
project(path, config) {
|
|
6
|
+
const adapter = new GitLabProjectAdapter(api, path, config.baseBranch);
|
|
7
|
+
return {
|
|
8
|
+
provider: "gitlab",
|
|
9
|
+
id: path,
|
|
10
|
+
codeRepo: path,
|
|
11
|
+
baseBranch: config.baseBranch,
|
|
12
|
+
workflows: config.workflows,
|
|
13
|
+
pollingSource: adapter,
|
|
14
|
+
workReader: adapter,
|
|
15
|
+
workTracker: adapter,
|
|
16
|
+
codeReader: adapter,
|
|
17
|
+
codeHost: adapter,
|
|
18
|
+
codeReviewHost: adapter,
|
|
19
|
+
};
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
class GitLabApi {
|
|
24
|
+
options;
|
|
25
|
+
base;
|
|
26
|
+
constructor(options) {
|
|
27
|
+
this.options = options;
|
|
28
|
+
this.base = (options.baseUrl ?? "https://gitlab.com").replace(/\/$/, "") + "/api/v4";
|
|
29
|
+
}
|
|
30
|
+
async request(path, init = {}) {
|
|
31
|
+
const res = await fetch(`${this.base}${path}`, { ...init, headers: { "PRIVATE-TOKEN": this.options.token, "content-type": "application/json", ...(init.headers ?? {}) } });
|
|
32
|
+
if (!res.ok)
|
|
33
|
+
throw new Error(`GitLab ${init.method ?? "GET"} ${path} failed: ${res.status} ${await res.text()}`);
|
|
34
|
+
if (res.status === 204)
|
|
35
|
+
return undefined;
|
|
36
|
+
return await res.json();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const linkedIssueId = (body) => body?.match(/(?:closes|fixes|resolves)\s+#(\d+)/i)?.[1];
|
|
40
|
+
const parseBlockedByIds = (body) => Array.from(body?.matchAll(/(?:blocked by|depends on)\s+#(\d+)/gi) ?? [], m => m[1]);
|
|
41
|
+
const noteScope = (kind) => kind === "merge_request" ? "merge_requests" : "issues";
|
|
42
|
+
const normalizeState = (state) => state === "opened" ? "open" : "closed";
|
|
43
|
+
/** Cursor value is JSON-encoded so it can carry both the issues/MRs "since" timestamp and the tag baseline. Falls back to treating a bare string as `since` for cursors stored before tag support was added. */
|
|
44
|
+
function parsePollCursor(raw) {
|
|
45
|
+
if (!raw)
|
|
46
|
+
return {};
|
|
47
|
+
try {
|
|
48
|
+
return JSON.parse(raw);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return { since: raw };
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function serializePollCursor(data) {
|
|
55
|
+
return JSON.stringify(data);
|
|
56
|
+
}
|
|
57
|
+
class GitLabProjectAdapter {
|
|
58
|
+
api;
|
|
59
|
+
project;
|
|
60
|
+
baseBranch;
|
|
61
|
+
provider = "gitlab";
|
|
62
|
+
targetId;
|
|
63
|
+
encoded;
|
|
64
|
+
constructor(api, project, baseBranch) {
|
|
65
|
+
this.api = api;
|
|
66
|
+
this.project = project;
|
|
67
|
+
this.baseBranch = baseBranch;
|
|
68
|
+
this.targetId = project;
|
|
69
|
+
this.encoded = encodeURIComponent(project);
|
|
70
|
+
}
|
|
71
|
+
async poll(input) {
|
|
72
|
+
const now = new Date().toISOString();
|
|
73
|
+
const events = [];
|
|
74
|
+
let latestUpdatedAt;
|
|
75
|
+
const collect = async (kind, items) => {
|
|
76
|
+
for (const item of items) {
|
|
77
|
+
if (!latestUpdatedAt || item.updated_at > latestUpdatedAt)
|
|
78
|
+
latestUpdatedAt = item.updated_at;
|
|
79
|
+
for (const label of item.labels) {
|
|
80
|
+
if (!label.startsWith("agent:"))
|
|
81
|
+
continue;
|
|
82
|
+
events.push({
|
|
83
|
+
id: `gitlab:${this.project}:${kind}:${item.iid}:label:${label}:${item.updated_at}`,
|
|
84
|
+
provider: "gitlab",
|
|
85
|
+
source: "poll",
|
|
86
|
+
provenance: "synthetic",
|
|
87
|
+
kind: "label_added",
|
|
88
|
+
workTarget: { provider: "gitlab", project: this.project, repo: this.project, kind, id: String(item.iid), url: item.web_url },
|
|
89
|
+
actor: item.author ? { provider: "gitlab", id: String(item.author.id), login: item.author.username } : undefined,
|
|
90
|
+
label,
|
|
91
|
+
occurredAt: item.updated_at,
|
|
92
|
+
observedAt: now,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
if (events.length >= input.maxEvents)
|
|
96
|
+
return;
|
|
97
|
+
const notes = await this.api.request(`/projects/${this.encoded}/${noteScope(kind)}/${item.iid}/notes?per_page=20`);
|
|
98
|
+
for (const note of notes) {
|
|
99
|
+
if (note.body.trim() !== "/agent retry")
|
|
100
|
+
continue;
|
|
101
|
+
events.push({
|
|
102
|
+
id: `gitlab:${this.project}:${kind}:${item.iid}:comment:${note.id}`,
|
|
103
|
+
provider: "gitlab",
|
|
104
|
+
source: "poll",
|
|
105
|
+
provenance: "historical",
|
|
106
|
+
kind: "comment_created",
|
|
107
|
+
workTarget: { provider: "gitlab", project: this.project, repo: this.project, kind, id: String(item.iid), url: item.web_url },
|
|
108
|
+
actor: note.author ? { provider: "gitlab", id: String(note.author.id), login: note.author.username } : undefined,
|
|
109
|
+
comment: { id: String(note.id), body: note.body },
|
|
110
|
+
occurredAt: note.created_at,
|
|
111
|
+
observedAt: now,
|
|
112
|
+
});
|
|
113
|
+
if (events.length >= input.maxEvents)
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
if (events.length >= input.maxEvents)
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
const cursorData = parsePollCursor(input.cursor?.value);
|
|
121
|
+
const q = new URLSearchParams({ state: "opened", per_page: String(Math.min(input.maxEvents, 100)), order_by: "updated_at", sort: "asc" });
|
|
122
|
+
if (cursorData.since)
|
|
123
|
+
q.set("updated_after", cursorData.since);
|
|
124
|
+
const issues = await this.api.request(`/projects/${this.encoded}/issues?${q}`);
|
|
125
|
+
await collect("issue", issues);
|
|
126
|
+
if (events.length < input.maxEvents) {
|
|
127
|
+
const mergeRequests = await this.api.request(`/projects/${this.encoded}/merge_requests?${q}`);
|
|
128
|
+
await collect("merge_request", mergeRequests);
|
|
129
|
+
}
|
|
130
|
+
const seenTags = new Set(cursorData.seenTags ?? []);
|
|
131
|
+
const isFirstEverPoll = input.cursor === undefined;
|
|
132
|
+
if (events.length < input.maxEvents) {
|
|
133
|
+
const tags = await this.api.request(`/projects/${this.encoded}/repository/tags?per_page=100`);
|
|
134
|
+
for (const tag of tags) {
|
|
135
|
+
if (seenTags.has(tag.name))
|
|
136
|
+
continue;
|
|
137
|
+
if (!isFirstEverPoll && events.length < input.maxEvents) {
|
|
138
|
+
events.push({
|
|
139
|
+
id: `gitlab:${this.project}:tag:${tag.name}`,
|
|
140
|
+
provider: "gitlab",
|
|
141
|
+
source: "poll",
|
|
142
|
+
provenance: "synthetic",
|
|
143
|
+
kind: "tag_created",
|
|
144
|
+
workTarget: { provider: "gitlab", project: this.project, repo: this.project, kind: "tag", id: tag.name },
|
|
145
|
+
tag: tag.name,
|
|
146
|
+
occurredAt: now,
|
|
147
|
+
observedAt: now,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
seenTags.add(tag.name);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return { events, nextCursor: { value: serializePollCursor({ since: latestUpdatedAt ?? cursorData.since ?? now, seenTags: [...seenTags] }) } };
|
|
154
|
+
}
|
|
155
|
+
async getTarget(target) {
|
|
156
|
+
if (target.kind === "merge_request") {
|
|
157
|
+
const mr = await this.api.request(`/projects/${this.encoded}/merge_requests/${target.id}`);
|
|
158
|
+
return { target, title: mr.title, body: mr.description ?? undefined, labels: mr.labels, author: mr.author ? { provider: "gitlab", id: String(mr.author.id), login: mr.author.username } : undefined, url: mr.web_url, updatedAt: mr.updated_at, state: normalizeState(mr.state) };
|
|
159
|
+
}
|
|
160
|
+
const issue = await this.api.request(`/projects/${this.encoded}/issues/${target.id}`);
|
|
161
|
+
return { target, title: issue.title, body: issue.description, labels: issue.labels, author: issue.author ? { provider: "gitlab", id: String(issue.author.id), login: issue.author.username } : undefined, url: issue.web_url, updatedAt: issue.updated_at, state: normalizeState(issue.state) };
|
|
162
|
+
}
|
|
163
|
+
async listBlockingIssues(target) {
|
|
164
|
+
const snapshot = await this.getTarget(target).catch(() => undefined);
|
|
165
|
+
const textBlocked = parseBlockedByIds(snapshot?.body);
|
|
166
|
+
let nativeBlocked = [];
|
|
167
|
+
if (target.kind !== "merge_request") {
|
|
168
|
+
const links = await this.api.request(`/projects/${this.encoded}/issues/${target.id}/links`).catch(() => []);
|
|
169
|
+
nativeBlocked = links.filter(l => l.link_type === "is_blocked_by").map(l => String(l.iid));
|
|
170
|
+
}
|
|
171
|
+
const ids = new Set([...textBlocked, ...nativeBlocked]);
|
|
172
|
+
return [...ids].map(id => ({ provider: "gitlab", project: this.project, repo: this.project, kind: "issue", id }));
|
|
173
|
+
}
|
|
174
|
+
async addLabel(target, label) {
|
|
175
|
+
const snapshot = await this.getTarget(target);
|
|
176
|
+
const labels = Array.from(new Set([...snapshot.labels, label])).join(",");
|
|
177
|
+
await this.api.request(`/projects/${this.encoded}/${noteScope(target.kind)}/${target.id}`, { method: "PUT", body: JSON.stringify({ labels }) });
|
|
178
|
+
}
|
|
179
|
+
async removeLabel(target, label) {
|
|
180
|
+
await this.api.request(`/projects/${this.encoded}/${noteScope(target.kind)}/${target.id}`, { method: "PUT", body: JSON.stringify({ remove_labels: label }) });
|
|
181
|
+
}
|
|
182
|
+
async addComment(target, body) {
|
|
183
|
+
const note = await this.api.request(`/projects/${this.encoded}/${noteScope(target.kind)}/${target.id}/notes`, { method: "POST", body: JSON.stringify({ body }) });
|
|
184
|
+
return { id: String(note.id) };
|
|
185
|
+
}
|
|
186
|
+
async resolveCheckout(target, command) {
|
|
187
|
+
const project = await this.api.request(`/projects/${encodeURIComponent(target.repo)}`);
|
|
188
|
+
return { cloneUrl: project.http_url_to_repo, baseRef: target.baseBranch ?? this.baseBranch ?? project.default_branch, workBranch: defaultWorkBranch(command), authRef: `gitlab:${target.repo}:write` };
|
|
189
|
+
}
|
|
190
|
+
async openOrUpdateChangeRequest(input) {
|
|
191
|
+
if (input.existing) {
|
|
192
|
+
const mr = await this.api.request(`/projects/${this.encoded}/merge_requests/${input.existing.id}`, { method: "PUT", body: JSON.stringify({ title: input.title, description: input.body }) });
|
|
193
|
+
return { provider: "gitlab", id: String(mr.iid), url: mr.web_url, kind: "merge_request" };
|
|
194
|
+
}
|
|
195
|
+
const mr = await this.api.request(`/projects/${this.encoded}/merge_requests`, { method: "POST", body: JSON.stringify({ title: input.title, description: input.body, source_branch: input.sourceBranch.name, target_branch: input.targetBranch }) });
|
|
196
|
+
return { provider: "gitlab", id: String(mr.iid), url: mr.web_url, kind: "merge_request" };
|
|
197
|
+
}
|
|
198
|
+
async getChangeRequestDetails(target) {
|
|
199
|
+
const mr = await this.api.request(`/projects/${this.encoded}/merge_requests/${target.id}`);
|
|
200
|
+
return {
|
|
201
|
+
sourceBranch: mr.source_branch,
|
|
202
|
+
sourceSha: mr.sha,
|
|
203
|
+
targetBranch: mr.target_branch,
|
|
204
|
+
title: mr.title,
|
|
205
|
+
isCrossRepository: mr.source_project_id !== mr.target_project_id,
|
|
206
|
+
linkedIssueId: linkedIssueId(mr.description),
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
async listGeneralComments(target) {
|
|
210
|
+
const notes = await this.api.request(`/projects/${this.encoded}/${noteScope(target.kind)}/${target.id}/notes?per_page=100`);
|
|
211
|
+
return notes.filter(n => !n.system).map(n => ({ author: n.author?.username, body: n.body, createdAt: n.created_at }));
|
|
212
|
+
}
|
|
213
|
+
async listReviewThreads(target) {
|
|
214
|
+
if (target.kind !== "merge_request")
|
|
215
|
+
return [];
|
|
216
|
+
const discussions = await this.api.request(`/projects/${this.encoded}/merge_requests/${target.id}/discussions?per_page=100`);
|
|
217
|
+
return discussions
|
|
218
|
+
.filter(d => d.notes[0]?.resolvable && !d.notes[0]?.resolved)
|
|
219
|
+
.map(d => ({
|
|
220
|
+
id: d.id,
|
|
221
|
+
isResolved: d.notes[0]?.resolved ?? false,
|
|
222
|
+
comments: d.notes.filter(n => !n.system).map(n => ({ id: String(n.id), author: n.author?.username, body: n.body })),
|
|
223
|
+
}));
|
|
224
|
+
}
|
|
225
|
+
async postReview(target, input) {
|
|
226
|
+
if (input.summary.trim()) {
|
|
227
|
+
await this.api.request(`/projects/${this.encoded}/merge_requests/${target.id}/notes`, { method: "POST", body: JSON.stringify({ body: input.summary }) });
|
|
228
|
+
}
|
|
229
|
+
if (input.inlineComments.length === 0)
|
|
230
|
+
return;
|
|
231
|
+
const mr = await this.api.request(`/projects/${this.encoded}/merge_requests/${target.id}`);
|
|
232
|
+
const diffRefs = mr.diff_refs;
|
|
233
|
+
if (!diffRefs)
|
|
234
|
+
throw new Error("GitLab merge request has no diff_refs; cannot post inline comments");
|
|
235
|
+
for (const comment of input.inlineComments) {
|
|
236
|
+
await this.api.request(`/projects/${this.encoded}/merge_requests/${target.id}/discussions`, {
|
|
237
|
+
method: "POST",
|
|
238
|
+
body: JSON.stringify({
|
|
239
|
+
body: comment.body,
|
|
240
|
+
position: {
|
|
241
|
+
position_type: "text",
|
|
242
|
+
base_sha: diffRefs.base_sha,
|
|
243
|
+
start_sha: diffRefs.start_sha,
|
|
244
|
+
head_sha: diffRefs.head_sha,
|
|
245
|
+
new_path: comment.path,
|
|
246
|
+
new_line: comment.line,
|
|
247
|
+
},
|
|
248
|
+
}),
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
async replyToThread(target, input) {
|
|
253
|
+
await this.api.request(`/projects/${this.encoded}/merge_requests/${target.id}/discussions/${input.threadId}/notes`, { method: "POST", body: JSON.stringify({ body: input.body }) });
|
|
254
|
+
}
|
|
255
|
+
async markReady(target) {
|
|
256
|
+
const mr = await this.api.request(`/projects/${this.encoded}/merge_requests/${target.id}`);
|
|
257
|
+
const readyTitle = mr.title.replace(/^\s*(draft:|wip:)\s*/i, "");
|
|
258
|
+
if (readyTitle === mr.title)
|
|
259
|
+
return;
|
|
260
|
+
await this.api.request(`/projects/${this.encoded}/merge_requests/${target.id}`, { method: "PUT", body: JSON.stringify({ title: readyTitle }) });
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/gitlab/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import Database from "better-sqlite3";
|
|
2
|
+
export function sqliteState(path) {
|
|
3
|
+
return new SqliteState(path);
|
|
4
|
+
}
|
|
5
|
+
class SqliteState {
|
|
6
|
+
db;
|
|
7
|
+
constructor(path) {
|
|
8
|
+
this.db = new Database(path);
|
|
9
|
+
this.db.pragma("journal_mode = WAL");
|
|
10
|
+
this.migrate();
|
|
11
|
+
}
|
|
12
|
+
migrate() {
|
|
13
|
+
this.db.exec(`
|
|
14
|
+
create table if not exists cursors (
|
|
15
|
+
source_key text primary key,
|
|
16
|
+
cursor_json text,
|
|
17
|
+
updated_at text not null
|
|
18
|
+
);
|
|
19
|
+
create table if not exists events (
|
|
20
|
+
id text primary key,
|
|
21
|
+
event_json text not null,
|
|
22
|
+
raw_json text,
|
|
23
|
+
processed_at text,
|
|
24
|
+
created_at text not null
|
|
25
|
+
);
|
|
26
|
+
create table if not exists commands (
|
|
27
|
+
id text primary key,
|
|
28
|
+
command_json text not null,
|
|
29
|
+
status text not null,
|
|
30
|
+
defer_reason text,
|
|
31
|
+
next_check_at text,
|
|
32
|
+
updated_at text not null,
|
|
33
|
+
created_at text not null
|
|
34
|
+
);
|
|
35
|
+
create table if not exists command_change_requests (
|
|
36
|
+
command_id text primary key,
|
|
37
|
+
ref_json text not null,
|
|
38
|
+
updated_at text not null
|
|
39
|
+
);
|
|
40
|
+
create table if not exists workflow_runs (
|
|
41
|
+
id integer primary key autoincrement,
|
|
42
|
+
command_id text not null,
|
|
43
|
+
workflow_id text not null,
|
|
44
|
+
status text not null,
|
|
45
|
+
started_at text,
|
|
46
|
+
completed_at text,
|
|
47
|
+
summary text,
|
|
48
|
+
execution_json text,
|
|
49
|
+
error text,
|
|
50
|
+
created_at text not null
|
|
51
|
+
);
|
|
52
|
+
`);
|
|
53
|
+
}
|
|
54
|
+
async getCursor(sourceKey) {
|
|
55
|
+
const row = this.db.prepare("select cursor_json from cursors where source_key = ?").get(sourceKey);
|
|
56
|
+
return row?.cursor_json ? JSON.parse(row.cursor_json) : undefined;
|
|
57
|
+
}
|
|
58
|
+
async setCursor(sourceKey, cursor) {
|
|
59
|
+
this.db.prepare("insert into cursors(source_key, cursor_json, updated_at) values (?, ?, ?) on conflict(source_key) do update set cursor_json = excluded.cursor_json, updated_at = excluded.updated_at")
|
|
60
|
+
.run(sourceKey, cursor ? JSON.stringify(cursor) : null, new Date().toISOString());
|
|
61
|
+
}
|
|
62
|
+
async hasProcessedEvent(eventId) {
|
|
63
|
+
const row = this.db.prepare("select processed_at from events where id = ? and processed_at is not null").get(eventId);
|
|
64
|
+
return !!row;
|
|
65
|
+
}
|
|
66
|
+
async recordEvent(event, options) {
|
|
67
|
+
this.db.prepare("insert or ignore into events(id, event_json, raw_json, created_at) values (?, ?, ?, ?)")
|
|
68
|
+
.run(event.id, JSON.stringify(event), options?.rawPayload ? JSON.stringify(options.rawPayload) : null, new Date().toISOString());
|
|
69
|
+
}
|
|
70
|
+
async markEventProcessed(eventId) {
|
|
71
|
+
this.db.prepare("update events set processed_at = coalesce(processed_at, ?) where id = ?").run(new Date().toISOString(), eventId);
|
|
72
|
+
}
|
|
73
|
+
async hasCommand(commandId) {
|
|
74
|
+
const row = this.db.prepare("select 1 from commands where id = ?").get(commandId);
|
|
75
|
+
return !!row;
|
|
76
|
+
}
|
|
77
|
+
async createCommand(command) {
|
|
78
|
+
this.db.prepare("insert into commands(id, command_json, status, defer_reason, next_check_at, updated_at, created_at) values (?, ?, ?, ?, ?, ?, ?)")
|
|
79
|
+
.run(command.id, JSON.stringify(command), command.status, command.deferReason ?? null, command.nextCheckAt ?? null, command.updatedAt, command.createdAt);
|
|
80
|
+
}
|
|
81
|
+
async updateCommandStatus(commandId, status, input) {
|
|
82
|
+
const row = this.db.prepare("select command_json from commands where id = ?").get(commandId);
|
|
83
|
+
if (!row)
|
|
84
|
+
return;
|
|
85
|
+
const command = JSON.parse(row.command_json);
|
|
86
|
+
command.status = status;
|
|
87
|
+
command.updatedAt = new Date().toISOString();
|
|
88
|
+
if (input?.reason)
|
|
89
|
+
command.deferReason = input.reason;
|
|
90
|
+
if (input?.nextCheckAt)
|
|
91
|
+
command.nextCheckAt = input.nextCheckAt;
|
|
92
|
+
this.db.prepare("update commands set command_json = ?, status = ?, defer_reason = ?, next_check_at = ?, updated_at = ? where id = ?")
|
|
93
|
+
.run(JSON.stringify(command), status, command.deferReason ?? null, command.nextCheckAt ?? null, command.updatedAt, commandId);
|
|
94
|
+
}
|
|
95
|
+
async getCommand(commandId) {
|
|
96
|
+
const row = this.db.prepare("select command_json from commands where id = ?").get(commandId);
|
|
97
|
+
return row ? JSON.parse(row.command_json) : undefined;
|
|
98
|
+
}
|
|
99
|
+
async findLatestFailedCommandForTarget(targetKey) {
|
|
100
|
+
const rows = this.db.prepare("select command_json from commands where status = 'failed' order by updated_at desc").all();
|
|
101
|
+
return rows.map(r => JSON.parse(r.command_json)).find(c => `${c.workTarget.provider}:${c.workTarget.repo ?? c.workTarget.project ?? ""}:${c.workTarget.kind}:${c.workTarget.id}` === targetKey);
|
|
102
|
+
}
|
|
103
|
+
async listDueDeferred(now, limit) {
|
|
104
|
+
const rows = this.db.prepare("select command_json from commands where status = 'deferred' and (next_check_at is null or next_check_at <= ?) order by created_at asc limit ?").all(now, limit);
|
|
105
|
+
return rows.map(r => JSON.parse(r.command_json));
|
|
106
|
+
}
|
|
107
|
+
async claimQueued(limit) {
|
|
108
|
+
const tx = this.db.transaction(() => {
|
|
109
|
+
const rows = this.db.prepare("select id, command_json from commands where status = 'queued' order by created_at asc limit ?").all(limit);
|
|
110
|
+
const now = new Date().toISOString();
|
|
111
|
+
for (const row of rows) {
|
|
112
|
+
const command = JSON.parse(row.command_json);
|
|
113
|
+
command.status = "running";
|
|
114
|
+
command.updatedAt = now;
|
|
115
|
+
this.db.prepare("update commands set command_json = ?, status = 'running', updated_at = ? where id = ? and status = 'queued'").run(JSON.stringify(command), now, row.id);
|
|
116
|
+
}
|
|
117
|
+
return rows.map(r => JSON.parse(r.command_json));
|
|
118
|
+
});
|
|
119
|
+
return tx();
|
|
120
|
+
}
|
|
121
|
+
async getLinkedChangeRequest(commandId) {
|
|
122
|
+
const row = this.db.prepare("select ref_json from command_change_requests where command_id = ?").get(commandId);
|
|
123
|
+
return row ? JSON.parse(row.ref_json) : undefined;
|
|
124
|
+
}
|
|
125
|
+
async linkChangeRequest(commandId, ref) {
|
|
126
|
+
this.db.prepare("insert into command_change_requests(command_id, ref_json, updated_at) values (?, ?, ?) on conflict(command_id) do update set ref_json = excluded.ref_json, updated_at = excluded.updated_at")
|
|
127
|
+
.run(commandId, JSON.stringify(ref), new Date().toISOString());
|
|
128
|
+
}
|
|
129
|
+
async getLastExecutionResult(commandId) {
|
|
130
|
+
const row = this.db.prepare("select execution_json from workflow_runs where command_id = ? and execution_json is not null order by id desc limit 1").get(commandId);
|
|
131
|
+
return row ? JSON.parse(row.execution_json) : undefined;
|
|
132
|
+
}
|
|
133
|
+
async recordWorkflowRun(input) {
|
|
134
|
+
this.db.prepare("insert into workflow_runs(command_id, workflow_id, status, started_at, completed_at, summary, execution_json, error, created_at) values (?, ?, ?, ?, ?, ?, ?, ?, ?)")
|
|
135
|
+
.run(input.commandId, input.workflowId, input.status, input.startedAt ?? null, input.completedAt ?? null, input.summary ?? null, input.execution ? JSON.stringify(input.execution) : null, input.error ?? null, new Date().toISOString());
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/state/sqlite/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Workflow } from "../core/workflow.js";
|
|
2
|
+
import { type SandboxDefaults } from "./shared/sandcastle.js";
|
|
3
|
+
export interface ImplementWorkflowOptions extends SandboxDefaults {
|
|
4
|
+
readonly id?: string;
|
|
5
|
+
readonly triggerLabel?: string;
|
|
6
|
+
readonly reviewLabel?: string;
|
|
7
|
+
readonly blockedLabel?: string;
|
|
8
|
+
readonly inProgressLabel?: string;
|
|
9
|
+
readonly promptFile?: string;
|
|
10
|
+
readonly preflightCommand?: string;
|
|
11
|
+
readonly idleTimeoutSeconds?: number;
|
|
12
|
+
}
|
|
13
|
+
export declare function createImplementWorkflow(options?: ImplementWorkflowOptions): Workflow;
|
|
14
|
+
export declare const implement: Workflow;
|