@devcxl/opencode-cabbage 0.2.1 → 0.3.1
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/assets/agents/dev-lifecycle.md +23 -19
- package/assets/agents/team/architect.md +14 -0
- package/assets/agents/team/backend.md +14 -0
- package/assets/agents/team/frontend.md +14 -0
- package/assets/agents/team/goal-verify.md +54 -0
- package/assets/agents/team/reviewer.md +10 -0
- package/assets/skills/flow-code/SKILL.md +13 -0
- package/assets/skills/flow-review/SKILL.md +7 -0
- package/assets/skills/flow-tasks/SKILL.md +42 -0
- package/assets/skills/flow-tdd/SKILL.md +208 -0
- package/dist/flowrun/adapter.d.ts +49 -0
- package/dist/flowrun/adapter.js +293 -0
- package/dist/flowrun/adapter.js.map +1 -0
- package/dist/flowrun/ci.d.ts +64 -0
- package/dist/flowrun/ci.js +184 -0
- package/dist/flowrun/ci.js.map +1 -0
- package/dist/flowrun/coverage.d.ts +70 -0
- package/dist/flowrun/coverage.js +207 -0
- package/dist/flowrun/coverage.js.map +1 -0
- package/dist/flowrun/digest.d.ts +17 -0
- package/dist/flowrun/digest.js +301 -0
- package/dist/flowrun/digest.js.map +1 -0
- package/dist/flowrun/evaluator.d.ts +38 -0
- package/dist/flowrun/evaluator.js +185 -0
- package/dist/flowrun/evaluator.js.map +1 -0
- package/dist/flowrun/gate.d.ts +10 -0
- package/dist/flowrun/gate.js +12 -3
- package/dist/flowrun/gate.js.map +1 -1
- package/dist/flowrun/github.d.ts +13 -9
- package/dist/flowrun/github.js +46 -26
- package/dist/flowrun/github.js.map +1 -1
- package/dist/flowrun/index.d.ts +10 -3
- package/dist/flowrun/index.js +9 -2
- package/dist/flowrun/index.js.map +1 -1
- package/dist/flowrun/merge.d.ts +35 -2
- package/dist/flowrun/merge.js +72 -8
- package/dist/flowrun/merge.js.map +1 -1
- package/dist/flowrun/migration.d.ts +11 -0
- package/dist/flowrun/migration.js +276 -0
- package/dist/flowrun/migration.js.map +1 -0
- package/dist/flowrun/state.d.ts +79 -0
- package/dist/flowrun/state.js +363 -0
- package/dist/flowrun/state.js.map +1 -0
- package/dist/flowrun/transitions.d.ts +66 -0
- package/dist/flowrun/transitions.js +168 -0
- package/dist/flowrun/transitions.js.map +1 -0
- package/dist/flowrun/types.d.ts +279 -4
- package/dist/flowrun/types.js +2 -1
- package/dist/flowrun/types.js.map +1 -1
- package/dist/flowrun/validator.d.ts +15 -5
- package/dist/flowrun/validator.js +117 -5
- package/dist/flowrun/validator.js.map +1 -1
- package/dist/plugin/agents.d.ts +4 -0
- package/dist/plugin/agents.js +19 -0
- package/dist/plugin/agents.js.map +1 -1
- package/dist/plugin/broker.d.ts +73 -0
- package/dist/plugin/broker.js +140 -0
- package/dist/plugin/broker.js.map +1 -0
- package/dist/plugin/goal.d.ts +39 -1
- package/dist/plugin/goal.js +80 -1
- package/dist/plugin/goal.js.map +1 -1
- package/dist/plugin/prompt-lint.js +129 -0
- package/dist/plugin/prompt-lint.js.map +1 -1
- package/dist/plugin/server.js +241 -11
- package/dist/plugin/server.js.map +1 -1
- package/dist/plugin/shell.d.ts +37 -0
- package/dist/plugin/shell.js +144 -0
- package/dist/plugin/shell.js.map +1 -0
- package/dist/plugin/tdd-tool.d.ts +62 -0
- package/dist/plugin/tdd-tool.js +336 -0
- package/dist/plugin/tdd-tool.js.map +1 -0
- package/dist/util/gh.d.ts +8 -1
- package/dist/util/gh.js +10 -2
- package/dist/util/gh.js.map +1 -1
- package/package.json +2 -1
package/dist/plugin/server.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { tool } from "@opencode-ai/plugin/tool";
|
|
1
2
|
import path from "node:path";
|
|
2
3
|
import { readFile, writeFile, mkdir } from "node:fs/promises";
|
|
3
4
|
import { existsSync } from "node:fs";
|
|
@@ -6,7 +7,11 @@ import { initBootstrap, getBootstrapContent } from "./bootstrap.js";
|
|
|
6
7
|
import { loadCommands } from "./commands.js";
|
|
7
8
|
import { setupSkillsDir } from "./skills.js";
|
|
8
9
|
import { loadAgents } from "./agents.js";
|
|
9
|
-
import {
|
|
10
|
+
import { createIsolatedShellEnv, detectAmbientCredentials } from "./shell.js";
|
|
11
|
+
import { createGoalClient, createGoalTool, readGoal, writeGoal, bindFlowRunRef, readFlowRunRef, checkFlowRunBlockers, MAX_CONTINUATIONS, continuationPrompt, formatGoal } from "./goal.js";
|
|
12
|
+
import { FlowBroker } from "./broker.js";
|
|
13
|
+
import { flowRunStart, flowStageStart, flowStageComplete, flowTaskStart, flowRunFinalize, } from "../flowrun/transitions.js";
|
|
14
|
+
import { readFlowRun } from "../flowrun/github.js";
|
|
10
15
|
const abortedSessions = new Set();
|
|
11
16
|
const errorRetryCount = new Map();
|
|
12
17
|
const COMPACTION_THRESHOLD = 20;
|
|
@@ -136,6 +141,216 @@ function startPeriodicCleanup() {
|
|
|
136
141
|
errorRetryCount.clear();
|
|
137
142
|
}, ABORTED_SESSION_CLEANUP_INTERVAL);
|
|
138
143
|
}
|
|
144
|
+
// ─── Flow Control Tool ───
|
|
145
|
+
function createFlowControlTool(broker, goalClient) {
|
|
146
|
+
return tool({
|
|
147
|
+
description: `Control the FlowRun lifecycle: start a FlowRun, transition stages, start tasks, and finalize completed runs.
|
|
148
|
+
|
|
149
|
+
Operations:
|
|
150
|
+
- run-start: Transition FlowRun from planned → running. Binds Goal to FlowRun.
|
|
151
|
+
- stage-start: Start a stage (requirements/design/tasks/code). Requires prerequisites met.
|
|
152
|
+
- stage-complete: Complete a stage (requirements/design/tasks). Requires all checks pass.
|
|
153
|
+
- task-start: Start a task (pending/ready → running). Freezes TDD policy and sets execution binding.
|
|
154
|
+
- run-finalize: Mark code→test→review→merge stages as pass, set FlowRun to completed. Requires all Tasks merged. Idempotent.`,
|
|
155
|
+
args: {
|
|
156
|
+
op: tool.schema.enum(["run-start", "stage-start", "stage-complete", "task-start", "run-finalize"]).describe("Flow control operation"),
|
|
157
|
+
parent_issue_number: tool.schema.number().describe("Parent GitHub Issue number containing the FlowRun"),
|
|
158
|
+
stage: tool.schema.enum(["requirements", "design", "tasks", "code", "test", "review", "merge"]).optional().describe("Stage name (for stage-start/stage-complete)"),
|
|
159
|
+
task_id: tool.schema.string().optional().describe("Task ID (for task-start)"),
|
|
160
|
+
execution_binding: tool.schema.object({
|
|
161
|
+
branch: tool.schema.string(),
|
|
162
|
+
base_sha: tool.schema.string(),
|
|
163
|
+
start_head_sha: tool.schema.string(),
|
|
164
|
+
worktree_id: tool.schema.string(),
|
|
165
|
+
session_id: tool.schema.string(),
|
|
166
|
+
}).optional().describe("Execution binding for task-start"),
|
|
167
|
+
tdd_policy_json: tool.schema.string().optional().describe("JSON string of frozen TDD policy (for task-start)"),
|
|
168
|
+
},
|
|
169
|
+
async execute(args, ctx) {
|
|
170
|
+
const sessionID = ctx.sessionID;
|
|
171
|
+
const op = args.op;
|
|
172
|
+
const parentIssueNumber = args.parent_issue_number;
|
|
173
|
+
try {
|
|
174
|
+
switch (op) {
|
|
175
|
+
case "run-start":
|
|
176
|
+
return handleRunStart(broker, goalClient, parentIssueNumber, sessionID);
|
|
177
|
+
case "stage-start":
|
|
178
|
+
return handleStageStart(broker, parentIssueNumber, args.stage);
|
|
179
|
+
case "stage-complete":
|
|
180
|
+
return handleStageComplete(broker, parentIssueNumber, args.stage);
|
|
181
|
+
case "task-start":
|
|
182
|
+
return handleTaskStart(broker, parentIssueNumber, args.task_id, args.execution_binding, args.tdd_policy_json);
|
|
183
|
+
case "run-finalize":
|
|
184
|
+
return handleRunFinalize(broker, parentIssueNumber);
|
|
185
|
+
default:
|
|
186
|
+
return errorResponse("UNKNOWN_OP", `Unknown operation: "${op}"`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
catch (err) {
|
|
190
|
+
return errorResponse("INTERNAL_ERROR", String(err));
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
function okResponse(overrides = {}) {
|
|
196
|
+
const resp = { ok: true, ...overrides };
|
|
197
|
+
return JSON.stringify(resp, null, 2);
|
|
198
|
+
}
|
|
199
|
+
function errorResponse(code, message) {
|
|
200
|
+
const resp = { ok: false, error: { code, message } };
|
|
201
|
+
return JSON.stringify(resp, null, 2);
|
|
202
|
+
}
|
|
203
|
+
async function handleRunStart(broker, goalClient, parentIssueNumber, sessionID) {
|
|
204
|
+
// 通过 broker 执行状态迁移
|
|
205
|
+
const writeResult = await broker.writeFlowRunWithLock(parentIssueNumber, (flowRun) => {
|
|
206
|
+
const res = flowRunStart(flowRun);
|
|
207
|
+
if (!res.ok) {
|
|
208
|
+
return { flowRun, result: res.error, shouldPersist: false };
|
|
209
|
+
}
|
|
210
|
+
return { flowRun: res.value, result: res.value.status, shouldPersist: true };
|
|
211
|
+
});
|
|
212
|
+
if (!writeResult.ok) {
|
|
213
|
+
return errorResponse(writeResult.code, writeResult.message);
|
|
214
|
+
}
|
|
215
|
+
if (!writeResult.persisted) {
|
|
216
|
+
// 状态迁移被拒绝(如已是 running)
|
|
217
|
+
return errorResponse("INVALID_TRANSITION", "FlowRun is not in planned state");
|
|
218
|
+
}
|
|
219
|
+
// 绑定 Goal → FlowRun
|
|
220
|
+
const actualFlowRunId = writeResult.flowRun.flowRunId;
|
|
221
|
+
const bindResult = await bindFlowRunRef(goalClient, sessionID, {
|
|
222
|
+
repo: writeResult.flowRun.repo,
|
|
223
|
+
parentIssueNumber,
|
|
224
|
+
flowRunId: actualFlowRunId,
|
|
225
|
+
});
|
|
226
|
+
if (!bindResult.ok) {
|
|
227
|
+
return errorResponse(bindResult.code, bindResult.message);
|
|
228
|
+
}
|
|
229
|
+
return okResponse({
|
|
230
|
+
flowRunStatus: writeResult.flowRun.status,
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
async function handleStageStart(broker, parentIssueNumber, stageName) {
|
|
234
|
+
if (!stageName) {
|
|
235
|
+
return errorResponse("POLICY_INVALID", "stage is required for stage-start");
|
|
236
|
+
}
|
|
237
|
+
const writeResult = await broker.writeFlowRunWithLock(parentIssueNumber, (flowRun) => {
|
|
238
|
+
const res = flowStageStart(flowRun, stageName);
|
|
239
|
+
if (!res.ok) {
|
|
240
|
+
return { flowRun, result: res.error, shouldPersist: false };
|
|
241
|
+
}
|
|
242
|
+
return {
|
|
243
|
+
flowRun: res.value,
|
|
244
|
+
result: { stage: stageName, status: res.value.stages[stageName].status },
|
|
245
|
+
shouldPersist: true,
|
|
246
|
+
};
|
|
247
|
+
});
|
|
248
|
+
if (!writeResult.ok) {
|
|
249
|
+
return errorResponse(writeResult.code, writeResult.message);
|
|
250
|
+
}
|
|
251
|
+
if (!writeResult.persisted && writeResult.result && typeof writeResult.result === "object" && "code" in writeResult.result) {
|
|
252
|
+
const err = writeResult.result;
|
|
253
|
+
return errorResponse(err.code, err.message);
|
|
254
|
+
}
|
|
255
|
+
return okResponse({
|
|
256
|
+
flowRunStatus: writeResult.flowRun.status,
|
|
257
|
+
stage: writeResult.result,
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
async function handleStageComplete(broker, parentIssueNumber, stageName) {
|
|
261
|
+
if (!stageName) {
|
|
262
|
+
return errorResponse("POLICY_INVALID", "stage is required for stage-complete");
|
|
263
|
+
}
|
|
264
|
+
const writeResult = await broker.writeFlowRunWithLock(parentIssueNumber, (flowRun) => {
|
|
265
|
+
const res = flowStageComplete(flowRun, stageName);
|
|
266
|
+
if (!res.ok) {
|
|
267
|
+
return { flowRun, result: res.error, shouldPersist: false };
|
|
268
|
+
}
|
|
269
|
+
return {
|
|
270
|
+
flowRun: res.value,
|
|
271
|
+
result: { stage: stageName, status: res.value.stages[stageName].status },
|
|
272
|
+
shouldPersist: true,
|
|
273
|
+
};
|
|
274
|
+
});
|
|
275
|
+
if (!writeResult.ok) {
|
|
276
|
+
return errorResponse(writeResult.code, writeResult.message);
|
|
277
|
+
}
|
|
278
|
+
if (!writeResult.persisted && writeResult.result && typeof writeResult.result === "object" && "code" in writeResult.result) {
|
|
279
|
+
const err = writeResult.result;
|
|
280
|
+
return errorResponse(err.code, err.message);
|
|
281
|
+
}
|
|
282
|
+
return okResponse({
|
|
283
|
+
flowRunStatus: writeResult.flowRun.status,
|
|
284
|
+
stage: writeResult.result,
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
async function handleTaskStart(broker, parentIssueNumber, taskId, executionBinding, tddPolicyJson) {
|
|
288
|
+
if (!taskId) {
|
|
289
|
+
return errorResponse("POLICY_INVALID", "task_id is required for task-start");
|
|
290
|
+
}
|
|
291
|
+
if (!executionBinding) {
|
|
292
|
+
return errorResponse("POLICY_INVALID", "execution_binding is required for task-start");
|
|
293
|
+
}
|
|
294
|
+
// 解析 frozen policy
|
|
295
|
+
let tddPolicy = undefined;
|
|
296
|
+
if (tddPolicyJson) {
|
|
297
|
+
try {
|
|
298
|
+
tddPolicy = JSON.parse(tddPolicyJson);
|
|
299
|
+
}
|
|
300
|
+
catch {
|
|
301
|
+
return errorResponse("POLICY_INVALID", "tdd_policy_json is not valid JSON");
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
const writeResult = await broker.writeFlowRunWithLock(parentIssueNumber, (flowRun) => {
|
|
305
|
+
const res = flowTaskStart(flowRun, taskId, executionBinding, tddPolicy);
|
|
306
|
+
if (!res.ok) {
|
|
307
|
+
return { flowRun, result: res.error, shouldPersist: false };
|
|
308
|
+
}
|
|
309
|
+
return {
|
|
310
|
+
flowRun: res.value.flowRun,
|
|
311
|
+
result: {
|
|
312
|
+
taskId,
|
|
313
|
+
status: res.value.task.status,
|
|
314
|
+
executionBinding: res.value.task.executionBinding,
|
|
315
|
+
},
|
|
316
|
+
shouldPersist: true,
|
|
317
|
+
};
|
|
318
|
+
});
|
|
319
|
+
if (!writeResult.ok) {
|
|
320
|
+
return errorResponse(writeResult.code, writeResult.message);
|
|
321
|
+
}
|
|
322
|
+
if (!writeResult.persisted && writeResult.result && typeof writeResult.result === "object" && "code" in writeResult.result) {
|
|
323
|
+
const err = writeResult.result;
|
|
324
|
+
return errorResponse(err.code, err.message);
|
|
325
|
+
}
|
|
326
|
+
return okResponse({
|
|
327
|
+
flowRunStatus: writeResult.flowRun.status,
|
|
328
|
+
task: writeResult.result,
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
async function handleRunFinalize(broker, parentIssueNumber) {
|
|
332
|
+
const writeResult = await broker.writeFlowRunWithLock(parentIssueNumber, (flowRun) => {
|
|
333
|
+
const res = flowRunFinalize(flowRun);
|
|
334
|
+
if (!res.ok) {
|
|
335
|
+
return { flowRun, result: res.error, shouldPersist: false };
|
|
336
|
+
}
|
|
337
|
+
return {
|
|
338
|
+
flowRun: res.value,
|
|
339
|
+
result: { status: res.value.status, completedAt: res.value.completedAt },
|
|
340
|
+
shouldPersist: true,
|
|
341
|
+
};
|
|
342
|
+
});
|
|
343
|
+
if (!writeResult.ok) {
|
|
344
|
+
return errorResponse(writeResult.code, writeResult.message);
|
|
345
|
+
}
|
|
346
|
+
if (!writeResult.persisted && writeResult.result && typeof writeResult.result === "object" && "code" in writeResult.result) {
|
|
347
|
+
const err = writeResult.result;
|
|
348
|
+
return errorResponse(err.code, err.message);
|
|
349
|
+
}
|
|
350
|
+
return okResponse({
|
|
351
|
+
flowRunStatus: writeResult.flowRun.status,
|
|
352
|
+
});
|
|
353
|
+
}
|
|
139
354
|
export function createOpencodeCabbage(packageRoot) {
|
|
140
355
|
return async (ctx, _options) => {
|
|
141
356
|
const sourceSkillsDir = path.join(packageRoot, "assets", "skills");
|
|
@@ -146,7 +361,20 @@ export function createOpencodeCabbage(packageRoot) {
|
|
|
146
361
|
const projectDir = ctx.worktree || ctx.directory;
|
|
147
362
|
const v1Client = ctx.client._client;
|
|
148
363
|
const goalClient = createGoalClient(ctx.serverUrl, v1Client);
|
|
149
|
-
const goalTool = createGoalTool(goalClient)
|
|
364
|
+
const goalTool = createGoalTool(goalClient, async (parentSessionID) => {
|
|
365
|
+
// 验证绑定的 FlowRun 是否已终态
|
|
366
|
+
const ref = await readFlowRunRef(goalClient, parentSessionID);
|
|
367
|
+
if (!ref)
|
|
368
|
+
return null; // 无 FlowRun 绑定,允许完成
|
|
369
|
+
// 读取 FlowRun 状态
|
|
370
|
+
const flowResult = await readFlowRun(ref.parentIssueNumber);
|
|
371
|
+
if (!flowResult.ok) {
|
|
372
|
+
return `Failed to read FlowRun #${ref.parentIssueNumber}: ${flowResult.code}`;
|
|
373
|
+
}
|
|
374
|
+
return checkFlowRunBlockers(flowResult.data.status);
|
|
375
|
+
});
|
|
376
|
+
const broker = new FlowBroker();
|
|
377
|
+
const flowControlTool = createFlowControlTool(broker, goalClient);
|
|
150
378
|
const agentsDir = path.join(packageRoot, "assets", "agents");
|
|
151
379
|
await initPrompts(packageRoot, projectDir);
|
|
152
380
|
await initBootstrap();
|
|
@@ -155,9 +383,15 @@ export function createOpencodeCabbage(packageRoot) {
|
|
|
155
383
|
return {
|
|
156
384
|
tool: {
|
|
157
385
|
goal: goalTool,
|
|
386
|
+
flow_control: flowControlTool,
|
|
158
387
|
},
|
|
159
388
|
config: async (rawConfig) => {
|
|
160
389
|
const config = rawConfig;
|
|
390
|
+
// ── Ambient credential 检测 ──
|
|
391
|
+
const ambientReport = detectAmbientCredentials();
|
|
392
|
+
if (ambientReport.hasWriteCredentials) {
|
|
393
|
+
console.warn("[cabbage] ⚠️ 检测到可用 GitHub 写凭证,Runtime enforcement 已降级为 advisory:", ambientReport.sources.map(s => s.location).join(", "));
|
|
394
|
+
}
|
|
161
395
|
config.skills = config.skills || {};
|
|
162
396
|
config.skills.paths = config.skills.paths || [];
|
|
163
397
|
if (!config.skills.paths.includes(skillsDir)) {
|
|
@@ -184,15 +418,11 @@ export function createOpencodeCabbage(packageRoot) {
|
|
|
184
418
|
mode: agent.mode,
|
|
185
419
|
color: agent.color,
|
|
186
420
|
prompt: agent.prompt,
|
|
187
|
-
tools: agent.tools ?? { read: true, bash: true,
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
mode: "subagent",
|
|
193
|
-
description: "Goal verification agent. Verifies completion independently.",
|
|
194
|
-
prompt: verifyAgentPrompt(),
|
|
195
|
-
tools: { read: true, bash: true, write: false, edit: false },
|
|
421
|
+
tools: agent.tools ?? { read: true, bash: true, edit: true },
|
|
422
|
+
permission: agent.permission,
|
|
423
|
+
shell: {
|
|
424
|
+
env: createIsolatedShellEnv(agent),
|
|
425
|
+
},
|
|
196
426
|
};
|
|
197
427
|
}
|
|
198
428
|
configureGoalTools(config);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/plugin/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/plugin/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { AgentEntry } from "./agents.js";
|
|
2
|
+
export interface AmbientCredentialSource {
|
|
3
|
+
source: string;
|
|
4
|
+
/** "env" | "config_file" | "credential_helper" */
|
|
5
|
+
kind: "env" | "config_file" | "credential_helper";
|
|
6
|
+
/** 具体位置(如 "GH_TOKEN" 或 "~/.config/gh/hosts.yml") */
|
|
7
|
+
location: string;
|
|
8
|
+
}
|
|
9
|
+
export interface AmbientCredentialReport {
|
|
10
|
+
hasWriteCredentials: boolean;
|
|
11
|
+
hasGitCredentialHelper: boolean;
|
|
12
|
+
sources: AmbientCredentialSource[];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* 检测宿主环境中的 GitHub 写凭证。
|
|
16
|
+
*
|
|
17
|
+
* 检查内容:
|
|
18
|
+
* - GH_TOKEN / GITHUB_TOKEN / GH_ENTERPRISE_TOKEN 环境变量
|
|
19
|
+
* - ~/.config/gh/hosts.yml(GitHub CLI OAuth token)
|
|
20
|
+
* - ~/.gitconfig 中的 credential helper
|
|
21
|
+
*
|
|
22
|
+
* 注意:这只能检测常见模式,不是完备的安全审计。
|
|
23
|
+
*/
|
|
24
|
+
export declare function detectAmbientCredentials(): AmbientCredentialReport;
|
|
25
|
+
/**
|
|
26
|
+
* 为 Worker agent 创建隔离 shell 环境变量。
|
|
27
|
+
*
|
|
28
|
+
* 隔离措施:
|
|
29
|
+
* - HOME 设为临时目录(避免访问宿主 ~/.ssh, ~/.gitconfig 等)
|
|
30
|
+
* - GH_CONFIG_DIR 设为临时目录下的隔离路径
|
|
31
|
+
* - GH_TOKEN / GITHUB_TOKEN 显式清空
|
|
32
|
+
* - GIT_CONFIG_PARAMETERS 不传递(避免继承宿主 git config)
|
|
33
|
+
*
|
|
34
|
+
* 重要:shell.env 只作为附加措施,不作为唯一隔离边界。
|
|
35
|
+
* 真正的权限控制来自 agent permission 字段 + ambient credential 检测。
|
|
36
|
+
*/
|
|
37
|
+
export declare function createIsolatedShellEnv(agent: AgentEntry): Record<string, string>;
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
// ─── 凭证检测 ───
|
|
5
|
+
const GITHUB_WRITE_TOKEN_PATTERNS = [
|
|
6
|
+
/^ghp_/, // classic PAT
|
|
7
|
+
/^github_pat_/, // fine-grained PAT
|
|
8
|
+
/^gho_/, // OAuth token
|
|
9
|
+
/^ghu_/, // user-to-server token
|
|
10
|
+
/^ghs_/, // server-to-server token
|
|
11
|
+
/^ghr_/, // refresh token
|
|
12
|
+
];
|
|
13
|
+
/**
|
|
14
|
+
* 检测 token 值是否看起来是 GitHub 写凭证。
|
|
15
|
+
*/
|
|
16
|
+
function looksLikeGithubToken(value) {
|
|
17
|
+
const trimmed = value.trim();
|
|
18
|
+
if (!trimmed)
|
|
19
|
+
return false;
|
|
20
|
+
return GITHUB_WRITE_TOKEN_PATTERNS.some(p => p.test(trimmed));
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 检测环境变量中的 GitHub API 凭证。
|
|
24
|
+
*/
|
|
25
|
+
function detectEnvTokens() {
|
|
26
|
+
const sources = [];
|
|
27
|
+
const keys = ["GH_TOKEN", "GITHUB_TOKEN", "GH_ENTERPRISE_TOKEN"];
|
|
28
|
+
for (const key of keys) {
|
|
29
|
+
const value = process.env[key];
|
|
30
|
+
if (value && looksLikeGithubToken(value)) {
|
|
31
|
+
sources.push({
|
|
32
|
+
source: key,
|
|
33
|
+
kind: "env",
|
|
34
|
+
location: `$${key}`,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return sources;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 检测 ~/.config/gh/hosts.yml 中的 oauth_token。
|
|
42
|
+
*/
|
|
43
|
+
function detectGhHostsConfig() {
|
|
44
|
+
const sources = [];
|
|
45
|
+
const home = process.env.HOME || os.homedir();
|
|
46
|
+
const hostsPath = path.join(home, ".config", "gh", "hosts.yml");
|
|
47
|
+
try {
|
|
48
|
+
if (!fs.existsSync(hostsPath))
|
|
49
|
+
return sources;
|
|
50
|
+
const content = fs.readFileSync(hostsPath, "utf8");
|
|
51
|
+
// 简单检测 oauth_token 字段
|
|
52
|
+
if (/oauth_token\s*:\s*\S+/.test(content)) {
|
|
53
|
+
sources.push({
|
|
54
|
+
source: "gh_hosts_config",
|
|
55
|
+
kind: "config_file",
|
|
56
|
+
location: hostsPath,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// 读取失败时静默忽略
|
|
62
|
+
}
|
|
63
|
+
return sources;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* 检测 git credential helper 配置。
|
|
67
|
+
* 检查 ~/.gitconfig 中是否配置了 credential.helper。
|
|
68
|
+
*/
|
|
69
|
+
function detectGitCredentialHelper() {
|
|
70
|
+
const sources = [];
|
|
71
|
+
const home = process.env.HOME || os.homedir();
|
|
72
|
+
const gitconfigPath = path.join(home, ".gitconfig");
|
|
73
|
+
let hasHelper = false;
|
|
74
|
+
try {
|
|
75
|
+
if (!fs.existsSync(gitconfigPath))
|
|
76
|
+
return { hasHelper, sources };
|
|
77
|
+
const content = fs.readFileSync(gitconfigPath, "utf8");
|
|
78
|
+
if (/credential\s*\]\s*\n\s*helper\s*=/.test(content) || /\[credential\s+"[^"]*"\]/.test(content)) {
|
|
79
|
+
hasHelper = true;
|
|
80
|
+
sources.push({
|
|
81
|
+
source: "git_credential_helper",
|
|
82
|
+
kind: "credential_helper",
|
|
83
|
+
location: gitconfigPath,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// 读取失败静默忽略
|
|
89
|
+
}
|
|
90
|
+
return { hasHelper, sources };
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* 检测宿主环境中的 GitHub 写凭证。
|
|
94
|
+
*
|
|
95
|
+
* 检查内容:
|
|
96
|
+
* - GH_TOKEN / GITHUB_TOKEN / GH_ENTERPRISE_TOKEN 环境变量
|
|
97
|
+
* - ~/.config/gh/hosts.yml(GitHub CLI OAuth token)
|
|
98
|
+
* - ~/.gitconfig 中的 credential helper
|
|
99
|
+
*
|
|
100
|
+
* 注意:这只能检测常见模式,不是完备的安全审计。
|
|
101
|
+
*/
|
|
102
|
+
export function detectAmbientCredentials() {
|
|
103
|
+
const envSources = detectEnvTokens();
|
|
104
|
+
const ghConfigSources = detectGhHostsConfig();
|
|
105
|
+
const { hasHelper, sources: helperSources } = detectGitCredentialHelper();
|
|
106
|
+
const allSources = [...envSources, ...ghConfigSources, ...helperSources];
|
|
107
|
+
const hasWriteCredentials = allSources.length > 0;
|
|
108
|
+
return {
|
|
109
|
+
hasWriteCredentials,
|
|
110
|
+
hasGitCredentialHelper: hasHelper,
|
|
111
|
+
sources: allSources,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
// ─── Shell 隔离 ───
|
|
115
|
+
/**
|
|
116
|
+
* 为 Worker agent 创建隔离 shell 环境变量。
|
|
117
|
+
*
|
|
118
|
+
* 隔离措施:
|
|
119
|
+
* - HOME 设为临时目录(避免访问宿主 ~/.ssh, ~/.gitconfig 等)
|
|
120
|
+
* - GH_CONFIG_DIR 设为临时目录下的隔离路径
|
|
121
|
+
* - GH_TOKEN / GITHUB_TOKEN 显式清空
|
|
122
|
+
* - GIT_CONFIG_PARAMETERS 不传递(避免继承宿主 git config)
|
|
123
|
+
*
|
|
124
|
+
* 重要:shell.env 只作为附加措施,不作为唯一隔离边界。
|
|
125
|
+
* 真正的权限控制来自 agent permission 字段 + ambient credential 检测。
|
|
126
|
+
*/
|
|
127
|
+
export function createIsolatedShellEnv(agent) {
|
|
128
|
+
const shellHome = fs.mkdtempSync(path.join(os.tmpdir(), "cabbage-shell-"));
|
|
129
|
+
const ghConfigDir = path.join(shellHome, ".config", "gh");
|
|
130
|
+
fs.mkdirSync(ghConfigDir, { recursive: true });
|
|
131
|
+
const env = {
|
|
132
|
+
HOME: shellHome,
|
|
133
|
+
GH_CONFIG_DIR: ghConfigDir,
|
|
134
|
+
};
|
|
135
|
+
// 清除所有 GitHub API token 环境变量
|
|
136
|
+
// shell.env 是附加措施 — 主要隔离由 agent permission 提供
|
|
137
|
+
env.GH_TOKEN = "";
|
|
138
|
+
env.GITHUB_TOKEN = "";
|
|
139
|
+
env.GH_ENTERPRISE_TOKEN = "";
|
|
140
|
+
// 不传递宿主 git config(隔离 HOME 已处理此问题,但显式清空更安全)
|
|
141
|
+
env.GIT_CONFIG_NOSYSTEM = "1";
|
|
142
|
+
return env;
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=shell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/plugin/shell.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { TaskState, TddEvidence, TddCycleEvidence, TddCommandEvidence } from "../flowrun/types.js";
|
|
2
|
+
import { createTaskEvidence as createBaseEvidence } from "../flowrun/state.js";
|
|
3
|
+
import type { FlowBroker } from "./broker.js";
|
|
4
|
+
export type TddCheckpointOp = "cycle-start" | "red" | "green" | "final-regression" | "final-verification" | "status" | "alternative-command" | "abandon-cycle";
|
|
5
|
+
export interface TddCheckpointRequest {
|
|
6
|
+
op: TddCheckpointOp;
|
|
7
|
+
parentIssueNumber: number;
|
|
8
|
+
taskId: string;
|
|
9
|
+
cycleId?: string;
|
|
10
|
+
criterionId?: string;
|
|
11
|
+
testPaths?: string[];
|
|
12
|
+
testSelector?: string;
|
|
13
|
+
redEvidence?: TddCommandEvidence;
|
|
14
|
+
greenEvidence?: TddCommandEvidence;
|
|
15
|
+
reason?: string;
|
|
16
|
+
validationId?: string;
|
|
17
|
+
regressionRuns?: TddCommandEvidence[];
|
|
18
|
+
verificationRuns?: TddCommandEvidence[];
|
|
19
|
+
}
|
|
20
|
+
export interface TddCheckpointResponse {
|
|
21
|
+
ok: boolean;
|
|
22
|
+
evidence?: TddEvidence;
|
|
23
|
+
cycle?: TddCycleEvidence;
|
|
24
|
+
evidenceRevision?: number;
|
|
25
|
+
error?: {
|
|
26
|
+
code: string;
|
|
27
|
+
message: string;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Broker-aware 响应:包含冲突暂停标志。
|
|
32
|
+
* PERSIST_CONFLICT 时 conflictPause=true,调用方应暂停 FlowRun。
|
|
33
|
+
*/
|
|
34
|
+
export interface TddCheckpointBrokerResponse extends TddCheckpointResponse {
|
|
35
|
+
conflictPause: boolean;
|
|
36
|
+
persisted: boolean;
|
|
37
|
+
}
|
|
38
|
+
export { createBaseEvidence as createTaskEvidence };
|
|
39
|
+
/**
|
|
40
|
+
* 处理 tdd_checkpoint 工具请求。
|
|
41
|
+
*
|
|
42
|
+
* 职责:
|
|
43
|
+
* - 验证 Task 状态(running + executionBinding)
|
|
44
|
+
* - 根据 op 分发到 state.ts 各纯函数
|
|
45
|
+
* - 返回结构化 response(evidence revision + cycle/evidence)
|
|
46
|
+
*
|
|
47
|
+
* 注意:C2 只实现内存状态机。持久化由 C3 broker 负责。
|
|
48
|
+
*/
|
|
49
|
+
export declare function handleTddCheckpoint(req: TddCheckpointRequest, task: TaskState): TddCheckpointResponse;
|
|
50
|
+
/**
|
|
51
|
+
* 通过 FlowBroker 执行 tdd_checkpoint 操作。
|
|
52
|
+
*
|
|
53
|
+
* 流程:
|
|
54
|
+
* 1. 通过 broker.writeFlowRunWithLock 读取 FlowRun
|
|
55
|
+
* 2. 提取目标 TaskState
|
|
56
|
+
* 3. 调用 handleTddCheckpoint 执行状态机转换
|
|
57
|
+
* 4. 成功时持久化回 Issue(broker 自动处理 revision + 乐观锁)
|
|
58
|
+
* 5. PERSIST_CONFLICT 时设置 conflictPause=true
|
|
59
|
+
*
|
|
60
|
+
* @returns TddCheckpointBrokerResponse — 包含 conflictPause 标志
|
|
61
|
+
*/
|
|
62
|
+
export declare function handleTddCheckpointWithBroker(broker: FlowBroker, req: TddCheckpointRequest): Promise<TddCheckpointBrokerResponse>;
|