@tpmjs/cli 0.1.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/README.md +127 -0
- package/bin/run.js +5 -0
- package/dist/commands/agent/chat.d.ts +23 -0
- package/dist/commands/agent/chat.js +608 -0
- package/dist/commands/agent/chat.js.map +1 -0
- package/dist/commands/agent/create.d.ts +22 -0
- package/dist/commands/agent/create.js +549 -0
- package/dist/commands/agent/create.js.map +1 -0
- package/dist/commands/agent/delete.d.ts +19 -0
- package/dist/commands/agent/delete.js +529 -0
- package/dist/commands/agent/delete.js.map +1 -0
- package/dist/commands/agent/list.d.ts +16 -0
- package/dist/commands/agent/list.js +535 -0
- package/dist/commands/agent/list.js.map +1 -0
- package/dist/commands/agent/update.d.ts +25 -0
- package/dist/commands/agent/update.js +547 -0
- package/dist/commands/agent/update.js.map +1 -0
- package/dist/commands/auth/login.d.ts +21 -0
- package/dist/commands/auth/login.js +603 -0
- package/dist/commands/auth/login.js.map +1 -0
- package/dist/commands/auth/logout.d.ts +13 -0
- package/dist/commands/auth/logout.js +227 -0
- package/dist/commands/auth/logout.js.map +1 -0
- package/dist/commands/auth/status.d.ts +14 -0
- package/dist/commands/auth/status.js +542 -0
- package/dist/commands/auth/status.js.map +1 -0
- package/dist/commands/auth/whoami.d.ts +14 -0
- package/dist/commands/auth/whoami.js +500 -0
- package/dist/commands/auth/whoami.js.map +1 -0
- package/dist/commands/collection/add.d.ts +18 -0
- package/dist/commands/collection/add.js +509 -0
- package/dist/commands/collection/add.js.map +1 -0
- package/dist/commands/collection/create.d.ts +17 -0
- package/dist/commands/collection/create.js +521 -0
- package/dist/commands/collection/create.js.map +1 -0
- package/dist/commands/collection/delete.d.ts +19 -0
- package/dist/commands/collection/delete.js +531 -0
- package/dist/commands/collection/delete.js.map +1 -0
- package/dist/commands/collection/import.d.ts +18 -0
- package/dist/commands/collection/import.js +546 -0
- package/dist/commands/collection/import.js.map +1 -0
- package/dist/commands/collection/list.d.ts +16 -0
- package/dist/commands/collection/list.js +531 -0
- package/dist/commands/collection/list.js.map +1 -0
- package/dist/commands/collection/remove.d.ts +18 -0
- package/dist/commands/collection/remove.js +501 -0
- package/dist/commands/collection/remove.js.map +1 -0
- package/dist/commands/collection/update.d.ts +20 -0
- package/dist/commands/collection/update.js +522 -0
- package/dist/commands/collection/update.js.map +1 -0
- package/dist/commands/doctor.d.ts +14 -0
- package/dist/commands/doctor.js +592 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/mcp/config.d.ts +19 -0
- package/dist/commands/mcp/config.js +265 -0
- package/dist/commands/mcp/config.js.map +1 -0
- package/dist/commands/mcp/serve.d.ts +23 -0
- package/dist/commands/mcp/serve.js +689 -0
- package/dist/commands/mcp/serve.js.map +1 -0
- package/dist/commands/playground.d.ts +23 -0
- package/dist/commands/playground.js +666 -0
- package/dist/commands/playground.js.map +1 -0
- package/dist/commands/publish/check.d.ts +17 -0
- package/dist/commands/publish/check.js +544 -0
- package/dist/commands/publish/check.js.map +1 -0
- package/dist/commands/publish/preview.d.ts +19 -0
- package/dist/commands/publish/preview.js +291 -0
- package/dist/commands/publish/preview.js.map +1 -0
- package/dist/commands/tool/execute.d.ts +21 -0
- package/dist/commands/tool/execute.js +574 -0
- package/dist/commands/tool/execute.js.map +1 -0
- package/dist/commands/tool/info.d.ts +18 -0
- package/dist/commands/tool/info.js +537 -0
- package/dist/commands/tool/info.js.map +1 -0
- package/dist/commands/tool/init.d.ts +24 -0
- package/dist/commands/tool/init.js +461 -0
- package/dist/commands/tool/init.js.map +1 -0
- package/dist/commands/tool/search.d.ts +20 -0
- package/dist/commands/tool/search.js +566 -0
- package/dist/commands/tool/search.js.map +1 -0
- package/dist/commands/tool/trending.d.ts +15 -0
- package/dist/commands/tool/trending.js +523 -0
- package/dist/commands/tool/trending.js.map +1 -0
- package/dist/commands/tool/validate.d.ts +15 -0
- package/dist/commands/tool/validate.js +555 -0
- package/dist/commands/tool/validate.js.map +1 -0
- package/dist/commands/update.d.ts +15 -0
- package/dist/commands/update.js +228 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/hooks/init.d.ts +5 -0
- package/dist/hooks/init.js +8 -0
- package/dist/hooks/init.js.map +1 -0
- package/dist/index.d.ts +262 -0
- package/dist/index.js +473 -0
- package/dist/index.js.map +1 -0
- package/oclif.manifest.json +1699 -0
- package/package.json +104 -0
|
@@ -0,0 +1,461 @@
|
|
|
1
|
+
import { Command, Flags, Args } from '@oclif/core';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import * as readline from 'readline';
|
|
5
|
+
import Table from 'cli-table3';
|
|
6
|
+
import ora from 'ora';
|
|
7
|
+
import pc from 'picocolors';
|
|
8
|
+
|
|
9
|
+
// src/commands/tool/init.ts
|
|
10
|
+
var OutputFormatter = class {
|
|
11
|
+
options;
|
|
12
|
+
constructor(options = {}) {
|
|
13
|
+
this.options = options;
|
|
14
|
+
}
|
|
15
|
+
// Output as JSON
|
|
16
|
+
json(data) {
|
|
17
|
+
console.log(JSON.stringify(data, null, 2));
|
|
18
|
+
}
|
|
19
|
+
// Output a table
|
|
20
|
+
table(data, columns) {
|
|
21
|
+
if (this.options.json) {
|
|
22
|
+
this.json(data);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const table = new Table({
|
|
26
|
+
head: columns.map((col) => pc.bold(col.header)),
|
|
27
|
+
colWidths: columns.map((col) => col.width ?? null),
|
|
28
|
+
style: {
|
|
29
|
+
head: [],
|
|
30
|
+
border: []
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
for (const row of data) {
|
|
34
|
+
table.push(columns.map((col) => String(row[col.key] ?? "")));
|
|
35
|
+
}
|
|
36
|
+
console.log(table.toString());
|
|
37
|
+
}
|
|
38
|
+
// Success message
|
|
39
|
+
success(message) {
|
|
40
|
+
if (this.options.json) return;
|
|
41
|
+
console.log(pc.green("\u2713"), message);
|
|
42
|
+
}
|
|
43
|
+
// Error message
|
|
44
|
+
error(message, details) {
|
|
45
|
+
if (this.options.json) {
|
|
46
|
+
this.json({ error: message, details });
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
console.error(pc.red("\u2717"), message);
|
|
50
|
+
if (details && this.options.verbose) {
|
|
51
|
+
console.error(pc.dim(details));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Warning message
|
|
55
|
+
warning(message) {
|
|
56
|
+
if (this.options.json) return;
|
|
57
|
+
console.log(pc.yellow("\u26A0"), message);
|
|
58
|
+
}
|
|
59
|
+
// Info message
|
|
60
|
+
info(message) {
|
|
61
|
+
if (this.options.json) return;
|
|
62
|
+
console.log(pc.blue("\u2139"), message);
|
|
63
|
+
}
|
|
64
|
+
// Debug message (only in verbose mode)
|
|
65
|
+
debug(message) {
|
|
66
|
+
if (this.options.json) return;
|
|
67
|
+
if (this.options.verbose) {
|
|
68
|
+
console.log(pc.dim(`[debug] ${message}`));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Plain text output
|
|
72
|
+
text(message) {
|
|
73
|
+
if (this.options.json) return;
|
|
74
|
+
console.log(message);
|
|
75
|
+
}
|
|
76
|
+
// Heading
|
|
77
|
+
heading(text) {
|
|
78
|
+
if (this.options.json) return;
|
|
79
|
+
console.log();
|
|
80
|
+
console.log(pc.bold(pc.underline(text)));
|
|
81
|
+
console.log();
|
|
82
|
+
}
|
|
83
|
+
// Subheading
|
|
84
|
+
subheading(text) {
|
|
85
|
+
if (this.options.json) return;
|
|
86
|
+
console.log(pc.bold(text));
|
|
87
|
+
}
|
|
88
|
+
// Key-value pair
|
|
89
|
+
keyValue(key, value) {
|
|
90
|
+
if (this.options.json) return;
|
|
91
|
+
console.log(`${pc.dim(key + ":")} ${value ?? pc.dim("(not set)")}`);
|
|
92
|
+
}
|
|
93
|
+
// List item
|
|
94
|
+
listItem(text, indent = 0) {
|
|
95
|
+
if (this.options.json) return;
|
|
96
|
+
const prefix = " ".repeat(indent) + "\u2022";
|
|
97
|
+
console.log(`${prefix} ${text}`);
|
|
98
|
+
}
|
|
99
|
+
// Spinner
|
|
100
|
+
spinner(message) {
|
|
101
|
+
return ora({
|
|
102
|
+
text: message,
|
|
103
|
+
isSilent: this.options.json
|
|
104
|
+
}).start();
|
|
105
|
+
}
|
|
106
|
+
// Blank line
|
|
107
|
+
newLine() {
|
|
108
|
+
if (this.options.json) return;
|
|
109
|
+
console.log();
|
|
110
|
+
}
|
|
111
|
+
// Horizontal rule
|
|
112
|
+
hr() {
|
|
113
|
+
if (this.options.json) return;
|
|
114
|
+
console.log(pc.dim("\u2500".repeat(50)));
|
|
115
|
+
}
|
|
116
|
+
// Alias for hr
|
|
117
|
+
divider() {
|
|
118
|
+
this.hr();
|
|
119
|
+
}
|
|
120
|
+
// Code block
|
|
121
|
+
code(text, language) {
|
|
122
|
+
if (this.options.json) {
|
|
123
|
+
this.json({ code: text, language });
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
console.log(pc.dim("```" + (language ?? "")));
|
|
127
|
+
console.log(text);
|
|
128
|
+
console.log(pc.dim("```"));
|
|
129
|
+
}
|
|
130
|
+
// Highlight text
|
|
131
|
+
highlight(text) {
|
|
132
|
+
return pc.cyan(text);
|
|
133
|
+
}
|
|
134
|
+
// Dim text
|
|
135
|
+
dim(text) {
|
|
136
|
+
return pc.dim(text);
|
|
137
|
+
}
|
|
138
|
+
// Bold text
|
|
139
|
+
bold(text) {
|
|
140
|
+
return pc.bold(text);
|
|
141
|
+
}
|
|
142
|
+
// Link (just returns text in terminal)
|
|
143
|
+
link(text, url) {
|
|
144
|
+
return `\x1B]8;;${url}\x07${pc.underline(pc.blue(text))}\x1B]8;;\x07`;
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
function createOutput(flags) {
|
|
148
|
+
return new OutputFormatter({
|
|
149
|
+
json: flags.json,
|
|
150
|
+
verbose: flags.verbose
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// src/commands/tool/init.ts
|
|
155
|
+
var CATEGORIES = [
|
|
156
|
+
"research",
|
|
157
|
+
"web",
|
|
158
|
+
"data",
|
|
159
|
+
"documentation",
|
|
160
|
+
"engineering",
|
|
161
|
+
"security",
|
|
162
|
+
"statistics",
|
|
163
|
+
"ops",
|
|
164
|
+
"agent",
|
|
165
|
+
"sandbox",
|
|
166
|
+
"utilities",
|
|
167
|
+
"html",
|
|
168
|
+
"compliance"
|
|
169
|
+
];
|
|
170
|
+
var ToolInit = class _ToolInit extends Command {
|
|
171
|
+
static description = "Initialize a new TPMJS tool package";
|
|
172
|
+
static examples = [
|
|
173
|
+
"<%= config.bin %> <%= command.id %>",
|
|
174
|
+
"<%= config.bin %> <%= command.id %> my-tool",
|
|
175
|
+
"<%= config.bin %> <%= command.id %> --template minimal"
|
|
176
|
+
];
|
|
177
|
+
static flags = {
|
|
178
|
+
template: Flags.string({
|
|
179
|
+
char: "t",
|
|
180
|
+
description: "Template to use",
|
|
181
|
+
options: ["minimal", "rich"],
|
|
182
|
+
default: "minimal"
|
|
183
|
+
}),
|
|
184
|
+
category: Flags.string({
|
|
185
|
+
char: "c",
|
|
186
|
+
description: "Tool category",
|
|
187
|
+
options: CATEGORIES
|
|
188
|
+
}),
|
|
189
|
+
force: Flags.boolean({
|
|
190
|
+
char: "f",
|
|
191
|
+
description: "Overwrite existing files",
|
|
192
|
+
default: false
|
|
193
|
+
}),
|
|
194
|
+
yes: Flags.boolean({
|
|
195
|
+
char: "y",
|
|
196
|
+
description: "Skip prompts and use defaults",
|
|
197
|
+
default: false
|
|
198
|
+
}),
|
|
199
|
+
verbose: Flags.boolean({
|
|
200
|
+
char: "v",
|
|
201
|
+
description: "Show verbose output",
|
|
202
|
+
default: false
|
|
203
|
+
})
|
|
204
|
+
};
|
|
205
|
+
static args = {
|
|
206
|
+
name: Args.string({
|
|
207
|
+
description: "Tool name (creates directory if not exists)",
|
|
208
|
+
required: false
|
|
209
|
+
})
|
|
210
|
+
};
|
|
211
|
+
rl;
|
|
212
|
+
async run() {
|
|
213
|
+
const { args, flags } = await this.parse(_ToolInit);
|
|
214
|
+
const output = createOutput(flags);
|
|
215
|
+
this.rl = readline.createInterface({
|
|
216
|
+
input: process.stdin,
|
|
217
|
+
output: process.stdout
|
|
218
|
+
});
|
|
219
|
+
try {
|
|
220
|
+
const config = await this.gatherConfig(args.name, flags, output);
|
|
221
|
+
const targetDir = config.name ? path.resolve(config.name) : process.cwd();
|
|
222
|
+
const packageJsonPath = path.join(targetDir, "package.json");
|
|
223
|
+
if (fs.existsSync(packageJsonPath) && !flags.force) {
|
|
224
|
+
output.error("package.json already exists. Use --force to overwrite.");
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
if (!fs.existsSync(targetDir)) {
|
|
228
|
+
fs.mkdirSync(targetDir, { recursive: true });
|
|
229
|
+
}
|
|
230
|
+
await this.generateFiles(targetDir, config, flags.template, output);
|
|
231
|
+
output.success("TPMJS tool initialized successfully!");
|
|
232
|
+
output.text("");
|
|
233
|
+
output.text("Next steps:");
|
|
234
|
+
output.listItem("Install dependencies: npm install");
|
|
235
|
+
output.listItem("Implement your tool in src/index.ts");
|
|
236
|
+
output.listItem("Validate: tpm tool validate");
|
|
237
|
+
output.listItem("Build: npm run build");
|
|
238
|
+
output.listItem("Publish: npm publish");
|
|
239
|
+
} finally {
|
|
240
|
+
this.rl?.close();
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
async gatherConfig(name, flags, output) {
|
|
244
|
+
if (flags.yes) {
|
|
245
|
+
return {
|
|
246
|
+
name: name || "my-tpmjs-tool",
|
|
247
|
+
description: "A TPMJS tool",
|
|
248
|
+
category: flags.category || "utilities",
|
|
249
|
+
author: process.env.USER || "unknown"
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
output.heading("TPMJS Tool Initialization");
|
|
253
|
+
output.text("");
|
|
254
|
+
const toolName = name || await this.prompt("Tool name: ") || "my-tpmjs-tool";
|
|
255
|
+
const description = await this.prompt("Description: ") || "A TPMJS tool";
|
|
256
|
+
let category = flags.category;
|
|
257
|
+
if (!category) {
|
|
258
|
+
output.text("");
|
|
259
|
+
output.text("Available categories:");
|
|
260
|
+
CATEGORIES.forEach((cat, i) => {
|
|
261
|
+
output.text(` ${i + 1}. ${cat}`);
|
|
262
|
+
});
|
|
263
|
+
const catIndex = await this.prompt("Category (number or name): ");
|
|
264
|
+
const index = parseInt(catIndex, 10);
|
|
265
|
+
if (index > 0 && index <= CATEGORIES.length) {
|
|
266
|
+
category = CATEGORIES[index - 1];
|
|
267
|
+
} else if (CATEGORIES.includes(catIndex)) {
|
|
268
|
+
category = catIndex;
|
|
269
|
+
} else {
|
|
270
|
+
category = "utilities";
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
const author = await this.prompt(`Author (${process.env.USER}): `) || process.env.USER || "unknown";
|
|
274
|
+
return { name: toolName, description, category: category ?? "utilities", author };
|
|
275
|
+
}
|
|
276
|
+
prompt(question) {
|
|
277
|
+
return new Promise((resolve2) => {
|
|
278
|
+
this.rl?.question(question, (answer) => {
|
|
279
|
+
resolve2(answer.trim());
|
|
280
|
+
});
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
async generateFiles(targetDir, config, template, output) {
|
|
284
|
+
const spinner = output.spinner("Generating files...");
|
|
285
|
+
const packageJson = {
|
|
286
|
+
name: config.name.startsWith("@") ? config.name : config.name,
|
|
287
|
+
version: "0.1.0",
|
|
288
|
+
description: config.description,
|
|
289
|
+
type: "module",
|
|
290
|
+
main: "./dist/index.js",
|
|
291
|
+
types: "./dist/index.d.ts",
|
|
292
|
+
exports: {
|
|
293
|
+
".": {
|
|
294
|
+
import: "./dist/index.js",
|
|
295
|
+
types: "./dist/index.d.ts"
|
|
296
|
+
}
|
|
297
|
+
},
|
|
298
|
+
files: ["dist"],
|
|
299
|
+
keywords: ["tpmjs", "mcp", "ai-tools", config.category],
|
|
300
|
+
author: config.author,
|
|
301
|
+
license: "MIT",
|
|
302
|
+
scripts: {
|
|
303
|
+
build: "tsup",
|
|
304
|
+
dev: "tsup --watch",
|
|
305
|
+
"type-check": "tsc --noEmit",
|
|
306
|
+
prepublishOnly: "npm run build"
|
|
307
|
+
},
|
|
308
|
+
dependencies: {
|
|
309
|
+
ai: "^4.0.0"
|
|
310
|
+
},
|
|
311
|
+
devDependencies: {
|
|
312
|
+
"@types/node": "^20.0.0",
|
|
313
|
+
tsup: "^8.0.0",
|
|
314
|
+
typescript: "^5.0.0"
|
|
315
|
+
},
|
|
316
|
+
tpmjs: {
|
|
317
|
+
name: config.name.replace(/@[^/]+\//, "").replace(/-/g, " "),
|
|
318
|
+
description: config.description,
|
|
319
|
+
category: config.category,
|
|
320
|
+
tools: [
|
|
321
|
+
{
|
|
322
|
+
name: "myTool",
|
|
323
|
+
description: "Description of what this tool does"
|
|
324
|
+
}
|
|
325
|
+
],
|
|
326
|
+
...template === "rich" ? {
|
|
327
|
+
documentation: "https://github.com/yourname/" + config.name + "#readme",
|
|
328
|
+
examples: [
|
|
329
|
+
{
|
|
330
|
+
title: "Basic usage",
|
|
331
|
+
code: 'const result = await myTool.execute({ input: "hello" });'
|
|
332
|
+
}
|
|
333
|
+
]
|
|
334
|
+
} : {}
|
|
335
|
+
}
|
|
336
|
+
};
|
|
337
|
+
fs.writeFileSync(
|
|
338
|
+
path.join(targetDir, "package.json"),
|
|
339
|
+
JSON.stringify(packageJson, null, 2)
|
|
340
|
+
);
|
|
341
|
+
const tsconfig = {
|
|
342
|
+
compilerOptions: {
|
|
343
|
+
target: "ES2022",
|
|
344
|
+
module: "ESNext",
|
|
345
|
+
moduleResolution: "bundler",
|
|
346
|
+
declaration: true,
|
|
347
|
+
declarationMap: true,
|
|
348
|
+
strict: true,
|
|
349
|
+
esModuleInterop: true,
|
|
350
|
+
skipLibCheck: true,
|
|
351
|
+
outDir: "./dist",
|
|
352
|
+
rootDir: "./src"
|
|
353
|
+
},
|
|
354
|
+
include: ["src"],
|
|
355
|
+
exclude: ["node_modules", "dist"]
|
|
356
|
+
};
|
|
357
|
+
fs.writeFileSync(
|
|
358
|
+
path.join(targetDir, "tsconfig.json"),
|
|
359
|
+
JSON.stringify(tsconfig, null, 2)
|
|
360
|
+
);
|
|
361
|
+
const tsupConfig = `import { defineConfig } from 'tsup';
|
|
362
|
+
|
|
363
|
+
export default defineConfig({
|
|
364
|
+
entry: ['src/index.ts'],
|
|
365
|
+
format: ['esm'],
|
|
366
|
+
dts: true,
|
|
367
|
+
clean: true,
|
|
368
|
+
sourcemap: true,
|
|
369
|
+
});
|
|
370
|
+
`;
|
|
371
|
+
fs.writeFileSync(path.join(targetDir, "tsup.config.ts"), tsupConfig);
|
|
372
|
+
const srcDir = path.join(targetDir, "src");
|
|
373
|
+
if (!fs.existsSync(srcDir)) {
|
|
374
|
+
fs.mkdirSync(srcDir, { recursive: true });
|
|
375
|
+
}
|
|
376
|
+
const indexTs = `import { jsonSchema, tool } from 'ai';
|
|
377
|
+
|
|
378
|
+
/**
|
|
379
|
+
* ${config.description}
|
|
380
|
+
*/
|
|
381
|
+
export const myTool = tool({
|
|
382
|
+
description: '${config.description}',
|
|
383
|
+
parameters: jsonSchema<{ input: string }>({
|
|
384
|
+
type: 'object',
|
|
385
|
+
properties: {
|
|
386
|
+
input: {
|
|
387
|
+
type: 'string',
|
|
388
|
+
description: 'The input to process',
|
|
389
|
+
},
|
|
390
|
+
},
|
|
391
|
+
required: ['input'],
|
|
392
|
+
}),
|
|
393
|
+
async execute({ input }) {
|
|
394
|
+
// TODO: Implement your tool logic here
|
|
395
|
+
return {
|
|
396
|
+
result: \`Processed: \${input}\`,
|
|
397
|
+
};
|
|
398
|
+
},
|
|
399
|
+
});
|
|
400
|
+
|
|
401
|
+
export default myTool;
|
|
402
|
+
`;
|
|
403
|
+
fs.writeFileSync(path.join(srcDir, "index.ts"), indexTs);
|
|
404
|
+
const blockTs = `import { myTool } from './src/index.js';
|
|
405
|
+
|
|
406
|
+
export const block = {
|
|
407
|
+
name: '${config.name}',
|
|
408
|
+
tools: { myTool },
|
|
409
|
+
};
|
|
410
|
+
`;
|
|
411
|
+
fs.writeFileSync(path.join(targetDir, "block.ts"), blockTs);
|
|
412
|
+
const readme = `# ${config.name}
|
|
413
|
+
|
|
414
|
+
${config.description}
|
|
415
|
+
|
|
416
|
+
## Installation
|
|
417
|
+
|
|
418
|
+
\`\`\`bash
|
|
419
|
+
npm install ${config.name}
|
|
420
|
+
\`\`\`
|
|
421
|
+
|
|
422
|
+
## Usage
|
|
423
|
+
|
|
424
|
+
\`\`\`typescript
|
|
425
|
+
import { myTool } from '${config.name}';
|
|
426
|
+
|
|
427
|
+
const result = await myTool.execute({ input: 'hello' });
|
|
428
|
+
console.log(result);
|
|
429
|
+
\`\`\`
|
|
430
|
+
|
|
431
|
+
## Category
|
|
432
|
+
|
|
433
|
+
${config.category}
|
|
434
|
+
|
|
435
|
+
## License
|
|
436
|
+
|
|
437
|
+
MIT
|
|
438
|
+
`;
|
|
439
|
+
fs.writeFileSync(path.join(targetDir, "README.md"), readme);
|
|
440
|
+
const gitignore = `node_modules/
|
|
441
|
+
dist/
|
|
442
|
+
*.log
|
|
443
|
+
.DS_Store
|
|
444
|
+
`;
|
|
445
|
+
fs.writeFileSync(path.join(targetDir, ".gitignore"), gitignore);
|
|
446
|
+
spinner.stop();
|
|
447
|
+
output.text("");
|
|
448
|
+
output.text("Files created:");
|
|
449
|
+
output.listItem("package.json");
|
|
450
|
+
output.listItem("tsconfig.json");
|
|
451
|
+
output.listItem("tsup.config.ts");
|
|
452
|
+
output.listItem("src/index.ts");
|
|
453
|
+
output.listItem("block.ts");
|
|
454
|
+
output.listItem("README.md");
|
|
455
|
+
output.listItem(".gitignore");
|
|
456
|
+
}
|
|
457
|
+
};
|
|
458
|
+
|
|
459
|
+
export { ToolInit as default };
|
|
460
|
+
//# sourceMappingURL=init.js.map
|
|
461
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/output.ts","../../../src/commands/tool/init.ts"],"names":["resolve"],"mappings":"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","file":"init.js","sourcesContent":["import Table from 'cli-table3';\nimport ora, { type Ora } from 'ora';\nimport pc from 'picocolors';\n\nexport interface OutputOptions {\n json?: boolean;\n verbose?: boolean;\n noColor?: boolean;\n}\n\nexport class OutputFormatter {\n private options: OutputOptions;\n\n constructor(options: OutputOptions = {}) {\n this.options = options;\n }\n\n // Output as JSON\n json(data: unknown): void {\n console.log(JSON.stringify(data, null, 2));\n }\n\n // Output a table\n table<T extends Record<string, unknown>>(\n data: T[],\n columns: { key: keyof T; header: string; width?: number }[]\n ): void {\n if (this.options.json) {\n this.json(data);\n return;\n }\n\n const table = new Table({\n head: columns.map((col) => pc.bold(col.header)),\n colWidths: columns.map((col) => col.width ?? null),\n style: {\n head: [],\n border: [],\n },\n });\n\n for (const row of data) {\n table.push(columns.map((col) => String(row[col.key] ?? '')));\n }\n\n console.log(table.toString());\n }\n\n // Success message\n success(message: string): void {\n if (this.options.json) return;\n console.log(pc.green('✓'), message);\n }\n\n // Error message\n error(message: string, details?: string): void {\n if (this.options.json) {\n this.json({ error: message, details });\n return;\n }\n console.error(pc.red('✗'), message);\n if (details && this.options.verbose) {\n console.error(pc.dim(details));\n }\n }\n\n // Warning message\n warning(message: string): void {\n if (this.options.json) return;\n console.log(pc.yellow('⚠'), message);\n }\n\n // Info message\n info(message: string): void {\n if (this.options.json) return;\n console.log(pc.blue('ℹ'), message);\n }\n\n // Debug message (only in verbose mode)\n debug(message: string): void {\n if (this.options.json) return;\n if (this.options.verbose) {\n console.log(pc.dim(`[debug] ${message}`));\n }\n }\n\n // Plain text output\n text(message: string): void {\n if (this.options.json) return;\n console.log(message);\n }\n\n // Heading\n heading(text: string): void {\n if (this.options.json) return;\n console.log();\n console.log(pc.bold(pc.underline(text)));\n console.log();\n }\n\n // Subheading\n subheading(text: string): void {\n if (this.options.json) return;\n console.log(pc.bold(text));\n }\n\n // Key-value pair\n keyValue(key: string, value: string | number | boolean | undefined): void {\n if (this.options.json) return;\n console.log(`${pc.dim(key + ':')} ${value ?? pc.dim('(not set)')}`);\n }\n\n // List item\n listItem(text: string, indent = 0): void {\n if (this.options.json) return;\n const prefix = ' '.repeat(indent) + '•';\n console.log(`${prefix} ${text}`);\n }\n\n // Spinner\n spinner(message: string): Ora {\n return ora({\n text: message,\n isSilent: this.options.json,\n }).start();\n }\n\n // Blank line\n newLine(): void {\n if (this.options.json) return;\n console.log();\n }\n\n // Horizontal rule\n hr(): void {\n if (this.options.json) return;\n console.log(pc.dim('─'.repeat(50)));\n }\n\n // Alias for hr\n divider(): void {\n this.hr();\n }\n\n // Code block\n code(text: string, language?: string): void {\n if (this.options.json) {\n this.json({ code: text, language });\n return;\n }\n console.log(pc.dim('```' + (language ?? '')));\n console.log(text);\n console.log(pc.dim('```'));\n }\n\n // Highlight text\n highlight(text: string): string {\n return pc.cyan(text);\n }\n\n // Dim text\n dim(text: string): string {\n return pc.dim(text);\n }\n\n // Bold text\n bold(text: string): string {\n return pc.bold(text);\n }\n\n // Link (just returns text in terminal)\n link(text: string, url: string): string {\n // OSC 8 hyperlink support for modern terminals\n return `\\x1b]8;;${url}\\x07${pc.underline(pc.blue(text))}\\x1b]8;;\\x07`;\n }\n}\n\n// Convenience function to create formatter from command flags\nexport function createOutput(flags: { json?: boolean; verbose?: boolean }): OutputFormatter {\n return new OutputFormatter({\n json: flags.json,\n verbose: flags.verbose,\n });\n}\n","import { Args, Command, Flags } from '@oclif/core';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as readline from 'node:readline';\nimport { createOutput } from '../../lib/output.js';\n\nconst CATEGORIES = [\n 'research',\n 'web',\n 'data',\n 'documentation',\n 'engineering',\n 'security',\n 'statistics',\n 'ops',\n 'agent',\n 'sandbox',\n 'utilities',\n 'html',\n 'compliance',\n];\n\nexport default class ToolInit extends Command {\n static description = 'Initialize a new TPMJS tool package';\n\n static examples = [\n '<%= config.bin %> <%= command.id %>',\n '<%= config.bin %> <%= command.id %> my-tool',\n '<%= config.bin %> <%= command.id %> --template minimal',\n ];\n\n static flags = {\n template: Flags.string({\n char: 't',\n description: 'Template to use',\n options: ['minimal', 'rich'],\n default: 'minimal',\n }),\n category: Flags.string({\n char: 'c',\n description: 'Tool category',\n options: CATEGORIES,\n }),\n force: Flags.boolean({\n char: 'f',\n description: 'Overwrite existing files',\n default: false,\n }),\n yes: Flags.boolean({\n char: 'y',\n description: 'Skip prompts and use defaults',\n default: false,\n }),\n verbose: Flags.boolean({\n char: 'v',\n description: 'Show verbose output',\n default: false,\n }),\n };\n\n static args = {\n name: Args.string({\n description: 'Tool name (creates directory if not exists)',\n required: false,\n }),\n };\n\n private rl?: readline.Interface;\n\n async run(): Promise<void> {\n const { args, flags } = await this.parse(ToolInit);\n const output = createOutput(flags);\n\n this.rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n try {\n // Gather configuration\n const config = await this.gatherConfig(args.name as string | undefined, flags, output);\n\n // Determine target directory\n const targetDir = config.name ? path.resolve(config.name) : process.cwd();\n\n // Check if files exist\n const packageJsonPath = path.join(targetDir, 'package.json');\n if (fs.existsSync(packageJsonPath) && !flags.force) {\n output.error('package.json already exists. Use --force to overwrite.');\n return;\n }\n\n // Create directory if needed\n if (!fs.existsSync(targetDir)) {\n fs.mkdirSync(targetDir, { recursive: true });\n }\n\n // Generate files\n await this.generateFiles(targetDir, config, flags.template, output);\n\n output.success('TPMJS tool initialized successfully!');\n output.text('');\n output.text('Next steps:');\n output.listItem('Install dependencies: npm install');\n output.listItem('Implement your tool in src/index.ts');\n output.listItem('Validate: tpm tool validate');\n output.listItem('Build: npm run build');\n output.listItem('Publish: npm publish');\n } finally {\n this.rl?.close();\n }\n }\n\n private async gatherConfig(\n name: string | undefined,\n flags: { category?: string; yes: boolean },\n output: ReturnType<typeof createOutput>\n ): Promise<{\n name: string;\n description: string;\n category: string;\n author: string;\n }> {\n if (flags.yes) {\n return {\n name: name || 'my-tpmjs-tool',\n description: 'A TPMJS tool',\n category: flags.category || 'utilities',\n author: process.env.USER || 'unknown',\n };\n }\n\n output.heading('TPMJS Tool Initialization');\n output.text('');\n\n const toolName = name || (await this.prompt('Tool name: ')) || 'my-tpmjs-tool';\n const description = (await this.prompt('Description: ')) || 'A TPMJS tool';\n\n let category = flags.category;\n if (!category) {\n output.text('');\n output.text('Available categories:');\n CATEGORIES.forEach((cat, i) => {\n output.text(` ${i + 1}. ${cat}`);\n });\n const catIndex = await this.prompt('Category (number or name): ');\n const index = parseInt(catIndex, 10);\n if (index > 0 && index <= CATEGORIES.length) {\n category = CATEGORIES[index - 1];\n } else if (CATEGORIES.includes(catIndex)) {\n category = catIndex;\n } else {\n category = 'utilities';\n }\n }\n\n const author = (await this.prompt(`Author (${process.env.USER}): `)) || process.env.USER || 'unknown';\n\n return { name: toolName, description, category: category ?? 'utilities', author };\n }\n\n private prompt(question: string): Promise<string> {\n return new Promise((resolve) => {\n this.rl?.question(question, (answer) => {\n resolve(answer.trim());\n });\n });\n }\n\n private async generateFiles(\n targetDir: string,\n config: { name: string; description: string; category: string; author: string },\n template: string,\n output: ReturnType<typeof createOutput>\n ): Promise<void> {\n const spinner = output.spinner('Generating files...');\n\n // package.json\n const packageJson = {\n name: config.name.startsWith('@') ? config.name : config.name,\n version: '0.1.0',\n description: config.description,\n type: 'module',\n main: './dist/index.js',\n types: './dist/index.d.ts',\n exports: {\n '.': {\n import: './dist/index.js',\n types: './dist/index.d.ts',\n },\n },\n files: ['dist'],\n keywords: ['tpmjs', 'mcp', 'ai-tools', config.category],\n author: config.author,\n license: 'MIT',\n scripts: {\n build: 'tsup',\n dev: 'tsup --watch',\n 'type-check': 'tsc --noEmit',\n prepublishOnly: 'npm run build',\n },\n dependencies: {\n ai: '^4.0.0',\n },\n devDependencies: {\n '@types/node': '^20.0.0',\n tsup: '^8.0.0',\n typescript: '^5.0.0',\n },\n tpmjs: {\n name: config.name.replace(/@[^/]+\\//, '').replace(/-/g, ' '),\n description: config.description,\n category: config.category,\n tools: [\n {\n name: 'myTool',\n description: 'Description of what this tool does',\n },\n ],\n ...(template === 'rich'\n ? {\n documentation: 'https://github.com/yourname/' + config.name + '#readme',\n examples: [\n {\n title: 'Basic usage',\n code: 'const result = await myTool.execute({ input: \"hello\" });',\n },\n ],\n }\n : {}),\n },\n };\n\n fs.writeFileSync(\n path.join(targetDir, 'package.json'),\n JSON.stringify(packageJson, null, 2)\n );\n\n // tsconfig.json\n const tsconfig = {\n compilerOptions: {\n target: 'ES2022',\n module: 'ESNext',\n moduleResolution: 'bundler',\n declaration: true,\n declarationMap: true,\n strict: true,\n esModuleInterop: true,\n skipLibCheck: true,\n outDir: './dist',\n rootDir: './src',\n },\n include: ['src'],\n exclude: ['node_modules', 'dist'],\n };\n\n fs.writeFileSync(\n path.join(targetDir, 'tsconfig.json'),\n JSON.stringify(tsconfig, null, 2)\n );\n\n // tsup.config.ts\n const tsupConfig = `import { defineConfig } from 'tsup';\n\nexport default defineConfig({\n entry: ['src/index.ts'],\n format: ['esm'],\n dts: true,\n clean: true,\n sourcemap: true,\n});\n`;\n\n fs.writeFileSync(path.join(targetDir, 'tsup.config.ts'), tsupConfig);\n\n // Create src directory\n const srcDir = path.join(targetDir, 'src');\n if (!fs.existsSync(srcDir)) {\n fs.mkdirSync(srcDir, { recursive: true });\n }\n\n // src/index.ts\n const indexTs = `import { jsonSchema, tool } from 'ai';\n\n/**\n * ${config.description}\n */\nexport const myTool = tool({\n description: '${config.description}',\n parameters: jsonSchema<{ input: string }>({\n type: 'object',\n properties: {\n input: {\n type: 'string',\n description: 'The input to process',\n },\n },\n required: ['input'],\n }),\n async execute({ input }) {\n // TODO: Implement your tool logic here\n return {\n result: \\`Processed: \\${input}\\`,\n };\n },\n});\n\nexport default myTool;\n`;\n\n fs.writeFileSync(path.join(srcDir, 'index.ts'), indexTs);\n\n // block.ts (required for TPMJS validation)\n const blockTs = `import { myTool } from './src/index.js';\n\nexport const block = {\n name: '${config.name}',\n tools: { myTool },\n};\n`;\n\n fs.writeFileSync(path.join(targetDir, 'block.ts'), blockTs);\n\n // README.md\n const readme = `# ${config.name}\n\n${config.description}\n\n## Installation\n\n\\`\\`\\`bash\nnpm install ${config.name}\n\\`\\`\\`\n\n## Usage\n\n\\`\\`\\`typescript\nimport { myTool } from '${config.name}';\n\nconst result = await myTool.execute({ input: 'hello' });\nconsole.log(result);\n\\`\\`\\`\n\n## Category\n\n${config.category}\n\n## License\n\nMIT\n`;\n\n fs.writeFileSync(path.join(targetDir, 'README.md'), readme);\n\n // .gitignore\n const gitignore = `node_modules/\ndist/\n*.log\n.DS_Store\n`;\n\n fs.writeFileSync(path.join(targetDir, '.gitignore'), gitignore);\n\n spinner.stop();\n\n output.text('');\n output.text('Files created:');\n output.listItem('package.json');\n output.listItem('tsconfig.json');\n output.listItem('tsup.config.ts');\n output.listItem('src/index.ts');\n output.listItem('block.ts');\n output.listItem('README.md');\n output.listItem('.gitignore');\n }\n}\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as _oclif_core_interfaces from '@oclif/core/interfaces';
|
|
2
|
+
import { Command } from '@oclif/core';
|
|
3
|
+
|
|
4
|
+
declare class ToolSearch extends Command {
|
|
5
|
+
static description: string;
|
|
6
|
+
static examples: string[];
|
|
7
|
+
static flags: {
|
|
8
|
+
category: _oclif_core_interfaces.OptionFlag<string | undefined, _oclif_core_interfaces.CustomOptions>;
|
|
9
|
+
limit: _oclif_core_interfaces.OptionFlag<number, _oclif_core_interfaces.CustomOptions>;
|
|
10
|
+
offset: _oclif_core_interfaces.OptionFlag<number, _oclif_core_interfaces.CustomOptions>;
|
|
11
|
+
json: _oclif_core_interfaces.BooleanFlag<boolean>;
|
|
12
|
+
verbose: _oclif_core_interfaces.BooleanFlag<boolean>;
|
|
13
|
+
};
|
|
14
|
+
static args: {
|
|
15
|
+
query: _oclif_core_interfaces.Arg<string | undefined, Record<string, unknown>>;
|
|
16
|
+
};
|
|
17
|
+
run(): Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export { ToolSearch as default };
|