@lsddream/platform-cli 0.1.0
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/LICENSE +19 -0
- package/README.md +103 -0
- package/dist/chunk-2RAWITF3.js +134 -0
- package/dist/chunk-2RAWITF3.js.map +1 -0
- package/dist/chunk-3SORXO53.js +90 -0
- package/dist/chunk-3SORXO53.js.map +1 -0
- package/dist/cli.js +1255 -0
- package/dist/cli.js.map +1 -0
- package/dist/credentials-2BZZNZFE.js +16 -0
- package/dist/credentials-2BZZNZFE.js.map +1 -0
- package/dist/credentials-H3QSX2O6.js +15 -0
- package/dist/credentials-H3QSX2O6.js.map +1 -0
- package/dist/index.d.ts +133 -0
- package/dist/index.js +253 -0
- package/dist/index.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/errors.ts","../src/auth/session.ts","../src/api/client.ts","../src/api/cli-api.ts","../src/api/qwenpaw-api.ts"],"sourcesContent":["export interface ApiErrorBody {\n request_id?: string;\n error: {\n code: string;\n message: string;\n hint?: string;\n };\n}\n\nexport class AspError extends Error {\n readonly code: string;\n readonly hint?: string;\n readonly requestId?: string;\n readonly statusCode?: number;\n readonly exitCode: number;\n\n constructor(\n message: string,\n options: {\n code?: string;\n hint?: string;\n requestId?: string;\n statusCode?: number;\n exitCode?: number;\n cause?: unknown;\n } = {},\n ) {\n super(message, { cause: options.cause });\n this.name = \"AspError\";\n this.code = options.code ?? \"UNKNOWN\";\n this.hint = options.hint;\n this.requestId = options.requestId;\n this.statusCode = options.statusCode;\n this.exitCode = options.exitCode ?? 1;\n }\n\n static fromResponse(status: number, body: unknown): AspError {\n const parsed = body as Partial<ApiErrorBody> & {\n error?: ApiErrorBody[\"error\"] & { detail?: string };\n };\n if (parsed?.error) {\n const exitCode = mapErrorCodeToExit(parsed.error.code, status);\n let hint = parsed.error.hint ?? parsed.error.detail;\n if (parsed.error.code === \"ASP.COMM.NOT_FOUND\") {\n hint =\n hint ??\n \"The API endpoint is not available on this Platform environment. Pre-release may not have /api/qwenpaw/v1 yet; try production `asp qwenpaw remote list` after `asp auth login`.\";\n }\n return new AspError(parsed.error.message, {\n code: parsed.error.code,\n hint,\n requestId: parsed.request_id,\n statusCode: status,\n exitCode,\n });\n }\n return new AspError(`HTTP ${status}`, {\n code: \"HTTP_ERROR\",\n statusCode: status,\n exitCode: status >= 500 ? 2 : 1,\n });\n }\n}\n\nfunction mapErrorCodeToExit(code: string, status: number): number {\n if (\n code === \"UNAUTHORIZED\" ||\n code === \"UNAUTHENTICATED\" ||\n code === \"ASP.AUTH.UNAUTHORIZED\" ||\n code === \"ASP.AUTH.SESSION_INVALID\" ||\n code === \"SESSION_INVALID\"\n ) {\n return 3;\n }\n if (code === \"FORBIDDEN\") return 4;\n if (status >= 500) return 2;\n return 1;\n}\n\nexport function maskSecrets(text: string): string {\n return text\n .replace(/Bearer\\s+[A-Za-z0-9._-]+/gi, \"Bearer [REDACTED]\")\n .replace(/\"access_token\"\\s*:\\s*\"[^\"]+\"/gi, '\"access_token\":\"[REDACTED]\"')\n .replace(/\"refresh_token\"\\s*:\\s*\"[^\"]+\"/gi, '\"refresh_token\":\"[REDACTED]\"')\n .replace(/\"token\"\\s*:\\s*\"[^\"]+\"/gi, '\"token\":\"[REDACTED]\"');\n}\n","import type { ResolvedConfig } from \"../config.js\";\nimport { CliApiClient, type TokenResponse } from \"../api/cli-api.js\";\nimport {\n credentialsFromTokenResponse,\n saveCredentials,\n type StoredCredentials,\n} from \"./credentials.js\";\nimport { AspError } from \"../utils/errors.js\";\n\nexport function isSessionInvalidError(err: unknown): boolean {\n if (!(err instanceof AspError)) return false;\n return err.code === \"ASP.AUTH.SESSION_INVALID\" || err.code === \"SESSION_INVALID\";\n}\n\nexport async function refreshStoredSession(\n config: ResolvedConfig,\n refreshToken: string,\n platformUrl: string,\n): Promise<StoredCredentials> {\n const client = new CliApiClient({\n ...config,\n token: undefined,\n platformUrl: platformUrl.replace(/\\/$/, \"\"),\n });\n const refreshed = await client.refresh(refreshToken);\n const creds = credentialsFromTokenResponse(platformUrl, refreshed);\n await saveCredentials(creds);\n return creds;\n}\n\n/** Login 返回的 access_token 在 pre 环境需先 refresh 才能访问 /me */\nexport async function finalizeLogin(\n config: ResolvedConfig,\n loginResponse: TokenResponse,\n): Promise<StoredCredentials> {\n if (!loginResponse.refresh_token) {\n const creds = credentialsFromTokenResponse(config.platformUrl, loginResponse);\n await saveCredentials(creds);\n return creds;\n }\n\n try {\n return await refreshStoredSession(\n config,\n loginResponse.refresh_token,\n config.platformUrl,\n );\n } catch {\n const creds = credentialsFromTokenResponse(config.platformUrl, loginResponse);\n await saveCredentials(creds);\n return creds;\n }\n}\n\nexport async function ensureValidSession(config: ResolvedConfig): Promise<StoredCredentials> {\n const { loadCredentials, isTokenExpired } = await import(\"./credentials.js\");\n const creds = await loadCredentials();\n if (!creds) {\n throw new AspError(\"Not logged in.\", {\n code: \"UNAUTHORIZED\",\n hint: \"Run `asp auth login`.\",\n exitCode: 3,\n });\n }\n\n if (!isTokenExpired(creds) && creds.access_token) {\n return creds;\n }\n\n if (!creds.refresh_token) {\n throw new AspError(\"Session expired.\", {\n code: \"ASP.AUTH.SESSION_INVALID\",\n hint: \"Run `asp auth login`.\",\n exitCode: 3,\n });\n }\n\n return refreshStoredSession(config, creds.refresh_token, creds.platform_url);\n}\n","import { AspError, maskSecrets } from \"../utils/errors.js\";\nimport type { ResolvedConfig } from \"../config.js\";\nimport {\n loadCredentials,\n isTokenExpired,\n type StoredCredentials,\n} from \"../auth/credentials.js\";\nimport { refreshStoredSession, isSessionInvalidError } from \"../auth/session.js\";\n\nexport interface RequestOptions {\n method?: string;\n path: string;\n body?: unknown;\n headers?: Record<string, string>;\n auth?: boolean;\n prefix?: string;\n _retried?: boolean;\n}\n\nexport class HttpClient {\n constructor(private readonly config: ResolvedConfig) {}\n\n async request<T>(opts: RequestOptions): Promise<T> {\n try {\n return await this.doRequest<T>(opts);\n } catch (err) {\n if (\n opts.auth !== false &&\n !opts._retried &&\n isSessionInvalidError(err) &&\n !this.config.token\n ) {\n const creds = await loadCredentials();\n if (creds?.refresh_token) {\n await refreshStoredSession(configWithPlatform(this.config, creds), creds.refresh_token, creds.platform_url);\n return this.doRequest<T>({ ...opts, _retried: true });\n }\n }\n throw err;\n }\n }\n\n private async doRequest<T>(opts: RequestOptions): Promise<T> {\n const creds = opts.auth !== false && !this.config.token ? await loadCredentials() : null;\n const platformUrl = creds?.platform_url ?? this.config.platformUrl;\n const prefix = opts.prefix ?? \"\";\n const url = `${platformUrl}${prefix}${opts.path}`;\n const headers: Record<string, string> = {\n Accept: \"application/json\",\n ...opts.headers,\n };\n\n if (opts.body !== undefined) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n\n if (opts.auth !== false) {\n const token = await this.resolveAccessToken(creds);\n if (token) {\n headers.Authorization = `Bearer ${token}`;\n }\n }\n\n if (this.config.verbose) {\n console.error(`[verbose] ${opts.method ?? \"GET\"} ${url}`);\n if (opts.body) console.error(maskSecrets(JSON.stringify(opts.body)));\n }\n\n const res = await fetch(url, {\n method: opts.method ?? \"GET\",\n headers,\n body: opts.body !== undefined ? JSON.stringify(opts.body) : undefined,\n });\n\n const text = await res.text();\n let data: unknown = {};\n if (text) {\n try {\n data = JSON.parse(text);\n } catch {\n data = { raw: text };\n }\n }\n\n if (this.config.verbose) {\n console.error(`[verbose] ${res.status}`, maskSecrets(text.slice(0, 2000)));\n }\n\n if (!res.ok) {\n throw AspError.fromResponse(res.status, data);\n }\n\n return data as T;\n }\n\n async resolveAccessToken(existing?: StoredCredentials | null): Promise<string | undefined> {\n if (this.config.token) return this.config.token;\n\n const creds = existing ?? (await loadCredentials());\n if (!creds) return undefined;\n\n if (isTokenExpired(creds) && creds.refresh_token) {\n const refreshed = await refreshStoredSession(\n configWithPlatform(this.config, creds),\n creds.refresh_token,\n creds.platform_url,\n );\n return refreshed.access_token;\n }\n\n return creds.access_token;\n }\n}\n\nfunction configWithPlatform(config: ResolvedConfig, creds: StoredCredentials): ResolvedConfig {\n return { ...config, platformUrl: creds.platform_url || config.platformUrl };\n}\n","import { CLI_API_PREFIX } from \"../constants.js\";\nimport type { ResolvedConfig } from \"../config.js\";\nimport { HttpClient } from \"./client.js\";\n\nexport interface MetaResponse {\n request_id: string;\n service: string;\n api_version: string;\n platform_url: string;\n environment: string;\n min_cli_version: string;\n recommended_cli_version: string;\n features: Record<string, boolean>;\n}\n\nexport interface MeResponse {\n request_id: string;\n user_id?: string;\n account?: string;\n email?: string;\n username?: string;\n is_admin?: boolean;\n user?: {\n id: string;\n display_name?: string;\n email?: string;\n };\n qwenpaw_instance?: {\n id: string;\n status: string;\n cloud_url: string;\n };\n scopes?: string[];\n}\n\nexport interface TokenResponse {\n request_id: string;\n access_token: string;\n refresh_token?: string;\n token_type: string;\n expires_in?: number;\n scope?: string;\n user?: {\n id: string;\n display_name?: string;\n email?: string;\n };\n}\n\nexport interface DeviceCodeResponse {\n request_id: string;\n device_code: string;\n user_code: string;\n verification_uri: string;\n verification_uri_complete?: string;\n expires_in: number;\n interval?: number;\n}\n\nexport class CliApiClient {\n private readonly http: HttpClient;\n\n constructor(config: ResolvedConfig) {\n this.http = new HttpClient(config);\n }\n\n private req<T>(opts: Parameters<HttpClient[\"request\"]>[0]): Promise<T> {\n return this.http.request<T>({ ...opts, prefix: CLI_API_PREFIX });\n }\n\n getMeta(): Promise<MetaResponse> {\n return this.req({ path: \"/meta\", auth: false });\n }\n\n getMe(): Promise<MeResponse> {\n return this.req({ path: \"/me\" });\n }\n\n login(account: string, password: string): Promise<TokenResponse> {\n return this.req({\n method: \"POST\",\n path: \"/auth/login\",\n auth: false,\n body: { account, password },\n });\n }\n\n refresh(refreshToken: string): Promise<TokenResponse> {\n return this.req({\n method: \"POST\",\n path: \"/auth/refresh\",\n auth: false,\n body: { refresh_token: refreshToken },\n });\n }\n\n oauthToken(body: Record<string, string>): Promise<TokenResponse> {\n return this.req({ method: \"POST\", path: \"/oauth/token\", auth: false, body });\n }\n\n oauthDeviceCode(body: Record<string, string>): Promise<DeviceCodeResponse> {\n return this.req({ method: \"POST\", path: \"/oauth/device/code\", auth: false, body });\n }\n\n oauthDeviceToken(body: Record<string, string>): Promise<TokenResponse> {\n return this.req({ method: \"POST\", path: \"/oauth/device/token\", auth: false, body });\n }\n\n oauthRevoke(token: string, tokenTypeHint = \"refresh_token\"): Promise<{ ok: boolean }> {\n return this.req<{ ok: boolean }>({\n method: \"POST\",\n path: \"/oauth/revoke\",\n body: { token, token_type_hint: tokenTypeHint },\n });\n }\n\n async logout(): Promise<{ ok: boolean }> {\n try {\n return await this.req<{ ok: boolean }>({ method: \"POST\", path: \"/auth/logout\" });\n } catch {\n return this.oauthRevoke(\"\", \"access_token\");\n }\n }\n}\n","import { QWENPAW_API_PREFIX } from \"../constants.js\";\nimport type { ResolvedConfig } from \"../config.js\";\nimport { HttpClient } from \"./client.js\";\n\nexport interface FileDescriptor {\n path: string;\n sha256: string;\n bytes: number;\n role: string;\n content_type?: string;\n mtime?: string;\n}\n\nexport interface RemoteAgent {\n remote_agent_id: string;\n remote_agent_name: string;\n local_agent_id?: string;\n status: string;\n cloud_url?: string;\n created_at?: string;\n latest_sync?: {\n sync_plan_id: string;\n status?: string;\n completed_at?: string;\n };\n}\n\nexport class QwenpawApiClient {\n private readonly http: HttpClient;\n\n constructor(config: ResolvedConfig) {\n this.http = new HttpClient(config);\n }\n\n private req<T>(opts: Parameters<HttpClient[\"request\"]>[0]): Promise<T> {\n return this.http.request<T>({ ...opts, prefix: QWENPAW_API_PREFIX });\n }\n\n listRemoteAgents(params: Record<string, string> = {}): Promise<{\n items: RemoteAgent[];\n next_cursor?: string | null;\n }> {\n const qs = new URLSearchParams(params).toString();\n return this.req({ path: `/remote-agents${qs ? `?${qs}` : \"\"}` });\n }\n\n createRemoteAgent(body: Record<string, unknown>): Promise<{ remote_agent: RemoteAgent }> {\n return this.req({\n method: \"POST\",\n path: \"/remote-agents\",\n body,\n });\n }\n}\n"],"mappings":"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","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@lsddream/platform-cli",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "AgentScope Platform CLI (asp) — login, remote agent registry, and QwenPaw sync preview",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"sideEffects": false,
|
|
7
|
+
"bin": {
|
|
8
|
+
"asp": "./dist/cli.js"
|
|
9
|
+
},
|
|
10
|
+
"main": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"import": "./dist/index.js"
|
|
16
|
+
},
|
|
17
|
+
"./package.json": "./package.json"
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist",
|
|
21
|
+
"README.md",
|
|
22
|
+
"LICENSE"
|
|
23
|
+
],
|
|
24
|
+
"scripts": {
|
|
25
|
+
"build": "tsup",
|
|
26
|
+
"dev": "tsup --watch",
|
|
27
|
+
"typecheck": "tsc -b",
|
|
28
|
+
"prepack": "npm run build",
|
|
29
|
+
"prepublishOnly": "npm run typecheck && npm run build"
|
|
30
|
+
},
|
|
31
|
+
"engines": {
|
|
32
|
+
"node": ">=18"
|
|
33
|
+
},
|
|
34
|
+
"keywords": [
|
|
35
|
+
"agentscope",
|
|
36
|
+
"agentscope-platform",
|
|
37
|
+
"qwenpaw",
|
|
38
|
+
"cli",
|
|
39
|
+
"platform-cli",
|
|
40
|
+
"asp"
|
|
41
|
+
],
|
|
42
|
+
"author": "AgentScope Platform Contributors",
|
|
43
|
+
"license": "Apache-2.0",
|
|
44
|
+
"homepage": "https://platform.agentscope.io",
|
|
45
|
+
"repository": {
|
|
46
|
+
"type": "git",
|
|
47
|
+
"url": "git+https://github.com/agentscope-ai/platform-cli.git"
|
|
48
|
+
},
|
|
49
|
+
"bugs": {
|
|
50
|
+
"url": "https://github.com/agentscope-ai/platform-cli/issues"
|
|
51
|
+
},
|
|
52
|
+
"publishConfig": {
|
|
53
|
+
"access": "public",
|
|
54
|
+
"registry": "https://registry.npmjs.org/"
|
|
55
|
+
},
|
|
56
|
+
"dependencies": {
|
|
57
|
+
"chalk": "^5.4.1",
|
|
58
|
+
"commander": "^13.1.0",
|
|
59
|
+
"open": "^10.1.0"
|
|
60
|
+
},
|
|
61
|
+
"devDependencies": {
|
|
62
|
+
"@types/node": "^22.13.10",
|
|
63
|
+
"tsup": "^8.4.0",
|
|
64
|
+
"typescript": "^5.8.2"
|
|
65
|
+
}
|
|
66
|
+
}
|