@cxtmanager/core 1.0.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/README.md +132 -0
- package/dist/context-manager.d.ts +55 -0
- package/dist/context-manager.d.ts.map +1 -0
- package/dist/context-manager.js +676 -0
- package/dist/context-manager.js.map +1 -0
- package/dist/file-watcher.d.ts +31 -0
- package/dist/file-watcher.d.ts.map +1 -0
- package/dist/file-watcher.js +121 -0
- package/dist/file-watcher.js.map +1 -0
- package/dist/git-hooks-manager.d.ts +40 -0
- package/dist/git-hooks-manager.d.ts.map +1 -0
- package/dist/git-hooks-manager.js +210 -0
- package/dist/git-hooks-manager.js.map +1 -0
- package/dist/git-repository.d.ts +65 -0
- package/dist/git-repository.d.ts.map +1 -0
- package/dist/git-repository.js +352 -0
- package/dist/git-repository.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/plan-manager.d.ts +55 -0
- package/dist/plan-manager.d.ts.map +1 -0
- package/dist/plan-manager.js +208 -0
- package/dist/plan-manager.js.map +1 -0
- package/dist/plan-templates.d.ts +15 -0
- package/dist/plan-templates.d.ts.map +1 -0
- package/dist/plan-templates.js +127 -0
- package/dist/plan-templates.js.map +1 -0
- package/dist/types/index.d.ts +143 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +26 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types.d.ts +176 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/validation-engine.d.ts +26 -0
- package/dist/validation-engine.d.ts.map +1 -0
- package/dist/validation-engine.js +344 -0
- package/dist/validation-engine.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,352 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.GitRepository = void 0;
|
|
37
|
+
const simple_git_1 = require("simple-git");
|
|
38
|
+
const fs = __importStar(require("fs-extra"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
/**
|
|
41
|
+
* GitRepository - Handles all Git operations for CxtManager
|
|
42
|
+
* Implements Git-like commands and ensures .cxt/ folder is tracked
|
|
43
|
+
*/
|
|
44
|
+
class GitRepository {
|
|
45
|
+
constructor(projectRoot) {
|
|
46
|
+
this.projectRoot = projectRoot;
|
|
47
|
+
this.git = (0, simple_git_1.simpleGit)(projectRoot);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Ensure Git repository exists, initialize if needed
|
|
51
|
+
*/
|
|
52
|
+
async ensureGitRepo() {
|
|
53
|
+
const isRepo = await this.isGitRepo();
|
|
54
|
+
if (!isRepo) {
|
|
55
|
+
console.log('📁 Initializing Git repository...');
|
|
56
|
+
await this.git.init();
|
|
57
|
+
// Create .gitignore if it doesn't exist (trackInGit will be set later)
|
|
58
|
+
await this.ensureGitignore(true);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Check if current directory is a Git repository
|
|
63
|
+
*/
|
|
64
|
+
async isGitRepo() {
|
|
65
|
+
try {
|
|
66
|
+
await this.git.status();
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Add files and create a commit
|
|
75
|
+
*/
|
|
76
|
+
async addAndCommit(files, message, author) {
|
|
77
|
+
if (!await this.isGitRepo()) {
|
|
78
|
+
throw new Error('Not a Git repository.\n' +
|
|
79
|
+
' 💡 Run "git init" to initialize a Git repository\n' +
|
|
80
|
+
' 💡 Or run "cit init" which will initialize Git automatically');
|
|
81
|
+
}
|
|
82
|
+
// Ensure files is an array
|
|
83
|
+
const fileArray = Array.isArray(files) ? files : [files];
|
|
84
|
+
try {
|
|
85
|
+
// Add files to staging
|
|
86
|
+
await this.git.add(fileArray);
|
|
87
|
+
// Create commit with optional author attribution
|
|
88
|
+
if (author) {
|
|
89
|
+
await this.git.commit(message, undefined, {
|
|
90
|
+
'--author': author
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
await this.git.commit(message);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
if (error.message.includes('EACCES') || error.message.includes('permission denied')) {
|
|
99
|
+
throw new Error('Permission denied. Cannot write to Git repository.\n' +
|
|
100
|
+
' 💡 Check file system permissions\n' +
|
|
101
|
+
' 💡 Ensure you have write access to .git/ directory');
|
|
102
|
+
}
|
|
103
|
+
if (error.message.includes('not a git repository')) {
|
|
104
|
+
throw new Error('Not a Git repository.\n' +
|
|
105
|
+
' 💡 Run "git init" to initialize a Git repository\n' +
|
|
106
|
+
' 💡 Or run "cit init" which will initialize Git automatically');
|
|
107
|
+
}
|
|
108
|
+
throw error;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Get current Git status
|
|
113
|
+
*/
|
|
114
|
+
async getStatus() {
|
|
115
|
+
if (!await this.isGitRepo()) {
|
|
116
|
+
throw new Error('Not a Git repository.\n' +
|
|
117
|
+
' 💡 Run "git init" to initialize a Git repository\n' +
|
|
118
|
+
' 💡 Or run "cit init" which will initialize Git automatically');
|
|
119
|
+
}
|
|
120
|
+
try {
|
|
121
|
+
const status = await this.git.status();
|
|
122
|
+
return {
|
|
123
|
+
staged: status.staged,
|
|
124
|
+
modified: status.modified,
|
|
125
|
+
untracked: status.not_added
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
if (error.message.includes('not a git repository')) {
|
|
130
|
+
throw new Error('Not a Git repository.\n' +
|
|
131
|
+
' 💡 Run "git init" to initialize a Git repository\n' +
|
|
132
|
+
' 💡 Or run "cit init" which will initialize Git automatically');
|
|
133
|
+
}
|
|
134
|
+
throw error;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Get Git repository information
|
|
139
|
+
*/
|
|
140
|
+
async getInfo() {
|
|
141
|
+
if (!await this.isGitRepo()) {
|
|
142
|
+
return {
|
|
143
|
+
isRepo: false,
|
|
144
|
+
branch: '',
|
|
145
|
+
hasRemote: false,
|
|
146
|
+
commitCount: 0,
|
|
147
|
+
lastCommit: undefined
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
try {
|
|
151
|
+
const [status, branches, log] = await Promise.all([
|
|
152
|
+
this.git.status(),
|
|
153
|
+
this.git.branch(),
|
|
154
|
+
this.git.log({ maxCount: 1 }).catch(() => null)
|
|
155
|
+
]);
|
|
156
|
+
const commitCount = await this.getCommitCount();
|
|
157
|
+
// Check for remote
|
|
158
|
+
const remotes = await this.git.getRemotes(true);
|
|
159
|
+
const hasRemote = remotes.length > 0;
|
|
160
|
+
const remoteUrl = hasRemote ? remotes[0].refs.fetch : undefined;
|
|
161
|
+
// Build lastCommit object if we have log data
|
|
162
|
+
let lastCommit = undefined;
|
|
163
|
+
if (log?.latest) {
|
|
164
|
+
lastCommit = {
|
|
165
|
+
hash: log.latest.hash,
|
|
166
|
+
message: log.latest.message,
|
|
167
|
+
author: log.latest.author_name,
|
|
168
|
+
date: new Date(log.latest.date)
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
return {
|
|
172
|
+
isRepo: true,
|
|
173
|
+
branch: branches.current,
|
|
174
|
+
hasRemote,
|
|
175
|
+
remoteUrl,
|
|
176
|
+
commitCount,
|
|
177
|
+
lastCommit
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
return {
|
|
182
|
+
isRepo: true,
|
|
183
|
+
branch: '',
|
|
184
|
+
hasRemote: false,
|
|
185
|
+
commitCount: 0,
|
|
186
|
+
lastCommit: undefined
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Get file blame information
|
|
192
|
+
*/
|
|
193
|
+
async blame(filePath) {
|
|
194
|
+
try {
|
|
195
|
+
const blame = await this.git.raw(['blame', '--line-porcelain', filePath]);
|
|
196
|
+
return this.parseBlameOutput(blame);
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
console.warn(`Could not get blame for ${filePath}:`, error);
|
|
200
|
+
return [];
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Get commit log for a file
|
|
205
|
+
*/
|
|
206
|
+
async getFileHistory(filePath) {
|
|
207
|
+
try {
|
|
208
|
+
const log = await this.git.log({ file: filePath });
|
|
209
|
+
return log.all.map(commit => ({
|
|
210
|
+
hash: commit.hash,
|
|
211
|
+
message: commit.message,
|
|
212
|
+
author: commit.author_name,
|
|
213
|
+
email: commit.author_email,
|
|
214
|
+
date: new Date(commit.date),
|
|
215
|
+
refs: commit.refs
|
|
216
|
+
}));
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
console.warn(`Could not get history for ${filePath}:`, error);
|
|
220
|
+
return [];
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Get diff for a file or between commits
|
|
225
|
+
*/
|
|
226
|
+
async getDiff(filePath, fromCommit, toCommit) {
|
|
227
|
+
try {
|
|
228
|
+
const options = ['diff'];
|
|
229
|
+
if (fromCommit) {
|
|
230
|
+
options.push(fromCommit);
|
|
231
|
+
if (toCommit) {
|
|
232
|
+
options.push(toCommit);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
if (filePath) {
|
|
236
|
+
options.push('--', filePath);
|
|
237
|
+
}
|
|
238
|
+
return await this.git.raw(options);
|
|
239
|
+
}
|
|
240
|
+
catch (error) {
|
|
241
|
+
console.warn('Could not get diff:', error);
|
|
242
|
+
return '';
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Checkout a specific commit or branch
|
|
247
|
+
*/
|
|
248
|
+
async checkout(target) {
|
|
249
|
+
await this.git.checkout(target);
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Get list of branches
|
|
253
|
+
*/
|
|
254
|
+
async getBranches() {
|
|
255
|
+
const branches = await this.git.branch();
|
|
256
|
+
return {
|
|
257
|
+
current: branches.current,
|
|
258
|
+
all: branches.all
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
// Private helper methods
|
|
262
|
+
async getCommitCount() {
|
|
263
|
+
try {
|
|
264
|
+
const result = await this.git.raw(['rev-list', '--count', 'HEAD']);
|
|
265
|
+
return parseInt(result.trim(), 10);
|
|
266
|
+
}
|
|
267
|
+
catch {
|
|
268
|
+
return 0;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
parseBlameOutput(blameText) {
|
|
272
|
+
// TODO: Implement proper blame parsing
|
|
273
|
+
// This is a simplified version - full implementation would parse the porcelain format
|
|
274
|
+
const lines = blameText.split('\n');
|
|
275
|
+
return lines.map((line, index) => ({
|
|
276
|
+
line: index + 1,
|
|
277
|
+
content: line,
|
|
278
|
+
author: 'unknown',
|
|
279
|
+
hash: 'unknown',
|
|
280
|
+
timestamp: new Date()
|
|
281
|
+
}));
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Ensure .gitignore exists and configure .cxt/ tracking
|
|
285
|
+
* @param trackInGit - If false, adds .cxt/ to .gitignore for privacy (default: true)
|
|
286
|
+
*/
|
|
287
|
+
async ensureGitignore(trackInGit = true) {
|
|
288
|
+
const gitignorePath = path.join(this.projectRoot, '.gitignore');
|
|
289
|
+
// Default .gitignore content for CxtManager projects
|
|
290
|
+
const defaultGitignore = `# Dependencies
|
|
291
|
+
node_modules/
|
|
292
|
+
npm-debug.log*
|
|
293
|
+
|
|
294
|
+
# Build outputs
|
|
295
|
+
dist/
|
|
296
|
+
build/
|
|
297
|
+
|
|
298
|
+
# Environment variables
|
|
299
|
+
.env
|
|
300
|
+
.env.local
|
|
301
|
+
|
|
302
|
+
# IDE files
|
|
303
|
+
.vscode/settings.json
|
|
304
|
+
.idea/
|
|
305
|
+
|
|
306
|
+
# OS files
|
|
307
|
+
.DS_Store
|
|
308
|
+
Thumbs.db
|
|
309
|
+
|
|
310
|
+
${trackInGit ? '# CxtManager: Track .cxt/ folder - this is important!\n# .cxt/ folder should be committed to share context with team' : '# CxtManager: .cxt/ folder is private (not tracked in Git)\n.cxt/'}
|
|
311
|
+
`;
|
|
312
|
+
if (!await fs.pathExists(gitignorePath)) {
|
|
313
|
+
await fs.writeFile(gitignorePath, defaultGitignore);
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
const gitignore = await fs.readFile(gitignorePath, 'utf-8');
|
|
317
|
+
const hasCxtIgnore = gitignore.includes('.cxt/') || gitignore.includes('.cxt');
|
|
318
|
+
if (trackInGit && hasCxtIgnore) {
|
|
319
|
+
// Remove .cxt/ from gitignore if it exists (only CxtManager entries)
|
|
320
|
+
const lines = gitignore.split('\n');
|
|
321
|
+
const updated = lines
|
|
322
|
+
.filter((line, index) => {
|
|
323
|
+
// Remove lines that are .cxt/ or .cxt (with or without comment)
|
|
324
|
+
const trimmed = line.trim();
|
|
325
|
+
if (trimmed === '.cxt/' || trimmed === '.cxt' || trimmed.startsWith('.cxt/') || trimmed.startsWith('.cxt ')) {
|
|
326
|
+
// Also remove preceding CxtManager comment if present
|
|
327
|
+
if (index > 0 && lines[index - 1].includes('CxtManager')) {
|
|
328
|
+
return false; // Remove comment line too
|
|
329
|
+
}
|
|
330
|
+
return false;
|
|
331
|
+
}
|
|
332
|
+
// Remove CxtManager comment lines about .cxt/
|
|
333
|
+
if (trimmed.includes('CxtManager') && (trimmed.includes('.cxt/') || trimmed.includes('.cxt'))) {
|
|
334
|
+
return false;
|
|
335
|
+
}
|
|
336
|
+
return true;
|
|
337
|
+
})
|
|
338
|
+
.join('\n');
|
|
339
|
+
await fs.writeFile(gitignorePath, updated);
|
|
340
|
+
console.log('✅ Removed .cxt/ from .gitignore (context will be tracked in Git)');
|
|
341
|
+
}
|
|
342
|
+
else if (!trackInGit && !hasCxtIgnore) {
|
|
343
|
+
// Add .cxt/ to gitignore
|
|
344
|
+
const updated = gitignore.trim() + '\n\n# CxtManager: .cxt/ folder is private (not tracked in Git)\n.cxt/\n';
|
|
345
|
+
await fs.writeFile(gitignorePath, updated);
|
|
346
|
+
console.log('✅ Added .cxt/ to .gitignore (context will remain private)');
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
exports.GitRepository = GitRepository;
|
|
352
|
+
//# sourceMappingURL=git-repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-repository.js","sourceRoot":"","sources":["../src/git-repository.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @cxtmanager/core - Core functionality for CxtManager
|
|
3
|
+
* Git for AI Context - Stop being the context monkey
|
|
4
|
+
*/
|
|
5
|
+
export { ContextManager } from './context-manager';
|
|
6
|
+
export { GitRepository } from './git-repository';
|
|
7
|
+
export { FileWatcher } from './file-watcher';
|
|
8
|
+
export { ValidationEngine } from './validation-engine';
|
|
9
|
+
export { PlanManager } from './plan-manager';
|
|
10
|
+
export { PlanTemplates } from './plan-templates';
|
|
11
|
+
export { GitHooksManager } from './git-hooks-manager';
|
|
12
|
+
export * from './types';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,cAAc,SAAS,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @cxtmanager/core - Core functionality for CxtManager
|
|
4
|
+
* Git for AI Context - Stop being the context monkey
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
18
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.GitHooksManager = exports.PlanTemplates = exports.PlanManager = exports.ValidationEngine = exports.FileWatcher = exports.GitRepository = exports.ContextManager = void 0;
|
|
22
|
+
var context_manager_1 = require("./context-manager");
|
|
23
|
+
Object.defineProperty(exports, "ContextManager", { enumerable: true, get: function () { return context_manager_1.ContextManager; } });
|
|
24
|
+
var git_repository_1 = require("./git-repository");
|
|
25
|
+
Object.defineProperty(exports, "GitRepository", { enumerable: true, get: function () { return git_repository_1.GitRepository; } });
|
|
26
|
+
var file_watcher_1 = require("./file-watcher");
|
|
27
|
+
Object.defineProperty(exports, "FileWatcher", { enumerable: true, get: function () { return file_watcher_1.FileWatcher; } });
|
|
28
|
+
var validation_engine_1 = require("./validation-engine");
|
|
29
|
+
Object.defineProperty(exports, "ValidationEngine", { enumerable: true, get: function () { return validation_engine_1.ValidationEngine; } });
|
|
30
|
+
var plan_manager_1 = require("./plan-manager");
|
|
31
|
+
Object.defineProperty(exports, "PlanManager", { enumerable: true, get: function () { return plan_manager_1.PlanManager; } });
|
|
32
|
+
var plan_templates_1 = require("./plan-templates");
|
|
33
|
+
Object.defineProperty(exports, "PlanTemplates", { enumerable: true, get: function () { return plan_templates_1.PlanTemplates; } });
|
|
34
|
+
var git_hooks_manager_1 = require("./git-hooks-manager");
|
|
35
|
+
Object.defineProperty(exports, "GitHooksManager", { enumerable: true, get: function () { return git_hooks_manager_1.GitHooksManager; } });
|
|
36
|
+
__exportStar(require("./types"), exports);
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;AAEH,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,yDAAuD;AAA9C,qHAAA,gBAAgB,OAAA;AACzB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,yDAAsD;AAA7C,oHAAA,eAAe,OAAA;AAExB,0CAAwB"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { GitRepository } from './git-repository';
|
|
2
|
+
import { CxtConfig, SyncPlanOptions, SyncPlanResult } from './types';
|
|
3
|
+
export declare class PlanManager {
|
|
4
|
+
private cxtPath;
|
|
5
|
+
private planPath;
|
|
6
|
+
private planHistoryPath;
|
|
7
|
+
private gitRepo;
|
|
8
|
+
private config;
|
|
9
|
+
constructor(cxtPath: string, gitRepo: GitRepository, config: CxtConfig);
|
|
10
|
+
/**
|
|
11
|
+
* Get current branch name
|
|
12
|
+
*/
|
|
13
|
+
getCurrentBranch(): Promise<string>;
|
|
14
|
+
/**
|
|
15
|
+
* Get sanitized branch name for file system (remove special chars)
|
|
16
|
+
*/
|
|
17
|
+
private sanitizeBranchName;
|
|
18
|
+
/**
|
|
19
|
+
* Get path to branch-specific plan backup
|
|
20
|
+
*/
|
|
21
|
+
private getBranchPlanPath;
|
|
22
|
+
/**
|
|
23
|
+
* Save current plan.md to .plan-history/{branch}.md
|
|
24
|
+
*/
|
|
25
|
+
saveCurrentPlan(branch: string): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Restore plan.md from .plan-history/{branch}.md
|
|
28
|
+
*/
|
|
29
|
+
restorePlan(branch: string): Promise<boolean>;
|
|
30
|
+
/**
|
|
31
|
+
* Create blank plan.md template
|
|
32
|
+
*/
|
|
33
|
+
createBlankPlan(template?: 'minimal' | 'detailed'): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Check if plan.md has uncommitted changes
|
|
36
|
+
*/
|
|
37
|
+
hasUncommittedChanges(): Promise<boolean>;
|
|
38
|
+
/**
|
|
39
|
+
* Main sync method: save current, restore for new branch
|
|
40
|
+
*/
|
|
41
|
+
syncPlan(options?: SyncPlanOptions): Promise<SyncPlanResult>;
|
|
42
|
+
/**
|
|
43
|
+
* Check if branch has saved plan
|
|
44
|
+
*/
|
|
45
|
+
hasBranchPlan(branch: string): Promise<boolean>;
|
|
46
|
+
/**
|
|
47
|
+
* List all saved branch plans
|
|
48
|
+
*/
|
|
49
|
+
listBranchPlans(): Promise<string[]>;
|
|
50
|
+
/**
|
|
51
|
+
* Archive completed branch plan
|
|
52
|
+
*/
|
|
53
|
+
archivePlan(branch: string): Promise<void>;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=plan-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-manager.d.ts","sourceRoot":"","sources":["../src/plan-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGrE,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,MAAM,CAAY;gBAGxB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,SAAS;IASnB;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAKzC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAS1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAKzB;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBpD;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYnD;;OAEG;IACG,eAAe,CAAC,QAAQ,GAAE,SAAS,GAAG,UAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAWlF;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC;IAU/C;;OAEG;IACG,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC;IAyDtE;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKrD;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAW1C;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAUjD"}
|