@h-rig/runtime 0.0.6-alpha.2 → 0.0.6-alpha.21
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 +84 -313
- package/dist/bin/rig-agent.js +85 -27
- package/dist/src/control-plane/agent-wrapper.js +101 -27
- package/dist/src/control-plane/authority-files.js +12 -6
- package/dist/src/control-plane/harness-main.js +1357 -180
- package/dist/src/control-plane/hooks/completion-verification.js +1669 -329
- package/dist/src/control-plane/hooks/inject-context.js +2 -2
- package/dist/src/control-plane/hooks/submodule-branch.js +26 -3
- package/dist/src/control-plane/hooks/task-runtime-start.js +26 -3
- package/dist/src/control-plane/native/git-ops.js +134 -68
- package/dist/src/control-plane/native/harness-cli.js +1357 -180
- package/dist/src/control-plane/native/pr-automation.js +1532 -54
- package/dist/src/control-plane/native/pr-review-gate.js +1330 -0
- package/dist/src/control-plane/native/run-ops.js +35 -12
- package/dist/src/control-plane/native/task-ops.js +1274 -155
- package/dist/src/control-plane/native/validator.js +2 -2
- package/dist/src/control-plane/native/verifier.js +1274 -154
- package/dist/src/control-plane/native/workspace-ops.js +12 -6
- package/dist/src/control-plane/runtime/index.js +38 -9
- package/dist/src/control-plane/runtime/isolation/home.js +31 -6
- package/dist/src/control-plane/runtime/isolation/index.js +38 -9
- package/dist/src/control-plane/runtime/isolation/runner.js +31 -6
- package/dist/src/control-plane/runtime/isolation/shared.js +9 -6
- package/dist/src/control-plane/runtime/isolation.js +38 -9
- package/dist/src/control-plane/runtime/queue.js +38 -9
- package/dist/src/control-plane/tasks/source-aware-task-config-source.js +14 -2
- package/dist/src/control-plane/tasks/source-lifecycle.js +2 -2
- package/dist/src/index.js +27 -20
- package/dist/src/layout.js +12 -7
- package/dist/src/local-server.js +20 -14
- 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
|
@@ -198,6 +198,17 @@ async function readSourceAwareTaskStatus(projectRoot, taskId, options = {}) {
|
|
|
198
198
|
return null;
|
|
199
199
|
}
|
|
200
200
|
}
|
|
201
|
+
function updateGithubIssueTaskBySourceIssueId(sourceIssueId, taskId, update, options = {}) {
|
|
202
|
+
const parsed = sourceIssueId?.trim().match(/^([^/]+)\/([^#]+)#(\d+)$/);
|
|
203
|
+
if (!parsed || parsed[3] !== taskId) {
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
applyGithubIssueUpdate(options.ghBinary ?? "gh", options.spawn ?? spawnSync, parsed[3], {
|
|
207
|
+
sourceIssueId: sourceIssueId.trim(),
|
|
208
|
+
taskSource: { kind: "github-issues", owner: parsed[1], repo: parsed[2] }
|
|
209
|
+
}, update);
|
|
210
|
+
return true;
|
|
211
|
+
}
|
|
201
212
|
function updateSourceAwareTaskConfigTask(projectRoot, taskId, update, options = {}) {
|
|
202
213
|
const configPath = options.configPath ?? resolve2(projectRoot, ".rig", "task-config.json");
|
|
203
214
|
const rawEntry = readRawTaskEntry(configPath, taskId);
|
|
@@ -553,8 +564,8 @@ function ensureStatusLabel(bin, repo, spawnFn, label) {
|
|
|
553
564
|
}
|
|
554
565
|
}
|
|
555
566
|
function selectedGitHubEnv() {
|
|
556
|
-
const token = process.env.RIG_GITHUB_SELECTED_TOKEN?.trim()
|
|
557
|
-
return { GH_TOKEN: token, GITHUB_TOKEN: token };
|
|
567
|
+
const token = process.env.RIG_GITHUB_SELECTED_TOKEN?.trim() || process.env.RIG_GITHUB_TOKEN?.trim() || "";
|
|
568
|
+
return { GH_TOKEN: token, GITHUB_TOKEN: token, RIG_GITHUB_TOKEN: token };
|
|
558
569
|
}
|
|
559
570
|
function ghSpawnOptions() {
|
|
560
571
|
return { encoding: "utf-8", env: { ...process.env, ...selectedGitHubEnv() } };
|
|
@@ -605,6 +616,7 @@ function isPlainRecord2(candidate) {
|
|
|
605
616
|
}
|
|
606
617
|
export {
|
|
607
618
|
updateSourceAwareTaskConfigTask,
|
|
619
|
+
updateGithubIssueTaskBySourceIssueId,
|
|
608
620
|
readSourceAwareTaskStatus,
|
|
609
621
|
readMaterializedTaskMetadata,
|
|
610
622
|
createSourceAwareTaskConfigRecordReader
|
|
@@ -884,8 +884,8 @@ function ensureStatusLabel(bin, repo, spawnFn, label) {
|
|
|
884
884
|
}
|
|
885
885
|
}
|
|
886
886
|
function selectedGitHubEnv() {
|
|
887
|
-
const token = process.env.RIG_GITHUB_SELECTED_TOKEN?.trim()
|
|
888
|
-
return { GH_TOKEN: token, GITHUB_TOKEN: token };
|
|
887
|
+
const token = process.env.RIG_GITHUB_SELECTED_TOKEN?.trim() || process.env.RIG_GITHUB_TOKEN?.trim() || "";
|
|
888
|
+
return { GH_TOKEN: token, GITHUB_TOKEN: token, RIG_GITHUB_TOKEN: token };
|
|
889
889
|
}
|
|
890
890
|
function ghSpawnOptions() {
|
|
891
891
|
return { encoding: "utf-8", env: { ...process.env, ...selectedGitHubEnv() } };
|
package/dist/src/index.js
CHANGED
|
@@ -12,22 +12,27 @@ var RIG_STATE_DIRNAME = ".rig";
|
|
|
12
12
|
var RIG_ARTIFACTS_DIRNAME = "artifacts";
|
|
13
13
|
function resolveNearestRigProjectRoot(startDir) {
|
|
14
14
|
let current = resolve(startDir);
|
|
15
|
-
let
|
|
15
|
+
let weakMarkerCandidate = null;
|
|
16
16
|
let projectCandidate = null;
|
|
17
17
|
for (;; ) {
|
|
18
18
|
const hasDefinition = existsSync(resolve(current, RIG_DEFINITION_DIRNAME));
|
|
19
19
|
const hasState = existsSync(resolve(current, RIG_STATE_DIRNAME));
|
|
20
|
+
const hasTaskConfig = existsSync(resolve(current, RIG_STATE_DIRNAME, "task-config.json"));
|
|
20
21
|
const hasConfig = existsSync(resolve(current, "rig.config.ts")) || existsSync(resolve(current, "rig.config.json"));
|
|
22
|
+
const hasGit = existsSync(resolve(current, ".git"));
|
|
21
23
|
const hasControlPlane = existsSync(resolve(current, "packages", "cli", "bin", "rig.ts")) || existsSync(resolve(current, "packages", "server"));
|
|
22
|
-
if (hasDefinition || hasState || hasConfig) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
if ((hasDefinition || hasState || hasConfig) && weakMarkerCandidate === null) {
|
|
25
|
+
weakMarkerCandidate = current;
|
|
26
|
+
}
|
|
27
|
+
if ((hasControlPlane || hasConfig || hasTaskConfig) && projectCandidate === null) {
|
|
28
|
+
projectCandidate = current;
|
|
29
|
+
}
|
|
30
|
+
if (hasGit) {
|
|
31
|
+
return projectCandidate ?? current;
|
|
27
32
|
}
|
|
28
33
|
const parent = resolve(current, "..");
|
|
29
34
|
if (parent === current) {
|
|
30
|
-
return projectCandidate ??
|
|
35
|
+
return projectCandidate ?? weakMarkerCandidate ?? resolve(startDir);
|
|
31
36
|
}
|
|
32
37
|
current = parent;
|
|
33
38
|
}
|
|
@@ -619,6 +624,18 @@ async function waitForServerHealthy(baseUrl, authToken, timeoutMs) {
|
|
|
619
624
|
}
|
|
620
625
|
return false;
|
|
621
626
|
}
|
|
627
|
+
function resolveRigServerSpawnPlan(projectRoot, host, authToken, which = (command) => Bun.which(command)) {
|
|
628
|
+
const binary = process.env.RIG_SERVER_BIN?.trim() || which("rig-server")?.trim();
|
|
629
|
+
const args = ["start", "--host", host, "--port", "0", "--auth-token", authToken];
|
|
630
|
+
if (binary) {
|
|
631
|
+
return { command: binary, args, cwd: projectRoot };
|
|
632
|
+
}
|
|
633
|
+
return {
|
|
634
|
+
command: "bun",
|
|
635
|
+
args: ["run", "packages/server/src/server.ts", ...args],
|
|
636
|
+
cwd: resolve5(import.meta.dir, "../../..")
|
|
637
|
+
};
|
|
638
|
+
}
|
|
622
639
|
async function waitForPublishedServer(projectRoot, authToken, timeoutMs) {
|
|
623
640
|
const deadline = Date.now() + timeoutMs;
|
|
624
641
|
while (Date.now() < deadline) {
|
|
@@ -644,23 +661,13 @@ async function ensureLocalRigServerConnection(projectRoot, options = {}) {
|
|
|
644
661
|
const host = options.host ?? "127.0.0.1";
|
|
645
662
|
const startupTimeoutMs = options.startupTimeoutMs ?? 15000;
|
|
646
663
|
const authToken = Buffer.from(crypto.getRandomValues(new Uint8Array(24))).toString("hex");
|
|
647
|
-
const workspaceRoot = resolve5(import.meta.dir, "../../..");
|
|
648
664
|
const bootstrapLogPath = resolveRigServerLogPath(projectRoot);
|
|
649
665
|
mkdirSync2(resolveRigServerPaths(projectRoot).logsDir, { recursive: true });
|
|
650
666
|
const bootstrapLogFd = openSync(bootstrapLogPath, "w");
|
|
651
667
|
clearPublishedRigServerState(projectRoot);
|
|
652
|
-
const
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
"start",
|
|
656
|
-
"--host",
|
|
657
|
-
host,
|
|
658
|
-
"--port",
|
|
659
|
-
"0",
|
|
660
|
-
"--auth-token",
|
|
661
|
-
authToken
|
|
662
|
-
], {
|
|
663
|
-
cwd: workspaceRoot,
|
|
668
|
+
const spawnPlan = resolveRigServerSpawnPlan(projectRoot, host, authToken);
|
|
669
|
+
const child = spawn(spawnPlan.command, [...spawnPlan.args], {
|
|
670
|
+
cwd: spawnPlan.cwd,
|
|
664
671
|
env: {
|
|
665
672
|
...process.env,
|
|
666
673
|
PROJECT_RIG_ROOT: projectRoot
|
package/dist/src/layout.js
CHANGED
|
@@ -7,22 +7,27 @@ var RIG_STATE_DIRNAME = ".rig";
|
|
|
7
7
|
var RIG_ARTIFACTS_DIRNAME = "artifacts";
|
|
8
8
|
function resolveNearestRigProjectRoot(startDir) {
|
|
9
9
|
let current = resolve(startDir);
|
|
10
|
-
let
|
|
10
|
+
let weakMarkerCandidate = null;
|
|
11
11
|
let projectCandidate = null;
|
|
12
12
|
for (;; ) {
|
|
13
13
|
const hasDefinition = existsSync(resolve(current, RIG_DEFINITION_DIRNAME));
|
|
14
14
|
const hasState = existsSync(resolve(current, RIG_STATE_DIRNAME));
|
|
15
|
+
const hasTaskConfig = existsSync(resolve(current, RIG_STATE_DIRNAME, "task-config.json"));
|
|
15
16
|
const hasConfig = existsSync(resolve(current, "rig.config.ts")) || existsSync(resolve(current, "rig.config.json"));
|
|
17
|
+
const hasGit = existsSync(resolve(current, ".git"));
|
|
16
18
|
const hasControlPlane = existsSync(resolve(current, "packages", "cli", "bin", "rig.ts")) || existsSync(resolve(current, "packages", "server"));
|
|
17
|
-
if (hasDefinition || hasState || hasConfig) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
if ((hasDefinition || hasState || hasConfig) && weakMarkerCandidate === null) {
|
|
20
|
+
weakMarkerCandidate = current;
|
|
21
|
+
}
|
|
22
|
+
if ((hasControlPlane || hasConfig || hasTaskConfig) && projectCandidate === null) {
|
|
23
|
+
projectCandidate = current;
|
|
24
|
+
}
|
|
25
|
+
if (hasGit) {
|
|
26
|
+
return projectCandidate ?? current;
|
|
22
27
|
}
|
|
23
28
|
const parent = resolve(current, "..");
|
|
24
29
|
if (parent === current) {
|
|
25
|
-
return projectCandidate ??
|
|
30
|
+
return projectCandidate ?? weakMarkerCandidate ?? resolve(startDir);
|
|
26
31
|
}
|
|
27
32
|
current = parent;
|
|
28
33
|
}
|
package/dist/src/local-server.js
CHANGED
|
@@ -134,6 +134,18 @@ async function waitForServerHealthy(baseUrl, authToken, timeoutMs) {
|
|
|
134
134
|
}
|
|
135
135
|
return false;
|
|
136
136
|
}
|
|
137
|
+
function resolveRigServerSpawnPlan(projectRoot, host, authToken, which = (command) => Bun.which(command)) {
|
|
138
|
+
const binary = process.env.RIG_SERVER_BIN?.trim() || which("rig-server")?.trim();
|
|
139
|
+
const args = ["start", "--host", host, "--port", "0", "--auth-token", authToken];
|
|
140
|
+
if (binary) {
|
|
141
|
+
return { command: binary, args, cwd: projectRoot };
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
command: "bun",
|
|
145
|
+
args: ["run", "packages/server/src/server.ts", ...args],
|
|
146
|
+
cwd: resolve2(import.meta.dir, "../../..")
|
|
147
|
+
};
|
|
148
|
+
}
|
|
137
149
|
async function waitForPublishedServer(projectRoot, authToken, timeoutMs) {
|
|
138
150
|
const deadline = Date.now() + timeoutMs;
|
|
139
151
|
while (Date.now() < deadline) {
|
|
@@ -159,23 +171,13 @@ async function ensureLocalRigServerConnection(projectRoot, options = {}) {
|
|
|
159
171
|
const host = options.host ?? "127.0.0.1";
|
|
160
172
|
const startupTimeoutMs = options.startupTimeoutMs ?? 15000;
|
|
161
173
|
const authToken = Buffer.from(crypto.getRandomValues(new Uint8Array(24))).toString("hex");
|
|
162
|
-
const workspaceRoot = resolve2(import.meta.dir, "../../..");
|
|
163
174
|
const bootstrapLogPath = resolveRigServerLogPath(projectRoot);
|
|
164
175
|
mkdirSync(resolveRigServerPaths(projectRoot).logsDir, { recursive: true });
|
|
165
176
|
const bootstrapLogFd = openSync(bootstrapLogPath, "w");
|
|
166
177
|
clearPublishedRigServerState(projectRoot);
|
|
167
|
-
const
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
"start",
|
|
171
|
-
"--host",
|
|
172
|
-
host,
|
|
173
|
-
"--port",
|
|
174
|
-
"0",
|
|
175
|
-
"--auth-token",
|
|
176
|
-
authToken
|
|
177
|
-
], {
|
|
178
|
-
cwd: workspaceRoot,
|
|
178
|
+
const spawnPlan = resolveRigServerSpawnPlan(projectRoot, host, authToken);
|
|
179
|
+
const child = spawn(spawnPlan.command, [...spawnPlan.args], {
|
|
180
|
+
cwd: spawnPlan.cwd,
|
|
179
181
|
env: {
|
|
180
182
|
...process.env,
|
|
181
183
|
PROJECT_RIG_ROOT: projectRoot
|
|
@@ -195,8 +197,12 @@ ${bootstrapLog}` : ` No bootstrap log was written.`;
|
|
|
195
197
|
}
|
|
196
198
|
return toLocalServerConnection(ready);
|
|
197
199
|
}
|
|
200
|
+
var __testOnly = {
|
|
201
|
+
resolveRigServerSpawnPlan
|
|
202
|
+
};
|
|
198
203
|
export {
|
|
199
204
|
readPublishedRigServerStateSync,
|
|
200
205
|
readPublishedRigServerState,
|
|
201
|
-
ensureLocalRigServerConnection
|
|
206
|
+
ensureLocalRigServerConnection,
|
|
207
|
+
__testOnly
|
|
202
208
|
};
|
|
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.21",
|
|
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.21",
|
|
68
|
+
"@rig/core": "npm:@h-rig/core@0.0.6-alpha.21",
|
|
69
|
+
"@rig/hook-kit": "npm:@h-rig/hook-kit@0.0.6-alpha.21",
|
|
70
|
+
"@rig/shared": "npm:@h-rig/shared@0.0.6-alpha.21",
|
|
71
|
+
"@rig/validator-kit": "npm:@h-rig/validator-kit@0.0.6-alpha.21",
|
|
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"}
|