@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.
- package/README.md +21 -0
- package/build/commands/ai/agent.js +2 -2
- package/build/commands/ai/chat.js +1 -1
- package/build/commands/ai/document.js +1 -1
- package/build/commands/ai/memory.js +3 -3
- package/build/commands/ai/message.js +2 -2
- package/build/commands/ai/release.d.ts.map +1 -1
- package/build/commands/ai/release.js +3 -3
- package/build/commands/ai/vote.d.ts.map +1 -1
- package/build/commands/ai/vote.js +1 -1
- package/build/commands/auth/email.d.ts +24 -0
- package/build/commands/auth/email.d.ts.map +1 -1
- package/build/commands/auth/email.js +27 -14
- package/build/commands/auth/index.d.ts.map +1 -1
- package/build/commands/auth/index.js +9 -3
- package/build/commands/auth/workspace.d.ts.map +1 -1
- package/build/commands/auth/workspace.js +99 -26
- package/build/commands/billing/subscription.d.ts.map +1 -1
- package/build/commands/billing/subscription.js +3 -3
- package/build/commands/billing/usage.d.ts.map +1 -1
- package/build/commands/billing/usage.js +1 -1
- package/build/commands/connection/action.d.ts.map +1 -1
- package/build/commands/connection/action.js +1 -1
- package/build/commands/connection/connector.d.ts.map +1 -1
- package/build/commands/connection/connector.js +145 -22
- package/build/commands/connection/integration.d.ts.map +1 -1
- package/build/commands/connection/integration.js +1 -1
- package/build/commands/content/library.js +1 -1
- package/build/commands/context/runtime.js +1 -1
- package/build/commands/expression/recipe.d.ts.map +1 -1
- package/build/commands/expression/recipe.js +9 -9
- package/build/commands/mailboxManagement/event.js +1 -1
- package/build/commands/mailboxManagement/mailbox.d.ts.map +1 -1
- package/build/commands/mailboxManagement/mailbox.js +3 -3
- package/build/commands/mailboxManagement/message.js +1 -1
- package/build/commands/mailboxManagement/suppression.js +1 -1
- package/build/commands/mailboxManagement/thread.js +1 -1
- package/build/commands/observability/alert.js +2 -2
- package/build/commands/orchestration/action.d.ts.map +1 -1
- package/build/commands/orchestration/action.js +18 -63
- package/build/commands/orchestration/batch.js +7 -7
- package/build/commands/orchestration/node.js +2 -2
- package/build/commands/orchestration/play.d.ts.map +1 -1
- package/build/commands/orchestration/play.js +9 -9
- package/build/commands/orchestration/record.d.ts.map +1 -1
- package/build/commands/orchestration/record.js +10 -10
- package/build/commands/orchestration/release.js +1 -1
- package/build/commands/orchestration/run.d.ts.map +1 -1
- package/build/commands/orchestration/run.js +14 -14
- package/build/commands/orchestration/span.d.ts.map +1 -1
- package/build/commands/orchestration/span.js +4 -4
- package/build/commands/orchestration/tool.js +2 -2
- package/build/commands/orchestration/trace.d.ts.map +1 -1
- package/build/commands/orchestration/trace.js +2 -2
- package/build/commands/revenueOrganization/capacity.d.ts.map +1 -1
- package/build/commands/revenueOrganization/capacity.js +2 -2
- package/build/commands/revenueOrganization/territory.js +2 -2
- package/build/commands/segmentation/change.d.ts.map +1 -1
- package/build/commands/segmentation/change.js +4 -4
- package/build/commands/segmentation/record.js +1 -1
- package/build/commands/segmentation/segment.js +2 -2
- package/build/commands/start/brief.d.ts +107 -0
- package/build/commands/start/brief.d.ts.map +1 -0
- package/build/commands/start/brief.js +222 -0
- package/build/commands/start/index.d.ts +44 -0
- package/build/commands/start/index.d.ts.map +1 -0
- package/build/commands/start/index.js +431 -0
- package/build/commands/start/state.d.ts +50 -0
- package/build/commands/start/state.d.ts.map +1 -0
- package/build/commands/start/state.js +101 -0
- package/build/commands/storage/query.js +1 -1
- package/build/commands/storage/record.js +2 -2
- package/build/commands/storage/run.js +2 -2
- package/build/commands/systemOfRecordIntegration/log.js +1 -1
- package/build/commands/systemOfRecordIntegration/systemOfRecord.js +1 -1
- package/build/commands/version.js +1 -1
- package/build/commands/workspaceManagement/folder.d.ts.map +1 -1
- package/build/commands/workspaceManagement/folder.js +1 -1
- package/build/commands/workspaceManagement/role.d.ts.map +1 -1
- package/build/commands/workspaceManagement/role.js +2 -2
- package/build/commands/workspaceManagement/session.js +1 -1
- package/build/commands/workspaceManagement/user.d.ts.map +1 -1
- package/build/commands/workspaceManagement/user.js +2 -2
- package/build/commands/workspaceManagement/workspaces.js +1 -1
- package/build/config.d.ts +1 -0
- package/build/config.d.ts.map +1 -1
- package/build/config.js +1 -0
- package/build/index.js +50 -6
- package/build/paletteLayout.d.ts +16 -0
- package/build/paletteLayout.d.ts.map +1 -0
- package/build/paletteLayout.js +131 -0
- package/build/setupIssues.d.ts +4 -16
- package/build/setupIssues.d.ts.map +1 -1
- package/build/setupIssues.js +3 -52
- package/build/utils/booleanOption.d.ts.map +1 -1
- package/build/utils/booleanOption.js +5 -4
- package/package.json +3 -3
- package/build/commands/orchestration/costTable.d.ts +0 -121
- package/build/commands/orchestration/costTable.d.ts.map +0 -1
- 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 <
|
|
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 <
|
|
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 [
|
|
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,
|
|
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 <
|
|
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 <
|
|
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 [
|
|
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
package/build/config.d.ts.map
CHANGED
|
@@ -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,
|
|
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
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 = [
|
|
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
|
-
|
|
194
|
-
|
|
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
|
|
241
|
+
binPath,
|
|
242
|
+
startPath,
|
|
202
243
|
title,
|
|
203
|
-
issues:
|
|
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
|
+
}
|
package/build/setupIssues.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import type { SetupIssue } from "@cargo-ai/cdk/cli";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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":"
|
|
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"}
|
package/build/setupIssues.js
CHANGED
|
@@ -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
|
|
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
|
-
:
|
|
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":"
|
|
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 [
|
|
3
|
-
// form people actually reach for, `--flag false`, are accepted. Commander
|
|
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.
|
|
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.
|
|
67
|
+
"@cargo-ai/api": "^1.0.71",
|
|
68
68
|
"@cargo-ai/app-sdk": "^1.0.9",
|
|
69
|
-
"@cargo-ai/cdk": "^1.0.
|
|
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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"}
|