linkshell-cli 0.10.74 → 0.10.75
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/dist/cli/src/commands/desktop-workspace.js +62 -9
- package/dist/cli/src/commands/desktop-workspace.js.map +1 -1
- package/dist/cli/src/commands/desktop.d.ts +13 -2
- package/dist/cli/src/commands/desktop.js +87 -1
- package/dist/cli/src/commands/desktop.js.map +1 -1
- package/dist/cli/src/commands/login-error.d.ts +9 -0
- package/dist/cli/src/commands/login-error.js +14 -0
- package/dist/cli/src/commands/login-error.js.map +1 -0
- package/dist/cli/src/commands/login.d.ts +2 -7
- package/dist/cli/src/commands/login.js +23 -52
- package/dist/cli/src/commands/login.js.map +1 -1
- package/dist/cli/src/commands/sign-in.d.ts +77 -0
- package/dist/cli/src/commands/sign-in.js +390 -0
- package/dist/cli/src/commands/sign-in.js.map +1 -0
- package/dist/cli/src/index.js +2 -1
- package/dist/cli/src/index.js.map +1 -1
- package/dist/cli/tsconfig.tsbuildinfo +1 -1
- package/dist/client-core/src/account-errors.d.ts +17 -0
- package/dist/client-core/src/account-errors.js +82 -0
- package/dist/client-core/src/account-errors.js.map +1 -0
- package/dist/host/src/drivers/acp/antigravity.d.ts +13 -0
- package/dist/host/src/drivers/acp/antigravity.js +13 -0
- package/dist/host/src/drivers/acp/antigravity.js.map +1 -1
- package/dist/host/src/drivers/acp/driver.d.ts +14 -1
- package/dist/host/src/drivers/acp/driver.js +45 -3
- package/dist/host/src/drivers/acp/driver.js.map +1 -1
- package/dist/host/src/drivers/acp/mapper.d.ts +2 -0
- package/dist/host/src/drivers/acp/mapper.js +6 -1
- package/dist/host/src/drivers/acp/mapper.js.map +1 -1
- package/dist/host/src/drivers/claude/app-sessions.d.ts +58 -0
- package/dist/host/src/drivers/claude/app-sessions.js +183 -0
- package/dist/host/src/drivers/claude/app-sessions.js.map +1 -0
- package/dist/host/src/drivers/claude/driver.d.ts +22 -1
- package/dist/host/src/drivers/claude/driver.js +95 -10
- package/dist/host/src/drivers/claude/driver.js.map +1 -1
- package/dist/host/src/drivers/claude/holders.d.ts +3 -1
- package/dist/host/src/drivers/claude/holders.js +4 -0
- package/dist/host/src/drivers/claude/holders.js.map +1 -1
- package/dist/host/src/drivers/claude/routing.d.ts +19 -0
- package/dist/host/src/drivers/claude/routing.js +145 -0
- package/dist/host/src/drivers/claude/routing.js.map +1 -0
- package/dist/host/src/drivers/claude/transcript.d.ts +10 -0
- package/dist/host/src/drivers/claude/transcript.js +97 -22
- package/dist/host/src/drivers/claude/transcript.js.map +1 -1
- package/dist/host/src/drivers/codex/driver.d.ts +15 -0
- package/dist/host/src/drivers/codex/driver.js +47 -9
- package/dist/host/src/drivers/codex/driver.js.map +1 -1
- package/dist/host/src/drivers/codex/mapper.d.ts +41 -7
- package/dist/host/src/drivers/codex/mapper.js +167 -26
- package/dist/host/src/drivers/codex/mapper.js.map +1 -1
- package/dist/host/src/drivers/codex/mcp-apps.d.ts +69 -0
- package/dist/host/src/drivers/codex/mcp-apps.js +340 -0
- package/dist/host/src/drivers/codex/mcp-apps.js.map +1 -0
- package/dist/host/src/drivers/codex/settings.d.ts +13 -0
- package/dist/host/src/drivers/codex/settings.js +22 -6
- package/dist/host/src/drivers/codex/settings.js.map +1 -1
- package/dist/host/src/drivers/types.d.ts +50 -1
- package/dist/host/src/hub.d.ts +33 -1
- package/dist/host/src/hub.js +157 -13
- package/dist/host/src/hub.js.map +1 -1
- package/dist/host/src/rpc/mcp.d.ts +8 -0
- package/dist/host/src/rpc/mcp.js +33 -0
- package/dist/host/src/rpc/mcp.js.map +1 -0
- package/dist/host/src/rpc/server.js +16 -2
- package/dist/host/src/rpc/server.js.map +1 -1
- package/dist/host/src/store.d.ts +7 -0
- package/dist/host/src/store.js +27 -3
- package/dist/host/src/store.js.map +1 -1
- package/dist/host/src/terminals.d.ts +6 -0
- package/dist/host/src/terminals.js +29 -2
- package/dist/host/src/terminals.js.map +1 -1
- package/dist/host/src/usage.d.ts +5 -0
- package/dist/host/src/usage.js +10 -2
- package/dist/host/src/usage.js.map +1 -1
- package/dist/wire/src/envelopes.d.ts +53 -0
- package/dist/wire/src/envelopes.js +251 -0
- package/dist/wire/src/envelopes.js.map +1 -0
- package/dist/wire/src/index.d.ts +2 -0
- package/dist/wire/src/index.js +2 -0
- package/dist/wire/src/index.js.map +1 -1
- package/dist/wire/src/model.d.ts +32 -0
- package/dist/wire/src/model.js +24 -0
- package/dist/wire/src/model.js.map +1 -1
- package/dist/wire/src/rpc-mcp.d.ts +199 -0
- package/dist/wire/src/rpc-mcp.js +78 -0
- package/dist/wire/src/rpc-mcp.js.map +1 -0
- package/dist/wire/src/rpc.d.ts +494 -4
- package/dist/wire/src/rpc.js +30 -2
- package/dist/wire/src/rpc.js.map +1 -1
- package/dist/wire/src/updates.d.ts +211 -0
- package/dist/wire/src/updates.js +14 -1
- package/dist/wire/src/updates.js.map +1 -1
- package/package.json +4 -4
- package/src/commands/desktop-workspace.ts +69 -11
- package/src/commands/desktop.ts +71 -1
- package/src/commands/login-error.ts +12 -0
- package/src/commands/login.ts +13 -62
- package/src/commands/sign-in.ts +408 -0
- package/src/index.ts +2 -1
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type AccountErrorCode = "invalid_credentials" | "email_not_confirmed" | "missing_credentials" | "oauth_expired" | "oauth_denied" | "identity_conflict" | "provider_disabled" | "rate_limited" | "user_banned" | "unavailable" | "network" | "timeout" | "browser_timeout" | "cancelled" | "unverified" | "unknown";
|
|
2
|
+
export declare const ACCOUNT_ERROR_MESSAGES: Record<AccountErrorCode, string>;
|
|
3
|
+
export declare function accountErrorMessage(code: AccountErrorCode): string;
|
|
4
|
+
/** A refusal that a retry elsewhere (the other route to Supabase) would only repeat. */
|
|
5
|
+
export declare function isDefinitiveAccountError(code: AccountErrorCode): boolean;
|
|
6
|
+
/**
|
|
7
|
+
* A failed `/auth/v1/token` (or itool.tech's `/api/linkshell/auth`). GoTrue has answered in two
|
|
8
|
+
* shapes over the years: `error_code` + `msg`, and the older OAuth-style `error` +
|
|
9
|
+
* `error_description`, where `invalid_grant` covered every password failure.
|
|
10
|
+
*/
|
|
11
|
+
export declare function tokenErrorCode(status: number, body: unknown, grant?: "password" | "pkce" | "refresh_token"): AccountErrorCode;
|
|
12
|
+
/** The `error` / `error_code` / `error_description` an OAuth redirect carries back. */
|
|
13
|
+
export declare function oauthErrorCode(params: {
|
|
14
|
+
error?: string | null;
|
|
15
|
+
errorCode?: string | null;
|
|
16
|
+
description?: string | null;
|
|
17
|
+
}): AccountErrorCode;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// What the iTool account service (Supabase auth, or itool.tech's proxy in front of it) answers
|
|
2
|
+
// when a sign-in fails, in the words the app and the desktop show. One table, so the phone and
|
|
3
|
+
// the computer never describe the same refusal differently. No I/O and no imports: the CLI
|
|
4
|
+
// compiles this file directly.
|
|
5
|
+
export const ACCOUNT_ERROR_MESSAGES = {
|
|
6
|
+
// Supabase answers the same for a wrong password and for an account that has none (signed up
|
|
7
|
+
// with GitHub or Google), so the message has to cover both.
|
|
8
|
+
invalid_credentials: "邮箱或密码不正确。用 GitHub 或 Google 注册的账号没有密码,请用对应的按钮登录。",
|
|
9
|
+
email_not_confirmed: "邮箱还没有验证,请先查收 iTool 发送的验证邮件。",
|
|
10
|
+
missing_credentials: "请输入邮箱和密码。",
|
|
11
|
+
oauth_expired: "这次登录已失效,请重新登录。",
|
|
12
|
+
oauth_denied: "已在浏览器中取消授权。",
|
|
13
|
+
identity_conflict: "这个邮箱已经用另一种方式注册过,请用原来的方式登录。",
|
|
14
|
+
provider_disabled: "这种登录方式暂时不可用,请改用其他方式。",
|
|
15
|
+
rate_limited: "尝试次数过多,请稍后再试。",
|
|
16
|
+
user_banned: "这个账号已被停用。",
|
|
17
|
+
unavailable: "登录服务暂时不可用,请稍后重试。",
|
|
18
|
+
network: "无法连接登录服务,请检查网络后重试。",
|
|
19
|
+
timeout: "登录请求超时,请检查网络后重试。",
|
|
20
|
+
browser_timeout: "5 分钟内没有收到浏览器的登录结果,请重试。",
|
|
21
|
+
cancelled: "已取消登录。",
|
|
22
|
+
unverified: "无法验证账号,请重新登录。",
|
|
23
|
+
unknown: "登录失败,请稍后重试。",
|
|
24
|
+
};
|
|
25
|
+
export function accountErrorMessage(code) {
|
|
26
|
+
return ACCOUNT_ERROR_MESSAGES[code];
|
|
27
|
+
}
|
|
28
|
+
/** A refusal that a retry elsewhere (the other route to Supabase) would only repeat. */
|
|
29
|
+
export function isDefinitiveAccountError(code) {
|
|
30
|
+
return !["unavailable", "network", "timeout", "unknown"].includes(code);
|
|
31
|
+
}
|
|
32
|
+
function record(value) {
|
|
33
|
+
return value !== null && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
34
|
+
}
|
|
35
|
+
function text(value) {
|
|
36
|
+
return typeof value === "string" ? value : "";
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* A failed `/auth/v1/token` (or itool.tech's `/api/linkshell/auth`). GoTrue has answered in two
|
|
40
|
+
* shapes over the years: `error_code` + `msg`, and the older OAuth-style `error` +
|
|
41
|
+
* `error_description`, where `invalid_grant` covered every password failure.
|
|
42
|
+
*/
|
|
43
|
+
export function tokenErrorCode(status, body, grant = "password") {
|
|
44
|
+
const json = record(body);
|
|
45
|
+
const code = text(json.error_code) || text(json.code) || text(json.error);
|
|
46
|
+
const detail = `${text(json.msg)} ${text(json.message)} ${text(json.error_description)}`;
|
|
47
|
+
if (code === "email_not_confirmed" || /email not confirmed/i.test(detail))
|
|
48
|
+
return "email_not_confirmed";
|
|
49
|
+
if (code === "invalid_credentials" || /invalid login credentials/i.test(detail))
|
|
50
|
+
return "invalid_credentials";
|
|
51
|
+
if (["flow_state_not_found", "flow_state_expired", "bad_code_verifier", "bad_oauth_state"].includes(code))
|
|
52
|
+
return "oauth_expired";
|
|
53
|
+
if (code === "invalid_grant")
|
|
54
|
+
return grant === "password" ? "invalid_credentials" : "oauth_expired";
|
|
55
|
+
if (code === "user_banned")
|
|
56
|
+
return "user_banned";
|
|
57
|
+
if (code === "over_request_rate_limit" || code === "rate_limited" || status === 429)
|
|
58
|
+
return "rate_limited";
|
|
59
|
+
if (code === "provider_disabled" || /provider is not enabled|unsupported provider/i.test(detail))
|
|
60
|
+
return "provider_disabled";
|
|
61
|
+
if (code === "temporarily_unavailable" || status >= 500)
|
|
62
|
+
return "unavailable";
|
|
63
|
+
return "unknown";
|
|
64
|
+
}
|
|
65
|
+
/** The `error` / `error_code` / `error_description` an OAuth redirect carries back. */
|
|
66
|
+
export function oauthErrorCode(params) {
|
|
67
|
+
const error = params.error ?? "";
|
|
68
|
+
const code = params.errorCode ?? "";
|
|
69
|
+
const detail = `${params.description ?? ""} ${error}`;
|
|
70
|
+
if (/same email|already registered|linking domain|identity_already_exists|email_exists/i.test(`${detail} ${code}`))
|
|
71
|
+
return "identity_conflict";
|
|
72
|
+
if (/provider is not enabled|unsupported provider/i.test(detail) || code === "provider_disabled")
|
|
73
|
+
return "provider_disabled";
|
|
74
|
+
if (error === "access_denied" || code === "access_denied")
|
|
75
|
+
return "oauth_denied";
|
|
76
|
+
if (/flow state|expired/i.test(detail) || ["flow_state_not_found", "flow_state_expired", "bad_oauth_state", "bad_oauth_callback"].includes(code))
|
|
77
|
+
return "oauth_expired";
|
|
78
|
+
if (error === "temporarily_unavailable" || error === "server_error")
|
|
79
|
+
return "unavailable";
|
|
80
|
+
return "unknown";
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=account-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-errors.js","sourceRoot":"","sources":["../../../../client-core/src/account-errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -205,6 +205,19 @@ export declare class AntigravityDriver extends AcpDriver {
|
|
|
205
205
|
private listDesktopSessions;
|
|
206
206
|
listSessions(limit: number): Promise<DiscoveredSession[]>;
|
|
207
207
|
archivedSessions(): Promise<string[]>;
|
|
208
|
+
/**
|
|
209
|
+
* With the desktop app: its model list (one call to its running language
|
|
210
|
+
* server, cached) and the model a new conversation gets, chosen as
|
|
211
|
+
* createSession chooses it. Through ACP: what the latest session was told.
|
|
212
|
+
*/
|
|
213
|
+
listModels(): Promise<{
|
|
214
|
+
models: {
|
|
215
|
+
value: string;
|
|
216
|
+
name: string;
|
|
217
|
+
description?: string;
|
|
218
|
+
}[];
|
|
219
|
+
current?: string;
|
|
220
|
+
}>;
|
|
208
221
|
private loadDesktopModels;
|
|
209
222
|
/**
|
|
210
223
|
* The model and command auto-run policy the desktop app last used for a
|
|
@@ -1537,6 +1537,19 @@ export class AntigravityDriver extends AcpDriver {
|
|
|
1537
1537
|
return this.archivedCache?.ids ?? [];
|
|
1538
1538
|
}
|
|
1539
1539
|
}
|
|
1540
|
+
/**
|
|
1541
|
+
* With the desktop app: its model list (one call to its running language
|
|
1542
|
+
* server, cached) and the model a new conversation gets, chosen as
|
|
1543
|
+
* createSession chooses it. Through ACP: what the latest session was told.
|
|
1544
|
+
*/
|
|
1545
|
+
async listModels() {
|
|
1546
|
+
if (!this.desktopMode)
|
|
1547
|
+
return super.listModels();
|
|
1548
|
+
const models = await this.loadDesktopModels();
|
|
1549
|
+
if (models.length === 0)
|
|
1550
|
+
return { models: [] };
|
|
1551
|
+
return { models, current: (await this.resolveSessionModel("", models))?.value };
|
|
1552
|
+
}
|
|
1540
1553
|
async loadDesktopModels() {
|
|
1541
1554
|
// New models ship with app updates; a running host picks them up within ten minutes.
|
|
1542
1555
|
if (this.desktopModelsCache?.models.length && Date.now() - this.desktopModelsCache.at < 10 * 60_000)
|