convex 1.48.0 → 1.49.0-alpha.0
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/CHANGELOG.md +7 -0
- package/dist/browser.bundle.js +1 -1
- package/dist/browser.bundle.js.map +1 -1
- package/dist/cjs/bundler/context.js +7 -5
- package/dist/cjs/bundler/context.js.map +2 -2
- package/dist/cjs/bundler/fs.js +47 -6
- package/dist/cjs/bundler/fs.js.map +2 -2
- package/dist/cjs/cli/account.js +237 -0
- package/dist/cjs/cli/account.js.map +7 -0
- package/dist/cjs/cli/configure.js +15 -2
- package/dist/cjs/cli/configure.js.map +2 -2
- package/dist/cjs/cli/lib/accountManagement.js +196 -0
- package/dist/cjs/cli/lib/accountManagement.js.map +7 -0
- package/dist/cjs/cli/lib/accounts.js +334 -0
- package/dist/cjs/cli/lib/accounts.js.map +7 -0
- package/dist/cjs/cli/lib/deployKeyWarning.js +43 -0
- package/dist/cjs/cli/lib/deployKeyWarning.js.map +7 -0
- package/dist/cjs/cli/lib/deployment.js +2 -0
- package/dist/cjs/cli/lib/deployment.js.map +2 -2
- package/dist/cjs/cli/lib/deploymentSelection.js +27 -18
- package/dist/cjs/cli/lib/deploymentSelection.js.map +2 -2
- package/dist/cjs/cli/lib/envvars.js +32 -0
- package/dist/cjs/cli/lib/envvars.js.map +2 -2
- package/dist/cjs/cli/lib/fsUtils.js +1 -1
- package/dist/cjs/cli/lib/fsUtils.js.map +2 -2
- package/dist/cjs/cli/lib/generateDocs.js +1 -1
- package/dist/cjs/cli/lib/generateDocs.js.map +1 -1
- package/dist/cjs/cli/lib/login.js +42 -4
- package/dist/cjs/cli/lib/login.js.map +3 -3
- package/dist/cjs/cli/lib/mcp/requestContext.js +5 -1
- package/dist/cjs/cli/lib/mcp/requestContext.js.map +2 -2
- package/dist/cjs/cli/lib/plugins/claudeCode.js +188 -0
- package/dist/cjs/cli/lib/plugins/claudeCode.js.map +7 -0
- package/dist/cjs/cli/lib/plugins/codex.js +167 -0
- package/dist/cjs/cli/lib/plugins/codex.js.map +7 -0
- package/dist/cjs/cli/lib/plugins/harness.js +50 -0
- package/dist/cjs/cli/lib/plugins/harness.js.map +7 -0
- package/dist/cjs/cli/lib/plugins/marketplaces.js +76 -0
- package/dist/cjs/cli/lib/plugins/marketplaces.js.map +7 -0
- package/dist/cjs/cli/lib/plugins/skills.js +98 -0
- package/dist/cjs/cli/lib/plugins/skills.js.map +7 -0
- package/dist/cjs/cli/lib/plugins/utils.js +125 -0
- package/dist/cjs/cli/lib/plugins/utils.js.map +7 -0
- package/dist/cjs/cli/lib/utils/utils.js +18 -9
- package/dist/cjs/cli/lib/utils/utils.js.map +2 -2
- package/dist/cjs/cli/login.js +213 -114
- package/dist/cjs/cli/login.js.map +3 -3
- package/dist/cjs/cli/logout.js +113 -12
- package/dist/cjs/cli/logout.js.map +3 -3
- package/dist/cjs/cli/mcp.js +43 -10
- package/dist/cjs/cli/mcp.js.map +3 -3
- package/dist/cjs/cli/plugins.js +114 -0
- package/dist/cjs/cli/plugins.js.map +7 -0
- package/dist/cjs/cli/program.js +3 -1
- package/dist/cjs/cli/program.js.map +2 -2
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/server/impl/actions_impl.js.map +2 -2
- package/dist/cjs-types/bundler/context.d.ts +5 -0
- package/dist/cjs-types/bundler/context.d.ts.map +1 -1
- package/dist/cjs-types/bundler/fs.d.ts +7 -2
- package/dist/cjs-types/bundler/fs.d.ts.map +1 -1
- package/dist/cjs-types/cli/account.d.ts +6 -0
- package/dist/cjs-types/cli/account.d.ts.map +1 -0
- package/dist/cjs-types/cli/configure.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/accountManagement.d.ts +10 -0
- package/dist/cjs-types/cli/lib/accountManagement.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/accounts.d.ts +59 -0
- package/dist/cjs-types/cli/lib/accounts.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/deployKeyWarning.d.ts +3 -0
- package/dist/cjs-types/cli/lib/deployKeyWarning.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/deployment.d.ts +2 -0
- package/dist/cjs-types/cli/lib/deployment.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/deploymentSelection.d.ts +2 -1
- package/dist/cjs-types/cli/lib/deploymentSelection.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/envvars.d.ts +6 -0
- package/dist/cjs-types/cli/lib/envvars.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/fsUtils.d.ts +1 -0
- package/dist/cjs-types/cli/lib/fsUtils.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/login.d.ts +3 -1
- package/dist/cjs-types/cli/lib/login.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/mcp/requestContext.d.ts.map +1 -1
- package/dist/cjs-types/cli/lib/mcp/tools/insights.d.ts +2 -2
- package/dist/cjs-types/cli/lib/plugins/claudeCode.d.ts +25 -0
- package/dist/cjs-types/cli/lib/plugins/claudeCode.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/plugins/codex.d.ts +25 -0
- package/dist/cjs-types/cli/lib/plugins/codex.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/plugins/harness.d.ts +33 -0
- package/dist/cjs-types/cli/lib/plugins/harness.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/plugins/marketplaces.d.ts +40 -0
- package/dist/cjs-types/cli/lib/plugins/marketplaces.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/plugins/skills.d.ts +18 -0
- package/dist/cjs-types/cli/lib/plugins/skills.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/plugins/utils.d.ts +21 -0
- package/dist/cjs-types/cli/lib/plugins/utils.d.ts.map +1 -0
- package/dist/cjs-types/cli/lib/utils/utils.d.ts +5 -0
- package/dist/cjs-types/cli/lib/utils/utils.d.ts.map +1 -1
- package/dist/cjs-types/cli/login.d.ts +21 -0
- package/dist/cjs-types/cli/login.d.ts.map +1 -1
- package/dist/cjs-types/cli/logout.d.ts +8 -1
- package/dist/cjs-types/cli/logout.d.ts.map +1 -1
- package/dist/cjs-types/cli/mcp.d.ts.map +1 -1
- package/dist/cjs-types/cli/plugins.d.ts +3 -0
- package/dist/cjs-types/cli/plugins.d.ts.map +1 -0
- package/dist/cjs-types/cli/program.d.ts.map +1 -1
- package/dist/cjs-types/index.d.ts +1 -1
- package/dist/cjs-types/index.d.ts.map +1 -1
- package/dist/cjs-types/server/impl/actions_impl.d.ts +3 -2
- package/dist/cjs-types/server/impl/actions_impl.d.ts.map +1 -1
- package/dist/cli.bundle.cjs +10059 -7094
- package/dist/cli.bundle.cjs.map +4 -4
- package/dist/esm/bundler/context.js +7 -5
- package/dist/esm/bundler/context.js.map +2 -2
- package/dist/esm/bundler/fs.js +47 -6
- package/dist/esm/bundler/fs.js.map +2 -2
- package/dist/esm/cli/account.js +221 -0
- package/dist/esm/cli/account.js.map +7 -0
- package/dist/esm/cli/configure.js +15 -2
- package/dist/esm/cli/configure.js.map +2 -2
- package/dist/esm/cli/lib/accountManagement.js +179 -0
- package/dist/esm/cli/lib/accountManagement.js.map +7 -0
- package/dist/esm/cli/lib/accounts.js +289 -0
- package/dist/esm/cli/lib/accounts.js.map +7 -0
- package/dist/esm/cli/lib/deployKeyWarning.js +27 -0
- package/dist/esm/cli/lib/deployKeyWarning.js.map +7 -0
- package/dist/esm/cli/lib/deployment.js +2 -2
- package/dist/esm/cli/lib/deployment.js.map +2 -2
- package/dist/esm/cli/lib/deploymentSelection.js +35 -20
- package/dist/esm/cli/lib/deploymentSelection.js.map +2 -2
- package/dist/esm/cli/lib/envvars.js +35 -1
- package/dist/esm/cli/lib/envvars.js.map +2 -2
- package/dist/esm/cli/lib/fsUtils.js +1 -1
- package/dist/esm/cli/lib/fsUtils.js.map +2 -2
- package/dist/esm/cli/lib/generateDocs.js +1 -1
- package/dist/esm/cli/lib/generateDocs.js.map +1 -1
- package/dist/esm/cli/lib/login.js +52 -4
- package/dist/esm/cli/lib/login.js.map +3 -3
- package/dist/esm/cli/lib/mcp/requestContext.js +5 -1
- package/dist/esm/cli/lib/mcp/requestContext.js.map +2 -2
- package/dist/esm/cli/lib/plugins/claudeCode.js +160 -0
- package/dist/esm/cli/lib/plugins/claudeCode.js.map +7 -0
- package/dist/esm/cli/lib/plugins/codex.js +140 -0
- package/dist/esm/cli/lib/plugins/codex.js.map +7 -0
- package/dist/esm/cli/lib/plugins/harness.js +17 -0
- package/dist/esm/cli/lib/plugins/harness.js.map +7 -0
- package/dist/esm/cli/lib/plugins/marketplaces.js +53 -0
- package/dist/esm/cli/lib/plugins/marketplaces.js.map +7 -0
- package/dist/esm/cli/lib/plugins/skills.js +65 -0
- package/dist/esm/cli/lib/plugins/skills.js.map +7 -0
- package/dist/esm/cli/lib/plugins/utils.js +86 -0
- package/dist/esm/cli/lib/plugins/utils.js.map +7 -0
- package/dist/esm/cli/lib/utils/utils.js +16 -9
- package/dist/esm/cli/lib/utils/utils.js.map +2 -2
- package/dist/esm/cli/login.js +225 -112
- package/dist/esm/cli/login.js.map +3 -3
- package/dist/esm/cli/logout.js +110 -13
- package/dist/esm/cli/logout.js.map +2 -2
- package/dist/esm/cli/mcp.js +34 -10
- package/dist/esm/cli/mcp.js.map +2 -2
- package/dist/esm/cli/plugins.js +99 -0
- package/dist/esm/cli/plugins.js.map +7 -0
- package/dist/esm/cli/program.js +3 -1
- package/dist/esm/cli/program.js.map +2 -2
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/server/impl/actions_impl.js.map +2 -2
- package/dist/esm-types/bundler/context.d.ts +5 -0
- package/dist/esm-types/bundler/context.d.ts.map +1 -1
- package/dist/esm-types/bundler/fs.d.ts +7 -2
- package/dist/esm-types/bundler/fs.d.ts.map +1 -1
- package/dist/esm-types/cli/account.d.ts +6 -0
- package/dist/esm-types/cli/account.d.ts.map +1 -0
- package/dist/esm-types/cli/configure.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/accountManagement.d.ts +10 -0
- package/dist/esm-types/cli/lib/accountManagement.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/accounts.d.ts +59 -0
- package/dist/esm-types/cli/lib/accounts.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/deployKeyWarning.d.ts +3 -0
- package/dist/esm-types/cli/lib/deployKeyWarning.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/deployment.d.ts +2 -0
- package/dist/esm-types/cli/lib/deployment.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/deploymentSelection.d.ts +2 -1
- package/dist/esm-types/cli/lib/deploymentSelection.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/envvars.d.ts +6 -0
- package/dist/esm-types/cli/lib/envvars.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/fsUtils.d.ts +1 -0
- package/dist/esm-types/cli/lib/fsUtils.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/login.d.ts +3 -1
- package/dist/esm-types/cli/lib/login.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/mcp/requestContext.d.ts.map +1 -1
- package/dist/esm-types/cli/lib/mcp/tools/insights.d.ts +2 -2
- package/dist/esm-types/cli/lib/plugins/claudeCode.d.ts +25 -0
- package/dist/esm-types/cli/lib/plugins/claudeCode.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/plugins/codex.d.ts +25 -0
- package/dist/esm-types/cli/lib/plugins/codex.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/plugins/harness.d.ts +33 -0
- package/dist/esm-types/cli/lib/plugins/harness.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/plugins/marketplaces.d.ts +40 -0
- package/dist/esm-types/cli/lib/plugins/marketplaces.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/plugins/skills.d.ts +18 -0
- package/dist/esm-types/cli/lib/plugins/skills.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/plugins/utils.d.ts +21 -0
- package/dist/esm-types/cli/lib/plugins/utils.d.ts.map +1 -0
- package/dist/esm-types/cli/lib/utils/utils.d.ts +5 -0
- package/dist/esm-types/cli/lib/utils/utils.d.ts.map +1 -1
- package/dist/esm-types/cli/login.d.ts +21 -0
- package/dist/esm-types/cli/login.d.ts.map +1 -1
- package/dist/esm-types/cli/logout.d.ts +8 -1
- package/dist/esm-types/cli/logout.d.ts.map +1 -1
- package/dist/esm-types/cli/mcp.d.ts.map +1 -1
- package/dist/esm-types/cli/plugins.d.ts +3 -0
- package/dist/esm-types/cli/plugins.d.ts.map +1 -0
- package/dist/esm-types/cli/program.d.ts.map +1 -1
- package/dist/esm-types/index.d.ts +1 -1
- package/dist/esm-types/index.d.ts.map +1 -1
- package/dist/esm-types/server/impl/actions_impl.d.ts +3 -2
- package/dist/esm-types/server/impl/actions_impl.d.ts.map +1 -1
- package/dist/react.bundle.js +1 -1
- package/dist/react.bundle.js.map +1 -1
- package/package.json +2 -2
- package/src/bundler/context.ts +9 -5
- package/src/bundler/fs.ts +54 -5
- package/src/cli/account.ts +320 -0
- package/src/cli/configure.ts +18 -2
- package/src/cli/lib/accountManagement.ts +262 -0
- package/src/cli/lib/accounts.ts +400 -0
- package/src/cli/lib/deployKeyWarning.ts +43 -0
- package/src/cli/lib/deployment.ts +2 -2
- package/src/cli/lib/deploymentSelection.ts +37 -18
- package/src/cli/lib/envvars.ts +43 -1
- package/src/cli/lib/fsUtils.ts +5 -2
- package/src/cli/lib/generateDocs.ts +1 -1
- package/src/cli/lib/login.ts +64 -3
- package/src/cli/lib/mcp/requestContext.ts +7 -1
- package/src/cli/lib/plugins/claudeCode.ts +201 -0
- package/src/cli/lib/plugins/codex.ts +177 -0
- package/src/cli/lib/plugins/harness.ts +49 -0
- package/src/cli/lib/plugins/marketplaces.ts +94 -0
- package/src/cli/lib/plugins/skills.ts +101 -0
- package/src/cli/lib/plugins/utils.ts +121 -0
- package/src/cli/lib/utils/utils.ts +19 -15
- package/src/cli/login.ts +293 -168
- package/src/cli/logout.ts +142 -17
- package/src/cli/mcp.ts +48 -11
- package/src/cli/plugins.ts +154 -0
- package/src/cli/program.ts +4 -0
- package/src/index.ts +1 -1
- package/src/server/impl/actions_impl.ts +3 -2
package/src/cli/mcp.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import path from "path";
|
|
1
2
|
import { Command, Option } from "@commander-js/extra-typings";
|
|
2
3
|
import { oneoffContext } from "../bundler/context.js";
|
|
3
4
|
import { logError } from "../bundler/log.js";
|
|
@@ -6,6 +7,7 @@ import { serveStdio } from "@modelcontextprotocol/server/stdio";
|
|
|
6
7
|
import { actionDescription } from "./lib/command.js";
|
|
7
8
|
import { checkAuthorization } from "./lib/login.js";
|
|
8
9
|
import {
|
|
10
|
+
encodeDeploymentSelector,
|
|
9
11
|
McpOptions,
|
|
10
12
|
RequestContext,
|
|
11
13
|
RequestCrash,
|
|
@@ -115,6 +117,14 @@ function enabledTools(
|
|
|
115
117
|
export function makeServer(options: McpOptions) {
|
|
116
118
|
const enabledToolsByName = enabledTools(options);
|
|
117
119
|
const mutex = new Mutex();
|
|
120
|
+
const serverDirectory = process.cwd();
|
|
121
|
+
options = {
|
|
122
|
+
...options,
|
|
123
|
+
envFile:
|
|
124
|
+
options.envFile === undefined
|
|
125
|
+
? undefined
|
|
126
|
+
: path.resolve(serverDirectory, options.envFile),
|
|
127
|
+
};
|
|
118
128
|
const server = new Server(
|
|
119
129
|
{
|
|
120
130
|
name: "Convex MCP Server",
|
|
@@ -128,17 +138,7 @@ export function makeServer(options: McpOptions) {
|
|
|
128
138
|
);
|
|
129
139
|
server.setRequestHandler("tools/call", async (request: CallToolRequest) => {
|
|
130
140
|
const ctx = new RequestContext(options);
|
|
131
|
-
await initializeBigBrainAuth(ctx, options);
|
|
132
141
|
try {
|
|
133
|
-
const authorized = await checkAuthorization(ctx, false);
|
|
134
|
-
if (!authorized) {
|
|
135
|
-
await ctx.crash({
|
|
136
|
-
exitCode: 1,
|
|
137
|
-
errorType: "fatal",
|
|
138
|
-
printedMessage:
|
|
139
|
-
"Not Authorized: Run `npx convex dev` to login to your Convex project.",
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
142
|
if (!request.params.arguments) {
|
|
143
143
|
await ctx.crash({
|
|
144
144
|
exitCode: 1,
|
|
@@ -158,7 +158,44 @@ export function makeServer(options: McpOptions) {
|
|
|
158
158
|
|
|
159
159
|
// Serialize tool handlers since they're mutating the current working directory.
|
|
160
160
|
const result = await mutex.runExclusive(async () => {
|
|
161
|
-
|
|
161
|
+
const projectDir =
|
|
162
|
+
"deploymentSelector" in input
|
|
163
|
+
? ctx.decodeDeploymentSelectorUnchecked(input.deploymentSelector)
|
|
164
|
+
.projectDir
|
|
165
|
+
: (("projectDir" in input ? input.projectDir : undefined) ??
|
|
166
|
+
options.projectDir);
|
|
167
|
+
const previousDirectory = process.cwd();
|
|
168
|
+
try {
|
|
169
|
+
if (projectDir !== undefined)
|
|
170
|
+
process.chdir(path.resolve(serverDirectory, projectDir));
|
|
171
|
+
await initializeBigBrainAuth(ctx, options);
|
|
172
|
+
if (!(await checkAuthorization(ctx, false))) {
|
|
173
|
+
await ctx.crash({
|
|
174
|
+
exitCode: 1,
|
|
175
|
+
errorType: "fatal",
|
|
176
|
+
printedMessage:
|
|
177
|
+
"Not Authorized: Run `npx convex dev` to login to your Convex project.",
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
const absoluteDirectory = process.cwd();
|
|
181
|
+
const resolvedInput =
|
|
182
|
+
"deploymentSelector" in input
|
|
183
|
+
? {
|
|
184
|
+
...input,
|
|
185
|
+
deploymentSelector: encodeDeploymentSelector(
|
|
186
|
+
absoluteDirectory,
|
|
187
|
+
ctx.decodeDeploymentSelectorUnchecked(
|
|
188
|
+
input.deploymentSelector,
|
|
189
|
+
).deployment,
|
|
190
|
+
),
|
|
191
|
+
}
|
|
192
|
+
: projectDir === undefined
|
|
193
|
+
? input
|
|
194
|
+
: { ...input, projectDir: absoluteDirectory };
|
|
195
|
+
return await convexTool.handler(ctx, resolvedInput);
|
|
196
|
+
} finally {
|
|
197
|
+
process.chdir(previousDirectory);
|
|
198
|
+
}
|
|
162
199
|
});
|
|
163
200
|
return {
|
|
164
201
|
content: [
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { Command } from "@commander-js/extra-typings";
|
|
2
|
+
import { chalkStderr } from "chalk";
|
|
3
|
+
import { oneoffContext } from "../bundler/context.js";
|
|
4
|
+
import {
|
|
5
|
+
logFailure,
|
|
6
|
+
logFinishedStep,
|
|
7
|
+
logMessage,
|
|
8
|
+
logOutput,
|
|
9
|
+
logWarning,
|
|
10
|
+
showSpinner,
|
|
11
|
+
} from "../bundler/log.js";
|
|
12
|
+
import { claudeCode } from "./lib/plugins/claudeCode.js";
|
|
13
|
+
import { codex } from "./lib/plugins/codex.js";
|
|
14
|
+
import { getNewestHarnessLocations } from "./lib/plugins/harness.js";
|
|
15
|
+
import { logMarketplaces } from "./lib/plugins/marketplaces.js";
|
|
16
|
+
import { logConvexSkills } from "./lib/plugins/skills.js";
|
|
17
|
+
import { capture, run } from "./lib/plugins/utils.js";
|
|
18
|
+
|
|
19
|
+
const harnesses = [claudeCode, codex];
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Puts the latest Convex plugin in each harness on this machine, so the
|
|
23
|
+
* harness knows Convex the next time it starts. It works through each
|
|
24
|
+
* harness's own CLI and never edits the harnesses' files.
|
|
25
|
+
*
|
|
26
|
+
* Supported harnesses, on macOS and Linux:
|
|
27
|
+
* - Claude Code: terminal, desktop app (macOS), VS Code extension.
|
|
28
|
+
* - Codex: terminal, ChatGPT desktop app (macOS), VS Code extension.
|
|
29
|
+
*
|
|
30
|
+
* Windows is currently not supported.
|
|
31
|
+
*
|
|
32
|
+
* Success, exits 0:
|
|
33
|
+
* - The harness has the latest Convex plugin: prints the version.
|
|
34
|
+
* - The harness isn't installed: says so.
|
|
35
|
+
*
|
|
36
|
+
* Failure, exits 1:
|
|
37
|
+
* - The install failed: says why and what to do.
|
|
38
|
+
* - The machine runs Windows: says it isn't supported yet.
|
|
39
|
+
*/
|
|
40
|
+
const pluginsInstall = new Command("install")
|
|
41
|
+
.summary("Install or upgrade the Convex plugin for Claude Code and Codex")
|
|
42
|
+
.description(
|
|
43
|
+
"Installs or upgrades the Convex plugin for Claude Code and Codex, in the\n" +
|
|
44
|
+
"terminal, the desktop app and the VS Code extension:\n" +
|
|
45
|
+
harnesses.map((h) => ` - ${h.name}: ${h.plugin}\n`).join("") +
|
|
46
|
+
"\nClaude Code or Codex is skipped when it isn't installed. Windows isn't\n" +
|
|
47
|
+
"supported yet.",
|
|
48
|
+
)
|
|
49
|
+
.allowExcessArguments(false)
|
|
50
|
+
.action(async () => {
|
|
51
|
+
const ctx = await oneoffContext({});
|
|
52
|
+
if (process.platform === "win32") {
|
|
53
|
+
return await ctx.crash({
|
|
54
|
+
exitCode: 1,
|
|
55
|
+
errorType: "fatal",
|
|
56
|
+
printedMessage:
|
|
57
|
+
"`npx convex plugins install` doesn't support Windows yet.",
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
const locations = await getNewestHarnessLocations();
|
|
61
|
+
let failed = false;
|
|
62
|
+
for (const {
|
|
63
|
+
id,
|
|
64
|
+
name,
|
|
65
|
+
plugin,
|
|
66
|
+
upgradeStep,
|
|
67
|
+
installSteps,
|
|
68
|
+
plugins,
|
|
69
|
+
} of harnesses) {
|
|
70
|
+
const cli = locations[id]?.path;
|
|
71
|
+
if (cli === undefined) {
|
|
72
|
+
logWarning(`${chalkStderr.yellow("⚠")} ${name}: not installed`);
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
showSpinner(`Installing the Convex plugin for ${name}…`);
|
|
76
|
+
let output = "";
|
|
77
|
+
let upgraded = true;
|
|
78
|
+
for (const args of installSteps) {
|
|
79
|
+
const step = await run(cli, args);
|
|
80
|
+
output += step.output;
|
|
81
|
+
// Only the upgrade step's failure matters. Others can fail harmlessly,
|
|
82
|
+
// like adding a marketplace that's already added from another source.
|
|
83
|
+
if (args === upgradeStep && !step.ok) upgraded = false;
|
|
84
|
+
}
|
|
85
|
+
const list = await capture(cli, ["plugin", "list", "--json"]);
|
|
86
|
+
const version =
|
|
87
|
+
list === null
|
|
88
|
+
? undefined
|
|
89
|
+
: plugins(list)?.find((p) => `${p.name}@${p.marketplace}` === plugin)
|
|
90
|
+
?.version;
|
|
91
|
+
if (version === undefined || !upgraded) {
|
|
92
|
+
failed = true;
|
|
93
|
+
logFailure(`${name}: couldn't install the Convex plugin`);
|
|
94
|
+
// The last lines of the harness's own output say why.
|
|
95
|
+
const tail = output.trim().split(/\r?\n/).slice(-10).join("\n");
|
|
96
|
+
if (tail !== "") logMessage(chalkStderr.gray(tail));
|
|
97
|
+
logMessage(
|
|
98
|
+
"Run `npx convex plugins install` again after fixing the error above.",
|
|
99
|
+
);
|
|
100
|
+
} else {
|
|
101
|
+
logFinishedStep(`${name}: Convex plugin ${version}`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (failed) {
|
|
105
|
+
return await ctx.crash({
|
|
106
|
+
exitCode: 1,
|
|
107
|
+
errorType: "fatal",
|
|
108
|
+
printedMessage: null,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
// When status is picked up again, check it against install. Install now
|
|
114
|
+
// upgrades the plugin and reports the harnesses it didn't find.
|
|
115
|
+
const pluginsStatus = new Command("status")
|
|
116
|
+
.summary("Show the Convex plugins and skills installed")
|
|
117
|
+
.description(
|
|
118
|
+
"Lists the Convex setup your coding agents load:\n" +
|
|
119
|
+
" - Convex skills in the hidden folders of your home folder and this folder\n" +
|
|
120
|
+
" - Convex marketplaces and plugins in Codex and Claude Code\n\n" +
|
|
121
|
+
"It only reads, and changes nothing.",
|
|
122
|
+
)
|
|
123
|
+
.allowExcessArguments(false)
|
|
124
|
+
.action(async () => {
|
|
125
|
+
await logConvexSkills();
|
|
126
|
+
|
|
127
|
+
const locations = await getNewestHarnessLocations();
|
|
128
|
+
for (const harness of harnesses) {
|
|
129
|
+
const cli = locations[harness.id]?.path;
|
|
130
|
+
const marketplaceList =
|
|
131
|
+
cli === undefined
|
|
132
|
+
? null
|
|
133
|
+
: await capture(cli, ["plugin", "marketplace", "list", "--json"]);
|
|
134
|
+
const pluginList =
|
|
135
|
+
cli === undefined
|
|
136
|
+
? null
|
|
137
|
+
: await capture(cli, ["plugin", "list", "--json"]);
|
|
138
|
+
if (marketplaceList === null || pluginList === null) {
|
|
139
|
+
logOutput(`${harness.name}: not installed`);
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
const marketplaces = harness.marketplaces(marketplaceList, pluginList);
|
|
143
|
+
if (marketplaces === null) {
|
|
144
|
+
logOutput(`${harness.name}: couldn't read its plugin lists`);
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
logMarketplaces(harness.name, marketplaces, await harness.latest());
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
export const plugins = new Command("plugins")
|
|
152
|
+
.summary("Manage Convex plugins for coding agents")
|
|
153
|
+
.addCommand(pluginsInstall)
|
|
154
|
+
.addCommand(pluginsStatus, { hidden: true });
|
package/src/cli/program.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Command } from "@commander-js/extra-typings";
|
|
2
2
|
import { aiFiles } from "./aiFiles.js";
|
|
3
|
+
import { account } from "./account.js";
|
|
3
4
|
import { auth } from "./auth.js";
|
|
4
5
|
import { codegen } from "./codegen.js";
|
|
5
6
|
import { convexExport } from "./convexExport.js";
|
|
@@ -21,6 +22,7 @@ import { logout } from "./logout.js";
|
|
|
21
22
|
import { logs } from "./logs.js";
|
|
22
23
|
import { mcp } from "./mcp.js";
|
|
23
24
|
import { networkTest } from "./network_test.js";
|
|
25
|
+
import { plugins } from "./plugins.js";
|
|
24
26
|
import { project } from "./project.js";
|
|
25
27
|
import { reinit } from "./reinit.js";
|
|
26
28
|
import { run } from "./run.js";
|
|
@@ -56,12 +58,14 @@ export function buildProgram() {
|
|
|
56
58
|
.addCommand(codegen)
|
|
57
59
|
.addCommand(update)
|
|
58
60
|
.addCommand(logout)
|
|
61
|
+
.addCommand(account)
|
|
59
62
|
.addCommand(networkTest, { hidden: true })
|
|
60
63
|
.addCommand(integration, { hidden: true })
|
|
61
64
|
.addCommand(functionSpec)
|
|
62
65
|
.addCommand(insights)
|
|
63
66
|
.addCommand(mcp)
|
|
64
67
|
.addCommand(aiFiles)
|
|
68
|
+
.addCommand(plugins)
|
|
65
69
|
.helpCommand("help <command>", "Show help for given <command>")
|
|
66
70
|
.version(version)
|
|
67
71
|
// Hide version and help so they don't clutter
|
package/src/index.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = "1.
|
|
1
|
+
export const version = "1.49.0-alpha.0";
|
|
@@ -75,8 +75,9 @@ export type ServiceName = "ai-gateway";
|
|
|
75
75
|
*
|
|
76
76
|
* This function can only be called while an action is running. The credential
|
|
77
77
|
* is scoped to the current deployment and should be sent as a bearer token.
|
|
78
|
-
*
|
|
79
|
-
* this function whenever making
|
|
78
|
+
* Credentials expire a few minutes after they're issued. The action runtime
|
|
79
|
+
* caches and refreshes them as needed, so call this function whenever making
|
|
80
|
+
* a service request rather than reusing one credential for a long action.
|
|
80
81
|
*
|
|
81
82
|
* @param service - The service the credential may access.
|
|
82
83
|
* @returns A JWT to send as `Authorization: Bearer <token>`. Keep it inside
|