@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
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { runEdgeSearch } from "../edge-search.js";
|
|
2
|
+
import { CliError } from "../errors.js";
|
|
3
|
+
import { readJsonInput, stringifyJson, write } from "../io.js";
|
|
4
|
+
import { parseStrictArgs, strictBoolean, strictString } from "../strict-args.js";
|
|
5
|
+
import { parseResearchSources, researchSourceConfig, resolveResearchConfig } from "./config.js";
|
|
6
|
+
const RESEARCH_SEARCH_OPTIONS = {
|
|
7
|
+
help: "boolean",
|
|
8
|
+
json: "boolean",
|
|
9
|
+
"dry-run": "boolean",
|
|
10
|
+
input: "string",
|
|
11
|
+
query: "string",
|
|
12
|
+
claim: "string",
|
|
13
|
+
sources: "string",
|
|
14
|
+
"api-key": "string",
|
|
15
|
+
"api-base-url": "string",
|
|
16
|
+
"sci-api-key": "string",
|
|
17
|
+
"report-api-key": "string",
|
|
18
|
+
"patent-api-key": "string",
|
|
19
|
+
"sci-url": "string",
|
|
20
|
+
"report-url": "string",
|
|
21
|
+
"patent-url": "string",
|
|
22
|
+
region: "string",
|
|
23
|
+
timeout: "string",
|
|
24
|
+
"top-k": "string",
|
|
25
|
+
"ext-k": "string",
|
|
26
|
+
"get-meta": "boolean",
|
|
27
|
+
};
|
|
28
|
+
export async function runResearchCommand(argv, io) {
|
|
29
|
+
const [subcommand, ...rest] = argv;
|
|
30
|
+
if (!subcommand || subcommand === "--help" || subcommand === "-h") {
|
|
31
|
+
write(io.stdout, researchHelp());
|
|
32
|
+
return 0;
|
|
33
|
+
}
|
|
34
|
+
if (subcommand === "search") {
|
|
35
|
+
return runResearchSearchCommand(rest, io);
|
|
36
|
+
}
|
|
37
|
+
write(io.stdout, researchHelp());
|
|
38
|
+
return 1;
|
|
39
|
+
}
|
|
40
|
+
function researchHelp() {
|
|
41
|
+
return `Tiangong research commands
|
|
42
|
+
|
|
43
|
+
Usage:
|
|
44
|
+
tiangong-ai research search --input <request.json> [--sources default|all|sci|report|patent] [--dry-run] [--json]
|
|
45
|
+
tiangong-ai research search --query <query> [--sources default|all|sci|report|patent] [--dry-run] [--json]
|
|
46
|
+
|
|
47
|
+
Research search options:
|
|
48
|
+
--input <file>
|
|
49
|
+
JSON request body to forward unchanged to each selected edge function.
|
|
50
|
+
--query <text>
|
|
51
|
+
Convenience mode; builds {"query": text} plus optional --top-k/--ext-k/--get-meta.
|
|
52
|
+
--sources <csv> (default sci; all = sci,report,patent)
|
|
53
|
+
--dry-run
|
|
54
|
+
Print the exact POST request plan with masked credentials.
|
|
55
|
+
--api-key <token> or TIANGONG_AI_APIKEY
|
|
56
|
+
--api-base-url <url>
|
|
57
|
+
Supabase project root, /functions/v1, or /rest/v1 base URL.
|
|
58
|
+
--sci-api-key <token>, --report-api-key <token>, --patent-api-key <token>
|
|
59
|
+
--sci-url <url>, --report-url <url>, --patent-url <url>
|
|
60
|
+
--region <name>
|
|
61
|
+
--timeout <seconds>
|
|
62
|
+
--top-k <n>
|
|
63
|
+
--ext-k <n>
|
|
64
|
+
--get-meta
|
|
65
|
+
--json
|
|
66
|
+
`;
|
|
67
|
+
}
|
|
68
|
+
async function runResearchSearchCommand(argv, io) {
|
|
69
|
+
const args = parseStrictArgs(argv, RESEARCH_SEARCH_OPTIONS, "research search");
|
|
70
|
+
if (strictBoolean(args, "help")) {
|
|
71
|
+
write(io.stdout, researchHelp());
|
|
72
|
+
return 0;
|
|
73
|
+
}
|
|
74
|
+
if (args.positionals.length > 0) {
|
|
75
|
+
throw new CliError("research search does not accept positional arguments.", {
|
|
76
|
+
code: "INVALID_ARGS",
|
|
77
|
+
exitCode: 2,
|
|
78
|
+
details: { positionals: args.positionals },
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
const sourceIds = parseResearchSources(strictString(args, "sources"));
|
|
82
|
+
const config = resolveResearchConfig(args, io.env);
|
|
83
|
+
const inputPath = strictString(args, "input");
|
|
84
|
+
const body = researchRequestBody(args);
|
|
85
|
+
const result = await runEdgeSearch({
|
|
86
|
+
body,
|
|
87
|
+
inputPath,
|
|
88
|
+
sources: sourceIds.map((source) => ({ source, ...researchSourceConfig(config, source) })),
|
|
89
|
+
timeoutMs: config.timeoutSeconds * 1000,
|
|
90
|
+
dryRun: strictBoolean(args, "dry-run"),
|
|
91
|
+
missingCredentialHelp: "Provide --api-key, a source-specific API key option, or set TIANGONG_AI_APIKEY.",
|
|
92
|
+
});
|
|
93
|
+
writeSearchResult(io, result, strictBoolean(args, "json"));
|
|
94
|
+
return 0;
|
|
95
|
+
}
|
|
96
|
+
function researchRequestBody(args) {
|
|
97
|
+
const inputPath = strictString(args, "input");
|
|
98
|
+
if (inputPath) {
|
|
99
|
+
rejectInputModeBodyFlags(args, ["query", "claim", "top-k", "ext-k", "get-meta"]);
|
|
100
|
+
return readJsonInput(inputPath);
|
|
101
|
+
}
|
|
102
|
+
const query = strictString(args, "query") ?? strictString(args, "claim");
|
|
103
|
+
if (!query) {
|
|
104
|
+
throw new CliError("Usage: tiangong-ai research search --input <file> or --query <query>", {
|
|
105
|
+
code: "RESEARCH_QUERY_REQUIRED",
|
|
106
|
+
exitCode: 2,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
const body = { query };
|
|
110
|
+
const topK = optionalPositiveInteger(strictString(args, "top-k"), "--top-k");
|
|
111
|
+
const extK = optionalPositiveInteger(strictString(args, "ext-k"), "--ext-k");
|
|
112
|
+
if (topK !== undefined)
|
|
113
|
+
body.topK = topK;
|
|
114
|
+
if (extK !== undefined)
|
|
115
|
+
body.extK = extK;
|
|
116
|
+
if (strictBoolean(args, "get-meta"))
|
|
117
|
+
body.getMeta = true;
|
|
118
|
+
return body;
|
|
119
|
+
}
|
|
120
|
+
function rejectInputModeBodyFlags(args, bodyFlagNames) {
|
|
121
|
+
const present = bodyFlagNames.filter((name) => args.flags.has(name));
|
|
122
|
+
if (present.length === 0)
|
|
123
|
+
return;
|
|
124
|
+
throw new CliError(`--input cannot be combined with body-building flags: ${present.join(", ")}`, {
|
|
125
|
+
code: "INVALID_ARGS",
|
|
126
|
+
exitCode: 2,
|
|
127
|
+
details: { flags: present },
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
function optionalPositiveInteger(value, label) {
|
|
131
|
+
if (!value)
|
|
132
|
+
return undefined;
|
|
133
|
+
const parsed = Number(value);
|
|
134
|
+
if (!Number.isInteger(parsed) || parsed <= 0) {
|
|
135
|
+
throw new CliError(`${label} must be a positive integer.`, {
|
|
136
|
+
code: "INVALID_NUMERIC_OPTION",
|
|
137
|
+
exitCode: 2,
|
|
138
|
+
details: { label, value },
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
return parsed;
|
|
142
|
+
}
|
|
143
|
+
function writeSearchResult(io, result, compact) {
|
|
144
|
+
const output = !result.dryRun && result.responses.length === 1 ? result.responses[0]?.response : result;
|
|
145
|
+
write(io.stdout, stringifyJson(output, compact));
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/research/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type EdgeSearchAuthStrategy, type EdgeSearchSourceSpec } from "../edge-search.js";
|
|
2
|
+
import { type StrictParsedArgs } from "../strict-args.js";
|
|
3
|
+
import type { ResearchSourceId } from "./types.js";
|
|
4
|
+
export declare const DEFAULT_SCI_SEARCH_ENDPOINT = "sci_search";
|
|
5
|
+
export declare const DEFAULT_REPORT_SEARCH_ENDPOINT = "report_search";
|
|
6
|
+
export declare const DEFAULT_PATENT_SEARCH_ENDPOINT = "patent_search";
|
|
7
|
+
export declare const DEFAULT_RESEARCH_SOURCES: ResearchSourceId[];
|
|
8
|
+
export declare const ALL_RESEARCH_SOURCES: ResearchSourceId[];
|
|
9
|
+
export declare const RESEARCH_SEARCH_SOURCES: Record<ResearchSourceId, EdgeSearchSourceSpec>;
|
|
10
|
+
export interface ResearchConfig {
|
|
11
|
+
timeoutSeconds: number;
|
|
12
|
+
sources: Record<ResearchSourceId, ResearchSourceConfig>;
|
|
13
|
+
}
|
|
14
|
+
export interface ResearchSourceConfig {
|
|
15
|
+
url: string;
|
|
16
|
+
apiKey: string;
|
|
17
|
+
region: string;
|
|
18
|
+
authStrategy: EdgeSearchAuthStrategy;
|
|
19
|
+
includeRegion: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare function resolveResearchConfig(args: StrictParsedArgs, env: NodeJS.ProcessEnv): ResearchConfig;
|
|
22
|
+
export declare function researchSourceConfig(config: ResearchConfig, source: ResearchSourceId): ResearchSourceConfig;
|
|
23
|
+
export declare function parseResearchSources(value: string | undefined): ResearchSourceId[];
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { firstEnv } from "../env.js";
|
|
2
|
+
import { DEFAULT_EDGE_SEARCH_API_BASE_URL, edgeFunctionUrl, } from "../edge-search.js";
|
|
3
|
+
import { CliError } from "../errors.js";
|
|
4
|
+
import { strictString } from "../strict-args.js";
|
|
5
|
+
export const DEFAULT_SCI_SEARCH_ENDPOINT = "sci_search";
|
|
6
|
+
export const DEFAULT_REPORT_SEARCH_ENDPOINT = "report_search";
|
|
7
|
+
export const DEFAULT_PATENT_SEARCH_ENDPOINT = "patent_search";
|
|
8
|
+
export const DEFAULT_RESEARCH_SOURCES = ["sci"];
|
|
9
|
+
export const ALL_RESEARCH_SOURCES = ["sci", "report", "patent"];
|
|
10
|
+
export const RESEARCH_SEARCH_SOURCES = {
|
|
11
|
+
sci: {
|
|
12
|
+
endpoint: DEFAULT_SCI_SEARCH_ENDPOINT,
|
|
13
|
+
includeRegion: true,
|
|
14
|
+
authStrategy: "apiKey",
|
|
15
|
+
},
|
|
16
|
+
report: {
|
|
17
|
+
endpoint: DEFAULT_REPORT_SEARCH_ENDPOINT,
|
|
18
|
+
includeRegion: true,
|
|
19
|
+
authStrategy: "apiKey",
|
|
20
|
+
},
|
|
21
|
+
patent: {
|
|
22
|
+
endpoint: DEFAULT_PATENT_SEARCH_ENDPOINT,
|
|
23
|
+
includeRegion: true,
|
|
24
|
+
authStrategy: "apiKey",
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
export function resolveResearchConfig(args, env) {
|
|
28
|
+
const timeoutSeconds = getPositiveIntegerValue(strictString(args, "timeout") ?? firstEnv(env, "TIANGONG_RESEARCH_TIMEOUT"), 120, "--timeout");
|
|
29
|
+
const apiKey = strictString(args, "api-key") ?? firstEnv(env, "TIANGONG_AI_APIKEY") ?? "";
|
|
30
|
+
const apiBaseUrl = strictString(args, "api-base-url") ??
|
|
31
|
+
firstEnv(env, "TIANGONG_RESEARCH_API_BASE_URL", "TIANGONG_AI_SEARCH_API_BASE_URL", "TIANGONG_AI_API_BASE_URL") ??
|
|
32
|
+
DEFAULT_EDGE_SEARCH_API_BASE_URL;
|
|
33
|
+
const region = strictString(args, "region") ?? firstEnv(env, "TIANGONG_REGION") ?? "us-east-1";
|
|
34
|
+
return {
|
|
35
|
+
timeoutSeconds,
|
|
36
|
+
sources: {
|
|
37
|
+
sci: {
|
|
38
|
+
url: strictString(args, "sci-url") ??
|
|
39
|
+
firstEnv(env, "TIANGONG_SCI_SEARCH_URL") ??
|
|
40
|
+
edgeFunctionUrl(apiBaseUrl, RESEARCH_SEARCH_SOURCES.sci.endpoint),
|
|
41
|
+
apiKey: strictString(args, "sci-api-key") ?? firstEnv(env, "TIANGONG_SCI_APIKEY") ?? apiKey ?? "",
|
|
42
|
+
region,
|
|
43
|
+
authStrategy: RESEARCH_SEARCH_SOURCES.sci.authStrategy,
|
|
44
|
+
includeRegion: RESEARCH_SEARCH_SOURCES.sci.includeRegion,
|
|
45
|
+
},
|
|
46
|
+
report: {
|
|
47
|
+
url: strictString(args, "report-url") ??
|
|
48
|
+
firstEnv(env, "TIANGONG_REPORT_SEARCH_URL") ??
|
|
49
|
+
edgeFunctionUrl(apiBaseUrl, RESEARCH_SEARCH_SOURCES.report.endpoint),
|
|
50
|
+
apiKey: strictString(args, "report-api-key") ?? firstEnv(env, "TIANGONG_REPORT_APIKEY") ?? apiKey,
|
|
51
|
+
region,
|
|
52
|
+
authStrategy: RESEARCH_SEARCH_SOURCES.report.authStrategy,
|
|
53
|
+
includeRegion: RESEARCH_SEARCH_SOURCES.report.includeRegion,
|
|
54
|
+
},
|
|
55
|
+
patent: {
|
|
56
|
+
url: strictString(args, "patent-url") ??
|
|
57
|
+
firstEnv(env, "TIANGONG_PATENT_SEARCH_URL") ??
|
|
58
|
+
edgeFunctionUrl(apiBaseUrl, RESEARCH_SEARCH_SOURCES.patent.endpoint),
|
|
59
|
+
apiKey: strictString(args, "patent-api-key") ?? firstEnv(env, "TIANGONG_PATENT_APIKEY") ?? apiKey,
|
|
60
|
+
region,
|
|
61
|
+
authStrategy: RESEARCH_SEARCH_SOURCES.patent.authStrategy,
|
|
62
|
+
includeRegion: RESEARCH_SEARCH_SOURCES.patent.includeRegion,
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export function researchSourceConfig(config, source) {
|
|
68
|
+
return config.sources[source];
|
|
69
|
+
}
|
|
70
|
+
export function parseResearchSources(value) {
|
|
71
|
+
const rawSources = (value ?? "default")
|
|
72
|
+
.split(",")
|
|
73
|
+
.map((source) => source.trim())
|
|
74
|
+
.filter(Boolean);
|
|
75
|
+
const sources = rawSources.length ? rawSources : ["default"];
|
|
76
|
+
return uniqueSources(sources.flatMap((source) => {
|
|
77
|
+
if (source === "default")
|
|
78
|
+
return DEFAULT_RESEARCH_SOURCES;
|
|
79
|
+
if (source === "all")
|
|
80
|
+
return ALL_RESEARCH_SOURCES;
|
|
81
|
+
return [parseResearchSource(source)];
|
|
82
|
+
}));
|
|
83
|
+
}
|
|
84
|
+
function parseResearchSource(source) {
|
|
85
|
+
if (source === "sci")
|
|
86
|
+
return source;
|
|
87
|
+
if (source === "report")
|
|
88
|
+
return source;
|
|
89
|
+
if (source === "patent")
|
|
90
|
+
return source;
|
|
91
|
+
throw new CliError(`Unsupported research source: ${source}`, {
|
|
92
|
+
code: "RESEARCH_SOURCE_UNSUPPORTED",
|
|
93
|
+
exitCode: 2,
|
|
94
|
+
details: { source },
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
function uniqueSources(sources) {
|
|
98
|
+
const seen = new Set();
|
|
99
|
+
const unique = [];
|
|
100
|
+
for (const source of sources) {
|
|
101
|
+
if (seen.has(source))
|
|
102
|
+
continue;
|
|
103
|
+
seen.add(source);
|
|
104
|
+
unique.push(source);
|
|
105
|
+
}
|
|
106
|
+
return unique;
|
|
107
|
+
}
|
|
108
|
+
function getPositiveIntegerValue(value, defaultValue, label) {
|
|
109
|
+
if (!value)
|
|
110
|
+
return defaultValue;
|
|
111
|
+
const parsed = Number(value);
|
|
112
|
+
if (!Number.isInteger(parsed) || parsed <= 0)
|
|
113
|
+
throw new CliError(`${label} must be a positive integer.`, {
|
|
114
|
+
code: "INVALID_NUMERIC_OPTION",
|
|
115
|
+
exitCode: 2,
|
|
116
|
+
details: { label, value },
|
|
117
|
+
});
|
|
118
|
+
return parsed;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/research/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type ResearchSourceId = "sci" | "report" | "patent";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/research/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type StrictOptionType = "boolean" | "string";
|
|
2
|
+
export interface StrictParsedArgs {
|
|
3
|
+
flags: Map<string, string | true>;
|
|
4
|
+
positionals: string[];
|
|
5
|
+
}
|
|
6
|
+
export declare function parseStrictArgs(argv: string[], options: Record<string, StrictOptionType>, commandName: string): StrictParsedArgs;
|
|
7
|
+
export declare function strictString(args: StrictParsedArgs, name: string): string | undefined;
|
|
8
|
+
export declare function strictBoolean(args: StrictParsedArgs, name: string): boolean;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { CliError } from "./errors.js";
|
|
2
|
+
export function parseStrictArgs(argv, options, commandName) {
|
|
3
|
+
const flags = new Map();
|
|
4
|
+
const positionals = [];
|
|
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
|
+
const name = equalsIndex >= 0 ? withoutPrefix.slice(0, equalsIndex) : withoutPrefix;
|
|
16
|
+
const type = options[name];
|
|
17
|
+
if (!type) {
|
|
18
|
+
throw new CliError(`Unknown option for ${commandName}: --${name}`, {
|
|
19
|
+
code: "INVALID_ARGS",
|
|
20
|
+
exitCode: 2,
|
|
21
|
+
details: { option: name, command: commandName },
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
if (type === "boolean") {
|
|
25
|
+
if (equalsIndex >= 0) {
|
|
26
|
+
const value = withoutPrefix.slice(equalsIndex + 1);
|
|
27
|
+
if (value !== "true" && value !== "false") {
|
|
28
|
+
throw new CliError(`Boolean option --${name} must be true or false.`, {
|
|
29
|
+
code: "INVALID_ARGS",
|
|
30
|
+
exitCode: 2,
|
|
31
|
+
details: { option: name, value },
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
if (value === "true")
|
|
35
|
+
flags.set(name, true);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
flags.set(name, true);
|
|
39
|
+
}
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const value = equalsIndex >= 0 ? withoutPrefix.slice(equalsIndex + 1) : argv[index + 1];
|
|
43
|
+
if (!value || value.startsWith("--")) {
|
|
44
|
+
throw new CliError(`Missing value for --${name}.`, {
|
|
45
|
+
code: "INVALID_ARGS",
|
|
46
|
+
exitCode: 2,
|
|
47
|
+
details: { option: name, command: commandName },
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
flags.set(name, value);
|
|
51
|
+
if (equalsIndex < 0)
|
|
52
|
+
index += 1;
|
|
53
|
+
}
|
|
54
|
+
return { flags, positionals };
|
|
55
|
+
}
|
|
56
|
+
export function strictString(args, name) {
|
|
57
|
+
const value = args.flags.get(name);
|
|
58
|
+
return typeof value === "string" && value.trim() ? value.trim() : undefined;
|
|
59
|
+
}
|
|
60
|
+
export function strictBoolean(args, name) {
|
|
61
|
+
return args.flags.get(name) === true;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=strict-args.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strict-args.js","sourceRoot":"","sources":["../src/strict-args.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.15",
|
|
4
4
|
"description": "Tiangong AI command-line interface.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
},
|
|
27
27
|
"scripts": {
|
|
28
28
|
"build": "tsc -p tsconfig.build.json",
|
|
29
|
-
"prepack": "npm run build",
|
|
29
|
+
"prepack": "npm run clean && npm run build",
|
|
30
30
|
"typecheck": "tsc --noEmit",
|
|
31
31
|
"test": "npm run build && node --import tsx --test test/*.test.ts",
|
|
32
32
|
"test:coverage": "npm run build && node ./scripts/run-test-coverage.cjs",
|