feat(lanes): add ccam lanes agents install CLI (E3)
This commit is contained in:
+27
@@ -2155,6 +2155,25 @@ async function cmdLanesProofLink(args) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** `ccam lanes agents install [<id>] [--cwd path]` — write the ship-feature-lane
|
||||||
|
* agent templates (qc-local, senior-gate-reviewer) into <lane>/.claude/agents/,
|
||||||
|
* git-excluded. Never run automatically; a session calls it explicitly. */
|
||||||
|
async function cmdLanesAgentsInstall(args) {
|
||||||
|
const resolved = await resolveLaneArg(args);
|
||||||
|
if (!resolved) return;
|
||||||
|
const result = await post(
|
||||||
|
`/api/lanes/${resolved.laneId}/agents/install`,
|
||||||
|
{},
|
||||||
|
{ allowError: true }
|
||||||
|
);
|
||||||
|
if (result.status) {
|
||||||
|
console.error(`✖ agents install → ${result.data?.error?.message || result.status}`);
|
||||||
|
process.exitCode = 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
console.log(`${c.green("✔")} installed: ${result.installed.join(", ")}`);
|
||||||
|
}
|
||||||
|
|
||||||
async function cmdFeatureShow(args) {
|
async function cmdFeatureShow(args) {
|
||||||
const slug = args.find((arg) => !arg.startsWith("--"));
|
const slug = args.find((arg) => !arg.startsWith("--"));
|
||||||
if (!slug) {
|
if (!slug) {
|
||||||
@@ -2341,6 +2360,11 @@ const COMMAND_GROUPS = [
|
|||||||
"[<id>]",
|
"[<id>]",
|
||||||
"Converge clone-root proof/ onto .playwright-mcp/proof (idempotent, never automatic)",
|
"Converge clone-root proof/ onto .playwright-mcp/proof (idempotent, never automatic)",
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
"lanes agents install",
|
||||||
|
"[<id>]",
|
||||||
|
"Write the ship-feature-lane agent templates (qc-local, senior-gate-reviewer) into <lane>/.claude/agents/, git-excluded",
|
||||||
|
],
|
||||||
[
|
[
|
||||||
"lock status|acquire|release",
|
"lock status|acquire|release",
|
||||||
"[<name>] [--holder X] [--timeout N]",
|
"[<name>] [--holder X] [--timeout N]",
|
||||||
@@ -3159,6 +3183,9 @@ async function runCommand(argv) {
|
|||||||
return cmdLanesRuntime(rest[0], rest.slice(1));
|
return cmdLanesRuntime(rest[0], rest.slice(1));
|
||||||
}
|
}
|
||||||
if (rest[0] === "proof-link") return cmdLanesProofLink(rest.slice(1));
|
if (rest[0] === "proof-link") return cmdLanesProofLink(rest.slice(1));
|
||||||
|
if (rest[0] === "agents" && rest[1] === "install") {
|
||||||
|
return cmdLanesAgentsInstall(rest.slice(2));
|
||||||
|
}
|
||||||
return cmdLanes();
|
return cmdLanes();
|
||||||
case "lock": {
|
case "lock": {
|
||||||
const sub = rest[0];
|
const sub = rest[0];
|
||||||
|
|||||||
Reference in New Issue
Block a user