@contextvm/ctxcn 1.0.2 → 1.0.4
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 +64 -85
- package/dist/index.js +8 -11
- package/dist/index.js.map +1 -1
- package/dist/src/commands/add.d.ts.map +1 -1
- package/dist/src/commands/add.js +21 -36
- package/dist/src/commands/add.js.map +1 -1
- package/dist/src/commands/help.d.ts.map +1 -1
- package/dist/src/commands/help.js +16 -8
- package/dist/src/commands/help.js.map +1 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +8 -19
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/update.d.ts.map +1 -1
- package/dist/src/commands/update.js +15 -30
- package/dist/src/commands/update.js.map +1 -1
- package/dist/src/config.js +1 -1
- package/dist/src/config.js.map +1 -1
- package/dist/src/utils/cvm-client.d.ts +9 -0
- package/dist/src/utils/cvm-client.d.ts.map +1 -0
- package/dist/src/utils/cvm-client.js +31 -0
- package/dist/src/utils/cvm-client.js.map +1 -0
- package/dist/src/utils/error-handler.d.ts +4 -0
- package/dist/src/utils/error-handler.d.ts.map +1 -0
- package/dist/src/utils/error-handler.js +14 -0
- package/dist/src/utils/error-handler.js.map +1 -0
- package/dist/src/utils/file-operations.d.ts +4 -0
- package/dist/src/utils/file-operations.d.ts.map +1 -0
- package/dist/src/utils/file-operations.js +25 -0
- package/dist/src/utils/file-operations.js.map +1 -0
- package/dist/src/utils/schema.d.ts +1 -1
- package/dist/src/utils/schema.d.ts.map +1 -1
- package/dist/src/utils/schema.js +5 -5
- package/dist/src/utils/schema.js.map +1 -1
- package/dist/src/utils.d.ts +4 -0
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/src/utils.js +10 -5
- package/dist/src/utils.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -2,36 +2,43 @@
|
|
|
2
2
|
|
|
3
3
|
`ctxcn` is a command-line utility inspired by `shadcn` that streamlines the integration of ContextVM (CVM) servers into your TypeScript projects. It generates a type-safe client from a CVM server's tool definitions, allowing you to call CVM tools as if they were native TypeScript functions.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Quickstart
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
1. **Install dependencies**
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
```bash
|
|
10
|
+
npm install @contextvm/sdk
|
|
11
|
+
# or
|
|
12
|
+
bun add @contextvm/sdk
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
2. **Initialize your project**
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npx @contextvm/ctxcn init
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
3. **Add a CVM server client**
|
|
22
|
+
```bash
|
|
23
|
+
npx @contextvm/ctxcn add <pubkey>
|
|
24
|
+
```
|
|
12
25
|
|
|
13
26
|
## Installation
|
|
14
27
|
|
|
15
28
|
### Global Installation
|
|
16
29
|
|
|
17
|
-
Install ctxcn globally using npm:
|
|
18
|
-
|
|
19
30
|
```bash
|
|
20
31
|
npm install -g @contextvm/ctxcn
|
|
21
32
|
```
|
|
22
33
|
|
|
23
34
|
### Local Installation
|
|
24
35
|
|
|
25
|
-
Install ctxcn as a dev dependency in your project:
|
|
26
|
-
|
|
27
36
|
```bash
|
|
28
37
|
npm install --save-dev @contextvm/ctxcn
|
|
29
38
|
```
|
|
30
39
|
|
|
31
40
|
### Development Installation
|
|
32
41
|
|
|
33
|
-
To get started with the source code, clone the repository and install the dependencies:
|
|
34
|
-
|
|
35
42
|
```bash
|
|
36
43
|
git clone https://github.com/your-username/ctxcn.git
|
|
37
44
|
cd ctxcn
|
|
@@ -44,40 +51,20 @@ The `ctxcn` utility provides four main commands: `init`, `add`, `update`, and `h
|
|
|
44
51
|
|
|
45
52
|
### `init`
|
|
46
53
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
To run the `init` command, execute the following command in your project's root directory:
|
|
50
|
-
|
|
51
|
-
```bash
|
|
52
|
-
ctxcn init
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
If you've installed locally or are working with the source code:
|
|
54
|
+
Initialize your project with a `ctxcn.config.json` file:
|
|
56
55
|
|
|
57
56
|
```bash
|
|
58
57
|
npx @contextvm/ctxcn init
|
|
59
|
-
# or
|
|
60
|
-
bun run index.ts init
|
|
61
58
|
```
|
|
62
59
|
|
|
63
|
-
This will start
|
|
60
|
+
This will start an interactive process to configure your project settings.
|
|
64
61
|
|
|
65
62
|
### `add`
|
|
66
63
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
To run the `add` command, execute the following command in your project's root directory:
|
|
70
|
-
|
|
71
|
-
```bash
|
|
72
|
-
ctxcn add <pubkey>
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
If you've installed locally or are working with the source code:
|
|
64
|
+
Generate a TypeScript client from a CVM server's tool definitions:
|
|
76
65
|
|
|
77
66
|
```bash
|
|
78
67
|
npx @contextvm/ctxcn add <pubkey>
|
|
79
|
-
# or
|
|
80
|
-
bun run index.ts add <pubkey>
|
|
81
68
|
```
|
|
82
69
|
|
|
83
70
|
This will:
|
|
@@ -92,85 +79,77 @@ This will:
|
|
|
92
79
|
|
|
93
80
|
### `update`
|
|
94
81
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
To update a specific client:
|
|
82
|
+
Refresh existing CVM server clients with the latest tool definitions:
|
|
98
83
|
|
|
99
84
|
```bash
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
To update all clients or select from a list:
|
|
85
|
+
# Update a specific client
|
|
86
|
+
npx @contextvm/ctxcn update <pubkey>
|
|
104
87
|
|
|
105
|
-
|
|
106
|
-
ctxcn update
|
|
88
|
+
# Update all clients or select from a list
|
|
89
|
+
npx @contextvm/ctxcn update
|
|
107
90
|
```
|
|
108
91
|
|
|
109
|
-
|
|
92
|
+
### `help`
|
|
93
|
+
|
|
94
|
+
Display help information:
|
|
110
95
|
|
|
111
96
|
```bash
|
|
112
|
-
npx @contextvm/ctxcn
|
|
113
|
-
# or
|
|
114
|
-
bun run index.ts update
|
|
97
|
+
npx @contextvm/ctxcn help
|
|
115
98
|
```
|
|
116
99
|
|
|
117
|
-
|
|
100
|
+
## Configuration
|
|
118
101
|
|
|
119
|
-
|
|
120
|
-
2. Ask if you want to use the new server name or keep the existing one
|
|
121
|
-
3. Display updated server information and tools
|
|
122
|
-
4. Allow you to confirm before updating
|
|
102
|
+
The `ctxcn` utility can be configured via a `ctxcn.config.json` file in your project's root directory:
|
|
123
103
|
|
|
124
|
-
|
|
104
|
+
- `source`: The source directory for the generated client.
|
|
105
|
+
- `relays`: An array of relays to use when connecting to CVM servers.
|
|
106
|
+
- `privateKey`: The private key to use when connecting to CVM servers. This will be used as a fallback if the `CTXCN_PRIVATE_KEY` environment variable is not set.
|
|
107
|
+
- `addedClients`: An array of public keys of the clients that have been added. This is automatically managed by the CLI.
|
|
125
108
|
|
|
126
|
-
|
|
109
|
+
### Environment Variables
|
|
127
110
|
|
|
128
|
-
|
|
111
|
+
For better security, you can use environment variables instead of storing private keys in your configuration file:
|
|
129
112
|
|
|
130
113
|
```bash
|
|
131
|
-
|
|
114
|
+
# Set your private key as an environment variable
|
|
115
|
+
export CTXCN_PRIVATE_KEY="your-private-key-here"
|
|
132
116
|
```
|
|
133
117
|
|
|
134
|
-
|
|
118
|
+
The generated clients use the following order of precedence for private keys:
|
|
135
119
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
bun run index.ts help
|
|
140
|
-
```
|
|
120
|
+
1. Private key passed directly in the constructor options
|
|
121
|
+
2. `CTXCN_PRIVATE_KEY` environment variable
|
|
122
|
+
3. Private key from the configuration file (as a fallback)
|
|
141
123
|
|
|
142
|
-
##
|
|
124
|
+
## Example
|
|
143
125
|
|
|
144
|
-
|
|
126
|
+
Here is an example of how to use the generated client:
|
|
145
127
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
- `privateKey`: The private key to use when connecting to CVM servers. If not provided, a new private key will be generated on the fly.
|
|
149
|
-
- `addedClients`: An array of public keys of the clients that have been added. This is automatically managed by the CLI.
|
|
128
|
+
```typescript
|
|
129
|
+
import { AdditionClient } from "./src/ctxcn/AdditionClient.ts";
|
|
150
130
|
|
|
151
|
-
|
|
131
|
+
// The client will automatically use the CTXCN_PRIVATE_KEY environment variable
|
|
132
|
+
// or the private key from the configuration file
|
|
133
|
+
const mcpClient = new AdditionClient();
|
|
152
134
|
|
|
153
|
-
|
|
135
|
+
const result = await mcpClient.add(5, 10);
|
|
136
|
+
|
|
137
|
+
console.log(result.result); // 15
|
|
138
|
+
|
|
139
|
+
await mcpClient.disconnect();
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
You can also override the private key and relays when creating a client instance:
|
|
154
143
|
|
|
155
144
|
```typescript
|
|
156
145
|
import { AdditionClient } from "./src/ctxcn/AdditionClient.ts";
|
|
157
|
-
import {
|
|
158
|
-
NostrClientTransport,
|
|
159
|
-
PrivateKeySigner,
|
|
160
|
-
ApplesauceRelayPool,
|
|
161
|
-
} from "@contextvm/sdk";
|
|
162
|
-
|
|
163
|
-
const transport = new NostrClientTransport({
|
|
164
|
-
signer: new PrivateKeySigner(),
|
|
165
|
-
relayHandler: new ApplesauceRelayPool(["ws://localhost:10547"]),
|
|
166
|
-
serverPubkey: "<pubkey>",
|
|
167
|
-
isStateless: true,
|
|
168
|
-
});
|
|
169
146
|
|
|
170
|
-
const mcpClient = new AdditionClient(
|
|
171
|
-
|
|
147
|
+
const mcpClient = new AdditionClient({
|
|
148
|
+
privateKey: "your-custom-private-key",
|
|
149
|
+
relays: ["wss://your-custom-relay.org"],
|
|
150
|
+
});
|
|
172
151
|
|
|
173
|
-
const result = await mcpClient.add(
|
|
152
|
+
const result = await mcpClient.add(5, 10);
|
|
174
153
|
|
|
175
154
|
console.log(result.result); // 15
|
|
176
155
|
|
package/dist/index.js
CHANGED
|
@@ -3,6 +3,7 @@ import { handleInit } from "./src/commands/init.js";
|
|
|
3
3
|
import { handleAdd } from "./src/commands/add.js";
|
|
4
4
|
import { handleUpdate } from "./src/commands/update.js";
|
|
5
5
|
import { handleHelp } from "./src/commands/help.js";
|
|
6
|
+
import { handleValidationError, handleCliError, } from "./src/utils/error-handler.js";
|
|
6
7
|
async function main() {
|
|
7
8
|
try {
|
|
8
9
|
const args = process.argv.slice(2);
|
|
@@ -11,36 +12,32 @@ async function main() {
|
|
|
11
12
|
handleHelp();
|
|
12
13
|
return;
|
|
13
14
|
}
|
|
15
|
+
const cwd = process.cwd();
|
|
14
16
|
switch (command) {
|
|
15
17
|
case "init":
|
|
16
|
-
await handleInit(
|
|
18
|
+
await handleInit(cwd);
|
|
17
19
|
break;
|
|
18
20
|
case "add":
|
|
19
21
|
const pubkey = args[1];
|
|
20
22
|
if (!pubkey) {
|
|
21
|
-
|
|
22
|
-
console.error("Usage: ctxcn add <pubkey>");
|
|
23
|
-
process.exit(1);
|
|
23
|
+
handleValidationError("Missing pubkey for 'add' command.\nUsage: ctxcn add <pubkey>");
|
|
24
24
|
}
|
|
25
|
-
await handleAdd(pubkey,
|
|
25
|
+
await handleAdd(pubkey, cwd);
|
|
26
26
|
break;
|
|
27
27
|
case "update":
|
|
28
28
|
const updatePubkey = args[1];
|
|
29
|
-
await handleUpdate(
|
|
29
|
+
await handleUpdate(cwd, updatePubkey);
|
|
30
30
|
break;
|
|
31
31
|
case "help":
|
|
32
32
|
handleHelp();
|
|
33
33
|
break;
|
|
34
34
|
default:
|
|
35
|
-
|
|
36
|
-
handleHelp();
|
|
37
|
-
process.exit(1);
|
|
35
|
+
handleValidationError(`Unknown command '${command}'`);
|
|
38
36
|
break;
|
|
39
37
|
}
|
|
40
38
|
}
|
|
41
39
|
catch (error) {
|
|
42
|
-
|
|
43
|
-
process.exit(1);
|
|
40
|
+
handleCliError(error, "main process");
|
|
44
41
|
}
|
|
45
42
|
}
|
|
46
43
|
main();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EACL,qBAAqB,EACrB,cAAc,GACf,MAAM,8BAA8B,CAAC;AAEtC,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAExB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,UAAU,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAE1B,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,MAAM;gBACT,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;gBACtB,MAAM;YACR,KAAK,KAAK;gBACR,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,qBAAqB,CACnB,8DAA8D,CAC/D,CAAC;gBACJ,CAAC;gBACD,MAAM,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBAC7B,MAAM;YACR,KAAK,QAAQ;gBACX,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,YAAY,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;gBACtC,MAAM;YACR,KAAK,MAAM;gBACT,UAAU,EAAE,CAAC;gBACb,MAAM;YACR;gBACE,qBAAqB,CAAC,oBAAoB,OAAO,GAAG,CAAC,CAAC;gBACtD,MAAM;QACV,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,cAAc,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../src/commands/add.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../src/commands/add.ts"],"names":[],"mappings":"AASA,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,iBAsH1D"}
|
package/dist/src/commands/add.js
CHANGED
|
@@ -1,48 +1,34 @@
|
|
|
1
|
-
import { Client } from "@modelcontextprotocol/sdk/client";
|
|
2
|
-
import { mkdir, writeFile, access } from "fs/promises";
|
|
3
1
|
import path from "path";
|
|
4
2
|
import { toPascalCase } from "../utils.js";
|
|
5
3
|
import { loadConfig, saveConfig } from "../config.js";
|
|
6
4
|
import { askQuestion, closeReadlineInterface } from "../utils/cli.js";
|
|
7
5
|
import { generateClientCode } from "../utils/schema.js";
|
|
8
|
-
import {
|
|
6
|
+
import { createCvmConnection } from "../utils/cvm-client.js";
|
|
7
|
+
import { fileExists, writeFileWithDir } from "../utils/file-operations.js";
|
|
8
|
+
import { handleConfigError, handleCliError } from "../utils/error-handler.js";
|
|
9
9
|
export async function handleAdd(pubkey, cwd) {
|
|
10
10
|
console.log("🔍 Checking for configuration file...");
|
|
11
11
|
// Check if config file exists
|
|
12
12
|
const configPath = path.join(cwd, "ctxcn.config.json");
|
|
13
|
-
|
|
14
|
-
await access(configPath);
|
|
15
|
-
}
|
|
16
|
-
catch (error) {
|
|
17
|
-
console.error("❌ Error: Configuration file 'ctxcn.config.json' not found.");
|
|
18
|
-
console.error("Please run 'ctxcn init' first to create a configuration file.");
|
|
13
|
+
if (!(await fileExists(configPath))) {
|
|
19
14
|
closeReadlineInterface();
|
|
20
|
-
|
|
15
|
+
handleConfigError();
|
|
21
16
|
}
|
|
22
17
|
const config = await loadConfig(cwd);
|
|
23
18
|
// Check if client is already added
|
|
24
19
|
if (config.addedClients && config.addedClients.includes(pubkey)) {
|
|
25
20
|
console.log(`⚠️ Client with pubkey ${pubkey} is already added.`);
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
21
|
+
const choice = await askQuestion("Would you like to update this client? (y/n)", "n");
|
|
22
|
+
if (choice.toLowerCase() !== "y" && choice.toLowerCase() !== "yes") {
|
|
23
|
+
console.log("❌ Operation cancelled.");
|
|
24
|
+
closeReadlineInterface();
|
|
25
|
+
process.exit(0);
|
|
26
|
+
}
|
|
27
|
+
console.log("🔄 Updating existing client...");
|
|
29
28
|
}
|
|
30
29
|
console.log(`🔗 Connecting to server ${pubkey}...`);
|
|
31
|
-
const client = new Client({
|
|
32
|
-
name: `generator-client`,
|
|
33
|
-
version: "1.0.0",
|
|
34
|
-
});
|
|
35
|
-
const transport = new NostrClientTransport({
|
|
36
|
-
signer: new PrivateKeySigner(config.privateKey),
|
|
37
|
-
relayHandler: new ApplesauceRelayPool(config.relays),
|
|
38
|
-
serverPubkey: pubkey,
|
|
39
|
-
// isStateless: true,
|
|
40
|
-
});
|
|
41
30
|
try {
|
|
42
|
-
await client
|
|
43
|
-
const serverDetails = client.getServerVersion();
|
|
44
|
-
const toolListResult = await client.listTools();
|
|
45
|
-
await transport.close();
|
|
31
|
+
const { serverDetails, toolListResult } = await createCvmConnection(pubkey, config, "generator-client");
|
|
46
32
|
let serverName = toPascalCase(serverDetails?.name || "UnknownServer");
|
|
47
33
|
// Interactive confirmation
|
|
48
34
|
console.log(`\n📋 Server Information:`);
|
|
@@ -74,7 +60,7 @@ export async function handleAdd(pubkey, cwd) {
|
|
|
74
60
|
}
|
|
75
61
|
const printOnly = choice === "2";
|
|
76
62
|
const clientName = `${serverName}Client`;
|
|
77
|
-
const clientCode = await generateClientCode(pubkey,
|
|
63
|
+
const clientCode = await generateClientCode(pubkey, toolListResult, serverName, config.privateKey, config.relays);
|
|
78
64
|
if (printOnly) {
|
|
79
65
|
console.log("\n📄 Generated Client Code:");
|
|
80
66
|
console.log("=".repeat(50));
|
|
@@ -82,15 +68,15 @@ export async function handleAdd(pubkey, cwd) {
|
|
|
82
68
|
console.log("=".repeat(50));
|
|
83
69
|
}
|
|
84
70
|
else {
|
|
85
|
-
const
|
|
86
|
-
await
|
|
87
|
-
|
|
88
|
-
await writeFile(outputPath, clientCode);
|
|
89
|
-
// Add the client to the config
|
|
71
|
+
const outputPath = path.join(cwd, config.source, `${clientName}.ts`);
|
|
72
|
+
await writeFileWithDir(outputPath, clientCode);
|
|
73
|
+
// Add the client to the config if it's not already there
|
|
90
74
|
if (!config.addedClients) {
|
|
91
75
|
config.addedClients = [];
|
|
92
76
|
}
|
|
93
|
-
config.addedClients.
|
|
77
|
+
if (!config.addedClients.includes(pubkey)) {
|
|
78
|
+
config.addedClients.push(pubkey);
|
|
79
|
+
}
|
|
94
80
|
await saveConfig(cwd, config);
|
|
95
81
|
console.log(`✅ Generated client for ${serverName} at ${outputPath}`);
|
|
96
82
|
}
|
|
@@ -98,9 +84,8 @@ export async function handleAdd(pubkey, cwd) {
|
|
|
98
84
|
process.exit(0);
|
|
99
85
|
}
|
|
100
86
|
catch (error) {
|
|
101
|
-
console.error("❌ Error connecting to server:", error);
|
|
102
87
|
closeReadlineInterface();
|
|
103
|
-
|
|
88
|
+
handleCliError(error, "connecting to server");
|
|
104
89
|
}
|
|
105
90
|
}
|
|
106
91
|
//# sourceMappingURL=add.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/commands/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../../src/commands/help.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../../src/commands/help.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,SAqBzB"}
|
|
@@ -1,15 +1,23 @@
|
|
|
1
1
|
export function handleHelp() {
|
|
2
2
|
console.log(`
|
|
3
|
-
|
|
3
|
+
🚀 ctxcn - ContextVM Client Generator
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
init Initialize a new project and create a ctxcn.config.json file.
|
|
7
|
-
add Add a new CVM server client to your project.
|
|
8
|
-
update Update existing CVM server clients with the latest tool definitions.
|
|
9
|
-
help Display this help message.
|
|
5
|
+
Usage: npx @contextvm/ctxcn <command> [options]
|
|
10
6
|
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
Commands:
|
|
8
|
+
init Initialize a new project and create a ctxcn.config.json file
|
|
9
|
+
add Add a new CVM server client to your project
|
|
10
|
+
update Update existing CVM server clients with the latest tool definitions
|
|
11
|
+
help Display this help message
|
|
12
|
+
|
|
13
|
+
Options:
|
|
14
|
+
--help Display help for a specific command
|
|
15
|
+
|
|
16
|
+
Examples:
|
|
17
|
+
ctxcn init # Initialize project
|
|
18
|
+
ctxcn add <pubkey> # Add a CVM server client
|
|
19
|
+
ctxcn update # Update all clients
|
|
20
|
+
ctxcn update <pubkey> # Update specific client
|
|
13
21
|
`);
|
|
14
22
|
}
|
|
15
23
|
//# sourceMappingURL=help.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../../src/commands/help.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU;IACxB,OAAO,CAAC,GAAG,CAAC
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../../src/commands/help.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU;IACxB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;GAmBX,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"AAOA,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,iBAsE3C"}
|
|
@@ -2,30 +2,24 @@ import { promises as fs } from "fs";
|
|
|
2
2
|
import path from "path";
|
|
3
3
|
import { DEFAULT_CONFIG } from "../config.js";
|
|
4
4
|
import { askQuestion, closeReadlineInterface } from "../utils/cli.js";
|
|
5
|
+
import { ensureDirectoryExists, fileExists } from "../utils/file-operations.js";
|
|
6
|
+
import { handleValidationError } from "../utils/error-handler.js";
|
|
5
7
|
export async function handleInit(cwd) {
|
|
6
8
|
console.log("🚀 Initializing project for ctxcn...");
|
|
7
9
|
console.log("\n🔍 Verifying project structure...");
|
|
8
10
|
const packageJsonPath = path.join(cwd, "package.json");
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
console.log("✔️ Project structure seems valid (package.json found).");
|
|
12
|
-
}
|
|
13
|
-
catch (error) {
|
|
14
|
-
console.error("❌ Error: No package.json found. Please run this command in a valid project root directory.");
|
|
15
|
-
process.exit(1);
|
|
11
|
+
if (!(await fileExists(packageJsonPath))) {
|
|
12
|
+
handleValidationError("No package.json found. Please run this command in a valid project root directory.");
|
|
16
13
|
}
|
|
14
|
+
console.log("✔️ Project structure seems valid (package.json found).");
|
|
17
15
|
const configPath = path.join(cwd, "ctxcn.config.json");
|
|
18
|
-
|
|
19
|
-
await fs.access(configPath);
|
|
16
|
+
if (await fileExists(configPath)) {
|
|
20
17
|
const overwrite = await askQuestion("A `ctxcn.config.json` file already exists. Do you want to overwrite it?", "n");
|
|
21
18
|
if (overwrite.toLowerCase() !== "y") {
|
|
22
19
|
console.log("Aborting initialization. Your existing configuration is safe.");
|
|
23
20
|
process.exit(0);
|
|
24
21
|
}
|
|
25
22
|
}
|
|
26
|
-
catch (error) {
|
|
27
|
-
// Config file doesn't exist, so we can proceed.
|
|
28
|
-
}
|
|
29
23
|
console.log("\n⚙️ Please provide your configuration details:");
|
|
30
24
|
const source = await askQuestion("Enter the source directory for generated clients", DEFAULT_CONFIG.source);
|
|
31
25
|
const relaysStr = await askQuestion("Enter the relays to connect to (comma-separated)", DEFAULT_CONFIG.relays.join(", "));
|
|
@@ -38,13 +32,8 @@ export async function handleInit(cwd) {
|
|
|
38
32
|
await fs.writeFile(configPath, JSON.stringify(config, null, 2));
|
|
39
33
|
console.log("\n✔️ Configuration file `ctxcn.config.json` created successfully.");
|
|
40
34
|
const sourceDir = path.join(cwd, config.source);
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
catch (error) {
|
|
45
|
-
await fs.mkdir(sourceDir, { recursive: true });
|
|
46
|
-
console.log(`✔️ Source directory \`${config.source}\` created.`);
|
|
47
|
-
}
|
|
35
|
+
await ensureDirectoryExists(sourceDir);
|
|
36
|
+
console.log(`✔️ Source directory \`${config.source}\` created.`);
|
|
48
37
|
console.log("\n📦 Checking for required dependencies...");
|
|
49
38
|
const packageJsonContent = await fs.readFile(packageJsonPath, "utf-8");
|
|
50
39
|
const packageJson = JSON.parse(packageJsonContent);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,cAAc,EAAe,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/update.ts"],"names":[],"mappings":"AA8BA,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,iBAsE9D"}
|
|
@@ -1,14 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { mkdir, writeFile, access, readdir } from "fs/promises";
|
|
1
|
+
import { readdir } from "fs/promises";
|
|
3
2
|
import path from "path";
|
|
4
3
|
import { toPascalCase } from "../utils.js";
|
|
5
4
|
import { loadConfig } from "../config.js";
|
|
6
5
|
import { askQuestion, askYesNo, closeReadlineInterface } from "../utils/cli.js";
|
|
7
6
|
import { generateClientCode } from "../utils/schema.js";
|
|
8
|
-
import {
|
|
7
|
+
import { createCvmConnection } from "../utils/cvm-client.js";
|
|
8
|
+
import { fileExists, writeFileWithDir } from "../utils/file-operations.js";
|
|
9
|
+
import { handleConfigError, handleCliError } from "../utils/error-handler.js";
|
|
9
10
|
async function findExistingClientFile(cwd, sourceDir) {
|
|
11
|
+
const outputDir = path.join(cwd, sourceDir);
|
|
12
|
+
if (!(await fileExists(outputDir))) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
10
15
|
try {
|
|
11
|
-
const outputDir = path.join(cwd, sourceDir);
|
|
12
16
|
const existingFiles = await readdir(outputDir);
|
|
13
17
|
const existingClientFile = existingFiles.find((file) => file.endsWith(".ts") && file.includes("Client"));
|
|
14
18
|
return existingClientFile || null;
|
|
@@ -21,14 +25,9 @@ export async function handleUpdate(cwd, pubkey) {
|
|
|
21
25
|
console.log("🔍 Checking for configuration file...");
|
|
22
26
|
// Check if config file exists
|
|
23
27
|
const configPath = path.join(cwd, "ctxcn.config.json");
|
|
24
|
-
|
|
25
|
-
await access(configPath);
|
|
26
|
-
}
|
|
27
|
-
catch (error) {
|
|
28
|
-
console.error("❌ Error: Configuration file 'ctxcn.config.json' not found.");
|
|
29
|
-
console.error("Please run 'ctxcn init' first to create a configuration file.");
|
|
28
|
+
if (!(await fileExists(configPath))) {
|
|
30
29
|
closeReadlineInterface();
|
|
31
|
-
|
|
30
|
+
handleConfigError();
|
|
32
31
|
}
|
|
33
32
|
const config = await loadConfig(cwd);
|
|
34
33
|
if (!config.addedClients || config.addedClients.length === 0) {
|
|
@@ -82,20 +81,8 @@ export async function handleUpdate(cwd, pubkey) {
|
|
|
82
81
|
}
|
|
83
82
|
async function updateSingleClient(cwd, config, pubkey) {
|
|
84
83
|
console.log(`\n🔄 Updating client ${pubkey}...`);
|
|
85
|
-
const client = new Client({
|
|
86
|
-
name: `update-client`,
|
|
87
|
-
version: "1.0.0",
|
|
88
|
-
});
|
|
89
|
-
const transport = new NostrClientTransport({
|
|
90
|
-
signer: new PrivateKeySigner(config.privateKey),
|
|
91
|
-
relayHandler: new ApplesauceRelayPool(config.relays),
|
|
92
|
-
serverPubkey: pubkey,
|
|
93
|
-
});
|
|
94
84
|
try {
|
|
95
|
-
await client
|
|
96
|
-
const serverDetails = client.getServerVersion();
|
|
97
|
-
const toolListResult = await client.listTools();
|
|
98
|
-
await transport.close();
|
|
85
|
+
const { serverDetails, toolListResult } = await createCvmConnection(pubkey, config, "update-client");
|
|
99
86
|
const newServerName = toPascalCase(serverDetails?.name || "UnknownServer");
|
|
100
87
|
// Check if there's an existing client file to determine the old name
|
|
101
88
|
const existingClientFile = await findExistingClientFile(cwd, config.source);
|
|
@@ -130,16 +117,14 @@ async function updateSingleClient(cwd, config, pubkey) {
|
|
|
130
117
|
console.log("❌ Update cancelled.");
|
|
131
118
|
return;
|
|
132
119
|
}
|
|
133
|
-
const clientCode = await generateClientCode(pubkey,
|
|
120
|
+
const clientCode = await generateClientCode(pubkey, toolListResult, serverName, config.privateKey, config.relays);
|
|
134
121
|
const clientName = `${serverName}Client`;
|
|
135
|
-
const
|
|
136
|
-
await
|
|
137
|
-
const outputPath = path.join(outputDir, `${clientName}.ts`);
|
|
138
|
-
await writeFile(outputPath, clientCode);
|
|
122
|
+
const outputPath = path.join(cwd, config.source, `${clientName}.ts`);
|
|
123
|
+
await writeFileWithDir(outputPath, clientCode);
|
|
139
124
|
console.log(`✅ Updated client for ${serverName} at ${outputPath}`);
|
|
140
125
|
}
|
|
141
126
|
catch (error) {
|
|
142
|
-
|
|
127
|
+
handleCliError(error, `updating client ${pubkey}`);
|
|
143
128
|
}
|
|
144
129
|
}
|
|
145
130
|
//# sourceMappingURL=update.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
package/dist/src/config.js
CHANGED
package/dist/src/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AASxB,MAAM,CAAC,MAAM,cAAc,GAAW;IACpC,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AASxB,MAAM,CAAC,MAAM,cAAc,GAAW;IACpC,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,CAAC,2BAA2B,CAAC;IACrC,YAAY,EAAE,EAAE;CACjB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW;IAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;IACvD,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,UAAU,EAAE,CAAC;QAEpD,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACxD,MAAM,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;QACxC,CAAC;QAED,yCAAyC;QACzC,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;YAChE,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC;QAC3B,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,cAAc,CAAC;IACxB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW,EAAE,MAAc;IAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;IACvD,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Client } from "@modelcontextprotocol/sdk/client";
|
|
2
|
+
import type { Config } from "../config.js";
|
|
3
|
+
export interface CvmConnectionResult {
|
|
4
|
+
client: Client;
|
|
5
|
+
serverDetails: any;
|
|
6
|
+
toolListResult: any;
|
|
7
|
+
}
|
|
8
|
+
export declare function createCvmConnection(pubkey: string, config: Config, clientName?: string): Promise<CvmConnectionResult>;
|
|
9
|
+
//# sourceMappingURL=cvm-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cvm-client.d.ts","sourceRoot":"","sources":["../../../src/utils/cvm-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAM1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,GAAG,CAAC;IACnB,cAAc,EAAE,GAAG,CAAC;CACrB;AAED,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,UAAU,GAAE,MAAuB,GAClC,OAAO,CAAC,mBAAmB,CAAC,CA6B9B"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Client } from "@modelcontextprotocol/sdk/client";
|
|
2
|
+
import { ApplesauceRelayPool, NostrClientTransport, PrivateKeySigner, } from "@contextvm/sdk";
|
|
3
|
+
export async function createCvmConnection(pubkey, config, clientName = "ctxcn-client") {
|
|
4
|
+
const client = new Client({
|
|
5
|
+
name: clientName,
|
|
6
|
+
version: "1.0.0",
|
|
7
|
+
});
|
|
8
|
+
const transport = new NostrClientTransport({
|
|
9
|
+
signer: config.privateKey
|
|
10
|
+
? new PrivateKeySigner(config.privateKey)
|
|
11
|
+
: new PrivateKeySigner(""),
|
|
12
|
+
relayHandler: new ApplesauceRelayPool(config.relays),
|
|
13
|
+
serverPubkey: pubkey,
|
|
14
|
+
});
|
|
15
|
+
try {
|
|
16
|
+
await client.connect(transport);
|
|
17
|
+
const serverDetails = client.getServerVersion();
|
|
18
|
+
const toolListResult = await client.listTools();
|
|
19
|
+
await transport.close();
|
|
20
|
+
return {
|
|
21
|
+
client,
|
|
22
|
+
serverDetails,
|
|
23
|
+
toolListResult,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
await transport.close().catch(() => { }); // Ignore close errors
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=cvm-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cvm-client.js","sourceRoot":"","sources":["../../../src/utils/cvm-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAC1D,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AASxB,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAc,EACd,MAAc,EACd,aAAqB,cAAc;IAEnC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;QACxB,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,oBAAoB,CAAC;QACzC,MAAM,EAAE,MAAM,CAAC,UAAU;YACvB,CAAC,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC;YACzC,CAAC,CAAC,IAAI,gBAAgB,CAAC,EAAE,CAAC;QAC5B,YAAY,EAAE,IAAI,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC;QACpD,YAAY,EAAE,MAAM;KACrB,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAChD,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;QAChD,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;QAExB,OAAO;YACL,MAAM;YACN,aAAa;YACb,cAAc;SACf,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,sBAAsB;QAC/D,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../../src/utils/error-handler.ts"],"names":[],"mappings":"AAAA,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAGpE;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAMxC;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAG3D"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function handleCliError(error, context) {
|
|
2
|
+
console.error(`❌ Error in ${context}:`, error);
|
|
3
|
+
process.exit(1);
|
|
4
|
+
}
|
|
5
|
+
export function handleConfigError() {
|
|
6
|
+
console.error("❌ Error: Configuration file 'ctxcn.config.json' not found.");
|
|
7
|
+
console.error("Please run 'ctxcn init' first to create a configuration file.");
|
|
8
|
+
process.exit(1);
|
|
9
|
+
}
|
|
10
|
+
export function handleValidationError(message) {
|
|
11
|
+
console.error(`❌ Validation Error: ${message}`);
|
|
12
|
+
process.exit(1);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=error-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../../src/utils/error-handler.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc,CAAC,KAAc,EAAE,OAAe;IAC5D,OAAO,CAAC,KAAK,CAAC,cAAc,OAAO,GAAG,EAAE,KAAK,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAC5E,OAAO,CAAC,KAAK,CACX,+DAA+D,CAChE,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,OAAO,CAAC,KAAK,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function ensureDirectoryExists(dirPath: string): Promise<void>;
|
|
2
|
+
export declare function fileExists(filePath: string): Promise<boolean>;
|
|
3
|
+
export declare function writeFileWithDir(filePath: string, content: string): Promise<void>;
|
|
4
|
+
//# sourceMappingURL=file-operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-operations.d.ts","sourceRoot":"","sources":["../../../src/utils/file-operations.ts"],"names":[],"mappings":"AAGA,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM1E;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAIf"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { promises as fs } from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
export async function ensureDirectoryExists(dirPath) {
|
|
4
|
+
try {
|
|
5
|
+
await fs.access(dirPath);
|
|
6
|
+
}
|
|
7
|
+
catch (error) {
|
|
8
|
+
await fs.mkdir(dirPath, { recursive: true });
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export async function fileExists(filePath) {
|
|
12
|
+
try {
|
|
13
|
+
await fs.access(filePath);
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export async function writeFileWithDir(filePath, content) {
|
|
21
|
+
const dir = path.dirname(filePath);
|
|
22
|
+
await ensureDirectoryExists(dir);
|
|
23
|
+
await fs.writeFile(filePath, content, "utf-8");
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=file-operations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-operations.js","sourceRoot":"","sources":["../../../src/utils/file-operations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAAe;IACzD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAgB,EAChB,OAAe;IAEf,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,qBAAqB,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -7,5 +7,5 @@ export declare function extractSchemaProperties(schema: JSONSchema): Array<{
|
|
|
7
7
|
required: boolean;
|
|
8
8
|
}>;
|
|
9
9
|
export declare function generateTypeFromSchema(schema: JSONSchema | boolean, typeName: string): Promise<string>;
|
|
10
|
-
export declare function generateClientCode(pubkey: string,
|
|
10
|
+
export declare function generateClientCode(pubkey: string, toolListResult: any, serverName: string, privateKey?: string, relays?: string[]): Promise<string>;
|
|
11
11
|
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/utils/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAI5D,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAuChE;AAED,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAiBhE;AAoBD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,UAAU,GACjB,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,CAmB1D;AAeD,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,UAAU,GAAG,OAAO,EAC5B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAejB;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/utils/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAI5D,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAuChE;AAED,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAiBhE;AAoBD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,UAAU,GACjB,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,CAmB1D;AAeD,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,UAAU,GAAG,OAAO,EAC5B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAejB;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,GAAG,EACnB,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,MAAM,CAAC,CA4BjB"}
|
package/dist/src/utils/schema.js
CHANGED
|
@@ -108,7 +108,7 @@ export async function generateTypeFromSchema(schema, typeName) {
|
|
|
108
108
|
additionalProperties: false,
|
|
109
109
|
});
|
|
110
110
|
}
|
|
111
|
-
export async function generateClientCode(pubkey,
|
|
111
|
+
export async function generateClientCode(pubkey, toolListResult, serverName, privateKey, relays) {
|
|
112
112
|
const classMethods = [];
|
|
113
113
|
const serverTypeMethods = [];
|
|
114
114
|
for (const tool of toolListResult.tools) {
|
|
@@ -119,7 +119,7 @@ export async function generateClientCode(pubkey, serverDetails, toolListResult,
|
|
|
119
119
|
const clientName = `${serverName}Client`;
|
|
120
120
|
const serverType = generateServerType(serverName, serverTypeMethods);
|
|
121
121
|
const genericCallMethod = generateGenericCallMethod();
|
|
122
|
-
return assembleClientCode(clientName, pubkey, serverType, genericCallMethod, classMethods, serverName);
|
|
122
|
+
return assembleClientCode(clientName, pubkey, serverType, genericCallMethod, classMethods, serverName, privateKey, relays);
|
|
123
123
|
}
|
|
124
124
|
async function generateToolMethods(tool, serverName) {
|
|
125
125
|
const toolName = tool.name;
|
|
@@ -273,7 +273,7 @@ function generateGenericCallMethod() {
|
|
|
273
273
|
return result.structuredContent as T;
|
|
274
274
|
}`;
|
|
275
275
|
}
|
|
276
|
-
function assembleClientCode(clientName, pubkey, serverType, genericCallMethod, classMethods, serverName) {
|
|
276
|
+
function assembleClientCode(clientName, pubkey, serverType, genericCallMethod, classMethods, serverName, privateKey, relays) {
|
|
277
277
|
return `import { Client } from "@modelcontextprotocol/sdk/client";
|
|
278
278
|
import type { Transport } from "@modelcontextprotocol/sdk/shared/transport.js";
|
|
279
279
|
import {
|
|
@@ -300,8 +300,8 @@ export class ${clientName} implements ${serverName} {
|
|
|
300
300
|
|
|
301
301
|
const {
|
|
302
302
|
privateKey,
|
|
303
|
-
relays = ["
|
|
304
|
-
signer = new PrivateKeySigner(privateKey),
|
|
303
|
+
relays = ${relays ? JSON.stringify(relays) : `["wss://relay.contextvm.org"]`},
|
|
304
|
+
signer = new PrivateKeySigner(privateKey || process.env.CTXCN_PRIVATE_KEY${privateKey ? ` || "${privateKey}"` : ""}),
|
|
305
305
|
relayHandler = new ApplesauceRelayPool(relays),
|
|
306
306
|
...rest
|
|
307
307
|
} = options;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/utils/schema.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/utils/schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,UAAU,cAAc,CAAC,MAAe;IAC5C,iDAAiD;IACjD,IAAI,OAAO,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,gGAAgG;IAChG,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,gEAAgE;IAChE,SAAS,QAAQ,CAAC,GAAQ;QACxB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC5C,OAAO,GAAG,CAAC;QACb,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;QAED,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;gBACnD,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;oBACnB,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC1B,iCAAiC;oBACjC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC7D,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;oBACzB,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,cAAsB;IACtD,2DAA2D;IAC3D,6CAA6C;IAC7C,MAAM,cAAc,GAAG,cAAc,CAAC,KAAK,CACzC,gDAAgD,CACjD,CAAC;IACF,IAAI,cAAc,IAAI,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,OAAO,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACxE,IAAI,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAClC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAiB;IACzC,kDAAkD;IAClD,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACzD,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACpD,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,UAAU,GAAG,aAAa;iBAC7B,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;iBAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;iBACtB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC;iBAC9B,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,OAAO,MAAM,UAAU,SAAS,CAAC;QACnC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,MAAkB;IAElB,IAAI,CAAC,MAAM,EAAE,UAAU,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QACtD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAEvE,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;SACrC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,CAAC;SACzE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,EAAE;QAC9B,MAAM,QAAQ,GAAI,UAAkB,CAAC,IAAI,IAAI,SAAS,CAAC;QACvD,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAE/C,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,uBAAuB,CAAC,QAAQ,CAAC;YACvC,QAAQ,EAAE,UAAU;SACrB,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,uBAAuB,CAAC,QAAgB;IAC/C,MAAM,OAAO,GAA2B;QACtC,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,QAAQ;KACjB,CAAC;IAEF,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,MAA4B,EAC5B,QAAgB;IAEhB,IAAI,OAAO,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,eAAe,QAAQ,MAAM,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC;IAClE,CAAC;IAED,MAAM,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAE/C,IAAI,OAAO,eAAe,KAAK,SAAS,EAAE,CAAC;QACzC,OAAO,eAAe,QAAQ,MAAM,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC;IAC3E,CAAC;IAED,OAAO,MAAM,OAAO,CAAC,eAAe,EAAE,QAAQ,EAAE;QAC9C,aAAa,EAAE,EAAE;QACjB,oBAAoB,EAAE,KAAK;KAC5B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAc,EACd,cAAmB,EACnB,UAAkB,EAClB,UAAmB,EACnB,MAAiB;IAEjB,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,iBAAiB,GAAa,EAAE,CAAC;IAEvC,KAAK,MAAM,IAAI,IAAI,cAAc,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,EAAE,iBAAiB,EAAE,YAAY,EAAE,GAAG,MAAM,mBAAmB,CACnE,IAAI,EACJ,UAAU,CACX,CAAC;QAEF,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACjD,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,UAAU,GAAG,GAAG,UAAU,QAAQ,CAAC;IACzC,MAAM,UAAU,GAAG,kBAAkB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IACrE,MAAM,iBAAiB,GAAG,yBAAyB,EAAE,CAAC;IAEtD,OAAO,kBAAkB,CACvB,UAAU,EACV,MAAM,EACN,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,UAAU,EACV,MAAM,CACP,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,IAAS,EAAE,UAAkB;IAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;IAC3B,MAAM,mBAAmB,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,GAAG,mBAAmB,OAAO,CAAC;IACpD,MAAM,cAAc,GAAG,GAAG,mBAAmB,QAAQ,CAAC;IAEtD,2DAA2D;IAC3D,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAC5C,IAAI,CAAC,WAAW,EAChB,aAAa,CACd,CAAC;IACF,MAAM,UAAU,GAAG,MAAM,sBAAsB,CAC7C,IAAI,CAAC,YAAY,EACjB,cAAc,CACf,CAAC;IAEF,2DAA2D;IAC3D,MAAM,eAAe,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACrD,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAEvD,2DAA2D;IAC3D,MAAM,eAAe,GAAG,uBAAuB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAElE,oDAAoD;IACpD,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC;IAE5E,6EAA6E;IAC7E,MAAM,iBAAiB,GACrB,eAAe,CAAC,MAAM,GAAG,CAAC;QACxB,CAAC,CAAC,kCAAkC,CAChC,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,YAAY,CACb;QACH,CAAC,CAAC,6BAA6B,CAC3B,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,YAAY,CACb,CAAC;IAER,oDAAoD;IACpD,MAAM,YAAY,GAChB,eAAe,CAAC,MAAM,GAAG,CAAC;QACxB,CAAC,CAAC,KAAK,QAAQ,MAAM,iBAAiB,CAAC,UAAU,gBAAgB,gBAAgB,IAAI;QACrF,CAAC,CAAC,KAAK,QAAQ,YAAY,eAAe,gBAAgB,gBAAgB,IAAI,CAAC;IAEnF,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAC;AAC7C,CAAC;AAED,SAAS,aAAa,CACpB,IAAS,EACT,eAAyE,EACzE,gBAAwB;IAExB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,uBAAuB;IACvB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACzC,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,6BAA6B;IAC7B,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,gEAAgE;QAChE,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACrC,IAAI,WAAW,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;YAC1C,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;gBACnC,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrD,IAAI,WAAW,GAAG,UAAU,EAAE,WAAW,IAAI,EAAE,CAAC;gBAEhD,mFAAmF;gBACnF,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,WAAW,GAAG,4BAA4B,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnE,CAAC;gBAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;gBACpD,KAAK,CAAC,IAAI,CACR,gBAAgB,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,QAAQ,GAAG,WAAW,EAAE,CACpE,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,yDAAyD;IACzD,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;IACvC,MAAM,iBAAiB,GACrB,YAAY,EAAE,WAAW,IAAI,qBAAqB,IAAI,CAAC,IAAI,YAAY,CAAC;IAE1E,gEAAgE;IAChE,IAAI,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,qEAAqE;QACrE,gEAAgE;QAChE,MAAM,WAAW,GAAG,gBAAgB;aACjC,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,6BAA6B;YAC7B,IACE,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;gBACzB,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;gBACvB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EACtB,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;aAC/C,IAAI,CAAC,GAAG,CAAC,CAAC;QAEb,iEAAiE;QACjE,IAAI,WAAW,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,mCAAmC,iBAAiB,EAAE,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CACR,0BAA0B,WAAW,MAAM,iBAAiB,EAAE,CAC/D,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CACR,0BAA0B,gBAAgB,MAAM,iBAAiB,EAAE,CACpE,CAAC;IACJ,CAAC;IAED,OAAO,UAAU,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;AAC7C,CAAC;AAED,SAAS,4BAA4B,CACnC,SAAiB,EACjB,QAAgB;IAEhB,iFAAiF;IACjF,MAAM,iBAAiB,GAA2B;QAChD,CAAC,EAAE,yBAAyB;QAC5B,CAAC,EAAE,0BAA0B;QAC7B,KAAK,EAAE,8BAA8B;QACrC,IAAI,EAAE,qBAAqB;QAC3B,KAAK,EAAE,kBAAkB;QACzB,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,uBAAuB;QAChC,MAAM,EAAE,wBAAwB;QAChC,GAAG,EAAE,uBAAuB;QAC5B,IAAI,EAAE,4BAA4B;QAClC,IAAI,EAAE,qBAAqB;QAC3B,EAAE,EAAE,uBAAuB;KAC5B,CAAC;IAEF,4CAA4C;IAC5C,IAAI,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,OAAO,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED,6DAA6D;IAC7D,MAAM,gBAAgB,GACpB,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzD,OAAO,OAAO,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,YAAY,CAAC;AAC/E,CAAC;AAED,SAAS,kCAAkC,CACzC,QAAgB,EAChB,UAAoE,EACpE,UAAkB,EAClB,YAAoB;IAEpB,MAAM,UAAU,GAAG,UAAU;SAC1B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;SACtE,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAElE,OAAO;QACL,UAAU;QACV,WAAW,EAAE,KAAK,YAAY;UACxB,QAAQ;MACZ,UAAU;eACD,UAAU;wBACD,QAAQ,QAAQ,UAAU;IAC9C;KACD,CAAC;AACJ,CAAC;AAED,SAAS,6BAA6B,CACpC,QAAgB,EAChB,SAAiB,EACjB,UAAkB,EAClB,YAAoB;IAEpB,OAAO;QACL,UAAU,EAAE,SAAS,SAAS,EAAE;QAChC,WAAW,EAAE,KAAK,YAAY;UACxB,QAAQ;YACN,SAAS;eACN,UAAU;wBACD,QAAQ;IAC5B;KACD,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,UAAkB,EAClB,iBAA2B;IAE3B,OAAO,eAAe,UAAU;EAChC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;GAC3B,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB;IAChC,OAAO;;;;;;;;;IASL,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CACzB,UAAkB,EAClB,MAAc,EACd,UAAkB,EAClB,iBAAyB,EACzB,YAAsB,EACtB,UAAkB,EAClB,UAAmB,EACnB,MAAiB;IAEjB,OAAO;;;;;;;;;EASP,UAAU;;eAEG,UAAU,eAAe,UAAU;qCACb,MAAM;;;;;;;;eAQ5B,UAAU;;;;;;iBAMR,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,+BAA+B;iFACD,UAAU,CAAC,CAAC,CAAC,QAAQ,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE;;;;;;sBAMlG,UAAU;;;;;;;;;;;;;;;;;EAiB9B,iBAAiB;;EAEjB,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;;CAE1B,CAAC;AACF,CAAC"}
|
package/dist/src/utils.d.ts
CHANGED
package/dist/src/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,GAAG,MAAM,KAAG,MAcxC,CAAC"}
|
package/dist/src/utils.js
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Convert a string to PascalCase
|
|
3
|
+
* Handles various separators: spaces, hyphens, underscores, and forward slashes
|
|
4
|
+
*/
|
|
2
5
|
export const toPascalCase = (s) => {
|
|
3
|
-
if (!s) {
|
|
6
|
+
if (!s || typeof s !== "string") {
|
|
4
7
|
return "";
|
|
5
8
|
}
|
|
6
|
-
//
|
|
9
|
+
// Replace forward slashes with hyphens to handle names like 'example-servers/everything'
|
|
7
10
|
const normalized = s.replace(/\//g, "-");
|
|
8
|
-
// Convert to camelCase first, then capitalize the first letter
|
|
9
|
-
const camelCased = normalized
|
|
11
|
+
// Convert to camelCase first, then capitalize the first letter
|
|
12
|
+
const camelCased = normalized
|
|
13
|
+
.toLowerCase()
|
|
14
|
+
.replace(/([-_ ]\w)/g, (g) => (g ? g.charAt(1).toUpperCase() : ""));
|
|
10
15
|
return camelCased.charAt(0).toUpperCase() + camelCased.slice(1);
|
|
11
16
|
};
|
|
12
17
|
//# sourceMappingURL=utils.js.map
|
package/dist/src/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAS,EAAU,EAAE;IAChD,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,yFAAyF;IACzF,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAEzC,+DAA+D;IAC/D,MAAM,UAAU,GAAG,UAAU;SAC1B,WAAW,EAAE;SACb,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEtE,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contextvm/ctxcn",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "A command-line utility inspired by shadcn that streamlines the integration of ContextVM (CVM) servers into your TypeScript projects",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"typescript",
|
|
27
27
|
"code-generation"
|
|
28
28
|
],
|
|
29
|
-
"author": "",
|
|
29
|
+
"author": "Contextvm-org",
|
|
30
30
|
"license": "MIT",
|
|
31
31
|
"files": [
|
|
32
32
|
"dist",
|