@stigmer/runner 3.1.5 → 3.1.7
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/.build-fingerprint +1 -1
- package/dist/activities/discover-mcp-server.js +23 -0
- package/dist/activities/discover-mcp-server.js.map +1 -1
- package/dist/activities/execute-cursor/index.js +39 -1
- package/dist/activities/execute-cursor/index.js.map +1 -1
- package/dist/activities/execute-cursor/workspace-provision.d.ts +23 -4
- package/dist/activities/execute-cursor/workspace-provision.js +17 -6
- package/dist/activities/execute-cursor/workspace-provision.js.map +1 -1
- package/dist/activities/execute-deep-agent/index.js +8 -1
- package/dist/activities/execute-deep-agent/index.js.map +1 -1
- package/dist/activities/execute-deep-agent/inline-publisher.d.ts +1 -1
- package/dist/activities/execute-deep-agent/post-stream.d.ts +1 -1
- package/dist/activities/execute-deep-agent/streaming-side-effects.d.ts +1 -1
- package/dist/activities/execute-deep-agent/streaming-terminal.d.ts +1 -1
- package/dist/activities/execute-deep-agent/streaming.d.ts +1 -1
- package/dist/activities/execute-deep-agent/v3-status-builder.d.ts +1 -1
- package/dist/shared/execution-status-writer.d.ts +31 -0
- package/dist/shared/execution-status-writer.js +43 -0
- package/dist/shared/execution-status-writer.js.map +1 -0
- package/dist/shared/mcp-oauth-detect.d.ts +53 -0
- package/dist/shared/mcp-oauth-detect.js +99 -0
- package/dist/shared/mcp-oauth-detect.js.map +1 -0
- package/dist/shared/workspace/writeback-coordinator.d.ts +120 -0
- package/dist/shared/workspace/writeback-coordinator.js +393 -0
- package/dist/shared/workspace/writeback-coordinator.js.map +1 -0
- package/package.json +2 -2
- package/src/activities/discover-mcp-server.ts +25 -0
- package/src/activities/execute-cursor/__tests__/workspace-provision.test.ts +23 -15
- package/src/activities/execute-cursor/index.ts +41 -1
- package/src/activities/execute-cursor/workspace-provision.ts +39 -7
- package/src/activities/execute-deep-agent/__tests__/post-stream.test.ts +1 -1
- package/src/activities/execute-deep-agent/index.ts +8 -1
- package/src/activities/execute-deep-agent/inline-publisher.ts +1 -1
- package/src/activities/execute-deep-agent/post-stream.ts +1 -1
- package/src/activities/execute-deep-agent/status-builder.ts +1 -1
- package/src/activities/execute-deep-agent/streaming-side-effects.ts +1 -1
- package/src/activities/execute-deep-agent/streaming-terminal.ts +1 -1
- package/src/activities/execute-deep-agent/streaming.ts +1 -1
- package/src/activities/execute-deep-agent/v3-status-builder.ts +1 -1
- package/src/shared/__tests__/mcp-oauth-detect.test.ts +147 -0
- package/src/shared/execution-status-writer.ts +56 -0
- package/src/shared/mcp-oauth-detect.ts +112 -0
- package/src/shared/workspace/__tests__/writeback-coordinator.integration.test.ts +230 -0
- package/src/shared/workspace/__tests__/writeback-coordinator.test.ts +477 -0
- package/src/{activities/execute-deep-agent → shared/workspace}/writeback-coordinator.ts +206 -94
- package/dist/activities/execute-deep-agent/execution-status-writer.d.ts +0 -17
- package/dist/activities/execute-deep-agent/execution-status-writer.js +0 -9
- package/dist/activities/execute-deep-agent/execution-status-writer.js.map +0 -1
- package/dist/activities/execute-deep-agent/writeback-coordinator.d.ts +0 -71
- package/dist/activities/execute-deep-agent/writeback-coordinator.js +0 -299
- package/dist/activities/execute-deep-agent/writeback-coordinator.js.map +0 -1
- package/src/activities/execute-deep-agent/__tests__/writeback-coordinator.test.ts +0 -426
- package/src/activities/execute-deep-agent/execution-status-writer.ts +0 -19
|
@@ -1,299 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Incremental git write-back coordinator for workspace entries.
|
|
3
|
-
*
|
|
4
|
-
* During agent execution, each file-modifying tool call triggers an
|
|
5
|
-
* incremental commit-and-push cycle for the affected git workspace.
|
|
6
|
-
* The first cycle creates the branch and PR; subsequent cycles add
|
|
7
|
-
* commits to the same branch — the PR updates automatically on GitHub.
|
|
8
|
-
*
|
|
9
|
-
* DD-5: Incremental writeback, not batch.
|
|
10
|
-
*
|
|
11
|
-
* Lifecycle:
|
|
12
|
-
* 1. Created after workspace provisioning in index.ts.
|
|
13
|
-
* 2. `onFileModified(path)` called from streaming on each write/edit tool end.
|
|
14
|
-
* 3. `finalize()` called from post-stream as a safety net.
|
|
15
|
-
*
|
|
16
|
-
* Concurrency: one mutex per workspace entry serializes git operations.
|
|
17
|
-
*/
|
|
18
|
-
import { create } from "@bufbuild/protobuf";
|
|
19
|
-
import { WorkspaceWriteBackSchema, } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/writeback_pb";
|
|
20
|
-
import { WorkspaceWriteBackPhase, } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/writeback_pb";
|
|
21
|
-
import { GitWriteBackMode } from "@stigmer/protos/ai/stigmer/agentic/session/v1/enum_pb";
|
|
22
|
-
import { SourceType } from "../../shared/workspace/types.js";
|
|
23
|
-
import { gitCommitAsAgent } from "../../shared/workspace/git-identity.js";
|
|
24
|
-
const WRITE_BACK_ENABLED_MODES = new Set([
|
|
25
|
-
GitWriteBackMode.GIT_WRITE_BACK_MODE_UNSPECIFIED,
|
|
26
|
-
GitWriteBackMode.GIT_WRITE_BACK_BRANCH_AND_PR,
|
|
27
|
-
]);
|
|
28
|
-
export class WriteBackCoordinator {
|
|
29
|
-
statusWriter;
|
|
30
|
-
executionId;
|
|
31
|
-
workspaceBackend;
|
|
32
|
-
shortId;
|
|
33
|
-
branchName;
|
|
34
|
-
eligible = new Map();
|
|
35
|
-
state = new Map();
|
|
36
|
-
locks = new Map();
|
|
37
|
-
constructor(opts) {
|
|
38
|
-
this.statusWriter = opts.statusWriter;
|
|
39
|
-
this.executionId = opts.executionId;
|
|
40
|
-
this.workspaceBackend = opts.workspaceBackend;
|
|
41
|
-
this.shortId = opts.executionId.slice(0, 8);
|
|
42
|
-
this.branchName = `stigmer/${this.shortId}`;
|
|
43
|
-
this.initEligibleEntries(opts.provisionResults, opts.workspaceEntries);
|
|
44
|
-
}
|
|
45
|
-
get hasEligibleEntries() {
|
|
46
|
-
return this.eligible.size > 0;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Called after a file-modifying tool completes. Resolves the path to
|
|
50
|
-
* a workspace entry and runs an incremental commit/push cycle.
|
|
51
|
-
* Fire-and-forget: errors are logged, never thrown.
|
|
52
|
-
*/
|
|
53
|
-
async onFileModified(path) {
|
|
54
|
-
try {
|
|
55
|
-
const entryName = this.resolveEntry(path);
|
|
56
|
-
if (!entryName)
|
|
57
|
-
return;
|
|
58
|
-
await this.withLock(entryName, () => this.incrementalWriteBack(entryName));
|
|
59
|
-
}
|
|
60
|
-
catch (err) {
|
|
61
|
-
console.warn(`[WriteBack] execution=${this.executionId} — ` +
|
|
62
|
-
`onFileModified error for '${path}': ${err}`);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Post-execution safety net. Checks every eligible workspace entry
|
|
67
|
-
* for remaining uncommitted changes and commits/pushes them.
|
|
68
|
-
*/
|
|
69
|
-
async finalize() {
|
|
70
|
-
for (const entryName of this.eligible.keys()) {
|
|
71
|
-
try {
|
|
72
|
-
await this.withLock(entryName, () => this.incrementalWriteBack(entryName));
|
|
73
|
-
}
|
|
74
|
-
catch (err) {
|
|
75
|
-
console.warn(`[WriteBack] execution=${this.executionId} entry=${entryName} — ` +
|
|
76
|
-
`finalize error: ${err}`);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
// ── Initialization ──────────────────────────────────────────────────
|
|
81
|
-
initEligibleEntries(provisionResults, workspaceEntries) {
|
|
82
|
-
const modeMap = new Map();
|
|
83
|
-
for (const entry of workspaceEntries) {
|
|
84
|
-
const source = entry.source;
|
|
85
|
-
if (source?.source.case === "gitRepo") {
|
|
86
|
-
modeMap.set(entry.name, source.source.value.writeBackMode);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
for (const pr of provisionResults) {
|
|
90
|
-
if (pr.sourceType !== SourceType.GIT_REPO)
|
|
91
|
-
continue;
|
|
92
|
-
if (!pr.gitMetadata)
|
|
93
|
-
continue;
|
|
94
|
-
if (!pr.gitMetadata.gitCredentialsConfigured)
|
|
95
|
-
continue;
|
|
96
|
-
const mode = modeMap.get(pr.entryName) ?? GitWriteBackMode.GIT_WRITE_BACK_MODE_UNSPECIFIED;
|
|
97
|
-
if (!WRITE_BACK_ENABLED_MODES.has(mode))
|
|
98
|
-
continue;
|
|
99
|
-
this.eligible.set(pr.entryName, {
|
|
100
|
-
provisionResult: pr,
|
|
101
|
-
baseBranch: pr.gitMetadata.branch,
|
|
102
|
-
rootDir: pr.rootDir,
|
|
103
|
-
entryName: pr.entryName,
|
|
104
|
-
});
|
|
105
|
-
this.state.set(pr.entryName, {
|
|
106
|
-
branchCreated: false,
|
|
107
|
-
prCreated: false,
|
|
108
|
-
prUrl: "",
|
|
109
|
-
prNumber: 0,
|
|
110
|
-
commitCount: 0,
|
|
111
|
-
lastCommitSha: "",
|
|
112
|
-
githubToken: "",
|
|
113
|
-
githubOwner: "",
|
|
114
|
-
githubRepo: "",
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
if (this.eligible.size > 0) {
|
|
118
|
-
console.log(`[WriteBack] execution=${this.executionId} — coordinator initialized with ` +
|
|
119
|
-
`${this.eligible.size} eligible workspace(s): ${[...this.eligible.keys()].join(", ")}`);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
// ── Path Resolution ─────────────────────────────────────────────────
|
|
123
|
-
resolveEntry(path) {
|
|
124
|
-
if (this.eligible.size === 0)
|
|
125
|
-
return null;
|
|
126
|
-
if (this.eligible.size === 1)
|
|
127
|
-
return this.eligible.keys().next().value;
|
|
128
|
-
const normalized = path.replace(/^\/+/, "");
|
|
129
|
-
for (const entryName of this.eligible.keys()) {
|
|
130
|
-
if (normalized.startsWith(entryName + "/") || normalized === entryName) {
|
|
131
|
-
return entryName;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
return null;
|
|
135
|
-
}
|
|
136
|
-
// ── Core Incremental Write-Back ─────────────────────────────────────
|
|
137
|
-
async incrementalWriteBack(entryName) {
|
|
138
|
-
const entry = this.eligible.get(entryName);
|
|
139
|
-
const entryState = this.state.get(entryName);
|
|
140
|
-
const rootDir = entry.rootDir;
|
|
141
|
-
const exec = async (cmd) => {
|
|
142
|
-
return this.workspaceBackend.execute(`cd ${rootDir} && ${cmd}`);
|
|
143
|
-
};
|
|
144
|
-
let mutationStarted = false;
|
|
145
|
-
try {
|
|
146
|
-
const hasChanges = await this.hasChanges(exec);
|
|
147
|
-
if (!hasChanges)
|
|
148
|
-
return;
|
|
149
|
-
mutationStarted = true;
|
|
150
|
-
if (!entryState.branchCreated) {
|
|
151
|
-
await this.createBranch(entryName, entryState, exec);
|
|
152
|
-
}
|
|
153
|
-
const commitMsg = `agent changes (${entryState.commitCount + 1})`;
|
|
154
|
-
await this.commitAndPush(entryName, entryState, exec, commitMsg);
|
|
155
|
-
if (!entryState.prCreated) {
|
|
156
|
-
await this.createPr(entryName, entryState, entry, exec);
|
|
157
|
-
}
|
|
158
|
-
await this.updateStatus(entryName, entryState, entry, exec);
|
|
159
|
-
}
|
|
160
|
-
catch (err) {
|
|
161
|
-
console.warn(`[WriteBack] execution=${this.executionId} entry=${entryName} — ` +
|
|
162
|
-
`incremental error: ${err}`);
|
|
163
|
-
if (!mutationStarted)
|
|
164
|
-
return;
|
|
165
|
-
const wb = create(WorkspaceWriteBackSchema, {
|
|
166
|
-
workspaceEntryName: entryName,
|
|
167
|
-
baseBranch: entry.baseBranch,
|
|
168
|
-
branchName: entryState.branchCreated ? this.branchName : "",
|
|
169
|
-
phase: WorkspaceWriteBackPhase.WORKSPACE_WRITE_BACK_FAILED,
|
|
170
|
-
error: String(err),
|
|
171
|
-
});
|
|
172
|
-
if (entryState.prCreated) {
|
|
173
|
-
wb.pullRequestUrl = entryState.prUrl;
|
|
174
|
-
wb.pullRequestNumber = entryState.prNumber;
|
|
175
|
-
}
|
|
176
|
-
this.statusWriter.addWriteBack(wb);
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
// ── Git Operations ──────────────────────────────────────────────────
|
|
180
|
-
async hasChanges(exec) {
|
|
181
|
-
const diff = await exec("git diff --stat").catch(() => "");
|
|
182
|
-
const staged = await exec("git diff --cached --stat").catch(() => "");
|
|
183
|
-
if (diff.trim() || staged.trim())
|
|
184
|
-
return true;
|
|
185
|
-
const untracked = await exec("git ls-files --others --exclude-standard").catch(() => "");
|
|
186
|
-
return untracked.trim().length > 0;
|
|
187
|
-
}
|
|
188
|
-
async createBranch(entryName, entryState, exec) {
|
|
189
|
-
await exec(`git checkout -b ${this.branchName}`);
|
|
190
|
-
entryState.branchCreated = true;
|
|
191
|
-
console.log(`[WriteBack] execution=${this.executionId} entry=${entryName} — ` +
|
|
192
|
-
`created branch ${this.branchName}`);
|
|
193
|
-
}
|
|
194
|
-
async commitAndPush(entryName, entryState, exec, commitMsg) {
|
|
195
|
-
await exec("git add -A");
|
|
196
|
-
// Committed as the agent identity: the cloud sandbox has no git identity
|
|
197
|
-
// configured (a bare commit fails with "Author identity unknown"), and in
|
|
198
|
-
// local mode the agent's work should not be attributed to the host user.
|
|
199
|
-
await exec(gitCommitAsAgent(commitMsg));
|
|
200
|
-
entryState.commitCount++;
|
|
201
|
-
const shaOutput = await exec("git rev-parse HEAD");
|
|
202
|
-
entryState.lastCommitSha = shaOutput.trim();
|
|
203
|
-
if (entryState.commitCount === 1) {
|
|
204
|
-
await exec(`git push -u origin ${this.branchName}`);
|
|
205
|
-
}
|
|
206
|
-
else {
|
|
207
|
-
await exec("git push");
|
|
208
|
-
}
|
|
209
|
-
console.log(`[WriteBack] execution=${this.executionId} entry=${entryName} — ` +
|
|
210
|
-
`commit #${entryState.commitCount} pushed (sha=${entryState.lastCommitSha.slice(0, 12)})`);
|
|
211
|
-
}
|
|
212
|
-
async createPr(entryName, entryState, entry, _exec) {
|
|
213
|
-
const meta = entry.provisionResult.gitMetadata;
|
|
214
|
-
const { owner, repo } = parseGithubRepo(meta.repoUrl);
|
|
215
|
-
if (!entryState.githubToken) {
|
|
216
|
-
entryState.githubToken = extractGithubToken(meta.repoUrl);
|
|
217
|
-
entryState.githubOwner = owner;
|
|
218
|
-
entryState.githubRepo = repo;
|
|
219
|
-
}
|
|
220
|
-
const prTitle = `Agent changes (${this.shortId})`;
|
|
221
|
-
const prBody = `Automated pull request from Stigmer agent execution.\n\n` +
|
|
222
|
-
`**Execution:** \`${this.executionId}\`\n` +
|
|
223
|
-
`**Workspace:** \`${entryName}\`\n`;
|
|
224
|
-
const resp = await fetch(`https://api.github.com/repos/${entryState.githubOwner}/${entryState.githubRepo}/pulls`, {
|
|
225
|
-
method: "POST",
|
|
226
|
-
headers: {
|
|
227
|
-
"Authorization": `Bearer ${entryState.githubToken}`,
|
|
228
|
-
"Accept": "application/vnd.github+json",
|
|
229
|
-
"Content-Type": "application/json",
|
|
230
|
-
},
|
|
231
|
-
body: JSON.stringify({
|
|
232
|
-
title: prTitle,
|
|
233
|
-
body: prBody,
|
|
234
|
-
head: this.branchName,
|
|
235
|
-
base: entry.baseBranch,
|
|
236
|
-
}),
|
|
237
|
-
});
|
|
238
|
-
if (!resp.ok) {
|
|
239
|
-
const body = await resp.text();
|
|
240
|
-
throw new Error(`GitHub API error (HTTP ${resp.status}): ${body}`);
|
|
241
|
-
}
|
|
242
|
-
const data = await resp.json();
|
|
243
|
-
entryState.prCreated = true;
|
|
244
|
-
entryState.prUrl = data.html_url ?? "";
|
|
245
|
-
entryState.prNumber = data.number ?? 0;
|
|
246
|
-
console.log(`[WriteBack] execution=${this.executionId} entry=${entryName} — ` +
|
|
247
|
-
`PR #${entryState.prNumber} created: ${entryState.prUrl}`);
|
|
248
|
-
}
|
|
249
|
-
async updateStatus(entryName, entryState, entry, exec) {
|
|
250
|
-
const summaryOutput = await exec(`git diff --stat ${entry.baseBranch}...HEAD`).catch(() => "");
|
|
251
|
-
const phase = entryState.prCreated
|
|
252
|
-
? WorkspaceWriteBackPhase.WORKSPACE_WRITE_BACK_PR_CREATED
|
|
253
|
-
: WorkspaceWriteBackPhase.WORKSPACE_WRITE_BACK_PUSHED;
|
|
254
|
-
const wb = create(WorkspaceWriteBackSchema, {
|
|
255
|
-
workspaceEntryName: entryName,
|
|
256
|
-
branchName: this.branchName,
|
|
257
|
-
baseBranch: entry.baseBranch,
|
|
258
|
-
commitSha: entryState.lastCommitSha,
|
|
259
|
-
pullRequestUrl: entryState.prUrl,
|
|
260
|
-
pullRequestNumber: entryState.prNumber,
|
|
261
|
-
diffSummary: summaryOutput.trim(),
|
|
262
|
-
phase,
|
|
263
|
-
});
|
|
264
|
-
this.statusWriter.addWriteBack(wb);
|
|
265
|
-
}
|
|
266
|
-
// ── Concurrency ─────────────────────────────────────────────────────
|
|
267
|
-
async withLock(entryName, fn) {
|
|
268
|
-
const existing = this.locks.get(entryName) ?? Promise.resolve();
|
|
269
|
-
const next = existing.then(fn, fn);
|
|
270
|
-
this.locks.set(entryName, next);
|
|
271
|
-
await next;
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
// ── Helpers ───────────────────────────────────────────────────────────
|
|
275
|
-
/**
|
|
276
|
-
* Extract GitHub owner and repo from a clone URL.
|
|
277
|
-
* Supports HTTPS (with or without .git) and SSH formats.
|
|
278
|
-
*/
|
|
279
|
-
export function parseGithubRepo(repoUrl) {
|
|
280
|
-
const httpsMatch = repoUrl.match(/github\.com[/:]([^/]+)\/([^/.]+?)(?:\.git)?$/);
|
|
281
|
-
if (httpsMatch) {
|
|
282
|
-
return { owner: httpsMatch[1], repo: httpsMatch[2] };
|
|
283
|
-
}
|
|
284
|
-
throw new Error(`Cannot parse GitHub owner/repo from URL: ${repoUrl}`);
|
|
285
|
-
}
|
|
286
|
-
/**
|
|
287
|
-
* Extract a GitHub token from an HTTPS clone URL that has credentials embedded.
|
|
288
|
-
* Format: https://{token}@github.com/...
|
|
289
|
-
*/
|
|
290
|
-
export function extractGithubToken(repoUrl) {
|
|
291
|
-
const match = repoUrl.match(/https?:\/\/([^@]+)@github\.com/);
|
|
292
|
-
if (match)
|
|
293
|
-
return match[1];
|
|
294
|
-
const envToken = process.env.GITHUB_TOKEN;
|
|
295
|
-
if (envToken)
|
|
296
|
-
return envToken;
|
|
297
|
-
throw new Error("Cannot extract GitHub token from repo URL and GITHUB_TOKEN is not set");
|
|
298
|
-
}
|
|
299
|
-
//# sourceMappingURL=writeback-coordinator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"writeback-coordinator.js","sourceRoot":"","sources":["../../../src/activities/execute-deep-agent/writeback-coordinator.ts"],"names":[],"mappings":"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"}
|