@opentabs-dev/cli 0.0.1
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/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +26 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/build.d.ts +10 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +285 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/config.d.ts +7 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +157 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/dev.d.ts +10 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +128 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/doctor.d.ts +7 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +212 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/index.d.ts +10 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +10 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/logs.d.ts +10 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +103 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/plugin.d.ts +6 -0
- package/dist/commands/plugin.d.ts.map +1 -0
- package/dist/commands/plugin.js +199 -0
- package/dist/commands/plugin.js.map +1 -0
- package/dist/commands/reload.d.ts +7 -0
- package/dist/commands/reload.d.ts.map +1 -0
- package/dist/commands/reload.js +88 -0
- package/dist/commands/reload.js.map +1 -0
- package/dist/commands/setup.d.ts +6 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +70 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/status.d.ts +7 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +108 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/config.d.ts +11 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +37 -0
- package/dist/config.js.map +1 -0
- package/dist/parse-port.d.ts +15 -0
- package/dist/parse-port.d.ts.map +1 -0
- package/dist/parse-port.js +32 -0
- package/dist/parse-port.js.map +1 -0
- package/dist/scaffold.d.ts +21 -0
- package/dist/scaffold.d.ts.map +1 -0
- package/dist/scaffold.js +273 -0
- package/dist/scaffold.js.map +1 -0
- package/package.json +33 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared port parser and resolver for Commander options.
|
|
3
|
+
*/
|
|
4
|
+
import { InvalidArgumentError } from 'commander';
|
|
5
|
+
const DEFAULT_PORT = 9515;
|
|
6
|
+
const parsePort = (value) => {
|
|
7
|
+
const port = Number(value);
|
|
8
|
+
if (!Number.isInteger(port) || port < 1 || port > 65535) {
|
|
9
|
+
throw new InvalidArgumentError('Must be an integer between 1 and 65535.');
|
|
10
|
+
}
|
|
11
|
+
return port;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Resolves the MCP server port from (in priority order):
|
|
15
|
+
* 1. The --port flag (passed via Commander options)
|
|
16
|
+
* 2. The OPENTABS_PORT environment variable
|
|
17
|
+
* 3. The default port (9515)
|
|
18
|
+
*/
|
|
19
|
+
const resolvePort = (options) => {
|
|
20
|
+
if (options.port !== undefined)
|
|
21
|
+
return options.port;
|
|
22
|
+
const envPort = Bun.env.OPENTABS_PORT;
|
|
23
|
+
if (envPort !== undefined) {
|
|
24
|
+
const parsed = Number(envPort);
|
|
25
|
+
if (Number.isInteger(parsed) && parsed >= 1 && parsed <= 65535) {
|
|
26
|
+
return parsed;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return DEFAULT_PORT;
|
|
30
|
+
};
|
|
31
|
+
export { parsePort, resolvePort };
|
|
32
|
+
//# sourceMappingURL=parse-port.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-port.js","sourceRoot":"","sources":["../src/parse-port.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,YAAY,GAAG,IAAI,CAAC;AAE1B,MAAM,SAAS,GAAG,CAAC,KAAa,EAAU,EAAE;IAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QACxD,MAAM,IAAI,oBAAoB,CAAC,yCAAyC,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,WAAW,GAAG,CAAC,OAA0B,EAAU,EAAE;IACzD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,IAAI,CAAC;IAEpD,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC;IACtC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;YAC/D,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared scaffolding logic for creating new OpenTabs plugin projects.
|
|
3
|
+
* Used by both `opentabs plugin create` and `create-opentabs-plugin`.
|
|
4
|
+
*/
|
|
5
|
+
declare class ScaffoldError extends Error {
|
|
6
|
+
constructor(message: string);
|
|
7
|
+
}
|
|
8
|
+
interface ScaffoldArgs {
|
|
9
|
+
name: string;
|
|
10
|
+
domain: string;
|
|
11
|
+
display?: string;
|
|
12
|
+
description?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Scaffold a new OpenTabs plugin project.
|
|
16
|
+
* Returns the absolute path to the created project directory.
|
|
17
|
+
*/
|
|
18
|
+
declare const scaffoldPlugin: (args: ScaffoldArgs) => Promise<string>;
|
|
19
|
+
export { scaffoldPlugin, ScaffoldError };
|
|
20
|
+
export type { ScaffoldArgs };
|
|
21
|
+
//# sourceMappingURL=scaffold.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,cAAM,aAAc,SAAQ,KAAK;gBACnB,OAAO,EAAE,MAAM;CAI5B;AAID,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAgPD;;;GAGG;AACH,QAAA,MAAM,cAAc,GAAU,MAAM,YAAY,KAAG,OAAO,CAAC,MAAM,CA8DhE,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC;AACzC,YAAY,EAAE,YAAY,EAAE,CAAC"}
|
package/dist/scaffold.js
ADDED
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared scaffolding logic for creating new OpenTabs plugin projects.
|
|
3
|
+
* Used by both `opentabs plugin create` and `create-opentabs-plugin`.
|
|
4
|
+
*/
|
|
5
|
+
import { getConfigPath, readConfig } from './config.js';
|
|
6
|
+
import { validatePluginName, validateUrlPattern } from '@opentabs-dev/plugin-sdk';
|
|
7
|
+
import pc from 'picocolors';
|
|
8
|
+
import { existsSync, mkdirSync, readdirSync } from 'node:fs';
|
|
9
|
+
import { resolve, join, dirname, relative } from 'node:path';
|
|
10
|
+
// --- Errors ---
|
|
11
|
+
class ScaffoldError extends Error {
|
|
12
|
+
constructor(message) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.name = 'ScaffoldError';
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
// --- Template generation ---
|
|
18
|
+
/** Resolve the version string for a monorepo package: file: link in monorepo, npm version otherwise */
|
|
19
|
+
const detectPackageVersion = async (projectDir, monorepoRelativePath, packageSpecifier) => {
|
|
20
|
+
const monorepoPath = resolve(projectDir, monorepoRelativePath);
|
|
21
|
+
if (existsSync(join(monorepoPath, 'package.json'))) {
|
|
22
|
+
return `file:${monorepoRelativePath}`;
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
const entryUrl = import.meta.resolve(packageSpecifier);
|
|
26
|
+
const entryDir = dirname(new URL(entryUrl).pathname);
|
|
27
|
+
const pkg = await Bun.file(join(entryDir, '..', 'package.json')).json();
|
|
28
|
+
if (pkg !== null && typeof pkg === 'object' && 'version' in pkg && typeof pkg.version === 'string') {
|
|
29
|
+
return `^${pkg.version}`;
|
|
30
|
+
}
|
|
31
|
+
return '^0.0.1';
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return '^0.0.1';
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
const generatePackageJson = async (args, projectDir) => {
|
|
38
|
+
const [sdkVersion, cliVersion] = await Promise.all([
|
|
39
|
+
detectPackageVersion(projectDir, '../../platform/plugin-sdk', '@opentabs-dev/plugin-sdk'),
|
|
40
|
+
detectPackageVersion(projectDir, '../../platform/cli', '@opentabs-dev/cli'),
|
|
41
|
+
]);
|
|
42
|
+
const pkg = {
|
|
43
|
+
name: `opentabs-plugin-${args.name}`,
|
|
44
|
+
version: '0.0.1',
|
|
45
|
+
type: 'module',
|
|
46
|
+
keywords: ['opentabs-plugin'],
|
|
47
|
+
exports: {
|
|
48
|
+
'.': {
|
|
49
|
+
types: './dist/index.d.ts',
|
|
50
|
+
import: './dist/index.js',
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
types: './dist/index.d.ts',
|
|
54
|
+
files: ['dist', 'opentabs-plugin.json'],
|
|
55
|
+
scripts: {
|
|
56
|
+
build: 'tsc && opentabs build',
|
|
57
|
+
dev: 'bun run build --watch',
|
|
58
|
+
},
|
|
59
|
+
peerDependencies: {
|
|
60
|
+
zod: '^3.0.0',
|
|
61
|
+
},
|
|
62
|
+
dependencies: {
|
|
63
|
+
'@opentabs-dev/plugin-sdk': sdkVersion,
|
|
64
|
+
},
|
|
65
|
+
devDependencies: {
|
|
66
|
+
'@opentabs-dev/cli': cliVersion,
|
|
67
|
+
zod: '^3.0.0',
|
|
68
|
+
typescript: '^5.9.3',
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
return JSON.stringify(pkg, null, 2) + '\n';
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Find the zod .d.ts path relative to a plugin directory.
|
|
75
|
+
* Scans the bun module cache at the monorepo root for a zod@3.x entry.
|
|
76
|
+
*/
|
|
77
|
+
const resolveZodDtsRelativePath = (monorepoRoot, pluginDir) => {
|
|
78
|
+
const bunCacheDir = join(monorepoRoot, 'node_modules', '.bun');
|
|
79
|
+
if (!existsSync(bunCacheDir))
|
|
80
|
+
return undefined;
|
|
81
|
+
const entries = readdirSync(bunCacheDir);
|
|
82
|
+
const zodEntry = entries.find(e => /^zod@3\./.test(e));
|
|
83
|
+
if (!zodEntry)
|
|
84
|
+
return undefined;
|
|
85
|
+
const zodDtsAbsolute = join(bunCacheDir, zodEntry, 'node_modules', 'zod', 'index.d.ts');
|
|
86
|
+
if (!existsSync(zodDtsAbsolute))
|
|
87
|
+
return undefined;
|
|
88
|
+
return relative(pluginDir, zodDtsAbsolute);
|
|
89
|
+
};
|
|
90
|
+
const generateTsconfig = (options) => {
|
|
91
|
+
const compilerOptions = {
|
|
92
|
+
target: 'ES2022',
|
|
93
|
+
module: 'ES2022',
|
|
94
|
+
moduleResolution: 'bundler',
|
|
95
|
+
declaration: true,
|
|
96
|
+
declarationMap: true,
|
|
97
|
+
sourceMap: true,
|
|
98
|
+
outDir: 'dist',
|
|
99
|
+
rootDir: 'src',
|
|
100
|
+
strict: true,
|
|
101
|
+
noUncheckedIndexedAccess: true,
|
|
102
|
+
noFallthroughCasesInSwitch: true,
|
|
103
|
+
noImplicitReturns: true,
|
|
104
|
+
noImplicitOverride: true,
|
|
105
|
+
forceConsistentCasingInFileNames: true,
|
|
106
|
+
esModuleInterop: true,
|
|
107
|
+
skipLibCheck: true,
|
|
108
|
+
composite: true,
|
|
109
|
+
};
|
|
110
|
+
if (options?.monorepoRoot && options.pluginDir) {
|
|
111
|
+
const sdkDts = relative(options.pluginDir, join(options.monorepoRoot, 'platform', 'plugin-sdk', 'dist', 'index.d.ts'));
|
|
112
|
+
const sharedDts = relative(options.pluginDir, join(options.monorepoRoot, 'platform', 'shared', 'dist', 'index.d.ts'));
|
|
113
|
+
const paths = {
|
|
114
|
+
'@opentabs-dev/plugin-sdk': [sdkDts],
|
|
115
|
+
'@opentabs-dev/shared': [sharedDts],
|
|
116
|
+
};
|
|
117
|
+
const zodDts = resolveZodDtsRelativePath(options.monorepoRoot, options.pluginDir);
|
|
118
|
+
if (zodDts) {
|
|
119
|
+
paths['zod'] = [zodDts];
|
|
120
|
+
}
|
|
121
|
+
compilerOptions['baseUrl'] = '.';
|
|
122
|
+
compilerOptions['paths'] = paths;
|
|
123
|
+
}
|
|
124
|
+
const config = {
|
|
125
|
+
compilerOptions,
|
|
126
|
+
include: ['src'],
|
|
127
|
+
};
|
|
128
|
+
return JSON.stringify(config, null, 2) + '\n';
|
|
129
|
+
};
|
|
130
|
+
/** Convert a hyphenated name to PascalCase: "my-plugin" → "MyPlugin" */
|
|
131
|
+
const toPascalCase = (name) => name
|
|
132
|
+
.split('-')
|
|
133
|
+
.map(part => part.charAt(0).toUpperCase() + part.slice(1))
|
|
134
|
+
.join('');
|
|
135
|
+
const generatePluginIndex = (args, urlPattern) => {
|
|
136
|
+
const displayName = args.display ?? args.name.charAt(0).toUpperCase() + args.name.slice(1);
|
|
137
|
+
const desc = args.description ?? `OpenTabs plugin for ${displayName}`;
|
|
138
|
+
return `import { OpenTabsPlugin } from '@opentabs-dev/plugin-sdk';
|
|
139
|
+
import { exampleTool } from './tools/example.js';
|
|
140
|
+
import type { ToolDefinition } from '@opentabs-dev/plugin-sdk';
|
|
141
|
+
|
|
142
|
+
class ${toPascalCase(args.name)}Plugin extends OpenTabsPlugin {
|
|
143
|
+
readonly name = ${JSON.stringify(args.name)};
|
|
144
|
+
readonly version = '0.0.1';
|
|
145
|
+
readonly description = ${JSON.stringify(desc)};
|
|
146
|
+
override readonly displayName = ${JSON.stringify(displayName)};
|
|
147
|
+
readonly urlPatterns = [${JSON.stringify(urlPattern)}];
|
|
148
|
+
readonly tools: ToolDefinition[] = [exampleTool];
|
|
149
|
+
|
|
150
|
+
// Check if the user is authenticated on the target page.
|
|
151
|
+
// Example: look for a session cookie, a logged-in DOM element, or a
|
|
152
|
+
// global variable set by the application after login.
|
|
153
|
+
// return document.cookie.includes('session=')
|
|
154
|
+
// return document.querySelector('[data-user-id]') !== null
|
|
155
|
+
async isReady(): Promise<boolean> {
|
|
156
|
+
return true;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
export default new ${toPascalCase(args.name)}Plugin();
|
|
161
|
+
`;
|
|
162
|
+
};
|
|
163
|
+
const generateExampleTool = (args) => {
|
|
164
|
+
const displayName = args.display ?? args.name.charAt(0).toUpperCase() + args.name.slice(1);
|
|
165
|
+
const escaped = JSON.stringify(displayName);
|
|
166
|
+
return `import { z } from 'zod';
|
|
167
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
168
|
+
|
|
169
|
+
export const exampleTool = defineTool({
|
|
170
|
+
name: 'example',
|
|
171
|
+
description: 'An example tool for ' + ${escaped} + ' — replace with your own implementation',
|
|
172
|
+
input: z.object({
|
|
173
|
+
message: z.string().describe('A sample input message'),
|
|
174
|
+
}),
|
|
175
|
+
output: z.object({
|
|
176
|
+
result: z.string().describe('The result of the example operation'),
|
|
177
|
+
}),
|
|
178
|
+
handle: async (params) => {
|
|
179
|
+
return { result: 'Hello from ' + ${escaped} + ': ' + params.message };
|
|
180
|
+
},
|
|
181
|
+
});
|
|
182
|
+
`;
|
|
183
|
+
};
|
|
184
|
+
const GITIGNORE_CONTENT = `dist/
|
|
185
|
+
node_modules/
|
|
186
|
+
*.tsbuildinfo
|
|
187
|
+
`;
|
|
188
|
+
// --- Auto-registration ---
|
|
189
|
+
/**
|
|
190
|
+
* Add a plugin path to ~/.opentabs/config.json.
|
|
191
|
+
* Uses a relative path from the config directory for portability.
|
|
192
|
+
* Non-fatal: logs a warning on failure.
|
|
193
|
+
*/
|
|
194
|
+
const autoRegisterPlugin = async (projectDir) => {
|
|
195
|
+
const configPath = getConfigPath();
|
|
196
|
+
let config;
|
|
197
|
+
const existing = await readConfig(configPath);
|
|
198
|
+
if (existing) {
|
|
199
|
+
config = existing;
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
const configDir = dirname(configPath);
|
|
203
|
+
mkdirSync(configDir, { recursive: true });
|
|
204
|
+
config = { plugins: [], tools: {}, secret: crypto.randomUUID() };
|
|
205
|
+
}
|
|
206
|
+
if (!Array.isArray(config.plugins))
|
|
207
|
+
config.plugins = [];
|
|
208
|
+
const plugins = config.plugins;
|
|
209
|
+
const configDir = dirname(configPath);
|
|
210
|
+
const pluginPath = relative(configDir, projectDir);
|
|
211
|
+
if (plugins.includes(pluginPath))
|
|
212
|
+
return true;
|
|
213
|
+
plugins.push(pluginPath);
|
|
214
|
+
await Bun.write(configPath, JSON.stringify(config, null, 2) + '\n');
|
|
215
|
+
return true;
|
|
216
|
+
};
|
|
217
|
+
// --- Scaffolding ---
|
|
218
|
+
/**
|
|
219
|
+
* Scaffold a new OpenTabs plugin project.
|
|
220
|
+
* Returns the absolute path to the created project directory.
|
|
221
|
+
*/
|
|
222
|
+
const scaffoldPlugin = async (args) => {
|
|
223
|
+
const nameError = validatePluginName(args.name);
|
|
224
|
+
if (nameError) {
|
|
225
|
+
throw new ScaffoldError(nameError);
|
|
226
|
+
}
|
|
227
|
+
const urlPattern = args.domain.startsWith('.') ? `*://*${args.domain}/*` : `*://${args.domain}/*`;
|
|
228
|
+
const patternError = validateUrlPattern(urlPattern);
|
|
229
|
+
if (patternError) {
|
|
230
|
+
throw new ScaffoldError(patternError);
|
|
231
|
+
}
|
|
232
|
+
const projectDir = resolve(process.cwd(), args.name);
|
|
233
|
+
if (existsSync(projectDir)) {
|
|
234
|
+
throw new ScaffoldError(`Directory "${args.name}" already exists`);
|
|
235
|
+
}
|
|
236
|
+
console.log(`Creating ${pc.bold(`opentabs-plugin-${args.name}`)}...`);
|
|
237
|
+
mkdirSync(projectDir, { recursive: true });
|
|
238
|
+
mkdirSync(join(projectDir, 'src', 'tools'), { recursive: true });
|
|
239
|
+
await Bun.write(join(projectDir, 'package.json'), await generatePackageJson(args, projectDir));
|
|
240
|
+
console.log(` ${pc.dim('Created:')} ${pc.bold('package.json')}`);
|
|
241
|
+
const monorepoRoot = resolve(projectDir, '../../platform/plugin-sdk');
|
|
242
|
+
const isMonorepo = existsSync(join(monorepoRoot, 'package.json'));
|
|
243
|
+
const tsconfigOptions = isMonorepo
|
|
244
|
+
? { monorepoRoot: resolve(projectDir, '../..'), pluginDir: projectDir }
|
|
245
|
+
: undefined;
|
|
246
|
+
await Bun.write(join(projectDir, 'tsconfig.json'), generateTsconfig(tsconfigOptions));
|
|
247
|
+
console.log(` ${pc.dim('Created:')} ${pc.bold('tsconfig.json')}`);
|
|
248
|
+
await Bun.write(join(projectDir, '.gitignore'), GITIGNORE_CONTENT);
|
|
249
|
+
console.log(` ${pc.dim('Created:')} ${pc.bold('.gitignore')}`);
|
|
250
|
+
await Bun.write(join(projectDir, 'src', 'index.ts'), generatePluginIndex(args, urlPattern));
|
|
251
|
+
console.log(` ${pc.dim('Created:')} ${pc.bold('src/index.ts')}`);
|
|
252
|
+
await Bun.write(join(projectDir, 'src', 'tools', 'example.ts'), generateExampleTool(args));
|
|
253
|
+
console.log(` ${pc.dim('Created:')} ${pc.bold('src/tools/example.ts')}`);
|
|
254
|
+
console.log('');
|
|
255
|
+
console.log(pc.green(`Plugin scaffolded in ./${args.name}/`));
|
|
256
|
+
try {
|
|
257
|
+
await autoRegisterPlugin(projectDir);
|
|
258
|
+
console.log(pc.green('Registered in ~/.opentabs/config.json'));
|
|
259
|
+
}
|
|
260
|
+
catch (err) {
|
|
261
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
262
|
+
console.warn(pc.yellow(`Warning: Could not auto-register plugin: ${msg}`));
|
|
263
|
+
console.warn(` Run ${pc.cyan(`opentabs plugin add ./${args.name}`)} manually.`);
|
|
264
|
+
}
|
|
265
|
+
console.log('');
|
|
266
|
+
console.log('Next steps:');
|
|
267
|
+
console.log(` ${pc.cyan(`cd ${args.name}`)}`);
|
|
268
|
+
console.log(` ${pc.cyan('bun install')}`);
|
|
269
|
+
console.log(` ${pc.cyan('bun run build')}`);
|
|
270
|
+
return projectDir;
|
|
271
|
+
};
|
|
272
|
+
export { scaffoldPlugin, ScaffoldError };
|
|
273
|
+
//# sourceMappingURL=scaffold.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@opentabs-dev/cli",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"exports": {
|
|
6
|
+
"./scaffold": {
|
|
7
|
+
"types": "./dist/scaffold.d.ts",
|
|
8
|
+
"import": "./dist/scaffold.js"
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"bin": {
|
|
12
|
+
"opentabs": "./dist/cli.js"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"publishConfig": {
|
|
18
|
+
"access": "restricted"
|
|
19
|
+
},
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "tsc --build"
|
|
22
|
+
},
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@opentabs-dev/plugin-sdk": "^0.0.1",
|
|
25
|
+
"@opentabs-dev/shared": "^0.0.1",
|
|
26
|
+
"commander": "^14.0.3",
|
|
27
|
+
"picocolors": "^1.1.1",
|
|
28
|
+
"zod-to-json-schema": "^3.25.1"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"bun-types": "^1.3.9"
|
|
32
|
+
}
|
|
33
|
+
}
|