@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/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
- logger_1.logger.debug(`git push ${remote} ${branch}`);
105
- const result = git(['push', remote, branch]);
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":"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"}
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
@@ -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.12",
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__/git.test.ts src/__tests__/platform.test.ts src/__tests__/schedule.test.ts src/__tests__/init.test.ts src/__tests__/run.test.ts src/__tests__/permissions.test.ts src/__tests__/providers.test.ts",
16
+ "test": "node --require tsx/cjs --test 'src/__tests__/**/*.test.ts'",
17
17
  "prepublishOnly": "npm run build"
18
18
  },
19
19
  "keywords": [