ctxinit 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/LICENSE +21 -0
- package/README.md +484 -0
- package/bin/ctx.js +3 -0
- package/dist/analysis/index.d.ts +2 -0
- package/dist/analysis/index.d.ts.map +1 -0
- package/dist/analysis/index.js +18 -0
- package/dist/analysis/index.js.map +1 -0
- package/dist/analysis/static-analysis.d.ts +79 -0
- package/dist/analysis/static-analysis.d.ts.map +1 -0
- package/dist/analysis/static-analysis.js +279 -0
- package/dist/analysis/static-analysis.js.map +1 -0
- package/dist/bootstrap/index.d.ts +8 -0
- package/dist/bootstrap/index.d.ts.map +1 -0
- package/dist/bootstrap/index.js +13 -0
- package/dist/bootstrap/index.js.map +1 -0
- package/dist/bootstrap/orchestrator.d.ts +48 -0
- package/dist/bootstrap/orchestrator.d.ts.map +1 -0
- package/dist/bootstrap/orchestrator.js +363 -0
- package/dist/bootstrap/orchestrator.js.map +1 -0
- package/dist/bootstrap/validator.d.ts +25 -0
- package/dist/bootstrap/validator.d.ts.map +1 -0
- package/dist/bootstrap/validator.js +412 -0
- package/dist/bootstrap/validator.js.map +1 -0
- package/dist/build/atomic.d.ts +74 -0
- package/dist/build/atomic.d.ts.map +1 -0
- package/dist/build/atomic.js +235 -0
- package/dist/build/atomic.js.map +1 -0
- package/dist/build/index.d.ts +10 -0
- package/dist/build/index.d.ts.map +1 -0
- package/dist/build/index.js +26 -0
- package/dist/build/index.js.map +1 -0
- package/dist/build/lock.d.ts +102 -0
- package/dist/build/lock.d.ts.map +1 -0
- package/dist/build/lock.js +297 -0
- package/dist/build/lock.js.map +1 -0
- package/dist/build/manifest.d.ts +138 -0
- package/dist/build/manifest.d.ts.map +1 -0
- package/dist/build/manifest.js +269 -0
- package/dist/build/manifest.js.map +1 -0
- package/dist/build/orchestrator.d.ts +103 -0
- package/dist/build/orchestrator.d.ts.map +1 -0
- package/dist/build/orchestrator.js +524 -0
- package/dist/build/orchestrator.js.map +1 -0
- package/dist/cli/bootstrap.d.ts +77 -0
- package/dist/cli/bootstrap.d.ts.map +1 -0
- package/dist/cli/bootstrap.js +527 -0
- package/dist/cli/bootstrap.js.map +1 -0
- package/dist/cli/build.d.ts +32 -0
- package/dist/cli/build.d.ts.map +1 -0
- package/dist/cli/build.js +156 -0
- package/dist/cli/build.js.map +1 -0
- package/dist/cli/diff.d.ts +23 -0
- package/dist/cli/diff.d.ts.map +1 -0
- package/dist/cli/diff.js +226 -0
- package/dist/cli/diff.js.map +1 -0
- package/dist/cli/hooks.d.ts +29 -0
- package/dist/cli/hooks.d.ts.map +1 -0
- package/dist/cli/hooks.js +176 -0
- package/dist/cli/hooks.js.map +1 -0
- package/dist/cli/init.d.ts +53 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +254 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/lint.d.ts +46 -0
- package/dist/cli/lint.d.ts.map +1 -0
- package/dist/cli/lint.js +210 -0
- package/dist/cli/lint.js.map +1 -0
- package/dist/cli/migrate.d.ts +28 -0
- package/dist/cli/migrate.d.ts.map +1 -0
- package/dist/cli/migrate.js +350 -0
- package/dist/cli/migrate.js.map +1 -0
- package/dist/cli/verify.d.ts +21 -0
- package/dist/cli/verify.d.ts.map +1 -0
- package/dist/cli/verify.js +209 -0
- package/dist/cli/verify.js.map +1 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +262 -0
- package/dist/cli.js.map +1 -0
- package/dist/compiler/agents-compiler.d.ts +24 -0
- package/dist/compiler/agents-compiler.d.ts.map +1 -0
- package/dist/compiler/agents-compiler.js +192 -0
- package/dist/compiler/agents-compiler.js.map +1 -0
- package/dist/compiler/base-compiler.d.ts +152 -0
- package/dist/compiler/base-compiler.d.ts.map +1 -0
- package/dist/compiler/base-compiler.js +180 -0
- package/dist/compiler/base-compiler.js.map +1 -0
- package/dist/compiler/claude-compiler.d.ts +24 -0
- package/dist/compiler/claude-compiler.d.ts.map +1 -0
- package/dist/compiler/claude-compiler.js +182 -0
- package/dist/compiler/claude-compiler.js.map +1 -0
- package/dist/compiler/cursor-compiler.d.ts +33 -0
- package/dist/compiler/cursor-compiler.d.ts.map +1 -0
- package/dist/compiler/cursor-compiler.js +136 -0
- package/dist/compiler/cursor-compiler.js.map +1 -0
- package/dist/compiler/index.d.ts +7 -0
- package/dist/compiler/index.d.ts.map +1 -0
- package/dist/compiler/index.js +24 -0
- package/dist/compiler/index.js.map +1 -0
- package/dist/compiler/rule-selector.d.ts +115 -0
- package/dist/compiler/rule-selector.d.ts.map +1 -0
- package/dist/compiler/rule-selector.js +273 -0
- package/dist/compiler/rule-selector.js.map +1 -0
- package/dist/compiler/token-estimator.d.ts +74 -0
- package/dist/compiler/token-estimator.d.ts.map +1 -0
- package/dist/compiler/token-estimator.js +191 -0
- package/dist/compiler/token-estimator.js.map +1 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +18 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +48 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +175 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/git/gitignore.d.ts +59 -0
- package/dist/git/gitignore.d.ts.map +1 -0
- package/dist/git/gitignore.js +268 -0
- package/dist/git/gitignore.js.map +1 -0
- package/dist/git/hooks.d.ts +34 -0
- package/dist/git/hooks.d.ts.map +1 -0
- package/dist/git/hooks.js +129 -0
- package/dist/git/hooks.js.map +1 -0
- package/dist/git/husky.d.ts +52 -0
- package/dist/git/husky.d.ts.map +1 -0
- package/dist/git/husky.js +219 -0
- package/dist/git/husky.js.map +1 -0
- package/dist/git/index.d.ts +9 -0
- package/dist/git/index.d.ts.map +1 -0
- package/dist/git/index.js +15 -0
- package/dist/git/index.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/base-provider.d.ts +43 -0
- package/dist/llm/base-provider.d.ts.map +1 -0
- package/dist/llm/base-provider.js +91 -0
- package/dist/llm/base-provider.js.map +1 -0
- package/dist/llm/index.d.ts +17 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +36 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/prompts/bootstrap-prompt.d.ts +27 -0
- package/dist/llm/prompts/bootstrap-prompt.d.ts.map +1 -0
- package/dist/llm/prompts/bootstrap-prompt.js +278 -0
- package/dist/llm/prompts/bootstrap-prompt.js.map +1 -0
- package/dist/llm/prompts/index.d.ts +5 -0
- package/dist/llm/prompts/index.d.ts.map +1 -0
- package/dist/llm/prompts/index.js +11 -0
- package/dist/llm/prompts/index.js.map +1 -0
- package/dist/llm/provider-factory.d.ts +27 -0
- package/dist/llm/provider-factory.d.ts.map +1 -0
- package/dist/llm/provider-factory.js +213 -0
- package/dist/llm/provider-factory.js.map +1 -0
- package/dist/llm/providers/claude-api.d.ts +21 -0
- package/dist/llm/providers/claude-api.d.ts.map +1 -0
- package/dist/llm/providers/claude-api.js +110 -0
- package/dist/llm/providers/claude-api.js.map +1 -0
- package/dist/llm/providers/claude-code.d.ts +21 -0
- package/dist/llm/providers/claude-code.d.ts.map +1 -0
- package/dist/llm/providers/claude-code.js +120 -0
- package/dist/llm/providers/claude-code.js.map +1 -0
- package/dist/llm/providers/codex-cli.d.ts +25 -0
- package/dist/llm/providers/codex-cli.d.ts.map +1 -0
- package/dist/llm/providers/codex-cli.js +129 -0
- package/dist/llm/providers/codex-cli.js.map +1 -0
- package/dist/llm/providers/cursor-cli.d.ts +24 -0
- package/dist/llm/providers/cursor-cli.d.ts.map +1 -0
- package/dist/llm/providers/cursor-cli.js +106 -0
- package/dist/llm/providers/cursor-cli.js.map +1 -0
- package/dist/llm/providers/gemini-api.d.ts +20 -0
- package/dist/llm/providers/gemini-api.d.ts.map +1 -0
- package/dist/llm/providers/gemini-api.js +121 -0
- package/dist/llm/providers/gemini-api.js.map +1 -0
- package/dist/llm/providers/gemini-cli.d.ts +20 -0
- package/dist/llm/providers/gemini-cli.d.ts.map +1 -0
- package/dist/llm/providers/gemini-cli.js +109 -0
- package/dist/llm/providers/gemini-cli.js.map +1 -0
- package/dist/llm/providers/interactive.d.ts +42 -0
- package/dist/llm/providers/interactive.d.ts.map +1 -0
- package/dist/llm/providers/interactive.js +200 -0
- package/dist/llm/providers/interactive.js.map +1 -0
- package/dist/llm/providers/openai-api.d.ts +21 -0
- package/dist/llm/providers/openai-api.d.ts.map +1 -0
- package/dist/llm/providers/openai-api.js +107 -0
- package/dist/llm/providers/openai-api.js.map +1 -0
- package/dist/llm/types.d.ts +128 -0
- package/dist/llm/types.d.ts.map +1 -0
- package/dist/llm/types.js +8 -0
- package/dist/llm/types.js.map +1 -0
- package/dist/parser/index.d.ts +3 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +19 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/path-security.d.ts +40 -0
- package/dist/parser/path-security.d.ts.map +1 -0
- package/dist/parser/path-security.js +183 -0
- package/dist/parser/path-security.js.map +1 -0
- package/dist/parser/rule-parser.d.ts +50 -0
- package/dist/parser/rule-parser.d.ts.map +1 -0
- package/dist/parser/rule-parser.js +203 -0
- package/dist/parser/rule-parser.js.map +1 -0
- package/dist/schemas/config.d.ts +202 -0
- package/dist/schemas/config.d.ts.map +1 -0
- package/dist/schemas/config.js +96 -0
- package/dist/schemas/config.js.map +1 -0
- package/dist/schemas/index.d.ts +3 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +19 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/rule.d.ts +67 -0
- package/dist/schemas/rule.d.ts.map +1 -0
- package/dist/schemas/rule.js +44 -0
- package/dist/schemas/rule.js.map +1 -0
- package/package.json +69 -0
- package/templates/architecture.md +35 -0
- package/templates/bootstrap-prompt.md +242 -0
- package/templates/config.yaml +25 -0
- package/templates/project.md +44 -0
- package/templates/rules/example.md +36 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Init Command
|
|
3
|
+
*
|
|
4
|
+
* Initialize .context directory structure in a project with:
|
|
5
|
+
* - Interactive agent selection
|
|
6
|
+
* - Template file generation
|
|
7
|
+
* - Existing directory detection
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Init command options
|
|
11
|
+
*/
|
|
12
|
+
export interface InitOptions {
|
|
13
|
+
/** Force overwrite existing .context */
|
|
14
|
+
force?: boolean;
|
|
15
|
+
/** Run without interactive prompts */
|
|
16
|
+
interactive?: boolean;
|
|
17
|
+
/** Launch migration wizard */
|
|
18
|
+
wizard?: boolean;
|
|
19
|
+
/** Dry run mode - show what would happen */
|
|
20
|
+
dryRun?: boolean;
|
|
21
|
+
/** Run enhanced bootstrap (LLM-powered context generation) after init (default: true) */
|
|
22
|
+
bootstrap?: boolean;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Agent selection type
|
|
26
|
+
*/
|
|
27
|
+
export type AgentSelection = 'cursor' | 'claude' | 'all';
|
|
28
|
+
/**
|
|
29
|
+
* Check if .context directory exists
|
|
30
|
+
*/
|
|
31
|
+
export declare function contextExists(projectRoot: string): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Detect existing context files (for migration)
|
|
34
|
+
*/
|
|
35
|
+
export declare function detectExistingFiles(projectRoot: string): {
|
|
36
|
+
cursorrules: boolean;
|
|
37
|
+
claudeMd: boolean;
|
|
38
|
+
agentsMd: boolean;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Initialize .context directory structure
|
|
42
|
+
*/
|
|
43
|
+
export declare function initializeContext(projectRoot: string, agents: AgentSelection, options?: {
|
|
44
|
+
dryRun?: boolean;
|
|
45
|
+
}): Promise<{
|
|
46
|
+
created: string[];
|
|
47
|
+
skipped: string[];
|
|
48
|
+
}>;
|
|
49
|
+
/**
|
|
50
|
+
* Run the init command
|
|
51
|
+
*/
|
|
52
|
+
export declare function runInit(options: InitOptions): Promise<number>;
|
|
53
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,wCAAwC;IACxC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,sCAAsC;IACtC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,yFAAyF;IACzF,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;AAqDzD;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAG1D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG;IACxD,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAMA;AAcD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACjC,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAkDnD;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CA0FnE"}
|
package/dist/cli/init.js
ADDED
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Init Command
|
|
4
|
+
*
|
|
5
|
+
* Initialize .context directory structure in a project with:
|
|
6
|
+
* - Interactive agent selection
|
|
7
|
+
* - Template file generation
|
|
8
|
+
* - Existing directory detection
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
27
|
+
var ownKeys = function(o) {
|
|
28
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
29
|
+
var ar = [];
|
|
30
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
return ownKeys(o);
|
|
34
|
+
};
|
|
35
|
+
return function (mod) {
|
|
36
|
+
if (mod && mod.__esModule) return mod;
|
|
37
|
+
var result = {};
|
|
38
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
39
|
+
__setModuleDefault(result, mod);
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
42
|
+
})();
|
|
43
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
44
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
45
|
+
};
|
|
46
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
+
exports.contextExists = contextExists;
|
|
48
|
+
exports.detectExistingFiles = detectExistingFiles;
|
|
49
|
+
exports.initializeContext = initializeContext;
|
|
50
|
+
exports.runInit = runInit;
|
|
51
|
+
const fs = __importStar(require("fs"));
|
|
52
|
+
const path = __importStar(require("path"));
|
|
53
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
54
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
55
|
+
const config_1 = require("../schemas/config");
|
|
56
|
+
const yaml_1 = __importDefault(require("yaml"));
|
|
57
|
+
const bootstrap_1 = require("../bootstrap");
|
|
58
|
+
/**
|
|
59
|
+
* Get path to templates directory
|
|
60
|
+
*/
|
|
61
|
+
function getTemplatesDir() {
|
|
62
|
+
// In development: templates/ relative to project root
|
|
63
|
+
// In production: relative to dist/
|
|
64
|
+
const devPath = path.join(__dirname, '..', '..', 'templates');
|
|
65
|
+
const prodPath = path.join(__dirname, '..', '..', '..', 'templates');
|
|
66
|
+
if (fs.existsSync(devPath)) {
|
|
67
|
+
return devPath;
|
|
68
|
+
}
|
|
69
|
+
return prodPath;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Read template file content
|
|
73
|
+
*/
|
|
74
|
+
function readTemplate(templateName) {
|
|
75
|
+
const templatesDir = getTemplatesDir();
|
|
76
|
+
const templatePath = path.join(templatesDir, templateName);
|
|
77
|
+
return fs.readFileSync(templatePath, 'utf-8');
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Generate config.yaml based on agent selection
|
|
81
|
+
*/
|
|
82
|
+
function generateConfig(agents) {
|
|
83
|
+
// Deep copy to avoid mutating DEFAULT_CONFIG
|
|
84
|
+
const config = JSON.parse(JSON.stringify(config_1.DEFAULT_CONFIG));
|
|
85
|
+
if (agents === 'cursor') {
|
|
86
|
+
delete config.compile.claude;
|
|
87
|
+
delete config.compile.agents;
|
|
88
|
+
}
|
|
89
|
+
else if (agents === 'claude') {
|
|
90
|
+
delete config.compile.cursor;
|
|
91
|
+
delete config.compile.agents;
|
|
92
|
+
}
|
|
93
|
+
// 'all' keeps everything
|
|
94
|
+
return yaml_1.default.stringify(config);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Check if .context directory exists
|
|
98
|
+
*/
|
|
99
|
+
function contextExists(projectRoot) {
|
|
100
|
+
const contextDir = path.join(projectRoot, '.context');
|
|
101
|
+
return fs.existsSync(contextDir);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Detect existing context files (for migration)
|
|
105
|
+
*/
|
|
106
|
+
function detectExistingFiles(projectRoot) {
|
|
107
|
+
return {
|
|
108
|
+
cursorrules: fs.existsSync(path.join(projectRoot, '.cursorrules')),
|
|
109
|
+
claudeMd: fs.existsSync(path.join(projectRoot, 'CLAUDE.md')),
|
|
110
|
+
agentsMd: fs.existsSync(path.join(projectRoot, 'AGENTS.md')),
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Create backup of existing .context directory
|
|
115
|
+
*/
|
|
116
|
+
async function backupContext(projectRoot) {
|
|
117
|
+
const contextDir = path.join(projectRoot, '.context');
|
|
118
|
+
const timestamp = Date.now();
|
|
119
|
+
const backupDir = path.join(projectRoot, `.context.backup.${timestamp}`);
|
|
120
|
+
await fs.promises.rename(contextDir, backupDir);
|
|
121
|
+
return backupDir;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Initialize .context directory structure
|
|
125
|
+
*/
|
|
126
|
+
async function initializeContext(projectRoot, agents, options = {}) {
|
|
127
|
+
const contextDir = path.join(projectRoot, '.context');
|
|
128
|
+
const rulesDir = path.join(contextDir, 'rules');
|
|
129
|
+
const created = [];
|
|
130
|
+
const skipped = [];
|
|
131
|
+
// Create directories
|
|
132
|
+
const directories = [contextDir, rulesDir];
|
|
133
|
+
for (const dir of directories) {
|
|
134
|
+
if (!options.dryRun) {
|
|
135
|
+
await fs.promises.mkdir(dir, { recursive: true });
|
|
136
|
+
}
|
|
137
|
+
created.push(dir);
|
|
138
|
+
}
|
|
139
|
+
// Define template files
|
|
140
|
+
const templates = [
|
|
141
|
+
{ source: 'project.md', target: path.join(contextDir, 'project.md') },
|
|
142
|
+
{ source: 'architecture.md', target: path.join(contextDir, 'architecture.md') },
|
|
143
|
+
{ source: 'rules/example.md', target: path.join(rulesDir, 'example.md') },
|
|
144
|
+
];
|
|
145
|
+
// Write template files
|
|
146
|
+
for (const template of templates) {
|
|
147
|
+
if (fs.existsSync(template.target)) {
|
|
148
|
+
skipped.push(template.target);
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
if (!options.dryRun) {
|
|
152
|
+
const content = readTemplate(template.source);
|
|
153
|
+
await fs.promises.writeFile(template.target, content, 'utf-8');
|
|
154
|
+
}
|
|
155
|
+
created.push(template.target);
|
|
156
|
+
}
|
|
157
|
+
// Generate and write config.yaml
|
|
158
|
+
const configPath = path.join(contextDir, 'config.yaml');
|
|
159
|
+
if (!fs.existsSync(configPath)) {
|
|
160
|
+
if (!options.dryRun) {
|
|
161
|
+
const configContent = generateConfig(agents);
|
|
162
|
+
await fs.promises.writeFile(configPath, configContent, 'utf-8');
|
|
163
|
+
}
|
|
164
|
+
created.push(configPath);
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
skipped.push(configPath);
|
|
168
|
+
}
|
|
169
|
+
return { created, skipped };
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Run the init command
|
|
173
|
+
*/
|
|
174
|
+
async function runInit(options) {
|
|
175
|
+
const projectRoot = process.cwd();
|
|
176
|
+
console.log(chalk_1.default.blue('\n🚀 Initializing .context directory\n'));
|
|
177
|
+
// Check for existing .context
|
|
178
|
+
if (contextExists(projectRoot)) {
|
|
179
|
+
if (!options.force) {
|
|
180
|
+
console.log(chalk_1.default.yellow('⚠️ .context directory already exists.'));
|
|
181
|
+
console.log(chalk_1.default.gray(' Use --force to overwrite (creates backup)'));
|
|
182
|
+
return 1;
|
|
183
|
+
}
|
|
184
|
+
// Backup existing
|
|
185
|
+
const backupPath = await backupContext(projectRoot);
|
|
186
|
+
console.log(chalk_1.default.gray(` Backed up to: ${path.basename(backupPath)}`));
|
|
187
|
+
}
|
|
188
|
+
// Detect existing context files
|
|
189
|
+
const existing = detectExistingFiles(projectRoot);
|
|
190
|
+
const hasExisting = existing.cursorrules || existing.claudeMd || existing.agentsMd;
|
|
191
|
+
if (hasExisting && !options.wizard && options.interactive !== false) {
|
|
192
|
+
console.log(chalk_1.default.yellow('📁 Found existing context files:'));
|
|
193
|
+
if (existing.cursorrules)
|
|
194
|
+
console.log(chalk_1.default.gray(' - .cursorrules'));
|
|
195
|
+
if (existing.claudeMd)
|
|
196
|
+
console.log(chalk_1.default.gray(' - CLAUDE.md'));
|
|
197
|
+
if (existing.agentsMd)
|
|
198
|
+
console.log(chalk_1.default.gray(' - AGENTS.md'));
|
|
199
|
+
console.log(chalk_1.default.gray('\n Run with --wizard for guided migration.\n'));
|
|
200
|
+
}
|
|
201
|
+
// Select agents
|
|
202
|
+
let agents = 'all';
|
|
203
|
+
if (options.interactive !== false) {
|
|
204
|
+
const answers = await inquirer_1.default.prompt([
|
|
205
|
+
{
|
|
206
|
+
type: 'list',
|
|
207
|
+
name: 'agents',
|
|
208
|
+
message: 'Which AI agents do you want to target?',
|
|
209
|
+
choices: [
|
|
210
|
+
{ name: 'All agents (Cursor, Claude Code, Codex)', value: 'all' },
|
|
211
|
+
{ name: 'Cursor IDE only', value: 'cursor' },
|
|
212
|
+
{ name: 'Claude Code only', value: 'claude' },
|
|
213
|
+
],
|
|
214
|
+
default: 'all',
|
|
215
|
+
},
|
|
216
|
+
]);
|
|
217
|
+
agents = answers.agents;
|
|
218
|
+
}
|
|
219
|
+
// Initialize
|
|
220
|
+
const { created, skipped } = await initializeContext(projectRoot, agents, {
|
|
221
|
+
dryRun: options.dryRun,
|
|
222
|
+
});
|
|
223
|
+
// Output results
|
|
224
|
+
if (options.dryRun) {
|
|
225
|
+
console.log(chalk_1.default.cyan('\n📋 Dry run - would create:'));
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
console.log(chalk_1.default.green('\n✅ Created:'));
|
|
229
|
+
}
|
|
230
|
+
for (const file of created) {
|
|
231
|
+
const relative = path.relative(projectRoot, file);
|
|
232
|
+
console.log(chalk_1.default.gray(` ${relative}`));
|
|
233
|
+
}
|
|
234
|
+
if (skipped.length > 0) {
|
|
235
|
+
console.log(chalk_1.default.yellow('\n⏭️ Skipped (already exist):'));
|
|
236
|
+
for (const file of skipped) {
|
|
237
|
+
const relative = path.relative(projectRoot, file);
|
|
238
|
+
console.log(chalk_1.default.gray(` ${relative}`));
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
const shouldBootstrap = options.bootstrap !== false && !options.dryRun;
|
|
242
|
+
if (shouldBootstrap) {
|
|
243
|
+
const result = await (0, bootstrap_1.runEnhancedBootstrap)(projectRoot, { autoBuild: true });
|
|
244
|
+
return result.success ? 0 : 1;
|
|
245
|
+
}
|
|
246
|
+
// Standard next steps
|
|
247
|
+
console.log(chalk_1.default.blue('\n📝 Next steps:'));
|
|
248
|
+
console.log(chalk_1.default.gray(' 1. Edit .context/project.md with your project info'));
|
|
249
|
+
console.log(chalk_1.default.gray(' 2. Add rules to .context/rules/'));
|
|
250
|
+
console.log(chalk_1.default.gray(' 3. Run: ctx build'));
|
|
251
|
+
console.log(chalk_1.default.gray('\n Tip: Run `ctx bootstrap --auto-build` to generate rules with an LLM'));
|
|
252
|
+
return 0;
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lint Command
|
|
3
|
+
*
|
|
4
|
+
* Validate rules without building:
|
|
5
|
+
* - Run static analysis
|
|
6
|
+
* - Output errors and warnings
|
|
7
|
+
* - Support JSON output format
|
|
8
|
+
* - Support file path targeting
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Lint command options
|
|
12
|
+
*/
|
|
13
|
+
export interface LintCommandOptions {
|
|
14
|
+
/** Output in JSON format */
|
|
15
|
+
json?: boolean;
|
|
16
|
+
/** Specific files to lint */
|
|
17
|
+
files?: string[];
|
|
18
|
+
/** Show detailed output */
|
|
19
|
+
verbose?: boolean;
|
|
20
|
+
/** Suppress output except errors */
|
|
21
|
+
quiet?: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* JSON output format
|
|
25
|
+
*/
|
|
26
|
+
export interface LintJsonOutput {
|
|
27
|
+
success: boolean;
|
|
28
|
+
rulesLinted: number;
|
|
29
|
+
errors: Array<{
|
|
30
|
+
type: string;
|
|
31
|
+
message: string;
|
|
32
|
+
path: string;
|
|
33
|
+
line?: number;
|
|
34
|
+
}>;
|
|
35
|
+
warnings: Array<{
|
|
36
|
+
type: string;
|
|
37
|
+
message: string;
|
|
38
|
+
path: string;
|
|
39
|
+
line?: number;
|
|
40
|
+
}>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Run the lint command
|
|
44
|
+
*/
|
|
45
|
+
export declare function runLint(options: LintCommandOptions): Promise<number>;
|
|
46
|
+
//# sourceMappingURL=lint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../src/cli/lint.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,4BAA4B;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oCAAoC;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IACH,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmK1E"}
|
package/dist/cli/lint.js
ADDED
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Lint Command
|
|
4
|
+
*
|
|
5
|
+
* Validate rules without building:
|
|
6
|
+
* - Run static analysis
|
|
7
|
+
* - Output errors and warnings
|
|
8
|
+
* - Support JSON output format
|
|
9
|
+
* - Support file path targeting
|
|
10
|
+
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
+
}) : function(o, v) {
|
|
25
|
+
o["default"] = v;
|
|
26
|
+
});
|
|
27
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
28
|
+
var ownKeys = function(o) {
|
|
29
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
30
|
+
var ar = [];
|
|
31
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
32
|
+
return ar;
|
|
33
|
+
};
|
|
34
|
+
return ownKeys(o);
|
|
35
|
+
};
|
|
36
|
+
return function (mod) {
|
|
37
|
+
if (mod && mod.__esModule) return mod;
|
|
38
|
+
var result = {};
|
|
39
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
40
|
+
__setModuleDefault(result, mod);
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
})();
|
|
44
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
45
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
46
|
+
};
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.runLint = runLint;
|
|
49
|
+
const path = __importStar(require("path"));
|
|
50
|
+
const fs = __importStar(require("fs"));
|
|
51
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
52
|
+
const loader_1 = require("../config/loader");
|
|
53
|
+
const rule_parser_1 = require("../parser/rule-parser");
|
|
54
|
+
const static_analysis_1 = require("../analysis/static-analysis");
|
|
55
|
+
/**
|
|
56
|
+
* Run the lint command
|
|
57
|
+
*/
|
|
58
|
+
async function runLint(options) {
|
|
59
|
+
const projectRoot = process.cwd();
|
|
60
|
+
// Check if .context exists
|
|
61
|
+
const contextDir = path.join(projectRoot, '.context');
|
|
62
|
+
if (!fs.existsSync(contextDir)) {
|
|
63
|
+
if (options.json) {
|
|
64
|
+
const output = {
|
|
65
|
+
success: false,
|
|
66
|
+
rulesLinted: 0,
|
|
67
|
+
errors: [{
|
|
68
|
+
type: 'INIT_ERROR',
|
|
69
|
+
message: '.context directory not found. Run `ctx init` first.',
|
|
70
|
+
path: projectRoot,
|
|
71
|
+
}],
|
|
72
|
+
warnings: [],
|
|
73
|
+
};
|
|
74
|
+
console.log(JSON.stringify(output, null, 2));
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
console.log(chalk_1.default.red('\n❌ Error: .context directory not found.'));
|
|
78
|
+
console.log(chalk_1.default.gray(' Run `ctx init` first to initialize your project.'));
|
|
79
|
+
}
|
|
80
|
+
return 2;
|
|
81
|
+
}
|
|
82
|
+
// Load configuration
|
|
83
|
+
let config;
|
|
84
|
+
try {
|
|
85
|
+
const loadResult = (0, loader_1.loadConfig)(projectRoot);
|
|
86
|
+
config = loadResult.config;
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
if (options.json) {
|
|
90
|
+
const output = {
|
|
91
|
+
success: false,
|
|
92
|
+
rulesLinted: 0,
|
|
93
|
+
errors: [{
|
|
94
|
+
type: 'CONFIG_ERROR',
|
|
95
|
+
message: error.message,
|
|
96
|
+
path: path.join(contextDir, 'config.yaml'),
|
|
97
|
+
}],
|
|
98
|
+
warnings: [],
|
|
99
|
+
};
|
|
100
|
+
console.log(JSON.stringify(output, null, 2));
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
console.log(chalk_1.default.red(`\n❌ Configuration error: ${error.message}`));
|
|
104
|
+
}
|
|
105
|
+
return 2;
|
|
106
|
+
}
|
|
107
|
+
// Parse rules
|
|
108
|
+
if (!options.quiet && !options.json) {
|
|
109
|
+
console.log(chalk_1.default.blue('\n🔍 Linting context rules...\n'));
|
|
110
|
+
}
|
|
111
|
+
const parseOptions = {
|
|
112
|
+
projectRoot,
|
|
113
|
+
rulesDir: path.join(contextDir, 'rules'),
|
|
114
|
+
};
|
|
115
|
+
const { rules, errors: parseErrors } = (0, rule_parser_1.parseAllRules)(parseOptions);
|
|
116
|
+
// Filter to specific files if provided
|
|
117
|
+
let rulesToLint = rules;
|
|
118
|
+
if (options.files && options.files.length > 0) {
|
|
119
|
+
const targetPaths = options.files.map(f => path.resolve(projectRoot, f));
|
|
120
|
+
rulesToLint = rules.filter(r => targetPaths.includes(r.absolutePath));
|
|
121
|
+
}
|
|
122
|
+
// Collect all issues
|
|
123
|
+
const allErrors = [];
|
|
124
|
+
const allWarnings = [];
|
|
125
|
+
// Add parse errors
|
|
126
|
+
for (const err of parseErrors) {
|
|
127
|
+
allErrors.push({
|
|
128
|
+
type: 'PARSE_ERROR',
|
|
129
|
+
message: err.message,
|
|
130
|
+
path: err.path,
|
|
131
|
+
line: err.line,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
// Run static analysis
|
|
135
|
+
if (parseErrors.length === 0 && rulesToLint.length > 0) {
|
|
136
|
+
const analysisOptions = {
|
|
137
|
+
projectRoot,
|
|
138
|
+
config,
|
|
139
|
+
};
|
|
140
|
+
const analysisResult = (0, static_analysis_1.analyzeRules)(rulesToLint, analysisOptions);
|
|
141
|
+
// Add analysis errors
|
|
142
|
+
for (const err of analysisResult.errors) {
|
|
143
|
+
allErrors.push({
|
|
144
|
+
type: err.type,
|
|
145
|
+
message: err.message,
|
|
146
|
+
path: err.path,
|
|
147
|
+
line: err.line,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
// Add analysis warnings
|
|
151
|
+
for (const warn of analysisResult.warnings) {
|
|
152
|
+
allWarnings.push({
|
|
153
|
+
type: warn.type,
|
|
154
|
+
message: warn.message,
|
|
155
|
+
path: warn.path,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// Output results
|
|
160
|
+
const success = allErrors.length === 0;
|
|
161
|
+
if (options.json) {
|
|
162
|
+
const output = {
|
|
163
|
+
success,
|
|
164
|
+
rulesLinted: rulesToLint.length,
|
|
165
|
+
errors: allErrors,
|
|
166
|
+
warnings: allWarnings,
|
|
167
|
+
};
|
|
168
|
+
console.log(JSON.stringify(output, null, 2));
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
// Human-readable output
|
|
172
|
+
if (!options.quiet) {
|
|
173
|
+
console.log(chalk_1.default.gray(`Linted ${rulesToLint.length} rule(s)\n`));
|
|
174
|
+
}
|
|
175
|
+
if (allErrors.length > 0) {
|
|
176
|
+
console.log(chalk_1.default.red('Errors:'));
|
|
177
|
+
for (const err of allErrors) {
|
|
178
|
+
const location = err.line ? `${err.path}:${err.line}` : err.path;
|
|
179
|
+
console.log(chalk_1.default.red(` ❌ [${err.type}] ${err.message}`));
|
|
180
|
+
console.log(chalk_1.default.gray(` ${location}`));
|
|
181
|
+
}
|
|
182
|
+
console.log('');
|
|
183
|
+
}
|
|
184
|
+
if (allWarnings.length > 0) {
|
|
185
|
+
console.log(chalk_1.default.yellow('Warnings:'));
|
|
186
|
+
for (const warn of allWarnings) {
|
|
187
|
+
const location = warn.line ? `${warn.path}:${warn.line}` : warn.path;
|
|
188
|
+
console.log(chalk_1.default.yellow(` ⚠️ [${warn.type}] ${warn.message}`));
|
|
189
|
+
console.log(chalk_1.default.gray(` ${location}`));
|
|
190
|
+
}
|
|
191
|
+
console.log('');
|
|
192
|
+
}
|
|
193
|
+
if (success) {
|
|
194
|
+
if (!options.quiet) {
|
|
195
|
+
if (allWarnings.length > 0) {
|
|
196
|
+
console.log(chalk_1.default.yellow(`✅ Lint passed with ${allWarnings.length} warning(s)`));
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
console.log(chalk_1.default.green('✅ Lint passed - no issues found'));
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
console.log(chalk_1.default.red(`❌ Lint failed - ${allErrors.length} error(s) found`));
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// Return appropriate exit code
|
|
208
|
+
return success ? 0 : 1;
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=lint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/cli/lint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migrate Command
|
|
3
|
+
*
|
|
4
|
+
* Migration operations for legacy context files:
|
|
5
|
+
* - Analyze: Detect and report legacy files
|
|
6
|
+
* - Attach: Create .context alongside legacy files
|
|
7
|
+
* - Complete: Remove legacy files after confirmation
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Migrate command options
|
|
11
|
+
*/
|
|
12
|
+
export interface MigrateCommandOptions {
|
|
13
|
+
/** Analyze mode - detect and report */
|
|
14
|
+
analyze?: boolean;
|
|
15
|
+
/** Attach mode - create alongside */
|
|
16
|
+
attach?: boolean;
|
|
17
|
+
/** Complete mode - remove legacy */
|
|
18
|
+
complete?: boolean;
|
|
19
|
+
/** Skip confirmation prompts */
|
|
20
|
+
force?: boolean;
|
|
21
|
+
/** Dry run - show what would happen */
|
|
22
|
+
dryRun?: boolean;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Run the migrate command
|
|
26
|
+
*/
|
|
27
|
+
export declare function runMigrate(options: MigrateCommandOptions): Promise<number>;
|
|
28
|
+
//# sourceMappingURL=migrate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/cli/migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,uCAAuC;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qCAAqC;IACrC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gCAAgC;IAChC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,uCAAuC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AA6TD;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkChF"}
|