@getpaseo/server 0.1.71 → 0.1.72

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 (79) hide show
  1. package/dist/server/server/agent/agent-response-loop.d.ts.map +1 -1
  2. package/dist/server/server/agent/agent-response-loop.js +2 -1
  3. package/dist/server/server/agent/agent-response-loop.js.map +1 -1
  4. package/dist/server/server/agent/create-agent-title.d.ts +8 -0
  5. package/dist/server/server/agent/create-agent-title.d.ts.map +1 -0
  6. package/dist/server/server/agent/create-agent-title.js +29 -0
  7. package/dist/server/server/agent/create-agent-title.js.map +1 -0
  8. package/dist/server/server/agent/import-sessions.d.ts +20 -1
  9. package/dist/server/server/agent/import-sessions.d.ts.map +1 -1
  10. package/dist/server/server/agent/import-sessions.js +101 -0
  11. package/dist/server/server/agent/import-sessions.js.map +1 -1
  12. package/dist/server/server/agent/provider-registry.d.ts.map +1 -1
  13. package/dist/server/server/agent/provider-registry.js +2 -1
  14. package/dist/server/server/agent/provider-registry.js.map +1 -1
  15. package/dist/server/server/agent/providers/codex/app-server-transport.d.ts +25 -0
  16. package/dist/server/server/agent/providers/codex/app-server-transport.d.ts.map +1 -0
  17. package/dist/server/server/agent/providers/codex/app-server-transport.js +183 -0
  18. package/dist/server/server/agent/providers/codex/app-server-transport.js.map +1 -0
  19. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts +1 -21
  20. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts.map +1 -1
  21. package/dist/server/server/agent/providers/codex-app-server-agent.js +1 -170
  22. package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
  23. package/dist/server/server/agent/providers/opencode/runtime.d.ts +27 -0
  24. package/dist/server/server/agent/providers/opencode/runtime.d.ts.map +1 -0
  25. package/dist/server/server/agent/providers/opencode/runtime.js +5 -0
  26. package/dist/server/server/agent/providers/opencode/runtime.js.map +1 -0
  27. package/dist/server/server/agent/providers/opencode/server-manager.d.ts +55 -0
  28. package/dist/server/server/agent/providers/opencode/server-manager.d.ts.map +1 -0
  29. package/dist/server/server/agent/providers/opencode/server-manager.js +255 -0
  30. package/dist/server/server/agent/providers/opencode/server-manager.js.map +1 -0
  31. package/dist/server/server/agent/providers/opencode/test-server-manager.d.ts +22 -0
  32. package/dist/server/server/agent/providers/opencode/test-server-manager.d.ts.map +1 -0
  33. package/dist/server/server/agent/providers/opencode/test-server-manager.js +28 -0
  34. package/dist/server/server/agent/providers/opencode/test-server-manager.js.map +1 -0
  35. package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-runtime.d.ts +75 -0
  36. package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-runtime.d.ts.map +1 -0
  37. package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-runtime.js +169 -0
  38. package/dist/server/server/agent/providers/opencode/test-utils/test-opencode-runtime.js.map +1 -0
  39. package/dist/server/server/agent/providers/opencode-agent.d.ts +5 -35
  40. package/dist/server/server/agent/providers/opencode-agent.d.ts.map +1 -1
  41. package/dist/server/server/agent/providers/opencode-agent.js +28 -258
  42. package/dist/server/server/agent/providers/opencode-agent.js.map +1 -1
  43. package/dist/server/server/agent/providers/pi-direct-agent.d.ts +8 -3
  44. package/dist/server/server/agent/providers/pi-direct-agent.d.ts.map +1 -1
  45. package/dist/server/server/agent/providers/pi-direct-agent.js +44 -34
  46. package/dist/server/server/agent/providers/pi-direct-agent.js.map +1 -1
  47. package/dist/server/server/checkout/status-projection.d.ts +19 -0
  48. package/dist/server/server/checkout/status-projection.d.ts.map +1 -0
  49. package/dist/server/server/checkout/status-projection.js +98 -0
  50. package/dist/server/server/checkout/status-projection.js.map +1 -0
  51. package/dist/server/server/paseo-worktree-service.d.ts +2 -1
  52. package/dist/server/server/paseo-worktree-service.d.ts.map +1 -1
  53. package/dist/server/server/paseo-worktree-service.js +30 -3
  54. package/dist/server/server/paseo-worktree-service.js.map +1 -1
  55. package/dist/server/server/session.d.ts +1 -17
  56. package/dist/server/server/session.d.ts.map +1 -1
  57. package/dist/server/server/session.js +24 -233
  58. package/dist/server/server/session.js.map +1 -1
  59. package/dist/server/server/workspace-directory.d.ts +0 -2
  60. package/dist/server/server/workspace-directory.d.ts.map +1 -1
  61. package/dist/server/server/workspace-directory.js +9 -26
  62. package/dist/server/server/workspace-directory.js.map +1 -1
  63. package/dist/server/shared/agent-state-bucket.d.ts +13 -0
  64. package/dist/server/shared/agent-state-bucket.d.ts.map +1 -0
  65. package/dist/server/shared/agent-state-bucket.js +41 -0
  66. package/dist/server/shared/agent-state-bucket.js.map +1 -0
  67. package/dist/server/shared/git-remote.d.ts +16 -0
  68. package/dist/server/shared/git-remote.d.ts.map +1 -0
  69. package/dist/server/shared/git-remote.js +72 -0
  70. package/dist/server/shared/git-remote.js.map +1 -0
  71. package/dist/server/utils/checkout-git.d.ts +1 -0
  72. package/dist/server/utils/checkout-git.d.ts.map +1 -1
  73. package/dist/server/utils/checkout-git.js +3 -0
  74. package/dist/server/utils/checkout-git.js.map +1 -1
  75. package/dist/server/utils/github-remote.d.ts +3 -7
  76. package/dist/server/utils/github-remote.d.ts.map +1 -1
  77. package/dist/server/utils/github-remote.js +4 -70
  78. package/dist/server/utils/github-remote.js.map +1 -1
  79. package/package.json +4 -4
@@ -29,15 +29,16 @@ import { deriveProjectSlug } from "./workspace-git-metadata.js";
29
29
  import { spawnWorkspaceScript } from "./worktree-bootstrap.js";
30
30
  import { applyMutableProviderConfigToOverrides } from "./daemon-config-store.js";
31
31
  import { getErrorMessage, getErrorMessageOr } from "../shared/error-utils.js";
32
+ import { getAgentStatusPriority } from "../shared/agent-state-bucket.js";
32
33
  import { buildProviderRegistry } from "./agent/provider-registry.js";
33
34
  import { resolveSnapshotCwd } from "./agent/provider-snapshot-manager.js";
34
35
  import { scheduleAgentMetadataGeneration } from "./agent/agent-metadata-generator.js";
36
+ import { resolveCreateAgentTitles } from "./agent/create-agent-title.js";
35
37
  import { buildStoredAgentPayload, resolveEffectiveThinkingOptionId, resolveStoredAgentPayloadUpdatedAt, toAgentPayload, } from "./agent/agent-projections.js";
36
- import { MAX_EXPLICIT_AGENT_TITLE_CHARS } from "./agent/agent-title-limits.js";
37
38
  import { appendTimelineItemIfAgentKnown, emitLiveTimelineItemIfAgentKnown, } from "./agent/timeline-append.js";
38
39
  import { projectTimelineRows, selectTimelineWindowByProjectedLimit, } from "./agent/timeline-projection.js";
39
40
  import { DEFAULT_STRUCTURED_GENERATION_PROVIDERS, StructuredAgentFallbackError, StructuredAgentResponseError, generateStructuredAgentResponseWithFallback, } from "./agent/agent-response-loop.js";
40
- import { ImportSessionsRequestError, listImportableProviderSessions, normalizeImportAgentRequest, } from "./agent/import-sessions.js";
41
+ import { ImportSessionsRequestError, importProviderSession, listImportableProviderSessions, normalizeImportAgentRequest, } from "./agent/import-sessions.js";
41
42
  import { checkoutLiteFromGitSnapshot, normalizeWorkspaceId as normalizePersistedWorkspaceId, deriveProjectGroupingName, classifyDirectoryForProjectMembership, deriveWorkspaceDisplayName, } from "./workspace-registry-model.js";
42
43
  import { createPersistedProjectRecord, createPersistedWorkspaceRecord, } from "./workspace-registry.js";
43
44
  import { buildVoiceModeSystemPrompt, stripVoiceModeSystemPrompt, wrapSpokenInput, } from "./voice-config.js";
@@ -52,6 +53,7 @@ import { getProjectIcon } from "../utils/project-icon.js";
52
53
  import { expandTilde } from "../utils/path.js";
53
54
  import { searchHomeDirectories, searchWorkspaceEntries } from "../utils/directory-suggestions.js";
54
55
  import { toCheckoutError } from "./checkout-git-utils.js";
56
+ import { buildCheckoutPrStatusPayloadFromSnapshot, buildCheckoutStatusPayloadFromSnapshot, } from "./checkout/status-projection.js";
55
57
  import { toResolver } from "./speech/provider-resolver.js";
56
58
  import { resolveClientMessageId } from "./client-message-id.js";
57
59
  import { ChatServiceError, parseMentionAgentIds, } from "./chat/chat-service.js";
@@ -63,7 +65,6 @@ import { attemptFirstAgentBranchAutoName, createPaseoWorktree, } from "./paseo-w
63
65
  import { generateBranchNameFromFirstAgentContext } from "./worktree-branch-name-generator.js";
64
66
  import { assertSafeGitRef as assertWorktreeSafeGitRef, buildAgentSessionConfig as buildWorktreeAgentSessionConfig, createPaseoWorktreeWorkflow as createWorktreeWorkflow, handleCreatePaseoWorktreeRequest as handleCreateWorktreeRequest, handlePaseoWorktreeArchiveRequest as handleWorktreeArchiveRequest, handlePaseoWorktreeListRequest as handleWorktreeListRequest, handleWorkspaceSetupStatusRequest as handleWorkspaceSetupStatusRequestMessage, } from "./worktree-session.js";
65
67
  import { toWorktreeWireError } from "./worktree-errors.js";
66
- const MAX_INITIAL_AGENT_TITLE_CHARS = Math.min(60, MAX_EXPLICIT_AGENT_TITLE_CHARS);
67
68
  const WORKSPACE_GIT_WATCH_REMOVED_STATE_KEY = "__removed__";
68
69
  async function resolveKnownProjectRootForConfig(input) {
69
70
  const requestedRoot = canonicalizeConfigRoot(input.repoRoot);
@@ -184,44 +185,6 @@ function beginAgentDeleteIfSupported(agentStorage, agentId) {
184
185
  agentStorage.beginDelete(agentId);
185
186
  }
186
187
  }
187
- function deriveInitialAgentTitle(prompt) {
188
- const firstContentLine = prompt
189
- .split(/\r?\n/)
190
- .map((line) => line.trim())
191
- .find((line) => line.length > 0);
192
- if (!firstContentLine) {
193
- return null;
194
- }
195
- const normalized = firstContentLine.replace(/\s+/g, " ").trim();
196
- if (!normalized) {
197
- return null;
198
- }
199
- const clamped = normalized.slice(0, MAX_INITIAL_AGENT_TITLE_CHARS).trim();
200
- return clamped.length > 0 ? clamped : null;
201
- }
202
- export function resolveCreateAgentTitles(options) {
203
- const explicitTitle = typeof options.configTitle === "string" && options.configTitle.trim().length > 0
204
- ? options.configTitle.trim()
205
- : null;
206
- const trimmedPrompt = options.initialPrompt?.trim();
207
- const provisionalTitle = explicitTitle ?? (trimmedPrompt ? deriveInitialAgentTitle(trimmedPrompt) : null);
208
- return {
209
- explicitTitle,
210
- provisionalTitle,
211
- };
212
- }
213
- function getFirstUserMessageText(timeline) {
214
- for (const item of timeline) {
215
- if (item.type !== "user_message") {
216
- continue;
217
- }
218
- const text = item.text.trim();
219
- if (text) {
220
- return text;
221
- }
222
- }
223
- return null;
224
- }
225
188
  const FETCH_AGENTS_SORT_KEYS = ["status_priority", "created_at", "updated_at", "title"];
226
189
  export function resolveWaitForFinishError(options) {
227
190
  if (options.status !== "error") {
@@ -255,31 +218,6 @@ class VoiceFeatureUnavailableError extends Error {
255
218
  this.missingModelIds = [...context.missingModelIds];
256
219
  }
257
220
  }
258
- function buildImportPersistenceHandle(input) {
259
- const cwd = input.cwd ?? process.cwd();
260
- return {
261
- provider: input.provider,
262
- sessionId: input.providerHandleId,
263
- nativeHandle: input.providerHandleId,
264
- metadata: {
265
- provider: input.provider,
266
- cwd,
267
- },
268
- };
269
- }
270
- function applyImportCwdOverride(handle, cwd) {
271
- if (!cwd) {
272
- return handle;
273
- }
274
- return {
275
- ...handle,
276
- metadata: {
277
- ...handle.metadata,
278
- provider: handle.provider,
279
- cwd,
280
- },
281
- };
282
- }
283
221
  function convertPCMToWavBuffer(pcmBuffer, sampleRate, channels, bitsPerSample) {
284
222
  const headerSize = 44;
285
223
  const wavBuffer = Buffer.alloc(headerSize + pcmBuffer.length);
@@ -369,7 +307,12 @@ export class Session {
369
307
  getSortValue: (agent, key) => {
370
308
  switch (key) {
371
309
  case "status_priority":
372
- return this.getStatusPriority(agent);
310
+ return getAgentStatusPriority({
311
+ status: agent.status,
312
+ pendingPermissionCount: agent.pendingPermissions?.length ?? 0,
313
+ requiresAttention: agent.requiresAttention,
314
+ attentionReason: agent.attentionReason ?? null,
315
+ });
373
316
  case "created_at":
374
317
  return Date.parse(agent.createdAt);
375
318
  case "updated_at":
@@ -2195,26 +2138,18 @@ export class Session {
2195
2138
  });
2196
2139
  return;
2197
2140
  }
2198
- const { provider, providerHandleId, cwd, labels, requestId } = normalized;
2141
+ const { provider, providerHandleId, requestId } = normalized;
2199
2142
  this.sessionLogger.info({ providerHandleId, provider }, `Importing agent ${providerHandleId} (${provider})`);
2200
2143
  try {
2201
- const descriptor = await this.agentManager.findPersistedAgent(provider, providerHandleId);
2202
- if (!descriptor && provider === "opencode" && !cwd) {
2203
- throw new Error("OpenCode sessions require --cwd when the session cannot be found in persisted agents");
2204
- }
2205
- const handle = descriptor
2206
- ? applyImportCwdOverride(descriptor.persistence, cwd)
2207
- : buildImportPersistenceHandle({ provider, providerHandleId, cwd });
2208
- const overrides = cwd ? { cwd } : undefined;
2209
- await this.unarchiveAgentByHandle(handle);
2210
- const snapshot = await this.agentManager.resumeAgentFromPersistence(handle, overrides, undefined, {
2211
- labels,
2144
+ const { snapshot, timelineSize } = await importProviderSession({
2145
+ request: normalized,
2146
+ agentManager: this.agentManager,
2147
+ agentStorage: this.agentStorage,
2148
+ workspaceGitService: this.workspaceGitService,
2149
+ paseoHome: this.paseoHome,
2150
+ logger: this.sessionLogger,
2212
2151
  });
2213
- await unarchiveAgentState(this.agentStorage, this.agentManager, snapshot.id);
2214
- await this.agentManager.hydrateTimelineFromProvider(snapshot.id);
2215
- await this.applyImportedAgentTitle(snapshot);
2216
2152
  await this.forwardAgentUpdate(snapshot);
2217
- const timelineSize = this.agentManager.getTimeline(snapshot.id).length;
2218
2153
  const agentPayload = await this.buildAgentPayload(snapshot);
2219
2154
  this.emit({
2220
2155
  type: "status",
@@ -2249,29 +2184,6 @@ export class Session {
2249
2184
  });
2250
2185
  }
2251
2186
  }
2252
- async applyImportedAgentTitle(snapshot) {
2253
- const initialPrompt = getFirstUserMessageText(this.agentManager.getTimeline(snapshot.id));
2254
- if (!initialPrompt) {
2255
- return;
2256
- }
2257
- const { explicitTitle, provisionalTitle } = resolveCreateAgentTitles({
2258
- configTitle: snapshot.config.title,
2259
- initialPrompt,
2260
- });
2261
- if (!explicitTitle && provisionalTitle) {
2262
- await this.agentManager.setTitle(snapshot.id, provisionalTitle);
2263
- }
2264
- scheduleAgentMetadataGeneration({
2265
- agentManager: this.agentManager,
2266
- agentId: snapshot.id,
2267
- cwd: snapshot.cwd,
2268
- workspaceGitService: this.workspaceGitService,
2269
- initialPrompt,
2270
- explicitTitle,
2271
- paseoHome: this.paseoHome,
2272
- logger: this.sessionLogger,
2273
- });
2274
- }
2275
2187
  async handleRefreshAgentRequest(msg) {
2276
2188
  const { agentId, requestId } = msg;
2277
2189
  this.sessionLogger.info({ agentId }, `Refreshing agent ${agentId} from persistence`);
@@ -3227,7 +3139,7 @@ export class Session {
3227
3139
  const snapshot = await this.workspaceGitService.getSnapshot(resolvedCwd);
3228
3140
  this.emit({
3229
3141
  type: "checkout_status_response",
3230
- payload: this.buildCheckoutStatusPayloadFromSnapshot({
3142
+ payload: buildCheckoutStatusPayloadFromSnapshot({
3231
3143
  cwd,
3232
3144
  requestId,
3233
3145
  snapshot,
@@ -3537,94 +3449,18 @@ export class Session {
3537
3449
  this.checkoutDiffSubscriptions.get(msg.subscriptionId)?.();
3538
3450
  this.checkoutDiffSubscriptions.delete(msg.subscriptionId);
3539
3451
  }
3540
- buildCheckoutStatusPayloadFromSnapshot({ cwd, requestId, snapshot, }) {
3541
- if (!snapshot.git.isGit) {
3542
- return {
3543
- cwd,
3544
- isGit: false,
3545
- repoRoot: null,
3546
- currentBranch: null,
3547
- isDirty: null,
3548
- baseRef: null,
3549
- aheadBehind: null,
3550
- aheadOfOrigin: null,
3551
- behindOfOrigin: null,
3552
- hasRemote: false,
3553
- remoteUrl: null,
3554
- isPaseoOwnedWorktree: false,
3555
- error: null,
3556
- requestId,
3557
- };
3558
- }
3559
- if (snapshot.git.repoRoot === null || snapshot.git.isDirty === null) {
3560
- throw new Error("Workspace git snapshot is missing required checkout status fields");
3561
- }
3562
- if (snapshot.git.isPaseoOwnedWorktree) {
3563
- if (snapshot.git.mainRepoRoot === null || snapshot.git.baseRef === null) {
3564
- throw new Error("Workspace git snapshot is missing required worktree status fields");
3565
- }
3566
- return {
3567
- cwd,
3568
- isGit: true,
3569
- repoRoot: snapshot.git.repoRoot,
3570
- mainRepoRoot: snapshot.git.mainRepoRoot,
3571
- currentBranch: snapshot.git.currentBranch ?? null,
3572
- isDirty: snapshot.git.isDirty,
3573
- baseRef: snapshot.git.baseRef,
3574
- aheadBehind: snapshot.git.aheadBehind ?? null,
3575
- aheadOfOrigin: snapshot.git.aheadOfOrigin ?? null,
3576
- behindOfOrigin: snapshot.git.behindOfOrigin ?? null,
3577
- hasRemote: snapshot.git.hasRemote,
3578
- remoteUrl: snapshot.git.remoteUrl,
3579
- isPaseoOwnedWorktree: true,
3580
- error: null,
3581
- requestId,
3582
- };
3583
- }
3584
- return {
3585
- cwd,
3586
- isGit: true,
3587
- repoRoot: snapshot.git.repoRoot,
3588
- mainRepoRoot: snapshot.git.mainRepoRoot,
3589
- currentBranch: snapshot.git.currentBranch ?? null,
3590
- isDirty: snapshot.git.isDirty,
3591
- baseRef: snapshot.git.baseRef ?? null,
3592
- aheadBehind: snapshot.git.aheadBehind ?? null,
3593
- aheadOfOrigin: snapshot.git.aheadOfOrigin ?? null,
3594
- behindOfOrigin: snapshot.git.behindOfOrigin ?? null,
3595
- hasRemote: snapshot.git.hasRemote,
3596
- remoteUrl: snapshot.git.remoteUrl,
3597
- isPaseoOwnedWorktree: false,
3598
- error: null,
3599
- requestId,
3600
- };
3601
- }
3602
- buildCheckoutPrStatusPayloadFromSnapshot({ cwd, requestId, snapshot, }) {
3603
- return {
3604
- cwd,
3605
- status: normalizeCheckoutPrStatusPayload(snapshot.github.pullRequest),
3606
- githubFeaturesEnabled: snapshot.github.featuresEnabled,
3607
- error: snapshot.github.error
3608
- ? {
3609
- code: "UNKNOWN",
3610
- message: snapshot.github.error.message,
3611
- }
3612
- : null,
3613
- requestId,
3614
- };
3615
- }
3616
3452
  emitCheckoutStatusUpdate(cwd, snapshot) {
3617
3453
  try {
3618
3454
  const requestId = `subscription:${cwd}`;
3619
3455
  this.emit({
3620
3456
  type: "checkout_status_update",
3621
3457
  payload: {
3622
- ...this.buildCheckoutStatusPayloadFromSnapshot({
3458
+ ...buildCheckoutStatusPayloadFromSnapshot({
3623
3459
  cwd,
3624
3460
  requestId,
3625
3461
  snapshot,
3626
3462
  }),
3627
- prStatus: this.buildCheckoutPrStatusPayloadFromSnapshot({
3463
+ prStatus: buildCheckoutPrStatusPayloadFromSnapshot({
3628
3464
  cwd,
3629
3465
  requestId,
3630
3466
  snapshot,
@@ -3994,18 +3830,11 @@ export class Session {
3994
3830
  const snapshot = await this.workspaceGitService.getSnapshot(cwd);
3995
3831
  this.emit({
3996
3832
  type: "checkout_pr_status_response",
3997
- payload: {
3833
+ payload: buildCheckoutPrStatusPayloadFromSnapshot({
3998
3834
  cwd,
3999
- status: normalizeCheckoutPrStatusPayload(snapshot.github.pullRequest),
4000
- githubFeaturesEnabled: snapshot.github.featuresEnabled,
4001
- error: snapshot.github.error
4002
- ? {
4003
- code: "UNKNOWN",
4004
- message: snapshot.github.error.message,
4005
- }
4006
- : null,
4007
3835
  requestId,
4008
- },
3836
+ snapshot,
3837
+ }),
4009
3838
  });
4010
3839
  }
4011
3840
  catch (error) {
@@ -4403,23 +4232,6 @@ export class Session {
4403
4232
  const payload = this.buildStoredAgentPayload(record);
4404
4233
  return this.isProviderVisibleToClient(payload.provider) ? payload : null;
4405
4234
  }
4406
- getStatusPriority(agent) {
4407
- const attentionReason = agent.attentionReason ?? null;
4408
- const hasPendingPermission = (agent.pendingPermissions?.length ?? 0) > 0;
4409
- if (hasPendingPermission || attentionReason === "permission") {
4410
- return 0;
4411
- }
4412
- if (agent.status === "error" || attentionReason === "error") {
4413
- return 1;
4414
- }
4415
- if (agent.status === "running") {
4416
- return 2;
4417
- }
4418
- if (agent.status === "initializing") {
4419
- return 3;
4420
- }
4421
- return 4;
4422
- }
4423
4235
  async buildActiveProjectPlacementsByWorkspaceCwd() {
4424
4236
  const [persistedWorkspaces, persistedProjects] = await Promise.all([
4425
4237
  this.workspaceRegistry.list(),
@@ -6851,27 +6663,6 @@ export class Session {
6851
6663
  // Stash handlers
6852
6664
  // ---------------------------------------------------------------------------
6853
6665
  Session.PASEO_STASH_PREFIX = "paseo-auto-stash:";
6854
- export function normalizeCheckoutPrStatusPayload(status) {
6855
- if (!status) {
6856
- return null;
6857
- }
6858
- return {
6859
- number: status.number,
6860
- url: status.url,
6861
- title: status.title,
6862
- state: status.state,
6863
- repoOwner: status.repoOwner,
6864
- repoName: status.repoName,
6865
- baseRefName: status.baseRefName,
6866
- headRefName: status.headRefName,
6867
- isMerged: status.isMerged,
6868
- isDraft: status.isDraft ?? false,
6869
- mergeable: status.mergeable ?? "UNKNOWN",
6870
- checks: status.checks ?? [],
6871
- checksStatus: status.checksStatus,
6872
- reviewDecision: status.reviewDecision,
6873
- };
6874
- }
6875
6666
  function isValidPullRequestTimelineIdentity(options) {
6876
6667
  if (!Number.isInteger(options.prNumber) || options.prNumber <= 0) {
6877
6668
  return false;