@h-rig/runtime 0.0.6-alpha.1 → 0.0.6-alpha.3
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/dist/bin/rig-agent-dispatch.js +60 -0
- package/dist/bin/rig-agent.js +49 -6
- package/dist/src/control-plane/agent-wrapper.js +60 -0
- package/dist/src/control-plane/harness-main.js +49 -6
- package/dist/src/control-plane/hooks/completion-verification.js +49 -6
- package/dist/src/control-plane/hooks/submodule-branch.js +19 -0
- package/dist/src/control-plane/hooks/task-runtime-start.js +19 -0
- package/dist/src/control-plane/native/git-ops.js +47 -4
- package/dist/src/control-plane/native/harness-cli.js +49 -6
- package/dist/src/control-plane/native/task-ops.js +2 -2
- package/dist/src/control-plane/runtime/index.js +20 -0
- package/dist/src/control-plane/runtime/isolation/home.js +20 -0
- package/dist/src/control-plane/runtime/isolation/index.js +20 -0
- package/dist/src/control-plane/runtime/isolation/runner.js +20 -0
- package/dist/src/control-plane/runtime/isolation.js +20 -0
- package/dist/src/control-plane/runtime/queue.js +20 -0
- package/native/darwin-arm64/{bin/rig-git → rig-git} +0 -0
- package/native/darwin-arm64/rig-git.build-manifest.json +4 -0
- package/native/darwin-arm64/{bin/rig-shell → rig-shell} +0 -0
- package/native/darwin-arm64/rig-shell.build-manifest.json +4 -0
- package/native/darwin-arm64/{bin/rig-tools → rig-tools} +0 -0
- package/native/darwin-arm64/rig-tools.build-manifest.json +4 -0
- package/native/darwin-arm64/{lib/runtime-native.dylib → runtime-native.dylib} +0 -0
- package/package.json +6 -6
- package/native/darwin-arm64/lib/runtime-native-darwin-arm64.dylib +0 -0
- package/native/darwin-arm64/manifest.json +0 -1
- package/native/linux-x64/bin/rig-git +0 -0
- package/native/linux-x64/bin/rig-shell +0 -0
- package/native/linux-x64/bin/rig-tools +0 -0
- package/native/linux-x64/lib/runtime-native-linux-x64.so +0 -0
- package/native/linux-x64/lib/runtime-native.so +0 -0
- package/native/linux-x64/manifest.json +0 -1
|
@@ -5887,6 +5887,10 @@ async function runtimeEnv(projectRoot, runtime) {
|
|
|
5887
5887
|
env[key] = value;
|
|
5888
5888
|
}
|
|
5889
5889
|
}
|
|
5890
|
+
const rigGithubToken = process.env.RIG_GITHUB_TOKEN?.trim() || "";
|
|
5891
|
+
if (rigGithubToken && !env.GITHUB_TOKEN && !env.GH_TOKEN) {
|
|
5892
|
+
env.GITHUB_TOKEN = rigGithubToken;
|
|
5893
|
+
}
|
|
5890
5894
|
const fallbackGithubToken = !env.GITHUB_TOKEN && !env.GH_TOKEN ? await resolveGithubCliAuthToken(hostGhBinary) : "";
|
|
5891
5895
|
if (fallbackGithubToken) {
|
|
5892
5896
|
env.GITHUB_TOKEN = fallbackGithubToken;
|
|
@@ -5897,6 +5901,13 @@ async function runtimeEnv(projectRoot, runtime) {
|
|
|
5897
5901
|
if (!env.GH_TOKEN && env.GITHUB_TOKEN) {
|
|
5898
5902
|
env.GH_TOKEN = env.GITHUB_TOKEN;
|
|
5899
5903
|
}
|
|
5904
|
+
const gitHubToken = env.GITHUB_TOKEN || env.GH_TOKEN || rigGithubToken;
|
|
5905
|
+
if (gitHubToken) {
|
|
5906
|
+
env.RIG_GITHUB_TOKEN = gitHubToken;
|
|
5907
|
+
env.GITHUB_TOKEN = env.GITHUB_TOKEN || gitHubToken;
|
|
5908
|
+
env.GH_TOKEN = env.GH_TOKEN || gitHubToken;
|
|
5909
|
+
applyGitHubCredentialHelperEnv(env);
|
|
5910
|
+
}
|
|
5900
5911
|
if (!env.GREPTILE_GITHUB_TOKEN && env.GITHUB_TOKEN) {
|
|
5901
5912
|
env.GREPTILE_GITHUB_TOKEN = env.GITHUB_TOKEN;
|
|
5902
5913
|
}
|
|
@@ -5977,12 +5988,21 @@ async function materializeRuntimeCertBundle(runtime) {
|
|
|
5977
5988
|
}
|
|
5978
5989
|
return targetPath;
|
|
5979
5990
|
}
|
|
5991
|
+
function applyGitHubCredentialHelperEnv(env) {
|
|
5992
|
+
env.GIT_TERMINAL_PROMPT = "0";
|
|
5993
|
+
env.GIT_CONFIG_COUNT = "2";
|
|
5994
|
+
env.GIT_CONFIG_KEY_0 = "credential.helper";
|
|
5995
|
+
env.GIT_CONFIG_VALUE_0 = "";
|
|
5996
|
+
env.GIT_CONFIG_KEY_1 = "credential.helper";
|
|
5997
|
+
env.GIT_CONFIG_VALUE_1 = '!f() { test "$1" = get || exit 0; token="${GITHUB_TOKEN:-${GH_TOKEN:-${RIG_GITHUB_TOKEN:-}}}"; test -n "$token" || exit 0; echo username=x-access-token; echo password="$token"; }; f';
|
|
5998
|
+
}
|
|
5980
5999
|
function persistRuntimeSecrets(runtimeRoot, env) {
|
|
5981
6000
|
const secretsPath = resolve25(runtimeRoot, "runtime-secrets.json");
|
|
5982
6001
|
const persisted = {};
|
|
5983
6002
|
for (const key of [
|
|
5984
6003
|
"GITHUB_TOKEN",
|
|
5985
6004
|
"GH_TOKEN",
|
|
6005
|
+
"RIG_GITHUB_TOKEN",
|
|
5986
6006
|
"GREPTILE_GITHUB_TOKEN",
|
|
5987
6007
|
"GREPTILE_API_KEY",
|
|
5988
6008
|
"AI_REVIEW_MODE",
|
|
@@ -9193,6 +9213,18 @@ async function runAgentWrapper(options = {}) {
|
|
|
9193
9213
|
console.error(`[rig-agent] Failed to provision runtime: ${error}`);
|
|
9194
9214
|
return 1;
|
|
9195
9215
|
}
|
|
9216
|
+
try {
|
|
9217
|
+
await waitForDirtyBaselineReady(runtime, taskId);
|
|
9218
|
+
} catch (error) {
|
|
9219
|
+
emitWrapperEvent("runtime.baseline.failed", {
|
|
9220
|
+
runtimeId: runtime.id,
|
|
9221
|
+
taskId,
|
|
9222
|
+
workspaceDir: runtime.workspaceDir,
|
|
9223
|
+
error: error instanceof Error ? error.message : String(error)
|
|
9224
|
+
});
|
|
9225
|
+
console.error(`[rig-agent] Failed to apply selected baseline before provider launch: ${error}`);
|
|
9226
|
+
return 1;
|
|
9227
|
+
}
|
|
9196
9228
|
const providerArgs = buildProviderArgs(provider, runtime, argv);
|
|
9197
9229
|
const providerCommand = [providerBinary(provider), ...providerArgs];
|
|
9198
9230
|
emitWrapperEvent("provider.launch", {
|
|
@@ -9413,6 +9445,34 @@ function providerBinary(provider) {
|
|
|
9413
9445
|
function emitWrapperEvent(type, payload) {
|
|
9414
9446
|
console.log(`__RIG_WRAPPER_EVENT__${JSON.stringify({ type, payload, at: new Date().toISOString() })}`);
|
|
9415
9447
|
}
|
|
9448
|
+
function sleep(ms) {
|
|
9449
|
+
return new Promise((resolveSleep) => setTimeout(resolveSleep, ms));
|
|
9450
|
+
}
|
|
9451
|
+
async function waitForDirtyBaselineReady(runtime, taskId) {
|
|
9452
|
+
const readyFile = process.env.RIG_DIRTY_BASELINE_READY_FILE?.trim();
|
|
9453
|
+
if (process.env.RIG_BASELINE_MODE !== "dirty-snapshot" || !readyFile)
|
|
9454
|
+
return;
|
|
9455
|
+
const timeoutMs = Number.parseInt(process.env.RIG_DIRTY_BASELINE_TIMEOUT_MS ?? "30000", 10);
|
|
9456
|
+
const deadline = Date.now() + (Number.isFinite(timeoutMs) && timeoutMs > 0 ? timeoutMs : 30000);
|
|
9457
|
+
emitWrapperEvent("runtime.baseline.waiting", {
|
|
9458
|
+
runtimeId: runtime.id,
|
|
9459
|
+
taskId,
|
|
9460
|
+
workspaceDir: runtime.workspaceDir,
|
|
9461
|
+
readyFile
|
|
9462
|
+
});
|
|
9463
|
+
while (!existsSync33(readyFile)) {
|
|
9464
|
+
if (Date.now() >= deadline) {
|
|
9465
|
+
throw new Error(`Timed out waiting for dirty baseline ready file: ${readyFile}`);
|
|
9466
|
+
}
|
|
9467
|
+
await sleep(50);
|
|
9468
|
+
}
|
|
9469
|
+
emitWrapperEvent("runtime.baseline.completed", {
|
|
9470
|
+
runtimeId: runtime.id,
|
|
9471
|
+
taskId,
|
|
9472
|
+
workspaceDir: runtime.workspaceDir,
|
|
9473
|
+
readyFile
|
|
9474
|
+
});
|
|
9475
|
+
}
|
|
9416
9476
|
async function resolveTaskId(projectRoot, monorepoRoot) {
|
|
9417
9477
|
if (process.env.RIG_TASK_ID) {
|
|
9418
9478
|
return process.env.RIG_TASK_ID;
|
package/dist/bin/rig-agent.js
CHANGED
|
@@ -6389,7 +6389,7 @@ This file records approaches that did not work.
|
|
|
6389
6389
|
`, "utf-8");
|
|
6390
6390
|
}
|
|
6391
6391
|
const content = readFileSync12(failedPath, "utf-8");
|
|
6392
|
-
const attempts = (content.match(new RegExp(`^## ${
|
|
6392
|
+
const attempts = (content.match(new RegExp(`^## ${escapeRegExp2(activeTask)}\\b`, "gm")) || []).length + 1;
|
|
6393
6393
|
appendFileSync(failedPath, `
|
|
6394
6394
|
## ${activeTask} - Attempt ${attempts} (${nowIso()})
|
|
6395
6395
|
|
|
@@ -6885,7 +6885,7 @@ function printArtifactSection(path, header) {
|
|
|
6885
6885
|
process.stdout.write(readFileSync12(path, "utf-8"));
|
|
6886
6886
|
console.log("");
|
|
6887
6887
|
}
|
|
6888
|
-
function
|
|
6888
|
+
function escapeRegExp2(value) {
|
|
6889
6889
|
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
6890
6890
|
}
|
|
6891
6891
|
function changedFilesForTask(projectRoot, taskId, scoped) {
|
|
@@ -7112,17 +7112,15 @@ function gitOpenPr(options) {
|
|
|
7112
7112
|
const target = options.target || (taskId ? "monorepo" : "project");
|
|
7113
7113
|
let repoRoot = options.projectRoot;
|
|
7114
7114
|
let repoLabel = "project-rig";
|
|
7115
|
-
|
|
7115
|
+
const envBase = target === "monorepo" ? process.env.RIG_PR_BASE_MONOREPO?.trim() || "" : process.env.RIG_PR_BASE_PROJECT?.trim() || "";
|
|
7116
7116
|
if (target === "monorepo") {
|
|
7117
7117
|
repoRoot = resolveOptionalMonorepoRoot(options.projectRoot) || resolveMonorepoRoot2(options.projectRoot);
|
|
7118
7118
|
repoLabel = "monorepo";
|
|
7119
|
-
defaultBase = process.env.RIG_PR_BASE_MONOREPO || "main";
|
|
7120
7119
|
if (taskId) {
|
|
7121
7120
|
gitSyncBranch(options.projectRoot, taskId, "monorepo");
|
|
7122
7121
|
}
|
|
7123
7122
|
} else if (taskId) {
|
|
7124
7123
|
gitSyncBranch(options.projectRoot, taskId, "project");
|
|
7125
|
-
defaultBase = inferProjectBase(options.projectRoot, defaultBase);
|
|
7126
7124
|
}
|
|
7127
7125
|
if (!existsSync22(resolve26(repoRoot, ".git"))) {
|
|
7128
7126
|
throw new Error(`Repository not available for open-pr target ${target}: ${repoRoot}`);
|
|
@@ -7131,9 +7129,9 @@ function gitOpenPr(options) {
|
|
|
7131
7129
|
if (!branch || branch === "HEAD") {
|
|
7132
7130
|
throw new Error(`Cannot open PR from detached HEAD in ${repoLabel}. Checkout a branch first.`);
|
|
7133
7131
|
}
|
|
7134
|
-
const base = options.base || defaultBase;
|
|
7135
7132
|
const repoNameWithOwner = resolveRepoNameWithOwner(options.projectRoot, repoRoot);
|
|
7136
7133
|
const networkRemote = resolveNetworkRemoteName(options.projectRoot, repoRoot, repoNameWithOwner);
|
|
7134
|
+
const base = options.base || envBase || inferRepositoryDefaultBase(options.projectRoot, repoRoot, repoNameWithOwner, networkRemote, target === "project" ? inferProjectBase(options.projectRoot, "main") : "main");
|
|
7137
7135
|
refreshRemoteBaseRef(options.projectRoot, repoRoot, base);
|
|
7138
7136
|
let reviewer = (options.reviewer || "").trim();
|
|
7139
7137
|
let reviewerSource = reviewer ? "flag" : undefined;
|
|
@@ -7559,6 +7557,32 @@ function withGhRepo(command, repoNameWithOwner) {
|
|
|
7559
7557
|
}
|
|
7560
7558
|
return [command[0], command[1], command[2], ...ghRepoArgs(repoNameWithOwner), ...command.slice(3)];
|
|
7561
7559
|
}
|
|
7560
|
+
function inferRepositoryDefaultBase(projectRoot, repoRoot, repoNameWithOwner, remoteName, fallback) {
|
|
7561
|
+
const remote = remoteName || "origin";
|
|
7562
|
+
const symbolic = runCapture2(gitCmd(projectRoot, repoRoot, "symbolic-ref", "--short", `refs/remotes/${remote}/HEAD`), projectRoot);
|
|
7563
|
+
if (symbolic.exitCode === 0) {
|
|
7564
|
+
const ref = symbolic.stdout.trim().replace(new RegExp(`^${escapeRegExp(remote)}/`), "");
|
|
7565
|
+
if (ref && ref !== "HEAD") {
|
|
7566
|
+
return ref;
|
|
7567
|
+
}
|
|
7568
|
+
}
|
|
7569
|
+
const lsRemote = runCapture2(gitCmd(projectRoot, repoRoot, "ls-remote", "--symref", remote, "HEAD"), projectRoot);
|
|
7570
|
+
if (lsRemote.exitCode === 0) {
|
|
7571
|
+
const match = lsRemote.stdout.match(/^ref:\s+refs\/heads\/([^\t\r\n]+)\s+HEAD/m);
|
|
7572
|
+
if (match?.[1]) {
|
|
7573
|
+
return match[1];
|
|
7574
|
+
}
|
|
7575
|
+
}
|
|
7576
|
+
const gh = resolveGithubCliBinary(projectRoot);
|
|
7577
|
+
if (gh && repoNameWithOwner) {
|
|
7578
|
+
const api = runCapture2(withGhRepo([gh, "repo", "view", "--json", "defaultBranchRef", "--jq", ".defaultBranchRef.name"], repoNameWithOwner), repoRoot);
|
|
7579
|
+
const branch = api.exitCode === 0 ? api.stdout.trim() : "";
|
|
7580
|
+
if (branch) {
|
|
7581
|
+
return branch;
|
|
7582
|
+
}
|
|
7583
|
+
}
|
|
7584
|
+
return fallback;
|
|
7585
|
+
}
|
|
7562
7586
|
function inferProjectBase(projectRoot, fallback) {
|
|
7563
7587
|
const containing = runCapture2(gitCmd(projectRoot, projectRoot, "branch", "-r", "--contains", "HEAD"), projectRoot);
|
|
7564
7588
|
if (containing.exitCode !== 0) {
|
|
@@ -7940,6 +7964,10 @@ function runtimeGitEnv(projectRoot) {
|
|
|
7940
7964
|
}
|
|
7941
7965
|
env[key] = value;
|
|
7942
7966
|
}
|
|
7967
|
+
const rigGithubToken = process.env.RIG_GITHUB_TOKEN?.trim() || "";
|
|
7968
|
+
if (rigGithubToken && !env.GITHUB_TOKEN && !env.GH_TOKEN) {
|
|
7969
|
+
env.GITHUB_TOKEN = rigGithubToken;
|
|
7970
|
+
}
|
|
7943
7971
|
if (!env.GITHUB_TOKEN && env.GH_TOKEN) {
|
|
7944
7972
|
env.GITHUB_TOKEN = env.GH_TOKEN;
|
|
7945
7973
|
}
|
|
@@ -7963,6 +7991,13 @@ function runtimeGitEnv(projectRoot) {
|
|
|
7963
7991
|
if (!env.GH_TOKEN && env.GITHUB_TOKEN) {
|
|
7964
7992
|
env.GH_TOKEN = env.GITHUB_TOKEN;
|
|
7965
7993
|
}
|
|
7994
|
+
const gitHubToken = env.GITHUB_TOKEN || env.GH_TOKEN || env.RIG_GITHUB_TOKEN || rigGithubToken;
|
|
7995
|
+
if (gitHubToken) {
|
|
7996
|
+
env.RIG_GITHUB_TOKEN = gitHubToken;
|
|
7997
|
+
env.GITHUB_TOKEN = env.GITHUB_TOKEN || gitHubToken;
|
|
7998
|
+
env.GH_TOKEN = env.GH_TOKEN || gitHubToken;
|
|
7999
|
+
applyGitHubCredentialHelperEnv(env);
|
|
8000
|
+
}
|
|
7966
8001
|
if (runtimeKnownHosts && existsSync22(runtimeKnownHosts)) {
|
|
7967
8002
|
const sshParts = [
|
|
7968
8003
|
"ssh",
|
|
@@ -7979,6 +8014,14 @@ function runtimeGitEnv(projectRoot) {
|
|
|
7979
8014
|
}
|
|
7980
8015
|
return Object.keys(env).length > 0 ? env : undefined;
|
|
7981
8016
|
}
|
|
8017
|
+
function applyGitHubCredentialHelperEnv(env) {
|
|
8018
|
+
env.GIT_TERMINAL_PROMPT = "0";
|
|
8019
|
+
env.GIT_CONFIG_COUNT = "2";
|
|
8020
|
+
env.GIT_CONFIG_KEY_0 = "credential.helper";
|
|
8021
|
+
env.GIT_CONFIG_VALUE_0 = "";
|
|
8022
|
+
env.GIT_CONFIG_KEY_1 = "credential.helper";
|
|
8023
|
+
env.GIT_CONFIG_VALUE_1 = '!f() { test "$1" = get || exit 0; token="${GITHUB_TOKEN:-${GH_TOKEN:-${RIG_GITHUB_TOKEN:-}}}"; test -n "$token" || exit 0; echo username=x-access-token; echo password="$token"; }; f';
|
|
8024
|
+
}
|
|
7982
8025
|
function loadPersistedRuntimeSecrets(runtimeRoot) {
|
|
7983
8026
|
if (!runtimeRoot) {
|
|
7984
8027
|
return {};
|
|
@@ -5887,6 +5887,10 @@ async function runtimeEnv(projectRoot, runtime) {
|
|
|
5887
5887
|
env[key] = value;
|
|
5888
5888
|
}
|
|
5889
5889
|
}
|
|
5890
|
+
const rigGithubToken = process.env.RIG_GITHUB_TOKEN?.trim() || "";
|
|
5891
|
+
if (rigGithubToken && !env.GITHUB_TOKEN && !env.GH_TOKEN) {
|
|
5892
|
+
env.GITHUB_TOKEN = rigGithubToken;
|
|
5893
|
+
}
|
|
5890
5894
|
const fallbackGithubToken = !env.GITHUB_TOKEN && !env.GH_TOKEN ? await resolveGithubCliAuthToken(hostGhBinary) : "";
|
|
5891
5895
|
if (fallbackGithubToken) {
|
|
5892
5896
|
env.GITHUB_TOKEN = fallbackGithubToken;
|
|
@@ -5897,6 +5901,13 @@ async function runtimeEnv(projectRoot, runtime) {
|
|
|
5897
5901
|
if (!env.GH_TOKEN && env.GITHUB_TOKEN) {
|
|
5898
5902
|
env.GH_TOKEN = env.GITHUB_TOKEN;
|
|
5899
5903
|
}
|
|
5904
|
+
const gitHubToken = env.GITHUB_TOKEN || env.GH_TOKEN || rigGithubToken;
|
|
5905
|
+
if (gitHubToken) {
|
|
5906
|
+
env.RIG_GITHUB_TOKEN = gitHubToken;
|
|
5907
|
+
env.GITHUB_TOKEN = env.GITHUB_TOKEN || gitHubToken;
|
|
5908
|
+
env.GH_TOKEN = env.GH_TOKEN || gitHubToken;
|
|
5909
|
+
applyGitHubCredentialHelperEnv(env);
|
|
5910
|
+
}
|
|
5900
5911
|
if (!env.GREPTILE_GITHUB_TOKEN && env.GITHUB_TOKEN) {
|
|
5901
5912
|
env.GREPTILE_GITHUB_TOKEN = env.GITHUB_TOKEN;
|
|
5902
5913
|
}
|
|
@@ -5977,12 +5988,21 @@ async function materializeRuntimeCertBundle(runtime) {
|
|
|
5977
5988
|
}
|
|
5978
5989
|
return targetPath;
|
|
5979
5990
|
}
|
|
5991
|
+
function applyGitHubCredentialHelperEnv(env) {
|
|
5992
|
+
env.GIT_TERMINAL_PROMPT = "0";
|
|
5993
|
+
env.GIT_CONFIG_COUNT = "2";
|
|
5994
|
+
env.GIT_CONFIG_KEY_0 = "credential.helper";
|
|
5995
|
+
env.GIT_CONFIG_VALUE_0 = "";
|
|
5996
|
+
env.GIT_CONFIG_KEY_1 = "credential.helper";
|
|
5997
|
+
env.GIT_CONFIG_VALUE_1 = '!f() { test "$1" = get || exit 0; token="${GITHUB_TOKEN:-${GH_TOKEN:-${RIG_GITHUB_TOKEN:-}}}"; test -n "$token" || exit 0; echo username=x-access-token; echo password="$token"; }; f';
|
|
5998
|
+
}
|
|
5980
5999
|
function persistRuntimeSecrets(runtimeRoot, env) {
|
|
5981
6000
|
const secretsPath = resolve25(runtimeRoot, "runtime-secrets.json");
|
|
5982
6001
|
const persisted = {};
|
|
5983
6002
|
for (const key of [
|
|
5984
6003
|
"GITHUB_TOKEN",
|
|
5985
6004
|
"GH_TOKEN",
|
|
6005
|
+
"RIG_GITHUB_TOKEN",
|
|
5986
6006
|
"GREPTILE_GITHUB_TOKEN",
|
|
5987
6007
|
"GREPTILE_API_KEY",
|
|
5988
6008
|
"AI_REVIEW_MODE",
|
|
@@ -9193,6 +9213,18 @@ async function runAgentWrapper(options = {}) {
|
|
|
9193
9213
|
console.error(`[rig-agent] Failed to provision runtime: ${error}`);
|
|
9194
9214
|
return 1;
|
|
9195
9215
|
}
|
|
9216
|
+
try {
|
|
9217
|
+
await waitForDirtyBaselineReady(runtime, taskId);
|
|
9218
|
+
} catch (error) {
|
|
9219
|
+
emitWrapperEvent("runtime.baseline.failed", {
|
|
9220
|
+
runtimeId: runtime.id,
|
|
9221
|
+
taskId,
|
|
9222
|
+
workspaceDir: runtime.workspaceDir,
|
|
9223
|
+
error: error instanceof Error ? error.message : String(error)
|
|
9224
|
+
});
|
|
9225
|
+
console.error(`[rig-agent] Failed to apply selected baseline before provider launch: ${error}`);
|
|
9226
|
+
return 1;
|
|
9227
|
+
}
|
|
9196
9228
|
const providerArgs = buildProviderArgs(provider, runtime, argv);
|
|
9197
9229
|
const providerCommand = [providerBinary(provider), ...providerArgs];
|
|
9198
9230
|
emitWrapperEvent("provider.launch", {
|
|
@@ -9413,6 +9445,34 @@ function providerBinary(provider) {
|
|
|
9413
9445
|
function emitWrapperEvent(type, payload) {
|
|
9414
9446
|
console.log(`__RIG_WRAPPER_EVENT__${JSON.stringify({ type, payload, at: new Date().toISOString() })}`);
|
|
9415
9447
|
}
|
|
9448
|
+
function sleep(ms) {
|
|
9449
|
+
return new Promise((resolveSleep) => setTimeout(resolveSleep, ms));
|
|
9450
|
+
}
|
|
9451
|
+
async function waitForDirtyBaselineReady(runtime, taskId) {
|
|
9452
|
+
const readyFile = process.env.RIG_DIRTY_BASELINE_READY_FILE?.trim();
|
|
9453
|
+
if (process.env.RIG_BASELINE_MODE !== "dirty-snapshot" || !readyFile)
|
|
9454
|
+
return;
|
|
9455
|
+
const timeoutMs = Number.parseInt(process.env.RIG_DIRTY_BASELINE_TIMEOUT_MS ?? "30000", 10);
|
|
9456
|
+
const deadline = Date.now() + (Number.isFinite(timeoutMs) && timeoutMs > 0 ? timeoutMs : 30000);
|
|
9457
|
+
emitWrapperEvent("runtime.baseline.waiting", {
|
|
9458
|
+
runtimeId: runtime.id,
|
|
9459
|
+
taskId,
|
|
9460
|
+
workspaceDir: runtime.workspaceDir,
|
|
9461
|
+
readyFile
|
|
9462
|
+
});
|
|
9463
|
+
while (!existsSync33(readyFile)) {
|
|
9464
|
+
if (Date.now() >= deadline) {
|
|
9465
|
+
throw new Error(`Timed out waiting for dirty baseline ready file: ${readyFile}`);
|
|
9466
|
+
}
|
|
9467
|
+
await sleep(50);
|
|
9468
|
+
}
|
|
9469
|
+
emitWrapperEvent("runtime.baseline.completed", {
|
|
9470
|
+
runtimeId: runtime.id,
|
|
9471
|
+
taskId,
|
|
9472
|
+
workspaceDir: runtime.workspaceDir,
|
|
9473
|
+
readyFile
|
|
9474
|
+
});
|
|
9475
|
+
}
|
|
9416
9476
|
async function resolveTaskId(projectRoot, monorepoRoot) {
|
|
9417
9477
|
if (process.env.RIG_TASK_ID) {
|
|
9418
9478
|
return process.env.RIG_TASK_ID;
|
|
@@ -5461,7 +5461,7 @@ This file records approaches that did not work.
|
|
|
5461
5461
|
`, "utf-8");
|
|
5462
5462
|
}
|
|
5463
5463
|
const content = readFileSync10(failedPath, "utf-8");
|
|
5464
|
-
const attempts = (content.match(new RegExp(`^## ${
|
|
5464
|
+
const attempts = (content.match(new RegExp(`^## ${escapeRegExp2(activeTask)}\\b`, "gm")) || []).length + 1;
|
|
5465
5465
|
appendFileSync(failedPath, `
|
|
5466
5466
|
## ${activeTask} - Attempt ${attempts} (${nowIso()})
|
|
5467
5467
|
|
|
@@ -5960,7 +5960,7 @@ function printArtifactSection(path, header) {
|
|
|
5960
5960
|
process.stdout.write(readFileSync10(path, "utf-8"));
|
|
5961
5961
|
console.log("");
|
|
5962
5962
|
}
|
|
5963
|
-
function
|
|
5963
|
+
function escapeRegExp2(value) {
|
|
5964
5964
|
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
5965
5965
|
}
|
|
5966
5966
|
function changedFilesForTask(projectRoot, taskId, scoped) {
|
|
@@ -6187,17 +6187,15 @@ function gitOpenPr(options) {
|
|
|
6187
6187
|
const target = options.target || (taskId ? "monorepo" : "project");
|
|
6188
6188
|
let repoRoot = options.projectRoot;
|
|
6189
6189
|
let repoLabel = "project-rig";
|
|
6190
|
-
|
|
6190
|
+
const envBase = target === "monorepo" ? process.env.RIG_PR_BASE_MONOREPO?.trim() || "" : process.env.RIG_PR_BASE_PROJECT?.trim() || "";
|
|
6191
6191
|
if (target === "monorepo") {
|
|
6192
6192
|
repoRoot = resolveOptionalMonorepoRoot(options.projectRoot) || resolveMonorepoRoot2(options.projectRoot);
|
|
6193
6193
|
repoLabel = "monorepo";
|
|
6194
|
-
defaultBase = process.env.RIG_PR_BASE_MONOREPO || "main";
|
|
6195
6194
|
if (taskId) {
|
|
6196
6195
|
gitSyncBranch(options.projectRoot, taskId, "monorepo");
|
|
6197
6196
|
}
|
|
6198
6197
|
} else if (taskId) {
|
|
6199
6198
|
gitSyncBranch(options.projectRoot, taskId, "project");
|
|
6200
|
-
defaultBase = inferProjectBase(options.projectRoot, defaultBase);
|
|
6201
6199
|
}
|
|
6202
6200
|
if (!existsSync21(resolve24(repoRoot, ".git"))) {
|
|
6203
6201
|
throw new Error(`Repository not available for open-pr target ${target}: ${repoRoot}`);
|
|
@@ -6206,9 +6204,9 @@ function gitOpenPr(options) {
|
|
|
6206
6204
|
if (!branch || branch === "HEAD") {
|
|
6207
6205
|
throw new Error(`Cannot open PR from detached HEAD in ${repoLabel}. Checkout a branch first.`);
|
|
6208
6206
|
}
|
|
6209
|
-
const base = options.base || defaultBase;
|
|
6210
6207
|
const repoNameWithOwner = resolveRepoNameWithOwner(options.projectRoot, repoRoot);
|
|
6211
6208
|
const networkRemote = resolveNetworkRemoteName(options.projectRoot, repoRoot, repoNameWithOwner);
|
|
6209
|
+
const base = options.base || envBase || inferRepositoryDefaultBase(options.projectRoot, repoRoot, repoNameWithOwner, networkRemote, target === "project" ? inferProjectBase(options.projectRoot, "main") : "main");
|
|
6212
6210
|
refreshRemoteBaseRef(options.projectRoot, repoRoot, base);
|
|
6213
6211
|
let reviewer = (options.reviewer || "").trim();
|
|
6214
6212
|
let reviewerSource = reviewer ? "flag" : undefined;
|
|
@@ -6659,6 +6657,32 @@ function withGhRepo(command, repoNameWithOwner) {
|
|
|
6659
6657
|
}
|
|
6660
6658
|
return [command[0], command[1], command[2], ...ghRepoArgs(repoNameWithOwner), ...command.slice(3)];
|
|
6661
6659
|
}
|
|
6660
|
+
function inferRepositoryDefaultBase(projectRoot, repoRoot, repoNameWithOwner, remoteName, fallback) {
|
|
6661
|
+
const remote = remoteName || "origin";
|
|
6662
|
+
const symbolic = runCapture2(gitCmd(projectRoot, repoRoot, "symbolic-ref", "--short", `refs/remotes/${remote}/HEAD`), projectRoot);
|
|
6663
|
+
if (symbolic.exitCode === 0) {
|
|
6664
|
+
const ref = symbolic.stdout.trim().replace(new RegExp(`^${escapeRegExp(remote)}/`), "");
|
|
6665
|
+
if (ref && ref !== "HEAD") {
|
|
6666
|
+
return ref;
|
|
6667
|
+
}
|
|
6668
|
+
}
|
|
6669
|
+
const lsRemote = runCapture2(gitCmd(projectRoot, repoRoot, "ls-remote", "--symref", remote, "HEAD"), projectRoot);
|
|
6670
|
+
if (lsRemote.exitCode === 0) {
|
|
6671
|
+
const match = lsRemote.stdout.match(/^ref:\s+refs\/heads\/([^\t\r\n]+)\s+HEAD/m);
|
|
6672
|
+
if (match?.[1]) {
|
|
6673
|
+
return match[1];
|
|
6674
|
+
}
|
|
6675
|
+
}
|
|
6676
|
+
const gh = resolveGithubCliBinary(projectRoot);
|
|
6677
|
+
if (gh && repoNameWithOwner) {
|
|
6678
|
+
const api = runCapture2(withGhRepo([gh, "repo", "view", "--json", "defaultBranchRef", "--jq", ".defaultBranchRef.name"], repoNameWithOwner), repoRoot);
|
|
6679
|
+
const branch = api.exitCode === 0 ? api.stdout.trim() : "";
|
|
6680
|
+
if (branch) {
|
|
6681
|
+
return branch;
|
|
6682
|
+
}
|
|
6683
|
+
}
|
|
6684
|
+
return fallback;
|
|
6685
|
+
}
|
|
6662
6686
|
function inferProjectBase(projectRoot, fallback) {
|
|
6663
6687
|
const containing = runCapture2(gitCmd(projectRoot, projectRoot, "branch", "-r", "--contains", "HEAD"), projectRoot);
|
|
6664
6688
|
if (containing.exitCode !== 0) {
|
|
@@ -7040,6 +7064,10 @@ function runtimeGitEnv(projectRoot) {
|
|
|
7040
7064
|
}
|
|
7041
7065
|
env[key] = value;
|
|
7042
7066
|
}
|
|
7067
|
+
const rigGithubToken = process.env.RIG_GITHUB_TOKEN?.trim() || "";
|
|
7068
|
+
if (rigGithubToken && !env.GITHUB_TOKEN && !env.GH_TOKEN) {
|
|
7069
|
+
env.GITHUB_TOKEN = rigGithubToken;
|
|
7070
|
+
}
|
|
7043
7071
|
if (!env.GITHUB_TOKEN && env.GH_TOKEN) {
|
|
7044
7072
|
env.GITHUB_TOKEN = env.GH_TOKEN;
|
|
7045
7073
|
}
|
|
@@ -7063,6 +7091,13 @@ function runtimeGitEnv(projectRoot) {
|
|
|
7063
7091
|
if (!env.GH_TOKEN && env.GITHUB_TOKEN) {
|
|
7064
7092
|
env.GH_TOKEN = env.GITHUB_TOKEN;
|
|
7065
7093
|
}
|
|
7094
|
+
const gitHubToken = env.GITHUB_TOKEN || env.GH_TOKEN || env.RIG_GITHUB_TOKEN || rigGithubToken;
|
|
7095
|
+
if (gitHubToken) {
|
|
7096
|
+
env.RIG_GITHUB_TOKEN = gitHubToken;
|
|
7097
|
+
env.GITHUB_TOKEN = env.GITHUB_TOKEN || gitHubToken;
|
|
7098
|
+
env.GH_TOKEN = env.GH_TOKEN || gitHubToken;
|
|
7099
|
+
applyGitHubCredentialHelperEnv(env);
|
|
7100
|
+
}
|
|
7066
7101
|
if (runtimeKnownHosts && existsSync21(runtimeKnownHosts)) {
|
|
7067
7102
|
const sshParts = [
|
|
7068
7103
|
"ssh",
|
|
@@ -7079,6 +7114,14 @@ function runtimeGitEnv(projectRoot) {
|
|
|
7079
7114
|
}
|
|
7080
7115
|
return Object.keys(env).length > 0 ? env : undefined;
|
|
7081
7116
|
}
|
|
7117
|
+
function applyGitHubCredentialHelperEnv(env) {
|
|
7118
|
+
env.GIT_TERMINAL_PROMPT = "0";
|
|
7119
|
+
env.GIT_CONFIG_COUNT = "2";
|
|
7120
|
+
env.GIT_CONFIG_KEY_0 = "credential.helper";
|
|
7121
|
+
env.GIT_CONFIG_VALUE_0 = "";
|
|
7122
|
+
env.GIT_CONFIG_KEY_1 = "credential.helper";
|
|
7123
|
+
env.GIT_CONFIG_VALUE_1 = '!f() { test "$1" = get || exit 0; token="${GITHUB_TOKEN:-${GH_TOKEN:-${RIG_GITHUB_TOKEN:-}}}"; test -n "$token" || exit 0; echo username=x-access-token; echo password="$token"; }; f';
|
|
7124
|
+
}
|
|
7082
7125
|
function loadPersistedRuntimeSecrets(runtimeRoot) {
|
|
7083
7126
|
if (!runtimeRoot) {
|
|
7084
7127
|
return {};
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { appendFileSync as appendFileSync2, existsSync as existsSync21, mkdirSync as mkdirSync11, readFileSync as readFileSync12, writeFileSync as writeFileSync11 } from "fs";
|
|
6
6
|
import { resolve as resolve24 } from "path";
|
|
7
7
|
import {
|
|
8
|
-
escapeRegExp,
|
|
8
|
+
escapeRegExp as escapeRegExp2,
|
|
9
9
|
resolveBunCli,
|
|
10
10
|
resolveBunCliInvocation,
|
|
11
11
|
resolveProjectRoot,
|
|
@@ -6101,17 +6101,15 @@ function gitOpenPr(options) {
|
|
|
6101
6101
|
const target = options.target || (taskId ? "monorepo" : "project");
|
|
6102
6102
|
let repoRoot = options.projectRoot;
|
|
6103
6103
|
let repoLabel = "project-rig";
|
|
6104
|
-
|
|
6104
|
+
const envBase = target === "monorepo" ? process.env.RIG_PR_BASE_MONOREPO?.trim() || "" : process.env.RIG_PR_BASE_PROJECT?.trim() || "";
|
|
6105
6105
|
if (target === "monorepo") {
|
|
6106
6106
|
repoRoot = resolveOptionalMonorepoRoot(options.projectRoot) || resolveMonorepoRoot2(options.projectRoot);
|
|
6107
6107
|
repoLabel = "monorepo";
|
|
6108
|
-
defaultBase = process.env.RIG_PR_BASE_MONOREPO || "main";
|
|
6109
6108
|
if (taskId) {
|
|
6110
6109
|
gitSyncBranch(options.projectRoot, taskId, "monorepo");
|
|
6111
6110
|
}
|
|
6112
6111
|
} else if (taskId) {
|
|
6113
6112
|
gitSyncBranch(options.projectRoot, taskId, "project");
|
|
6114
|
-
defaultBase = inferProjectBase(options.projectRoot, defaultBase);
|
|
6115
6113
|
}
|
|
6116
6114
|
if (!existsSync20(resolve23(repoRoot, ".git"))) {
|
|
6117
6115
|
throw new Error(`Repository not available for open-pr target ${target}: ${repoRoot}`);
|
|
@@ -6120,9 +6118,9 @@ function gitOpenPr(options) {
|
|
|
6120
6118
|
if (!branch || branch === "HEAD") {
|
|
6121
6119
|
throw new Error(`Cannot open PR from detached HEAD in ${repoLabel}. Checkout a branch first.`);
|
|
6122
6120
|
}
|
|
6123
|
-
const base = options.base || defaultBase;
|
|
6124
6121
|
const repoNameWithOwner = resolveRepoNameWithOwner(options.projectRoot, repoRoot);
|
|
6125
6122
|
const networkRemote = resolveNetworkRemoteName(options.projectRoot, repoRoot, repoNameWithOwner);
|
|
6123
|
+
const base = options.base || envBase || inferRepositoryDefaultBase(options.projectRoot, repoRoot, repoNameWithOwner, networkRemote, target === "project" ? inferProjectBase(options.projectRoot, "main") : "main");
|
|
6126
6124
|
refreshRemoteBaseRef(options.projectRoot, repoRoot, base);
|
|
6127
6125
|
let reviewer = (options.reviewer || "").trim();
|
|
6128
6126
|
let reviewerSource = reviewer ? "flag" : undefined;
|
|
@@ -6669,6 +6667,32 @@ function withGhRepo(command, repoNameWithOwner) {
|
|
|
6669
6667
|
}
|
|
6670
6668
|
return [command[0], command[1], command[2], ...ghRepoArgs(repoNameWithOwner), ...command.slice(3)];
|
|
6671
6669
|
}
|
|
6670
|
+
function inferRepositoryDefaultBase(projectRoot, repoRoot, repoNameWithOwner, remoteName, fallback) {
|
|
6671
|
+
const remote = remoteName || "origin";
|
|
6672
|
+
const symbolic = runCapture2(gitCmd(projectRoot, repoRoot, "symbolic-ref", "--short", `refs/remotes/${remote}/HEAD`), projectRoot);
|
|
6673
|
+
if (symbolic.exitCode === 0) {
|
|
6674
|
+
const ref = symbolic.stdout.trim().replace(new RegExp(`^${escapeRegExp(remote)}/`), "");
|
|
6675
|
+
if (ref && ref !== "HEAD") {
|
|
6676
|
+
return ref;
|
|
6677
|
+
}
|
|
6678
|
+
}
|
|
6679
|
+
const lsRemote = runCapture2(gitCmd(projectRoot, repoRoot, "ls-remote", "--symref", remote, "HEAD"), projectRoot);
|
|
6680
|
+
if (lsRemote.exitCode === 0) {
|
|
6681
|
+
const match = lsRemote.stdout.match(/^ref:\s+refs\/heads\/([^\t\r\n]+)\s+HEAD/m);
|
|
6682
|
+
if (match?.[1]) {
|
|
6683
|
+
return match[1];
|
|
6684
|
+
}
|
|
6685
|
+
}
|
|
6686
|
+
const gh = resolveGithubCliBinary(projectRoot);
|
|
6687
|
+
if (gh && repoNameWithOwner) {
|
|
6688
|
+
const api = runCapture2(withGhRepo([gh, "repo", "view", "--json", "defaultBranchRef", "--jq", ".defaultBranchRef.name"], repoNameWithOwner), repoRoot);
|
|
6689
|
+
const branch = api.exitCode === 0 ? api.stdout.trim() : "";
|
|
6690
|
+
if (branch) {
|
|
6691
|
+
return branch;
|
|
6692
|
+
}
|
|
6693
|
+
}
|
|
6694
|
+
return fallback;
|
|
6695
|
+
}
|
|
6672
6696
|
function inferProjectBase(projectRoot, fallback) {
|
|
6673
6697
|
const containing = runCapture2(gitCmd(projectRoot, projectRoot, "branch", "-r", "--contains", "HEAD"), projectRoot);
|
|
6674
6698
|
if (containing.exitCode !== 0) {
|
|
@@ -7013,6 +7037,10 @@ function runtimeGitEnv(projectRoot) {
|
|
|
7013
7037
|
}
|
|
7014
7038
|
env[key] = value;
|
|
7015
7039
|
}
|
|
7040
|
+
const rigGithubToken = process.env.RIG_GITHUB_TOKEN?.trim() || "";
|
|
7041
|
+
if (rigGithubToken && !env.GITHUB_TOKEN && !env.GH_TOKEN) {
|
|
7042
|
+
env.GITHUB_TOKEN = rigGithubToken;
|
|
7043
|
+
}
|
|
7016
7044
|
if (!env.GITHUB_TOKEN && env.GH_TOKEN) {
|
|
7017
7045
|
env.GITHUB_TOKEN = env.GH_TOKEN;
|
|
7018
7046
|
}
|
|
@@ -7036,6 +7064,13 @@ function runtimeGitEnv(projectRoot) {
|
|
|
7036
7064
|
if (!env.GH_TOKEN && env.GITHUB_TOKEN) {
|
|
7037
7065
|
env.GH_TOKEN = env.GITHUB_TOKEN;
|
|
7038
7066
|
}
|
|
7067
|
+
const gitHubToken = env.GITHUB_TOKEN || env.GH_TOKEN || env.RIG_GITHUB_TOKEN || rigGithubToken;
|
|
7068
|
+
if (gitHubToken) {
|
|
7069
|
+
env.RIG_GITHUB_TOKEN = gitHubToken;
|
|
7070
|
+
env.GITHUB_TOKEN = env.GITHUB_TOKEN || gitHubToken;
|
|
7071
|
+
env.GH_TOKEN = env.GH_TOKEN || gitHubToken;
|
|
7072
|
+
applyGitHubCredentialHelperEnv(env);
|
|
7073
|
+
}
|
|
7039
7074
|
if (runtimeKnownHosts && existsSync20(runtimeKnownHosts)) {
|
|
7040
7075
|
const sshParts = [
|
|
7041
7076
|
"ssh",
|
|
@@ -7052,6 +7087,14 @@ function runtimeGitEnv(projectRoot) {
|
|
|
7052
7087
|
}
|
|
7053
7088
|
return Object.keys(env).length > 0 ? env : undefined;
|
|
7054
7089
|
}
|
|
7090
|
+
function applyGitHubCredentialHelperEnv(env) {
|
|
7091
|
+
env.GIT_TERMINAL_PROMPT = "0";
|
|
7092
|
+
env.GIT_CONFIG_COUNT = "2";
|
|
7093
|
+
env.GIT_CONFIG_KEY_0 = "credential.helper";
|
|
7094
|
+
env.GIT_CONFIG_VALUE_0 = "";
|
|
7095
|
+
env.GIT_CONFIG_KEY_1 = "credential.helper";
|
|
7096
|
+
env.GIT_CONFIG_VALUE_1 = '!f() { test "$1" = get || exit 0; token="${GITHUB_TOKEN:-${GH_TOKEN:-${RIG_GITHUB_TOKEN:-}}}"; test -n "$token" || exit 0; echo username=x-access-token; echo password="$token"; }; f';
|
|
7097
|
+
}
|
|
7055
7098
|
function loadPersistedRuntimeSecrets(runtimeRoot) {
|
|
7056
7099
|
if (!runtimeRoot) {
|
|
7057
7100
|
return {};
|
|
@@ -7493,7 +7536,7 @@ async function recordVerifierFailure(projectRoot, taskId, paths) {
|
|
|
7493
7536
|
let attempts = 1;
|
|
7494
7537
|
if (existsSync21(failedApproachesPath)) {
|
|
7495
7538
|
const content = readFileSync12(failedApproachesPath, "utf-8");
|
|
7496
|
-
attempts = (content.match(new RegExp(`^## ${
|
|
7539
|
+
attempts = (content.match(new RegExp(`^## ${escapeRegExp2(taskId)}\\b`, "gm")) || []).length + 1;
|
|
7497
7540
|
} else {
|
|
7498
7541
|
mkdirSync11(resolve24(failedApproachesPath, ".."), { recursive: true });
|
|
7499
7542
|
writeFileSync11(failedApproachesPath, `# Failed Approaches
|
|
@@ -4509,6 +4509,10 @@ function runtimeGitEnv(projectRoot) {
|
|
|
4509
4509
|
}
|
|
4510
4510
|
env[key] = value;
|
|
4511
4511
|
}
|
|
4512
|
+
const rigGithubToken = process.env.RIG_GITHUB_TOKEN?.trim() || "";
|
|
4513
|
+
if (rigGithubToken && !env.GITHUB_TOKEN && !env.GH_TOKEN) {
|
|
4514
|
+
env.GITHUB_TOKEN = rigGithubToken;
|
|
4515
|
+
}
|
|
4512
4516
|
if (!env.GITHUB_TOKEN && env.GH_TOKEN) {
|
|
4513
4517
|
env.GITHUB_TOKEN = env.GH_TOKEN;
|
|
4514
4518
|
}
|
|
@@ -4532,6 +4536,13 @@ function runtimeGitEnv(projectRoot) {
|
|
|
4532
4536
|
if (!env.GH_TOKEN && env.GITHUB_TOKEN) {
|
|
4533
4537
|
env.GH_TOKEN = env.GITHUB_TOKEN;
|
|
4534
4538
|
}
|
|
4539
|
+
const gitHubToken = env.GITHUB_TOKEN || env.GH_TOKEN || env.RIG_GITHUB_TOKEN || rigGithubToken;
|
|
4540
|
+
if (gitHubToken) {
|
|
4541
|
+
env.RIG_GITHUB_TOKEN = gitHubToken;
|
|
4542
|
+
env.GITHUB_TOKEN = env.GITHUB_TOKEN || gitHubToken;
|
|
4543
|
+
env.GH_TOKEN = env.GH_TOKEN || gitHubToken;
|
|
4544
|
+
applyGitHubCredentialHelperEnv(env);
|
|
4545
|
+
}
|
|
4535
4546
|
if (runtimeKnownHosts && existsSync22(runtimeKnownHosts)) {
|
|
4536
4547
|
const sshParts = [
|
|
4537
4548
|
"ssh",
|
|
@@ -4548,6 +4559,14 @@ function runtimeGitEnv(projectRoot) {
|
|
|
4548
4559
|
}
|
|
4549
4560
|
return Object.keys(env).length > 0 ? env : undefined;
|
|
4550
4561
|
}
|
|
4562
|
+
function applyGitHubCredentialHelperEnv(env) {
|
|
4563
|
+
env.GIT_TERMINAL_PROMPT = "0";
|
|
4564
|
+
env.GIT_CONFIG_COUNT = "2";
|
|
4565
|
+
env.GIT_CONFIG_KEY_0 = "credential.helper";
|
|
4566
|
+
env.GIT_CONFIG_VALUE_0 = "";
|
|
4567
|
+
env.GIT_CONFIG_KEY_1 = "credential.helper";
|
|
4568
|
+
env.GIT_CONFIG_VALUE_1 = '!f() { test "$1" = get || exit 0; token="${GITHUB_TOKEN:-${GH_TOKEN:-${RIG_GITHUB_TOKEN:-}}}"; test -n "$token" || exit 0; echo username=x-access-token; echo password="$token"; }; f';
|
|
4569
|
+
}
|
|
4551
4570
|
function loadPersistedRuntimeSecrets(runtimeRoot) {
|
|
4552
4571
|
if (!runtimeRoot) {
|
|
4553
4572
|
return {};
|
|
@@ -4509,6 +4509,10 @@ function runtimeGitEnv(projectRoot) {
|
|
|
4509
4509
|
}
|
|
4510
4510
|
env[key] = value;
|
|
4511
4511
|
}
|
|
4512
|
+
const rigGithubToken = process.env.RIG_GITHUB_TOKEN?.trim() || "";
|
|
4513
|
+
if (rigGithubToken && !env.GITHUB_TOKEN && !env.GH_TOKEN) {
|
|
4514
|
+
env.GITHUB_TOKEN = rigGithubToken;
|
|
4515
|
+
}
|
|
4512
4516
|
if (!env.GITHUB_TOKEN && env.GH_TOKEN) {
|
|
4513
4517
|
env.GITHUB_TOKEN = env.GH_TOKEN;
|
|
4514
4518
|
}
|
|
@@ -4532,6 +4536,13 @@ function runtimeGitEnv(projectRoot) {
|
|
|
4532
4536
|
if (!env.GH_TOKEN && env.GITHUB_TOKEN) {
|
|
4533
4537
|
env.GH_TOKEN = env.GITHUB_TOKEN;
|
|
4534
4538
|
}
|
|
4539
|
+
const gitHubToken = env.GITHUB_TOKEN || env.GH_TOKEN || env.RIG_GITHUB_TOKEN || rigGithubToken;
|
|
4540
|
+
if (gitHubToken) {
|
|
4541
|
+
env.RIG_GITHUB_TOKEN = gitHubToken;
|
|
4542
|
+
env.GITHUB_TOKEN = env.GITHUB_TOKEN || gitHubToken;
|
|
4543
|
+
env.GH_TOKEN = env.GH_TOKEN || gitHubToken;
|
|
4544
|
+
applyGitHubCredentialHelperEnv(env);
|
|
4545
|
+
}
|
|
4535
4546
|
if (runtimeKnownHosts && existsSync22(runtimeKnownHosts)) {
|
|
4536
4547
|
const sshParts = [
|
|
4537
4548
|
"ssh",
|
|
@@ -4548,6 +4559,14 @@ function runtimeGitEnv(projectRoot) {
|
|
|
4548
4559
|
}
|
|
4549
4560
|
return Object.keys(env).length > 0 ? env : undefined;
|
|
4550
4561
|
}
|
|
4562
|
+
function applyGitHubCredentialHelperEnv(env) {
|
|
4563
|
+
env.GIT_TERMINAL_PROMPT = "0";
|
|
4564
|
+
env.GIT_CONFIG_COUNT = "2";
|
|
4565
|
+
env.GIT_CONFIG_KEY_0 = "credential.helper";
|
|
4566
|
+
env.GIT_CONFIG_VALUE_0 = "";
|
|
4567
|
+
env.GIT_CONFIG_KEY_1 = "credential.helper";
|
|
4568
|
+
env.GIT_CONFIG_VALUE_1 = '!f() { test "$1" = get || exit 0; token="${GITHUB_TOKEN:-${GH_TOKEN:-${RIG_GITHUB_TOKEN:-}}}"; test -n "$token" || exit 0; echo username=x-access-token; echo password="$token"; }; f';
|
|
4569
|
+
}
|
|
4551
4570
|
function loadPersistedRuntimeSecrets(runtimeRoot) {
|
|
4552
4571
|
if (!runtimeRoot) {
|
|
4553
4572
|
return {};
|
|
@@ -1773,17 +1773,15 @@ function gitOpenPr(options) {
|
|
|
1773
1773
|
const target = options.target || (taskId ? "monorepo" : "project");
|
|
1774
1774
|
let repoRoot = options.projectRoot;
|
|
1775
1775
|
let repoLabel = "project-rig";
|
|
1776
|
-
|
|
1776
|
+
const envBase = target === "monorepo" ? process.env.RIG_PR_BASE_MONOREPO?.trim() || "" : process.env.RIG_PR_BASE_PROJECT?.trim() || "";
|
|
1777
1777
|
if (target === "monorepo") {
|
|
1778
1778
|
repoRoot = resolveOptionalMonorepoRoot(options.projectRoot) || resolveMonorepoRoot2(options.projectRoot);
|
|
1779
1779
|
repoLabel = "monorepo";
|
|
1780
|
-
defaultBase = process.env.RIG_PR_BASE_MONOREPO || "main";
|
|
1781
1780
|
if (taskId) {
|
|
1782
1781
|
gitSyncBranch(options.projectRoot, taskId, "monorepo");
|
|
1783
1782
|
}
|
|
1784
1783
|
} else if (taskId) {
|
|
1785
1784
|
gitSyncBranch(options.projectRoot, taskId, "project");
|
|
1786
|
-
defaultBase = inferProjectBase(options.projectRoot, defaultBase);
|
|
1787
1785
|
}
|
|
1788
1786
|
if (!existsSync9(resolve11(repoRoot, ".git"))) {
|
|
1789
1787
|
throw new Error(`Repository not available for open-pr target ${target}: ${repoRoot}`);
|
|
@@ -1792,9 +1790,9 @@ function gitOpenPr(options) {
|
|
|
1792
1790
|
if (!branch || branch === "HEAD") {
|
|
1793
1791
|
throw new Error(`Cannot open PR from detached HEAD in ${repoLabel}. Checkout a branch first.`);
|
|
1794
1792
|
}
|
|
1795
|
-
const base = options.base || defaultBase;
|
|
1796
1793
|
const repoNameWithOwner = resolveRepoNameWithOwner(options.projectRoot, repoRoot);
|
|
1797
1794
|
const networkRemote = resolveNetworkRemoteName(options.projectRoot, repoRoot, repoNameWithOwner);
|
|
1795
|
+
const base = options.base || envBase || inferRepositoryDefaultBase(options.projectRoot, repoRoot, repoNameWithOwner, networkRemote, target === "project" ? inferProjectBase(options.projectRoot, "main") : "main");
|
|
1798
1796
|
refreshRemoteBaseRef(options.projectRoot, repoRoot, base);
|
|
1799
1797
|
let reviewer = (options.reviewer || "").trim();
|
|
1800
1798
|
let reviewerSource = reviewer ? "flag" : undefined;
|
|
@@ -2345,6 +2343,32 @@ function withGhRepo(command, repoNameWithOwner) {
|
|
|
2345
2343
|
}
|
|
2346
2344
|
return [command[0], command[1], command[2], ...ghRepoArgs(repoNameWithOwner), ...command.slice(3)];
|
|
2347
2345
|
}
|
|
2346
|
+
function inferRepositoryDefaultBase(projectRoot, repoRoot, repoNameWithOwner, remoteName, fallback) {
|
|
2347
|
+
const remote = remoteName || "origin";
|
|
2348
|
+
const symbolic = runCapture2(gitCmd(projectRoot, repoRoot, "symbolic-ref", "--short", `refs/remotes/${remote}/HEAD`), projectRoot);
|
|
2349
|
+
if (symbolic.exitCode === 0) {
|
|
2350
|
+
const ref = symbolic.stdout.trim().replace(new RegExp(`^${escapeRegExp(remote)}/`), "");
|
|
2351
|
+
if (ref && ref !== "HEAD") {
|
|
2352
|
+
return ref;
|
|
2353
|
+
}
|
|
2354
|
+
}
|
|
2355
|
+
const lsRemote = runCapture2(gitCmd(projectRoot, repoRoot, "ls-remote", "--symref", remote, "HEAD"), projectRoot);
|
|
2356
|
+
if (lsRemote.exitCode === 0) {
|
|
2357
|
+
const match = lsRemote.stdout.match(/^ref:\s+refs\/heads\/([^\t\r\n]+)\s+HEAD/m);
|
|
2358
|
+
if (match?.[1]) {
|
|
2359
|
+
return match[1];
|
|
2360
|
+
}
|
|
2361
|
+
}
|
|
2362
|
+
const gh = resolveGithubCliBinary(projectRoot);
|
|
2363
|
+
if (gh && repoNameWithOwner) {
|
|
2364
|
+
const api = runCapture2(withGhRepo([gh, "repo", "view", "--json", "defaultBranchRef", "--jq", ".defaultBranchRef.name"], repoNameWithOwner), repoRoot);
|
|
2365
|
+
const branch = api.exitCode === 0 ? api.stdout.trim() : "";
|
|
2366
|
+
if (branch) {
|
|
2367
|
+
return branch;
|
|
2368
|
+
}
|
|
2369
|
+
}
|
|
2370
|
+
return fallback;
|
|
2371
|
+
}
|
|
2348
2372
|
function inferProjectBase(projectRoot, fallback) {
|
|
2349
2373
|
const containing = runCapture2(gitCmd(projectRoot, projectRoot, "branch", "-r", "--contains", "HEAD"), projectRoot);
|
|
2350
2374
|
if (containing.exitCode !== 0) {
|
|
@@ -2726,6 +2750,10 @@ function runtimeGitEnv(projectRoot) {
|
|
|
2726
2750
|
}
|
|
2727
2751
|
env[key] = value;
|
|
2728
2752
|
}
|
|
2753
|
+
const rigGithubToken = process.env.RIG_GITHUB_TOKEN?.trim() || "";
|
|
2754
|
+
if (rigGithubToken && !env.GITHUB_TOKEN && !env.GH_TOKEN) {
|
|
2755
|
+
env.GITHUB_TOKEN = rigGithubToken;
|
|
2756
|
+
}
|
|
2729
2757
|
if (!env.GITHUB_TOKEN && env.GH_TOKEN) {
|
|
2730
2758
|
env.GITHUB_TOKEN = env.GH_TOKEN;
|
|
2731
2759
|
}
|
|
@@ -2749,6 +2777,13 @@ function runtimeGitEnv(projectRoot) {
|
|
|
2749
2777
|
if (!env.GH_TOKEN && env.GITHUB_TOKEN) {
|
|
2750
2778
|
env.GH_TOKEN = env.GITHUB_TOKEN;
|
|
2751
2779
|
}
|
|
2780
|
+
const gitHubToken = env.GITHUB_TOKEN || env.GH_TOKEN || env.RIG_GITHUB_TOKEN || rigGithubToken;
|
|
2781
|
+
if (gitHubToken) {
|
|
2782
|
+
env.RIG_GITHUB_TOKEN = gitHubToken;
|
|
2783
|
+
env.GITHUB_TOKEN = env.GITHUB_TOKEN || gitHubToken;
|
|
2784
|
+
env.GH_TOKEN = env.GH_TOKEN || gitHubToken;
|
|
2785
|
+
applyGitHubCredentialHelperEnv(env);
|
|
2786
|
+
}
|
|
2752
2787
|
if (runtimeKnownHosts && existsSync9(runtimeKnownHosts)) {
|
|
2753
2788
|
const sshParts = [
|
|
2754
2789
|
"ssh",
|
|
@@ -2765,6 +2800,14 @@ function runtimeGitEnv(projectRoot) {
|
|
|
2765
2800
|
}
|
|
2766
2801
|
return Object.keys(env).length > 0 ? env : undefined;
|
|
2767
2802
|
}
|
|
2803
|
+
function applyGitHubCredentialHelperEnv(env) {
|
|
2804
|
+
env.GIT_TERMINAL_PROMPT = "0";
|
|
2805
|
+
env.GIT_CONFIG_COUNT = "2";
|
|
2806
|
+
env.GIT_CONFIG_KEY_0 = "credential.helper";
|
|
2807
|
+
env.GIT_CONFIG_VALUE_0 = "";
|
|
2808
|
+
env.GIT_CONFIG_KEY_1 = "credential.helper";
|
|
2809
|
+
env.GIT_CONFIG_VALUE_1 = '!f() { test "$1" = get || exit 0; token="${GITHUB_TOKEN:-${GH_TOKEN:-${RIG_GITHUB_TOKEN:-}}}"; test -n "$token" || exit 0; echo username=x-access-token; echo password="$token"; }; f';
|
|
2810
|
+
}
|
|
2768
2811
|
function loadPersistedRuntimeSecrets(runtimeRoot) {
|
|
2769
2812
|
if (!runtimeRoot) {
|
|
2770
2813
|
return {};
|
|
@@ -5455,7 +5455,7 @@ This file records approaches that did not work.
|
|
|
5455
5455
|
`, "utf-8");
|
|
5456
5456
|
}
|
|
5457
5457
|
const content = readFileSync10(failedPath, "utf-8");
|
|
5458
|
-
const attempts = (content.match(new RegExp(`^## ${
|
|
5458
|
+
const attempts = (content.match(new RegExp(`^## ${escapeRegExp2(activeTask)}\\b`, "gm")) || []).length + 1;
|
|
5459
5459
|
appendFileSync(failedPath, `
|
|
5460
5460
|
## ${activeTask} - Attempt ${attempts} (${nowIso()})
|
|
5461
5461
|
|
|
@@ -5954,7 +5954,7 @@ function printArtifactSection(path, header) {
|
|
|
5954
5954
|
process.stdout.write(readFileSync10(path, "utf-8"));
|
|
5955
5955
|
console.log("");
|
|
5956
5956
|
}
|
|
5957
|
-
function
|
|
5957
|
+
function escapeRegExp2(value) {
|
|
5958
5958
|
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
5959
5959
|
}
|
|
5960
5960
|
function changedFilesForTask(projectRoot, taskId, scoped) {
|
|
@@ -6181,17 +6181,15 @@ function gitOpenPr(options) {
|
|
|
6181
6181
|
const target = options.target || (taskId ? "monorepo" : "project");
|
|
6182
6182
|
let repoRoot = options.projectRoot;
|
|
6183
6183
|
let repoLabel = "project-rig";
|
|
6184
|
-
|
|
6184
|
+
const envBase = target === "monorepo" ? process.env.RIG_PR_BASE_MONOREPO?.trim() || "" : process.env.RIG_PR_BASE_PROJECT?.trim() || "";
|
|
6185
6185
|
if (target === "monorepo") {
|
|
6186
6186
|
repoRoot = resolveOptionalMonorepoRoot(options.projectRoot) || resolveMonorepoRoot2(options.projectRoot);
|
|
6187
6187
|
repoLabel = "monorepo";
|
|
6188
|
-
defaultBase = process.env.RIG_PR_BASE_MONOREPO || "main";
|
|
6189
6188
|
if (taskId) {
|
|
6190
6189
|
gitSyncBranch(options.projectRoot, taskId, "monorepo");
|
|
6191
6190
|
}
|
|
6192
6191
|
} else if (taskId) {
|
|
6193
6192
|
gitSyncBranch(options.projectRoot, taskId, "project");
|
|
6194
|
-
defaultBase = inferProjectBase(options.projectRoot, defaultBase);
|
|
6195
6193
|
}
|
|
6196
6194
|
if (!existsSync21(resolve24(repoRoot, ".git"))) {
|
|
6197
6195
|
throw new Error(`Repository not available for open-pr target ${target}: ${repoRoot}`);
|
|
@@ -6200,9 +6198,9 @@ function gitOpenPr(options) {
|
|
|
6200
6198
|
if (!branch || branch === "HEAD") {
|
|
6201
6199
|
throw new Error(`Cannot open PR from detached HEAD in ${repoLabel}. Checkout a branch first.`);
|
|
6202
6200
|
}
|
|
6203
|
-
const base = options.base || defaultBase;
|
|
6204
6201
|
const repoNameWithOwner = resolveRepoNameWithOwner(options.projectRoot, repoRoot);
|
|
6205
6202
|
const networkRemote = resolveNetworkRemoteName(options.projectRoot, repoRoot, repoNameWithOwner);
|
|
6203
|
+
const base = options.base || envBase || inferRepositoryDefaultBase(options.projectRoot, repoRoot, repoNameWithOwner, networkRemote, target === "project" ? inferProjectBase(options.projectRoot, "main") : "main");
|
|
6206
6204
|
refreshRemoteBaseRef(options.projectRoot, repoRoot, base);
|
|
6207
6205
|
let reviewer = (options.reviewer || "").trim();
|
|
6208
6206
|
let reviewerSource = reviewer ? "flag" : undefined;
|
|
@@ -6653,6 +6651,32 @@ function withGhRepo(command, repoNameWithOwner) {
|
|
|
6653
6651
|
}
|
|
6654
6652
|
return [command[0], command[1], command[2], ...ghRepoArgs(repoNameWithOwner), ...command.slice(3)];
|
|
6655
6653
|
}
|
|
6654
|
+
function inferRepositoryDefaultBase(projectRoot, repoRoot, repoNameWithOwner, remoteName, fallback) {
|
|
6655
|
+
const remote = remoteName || "origin";
|
|
6656
|
+
const symbolic = runCapture2(gitCmd(projectRoot, repoRoot, "symbolic-ref", "--short", `refs/remotes/${remote}/HEAD`), projectRoot);
|
|
6657
|
+
if (symbolic.exitCode === 0) {
|
|
6658
|
+
const ref = symbolic.stdout.trim().replace(new RegExp(`^${escapeRegExp(remote)}/`), "");
|
|
6659
|
+
if (ref && ref !== "HEAD") {
|
|
6660
|
+
return ref;
|
|
6661
|
+
}
|
|
6662
|
+
}
|
|
6663
|
+
const lsRemote = runCapture2(gitCmd(projectRoot, repoRoot, "ls-remote", "--symref", remote, "HEAD"), projectRoot);
|
|
6664
|
+
if (lsRemote.exitCode === 0) {
|
|
6665
|
+
const match = lsRemote.stdout.match(/^ref:\s+refs\/heads\/([^\t\r\n]+)\s+HEAD/m);
|
|
6666
|
+
if (match?.[1]) {
|
|
6667
|
+
return match[1];
|
|
6668
|
+
}
|
|
6669
|
+
}
|
|
6670
|
+
const gh = resolveGithubCliBinary(projectRoot);
|
|
6671
|
+
if (gh && repoNameWithOwner) {
|
|
6672
|
+
const api = runCapture2(withGhRepo([gh, "repo", "view", "--json", "defaultBranchRef", "--jq", ".defaultBranchRef.name"], repoNameWithOwner), repoRoot);
|
|
6673
|
+
const branch = api.exitCode === 0 ? api.stdout.trim() : "";
|
|
6674
|
+
if (branch) {
|
|
6675
|
+
return branch;
|
|
6676
|
+
}
|
|
6677
|
+
}
|
|
6678
|
+
return fallback;
|
|
6679
|
+
}
|
|
6656
6680
|
function inferProjectBase(projectRoot, fallback) {
|
|
6657
6681
|
const containing = runCapture2(gitCmd(projectRoot, projectRoot, "branch", "-r", "--contains", "HEAD"), projectRoot);
|
|
6658
6682
|
if (containing.exitCode !== 0) {
|
|
@@ -7034,6 +7058,10 @@ function runtimeGitEnv(projectRoot) {
|
|
|
7034
7058
|
}
|
|
7035
7059
|
env[key] = value;
|
|
7036
7060
|
}
|
|
7061
|
+
const rigGithubToken = process.env.RIG_GITHUB_TOKEN?.trim() || "";
|
|
7062
|
+
if (rigGithubToken && !env.GITHUB_TOKEN && !env.GH_TOKEN) {
|
|
7063
|
+
env.GITHUB_TOKEN = rigGithubToken;
|
|
7064
|
+
}
|
|
7037
7065
|
if (!env.GITHUB_TOKEN && env.GH_TOKEN) {
|
|
7038
7066
|
env.GITHUB_TOKEN = env.GH_TOKEN;
|
|
7039
7067
|
}
|
|
@@ -7057,6 +7085,13 @@ function runtimeGitEnv(projectRoot) {
|
|
|
7057
7085
|
if (!env.GH_TOKEN && env.GITHUB_TOKEN) {
|
|
7058
7086
|
env.GH_TOKEN = env.GITHUB_TOKEN;
|
|
7059
7087
|
}
|
|
7088
|
+
const gitHubToken = env.GITHUB_TOKEN || env.GH_TOKEN || env.RIG_GITHUB_TOKEN || rigGithubToken;
|
|
7089
|
+
if (gitHubToken) {
|
|
7090
|
+
env.RIG_GITHUB_TOKEN = gitHubToken;
|
|
7091
|
+
env.GITHUB_TOKEN = env.GITHUB_TOKEN || gitHubToken;
|
|
7092
|
+
env.GH_TOKEN = env.GH_TOKEN || gitHubToken;
|
|
7093
|
+
applyGitHubCredentialHelperEnv(env);
|
|
7094
|
+
}
|
|
7060
7095
|
if (runtimeKnownHosts && existsSync21(runtimeKnownHosts)) {
|
|
7061
7096
|
const sshParts = [
|
|
7062
7097
|
"ssh",
|
|
@@ -7073,6 +7108,14 @@ function runtimeGitEnv(projectRoot) {
|
|
|
7073
7108
|
}
|
|
7074
7109
|
return Object.keys(env).length > 0 ? env : undefined;
|
|
7075
7110
|
}
|
|
7111
|
+
function applyGitHubCredentialHelperEnv(env) {
|
|
7112
|
+
env.GIT_TERMINAL_PROMPT = "0";
|
|
7113
|
+
env.GIT_CONFIG_COUNT = "2";
|
|
7114
|
+
env.GIT_CONFIG_KEY_0 = "credential.helper";
|
|
7115
|
+
env.GIT_CONFIG_VALUE_0 = "";
|
|
7116
|
+
env.GIT_CONFIG_KEY_1 = "credential.helper";
|
|
7117
|
+
env.GIT_CONFIG_VALUE_1 = '!f() { test "$1" = get || exit 0; token="${GITHUB_TOKEN:-${GH_TOKEN:-${RIG_GITHUB_TOKEN:-}}}"; test -n "$token" || exit 0; echo username=x-access-token; echo password="$token"; }; f';
|
|
7118
|
+
}
|
|
7076
7119
|
function loadPersistedRuntimeSecrets(runtimeRoot) {
|
|
7077
7120
|
if (!runtimeRoot) {
|
|
7078
7121
|
return {};
|
|
@@ -5634,7 +5634,7 @@ This file records approaches that did not work.
|
|
|
5634
5634
|
`, "utf-8");
|
|
5635
5635
|
}
|
|
5636
5636
|
const content = readFileSync10(failedPath, "utf-8");
|
|
5637
|
-
const attempts = (content.match(new RegExp(`^## ${
|
|
5637
|
+
const attempts = (content.match(new RegExp(`^## ${escapeRegExp2(activeTask)}\\b`, "gm")) || []).length + 1;
|
|
5638
5638
|
appendFileSync(failedPath, `
|
|
5639
5639
|
## ${activeTask} - Attempt ${attempts} (${nowIso()})
|
|
5640
5640
|
|
|
@@ -6290,7 +6290,7 @@ function printArtifactSection(path, header) {
|
|
|
6290
6290
|
process.stdout.write(readFileSync10(path, "utf-8"));
|
|
6291
6291
|
console.log("");
|
|
6292
6292
|
}
|
|
6293
|
-
function
|
|
6293
|
+
function escapeRegExp2(value) {
|
|
6294
6294
|
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
6295
6295
|
}
|
|
6296
6296
|
function changedFilesForTask(projectRoot, taskId, scoped) {
|
|
@@ -6331,6 +6331,10 @@ async function runtimeEnv(projectRoot, runtime) {
|
|
|
6331
6331
|
env[key] = value;
|
|
6332
6332
|
}
|
|
6333
6333
|
}
|
|
6334
|
+
const rigGithubToken = process.env.RIG_GITHUB_TOKEN?.trim() || "";
|
|
6335
|
+
if (rigGithubToken && !env.GITHUB_TOKEN && !env.GH_TOKEN) {
|
|
6336
|
+
env.GITHUB_TOKEN = rigGithubToken;
|
|
6337
|
+
}
|
|
6334
6338
|
const fallbackGithubToken = !env.GITHUB_TOKEN && !env.GH_TOKEN ? await resolveGithubCliAuthToken(hostGhBinary) : "";
|
|
6335
6339
|
if (fallbackGithubToken) {
|
|
6336
6340
|
env.GITHUB_TOKEN = fallbackGithubToken;
|
|
@@ -6341,6 +6345,13 @@ async function runtimeEnv(projectRoot, runtime) {
|
|
|
6341
6345
|
if (!env.GH_TOKEN && env.GITHUB_TOKEN) {
|
|
6342
6346
|
env.GH_TOKEN = env.GITHUB_TOKEN;
|
|
6343
6347
|
}
|
|
6348
|
+
const gitHubToken = env.GITHUB_TOKEN || env.GH_TOKEN || rigGithubToken;
|
|
6349
|
+
if (gitHubToken) {
|
|
6350
|
+
env.RIG_GITHUB_TOKEN = gitHubToken;
|
|
6351
|
+
env.GITHUB_TOKEN = env.GITHUB_TOKEN || gitHubToken;
|
|
6352
|
+
env.GH_TOKEN = env.GH_TOKEN || gitHubToken;
|
|
6353
|
+
applyGitHubCredentialHelperEnv(env);
|
|
6354
|
+
}
|
|
6344
6355
|
if (!env.GREPTILE_GITHUB_TOKEN && env.GITHUB_TOKEN) {
|
|
6345
6356
|
env.GREPTILE_GITHUB_TOKEN = env.GITHUB_TOKEN;
|
|
6346
6357
|
}
|
|
@@ -6436,12 +6447,21 @@ async function materializeRuntimeCertBundle(runtime) {
|
|
|
6436
6447
|
}
|
|
6437
6448
|
return targetPath;
|
|
6438
6449
|
}
|
|
6450
|
+
function applyGitHubCredentialHelperEnv(env) {
|
|
6451
|
+
env.GIT_TERMINAL_PROMPT = "0";
|
|
6452
|
+
env.GIT_CONFIG_COUNT = "2";
|
|
6453
|
+
env.GIT_CONFIG_KEY_0 = "credential.helper";
|
|
6454
|
+
env.GIT_CONFIG_VALUE_0 = "";
|
|
6455
|
+
env.GIT_CONFIG_KEY_1 = "credential.helper";
|
|
6456
|
+
env.GIT_CONFIG_VALUE_1 = '!f() { test "$1" = get || exit 0; token="${GITHUB_TOKEN:-${GH_TOKEN:-${RIG_GITHUB_TOKEN:-}}}"; test -n "$token" || exit 0; echo username=x-access-token; echo password="$token"; }; f';
|
|
6457
|
+
}
|
|
6439
6458
|
function persistRuntimeSecrets(runtimeRoot, env) {
|
|
6440
6459
|
const secretsPath = resolve27(runtimeRoot, "runtime-secrets.json");
|
|
6441
6460
|
const persisted = {};
|
|
6442
6461
|
for (const key of [
|
|
6443
6462
|
"GITHUB_TOKEN",
|
|
6444
6463
|
"GH_TOKEN",
|
|
6464
|
+
"RIG_GITHUB_TOKEN",
|
|
6445
6465
|
"GREPTILE_GITHUB_TOKEN",
|
|
6446
6466
|
"GREPTILE_API_KEY",
|
|
6447
6467
|
"AI_REVIEW_MODE",
|
|
@@ -863,6 +863,10 @@ async function runtimeEnv(projectRoot, runtime) {
|
|
|
863
863
|
env[key] = value;
|
|
864
864
|
}
|
|
865
865
|
}
|
|
866
|
+
const rigGithubToken = process.env.RIG_GITHUB_TOKEN?.trim() || "";
|
|
867
|
+
if (rigGithubToken && !env.GITHUB_TOKEN && !env.GH_TOKEN) {
|
|
868
|
+
env.GITHUB_TOKEN = rigGithubToken;
|
|
869
|
+
}
|
|
866
870
|
const fallbackGithubToken = !env.GITHUB_TOKEN && !env.GH_TOKEN ? await resolveGithubCliAuthToken(hostGhBinary) : "";
|
|
867
871
|
if (fallbackGithubToken) {
|
|
868
872
|
env.GITHUB_TOKEN = fallbackGithubToken;
|
|
@@ -873,6 +877,13 @@ async function runtimeEnv(projectRoot, runtime) {
|
|
|
873
877
|
if (!env.GH_TOKEN && env.GITHUB_TOKEN) {
|
|
874
878
|
env.GH_TOKEN = env.GITHUB_TOKEN;
|
|
875
879
|
}
|
|
880
|
+
const gitHubToken = env.GITHUB_TOKEN || env.GH_TOKEN || rigGithubToken;
|
|
881
|
+
if (gitHubToken) {
|
|
882
|
+
env.RIG_GITHUB_TOKEN = gitHubToken;
|
|
883
|
+
env.GITHUB_TOKEN = env.GITHUB_TOKEN || gitHubToken;
|
|
884
|
+
env.GH_TOKEN = env.GH_TOKEN || gitHubToken;
|
|
885
|
+
applyGitHubCredentialHelperEnv(env);
|
|
886
|
+
}
|
|
876
887
|
if (!env.GREPTILE_GITHUB_TOKEN && env.GITHUB_TOKEN) {
|
|
877
888
|
env.GREPTILE_GITHUB_TOKEN = env.GITHUB_TOKEN;
|
|
878
889
|
}
|
|
@@ -968,12 +979,21 @@ async function materializeRuntimeCertBundle(runtime) {
|
|
|
968
979
|
}
|
|
969
980
|
return targetPath;
|
|
970
981
|
}
|
|
982
|
+
function applyGitHubCredentialHelperEnv(env) {
|
|
983
|
+
env.GIT_TERMINAL_PROMPT = "0";
|
|
984
|
+
env.GIT_CONFIG_COUNT = "2";
|
|
985
|
+
env.GIT_CONFIG_KEY_0 = "credential.helper";
|
|
986
|
+
env.GIT_CONFIG_VALUE_0 = "";
|
|
987
|
+
env.GIT_CONFIG_KEY_1 = "credential.helper";
|
|
988
|
+
env.GIT_CONFIG_VALUE_1 = '!f() { test "$1" = get || exit 0; token="${GITHUB_TOKEN:-${GH_TOKEN:-${RIG_GITHUB_TOKEN:-}}}"; test -n "$token" || exit 0; echo username=x-access-token; echo password="$token"; }; f';
|
|
989
|
+
}
|
|
971
990
|
function persistRuntimeSecrets(runtimeRoot, env) {
|
|
972
991
|
const secretsPath = resolve7(runtimeRoot, "runtime-secrets.json");
|
|
973
992
|
const persisted = {};
|
|
974
993
|
for (const key of [
|
|
975
994
|
"GITHUB_TOKEN",
|
|
976
995
|
"GH_TOKEN",
|
|
996
|
+
"RIG_GITHUB_TOKEN",
|
|
977
997
|
"GREPTILE_GITHUB_TOKEN",
|
|
978
998
|
"GREPTILE_API_KEY",
|
|
979
999
|
"AI_REVIEW_MODE",
|
|
@@ -5631,6 +5631,10 @@ async function runtimeEnv(projectRoot, runtime) {
|
|
|
5631
5631
|
env[key] = value;
|
|
5632
5632
|
}
|
|
5633
5633
|
}
|
|
5634
|
+
const rigGithubToken = process.env.RIG_GITHUB_TOKEN?.trim() || "";
|
|
5635
|
+
if (rigGithubToken && !env.GITHUB_TOKEN && !env.GH_TOKEN) {
|
|
5636
|
+
env.GITHUB_TOKEN = rigGithubToken;
|
|
5637
|
+
}
|
|
5634
5638
|
const fallbackGithubToken = !env.GITHUB_TOKEN && !env.GH_TOKEN ? await resolveGithubCliAuthToken(hostGhBinary) : "";
|
|
5635
5639
|
if (fallbackGithubToken) {
|
|
5636
5640
|
env.GITHUB_TOKEN = fallbackGithubToken;
|
|
@@ -5641,6 +5645,13 @@ async function runtimeEnv(projectRoot, runtime) {
|
|
|
5641
5645
|
if (!env.GH_TOKEN && env.GITHUB_TOKEN) {
|
|
5642
5646
|
env.GH_TOKEN = env.GITHUB_TOKEN;
|
|
5643
5647
|
}
|
|
5648
|
+
const gitHubToken = env.GITHUB_TOKEN || env.GH_TOKEN || rigGithubToken;
|
|
5649
|
+
if (gitHubToken) {
|
|
5650
|
+
env.RIG_GITHUB_TOKEN = gitHubToken;
|
|
5651
|
+
env.GITHUB_TOKEN = env.GITHUB_TOKEN || gitHubToken;
|
|
5652
|
+
env.GH_TOKEN = env.GH_TOKEN || gitHubToken;
|
|
5653
|
+
applyGitHubCredentialHelperEnv(env);
|
|
5654
|
+
}
|
|
5644
5655
|
if (!env.GREPTILE_GITHUB_TOKEN && env.GITHUB_TOKEN) {
|
|
5645
5656
|
env.GREPTILE_GITHUB_TOKEN = env.GITHUB_TOKEN;
|
|
5646
5657
|
}
|
|
@@ -5736,12 +5747,21 @@ async function materializeRuntimeCertBundle(runtime) {
|
|
|
5736
5747
|
}
|
|
5737
5748
|
return targetPath;
|
|
5738
5749
|
}
|
|
5750
|
+
function applyGitHubCredentialHelperEnv(env) {
|
|
5751
|
+
env.GIT_TERMINAL_PROMPT = "0";
|
|
5752
|
+
env.GIT_CONFIG_COUNT = "2";
|
|
5753
|
+
env.GIT_CONFIG_KEY_0 = "credential.helper";
|
|
5754
|
+
env.GIT_CONFIG_VALUE_0 = "";
|
|
5755
|
+
env.GIT_CONFIG_KEY_1 = "credential.helper";
|
|
5756
|
+
env.GIT_CONFIG_VALUE_1 = '!f() { test "$1" = get || exit 0; token="${GITHUB_TOKEN:-${GH_TOKEN:-${RIG_GITHUB_TOKEN:-}}}"; test -n "$token" || exit 0; echo username=x-access-token; echo password="$token"; }; f';
|
|
5757
|
+
}
|
|
5739
5758
|
function persistRuntimeSecrets(runtimeRoot, env) {
|
|
5740
5759
|
const secretsPath = resolve25(runtimeRoot, "runtime-secrets.json");
|
|
5741
5760
|
const persisted = {};
|
|
5742
5761
|
for (const key of [
|
|
5743
5762
|
"GITHUB_TOKEN",
|
|
5744
5763
|
"GH_TOKEN",
|
|
5764
|
+
"RIG_GITHUB_TOKEN",
|
|
5745
5765
|
"GREPTILE_GITHUB_TOKEN",
|
|
5746
5766
|
"GREPTILE_API_KEY",
|
|
5747
5767
|
"AI_REVIEW_MODE",
|
|
@@ -2261,6 +2261,10 @@ async function runtimeEnv(projectRoot, runtime) {
|
|
|
2261
2261
|
env[key] = value;
|
|
2262
2262
|
}
|
|
2263
2263
|
}
|
|
2264
|
+
const rigGithubToken = process.env.RIG_GITHUB_TOKEN?.trim() || "";
|
|
2265
|
+
if (rigGithubToken && !env.GITHUB_TOKEN && !env.GH_TOKEN) {
|
|
2266
|
+
env.GITHUB_TOKEN = rigGithubToken;
|
|
2267
|
+
}
|
|
2264
2268
|
const fallbackGithubToken = !env.GITHUB_TOKEN && !env.GH_TOKEN ? await resolveGithubCliAuthToken(hostGhBinary) : "";
|
|
2265
2269
|
if (fallbackGithubToken) {
|
|
2266
2270
|
env.GITHUB_TOKEN = fallbackGithubToken;
|
|
@@ -2271,6 +2275,13 @@ async function runtimeEnv(projectRoot, runtime) {
|
|
|
2271
2275
|
if (!env.GH_TOKEN && env.GITHUB_TOKEN) {
|
|
2272
2276
|
env.GH_TOKEN = env.GITHUB_TOKEN;
|
|
2273
2277
|
}
|
|
2278
|
+
const gitHubToken = env.GITHUB_TOKEN || env.GH_TOKEN || rigGithubToken;
|
|
2279
|
+
if (gitHubToken) {
|
|
2280
|
+
env.RIG_GITHUB_TOKEN = gitHubToken;
|
|
2281
|
+
env.GITHUB_TOKEN = env.GITHUB_TOKEN || gitHubToken;
|
|
2282
|
+
env.GH_TOKEN = env.GH_TOKEN || gitHubToken;
|
|
2283
|
+
applyGitHubCredentialHelperEnv(env);
|
|
2284
|
+
}
|
|
2274
2285
|
if (!env.GREPTILE_GITHUB_TOKEN && env.GITHUB_TOKEN) {
|
|
2275
2286
|
env.GREPTILE_GITHUB_TOKEN = env.GITHUB_TOKEN;
|
|
2276
2287
|
}
|
|
@@ -2318,12 +2329,21 @@ async function materializeRuntimeCertBundle(runtime) {
|
|
|
2318
2329
|
}
|
|
2319
2330
|
return targetPath;
|
|
2320
2331
|
}
|
|
2332
|
+
function applyGitHubCredentialHelperEnv(env) {
|
|
2333
|
+
env.GIT_TERMINAL_PROMPT = "0";
|
|
2334
|
+
env.GIT_CONFIG_COUNT = "2";
|
|
2335
|
+
env.GIT_CONFIG_KEY_0 = "credential.helper";
|
|
2336
|
+
env.GIT_CONFIG_VALUE_0 = "";
|
|
2337
|
+
env.GIT_CONFIG_KEY_1 = "credential.helper";
|
|
2338
|
+
env.GIT_CONFIG_VALUE_1 = '!f() { test "$1" = get || exit 0; token="${GITHUB_TOKEN:-${GH_TOKEN:-${RIG_GITHUB_TOKEN:-}}}"; test -n "$token" || exit 0; echo username=x-access-token; echo password="$token"; }; f';
|
|
2339
|
+
}
|
|
2321
2340
|
function persistRuntimeSecrets(runtimeRoot, env) {
|
|
2322
2341
|
const secretsPath = resolve11(runtimeRoot, "runtime-secrets.json");
|
|
2323
2342
|
const persisted = {};
|
|
2324
2343
|
for (const key of [
|
|
2325
2344
|
"GITHUB_TOKEN",
|
|
2326
2345
|
"GH_TOKEN",
|
|
2346
|
+
"RIG_GITHUB_TOKEN",
|
|
2327
2347
|
"GREPTILE_GITHUB_TOKEN",
|
|
2328
2348
|
"GREPTILE_API_KEY",
|
|
2329
2349
|
"AI_REVIEW_MODE",
|
|
@@ -5631,6 +5631,10 @@ async function runtimeEnv(projectRoot, runtime) {
|
|
|
5631
5631
|
env[key] = value;
|
|
5632
5632
|
}
|
|
5633
5633
|
}
|
|
5634
|
+
const rigGithubToken = process.env.RIG_GITHUB_TOKEN?.trim() || "";
|
|
5635
|
+
if (rigGithubToken && !env.GITHUB_TOKEN && !env.GH_TOKEN) {
|
|
5636
|
+
env.GITHUB_TOKEN = rigGithubToken;
|
|
5637
|
+
}
|
|
5634
5638
|
const fallbackGithubToken = !env.GITHUB_TOKEN && !env.GH_TOKEN ? await resolveGithubCliAuthToken(hostGhBinary) : "";
|
|
5635
5639
|
if (fallbackGithubToken) {
|
|
5636
5640
|
env.GITHUB_TOKEN = fallbackGithubToken;
|
|
@@ -5641,6 +5645,13 @@ async function runtimeEnv(projectRoot, runtime) {
|
|
|
5641
5645
|
if (!env.GH_TOKEN && env.GITHUB_TOKEN) {
|
|
5642
5646
|
env.GH_TOKEN = env.GITHUB_TOKEN;
|
|
5643
5647
|
}
|
|
5648
|
+
const gitHubToken = env.GITHUB_TOKEN || env.GH_TOKEN || rigGithubToken;
|
|
5649
|
+
if (gitHubToken) {
|
|
5650
|
+
env.RIG_GITHUB_TOKEN = gitHubToken;
|
|
5651
|
+
env.GITHUB_TOKEN = env.GITHUB_TOKEN || gitHubToken;
|
|
5652
|
+
env.GH_TOKEN = env.GH_TOKEN || gitHubToken;
|
|
5653
|
+
applyGitHubCredentialHelperEnv(env);
|
|
5654
|
+
}
|
|
5644
5655
|
if (!env.GREPTILE_GITHUB_TOKEN && env.GITHUB_TOKEN) {
|
|
5645
5656
|
env.GREPTILE_GITHUB_TOKEN = env.GITHUB_TOKEN;
|
|
5646
5657
|
}
|
|
@@ -5736,12 +5747,21 @@ async function materializeRuntimeCertBundle(runtime) {
|
|
|
5736
5747
|
}
|
|
5737
5748
|
return targetPath;
|
|
5738
5749
|
}
|
|
5750
|
+
function applyGitHubCredentialHelperEnv(env) {
|
|
5751
|
+
env.GIT_TERMINAL_PROMPT = "0";
|
|
5752
|
+
env.GIT_CONFIG_COUNT = "2";
|
|
5753
|
+
env.GIT_CONFIG_KEY_0 = "credential.helper";
|
|
5754
|
+
env.GIT_CONFIG_VALUE_0 = "";
|
|
5755
|
+
env.GIT_CONFIG_KEY_1 = "credential.helper";
|
|
5756
|
+
env.GIT_CONFIG_VALUE_1 = '!f() { test "$1" = get || exit 0; token="${GITHUB_TOKEN:-${GH_TOKEN:-${RIG_GITHUB_TOKEN:-}}}"; test -n "$token" || exit 0; echo username=x-access-token; echo password="$token"; }; f';
|
|
5757
|
+
}
|
|
5739
5758
|
function persistRuntimeSecrets(runtimeRoot, env) {
|
|
5740
5759
|
const secretsPath = resolve25(runtimeRoot, "runtime-secrets.json");
|
|
5741
5760
|
const persisted = {};
|
|
5742
5761
|
for (const key of [
|
|
5743
5762
|
"GITHUB_TOKEN",
|
|
5744
5763
|
"GH_TOKEN",
|
|
5764
|
+
"RIG_GITHUB_TOKEN",
|
|
5745
5765
|
"GREPTILE_GITHUB_TOKEN",
|
|
5746
5766
|
"GREPTILE_API_KEY",
|
|
5747
5767
|
"AI_REVIEW_MODE",
|
|
@@ -6355,6 +6355,10 @@ async function runtimeEnv(projectRoot, runtime) {
|
|
|
6355
6355
|
env[key] = value;
|
|
6356
6356
|
}
|
|
6357
6357
|
}
|
|
6358
|
+
const rigGithubToken = process.env.RIG_GITHUB_TOKEN?.trim() || "";
|
|
6359
|
+
if (rigGithubToken && !env.GITHUB_TOKEN && !env.GH_TOKEN) {
|
|
6360
|
+
env.GITHUB_TOKEN = rigGithubToken;
|
|
6361
|
+
}
|
|
6358
6362
|
const fallbackGithubToken = !env.GITHUB_TOKEN && !env.GH_TOKEN ? await resolveGithubCliAuthToken(hostGhBinary) : "";
|
|
6359
6363
|
if (fallbackGithubToken) {
|
|
6360
6364
|
env.GITHUB_TOKEN = fallbackGithubToken;
|
|
@@ -6365,6 +6369,13 @@ async function runtimeEnv(projectRoot, runtime) {
|
|
|
6365
6369
|
if (!env.GH_TOKEN && env.GITHUB_TOKEN) {
|
|
6366
6370
|
env.GH_TOKEN = env.GITHUB_TOKEN;
|
|
6367
6371
|
}
|
|
6372
|
+
const gitHubToken = env.GITHUB_TOKEN || env.GH_TOKEN || rigGithubToken;
|
|
6373
|
+
if (gitHubToken) {
|
|
6374
|
+
env.RIG_GITHUB_TOKEN = gitHubToken;
|
|
6375
|
+
env.GITHUB_TOKEN = env.GITHUB_TOKEN || gitHubToken;
|
|
6376
|
+
env.GH_TOKEN = env.GH_TOKEN || gitHubToken;
|
|
6377
|
+
applyGitHubCredentialHelperEnv(env);
|
|
6378
|
+
}
|
|
6368
6379
|
if (!env.GREPTILE_GITHUB_TOKEN && env.GITHUB_TOKEN) {
|
|
6369
6380
|
env.GREPTILE_GITHUB_TOKEN = env.GITHUB_TOKEN;
|
|
6370
6381
|
}
|
|
@@ -6460,12 +6471,21 @@ async function materializeRuntimeCertBundle(runtime) {
|
|
|
6460
6471
|
}
|
|
6461
6472
|
return targetPath;
|
|
6462
6473
|
}
|
|
6474
|
+
function applyGitHubCredentialHelperEnv(env) {
|
|
6475
|
+
env.GIT_TERMINAL_PROMPT = "0";
|
|
6476
|
+
env.GIT_CONFIG_COUNT = "2";
|
|
6477
|
+
env.GIT_CONFIG_KEY_0 = "credential.helper";
|
|
6478
|
+
env.GIT_CONFIG_VALUE_0 = "";
|
|
6479
|
+
env.GIT_CONFIG_KEY_1 = "credential.helper";
|
|
6480
|
+
env.GIT_CONFIG_VALUE_1 = '!f() { test "$1" = get || exit 0; token="${GITHUB_TOKEN:-${GH_TOKEN:-${RIG_GITHUB_TOKEN:-}}}"; test -n "$token" || exit 0; echo username=x-access-token; echo password="$token"; }; f';
|
|
6481
|
+
}
|
|
6463
6482
|
function persistRuntimeSecrets(runtimeRoot, env) {
|
|
6464
6483
|
const secretsPath = resolve27(runtimeRoot, "runtime-secrets.json");
|
|
6465
6484
|
const persisted = {};
|
|
6466
6485
|
for (const key of [
|
|
6467
6486
|
"GITHUB_TOKEN",
|
|
6468
6487
|
"GH_TOKEN",
|
|
6488
|
+
"RIG_GITHUB_TOKEN",
|
|
6469
6489
|
"GREPTILE_GITHUB_TOKEN",
|
|
6470
6490
|
"GREPTILE_API_KEY",
|
|
6471
6491
|
"AI_REVIEW_MODE",
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@h-rig/runtime",
|
|
3
|
-
"version": "0.0.6-alpha.
|
|
3
|
+
"version": "0.0.6-alpha.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Rig package",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -64,11 +64,11 @@
|
|
|
64
64
|
"module": "./dist/src/index.js",
|
|
65
65
|
"dependencies": {
|
|
66
66
|
"@libsql/client": "^0.17.2",
|
|
67
|
-
"@rig/contracts": "npm:@h-rig/contracts@0.0.6-alpha.
|
|
68
|
-
"@rig/core": "npm:@h-rig/core@0.0.6-alpha.
|
|
69
|
-
"@rig/hook-kit": "npm:@h-rig/hook-kit@0.0.6-alpha.
|
|
70
|
-
"@rig/shared": "npm:@h-rig/shared@0.0.6-alpha.
|
|
71
|
-
"@rig/validator-kit": "npm:@h-rig/validator-kit@0.0.6-alpha.
|
|
67
|
+
"@rig/contracts": "npm:@h-rig/contracts@0.0.6-alpha.3",
|
|
68
|
+
"@rig/core": "npm:@h-rig/core@0.0.6-alpha.3",
|
|
69
|
+
"@rig/hook-kit": "npm:@h-rig/hook-kit@0.0.6-alpha.3",
|
|
70
|
+
"@rig/shared": "npm:@h-rig/shared@0.0.6-alpha.3",
|
|
71
|
+
"@rig/validator-kit": "npm:@h-rig/validator-kit@0.0.6-alpha.3",
|
|
72
72
|
"effect": "4.0.0-beta.78",
|
|
73
73
|
"smol-toml": "^1.6.0"
|
|
74
74
|
}
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"platform":"darwin-arm64","suffix":"dylib","builtAt":"2026-06-07T22:55:24Z"}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"platform":"linux-x64","suffix":"so","builtAt":"2026-06-07T22:56:41Z"}
|