@hyperdoc/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,3 @@
1
+ import { Command } from "commander";
2
+ export declare const cleanArchivedCommand: Command;
3
+ //# sourceMappingURL=clean-archived.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean-archived.d.ts","sourceRoot":"","sources":["../../src/commands/clean-archived.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,oBAAoB,SA4C7B,CAAC"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.cleanArchivedCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const hyperdoc_config_1 = require("@maplab-oss/hyperdoc-config");
9
+ const fs_1 = __importDefault(require("fs"));
10
+ exports.cleanArchivedCommand = new commander_1.Command("clean-archived")
11
+ .description("Delete all archived agent chats from agents.json")
12
+ .option("--dry-run", "Show what would be deleted without modifying the file")
13
+ .action((opts) => {
14
+ try {
15
+ const agentsPath = (0, hyperdoc_config_1.getAgentsPath)();
16
+ if (!fs_1.default.existsSync(agentsPath)) {
17
+ console.log("No agents.json found at", agentsPath);
18
+ return;
19
+ }
20
+ const raw = fs_1.default.readFileSync(agentsPath, "utf-8");
21
+ const agents = JSON.parse(raw);
22
+ const archived = agents.filter((a) => a.archived);
23
+ const kept = agents.filter((a) => !a.archived);
24
+ if (archived.length === 0) {
25
+ console.log("No archived chats found.");
26
+ return;
27
+ }
28
+ console.log(`Found ${archived.length} archived chat(s):`);
29
+ for (const a of archived) {
30
+ console.log(` - ${a.id} (${a.name ?? "unnamed"})`);
31
+ }
32
+ if (opts.dryRun) {
33
+ console.log("\nDry run — no changes made.");
34
+ return;
35
+ }
36
+ fs_1.default.writeFileSync(agentsPath, JSON.stringify(kept, null, 2), "utf-8");
37
+ console.log(`\nDeleted ${archived.length} archived chat(s). ${kept.length} remaining.`);
38
+ }
39
+ catch (error) {
40
+ console.error("Error cleaning archived chats:", error);
41
+ process.exit(1);
42
+ }
43
+ });
44
+ //# sourceMappingURL=clean-archived.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean-archived.js","sourceRoot":"","sources":["../../src/commands/clean-archived.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AACpC,iEAA4D;AAC5D,4CAAoB;AAEP,QAAA,oBAAoB,GAAG,IAAI,mBAAO,CAAC,gBAAgB,CAAC;KAC9D,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,WAAW,EAAE,uDAAuD,CAAC;KAC5E,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;IACf,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAA,+BAAa,GAAE,CAAC;QAEnC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,UAAU,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAEjD,MAAM,MAAM,GACV,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAElB,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAE/C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,SAAS,QAAQ,CAAC,MAAM,oBAAoB,CAAC,CAAC;QAE1D,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,IAAI,SAAS,GAAG,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,YAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CACT,aAAa,QAAQ,CAAC,MAAM,sBAAsB,IAAI,CAAC,MAAM,aAAa,CAC3E,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const createInstanceCommand: Command;
3
+ //# sourceMappingURL=create-instance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-instance.d.ts","sourceRoot":"","sources":["../../src/commands/create-instance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,eAAO,MAAM,qBAAqB,SA+I9B,CAAC"}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createInstanceCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const hyperdoc_config_1 = require("@maplab-oss/hyperdoc-config");
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const child_process_1 = require("child_process");
12
+ const crypto_1 = require("crypto");
13
+ function generateRandomId() {
14
+ return (0, crypto_1.randomBytes)(2).toString('hex');
15
+ }
16
+ function generateUUID() {
17
+ return (0, crypto_1.randomBytes)(16).toString('hex').replace(/(.{8})(.{4})(.{4})(.{4})(.{12})/, '$1-$2-$3-$4-$5');
18
+ }
19
+ exports.createInstanceCommand = new commander_1.Command("create-instance")
20
+ .description("Create a new instance of a project using git worktrees")
21
+ .requiredOption("--home <path>", "Hyperdoc home directory")
22
+ .requiredOption("--project <id>", "Project ID to create an instance of")
23
+ .action(async (options) => {
24
+ try {
25
+ const { home, project: projectId } = options;
26
+ // Read config from the specified home directory
27
+ const configPath = path_1.default.join(home, "config.json");
28
+ let config;
29
+ if (!fs_1.default.existsSync(configPath)) {
30
+ console.error(`Config file not found: ${configPath}`);
31
+ process.exit(1);
32
+ }
33
+ try {
34
+ const rawConfig = fs_1.default.readFileSync(configPath, "utf-8");
35
+ config = JSON.parse(rawConfig);
36
+ }
37
+ catch (error) {
38
+ console.error(`Failed to read config: ${error}`);
39
+ process.exit(1);
40
+ }
41
+ // Check if codeDir is set
42
+ if (!config.codeDir) {
43
+ console.error("No code directory configured. Please set codeDir in your config.json");
44
+ process.exit(1);
45
+ }
46
+ // Read projects from the specified home directory
47
+ const projectsPath = path_1.default.join(home, "projects.json");
48
+ const projects = (0, hyperdoc_config_1.loadProjectsFromFile)(projectsPath);
49
+ // Find the project by ID
50
+ const project = projects.find(p => p.id === projectId);
51
+ if (!project) {
52
+ console.error(`Project not found: ${projectId}`);
53
+ process.exit(1);
54
+ }
55
+ // Create worktrees directory if it doesn't exist
56
+ const worktreesDir = path_1.default.join(config.codeDir, "worktrees");
57
+ if (!fs_1.default.existsSync(worktreesDir)) {
58
+ fs_1.default.mkdirSync(worktreesDir, { recursive: true });
59
+ }
60
+ // Generate random suffix for this instance
61
+ const randomSuffix = generateRandomId();
62
+ const instanceDirName = `${projectId}-${randomSuffix}`;
63
+ // Create worktrees for each rootDir that has a .git directory
64
+ const newRootDirs = [];
65
+ for (const rootDir of project.rootDirs) {
66
+ const gitDir = path_1.default.join(rootDir, ".git");
67
+ if (fs_1.default.existsSync(gitDir)) {
68
+ console.log(`Creating worktree for ${rootDir}...`);
69
+ // Create worktree path
70
+ const worktreePath = path_1.default.join(worktreesDir, `${instanceDirName}-${path_1.default.basename(rootDir)}`);
71
+ try {
72
+ // Create git worktree
73
+ (0, child_process_1.execSync)(`git worktree add "${worktreePath}"`, {
74
+ cwd: rootDir,
75
+ stdio: 'inherit'
76
+ });
77
+ newRootDirs.push(worktreePath);
78
+ console.log(`Created worktree: ${worktreePath}`);
79
+ }
80
+ catch (error) {
81
+ console.error(`Failed to create worktree for ${rootDir}: ${error}`);
82
+ // Clean up any partial worktrees that were created
83
+ for (const createdDir of newRootDirs) {
84
+ try {
85
+ const originalDir = project.rootDirs.find(dir => fs_1.default.existsSync(path_1.default.join(dir, ".git")));
86
+ if (originalDir) {
87
+ (0, child_process_1.execSync)(`git worktree remove "${createdDir}"`, {
88
+ cwd: originalDir,
89
+ stdio: 'inherit'
90
+ });
91
+ }
92
+ }
93
+ catch (cleanupError) {
94
+ console.error(`Failed to clean up ${createdDir}: ${cleanupError}`);
95
+ }
96
+ }
97
+ process.exit(1);
98
+ }
99
+ }
100
+ else {
101
+ // For directories without .git, just copy the path (they might be shared resources)
102
+ newRootDirs.push(rootDir);
103
+ }
104
+ }
105
+ if (newRootDirs.length === 0) {
106
+ console.error("No git repositories found in project root directories");
107
+ process.exit(1);
108
+ }
109
+ // Create new project instance
110
+ const newInstance = {
111
+ ...project,
112
+ id: generateUUID(),
113
+ name: `${project.name} (Instance)`,
114
+ rootDirs: newRootDirs
115
+ };
116
+ // Update projects.json
117
+ const updatedProjects = [...projects, newInstance];
118
+ try {
119
+ fs_1.default.writeFileSync(projectsPath, JSON.stringify(updatedProjects, null, 2) + "\n", "utf-8");
120
+ console.log(`Created new project instance: ${newInstance.id}`);
121
+ console.log(`Root directories: ${newRootDirs.join(", ")}`);
122
+ }
123
+ catch (error) {
124
+ console.error(`Failed to update projects.json: ${error}`);
125
+ // Clean up worktrees if we can't update the projects file
126
+ for (const worktreeDir of newRootDirs) {
127
+ if (worktreeDir.includes("worktrees")) {
128
+ try {
129
+ const originalDir = project.rootDirs.find(dir => fs_1.default.existsSync(path_1.default.join(dir, ".git")));
130
+ if (originalDir) {
131
+ (0, child_process_1.execSync)(`git worktree remove "${worktreeDir}"`, {
132
+ cwd: originalDir,
133
+ stdio: 'inherit'
134
+ });
135
+ }
136
+ }
137
+ catch (cleanupError) {
138
+ console.error(`Failed to clean up ${worktreeDir}: ${cleanupError}`);
139
+ }
140
+ }
141
+ }
142
+ process.exit(1);
143
+ }
144
+ }
145
+ catch (error) {
146
+ console.error("Error creating project instance:", error);
147
+ process.exit(1);
148
+ }
149
+ });
150
+ //# sourceMappingURL=create-instance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-instance.js","sourceRoot":"","sources":["../../src/commands/create-instance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const readConfigCommand: Command;
3
+ //# sourceMappingURL=read-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-config.d.ts","sourceRoot":"","sources":["../../src/commands/read-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,iBAAiB,SAiB1B,CAAC"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.readConfigCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const hyperdoc_config_1 = require("@maplab-oss/hyperdoc-config");
9
+ const fs_1 = __importDefault(require("fs"));
10
+ exports.readConfigCommand = new commander_1.Command("config")
11
+ .description("Print the raw config JSON")
12
+ .action(() => {
13
+ try {
14
+ const configPath = (0, hyperdoc_config_1.getConfigPath)();
15
+ if (!fs_1.default.existsSync(configPath)) {
16
+ console.log("{}");
17
+ return;
18
+ }
19
+ const rawConfig = fs_1.default.readFileSync(configPath, "utf-8");
20
+ console.log(rawConfig);
21
+ }
22
+ catch (error) {
23
+ console.error("Error reading config:", error);
24
+ process.exit(1);
25
+ }
26
+ });
27
+ //# sourceMappingURL=read-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-config.js","sourceRoot":"","sources":["../../src/commands/read-config.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AACpC,iEAA4D;AAC5D,4CAAoB;AAEP,QAAA,iBAAiB,GAAG,IAAI,mBAAO,CAAC,QAAQ,CAAC;KACnD,WAAW,CAAC,2BAA2B,CAAC;KACxC,MAAM,CAAC,GAAG,EAAE;IACX,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAA,+BAAa,GAAE,CAAC;QAEnC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const readProjectsCommand: Command;
3
+ //# sourceMappingURL=read-projects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-projects.d.ts","sourceRoot":"","sources":["../../src/commands/read-projects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,mBAAmB,SAiB5B,CAAC"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.readProjectsCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const hyperdoc_config_1 = require("@maplab-oss/hyperdoc-config");
9
+ const fs_1 = __importDefault(require("fs"));
10
+ exports.readProjectsCommand = new commander_1.Command("projects")
11
+ .description("Print the raw projects JSON")
12
+ .action(() => {
13
+ try {
14
+ const projectsPath = (0, hyperdoc_config_1.getDefaultProjectsPath)();
15
+ if (!fs_1.default.existsSync(projectsPath)) {
16
+ console.log("[]");
17
+ return;
18
+ }
19
+ const rawProjects = fs_1.default.readFileSync(projectsPath, "utf-8");
20
+ console.log(rawProjects);
21
+ }
22
+ catch (error) {
23
+ console.error("Error reading projects:", error);
24
+ process.exit(1);
25
+ }
26
+ });
27
+ //# sourceMappingURL=read-projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-projects.js","sourceRoot":"","sources":["../../src/commands/read-projects.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AACpC,iEAAqE;AACrE,4CAAoB;AAEP,QAAA,mBAAmB,GAAG,IAAI,mBAAO,CAAC,UAAU,CAAC;KACvD,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,GAAG,EAAE;IACX,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,IAAA,wCAAsB,GAAE,CAAC;QAE9C,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO;QACT,CAAC;QAED,MAAM,WAAW,GAAG,YAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const commander_1 = require("commander");
8
+ const read_config_1 = require("./commands/read-config");
9
+ const read_projects_1 = require("./commands/read-projects");
10
+ const clean_archived_1 = require("./commands/clean-archived");
11
+ const create_instance_1 = require("./commands/create-instance");
12
+ const fs_1 = __importDefault(require("fs"));
13
+ const path_1 = __importDefault(require("path"));
14
+ const packageJson = JSON.parse(fs_1.default.readFileSync(path_1.default.join(__dirname, "../package.json"), "utf8"));
15
+ const program = new commander_1.Command();
16
+ program
17
+ .name("hyperdoc")
18
+ .description("Hyperdoc CLI for managing projects and config")
19
+ .version(packageJson.version);
20
+ // Add subcommands
21
+ program.addCommand(read_config_1.readConfigCommand);
22
+ program.addCommand(read_projects_1.readProjectsCommand);
23
+ program.addCommand(clean_archived_1.cleanArchivedCommand);
24
+ program.addCommand(create_instance_1.createInstanceCommand);
25
+ program.parse();
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,wDAA2D;AAC3D,4DAA+D;AAC/D,8DAAiE;AACjE,gEAAmE;AACnE,4CAAoB;AACpB,gDAAwB;AAExB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAE,CAAC,YAAY,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC,CACjE,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,+CAA+C,CAAC;KAC5D,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAEhC,kBAAkB;AAClB,OAAO,CAAC,UAAU,CAAC,+BAAiB,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,mCAAmB,CAAC,CAAC;AACxC,OAAO,CAAC,UAAU,CAAC,qCAAoB,CAAC,CAAC;AACzC,OAAO,CAAC,UAAU,CAAC,uCAAqB,CAAC,CAAC;AAE1C,OAAO,CAAC,KAAK,EAAE,CAAC"}
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@hyperdoc/cli",
3
+ "version": "0.1.0",
4
+ "description": "Hyperdoc CLI for managing projects and config",
5
+ "type": "commonjs",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "hyperdoc": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "publishConfig": {
14
+ "access": "public"
15
+ },
16
+ "engines": {
17
+ "node": ">=18.0.0"
18
+ },
19
+ "scripts": {
20
+ "build": "tsc",
21
+ "start": "node dist/index.js",
22
+ "dev": "tsx src/index.ts",
23
+ "typecheck": "tsc --noEmit"
24
+ },
25
+ "keywords": [
26
+ "hyperdoc",
27
+ "cli",
28
+ "config"
29
+ ],
30
+ "author": "",
31
+ "license": "MIT",
32
+ "dependencies": {
33
+ "@maplab-oss/hyperdoc-config": "workspace:*",
34
+ "commander": "^14.0.0"
35
+ },
36
+ "devDependencies": {
37
+ "@types/node": "^20.0.0",
38
+ "tsx": "^4.0.0",
39
+ "typescript": "^5.0.0"
40
+ }
41
+ }