@cargo-ai/cli 1.0.72 → 1.0.74

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 (100) hide show
  1. package/README.md +21 -0
  2. package/build/commands/ai/agent.js +2 -2
  3. package/build/commands/ai/chat.js +1 -1
  4. package/build/commands/ai/document.js +1 -1
  5. package/build/commands/ai/memory.js +3 -3
  6. package/build/commands/ai/message.js +2 -2
  7. package/build/commands/ai/release.d.ts.map +1 -1
  8. package/build/commands/ai/release.js +3 -3
  9. package/build/commands/ai/vote.d.ts.map +1 -1
  10. package/build/commands/ai/vote.js +1 -1
  11. package/build/commands/auth/email.d.ts +24 -0
  12. package/build/commands/auth/email.d.ts.map +1 -1
  13. package/build/commands/auth/email.js +27 -14
  14. package/build/commands/auth/index.d.ts.map +1 -1
  15. package/build/commands/auth/index.js +9 -3
  16. package/build/commands/auth/workspace.d.ts.map +1 -1
  17. package/build/commands/auth/workspace.js +99 -26
  18. package/build/commands/billing/subscription.d.ts.map +1 -1
  19. package/build/commands/billing/subscription.js +3 -3
  20. package/build/commands/billing/usage.d.ts.map +1 -1
  21. package/build/commands/billing/usage.js +1 -1
  22. package/build/commands/connection/action.d.ts.map +1 -1
  23. package/build/commands/connection/action.js +1 -1
  24. package/build/commands/connection/connector.d.ts.map +1 -1
  25. package/build/commands/connection/connector.js +145 -22
  26. package/build/commands/connection/integration.d.ts.map +1 -1
  27. package/build/commands/connection/integration.js +1 -1
  28. package/build/commands/content/library.js +1 -1
  29. package/build/commands/context/runtime.js +1 -1
  30. package/build/commands/expression/recipe.d.ts.map +1 -1
  31. package/build/commands/expression/recipe.js +9 -9
  32. package/build/commands/mailboxManagement/event.js +1 -1
  33. package/build/commands/mailboxManagement/mailbox.d.ts.map +1 -1
  34. package/build/commands/mailboxManagement/mailbox.js +3 -3
  35. package/build/commands/mailboxManagement/message.js +1 -1
  36. package/build/commands/mailboxManagement/suppression.js +1 -1
  37. package/build/commands/mailboxManagement/thread.js +1 -1
  38. package/build/commands/observability/alert.js +2 -2
  39. package/build/commands/orchestration/action.d.ts.map +1 -1
  40. package/build/commands/orchestration/action.js +18 -63
  41. package/build/commands/orchestration/batch.js +7 -7
  42. package/build/commands/orchestration/node.js +2 -2
  43. package/build/commands/orchestration/play.d.ts.map +1 -1
  44. package/build/commands/orchestration/play.js +9 -9
  45. package/build/commands/orchestration/record.d.ts.map +1 -1
  46. package/build/commands/orchestration/record.js +10 -10
  47. package/build/commands/orchestration/release.js +1 -1
  48. package/build/commands/orchestration/run.d.ts.map +1 -1
  49. package/build/commands/orchestration/run.js +14 -14
  50. package/build/commands/orchestration/span.d.ts.map +1 -1
  51. package/build/commands/orchestration/span.js +4 -4
  52. package/build/commands/orchestration/tool.js +2 -2
  53. package/build/commands/orchestration/trace.d.ts.map +1 -1
  54. package/build/commands/orchestration/trace.js +2 -2
  55. package/build/commands/revenueOrganization/capacity.d.ts.map +1 -1
  56. package/build/commands/revenueOrganization/capacity.js +2 -2
  57. package/build/commands/revenueOrganization/territory.js +2 -2
  58. package/build/commands/segmentation/change.d.ts.map +1 -1
  59. package/build/commands/segmentation/change.js +4 -4
  60. package/build/commands/segmentation/record.js +1 -1
  61. package/build/commands/segmentation/segment.js +2 -2
  62. package/build/commands/start/brief.d.ts +107 -0
  63. package/build/commands/start/brief.d.ts.map +1 -0
  64. package/build/commands/start/brief.js +222 -0
  65. package/build/commands/start/index.d.ts +44 -0
  66. package/build/commands/start/index.d.ts.map +1 -0
  67. package/build/commands/start/index.js +431 -0
  68. package/build/commands/start/state.d.ts +50 -0
  69. package/build/commands/start/state.d.ts.map +1 -0
  70. package/build/commands/start/state.js +101 -0
  71. package/build/commands/storage/query.js +1 -1
  72. package/build/commands/storage/record.js +2 -2
  73. package/build/commands/storage/run.js +2 -2
  74. package/build/commands/systemOfRecordIntegration/log.js +1 -1
  75. package/build/commands/systemOfRecordIntegration/systemOfRecord.js +1 -1
  76. package/build/commands/version.js +1 -1
  77. package/build/commands/workspaceManagement/folder.d.ts.map +1 -1
  78. package/build/commands/workspaceManagement/folder.js +1 -1
  79. package/build/commands/workspaceManagement/role.d.ts.map +1 -1
  80. package/build/commands/workspaceManagement/role.js +2 -2
  81. package/build/commands/workspaceManagement/session.js +1 -1
  82. package/build/commands/workspaceManagement/user.d.ts.map +1 -1
  83. package/build/commands/workspaceManagement/user.js +2 -2
  84. package/build/commands/workspaceManagement/workspaces.js +1 -1
  85. package/build/config.d.ts +1 -0
  86. package/build/config.d.ts.map +1 -1
  87. package/build/config.js +1 -0
  88. package/build/index.js +50 -6
  89. package/build/paletteLayout.d.ts +16 -0
  90. package/build/paletteLayout.d.ts.map +1 -0
  91. package/build/paletteLayout.js +131 -0
  92. package/build/setupIssues.d.ts +4 -16
  93. package/build/setupIssues.d.ts.map +1 -1
  94. package/build/setupIssues.js +3 -52
  95. package/build/utils/booleanOption.d.ts.map +1 -1
  96. package/build/utils/booleanOption.js +5 -4
  97. package/package.json +3 -3
  98. package/build/commands/orchestration/costTable.d.ts +0 -121
  99. package/build/commands/orchestration/costTable.d.ts.map +0 -1
  100. package/build/commands/orchestration/costTable.js +0 -363
@@ -14,7 +14,7 @@ export function registerRoleCommands(parent, getApi) {
14
14
  .description("Create a custom role")
15
15
  .requiredOption("--name <name>", "Display name for the role")
16
16
  .requiredOption("--slug <slug>", "Unique identifier for the role")
17
- .option("--color <color>", "Role color (dot in the UI)", "grey")
17
+ .option("--color <orange|red|purple|green|yellow|grey>", "Role color (dot in the UI)", "grey")
18
18
  .option("--description <description>", "Role description")
19
19
  .option("--permissions <json>", "JSON array of permission objects", "[]")
20
20
  .action(async (opts) => {
@@ -33,7 +33,7 @@ export function registerRoleCommands(parent, getApi) {
33
33
  .description("Update a custom role")
34
34
  .requiredOption("--uuid <uuid>", "Role UUID")
35
35
  .option("--name <name>", "Display name for the role")
36
- .option("--color <color>", "Role color (dot in the UI)")
36
+ .option("--color <orange|red|purple|green|yellow|grey>", "Role color (dot in the UI)")
37
37
  .option("--description <description>", "Role description")
38
38
  .option("--permissions <json>", "JSON array of permission objects")
39
39
  .action(async (opts) => {
@@ -10,7 +10,7 @@ export function registerSessionCommands(parent, getApi) {
10
10
  .requiredOption("--session-id <sessionId>", "Claude Code session id")
11
11
  .requiredOption("--title <title>", "Short title for the session")
12
12
  .requiredOption("--summary <summary>", "Summary of what happened in the session")
13
- .option("--finished [value]", "Mark the session as finished now (sets finishedAt = now)", parseBooleanOption)
13
+ .option("--finished [true|false]", "Mark the session as finished now (sets finishedAt = now)", parseBooleanOption)
14
14
  .option("--finished-at <timestamp>", "Explicit ISO timestamp for when the session finished")
15
15
  .action(async (opts) => {
16
16
  let finishedAt;
@@ -1 +1 @@
1
- {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../src/commands/workspaceManagement/user.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAGxC,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,IAAI,CA8M7E"}
1
+ {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../src/commands/workspaceManagement/user.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAGxC,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,IAAI,CAwM7E"}
@@ -78,7 +78,7 @@ Example:
78
78
  .option("--emails <emails>", "Target user emails (comma-separated strings). At least one of --user-uuids or --emails is required")
79
79
  .requiredOption("--action <action>", "Permission action (string, required)")
80
80
  .requiredOption("--resource-uuid <uuid>", "Resource UUID to grant/deny access to (string, required)")
81
- .requiredOption("--effect <effect>", "Permission effect. Allowed values: allow, deny")
81
+ .requiredOption("--effect <allow|deny>", "Permission effect")
82
82
  .addHelpText("after", `
83
83
  Examples:
84
84
  $ cargo-ai workspaceManagement user upsert-permission --emails alice@example.com --action read --resource-uuid 550e8400-... --effect allow
@@ -106,7 +106,7 @@ Examples:
106
106
  .description("Remove a previously granted/denied user permission")
107
107
  .requiredOption("--user-uuid <uuid>", "User UUID (string, required)")
108
108
  .requiredOption("--resource-uuid <uuid>", "Resource UUID (string, required)")
109
- .requiredOption("--effect <effect>", "Permission effect to remove. Allowed values: allow, deny")
109
+ .requiredOption("--effect <allow|deny>", "Permission effect to remove")
110
110
  .addHelpText("after", `
111
111
  Example:
112
112
  $ cargo-ai workspaceManagement user remove-permission --user-uuid 550e8400-... --resource-uuid 660e8400-... --effect allow`)
@@ -7,7 +7,7 @@ export function registerWorkspacesCommands(parent, getApi) {
7
7
  workspaces
8
8
  .command("list")
9
9
  .description("List all workspaces accessible to the current user")
10
- .option("--refresh [value]", "Bypass any token cache and re-fetch from the server (useful after permission changes)", parseBooleanOption)
10
+ .option("--refresh [true|false]", "Bypass any token cache and re-fetch from the server (useful after permission changes)", parseBooleanOption)
11
11
  .addHelpText("after", `
12
12
  Examples:
13
13
  $ cargo-ai workspaceManagement workspaces list
package/build/config.d.ts CHANGED
@@ -7,6 +7,7 @@ export type Config = {
7
7
  */
8
8
  getAccessToken: AccessTokenProvider | undefined;
9
9
  baseUrl: string;
10
+ appUrl: string;
10
11
  workspaceUuid: string | undefined;
11
12
  source: ConfigSource;
12
13
  };
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAO7D,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,kBAAkB,GAAG,MAAM,CAAC;AAEvE,MAAM,MAAM,MAAM,GAAG;IACnB;;;OAGG;IACH,cAAc,EAAE,mBAAmB,GAAG,SAAS,CAAC;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAEF,wBAAgB,SAAS,IAAI,MAAM,CA0BlC;AAED;;;;;;;;;GASG;AACH,wBAAgB,iCAAiC,CAAC,IAAI,EAAE;IACtD,qBAAqB,EAAE,OAAO,CAAC;IAC/B,WAAW,EAAE,YAAY,CAAC;IAC1B,wBAAwB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5C,GAAG,MAAM,GAAG,SAAS,CA0BrB"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAO7D,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,kBAAkB,GAAG,MAAM,CAAC;AAEvE,MAAM,MAAM,MAAM,GAAG;IACnB;;;OAGG;IACH,cAAc,EAAE,mBAAmB,GAAG,SAAS,CAAC;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAEF,wBAAgB,SAAS,IAAI,MAAM,CA2BlC;AAED;;;;;;;;;GASG;AACH,wBAAgB,iCAAiC,CAAC,IAAI,EAAE;IACtD,qBAAqB,EAAE,OAAO,CAAC;IAC/B,WAAW,EAAE,YAAY,CAAC;IAC1B,wBAAwB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5C,GAAG,MAAM,GAAG,SAAS,CA0BrB"}
package/build/config.js CHANGED
@@ -19,6 +19,7 @@ export function getConfig() {
19
19
  return {
20
20
  getAccessToken: resolved.getAccessToken,
21
21
  baseUrl: resolved.baseUrl,
22
+ appUrl: resolved.appUrl,
22
23
  workspaceUuid: resolved.workspaceUuid,
23
24
  source: resolved.tokenSource,
24
25
  };
package/build/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from "node:module";
3
- import { BRAND, canRunPalette, declareSources, fetchCreditsLeft, fetchWorkspaceName, formatWorkspaceSuffix, printSetupIssues, registerCommands as registerCdkCommands, runPalette, SessionExpiredError, } from "@cargo-ai/cdk/cli";
3
+ import { availableCodingAgents, BRAND, canRunPalette, cdkProjectRoot, declareSources, fetchCreditsLeft, fetchWorkspaceName, formatWorkspaceSuffix, isInteractive, printSetupIssues, registerCommands as registerCdkCommands, runPalette, SessionExpiredError, } from "@cargo-ai/cdk/cli";
4
4
  import { Command } from "commander";
5
5
  import { AGENT_SKILLS_HINT } from "./agentSkills.js";
6
6
  import { createApi } from "./api.js";
@@ -20,12 +20,15 @@ import { registerOrchestrationCommands } from "./commands/orchestration/index.js
20
20
  import { registerRevenueOrganizationCommands } from "./commands/revenueOrganization/index.js";
21
21
  import { ExitCodes, failWith } from "./commands/runHandler.js";
22
22
  import { registerSegmentationCommands } from "./commands/segmentation/index.js";
23
+ import { registerStartCommand, runStart } from "./commands/start/index.js";
24
+ import { loadStartState, shouldRunStart } from "./commands/start/state.js";
23
25
  import { registerStorageCommands } from "./commands/storage/index.js";
24
26
  import { registerSystemOfRecordIntegrationCommands } from "./commands/systemOfRecordIntegration/index.js";
25
27
  import { registerUserManagementCommands } from "./commands/userManagement/index.js";
26
28
  import { registerVersionCommand } from "./commands/version.js";
27
29
  import { registerWorkspaceManagementCommands } from "./commands/workspaceManagement/index.js";
28
30
  import { getConfig } from "./config.js";
31
+ import { buildPaletteLayout } from "./paletteLayout.js";
29
32
  import { collectSetupIssues, isSignedIn } from "./setupIssues.js";
30
33
  import { cachedLatestVersion, maybeRefreshUpdateCache, } from "./updateNotifier.js";
31
34
  const require = createRequire(import.meta.url);
@@ -74,7 +77,15 @@ Run "cargo-ai <command> <subcommand> --help" for details on a subcommand.`);
74
77
  // Commands that are themselves the fix, or that already say all of this
75
78
  // better: the header would either duplicate their output or nag someone who is
76
79
  // mid-repair.
77
- const SETUP_HEADER_SKIP = ["login", "logout", "doctor", "version", "mcp"];
80
+ const SETUP_HEADER_SKIP = [
81
+ "login",
82
+ "logout",
83
+ "start",
84
+ "onboard",
85
+ "doctor",
86
+ "version",
87
+ "mcp",
88
+ ];
78
89
  /**
79
90
  * Say what is wrong before the command runs rather than after it fails, and
80
91
  * name the fix. Every check behind this is a file read (see `setupIssues.ts`)
@@ -163,6 +174,11 @@ declareSources({
163
174
  { argv: ["segmentation", "segment", "list"], value: "uuid", label: "name" },
164
175
  ],
165
176
  });
177
+ const binPath = process.argv[1] === undefined ? "cargo-ai" : process.argv[1];
178
+ // First, so it is the first row of the palette: for someone signed in, this is
179
+ // the shortest path to a briefed coding agent, and it was previously reachable
180
+ // only by knowing the name of a command that sounds like a one-time thing.
181
+ registerStartCommand(program, getApi, { binPath, openPalette });
166
182
  registerAuthCommands(program, getApi);
167
183
  registerVersionCommand(program, version);
168
184
  registerDoctorCommand(program, version);
@@ -190,17 +206,45 @@ registerCdkCommands(program
190
206
  // wall: twenty command groups is a list to navigate, not one to read. Anything
191
207
  // non-interactive (a pipe, CI, an agent) keeps the help it has always had.
192
208
  const bare = process.argv.slice(2).length === 0 && canRunPalette();
193
- const start = bare ? openPalette() : program.parseAsync();
194
- async function openPalette() {
209
+ // ...except for someone who has never signed in, for whom that palette is
210
+ // twenty groups that all exit 3. They get the entrance instead, once.
211
+ const entrance = bare === true &&
212
+ shouldRunStart({
213
+ signedIn: isSignedIn(),
214
+ interactive: isInteractive(),
215
+ ranBefore: loadStartState() !== undefined,
216
+ });
217
+ const start = bare === false
218
+ ? program.parseAsync()
219
+ : entrance === true
220
+ ? runStart(getApi, { binPath, openPalette }, {})
221
+ : openPalette();
222
+ async function openPalette(startPath) {
195
223
  const [title, latestVersion] = await Promise.all([
196
224
  paletteTitle(),
197
225
  maybeRefreshUpdateCache(),
198
226
  ]);
227
+ // Probed once: this shells out to `which` per candidate agent, and nobody
228
+ // installs a coding agent from inside the palette.
229
+ const agents = availableCodingAgents();
230
+ const collectIssues = () => collectSetupIssues({ currentVersion: version, latestVersion });
231
+ // Re-read after each command: signing in or out from inside the palette
232
+ // changes both what the setup line says and which rows are worth pinning.
233
+ // The cwd is re-tested too — a command can create a project in it.
234
+ const rebuildLayout = () => buildPaletteLayout({
235
+ signedIn: isSignedIn(),
236
+ agents,
237
+ cdkProjectRoot: cdkProjectRoot(process.cwd()),
238
+ });
199
239
  await runPalette({
200
240
  program,
201
- binPath: process.argv[1] === undefined ? "cargo-ai" : process.argv[1],
241
+ binPath,
242
+ startPath,
202
243
  title,
203
- issues: collectSetupIssues({ currentVersion: version, latestVersion }),
244
+ issues: collectIssues(),
245
+ refreshIssues: collectIssues,
246
+ layout: rebuildLayout(),
247
+ refreshLayout: rebuildLayout,
204
248
  });
205
249
  }
206
250
  /**
@@ -0,0 +1,16 @@
1
+ import type { CodingAgent, PaletteLayout, PinnedRow } from "@cargo-ai/cdk/cli";
2
+ export type PaletteLayoutInput = {
3
+ signedIn: boolean;
4
+ agents: readonly CodingAgent[];
5
+ /** The CDK repo root the palette is standing in, or undefined when none. */
6
+ cdkProjectRoot: string | undefined;
7
+ };
8
+ export declare function buildPaletteLayout(input: PaletteLayoutInput): PaletteLayout;
9
+ /**
10
+ * The rows above the rule. Signed out there is exactly one thing worth
11
+ * offering, and it is not a list of twenty command groups that all exit 3.
12
+ *
13
+ * Exported for tests; `buildPaletteLayout` is the only production caller.
14
+ */
15
+ export declare function pinnedRows(input: PaletteLayoutInput): PinnedRow[];
16
+ //# sourceMappingURL=paletteLayout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paletteLayout.d.ts","sourceRoot":"","sources":["../src/paletteLayout.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAsE/E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IAC/B,4EAA4E;IAC5E,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,aAAa,CAM3E;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,kBAAkB,GAAG,SAAS,EAAE,CA+CjE"}
@@ -0,0 +1,131 @@
1
+ // How the root menu is arranged: what is pinned above it, what it does not
2
+ // draw, and the order of what is left.
3
+ //
4
+ // The palette derives its rows from commander's command tree, which knows
5
+ // registration order and nothing else. That put `version` and `doctor` — twice
6
+ // a year, both of them — above the whole product, and left the thing a person
7
+ // most often wants, a coding agent briefed on their workspace, two screens
8
+ // down behind `start`. This is the missing opinion, kept in one place and as
9
+ // data, so it can be read and tested rather than inferred from a menu.
10
+ /** Pinned row values. The leading space keeps them out of the command namespace. */
11
+ const SIGN_IN = " sign-in";
12
+ const DEMO = " demo";
13
+ const CODE = " code";
14
+ const ADD_COOKBOOK = " add-cookbook";
15
+ /**
16
+ * `start` runs most of these; the pinned row is the shortcut to one of them.
17
+ * The exception is "Add a cookbook", which runs `cdk add` directly: it is not
18
+ * a `start` destination, because it needs neither the sign-in step nor a
19
+ * choice of where to carry on — you are already in the project.
20
+ */
21
+ const ENTRANCE = "start";
22
+ /**
23
+ * Root commands the menu does not draw. Each is still runnable, still in
24
+ * `--help`, and still reachable by name — they are simply not what somebody
25
+ * opening a menu is looking for.
26
+ *
27
+ * `start` is hidden because its destinations are pinned above: a row that
28
+ * opens a menu of rows already on screen is a detour. `version` is
29
+ * `--version`, and `doctor` reports it anyway.
30
+ */
31
+ const HIDDEN = [ENTRANCE, "version"];
32
+ /**
33
+ * The sections, in reading order: everything the workspace is made of, then
34
+ * the workspace as code on its own, then the machine you are sitting at —
35
+ * which ends beside `/exit`, since leaving and checking your setup are the
36
+ * same kind of errand. What people reach for most is not here at all; those
37
+ * are the pinned rows, above the first section.
38
+ *
39
+ * Anything a release adds and nobody lists here still appears, in tree order,
40
+ * in a final section — a new command is never invisible by omission. So a new
41
+ * command group belongs in whichever of these three it is part of, and needs
42
+ * no entry to be reachable.
43
+ */
44
+ const SECTIONS = [
45
+ // Everything the workspace is: what you run, the data and connectors it runs
46
+ // on, the knowledge it reads, and the surfaces it exposes. One group, most
47
+ // used first — the divisions that used to be here were the CLI's own
48
+ // architecture showing through, which is not a distinction anybody browsing
49
+ // a menu is making.
50
+ [
51
+ "orchestration",
52
+ "storage",
53
+ "connection",
54
+ "segmentation",
55
+ "ai",
56
+ "context",
57
+ "content",
58
+ "hosting",
59
+ "mcp",
60
+ "mailboxManagement",
61
+ "workspaceManagement",
62
+ "billing",
63
+ "observability",
64
+ "revenue-organization",
65
+ "expression",
66
+ "user-management",
67
+ "system-of-record",
68
+ ],
69
+ // The workspace as code sits on its own: it is the same resources again,
70
+ // declared in a repo rather than run from here.
71
+ ["cdk"],
72
+ ["doctor", "whoami", "login", "logout"],
73
+ ];
74
+ export function buildPaletteLayout(input) {
75
+ return {
76
+ pinned: pinnedRows(input),
77
+ hide: HIDDEN,
78
+ sections: SECTIONS,
79
+ };
80
+ }
81
+ /**
82
+ * The rows above the rule. Signed out there is exactly one thing worth
83
+ * offering, and it is not a list of twenty command groups that all exit 3.
84
+ *
85
+ * Exported for tests; `buildPaletteLayout` is the only production caller.
86
+ */
87
+ export function pinnedRows(input) {
88
+ if (input.signedIn === false) {
89
+ return [
90
+ {
91
+ value: SIGN_IN,
92
+ label: "Sign in",
93
+ hint: "then pick where to carry on",
94
+ argv: [ENTRANCE],
95
+ },
96
+ ];
97
+ }
98
+ // Inside a CDK project, "Add a cookbook" is more useful than "Set up as
99
+ // code" — the project already exists. Outside, scaffold one.
100
+ const cdkRow = input.cdkProjectRoot !== undefined
101
+ ? {
102
+ value: ADD_COOKBOOK,
103
+ label: "Add a cookbook",
104
+ hint: "install a worked pipeline into this project",
105
+ // `--dir` because `cdk add` refuses a directory with no
106
+ // package.json, and the palette is as often open in `infra/` — where
107
+ // the scaffold's README sends people — as at the root.
108
+ argv: ["cdk", "add", "--dir", input.cdkProjectRoot],
109
+ }
110
+ : {
111
+ value: CODE,
112
+ label: "Set up as code",
113
+ hint: "scaffold a CDK project",
114
+ argv: [ENTRANCE, "--continue", "code"],
115
+ };
116
+ return [
117
+ ...input.agents.map((agent) => ({
118
+ value: ` agent:${agent.bin}`,
119
+ label: `Open ${agent.label}`,
120
+ hint: "briefed on this workspace",
121
+ argv: [ENTRANCE, "--continue", agent.bin],
122
+ })),
123
+ {
124
+ value: DEMO,
125
+ label: "Guided demo",
126
+ hint: "companies, then the people, for your ICP",
127
+ argv: [ENTRANCE, "--continue", "demo"],
128
+ },
129
+ cdkRow,
130
+ ];
131
+ }
@@ -1,8 +1,7 @@
1
- import type { SetupIssue } from "@cargo-ai/cdk/cli";
2
- export type SkillsPin = {
3
- version: string;
4
- path: string;
5
- };
1
+ import type { SetupIssue, SkillsPin } from "@cargo-ai/cdk/cli";
2
+ import { isSignedIn, readSkillsPin } from "@cargo-ai/cdk/cli";
3
+ export type { SkillsPin };
4
+ export { isSignedIn, readSkillsPin };
6
5
  export type SetupIssueInput = {
7
6
  currentVersion: string;
8
7
  /**
@@ -23,15 +22,4 @@ export type SetupIssueDeps = {
23
22
  readSkillsPin: () => SkillsPin | undefined;
24
23
  };
25
24
  export declare function collectSetupIssues(input: SetupIssueInput, deps?: SetupIssueDeps): SetupIssue[];
26
- /**
27
- * The CLI version the installed skills bundle was written against, from
28
- * whichever agent's skills directory holds one.
29
- */
30
- export declare function readSkillsPin(): SkillsPin | undefined;
31
- /**
32
- * Deliberately not `getConfig()`: that resolves the whole auth config and exits
33
- * the process on a workspace conflict, which a header printed before every
34
- * command must never do. Presence of a credential is all this line needs.
35
- */
36
- export declare function isSignedIn(): boolean;
37
25
  //# sourceMappingURL=setupIssues.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"setupIssues.d.ts","sourceRoot":"","sources":["../src/setupIssues.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAWpD,MAAM,MAAM,SAAS,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,MAAM,MAAM,eAAe,GAAG;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,aAAa,EAAE,MAAM,SAAS,GAAG,SAAS,CAAC;CAC5C,CAAC;AAIF,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,eAAe,EACtB,IAAI,GAAE,cAA4B,GACjC,UAAU,EAAE,CAyCd;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,SAAS,GAAG,SAAS,CAcrD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAYpC"}
1
+ {"version":3,"file":"setupIssues.d.ts","sourceRoot":"","sources":["../src/setupIssues.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EACL,UAAU,EACV,aAAa,EAEd,MAAM,mBAAmB,CAAC;AAM3B,YAAY,EAAE,SAAS,EAAE,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC;AAErC,MAAM,MAAM,eAAe,GAAG;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,aAAa,EAAE,MAAM,SAAS,GAAG,SAAS,CAAC;CAC5C,CAAC;AAIF,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,eAAe,EACtB,IAAI,GAAE,cAA4B,GACjC,UAAU,EAAE,CAyCd"}
@@ -4,14 +4,10 @@
4
4
  // This runs before every command, so every check here is a small file read or
5
5
  // cheaper — no network. `cargo-ai doctor` is the same list with the online
6
6
  // checks added.
7
- import * as fs from "node:fs";
8
- import * as os from "node:os";
9
- import * as path from "node:path";
10
- import { loadCredentials } from "./credentials.js";
7
+ import { isSignedIn, readSkillsPin, SKILLS_INSTALL_COMMAND, } from "@cargo-ai/cdk/cli";
11
8
  import { isOutdated, UPDATE_COMMAND } from "./version.js";
12
- const SEMVER_PATTERN = /^\d+\.\d+\.\d+$/;
13
- const SKILLS_UPDATE_COMMAND = "npx skills add getcargohq/cargo-skills";
14
9
  const LOGIN_COMMAND = "cargo-ai login --oauth";
10
+ export { isSignedIn, readSkillsPin };
15
11
  const machineDeps = { isSignedIn, readSkillsPin };
16
12
  export function collectSetupIssues(input, deps = machineDeps) {
17
13
  const issues = [];
@@ -41,53 +37,8 @@ export function collectSetupIssues(input, deps = machineDeps) {
41
37
  label: `skills expect CLI ${pin.version}`,
42
38
  fix: isOutdated(input.currentVersion, pin.version) === true
43
39
  ? UPDATE_COMMAND
44
- : SKILLS_UPDATE_COMMAND,
40
+ : SKILLS_INSTALL_COMMAND,
45
41
  });
46
42
  }
47
43
  return issues;
48
44
  }
49
- /**
50
- * The CLI version the installed skills bundle was written against, from
51
- * whichever agent's skills directory holds one.
52
- */
53
- export function readSkillsPin() {
54
- for (const candidate of skillsPinCandidates()) {
55
- try {
56
- const raw = fs.readFileSync(candidate, "utf8").trim();
57
- if (SEMVER_PATTERN.test(raw)) {
58
- return { version: raw, path: candidate };
59
- }
60
- }
61
- catch {
62
- // Missing or unreadable — try the next candidate.
63
- }
64
- }
65
- return undefined;
66
- }
67
- /**
68
- * Deliberately not `getConfig()`: that resolves the whole auth config and exits
69
- * the process on a workspace conflict, which a header printed before every
70
- * command must never do. Presence of a credential is all this line needs.
71
- */
72
- export function isSignedIn() {
73
- const token = process.env["CARGO_API_TOKEN"];
74
- if (token !== undefined && token.trim() !== "") {
75
- return true;
76
- }
77
- try {
78
- return loadCredentials() !== undefined;
79
- }
80
- catch {
81
- return false;
82
- }
83
- }
84
- function skillsPinCandidates() {
85
- const home = os.homedir();
86
- const envDir = process.env["CARGO_SKILLS_DIR"];
87
- const candidates = [];
88
- if (envDir !== undefined && envDir.length > 0) {
89
- candidates.push(path.join(envDir, "cargo", "cli-version"));
90
- }
91
- candidates.push(path.join(home, ".claude", "skills", "cargo", "cli-version"), path.join(home, ".claude", "plugins", "marketplaces", "cargo", "cargo", "cli-version"), path.join(home, ".openclaw", "skills", "cargo", "cli-version"));
92
- return candidates;
93
- }
@@ -1 +1 @@
1
- {"version":3,"file":"booleanOption.d.ts","sourceRoot":"","sources":["../../src/utils/booleanOption.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,kBAAkB,UAAW,MAAM,GAAG,OAAO,KAAG,OAY5D,CAAC;AAMF,eAAO,MAAM,kBAAkB,aACnB,OAAO,GAAG,SAAS,YACnB,OAAO,GAAG,SAAS;cACN,MAAM;cAAY,MAAM;MAC9C,OAAO,GAAG,SAkBZ,CAAC"}
1
+ {"version":3,"file":"booleanOption.d.ts","sourceRoot":"","sources":["../../src/utils/booleanOption.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,kBAAkB,UAAW,MAAM,GAAG,OAAO,KAAG,OAY5D,CAAC;AAMF,eAAO,MAAM,kBAAkB,aACnB,OAAO,GAAG,SAAS,YACnB,OAAO,GAAG,SAAS;cACN,MAAM;cAAY,MAAM;MAC9C,OAAO,GAAG,SAkBZ,CAAC"}
@@ -1,8 +1,9 @@
1
1
  import { InvalidArgumentError } from "commander";
2
- // Boolean flags are declared as `--flag [value]` so that both `--flag` and the
3
- // form people actually reach for, `--flag false`, are accepted. Commander hands
4
- // this parser the literal `true` when the flag is passed bare, and the raw
5
- // string when a value follows it.
2
+ // Boolean flags are declared as `--flag [true|false]` so that both `--flag` and
3
+ // the form people actually reach for, `--flag false`, are accepted. Commander
4
+ // hands this parser the literal `true` when the flag is passed bare, and the raw
5
+ // string when a value follows it. Spelling the two values out in the placeholder
6
+ // is what puts them in `--help` and turns the flag into a menu in the palette.
6
7
  //
7
8
  // Declaring them as bare flags instead is a trap: `--flag false` parses as the
8
9
  // flag plus a stray `false`, so the caller gets the opposite of what they typed.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cargo-ai/cli",
3
- "version": "1.0.72",
3
+ "version": "1.0.74",
4
4
  "private": false,
5
5
  "license": "UNLICENSED",
6
6
  "homepage": "https://getcargo.ai",
@@ -64,9 +64,9 @@
64
64
  "format:check": "prettier --check ."
65
65
  },
66
66
  "dependencies": {
67
- "@cargo-ai/api": "^1.0.69",
67
+ "@cargo-ai/api": "^1.0.71",
68
68
  "@cargo-ai/app-sdk": "^1.0.9",
69
- "@cargo-ai/cdk": "^1.0.57",
69
+ "@cargo-ai/cdk": "^1.0.60",
70
70
  "@cargo-ai/types": "^1.0.66",
71
71
  "@cargo-ai/worker-sdk": "^1.0.17",
72
72
  "@modelcontextprotocol/sdk": "1.29.0",
@@ -1,121 +0,0 @@
1
- /**
2
- * Renders every credits-based action as a pricing table.
3
- *
4
- * The catalog is the only place pricing lives, and it moves — providers get
5
- * added, actions get repriced, tiers get split. Anything that copies those
6
- * numbers by hand goes stale silently, so the table is generated rather than
7
- * maintained.
8
- *
9
- * Sourced from `orchestration action list` (without a limit), which spans
10
- * connector and native actions in a single call. Natives are a small set but
11
- * not a free one — `sendEmail` is 0.1, `modelAsk` 0.5, `fileSearch` 0.02/1k
12
- * tokens — and a table built from connectors alone silently omits them while
13
- * claiming to be complete.
14
- */
15
- /**
16
- * Shape returned by `orchestration action list` for each matching action.
17
- */
18
- export type ListActionMatch = {
19
- name: string;
20
- description?: string;
21
- score: number;
22
- action: {
23
- kind: string;
24
- integrationSlug?: string;
25
- actionSlug?: string;
26
- };
27
- integrationName?: string;
28
- category?: string;
29
- credits?: CreditsCost[];
30
- };
31
- export type CreditsCost = {
32
- type?: string;
33
- cost?: number;
34
- unit?: string;
35
- unitsCount?: number;
36
- fixedCost?: number;
37
- config?: {
38
- jsonSchema?: JsonSchema;
39
- };
40
- };
41
- type JsonSchema = {
42
- type?: string;
43
- const?: unknown;
44
- enum?: unknown[];
45
- minItems?: number;
46
- maxItems?: number;
47
- properties?: Record<string, JsonSchema>;
48
- required?: string[];
49
- };
50
- export type CatalogAction = {
51
- name?: string;
52
- description?: string;
53
- credits?: {
54
- costs?: CreditsCost[];
55
- };
56
- };
57
- export type CatalogIntegration = {
58
- slug: string;
59
- name: string;
60
- category?: string;
61
- actions?: Record<string, CatalogAction>;
62
- };
63
- export type CostVariant = {
64
- /** Config that selects this price, e.g. `model=gpt-5-nano`. */
65
- when: string;
66
- /** Rendered price, e.g. `0.4 + 0.006 / 1k token`. */
67
- price: string;
68
- };
69
- export type CostRow = {
70
- integrationSlug: string;
71
- integrationName: string;
72
- category: string | undefined;
73
- actionSlug: string;
74
- name: string | undefined;
75
- description: string | undefined;
76
- /** Cheapest and dearest per-unit price, in credits. */
77
- minCost: number;
78
- maxCost: number;
79
- /**
80
- * What one call at the cheapest config costs — per-unit price plus any flat
81
- * component. The sort key, so a cheap-looking per-item rate with a base
82
- * charge doesn't outrank a genuinely cheaper flat action.
83
- */
84
- sortCost: number;
85
- /** Single price, or `min–max` when config picks between several. */
86
- price: string;
87
- /** Config fields that move the price; empty when there is only one. */
88
- variesBy: string[];
89
- variants: CostVariant[];
90
- };
91
- export type CostTableSummary = {
92
- integrations: number;
93
- integrationsWithActions: number;
94
- actions: number;
95
- creditsBasedActions: number;
96
- freeActions: number;
97
- };
98
- /**
99
- * Natives have no integration of their own. `native` cannot collide with a real
100
- * integration slug, and it is what `kind` an action object needs to run one:
101
- * `{"kind":"native","actionSlug":"sendEmail"}`.
102
- */
103
- export declare const NATIVE_PROVIDER_SLUG = "native";
104
- export declare function asNativeCatalogIntegration(actions: Record<string, CatalogAction> | undefined): CatalogIntegration;
105
- /**
106
- * Groups the flat action list returned by `orchestration action list` into the
107
- * integration-grouped shape that `buildCostRows` and `summarize` expect.
108
- */
109
- export declare function groupActionsByIntegration(actions: ListActionMatch[]): CatalogIntegration[];
110
- export declare function buildCostRows(integrations: CatalogIntegration[]): CostRow[];
111
- export declare function summarize(integrations: CatalogIntegration[]): CostTableSummary;
112
- export type RenderCostTableOptions = {
113
- generatedAt: string;
114
- filter?: {
115
- category?: string;
116
- integration?: string;
117
- };
118
- };
119
- export declare function renderCostTable(rows: CostRow[], summary: CostTableSummary, opts: RenderCostTableOptions): string;
120
- export {};
121
- //# sourceMappingURL=costTable.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"costTable.d.ts","sourceRoot":"","sources":["../../../src/commands/orchestration/costTable.ts"],"names":[],"mappings":"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"}