@qelos/aidev 0.1.12 → 0.1.14
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/aidev.log +518 -0
- package/dist/__tests__/git.test.js +340 -0
- package/dist/__tests__/git.test.js.map +1 -1
- package/dist/__tests__/github.test.d.ts +2 -0
- package/dist/__tests__/github.test.d.ts.map +1 -0
- package/dist/__tests__/github.test.js +209 -0
- package/dist/__tests__/github.test.js.map +1 -0
- package/dist/__tests__/run.test.js +66 -0
- package/dist/__tests__/run.test.js.map +1 -1
- package/dist/commands/help.d.ts.map +1 -1
- package/dist/commands/help.js +18 -1
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +30 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/run.d.ts +6 -0
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +45 -23
- package/dist/commands/run.js.map +1 -1
- package/dist/git.d.ts +5 -2
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +65 -4
- package/dist/git.js.map +1 -1
- package/dist/github.d.ts +11 -0
- package/dist/github.d.ts.map +1 -0
- package/dist/github.js +69 -0
- package/dist/github.js.map +1 -0
- package/package.json +2 -2
package/dist/git.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isProtectedBranch = isProtectedBranch;
|
|
4
|
+
exports.getCurrentBranch = getCurrentBranch;
|
|
3
5
|
exports.remoteBranchExists = remoteBranchExists;
|
|
6
|
+
exports.stashChanges = stashChanges;
|
|
4
7
|
exports.fetchAndCheckout = fetchAndCheckout;
|
|
5
8
|
exports.fetchAndCheckoutBranch = fetchAndCheckoutBranch;
|
|
6
9
|
exports.createBranch = createBranch;
|
|
@@ -24,11 +27,33 @@ function git(args, cwd) {
|
|
|
24
27
|
status: result.status ?? 1,
|
|
25
28
|
};
|
|
26
29
|
}
|
|
30
|
+
const PROTECTED_BRANCHES = new Set(['main', 'master', 'develop', 'production']);
|
|
31
|
+
function isProtectedBranch(branch) {
|
|
32
|
+
return PROTECTED_BRANCHES.has(branch.toLowerCase());
|
|
33
|
+
}
|
|
34
|
+
function getCurrentBranch() {
|
|
35
|
+
const result = git(['rev-parse', '--abbrev-ref', 'HEAD']);
|
|
36
|
+
if (result.status !== 0)
|
|
37
|
+
return null;
|
|
38
|
+
return result.stdout.trim() || null;
|
|
39
|
+
}
|
|
27
40
|
function remoteBranchExists(remote, branch) {
|
|
28
41
|
const result = git(['ls-remote', '--heads', remote, branch]);
|
|
29
42
|
return result.status === 0 && result.stdout.trim().length > 0;
|
|
30
43
|
}
|
|
44
|
+
function stashChanges() {
|
|
45
|
+
if (!hasChanges())
|
|
46
|
+
return true;
|
|
47
|
+
logger_1.logger.debug('git stash push -u -m aidev-autostash');
|
|
48
|
+
const result = git(['stash', 'push', '-u', '-m', 'aidev-autostash']);
|
|
49
|
+
if (result.status !== 0) {
|
|
50
|
+
logger_1.logger.warn(`git stash failed: ${result.stderr}`);
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
31
55
|
function fetchAndCheckout(remote, baseBranch) {
|
|
56
|
+
stashChanges();
|
|
32
57
|
logger_1.logger.debug(`git fetch ${remote}`);
|
|
33
58
|
const fetch = git(['fetch', remote]);
|
|
34
59
|
if (fetch.status !== 0) {
|
|
@@ -47,9 +72,18 @@ function fetchAndCheckout(remote, baseBranch) {
|
|
|
47
72
|
logger_1.logger.error(`git pull failed: ${pull.stderr}`);
|
|
48
73
|
return false;
|
|
49
74
|
}
|
|
75
|
+
const localRev = git(['rev-parse', 'HEAD']);
|
|
76
|
+
const remoteRev = git(['rev-parse', `${remote}/${baseBranch}`]);
|
|
77
|
+
if (localRev.status === 0 && remoteRev.status === 0 &&
|
|
78
|
+
localRev.stdout.trim() !== remoteRev.stdout.trim()) {
|
|
79
|
+
logger_1.logger.error(`Local ${baseBranch} is out of sync with ${remote}/${baseBranch} after pull — ` +
|
|
80
|
+
'local branch may have diverged. Please resolve manually.');
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
50
83
|
return true;
|
|
51
84
|
}
|
|
52
85
|
function fetchAndCheckoutBranch(remote, branch) {
|
|
86
|
+
stashChanges();
|
|
53
87
|
logger_1.logger.debug(`git fetch ${remote}`);
|
|
54
88
|
const fetchResult = git(['fetch', remote]);
|
|
55
89
|
if (fetchResult.status !== 0) {
|
|
@@ -74,7 +108,14 @@ function fetchAndCheckoutBranch(remote, branch) {
|
|
|
74
108
|
}
|
|
75
109
|
return true;
|
|
76
110
|
}
|
|
77
|
-
function createBranch(branch) {
|
|
111
|
+
function createBranch(branch, expectedBase) {
|
|
112
|
+
if (expectedBase) {
|
|
113
|
+
const current = getCurrentBranch();
|
|
114
|
+
if (current !== expectedBase) {
|
|
115
|
+
logger_1.logger.error(`Cannot create branch "${branch}": expected to be on "${expectedBase}" but currently on "${current}"`);
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
78
119
|
logger_1.logger.debug(`git checkout -b ${branch}`);
|
|
79
120
|
const result = git(['checkout', '-b', branch]);
|
|
80
121
|
if (result.status !== 0) {
|
|
@@ -91,7 +132,18 @@ function addAll() {
|
|
|
91
132
|
const result = git(['add', '-A']);
|
|
92
133
|
return result.status === 0;
|
|
93
134
|
}
|
|
94
|
-
function commit(message) {
|
|
135
|
+
function commit(message, expectedBranch) {
|
|
136
|
+
if (expectedBranch) {
|
|
137
|
+
const current = getCurrentBranch();
|
|
138
|
+
if (current !== expectedBranch) {
|
|
139
|
+
logger_1.logger.error(`Refusing to commit: expected branch "${expectedBranch}" but currently on "${current}"`);
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
if (isProtectedBranch(current)) {
|
|
143
|
+
logger_1.logger.error(`Refusing to commit directly to protected branch "${current}"`);
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
95
147
|
logger_1.logger.debug(`git commit -m "${message}"`);
|
|
96
148
|
const result = git(['commit', '-m', message]);
|
|
97
149
|
if (result.status !== 0) {
|
|
@@ -101,8 +153,17 @@ function commit(message) {
|
|
|
101
153
|
return true;
|
|
102
154
|
}
|
|
103
155
|
function push(remote, branch) {
|
|
104
|
-
|
|
105
|
-
|
|
156
|
+
const current = getCurrentBranch();
|
|
157
|
+
if (current !== branch) {
|
|
158
|
+
logger_1.logger.error(`Refusing to push: current branch "${current}" does not match target branch "${branch}"`);
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
if (isProtectedBranch(branch)) {
|
|
162
|
+
logger_1.logger.error(`Refusing to push directly to protected branch "${branch}"`);
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
logger_1.logger.debug(`git push ${remote} HEAD:refs/heads/${branch}`);
|
|
166
|
+
const result = git(['push', remote, `HEAD:refs/heads/${branch}`]);
|
|
106
167
|
if (result.status !== 0) {
|
|
107
168
|
logger_1.logger.error(`git push failed: ${result.stderr}`);
|
|
108
169
|
return false;
|
package/dist/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
|
package/dist/github.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare function isGhInstalled(): boolean;
|
|
2
|
+
export declare function isGhAuthenticated(): boolean;
|
|
3
|
+
export declare function getRemoteUrl(remote: string): string;
|
|
4
|
+
export declare function isGitHubRemote(remote: string): boolean;
|
|
5
|
+
export interface PullRequestResult {
|
|
6
|
+
success: boolean;
|
|
7
|
+
url: string;
|
|
8
|
+
error: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function createPullRequest(baseBranch: string, headBranch: string, title: string, body: string): PullRequestResult;
|
|
11
|
+
//# sourceMappingURL=github.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../src/github.ts"],"names":[],"mappings":"AA4BA,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAI3C;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAInD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAGtD;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,iBAAiB,CAkBnB"}
|
package/dist/github.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isGhInstalled = isGhInstalled;
|
|
4
|
+
exports.isGhAuthenticated = isGhAuthenticated;
|
|
5
|
+
exports.getRemoteUrl = getRemoteUrl;
|
|
6
|
+
exports.isGitHubRemote = isGitHubRemote;
|
|
7
|
+
exports.createPullRequest = createPullRequest;
|
|
8
|
+
const node_child_process_1 = require("node:child_process");
|
|
9
|
+
const platform_1 = require("./platform");
|
|
10
|
+
const logger_1 = require("./logger");
|
|
11
|
+
function gh(args) {
|
|
12
|
+
const result = (0, node_child_process_1.spawnSync)('gh', args, {
|
|
13
|
+
encoding: 'utf8',
|
|
14
|
+
timeout: 30000,
|
|
15
|
+
});
|
|
16
|
+
return {
|
|
17
|
+
stdout: result.stdout || '',
|
|
18
|
+
stderr: result.stderr || '',
|
|
19
|
+
status: result.status ?? 1,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function git(args) {
|
|
23
|
+
const result = (0, node_child_process_1.spawnSync)('git', args, {
|
|
24
|
+
cwd: process.cwd(),
|
|
25
|
+
encoding: 'utf8',
|
|
26
|
+
});
|
|
27
|
+
return {
|
|
28
|
+
stdout: result.stdout || '',
|
|
29
|
+
stderr: result.stderr || '',
|
|
30
|
+
status: result.status ?? 1,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
function isGhInstalled() {
|
|
34
|
+
return (0, platform_1.commandExists)('gh');
|
|
35
|
+
}
|
|
36
|
+
function isGhAuthenticated() {
|
|
37
|
+
if (!isGhInstalled())
|
|
38
|
+
return false;
|
|
39
|
+
const result = gh(['auth', 'status']);
|
|
40
|
+
return result.status === 0;
|
|
41
|
+
}
|
|
42
|
+
function getRemoteUrl(remote) {
|
|
43
|
+
const result = git(['remote', 'get-url', remote]);
|
|
44
|
+
if (result.status !== 0)
|
|
45
|
+
return '';
|
|
46
|
+
return result.stdout.trim();
|
|
47
|
+
}
|
|
48
|
+
function isGitHubRemote(remote) {
|
|
49
|
+
const url = getRemoteUrl(remote);
|
|
50
|
+
return /github\.com/i.test(url);
|
|
51
|
+
}
|
|
52
|
+
function createPullRequest(baseBranch, headBranch, title, body) {
|
|
53
|
+
logger_1.logger.debug(`Creating PR: ${headBranch} → ${baseBranch}`);
|
|
54
|
+
const result = gh([
|
|
55
|
+
'pr', 'create',
|
|
56
|
+
'--base', baseBranch,
|
|
57
|
+
'--head', headBranch,
|
|
58
|
+
'--title', title,
|
|
59
|
+
'--body', body,
|
|
60
|
+
]);
|
|
61
|
+
if (result.status !== 0) {
|
|
62
|
+
logger_1.logger.warn(`gh pr create failed: ${result.stderr.trim()}`);
|
|
63
|
+
return { success: false, url: '', error: result.stderr.trim() };
|
|
64
|
+
}
|
|
65
|
+
const url = result.stdout.trim();
|
|
66
|
+
logger_1.logger.info(`PR created: ${url}`);
|
|
67
|
+
return { success: true, url, error: '' };
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=github.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../src/github.ts"],"names":[],"mappings":";;AA4BA,sCAEC;AAED,8CAIC;AAED,oCAIC;AAED,wCAGC;AAQD,8CAuBC;AA9ED,2DAA+C;AAC/C,yCAA2C;AAC3C,qCAAkC;AAElC,SAAS,EAAE,CAAC,IAAc;IACxB,MAAM,MAAM,GAAG,IAAA,8BAAS,EAAC,IAAI,EAAE,IAAI,EAAE;QACnC,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,KAAM;KAChB,CAAC,CAAC;IACH,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC;KAC3B,CAAC;AACJ,CAAC;AAED,SAAS,GAAG,CAAC,IAAc;IACzB,MAAM,MAAM,GAAG,IAAA,8BAAS,EAAC,KAAK,EAAE,IAAI,EAAE;QACpC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,QAAQ,EAAE,MAAM;KACjB,CAAC,CAAC;IACH,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC;KAC3B,CAAC;AACJ,CAAC;AAED,SAAgB,aAAa;IAC3B,OAAO,IAAA,wBAAa,EAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,SAAgB,iBAAiB;IAC/B,IAAI,CAAC,aAAa,EAAE;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,SAAgB,YAAY,CAAC,MAAc;IACzC,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED,SAAgB,cAAc,CAAC,MAAc;IAC3C,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACjC,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC;AAQD,SAAgB,iBAAiB,CAC/B,UAAkB,EAClB,UAAkB,EAClB,KAAa,EACb,IAAY;IAEZ,eAAM,CAAC,KAAK,CAAC,gBAAgB,UAAU,MAAM,UAAU,EAAE,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,UAAU;QACpB,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,eAAM,CAAC,IAAI,CAAC,wBAAwB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC5D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;IAClE,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACjC,eAAM,CAAC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC;IAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAC3C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qelos/aidev",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.14",
|
|
4
4
|
"description": "AI-powered task executor — polls ClickUp (and more) to implement tasks with Claude or Cursor",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"bin": {
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"scripts": {
|
|
14
14
|
"build": "tsc && node -e \"if(process.platform!=='win32')require('fs').chmodSync('dist/cli.js',0o755)\"",
|
|
15
15
|
"dev": "tsx src/cli.ts",
|
|
16
|
-
"test": "node --require tsx/cjs --test src/__tests__
|
|
16
|
+
"test": "node --require tsx/cjs --test 'src/__tests__/**/*.test.ts'",
|
|
17
17
|
"prepublishOnly": "npm run build"
|
|
18
18
|
},
|
|
19
19
|
"keywords": [
|