@fitlab-ai/agent-infra 0.9.14 → 0.9.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -0
- package/README.zh-CN.md +10 -0
- package/bin/internal-cli.sh +45 -0
- package/dist/bin/internal-cli.js +93 -30
- package/dist/lib/agent-clients/adapters/codex-lifecycle/capability-store.js +165 -27
- package/dist/lib/agent-clients/adapters/codex-lifecycle/sandbox-controller.js +3 -2
- package/dist/lib/defaults.json +103 -103
- package/dist/lib/fs/durable-write.js +37 -0
- package/dist/lib/fs/file-lock.js +111 -0
- package/dist/lib/host-control/audit.js +19 -0
- package/dist/lib/host-control/client.js +142 -0
- package/dist/lib/host-control/command.js +49 -0
- package/dist/lib/host-control/path.js +160 -0
- package/dist/lib/host-control/secure-fs.js +140 -0
- package/dist/lib/host-control/server.js +159 -0
- package/dist/lib/host-control/service.js +112 -0
- package/dist/lib/init.js +11 -2
- package/dist/lib/internal/cli-route-inventory.js +3 -1
- package/dist/lib/internal/codex-lifecycle.js +6 -6
- package/dist/lib/internal/demo-promotion.js +322 -0
- package/dist/lib/internal/demo-transcript.js +454 -0
- package/dist/lib/internal/host-control.js +28 -0
- package/dist/lib/internal/manual-validation.js +322 -0
- package/dist/lib/internal/platform-pr.js +18 -4
- package/dist/lib/internal/release-workflow.js +63 -84
- package/dist/lib/internal/sandbox-control.js +149 -2
- package/dist/lib/internal/task-artifact.js +15 -262
- package/dist/lib/internal/task-create.js +6 -5
- package/dist/lib/internal/task-event.js +37 -37
- package/dist/lib/internal/task-operation-registry.js +101 -3
- package/dist/lib/internal/task-review.js +8 -53
- package/dist/lib/internal/task-validate.js +30 -10
- package/dist/lib/owned-path.js +33 -0
- package/dist/lib/platform/check-status.js +11 -0
- package/dist/lib/platform/comment-safety.js +4 -1
- package/dist/lib/platform/completion-backfill.js +1 -1
- package/dist/lib/platform/github-data.js +241 -0
- package/dist/lib/platform/github-provider.js +15 -20
- package/dist/lib/platform/issue-comments.js +2 -2
- package/dist/lib/platform/issues.js +1 -179
- package/dist/lib/platform/pr-checks.js +12 -65
- package/dist/lib/platform/pr-summary.js +55 -3
- package/dist/lib/platform/pull-requests.js +2 -105
- package/dist/lib/platform/snapshots.js +2 -0
- package/dist/lib/platform/verification-sync.js +127 -142
- package/dist/lib/release/workflow.js +1 -1
- package/dist/lib/sandbox/commands/create.js +7 -2
- package/dist/lib/sandbox/commands/rm.js +3 -1514
- package/dist/lib/sandbox/control/audit.js +203 -0
- package/dist/lib/sandbox/control/client.js +93 -54
- package/dist/lib/sandbox/control/executor.js +129 -65
- package/dist/lib/sandbox/control/finalization-response.js +27 -0
- package/dist/lib/sandbox/control/identity-sentinel.js +107 -0
- package/dist/lib/sandbox/control/lifecycle.js +36 -2
- package/dist/lib/sandbox/control/native-file-lock.js +6 -98
- package/dist/lib/sandbox/control/protocol.js +55 -4
- package/dist/lib/sandbox/control/server.js +491 -120
- package/dist/lib/sandbox/control/state.js +58 -0
- package/dist/lib/sandbox/control/task-workflow.js +74 -0
- package/dist/lib/sandbox/control/workflow-executor.js +99 -0
- package/dist/lib/sandbox/index.js +2 -2
- package/dist/lib/sandbox/recovery.js +28 -4
- package/dist/lib/sandbox/removal.js +1717 -0
- package/dist/lib/sandbox/task-cleanup.js +217 -0
- package/dist/lib/sandbox/workspace-view.js +13 -14
- package/dist/lib/task/activity-intent.js +2 -1
- package/dist/lib/task/activity-log.js +30 -24
- package/dist/lib/task/artifact-command.js +101 -0
- package/dist/lib/task/artifact-lifecycle.js +30 -28
- package/dist/lib/task/artifact-name.js +36 -0
- package/dist/lib/task/artifact-operations.js +23 -69
- package/dist/lib/task/artifact-receipts.js +3 -15
- package/dist/lib/task/artifact-repair-intent.js +87 -16
- package/dist/lib/task/artifact-schema.js +6 -14
- package/dist/lib/task/capabilities.js +12 -19
- package/dist/lib/task/codex-orchestration.js +71 -25
- package/dist/lib/task/commit-identity.js +28 -0
- package/dist/lib/task/commit-operation.js +2 -16
- package/dist/lib/task/control-authority.js +371 -5
- package/dist/lib/task/control-recovery.js +128 -0
- package/dist/lib/task/create.js +62 -9
- package/dist/lib/task/decision-details.js +2 -46
- package/dist/lib/task/events.js +120 -9
- package/dist/lib/task/finalization-state.js +9 -0
- package/dist/lib/task/human-override.js +3 -6
- package/dist/lib/task/implementation-inputs.js +3 -3
- package/dist/lib/task/intermediate-cleanup.js +383 -0
- package/dist/lib/task/invalidation.js +18 -65
- package/dist/lib/task/ledger-intents.js +7 -22
- package/dist/lib/task/ledger.js +1 -3
- package/dist/lib/task/lifecycle.js +19 -1
- package/dist/lib/task/local-artifact-finalization.js +132 -157
- package/dist/lib/task/manual-validation-completion.js +26 -0
- package/dist/lib/task/manual-validation-evidence.js +130 -0
- package/dist/lib/task/manual-validation-receipt.js +101 -0
- package/dist/lib/task/manual-validation-shared.js +40 -0
- package/dist/lib/task/manual-validation-transaction.js +243 -0
- package/dist/lib/task/markdown.js +47 -0
- package/dist/lib/task/orchestration.js +14 -17
- package/dist/lib/task/qualification-audit.js +20 -34
- package/dist/lib/task/review-artifacts.js +2 -18
- package/dist/lib/task/review-command.js +25 -0
- package/dist/lib/task/review-finalization.js +125 -193
- package/dist/lib/task/review-fingerprint.js +2 -2
- package/dist/lib/task/sections.js +34 -56
- package/dist/lib/task/verification-engine.js +116 -323
- package/dist/lib/task/verification.js +1 -1
- package/dist/lib/task/workflow-command.js +17 -0
- package/dist/lib/task/workflow-warning-intents.js +0 -16
- package/dist/lib/task/workflow-warnings.js +28 -2
- package/dist/lib/update.js +2 -0
- package/dist/lifecycle-build-manifest.json +3 -3
- package/lib/agent-clients/adapters/codex-lifecycle/capability-store.ts +223 -33
- package/lib/agent-clients/adapters/codex-lifecycle/sandbox-controller.ts +3 -2
- package/lib/fs/durable-write.ts +29 -0
- package/lib/fs/file-lock.ts +113 -0
- package/lib/host-control/audit.ts +22 -0
- package/lib/host-control/client.ts +172 -0
- package/lib/host-control/command.ts +60 -0
- package/lib/host-control/path.ts +167 -0
- package/lib/host-control/secure-fs.ts +135 -0
- package/lib/host-control/server.ts +180 -0
- package/lib/host-control/service.ts +133 -0
- package/lib/init.ts +15 -2
- package/lib/internal/cli-route-inventory.ts +3 -1
- package/lib/internal/codex-lifecycle.ts +6 -6
- package/lib/internal/demo-promotion.ts +354 -0
- package/lib/internal/demo-transcript.ts +419 -0
- package/lib/internal/host-control.ts +28 -0
- package/lib/internal/manual-validation.ts +306 -0
- package/lib/internal/platform-pr.ts +15 -4
- package/lib/internal/release-workflow.ts +74 -82
- package/lib/internal/sandbox-control.ts +162 -1
- package/lib/internal/task-artifact.ts +13 -216
- package/lib/internal/task-create.ts +5 -5
- package/lib/internal/task-event.ts +20 -11
- package/lib/internal/task-operation-registry.ts +111 -3
- package/lib/internal/task-review.ts +6 -51
- package/lib/internal/task-validate.ts +26 -10
- package/lib/owned-path.ts +26 -0
- package/lib/platform/check-status.ts +9 -0
- package/lib/platform/comment-safety.ts +5 -0
- package/lib/platform/completion-backfill.ts +1 -1
- package/lib/platform/github-data.ts +322 -0
- package/lib/platform/github-provider.ts +15 -20
- package/lib/platform/issue-comments.ts +3 -4
- package/lib/platform/issues.ts +4 -245
- package/lib/platform/pr-checks.ts +13 -77
- package/lib/platform/pr-summary.ts +61 -5
- package/lib/platform/pull-requests.ts +3 -170
- package/lib/platform/snapshots.ts +53 -0
- package/lib/platform/verification-sync.ts +145 -155
- package/lib/release/workflow.ts +3 -3
- package/lib/sandbox/commands/create.ts +7 -6
- package/lib/sandbox/commands/rm.ts +3 -1909
- package/lib/sandbox/control/audit.ts +253 -0
- package/lib/sandbox/control/client.ts +109 -66
- package/lib/sandbox/control/executor.ts +134 -74
- package/lib/sandbox/control/finalization-response.ts +29 -0
- package/lib/sandbox/control/identity-sentinel.ts +137 -0
- package/lib/sandbox/control/lifecycle.ts +45 -3
- package/lib/sandbox/control/native-file-lock.ts +6 -107
- package/lib/sandbox/control/protocol.ts +75 -6
- package/lib/sandbox/control/server.ts +538 -123
- package/lib/sandbox/control/state.ts +78 -0
- package/lib/sandbox/control/task-workflow.ts +95 -0
- package/lib/sandbox/control/workflow-executor.ts +102 -0
- package/lib/sandbox/index.ts +2 -2
- package/lib/sandbox/recovery.ts +28 -5
- package/lib/sandbox/removal.ts +2144 -0
- package/lib/sandbox/task-cleanup.ts +209 -0
- package/lib/sandbox/workspace-view.ts +17 -15
- package/lib/task/activity-intent.ts +2 -2
- package/lib/task/activity-log.ts +27 -19
- package/lib/task/artifact-command.ts +104 -0
- package/lib/task/artifact-lifecycle.ts +31 -26
- package/lib/task/artifact-name.ts +55 -0
- package/lib/task/artifact-operations.ts +22 -68
- package/lib/task/artifact-receipts.ts +3 -14
- package/lib/task/artifact-repair-intent.ts +99 -18
- package/lib/task/artifact-schema.ts +5 -34
- package/lib/task/capabilities.ts +13 -22
- package/lib/task/codex-orchestration.ts +85 -24
- package/lib/task/commit-identity.ts +31 -0
- package/lib/task/commit-operation.ts +2 -16
- package/lib/task/control-authority.ts +502 -5
- package/lib/task/control-recovery.ts +174 -0
- package/lib/task/create.ts +63 -8
- package/lib/task/decision-details.ts +3 -71
- package/lib/task/events.ts +131 -10
- package/lib/task/finalization-state.ts +11 -0
- package/lib/task/human-override.ts +3 -8
- package/lib/task/implementation-inputs.ts +3 -3
- package/lib/task/intermediate-cleanup.ts +455 -0
- package/lib/task/invalidation.ts +18 -62
- package/lib/task/ledger-intents.ts +7 -24
- package/lib/task/ledger.ts +1 -3
- package/lib/task/lifecycle.ts +17 -1
- package/lib/task/local-artifact-finalization.ts +148 -182
- package/lib/task/manual-validation-completion.ts +40 -0
- package/lib/task/manual-validation-evidence.ts +209 -0
- package/lib/task/manual-validation-receipt.ts +152 -0
- package/lib/task/manual-validation-shared.ts +50 -0
- package/lib/task/manual-validation-transaction.ts +304 -0
- package/lib/task/markdown.ts +70 -0
- package/lib/task/orchestration.ts +19 -19
- package/lib/task/qualification-audit.ts +22 -33
- package/lib/task/review-artifacts.ts +1 -20
- package/lib/task/review-command.ts +23 -0
- package/lib/task/review-finalization.ts +131 -259
- package/lib/task/review-fingerprint.ts +2 -2
- package/lib/task/sections.ts +33 -54
- package/lib/task/verification-engine.ts +110 -366
- package/lib/task/verification-types.ts +17 -0
- package/lib/task/verification.ts +1 -1
- package/lib/task/workflow-command.ts +18 -0
- package/lib/task/workflow-warning-intents.ts +0 -13
- package/lib/task/workflow-warnings.ts +21 -2
- package/lib/update.ts +6 -0
- package/package.json +6 -6
- package/templates/.agents/hooks/lifecycle-delegation.js +6 -6
- package/templates/.agents/rules/testing-discipline.en.md +2 -0
- package/templates/.agents/rules/testing-discipline.zh-CN.md +2 -0
- package/templates/.agents/scripts/package.json +3 -0
- package/templates/.agents/skills/complete-manual-validation/SKILL.en.md +32 -20
- package/templates/.agents/skills/complete-manual-validation/SKILL.zh-CN.md +32 -20
- package/templates/.agents/skills/complete-manual-validation/config/verify.en.json +1 -1
- package/templates/.agents/skills/complete-manual-validation/config/verify.zh-CN.json +1 -1
- package/templates/.agents/skills/complete-manual-validation/reference/report-template.en.md +2 -0
- package/templates/.agents/skills/complete-manual-validation/reference/report-template.zh-CN.md +2 -0
- package/templates/.agents/skills/complete-manual-validation/reference/summary-update.en.md +16 -7
- package/templates/.agents/skills/complete-manual-validation/reference/summary-update.zh-CN.md +16 -7
- package/templates/.agents/skills/complete-task/SKILL.en.md +1 -1
- package/templates/.agents/skills/complete-task/SKILL.zh-CN.md +1 -1
- package/templates/.agents/skills/release/SKILL.en.md +7 -3
- package/templates/.agents/skills/release/SKILL.zh-CN.md +7 -3
- package/templates/.agents/skills/run-manual-validation/SKILL.en.md +20 -3
- package/templates/.agents/skills/run-manual-validation/SKILL.zh-CN.md +20 -3
- package/templates/.agents/skills/run-manual-validation/reference/discovery-and-execution.en.md +4 -1
- package/templates/.agents/skills/run-manual-validation/reference/discovery-and-execution.zh-CN.md +4 -1
- package/templates/.agents/skills/run-manual-validation/reference/report-template.en.md +2 -0
- package/templates/.agents/skills/run-manual-validation/reference/report-template.zh-CN.md +2 -0
- package/templates/.agents/skills/run-task/SKILL.en.md +1 -1
- package/templates/.agents/skills/run-task/SKILL.zh-CN.md +1 -1
- package/templates/.agents/skills/test/SKILL.en.md +17 -6
- package/templates/.agents/skills/test/SKILL.zh-CN.md +17 -6
- package/templates/.claude/commands/run-manual-validation.en.md +1 -1
- package/templates/.claude/commands/run-manual-validation.zh-CN.md +1 -1
- package/dist/lib/platform/adapters.js +0 -56
- package/lib/platform/adapters.ts +0 -197
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { normalizePullRequest, type RemotePullRequest } from './github-data.ts';
|
|
1
2
|
import fs from 'node:fs';
|
|
2
3
|
import path from 'node:path';
|
|
3
4
|
import { execFileSync } from 'node:child_process';
|
|
@@ -6,7 +7,7 @@ import { parseTypedTaskFrontmatter } from '../task/frontmatter.ts';
|
|
|
6
7
|
import { resolveTaskRef } from '../task/resolve-ref.ts';
|
|
7
8
|
import { extractSection } from '../task/sections.ts';
|
|
8
9
|
import { captureTaskWriteMetadata, writeTask } from '../task/write.ts';
|
|
9
|
-
import type { PlatformChangeRequestSnapshot } from './
|
|
10
|
+
import type { PlatformChangeRequestSnapshot } from './snapshots.ts';
|
|
10
11
|
import { resolvePlatformProviderContext } from './context.ts';
|
|
11
12
|
import type { PlatformClient } from './context.ts';
|
|
12
13
|
import { inspectPlatformIssue } from './issues.ts';
|
|
@@ -61,7 +62,6 @@ type PullRequestResult = PlatformResult & {
|
|
|
61
62
|
effect: 'no-op' | 'applied' | 'unknown';
|
|
62
63
|
}>;
|
|
63
64
|
};
|
|
64
|
-
type GitHubClient = PlatformClient;
|
|
65
65
|
type InspectionOptions = { cwd?: string; client?: PlatformClient; runtimeVersion?: string };
|
|
66
66
|
type SharedOptions = { cwd?: string; client?: PlatformClient; runtimeVersion?: string };
|
|
67
67
|
type CreateOptions = SharedOptions & {
|
|
@@ -93,54 +93,6 @@ type ExternalPullRequestResult = PullRequestResult & {
|
|
|
93
93
|
|
|
94
94
|
type CreatePhase = 'before-post' | 'post-dispatched' | 'post-accepted';
|
|
95
95
|
|
|
96
|
-
type RemotePullRequest = {
|
|
97
|
-
number?: number;
|
|
98
|
-
node_id?: string;
|
|
99
|
-
html_url?: string;
|
|
100
|
-
state?: string;
|
|
101
|
-
title?: string;
|
|
102
|
-
body?: string | null;
|
|
103
|
-
draft?: boolean;
|
|
104
|
-
pull_request?: unknown;
|
|
105
|
-
head?: { ref?: string; sha?: string; repo?: { full_name?: string } | null };
|
|
106
|
-
base?: { ref?: string; sha?: string; repo?: { full_name?: string } | null };
|
|
107
|
-
merged_at?: string | null;
|
|
108
|
-
merge_commit_sha?: string | null;
|
|
109
|
-
labels?: Array<string | { name?: string }>;
|
|
110
|
-
assignees?: Array<{ login?: string }>;
|
|
111
|
-
milestone?: { title?: string } | null;
|
|
112
|
-
mergeable?: boolean | null;
|
|
113
|
-
mergeable_state?: string | null;
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
type ClosingPullRequestNode = {
|
|
117
|
-
number?: number;
|
|
118
|
-
id?: string;
|
|
119
|
-
url?: string;
|
|
120
|
-
state?: string;
|
|
121
|
-
title?: string;
|
|
122
|
-
body?: string | null;
|
|
123
|
-
isDraft?: boolean;
|
|
124
|
-
headRefName?: string;
|
|
125
|
-
headRefOid?: string;
|
|
126
|
-
headRepository?: { nameWithOwner?: string } | null;
|
|
127
|
-
baseRefName?: string;
|
|
128
|
-
baseRefOid?: string;
|
|
129
|
-
baseRepository?: { nameWithOwner?: string } | null;
|
|
130
|
-
mergedAt?: string | null;
|
|
131
|
-
mergeCommit?: { oid?: string } | null;
|
|
132
|
-
labels?: { nodes?: Array<{ name?: string }> };
|
|
133
|
-
assignees?: { nodes?: Array<{ login?: string }> };
|
|
134
|
-
milestone?: { title?: string } | null;
|
|
135
|
-
};
|
|
136
|
-
|
|
137
|
-
type ClosingPullRequestPage = {
|
|
138
|
-
data?: { repository?: { issue?: { closedByPullRequestsReferences?: {
|
|
139
|
-
nodes?: ClosingPullRequestNode[];
|
|
140
|
-
pageInfo?: { hasNextPage?: boolean; endCursor?: string | null };
|
|
141
|
-
} } } };
|
|
142
|
-
};
|
|
143
|
-
|
|
144
96
|
function warningResultForPrimary(primaryResult: PullRequestPrimaryResult): NonNullable<PullRequestResult['result']> {
|
|
145
97
|
if (primaryResult === 'pr_created') return 'pr_created_with_warnings';
|
|
146
98
|
if (primaryResult === 'pr_reused') return 'pr_reused_with_warnings';
|
|
@@ -189,57 +141,6 @@ const PRECONDITION_NOT_CREATED: CreationOutcome = {
|
|
|
189
141
|
kind: 'not-created', reason: 'precondition-failed', createdByCurrentOperation: false
|
|
190
142
|
};
|
|
191
143
|
|
|
192
|
-
function normalizePullRequest(remote: RemotePullRequest, repository: string): PullRequestSnapshot | null {
|
|
193
|
-
const number = Number(remote.number);
|
|
194
|
-
const headRepository = remote.head?.repo?.full_name;
|
|
195
|
-
const baseRepository = remote.base?.repo?.full_name;
|
|
196
|
-
if (!Number.isInteger(number) || number <= 0 || !remote.node_id || !remote.html_url ||
|
|
197
|
-
!remote.head?.ref || !remote.head.sha || !headRepository || !remote.base?.ref || !baseRepository) return null;
|
|
198
|
-
const mergeabilityDetail = remote.mergeable_state?.trim().toLowerCase() || null;
|
|
199
|
-
const mergeability = remote.mergeable === false
|
|
200
|
-
? { state: 'conflicting' as const, detail: mergeabilityDetail }
|
|
201
|
-
: remote.mergeable === true && mergeabilityDetail !== 'dirty'
|
|
202
|
-
? { state: 'mergeable' as const, detail: mergeabilityDetail }
|
|
203
|
-
: { state: 'unknown' as const, detail: mergeabilityDetail };
|
|
204
|
-
return {
|
|
205
|
-
repository,
|
|
206
|
-
number,
|
|
207
|
-
nodeId: remote.node_id,
|
|
208
|
-
url: remote.html_url,
|
|
209
|
-
state: remote.state === 'closed' ? 'closed' : 'open',
|
|
210
|
-
title: remote.title || '',
|
|
211
|
-
body: remote.body || '',
|
|
212
|
-
draft: Boolean(remote.draft),
|
|
213
|
-
head: { repository: headRepository, ref: remote.head.ref, sha: remote.head.sha },
|
|
214
|
-
base: { repository: baseRepository, ref: remote.base.ref, sha: remote.base.sha || '' },
|
|
215
|
-
mergedAt: remote.merged_at || null,
|
|
216
|
-
mergeCommitSha: remote.merge_commit_sha || null,
|
|
217
|
-
labels: (remote.labels || []).map((label) => typeof label === 'string' ? label : label.name || '').filter(Boolean).sort(),
|
|
218
|
-
assignees: (remote.assignees || []).map((assignee) => assignee.login || '').filter(Boolean).sort(),
|
|
219
|
-
milestone: remote.milestone?.title || null,
|
|
220
|
-
mergeability
|
|
221
|
-
};
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
function normalizeClosingPullRequest(node: ClosingPullRequestNode, repository: string): PullRequestSnapshot | null {
|
|
225
|
-
return normalizePullRequest({
|
|
226
|
-
number: node.number,
|
|
227
|
-
node_id: node.id,
|
|
228
|
-
html_url: node.url,
|
|
229
|
-
state: node.state === 'OPEN' ? 'open' : 'closed',
|
|
230
|
-
title: node.title,
|
|
231
|
-
body: node.body,
|
|
232
|
-
draft: node.isDraft,
|
|
233
|
-
head: { ref: node.headRefName, sha: node.headRefOid, repo: node.headRepository ? { full_name: node.headRepository.nameWithOwner } : null },
|
|
234
|
-
base: { ref: node.baseRefName, sha: node.baseRefOid, repo: node.baseRepository ? { full_name: node.baseRepository.nameWithOwner } : null },
|
|
235
|
-
merged_at: node.mergedAt,
|
|
236
|
-
merge_commit_sha: node.mergeCommit?.oid,
|
|
237
|
-
labels: node.labels?.nodes,
|
|
238
|
-
assignees: node.assignees?.nodes,
|
|
239
|
-
milestone: node.milestone
|
|
240
|
-
}, repository);
|
|
241
|
-
}
|
|
242
|
-
|
|
243
144
|
function repositoryKey(repository: string): string {
|
|
244
145
|
return repository.trim().toLowerCase();
|
|
245
146
|
}
|
|
@@ -329,51 +230,6 @@ function selectExternalPullRequest(
|
|
|
329
230
|
return { status: 'selected', source: 'unique', selected: eligible[0]!, candidates, eligible };
|
|
330
231
|
}
|
|
331
232
|
|
|
332
|
-
const CLOSING_PULL_REQUESTS_QUERY = `query($owner:String!,$name:String!,$issue:Int!,$cursor:String){repository(owner:$owner,name:$name){issue(number:$issue){closedByPullRequestsReferences(first:100,after:$cursor){nodes{number id url state title body isDraft headRefName headRefOid headRepository{nameWithOwner} baseRefName baseRefOid baseRepository{nameWithOwner} mergedAt mergeCommit{oid} labels(first:100){nodes{name}} assignees(first:100){nodes{login}} milestone{title}} pageInfo{hasNextPage endCursor}}}}}`;
|
|
333
|
-
|
|
334
|
-
function inspectGitHubIssueClosingChangeRequests(
|
|
335
|
-
client: GitHubClient,
|
|
336
|
-
repository: string,
|
|
337
|
-
issueNumber: number,
|
|
338
|
-
cwd: string
|
|
339
|
-
) {
|
|
340
|
-
const [owner, name] = repository.split('/');
|
|
341
|
-
if (!owner || !name || !Number.isInteger(issueNumber) || issueNumber <= 0) return {
|
|
342
|
-
ok: false as const,
|
|
343
|
-
error: { code: 'PR_IDENTITY_INVALID', message: 'Repository or Issue identity is invalid', retryable: false }
|
|
344
|
-
};
|
|
345
|
-
const candidates: PullRequestSnapshot[] = [];
|
|
346
|
-
let cursor: string | null = null;
|
|
347
|
-
for (;;) {
|
|
348
|
-
const args = [
|
|
349
|
-
'api', 'graphql', '-f', `query=${CLOSING_PULL_REQUESTS_QUERY}`,
|
|
350
|
-
'-F', `owner=${owner}`, '-F', `name=${name}`, '-F', `issue=${issueNumber}`
|
|
351
|
-
];
|
|
352
|
-
if (cursor) args.push('-F', `cursor=${cursor}`);
|
|
353
|
-
const response = client.json<ClosingPullRequestPage>(args, { cwd });
|
|
354
|
-
if (!response.ok) return response;
|
|
355
|
-
const connection = response.value?.data?.repository?.issue?.closedByPullRequestsReferences;
|
|
356
|
-
if (!connection || !Array.isArray(connection.nodes) || !connection.pageInfo) return {
|
|
357
|
-
ok: false as const,
|
|
358
|
-
error: { code: 'PR_IDENTITY_INVALID', message: 'Closing pull request response is incomplete', retryable: false }
|
|
359
|
-
};
|
|
360
|
-
for (const node of connection.nodes) {
|
|
361
|
-
const normalized = normalizeClosingPullRequest(node, repository);
|
|
362
|
-
if (!normalized) return {
|
|
363
|
-
ok: false as const,
|
|
364
|
-
error: { code: 'PR_IDENTITY_INVALID', message: 'Closing pull request identity is incomplete', retryable: false }
|
|
365
|
-
};
|
|
366
|
-
candidates.push(normalized);
|
|
367
|
-
}
|
|
368
|
-
if (!connection.pageInfo.hasNextPage) return { ok: true as const, value: candidates };
|
|
369
|
-
if (!connection.pageInfo.endCursor || connection.pageInfo.endCursor === cursor) return {
|
|
370
|
-
ok: false as const,
|
|
371
|
-
error: { code: 'PR_IDENTITY_INVALID', message: 'Closing pull request pagination cursor is invalid', retryable: false }
|
|
372
|
-
};
|
|
373
|
-
cursor = connection.pageInfo.endCursor;
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
|
|
377
233
|
function expectedHead(repository: string, head: string): { repository: string; ref: string } {
|
|
378
234
|
const colon = head.indexOf(':');
|
|
379
235
|
if (colon === -1) return { repository, ref: head };
|
|
@@ -606,15 +462,6 @@ async function inspectExternalPullRequest(
|
|
|
606
462
|
});
|
|
607
463
|
}
|
|
608
464
|
|
|
609
|
-
function inspectGitHubPullRequest(client: GitHubClient, repository: string, number: number, cwd: string) {
|
|
610
|
-
const fetched = client.json<RemotePullRequest>(['api', `repos/${repository}/pulls/${number}`], { cwd });
|
|
611
|
-
if (!fetched.ok) return fetched;
|
|
612
|
-
const pullRequest = normalizePullRequest(fetched.value, repository);
|
|
613
|
-
return pullRequest
|
|
614
|
-
? { ok: true as const, value: pullRequest }
|
|
615
|
-
: { ok: false as const, error: { code: 'PR_IDENTITY_INVALID', message: 'Remote resource is not a valid pull request', retryable: false } };
|
|
616
|
-
}
|
|
617
|
-
|
|
618
465
|
async function inspectPlatformPullRequest(taskRef: string, options: InspectionOptions = {}): Promise<PullRequestResult> {
|
|
619
466
|
const base = await resolvedContext(taskRef, options);
|
|
620
467
|
if (!base.ok) return base.output;
|
|
@@ -1656,20 +1503,6 @@ async function skipPlatformPullRequestFact(taskRef: string, options: SkipFactOpt
|
|
|
1656
1503
|
}
|
|
1657
1504
|
}
|
|
1658
1505
|
|
|
1659
|
-
export {
|
|
1660
|
-
bindPlatformPullRequest,
|
|
1661
|
-
createPlatformPullRequest,
|
|
1662
|
-
inspectGitHubPullRequest,
|
|
1663
|
-
inspectGitHubIssueClosingChangeRequests,
|
|
1664
|
-
inspectPlatformPullRequest,
|
|
1665
|
-
inspectPlatformPullRequestByNumber,
|
|
1666
|
-
normalizePullRequest,
|
|
1667
|
-
resolveExternalPullRequest,
|
|
1668
|
-
skipPlatformPullRequestFact,
|
|
1669
|
-
selectExternalPullRequest,
|
|
1670
|
-
selectPullRequest,
|
|
1671
|
-
syncPlatformPullRequest,
|
|
1672
|
-
syncPlatformPullRequestInLabels
|
|
1673
|
-
};
|
|
1506
|
+
export { bindPlatformPullRequest, createPlatformPullRequest, inspectPlatformPullRequest, inspectPlatformPullRequestByNumber, resolveExternalPullRequest, skipPlatformPullRequestFact, selectExternalPullRequest, selectPullRequest, syncPlatformPullRequest, syncPlatformPullRequestInLabels };
|
|
1674
1507
|
export type { BindOptions, CreateOptions, ExternalPullRequestResult, ExternalPullRequestSelection, PullRequestPrimaryResult, PullRequestResult, PullRequestSnapshot, ResolveExternalOptions, SkipFactOptions, SyncOptions };
|
|
1675
1508
|
export { warningResultForPrimary };
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { ResourceIdentity } from './resource-identity.ts';
|
|
2
|
+
|
|
3
|
+
export type PlatformIssueSnapshot = {
|
|
4
|
+
repository: string;
|
|
5
|
+
number: number;
|
|
6
|
+
identity?: ResourceIdentity;
|
|
7
|
+
databaseId: number | null;
|
|
8
|
+
nodeId: string;
|
|
9
|
+
url: string;
|
|
10
|
+
state: 'open' | 'closed';
|
|
11
|
+
title: string;
|
|
12
|
+
body: string;
|
|
13
|
+
labels: string[];
|
|
14
|
+
assignees: string[];
|
|
15
|
+
milestone: string | null;
|
|
16
|
+
issueType: string | null;
|
|
17
|
+
fields: Record<string, string | number | null>;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export type PlatformMergeability = {
|
|
21
|
+
state: 'mergeable' | 'conflicting' | 'unknown';
|
|
22
|
+
detail: string | null;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export type PlatformChangeRequestSnapshot = {
|
|
26
|
+
repository: string;
|
|
27
|
+
number: number;
|
|
28
|
+
nodeId: string;
|
|
29
|
+
url: string;
|
|
30
|
+
state: 'open' | 'closed';
|
|
31
|
+
title: string;
|
|
32
|
+
body: string;
|
|
33
|
+
draft: boolean;
|
|
34
|
+
head: { repository: string; ref: string; sha: string };
|
|
35
|
+
base: { repository: string; ref: string; sha: string };
|
|
36
|
+
mergedAt: string | null;
|
|
37
|
+
mergeCommitSha: string | null;
|
|
38
|
+
labels: string[];
|
|
39
|
+
assignees: string[];
|
|
40
|
+
milestone: string | null;
|
|
41
|
+
mergeability?: PlatformMergeability;
|
|
42
|
+
identity?: ResourceIdentity;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export type PlatformCheckSnapshot = {
|
|
46
|
+
name: string;
|
|
47
|
+
bucket: 'pass' | 'fail' | 'pending' | 'cancel';
|
|
48
|
+
workflow?: string | null;
|
|
49
|
+
conclusion?: string | null;
|
|
50
|
+
detailsUrl?: string | null;
|
|
51
|
+
startedAt?: string | null;
|
|
52
|
+
completedAt?: string | null;
|
|
53
|
+
};
|