naiad-cli 0.2.7 → 0.2.9

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.
@@ -25,12 +25,14 @@ export declare class APIClient {
25
25
  status?: string;
26
26
  error?: string;
27
27
  result?: unknown;
28
+ attempt?: number;
28
29
  }): Promise<{
29
30
  id: string;
30
31
  status: string;
31
32
  }>;
32
33
  createSession(threadId: string, agentId: string, runtime?: string): Promise<{
33
34
  id: string;
35
+ remote_control_enabled?: boolean;
34
36
  }>;
35
37
  updateSession(sessionId: string, status: string): Promise<void>;
36
38
  postEvents(threadId: string, sessionId: string, events: Array<{
@@ -66,8 +68,56 @@ export declare class APIClient {
66
68
  attempt: number;
67
69
  status: string;
68
70
  started_at: string;
71
+ remote_control_enabled?: boolean;
69
72
  }>>;
70
73
  downloadSession(sessionId: string): Promise<Buffer>;
74
+ requestCheckpointPolicies(sessionId: string): Promise<CheckpointPoliciesResponse>;
75
+ patchSession(sessionId: string, update: {
76
+ git_patch_key?: string;
77
+ session_jsonl_key?: string;
78
+ base_sha?: string;
79
+ }): Promise<void>;
80
+ getThread(threadId: string): Promise<{
81
+ id: string;
82
+ status: string;
83
+ owner_id: string;
84
+ repo_full_name?: string;
85
+ ref?: string;
86
+ base_ref?: string;
87
+ base_sha?: string;
88
+ installation_id?: number;
89
+ current_attempt: number;
90
+ prompt: string;
91
+ title?: string;
92
+ }>;
93
+ continueThread(threadId: string, targetRuntime: string, prompt?: string): Promise<{
94
+ session_id: string;
95
+ attempt: number;
96
+ parent_session_id?: string;
97
+ thread_status: string;
98
+ prompt?: string;
99
+ remote_control_enabled?: boolean;
100
+ }>;
101
+ downloadCheckpoint(sessionId: string): Promise<{
102
+ artifacts: Record<string, {
103
+ url: string;
104
+ expires_at: string;
105
+ }>;
106
+ }>;
107
+ postHeartbeatWithPreemption(agentId: string, threadId: string, sessionId: string, attempt: number): Promise<{
108
+ should_exit: boolean;
109
+ }>;
110
+ postEventsWithAttempt(threadId: string, sessionId: string, attempt: number, events: Array<{
111
+ client_seq: number;
112
+ event_type: string;
113
+ data: unknown;
114
+ }>): Promise<{
115
+ accepted: number;
116
+ duplicates: number;
117
+ }>;
118
+ ackCommand(sessionId: string, commandId: number): Promise<void>;
119
+ getCommandStreamUrl(sessionId: string, cursor?: number): string;
120
+ getAuthHeaders(): Record<string, string>;
71
121
  listThreads(params?: {
72
122
  status?: string;
73
123
  limit?: number;
@@ -81,3 +131,17 @@ export declare class APIClient {
81
131
  total: number;
82
132
  }>;
83
133
  }
134
+ export interface ArtifactPolicy {
135
+ url: string;
136
+ fields: Record<string, string>;
137
+ max_bytes: number;
138
+ expires_at: string;
139
+ }
140
+ export interface CheckpointPoliciesResponse {
141
+ artifacts: {
142
+ "patch.bin": ArtifactPolicy;
143
+ "manifest.json": ArtifactPolicy;
144
+ "untracked.tar.gz": ArtifactPolicy;
145
+ "session.jsonl": ArtifactPolicy;
146
+ };
147
+ }
@@ -112,6 +112,78 @@ export class APIClient {
112
112
  throw new Error(`Failed to download session: ${res.status} ${await res.text()}`);
113
113
  return Buffer.from(await res.arrayBuffer());
114
114
  }
115
+ async requestCheckpointPolicies(sessionId) {
116
+ const res = await this.request("POST", `/api/v1/sessions/${sessionId}/checkpoint`, {
117
+ artifacts: ["patch.bin", "manifest.json", "untracked.tar.gz", "session.jsonl"],
118
+ });
119
+ if (!res.ok)
120
+ throw new Error(`Failed to get checkpoint policies: ${res.status} ${await res.text()}`);
121
+ return res.json();
122
+ }
123
+ async patchSession(sessionId, update) {
124
+ const res = await this.request("PATCH", `/api/v1/sessions/${sessionId}`, update);
125
+ if (!res.ok)
126
+ throw new Error(`Failed to patch session: ${res.status} ${await res.text()}`);
127
+ }
128
+ async getThread(threadId) {
129
+ const res = await this.request("GET", `/api/v1/threads/${threadId}`);
130
+ if (!res.ok)
131
+ throw new Error(`Failed to get thread: ${res.status} ${await res.text()}`);
132
+ return res.json();
133
+ }
134
+ async continueThread(threadId, targetRuntime, prompt) {
135
+ const body = { target_runtime: targetRuntime };
136
+ if (prompt)
137
+ body.prompt = prompt;
138
+ const res = await this.request("POST", `/api/v1/threads/${threadId}/continue`, body);
139
+ if (!res.ok) {
140
+ const text = await res.text();
141
+ throw new Error(`Failed to continue thread: ${res.status} ${text}`);
142
+ }
143
+ return res.json();
144
+ }
145
+ async downloadCheckpoint(sessionId) {
146
+ const res = await this.request("GET", `/api/v1/sessions/${sessionId}/checkpoint`);
147
+ if (!res.ok)
148
+ throw new Error(`Failed to get checkpoint: ${res.status} ${await res.text()}`);
149
+ return res.json();
150
+ }
151
+ async postHeartbeatWithPreemption(agentId, threadId, sessionId, attempt) {
152
+ const res = await this.request("POST", "/api/v1/agents/heartbeat", {
153
+ agent_id: agentId,
154
+ thread_id: threadId,
155
+ session_id: sessionId,
156
+ attempt,
157
+ status: "working",
158
+ });
159
+ if (!res.ok)
160
+ throw new Error(`Failed to post heartbeat: ${res.status} ${await res.text()}`);
161
+ return res.json();
162
+ }
163
+ async postEventsWithAttempt(threadId, sessionId, attempt, events) {
164
+ const res = await this.request("POST", `/api/v1/threads/${threadId}/events`, {
165
+ session_id: sessionId,
166
+ attempt,
167
+ events,
168
+ });
169
+ if (!res.ok)
170
+ throw new Error(`Failed to post events: ${res.status} ${await res.text()}`);
171
+ return res.json();
172
+ }
173
+ async ackCommand(sessionId, commandId) {
174
+ const res = await this.request("POST", `/api/v1/sessions/${sessionId}/commands/${commandId}/ack`);
175
+ if (!res.ok)
176
+ throw new Error(`Failed to ack command: ${res.status} ${await res.text()}`);
177
+ }
178
+ getCommandStreamUrl(sessionId, cursor) {
179
+ const cursorParam = cursor && cursor > 0 ? `?cursor=${cursor}` : "";
180
+ return `${this.baseUrl}/api/v1/sessions/${sessionId}/commands/stream${cursorParam}`;
181
+ }
182
+ getAuthHeaders() {
183
+ return {
184
+ Authorization: `Bearer ${this.apiKey}`,
185
+ };
186
+ }
115
187
  async listThreads(params) {
116
188
  const searchParams = new URLSearchParams();
117
189
  if (params?.status)
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { NaiadConfig } from "../config/config.js";
2
+ export declare function continueCommand(config: NaiadConfig, threadId: string): Promise<void>;
@@ -0,0 +1,402 @@
1
+ import { execSync, execFileSync } from "child_process";
2
+ import { existsSync, writeFileSync, mkdirSync, mkdtempSync } from "fs";
3
+ import { join } from "path";
4
+ import { tmpdir } from "os";
5
+ import { randomUUID, createHash } from "crypto";
6
+ import { APIClient } from "../api/client.js";
7
+ import { launchPi } from "../pi/launcher.js";
8
+ import { startWorkers } from "../lifecycle/workers.js";
9
+ import { teardownLifecycle } from "../lifecycle/teardown.js";
10
+ import { findPackageRoot } from "../utils/package-root.js";
11
+ import { CommandListener } from "../sync/command-listener.js";
12
+ export async function continueCommand(config, threadId) {
13
+ const client = new APIClient(config);
14
+ // 1. Get thread metadata
15
+ console.error("[naiad] Fetching thread metadata...");
16
+ const thread = await client.getThread(threadId);
17
+ if (!thread.repo_full_name) {
18
+ console.error("Error: This thread predates remote resume support and cannot be continued.");
19
+ process.exit(1);
20
+ }
21
+ // 2. Verify local repo matches thread
22
+ try {
23
+ const remoteUrl = execSync("git remote get-url origin", { encoding: "utf8" }).trim();
24
+ const localRepo = parseRepoFullName(remoteUrl);
25
+ if (localRepo && thread.repo_full_name &&
26
+ localRepo.toLowerCase() !== thread.repo_full_name.toLowerCase()) {
27
+ console.error(`Error: Local repo (${localRepo}) does not match thread repo (${thread.repo_full_name})`);
28
+ process.exit(1);
29
+ }
30
+ }
31
+ catch {
32
+ console.error("[naiad] Warning: Could not verify local repo against thread repo");
33
+ }
34
+ // 3. Call POST /threads/{id}/continue
35
+ console.error("[naiad] Requesting continue...");
36
+ const continueResult = await client.continueThread(threadId, "local");
37
+ const sessionId = continueResult.session_id;
38
+ const attempt = continueResult.attempt;
39
+ const parentSessionId = continueResult.parent_session_id;
40
+ console.error(`[naiad] New session: ${sessionId}, attempt: ${attempt}`);
41
+ // 4. Download and restore checkpoint from parent session
42
+ let sessionJsonlPath;
43
+ if (parentSessionId) {
44
+ sessionJsonlPath = await restoreCheckpoint(client, parentSessionId, thread);
45
+ }
46
+ else {
47
+ console.error("[naiad] No parent session — starting fresh");
48
+ }
49
+ // 5. Validate API key by listing models
50
+ const { models } = await client.listModels();
51
+ if (models.length === 0)
52
+ throw new Error("No models available");
53
+ const model = models[0].id;
54
+ const agentId = randomUUID();
55
+ const sessionDir = mkdtempSync(join(tmpdir(), "naiad-session-"));
56
+ const pkgRoot = findPackageRoot();
57
+ const extensionPath = join(pkgRoot, "extensions", "naiad-extension.ts");
58
+ // Capture base_sha
59
+ let baseSha;
60
+ try {
61
+ baseSha = execFileSync("git", ["rev-parse", "HEAD"], { encoding: "utf8" }).trim();
62
+ }
63
+ catch {
64
+ // not in git repo
65
+ }
66
+ // Store base_sha in session record
67
+ if (baseSha) {
68
+ try {
69
+ await client.patchSession(sessionId, { base_sha: baseSha });
70
+ }
71
+ catch (err) {
72
+ console.error("[naiad] Failed to store base SHA in session:", err);
73
+ }
74
+ }
75
+ // Transition to RUNNING
76
+ await client.updateThread(threadId, { status: "RUNNING", attempt });
77
+ const ctx = {
78
+ config,
79
+ client,
80
+ model,
81
+ allModels: models,
82
+ agentId,
83
+ threadId,
84
+ sessionId,
85
+ sessionDir,
86
+ extensionPath,
87
+ externalThread: false,
88
+ baseSha,
89
+ attempt,
90
+ };
91
+ // Launch pi
92
+ const piEnv = {
93
+ NAIAD_INFERENCE_URL: `${config.apiUrl}/api/v1/inference`,
94
+ NAIAD_API_KEY: config.apiKey,
95
+ NAIAD_THREAD_ID: threadId,
96
+ NAIAD_SESSION_ID: sessionId,
97
+ NAIAD_MODEL: model,
98
+ NAIAD_MODELS_JSON: JSON.stringify(models),
99
+ };
100
+ if (baseSha)
101
+ piEnv.NAIAD_BASE_SHA = baseSha;
102
+ const piOpts = {
103
+ model,
104
+ models: models.map((m) => m.id),
105
+ sessionDir,
106
+ extensionPath,
107
+ env: piEnv,
108
+ };
109
+ if (sessionJsonlPath) {
110
+ piOpts.resumeSessionFile = sessionJsonlPath;
111
+ }
112
+ const pi = launchPi(piOpts);
113
+ // Start background workers (includes heartbeat)
114
+ const workers = startWorkers(ctx);
115
+ // Start command listener for remote control (GHA sessions)
116
+ let commandListener = null;
117
+ if (continueResult.remote_control_enabled) {
118
+ commandListener = new CommandListener({
119
+ client,
120
+ sessionId,
121
+ sessionDir,
122
+ piProcess: pi.process,
123
+ });
124
+ commandListener.start();
125
+ console.error("[naiad] Command listener started (remote control enabled)");
126
+ }
127
+ // Start preemption heartbeat (20s interval)
128
+ const heartbeatTimer = setInterval(async () => {
129
+ try {
130
+ const res = await client.postHeartbeatWithPreemption(agentId, threadId, sessionId, attempt);
131
+ if (res.should_exit) {
132
+ console.error("[naiad] Session preempted — shutting down");
133
+ clearInterval(heartbeatTimer);
134
+ await pi.shutdown();
135
+ }
136
+ }
137
+ catch (err) {
138
+ console.error("[heartbeat] Preemption check failed:", err);
139
+ }
140
+ }, 20_000);
141
+ // Process pi events
142
+ let agentEnded = false;
143
+ pi.onEvent((event) => {
144
+ if (event.type === "checkpoint") {
145
+ const data = event.data ?? event;
146
+ workers.checkpoint.handleCheckpoint(data).catch((err) => {
147
+ console.error("[naiad] Checkpoint handling failed:", err);
148
+ });
149
+ return;
150
+ }
151
+ workers.eventSpool.pushEvent(event.type, event);
152
+ if (event.type === "message_update") {
153
+ const assistantEvent = event.assistantMessageEvent;
154
+ if (assistantEvent?.type === "text_delta") {
155
+ process.stdout.write(assistantEvent.delta ?? "");
156
+ }
157
+ }
158
+ if (event.type === "agent_end")
159
+ agentEnded = true;
160
+ });
161
+ // Send prompt if the continue response included one (it won't for local, but just in case)
162
+ await new Promise((resolve) => setTimeout(resolve, 500));
163
+ // If the thread had a prompt, send a follow_up to let pi know we're continuing
164
+ pi.sendPrompt("Continue from where the previous session left off.");
165
+ const exitCode = await new Promise((resolve) => {
166
+ pi.process.on("exit", (code, signal) => {
167
+ resolve(signal ? 1 : (code ?? 0));
168
+ });
169
+ const checkInterval = setInterval(() => {
170
+ if (agentEnded) {
171
+ clearInterval(checkInterval);
172
+ pi.shutdown().then(() => { });
173
+ }
174
+ }, 100);
175
+ });
176
+ clearInterval(heartbeatTimer);
177
+ process.stdout.write("\n");
178
+ console.error("[naiad] Agent finished, flushing...");
179
+ commandListener?.stop();
180
+ await workers.stop();
181
+ await teardownLifecycle({ ctx, exitCode });
182
+ process.exit(exitCode);
183
+ }
184
+ async function restoreCheckpoint(client, parentSessionId, thread) {
185
+ console.error("[naiad] Downloading checkpoint from parent session...");
186
+ let checkpoint;
187
+ try {
188
+ checkpoint = await client.downloadCheckpoint(parentSessionId);
189
+ }
190
+ catch (err) {
191
+ console.error("[naiad] Failed to download checkpoint:", err);
192
+ return undefined;
193
+ }
194
+ const tmpDir = mkdtempSync(join(tmpdir(), "naiad-restore-"));
195
+ // Download manifest
196
+ let manifest;
197
+ try {
198
+ const manifestArt = checkpoint.artifacts["manifest.json"];
199
+ if (manifestArt?.url) {
200
+ const res = await fetch(manifestArt.url);
201
+ if (res.ok) {
202
+ manifest = await res.json();
203
+ }
204
+ }
205
+ }
206
+ catch (err) {
207
+ console.error("[naiad] Failed to download manifest:", err);
208
+ }
209
+ if (!manifest) {
210
+ console.error("[naiad] No checkpoint manifest — starting from clean state");
211
+ return tryDownloadSessionJsonl(checkpoint, tmpDir);
212
+ }
213
+ if (manifest.version !== 1) {
214
+ console.error("[naiad] Unknown checkpoint version:", manifest.version);
215
+ return tryDownloadSessionJsonl(checkpoint, tmpDir);
216
+ }
217
+ const baseSha = manifest.base_sha;
218
+ if (!baseSha) {
219
+ console.error("[naiad] No base_sha in manifest — skipping git restore");
220
+ return tryDownloadSessionJsonl(checkpoint, tmpDir);
221
+ }
222
+ // Download artifacts
223
+ const skippedArtifacts = manifest.skipped_artifacts || [];
224
+ let patchData = null;
225
+ if (!skippedArtifacts.includes("patch") && manifest.patch_key) {
226
+ try {
227
+ const patchArt = checkpoint.artifacts["patch.bin"];
228
+ if (patchArt?.url) {
229
+ const res = await fetch(patchArt.url);
230
+ if (res.ok)
231
+ patchData = Buffer.from(await res.arrayBuffer());
232
+ }
233
+ }
234
+ catch (err) {
235
+ console.error("[naiad] Failed to download patch:", err);
236
+ }
237
+ }
238
+ let untrackedData = null;
239
+ if (!skippedArtifacts.includes("untracked") && manifest.untracked_key) {
240
+ try {
241
+ const untrackedArt = checkpoint.artifacts["untracked.tar.gz"];
242
+ if (untrackedArt?.url) {
243
+ const res = await fetch(untrackedArt.url);
244
+ if (res.ok)
245
+ untrackedData = Buffer.from(await res.arrayBuffer());
246
+ }
247
+ }
248
+ catch (err) {
249
+ console.error("[naiad] Failed to download untracked archive:", err);
250
+ }
251
+ }
252
+ // Download session JSONL
253
+ const sessionJsonlPath = await tryDownloadSessionJsonl(checkpoint, tmpDir);
254
+ // Verify checksum
255
+ const hash = createHash("sha256");
256
+ hash.update(manifest.base_sha, "utf8");
257
+ hash.update("\n");
258
+ hash.update(manifest.head_sha, "utf8");
259
+ if (!skippedArtifacts.includes("patch") && patchData) {
260
+ hash.update("\n");
261
+ hash.update(patchData);
262
+ }
263
+ if (!skippedArtifacts.includes("untracked") && untrackedData) {
264
+ hash.update("\n");
265
+ hash.update(untrackedData);
266
+ }
267
+ if (!skippedArtifacts.includes("session") && sessionJsonlPath) {
268
+ const { readFileSync } = await import("fs");
269
+ const sessionData = readFileSync(sessionJsonlPath);
270
+ hash.update("\n");
271
+ hash.update(sessionData);
272
+ }
273
+ const computedChecksum = "sha256:" + hash.digest("hex");
274
+ let checksumValid = true;
275
+ if (manifest.checksum && computedChecksum !== manifest.checksum) {
276
+ console.error("[naiad] Checkpoint integrity check failed — starting from clean checkout");
277
+ checksumValid = false;
278
+ }
279
+ // Restore git state
280
+ try {
281
+ console.error("[naiad] Fetching origin...");
282
+ execFileSync("git", ["fetch", "origin"], { stdio: "pipe" });
283
+ }
284
+ catch (err) {
285
+ console.error("[naiad] git fetch failed:", err);
286
+ }
287
+ const ref = thread.ref || "HEAD";
288
+ try {
289
+ console.error(`[naiad] Checking out ${ref} at ${baseSha}...`);
290
+ execFileSync("git", ["checkout", "-B", ref, baseSha], { stdio: "pipe" });
291
+ }
292
+ catch (err) {
293
+ console.error("[naiad] git checkout failed:", err);
294
+ try {
295
+ execFileSync("git", ["checkout", baseSha], { stdio: "pipe" });
296
+ }
297
+ catch {
298
+ console.error("[naiad] Fallback checkout failed — continuing anyway");
299
+ }
300
+ }
301
+ // Apply patch
302
+ if (checksumValid && patchData && patchData.length > 0) {
303
+ const patchPath = join(tmpDir, "patch.bin");
304
+ writeFileSync(patchPath, patchData);
305
+ try {
306
+ console.error("[naiad] Applying checkpoint patch...");
307
+ execFileSync("git", ["apply", "--3way", patchPath], { stdio: "pipe" });
308
+ }
309
+ catch (err) {
310
+ console.error("[naiad] Patch apply failed, resetting to base SHA");
311
+ try {
312
+ execFileSync("git", ["checkout", "--force", baseSha], { stdio: "pipe" });
313
+ }
314
+ catch {
315
+ // continue anyway
316
+ }
317
+ }
318
+ }
319
+ // Extract untracked files (with path traversal protection)
320
+ if (checksumValid && untrackedData && untrackedData.length > 0) {
321
+ try {
322
+ const untrackedPath = join(tmpDir, "untracked.tar.gz");
323
+ writeFileSync(untrackedPath, untrackedData);
324
+ // Pre-extract validation
325
+ const listing = execFileSync("tar", ["-tzf", untrackedPath], { encoding: "utf8", maxBuffer: 10 * 1024 * 1024 });
326
+ const entries = listing.split("\n").filter(Boolean);
327
+ if (entries.length > 10000) {
328
+ console.error("[naiad] Too many untracked files (>10000), skipping extraction");
329
+ }
330
+ else {
331
+ const invalid = entries.some(e => e.includes("..") || e.startsWith("/") || e.startsWith(".git/") || e.split("/").length > 50);
332
+ if (invalid) {
333
+ console.error("[naiad] Unsafe paths in untracked archive, skipping extraction");
334
+ }
335
+ else {
336
+ const extractDir = join(tmpDir, "untracked");
337
+ mkdirSync(extractDir, { recursive: true });
338
+ execFileSync("tar", ["xzf", untrackedPath, "-C", extractDir, "--no-same-owner", "--no-same-permissions"], { stdio: "pipe" });
339
+ // Move files to working directory
340
+ for (const entry of entries) {
341
+ if (!entry || entry.endsWith("/"))
342
+ continue;
343
+ const src = join(extractDir, entry);
344
+ const dst = join(process.cwd(), entry);
345
+ if (!existsSync(src))
346
+ continue;
347
+ // Don't overwrite tracked files
348
+ try {
349
+ execFileSync("git", ["ls-files", "--error-unmatch", entry], { stdio: "pipe" });
350
+ continue; // file is tracked, skip
351
+ }
352
+ catch {
353
+ // not tracked, proceed
354
+ }
355
+ const dstDir = join(dst, "..");
356
+ mkdirSync(dstDir, { recursive: true });
357
+ const { copyFileSync } = await import("fs");
358
+ copyFileSync(src, dst);
359
+ }
360
+ console.error(`[naiad] Restored ${entries.length} untracked files`);
361
+ }
362
+ }
363
+ }
364
+ catch (err) {
365
+ console.error("[naiad] Failed to restore untracked files:", err);
366
+ }
367
+ }
368
+ return sessionJsonlPath;
369
+ }
370
+ async function tryDownloadSessionJsonl(checkpoint, tmpDir) {
371
+ try {
372
+ const sessionArt = checkpoint.artifacts["session.jsonl"];
373
+ if (!sessionArt?.url)
374
+ return undefined;
375
+ const res = await fetch(sessionArt.url);
376
+ if (!res.ok)
377
+ return undefined;
378
+ const data = Buffer.from(await res.arrayBuffer());
379
+ if (data.length === 0)
380
+ return undefined;
381
+ const path = join(tmpDir, "session.jsonl");
382
+ writeFileSync(path, data);
383
+ console.error(`[naiad] Downloaded session JSONL (${(data.length / 1024).toFixed(1)}KB)`);
384
+ return path;
385
+ }
386
+ catch (err) {
387
+ console.error("[naiad] Failed to download session JSONL:", err);
388
+ return undefined;
389
+ }
390
+ }
391
+ function parseRepoFullName(url) {
392
+ // Handle SSH format: git@github.com:owner/repo.git
393
+ const sshMatch = url.match(/git@github\.com:(.+?)(?:\.git)?$/);
394
+ if (sshMatch)
395
+ return sshMatch[1];
396
+ // Handle HTTPS format: https://github.com/owner/repo.git
397
+ const httpsMatch = url.match(/github\.com\/(.+?)(?:\.git)?$/);
398
+ if (httpsMatch)
399
+ return httpsMatch[1];
400
+ return null;
401
+ }
402
+ //# sourceMappingURL=continue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"continue.js","sourceRoot":"","sources":["../../src/commands/continue.ts"],"names":[],"mappings":"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"}