@tiangong-ai/cli 0.0.33 → 0.0.34
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 +7 -2
- package/README.md +21 -2
- package/dist/research/commands.js +58 -1
- package/dist/research/commands.js.map +1 -1
- package/dist/research/workspace/constants.d.ts +1 -0
- package/dist/research/workspace/constants.js +4 -2
- package/dist/research/workspace/constants.js.map +1 -1
- package/dist/research/workspace/context.js +106 -11
- package/dist/research/workspace/context.js.map +1 -1
- package/dist/research/workspace/setup-catalog.js +5 -5
- package/dist/research/workspace/setup-invocation.d.ts +11 -0
- package/dist/research/workspace/setup-invocation.js +34 -0
- package/dist/research/workspace/setup-invocation.js.map +1 -0
- package/dist/research/workspace/setup.d.ts +51 -6
- package/dist/research/workspace/setup.js +543 -22
- package/dist/research/workspace/setup.js.map +1 -1
- package/dist/research/workspace/types.d.ts +21 -0
- package/package.json +4 -2
package/AGENTS.md
CHANGED
|
@@ -15,8 +15,8 @@ checkPaths:
|
|
|
15
15
|
- .docpact/config.yaml
|
|
16
16
|
- docs/agents/**
|
|
17
17
|
- src/**
|
|
18
|
-
lastReviewedAt: 2026-08-
|
|
19
|
-
lastReviewedCommit:
|
|
18
|
+
lastReviewedAt: 2026-08-12
|
|
19
|
+
lastReviewedCommit: 7d692de934c51178df520ccdaa212acc7dc303f0
|
|
20
20
|
---
|
|
21
21
|
|
|
22
22
|
# Tiangong AI CLI Contract
|
|
@@ -60,6 +60,7 @@ This repository owns the Tiangong AI command-line interface.
|
|
|
60
60
|
Run before delivery:
|
|
61
61
|
|
|
62
62
|
```bash
|
|
63
|
+
npm run test:clean
|
|
63
64
|
npm run lint
|
|
64
65
|
npm run build
|
|
65
66
|
npm test
|
|
@@ -68,6 +69,10 @@ docpact validate-config --root . --strict
|
|
|
68
69
|
docpact lint --root . --worktree --mode enforce
|
|
69
70
|
```
|
|
70
71
|
|
|
72
|
+
For Auto Research changes, `npm run test:clean` is the authoritative TDD gate.
|
|
73
|
+
Write the regression first, observe it fail in that clean container, then make
|
|
74
|
+
it pass there. Host-only results are supplemental.
|
|
75
|
+
|
|
71
76
|
Use `npm run typecheck` for a faster TypeScript-only check.
|
|
72
77
|
Use `npm run prepush:gate` when `docpact` is installed and you want the
|
|
73
78
|
aggregated local quality gate.
|
package/README.md
CHANGED
|
@@ -12,8 +12,8 @@ checkPaths:
|
|
|
12
12
|
- package.json
|
|
13
13
|
- bin/**
|
|
14
14
|
- src/**
|
|
15
|
-
lastReviewedAt: 2026-08-
|
|
16
|
-
lastReviewedCommit:
|
|
15
|
+
lastReviewedAt: 2026-08-12
|
|
16
|
+
lastReviewedCommit: ac34420a63cb02898f8c38b1c1af64f0439e862f
|
|
17
17
|
---
|
|
18
18
|
|
|
19
19
|
# Tiangong AI CLI
|
|
@@ -235,6 +235,16 @@ the default; global writes, network downloads, live provider checks, synthetic
|
|
|
235
235
|
document uploads, and paid agent smokes each require their applicable
|
|
236
236
|
confirmation.
|
|
237
237
|
|
|
238
|
+
If the full orchestrator was selected, accepted apply creates a separate
|
|
239
|
+
project-local `tiangong-auto-research-recovery` Skill after credentials are
|
|
240
|
+
stored and before source checkout. This CLI-generated, plan-bound shim can only
|
|
241
|
+
inspect context/status and execute the exact-version retry returned by setup; it
|
|
242
|
+
cannot perform research, call standalone evidence, or access credentials. A
|
|
243
|
+
checkout or install failure therefore remains discoverable without falling back
|
|
244
|
+
to a global Skill. After the full external orchestrator matches its reviewed
|
|
245
|
+
tree hash, setup verifies the shim byte-for-byte and removes only that generated
|
|
246
|
+
directory. Modified, symlinked, or ambiguous recovery bytes block cleanup.
|
|
247
|
+
|
|
238
248
|
Production admission requires at least one locked external capability with
|
|
239
249
|
`brokered-network` and `discoveryScopes: ["public-internet"]`; an input plan or
|
|
240
250
|
local files alone cannot represent internet coverage. The machine-readable
|
|
@@ -259,6 +269,15 @@ regular non-symlink `runtime-lock.json` exact stable CLI version. Setup and
|
|
|
259
269
|
release CI reject a missing resolver or any stale exact CLI version in the
|
|
260
270
|
orchestrator's `SKILL.md` or `references/*.md`.
|
|
261
271
|
|
|
272
|
+
`research setup status --json` reports credential persistence separately from
|
|
273
|
+
readiness. It also reports the effective exact-npx CLI package/version/root,
|
|
274
|
+
the selected project orchestrator, any temporary recovery shim, ignored global
|
|
275
|
+
same-name Skills, legacy wrappers that still contain an unmanaged PATH CLI
|
|
276
|
+
fallback, and the real failed source/immutable ref/cache state when checkout is
|
|
277
|
+
retryable. A direct `research search` inside a managed workspace stops before
|
|
278
|
+
network access and returns the same broker-vs-standalone and setup provenance;
|
|
279
|
+
it never converts a stored broker credential into an ambient credential.
|
|
280
|
+
|
|
262
281
|
The default `internet-research` profile selects Brave Web Search and News
|
|
263
282
|
Search. `internet-research-with-context` additionally selects the
|
|
264
283
|
subscription-dependent LLM Context endpoint, while
|
|
@@ -2,8 +2,9 @@ import { runEdgeSearch } from "../edge-search.js";
|
|
|
2
2
|
import { CliError } from "../errors.js";
|
|
3
3
|
import { readJsonInput, stringifyJson, write } from "../io.js";
|
|
4
4
|
import { parseStrictArgs, strictBoolean, strictString } from "../strict-args.js";
|
|
5
|
-
import { parseResearchSources, researchSourceConfig, resolveResearchConfig } from "./config.js";
|
|
5
|
+
import { parseResearchSources, researchSourceConfig, resolveResearchConfig, } from "./config.js";
|
|
6
6
|
import { researchOrchestrationHelp, runResearchOrchestrationCommand } from "./orchestration.js";
|
|
7
|
+
import { inspectResearchContext } from "./workspace/context.js";
|
|
7
8
|
const RESEARCH_SEARCH_OPTIONS = {
|
|
8
9
|
help: "boolean",
|
|
9
10
|
json: "boolean",
|
|
@@ -88,6 +89,7 @@ async function runResearchSearchCommand(argv, io) {
|
|
|
88
89
|
}
|
|
89
90
|
const sourceIds = parseResearchSources(strictString(args, "sources"));
|
|
90
91
|
const config = resolveResearchConfig(args, io.env);
|
|
92
|
+
await assertStandaloneSearchContext(io.env, sourceIds, config);
|
|
91
93
|
const inputPath = strictString(args, "input");
|
|
92
94
|
const body = researchRequestBody(args);
|
|
93
95
|
const result = await runEdgeSearch({
|
|
@@ -101,6 +103,61 @@ async function runResearchSearchCommand(argv, io) {
|
|
|
101
103
|
writeSearchResult(io, result, strictBoolean(args, "json"));
|
|
102
104
|
return 0;
|
|
103
105
|
}
|
|
106
|
+
async function assertStandaloneSearchContext(environment, sourceIds, config) {
|
|
107
|
+
const context = await inspectResearchContext(process.cwd());
|
|
108
|
+
if (context.role !== "setup" && context.role !== "workspace")
|
|
109
|
+
return;
|
|
110
|
+
const setup = context.setup;
|
|
111
|
+
const ready = setup?.status === "ready";
|
|
112
|
+
const blocked = setup?.status === "blocked";
|
|
113
|
+
const setupStatus = context.root
|
|
114
|
+
? await import("./workspace/setup.js")
|
|
115
|
+
.then(({ inspectResearchSetupStatus }) => inspectResearchSetupStatus(context.root, environment))
|
|
116
|
+
.catch(() => null)
|
|
117
|
+
: null;
|
|
118
|
+
const configuredBrokerIds = setupStatus?.credentialReadiness.configuredIds ?? [];
|
|
119
|
+
const standaloneConfiguredSources = sourceIds.filter((sourceId) => config.sources[sourceId].apiKey.length > 0);
|
|
120
|
+
const standaloneCredential = standaloneConfiguredSources.length === 0
|
|
121
|
+
? "absent"
|
|
122
|
+
: standaloneConfiguredSources.length === sourceIds.length
|
|
123
|
+
? "present"
|
|
124
|
+
: "partial";
|
|
125
|
+
throw new CliError(ready
|
|
126
|
+
? "Direct research search is disabled inside an Auto Research workspace."
|
|
127
|
+
: blocked
|
|
128
|
+
? "Broker credentials may be stored, but Auto Research setup is blocked; standalone search cannot consume broker credentials."
|
|
129
|
+
: "Auto Research setup is incomplete; standalone search will not bypass it.", {
|
|
130
|
+
code: ready
|
|
131
|
+
? "AUTO_RESEARCH_BROKER_REQUIRED"
|
|
132
|
+
: blocked
|
|
133
|
+
? "AUTO_RESEARCH_SETUP_BLOCKED"
|
|
134
|
+
: "AUTO_RESEARCH_SETUP_INCOMPLETE",
|
|
135
|
+
exitCode: 3,
|
|
136
|
+
details: {
|
|
137
|
+
executionMode: "managed-workspace",
|
|
138
|
+
requestedExecutionMode: "standalone",
|
|
139
|
+
recommendedExecutionMode: "managed-workspace",
|
|
140
|
+
credentialScope: "broker",
|
|
141
|
+
brokerCredentialStore: configuredBrokerIds.length > 0 ? "present" : "absent",
|
|
142
|
+
brokerConfiguredCredentialIds: configuredBrokerIds,
|
|
143
|
+
standaloneCredential,
|
|
144
|
+
standaloneConfiguredSources,
|
|
145
|
+
networkAttempted: false,
|
|
146
|
+
workspace: context.root,
|
|
147
|
+
setupStatus: setup?.status ?? "missing",
|
|
148
|
+
failedStep: setup?.blocker?.step ?? setup?.currentStep ?? null,
|
|
149
|
+
setupBlocker: setup?.blocker ?? null,
|
|
150
|
+
effectiveCli: setupStatus?.provenance.effectiveCli ?? setup?.runtime ?? null,
|
|
151
|
+
effectiveSkill: setupStatus?.provenance.selectedOrchestrator ?? null,
|
|
152
|
+
recoveryShims: setupStatus?.provenance.recoveryShims ?? [],
|
|
153
|
+
ambientCli: setupStatus?.provenance.ambientCli ?? null,
|
|
154
|
+
ambientSkillConflicts: setupStatus?.provenance.ambientSkillConflicts ?? [],
|
|
155
|
+
minimumAction: setup?.next?.retryCommand ??
|
|
156
|
+
"Use the project evidence broker through tiangong-auto-research; do not provide ambient credentials.",
|
|
157
|
+
retryCommand: setup?.next?.retryCommand ?? null,
|
|
158
|
+
},
|
|
159
|
+
});
|
|
160
|
+
}
|
|
104
161
|
function researchRequestBody(args) {
|
|
105
162
|
const inputPath = strictString(args, "input");
|
|
106
163
|
if (inputPath) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/research/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/research/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,3 +7,4 @@ export declare const SETUP_OPERATIONS: readonly ["research.context.inspect", "re
|
|
|
7
7
|
export declare const UNMANAGED_OPERATIONS: readonly ["research.context.inspect", "research.capability.catalog", "research.workspace.init", "research.setup.catalog", "research.setup.plan"];
|
|
8
8
|
export declare const INVALID_OPERATIONS: readonly ["research.context.inspect"];
|
|
9
9
|
export declare function packageVersion(): string;
|
|
10
|
+
export declare function packageRoot(): string;
|
|
@@ -55,12 +55,14 @@ export const UNMANAGED_OPERATIONS = [
|
|
|
55
55
|
];
|
|
56
56
|
export const INVALID_OPERATIONS = ["research.context.inspect"];
|
|
57
57
|
export function packageVersion() {
|
|
58
|
-
const
|
|
59
|
-
const packagePath = resolve(moduleDirectory, "../../../package.json");
|
|
58
|
+
const packagePath = resolve(packageRoot(), "package.json");
|
|
60
59
|
const value = JSON.parse(readFileSync(packagePath, "utf8"));
|
|
61
60
|
if (typeof value.version !== "string" || !value.version.trim()) {
|
|
62
61
|
throw new Error("Package version is unavailable.");
|
|
63
62
|
}
|
|
64
63
|
return value.version;
|
|
65
64
|
}
|
|
65
|
+
export function packageRoot() {
|
|
66
|
+
return resolve(dirname(fileURLToPath(import.meta.url)), "../../..");
|
|
67
|
+
}
|
|
66
68
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/research/workspace/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,CAAC,MAAM,0BAA0B,GAAG,oBAAoB,CAAC;AAC/D,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAU,CAAC;AACpD,MAAM,CAAC,MAAM,qBAAqB,GAAG,kBAA2B,CAAC;AAEjE,MAAM,CAAC,MAAM,8BAA8B,GAAG,IAAI,GAAG,CAAC;IACpD,cAAc;IACd,iBAAiB;IACjB,kBAAkB;IAClB,oBAAoB;CACrB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,0BAA0B;IAC1B,2BAA2B;IAC3B,6BAA6B;IAC7B,+BAA+B;IAC/B,4BAA4B;IAC5B,4BAA4B;IAC5B,oCAAoC;IACpC,0BAA0B;IAC1B,4BAA4B;IAC5B,uBAAuB;IACvB,4BAA4B;IAC5B,4BAA4B;IAC5B,wBAAwB;IACxB,uBAAuB;IACvB,sBAAsB;IACtB,iBAAiB;IACjB,cAAc;IACd,wBAAwB;IACxB,qBAAqB;IACrB,sBAAsB;IACtB,uBAAuB;IACvB,uBAAuB;IACvB,+BAA+B;IAC/B,sBAAsB;IACtB,uBAAuB;IACvB,wBAAwB;CAChB,CAAC;AAEX,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,0BAA0B;IAC1B,wBAAwB;IACxB,qBAAqB;IACrB,sBAAsB;IACtB,uBAAuB;IACvB,sBAAsB;CACd,CAAC;AAEX,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,0BAA0B;IAC1B,6BAA6B;IAC7B,yBAAyB;IACzB,wBAAwB;IACxB,qBAAqB;CACb,CAAC;AAEX,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,0BAA0B,CAAU,CAAC;AAExE,MAAM,UAAU,cAAc;IAC5B,MAAM,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/research/workspace/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,CAAC,MAAM,0BAA0B,GAAG,oBAAoB,CAAC;AAC/D,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAU,CAAC;AACpD,MAAM,CAAC,MAAM,qBAAqB,GAAG,kBAA2B,CAAC;AAEjE,MAAM,CAAC,MAAM,8BAA8B,GAAG,IAAI,GAAG,CAAC;IACpD,cAAc;IACd,iBAAiB;IACjB,kBAAkB;IAClB,oBAAoB;CACrB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,0BAA0B;IAC1B,2BAA2B;IAC3B,6BAA6B;IAC7B,+BAA+B;IAC/B,4BAA4B;IAC5B,4BAA4B;IAC5B,oCAAoC;IACpC,0BAA0B;IAC1B,4BAA4B;IAC5B,uBAAuB;IACvB,4BAA4B;IAC5B,4BAA4B;IAC5B,wBAAwB;IACxB,uBAAuB;IACvB,sBAAsB;IACtB,iBAAiB;IACjB,cAAc;IACd,wBAAwB;IACxB,qBAAqB;IACrB,sBAAsB;IACtB,uBAAuB;IACvB,uBAAuB;IACvB,+BAA+B;IAC/B,sBAAsB;IACtB,uBAAuB;IACvB,wBAAwB;CAChB,CAAC;AAEX,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,0BAA0B;IAC1B,wBAAwB;IACxB,qBAAqB;IACrB,sBAAsB;IACtB,uBAAuB;IACvB,sBAAsB;CACd,CAAC;AAEX,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,0BAA0B;IAC1B,6BAA6B;IAC7B,yBAAyB;IACzB,wBAAwB;IACxB,qBAAqB;CACb,CAAC;AAEX,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,0BAA0B,CAAU,CAAC;AAExE,MAAM,UAAU,cAAc;IAC5B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,EAAE,cAAc,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAA0B,CAAC;IACrF,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AACtE,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { lstat } from "node:fs/promises";
|
|
1
|
+
import { lstat, realpath } from "node:fs/promises";
|
|
2
2
|
import { dirname, join, parse, resolve } from "node:path";
|
|
3
|
-
import { INVALID_OPERATIONS, RESEARCH_CONTROL_DIRECTORY, SETUP_OPERATIONS, UNMANAGED_OPERATIONS, WORKSPACE_OPERATIONS, } from "./constants.js";
|
|
3
|
+
import { INVALID_OPERATIONS, RESEARCH_PACKAGE_NAME, RESEARCH_CONTROL_DIRECTORY, SETUP_OPERATIONS, UNMANAGED_OPERATIONS, WORKSPACE_OPERATIONS, } from "./constants.js";
|
|
4
|
+
import { exactResearchCliCommand, researchSetupApplyCommand, researchSetupRetryCommand, } from "./setup-invocation.js";
|
|
4
5
|
import { isObject, pathExists, readJsonFile } from "./storage.js";
|
|
5
6
|
export async function inspectResearchContext(selectedPath) {
|
|
6
7
|
const canonical = resolve(selectedPath);
|
|
@@ -9,15 +10,19 @@ export async function inspectResearchContext(selectedPath) {
|
|
|
9
10
|
while (true) {
|
|
10
11
|
const control = join(cursor, RESEARCH_CONTROL_DIRECTORY);
|
|
11
12
|
if (await pathExists(control)) {
|
|
13
|
+
const workspaceRoot = await realpath(cursor).catch(() => cursor);
|
|
14
|
+
const workspaceControl = join(workspaceRoot, RESEARCH_CONTROL_DIRECTORY);
|
|
15
|
+
const setup = await inspectManagedSetup(workspaceControl, workspaceRoot);
|
|
12
16
|
const markerPath = join(control, "workspace.json");
|
|
13
17
|
if (!(await pathExists(markerPath))) {
|
|
14
|
-
if (
|
|
18
|
+
if (setup) {
|
|
15
19
|
return {
|
|
16
20
|
role: "setup",
|
|
17
21
|
selectedPath: canonical,
|
|
18
22
|
root: cursor,
|
|
19
23
|
allowedOperations: [...SETUP_OPERATIONS],
|
|
20
24
|
violations: [],
|
|
25
|
+
setup,
|
|
21
26
|
};
|
|
22
27
|
}
|
|
23
28
|
return {
|
|
@@ -44,6 +49,7 @@ export async function inspectResearchContext(selectedPath) {
|
|
|
44
49
|
root: cursor,
|
|
45
50
|
allowedOperations: [...WORKSPACE_OPERATIONS],
|
|
46
51
|
violations: [],
|
|
52
|
+
...(setup ? { setup } : {}),
|
|
47
53
|
};
|
|
48
54
|
}
|
|
49
55
|
catch (error) {
|
|
@@ -63,21 +69,110 @@ export async function inspectResearchContext(selectedPath) {
|
|
|
63
69
|
violations: [],
|
|
64
70
|
};
|
|
65
71
|
}
|
|
66
|
-
async function
|
|
72
|
+
async function inspectManagedSetup(control, root) {
|
|
67
73
|
const planPath = join(control, "setup-plan.json");
|
|
68
74
|
if (!(await pathExists(planPath)))
|
|
69
|
-
return
|
|
75
|
+
return null;
|
|
70
76
|
try {
|
|
71
77
|
const plan = await readJsonFile(planPath, "Research setup plan");
|
|
72
|
-
|
|
73
|
-
plan.schemaVersion
|
|
74
|
-
plan.kind
|
|
75
|
-
|
|
76
|
-
|
|
78
|
+
if (!isObject(plan) ||
|
|
79
|
+
plan.schemaVersion !== 1 ||
|
|
80
|
+
plan.kind !== "tiangong-research-setup-plan" ||
|
|
81
|
+
!isObject(plan.cli) ||
|
|
82
|
+
plan.cli.package !== RESEARCH_PACKAGE_NAME ||
|
|
83
|
+
typeof plan.cli.version !== "string" ||
|
|
84
|
+
!/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/.test(plan.cli.version) ||
|
|
85
|
+
typeof plan.planSha256 !== "string" ||
|
|
86
|
+
!/^[0-9a-f]{64}$/.test(plan.planSha256)) {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
const state = await readSetupStateSummary(control);
|
|
90
|
+
const runtimeSource = (await hasMatchingRuntimeLock(control, plan.cli.version))
|
|
91
|
+
? "runtime-lock"
|
|
92
|
+
: "setup-plan";
|
|
93
|
+
const blocker = state.lastError
|
|
94
|
+
? {
|
|
95
|
+
...state.lastError,
|
|
96
|
+
retryCommand: researchSetupRetryCommand({
|
|
97
|
+
version: plan.cli.version,
|
|
98
|
+
workspace: root,
|
|
99
|
+
step: state.lastError.step,
|
|
100
|
+
}),
|
|
101
|
+
}
|
|
102
|
+
: null;
|
|
103
|
+
const next = state.status === "ready"
|
|
104
|
+
? null
|
|
105
|
+
: state.status === "pending"
|
|
106
|
+
? {
|
|
107
|
+
action: "apply",
|
|
108
|
+
retryCommand: researchSetupApplyCommand({
|
|
109
|
+
version: plan.cli.version,
|
|
110
|
+
planPath,
|
|
111
|
+
}),
|
|
112
|
+
}
|
|
113
|
+
: state.status === "blocked" && blocker
|
|
114
|
+
? { action: "retry", retryCommand: blocker.retryCommand }
|
|
115
|
+
: state.status === "applying"
|
|
116
|
+
? {
|
|
117
|
+
action: "inspect",
|
|
118
|
+
retryCommand: exactResearchCliCommand(["research", "setup", "status", "--workspace", root, "--json"], plan.cli.version),
|
|
119
|
+
}
|
|
120
|
+
: {
|
|
121
|
+
action: "doctor",
|
|
122
|
+
retryCommand: exactResearchCliCommand(["research", "setup", "doctor", "--workspace", root, "--json"], plan.cli.version),
|
|
123
|
+
};
|
|
124
|
+
return {
|
|
125
|
+
status: state.status,
|
|
126
|
+
currentStep: state.currentStep,
|
|
127
|
+
blocker,
|
|
128
|
+
runtime: {
|
|
129
|
+
packageName: RESEARCH_PACKAGE_NAME,
|
|
130
|
+
packageVersion: plan.cli.version,
|
|
131
|
+
source: runtimeSource,
|
|
132
|
+
},
|
|
133
|
+
next,
|
|
134
|
+
};
|
|
77
135
|
}
|
|
78
136
|
catch {
|
|
79
|
-
return
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
async function readSetupStateSummary(control) {
|
|
141
|
+
const statePath = join(control, "setup-state.json");
|
|
142
|
+
if (!(await pathExists(statePath))) {
|
|
143
|
+
return { status: "pending", currentStep: null, lastError: null };
|
|
80
144
|
}
|
|
145
|
+
const state = await readJsonFile(statePath, "Research setup state");
|
|
146
|
+
if (!isObject(state) ||
|
|
147
|
+
!["pending", "applying", "partially-ready", "ready", "blocked"].includes(String(state.status))) {
|
|
148
|
+
return { status: "pending", currentStep: null, lastError: null };
|
|
149
|
+
}
|
|
150
|
+
const lastError = isSetupBlocker(state.lastError) ? state.lastError : null;
|
|
151
|
+
return {
|
|
152
|
+
status: state.status,
|
|
153
|
+
currentStep: typeof state.currentStep === "string" ? state.currentStep : null,
|
|
154
|
+
lastError,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
async function hasMatchingRuntimeLock(control, version) {
|
|
158
|
+
const path = join(control, "runtime-lock.json");
|
|
159
|
+
const info = await lstat(path).catch(() => undefined);
|
|
160
|
+
if (!info?.isFile() || info.isSymbolicLink())
|
|
161
|
+
return false;
|
|
162
|
+
const lock = await readJsonFile(path, "Research runtime lock").catch(() => null);
|
|
163
|
+
return (isObject(lock) &&
|
|
164
|
+
lock.schemaVersion === 1 &&
|
|
165
|
+
lock.packageName === RESEARCH_PACKAGE_NAME &&
|
|
166
|
+
lock.packageVersion === version);
|
|
167
|
+
}
|
|
168
|
+
function isSetupBlocker(value) {
|
|
169
|
+
return (isObject(value) &&
|
|
170
|
+
typeof value.code === "string" &&
|
|
171
|
+
typeof value.step === "string" &&
|
|
172
|
+
typeof value.reason === "string" &&
|
|
173
|
+
typeof value.minimumAction === "string" &&
|
|
174
|
+
typeof value.retryCommand === "string" &&
|
|
175
|
+
(value.diagnostics === undefined || isObject(value.diagnostics)));
|
|
81
176
|
}
|
|
82
177
|
export function isWorkspaceMarker(value) {
|
|
83
178
|
return (isObject(value) &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/research/workspace/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/research/workspace/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@ export const RESEARCH_SETUP_SELECTION_GUIDANCE = {
|
|
|
15
15
|
},
|
|
16
16
|
};
|
|
17
17
|
const BRAVE_COMMIT = "3e088af66eb61f1c207c22b2be0278ca8744d1d1";
|
|
18
|
-
const TIANGONG_SKILLS_COMMIT = "
|
|
18
|
+
const TIANGONG_SKILLS_COMMIT = "c9470b88f52d35629d3d9fb21ee7713048b44c3b";
|
|
19
19
|
const ANTHROPIC_SKILLS_COMMIT = "f17010c9bb483898c1d9c9f42dde2b3a98889434";
|
|
20
20
|
const PPT_MASTER_COMMIT = "4343bd8bfc91e79dfb9680681a378476cc38a280";
|
|
21
21
|
export const RESEARCH_SETUP_INSTALLER = {
|
|
@@ -125,7 +125,7 @@ export const RESEARCH_SETUP_SKILLS = [
|
|
|
125
125
|
skillName: "tiangong-auto-research",
|
|
126
126
|
sourceId: "tiangong-ai-skills",
|
|
127
127
|
sourceRelativePath: "tiangong-auto-research",
|
|
128
|
-
expectedTreeSha256: "
|
|
128
|
+
expectedTreeSha256: "65c8acc41c8cc83575b433b8099528d72d1a99d4bb1178eb5568273516b9f065",
|
|
129
129
|
tier: "orchestrator",
|
|
130
130
|
role: "orchestrator",
|
|
131
131
|
purpose: "Route ordinary research tasks into the reviewed Tiangong setup, preflight, execution, review, and closure workflow.",
|
|
@@ -250,7 +250,7 @@ export const RESEARCH_SETUP_SKILLS = [
|
|
|
250
250
|
skillName: "tiangong-kb-sci-search",
|
|
251
251
|
sourceId: "tiangong-ai-skills",
|
|
252
252
|
sourceRelativePath: "tiangong-kb-sci-search",
|
|
253
|
-
expectedTreeSha256: "
|
|
253
|
+
expectedTreeSha256: "7308e5d88e5dbae113da7e401b8ecaf4b8e798bfe52ad10b99d188b2bd408b30",
|
|
254
254
|
tier: "enhanced",
|
|
255
255
|
role: "evidence-capability",
|
|
256
256
|
purpose: "Owner-authorized Tiangong SCI database discovery through a bounded JSON POST broker.",
|
|
@@ -271,7 +271,7 @@ export const RESEARCH_SETUP_SKILLS = [
|
|
|
271
271
|
skillName: "tiangong-kb-report-search",
|
|
272
272
|
sourceId: "tiangong-ai-skills",
|
|
273
273
|
sourceRelativePath: "tiangong-kb-report-search",
|
|
274
|
-
expectedTreeSha256: "
|
|
274
|
+
expectedTreeSha256: "d7f9eba27d965260edbe2760dc28352514d87d660b7a9f20bd6f44035f68f600",
|
|
275
275
|
tier: "enhanced",
|
|
276
276
|
role: "evidence-capability",
|
|
277
277
|
purpose: "Owner-authorized Tiangong report database discovery through a bounded JSON POST broker.",
|
|
@@ -292,7 +292,7 @@ export const RESEARCH_SETUP_SKILLS = [
|
|
|
292
292
|
skillName: "tiangong-kb-patent-search",
|
|
293
293
|
sourceId: "tiangong-ai-skills",
|
|
294
294
|
sourceRelativePath: "tiangong-kb-patent-search",
|
|
295
|
-
expectedTreeSha256: "
|
|
295
|
+
expectedTreeSha256: "3dfabe32d50709f728595e7f482da4f42a7f149cc7cfb239e9ae98de93bcbcd6",
|
|
296
296
|
tier: "enhanced",
|
|
297
297
|
role: "evidence-capability",
|
|
298
298
|
purpose: "Owner-authorized Tiangong patent database discovery through a bounded JSON POST broker.",
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare function exactResearchCliCommand(args: readonly string[], version?: string): string;
|
|
2
|
+
export declare function pinResearchCliCommand(command: string, version?: string): string;
|
|
3
|
+
export declare function researchSetupApplyCommand(input: {
|
|
4
|
+
version: string;
|
|
5
|
+
planPath: string;
|
|
6
|
+
}): string;
|
|
7
|
+
export declare function researchSetupRetryCommand(input: {
|
|
8
|
+
version: string;
|
|
9
|
+
workspace: string;
|
|
10
|
+
step: string;
|
|
11
|
+
}): string;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { RESEARCH_PACKAGE_NAME, packageVersion } from "./constants.js";
|
|
2
|
+
const SAFE_SHELL_WORD = /^[A-Za-z0-9_@%+=:,./-]+$/;
|
|
3
|
+
export function exactResearchCliCommand(args, version = packageVersion()) {
|
|
4
|
+
return [
|
|
5
|
+
"npx",
|
|
6
|
+
"--yes",
|
|
7
|
+
"--package",
|
|
8
|
+
`${RESEARCH_PACKAGE_NAME}@${version}`,
|
|
9
|
+
"--",
|
|
10
|
+
"tiangong-ai",
|
|
11
|
+
...args,
|
|
12
|
+
]
|
|
13
|
+
.map(shellWord)
|
|
14
|
+
.join(" ");
|
|
15
|
+
}
|
|
16
|
+
export function pinResearchCliCommand(command, version = packageVersion()) {
|
|
17
|
+
const trimmed = command.trim();
|
|
18
|
+
if (!trimmed.startsWith("tiangong-ai ") && trimmed !== "tiangong-ai")
|
|
19
|
+
return trimmed;
|
|
20
|
+
const prefix = exactResearchCliCommand([], version);
|
|
21
|
+
return trimmed === "tiangong-ai" ? prefix : `${prefix} ${trimmed.slice("tiangong-ai ".length)}`;
|
|
22
|
+
}
|
|
23
|
+
export function researchSetupApplyCommand(input) {
|
|
24
|
+
return exactResearchCliCommand(["research", "setup", "apply", "--plan", input.planPath, "--json"], input.version);
|
|
25
|
+
}
|
|
26
|
+
export function researchSetupRetryCommand(input) {
|
|
27
|
+
return exactResearchCliCommand(["research", "setup", "retry", "--step", input.step, "--workspace", input.workspace, "--json"], input.version);
|
|
28
|
+
}
|
|
29
|
+
function shellWord(value) {
|
|
30
|
+
if (SAFE_SHELL_WORD.test(value))
|
|
31
|
+
return value;
|
|
32
|
+
return `'${value.replaceAll("'", `'\"'\"'`)}'`;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=setup-invocation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-invocation.js","sourceRoot":"","sources":["../../../src/research/workspace/setup-invocation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEvE,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAEnD,MAAM,UAAU,uBAAuB,CACrC,IAAuB,EACvB,UAAkB,cAAc,EAAE;IAElC,OAAO;QACL,KAAK;QACL,OAAO;QACP,WAAW;QACX,GAAG,qBAAqB,IAAI,OAAO,EAAE;QACrC,IAAI;QACJ,aAAa;QACb,GAAG,IAAI;KACR;SACE,GAAG,CAAC,SAAS,CAAC;SACd,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAe,EAAE,UAAkB,cAAc,EAAE;IACvF,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,OAAO,KAAK,aAAa;QAAE,OAAO,OAAO,CAAC;IACrF,MAAM,MAAM,GAAG,uBAAuB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACpD,OAAO,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;AAClG,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAA4C;IACpF,OAAO,uBAAuB,CAC5B,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAClE,KAAK,CAAC,OAAO,CACd,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAIzC;IACC,OAAO,uBAAuB,CAC5B,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,EAC9F,KAAK,CAAC,OAAO,CACd,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9C,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC;AACjD,CAAC"}
|
|
@@ -97,6 +97,7 @@ export interface ResearchSetupState {
|
|
|
97
97
|
reason: string;
|
|
98
98
|
minimumAction: string;
|
|
99
99
|
retryCommand: string;
|
|
100
|
+
diagnostics?: Record<string, unknown>;
|
|
100
101
|
} | null;
|
|
101
102
|
}
|
|
102
103
|
export interface ResearchSetupPlanInput {
|
|
@@ -209,14 +210,58 @@ export declare function inspectResearchSetupStatus(workspace: string, environmen
|
|
|
209
210
|
observedTreeSha256: string | null;
|
|
210
211
|
detail: string;
|
|
211
212
|
}[];
|
|
213
|
+
credentialReadiness: {
|
|
214
|
+
valuesEmitted: false;
|
|
215
|
+
configuredIds: string[];
|
|
216
|
+
missingRequiredIds: string[];
|
|
217
|
+
scopes: Array<"adapter" | "broker">;
|
|
218
|
+
};
|
|
219
|
+
provenance: {
|
|
220
|
+
effectiveCli: {
|
|
221
|
+
packageName: "@tiangong-ai/cli";
|
|
222
|
+
packageVersion: string;
|
|
223
|
+
packageRoot: string;
|
|
224
|
+
invocationMode: "exact-npx";
|
|
225
|
+
commandPrefix: string;
|
|
226
|
+
};
|
|
227
|
+
ambientCli: {
|
|
228
|
+
path: string;
|
|
229
|
+
ignoredByExactInvocation: true;
|
|
230
|
+
} | null;
|
|
231
|
+
ambientSkillConflicts: {
|
|
232
|
+
skillId: string;
|
|
233
|
+
skillName: string;
|
|
234
|
+
agent: ResearchSetupAgent;
|
|
235
|
+
path: string;
|
|
236
|
+
status: "blocked" | "drifted" | "matching";
|
|
237
|
+
observedTreeSha256: string | null;
|
|
238
|
+
expectedTreeSha256: string;
|
|
239
|
+
unmanagedPathCliFallback: boolean;
|
|
240
|
+
ignoredByProjectScope: true;
|
|
241
|
+
}[];
|
|
242
|
+
recoveryShims: {
|
|
243
|
+
agent: ResearchSetupAgent;
|
|
244
|
+
path: string;
|
|
245
|
+
status: "blocked" | "drifted" | "installed";
|
|
246
|
+
planSha256: string | null;
|
|
247
|
+
cliVersion: string | null;
|
|
248
|
+
recoveryOnly: true;
|
|
249
|
+
}[];
|
|
250
|
+
selectedOrchestrator: {
|
|
251
|
+
skillId: "tiangong.auto-research";
|
|
252
|
+
scope: ResearchSetupScope;
|
|
253
|
+
preferredPath: string | null;
|
|
254
|
+
installations: {
|
|
255
|
+
agent: ResearchSetupAgent;
|
|
256
|
+
path: string;
|
|
257
|
+
status: "blocked" | "drifted" | "missing" | "installed";
|
|
258
|
+
observedTreeSha256: string | null;
|
|
259
|
+
}[];
|
|
260
|
+
} | null;
|
|
261
|
+
};
|
|
212
262
|
report: unknown;
|
|
213
263
|
next: {
|
|
214
|
-
|
|
215
|
-
step: string;
|
|
216
|
-
reason: string;
|
|
217
|
-
minimumAction: string;
|
|
218
|
-
retryCommand: string;
|
|
219
|
-
} | {
|
|
264
|
+
action: "apply" | "retry" | "doctor" | "inspect";
|
|
220
265
|
minimumAction: string;
|
|
221
266
|
retryCommand: string;
|
|
222
267
|
} | null;
|