metacoding 1.1.1 ā 1.1.3
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/CHANGELOG.md +22 -2
- package/README.md +162 -80
- package/lib/cli.d.ts.map +1 -1
- package/lib/cli.js +4 -18
- package/lib/cli.js.map +1 -1
- package/lib/commands/update.d.ts +12 -1
- package/lib/commands/update.d.ts.map +1 -1
- package/lib/commands/update.js +395 -7
- package/lib/commands/update.js.map +1 -1
- package/lib/services/backup.d.ts +11 -0
- package/lib/services/backup.d.ts.map +1 -0
- package/lib/services/backup.js +127 -0
- package/lib/services/backup.js.map +1 -0
- package/lib/services/conflict-resolution.d.ts +16 -0
- package/lib/services/conflict-resolution.d.ts.map +1 -0
- package/lib/services/conflict-resolution.js +166 -0
- package/lib/services/conflict-resolution.js.map +1 -0
- package/lib/types/index.d.ts +19 -4
- package/lib/types/index.d.ts.map +1 -1
- package/package.json +6 -2
- package/templates/general/copilot-instructions.md +5 -2
- package/templates/general/docs-update.instructions.md +32 -0
- package/lib/commands/validate.d.ts +0 -5
- package/lib/commands/validate.d.ts.map +0 -1
- package/lib/commands/validate.js +0 -20
- package/lib/commands/validate.js.map +0 -1
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.ConflictResolutionService = void 0;
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const fs = __importStar(require("fs-extra"));
|
|
42
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
43
|
+
const backup_1 = require("./backup");
|
|
44
|
+
class ConflictResolutionService {
|
|
45
|
+
constructor() {
|
|
46
|
+
this.backupService = new backup_1.BackupService();
|
|
47
|
+
}
|
|
48
|
+
async detectConflicts(templateFiles, existingFiles) {
|
|
49
|
+
const conflicts = [];
|
|
50
|
+
for (const templateFile of templateFiles) {
|
|
51
|
+
const filePath = templateFile.path;
|
|
52
|
+
if (existingFiles.includes(filePath)) {
|
|
53
|
+
const hasChanges = await this.backupService.hasFileChanged(filePath, templateFile.content);
|
|
54
|
+
if (hasChanges) {
|
|
55
|
+
const userContent = await fs.readFile(filePath, 'utf8');
|
|
56
|
+
conflicts.push({
|
|
57
|
+
filePath,
|
|
58
|
+
templateContent: templateFile.content,
|
|
59
|
+
userContent,
|
|
60
|
+
hasChanges: true,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return conflicts;
|
|
66
|
+
}
|
|
67
|
+
async getConflictResolution(conflicts) {
|
|
68
|
+
if (conflicts.length === 0) {
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
const resolutions = [];
|
|
72
|
+
console.log(`\nš Found ${conflicts.length} conflicts that need resolution:\n`);
|
|
73
|
+
for (const conflict of conflicts) {
|
|
74
|
+
console.log(`Conflict in: ${conflict.filePath}`);
|
|
75
|
+
}
|
|
76
|
+
const { globalChoice } = await inquirer_1.default.prompt([
|
|
77
|
+
{
|
|
78
|
+
type: 'list',
|
|
79
|
+
name: 'globalChoice',
|
|
80
|
+
message: 'How would you like to handle conflicts?',
|
|
81
|
+
choices: [
|
|
82
|
+
{ name: 'Keep my versions (save as user.filename)', value: 'keep' },
|
|
83
|
+
{ name: 'Replace with template versions', value: 'replace' },
|
|
84
|
+
{ name: 'Review each conflict individually', value: 'individual' },
|
|
85
|
+
{ name: 'Cancel update', value: 'cancel' },
|
|
86
|
+
],
|
|
87
|
+
},
|
|
88
|
+
]);
|
|
89
|
+
if (globalChoice === 'cancel') {
|
|
90
|
+
throw new Error('Update cancelled by user');
|
|
91
|
+
}
|
|
92
|
+
if (globalChoice === 'individual') {
|
|
93
|
+
for (const conflict of conflicts) {
|
|
94
|
+
const { choice } = await inquirer_1.default.prompt([
|
|
95
|
+
{
|
|
96
|
+
type: 'list',
|
|
97
|
+
name: 'choice',
|
|
98
|
+
message: `Conflict in ${conflict.filePath}:`,
|
|
99
|
+
choices: [
|
|
100
|
+
{
|
|
101
|
+
name: 'Keep my version (save as user.filename)',
|
|
102
|
+
value: 'keep',
|
|
103
|
+
},
|
|
104
|
+
{ name: 'Replace with template version', value: 'replace' },
|
|
105
|
+
{ name: 'Skip this file', value: 'skip' },
|
|
106
|
+
],
|
|
107
|
+
},
|
|
108
|
+
]);
|
|
109
|
+
resolutions.push({
|
|
110
|
+
action: choice,
|
|
111
|
+
userFileName: choice === 'keep'
|
|
112
|
+
? this.getUserFileName(conflict.filePath)
|
|
113
|
+
: undefined,
|
|
114
|
+
applyToAll: false,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
for (const conflict of conflicts) {
|
|
120
|
+
resolutions.push({
|
|
121
|
+
action: globalChoice,
|
|
122
|
+
userFileName: globalChoice === 'keep'
|
|
123
|
+
? this.getUserFileName(conflict.filePath)
|
|
124
|
+
: undefined,
|
|
125
|
+
applyToAll: true,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return resolutions;
|
|
130
|
+
}
|
|
131
|
+
getUserFileName(originalPath) {
|
|
132
|
+
const dir = path.dirname(originalPath);
|
|
133
|
+
const filename = path.basename(originalPath);
|
|
134
|
+
return path.join(dir, `user.${filename}`);
|
|
135
|
+
}
|
|
136
|
+
async applyResolutions(conflicts, resolutions) {
|
|
137
|
+
const preservedFiles = [];
|
|
138
|
+
const updatedFiles = [];
|
|
139
|
+
for (let i = 0; i < conflicts.length; i++) {
|
|
140
|
+
const conflict = conflicts[i];
|
|
141
|
+
const resolution = resolutions[i];
|
|
142
|
+
if (!conflict || !resolution) {
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
switch (resolution.action) {
|
|
146
|
+
case 'keep':
|
|
147
|
+
if (resolution.userFileName) {
|
|
148
|
+
await fs.move(conflict.filePath, resolution.userFileName);
|
|
149
|
+
preservedFiles.push(resolution.userFileName);
|
|
150
|
+
await fs.writeFile(conflict.filePath, conflict.templateContent);
|
|
151
|
+
updatedFiles.push(conflict.filePath);
|
|
152
|
+
}
|
|
153
|
+
break;
|
|
154
|
+
case 'replace':
|
|
155
|
+
await fs.writeFile(conflict.filePath, conflict.templateContent);
|
|
156
|
+
updatedFiles.push(conflict.filePath);
|
|
157
|
+
break;
|
|
158
|
+
case 'skip':
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return { preservedFiles, updatedFiles };
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
exports.ConflictResolutionService = ConflictResolutionService;
|
|
166
|
+
//# sourceMappingURL=conflict-resolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conflict-resolution.js","sourceRoot":"","sources":["../../src/services/conflict-resolution.ts"],"names":[],"mappings":"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"}
|
package/lib/types/index.d.ts
CHANGED
|
@@ -4,13 +4,12 @@ export interface InitOptions {
|
|
|
4
4
|
skipVscode?: boolean;
|
|
5
5
|
skipGit?: boolean;
|
|
6
6
|
}
|
|
7
|
-
export interface ValidateOptions {
|
|
8
|
-
fix?: boolean;
|
|
9
|
-
strict?: boolean;
|
|
10
|
-
}
|
|
11
7
|
export interface UpdateOptions {
|
|
12
8
|
template?: string;
|
|
13
9
|
backup?: boolean;
|
|
10
|
+
force?: boolean;
|
|
11
|
+
dryRun?: boolean;
|
|
12
|
+
strict?: boolean;
|
|
14
13
|
}
|
|
15
14
|
export interface ProjectConfig {
|
|
16
15
|
name: string;
|
|
@@ -63,4 +62,20 @@ export interface FileSystemResult {
|
|
|
63
62
|
updated?: string[];
|
|
64
63
|
skipped?: string[];
|
|
65
64
|
}
|
|
65
|
+
export interface ConflictResolution {
|
|
66
|
+
action: 'keep' | 'replace' | 'skip';
|
|
67
|
+
userFileName?: string | undefined;
|
|
68
|
+
applyToAll?: boolean;
|
|
69
|
+
}
|
|
70
|
+
export interface UpdateConflict {
|
|
71
|
+
filePath: string;
|
|
72
|
+
templateContent: string;
|
|
73
|
+
userContent: string;
|
|
74
|
+
hasChanges: boolean;
|
|
75
|
+
}
|
|
76
|
+
export interface BackupResult {
|
|
77
|
+
backupPath: string;
|
|
78
|
+
timestamp: string;
|
|
79
|
+
filesBackedUp: string[];
|
|
80
|
+
}
|
|
66
81
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,GAAG,MAAM,CAAC;CAC7C;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "metacoding",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.3",
|
|
4
4
|
"description": "Guided Development Workflow for GitHub Copilot - Transform your coding experience with AI-guided standards, structured workflows, and quality practices",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -17,8 +17,9 @@
|
|
|
17
17
|
"lint": "eslint src/**/*.ts",
|
|
18
18
|
"lint:fix": "eslint src/**/*.ts --fix",
|
|
19
19
|
"format": "prettier --write src/**/*.ts",
|
|
20
|
+
"validate-readme": "echo 'Validating README.md for npm publishing...' && test -f README.md && echo 'README.md exists and will be included in npm package'",
|
|
20
21
|
"prepare": "npm run build",
|
|
21
|
-
"prepublishOnly": "npm run lint && npm run test && npm run build",
|
|
22
|
+
"prepublishOnly": "npm run lint && npm run test && npm run build && npm run validate-readme",
|
|
22
23
|
"start": "node bin/metacoding.js"
|
|
23
24
|
},
|
|
24
25
|
"keywords": [
|
|
@@ -96,6 +97,9 @@
|
|
|
96
97
|
"jest": {
|
|
97
98
|
"preset": "ts-jest",
|
|
98
99
|
"testEnvironment": "node",
|
|
100
|
+
"setupFilesAfterEnv": [
|
|
101
|
+
"<rootDir>/test/setup.ts"
|
|
102
|
+
],
|
|
99
103
|
"transform": {
|
|
100
104
|
"^.+\\.ts$": [
|
|
101
105
|
"ts-jest",
|
|
@@ -212,8 +212,11 @@ When providing code suggestions, prioritize:
|
|
|
212
212
|
### Step 2: Task Management
|
|
213
213
|
|
|
214
214
|
- **Document before executing:** Add corresponding task(s) to `/_meta/project-task-list.md` BEFORE any implementation work
|
|
215
|
-
- **
|
|
216
|
-
- **
|
|
215
|
+
- **Use standardized task naming:** Follow the `[AREA]-TASK-[NUMBER]` format for all tasks
|
|
216
|
+
- **Area Prefixes:** Use appropriate prefixes (CORE, API, UI, DB, AUTH, UTIL, CONFIG, DOC, CLI, TMPL, etc.)
|
|
217
|
+
- **Examples:** `CLI-TASK-001: Implement validate command`, `DOC-TASK-002: Update API documentation`
|
|
218
|
+
- **Set task status:** Mark tasks as "In Progress" with clear descriptions and status indicators
|
|
219
|
+
- **Break down complex tasks:** Split large tasks into smaller, manageable subtasks with sequential numbering
|
|
217
220
|
- **Estimate effort:** Provide realistic time/complexity estimates
|
|
218
221
|
- **Task documentation requirement:** Every task must be documented in the task list before work begins
|
|
219
222
|
|
|
@@ -86,6 +86,38 @@ This project enforces a strict distinction between different types of documentat
|
|
|
86
86
|
- **Use descriptive section names:** Use functional names like "Core Features", "Infrastructure", "Testing" instead of "Completed Tasks"
|
|
87
87
|
- **Avoid temporal references:** Don't use "Recent", "Latest", "Upcoming" in section headers - they become outdated quickly
|
|
88
88
|
|
|
89
|
+
### Task ID Naming Convention
|
|
90
|
+
|
|
91
|
+
Follow the standardized task naming format for all project management documentation:
|
|
92
|
+
|
|
93
|
+
#### Required Task Format
|
|
94
|
+
|
|
95
|
+
```markdown
|
|
96
|
+
- [ ] **[AREA]-TASK-001: Task title** - ā **NOT STARTED**
|
|
97
|
+
- Detailed task description and requirements
|
|
98
|
+
- Implementation steps and acceptance criteria
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
#### Task ID Conventions
|
|
102
|
+
|
|
103
|
+
- **Format:** `[AREA]-TASK-[NUMBER]`
|
|
104
|
+
- **Area Prefixes:** Adapt to your project (CORE, API, UI, DB, AUTH, UTIL, CONFIG, DOC, CLI, TMPL, etc.)
|
|
105
|
+
- **Task Type:** Always use "TASK" for consistency
|
|
106
|
+
- **Sequential Numbering:** 001, 002, 003, etc. within each area
|
|
107
|
+
- **Examples:**
|
|
108
|
+
- `CLI-TASK-001: Implement validate command`
|
|
109
|
+
- `API-TASK-002: Add authentication middleware`
|
|
110
|
+
- `DOC-TASK-003: Update README installation guide`
|
|
111
|
+
- `TMPL-TASK-004: Create Python project template`
|
|
112
|
+
|
|
113
|
+
#### Task Organization Requirements
|
|
114
|
+
|
|
115
|
+
- **Functional Grouping:** Group tasks by system area/component
|
|
116
|
+
- **Clear Descriptions:** Provide specific, actionable task descriptions
|
|
117
|
+
- **Status Tracking:** Use standard status indicators (ā NOT STARTED, š§ IN PROGRESS, ā
COMPLETED)
|
|
118
|
+
- **Acceptance Criteria:** Include clear completion criteria in task details
|
|
119
|
+
- **Dependencies:** Note task dependencies and prerequisites when relevant
|
|
120
|
+
|
|
89
121
|
## README.md Standards (System Documentation)
|
|
90
122
|
|
|
91
123
|
**ā ļø README.md is system documentation - NO status indicators or temporal language allowed**
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAK3C,qBAAa,eAAe;IACpB,OAAO,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;CAWxD"}
|
package/lib/commands/validate.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
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.ValidateCommand = void 0;
|
|
7
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
-
class ValidateCommand {
|
|
9
|
-
async execute(_options) {
|
|
10
|
-
console.log(chalk_1.default.cyan('š Validating metacoding setup...\n'));
|
|
11
|
-
console.log(chalk_1.default.yellow('ā ļø Validation command is not yet implemented.'));
|
|
12
|
-
console.log(chalk_1.default.dim('This feature will check:'));
|
|
13
|
-
console.log(chalk_1.default.dim('- Required files exist'));
|
|
14
|
-
console.log(chalk_1.default.dim('- VS Code settings are configured'));
|
|
15
|
-
console.log(chalk_1.default.dim('- Instruction files are valid'));
|
|
16
|
-
console.log(chalk_1.default.dim('- Template consistency'));
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
exports.ValidateCommand = ValidateCommand;
|
|
20
|
-
//# sourceMappingURL=validate.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAM1B,MAAa,eAAe;IAC1B,KAAK,CAAC,OAAO,CAAC,QAAyB;QACrC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAC;QAG/D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,gDAAgD,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACnD,CAAC;CACF;AAZD,0CAYC"}
|