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.
@@ -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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"}
@@ -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
@@ -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,eAAe;IAC9B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "metacoding",
3
- "version": "1.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
- - **Set task status:** Mark tasks as "In Progress" with clear descriptions
216
- - **Break down complex tasks:** Split large tasks into smaller, manageable subtasks
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,5 +0,0 @@
1
- import { ValidateOptions } from '../types';
2
- export declare class ValidateCommand {
3
- execute(_options: ValidateOptions): Promise<void>;
4
- }
5
- //# sourceMappingURL=validate.d.ts.map
@@ -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"}
@@ -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"}