@agents-ensemble/core 0.4.1 → 0.5.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.
Files changed (111) hide show
  1. package/dist/acp/acp-preset-bins.d.ts +10 -0
  2. package/dist/acp/acp-preset-bins.d.ts.map +1 -0
  3. package/dist/acp/acp-preset-bins.js +27 -0
  4. package/dist/acp/acp-preset-bins.js.map +1 -0
  5. package/dist/acp/index.d.ts +3 -0
  6. package/dist/acp/index.d.ts.map +1 -1
  7. package/dist/acp/index.js +3 -0
  8. package/dist/acp/index.js.map +1 -1
  9. package/dist/acp/resolve-acp-spawn.d.ts +2 -0
  10. package/dist/acp/resolve-acp-spawn.d.ts.map +1 -1
  11. package/dist/acp/resolve-acp-spawn.js +10 -6
  12. package/dist/acp/resolve-acp-spawn.js.map +1 -1
  13. package/dist/acp/resolve-bundled-acp-bin.d.ts +11 -0
  14. package/dist/acp/resolve-bundled-acp-bin.d.ts.map +1 -0
  15. package/dist/acp/resolve-bundled-acp-bin.js +60 -0
  16. package/dist/acp/resolve-bundled-acp-bin.js.map +1 -0
  17. package/dist/acp/validate-acp-preset-prerequisites.d.ts +24 -0
  18. package/dist/acp/validate-acp-preset-prerequisites.d.ts.map +1 -0
  19. package/dist/acp/validate-acp-preset-prerequisites.js +121 -0
  20. package/dist/acp/validate-acp-preset-prerequisites.js.map +1 -0
  21. package/dist/conductor/conductor-session-driver.d.ts +2 -0
  22. package/dist/conductor/conductor-session-driver.d.ts.map +1 -1
  23. package/dist/conductor/conductor-session-driver.js +16 -7
  24. package/dist/conductor/conductor-session-driver.js.map +1 -1
  25. package/dist/conductor/conductor-session.d.ts +3 -0
  26. package/dist/conductor/conductor-session.d.ts.map +1 -1
  27. package/dist/conductor/conductor-session.js +65 -8
  28. package/dist/conductor/conductor-session.js.map +1 -1
  29. package/dist/conductor/resolve-conductor-model-id.d.ts +7 -3
  30. package/dist/conductor/resolve-conductor-model-id.d.ts.map +1 -1
  31. package/dist/conductor/resolve-conductor-model-id.js +9 -11
  32. package/dist/conductor/resolve-conductor-model-id.js.map +1 -1
  33. package/dist/conductor/session/events/session-log-event.d.ts +4 -0
  34. package/dist/conductor/session/events/session-log-event.d.ts.map +1 -1
  35. package/dist/config/deep-merge.d.ts +3 -0
  36. package/dist/config/deep-merge.d.ts.map +1 -0
  37. package/dist/config/deep-merge.js +20 -0
  38. package/dist/config/deep-merge.js.map +1 -0
  39. package/dist/config/defaults.d.ts +5 -0
  40. package/dist/config/defaults.d.ts.map +1 -0
  41. package/dist/config/defaults.js +35 -0
  42. package/dist/config/defaults.js.map +1 -0
  43. package/dist/config/index.d.ts +9 -0
  44. package/dist/config/index.d.ts.map +1 -0
  45. package/dist/config/index.js +6 -0
  46. package/dist/config/index.js.map +1 -0
  47. package/dist/config/load-ensemble-config.d.ts +12 -0
  48. package/dist/config/load-ensemble-config.d.ts.map +1 -0
  49. package/dist/config/load-ensemble-config.js +44 -0
  50. package/dist/config/load-ensemble-config.js.map +1 -0
  51. package/dist/config/parse-config.d.ts +7 -0
  52. package/dist/config/parse-config.d.ts.map +1 -0
  53. package/dist/config/parse-config.js +179 -0
  54. package/dist/config/parse-config.js.map +1 -0
  55. package/dist/config/resolve-settings.d.ts +78 -0
  56. package/dist/config/resolve-settings.d.ts.map +1 -0
  57. package/dist/config/resolve-settings.js +141 -0
  58. package/dist/config/resolve-settings.js.map +1 -0
  59. package/dist/config/types.d.ts +52 -0
  60. package/dist/config/types.d.ts.map +1 -0
  61. package/dist/config/types.js +2 -0
  62. package/dist/config/types.js.map +1 -0
  63. package/dist/github/fetch-github-updates.d.ts +16 -3
  64. package/dist/github/fetch-github-updates.d.ts.map +1 -1
  65. package/dist/github/fetch-github-updates.js +97 -101
  66. package/dist/github/fetch-github-updates.js.map +1 -1
  67. package/dist/github/github-auth.d.ts +15 -0
  68. package/dist/github/github-auth.d.ts.map +1 -0
  69. package/dist/github/github-auth.js +44 -0
  70. package/dist/github/github-auth.js.map +1 -0
  71. package/dist/github/github-client.d.ts +76 -0
  72. package/dist/github/github-client.d.ts.map +1 -0
  73. package/dist/github/github-client.js +198 -0
  74. package/dist/github/github-client.js.map +1 -0
  75. package/dist/github/github-monitor-error.d.ts +24 -0
  76. package/dist/github/github-monitor-error.d.ts.map +1 -0
  77. package/dist/github/github-monitor-error.js +75 -0
  78. package/dist/github/github-monitor-error.js.map +1 -0
  79. package/dist/github/github-monitor.d.ts +5 -3
  80. package/dist/github/github-monitor.d.ts.map +1 -1
  81. package/dist/github/github-monitor.js +15 -3
  82. package/dist/github/github-monitor.js.map +1 -1
  83. package/dist/github/github-test-fixtures.d.ts +52 -0
  84. package/dist/github/github-test-fixtures.d.ts.map +1 -1
  85. package/dist/github/github-test-fixtures.js +42 -0
  86. package/dist/github/github-test-fixtures.js.map +1 -1
  87. package/dist/github/index.d.ts +11 -2
  88. package/dist/github/index.d.ts.map +1 -1
  89. package/dist/github/index.js +6 -2
  90. package/dist/github/index.js.map +1 -1
  91. package/dist/github/issue-context.d.ts +8 -1
  92. package/dist/github/issue-context.d.ts.map +1 -1
  93. package/dist/github/issue-context.js +13 -12
  94. package/dist/github/issue-context.js.map +1 -1
  95. package/dist/github/resolve-github-auth-token.d.ts +19 -0
  96. package/dist/github/resolve-github-auth-token.d.ts.map +1 -0
  97. package/dist/github/resolve-github-auth-token.js +32 -0
  98. package/dist/github/resolve-github-auth-token.js.map +1 -0
  99. package/dist/github/run-gh.d.ts +20 -0
  100. package/dist/github/run-gh.d.ts.map +1 -1
  101. package/dist/github/run-gh.js +38 -4
  102. package/dist/github/run-gh.js.map +1 -1
  103. package/dist/index.d.ts +1 -0
  104. package/dist/index.d.ts.map +1 -1
  105. package/dist/index.js +1 -0
  106. package/dist/index.js.map +1 -1
  107. package/dist/profile/load-profile.d.ts +5 -2
  108. package/dist/profile/load-profile.d.ts.map +1 -1
  109. package/dist/profile/load-profile.js +9 -7
  110. package/dist/profile/load-profile.js.map +1 -1
  111. package/package.json +6 -1
@@ -0,0 +1,198 @@
1
+ import { resolveGitHubAuthToken } from './resolve-github-auth-token.js';
2
+ const GITHUB_REST_BASE = 'https://api.github.com';
3
+ const GITHUB_GRAPHQL_URL = 'https://api.github.com/graphql';
4
+ const USER_AGENT = 'agents-ensemble';
5
+ export class GitHubApiError extends Error {
6
+ status;
7
+ retryable;
8
+ constructor(message, options) {
9
+ super(message);
10
+ this.name = 'GitHubApiError';
11
+ this.status = options.status;
12
+ this.retryable = options.retryable ?? false;
13
+ }
14
+ }
15
+ export async function createGitHubClient(options) {
16
+ const resolveTokenFn = options.resolveTokenFn ?? resolveGitHubAuthToken;
17
+ const auth = await resolveTokenFn({
18
+ config: options.config,
19
+ env: options.env,
20
+ });
21
+ if (!auth.token) {
22
+ throw new GitHubApiError('GitHub authentication token not found', {
23
+ status: 401,
24
+ retryable: false,
25
+ });
26
+ }
27
+ return buildGitHubClient({
28
+ token: auth.token,
29
+ fetchFn: options.fetchFn,
30
+ signal: options.signal,
31
+ });
32
+ }
33
+ export function buildGitHubClient(options) {
34
+ const fetchFn = options.fetchFn ?? fetch;
35
+ const restRequest = async (path, init = {}) => {
36
+ const url = path.startsWith('http') ? path : `${GITHUB_REST_BASE}${path}`;
37
+ const response = await fetchFn(url, {
38
+ ...init,
39
+ signal: options.signal,
40
+ headers: {
41
+ Accept: 'application/vnd.github+json',
42
+ Authorization: `Bearer ${options.token}`,
43
+ 'User-Agent': USER_AGENT,
44
+ 'X-GitHub-Api-Version': '2022-11-28',
45
+ ...(init.headers ?? {}),
46
+ },
47
+ });
48
+ if (!response.ok) {
49
+ throw await createRestError(response);
50
+ }
51
+ return (await response.json());
52
+ };
53
+ const restPaginate = async (path) => {
54
+ const items = [];
55
+ let nextUrl = path;
56
+ while (nextUrl) {
57
+ const url = nextUrl.startsWith('http') ? nextUrl : `${GITHUB_REST_BASE}${nextUrl}`;
58
+ const response = await fetchFn(url, {
59
+ signal: options.signal,
60
+ headers: {
61
+ Accept: 'application/vnd.github+json',
62
+ Authorization: `Bearer ${options.token}`,
63
+ 'User-Agent': USER_AGENT,
64
+ 'X-GitHub-Api-Version': '2022-11-28',
65
+ },
66
+ });
67
+ if (!response.ok) {
68
+ throw await createRestError(response);
69
+ }
70
+ const page = (await response.json());
71
+ items.push(...page);
72
+ nextUrl = parseLinkHeader(response.headers.get('link')).next;
73
+ }
74
+ return items;
75
+ };
76
+ const graphqlRequest = async (query, variables) => {
77
+ const response = await fetchFn(GITHUB_GRAPHQL_URL, {
78
+ method: 'POST',
79
+ signal: options.signal,
80
+ headers: {
81
+ Accept: 'application/vnd.github+json',
82
+ Authorization: `Bearer ${options.token}`,
83
+ 'Content-Type': 'application/json',
84
+ 'User-Agent': USER_AGENT,
85
+ },
86
+ body: JSON.stringify({ query, variables }),
87
+ });
88
+ if (!response.ok) {
89
+ throw await createRestError(response);
90
+ }
91
+ const payload = (await response.json());
92
+ if (payload.errors?.length) {
93
+ const message = payload.errors.map((error) => error.message).join('; ');
94
+ throw new GitHubApiError(`GitHub GraphQL error: ${message}`, {
95
+ status: response.status,
96
+ retryable: response.status === 429 || response.status >= 500,
97
+ });
98
+ }
99
+ if (!payload.data) {
100
+ throw new GitHubApiError('GitHub GraphQL response missing data', {
101
+ status: response.status,
102
+ retryable: false,
103
+ });
104
+ }
105
+ return payload.data;
106
+ };
107
+ return {
108
+ async getIssue(owner, repo, issueNumber) {
109
+ return restRequest(`/repos/${owner}/${repo}/issues/${issueNumber}`);
110
+ },
111
+ async listIssueComments(owner, repo, issueNumber) {
112
+ return restPaginate(`/repos/${owner}/${repo}/issues/${issueNumber}/comments?per_page=100`);
113
+ },
114
+ async searchLinkedPullRequests(owner, repo, issueNumber) {
115
+ const query = encodeURIComponent(`${issueNumber} repo:${owner}/${repo} type:pr`);
116
+ const data = await restRequest(`/search/issues?q=${query}&per_page=20`);
117
+ return data.items.filter((pr) => pr.state === 'OPEN' || pr.state === 'open');
118
+ },
119
+ async listPullRequestReviews(owner, repo, prNumber) {
120
+ return restPaginate(`/repos/${owner}/${repo}/pulls/${prNumber}/reviews?per_page=100`);
121
+ },
122
+ async listPullRequestReviewComments(owner, repo, prNumber) {
123
+ return restPaginate(`/repos/${owner}/${repo}/pulls/${prNumber}/comments?per_page=100`);
124
+ },
125
+ async getStatusCheckRollup(owner, repo, prNumber) {
126
+ const query = `
127
+ query($owner: String!, $name: String!, $number: Int!) {
128
+ repository(owner: $owner, name: $name) {
129
+ pullRequest(number: $number) {
130
+ statusCheckRollup {
131
+ contexts(first: 100) {
132
+ pageInfo {
133
+ hasNextPage
134
+ endCursor
135
+ }
136
+ nodes {
137
+ __typename
138
+ ... on CheckRun {
139
+ name
140
+ status
141
+ conclusion
142
+ detailsUrl
143
+ }
144
+ ... on StatusContext {
145
+ context
146
+ state
147
+ targetUrl
148
+ }
149
+ }
150
+ }
151
+ }
152
+ }
153
+ }
154
+ }
155
+ `;
156
+ const data = await graphqlRequest(query, {
157
+ owner,
158
+ name: repo,
159
+ number: prNumber,
160
+ });
161
+ const rollup = data.repository?.pullRequest?.statusCheckRollup;
162
+ if (!rollup) {
163
+ return [];
164
+ }
165
+ return rollup.contexts.nodes ?? [];
166
+ },
167
+ };
168
+ }
169
+ async function createRestError(response) {
170
+ let detail = response.statusText;
171
+ try {
172
+ const body = (await response.json());
173
+ if (body.message) {
174
+ detail = body.message;
175
+ }
176
+ }
177
+ catch {
178
+ // ignore JSON parse errors
179
+ }
180
+ const remaining = response.headers.get('x-ratelimit-remaining');
181
+ const retryable = response.status === 429 ||
182
+ response.status >= 500 ||
183
+ (response.status === 403 && remaining === '0');
184
+ return new GitHubApiError(`GitHub API ${response.status}: ${detail}`, { status: response.status, retryable });
185
+ }
186
+ function parseLinkHeader(header) {
187
+ if (!header) {
188
+ return {};
189
+ }
190
+ for (const part of header.split(',')) {
191
+ const match = part.match(/<([^>]+)>;\s*rel="([^"]+)"/);
192
+ if (match?.[2] === 'next') {
193
+ return { next: match[1] };
194
+ }
195
+ }
196
+ return {};
197
+ }
198
+ //# sourceMappingURL=github-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-client.js","sourceRoot":"","sources":["../../src/github/github-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /** GitHub 監視 poll のフェーズ(`monitor_error` 用)。 */
2
+ export type GitHubMonitorErrorPhase = 'issue_comments' | 'pr_search' | 'pr_reviews' | 'pr_review_comments' | 'pr_status_checks';
3
+ export type GitHubMonitorErrorCause = 'parse' | 'gh_cli' | 'auth' | 'unknown';
4
+ export interface GitHubMonitorPhaseError {
5
+ phase: GitHubMonitorErrorPhase;
6
+ prNumber?: number;
7
+ cause: GitHubMonitorErrorCause;
8
+ retryable: boolean;
9
+ message: string;
10
+ /** `formatGitHubErrorMessage` 用の元エラー。 */
11
+ sourceError?: unknown;
12
+ }
13
+ /** poll フェーズ失敗を harness へ伝えるエラー。 */
14
+ export declare class GitHubMonitorError extends Error {
15
+ readonly phase: GitHubMonitorErrorPhase;
16
+ readonly prNumber?: number;
17
+ readonly cause: GitHubMonitorErrorCause;
18
+ readonly retryable: boolean;
19
+ constructor(options: GitHubMonitorPhaseError);
20
+ }
21
+ export declare function safeUpperString(value: unknown, fallback: string): string;
22
+ export declare function classifyGitHubMonitorError(error: unknown): Pick<GitHubMonitorPhaseError, 'cause' | 'retryable' | 'message'>;
23
+ export declare function createGitHubMonitorPhaseError(phase: GitHubMonitorErrorPhase, error: unknown, prNumber?: number): GitHubMonitorPhaseError;
24
+ //# sourceMappingURL=github-monitor-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-monitor-error.d.ts","sourceRoot":"","sources":["../../src/github/github-monitor-error.ts"],"names":[],"mappings":"AAGA,+CAA+C;AAC/C,MAAM,MAAM,uBAAuB,GAC/B,gBAAgB,GAChB,WAAW,GACX,YAAY,GACZ,oBAAoB,GACpB,kBAAkB,CAAC;AAEvB,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AAE9E,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,uBAAuB,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,uBAAuB,CAAC;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,oCAAoC;AACpC,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAC;IACxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAC;IACxC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;gBAEhB,OAAO,EAAE,uBAAuB;CAQ7C;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKxE;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,GACb,IAAI,CAAC,uBAAuB,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,CAAC,CA8ClE;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,uBAAuB,EAC9B,KAAK,EAAE,OAAO,EACd,QAAQ,CAAC,EAAE,MAAM,GAChB,uBAAuB,CAQzB"}
@@ -0,0 +1,75 @@
1
+ import { GitHubApiError } from './github-client.js';
2
+ import { RunGhError } from './run-gh.js';
3
+ /** poll フェーズ失敗を harness へ伝えるエラー。 */
4
+ export class GitHubMonitorError extends Error {
5
+ phase;
6
+ prNumber;
7
+ cause;
8
+ retryable;
9
+ constructor(options) {
10
+ super(options.message);
11
+ this.name = 'GitHubMonitorError';
12
+ this.phase = options.phase;
13
+ this.prNumber = options.prNumber;
14
+ this.cause = options.cause;
15
+ this.retryable = options.retryable;
16
+ }
17
+ }
18
+ export function safeUpperString(value, fallback) {
19
+ if (typeof value === 'string' && value.length > 0) {
20
+ return value.toUpperCase();
21
+ }
22
+ return fallback;
23
+ }
24
+ export function classifyGitHubMonitorError(error) {
25
+ if (error instanceof GitHubMonitorError) {
26
+ return {
27
+ cause: error.cause,
28
+ retryable: error.retryable,
29
+ message: error.message,
30
+ };
31
+ }
32
+ if (error instanceof RunGhError) {
33
+ return {
34
+ cause: error.cause === 'auth' ? 'auth' : 'gh_cli',
35
+ retryable: error.retryable,
36
+ message: error.message,
37
+ };
38
+ }
39
+ if (error instanceof GitHubApiError) {
40
+ return {
41
+ cause: error.status === 401 || error.status === 403 ? 'auth' : 'gh_cli',
42
+ retryable: error.retryable,
43
+ message: error.message,
44
+ };
45
+ }
46
+ if (error instanceof TypeError) {
47
+ return {
48
+ cause: 'parse',
49
+ retryable: false,
50
+ message: error.message,
51
+ };
52
+ }
53
+ if (error instanceof Error) {
54
+ return {
55
+ cause: 'unknown',
56
+ retryable: false,
57
+ message: error.message,
58
+ };
59
+ }
60
+ return {
61
+ cause: 'unknown',
62
+ retryable: false,
63
+ message: String(error),
64
+ };
65
+ }
66
+ export function createGitHubMonitorPhaseError(phase, error, prNumber) {
67
+ const classified = classifyGitHubMonitorError(error);
68
+ return {
69
+ phase,
70
+ prNumber,
71
+ ...classified,
72
+ sourceError: error,
73
+ };
74
+ }
75
+ //# sourceMappingURL=github-monitor-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-monitor-error.js","sourceRoot":"","sources":["../../src/github/github-monitor-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAsBzC,oCAAoC;AACpC,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,KAAK,CAA0B;IAC/B,QAAQ,CAAU;IAClB,KAAK,CAA0B;IAC/B,SAAS,CAAU;IAE5B,YAAY,OAAgC;QAC1C,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACrC,CAAC;CACF;AAED,MAAM,UAAU,eAAe,CAAC,KAAc,EAAE,QAAgB;IAC9D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;IAC7B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,KAAc;IAEd,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;QACxC,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAChC,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;YACjD,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;QACpC,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;YACvE,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;QAC/B,OAAO;YACL,KAAK,EAAE,OAAO;YACd,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO;YACL,KAAK,EAAE,SAAS;YAChB,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,SAAS;QAChB,SAAS,EAAE,KAAK;QAChB,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;KACvB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,KAA8B,EAC9B,KAAc,EACd,QAAiB;IAEjB,MAAM,UAAU,GAAG,0BAA0B,CAAC,KAAK,CAAC,CAAC;IACrD,OAAO;QACL,KAAK;QACL,QAAQ;QACR,GAAG,UAAU;QACb,WAAW,EAAE,KAAK;KACnB,CAAC;AACJ,CAAC"}
@@ -1,6 +1,7 @@
1
+ import type { EnsembleConfig } from '../config/types.js';
2
+ import type { GitHubClient } from './github-client.js';
1
3
  import { type GitHubMonitorCursor } from './github-monitor-cursor.js';
2
4
  import type { GitHubUpdatePayload } from './github-update-types.js';
3
- import { runGh } from './run-gh.js';
4
5
  export declare const DEFAULT_GITHUB_MONITOR_DEBOUNCE_MS = 30000;
5
6
  export declare const DEFAULT_GITHUB_MONITOR_POLL_INTERVAL_MS = 60000;
6
7
  export declare const DEFAULT_GITHUB_MONITOR_ACTIVE_POLL_INTERVAL_MS = 15000;
@@ -8,7 +9,8 @@ export declare const DEFAULT_GITHUB_MONITOR_ACTIVE_POLL_INTERVAL_MS = 15000;
8
9
  export declare const DEFAULT_GITHUB_MONITOR_STOP_POLL_WAIT_MS = 5000;
9
10
  export interface GitHubMonitorOptions {
10
11
  issueUrl: string;
11
- cwd?: string;
12
+ /** harness 設定。GitHub API 認証解決で参照する。 */
13
+ ensembleConfig: EnsembleConfig;
12
14
  cursor?: GitHubMonitorCursor;
13
15
  debounceMs?: number;
14
16
  pollIntervalMs?: number;
@@ -19,7 +21,7 @@ export interface GitHubMonitorOptions {
19
21
  onCursorChange?: (cursor: GitHubMonitorCursor) => void;
20
22
  onPollError?: (error: unknown) => void;
21
23
  shutdownSignal?: AbortSignal;
22
- runGhFn?: typeof runGh;
24
+ githubClient?: GitHubClient;
23
25
  }
24
26
  export interface GitHubMonitor {
25
27
  start(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"github-monitor.d.ts","sourceRoot":"","sources":["../../src/github/github-monitor.ts"],"names":[],"mappings":"AAKA,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAoB,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACtF,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,eAAO,MAAM,kCAAkC,QAAS,CAAC;AACzD,eAAO,MAAM,uCAAuC,QAAS,CAAC;AAC9D,eAAO,MAAM,8CAA8C,QAAS,CAAC;AACrE,kEAAkE;AAClE,eAAO,MAAM,wCAAwC,OAAQ,CAAC;AAE9D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACjD,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACvD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,cAAc,CAAC,EAAE,WAAW,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,KAAK,IAAI,IAAI,CAAC;IACd,SAAS,IAAI,mBAAmB,CAAC;CAClC;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAsHhF"}
1
+ {"version":3,"file":"github-monitor.d.ts","sourceRoot":"","sources":["../../src/github/github-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAQzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAoB,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEtF,eAAO,MAAM,kCAAkC,QAAS,CAAC;AACzD,eAAO,MAAM,uCAAuC,QAAS,CAAC;AAC9D,eAAO,MAAM,8CAA8C,QAAS,CAAC;AACrE,kEAAkE;AAClE,eAAO,MAAM,wCAAwC,OAAQ,CAAC;AAE9D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACjD,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACvD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,cAAc,CAAC,EAAE,WAAW,CAAC;IAC7B,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,KAAK,IAAI,IAAI,CAAC;IACd,SAAS,IAAI,mBAAmB,CAAC;CAClC;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAoIhF"}
@@ -1,5 +1,7 @@
1
1
  import { DebounceBuffer } from './debounce-buffer.js';
2
2
  import { fetchGitHubUpdates, } from './fetch-github-updates.js';
3
+ import { formatGitHubErrorMessage } from './github-auth.js';
4
+ import { GitHubMonitorError } from './github-monitor-error.js';
3
5
  import { emptyGitHubMonitorCursor, isEmptyGitHubMonitorCursor, normalizeGitHubMonitorCursor, } from './github-monitor-cursor.js';
4
6
  export const DEFAULT_GITHUB_MONITOR_DEBOUNCE_MS = 30_000;
5
7
  export const DEFAULT_GITHUB_MONITOR_POLL_INTERVAL_MS = 60_000;
@@ -48,8 +50,8 @@ export function createGitHubMonitor(options) {
48
50
  const input = {
49
51
  issueUrl: options.issueUrl,
50
52
  cursor,
51
- cwd: options.cwd,
52
- runGhFn: options.runGhFn,
53
+ ensembleConfig: options.ensembleConfig,
54
+ githubClient: options.githubClient,
53
55
  initialCursorPoll: needsBootstrapPoll,
54
56
  abortSignal: pollAbortController.signal,
55
57
  };
@@ -61,10 +63,20 @@ export function createGitHubMonitor(options) {
61
63
  if (result.updates.length > 0) {
62
64
  buffer.pushMany(result.updates);
63
65
  }
66
+ for (const phaseError of result.errors) {
67
+ const source = phaseError.sourceError ?? new Error(phaseError.message);
68
+ options.onPollError?.(new GitHubMonitorError({
69
+ phase: phaseError.phase,
70
+ prNumber: phaseError.prNumber,
71
+ cause: phaseError.cause,
72
+ retryable: phaseError.retryable,
73
+ message: formatGitHubErrorMessage(source, options.ensembleConfig),
74
+ }));
75
+ }
64
76
  }
65
77
  catch (error) {
66
78
  if (!isAbortError(error)) {
67
- options.onPollError?.(error);
79
+ options.onPollError?.(new Error(formatGitHubErrorMessage(error, options.ensembleConfig)));
68
80
  }
69
81
  }
70
82
  finally {
@@ -1 +1 @@
1
- {"version":3,"file":"github-monitor.js","sourceRoot":"","sources":["../../src/github/github-monitor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"github-monitor.js","sourceRoot":"","sources":["../../src/github/github-monitor.ts"],"names":[],"mappings":"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"}
@@ -26,5 +26,57 @@ export declare const GH_STATUS_CHECK_ROLLUP_STATUS_CONTEXT_SUCCESS: readonly [{
26
26
  readonly state: "SUCCESS";
27
27
  readonly targetUrl: "https://github.com/org/repo/actions/runs/2";
28
28
  }];
29
+ /**
30
+ * Issue #185 再現: `__typename` 欠落の StatusContext(gap A)。
31
+ * 実環境の GraphQL レスポンスで `__typename` が省略されるケース。
32
+ */
33
+ export declare const GH_STATUS_CHECK_ROLLUP_STATUS_CONTEXT_NO_TYPENAME: readonly [{
34
+ readonly context: "ci/legacy-no-typename";
35
+ readonly state: "PENDING";
36
+ readonly targetUrl: "https://github.com/org/repo/actions/runs/3";
37
+ }];
38
+ /**
39
+ * Issue #185 再現: `conclusion` が非 string(gap B)。
40
+ * `(check.conclusion ?? 'UNKNOWN').toUpperCase()` が落ちるパターン。
41
+ */
42
+ export declare const GH_STATUS_CHECK_ROLLUP_NON_STRING_CONCLUSION: readonly [{
43
+ readonly __typename: "CheckRun";
44
+ readonly name: "ci/broken-conclusion";
45
+ readonly status: "COMPLETED";
46
+ readonly conclusion: 0;
47
+ readonly detailsUrl: "https://github.com/org/repo/actions/runs/4";
48
+ }];
49
+ /**
50
+ * Issue #185 再現: 未知 `__typename`(gap C — WorkflowRun)。
51
+ */
52
+ export declare const GH_STATUS_CHECK_ROLLUP_WORKFLOW_RUN: readonly [{
53
+ readonly __typename: "WorkflowRun";
54
+ readonly name: "ci/workflow";
55
+ readonly status: "COMPLETED";
56
+ readonly conclusion: "SUCCESS";
57
+ }];
58
+ /** Issue #185 再現: 複合 rollup(正常 + 異常エントリ混在)。 */
59
+ export declare const GH_STATUS_CHECK_ROLLUP_MIXED_ISSUE_185: readonly [{
60
+ readonly context: "ci/legacy-no-typename";
61
+ readonly state: "PENDING";
62
+ readonly targetUrl: "https://github.com/org/repo/actions/runs/3";
63
+ }, {
64
+ readonly __typename: "CheckRun";
65
+ readonly name: "ci/broken-conclusion";
66
+ readonly status: "COMPLETED";
67
+ readonly conclusion: 0;
68
+ readonly detailsUrl: "https://github.com/org/repo/actions/runs/4";
69
+ }, {
70
+ readonly __typename: "WorkflowRun";
71
+ readonly name: "ci/workflow";
72
+ readonly status: "COMPLETED";
73
+ readonly conclusion: "SUCCESS";
74
+ }, {
75
+ readonly __typename: "CheckRun";
76
+ readonly name: "ci/test";
77
+ readonly status: "COMPLETED";
78
+ readonly conclusion: "SUCCESS";
79
+ readonly detailsUrl: "https://github.com/org/repo/actions/runs/1";
80
+ }];
29
81
  export declare function ghPrViewStatusCheckRollupJson(checkRuns: readonly object[]): string;
30
82
  //# sourceMappingURL=github-test-fixtures.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"github-test-fixtures.d.ts","sourceRoot":"","sources":["../../src/github/github-test-fixtures.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,eAAO,MAAM,wCAAwC;;;;;;EAQ3C,CAAC;AAEX,eAAO,MAAM,kCAAkC;;;;;;EAQrC,CAAC;AAEX,6DAA6D;AAC7D,eAAO,MAAM,6CAA6C;;;;;EAOhD,CAAC;AAEX,eAAO,MAAM,6CAA6C;;;;;EAOhD,CAAC;AAEX,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAElF"}
1
+ {"version":3,"file":"github-test-fixtures.d.ts","sourceRoot":"","sources":["../../src/github/github-test-fixtures.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,eAAO,MAAM,wCAAwC;;;;;;EAQ3C,CAAC;AAEX,eAAO,MAAM,kCAAkC;;;;;;EAQrC,CAAC;AAEX,6DAA6D;AAC7D,eAAO,MAAM,6CAA6C;;;;;EAOhD,CAAC;AAEX,eAAO,MAAM,6CAA6C;;;;;EAOhD,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,iDAAiD;;;;EAMpD,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,4CAA4C;;;;;;EAQ/C,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,mCAAmC;;;;;EAOtC,CAAC;AAEX,+CAA+C;AAC/C,eAAO,MAAM,sCAAsC;;;;;;;;;;;;;;;;;;;;;EAKzC,CAAC;AAEX,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAElF"}
@@ -34,6 +34,48 @@ export const GH_STATUS_CHECK_ROLLUP_STATUS_CONTEXT_SUCCESS = [
34
34
  targetUrl: 'https://github.com/org/repo/actions/runs/2',
35
35
  },
36
36
  ];
37
+ /**
38
+ * Issue #185 再現: `__typename` 欠落の StatusContext(gap A)。
39
+ * 実環境の GraphQL レスポンスで `__typename` が省略されるケース。
40
+ */
41
+ export const GH_STATUS_CHECK_ROLLUP_STATUS_CONTEXT_NO_TYPENAME = [
42
+ {
43
+ context: 'ci/legacy-no-typename',
44
+ state: 'PENDING',
45
+ targetUrl: 'https://github.com/org/repo/actions/runs/3',
46
+ },
47
+ ];
48
+ /**
49
+ * Issue #185 再現: `conclusion` が非 string(gap B)。
50
+ * `(check.conclusion ?? 'UNKNOWN').toUpperCase()` が落ちるパターン。
51
+ */
52
+ export const GH_STATUS_CHECK_ROLLUP_NON_STRING_CONCLUSION = [
53
+ {
54
+ __typename: 'CheckRun',
55
+ name: 'ci/broken-conclusion',
56
+ status: 'COMPLETED',
57
+ conclusion: 0,
58
+ detailsUrl: 'https://github.com/org/repo/actions/runs/4',
59
+ },
60
+ ];
61
+ /**
62
+ * Issue #185 再現: 未知 `__typename`(gap C — WorkflowRun)。
63
+ */
64
+ export const GH_STATUS_CHECK_ROLLUP_WORKFLOW_RUN = [
65
+ {
66
+ __typename: 'WorkflowRun',
67
+ name: 'ci/workflow',
68
+ status: 'COMPLETED',
69
+ conclusion: 'SUCCESS',
70
+ },
71
+ ];
72
+ /** Issue #185 再現: 複合 rollup(正常 + 異常エントリ混在)。 */
73
+ export const GH_STATUS_CHECK_ROLLUP_MIXED_ISSUE_185 = [
74
+ ...GH_STATUS_CHECK_ROLLUP_STATUS_CONTEXT_NO_TYPENAME,
75
+ ...GH_STATUS_CHECK_ROLLUP_NON_STRING_CONCLUSION,
76
+ ...GH_STATUS_CHECK_ROLLUP_WORKFLOW_RUN,
77
+ ...GH_STATUS_CHECK_ROLLUP_COMPLETED_SUCCESS,
78
+ ];
37
79
  export function ghPrViewStatusCheckRollupJson(checkRuns) {
38
80
  return JSON.stringify({ statusCheckRollup: checkRuns });
39
81
  }
@@ -1 +1 @@
1
- {"version":3,"file":"github-test-fixtures.js","sourceRoot":"","sources":["../../src/github/github-test-fixtures.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,MAAM,CAAC,MAAM,wCAAwC,GAAG;IACtD;QACE,UAAU,EAAE,UAAU;QACtB,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,WAAW;QACnB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,4CAA4C;KACzD;CACO,CAAC;AAEX,MAAM,CAAC,MAAM,kCAAkC,GAAG;IAChD;QACE,UAAU,EAAE,UAAU;QACtB,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,aAAa;QACrB,UAAU,EAAE,EAAE;QACd,UAAU,EAAE,4CAA4C;KACzD;CACO,CAAC;AAEX,6DAA6D;AAC7D,MAAM,CAAC,MAAM,6CAA6C,GAAG;IAC3D;QACE,UAAU,EAAE,eAAe;QAC3B,OAAO,EAAE,WAAW;QACpB,KAAK,EAAE,SAAS;QAChB,SAAS,EAAE,4CAA4C;KACxD;CACO,CAAC;AAEX,MAAM,CAAC,MAAM,6CAA6C,GAAG;IAC3D;QACE,UAAU,EAAE,eAAe;QAC3B,OAAO,EAAE,WAAW;QACpB,KAAK,EAAE,SAAS;QAChB,SAAS,EAAE,4CAA4C;KACxD;CACO,CAAC;AAEX,MAAM,UAAU,6BAA6B,CAAC,SAA4B;IACxE,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC,CAAC;AAC1D,CAAC"}
1
+ {"version":3,"file":"github-test-fixtures.js","sourceRoot":"","sources":["../../src/github/github-test-fixtures.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,MAAM,CAAC,MAAM,wCAAwC,GAAG;IACtD;QACE,UAAU,EAAE,UAAU;QACtB,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,WAAW;QACnB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,4CAA4C;KACzD;CACO,CAAC;AAEX,MAAM,CAAC,MAAM,kCAAkC,GAAG;IAChD;QACE,UAAU,EAAE,UAAU;QACtB,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,aAAa;QACrB,UAAU,EAAE,EAAE;QACd,UAAU,EAAE,4CAA4C;KACzD;CACO,CAAC;AAEX,6DAA6D;AAC7D,MAAM,CAAC,MAAM,6CAA6C,GAAG;IAC3D;QACE,UAAU,EAAE,eAAe;QAC3B,OAAO,EAAE,WAAW;QACpB,KAAK,EAAE,SAAS;QAChB,SAAS,EAAE,4CAA4C;KACxD;CACO,CAAC;AAEX,MAAM,CAAC,MAAM,6CAA6C,GAAG;IAC3D;QACE,UAAU,EAAE,eAAe;QAC3B,OAAO,EAAE,WAAW;QACpB,KAAK,EAAE,SAAS;QAChB,SAAS,EAAE,4CAA4C;KACxD;CACO,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,iDAAiD,GAAG;IAC/D;QACE,OAAO,EAAE,uBAAuB;QAChC,KAAK,EAAE,SAAS;QAChB,SAAS,EAAE,4CAA4C;KACxD;CACO,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,4CAA4C,GAAG;IAC1D;QACE,UAAU,EAAE,UAAU;QACtB,IAAI,EAAE,sBAAsB;QAC5B,MAAM,EAAE,WAAW;QACnB,UAAU,EAAE,CAAC;QACb,UAAU,EAAE,4CAA4C;KACzD;CACO,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAG;IACjD;QACE,UAAU,EAAE,aAAa;QACzB,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,WAAW;QACnB,UAAU,EAAE,SAAS;KACtB;CACO,CAAC;AAEX,+CAA+C;AAC/C,MAAM,CAAC,MAAM,sCAAsC,GAAG;IACpD,GAAG,iDAAiD;IACpD,GAAG,4CAA4C;IAC/C,GAAG,mCAAmC;IACtC,GAAG,wCAAwC;CACnC,CAAC;AAEX,MAAM,UAAU,6BAA6B,CAAC,SAA4B;IACxE,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC,CAAC;AAC1D,CAAC"}
@@ -1,5 +1,12 @@
1
- export { runGh } from './run-gh.js';
1
+ export { runGh, RunGhError } from './run-gh.js';
2
+ export type { RunGhErrorCause } from './run-gh.js';
3
+ export { resolveGitHubAuthToken } from './resolve-github-auth-token.js';
4
+ export type { GitHubAuthTokenSource, ResolveGitHubAuthTokenOptions, ResolveGitHubAuthTokenResult, } from './resolve-github-auth-token.js';
5
+ export { buildGitHubClient, createGitHubClient, GitHubApiError, } from './github-client.js';
6
+ export type { CreateGitHubClientOptions, GitHubClient, GitHubClientOptions, GitHubIssueComment, GitHubPullRequestRef, GitHubPullRequestReview, GitHubPullRequestReviewComment, GitHubRestIssue, } from './github-client.js';
7
+ export { formatGitHubAuthRecoveryHint, formatGitHubErrorMessage, GITHUB_AUTH_HINT, hasGitHubAuth, isGitHubAuthError, } from './github-auth.js';
2
8
  export { fetchIssueContext, } from './issue-context.js';
9
+ export type { FetchIssueContextOptions } from './issue-context.js';
3
10
  export { formatIssueContextForPrompt, formatIssueContextYaml, } from './format-issue-context-prompt.js';
4
11
  export type { IssueContext, IssueComment, } from './issue-context.js';
5
12
  export { createGitHubMonitor, DEFAULT_GITHUB_MONITOR_DEBOUNCE_MS, DEFAULT_GITHUB_MONITOR_POLL_INTERVAL_MS, DEFAULT_GITHUB_MONITOR_ACTIVE_POLL_INTERVAL_MS, } from './github-monitor.js';
@@ -7,6 +14,8 @@ export type { GitHubMonitor, GitHubMonitorOptions } from './github-monitor.js';
7
14
  export { emptyGitHubMonitorCursor, isEmptyGitHubMonitorCursor, normalizeGitHubMonitorCursor, } from './github-monitor-cursor.js';
8
15
  export type { GitHubMonitorCursor, PullRequestMonitorCursor, } from './github-monitor-cursor.js';
9
16
  export type { GitHubUpdateItem, GitHubUpdateKind, GitHubUpdatePayload, } from './github-update-types.js';
10
- export { fetchGitHubUpdates } from './fetch-github-updates.js';
17
+ export { fetchGitHubUpdates, normalizeStatusCheckRollup } from './fetch-github-updates.js';
11
18
  export type { FetchGitHubUpdatesInput, FetchGitHubUpdatesResult, } from './fetch-github-updates.js';
19
+ export { GitHubMonitorError, safeUpperString, classifyGitHubMonitorError, createGitHubMonitorPhaseError, } from './github-monitor-error.js';
20
+ export type { GitHubMonitorErrorPhase, GitHubMonitorErrorCause, GitHubMonitorPhaseError, } from './github-monitor-error.js';
12
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/github/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EACL,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EACV,YAAY,EACZ,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,mBAAmB,EACnB,kCAAkC,EAClC,uCAAuC,EACvC,8CAA8C,GAC/C,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,YAAY,EACV,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/github/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAChD,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,YAAY,EACV,qBAAqB,EACrB,6BAA6B,EAC7B,4BAA4B,GAC7B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,yBAAyB,EACzB,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,8BAA8B,EAC9B,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EACV,YAAY,EACZ,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,mBAAmB,EACnB,kCAAkC,EAClC,uCAAuC,EACvC,8CAA8C,GAC/C,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAC3F,YAAY,EACV,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,0BAA0B,EAC1B,6BAA6B,GAC9B,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,2BAA2B,CAAC"}
@@ -1,7 +1,11 @@
1
- export { runGh } from './run-gh.js';
1
+ export { runGh, RunGhError } from './run-gh.js';
2
+ export { resolveGitHubAuthToken } from './resolve-github-auth-token.js';
3
+ export { buildGitHubClient, createGitHubClient, GitHubApiError, } from './github-client.js';
4
+ export { formatGitHubAuthRecoveryHint, formatGitHubErrorMessage, GITHUB_AUTH_HINT, hasGitHubAuth, isGitHubAuthError, } from './github-auth.js';
2
5
  export { fetchIssueContext, } from './issue-context.js';
3
6
  export { formatIssueContextForPrompt, formatIssueContextYaml, } from './format-issue-context-prompt.js';
4
7
  export { createGitHubMonitor, DEFAULT_GITHUB_MONITOR_DEBOUNCE_MS, DEFAULT_GITHUB_MONITOR_POLL_INTERVAL_MS, DEFAULT_GITHUB_MONITOR_ACTIVE_POLL_INTERVAL_MS, } from './github-monitor.js';
5
8
  export { emptyGitHubMonitorCursor, isEmptyGitHubMonitorCursor, normalizeGitHubMonitorCursor, } from './github-monitor-cursor.js';
6
- export { fetchGitHubUpdates } from './fetch-github-updates.js';
9
+ export { fetchGitHubUpdates, normalizeStatusCheckRollup } from './fetch-github-updates.js';
10
+ export { GitHubMonitorError, safeUpperString, classifyGitHubMonitorError, createGitHubMonitorPhaseError, } from './github-monitor-error.js';
7
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/github/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EACL,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,kCAAkC,CAAC;AAK1C,OAAO,EACL,mBAAmB,EACnB,kCAAkC,EAClC,uCAAuC,EACvC,8CAA8C,GAC/C,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,4BAA4B,CAAC;AAUpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/github/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAMxE,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAW5B,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,kCAAkC,CAAC;AAK1C,OAAO,EACL,mBAAmB,EACnB,kCAAkC,EAClC,uCAAuC,EACvC,8CAA8C,GAC/C,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,4BAA4B,CAAC;AAUpC,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAK3F,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,0BAA0B,EAC1B,6BAA6B,GAC9B,MAAM,2BAA2B,CAAC"}
@@ -1,4 +1,6 @@
1
+ import type { EnsembleConfig } from '../config/types.js';
1
2
  import type { IssueRef } from '../issue/issue-ref.js';
3
+ import { type GitHubClient, type CreateGitHubClientOptions } from './github-client.js';
2
4
  export interface IssueComment {
3
5
  author: string;
4
6
  body: string;
@@ -12,5 +14,10 @@ export interface IssueContext {
12
14
  labels: string[];
13
15
  comments: IssueComment[];
14
16
  }
15
- export declare function fetchIssueContext(issueUrl: string): Promise<IssueContext>;
17
+ export interface FetchIssueContextOptions {
18
+ ensembleConfig: EnsembleConfig;
19
+ githubClient?: GitHubClient;
20
+ createClientOptions?: Omit<CreateGitHubClientOptions, 'config'>;
21
+ }
22
+ export declare function fetchIssueContext(issueUrl: string, options: FetchIssueContextOptions): Promise<IssueContext>;
16
23
  //# sourceMappingURL=issue-context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"issue-context.d.ts","sourceRoot":"","sources":["../../src/github/issue-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAItD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAcD,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAuB/E"}
1
+ {"version":3,"file":"issue-context.d.ts","sourceRoot":"","sources":["../../src/github/issue-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,yBAAyB,EAC/B,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,wBAAwB;IACvC,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,mBAAmB,CAAC,EAAE,IAAI,CAAC,yBAAyB,EAAE,QAAQ,CAAC,CAAC;CACjE;AAED,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,YAAY,CAAC,CA0BvB"}