@tiangong-ai/cli 0.0.59 → 0.0.61

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.
Files changed (104) hide show
  1. package/AGENTS.md +2 -2
  2. package/README.md +287 -41
  3. package/dist/research/orchestration.js +209 -62
  4. package/dist/research/orchestration.js.map +1 -1
  5. package/dist/research/workspace/acquisition-forecast.d.ts +3 -0
  6. package/dist/research/workspace/acquisition-forecast.js +28 -3
  7. package/dist/research/workspace/acquisition-forecast.js.map +1 -1
  8. package/dist/research/workspace/acquisition-revision.d.ts +13 -0
  9. package/dist/research/workspace/acquisition-revision.js +142 -0
  10. package/dist/research/workspace/acquisition-revision.js.map +1 -0
  11. package/dist/research/workspace/acquisition-routes.d.ts +1 -1
  12. package/dist/research/workspace/acquisition-routes.js +2 -11
  13. package/dist/research/workspace/acquisition-routes.js.map +1 -1
  14. package/dist/research/workspace/acquisition.d.ts +3 -1
  15. package/dist/research/workspace/acquisition.js +67 -35
  16. package/dist/research/workspace/acquisition.js.map +1 -1
  17. package/dist/research/workspace/analysis-run.d.ts +2 -0
  18. package/dist/research/workspace/analysis-run.js +28 -0
  19. package/dist/research/workspace/analysis-run.js.map +1 -0
  20. package/dist/research/workspace/artifact-read-audit.d.ts +16 -0
  21. package/dist/research/workspace/artifact-read-audit.js +176 -0
  22. package/dist/research/workspace/artifact-read-audit.js.map +1 -0
  23. package/dist/research/workspace/artifact-trace.d.ts +12 -0
  24. package/dist/research/workspace/artifact-trace.js +109 -0
  25. package/dist/research/workspace/artifact-trace.js.map +1 -0
  26. package/dist/research/workspace/artifact-view-mcp.d.ts +75 -0
  27. package/dist/research/workspace/artifact-view-mcp.js +214 -0
  28. package/dist/research/workspace/artifact-view-mcp.js.map +1 -0
  29. package/dist/research/workspace/artifact-views.d.ts +100 -0
  30. package/dist/research/workspace/artifact-views.js +395 -0
  31. package/dist/research/workspace/artifact-views.js.map +1 -0
  32. package/dist/research/workspace/artifacts.d.ts +3 -0
  33. package/dist/research/workspace/artifacts.js +13 -0
  34. package/dist/research/workspace/artifacts.js.map +1 -1
  35. package/dist/research/workspace/audit-bundle.d.ts +9 -0
  36. package/dist/research/workspace/audit-bundle.js +124 -8
  37. package/dist/research/workspace/audit-bundle.js.map +1 -1
  38. package/dist/research/workspace/content-evidence.d.ts +3 -0
  39. package/dist/research/workspace/content-evidence.js +149 -22
  40. package/dist/research/workspace/content-evidence.js.map +1 -1
  41. package/dist/research/workspace/executor.d.ts +5 -1
  42. package/dist/research/workspace/executor.js +106 -22
  43. package/dist/research/workspace/executor.js.map +1 -1
  44. package/dist/research/workspace/native-run.d.ts +77 -0
  45. package/dist/research/workspace/native-run.js +637 -0
  46. package/dist/research/workspace/native-run.js.map +1 -0
  47. package/dist/research/workspace/preflight.d.ts +8 -2
  48. package/dist/research/workspace/preflight.js +17 -14
  49. package/dist/research/workspace/preflight.js.map +1 -1
  50. package/dist/research/workspace/project-authority.d.ts +21 -0
  51. package/dist/research/workspace/project-authority.js +186 -0
  52. package/dist/research/workspace/project-authority.js.map +1 -0
  53. package/dist/research/workspace/project-mutations.d.ts +26 -0
  54. package/dist/research/workspace/project-mutations.js +332 -0
  55. package/dist/research/workspace/project-mutations.js.map +1 -0
  56. package/dist/research/workspace/projects.d.ts +2 -1
  57. package/dist/research/workspace/projects.js +133 -91
  58. package/dist/research/workspace/projects.js.map +1 -1
  59. package/dist/research/workspace/publication-workflow.d.ts +3 -0
  60. package/dist/research/workspace/publication-workflow.js +15 -3
  61. package/dist/research/workspace/publication-workflow.js.map +1 -1
  62. package/dist/research/workspace/request-provenance.d.ts +67 -0
  63. package/dist/research/workspace/request-provenance.js +115 -0
  64. package/dist/research/workspace/request-provenance.js.map +1 -0
  65. package/dist/research/workspace/review-executor.js +22 -11
  66. package/dist/research/workspace/review-executor.js.map +1 -1
  67. package/dist/research/workspace/runtime.d.ts +57 -0
  68. package/dist/research/workspace/runtime.js +292 -140
  69. package/dist/research/workspace/runtime.js.map +1 -1
  70. package/dist/research/workspace/sanitization.js +1 -1
  71. package/dist/research/workspace/sanitization.js.map +1 -1
  72. package/dist/research/workspace/schema-compatibility.d.ts +5 -0
  73. package/dist/research/workspace/schema-compatibility.js +55 -0
  74. package/dist/research/workspace/schema-compatibility.js.map +1 -0
  75. package/dist/research/workspace/schemas.d.ts +6 -0
  76. package/dist/research/workspace/schemas.js +13 -2
  77. package/dist/research/workspace/schemas.js.map +1 -1
  78. package/dist/research/workspace/scientific-design.js +8 -17
  79. package/dist/research/workspace/scientific-design.js.map +1 -1
  80. package/dist/research/workspace/scientific-fulfillment-audit.d.ts +3 -0
  81. package/dist/research/workspace/scientific-fulfillment-audit.js +137 -0
  82. package/dist/research/workspace/scientific-fulfillment-audit.js.map +1 -0
  83. package/dist/research/workspace/scientific-fulfillment.d.ts +121 -0
  84. package/dist/research/workspace/scientific-fulfillment.js +539 -0
  85. package/dist/research/workspace/scientific-fulfillment.js.map +1 -0
  86. package/dist/research/workspace/scientific-review-execution.js +84 -61
  87. package/dist/research/workspace/scientific-review-execution.js.map +1 -1
  88. package/dist/research/workspace/scientific-review.d.ts +8 -2
  89. package/dist/research/workspace/scientific-review.js +205 -53
  90. package/dist/research/workspace/scientific-review.js.map +1 -1
  91. package/dist/research/workspace/setup-catalog.js +2 -2
  92. package/dist/research/workspace/task-acceptance.d.ts +134 -0
  93. package/dist/research/workspace/task-acceptance.js +544 -0
  94. package/dist/research/workspace/task-acceptance.js.map +1 -0
  95. package/dist/research/workspace/task-audit.d.ts +12 -0
  96. package/dist/research/workspace/task-audit.js +231 -0
  97. package/dist/research/workspace/task-audit.js.map +1 -0
  98. package/dist/research/workspace/task-contract.d.ts +142 -0
  99. package/dist/research/workspace/task-contract.js +506 -0
  100. package/dist/research/workspace/task-contract.js.map +1 -0
  101. package/dist/research/workspace/types.d.ts +6 -3
  102. package/dist/research/workspace/workspace.js +11 -8
  103. package/dist/research/workspace/workspace.js.map +1 -1
  104. package/package.json +1 -1
@@ -0,0 +1,332 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { lstat, mkdir, readFile, readdir, rename, rm, rmdir } from "node:fs/promises";
3
+ import { basename, join } from "node:path";
4
+ import { CliError } from "../../errors.js";
5
+ import { appendEvidenceLedgerEvent, evidenceLedgerPath } from "./evidence-ledger.js";
6
+ import { appendJournalEvent, readVerifiedJournal } from "./journal.js";
7
+ import { canonicalJson, isObject, sha256Text, workspacePaths, writeJsonAtomic } from "./storage.js";
8
+ const ID = /^[a-z0-9][a-z0-9-]{2,63}$/;
9
+ const HASH = /^[a-f0-9]{64}$/;
10
+ const UUID = /^[a-f0-9-]{36}$/;
11
+ const MAX_RECORD_BYTES = 16 * 1024 * 1024;
12
+ function failure(message, record) {
13
+ return new CliError(message, {
14
+ code: "RESEARCH_PROJECT_RECOVERY_REQUIRED",
15
+ exitCode: 3,
16
+ details: record
17
+ ? {
18
+ operationId: record.identity.operationId,
19
+ sourceProjectId: record.identity.sourceProjectId,
20
+ targetProjectId: record.identity.targetProjectId,
21
+ recovery: "Preserve the stored state. Resolve the reported conflict or restore a trusted backup before retrying the same explicit request; do not forge journal/project records.",
22
+ }
23
+ : undefined,
24
+ });
25
+ }
26
+ async function privateDirectory(root, parts, create) {
27
+ let path = workspacePaths(root).control;
28
+ if (!create) {
29
+ const existing = await lstat(join(path, "lineage", ...parts)).catch((error) => {
30
+ if (error.code === "ENOENT" || error.code === "ENOTDIR")
31
+ return undefined;
32
+ throw error;
33
+ });
34
+ if (!existing)
35
+ return null;
36
+ }
37
+ await requireDirectory(path);
38
+ for (const part of ["lineage", ...parts]) {
39
+ path = join(path, part);
40
+ let info = await lstat(path).catch((error) => {
41
+ if (error.code === "ENOENT")
42
+ return undefined;
43
+ throw error;
44
+ });
45
+ if (!info) {
46
+ if (!create)
47
+ return null;
48
+ await mkdir(path, { mode: 0o700 });
49
+ info = await lstat(path);
50
+ }
51
+ if (!info.isDirectory() || info.isSymbolicLink()) {
52
+ throw failure("Project recovery storage must use regular non-symlink directories.");
53
+ }
54
+ }
55
+ return path;
56
+ }
57
+ async function requireDirectory(path) {
58
+ const info = await lstat(path).catch(() => undefined);
59
+ if (!info?.isDirectory() || info.isSymbolicLink()) {
60
+ throw failure("Project recovery directories must be regular and cannot redirect through symlinks.");
61
+ }
62
+ }
63
+ function filename(record) {
64
+ return (record.identity.kind +
65
+ "-" +
66
+ (record.identity.targetProjectId ?? record.identity.sourceProjectId) +
67
+ ".json");
68
+ }
69
+ function bindRecord(core) {
70
+ return { ...core, recordSha256: sha256Text(canonicalJson(core)) };
71
+ }
72
+ async function readRecord(path) {
73
+ const info = await lstat(path).catch(() => undefined);
74
+ if (!info?.isFile() || info.isSymbolicLink() || info.size > MAX_RECORD_BYTES) {
75
+ throw failure("Project recovery record is not a bounded regular file.");
76
+ }
77
+ const value = await readRecoveryJson(path);
78
+ if (!isObject(value) || !isObject(value.identity))
79
+ throw failure("Project recovery record is invalid.");
80
+ const identity = value.identity;
81
+ if (identity.schemaVersion !== 1 ||
82
+ !["fork", "retry", "acquisition-revision", "task-scope", "scientific-fulfillment"].includes(String(identity.kind)) ||
83
+ typeof identity.operationId !== "string" ||
84
+ !UUID.test(identity.operationId) ||
85
+ typeof identity.sourceProjectId !== "string" ||
86
+ !ID.test(identity.sourceProjectId) ||
87
+ typeof identity.requestSha256 !== "string" ||
88
+ !HASH.test(identity.requestSha256) ||
89
+ typeof identity.beforeSha256 !== "string" ||
90
+ !HASH.test(identity.beforeSha256) ||
91
+ (identity.kind === "fork"
92
+ ? typeof identity.targetProjectId !== "string" ||
93
+ !ID.test(identity.targetProjectId) ||
94
+ identity.targetProjectId === identity.sourceProjectId
95
+ : identity.targetProjectId !== null) ||
96
+ (value.after !== null &&
97
+ (!isObject(value.after) || value.after.id !== identity.sourceProjectId)) ||
98
+ (value.afterSha256 !== null &&
99
+ (typeof value.afterSha256 !== "string" || !HASH.test(value.afterSha256))) ||
100
+ (value.targetSha256 !== null &&
101
+ (typeof value.targetSha256 !== "string" || !HASH.test(value.targetSha256))))
102
+ throw failure("Project recovery record identity is invalid.");
103
+ const { recordSha256, ...core } = value;
104
+ if (recordSha256 !== sha256Text(canonicalJson(core)) ||
105
+ (value.after === null
106
+ ? value.afterSha256 !== null
107
+ : value.afterSha256 !== sha256Text(canonicalJson(value.after)))) {
108
+ throw failure("Project recovery record failed its hash binding.");
109
+ }
110
+ const record = value;
111
+ if (basename(path) !== filename(record))
112
+ throw failure("Project recovery record filename is invalid.");
113
+ return record;
114
+ }
115
+ async function projectState(root, projectId) {
116
+ const projects = workspacePaths(root).projects;
117
+ await requireDirectory(projects);
118
+ await requireDirectory(join(projects, projectId));
119
+ const path = join(projects, projectId, "project.json");
120
+ const info = await lstat(path).catch(() => undefined);
121
+ if (!info?.isFile() || info.isSymbolicLink() || info.size > MAX_RECORD_BYTES) {
122
+ throw failure("Project recovery requires a bounded regular project state.");
123
+ }
124
+ const value = await readRecoveryJson(path);
125
+ if (!isObject(value) || value.id !== projectId)
126
+ throw failure("Project recovery state identity is invalid.");
127
+ return value;
128
+ }
129
+ async function readRecoveryJson(path) {
130
+ try {
131
+ return JSON.parse(await readFile(path, "utf8"));
132
+ }
133
+ catch {
134
+ throw failure("Project recovery JSON is missing or invalid; preserved bytes were not changed.");
135
+ }
136
+ }
137
+ /** Called only under the existing workspace lease, before creating a fork target. */
138
+ export async function beginProjectMutation(root, kind, source, requestSha256, targetProjectId = null) {
139
+ if (!ID.test(source.id) ||
140
+ !HASH.test(requestSha256) ||
141
+ (kind === "fork"
142
+ ? !targetProjectId || !ID.test(targetProjectId) || targetProjectId === source.id
143
+ : targetProjectId !== null)) {
144
+ throw failure("Project mutation identity is invalid.");
145
+ }
146
+ const directory = (await privateDirectory(root, ["pending-project-mutations"], true));
147
+ const record = bindRecord({
148
+ identity: {
149
+ schemaVersion: 1,
150
+ kind,
151
+ operationId: randomUUID(),
152
+ sourceProjectId: source.id,
153
+ targetProjectId,
154
+ requestSha256,
155
+ beforeSha256: sha256Text(canonicalJson(source)),
156
+ },
157
+ after: null,
158
+ afterSha256: null,
159
+ targetSha256: null,
160
+ });
161
+ const path = join(directory, filename(record));
162
+ if (await lstat(path).catch(() => undefined))
163
+ throw failure("An earlier project mutation needs recovery.", record);
164
+ await writeJsonAtomic(path, record);
165
+ await appendJournalEvent(workspacePaths(root).journal, "project.mutation.started", source.id, {
166
+ ...record.identity,
167
+ identitySha256: sha256Text(canonicalJson(record.identity)),
168
+ });
169
+ return record;
170
+ }
171
+ export async function prepareProjectMutation(root, record, after) {
172
+ const directory = await privateDirectory(root, ["pending-project-mutations"], false);
173
+ if (!directory || after.id !== record.identity.sourceProjectId)
174
+ throw failure("Prepared project mutation identity changed.", record);
175
+ const currentRecord = await readRecord(join(directory, filename(record)));
176
+ if (currentRecord.recordSha256 !== record.recordSha256 ||
177
+ sha256Text(canonicalJson(await projectState(root, record.identity.sourceProjectId))) !==
178
+ record.identity.beforeSha256) {
179
+ throw failure("Project state changed during the prepared mutation.", record);
180
+ }
181
+ const target = record.identity.targetProjectId
182
+ ? await projectState(root, record.identity.targetProjectId)
183
+ : null;
184
+ const prepared = bindRecord({
185
+ identity: record.identity,
186
+ after: structuredClone(after),
187
+ afterSha256: sha256Text(canonicalJson(after)),
188
+ targetSha256: target ? sha256Text(canonicalJson(target)) : null,
189
+ });
190
+ await writeJsonAtomic(join(directory, filename(prepared)), prepared);
191
+ return prepared;
192
+ }
193
+ export function projectMutationBinding(record) {
194
+ return {
195
+ operationId: record.identity.operationId,
196
+ requestSha256: record.identity.requestSha256,
197
+ recordSha256: record.recordSha256,
198
+ resultSha256: record.afterSha256 ?? "",
199
+ };
200
+ }
201
+ function committedEvent(events, record) {
202
+ return events.find((event) => event.type ===
203
+ (record.identity.kind === "fork"
204
+ ? "project.forked"
205
+ : record.identity.kind === "retry"
206
+ ? "project.retry.requested"
207
+ : record.identity.kind === "acquisition-revision"
208
+ ? "project.acquisition.revision.requested"
209
+ : record.identity.kind === "scientific-fulfillment"
210
+ ? "scientific.fulfillment.recorded"
211
+ : "project.task.scope.approved") &&
212
+ isObject(event.payload.mutation) &&
213
+ event.payload.mutation.operationId === record.identity.operationId);
214
+ }
215
+ /** The journal event is the commit point; state/ledger files are recoverable projections. */
216
+ async function settleMutation(root, record, events) {
217
+ const paths = workspacePaths(root);
218
+ await requireDirectory(paths.projects);
219
+ const identity = record.identity;
220
+ const started = events.find((event) => event.type === "project.mutation.started" &&
221
+ event.payload.operationId === identity.operationId);
222
+ const commit = committedEvent(events, record);
223
+ const targetPath = identity.targetProjectId
224
+ ? join(paths.projects, identity.targetProjectId)
225
+ : null;
226
+ const targetInfo = targetPath
227
+ ? await lstat(targetPath).catch((error) => {
228
+ if (error.code === "ENOENT")
229
+ return undefined;
230
+ throw error;
231
+ })
232
+ : undefined;
233
+ if (started?.scope !== identity.sourceProjectId ||
234
+ started?.payload.identitySha256 !== sha256Text(canonicalJson(identity))) {
235
+ // A crash before the intent append cannot have created a target.
236
+ if (started || commit || targetInfo)
237
+ throw failure("Project recovery has no matching journal intent.", record);
238
+ }
239
+ else if (commit) {
240
+ const binding = commit.payload.mutation;
241
+ if (!isObject(binding) ||
242
+ binding.recordSha256 !== record.recordSha256 ||
243
+ binding.requestSha256 !== identity.requestSha256 ||
244
+ binding.resultSha256 !== record.afterSha256 ||
245
+ commit.scope !== (identity.targetProjectId ?? identity.sourceProjectId) ||
246
+ (identity.kind === "fork"
247
+ ? commit.payload.sourceProjectId !== identity.sourceProjectId ||
248
+ commit.payload.targetProjectId !== identity.targetProjectId
249
+ : commit.payload.projectId !== identity.sourceProjectId) ||
250
+ !record.after ||
251
+ !record.afterSha256) {
252
+ throw failure("Committed project mutation does not match its recovery record.", record);
253
+ }
254
+ if (targetPath) {
255
+ if (!targetInfo?.isDirectory() ||
256
+ targetInfo.isSymbolicLink() ||
257
+ sha256Text(canonicalJson(await projectState(root, identity.targetProjectId))) !==
258
+ record.targetSha256) {
259
+ throw failure("Committed fork target changed before recovery completed.", record);
260
+ }
261
+ }
262
+ const current = await projectState(root, identity.sourceProjectId);
263
+ const currentHash = sha256Text(canonicalJson(current));
264
+ if (currentHash !== record.afterSha256) {
265
+ if (currentHash !== identity.beforeSha256)
266
+ throw failure("Recovery will not overwrite changed project state.", record);
267
+ await writeJsonAtomic(join(paths.projects, identity.sourceProjectId, "project.json"), record.after);
268
+ }
269
+ if (identity.kind === "fork") {
270
+ const ledger = await readVerifiedJournal(evidenceLedgerPath(root, identity.sourceProjectId));
271
+ if (!ledger.some((event) => event.type === "project.superseded" &&
272
+ event.payload.operationId === identity.operationId)) {
273
+ await appendEvidenceLedgerEvent(root, identity.sourceProjectId, "project.superseded", {
274
+ sourceProjectId: identity.sourceProjectId,
275
+ supersededBy: identity.targetProjectId,
276
+ reason: "recovery-fork",
277
+ operationId: identity.operationId,
278
+ commitSha256: commit.hash,
279
+ });
280
+ }
281
+ }
282
+ }
283
+ else {
284
+ if (targetInfo) {
285
+ if (!targetInfo.isDirectory() || targetInfo.isSymbolicLink()) {
286
+ throw failure("Recovery will not move an unknown or linked fork target.", record);
287
+ }
288
+ // Preserve interrupted bytes instead of recursively deleting a control tree.
289
+ const retained = (await privateDirectory(root, ["interrupted-project-mutations", identity.operationId], true));
290
+ await rename(targetPath, join(retained, "target"));
291
+ }
292
+ if (!events.some((event) => event.type === "project.mutation.aborted" &&
293
+ event.payload.operationId === identity.operationId)) {
294
+ await appendJournalEvent(paths.journal, "project.mutation.aborted", identity.sourceProjectId, {
295
+ operationId: identity.operationId,
296
+ mutationKind: identity.kind,
297
+ targetProjectId: identity.targetProjectId,
298
+ retainedInterruptedTarget: Boolean(targetInfo),
299
+ });
300
+ }
301
+ }
302
+ const directory = (await privateDirectory(root, ["pending-project-mutations"], false));
303
+ await rm(join(directory, filename(record)));
304
+ // Leave no normal-path recovery scan once all owned records are settled.
305
+ await rmdir(directory).catch(() => undefined);
306
+ return Boolean(commit);
307
+ }
308
+ /** Settle an operation after success or caught failure; committed targets are never rolled back. */
309
+ export async function settleProjectMutation(root, record) {
310
+ const directory = await privateDirectory(root, ["pending-project-mutations"], false);
311
+ const path = directory ? join(directory, filename(record)) : null;
312
+ if (!path || !(await lstat(path).catch(() => undefined))) {
313
+ return Boolean(committedEvent(await readVerifiedJournal(workspacePaths(root).journal), record));
314
+ }
315
+ const latest = await readRecord(path);
316
+ if (latest.identity.operationId !== record.identity.operationId)
317
+ throw failure("Project recovery identity changed.", record);
318
+ return settleMutation(root, latest, await readVerifiedJournal(workspacePaths(root).journal));
319
+ }
320
+ /** Constant-size directory check in normal operation; journal/state work only when pending. */
321
+ export async function recoverProjectMutations(root) {
322
+ const directory = await privateDirectory(root, ["pending-project-mutations"], false);
323
+ if (!directory)
324
+ return;
325
+ const files = (await readdir(directory)).filter((name) => /^(?:fork|retry|acquisition-revision|task-scope|scientific-fulfillment)-[a-z0-9][a-z0-9-]{2,63}\.json$/.test(name));
326
+ if (!files.length)
327
+ return;
328
+ const events = await readVerifiedJournal(workspacePaths(root).journal);
329
+ for (const file of files.sort())
330
+ await settleMutation(root, await readRecord(join(directory, file)), events);
331
+ }
332
+ //# sourceMappingURL=project-mutations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-mutations.js","sourceRoot":"","sources":["../../../src/research/workspace/project-mutations.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type ProjectAuthorityIndex } from "./project-authority.js";
1
2
  import { type VerifiedScientificDesign } from "./scientific-design.js";
2
3
  import type { AgentKind, ProjectEvidenceRequirements, ProjectInput, ProjectInputTrustStatus, ResearchPolicyBinding, ScientificDesignBinding, ScientificReviewRole, ProjectState, WorkPackage, VerifiedProjectInputPlan } from "./types.js";
3
4
  export declare function initializeProject(root: string, projectId: string, question: string, evidenceRequirements?: ProjectEvidenceRequirements, budgetConfirmed?: boolean, inputPlan?: VerifiedProjectInputPlan, publicationPolicy?: ResearchPolicyBinding, scientificDesignInput?: {
@@ -10,7 +11,7 @@ export declare function addProjectInput(root: string, projectId: string, inputPa
10
11
  independentlyReproduced?: boolean;
11
12
  }): Promise<ProjectInput>;
12
13
  export declare function loadProject(root: string, projectId: string): Promise<ProjectState>;
13
- export declare function listProjects(root: string): Promise<ProjectState[]>;
14
+ export declare function listProjects(root: string, authority?: ProjectAuthorityIndex): Promise<ProjectState[]>;
14
15
  export declare function saveProject(root: string, project: ProjectState): Promise<void>;
15
16
  export declare function retryProjectPackage(root: string, projectId: string, packageId?: string): Promise<ProjectState>;
16
17
  export declare function forkProject(root: string, sourceProjectId: string, targetProjectId: string, resumeThrough?: "discover" | "acquire" | "analyze" | "synthesize", scientificReapproval?: {