@h-rig/task-sources-plugin 0.0.6-alpha.157 → 0.0.6-alpha.159
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/src/control-plane/native/github-token-env.d.ts +3 -0
- package/dist/src/control-plane/native/github-token-env.js +26 -0
- package/dist/src/control-plane/native/native-git.d.ts +18 -0
- package/dist/src/control-plane/native/native-git.js +291 -0
- package/dist/src/control-plane/native/runtime-binary-build.d.ts +9 -0
- package/dist/src/control-plane/native/runtime-binary-build.js +107 -0
- package/dist/src/control-plane/native/task-ops.d.ts +52 -0
- package/dist/src/control-plane/native/task-ops.js +3192 -0
- package/dist/src/control-plane/native/task-state.d.ts +30 -0
- package/dist/src/control-plane/native/task-state.js +944 -0
- package/dist/src/control-plane/native/utils.d.ts +7 -0
- package/dist/src/control-plane/native/utils.js +110 -0
- package/dist/src/control-plane/native/validator-binaries.d.ts +3 -0
- package/dist/src/control-plane/native/validator-binaries.js +175 -0
- package/dist/src/control-plane/native/validator.d.ts +44 -0
- package/dist/src/control-plane/native/validator.js +979 -0
- package/dist/src/control-plane/state-sync/index.d.ts +4 -0
- package/dist/src/control-plane/state-sync/index.js +1205 -0
- package/dist/src/control-plane/state-sync/native-git.d.ts +1 -0
- package/dist/src/control-plane/state-sync/native-git.js +281 -0
- package/dist/src/control-plane/state-sync/read.d.ts +46 -0
- package/dist/src/control-plane/state-sync/read.js +564 -0
- package/dist/src/control-plane/state-sync/reconcile.d.ts +28 -0
- package/dist/src/control-plane/state-sync/reconcile.js +260 -0
- package/dist/src/control-plane/state-sync/repo.d.ts +1 -0
- package/dist/src/control-plane/state-sync/repo.js +42 -0
- package/dist/src/control-plane/state-sync/types.d.ts +28 -0
- package/dist/src/control-plane/state-sync/types.js +111 -0
- package/dist/src/control-plane/state-sync/write.d.ts +83 -0
- package/dist/src/control-plane/state-sync/write.js +1165 -0
- package/dist/src/control-plane/task-data-service.d.ts +17 -0
- package/dist/src/control-plane/task-data-service.js +3653 -0
- package/dist/src/control-plane/task-fields.d.ts +1 -0
- package/dist/src/control-plane/task-fields.js +6 -0
- package/dist/src/control-plane/task-io-service.d.ts +6 -0
- package/dist/src/control-plane/task-io-service.js +108 -0
- package/dist/src/control-plane/task-source-bootstrap.d.ts +1 -0
- package/dist/src/control-plane/task-source-bootstrap.js +6 -0
- package/dist/src/control-plane/task-source.d.ts +2 -0
- package/dist/src/control-plane/task-source.js +6 -0
- package/dist/src/control-plane/tasks/legacy-task-config-source.d.ts +19 -0
- package/dist/src/control-plane/tasks/legacy-task-config-source.js +124 -0
- package/dist/src/control-plane/tasks/plugin-task-source.d.ts +30 -0
- package/dist/src/control-plane/tasks/plugin-task-source.js +99 -0
- package/dist/src/control-plane/tasks/source-aware-task-config-source.d.ts +28 -0
- package/dist/src/control-plane/tasks/source-aware-task-config-source.js +642 -0
- package/dist/src/control-plane/tasks/source-lifecycle.d.ts +56 -0
- package/dist/src/control-plane/tasks/source-lifecycle.js +834 -0
- package/dist/src/plugin.d.ts +1 -1
- package/dist/src/plugin.js +3927 -64
- package/package.json +57 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { nativeFetchRef, nativePushRefWithLease, nativeReadBlobAtRef, nativeWriteTreeCommit, type TreeCommitUpdate, } from "../native/native-git";
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
// packages/task-sources-plugin/src/control-plane/native/native-git.ts
|
|
3
|
+
import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "fs";
|
|
4
|
+
import { tmpdir } from "os";
|
|
5
|
+
import { dirname, isAbsolute, resolve } from "path";
|
|
6
|
+
import { createHash } from "crypto";
|
|
7
|
+
var taskSourcesGitNativeOutputDir = resolve(tmpdir(), "rig-task-sources-native");
|
|
8
|
+
var taskSourcesGitNativeOutputPath = resolve(taskSourcesGitNativeOutputDir, `rig-git-${process.platform}-${process.arch}${process.platform === "win32" ? ".exe" : ""}`);
|
|
9
|
+
var trackerCommandUsageProbe = "usage: rig-git fetch-ref <repo-path> <remote> <branch>";
|
|
10
|
+
function nativeFetchRef(repoPath, remote, branch) {
|
|
11
|
+
return requireGitNativeString("fetch-ref", [repoPath, remote, branch]);
|
|
12
|
+
}
|
|
13
|
+
function nativeReadBlobAtRef(repoPath, ref, path) {
|
|
14
|
+
const requestDir = resolve(taskSourcesGitNativeOutputDir, "reads", `${Date.now()}-${Math.random().toString(36).slice(2, 10)}`);
|
|
15
|
+
mkdirSync(requestDir, { recursive: true });
|
|
16
|
+
const outputPath = resolve(requestDir, "blob.txt");
|
|
17
|
+
try {
|
|
18
|
+
requireGitNative("read-blob-at-ref", [repoPath, ref, path, outputPath]);
|
|
19
|
+
return readFileSync(outputPath, "utf8");
|
|
20
|
+
} finally {
|
|
21
|
+
rmSync(requestDir, { recursive: true, force: true });
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function nativeWriteTreeCommit(repoPath, baseRef, updates, message) {
|
|
25
|
+
const requestDir = resolve(taskSourcesGitNativeOutputDir, "requests", `${Date.now()}-${Math.random().toString(36).slice(2, 10)}`);
|
|
26
|
+
mkdirSync(requestDir, { recursive: true });
|
|
27
|
+
const messagePath = resolve(requestDir, "message.txt");
|
|
28
|
+
const updatesPath = resolve(requestDir, "updates.json");
|
|
29
|
+
try {
|
|
30
|
+
writeFileSync(messagePath, message, "utf8");
|
|
31
|
+
writeFileSync(updatesPath, `${JSON.stringify(serializeTreeCommitUpdates(updates), null, 2)}
|
|
32
|
+
`, "utf8");
|
|
33
|
+
return requireGitNativeString("write-tree-commit", [repoPath, baseRef, messagePath, updatesPath]);
|
|
34
|
+
} finally {
|
|
35
|
+
rmSync(requestDir, { recursive: true, force: true });
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function nativePushRefWithLease(repoPath, localOid, remoteRef, expectedOldOid, remote = "origin") {
|
|
39
|
+
return requireGitNativeString("push-ref-with-lease", [repoPath, localOid, remoteRef, expectedOldOid, remote]);
|
|
40
|
+
}
|
|
41
|
+
function runGitNative(command, args) {
|
|
42
|
+
if (process.env.RIG_DISABLE_ZIG_NATIVE === "1") {
|
|
43
|
+
return { ok: false, error: "rig-git native disabled" };
|
|
44
|
+
}
|
|
45
|
+
let binaryPath;
|
|
46
|
+
try {
|
|
47
|
+
binaryPath = resolveGitBinaryPath() ?? ensureRigGitBinaryPathSync(preferredGitBinaryOutputPath());
|
|
48
|
+
} catch (error) {
|
|
49
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
50
|
+
return { ok: false, error: message.includes("rig-git.zig source file not found") ? "rig-git binary not found" : message };
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
const proc = Bun.spawnSync([binaryPath, command, ...args], {
|
|
54
|
+
stdout: "pipe",
|
|
55
|
+
stderr: "pipe",
|
|
56
|
+
env: gitNativeEnv()
|
|
57
|
+
});
|
|
58
|
+
if (proc.exitCode !== 0) {
|
|
59
|
+
const stdoutText = proc.stdout.toString().trim();
|
|
60
|
+
if (stdoutText) {
|
|
61
|
+
try {
|
|
62
|
+
const parsed = JSON.parse(stdoutText);
|
|
63
|
+
if (!parsed.ok) {
|
|
64
|
+
return parsed;
|
|
65
|
+
}
|
|
66
|
+
} catch {}
|
|
67
|
+
}
|
|
68
|
+
const error = proc.stderr.toString().trim() || `exit code ${proc.exitCode}`;
|
|
69
|
+
return { ok: false, error };
|
|
70
|
+
}
|
|
71
|
+
return JSON.parse(proc.stdout.toString().trim());
|
|
72
|
+
} catch (error) {
|
|
73
|
+
return { ok: false, error: String(error) };
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function requireGitNative(command, args) {
|
|
77
|
+
const result = runGitNative(command, args);
|
|
78
|
+
if (!result.ok) {
|
|
79
|
+
throw new Error(`rig-git ${command} failed: ${result.error}`);
|
|
80
|
+
}
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
function requireGitNativeString(command, args) {
|
|
84
|
+
const result = requireGitNative(command, args);
|
|
85
|
+
if ("value" in result && typeof result.value === "string") {
|
|
86
|
+
return result.value;
|
|
87
|
+
}
|
|
88
|
+
throw new Error(`rig-git ${command} returned an unexpected result payload`);
|
|
89
|
+
}
|
|
90
|
+
function serializeTreeCommitUpdates(updates) {
|
|
91
|
+
return updates.map((update) => {
|
|
92
|
+
if (typeof update.content === "string") {
|
|
93
|
+
return { path: update.path, kind: "text", content: update.content };
|
|
94
|
+
}
|
|
95
|
+
if (!isAbsolute(update.sourceFilePath)) {
|
|
96
|
+
throw new Error("tree commit binary updates require an absolute sourceFilePath");
|
|
97
|
+
}
|
|
98
|
+
return { path: update.path, kind: "file", sourceFilePath: update.sourceFilePath };
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
function gitNativeEnv() {
|
|
102
|
+
const env = { ...process.env };
|
|
103
|
+
const token = env.GITHUB_TOKEN?.trim() || env.GH_TOKEN?.trim() || env.RIG_GITHUB_TOKEN?.trim() || "";
|
|
104
|
+
if (token) {
|
|
105
|
+
env.RIG_GITHUB_TOKEN = env.RIG_GITHUB_TOKEN || token;
|
|
106
|
+
env.GITHUB_TOKEN = env.GITHUB_TOKEN || token;
|
|
107
|
+
env.GH_TOKEN = env.GH_TOKEN || token;
|
|
108
|
+
env.GIT_TERMINAL_PROMPT = "0";
|
|
109
|
+
env.GIT_CONFIG_COUNT = "2";
|
|
110
|
+
env.GIT_CONFIG_KEY_0 = "credential.helper";
|
|
111
|
+
env.GIT_CONFIG_VALUE_0 = "";
|
|
112
|
+
env.GIT_CONFIG_KEY_1 = "credential.helper";
|
|
113
|
+
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';
|
|
114
|
+
}
|
|
115
|
+
return env;
|
|
116
|
+
}
|
|
117
|
+
function runtimeRigGitFileName() {
|
|
118
|
+
return `rig-git${process.platform === "win32" ? ".exe" : ""}`;
|
|
119
|
+
}
|
|
120
|
+
function preferredGitBinaryOutputPath() {
|
|
121
|
+
const explicit = process.env.RIG_NATIVE_GIT_BIN?.trim() || "";
|
|
122
|
+
return explicit || taskSourcesGitNativeOutputPath;
|
|
123
|
+
}
|
|
124
|
+
function resolveGitBinaryPath() {
|
|
125
|
+
const explicit = process.env.RIG_NATIVE_GIT_BIN?.trim() || "";
|
|
126
|
+
if (explicit && existsSync(explicit)) {
|
|
127
|
+
return explicit;
|
|
128
|
+
}
|
|
129
|
+
if (explicit) {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
for (const candidate of rigGitBinaryCandidates()) {
|
|
133
|
+
if (candidate && existsSync(candidate)) {
|
|
134
|
+
return candidate;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
function ensureRigGitBinaryPathSync(outputPath = taskSourcesGitNativeOutputPath) {
|
|
140
|
+
const explicit = process.env.RIG_NATIVE_GIT_BIN?.trim() || "";
|
|
141
|
+
if (explicit && existsSync(explicit)) {
|
|
142
|
+
return explicit;
|
|
143
|
+
}
|
|
144
|
+
const sourcePath = resolveGitSourcePath();
|
|
145
|
+
if (!sourcePath) {
|
|
146
|
+
const binaryPath = resolveGitBinaryPath();
|
|
147
|
+
if (binaryPath) {
|
|
148
|
+
return binaryPath;
|
|
149
|
+
}
|
|
150
|
+
throw new Error("rig-git.zig source file not found.");
|
|
151
|
+
}
|
|
152
|
+
const zigBinary = Bun.which("zig");
|
|
153
|
+
if (!zigBinary) {
|
|
154
|
+
throw new Error("zig is required to build native Rig git tools.");
|
|
155
|
+
}
|
|
156
|
+
mkdirSync(dirname(outputPath), { recursive: true });
|
|
157
|
+
const buildKey = JSON.stringify({
|
|
158
|
+
version: 1,
|
|
159
|
+
zigBinary,
|
|
160
|
+
platform: process.platform,
|
|
161
|
+
arch: process.arch,
|
|
162
|
+
sourcePath,
|
|
163
|
+
sourceDigest: createHash("sha256").update(readFileSync(sourcePath)).digest("hex")
|
|
164
|
+
});
|
|
165
|
+
const manifestPath = `${outputPath}.build-manifest.json`;
|
|
166
|
+
if (nativeBuildIsFresh(outputPath, manifestPath, buildKey)) {
|
|
167
|
+
chmodSync(outputPath, 493);
|
|
168
|
+
return outputPath;
|
|
169
|
+
}
|
|
170
|
+
const tempOutputPath = resolve(dirname(outputPath), `.rig-git-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2)}${process.platform === "win32" ? ".exe" : ""}`);
|
|
171
|
+
const build = Bun.spawnSync([
|
|
172
|
+
zigBinary,
|
|
173
|
+
"build-exe",
|
|
174
|
+
sourcePath,
|
|
175
|
+
"-O",
|
|
176
|
+
"ReleaseFast",
|
|
177
|
+
`-femit-bin=${tempOutputPath}`
|
|
178
|
+
], {
|
|
179
|
+
cwd: dirname(sourcePath),
|
|
180
|
+
stdout: "pipe",
|
|
181
|
+
stderr: "pipe"
|
|
182
|
+
});
|
|
183
|
+
if (build.exitCode !== 0 || !existsSync(tempOutputPath)) {
|
|
184
|
+
const details = [build.stderr.toString().trim(), build.stdout.toString().trim()].filter(Boolean).join(`
|
|
185
|
+
`);
|
|
186
|
+
throw new Error(`Failed to build native Rig git tools: ${details || `zig exited with code ${build.exitCode}`}`);
|
|
187
|
+
}
|
|
188
|
+
chmodSync(tempOutputPath, 493);
|
|
189
|
+
renameSync(tempOutputPath, outputPath);
|
|
190
|
+
if (!binarySupportsTrackerCommands(outputPath)) {
|
|
191
|
+
rmSync(outputPath, { force: true });
|
|
192
|
+
throw new Error("Failed to build native Rig git tools: tracker command probe failed");
|
|
193
|
+
}
|
|
194
|
+
writeFileSync(manifestPath, `${JSON.stringify({ version: 1, buildKey }, null, 2)}
|
|
195
|
+
`, "utf8");
|
|
196
|
+
return outputPath;
|
|
197
|
+
}
|
|
198
|
+
function nativeBuildIsFresh(outputPath, manifestPath, buildKey) {
|
|
199
|
+
if (!existsSync(outputPath) || !existsSync(manifestPath)) {
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
try {
|
|
203
|
+
const manifest = JSON.parse(readFileSync(manifestPath, "utf8"));
|
|
204
|
+
return manifest.version === 1 && manifest.buildKey === buildKey && binarySupportsTrackerCommands(outputPath);
|
|
205
|
+
} catch {
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
function binarySupportsTrackerCommands(binaryPath) {
|
|
210
|
+
try {
|
|
211
|
+
const probe = Bun.spawnSync([binaryPath, "fetch-ref", "."], {
|
|
212
|
+
stdout: "pipe",
|
|
213
|
+
stderr: "pipe"
|
|
214
|
+
});
|
|
215
|
+
const stdout = probe.stdout.toString().trim();
|
|
216
|
+
const stderr = probe.stderr.toString().trim();
|
|
217
|
+
if (stdout.includes('"error":"unknown command"')) {
|
|
218
|
+
return false;
|
|
219
|
+
}
|
|
220
|
+
return probe.exitCode === 2 && stderr.includes(trackerCommandUsageProbe);
|
|
221
|
+
} catch {
|
|
222
|
+
return false;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
function resolveGitSourcePath() {
|
|
226
|
+
for (const candidate of rigGitSourceCandidates()) {
|
|
227
|
+
if (candidate && existsSync(candidate)) {
|
|
228
|
+
return candidate;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return null;
|
|
232
|
+
}
|
|
233
|
+
function rigGitSourceCandidates() {
|
|
234
|
+
const execDir = process.execPath?.trim() ? dirname(process.execPath.trim()) : "";
|
|
235
|
+
const cwd = process.cwd()?.trim() || "";
|
|
236
|
+
const projectRoot = process.env.PROJECT_RIG_ROOT?.trim() || "";
|
|
237
|
+
const hostProjectRoot = process.env.RIG_HOST_PROJECT_ROOT?.trim() || "";
|
|
238
|
+
return [...new Set([
|
|
239
|
+
process.env.RIG_NATIVE_GIT_SOURCE?.trim() || "",
|
|
240
|
+
resolve(import.meta.dir, "../../../native/rig-git.zig"),
|
|
241
|
+
projectRoot ? resolve(projectRoot, "packages/task-sources-plugin/native/rig-git.zig") : "",
|
|
242
|
+
projectRoot ? resolve(projectRoot, "packages/isolation-plugin/native/rig-git.zig") : "",
|
|
243
|
+
projectRoot ? resolve(projectRoot, "packages/shared/native/rig-git.zig") : "",
|
|
244
|
+
hostProjectRoot ? resolve(hostProjectRoot, "packages/task-sources-plugin/native/rig-git.zig") : "",
|
|
245
|
+
hostProjectRoot ? resolve(hostProjectRoot, "packages/isolation-plugin/native/rig-git.zig") : "",
|
|
246
|
+
hostProjectRoot ? resolve(hostProjectRoot, "packages/shared/native/rig-git.zig") : "",
|
|
247
|
+
cwd ? resolve(cwd, "packages/task-sources-plugin/native/rig-git.zig") : "",
|
|
248
|
+
cwd ? resolve(cwd, "packages/isolation-plugin/native/rig-git.zig") : "",
|
|
249
|
+
cwd ? resolve(cwd, "packages/shared/native/rig-git.zig") : "",
|
|
250
|
+
execDir ? resolve(execDir, "..", "native", "rig-git.zig") : ""
|
|
251
|
+
].filter(Boolean))];
|
|
252
|
+
}
|
|
253
|
+
function rigGitBinaryCandidates() {
|
|
254
|
+
const execDir = process.execPath?.trim() ? dirname(process.execPath.trim()) : "";
|
|
255
|
+
const fileName = runtimeRigGitFileName();
|
|
256
|
+
return [...new Set([
|
|
257
|
+
...nativePackageBinaryCandidates(import.meta.dir, fileName),
|
|
258
|
+
execDir ? resolve(execDir, fileName) : "",
|
|
259
|
+
execDir ? resolve(execDir, "..", fileName) : "",
|
|
260
|
+
execDir ? resolve(execDir, "..", "bin", fileName) : "",
|
|
261
|
+
taskSourcesGitNativeOutputPath
|
|
262
|
+
].filter(Boolean))];
|
|
263
|
+
}
|
|
264
|
+
function nativePackageBinaryCandidates(fromDir, fileName) {
|
|
265
|
+
const candidates = [];
|
|
266
|
+
let cursor = resolve(fromDir);
|
|
267
|
+
for (let index = 0;index < 8; index += 1) {
|
|
268
|
+
candidates.push(resolve(cursor, "native", `${process.platform}-${process.arch}`, fileName), resolve(cursor, "native", `${process.platform}-${process.arch}`, "bin", fileName), resolve(cursor, "native", fileName), resolve(cursor, "native", "bin", fileName));
|
|
269
|
+
const parent = dirname(cursor);
|
|
270
|
+
if (parent === cursor)
|
|
271
|
+
break;
|
|
272
|
+
cursor = parent;
|
|
273
|
+
}
|
|
274
|
+
return candidates;
|
|
275
|
+
}
|
|
276
|
+
export {
|
|
277
|
+
nativeWriteTreeCommit,
|
|
278
|
+
nativeReadBlobAtRef,
|
|
279
|
+
nativePushRefWithLease,
|
|
280
|
+
nativeFetchRef
|
|
281
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { existsSync } from "fs";
|
|
2
|
+
import { nativeFetchRef, nativeReadBlobAtRef } from "./native-git";
|
|
3
|
+
import { type CanonicalTaskLifecycleStatus, type TaskStateMetadataEnvelope } from "./types";
|
|
4
|
+
export type SyncedTrackerStatus = CanonicalTaskLifecycleStatus | "unknown";
|
|
5
|
+
export type SyncedTrackerDependency = {
|
|
6
|
+
issueId: string | null;
|
|
7
|
+
dependsOnId: string | null;
|
|
8
|
+
id?: string | null;
|
|
9
|
+
type: string | null;
|
|
10
|
+
};
|
|
11
|
+
export type SyncedTrackerIssue = {
|
|
12
|
+
id: string;
|
|
13
|
+
title: string | null;
|
|
14
|
+
description: string | null;
|
|
15
|
+
acceptanceCriteria: string | null;
|
|
16
|
+
issueType: string | null;
|
|
17
|
+
status: SyncedTrackerStatus;
|
|
18
|
+
rawStatus: string | null;
|
|
19
|
+
priority: number | null;
|
|
20
|
+
dependencies: SyncedTrackerDependency[];
|
|
21
|
+
};
|
|
22
|
+
export type SyncedTrackerSnapshot = {
|
|
23
|
+
source: "remote" | "local";
|
|
24
|
+
baseOid: string | null;
|
|
25
|
+
issues: SyncedTrackerIssue[];
|
|
26
|
+
taskState: TaskStateMetadataEnvelope;
|
|
27
|
+
};
|
|
28
|
+
type SyncedTrackerReadDeps = {
|
|
29
|
+
fetchRef: typeof nativeFetchRef;
|
|
30
|
+
readBlobAtRef: typeof nativeReadBlobAtRef;
|
|
31
|
+
exists: typeof existsSync;
|
|
32
|
+
readFile: (path: string) => string;
|
|
33
|
+
};
|
|
34
|
+
type ReadSyncedTrackerOptions = {
|
|
35
|
+
allowLocalFallback?: boolean;
|
|
36
|
+
};
|
|
37
|
+
export declare function projectSyncedTrackerSnapshot(input: {
|
|
38
|
+
source: "remote" | "local";
|
|
39
|
+
issuesBaseOid: string | null;
|
|
40
|
+
issuesText: string;
|
|
41
|
+
taskStateBaseOid: string | null;
|
|
42
|
+
taskStateText: string | null;
|
|
43
|
+
}): SyncedTrackerSnapshot;
|
|
44
|
+
export declare function readSyncedTrackerState(projectRoot: string, deps?: Partial<SyncedTrackerReadDeps>, options?: ReadSyncedTrackerOptions): SyncedTrackerSnapshot;
|
|
45
|
+
export declare function listReadyTaskIdsFromTracker(snapshot: SyncedTrackerSnapshot): string[];
|
|
46
|
+
export {};
|