gaoding-cli 1.0.0-alpha.5

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 (177) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/LICENSE +21 -0
  3. package/README.md +136 -0
  4. package/SECURITY.md +34 -0
  5. package/dist/bin/gd-cli.d.ts +2 -0
  6. package/dist/bin/gd-cli.js +10 -0
  7. package/dist/src/api/app-runner.d.ts +33 -0
  8. package/dist/src/api/app-runner.js +1177 -0
  9. package/dist/src/api/dam-client.d.ts +111 -0
  10. package/dist/src/api/dam-client.js +897 -0
  11. package/dist/src/api/direct-auth.d.ts +3 -0
  12. package/dist/src/api/direct-auth.js +11 -0
  13. package/dist/src/api/direct-client.d.ts +27 -0
  14. package/dist/src/api/direct-client.js +151 -0
  15. package/dist/src/api/direct-tools.d.ts +43 -0
  16. package/dist/src/api/direct-tools.js +1155 -0
  17. package/dist/src/api/hub-client.d.ts +20 -0
  18. package/dist/src/api/hub-client.js +99 -0
  19. package/dist/src/api/sso-client.d.ts +60 -0
  20. package/dist/src/api/sso-client.js +140 -0
  21. package/dist/src/api/task-poller.d.ts +38 -0
  22. package/dist/src/api/task-poller.js +72 -0
  23. package/dist/src/api/tool-invoker.d.ts +12 -0
  24. package/dist/src/api/tool-invoker.js +11 -0
  25. package/dist/src/api/usage-client.d.ts +39 -0
  26. package/dist/src/api/usage-client.js +179 -0
  27. package/dist/src/auth/credential-store-v2.d.ts +12 -0
  28. package/dist/src/auth/credential-store-v2.js +59 -0
  29. package/dist/src/commands/auth.d.ts +2 -0
  30. package/dist/src/commands/auth.js +191 -0
  31. package/dist/src/commands/dam.d.ts +2 -0
  32. package/dist/src/commands/dam.js +293 -0
  33. package/dist/src/commands/models.d.ts +2 -0
  34. package/dist/src/commands/models.js +78 -0
  35. package/dist/src/commands/org.d.ts +2 -0
  36. package/dist/src/commands/org.js +137 -0
  37. package/dist/src/commands/skills.d.ts +2 -0
  38. package/dist/src/commands/skills.js +213 -0
  39. package/dist/src/commands/tools.d.ts +4 -0
  40. package/dist/src/commands/tools.js +383 -0
  41. package/dist/src/commands/update.d.ts +2 -0
  42. package/dist/src/commands/update.js +167 -0
  43. package/dist/src/commands/usage.d.ts +7 -0
  44. package/dist/src/commands/usage.js +43 -0
  45. package/dist/src/commands/workflows.d.ts +3 -0
  46. package/dist/src/commands/workflows.js +398 -0
  47. package/dist/src/core/auth/auth-provider.d.ts +8 -0
  48. package/dist/src/core/auth/auth-provider.js +12 -0
  49. package/dist/src/core/auth/device-oauth-provider.d.ts +12 -0
  50. package/dist/src/core/auth/device-oauth-provider.js +124 -0
  51. package/dist/src/core/auth/org-manager.d.ts +26 -0
  52. package/dist/src/core/auth/org-manager.js +224 -0
  53. package/dist/src/core/auth/signature.d.ts +19 -0
  54. package/dist/src/core/auth/signature.js +33 -0
  55. package/dist/src/core/auth/types.d.ts +52 -0
  56. package/dist/src/core/auth/types.js +3 -0
  57. package/dist/src/core/output/cli-error.d.ts +5 -0
  58. package/dist/src/core/output/cli-error.js +8 -0
  59. package/dist/src/core/output/detector.d.ts +5 -0
  60. package/dist/src/core/output/detector.js +14 -0
  61. package/dist/src/core/output/engine.d.ts +32 -0
  62. package/dist/src/core/output/engine.js +77 -0
  63. package/dist/src/core/output/envelope.d.ts +40 -0
  64. package/dist/src/core/output/envelope.js +119 -0
  65. package/dist/src/core/output/index.d.ts +4 -0
  66. package/dist/src/core/output/index.js +4 -0
  67. package/dist/src/core/output/live-display.d.ts +15 -0
  68. package/dist/src/core/output/live-display.js +111 -0
  69. package/dist/src/core/output/result-card.d.ts +18 -0
  70. package/dist/src/core/output/result-card.js +39 -0
  71. package/dist/src/core/prompt/index.d.ts +31 -0
  72. package/dist/src/core/prompt/index.js +36 -0
  73. package/dist/src/io.d.ts +14 -0
  74. package/dist/src/io.js +31 -0
  75. package/dist/src/middleware/auth.d.ts +3 -0
  76. package/dist/src/middleware/auth.js +74 -0
  77. package/dist/src/middleware/error-handler.d.ts +3 -0
  78. package/dist/src/middleware/error-handler.js +431 -0
  79. package/dist/src/middleware/interactive-params.d.ts +14 -0
  80. package/dist/src/middleware/interactive-params.js +53 -0
  81. package/dist/src/middleware/output.d.ts +14 -0
  82. package/dist/src/middleware/output.js +546 -0
  83. package/dist/src/models/model-catalog.d.ts +26 -0
  84. package/dist/src/models/model-catalog.js +216 -0
  85. package/dist/src/program.d.ts +2 -0
  86. package/dist/src/program.js +152 -0
  87. package/dist/src/registry/agent-contracts.d.ts +43 -0
  88. package/dist/src/registry/agent-contracts.js +483 -0
  89. package/dist/src/registry/app-loader.d.ts +2 -0
  90. package/dist/src/registry/app-loader.js +70 -0
  91. package/dist/src/registry/direct-registry.d.ts +11 -0
  92. package/dist/src/registry/direct-registry.js +234 -0
  93. package/dist/src/registry/registry-cache.d.ts +10 -0
  94. package/dist/src/registry/registry-cache.js +52 -0
  95. package/dist/src/registry/registry-client.d.ts +28 -0
  96. package/dist/src/registry/registry-client.js +50 -0
  97. package/dist/src/registry/types.d.ts +69 -0
  98. package/dist/src/registry/types.js +1 -0
  99. package/dist/src/tty/auth-presenter.d.ts +3 -0
  100. package/dist/src/tty/auth-presenter.js +21 -0
  101. package/dist/src/update/install-source.d.ts +19 -0
  102. package/dist/src/update/install-source.js +139 -0
  103. package/dist/src/update/notifier.d.ts +2 -0
  104. package/dist/src/update/notifier.js +59 -0
  105. package/dist/src/update/update-checker.d.ts +22 -0
  106. package/dist/src/update/update-checker.js +110 -0
  107. package/dist/src/update/version.d.ts +9 -0
  108. package/dist/src/update/version.js +52 -0
  109. package/dist/src/utils/agent-skill-installer.d.ts +57 -0
  110. package/dist/src/utils/agent-skill-installer.js +389 -0
  111. package/dist/src/utils/capability-metadata.d.ts +18 -0
  112. package/dist/src/utils/capability-metadata.js +88 -0
  113. package/dist/src/utils/capability-presenter.d.ts +4 -0
  114. package/dist/src/utils/capability-presenter.js +190 -0
  115. package/dist/src/utils/config.d.ts +16 -0
  116. package/dist/src/utils/config.js +54 -0
  117. package/dist/src/utils/credential-permissions.d.ts +2 -0
  118. package/dist/src/utils/credential-permissions.js +22 -0
  119. package/dist/src/utils/ecommerce-input-guidance.d.ts +15 -0
  120. package/dist/src/utils/ecommerce-input-guidance.js +85 -0
  121. package/dist/src/utils/endpoints.d.ts +52 -0
  122. package/dist/src/utils/endpoints.js +258 -0
  123. package/dist/src/utils/enrich-upload-params.d.ts +6 -0
  124. package/dist/src/utils/enrich-upload-params.js +11 -0
  125. package/dist/src/utils/entitlement.d.ts +17 -0
  126. package/dist/src/utils/entitlement.js +146 -0
  127. package/dist/src/utils/gd-home.d.ts +7 -0
  128. package/dist/src/utils/gd-home.js +26 -0
  129. package/dist/src/utils/help-verify.d.ts +9 -0
  130. package/dist/src/utils/help-verify.js +41 -0
  131. package/dist/src/utils/input-json.d.ts +3 -0
  132. package/dist/src/utils/input-json.js +61 -0
  133. package/dist/src/utils/list-output-format.d.ts +10 -0
  134. package/dist/src/utils/list-output-format.js +34 -0
  135. package/dist/src/utils/logger.d.ts +6 -0
  136. package/dist/src/utils/logger.js +19 -0
  137. package/dist/src/utils/matting-compose.d.ts +10 -0
  138. package/dist/src/utils/matting-compose.js +45 -0
  139. package/dist/src/utils/open-browser.d.ts +1 -0
  140. package/dist/src/utils/open-browser.js +4 -0
  141. package/dist/src/utils/output-path.d.ts +5 -0
  142. package/dist/src/utils/output-path.js +70 -0
  143. package/dist/src/utils/redact.d.ts +3 -0
  144. package/dist/src/utils/redact.js +96 -0
  145. package/dist/src/utils/reference-image.d.ts +8 -0
  146. package/dist/src/utils/reference-image.js +43 -0
  147. package/dist/src/utils/resolve-app-local-images.d.ts +8 -0
  148. package/dist/src/utils/resolve-app-local-images.js +84 -0
  149. package/dist/src/utils/sensitive-path.d.ts +6 -0
  150. package/dist/src/utils/sensitive-path.js +69 -0
  151. package/dist/src/utils/settings-store.d.ts +42 -0
  152. package/dist/src/utils/settings-store.js +50 -0
  153. package/dist/src/utils/sleep.d.ts +1 -0
  154. package/dist/src/utils/sleep.js +3 -0
  155. package/dist/src/utils/spinner.d.ts +2 -0
  156. package/dist/src/utils/spinner.js +4 -0
  157. package/dist/src/utils/static-help.d.ts +2 -0
  158. package/dist/src/utils/static-help.js +3 -0
  159. package/dist/src/utils/tool-display.d.ts +10 -0
  160. package/dist/src/utils/tool-display.js +55 -0
  161. package/dist/src/utils/transient-network-error.d.ts +4 -0
  162. package/dist/src/utils/transient-network-error.js +40 -0
  163. package/dist/src/utils/url-safety.d.ts +6 -0
  164. package/dist/src/utils/url-safety.js +67 -0
  165. package/dist/src/utils/write-app-deliverables.d.ts +18 -0
  166. package/dist/src/utils/write-app-deliverables.js +386 -0
  167. package/package.json +91 -0
  168. package/skills/gd-cli/SKILL.md +57 -0
  169. package/skills/gd-cli/references/auth.md +31 -0
  170. package/skills/gd-cli/references/deliverables.md +22 -0
  171. package/skills/gd-cli/references/entitlement.md +21 -0
  172. package/skills/gd-cli/references/errors.md +19 -0
  173. package/skills/gd-cli/references/org.md +18 -0
  174. package/skills/gd-cli/references/sop.md +25 -0
  175. package/skills/gd-cli/references/tools.md +29 -0
  176. package/skills/gd-cli/references/update.md +16 -0
  177. package/skills/gd-cli/references/workflows.md +22 -0
@@ -0,0 +1,59 @@
1
+ import chalk from "chalk";
2
+ import { buildUpdateCommand } from "./install-source.js";
3
+ import { checkForUpdate } from "./update-checker.js";
4
+ export async function maybeNotifyUpdate(command) {
5
+ if (!shouldNotify(command))
6
+ return;
7
+ try {
8
+ const info = await checkForUpdate({ timeoutMs: 1200 });
9
+ if (!info.update_available)
10
+ return;
11
+ const updateCommand = buildUpdateCommand(info.latest_version, info.install_source);
12
+ const message = [
13
+ "",
14
+ chalk.yellow(`发现 gd-cli 新版本 ${info.latest_version},当前版本 ${info.current_version}`),
15
+ `升级: ${chalk.cyan(updateCommand.display)}`,
16
+ chalk.dim("关闭提醒: export GD_CLI_NO_UPDATE_NOTIFIER=1"),
17
+ "",
18
+ ].join("\n");
19
+ process.stderr.write(message);
20
+ }
21
+ catch {
22
+ // 升级提醒不能影响业务命令。
23
+ }
24
+ }
25
+ function shouldNotify(command) {
26
+ if (!process.stderr.isTTY)
27
+ return false;
28
+ if (process.env.CI)
29
+ return false;
30
+ if (process.env.GD_CLI_NO_UPDATE_NOTIFIER === "1")
31
+ return false;
32
+ if (process.env.NO_UPDATE_NOTIFIER === "1")
33
+ return false;
34
+ const root = rootCommand(command);
35
+ const format = root.opts().format;
36
+ if (format === "json")
37
+ return false;
38
+ const names = commandPath(command);
39
+ if (names.includes("update"))
40
+ return false;
41
+ return true;
42
+ }
43
+ function commandPath(command) {
44
+ const names = [];
45
+ let cur = command;
46
+ while (cur) {
47
+ const name = cur.name();
48
+ if (name)
49
+ names.unshift(name);
50
+ cur = cur.parent;
51
+ }
52
+ return names;
53
+ }
54
+ function rootCommand(command) {
55
+ let cur = command;
56
+ while (cur.parent)
57
+ cur = cur.parent;
58
+ return cur;
59
+ }
@@ -0,0 +1,22 @@
1
+ import { type InstallSource } from "./install-source.js";
2
+ export interface UpdateInfo {
3
+ package_name: string;
4
+ current_version: string;
5
+ latest_version: string;
6
+ channel: string;
7
+ update_available: boolean;
8
+ registry: string;
9
+ checked_at: string;
10
+ install_source: InstallSource;
11
+ from_cache: boolean;
12
+ unavailable_reason?: string;
13
+ }
14
+ interface CheckOptions {
15
+ channel?: string;
16
+ force?: boolean;
17
+ timeoutMs?: number;
18
+ ttlMs?: number;
19
+ }
20
+ export declare function checkForUpdate(options?: CheckOptions): Promise<UpdateInfo>;
21
+ export declare function clearUpdateCache(): void;
22
+ export {};
@@ -0,0 +1,110 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { CLI_PACKAGE_NAME, CLI_VERSION, GD_DIR } from "../utils/config.js";
4
+ import { ensureCredentialDir, ensureCredentialFile } from "../utils/credential-permissions.js";
5
+ import { detectInstallSource } from "./install-source.js";
6
+ import { isVersionGreater } from "./version.js";
7
+ import { assertSafeHttpUrl } from "../utils/url-safety.js";
8
+ const UPDATE_CACHE_FILE = path.join(GD_DIR, "update-check.json");
9
+ const DEFAULT_REGISTRY = "https://registry.npmjs.org";
10
+ const DEFAULT_TTL_MS = 24 * 60 * 60 * 1000;
11
+ export async function checkForUpdate(options = {}) {
12
+ const channel = options.channel ?? process.env.GD_CLI_UPDATE_CHANNEL ?? "latest";
13
+ const registry = resolveRegistry();
14
+ const ttlMs = options.ttlMs ?? DEFAULT_TTL_MS;
15
+ const cached = options.force ? null : readCache();
16
+ const installSource = detectInstallSource();
17
+ if (cached &&
18
+ cached.channel === channel &&
19
+ cached.registry === registry &&
20
+ cached.current_version === CLI_VERSION &&
21
+ Date.now() - new Date(cached.checked_at).getTime() < ttlMs) {
22
+ return {
23
+ ...cached,
24
+ install_source: installSource,
25
+ from_cache: true,
26
+ };
27
+ }
28
+ const metadata = await fetchPackageMetadata(registry, options.timeoutMs);
29
+ if (!metadata) {
30
+ const info = {
31
+ package_name: CLI_PACKAGE_NAME,
32
+ current_version: CLI_VERSION,
33
+ latest_version: CLI_VERSION,
34
+ channel,
35
+ update_available: false,
36
+ registry,
37
+ checked_at: new Date().toISOString(),
38
+ install_source: installSource,
39
+ from_cache: false,
40
+ unavailable_reason: "package_not_found",
41
+ };
42
+ writeCache(info);
43
+ return info;
44
+ }
45
+ const latestVersion = metadata["dist-tags"]?.[channel];
46
+ if (!latestVersion) {
47
+ throw new Error(`npm registry 未找到 dist-tag: ${channel}`);
48
+ }
49
+ const info = {
50
+ package_name: CLI_PACKAGE_NAME,
51
+ current_version: CLI_VERSION,
52
+ latest_version: latestVersion,
53
+ channel,
54
+ update_available: isVersionGreater(latestVersion, CLI_VERSION),
55
+ registry,
56
+ checked_at: new Date().toISOString(),
57
+ install_source: installSource,
58
+ from_cache: false,
59
+ };
60
+ writeCache(info);
61
+ return info;
62
+ }
63
+ export function clearUpdateCache() {
64
+ if (fs.existsSync(UPDATE_CACHE_FILE))
65
+ fs.unlinkSync(UPDATE_CACHE_FILE);
66
+ }
67
+ function resolveRegistry() {
68
+ const raw = (process.env.GD_CLI_REGISTRY ??
69
+ process.env.npm_config_registry ??
70
+ process.env.NPM_CONFIG_REGISTRY ??
71
+ DEFAULT_REGISTRY).replace(/\/$/, "");
72
+ return assertSafeHttpUrl(raw, { context: "npm registry" }).replace(/\/$/, "");
73
+ }
74
+ async function fetchPackageMetadata(registry, timeoutMs = 5000) {
75
+ const packagePath = encodeURIComponent(CLI_PACKAGE_NAME).replace("%2F", "%2f");
76
+ const url = `${registry}/${packagePath}`;
77
+ const response = await fetch(url, {
78
+ headers: {
79
+ Accept: "application/vnd.npm.install-v1+json, application/json",
80
+ },
81
+ signal: AbortSignal.timeout(timeoutMs),
82
+ });
83
+ if (response.status === 404) {
84
+ return null;
85
+ }
86
+ if (!response.ok) {
87
+ throw new Error(`检查版本失败: ${response.status} ${response.statusText}`);
88
+ }
89
+ return (await response.json());
90
+ }
91
+ function readCache() {
92
+ try {
93
+ if (!fs.existsSync(UPDATE_CACHE_FILE))
94
+ return null;
95
+ ensureCredentialDir(GD_DIR);
96
+ ensureCredentialFile(UPDATE_CACHE_FILE);
97
+ const data = JSON.parse(fs.readFileSync(UPDATE_CACHE_FILE, "utf8"));
98
+ if (!data || typeof data !== "object")
99
+ return null;
100
+ return data;
101
+ }
102
+ catch {
103
+ return null;
104
+ }
105
+ }
106
+ function writeCache(info) {
107
+ ensureCredentialDir(GD_DIR);
108
+ fs.writeFileSync(UPDATE_CACHE_FILE, `${JSON.stringify(info, null, 2)}\n`, "utf8");
109
+ ensureCredentialFile(UPDATE_CACHE_FILE);
110
+ }
@@ -0,0 +1,9 @@
1
+ export interface ParsedVersion {
2
+ major: number;
3
+ minor: number;
4
+ patch: number;
5
+ prerelease: string[];
6
+ }
7
+ export declare function parseVersion(version: string): ParsedVersion | null;
8
+ export declare function compareVersions(left: string, right: string): number;
9
+ export declare function isVersionGreater(candidate: string, current: string): boolean;
@@ -0,0 +1,52 @@
1
+ export function parseVersion(version) {
2
+ const trimmed = version.trim().replace(/^v/, "");
3
+ const match = /^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+.+)?$/.exec(trimmed);
4
+ if (!match)
5
+ return null;
6
+ return {
7
+ major: Number(match[1]),
8
+ minor: Number(match[2]),
9
+ patch: Number(match[3]),
10
+ prerelease: match[4] ? match[4].split(".") : [],
11
+ };
12
+ }
13
+ export function compareVersions(left, right) {
14
+ const a = parseVersion(left);
15
+ const b = parseVersion(right);
16
+ if (!a || !b)
17
+ return left.localeCompare(right);
18
+ for (const key of ["major", "minor", "patch"]) {
19
+ if (a[key] !== b[key])
20
+ return a[key] > b[key] ? 1 : -1;
21
+ }
22
+ if (a.prerelease.length === 0 && b.prerelease.length === 0)
23
+ return 0;
24
+ if (a.prerelease.length === 0)
25
+ return 1;
26
+ if (b.prerelease.length === 0)
27
+ return -1;
28
+ const len = Math.max(a.prerelease.length, b.prerelease.length);
29
+ for (let i = 0; i < len; i += 1) {
30
+ const ai = a.prerelease[i];
31
+ const bi = b.prerelease[i];
32
+ if (ai === undefined)
33
+ return -1;
34
+ if (bi === undefined)
35
+ return 1;
36
+ if (ai === bi)
37
+ continue;
38
+ const an = /^\d+$/.test(ai) ? Number(ai) : null;
39
+ const bn = /^\d+$/.test(bi) ? Number(bi) : null;
40
+ if (an !== null && bn !== null)
41
+ return an > bn ? 1 : -1;
42
+ if (an !== null)
43
+ return -1;
44
+ if (bn !== null)
45
+ return 1;
46
+ return ai > bi ? 1 : -1;
47
+ }
48
+ return 0;
49
+ }
50
+ export function isVersionGreater(candidate, current) {
51
+ return compareVersions(candidate, current) > 0;
52
+ }
@@ -0,0 +1,57 @@
1
+ export type AgentSkillTargetId = "universal" | "claude-code" | "codex" | "cursor" | "opencode" | "openclaw" | "workbuddy";
2
+ export type AgentSkillStatus = "installed" | "outdated" | "missing" | "broken" | "conflict";
3
+ export type AgentSkillMode = "canonical" | "symlink" | "junction" | "copy";
4
+ export interface AgentSkillTarget {
5
+ id: AgentSkillTargetId;
6
+ name: string;
7
+ path: string;
8
+ detected: boolean;
9
+ }
10
+ export interface AgentSkillTargetResult {
11
+ agent: AgentSkillTargetId;
12
+ path: string;
13
+ status: AgentSkillStatus;
14
+ mode?: AgentSkillMode;
15
+ changed: boolean;
16
+ reason?: string;
17
+ }
18
+ export interface AgentSkillResult {
19
+ skill: "gd-cli";
20
+ version: string;
21
+ canonical_path: string;
22
+ changed: boolean;
23
+ restart_required: boolean;
24
+ targets: AgentSkillTargetResult[];
25
+ }
26
+ export declare class AgentSkillOperationError extends Error {
27
+ readonly result: AgentSkillResult;
28
+ constructor(message: string, result: AgentSkillResult);
29
+ }
30
+ export interface AgentSkillInstallerOptions {
31
+ homeDir?: string;
32
+ env?: NodeJS.ProcessEnv;
33
+ packageRoot?: string;
34
+ platform?: NodeJS.Platform;
35
+ }
36
+ export declare class AgentSkillInstaller {
37
+ private readonly homeDir;
38
+ private readonly env;
39
+ private readonly platform;
40
+ private readonly sourceDir;
41
+ constructor(options?: AgentSkillInstallerOptions);
42
+ listTargets(): AgentSkillTarget[];
43
+ detectedTargets(): AgentSkillTargetId[];
44
+ status(): AgentSkillResult;
45
+ install(agents: AgentSkillTargetId[]): AgentSkillResult;
46
+ update(): AgentSkillResult;
47
+ uninstall(agents: AgentSkillTargetId[]): AgentSkillResult;
48
+ private target;
49
+ private targetById;
50
+ private targets;
51
+ private inspect;
52
+ private result;
53
+ private replaceManagedDirectory;
54
+ private createLinkOrCopy;
55
+ private linkMode;
56
+ private ioError;
57
+ }