@claudecam/cli 0.0.1 → 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/dist/cam-hook.d.ts +8 -0
- package/dist/cam-hook.d.ts.map +1 -0
- package/dist/cam-hook.js +8 -0
- package/dist/cam-hook.js.map +1 -0
- package/dist/commands/doctor.d.ts +3 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +218 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/hooks.d.ts +3 -0
- package/dist/commands/hooks.d.ts.map +1 -0
- package/dist/commands/hooks.js +106 -0
- package/dist/commands/hooks.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +576 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/progress.d.ts +3 -0
- package/dist/commands/progress.d.ts.map +1 -0
- package/dist/commands/progress.js +157 -0
- package/dist/commands/progress.js.map +1 -0
- package/dist/commands/project.d.ts +3 -0
- package/dist/commands/project.d.ts.map +1 -0
- package/dist/commands/project.js +203 -0
- package/dist/commands/project.js.map +1 -0
- package/dist/commands/sessions.d.ts +3 -0
- package/dist/commands/sessions.d.ts.map +1 -0
- package/dist/commands/sessions.js +105 -0
- package/dist/commands/sessions.js.map +1 -0
- package/dist/commands/sprint.d.ts +3 -0
- package/dist/commands/sprint.d.ts.map +1 -0
- package/dist/commands/sprint.js +552 -0
- package/dist/commands/sprint.js.map +1 -0
- package/dist/commands/start.d.ts +3 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +216 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +178 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/tasks.d.ts +3 -0
- package/dist/commands/tasks.d.ts.map +1 -0
- package/dist/commands/tasks.js +176 -0
- package/dist/commands/tasks.js.map +1 -0
- package/dist/commands/theme.d.ts +3 -0
- package/dist/commands/theme.d.ts.map +1 -0
- package/dist/commands/theme.js +63 -0
- package/dist/commands/theme.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/config.d.ts +18 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +74 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/hooks-config.d.ts +28 -0
- package/dist/utils/hooks-config.d.ts.map +1 -0
- package/dist/utils/hooks-config.js +120 -0
- package/dist/utils/hooks-config.js.map +1 -0
- package/dist/utils/logger.d.ts +16 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +39 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/sprint-parser.d.ts +32 -0
- package/dist/utils/sprint-parser.d.ts.map +1 -0
- package/dist/utils/sprint-parser.js +115 -0
- package/dist/utils/sprint-parser.js.map +1 -0
- package/package.json +47 -20
- package/index.js +0 -6
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Thin wrapper that delegates to @claudecam/hook's entry point.
|
|
4
|
+
* This ensures cam-hook is available in PATH when claudecam is installed globally.
|
|
5
|
+
* The @claudecam/hook index.ts reads process.argv and stdin at module level.
|
|
6
|
+
*/
|
|
7
|
+
import "@claudecam/hook";
|
|
8
|
+
//# sourceMappingURL=cam-hook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cam-hook.d.ts","sourceRoot":"","sources":["../src/cam-hook.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AACH,OAAO,iBAAiB,CAAC"}
|
package/dist/cam-hook.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Thin wrapper that delegates to @claudecam/hook's entry point.
|
|
4
|
+
* This ensures cam-hook is available in PATH when claudecam is installed globally.
|
|
5
|
+
* The @claudecam/hook index.ts reads process.argv and stdin at module level.
|
|
6
|
+
*/
|
|
7
|
+
import "@claudecam/hook";
|
|
8
|
+
//# sourceMappingURL=cam-hook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cam-hook.js","sourceRoot":"","sources":["../src/cam-hook.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AACH,OAAO,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBpC,eAAO,MAAM,aAAa,SAuNtB,CAAC"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { existsSync } from "node:fs";
|
|
4
|
+
import { execSync } from "node:child_process";
|
|
5
|
+
import { DEFAULT_SERVER_PORT } from "@claudecam/shared";
|
|
6
|
+
import { logger } from "../utils/logger.js";
|
|
7
|
+
import { readConfig, claudeSettingsExist, readClaudeSettings, } from "../utils/config.js";
|
|
8
|
+
import { listConfiguredCamHooks, HOOK_TYPE_DESCRIPTIONS, } from "../utils/hooks-config.js";
|
|
9
|
+
export const doctorCommand = new Command("doctor")
|
|
10
|
+
.description("Run diagnostics to verify CAM setup is working correctly")
|
|
11
|
+
.action(async () => {
|
|
12
|
+
const config = readConfig();
|
|
13
|
+
const port = config.serverPort || DEFAULT_SERVER_PORT;
|
|
14
|
+
logger.blank();
|
|
15
|
+
logger.section("Claude Agent Monitor - Doctor");
|
|
16
|
+
logger.blank();
|
|
17
|
+
const results = [];
|
|
18
|
+
// 1. Check cam-hook binary
|
|
19
|
+
const camHookOk = checkBinaryAvailable("cam-hook");
|
|
20
|
+
results.push({
|
|
21
|
+
label: "cam-hook binary in PATH",
|
|
22
|
+
ok: camHookOk,
|
|
23
|
+
detail: camHookOk ? "Found in PATH" : "Not found",
|
|
24
|
+
fix: "npm install -g claudecam",
|
|
25
|
+
});
|
|
26
|
+
// 2. Check .claude/settings.json exists
|
|
27
|
+
const settingsExist = claudeSettingsExist();
|
|
28
|
+
results.push({
|
|
29
|
+
label: ".claude/settings.json exists",
|
|
30
|
+
ok: settingsExist,
|
|
31
|
+
detail: settingsExist ? "Found" : "Not found in current directory",
|
|
32
|
+
fix: "cam init",
|
|
33
|
+
});
|
|
34
|
+
// 3. Check hooks are configured
|
|
35
|
+
let hooksConfigured = 0;
|
|
36
|
+
const expectedHookCount = Object.keys(HOOK_TYPE_DESCRIPTIONS).length;
|
|
37
|
+
if (settingsExist) {
|
|
38
|
+
const settings = readClaudeSettings();
|
|
39
|
+
const camHooks = listConfiguredCamHooks(settings);
|
|
40
|
+
hooksConfigured = camHooks.length;
|
|
41
|
+
}
|
|
42
|
+
results.push({
|
|
43
|
+
label: "CAM hooks configured",
|
|
44
|
+
ok: hooksConfigured >= expectedHookCount,
|
|
45
|
+
detail: `${hooksConfigured}/${expectedHookCount} hooks`,
|
|
46
|
+
fix: hooksConfigured === 0 ? "cam init" : "cam init --force",
|
|
47
|
+
});
|
|
48
|
+
// 4. Check server is running
|
|
49
|
+
let serverOnline = false;
|
|
50
|
+
try {
|
|
51
|
+
const response = await fetch(`http://localhost:${port}/api/health`);
|
|
52
|
+
serverOnline = response.ok;
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// Server not running
|
|
56
|
+
}
|
|
57
|
+
results.push({
|
|
58
|
+
label: `Server running on port ${port}`,
|
|
59
|
+
ok: serverOnline,
|
|
60
|
+
detail: serverOnline ? "Responding to health check" : "Not responding",
|
|
61
|
+
fix: "cam start",
|
|
62
|
+
});
|
|
63
|
+
// 5. Test POST to server (send a test event)
|
|
64
|
+
let postOk = false;
|
|
65
|
+
if (serverOnline) {
|
|
66
|
+
try {
|
|
67
|
+
const testEvent = {
|
|
68
|
+
hook: "SessionStart",
|
|
69
|
+
timestamp: new Date().toISOString(),
|
|
70
|
+
session_id: "cam-doctor-test",
|
|
71
|
+
agent_id: "system",
|
|
72
|
+
data: {
|
|
73
|
+
working_directory: process.cwd(),
|
|
74
|
+
hooks_configured: hooksConfigured,
|
|
75
|
+
source: "cam-doctor",
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
const response = await fetch(`http://localhost:${port}/api/events`, {
|
|
79
|
+
method: "POST",
|
|
80
|
+
headers: { "Content-Type": "application/json" },
|
|
81
|
+
body: JSON.stringify(testEvent),
|
|
82
|
+
});
|
|
83
|
+
postOk = response.ok;
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// POST failed
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
results.push({
|
|
90
|
+
label: "POST /api/events works",
|
|
91
|
+
ok: postOk,
|
|
92
|
+
detail: postOk
|
|
93
|
+
? "Test event sent successfully"
|
|
94
|
+
: serverOnline
|
|
95
|
+
? "POST failed"
|
|
96
|
+
: "Server not running (skipped)",
|
|
97
|
+
fix: serverOnline ? undefined : "cam start",
|
|
98
|
+
});
|
|
99
|
+
// 6. Check Node.js version
|
|
100
|
+
let nodeOk = false;
|
|
101
|
+
let nodeVersion = "unknown";
|
|
102
|
+
try {
|
|
103
|
+
nodeVersion = process.version;
|
|
104
|
+
const major = parseInt(nodeVersion.slice(1).split(".")[0], 10);
|
|
105
|
+
nodeOk = major >= 18;
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
// Can't determine version
|
|
109
|
+
}
|
|
110
|
+
results.push({
|
|
111
|
+
label: "Node.js >= 18",
|
|
112
|
+
ok: nodeOk,
|
|
113
|
+
detail: nodeVersion,
|
|
114
|
+
fix: "Install Node.js 18+ from https://nodejs.org",
|
|
115
|
+
});
|
|
116
|
+
// 7. Check project is registered
|
|
117
|
+
let registeredOk = false;
|
|
118
|
+
if (serverOnline) {
|
|
119
|
+
try {
|
|
120
|
+
const cwd = process.cwd();
|
|
121
|
+
const response = await fetch(`http://localhost:${port}/api/registry/lookup?dir=${encodeURIComponent(cwd)}`);
|
|
122
|
+
registeredOk = response.ok;
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
// Not registered
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
results.push({
|
|
129
|
+
label: "Project registered in CAM",
|
|
130
|
+
ok: registeredOk,
|
|
131
|
+
detail: registeredOk
|
|
132
|
+
? "Current directory is registered"
|
|
133
|
+
: serverOnline
|
|
134
|
+
? "Not registered"
|
|
135
|
+
: "Server not running (skipped)",
|
|
136
|
+
fix: "cam init",
|
|
137
|
+
});
|
|
138
|
+
// 8. Check PRD.md exists
|
|
139
|
+
const hasPrd = ["PRD.md", "prd.md", "PRD.MD"].some((f) => existsSync(f));
|
|
140
|
+
results.push({
|
|
141
|
+
label: "PRD.md found in project",
|
|
142
|
+
ok: hasPrd,
|
|
143
|
+
detail: hasPrd ? "Found" : "Not found (optional - CAM works without it)",
|
|
144
|
+
fix: hasPrd ? undefined : "Optional: create a PRD.md or run 'cam init --prd <path>'",
|
|
145
|
+
warning: true,
|
|
146
|
+
});
|
|
147
|
+
// 9. Check tmux availability (warning only, not a failure)
|
|
148
|
+
const tmuxAvailable = checkBinaryAvailable("tmux");
|
|
149
|
+
results.push({
|
|
150
|
+
label: "tmux available for multi-agent tracking",
|
|
151
|
+
ok: tmuxAvailable,
|
|
152
|
+
detail: tmuxAvailable
|
|
153
|
+
? "Found in PATH"
|
|
154
|
+
: "Not found (recommended for full E2E tracking)",
|
|
155
|
+
fix: tmuxAvailable
|
|
156
|
+
? undefined
|
|
157
|
+
: process.platform === "win32"
|
|
158
|
+
? "Install WSL + tmux for complete per-agent tracking"
|
|
159
|
+
: "Install tmux for complete per-agent tracking",
|
|
160
|
+
warning: true,
|
|
161
|
+
});
|
|
162
|
+
// Display results
|
|
163
|
+
let passCount = 0;
|
|
164
|
+
let failCount = 0;
|
|
165
|
+
let warnCount = 0;
|
|
166
|
+
for (const result of results) {
|
|
167
|
+
if (result.ok) {
|
|
168
|
+
const icon = chalk.green("\u2713");
|
|
169
|
+
const detail = result.detail ? chalk.gray(` (${result.detail})`) : "";
|
|
170
|
+
console.log(` ${icon} ${result.label}${detail}`);
|
|
171
|
+
passCount++;
|
|
172
|
+
}
|
|
173
|
+
else if (result.warning) {
|
|
174
|
+
const icon = chalk.yellow("\u26A0");
|
|
175
|
+
const detail = result.detail ? chalk.gray(` (${result.detail})`) : "";
|
|
176
|
+
console.log(` ${icon} ${result.label}${detail}`);
|
|
177
|
+
warnCount++;
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
const icon = chalk.red("\u2717");
|
|
181
|
+
const detail = result.detail ? chalk.gray(` (${result.detail})`) : "";
|
|
182
|
+
console.log(` ${icon} ${result.label}${detail}`);
|
|
183
|
+
failCount++;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
// Show fixes for failures and warnings
|
|
187
|
+
const fixableResults = results.filter((r) => !r.ok && r.fix);
|
|
188
|
+
if (fixableResults.length > 0) {
|
|
189
|
+
logger.blank();
|
|
190
|
+
logger.section("Fixes");
|
|
191
|
+
for (const result of fixableResults) {
|
|
192
|
+
const color = result.warning ? chalk.gray : chalk.yellow;
|
|
193
|
+
logger.item(`${color(result.label)}: ${chalk.cyan(result.fix)}`);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// Summary
|
|
197
|
+
logger.blank();
|
|
198
|
+
const warnText = warnCount > 0 ? `, ${warnCount} warning${warnCount > 1 ? "s" : ""}` : "";
|
|
199
|
+
if (failCount === 0) {
|
|
200
|
+
logger.success(`All ${passCount} checks passed${warnText}! CAM is ready to use.`);
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
logger.warning(`${passCount} passed, ${failCount} failed${warnText}. Fix the issues above.`);
|
|
204
|
+
}
|
|
205
|
+
logger.blank();
|
|
206
|
+
process.exit(failCount > 0 ? 1 : 0);
|
|
207
|
+
});
|
|
208
|
+
function checkBinaryAvailable(name) {
|
|
209
|
+
try {
|
|
210
|
+
const cmd = process.platform === "win32" ? `where ${name}` : `which ${name}`;
|
|
211
|
+
execSync(cmd, { stdio: "ignore" });
|
|
212
|
+
return true;
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
return false;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/commands/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,eAAO,MAAM,YAAY,SA0BrB,CAAC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { DEFAULT_SERVER_PORT } from '@claudecam/shared';
|
|
4
|
+
import { logger } from '../utils/logger.js';
|
|
5
|
+
import { claudeSettingsExist, readClaudeSettings, writeClaudeSettings, } from '../utils/config.js';
|
|
6
|
+
import { listConfiguredCamHooks, removeCamHooks, HOOK_TYPE_DESCRIPTIONS, } from '../utils/hooks-config.js';
|
|
7
|
+
export const hooksCommand = new Command('hooks')
|
|
8
|
+
.description('Manage Claude Agent Monitor hooks')
|
|
9
|
+
.option('--list', 'List configured CAM hooks')
|
|
10
|
+
.option('--remove', 'Remove CAM hooks (preserves other hooks)')
|
|
11
|
+
.option('--test', 'Send a test event to the server')
|
|
12
|
+
.action(async (options) => {
|
|
13
|
+
// Default to --list if no option specified
|
|
14
|
+
if (!options.list && !options.remove && !options.test) {
|
|
15
|
+
options.list = true;
|
|
16
|
+
}
|
|
17
|
+
logger.blank();
|
|
18
|
+
if (options.list) {
|
|
19
|
+
await listHooks();
|
|
20
|
+
}
|
|
21
|
+
if (options.remove) {
|
|
22
|
+
await removeHooks();
|
|
23
|
+
}
|
|
24
|
+
if (options.test) {
|
|
25
|
+
await testHook();
|
|
26
|
+
}
|
|
27
|
+
logger.blank();
|
|
28
|
+
});
|
|
29
|
+
async function listHooks() {
|
|
30
|
+
logger.section('Claude Agent Monitor - Hooks');
|
|
31
|
+
logger.blank();
|
|
32
|
+
if (!claudeSettingsExist()) {
|
|
33
|
+
logger.warning('No .claude/settings.json found.');
|
|
34
|
+
logger.info(`Run ${chalk.cyan('cam init')} to configure hooks.`);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const settings = readClaudeSettings();
|
|
38
|
+
const camHooks = listConfiguredCamHooks(settings);
|
|
39
|
+
if (camHooks.length === 0) {
|
|
40
|
+
logger.info('No CAM hooks configured.');
|
|
41
|
+
logger.info(`Run ${chalk.cyan('cam init')} to configure hooks.`);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
logger.info(`Found ${chalk.cyan(String(camHooks.length))} CAM hook(s):`);
|
|
45
|
+
logger.blank();
|
|
46
|
+
for (const hook of camHooks) {
|
|
47
|
+
const description = HOOK_TYPE_DESCRIPTIONS[hook.hookType] ?? '';
|
|
48
|
+
logger.item(`${chalk.white(hook.hookType)} ${chalk.gray(`- ${description}`)}`);
|
|
49
|
+
logger.info(` Command: ${chalk.gray(hook.command)}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async function removeHooks() {
|
|
53
|
+
logger.section('Removing CAM hooks...');
|
|
54
|
+
logger.blank();
|
|
55
|
+
if (!claudeSettingsExist()) {
|
|
56
|
+
logger.info('No .claude/settings.json found. Nothing to remove.');
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const settings = readClaudeSettings();
|
|
60
|
+
const camHooks = listConfiguredCamHooks(settings);
|
|
61
|
+
if (camHooks.length === 0) {
|
|
62
|
+
logger.info('No CAM hooks found. Nothing to remove.');
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const cleaned = removeCamHooks(settings);
|
|
66
|
+
writeClaudeSettings(cleaned);
|
|
67
|
+
logger.success(`Removed ${chalk.cyan(String(camHooks.length))} CAM hook(s)`);
|
|
68
|
+
logger.info('Other hooks have been preserved.');
|
|
69
|
+
}
|
|
70
|
+
async function testHook() {
|
|
71
|
+
logger.section('Sending test event...');
|
|
72
|
+
logger.blank();
|
|
73
|
+
const port = DEFAULT_SERVER_PORT;
|
|
74
|
+
try {
|
|
75
|
+
const testEvent = {
|
|
76
|
+
hook: 'Notification',
|
|
77
|
+
timestamp: new Date().toISOString(),
|
|
78
|
+
session_id: 'test-session',
|
|
79
|
+
agent_id: 'test-agent',
|
|
80
|
+
data: {
|
|
81
|
+
message: 'Test event from CAM CLI',
|
|
82
|
+
level: 'info',
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
const response = await fetch(`http://localhost:${port}/api/events`, {
|
|
86
|
+
method: 'POST',
|
|
87
|
+
headers: { 'Content-Type': 'application/json' },
|
|
88
|
+
body: JSON.stringify(testEvent),
|
|
89
|
+
});
|
|
90
|
+
if (response.ok) {
|
|
91
|
+
const data = (await response.json());
|
|
92
|
+
logger.success(`Test event sent successfully`);
|
|
93
|
+
if (data.event_id) {
|
|
94
|
+
logger.info(`Event ID: ${chalk.cyan(data.event_id)}`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
logger.error(`Server responded with status ${response.status}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
logger.error('Server is not running.');
|
|
103
|
+
logger.info(`Start with: ${chalk.cyan('cam start')}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/commands/hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBpC,eAAO,MAAM,WAAW,SA6NrB,CAAC"}
|