imcodes 2026.3.138 → 2026.3.141

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.
Files changed (38) hide show
  1. package/dist/agent/session-manager.d.ts.map +1 -1
  2. package/dist/agent/session-manager.js +6 -0
  3. package/dist/agent/session-manager.js.map +1 -1
  4. package/dist/daemon/command-handler.d.ts.map +1 -1
  5. package/dist/daemon/command-handler.js +8 -0
  6. package/dist/daemon/command-handler.js.map +1 -1
  7. package/dist/daemon/lifecycle.d.ts.map +1 -1
  8. package/dist/daemon/lifecycle.js +25 -0
  9. package/dist/daemon/lifecycle.js.map +1 -1
  10. package/dist/daemon/repo-handler.d.ts +7 -0
  11. package/dist/daemon/repo-handler.d.ts.map +1 -0
  12. package/dist/daemon/repo-handler.js +301 -0
  13. package/dist/daemon/repo-handler.js.map +1 -0
  14. package/dist/repo/cache.d.ts +12 -0
  15. package/dist/repo/cache.d.ts.map +1 -0
  16. package/dist/repo/cache.js +46 -0
  17. package/dist/repo/cache.js.map +1 -0
  18. package/dist/repo/detector.d.ts +25 -0
  19. package/dist/repo/detector.d.ts.map +1 -0
  20. package/dist/repo/detector.js +237 -0
  21. package/dist/repo/detector.js.map +1 -0
  22. package/dist/repo/github-provider.d.ts +15 -0
  23. package/dist/repo/github-provider.d.ts.map +1 -0
  24. package/dist/repo/github-provider.js +170 -0
  25. package/dist/repo/github-provider.js.map +1 -0
  26. package/dist/repo/gitlab-provider.d.ts +17 -0
  27. package/dist/repo/gitlab-provider.d.ts.map +1 -0
  28. package/dist/repo/gitlab-provider.js +202 -0
  29. package/dist/repo/gitlab-provider.js.map +1 -0
  30. package/dist/repo/provider.d.ts +26 -0
  31. package/dist/repo/provider.d.ts.map +1 -0
  32. package/dist/repo/provider.js +6 -0
  33. package/dist/repo/provider.js.map +1 -0
  34. package/dist/repo/types.d.ts +77 -0
  35. package/dist/repo/types.d.ts.map +1 -0
  36. package/dist/repo/types.js +4 -0
  37. package/dist/repo/types.js.map +1 -0
  38. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/repo/detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /** GitHub RepoProvider — uses `gh api` (REST) via execFile. */
2
+ import type { RepoContext, RepoListResult, RepoIssue, RepoPR, RepoBranch, RepoCommit } from './types.js';
3
+ import type { RepoProvider, ListOptions, CommitListOptions } from './provider.js';
4
+ export declare class GitHubProvider implements RepoProvider {
5
+ private readonly owner;
6
+ private readonly repo;
7
+ private readonly projectDir;
8
+ constructor(owner: string, repo: string, projectDir: string);
9
+ detect(projectDir: string): Promise<RepoContext>;
10
+ listIssues(opts?: ListOptions): Promise<RepoListResult<RepoIssue>>;
11
+ listPRs(opts?: ListOptions): Promise<RepoListResult<RepoPR>>;
12
+ listBranches(): Promise<RepoListResult<RepoBranch>>;
13
+ listCommits(opts?: CommitListOptions): Promise<RepoListResult<RepoCommit>>;
14
+ }
15
+ //# sourceMappingURL=github-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-provider.d.ts","sourceRoot":"","sources":["../../src/repo/github-provider.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAK/D,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,SAAS,EACT,MAAM,EACN,UAAU,EACV,UAAU,EAEX,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAqBlF,qBAAa,cAAe,YAAW,YAAY;IAE/C,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAFV,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM;IAW/B,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAQhD,UAAU,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IA+BlE,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IA+B5D,YAAY,IAAI,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IA+CnD,WAAW,CAAC,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;CAiCjF"}
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ /** GitHub RepoProvider — uses `gh api` (REST) via execFile. */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.GitHubProvider = void 0;
5
+ const node_child_process_1 = require("node:child_process");
6
+ const node_util_1 = require("node:util");
7
+ const provider_js_1 = require("./provider.js");
8
+ const detector_js_1 = require("./detector.js");
9
+ const execFileAsync = (0, node_util_1.promisify)(node_child_process_1.execFile);
10
+ /** Translate gh CLI failures into typed RepoError. */
11
+ function translateError(err) {
12
+ if (err && typeof err === 'object') {
13
+ const e = err;
14
+ const exitCode = e.exitCode ?? e.code;
15
+ const stderr = e.stderr ?? '';
16
+ if (exitCode === 4 || /auth/i.test(stderr))
17
+ return 'unauthorized';
18
+ if (/403|429|rate.?limit/i.test(stderr))
19
+ return 'rate_limited';
20
+ }
21
+ return 'cli_error';
22
+ }
23
+ const SAFE_NAME_RE = /^[a-zA-Z0-9._-]+$/;
24
+ class GitHubProvider {
25
+ owner;
26
+ repo;
27
+ projectDir;
28
+ constructor(owner, repo, projectDir) {
29
+ this.owner = owner;
30
+ this.repo = repo;
31
+ this.projectDir = projectDir;
32
+ if (!SAFE_NAME_RE.test(owner) || !SAFE_NAME_RE.test(repo)) {
33
+ throw new Error(`Invalid owner/repo: ${owner}/${repo}`);
34
+ }
35
+ }
36
+ /* ------------------------------------------------------------------ */
37
+ /* detect */
38
+ /* ------------------------------------------------------------------ */
39
+ async detect(projectDir) {
40
+ return (0, detector_js_1.detectRepo)(projectDir);
41
+ }
42
+ /* ------------------------------------------------------------------ */
43
+ /* listIssues */
44
+ /* ------------------------------------------------------------------ */
45
+ async listIssues(opts) {
46
+ const page = opts?.page ?? 1;
47
+ const perPage = opts?.perPage ?? provider_js_1.DEFAULT_PAGE_SIZE;
48
+ const state = opts?.state ?? 'open';
49
+ const jq = `[.[] | select(.pull_request == null) | {id: (.id | tostring), number, title, body: (.body // ""), state, author: .user.login, labels: [.labels[].name], url: .html_url, assignee: (.assignee.login // null), createdAt: (.created_at | fromdateiso8601), updatedAt: (.updated_at | fromdateiso8601)}]`;
50
+ try {
51
+ const { stdout } = await execFileAsync('gh', [
52
+ 'api',
53
+ `/repos/${this.owner}/${this.repo}/issues`,
54
+ '-q', jq,
55
+ '-f', `state=${state}`,
56
+ '-f', `per_page=${perPage}`,
57
+ '-f', `page=${page}`,
58
+ ], { cwd: this.projectDir, timeout: 15000, maxBuffer: 10 * 1024 * 1024 });
59
+ const items = JSON.parse(stdout || '[]');
60
+ return { items, page, hasMore: items.length === perPage, projectDir: this.projectDir };
61
+ }
62
+ catch (err) {
63
+ const code = translateError(err);
64
+ const error = new Error(`gh error: ${code}`);
65
+ error.code = code;
66
+ throw error;
67
+ }
68
+ }
69
+ /* ------------------------------------------------------------------ */
70
+ /* listPRs */
71
+ /* ------------------------------------------------------------------ */
72
+ async listPRs(opts) {
73
+ const page = opts?.page ?? 1;
74
+ const perPage = opts?.perPage ?? provider_js_1.DEFAULT_PAGE_SIZE;
75
+ const state = opts?.state ?? 'open';
76
+ const jq = `[.[] | {number, title, state: (if .merged_at then "merged" elif .state == "closed" then "closed" else "open" end), author: .user.login, head: .head.ref, base: .base.ref, url: .html_url, createdAt: (.created_at | fromdateiso8601), updatedAt: (.updated_at | fromdateiso8601), reviewDecision: null, draft: .draft, labels: [.labels[].name]}]`;
77
+ try {
78
+ const { stdout } = await execFileAsync('gh', [
79
+ 'api',
80
+ `/repos/${this.owner}/${this.repo}/pulls`,
81
+ '-q', jq,
82
+ '-f', `state=${state}`,
83
+ '-f', `per_page=${perPage}`,
84
+ '-f', `page=${page}`,
85
+ ], { cwd: this.projectDir, timeout: 15000, maxBuffer: 10 * 1024 * 1024 });
86
+ const items = JSON.parse(stdout || '[]');
87
+ return { items, page, hasMore: items.length === perPage, projectDir: this.projectDir };
88
+ }
89
+ catch (err) {
90
+ const code = translateError(err);
91
+ const error = new Error(`gh error: ${code}`);
92
+ error.code = code;
93
+ throw error;
94
+ }
95
+ }
96
+ /* ------------------------------------------------------------------ */
97
+ /* listBranches */
98
+ /* ------------------------------------------------------------------ */
99
+ async listBranches() {
100
+ try {
101
+ // Fetch branches, current branch, and default branch in parallel
102
+ const [branchesResult, currentResult, defaultResult] = await Promise.all([
103
+ execFileAsync('gh', [
104
+ 'api',
105
+ `/repos/${this.owner}/${this.repo}/branches`,
106
+ '-q', `[.[] | {name, lastCommitDate: (.commit.commit.committer.date | fromdateiso8601)}]`,
107
+ '-f', `per_page=100`,
108
+ ], { cwd: this.projectDir, timeout: 15000 }),
109
+ execFileAsync('git', [
110
+ 'branch', '--show-current',
111
+ ], { cwd: this.projectDir, timeout: 3000 }).catch(() => ({ stdout: '' })),
112
+ execFileAsync('gh', [
113
+ 'api',
114
+ `/repos/${this.owner}/${this.repo}`,
115
+ '-q', '.default_branch',
116
+ ], { cwd: this.projectDir, timeout: 10000 }).catch(() => ({ stdout: '' })),
117
+ ]);
118
+ const currentBranch = currentResult.stdout.trim();
119
+ const defaultBranch = defaultResult.stdout.trim();
120
+ const raw = JSON.parse(branchesResult.stdout || '[]');
121
+ const items = raw.map((b) => ({
122
+ name: b.name,
123
+ isDefault: b.name === defaultBranch,
124
+ isCurrent: b.name === currentBranch,
125
+ lastCommitDate: b.lastCommitDate,
126
+ }));
127
+ return { items, page: 1, hasMore: items.length === 100, projectDir: this.projectDir };
128
+ }
129
+ catch (err) {
130
+ const code = translateError(err);
131
+ const error = new Error(`gh error: ${code}`);
132
+ error.code = code;
133
+ throw error;
134
+ }
135
+ }
136
+ /* ------------------------------------------------------------------ */
137
+ /* listCommits */
138
+ /* ------------------------------------------------------------------ */
139
+ async listCommits(opts) {
140
+ const page = opts?.page ?? 1;
141
+ const perPage = opts?.perPage ?? provider_js_1.DEFAULT_PAGE_SIZE;
142
+ const jq = `[.[] | {sha, shortSha: .sha[:7], message: .commit.message, author: (.commit.author.name // .author.login // "unknown"), date: (.commit.author.date | fromdateiso8601), url: .html_url}]`;
143
+ const args = [
144
+ 'api',
145
+ `/repos/${this.owner}/${this.repo}/commits`,
146
+ '-q', jq,
147
+ '-f', `per_page=${perPage}`,
148
+ '-f', `page=${page}`,
149
+ ];
150
+ if (opts?.branch) {
151
+ args.push('-f', `sha=${opts.branch}`);
152
+ }
153
+ try {
154
+ const { stdout } = await execFileAsync('gh', args, {
155
+ cwd: this.projectDir,
156
+ timeout: 15000,
157
+ });
158
+ const items = JSON.parse(stdout || '[]');
159
+ return { items, page, hasMore: items.length === perPage, projectDir: this.projectDir };
160
+ }
161
+ catch (err) {
162
+ const code = translateError(err);
163
+ const error = new Error(`gh error: ${code}`);
164
+ error.code = code;
165
+ throw error;
166
+ }
167
+ }
168
+ }
169
+ exports.GitHubProvider = GitHubProvider;
170
+ //# sourceMappingURL=github-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-provider.js","sourceRoot":"","sources":["../../src/repo/github-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /** GitLab RepoProvider — read-only, uses `glab api`. */
2
+ import type { RepoBranch, RepoCommit, RepoIssue, RepoPR, RepoListResult } from './types.js';
3
+ import type { CommitListOptions, ListOptions, RepoProvider } from './provider.js';
4
+ export declare class GitLabProvider implements RepoProvider {
5
+ private readonly owner;
6
+ private readonly repo;
7
+ private readonly projectDir;
8
+ private readonly encodedProject;
9
+ constructor(owner: string, repo: string, projectDir: string);
10
+ detect(): Promise<import("./types.js").RepoContext>;
11
+ listIssues(opts?: ListOptions): Promise<RepoListResult<RepoIssue>>;
12
+ listPRs(opts?: ListOptions): Promise<RepoListResult<RepoPR>>;
13
+ listBranches(): Promise<RepoListResult<RepoBranch>>;
14
+ listCommits(opts?: CommitListOptions): Promise<RepoListResult<RepoCommit>>;
15
+ private glab;
16
+ }
17
+ //# sourceMappingURL=gitlab-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlab-provider.d.ts","sourceRoot":"","sources":["../../src/repo/gitlab-provider.ts"],"names":[],"mappings":"AAAA,wDAAwD;AAKxD,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EAEV,SAAS,EACT,MAAM,EACN,cAAc,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,YAAY,EACb,MAAM,eAAe,CAAC;AA0BvB,qBAAa,cAAe,YAAW,YAAY;IAI/C,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAL7B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;gBAGrB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM;IAY/B,MAAM;IASN,UAAU,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAwClE,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAwC5D,YAAY,IAAI,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAuCnD,WAAW,CAAC,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAkClE,IAAI;CAenB"}
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+ /** GitLab RepoProvider — read-only, uses `glab api`. */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.GitLabProvider = void 0;
5
+ const node_child_process_1 = require("node:child_process");
6
+ const node_util_1 = require("node:util");
7
+ const provider_js_1 = require("./provider.js");
8
+ const execFileAsync = (0, node_util_1.promisify)(node_child_process_1.execFile);
9
+ /** Map GitLab issue/MR state strings to our normalized states. */
10
+ function mapIssueState(state) {
11
+ return state === 'opened' ? 'open' : 'closed';
12
+ }
13
+ function mapMRState(state) {
14
+ if (state === 'opened')
15
+ return 'open';
16
+ if (state === 'merged')
17
+ return 'merged';
18
+ return 'closed';
19
+ }
20
+ /** Translate glab stderr into a typed RepoError. */
21
+ function translateError(stderr) {
22
+ const lower = stderr.toLowerCase();
23
+ if (lower.includes('auth') || lower.includes('401'))
24
+ return 'unauthorized';
25
+ if (lower.includes('rate limit') || lower.includes('429'))
26
+ return 'rate_limited';
27
+ return 'cli_error';
28
+ }
29
+ const SAFE_NAME_RE = /^[a-zA-Z0-9._-]+$/;
30
+ class GitLabProvider {
31
+ owner;
32
+ repo;
33
+ projectDir;
34
+ encodedProject;
35
+ constructor(owner, repo, projectDir) {
36
+ this.owner = owner;
37
+ this.repo = repo;
38
+ this.projectDir = projectDir;
39
+ if (!SAFE_NAME_RE.test(owner) || !SAFE_NAME_RE.test(repo)) {
40
+ throw new Error(`Invalid owner/repo: ${owner}/${repo}`);
41
+ }
42
+ this.encodedProject = encodeURIComponent(`${owner}/${repo}`);
43
+ }
44
+ /* ------------------------------------------------------------------ */
45
+ /* detect() — not implemented here; use detectRepo() from detector */
46
+ /* ------------------------------------------------------------------ */
47
+ async detect() {
48
+ const { detectRepo } = await import('./detector.js');
49
+ return detectRepo(this.projectDir);
50
+ }
51
+ /* ------------------------------------------------------------------ */
52
+ /* Issues */
53
+ /* ------------------------------------------------------------------ */
54
+ async listIssues(opts) {
55
+ const page = opts?.page ?? 1;
56
+ const perPage = opts?.perPage ?? provider_js_1.DEFAULT_PAGE_SIZE;
57
+ const args = [
58
+ 'api',
59
+ `/projects/${this.encodedProject}/issues`,
60
+ '--method', 'GET',
61
+ '-f', `per_page=${perPage}`,
62
+ '-f', `page=${page}`,
63
+ ];
64
+ if (opts?.state) {
65
+ const glState = opts.state === 'open' ? 'opened' : opts.state;
66
+ args.push('-f', `state=${glState}`);
67
+ }
68
+ const raw = await this.glab(args);
69
+ const data = JSON.parse(raw);
70
+ const items = data.map((i) => ({
71
+ id: String(i.id),
72
+ number: i.iid,
73
+ title: i.title,
74
+ body: i.description ?? '',
75
+ state: mapIssueState(i.state),
76
+ author: i.author?.username ?? '',
77
+ labels: (i.labels ?? []),
78
+ url: i.web_url,
79
+ assignee: i.assignee?.username,
80
+ createdAt: new Date(i.created_at).getTime(),
81
+ updatedAt: new Date(i.updated_at).getTime(),
82
+ }));
83
+ return { items, page, hasMore: data.length === perPage, projectDir: this.projectDir };
84
+ }
85
+ /* ------------------------------------------------------------------ */
86
+ /* Merge Requests (PRs) */
87
+ /* ------------------------------------------------------------------ */
88
+ async listPRs(opts) {
89
+ const page = opts?.page ?? 1;
90
+ const perPage = opts?.perPage ?? provider_js_1.DEFAULT_PAGE_SIZE;
91
+ const args = [
92
+ 'api',
93
+ `/projects/${this.encodedProject}/merge_requests`,
94
+ '--method', 'GET',
95
+ '-f', `per_page=${perPage}`,
96
+ '-f', `page=${page}`,
97
+ ];
98
+ if (opts?.state) {
99
+ const glState = opts.state === 'open' ? 'opened' : opts.state;
100
+ args.push('-f', `state=${glState}`);
101
+ }
102
+ const raw = await this.glab(args);
103
+ const data = JSON.parse(raw);
104
+ const items = data.map((mr) => ({
105
+ number: mr.iid,
106
+ title: mr.title,
107
+ state: mapMRState(mr.state),
108
+ author: mr.author?.username ?? '',
109
+ head: mr.source_branch,
110
+ base: mr.target_branch,
111
+ url: mr.web_url,
112
+ createdAt: new Date(mr.created_at).getTime(),
113
+ updatedAt: new Date(mr.updated_at).getTime(),
114
+ draft: mr.draft ?? mr.work_in_progress ?? false,
115
+ labels: (mr.labels ?? []),
116
+ }));
117
+ return { items, page, hasMore: data.length === perPage, projectDir: this.projectDir };
118
+ }
119
+ /* ------------------------------------------------------------------ */
120
+ /* Branches */
121
+ /* ------------------------------------------------------------------ */
122
+ async listBranches() {
123
+ const args = [
124
+ 'api',
125
+ `/projects/${this.encodedProject}/repository/branches`,
126
+ '--method', 'GET',
127
+ '-f', `per_page=${provider_js_1.DEFAULT_PAGE_SIZE}`,
128
+ ];
129
+ const raw = await this.glab(args);
130
+ const data = JSON.parse(raw);
131
+ // Determine current branch via git
132
+ let currentBranch;
133
+ try {
134
+ const { stdout } = await execFileAsync('git', ['branch', '--show-current'], {
135
+ cwd: this.projectDir,
136
+ timeout: 3000,
137
+ });
138
+ currentBranch = stdout.trim() || undefined;
139
+ }
140
+ catch {
141
+ // ignore
142
+ }
143
+ const items = data.map((b) => ({
144
+ name: b.name,
145
+ isDefault: b.default ?? false,
146
+ isCurrent: b.name === currentBranch,
147
+ lastCommitDate: b.commit?.committed_date
148
+ ? new Date(b.commit.committed_date).getTime()
149
+ : undefined,
150
+ }));
151
+ return { items, page: 1, hasMore: data.length === provider_js_1.DEFAULT_PAGE_SIZE, projectDir: this.projectDir };
152
+ }
153
+ /* ------------------------------------------------------------------ */
154
+ /* Commits */
155
+ /* ------------------------------------------------------------------ */
156
+ async listCommits(opts) {
157
+ const page = opts?.page ?? 1;
158
+ const perPage = opts?.perPage ?? provider_js_1.DEFAULT_PAGE_SIZE;
159
+ const args = [
160
+ 'api',
161
+ `/projects/${this.encodedProject}/repository/commits`,
162
+ '--method', 'GET',
163
+ '-f', `per_page=${perPage}`,
164
+ '-f', `page=${page}`,
165
+ ];
166
+ if (opts?.branch) {
167
+ args.push('-f', `ref_name=${opts.branch}`);
168
+ }
169
+ const raw = await this.glab(args);
170
+ const data = JSON.parse(raw);
171
+ const items = data.map((c) => ({
172
+ sha: c.id,
173
+ shortSha: c.short_id,
174
+ message: c.message,
175
+ author: c.author_name ?? '',
176
+ date: new Date(c.committed_date ?? c.created_at).getTime(),
177
+ url: c.web_url,
178
+ }));
179
+ return { items, page, hasMore: data.length === perPage, projectDir: this.projectDir };
180
+ }
181
+ /* ------------------------------------------------------------------ */
182
+ /* Internal: run glab */
183
+ /* ------------------------------------------------------------------ */
184
+ async glab(args) {
185
+ try {
186
+ const { stdout } = await execFileAsync('glab', args, {
187
+ cwd: this.projectDir,
188
+ timeout: 15_000, maxBuffer: 10 * 1024 * 1024,
189
+ });
190
+ return stdout;
191
+ }
192
+ catch (err) {
193
+ const stderr = err?.stderr ?? err?.message ?? '';
194
+ const code = translateError(stderr);
195
+ const error = new Error(`glab error: ${code}`);
196
+ error.code = code;
197
+ throw error;
198
+ }
199
+ }
200
+ }
201
+ exports.GitLabProvider = GitLabProvider;
202
+ //# sourceMappingURL=gitlab-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlab-provider.js","sourceRoot":"","sources":["../../src/repo/gitlab-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /** Repo provider interface — read-only V1. */
2
+ import type { RepoContext, RepoListResult, RepoIssue, RepoPR, RepoBranch, RepoCommit } from './types.js';
3
+ export interface ListOptions {
4
+ state?: string;
5
+ page?: number;
6
+ perPage?: number;
7
+ }
8
+ export interface CommitListOptions {
9
+ branch?: string;
10
+ page?: number;
11
+ perPage?: number;
12
+ }
13
+ export interface RepoProvider {
14
+ /** Detect repo platform, CLI availability, auth status. */
15
+ detect(projectDir: string): Promise<RepoContext>;
16
+ /** List issues. Default page size: 20. */
17
+ listIssues(opts?: ListOptions): Promise<RepoListResult<RepoIssue>>;
18
+ /** List pull requests / merge requests. Default page size: 20. */
19
+ listPRs(opts?: ListOptions): Promise<RepoListResult<RepoPR>>;
20
+ /** List branches. */
21
+ listBranches(): Promise<RepoListResult<RepoBranch>>;
22
+ /** List commits, optionally filtered by branch. Default page size: 20. */
23
+ listCommits(opts?: CommitListOptions): Promise<RepoListResult<RepoCommit>>;
24
+ }
25
+ export declare const DEFAULT_PAGE_SIZE = 20;
26
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/repo/provider.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAE9C,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,SAAS,EACT,MAAM,EACN,UAAU,EACV,UAAU,EACX,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,2DAA2D;IAC3D,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAEjD,0CAA0C;IAC1C,UAAU,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;IAEnE,kEAAkE;IAClE,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAE7D,qBAAqB;IACrB,YAAY,IAAI,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;IAEpD,0EAA0E;IAC1E,WAAW,CAAC,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;CAC5E;AAED,eAAO,MAAM,iBAAiB,KAAK,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /** Repo provider interface — read-only V1. */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.DEFAULT_PAGE_SIZE = void 0;
5
+ exports.DEFAULT_PAGE_SIZE = 20;
6
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/repo/provider.ts"],"names":[],"mappings":";AAAA,8CAA8C;;;AAwCjC,QAAA,iBAAiB,GAAG,EAAE,CAAC"}
@@ -0,0 +1,77 @@
1
+ /** Repo Management View — shared types. */
2
+ export type RepoPlatform = 'github' | 'gitlab' | 'unknown';
3
+ export type RepoStatus = 'ok' | 'no_repo' | 'cli_missing' | 'cli_outdated' | 'unauthorized' | 'multiple_remotes' | 'unknown_platform';
4
+ export interface RepoRemote {
5
+ name: string;
6
+ url: string;
7
+ platform: RepoPlatform;
8
+ }
9
+ export interface RepoInfo {
10
+ platform: RepoPlatform;
11
+ owner: string;
12
+ repo: string;
13
+ remoteUrl: string;
14
+ apiUrl?: string;
15
+ defaultBranch?: string;
16
+ currentBranch?: string;
17
+ }
18
+ export interface RepoContext {
19
+ info: RepoInfo | null;
20
+ status: RepoStatus;
21
+ cliVersion?: string;
22
+ cliMinVersion?: string;
23
+ cliAuth?: boolean;
24
+ remotes?: RepoRemote[];
25
+ }
26
+ export interface RepoListResult<T> {
27
+ items: T[];
28
+ page: number;
29
+ hasMore: boolean;
30
+ projectDir: string;
31
+ }
32
+ export interface RepoIssue {
33
+ id: string;
34
+ number: number;
35
+ title: string;
36
+ body: string;
37
+ state: 'open' | 'closed';
38
+ author: string;
39
+ labels: string[];
40
+ url: string;
41
+ assignee?: string;
42
+ createdAt: number;
43
+ updatedAt: number;
44
+ }
45
+ export interface RepoPR {
46
+ number: number;
47
+ title: string;
48
+ state: 'open' | 'merged' | 'closed';
49
+ author: string;
50
+ head: string;
51
+ base: string;
52
+ url: string;
53
+ createdAt: number;
54
+ updatedAt: number;
55
+ reviewDecision?: string;
56
+ draft?: boolean;
57
+ labels?: string[];
58
+ }
59
+ export interface RepoBranch {
60
+ name: string;
61
+ isDefault: boolean;
62
+ isCurrent: boolean;
63
+ aheadBy?: number;
64
+ behindBy?: number;
65
+ lastCommitDate?: number;
66
+ }
67
+ export interface RepoCommit {
68
+ sha: string;
69
+ shortSha: string;
70
+ message: string;
71
+ author: string;
72
+ date: number;
73
+ url: string;
74
+ }
75
+ /** Structured error from providers — never exposes raw CLI output. */
76
+ export type RepoError = 'unauthorized' | 'rate_limited' | 'cli_error' | 'cli_missing' | 'cli_outdated' | 'unknown_project' | 'invalid_params' | 'not_detected';
77
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/repo/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ /** Repo Management View — shared types. */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/repo/types.ts"],"names":[],"mappings":";AAAA,2CAA2C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "imcodes",
3
- "version": "2026.3.138",
3
+ "version": "2026.3.141",
4
4
  "description": "A chat interface for AI coding agents — control Claude Code, Codex, Gemini CLI, OpenCode from browser and mobile",
5
5
  "license": "MIT",
6
6
  "repository": {