replicas-cli 0.3.274 → 0.3.276

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.
Files changed (2) hide show
  1. package/dist/index.cjs +69 -51
  2. package/package.json +1 -1
package/dist/index.cjs CHANGED
@@ -16938,6 +16938,62 @@ var init_pr_footer = __esm({
16938
16938
  }
16939
16939
  });
16940
16940
 
16941
+ // ../shared/src/routes/linear.ts
16942
+ var linearSessionMetadataSchema, LINEAR_WORKFLOW_STATE_TYPES;
16943
+ var init_linear = __esm({
16944
+ "../shared/src/routes/linear.ts"() {
16945
+ "use strict";
16946
+ init_zod();
16947
+ init_agent();
16948
+ linearSessionMetadataSchema = external_exports.object({
16949
+ via_mothership: external_exports.boolean().optional(),
16950
+ attached: external_exports.boolean().optional(),
16951
+ issue_id: external_exports.string(),
16952
+ issue_identifier: external_exports.string(),
16953
+ issue_title: external_exports.string(),
16954
+ issue_description: external_exports.string(),
16955
+ issue_url: external_exports.string(),
16956
+ comment_id: external_exports.string(),
16957
+ comment_body: external_exports.string(),
16958
+ triggered_by_id: external_exports.string().optional(),
16959
+ triggered_by_name: external_exports.string().optional(),
16960
+ triggered_by_email: external_exports.string().optional(),
16961
+ linear_workspace_id: external_exports.string().optional(),
16962
+ creator_id: external_exports.string().optional(),
16963
+ creator_name: external_exports.string().optional(),
16964
+ creator_email: external_exports.string().optional(),
16965
+ assignee_id: external_exports.string().optional(),
16966
+ assignee_name: external_exports.string().optional(),
16967
+ assignee_email: external_exports.string().optional(),
16968
+ issue_state: external_exports.string().optional(),
16969
+ parent_issue: external_exports.object({
16970
+ id: external_exports.string(),
16971
+ identifier: external_exports.string(),
16972
+ title: external_exports.string(),
16973
+ description: external_exports.string().nullable()
16974
+ }).optional(),
16975
+ workspace: external_exports.object({
16976
+ id: external_exports.string(),
16977
+ coding_agent: external_exports.custom((value) => typeof value === "string" && isValidAgentProvider(value)),
16978
+ task_description: external_exports.string(),
16979
+ created_at: external_exports.string()
16980
+ }).optional()
16981
+ });
16982
+ LINEAR_WORKFLOW_STATE_TYPES = ["triage", "backlog", "unstarted", "started", "completed", "canceled", "duplicate"];
16983
+ }
16984
+ });
16985
+
16986
+ // ../shared/src/automations/linear/index.ts
16987
+ var LINEAR_ISSUE_STATE_CHANGED_EVENT, LINEAR_STATE_TYPES;
16988
+ var init_linear2 = __esm({
16989
+ "../shared/src/automations/linear/index.ts"() {
16990
+ "use strict";
16991
+ init_linear();
16992
+ LINEAR_ISSUE_STATE_CHANGED_EVENT = "issue.state_changed";
16993
+ LINEAR_STATE_TYPES = LINEAR_WORKFLOW_STATE_TYPES.filter((type) => type !== "duplicate");
16994
+ }
16995
+ });
16996
+
16941
16997
  // ../shared/src/uuid.ts
16942
16998
  var UUID_RE;
16943
16999
  var init_uuid = __esm({
@@ -16999,13 +17055,14 @@ function getReviewerLoginsError(event, logins) {
16999
17055
  if (isReviewRequested === !!logins?.some((login) => login.trim().replace(/^@+/, ""))) return null;
17000
17056
  return isReviewRequested ? "The PR review requested trigger needs at least one GitHub username" : "Requested reviewers only apply to the PR review requested trigger";
17001
17057
  }
17002
- var repositoryTriggerConfigSchema, cronTriggerSchema, githubTriggerSchema, gitlabTriggerSchema, automationTriggerSchema;
17058
+ var repositoryTriggerConfigSchema, cronTriggerSchema, githubTriggerSchema, gitlabTriggerSchema, linearTriggerConfigSchema, automationTriggerSchema;
17003
17059
  var init_trigger_schemas = __esm({
17004
17060
  "../shared/src/automations/trigger-schemas.ts"() {
17005
17061
  "use strict";
17006
17062
  init_zod();
17007
17063
  init_uuid();
17008
17064
  init_github();
17065
+ init_linear2();
17009
17066
  repositoryTriggerConfigSchema = external_exports.object({
17010
17067
  event: external_exports.string(),
17011
17068
  repository_ids: external_exports.array(external_exports.string().regex(UUID_RE, "must be a repository id")).optional(),
@@ -17022,12 +17079,14 @@ var init_trigger_schemas = __esm({
17022
17079
  })
17023
17080
  });
17024
17081
  gitlabTriggerSchema = external_exports.object({ type: external_exports.literal("gitlab"), config: repositoryTriggerConfigSchema });
17082
+ linearTriggerConfigSchema = external_exports.object({ event: external_exports.string(), team_ids: external_exports.array(external_exports.string()).optional(), state_types: external_exports.array(external_exports.enum(LINEAR_STATE_TYPES)).optional() });
17025
17083
  automationTriggerSchema = external_exports.discriminatedUnion("type", [
17026
17084
  cronTriggerSchema,
17027
17085
  githubTriggerSchema,
17028
17086
  gitlabTriggerSchema,
17029
17087
  external_exports.object({ type: external_exports.literal("slack"), config: external_exports.object({ event: external_exports.string(), channel_ids: external_exports.array(external_exports.string()).optional(), group_thread_replies: external_exports.boolean().optional() }) }),
17030
17088
  external_exports.object({ type: external_exports.literal("sentry"), config: external_exports.object({ event: external_exports.string(), project_slugs: external_exports.array(external_exports.string()).optional(), min_level: external_exports.string().optional() }) }),
17089
+ external_exports.object({ type: external_exports.literal("linear"), config: linearTriggerConfigSchema }),
17031
17090
  external_exports.object({ type: external_exports.literal("custom"), config: external_exports.object({}) })
17032
17091
  ]);
17033
17092
  }
@@ -17301,6 +17360,7 @@ var init_replicas_mcp = __esm({
17301
17360
  "use strict";
17302
17361
  init_zod();
17303
17362
  init_agent();
17363
+ init_linear2();
17304
17364
  init_trigger_schemas();
17305
17365
  init_types5();
17306
17366
  init_chat_fork();
@@ -17358,7 +17418,7 @@ var init_replicas_mcp = __esm({
17358
17418
  prompt: external_exports.string().describe("Prompt each automation run starts with."),
17359
17419
  environment_id: external_exports.string().describe(`Environment id from \`${REPLICAS_MCP_TOOLS.listEnvironments}\`.`),
17360
17420
  triggers: external_exports.array(automationTriggerSchema).min(1).describe(
17361
- 'One or more triggers. Cron: `{ "type": "cron", "config": { "schedule": "0 9 * * 1", "timezone": "America/New_York" } }`. GitHub: `{ "type": "github", "config": { "event": "pull_request.opened", "repository_ids": ["<repository uuid>"] } }`.'
17421
+ `One or more triggers. Cron: \`{ "type": "cron", "config": { "schedule": "0 9 * * 1", "timezone": "America/New_York" } }\`. GitHub: \`{ "type": "github", "config": { "event": "pull_request.opened", "repository_ids": ["<repository uuid>"] } }\`. Linear: \`{ "type": "linear", "config": { "event": "${LINEAR_ISSUE_STATE_CHANGED_EVENT}", "state_types": ["completed"] } }\`.`
17362
17422
  ),
17363
17423
  description: external_exports.string().optional().describe("One-line summary shown in the dashboard."),
17364
17424
  plan_mode: external_exports.boolean().optional(),
@@ -18664,7 +18724,7 @@ replicas gpu delete
18664
18724
 
18665
18725
  // ../shared/src/default-skills/replicas-agent/abilities/linear.ts
18666
18726
  var SECTION7, REFERENCE7, LINEAR_ABILITY;
18667
- var init_linear = __esm({
18727
+ var init_linear3 = __esm({
18668
18728
  "../shared/src/default-skills/replicas-agent/abilities/linear.ts"() {
18669
18729
  "use strict";
18670
18730
  SECTION7 = `### Linear
@@ -20334,7 +20394,7 @@ var init_registry = __esm({
20334
20394
  init_github2();
20335
20395
  init_gitlab();
20336
20396
  init_gpu();
20337
- init_linear();
20397
+ init_linear3();
20338
20398
  init_media();
20339
20399
  init_previews();
20340
20400
  init_plugins();
@@ -31631,7 +31691,7 @@ var CLI_VERSION;
31631
31691
  var init_cli_version = __esm({
31632
31692
  "../shared/src/cli-version.ts"() {
31633
31693
  "use strict";
31634
- CLI_VERSION = "0.3.273";
31694
+ CLI_VERSION = "0.3.276";
31635
31695
  }
31636
31696
  });
31637
31697
 
@@ -31861,50 +31921,6 @@ var init_external_accounts = __esm({
31861
31921
  }
31862
31922
  });
31863
31923
 
31864
- // ../shared/src/routes/linear.ts
31865
- var linearSessionMetadataSchema;
31866
- var init_linear2 = __esm({
31867
- "../shared/src/routes/linear.ts"() {
31868
- "use strict";
31869
- init_zod();
31870
- init_agent();
31871
- linearSessionMetadataSchema = external_exports.object({
31872
- via_mothership: external_exports.boolean().optional(),
31873
- attached: external_exports.boolean().optional(),
31874
- issue_id: external_exports.string(),
31875
- issue_identifier: external_exports.string(),
31876
- issue_title: external_exports.string(),
31877
- issue_description: external_exports.string(),
31878
- issue_url: external_exports.string(),
31879
- comment_id: external_exports.string(),
31880
- comment_body: external_exports.string(),
31881
- triggered_by_id: external_exports.string().optional(),
31882
- triggered_by_name: external_exports.string().optional(),
31883
- triggered_by_email: external_exports.string().optional(),
31884
- linear_workspace_id: external_exports.string().optional(),
31885
- creator_id: external_exports.string().optional(),
31886
- creator_name: external_exports.string().optional(),
31887
- creator_email: external_exports.string().optional(),
31888
- assignee_id: external_exports.string().optional(),
31889
- assignee_name: external_exports.string().optional(),
31890
- assignee_email: external_exports.string().optional(),
31891
- issue_state: external_exports.string().optional(),
31892
- parent_issue: external_exports.object({
31893
- id: external_exports.string(),
31894
- identifier: external_exports.string(),
31895
- title: external_exports.string(),
31896
- description: external_exports.string().nullable()
31897
- }).optional(),
31898
- workspace: external_exports.object({
31899
- id: external_exports.string(),
31900
- coding_agent: external_exports.custom((value) => typeof value === "string" && isValidAgentProvider(value)),
31901
- task_description: external_exports.string(),
31902
- created_at: external_exports.string()
31903
- }).optional()
31904
- });
31905
- }
31906
- });
31907
-
31908
31924
  // ../shared/src/routes/slack.ts
31909
31925
  var init_slack2 = __esm({
31910
31926
  "../shared/src/routes/slack.ts"() {
@@ -41927,6 +41943,7 @@ var init_registry2 = __esm({
41927
41943
  init_gitlab3();
41928
41944
  init_slack3();
41929
41945
  init_sentry3();
41946
+ init_linear2();
41930
41947
  init_custom();
41931
41948
  }
41932
41949
  });
@@ -41946,6 +41963,7 @@ var init_automations = __esm({
41946
41963
  init_cron();
41947
41964
  init_slack3();
41948
41965
  init_sentry3();
41966
+ init_linear2();
41949
41967
  init_custom();
41950
41968
  init_trigger_schemas();
41951
41969
  }
@@ -42363,7 +42381,7 @@ var init_src = __esm({
42363
42381
  init_gitlab2();
42364
42382
  init_integrations();
42365
42383
  init_external_accounts();
42366
- init_linear2();
42384
+ init_linear();
42367
42385
  init_slack2();
42368
42386
  init_scout2();
42369
42387
  init_plugins2();
@@ -48754,7 +48772,7 @@ var init_src2 = __esm({
48754
48772
  credentials.command("remove <service>").description("Remove stored credentials for a service (also claude, codex, muse subscriptions)").option("-o, --org", "Organization credentials instead of personal").action(run(credentialsRemoveCommand));
48755
48773
  credentials.command("usage").description("Show how much of each connected Claude and ChatGPT subscription's 5-hour and weekly limits is used (personal and organization by default)").addOption(new import_commander.Option("-o, --org", "Only organization subscriptions").conflicts("user")).option("-u, --user", "Only your personal subscriptions").action(run(credentialsUsageCommand));
48756
48774
  automation = program.command("automation").alias("auto").description("Manage automations");
48757
- automation.command("list").description("List all automations").option("-p, --page <page>", "Page number").option("-l, --limit <limit>", "Number of items per page").option("--owner <owner>", "Ownership filter: org, user, all").option("--trigger-type <type>", "Only automations with a trigger of this type (cron, github, gitlab, slack, sentry, custom)").option("--enabled <enabled>", "Only enabled or disabled automations (true/false)").option("--search <search>", "Case-insensitive substring match on the name").option("--background <background>", "Only background (true) or main-list (false) automations").action(run(automationListCommand));
48775
+ automation.command("list").description("List all automations").option("-p, --page <page>", "Page number").option("-l, --limit <limit>", "Number of items per page").option("--owner <owner>", "Ownership filter: org, user, all").option("--trigger-type <type>", "Only automations with a trigger of this type (cron, github, gitlab, slack, sentry, linear, custom)").option("--enabled <enabled>", "Only enabled or disabled automations (true/false)").option("--search <search>", "Case-insensitive substring match on the name").option("--background <background>", "Only background (true) or main-list (false) automations").action(run(automationListCommand));
48758
48776
  automation.command("get <id>").description("Get automation details by ID").action(run(automationGetCommand));
48759
48777
  automation.command("create [name]").description("Create a new automation").option("-p, --prompt <prompt>", "Prompt for the automation").option("-d, --description <description>", "Description shown with the automation").option("-e, --environment <environment>", "Environment name or ID").option("--size <size>", "Size of workspaces runs create (not a reused existing one): small (default), large, ultra").option("--trigger-cron <schedule>", 'Cron schedule expression, e.g. "0 9 * * 1-5" (repeatable)', collect, []).option("--trigger-cron-timezone <timezone>", "Timezone for cron schedules (default: UTC)").option("--trigger-github <event>", 'GitHub event, e.g. "pull_request.opened" (repeatable)', collect, []).option("--trigger-github-repos <repos>", "Comma-separated repo names to filter GitHub trigger").option("--trigger-github-exclude-users <users>", "Comma-separated GitHub usernames to exclude from triggering (pass empty string to clear the list)").option("--trigger-github-reviewers <users>", "Comma-separated GitHub usernames to fire for (required with pull_request.review_requested)").option("--trigger-gitlab <event>", 'GitLab event, e.g. "merge_request.opened" (repeatable)', collect, []).option("--trigger-gitlab-repos <repos>", "Comma-separated repo names to filter GitLab trigger").option("--trigger-gitlab-exclude-users <users>", "Comma-separated GitLab usernames to exclude from triggering (pass empty string to clear the list)").option("--github-checks <names>", "Comma-separated GitHub check names to create on matching PRs (requires a PR opened/updated trigger)").option("--lifecycle <policy>", "Workspace lifecycle: delete_when_done (default for new automations), sleep_when_done, archive_when_done, default").option("--sleep-when-done", "Sleep automation workspaces as soon as the agent finishes").option("--auto-stop-minutes <minutes>", "Inactivity timeout in minutes (3-1440, requires --lifecycle default)").option("--pr-followups", "Allow follow-up actions on matching PRs").option("--agent-provider <provider>", 'Coding agent to use: claude, codex, cursor (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, xhigh, max (or "none" to clear)').option("--plan-mode", "Run automation messages in plan mode").option("--goal-mode", "Set automation messages as goals").option("--fast-mode", "Run automation messages in fast mode").option("--personal", "Create a personal automation owned by the authenticated user").option("--in <duration>", "Run once after this long, e.g. 30m, 2h, 3d, 1w (inside a workspace, defaults --workspace to current)").option("--at <datetime>", "Run once at this ISO-8601 time with timezone, e.g. 2026-10-08T09:00:00-07:00").option("--max-runs <n>", 'Delete the automation after this many runs ("none" for unlimited)').option("--workspace <target>", "Where runs go: new (default, new workspace each run), reuse (one workspace created on the first run), current (this workspace), or a workspace ID").option("--background", "Keep it out of the main automations list (for offhand follow-ups)").option("--disabled", "Create in disabled state").action(run((name, options) => automationCreateCommand(name, { ...options, enabled: !options.disabled })));
48760
48778
  automation.command("edit <id>").description("Edit an existing automation").option("-n, --name <name>", "New name").option("-p, --prompt <prompt>", "New prompt").option("-d, --description <description>", "New description (pass empty string to clear)").option("--size <size>", "Size of workspaces runs create (not a reused existing one): small, large, ultra").option("--enabled <enabled>", "Enable or disable (true/false)").option("--trigger-cron <schedule>", "Set cron schedule (repeatable; replaces existing triggers unless --keep-triggers)", collect, []).option("--trigger-cron-timezone <timezone>", "Timezone for cron schedules").option("--trigger-github <event>", "Set GitHub event (repeatable; replaces existing triggers unless --keep-triggers)", collect, []).option("--trigger-github-repos <repos>", "Comma-separated repo names to filter GitHub trigger").option("--trigger-github-exclude-users <users>", "Comma-separated GitHub usernames to exclude from triggering (pass empty string to clear the list)").option("--trigger-github-reviewers <users>", "Comma-separated GitHub usernames to fire for (required with pull_request.review_requested)").option("--trigger-gitlab <event>", "Set GitLab event (repeatable; replaces existing triggers unless --keep-triggers)", collect, []).option("--trigger-gitlab-repos <repos>", "Comma-separated repo names to filter GitLab trigger").option("--trigger-gitlab-exclude-users <users>", "Comma-separated GitLab usernames to exclude from triggering (pass empty string to clear the list)").option("--keep-triggers", "Add the --trigger-cron, --trigger-github, --trigger-gitlab, --in or --at triggers to the existing ones instead of replacing them").option("--github-checks <names>", "Comma-separated GitHub check names to create on matching PRs (replaces the current list; pass empty string to remove them)").option("--add-github-checks <names>", "Comma-separated GitHub check names to add, keeping the ones already configured").option("--environment <environment>", "Environment name or ID").option("--lifecycle <policy>", "Workspace lifecycle: delete_when_done (default for new automations), sleep_when_done, archive_when_done, default").option("--sleep-when-done", "Sleep automation workspaces as soon as the agent finishes").option("--auto-stop-minutes <minutes>", "Inactivity timeout in minutes (3-1440, requires --lifecycle default)").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 (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, xhigh, 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 goals (true/false)", parseBooleanOption).option("--fast-mode <enabled>", "Run automation messages in fast mode (true/false)", parseBooleanOption).option("--in <duration>", "Replace triggers with a one-time run after this long, e.g. 30m, 2h, 3d, 1w").option("--at <datetime>", "Replace triggers with a one-time run at this ISO-8601 time with timezone").option("--max-runs <n>", 'Delete the automation after this many runs in total ("none" for unlimited)').option("--workspace <target>", "Where runs go: new, reuse, current, or a workspace ID").option("--background <enabled>", "Keep it out of the main automations list (true/false)", parseBooleanOption).option("--move-to-org", "Move a personal automation to the organization so teammates can see and edit it (cannot be undone)").action(run(automationEditCommand));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "replicas-cli",
3
- "version": "0.3.274",
3
+ "version": "0.3.276",
4
4
  "description": "CLI for managing Replicas workspaces - SSH into cloud dev environments with automatic port forwarding",
5
5
  "main": "dist/index.cjs",
6
6
  "bin": {