@tiangong-ai/cli 0.0.18 → 0.0.20
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/AGENTS.md +8 -2
- package/README.md +81 -12
- package/dist/cli.js +3 -1
- package/dist/cli.js.map +1 -1
- package/dist/research/commands.js +13 -5
- package/dist/research/commands.js.map +1 -1
- package/dist/research/config.d.ts +1 -0
- package/dist/research/config.js +18 -1
- package/dist/research/config.js.map +1 -1
- package/dist/research/orchestration.d.ts +3 -0
- package/dist/research/orchestration.js +236 -0
- package/dist/research/orchestration.js.map +1 -0
- package/dist/research/types.d.ts +1 -1
- package/dist/research/workspace/broker.d.ts +5 -0
- package/dist/research/workspace/broker.js +353 -0
- package/dist/research/workspace/broker.js.map +1 -0
- package/dist/research/workspace/capabilities.d.ts +10 -0
- package/dist/research/workspace/capabilities.js +291 -0
- package/dist/research/workspace/capabilities.js.map +1 -0
- package/dist/research/workspace/constants.d.ts +8 -0
- package/dist/research/workspace/constants.js +37 -0
- package/dist/research/workspace/constants.js.map +1 -0
- package/dist/research/workspace/context.d.ts +3 -0
- package/dist/research/workspace/context.js +77 -0
- package/dist/research/workspace/context.js.map +1 -0
- package/dist/research/workspace/executor.d.ts +12 -0
- package/dist/research/workspace/executor.js +353 -0
- package/dist/research/workspace/executor.js.map +1 -0
- package/dist/research/workspace/journal.d.ts +7 -0
- package/dist/research/workspace/journal.js +104 -0
- package/dist/research/workspace/journal.js.map +1 -0
- package/dist/research/workspace/projects.d.ts +9 -0
- package/dist/research/workspace/projects.js +230 -0
- package/dist/research/workspace/projects.js.map +1 -0
- package/dist/research/workspace/runtime.d.ts +27 -0
- package/dist/research/workspace/runtime.js +519 -0
- package/dist/research/workspace/runtime.js.map +1 -0
- package/dist/research/workspace/storage.d.ts +25 -0
- package/dist/research/workspace/storage.js +218 -0
- package/dist/research/workspace/storage.js.map +1 -0
- package/dist/research/workspace/types.d.ts +181 -0
- package/dist/research/workspace/types.js +2 -0
- package/dist/research/workspace/types.js.map +1 -0
- package/dist/research/workspace/workspace.d.ts +12 -0
- package/dist/research/workspace/workspace.js +340 -0
- package/dist/research/workspace/workspace.js.map +1 -0
- package/package.json +3 -2
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { lstat, mkdir, readFile, readdir, stat, writeFile } from "node:fs/promises";
|
|
3
|
+
import { basename, join } from "node:path";
|
|
4
|
+
import { CliError } from "../../errors.js";
|
|
5
|
+
import { declaredCredentialIds, verifyCapabilities } from "./capabilities.js";
|
|
6
|
+
import { packageVersion, RESEARCH_PACKAGE_NAME, RESEARCH_PROTOCOL_VERSION } from "./constants.js";
|
|
7
|
+
import { inspectResearchContext, isWorkspaceMarker } from "./context.js";
|
|
8
|
+
import { appendJournalEvent, verifyJournal } from "./journal.js";
|
|
9
|
+
import { acquireFileLock, ensureDirectory, isObject, pathExists, readJsonFile, requireAbsolutePath, workspacePaths, writeJsonAtomic, } from "./storage.js";
|
|
10
|
+
const DEFAULT_BUDGET = {
|
|
11
|
+
maxTokens: 250_000,
|
|
12
|
+
maxCostUsd: 60,
|
|
13
|
+
maxWallSeconds: 72 * 60 * 60,
|
|
14
|
+
maxFilesPerPackage: 20,
|
|
15
|
+
maxBytesPerPackage: 20 * 1024 * 1024,
|
|
16
|
+
maxAttemptsPerPackage: 3,
|
|
17
|
+
};
|
|
18
|
+
export async function initializeResearchWorkspace(targetPath, name) {
|
|
19
|
+
const root = requireAbsolutePath(targetPath, "Workspace path");
|
|
20
|
+
await mkdir(root, { recursive: true, mode: 0o755 });
|
|
21
|
+
const selectedInfo = await lstat(root);
|
|
22
|
+
if (!selectedInfo.isDirectory() || selectedInfo.isSymbolicLink()) {
|
|
23
|
+
throw new CliError(`Workspace path must be a regular directory: ${root}`, {
|
|
24
|
+
code: "RESEARCH_WORKSPACE_PATH_INVALID",
|
|
25
|
+
exitCode: 2,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
const paths = workspacePaths(root);
|
|
29
|
+
if (await pathExists(paths.control)) {
|
|
30
|
+
throw new CliError(`Research workspace state already exists: ${paths.control}`, {
|
|
31
|
+
code: "RESEARCH_WORKSPACE_EXISTS",
|
|
32
|
+
exitCode: 2,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
const workspaceName = normalizeWorkspaceName(name ?? basename(root));
|
|
36
|
+
const workspaceId = randomUUID();
|
|
37
|
+
const now = new Date().toISOString();
|
|
38
|
+
const marker = {
|
|
39
|
+
schemaVersion: 1,
|
|
40
|
+
kind: "tiangong-research-workspace",
|
|
41
|
+
workspaceId,
|
|
42
|
+
name: workspaceName,
|
|
43
|
+
createdAt: now,
|
|
44
|
+
};
|
|
45
|
+
const config = {
|
|
46
|
+
schemaVersion: 1,
|
|
47
|
+
producer: { agent: "codex", binary: "codex", model: null },
|
|
48
|
+
reviewer: { agent: "claude", binary: "claude", model: null },
|
|
49
|
+
budget: { ...DEFAULT_BUDGET },
|
|
50
|
+
};
|
|
51
|
+
const runtimeLock = {
|
|
52
|
+
schemaVersion: 1,
|
|
53
|
+
protocolVersion: RESEARCH_PROTOCOL_VERSION,
|
|
54
|
+
packageName: RESEARCH_PACKAGE_NAME,
|
|
55
|
+
packageVersion: packageVersion(),
|
|
56
|
+
workspaceId,
|
|
57
|
+
};
|
|
58
|
+
await ensureDirectory(paths.control);
|
|
59
|
+
await Promise.all([
|
|
60
|
+
ensureDirectory(paths.projects),
|
|
61
|
+
ensureDirectory(paths.runtime),
|
|
62
|
+
ensureDirectory(paths.locks),
|
|
63
|
+
]);
|
|
64
|
+
await writeJsonAtomic(paths.marker, marker);
|
|
65
|
+
await writeJsonAtomic(paths.config, config);
|
|
66
|
+
await writeJsonAtomic(paths.runtimeLock, runtimeLock);
|
|
67
|
+
await writeJsonAtomic(paths.capabilityDeclarations, { schemaVersion: 1, capabilities: [] });
|
|
68
|
+
await writeFile(paths.envExample, [
|
|
69
|
+
"# Map capability-declared logical credential IDs to owner-provided values.",
|
|
70
|
+
"TIANGONG_RESEARCH_CAPABILITY_CREDENTIALS_JSON={}",
|
|
71
|
+
"",
|
|
72
|
+
].join("\n"), { encoding: "utf8", mode: 0o600 });
|
|
73
|
+
await writeFile(join(paths.control, ".gitignore"), ".env\nlocks/\nruntime/\n", "utf8");
|
|
74
|
+
await appendJournalEvent(paths.journal, "workspace.initialized", workspaceId, {
|
|
75
|
+
workspaceId,
|
|
76
|
+
protocolVersion: RESEARCH_PROTOCOL_VERSION,
|
|
77
|
+
});
|
|
78
|
+
return {
|
|
79
|
+
workspace: root,
|
|
80
|
+
workspaceId,
|
|
81
|
+
created: [
|
|
82
|
+
paths.marker,
|
|
83
|
+
paths.config,
|
|
84
|
+
paths.runtimeLock,
|
|
85
|
+
paths.capabilityDeclarations,
|
|
86
|
+
paths.envExample,
|
|
87
|
+
paths.journal,
|
|
88
|
+
],
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
export async function requireResearchWorkspace(inputPath) {
|
|
92
|
+
const inspection = await inspectResearchContext(inputPath);
|
|
93
|
+
if (inspection.role !== "workspace" || !inspection.root) {
|
|
94
|
+
throw new CliError(`Path is not inside a valid Tiangong research workspace: ${inputPath}`, {
|
|
95
|
+
code: "RESEARCH_WORKSPACE_REQUIRED",
|
|
96
|
+
exitCode: 2,
|
|
97
|
+
details: inspection,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
return inspection.root;
|
|
101
|
+
}
|
|
102
|
+
export async function loadWorkspaceMarker(root) {
|
|
103
|
+
const marker = await readJsonFile(workspacePaths(root).marker, "Research workspace marker");
|
|
104
|
+
if (!isWorkspaceMarker(marker)) {
|
|
105
|
+
throw new CliError("Research workspace marker has an unsupported shape.", {
|
|
106
|
+
code: "RESEARCH_WORKSPACE_INVALID",
|
|
107
|
+
exitCode: 2,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
return marker;
|
|
111
|
+
}
|
|
112
|
+
export async function loadWorkspaceConfig(root) {
|
|
113
|
+
const config = await readJsonFile(workspacePaths(root).config, "Research configuration");
|
|
114
|
+
if (!isWorkspaceConfig(config)) {
|
|
115
|
+
throw new CliError("Research configuration has an unsupported shape.", {
|
|
116
|
+
code: "RESEARCH_CONFIG_INVALID",
|
|
117
|
+
exitCode: 2,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
return config;
|
|
121
|
+
}
|
|
122
|
+
export async function doctorResearchWorkspace(inputPath) {
|
|
123
|
+
const workspace = await requireResearchWorkspace(inputPath);
|
|
124
|
+
const paths = workspacePaths(workspace);
|
|
125
|
+
const checks = [];
|
|
126
|
+
const marker = await checked(checks, "workspace-marker", async () => {
|
|
127
|
+
const value = await loadWorkspaceMarker(workspace);
|
|
128
|
+
return { value, detail: `workspaceId=${value.workspaceId}` };
|
|
129
|
+
});
|
|
130
|
+
const config = await checked(checks, "workspace-config", async () => {
|
|
131
|
+
const value = await loadWorkspaceConfig(workspace);
|
|
132
|
+
return {
|
|
133
|
+
value,
|
|
134
|
+
detail: `producer=${value.producer.agent} reviewer=${value.reviewer.agent}`,
|
|
135
|
+
};
|
|
136
|
+
});
|
|
137
|
+
await checked(checks, "runtime-lock", async () => {
|
|
138
|
+
const lock = await requireCurrentRuntimeLock(workspace, marker);
|
|
139
|
+
return { value: lock, detail: `${lock.packageName}@${lock.packageVersion}` };
|
|
140
|
+
});
|
|
141
|
+
await checked(checks, "journal-chain", async () => {
|
|
142
|
+
const result = await verifyJournal(paths.journal);
|
|
143
|
+
return { value: result, detail: `${result.events} event(s), head=${result.head.slice(0, 12)}` };
|
|
144
|
+
});
|
|
145
|
+
const credentialIds = await checked(checks, "capability-policy", async () => {
|
|
146
|
+
const result = await verifyCapabilities(workspace);
|
|
147
|
+
if (result.status !== "verified") {
|
|
148
|
+
throw new Error(result.errors.join("; ") || "capability verification failed");
|
|
149
|
+
}
|
|
150
|
+
return {
|
|
151
|
+
value: await declaredCredentialIds(workspace),
|
|
152
|
+
detail: `${result.checked} locked capability declaration(s)`,
|
|
153
|
+
};
|
|
154
|
+
});
|
|
155
|
+
await checked(checks, "credential-environment", async () => {
|
|
156
|
+
const result = await inspectCredentialEnvironment(paths.env, credentialIds ?? new Set());
|
|
157
|
+
return { value: result, detail: result };
|
|
158
|
+
});
|
|
159
|
+
await checked(checks, "project-state", async () => {
|
|
160
|
+
const projects = await readProjectStates(paths.projects);
|
|
161
|
+
return { value: projects, detail: `${projects.length} project(s)` };
|
|
162
|
+
});
|
|
163
|
+
if (config && config.producer.agent === config.reviewer.agent) {
|
|
164
|
+
checks.push({
|
|
165
|
+
id: "independent-review-route",
|
|
166
|
+
status: "fail",
|
|
167
|
+
detail: "Producer and reviewer must use different agent families.",
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
else if (config) {
|
|
171
|
+
checks.push({
|
|
172
|
+
id: "independent-review-route",
|
|
173
|
+
status: "pass",
|
|
174
|
+
detail: `${config.producer.agent} -> ${config.reviewer.agent}`,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
workspace,
|
|
179
|
+
status: checks.some((check) => check.status === "fail") ? "blocked" : "ready",
|
|
180
|
+
checks,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
export async function withWorkspaceLock(root, operation, callback) {
|
|
184
|
+
await requireCurrentRuntimeLock(root);
|
|
185
|
+
const paths = workspacePaths(root);
|
|
186
|
+
const release = await acquireFileLock(join(paths.locks, "workspace.lock"), {
|
|
187
|
+
pid: process.pid,
|
|
188
|
+
operation,
|
|
189
|
+
acquiredAt: new Date().toISOString(),
|
|
190
|
+
});
|
|
191
|
+
try {
|
|
192
|
+
return await callback();
|
|
193
|
+
}
|
|
194
|
+
finally {
|
|
195
|
+
await release();
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
export async function requireCurrentRuntimeLock(root, knownMarker) {
|
|
199
|
+
const paths = workspacePaths(root);
|
|
200
|
+
const marker = knownMarker ?? (await loadWorkspaceMarker(root));
|
|
201
|
+
const lock = await readJsonFile(paths.runtimeLock, "Research runtime lock");
|
|
202
|
+
if (!isRuntimeLock(lock) || lock.workspaceId !== marker.workspaceId) {
|
|
203
|
+
throw new CliError("Research runtime lock does not match the current workspace.", {
|
|
204
|
+
code: "RESEARCH_RUNTIME_LOCK_INVALID",
|
|
205
|
+
exitCode: 3,
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
if (lock.protocolVersion !== RESEARCH_PROTOCOL_VERSION) {
|
|
209
|
+
throw new CliError(`Unsupported research protocol version: ${lock.protocolVersion}.`, {
|
|
210
|
+
code: "RESEARCH_RUNTIME_LOCK_INVALID",
|
|
211
|
+
exitCode: 3,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
const currentVersion = packageVersion();
|
|
215
|
+
if (lock.packageVersion !== currentVersion) {
|
|
216
|
+
throw new CliError(`Research runtime lock requires ${lock.packageName}@${lock.packageVersion}; active CLI is ${currentVersion}.`, { code: "RESEARCH_RUNTIME_VERSION_MISMATCH", exitCode: 3 });
|
|
217
|
+
}
|
|
218
|
+
return lock;
|
|
219
|
+
}
|
|
220
|
+
async function inspectCredentialEnvironment(path, declaredIds) {
|
|
221
|
+
if (!(await pathExists(path)))
|
|
222
|
+
return "not configured; no credentials loaded";
|
|
223
|
+
const info = await stat(path);
|
|
224
|
+
if (process.platform !== "win32" && (info.mode & 0o077) !== 0) {
|
|
225
|
+
throw new Error("credential environment must have owner-only permissions");
|
|
226
|
+
}
|
|
227
|
+
const lines = (await readFile(path, "utf8")).split(/\r?\n/);
|
|
228
|
+
let found = false;
|
|
229
|
+
for (const sourceLine of lines) {
|
|
230
|
+
const line = sourceLine.trim();
|
|
231
|
+
if (!line || line.startsWith("#"))
|
|
232
|
+
continue;
|
|
233
|
+
const equals = line.indexOf("=");
|
|
234
|
+
if (equals < 1)
|
|
235
|
+
throw new Error("credential environment contains a malformed line");
|
|
236
|
+
const key = line.slice(0, equals).trim();
|
|
237
|
+
if (key !== "TIANGONG_RESEARCH_CAPABILITY_CREDENTIALS_JSON" || found) {
|
|
238
|
+
throw new Error(`credential environment contains an unsupported key: ${key}`);
|
|
239
|
+
}
|
|
240
|
+
const raw = line.slice(equals + 1).trim();
|
|
241
|
+
const value = JSON.parse(raw || "{}");
|
|
242
|
+
if (!isObject(value) ||
|
|
243
|
+
Object.entries(value).some(([credentialId, credentialValue]) => !isLogicalCredentialId(credentialId) ||
|
|
244
|
+
!declaredIds.has(credentialId) ||
|
|
245
|
+
typeof credentialValue !== "string" ||
|
|
246
|
+
Buffer.byteLength(credentialValue, "utf8") < 8)) {
|
|
247
|
+
throw new Error("credential map must contain logical IDs and non-trivial string values");
|
|
248
|
+
}
|
|
249
|
+
found = true;
|
|
250
|
+
}
|
|
251
|
+
return found ? "configured with owner-only permissions" : "configured without credentials";
|
|
252
|
+
}
|
|
253
|
+
async function readProjectStates(projectsPath) {
|
|
254
|
+
const entries = await readdir(projectsPath, { withFileTypes: true });
|
|
255
|
+
const states = [];
|
|
256
|
+
for (const entry of entries) {
|
|
257
|
+
if (!entry.isDirectory() || entry.isSymbolicLink())
|
|
258
|
+
continue;
|
|
259
|
+
const state = await readJsonFile(join(projectsPath, entry.name, "project.json"), `Project ${entry.name}`);
|
|
260
|
+
if (!isProjectStateShape(state) || state.id !== entry.name) {
|
|
261
|
+
throw new Error(`project ${entry.name} has an unsupported state shape`);
|
|
262
|
+
}
|
|
263
|
+
states.push(state);
|
|
264
|
+
}
|
|
265
|
+
return states;
|
|
266
|
+
}
|
|
267
|
+
function isWorkspaceConfig(value) {
|
|
268
|
+
if (!isObject(value) || value.schemaVersion !== 1)
|
|
269
|
+
return false;
|
|
270
|
+
if (!isAgentRoute(value.producer) || !isAgentRoute(value.reviewer))
|
|
271
|
+
return false;
|
|
272
|
+
const budget = value.budget;
|
|
273
|
+
return (isObject(budget) &&
|
|
274
|
+
positiveInteger(budget.maxTokens) &&
|
|
275
|
+
positiveNumber(budget.maxCostUsd) &&
|
|
276
|
+
positiveInteger(budget.maxWallSeconds) &&
|
|
277
|
+
positiveInteger(budget.maxFilesPerPackage) &&
|
|
278
|
+
positiveInteger(budget.maxBytesPerPackage) &&
|
|
279
|
+
positiveInteger(budget.maxAttemptsPerPackage));
|
|
280
|
+
}
|
|
281
|
+
function isAgentRoute(value) {
|
|
282
|
+
return (isObject(value) &&
|
|
283
|
+
(value.agent === "codex" || value.agent === "claude") &&
|
|
284
|
+
typeof value.binary === "string" &&
|
|
285
|
+
value.binary.length > 0 &&
|
|
286
|
+
(value.model === null || (typeof value.model === "string" && value.model.length > 0)));
|
|
287
|
+
}
|
|
288
|
+
function isRuntimeLock(value) {
|
|
289
|
+
return (isObject(value) &&
|
|
290
|
+
value.schemaVersion === 1 &&
|
|
291
|
+
value.protocolVersion === 1 &&
|
|
292
|
+
value.packageName === RESEARCH_PACKAGE_NAME &&
|
|
293
|
+
typeof value.packageVersion === "string" &&
|
|
294
|
+
typeof value.workspaceId === "string");
|
|
295
|
+
}
|
|
296
|
+
function isProjectStateShape(value) {
|
|
297
|
+
return (isObject(value) &&
|
|
298
|
+
value.schemaVersion === 1 &&
|
|
299
|
+
typeof value.id === "string" &&
|
|
300
|
+
typeof value.question === "string" &&
|
|
301
|
+
["ready", "running", "blocked", "complete"].includes(String(value.status)) &&
|
|
302
|
+
Array.isArray(value.inputs) &&
|
|
303
|
+
Array.isArray(value.packages) &&
|
|
304
|
+
isObject(value.usage));
|
|
305
|
+
}
|
|
306
|
+
async function checked(checks, id, callback) {
|
|
307
|
+
try {
|
|
308
|
+
const result = await callback();
|
|
309
|
+
checks.push({ id, status: "pass", detail: result.detail });
|
|
310
|
+
return result.value;
|
|
311
|
+
}
|
|
312
|
+
catch (error) {
|
|
313
|
+
checks.push({
|
|
314
|
+
id,
|
|
315
|
+
status: "fail",
|
|
316
|
+
detail: error instanceof Error ? error.message : String(error),
|
|
317
|
+
});
|
|
318
|
+
return undefined;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
function normalizeWorkspaceName(value) {
|
|
322
|
+
const normalized = value.trim();
|
|
323
|
+
if (!normalized || normalized.length > 100 || /[\u0000-\u001f]/.test(normalized)) {
|
|
324
|
+
throw new CliError("Workspace name must contain 1-100 printable characters.", {
|
|
325
|
+
code: "RESEARCH_WORKSPACE_NAME_INVALID",
|
|
326
|
+
exitCode: 2,
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
return normalized;
|
|
330
|
+
}
|
|
331
|
+
function positiveInteger(value) {
|
|
332
|
+
return typeof value === "number" && Number.isInteger(value) && value > 0;
|
|
333
|
+
}
|
|
334
|
+
function positiveNumber(value) {
|
|
335
|
+
return typeof value === "number" && Number.isFinite(value) && value > 0;
|
|
336
|
+
}
|
|
337
|
+
function isLogicalCredentialId(value) {
|
|
338
|
+
return /^[a-z][a-z0-9]*(?:[.-][a-z0-9]+)+$/.test(value);
|
|
339
|
+
}
|
|
340
|
+
//# sourceMappingURL=workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../src/research/workspace/workspace.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tiangong-ai/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.20",
|
|
4
4
|
"description": "Tiangong AI command-line interface.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -44,7 +44,8 @@
|
|
|
44
44
|
"tiangong",
|
|
45
45
|
"ai",
|
|
46
46
|
"cli",
|
|
47
|
-
"kb"
|
|
47
|
+
"kb",
|
|
48
|
+
"research"
|
|
48
49
|
],
|
|
49
50
|
"license": "MIT",
|
|
50
51
|
"devDependencies": {
|