automata-cli 0.10.0 → 0.11.0-develop.457
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.
|
@@ -17,8 +17,8 @@ var DEFAULT_DO_WORK = {
|
|
|
17
17
|
postRunLog: true
|
|
18
18
|
};
|
|
19
19
|
var DEFAULT_DO_WORK_ISSUE_DISCUSS_PROMPT = "You are the agent named in the context below, working on a GitHub issue together with the people allowed to instruct you. Answer the messages marked NEW; the earlier messages are context only.\n\nDo not modify, create or delete any file, and do not create a branch or a pull request, UNLESS a message marked NEW explicitly asks you to implement the work. If it does: create a branch off the base branch named below, implement the change following the project's existing conventions, run the tests and the linter, and open a pull request whose body contains `Closes #<issue number>`.\n\nOtherwise do not touch the code at all: reply on the issue with the specification, the plan, or the open questions you need answered. Keep the reply short and concrete.\n\nEither way, always post a reply on the issue before you finish \u2014 including when you implemented and opened a pull request. Silence is indistinguishable from a crash, and the run will be reported as having produced no answer.";
|
|
20
|
-
var DEFAULT_DO_WORK_PR_WORK_PROMPT = "You are the agent named in the context below, working on the pull request for a GitHub issue together with the people allowed to instruct you. Work on the branch named below, which is already checked out and up to date.\n\nAddress every message marked NEW and every unresolved review thread listed. Follow the project's existing conventions, run the tests and the linter, then commit and push to that branch. Do not merge the pull request and do not push to the base branch.\n\
|
|
21
|
-
var DEFAULT_DO_WORK_PR_ORPHAN_PROMPT = "You are the agent named in the context below, working on a pull request that is not linked to any issue \u2014 a dependency bump, or another change opened without one \u2014 together with the people allowed to instruct you. Work on the branch named below, which is already checked out and up to date.\n\nAddress every message marked NEW and every unresolved review thread listed. Typical work here is finding out why the checks are failing, bringing the branch up to date with the base branch, and fixing whatever the change needs in order to be mergeable. Follow the project's existing conventions, run the tests and the linter, then commit and push to that branch.\n\nDo not merge the pull request, do not close it, and do not push to the base branch. If you conclude that it should be merged or closed, say so in your reply and leave the decision to the humans.\n\
|
|
20
|
+
var DEFAULT_DO_WORK_PR_WORK_PROMPT = "You are the agent named in the context below, working on the pull request for a GitHub issue together with the people allowed to instruct you. Work on the branch named below, which is already checked out and up to date.\n\nAddress every message marked NEW and every unresolved review thread listed. Follow the project's existing conventions, run the tests and the linter, then commit and push to that branch. Do not merge the pull request and do not push to the base branch.\n\nOnce a review thread is fixed and pushed, resolve it (GraphQL `resolveReviewThread`) after replying; leave open any thread you did not fix. Reply on the pull request with a short summary of what you changed, or reply in the review thread when your answer belongs to a specific comment. Always post a reply \u2014 silence looks like a crash.";
|
|
21
|
+
var DEFAULT_DO_WORK_PR_ORPHAN_PROMPT = "You are the agent named in the context below, working on a pull request that is not linked to any issue \u2014 a dependency bump, or another change opened without one \u2014 together with the people allowed to instruct you. Work on the branch named below, which is already checked out and up to date.\n\nAddress every message marked NEW and every unresolved review thread listed. Typical work here is finding out why the checks are failing, bringing the branch up to date with the base branch, and fixing whatever the change needs in order to be mergeable. Follow the project's existing conventions, run the tests and the linter, then commit and push to that branch.\n\nDo not merge the pull request, do not close it, and do not push to the base branch. If you conclude that it should be merged or closed, say so in your reply and leave the decision to the humans.\n\nOnce a review thread is fixed and pushed, resolve it (GraphQL `resolveReviewThread`) after replying; leave open any thread you did not fix. Reply on the pull request with a short summary of what you did and what you recommend, or reply in the review thread when your answer belongs to a specific comment. Always post a reply \u2014 silence looks like a crash.";
|
|
22
22
|
var CONFIG_DIR = ".automata";
|
|
23
23
|
var CONFIG_FILE = "config.json";
|
|
24
24
|
function configPath() {
|
package/dist/index.js
CHANGED
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
readConfig,
|
|
12
12
|
readRawConfig,
|
|
13
13
|
writeConfig
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-OUJQLQP3.js";
|
|
15
15
|
|
|
16
16
|
// src/index.ts
|
|
17
17
|
import { Command as Command7 } from "commander";
|
|
@@ -321,7 +321,7 @@ var configCommand = new Command("config").description("Configure automata settin
|
|
|
321
321
|
const [{ render }, React, { ConfigWizard }] = await Promise.all([
|
|
322
322
|
import("ink"),
|
|
323
323
|
import("react"),
|
|
324
|
-
import("./ConfigWizard-
|
|
324
|
+
import("./ConfigWizard-QZ2CJJS3.js")
|
|
325
325
|
]);
|
|
326
326
|
const { waitUntilExit } = render(React.createElement(ConfigWizard));
|
|
327
327
|
await waitUntilExit();
|
|
@@ -331,13 +331,135 @@ var configCommand = new Command("config").description("Configure automata settin
|
|
|
331
331
|
import { Command as Command2 } from "commander";
|
|
332
332
|
|
|
333
333
|
// src/git/gitService.ts
|
|
334
|
-
import { spawnSync as
|
|
334
|
+
import { spawnSync as spawnSync3 } from "child_process";
|
|
335
335
|
import { existsSync } from "fs";
|
|
336
336
|
|
|
337
|
-
// src/
|
|
337
|
+
// src/remote/azdoPrerequisites.ts
|
|
338
338
|
import { spawnSync } from "child_process";
|
|
339
|
+
var MIN_AZDO_VERSION = "0.20.0";
|
|
340
|
+
var AZDO_NO_UPDATE_CHECK = "--no-update-check";
|
|
341
|
+
function defaultRunner(args) {
|
|
342
|
+
const result = spawnSync("azdo", args, { encoding: "utf8" });
|
|
343
|
+
const code = result.error?.code;
|
|
344
|
+
return {
|
|
345
|
+
stdout: result.stdout ?? "",
|
|
346
|
+
stderr: result.stderr ?? "",
|
|
347
|
+
status: result.status ?? 1,
|
|
348
|
+
missing: code === "ENOENT"
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
function parseVersion(text) {
|
|
352
|
+
const match = /(\d{1,9})\.(\d{1,9})\.(\d{1,9})(?:-([0-9A-Za-z.-]{1,64}))?/.exec(text);
|
|
353
|
+
if (!match) return null;
|
|
354
|
+
return { parts: [Number(match[1]), Number(match[2]), Number(match[3])], prerelease: match[4] ?? null };
|
|
355
|
+
}
|
|
356
|
+
function compareVersions(a, b) {
|
|
357
|
+
for (let i = 0; i < 3; i++) {
|
|
358
|
+
if (a.parts[i] !== b.parts[i]) return a.parts[i] < b.parts[i] ? -1 : 1;
|
|
359
|
+
}
|
|
360
|
+
if (a.prerelease === b.prerelease) return 0;
|
|
361
|
+
if (a.prerelease === null) return 1;
|
|
362
|
+
if (b.prerelease === null) return -1;
|
|
363
|
+
return a.prerelease < b.prerelease ? -1 : 1;
|
|
364
|
+
}
|
|
365
|
+
function formatVersion(v) {
|
|
366
|
+
return v.parts.join(".") + (v.prerelease ? `-${v.prerelease}` : "");
|
|
367
|
+
}
|
|
368
|
+
function extractIdentity(stdout) {
|
|
369
|
+
try {
|
|
370
|
+
const parsed = JSON.parse(stdout);
|
|
371
|
+
const id = parsed.identity;
|
|
372
|
+
if (typeof id === "string" && id) return id;
|
|
373
|
+
if (id && typeof id === "object") {
|
|
374
|
+
const o = id;
|
|
375
|
+
for (const key of ["displayName", "uniqueName", "providerDisplayName", "id"]) {
|
|
376
|
+
if (typeof o[key] === "string" && o[key]) return o[key];
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
} catch {
|
|
380
|
+
}
|
|
381
|
+
return null;
|
|
382
|
+
}
|
|
383
|
+
function checkAzdoPrerequisites(run5 = defaultRunner) {
|
|
384
|
+
const v = run5(["--version", AZDO_NO_UPDATE_CHECK]);
|
|
385
|
+
if (v.missing) {
|
|
386
|
+
return { ok: false, reason: "missing", message: "`azdo` CLI is not installed or not on PATH." };
|
|
387
|
+
}
|
|
388
|
+
const version2 = v.status === 0 ? parseVersion(v.stdout) : null;
|
|
389
|
+
if (!version2) {
|
|
390
|
+
return { ok: false, reason: "missing", message: "Could not determine the `azdo` CLI version (`azdo --version`)." };
|
|
391
|
+
}
|
|
392
|
+
const min = parseVersion(MIN_AZDO_VERSION);
|
|
393
|
+
if (compareVersions(version2, min) < 0) {
|
|
394
|
+
return {
|
|
395
|
+
ok: false,
|
|
396
|
+
reason: "too-old",
|
|
397
|
+
message: `azdo-cli ${formatVersion(version2)} is too old; ${MIN_AZDO_VERSION} or newer is required.`
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
const auth = run5(["auth", "diagnose", "--json", AZDO_NO_UPDATE_CHECK]);
|
|
401
|
+
const identity = auth.status === 0 ? extractIdentity(auth.stdout) : null;
|
|
402
|
+
if (!identity) {
|
|
403
|
+
return {
|
|
404
|
+
ok: false,
|
|
405
|
+
reason: "unauthenticated",
|
|
406
|
+
message: "`azdo` is not authenticated. Run `azdo auth login` and check `azdo auth diagnose`."
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
return { ok: true, version: formatVersion(version2), identity };
|
|
410
|
+
}
|
|
411
|
+
var verified = null;
|
|
412
|
+
function assertAzdoReady(run5) {
|
|
413
|
+
if (verified?.ok) return;
|
|
414
|
+
const result = checkAzdoPrerequisites(run5);
|
|
415
|
+
if (!result.ok) throw new Error(result.message);
|
|
416
|
+
verified = result;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
// src/remote/originUrl.ts
|
|
420
|
+
function strip(name) {
|
|
421
|
+
return decodeURIComponent(name).replace(/\.git$/, "");
|
|
422
|
+
}
|
|
423
|
+
function orNull(parse) {
|
|
424
|
+
try {
|
|
425
|
+
return parse();
|
|
426
|
+
} catch (error) {
|
|
427
|
+
if (error instanceof URIError) return null;
|
|
428
|
+
throw error;
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
function parseGitHub(url) {
|
|
432
|
+
const match = /^(?:https?:\/\/(?:[^@/]+@)?(?:www\.)?github\.com\/|(?:ssh:\/\/)?git@github\.com[:/])([^/]+)\/([^/]+?)(?:\.git)?\/?$/i.exec(
|
|
433
|
+
url
|
|
434
|
+
);
|
|
435
|
+
return match ? { kind: "github", owner: match[1], repo: match[2] } : null;
|
|
436
|
+
}
|
|
437
|
+
function parseAzdo(url) {
|
|
438
|
+
const dev = /^https?:\/\/(?:[^@/]+@)?dev\.azure\.com\/([^/]+)\/([^/]+)\/_git\/([^/?#]+)\/?$/.exec(url);
|
|
439
|
+
if (dev) {
|
|
440
|
+
return { kind: "azdo", organization: strip(dev[1]), project: strip(dev[2]), repo: strip(dev[3]) };
|
|
441
|
+
}
|
|
442
|
+
const vs = /^https?:\/\/(?:[^@/]+@)?([^./]+)\.visualstudio\.com\/(?:DefaultCollection\/)?([^/]+)\/_git\/([^/?#]+)\/?$/i.exec(
|
|
443
|
+
url
|
|
444
|
+
);
|
|
445
|
+
if (vs) {
|
|
446
|
+
return { kind: "azdo", organization: strip(vs[1]), project: strip(vs[2]), repo: strip(vs[3]) };
|
|
447
|
+
}
|
|
448
|
+
const ssh = /^(?:ssh:\/\/)?(?:[^@/]+@)?ssh\.dev\.azure\.com[:/]v3\/([^/]+)\/([^/]+)\/([^/?#]+?)\/?$/.exec(url);
|
|
449
|
+
if (ssh) {
|
|
450
|
+
return { kind: "azdo", organization: strip(ssh[1]), project: strip(ssh[2]), repo: strip(ssh[3]) };
|
|
451
|
+
}
|
|
452
|
+
return null;
|
|
453
|
+
}
|
|
454
|
+
function parseOrigin(rawUrl) {
|
|
455
|
+
const url = rawUrl.trim();
|
|
456
|
+
return orNull(() => parseAzdo(url) ?? parseGitHub(url));
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
// src/config/azdoService.ts
|
|
460
|
+
import { spawnSync as spawnSync2 } from "child_process";
|
|
339
461
|
function run(cmd, args) {
|
|
340
|
-
const result =
|
|
462
|
+
const result = spawnSync2(cmd, args, { encoding: "utf8" });
|
|
341
463
|
if (result.error) {
|
|
342
464
|
const err = result.error;
|
|
343
465
|
if (err.code === "ENOENT") {
|
|
@@ -363,24 +485,85 @@ function mapStatus(azdoStatus) {
|
|
|
363
485
|
return azdoStatus.toUpperCase();
|
|
364
486
|
}
|
|
365
487
|
}
|
|
366
|
-
function
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
488
|
+
function mapCheckState(state) {
|
|
489
|
+
switch (state) {
|
|
490
|
+
case "succeeded":
|
|
491
|
+
return { status: "COMPLETED", conclusion: "SUCCESS" };
|
|
492
|
+
case "failed":
|
|
493
|
+
case "rejected":
|
|
494
|
+
case "error":
|
|
495
|
+
return { status: "COMPLETED", conclusion: "FAILURE" };
|
|
496
|
+
case "notApplicable":
|
|
497
|
+
case "notSet":
|
|
498
|
+
return { status: "COMPLETED", conclusion: "SKIPPED" };
|
|
499
|
+
case "queued":
|
|
500
|
+
return { status: "QUEUED", conclusion: null };
|
|
501
|
+
case "running":
|
|
502
|
+
return { status: "IN_PROGRESS", conclusion: null };
|
|
503
|
+
default:
|
|
504
|
+
return { status: "PENDING", conclusion: null };
|
|
370
505
|
}
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
506
|
+
}
|
|
507
|
+
function mapRunState(run5) {
|
|
508
|
+
if (run5.state !== "completed") return "pending";
|
|
509
|
+
switch (run5.result) {
|
|
510
|
+
case "succeeded":
|
|
511
|
+
return "succeeded";
|
|
512
|
+
case "failed":
|
|
513
|
+
return "failed";
|
|
514
|
+
case "canceled":
|
|
515
|
+
return "error";
|
|
516
|
+
default:
|
|
517
|
+
return "pending";
|
|
374
518
|
}
|
|
375
|
-
|
|
519
|
+
}
|
|
520
|
+
function toPrCheck(check) {
|
|
376
521
|
return {
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
checks: []
|
|
522
|
+
name: check.name,
|
|
523
|
+
...mapCheckState(check.state),
|
|
524
|
+
description: check.description ?? "",
|
|
525
|
+
detailsUrl: check.targetUrl ?? ""
|
|
382
526
|
};
|
|
383
527
|
}
|
|
528
|
+
function runJson(args, failure) {
|
|
529
|
+
const { stdout, stderr, status } = run("azdo", [...args, "--json", "--no-update-check"]);
|
|
530
|
+
if (status !== 0) {
|
|
531
|
+
throw new Error(stderr.trim() || failure);
|
|
532
|
+
}
|
|
533
|
+
return JSON.parse(stdout);
|
|
534
|
+
}
|
|
535
|
+
function toPrInfo(pr, checks) {
|
|
536
|
+
return { number: pr.id, title: pr.title, state: mapStatus(pr.status), url: pr.url, checks };
|
|
537
|
+
}
|
|
538
|
+
function getBranchPrInfo(branch) {
|
|
539
|
+
const listed = runJson(
|
|
540
|
+
["pr", "list", "--branch", branch, "--status", "all"],
|
|
541
|
+
"Failed to list Azure DevOps pull requests. Is `azdo` installed and authenticated?"
|
|
542
|
+
);
|
|
543
|
+
const pr = listed.pullRequests[0];
|
|
544
|
+
if (pr === void 0) return null;
|
|
545
|
+
const runs = runJson(
|
|
546
|
+
["pipeline", "get-runs", "--pr", String(pr.id)],
|
|
547
|
+
"Failed to list Azure DevOps pipeline runs for the pull request."
|
|
548
|
+
);
|
|
549
|
+
const checks = runs.map(
|
|
550
|
+
(r) => toPrCheck({ state: mapRunState(r), name: `Build ${r.name ?? String(r.id)}` })
|
|
551
|
+
);
|
|
552
|
+
return toPrInfo(pr, checks);
|
|
553
|
+
}
|
|
554
|
+
function getPrInfo(branch) {
|
|
555
|
+
if (branch !== void 0) return getBranchPrInfo(branch);
|
|
556
|
+
const parsed = runJson(
|
|
557
|
+
["pr", "status"],
|
|
558
|
+
"Failed to query Azure DevOps PR status. Is `azdo` installed and authenticated?"
|
|
559
|
+
);
|
|
560
|
+
const pr = parsed.pullRequests[0];
|
|
561
|
+
if (pr === void 0) return null;
|
|
562
|
+
if (pr.checksError) {
|
|
563
|
+
throw new Error(`Azure DevOps could not retrieve the checks of PR #${pr.id}: ${pr.checksError}`);
|
|
564
|
+
}
|
|
565
|
+
return toPrInfo(pr, (pr.checks ?? []).map(toPrCheck));
|
|
566
|
+
}
|
|
384
567
|
|
|
385
568
|
// src/remote/backend.ts
|
|
386
569
|
var AZDO_GAP_DOC = "docs/azdo-gap.md";
|
|
@@ -471,7 +654,7 @@ Set it explicitly with: automata config set git-trunk-branch <branch>`;
|
|
|
471
654
|
// src/git/gitService.ts
|
|
472
655
|
function run2(cmd, args) {
|
|
473
656
|
const startedAt = Date.now();
|
|
474
|
-
const result =
|
|
657
|
+
const result = spawnSync3(cmd, args, { encoding: "utf8" });
|
|
475
658
|
const status = result.status ?? 1;
|
|
476
659
|
recordCommand(cmd, args, startedAt, result.error ? -1 : status);
|
|
477
660
|
return {
|
|
@@ -493,11 +676,15 @@ function parseOwnerRepo() {
|
|
|
493
676
|
const { stdout, status } = run2("git", ["remote", "get-url", "origin"]);
|
|
494
677
|
if (status !== 0) return null;
|
|
495
678
|
const url = stdout.trim();
|
|
496
|
-
const
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
679
|
+
const origin = parseOrigin(url);
|
|
680
|
+
return origin?.kind === "github" ? `${origin.owner}/${origin.repo}` : null;
|
|
681
|
+
}
|
|
682
|
+
function assertAzdoRemote() {
|
|
683
|
+
const { stdout, status } = run2("git", ["remote", "get-url", "origin"]);
|
|
684
|
+
if (status === 0 && parseOrigin(stdout)?.kind === "github") {
|
|
685
|
+
throw new Error("remoteType is `azdo` but `origin` is a GitHub URL. Fix `remoteType` in .automata/config.json.");
|
|
686
|
+
}
|
|
687
|
+
assertAzdoReady();
|
|
501
688
|
}
|
|
502
689
|
function extractLastMarkdownUrl(markdown) {
|
|
503
690
|
const matches = [...markdown.matchAll(/\]\((https?:\/\/[^)]+)\)/g)];
|
|
@@ -904,26 +1091,26 @@ async function getPrInfoGh(branch) {
|
|
|
904
1091
|
detailsUrl: enriched?.detailsUrl || c.detailsUrl || ""
|
|
905
1092
|
};
|
|
906
1093
|
});
|
|
907
|
-
|
|
908
|
-
|
|
1094
|
+
return withSonar({ number: raw.number, title: raw.title, state: raw.state, url: raw.url, checks });
|
|
1095
|
+
}
|
|
1096
|
+
async function withSonar(pr) {
|
|
1097
|
+
const sonarCheck = pr.checks.find((c) => isSonarUrl(c.detailsUrl));
|
|
1098
|
+
if (sonarCheck === void 0) return pr;
|
|
1099
|
+
const sonar = await describeSonarCheck(sonarCheck, pr.number);
|
|
909
1100
|
return {
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
...sonar === void 0 ? {} : {
|
|
916
|
-
sonarcloudUrl: sonar.sonarcloudUrl,
|
|
917
|
-
sonarNewIssues: sonar.sonarNewIssues,
|
|
918
|
-
sonarNewIssuesNote: sonar.sonarNewIssuesNote
|
|
919
|
-
},
|
|
920
|
-
...sonar?.sonarFailures === void 0 ? {} : { sonarFailures: sonar.sonarFailures }
|
|
1101
|
+
...pr,
|
|
1102
|
+
sonarcloudUrl: sonar.sonarcloudUrl,
|
|
1103
|
+
sonarNewIssues: sonar.sonarNewIssues,
|
|
1104
|
+
sonarNewIssuesNote: sonar.sonarNewIssuesNote,
|
|
1105
|
+
...sonar.sonarFailures === void 0 ? {} : { sonarFailures: sonar.sonarFailures }
|
|
921
1106
|
};
|
|
922
1107
|
}
|
|
923
1108
|
async function getPrInfo2(branch) {
|
|
924
1109
|
const config = readConfig();
|
|
925
1110
|
if (selectBackend(config) === "azdo") {
|
|
926
|
-
|
|
1111
|
+
assertAzdoRemote();
|
|
1112
|
+
const pr = getPrInfo(branch === getCurrentBranch() ? void 0 : branch);
|
|
1113
|
+
return pr === null ? null : withSonar(pr);
|
|
927
1114
|
}
|
|
928
1115
|
return getPrInfoGh(branch);
|
|
929
1116
|
}
|
|
@@ -1838,11 +2025,11 @@ import { createInterface as createInterface2 } from "readline";
|
|
|
1838
2025
|
import { Command as Command3 } from "commander";
|
|
1839
2026
|
|
|
1840
2027
|
// src/config/githubService.ts
|
|
1841
|
-
import { spawnSync as
|
|
2028
|
+
import { spawnSync as spawnSync4 } from "child_process";
|
|
1842
2029
|
var GITHUB_ISSUE_COMMENT_URL_RE = /github\.com\/([^/]+\/[^/]+)\/issues\/\d+#issuecomment-(\d+)/;
|
|
1843
2030
|
function run3(cmd, args) {
|
|
1844
2031
|
const startedAt = Date.now();
|
|
1845
|
-
const result =
|
|
2032
|
+
const result = spawnSync4(cmd, args, { encoding: "utf8" });
|
|
1846
2033
|
recordCommand(cmd, args, startedAt, result.error ? -1 : result.status ?? 1);
|
|
1847
2034
|
if (result.error) {
|
|
1848
2035
|
const err = result.error;
|
|
@@ -1997,10 +2184,10 @@ function addCopilotReviewer(prNumber) {
|
|
|
1997
2184
|
}
|
|
1998
2185
|
|
|
1999
2186
|
// src/github/ghWorkService.ts
|
|
2000
|
-
import { spawnSync as
|
|
2187
|
+
import { spawnSync as spawnSync5 } from "child_process";
|
|
2001
2188
|
function run4(cmd, args) {
|
|
2002
2189
|
const startedAt = Date.now();
|
|
2003
|
-
const result =
|
|
2190
|
+
const result = spawnSync5(cmd, args, { encoding: "utf8" });
|
|
2004
2191
|
recordCommand(cmd, args, startedAt, result.error ? -1 : result.status ?? 1);
|
|
2005
2192
|
if (result.error) {
|
|
2006
2193
|
const err = result.error;
|
|
@@ -2448,7 +2635,7 @@ function parseCreatedPrUrl(stdout, head) {
|
|
|
2448
2635
|
}
|
|
2449
2636
|
|
|
2450
2637
|
// src/claude/claudeService.ts
|
|
2451
|
-
import { spawn, spawnSync as
|
|
2638
|
+
import { spawn, spawnSync as spawnSync6 } from "child_process";
|
|
2452
2639
|
import { createInterface } from "readline";
|
|
2453
2640
|
|
|
2454
2641
|
// src/cli/spawnUtils.ts
|
|
@@ -2633,7 +2820,7 @@ function invokeClaudeCode(prompt, options = {}) {
|
|
|
2633
2820
|
function invokeClaudeCodeSync(prompt, yolo, model, effort) {
|
|
2634
2821
|
const claudeBin = resolveCommand("claude");
|
|
2635
2822
|
const args = buildClaudeArgs(prompt, { yolo, model, effort, verbose: false });
|
|
2636
|
-
const result =
|
|
2823
|
+
const result = spawnSync6(claudeBin, args, { encoding: "utf8", stdio: "inherit" });
|
|
2637
2824
|
handleSpawnError(result.error, "claude");
|
|
2638
2825
|
handleExitCode(result.status, "Claude Code");
|
|
2639
2826
|
}
|
|
@@ -2739,7 +2926,7 @@ function summarizeTool(name, input) {
|
|
|
2739
2926
|
}
|
|
2740
2927
|
|
|
2741
2928
|
// src/codex/codexService.ts
|
|
2742
|
-
import { spawn as spawn2, spawnSync as
|
|
2929
|
+
import { spawn as spawn2, spawnSync as spawnSync7 } from "child_process";
|
|
2743
2930
|
function toTomlBasicString(value) {
|
|
2744
2931
|
return JSON.stringify(value);
|
|
2745
2932
|
}
|
|
@@ -2760,7 +2947,7 @@ function invokeCodexCode(prompt, options = {}) {
|
|
|
2760
2947
|
function invokeCodexCodeSync(prompt, yolo, model, effort) {
|
|
2761
2948
|
const codexBin = resolveCommand("codex");
|
|
2762
2949
|
const args = buildCodexArgs(prompt, { yolo, model, effort });
|
|
2763
|
-
const result =
|
|
2950
|
+
const result = spawnSync7(codexBin, args, { encoding: "utf8", stdio: "inherit" });
|
|
2764
2951
|
handleSpawnError(result.error, "codex");
|
|
2765
2952
|
handleExitCode(result.status, "Codex");
|
|
2766
2953
|
}
|
|
@@ -5414,11 +5601,11 @@ function readWorkRecords(options = {}) {
|
|
|
5414
5601
|
}
|
|
5415
5602
|
|
|
5416
5603
|
// src/git/repoStatus.ts
|
|
5417
|
-
import { spawnSync as
|
|
5604
|
+
import { spawnSync as spawnSync8 } from "child_process";
|
|
5418
5605
|
var GIT_BIN = resolveCommand("git");
|
|
5419
5606
|
function git(args) {
|
|
5420
5607
|
const startedAt = Date.now();
|
|
5421
|
-
const result =
|
|
5608
|
+
const result = spawnSync8(GIT_BIN, args, { encoding: "utf8" });
|
|
5422
5609
|
const status = result.status ?? 1;
|
|
5423
5610
|
recordCommand(GIT_BIN, args, startedAt, result.error ? -1 : status);
|
|
5424
5611
|
return {
|