@tiangong-ai/cli 0.0.13 → 0.0.15
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 +4 -2
- package/README.md +59 -2
- package/dist/args.d.ts +13 -0
- package/dist/args.js +72 -0
- package/dist/args.js.map +1 -0
- package/dist/cli.d.ts +5 -21
- package/dist/cli.js +27 -445
- package/dist/cli.js.map +1 -1
- package/dist/data.d.ts +3 -0
- package/dist/data.js +16 -0
- package/dist/data.js.map +1 -0
- package/dist/edge-search.d.ts +54 -0
- package/dist/edge-search.js +108 -0
- package/dist/edge-search.js.map +1 -0
- package/dist/education/commands.d.ts +2 -0
- package/dist/education/commands.js +144 -0
- package/dist/education/commands.js.map +1 -0
- package/dist/education/config.d.ts +24 -0
- package/dist/education/config.js +127 -0
- package/dist/education/config.js.map +1 -0
- package/dist/education/types.d.ts +1 -0
- package/dist/education/types.js +2 -0
- package/dist/education/types.js.map +1 -0
- package/dist/env.d.ts +2 -0
- package/dist/env.js +42 -0
- package/dist/env.js.map +1 -0
- package/dist/errors.d.ts +24 -0
- package/dist/errors.js +53 -0
- package/dist/errors.js.map +1 -0
- package/dist/http.d.ts +28 -0
- package/dist/http.js +80 -0
- package/dist/http.js.map +1 -0
- package/dist/io.d.ts +11 -0
- package/dist/io.js +33 -0
- package/dist/io.js.map +1 -0
- package/dist/kb/client.d.ts +19 -0
- package/dist/kb/client.js +71 -0
- package/dist/kb/client.js.map +1 -0
- package/dist/kb/config.d.ts +12 -0
- package/dist/kb/config.js +26 -0
- package/dist/kb/config.js.map +1 -0
- package/dist/kb/pipeline-health.d.ts +10 -0
- package/dist/kb/pipeline-health.js +68 -0
- package/dist/kb/pipeline-health.js.map +1 -0
- package/dist/kb/selector.d.ts +3 -0
- package/dist/kb/selector.js +40 -0
- package/dist/kb/selector.js.map +1 -0
- package/dist/kb/status.d.ts +19 -0
- package/dist/kb/status.js +74 -0
- package/dist/kb/status.js.map +1 -0
- package/dist/research/commands.d.ts +2 -0
- package/dist/research/commands.js +147 -0
- package/dist/research/commands.js.map +1 -0
- package/dist/research/config.d.ts +23 -0
- package/dist/research/config.js +120 -0
- package/dist/research/config.js.map +1 -0
- package/dist/research/types.d.ts +1 -0
- package/dist/research/types.js +2 -0
- package/dist/research/types.js.map +1 -0
- package/dist/strict-args.d.ts +8 -0
- package/dist/strict-args.js +63 -0
- package/dist/strict-args.js.map +1 -0
- package/package.json +2 -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-05-
|
|
19
|
-
lastReviewedCommit:
|
|
18
|
+
lastReviewedAt: 2026-05-26
|
|
19
|
+
lastReviewedCommit: 6a05f20d5e167b770fce1aa3286a7dbdd2e1cd0d
|
|
20
20
|
---
|
|
21
21
|
|
|
22
22
|
# Tiangong AI CLI Contract
|
|
@@ -44,6 +44,8 @@ This repository owns the Tiangong AI command-line interface.
|
|
|
44
44
|
- `tiangong-ai kb ingest export`
|
|
45
45
|
- `tiangong-ai kb collections`
|
|
46
46
|
- `tiangong-ai kb status`
|
|
47
|
+
- `tiangong-ai research search`
|
|
48
|
+
- `tiangong-ai education search`
|
|
47
49
|
|
|
48
50
|
## Validation
|
|
49
51
|
|
package/README.md
CHANGED
|
@@ -12,8 +12,8 @@ checkPaths:
|
|
|
12
12
|
- package.json
|
|
13
13
|
- bin/**
|
|
14
14
|
- src/**
|
|
15
|
-
lastReviewedAt: 2026-05-
|
|
16
|
-
lastReviewedCommit:
|
|
15
|
+
lastReviewedAt: 2026-05-26
|
|
16
|
+
lastReviewedCommit: 6a05f20d5e167b770fce1aa3286a7dbdd2e1cd0d
|
|
17
17
|
---
|
|
18
18
|
|
|
19
19
|
# Tiangong AI CLI
|
|
@@ -150,6 +150,63 @@ Check document status:
|
|
|
150
150
|
tiangong-ai kb ingest status <document-id>
|
|
151
151
|
```
|
|
152
152
|
|
|
153
|
+
## Research Search
|
|
154
|
+
|
|
155
|
+
Forward research-oriented search requests to SCI, report, and patent edge
|
|
156
|
+
search sources:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
tiangong-ai research search \
|
|
160
|
+
--input ./sci-request.json \
|
|
161
|
+
--sources all \
|
|
162
|
+
--dry-run \
|
|
163
|
+
--json
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Required environment:
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
TIANGONG_AI_APIKEY=
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
`--input <file>` reads a JSON object and forwards it unchanged as the POST body
|
|
173
|
+
to every selected source. Use `--dry-run` to emit the exact request plan,
|
|
174
|
+
including method, URL, masked headers, input path, body, and timeout
|
|
175
|
+
milliseconds, without remote calls.
|
|
176
|
+
For quick calls, `--query <text>` builds a minimal body with `query` plus
|
|
177
|
+
optional `--top-k`, `--ext-k`, and `--get-meta`.
|
|
178
|
+
|
|
179
|
+
`--sources` accepts concrete IDs and presets. `default` expands to `sci`; `all`
|
|
180
|
+
expands to `sci,report,patent`. Use source-specific endpoint or credential
|
|
181
|
+
overrides with `--sci-url`, `--report-url`, `--patent-url`,
|
|
182
|
+
`--sci-api-key`, `--report-api-key`, and `--patent-api-key`. When source URLs
|
|
183
|
+
are not provided, `--api-base-url` or `TIANGONG_AI_API_BASE_URL` may be a
|
|
184
|
+
Supabase project root, `/functions/v1`, or `/rest/v1`; the CLI derives the
|
|
185
|
+
Functions base URL and appends `sci_search`, `report_search`, or
|
|
186
|
+
`patent_search`.
|
|
187
|
+
|
|
188
|
+
## Education Search
|
|
189
|
+
|
|
190
|
+
Forward education-oriented search requests to course, education, and textbook
|
|
191
|
+
edge search sources:
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
tiangong-ai education search \
|
|
195
|
+
--query "activated sludge process principles" \
|
|
196
|
+
--sources all \
|
|
197
|
+
--json
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
`--input <file>` forwards the JSON request body unchanged. `--query <text>`
|
|
201
|
+
builds a minimal body with `query` plus optional `--top-k` and `--ext-k`.
|
|
202
|
+
`--sources default` expands to `course`; `--sources all` expands to
|
|
203
|
+
`course,edu,textbook`. `course` search can use a scoped bearer token through
|
|
204
|
+
`--bearer-token` or `TIANGONG_EDUCATION_BEARER_TOKEN`; all education sources can
|
|
205
|
+
use `--api-key` or `TIANGONG_AI_APIKEY`. When source URLs are not provided,
|
|
206
|
+
`--api-base-url` or `TIANGONG_AI_API_BASE_URL` may be a Supabase project root,
|
|
207
|
+
`/functions/v1`, or `/rest/v1`; the CLI derives the Functions base URL and
|
|
208
|
+
appends `course_search`, `edu_search`, or `textbook_search`.
|
|
209
|
+
|
|
153
210
|
## Boundary
|
|
154
211
|
|
|
155
212
|
The CLI is a thin local client. It sends bearer-token requests to the Tiangong
|
package/dist/args.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface ParsedArgs {
|
|
2
|
+
positionals: string[];
|
|
3
|
+
flags: Map<string, string | true>;
|
|
4
|
+
}
|
|
5
|
+
export declare function parseArgs(argv: string[]): ParsedArgs;
|
|
6
|
+
export declare function getString(args: ParsedArgs, name: string): string | undefined;
|
|
7
|
+
export declare function getBoolean(args: ParsedArgs, name: string): boolean;
|
|
8
|
+
export declare function getPositiveInteger(args: ParsedArgs, name: string, defaultValue: number): number;
|
|
9
|
+
export declare function getNonNegativeInteger(args: ParsedArgs, name: string, defaultValue: number): number;
|
|
10
|
+
export declare function nonNegativeIntegerValue(value: string | undefined, defaultValue: number, label: string): number;
|
|
11
|
+
export declare function getPositiveNumber(args: ParsedArgs, name: string, defaultValue: number): number;
|
|
12
|
+
export declare function positiveNumberValue(value: string | undefined, defaultValue: number, label: string): number;
|
|
13
|
+
export declare function positiveIntegerValue(value: string | undefined, defaultValue: number, label: string): number;
|
package/dist/args.js
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { CliError } from "./errors.js";
|
|
2
|
+
export function parseArgs(argv) {
|
|
3
|
+
const positionals = [];
|
|
4
|
+
const flags = new Map();
|
|
5
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
6
|
+
const arg = argv[index];
|
|
7
|
+
if (!arg)
|
|
8
|
+
continue;
|
|
9
|
+
if (!arg.startsWith("--")) {
|
|
10
|
+
positionals.push(arg);
|
|
11
|
+
continue;
|
|
12
|
+
}
|
|
13
|
+
const withoutPrefix = arg.slice(2);
|
|
14
|
+
const equalsIndex = withoutPrefix.indexOf("=");
|
|
15
|
+
if (equalsIndex >= 0) {
|
|
16
|
+
flags.set(withoutPrefix.slice(0, equalsIndex), withoutPrefix.slice(equalsIndex + 1));
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
const next = argv[index + 1];
|
|
20
|
+
if (next && !next.startsWith("--")) {
|
|
21
|
+
flags.set(withoutPrefix, next);
|
|
22
|
+
index += 1;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
flags.set(withoutPrefix, true);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return { positionals, flags };
|
|
29
|
+
}
|
|
30
|
+
export function getString(args, name) {
|
|
31
|
+
const value = args.flags.get(name);
|
|
32
|
+
if (typeof value !== "string" || value.trim() === "")
|
|
33
|
+
return undefined;
|
|
34
|
+
return value.trim();
|
|
35
|
+
}
|
|
36
|
+
export function getBoolean(args, name) {
|
|
37
|
+
return args.flags.get(name) === true || args.flags.get(name) === "true";
|
|
38
|
+
}
|
|
39
|
+
export function getPositiveInteger(args, name, defaultValue) {
|
|
40
|
+
return positiveIntegerValue(getString(args, name), defaultValue, `--${name}`);
|
|
41
|
+
}
|
|
42
|
+
export function getNonNegativeInteger(args, name, defaultValue) {
|
|
43
|
+
return nonNegativeIntegerValue(getString(args, name), defaultValue, `--${name}`);
|
|
44
|
+
}
|
|
45
|
+
export function nonNegativeIntegerValue(value, defaultValue, label) {
|
|
46
|
+
if (!value)
|
|
47
|
+
return defaultValue;
|
|
48
|
+
const parsed = Number(value);
|
|
49
|
+
if (!Number.isInteger(parsed) || parsed < 0)
|
|
50
|
+
throw new CliError(`${label} must be a non-negative integer.`);
|
|
51
|
+
return parsed;
|
|
52
|
+
}
|
|
53
|
+
export function getPositiveNumber(args, name, defaultValue) {
|
|
54
|
+
return positiveNumberValue(getString(args, name), defaultValue, `--${name}`);
|
|
55
|
+
}
|
|
56
|
+
export function positiveNumberValue(value, defaultValue, label) {
|
|
57
|
+
if (!value)
|
|
58
|
+
return defaultValue;
|
|
59
|
+
const parsed = Number(value);
|
|
60
|
+
if (!Number.isFinite(parsed) || parsed <= 0)
|
|
61
|
+
throw new CliError(`${label} must be a positive number.`);
|
|
62
|
+
return parsed;
|
|
63
|
+
}
|
|
64
|
+
export function positiveIntegerValue(value, defaultValue, label) {
|
|
65
|
+
if (!value)
|
|
66
|
+
return defaultValue;
|
|
67
|
+
const parsed = Number(value);
|
|
68
|
+
if (!Number.isInteger(parsed) || parsed <= 0)
|
|
69
|
+
throw new CliError(`${label} must be a positive integer.`);
|
|
70
|
+
return parsed;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=args.js.map
|
package/dist/args.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
CHANGED
|
@@ -1,22 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
export interface CliIO {
|
|
7
|
-
env: NodeJS.ProcessEnv;
|
|
8
|
-
stdout: Output;
|
|
9
|
-
stderr: Output;
|
|
10
|
-
}
|
|
11
|
-
interface ParsedArgs {
|
|
12
|
-
positionals: string[];
|
|
13
|
-
flags: Map<string, string | true>;
|
|
14
|
-
}
|
|
15
|
-
interface CollectionSelector {
|
|
16
|
-
field: "primary_collection_id" | "collection_path" | "collection_key" | "collection_name";
|
|
17
|
-
value: string;
|
|
18
|
-
}
|
|
1
|
+
import type { CliIO } from "./io.js";
|
|
2
|
+
export type { CliIO, Output } from "./io.js";
|
|
3
|
+
export { parseArgs } from "./args.js";
|
|
4
|
+
export { DEFAULT_API_BASE_URL, DEFAULT_API_PATH_PREFIX } from "./kb/config.js";
|
|
5
|
+
export { resolveCollectionSelector } from "./kb/selector.js";
|
|
19
6
|
export declare function runCli(argv: string[], io: CliIO): Promise<number>;
|
|
20
|
-
export declare function parseArgs(argv: string[]): ParsedArgs;
|
|
21
|
-
export declare function resolveCollectionSelector(args: ParsedArgs, env: NodeJS.ProcessEnv): CollectionSelector;
|
|
22
|
-
export {};
|