replicas-cli 0.2.285 → 0.2.286
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/index.mjs +130 -42
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -8999,7 +8999,7 @@ In agent mode the CLI hides commands that don't make sense for in-workspace agen
|
|
|
8999
8999
|
| \`replicas connect <name>\` | SSH into another workspace (requires user creds \u2014 usually only useful when scripting locally) |
|
|
9000
9000
|
| \`replicas repos\` | List repos connected to the org |
|
|
9001
9001
|
| \`replicas environment ...\` | Manage environments, env vars, env files |
|
|
9002
|
-
| \`replicas automation ...\` | Manage automations (cron + GitHub event triggers) |
|
|
9002
|
+
| \`replicas automation ...\` | Manage automations (cron + GitHub/GitLab event triggers) |
|
|
9003
9003
|
| \`replicas preview ...\` | Register / list preview URLs (covered in \`PREVIEWS.md\`) |
|
|
9004
9004
|
| \`replicas media ...\` | Upload screenshots, videos, audio (covered in \`MEDIA.md\`) |
|
|
9005
9005
|
|
|
@@ -9017,6 +9017,7 @@ In agent mode the CLI hides commands that don't make sense for in-workspace agen
|
|
|
9017
9017
|
| "Run my nightly automation now" | \`replicas automation run <id>\` |
|
|
9018
9018
|
| "Make an automation that runs every weekday at 9am" | \`replicas automation create\` (interactive) or \`--trigger-cron "0 9 * * 1-5"\` |
|
|
9019
9019
|
| "Make an automation that runs when a PR opens on \`acme/web\`" | \`replicas automation create ... --trigger-github pull_request.opened --trigger-github-repos acme/web\` |
|
|
9020
|
+
| "Make an automation that runs when an MR opens on \`acme/web\`" | \`replicas automation create ... --trigger-gitlab merge_request.opened --trigger-gitlab-repos acme/web\` |
|
|
9020
9021
|
| "What repos are connected?" | \`replicas repos\` |
|
|
9021
9022
|
| "Set up a \`replicas.json\` in this repo" | \`replicas init\` (\`-y\` for YAML) |
|
|
9022
9023
|
|
|
@@ -9075,7 +9076,7 @@ Constraints:
|
|
|
9075
9076
|
|
|
9076
9077
|
## Automations
|
|
9077
9078
|
|
|
9078
|
-
Automations are saved prompts with one or more triggers (cron schedules and/or GitHub events). When fired, they create a workspace using the configured environment and run the prompt with the user's coding agent.
|
|
9079
|
+
Automations are saved prompts with one or more triggers (cron schedules and/or GitHub or GitLab events). When fired, they create a workspace using the configured environment and run the prompt with the user's coding agent.
|
|
9079
9080
|
|
|
9080
9081
|
### List / get / run / delete
|
|
9081
9082
|
|
|
@@ -9105,6 +9106,12 @@ replicas automation create "Review my PRs" \\
|
|
|
9105
9106
|
--trigger-github pull_request.opened \\
|
|
9106
9107
|
--trigger-github-repos acme/web,acme/api
|
|
9107
9108
|
|
|
9109
|
+
replicas automation create "Review my MRs" \\
|
|
9110
|
+
--prompt "Leave a code review on this MR" \\
|
|
9111
|
+
--environment <env-name-or-id> \\
|
|
9112
|
+
--trigger-gitlab merge_request.opened \\
|
|
9113
|
+
--trigger-gitlab-repos acme/web,acme/api
|
|
9114
|
+
|
|
9108
9115
|
# Disable on creation
|
|
9109
9116
|
replicas automation create ... --disabled
|
|
9110
9117
|
|
|
@@ -9338,7 +9345,7 @@ var HOOK_EXEC_MAX_BUFFER_BYTES = 10 * 1024 * 1024;
|
|
|
9338
9345
|
var REPLICAS_CONFIG_FILENAMES = ["replicas.json", "replicas.yaml", "replicas.yml"];
|
|
9339
9346
|
|
|
9340
9347
|
// ../shared/src/cli-version.ts
|
|
9341
|
-
var CLI_VERSION = "0.2.
|
|
9348
|
+
var CLI_VERSION = "0.2.286";
|
|
9342
9349
|
|
|
9343
9350
|
// ../shared/src/engine/environment.ts
|
|
9344
9351
|
var DESKTOP_NOVNC_PORT = 6080;
|
|
@@ -9539,6 +9546,30 @@ var GITHUB_TRIGGER = {
|
|
|
9539
9546
|
]
|
|
9540
9547
|
};
|
|
9541
9548
|
|
|
9549
|
+
// ../shared/src/automations/gitlab/index.ts
|
|
9550
|
+
var REPO_FILTER_PARAM2 = {
|
|
9551
|
+
id: "repository_ids",
|
|
9552
|
+
label: "Filter by project",
|
|
9553
|
+
type: "repository_ids"
|
|
9554
|
+
};
|
|
9555
|
+
var GROUP_MR_EVENTS_PARAM = {
|
|
9556
|
+
id: "group_pr_events",
|
|
9557
|
+
label: "Group MR events to same workspace",
|
|
9558
|
+
type: "boolean"
|
|
9559
|
+
};
|
|
9560
|
+
var GITLAB_TRIGGER = {
|
|
9561
|
+
type: "gitlab",
|
|
9562
|
+
label: "GitLab",
|
|
9563
|
+
description: "Trigger on project events",
|
|
9564
|
+
icon: "gitlab",
|
|
9565
|
+
events: [
|
|
9566
|
+
{ id: "merge_request.opened", label: "MR opened", parameters: [REPO_FILTER_PARAM2, GROUP_MR_EVENTS_PARAM] },
|
|
9567
|
+
{ id: "merge_request.updated", label: "MR updated (new commits)", parameters: [REPO_FILTER_PARAM2, GROUP_MR_EVENTS_PARAM] },
|
|
9568
|
+
{ id: "merge_request.merged", label: "MR merged", parameters: [REPO_FILTER_PARAM2] },
|
|
9569
|
+
{ id: "merge_request.closed", label: "MR closed", parameters: [REPO_FILTER_PARAM2] }
|
|
9570
|
+
]
|
|
9571
|
+
};
|
|
9572
|
+
|
|
9542
9573
|
// ../shared/src/display-message/types.ts
|
|
9543
9574
|
var BACKGROUND_TASK_SUBTYPES = /* @__PURE__ */ new Set([
|
|
9544
9575
|
"task_started",
|
|
@@ -13362,8 +13393,29 @@ function formatTrigger(trigger) {
|
|
|
13362
13393
|
const repoFilter = config2.repository_ids?.length ? ` (${config2.repository_ids.length} repo${config2.repository_ids.length > 1 ? "s" : ""} filtered)` : "";
|
|
13363
13394
|
return `github: ${config2.event}${repoFilter}`;
|
|
13364
13395
|
}
|
|
13396
|
+
if (trigger.type === "gitlab") {
|
|
13397
|
+
const config2 = trigger.config;
|
|
13398
|
+
const repoFilter = config2.repository_ids?.length ? ` (${config2.repository_ids.length} project${config2.repository_ids.length > 1 ? "s" : ""} filtered)` : "";
|
|
13399
|
+
return `gitlab: ${config2.event}${repoFilter}`;
|
|
13400
|
+
}
|
|
13365
13401
|
return `${trigger.type}`;
|
|
13366
13402
|
}
|
|
13403
|
+
function resolveTriggerRepositoryIds(repositories, repoNamesInput, provider) {
|
|
13404
|
+
if (!repoNamesInput) return void 0;
|
|
13405
|
+
const repoIds = [];
|
|
13406
|
+
const providerRepos = repositories.filter((repo) => !repo.provider || repo.provider === provider);
|
|
13407
|
+
const repoNames = repoNamesInput.split(",").map((r) => r.trim()).filter(Boolean);
|
|
13408
|
+
for (const repoName of repoNames) {
|
|
13409
|
+
const repo = providerRepos.find((r) => r.name === repoName);
|
|
13410
|
+
if (!repo) {
|
|
13411
|
+
console.log(chalk18.red(`Repository not found for ${provider} trigger filter: ${repoName}`));
|
|
13412
|
+
console.log(chalk18.gray(`Available: ${providerRepos.map((r) => r.name).join(", ")}`));
|
|
13413
|
+
process.exit(1);
|
|
13414
|
+
}
|
|
13415
|
+
repoIds.push(repo.id);
|
|
13416
|
+
}
|
|
13417
|
+
return repoIds;
|
|
13418
|
+
}
|
|
13367
13419
|
function truncate2(text, maxLength) {
|
|
13368
13420
|
if (text.length <= maxLength) return text;
|
|
13369
13421
|
return text.substring(0, maxLength) + "...";
|
|
@@ -13513,7 +13565,8 @@ async function promptForTriggers(repositories) {
|
|
|
13513
13565
|
message: "Select trigger type:",
|
|
13514
13566
|
choices: [
|
|
13515
13567
|
{ title: "Cron (scheduled)", value: "cron" },
|
|
13516
|
-
{ title: "GitHub (event-based)", value: "github" }
|
|
13568
|
+
{ title: "GitHub (event-based)", value: "github" },
|
|
13569
|
+
{ title: "GitLab (event-based)", value: "gitlab" }
|
|
13517
13570
|
]
|
|
13518
13571
|
});
|
|
13519
13572
|
if (!typeResponse.type) return triggers;
|
|
@@ -13547,12 +13600,13 @@ async function promptForTriggers(repositories) {
|
|
|
13547
13600
|
});
|
|
13548
13601
|
if (!eventResponse.event) return triggers;
|
|
13549
13602
|
let triggerRepoIds;
|
|
13550
|
-
|
|
13603
|
+
const githubRepositories = repositories?.filter((repo) => !repo.provider || repo.provider === "github") ?? [];
|
|
13604
|
+
if (githubRepositories.length > 0) {
|
|
13551
13605
|
const filterResponse = await prompts4({
|
|
13552
13606
|
type: "multiselect",
|
|
13553
13607
|
name: "repos",
|
|
13554
13608
|
message: "Filter trigger to specific repositories (press enter to skip for all):",
|
|
13555
|
-
choices:
|
|
13609
|
+
choices: githubRepositories.map((r) => ({ title: r.name, value: r.id }))
|
|
13556
13610
|
});
|
|
13557
13611
|
if (filterResponse.repos && filterResponse.repos.length > 0) {
|
|
13558
13612
|
triggerRepoIds = filterResponse.repos;
|
|
@@ -13565,6 +13619,34 @@ async function promptForTriggers(repositories) {
|
|
|
13565
13619
|
...triggerRepoIds ? { repository_ids: triggerRepoIds } : {}
|
|
13566
13620
|
}
|
|
13567
13621
|
});
|
|
13622
|
+
} else if (typeResponse.type === "gitlab") {
|
|
13623
|
+
const eventResponse = await prompts4({
|
|
13624
|
+
type: "select",
|
|
13625
|
+
name: "event",
|
|
13626
|
+
message: "Select GitLab event:",
|
|
13627
|
+
choices: GITLAB_TRIGGER.events?.map((e) => ({ title: e.label, value: e.id })) ?? []
|
|
13628
|
+
});
|
|
13629
|
+
if (!eventResponse.event) return triggers;
|
|
13630
|
+
let triggerRepoIds;
|
|
13631
|
+
const gitlabRepositories = repositories?.filter((repo) => repo.provider === "gitlab") ?? [];
|
|
13632
|
+
if (gitlabRepositories.length > 0) {
|
|
13633
|
+
const filterResponse = await prompts4({
|
|
13634
|
+
type: "multiselect",
|
|
13635
|
+
name: "repos",
|
|
13636
|
+
message: "Filter trigger to specific GitLab projects (press enter to skip for all):",
|
|
13637
|
+
choices: gitlabRepositories.map((r) => ({ title: r.name, value: r.id }))
|
|
13638
|
+
});
|
|
13639
|
+
if (filterResponse.repos && filterResponse.repos.length > 0) {
|
|
13640
|
+
triggerRepoIds = filterResponse.repos;
|
|
13641
|
+
}
|
|
13642
|
+
}
|
|
13643
|
+
triggers.push({
|
|
13644
|
+
type: "gitlab",
|
|
13645
|
+
config: {
|
|
13646
|
+
event: eventResponse.event,
|
|
13647
|
+
...triggerRepoIds ? { repository_ids: triggerRepoIds } : {}
|
|
13648
|
+
}
|
|
13649
|
+
});
|
|
13568
13650
|
}
|
|
13569
13651
|
const moreResponse = await prompts4({
|
|
13570
13652
|
type: "confirm",
|
|
@@ -13667,20 +13749,7 @@ async function automationCreateCommand(name, options) {
|
|
|
13667
13749
|
});
|
|
13668
13750
|
}
|
|
13669
13751
|
if (options.triggerGithub) {
|
|
13670
|
-
|
|
13671
|
-
if (options.triggerGithubRepos) {
|
|
13672
|
-
githubRepoIds = [];
|
|
13673
|
-
const repoNames = options.triggerGithubRepos.split(",").map((r) => r.trim()).filter(Boolean);
|
|
13674
|
-
for (const repoName of repoNames) {
|
|
13675
|
-
const repo = repositories.find((r) => r.name === repoName);
|
|
13676
|
-
if (!repo) {
|
|
13677
|
-
console.log(chalk18.red(`Repository not found for trigger filter: ${repoName}`));
|
|
13678
|
-
console.log(chalk18.gray(`Available: ${repositories.map((r) => r.name).join(", ")}`));
|
|
13679
|
-
process.exit(1);
|
|
13680
|
-
}
|
|
13681
|
-
githubRepoIds.push(repo.id);
|
|
13682
|
-
}
|
|
13683
|
-
}
|
|
13752
|
+
const githubRepoIds = resolveTriggerRepositoryIds(repositories, options.triggerGithubRepos, "github");
|
|
13684
13753
|
triggers.push({
|
|
13685
13754
|
type: "github",
|
|
13686
13755
|
config: {
|
|
@@ -13689,8 +13758,18 @@ async function automationCreateCommand(name, options) {
|
|
|
13689
13758
|
}
|
|
13690
13759
|
});
|
|
13691
13760
|
}
|
|
13761
|
+
if (options.triggerGitlab) {
|
|
13762
|
+
const gitlabRepoIds = resolveTriggerRepositoryIds(repositories, options.triggerGitlabRepos, "gitlab");
|
|
13763
|
+
triggers.push({
|
|
13764
|
+
type: "gitlab",
|
|
13765
|
+
config: {
|
|
13766
|
+
event: options.triggerGitlab,
|
|
13767
|
+
...gitlabRepoIds ? { repository_ids: gitlabRepoIds } : {}
|
|
13768
|
+
}
|
|
13769
|
+
});
|
|
13770
|
+
}
|
|
13692
13771
|
if (triggers.length === 0) {
|
|
13693
|
-
triggers = await promptForTriggers(repositories.map((r) => ({ id: r.id, name: r.name })));
|
|
13772
|
+
triggers = await promptForTriggers(repositories.map((r) => ({ id: r.id, name: r.name, provider: r.provider })));
|
|
13694
13773
|
if (triggers.length === 0) {
|
|
13695
13774
|
console.log(chalk18.red("At least one trigger is required."));
|
|
13696
13775
|
process.exit(1);
|
|
@@ -13769,7 +13848,7 @@ async function automationEditCommand(id, options) {
|
|
|
13769
13848
|
model: existing.automation.model
|
|
13770
13849
|
});
|
|
13771
13850
|
const body = {};
|
|
13772
|
-
const hasOptions = options.name || options.prompt || options.enabled !== void 0 || options.prFollowups !== void 0 || options.triggerCron || options.triggerGithub || options.environment || options.lifecycle || options.autoStopMinutes || options.agentProvider !== void 0 || options.model !== void 0 || options.thinkingLevel !== void 0 || options.planMode !== void 0 || options.goalMode !== void 0 || options.fastMode !== void 0;
|
|
13851
|
+
const hasOptions = options.name || options.prompt || options.enabled !== void 0 || options.prFollowups !== void 0 || options.triggerCron || options.triggerGithub || options.triggerGitlab || options.environment || options.lifecycle || options.autoStopMinutes || options.agentProvider !== void 0 || options.model !== void 0 || options.thinkingLevel !== void 0 || options.planMode !== void 0 || options.goalMode !== void 0 || options.fastMode !== void 0;
|
|
13773
13852
|
if (!hasOptions) {
|
|
13774
13853
|
const nameResponse = await prompts4({
|
|
13775
13854
|
type: "text",
|
|
@@ -13829,7 +13908,7 @@ async function automationEditCommand(id, options) {
|
|
|
13829
13908
|
if (options.prFollowups !== void 0) {
|
|
13830
13909
|
body.config = workspaceConfigWithPrFollowups(existing.automation.config, options.prFollowups);
|
|
13831
13910
|
}
|
|
13832
|
-
if (options.triggerCron || options.triggerGithub) {
|
|
13911
|
+
if (options.triggerCron || options.triggerGithub || options.triggerGitlab) {
|
|
13833
13912
|
const triggers = [];
|
|
13834
13913
|
if (options.triggerCron) {
|
|
13835
13914
|
triggers.push({
|
|
@@ -13841,21 +13920,12 @@ async function automationEditCommand(id, options) {
|
|
|
13841
13920
|
});
|
|
13842
13921
|
}
|
|
13843
13922
|
if (options.triggerGithub) {
|
|
13844
|
-
|
|
13845
|
-
|
|
13846
|
-
|
|
13847
|
-
|
|
13848
|
-
|
|
13849
|
-
|
|
13850
|
-
const repo = repoResponse.repositories.find((r) => r.name === repoName);
|
|
13851
|
-
if (!repo) {
|
|
13852
|
-
console.log(chalk18.red(`Repository not found for trigger filter: ${repoName}`));
|
|
13853
|
-
console.log(chalk18.gray(`Available: ${repoResponse.repositories.map((r) => r.name).join(", ")}`));
|
|
13854
|
-
process.exit(1);
|
|
13855
|
-
}
|
|
13856
|
-
githubRepoIds.push(repo.id);
|
|
13857
|
-
}
|
|
13858
|
-
}
|
|
13923
|
+
const repoResponse = options.triggerGithubRepos ? await orgAuthenticatedFetch("/v1/repositories") : null;
|
|
13924
|
+
const githubRepoIds = resolveTriggerRepositoryIds(
|
|
13925
|
+
repoResponse?.repositories ?? [],
|
|
13926
|
+
options.triggerGithubRepos,
|
|
13927
|
+
"github"
|
|
13928
|
+
);
|
|
13859
13929
|
triggers.push({
|
|
13860
13930
|
type: "github",
|
|
13861
13931
|
config: {
|
|
@@ -13864,6 +13934,21 @@ async function automationEditCommand(id, options) {
|
|
|
13864
13934
|
}
|
|
13865
13935
|
});
|
|
13866
13936
|
}
|
|
13937
|
+
if (options.triggerGitlab) {
|
|
13938
|
+
const repoResponse = options.triggerGitlabRepos ? await orgAuthenticatedFetch("/v1/repositories") : null;
|
|
13939
|
+
const gitlabRepoIds = resolveTriggerRepositoryIds(
|
|
13940
|
+
repoResponse?.repositories ?? [],
|
|
13941
|
+
options.triggerGitlabRepos,
|
|
13942
|
+
"gitlab"
|
|
13943
|
+
);
|
|
13944
|
+
triggers.push({
|
|
13945
|
+
type: "gitlab",
|
|
13946
|
+
config: {
|
|
13947
|
+
event: options.triggerGitlab,
|
|
13948
|
+
...gitlabRepoIds ? { repository_ids: gitlabRepoIds } : {}
|
|
13949
|
+
}
|
|
13950
|
+
});
|
|
13951
|
+
}
|
|
13867
13952
|
body.triggers = triggers;
|
|
13868
13953
|
}
|
|
13869
13954
|
if (options.environment) {
|
|
@@ -16609,8 +16694,10 @@ var WEB_APP_URL3 = process.env.REPLICAS_WEB_URL || "https://tryreplicas.com";
|
|
|
16609
16694
|
function buildInteractiveItems(workspaceId, status, previews, wakingWorkspaceId) {
|
|
16610
16695
|
const items = [];
|
|
16611
16696
|
const hasAnyPr = status.repoStatuses?.some((repo) => repo.prUrls.length > 0);
|
|
16612
|
-
const
|
|
16613
|
-
|
|
16697
|
+
const codeHostConfigured = Boolean(
|
|
16698
|
+
status.environmentDetails?.githubAccessConfigured || status.environmentDetails?.gitlabAccessConfigured
|
|
16699
|
+
);
|
|
16700
|
+
if (workspaceId && status.status === "active" && !hasAnyPr && codeHostConfigured) {
|
|
16614
16701
|
items.push({ type: "createPr" });
|
|
16615
16702
|
}
|
|
16616
16703
|
if (workspaceId) {
|
|
@@ -17091,6 +17178,7 @@ function WorkspaceInfo({ status, workspaceName, workspaceId, focused, loading, a
|
|
|
17091
17178
|
})() }),
|
|
17092
17179
|
env && /* @__PURE__ */ jsxs8(Section, { title: "Integrations", children: [
|
|
17093
17180
|
/* @__PURE__ */ jsx8(CardItem, { label: "GitHub", status: env.githubAccessConfigured }),
|
|
17181
|
+
/* @__PURE__ */ jsx8(CardItem, { label: "GitLab", status: env.gitlabAccessConfigured }),
|
|
17094
17182
|
/* @__PURE__ */ jsx8(CardItem, { label: "Slack", status: env.slackAccessConfigured }),
|
|
17095
17183
|
/* @__PURE__ */ jsx8(CardItem, { label: "Linear", status: env.linearAccessConfigured }),
|
|
17096
17184
|
/* @__PURE__ */ jsx8(CardItem, { label: "Google Drive", status: env.googleAccessConfigured })
|
|
@@ -18445,7 +18533,7 @@ automation.command("get <id>").description("Get automation details by ID").actio
|
|
|
18445
18533
|
process.exit(1);
|
|
18446
18534
|
}
|
|
18447
18535
|
});
|
|
18448
|
-
automation.command("create [name]").description("Create a new automation").option("-p, --prompt <prompt>", "Prompt for the automation").option("-e, --environment <environment>", "Environment name or ID").option("--trigger-cron <schedule>", 'Cron schedule expression (e.g. "0 9 * * 1-5")').option("--trigger-cron-timezone <timezone>", "Timezone for cron trigger (default: UTC)").option("--trigger-github <event>", 'GitHub event (e.g. "pull_request.opened")').option("--trigger-github-repos <repos>", "Comma-separated repo names to filter GitHub trigger").option("--lifecycle <policy>", "Workspace lifecycle: delete_when_done, delete_after_inactivity, default").option("--auto-stop-minutes <minutes>", "Inactivity timeout in minutes (3-1440, requires --lifecycle delete_after_inactivity)").option("--pr-followups", "Allow follow-up actions on matching PRs").option("--agent-provider <provider>", 'Coding agent to use: claude, codex, cursor, relay (or "none" to inherit org default)').option("--model <model>", 'Model identifier (must be valid for --agent-provider; pass "none" to clear)').option("--thinking-level <level>", 'Thinking/reasoning level: low, medium, high, max (or "none" to clear)').option("--plan-mode", "Run automation messages in plan mode").option("--goal-mode", "Set automation messages as Codex goals").option("--fast-mode", "Run automation messages in fast mode").option("--personal", "Create a personal automation owned by the authenticated user").option("--disabled", "Create in disabled state").action(async (name, options) => {
|
|
18536
|
+
automation.command("create [name]").description("Create a new automation").option("-p, --prompt <prompt>", "Prompt for the automation").option("-e, --environment <environment>", "Environment name or ID").option("--trigger-cron <schedule>", 'Cron schedule expression (e.g. "0 9 * * 1-5")').option("--trigger-cron-timezone <timezone>", "Timezone for cron trigger (default: UTC)").option("--trigger-github <event>", 'GitHub event (e.g. "pull_request.opened")').option("--trigger-github-repos <repos>", "Comma-separated repo names to filter GitHub trigger").option("--trigger-gitlab <event>", 'GitLab event (e.g. "merge_request.opened")').option("--trigger-gitlab-repos <repos>", "Comma-separated repo names to filter GitLab trigger").option("--lifecycle <policy>", "Workspace lifecycle: delete_when_done, delete_after_inactivity, default").option("--auto-stop-minutes <minutes>", "Inactivity timeout in minutes (3-1440, requires --lifecycle delete_after_inactivity)").option("--pr-followups", "Allow follow-up actions on matching PRs").option("--agent-provider <provider>", 'Coding agent to use: claude, codex, cursor, relay (or "none" to inherit org default)').option("--model <model>", 'Model identifier (must be valid for --agent-provider; pass "none" to clear)').option("--thinking-level <level>", 'Thinking/reasoning level: low, medium, high, max (or "none" to clear)').option("--plan-mode", "Run automation messages in plan mode").option("--goal-mode", "Set automation messages as Codex goals").option("--fast-mode", "Run automation messages in fast mode").option("--personal", "Create a personal automation owned by the authenticated user").option("--disabled", "Create in disabled state").action(async (name, options) => {
|
|
18449
18537
|
try {
|
|
18450
18538
|
await automationCreateCommand(name, {
|
|
18451
18539
|
...options,
|
|
@@ -18460,7 +18548,7 @@ automation.command("create [name]").description("Create a new automation").optio
|
|
|
18460
18548
|
process.exit(1);
|
|
18461
18549
|
}
|
|
18462
18550
|
});
|
|
18463
|
-
automation.command("edit <id>").description("Edit an existing automation").option("-n, --name <name>", "New name").option("-p, --prompt <prompt>", "New prompt").option("-e, --enabled <enabled>", "Enable or disable (true/false)").option("--trigger-cron <schedule>", "Set cron schedule (replaces existing triggers)").option("--trigger-cron-timezone <timezone>", "Timezone for cron trigger").option("--trigger-github <event>", "Set GitHub event (replaces existing triggers)").option("--trigger-github-repos <repos>", "Comma-separated repo names to filter GitHub trigger").option("--environment <environment>", "Environment name or ID").option("--lifecycle <policy>", "Workspace lifecycle: delete_when_done, delete_after_inactivity, default").option("--auto-stop-minutes <minutes>", "Inactivity timeout in minutes (3-1440, requires --lifecycle delete_after_inactivity)").option("--pr-followups <enabled>", "Allow follow-up actions on matching PRs (true/false)", parseBooleanOption).option("--agent-provider <provider>", 'Coding agent to use: claude, codex, cursor, relay (or "none" to inherit org default)').option("--model <model>", 'Model identifier (must be valid for --agent-provider; pass "none" to clear)').option("--thinking-level <level>", 'Thinking/reasoning level: low, medium, high, max (or "none" to clear)').option("--plan-mode <enabled>", "Run automation messages in plan mode (true/false)", parseBooleanOption).option("--goal-mode <enabled>", "Set automation messages as Codex goals (true/false)", parseBooleanOption).option("--fast-mode <enabled>", "Run automation messages in fast mode (true/false)", parseBooleanOption).action(async (id, options) => {
|
|
18551
|
+
automation.command("edit <id>").description("Edit an existing automation").option("-n, --name <name>", "New name").option("-p, --prompt <prompt>", "New prompt").option("-e, --enabled <enabled>", "Enable or disable (true/false)").option("--trigger-cron <schedule>", "Set cron schedule (replaces existing triggers)").option("--trigger-cron-timezone <timezone>", "Timezone for cron trigger").option("--trigger-github <event>", "Set GitHub event (replaces existing triggers)").option("--trigger-github-repos <repos>", "Comma-separated repo names to filter GitHub trigger").option("--trigger-gitlab <event>", "Set GitLab event (replaces existing triggers)").option("--trigger-gitlab-repos <repos>", "Comma-separated repo names to filter GitLab trigger").option("--environment <environment>", "Environment name or ID").option("--lifecycle <policy>", "Workspace lifecycle: delete_when_done, delete_after_inactivity, default").option("--auto-stop-minutes <minutes>", "Inactivity timeout in minutes (3-1440, requires --lifecycle delete_after_inactivity)").option("--pr-followups <enabled>", "Allow follow-up actions on matching PRs (true/false)", parseBooleanOption).option("--agent-provider <provider>", 'Coding agent to use: claude, codex, cursor, relay (or "none" to inherit org default)').option("--model <model>", 'Model identifier (must be valid for --agent-provider; pass "none" to clear)').option("--thinking-level <level>", 'Thinking/reasoning level: low, medium, high, max (or "none" to clear)').option("--plan-mode <enabled>", "Run automation messages in plan mode (true/false)", parseBooleanOption).option("--goal-mode <enabled>", "Set automation messages as Codex goals (true/false)", parseBooleanOption).option("--fast-mode <enabled>", "Run automation messages in fast mode (true/false)", parseBooleanOption).action(async (id, options) => {
|
|
18464
18552
|
try {
|
|
18465
18553
|
await automationEditCommand(id, options);
|
|
18466
18554
|
} catch (error) {
|