@chilin-dev/agent-toolkit-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.
@@ -0,0 +1,2 @@
1
+
2
+ export { }
package/dist/index.js ADDED
@@ -0,0 +1,102 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/program.ts
4
+ import { Command } from "commander";
5
+
6
+ // src/commands/skills.ts
7
+ import fs from "fs";
8
+ import path from "path";
9
+ import {
10
+ getSkillFolders,
11
+ setSkillFolders
12
+ } from "@chilin-dev/agent-toolkit-config";
13
+ function registerSkillsCommand(program) {
14
+ const skills = program.command("skills").description("Manage registered skill folders.");
15
+ skills.command("register <path>").description("Register a skill folder (path is resolved to absolute).").action((folderPath) => {
16
+ const absolute = path.resolve(folderPath);
17
+ if (!fs.existsSync(absolute)) {
18
+ throw new Error(`Path does not exist: ${absolute}`);
19
+ }
20
+ const current = getSkillFolders();
21
+ if (current.includes(absolute)) {
22
+ console.log(`Already registered: ${absolute}`);
23
+ return;
24
+ }
25
+ setSkillFolders([...current, absolute]);
26
+ console.log(`Registered skill folder: ${absolute}`);
27
+ });
28
+ skills.command("unregister <path>").description("Unregister a previously registered skill folder.").action((folderPath) => {
29
+ const absolute = path.resolve(folderPath);
30
+ const current = getSkillFolders();
31
+ const filtered = current.filter((entry) => entry !== absolute);
32
+ setSkillFolders(filtered);
33
+ console.log(`Unregistered skill folder: ${absolute}`);
34
+ });
35
+ skills.command("list").description("List all registered skill folders.").action(() => {
36
+ const folders = getSkillFolders();
37
+ if (folders.length === 0) {
38
+ console.log("No skill folders registered.");
39
+ return;
40
+ }
41
+ for (const folder of folders) {
42
+ console.log(folder);
43
+ }
44
+ });
45
+ }
46
+
47
+ // src/commands/mcp.ts
48
+ import {
49
+ getMcpServers,
50
+ setMcpServers
51
+ } from "@chilin-dev/agent-toolkit-config";
52
+ function registerMcpCommand(program) {
53
+ const mcp = program.command("mcp").description("Manage registered MCP server entries.");
54
+ mcp.command("add <name> <command>").description("Register an MCP server entry.").option("--args <args...>", "Arguments passed to the MCP server command.").action(
55
+ (name, command, options) => {
56
+ const current = getMcpServers();
57
+ if (current.some((entry2) => entry2.name === name)) {
58
+ throw new Error(`MCP server already registered: ${name}`);
59
+ }
60
+ const entry = { name, command };
61
+ if (options.args && options.args.length > 0) {
62
+ entry.args = options.args;
63
+ }
64
+ setMcpServers([...current, entry]);
65
+ console.log(`Registered MCP server: ${name}`);
66
+ }
67
+ );
68
+ mcp.command("remove <name>").description("Remove a registered MCP server entry by name.").action((name) => {
69
+ const current = getMcpServers();
70
+ const filtered = current.filter((entry) => entry.name !== name);
71
+ if (filtered.length === current.length) {
72
+ console.log("Not found.");
73
+ return;
74
+ }
75
+ setMcpServers(filtered);
76
+ console.log(`Removed MCP server: ${name}`);
77
+ });
78
+ mcp.command("list").description("List all registered MCP server entries.").action(() => {
79
+ const servers = getMcpServers();
80
+ if (servers.length === 0) {
81
+ console.log("No MCP servers registered.");
82
+ return;
83
+ }
84
+ for (const server of servers) {
85
+ const argsPart = server.args && server.args.length > 0 ? ` ${server.args.join(" ")}` : "";
86
+ console.log(`${server.name}: ${server.command}${argsPart}`);
87
+ }
88
+ });
89
+ }
90
+
91
+ // src/program.ts
92
+ function buildProgram() {
93
+ const program = new Command();
94
+ program.name("agent-toolkit").description("Manage skill folders and MCP server registrations for @chilin-dev tooling.").version("0.1.0");
95
+ registerSkillsCommand(program);
96
+ registerMcpCommand(program);
97
+ return program;
98
+ }
99
+
100
+ // src/index.ts
101
+ await buildProgram().parseAsync(process.argv);
102
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/program.ts","../src/commands/skills.ts","../src/commands/mcp.ts","../src/index.ts"],"sourcesContent":["import { Command } from 'commander';\r\nimport { registerSkillsCommand } from './commands/skills.js';\r\nimport { registerMcpCommand } from './commands/mcp.js';\r\n\r\n/**\r\n * Build the root `agent-toolkit` CLI program.\r\n *\r\n * Extensibility contract: each command domain lives in its own module under\r\n * `src/commands/` and exports a `registerXxxCommand(program: Command): void`\r\n * function that attaches its subcommand tree to the passed-in root program.\r\n * To add a new domain, create a new file that exports such a function and\r\n * call it from inside `buildProgram` — no other code in this file or in\r\n * `index.ts` needs to change.\r\n *\r\n * @returns A configured commander `Command` instance ready for `parseAsync`.\r\n */\r\nexport function buildProgram(): Command {\r\n const program = new Command();\r\n\r\n program\r\n .name('agent-toolkit')\r\n .description('Manage skill folders and MCP server registrations for @chilin-dev tooling.')\r\n .version('0.1.0');\r\n\r\n registerSkillsCommand(program);\r\n registerMcpCommand(program);\r\n\r\n return program;\r\n}\r\n","import fs from 'node:fs';\r\nimport path from 'node:path';\r\nimport type { Command } from 'commander';\r\nimport {\r\n getSkillFolders,\r\n setSkillFolders,\r\n} from '@chilin-dev/agent-toolkit-config';\r\n\r\n/**\r\n * Register the `skills` command domain on the root program.\r\n *\r\n * Subcommands:\r\n * - `skills register <path>` — add an absolute-resolved folder to the\r\n * registered skill folders list (no-op if already present).\r\n * - `skills unregister <path>` — remove an absolute-resolved folder from\r\n * the registered skill folders list.\r\n * - `skills list` — print the currently registered folders.\r\n *\r\n * Persistence is delegated to `@chilin-dev/agent-toolkit-config` so the\r\n * MCP server reads the same store.\r\n */\r\nexport function registerSkillsCommand(program: Command): void {\r\n const skills = program\r\n .command('skills')\r\n .description('Manage registered skill folders.');\r\n\r\n skills\r\n .command('register <path>')\r\n .description('Register a skill folder (path is resolved to absolute).')\r\n .action((folderPath: string) => {\r\n const absolute = path.resolve(folderPath);\r\n if (!fs.existsSync(absolute)) {\r\n throw new Error(`Path does not exist: ${absolute}`);\r\n }\r\n const current = getSkillFolders();\r\n if (current.includes(absolute)) {\r\n console.log(`Already registered: ${absolute}`);\r\n return;\r\n }\r\n setSkillFolders([...current, absolute]);\r\n console.log(`Registered skill folder: ${absolute}`);\r\n });\r\n\r\n skills\r\n .command('unregister <path>')\r\n .description('Unregister a previously registered skill folder.')\r\n .action((folderPath: string) => {\r\n const absolute = path.resolve(folderPath);\r\n const current = getSkillFolders();\r\n const filtered = current.filter((entry) => entry !== absolute);\r\n setSkillFolders(filtered);\r\n console.log(`Unregistered skill folder: ${absolute}`);\r\n });\r\n\r\n skills\r\n .command('list')\r\n .description('List all registered skill folders.')\r\n .action(() => {\r\n const folders = getSkillFolders();\r\n if (folders.length === 0) {\r\n console.log('No skill folders registered.');\r\n return;\r\n }\r\n for (const folder of folders) {\r\n console.log(folder);\r\n }\r\n });\r\n}\r\n","import type { Command } from 'commander';\r\nimport {\r\n getMcpServers,\r\n setMcpServers,\r\n type McpServer,\r\n} from '@chilin-dev/agent-toolkit-config';\r\n\r\n/**\r\n * Register the `mcp` command domain on the root program.\r\n *\r\n * Subcommands:\r\n * - `mcp add <name> <command> [--args <args...>]` — register an MCP\r\n * server entry. Fails if `name` is already taken.\r\n * - `mcp remove <name>` — remove an entry by\r\n * name (prints `Not found.` if absent).\r\n * - `mcp list` — print each entry as\r\n * `<name>: <command> [args...]`.\r\n *\r\n * Persistence is delegated to `@chilin-dev/agent-toolkit-config` so the\r\n * MCP server reads the same store.\r\n */\r\nexport function registerMcpCommand(program: Command): void {\r\n // Subcommands: 'add', 'remove', 'list'.\r\n const mcp = program\r\n .command('mcp')\r\n .description('Manage registered MCP server entries.');\r\n\r\n mcp\r\n .command('add <name> <command>')\r\n .description('Register an MCP server entry.')\r\n .option('--args <args...>', 'Arguments passed to the MCP server command.')\r\n .action(\r\n (\r\n name: string,\r\n command: string,\r\n options: { args?: string[] },\r\n ) => {\r\n const current = getMcpServers();\r\n if (current.some((entry) => entry.name === name)) {\r\n throw new Error(`MCP server already registered: ${name}`);\r\n }\r\n const entry: McpServer = { name, command };\r\n if (options.args && options.args.length > 0) {\r\n entry.args = options.args;\r\n }\r\n setMcpServers([...current, entry]);\r\n console.log(`Registered MCP server: ${name}`);\r\n },\r\n );\r\n\r\n mcp\r\n .command('remove <name>')\r\n .description('Remove a registered MCP server entry by name.')\r\n .action((name: string) => {\r\n const current = getMcpServers();\r\n const filtered = current.filter((entry) => entry.name !== name);\r\n if (filtered.length === current.length) {\r\n console.log('Not found.');\r\n return;\r\n }\r\n setMcpServers(filtered);\r\n console.log(`Removed MCP server: ${name}`);\r\n });\r\n\r\n mcp\r\n .command('list')\r\n .description('List all registered MCP server entries.')\r\n .action(() => {\r\n const servers = getMcpServers();\r\n if (servers.length === 0) {\r\n console.log('No MCP servers registered.');\r\n return;\r\n }\r\n for (const server of servers) {\r\n const argsPart =\r\n server.args && server.args.length > 0 ? ` ${server.args.join(' ')}` : '';\r\n console.log(`${server.name}: ${server.command}${argsPart}`);\r\n }\r\n });\r\n}\r\n","import { buildProgram } from './program.js';\r\n\r\nawait buildProgram().parseAsync(process.argv);\r\n"],"mappings":"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","names":["entry"]}
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@chilin-dev/agent-toolkit-cli",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "private": false,
6
+ "bin": {
7
+ "agent-toolkit": "./dist/index.js"
8
+ },
9
+ "main": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "import": "./dist/index.js",
14
+ "types": "./dist/index.d.ts"
15
+ }
16
+ },
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "publishConfig": {
21
+ "access": "public",
22
+ "provenance": true
23
+ },
24
+ "dependencies": {
25
+ "commander": "^15.0.0",
26
+ "@chilin-dev/agent-toolkit-config": "0.1.0"
27
+ },
28
+ "devDependencies": {
29
+ "@types/node": "^22"
30
+ },
31
+ "scripts": {
32
+ "build": "tsup",
33
+ "lint": "eslint src",
34
+ "lint:fix": "eslint src --fix",
35
+ "test": "vitest run"
36
+ }
37
+ }