linkshell-cli 0.10.92 → 0.10.94
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/README.md +4 -4
- package/dist/cli/src/commands/desktop.d.ts +3 -0
- package/dist/cli/src/commands/desktop.js +2 -46
- package/dist/cli/src/commands/desktop.js.map +1 -1
- package/dist/cli/src/commands/host.d.ts +2 -2
- package/dist/cli/src/commands/host.js +3 -3
- package/dist/cli/src/commands/host.js.map +1 -1
- package/dist/cli/src/commands/login.js +1 -1
- package/dist/cli/src/commands/login.js.map +1 -1
- package/dist/cli/src/commands/setup.js +1 -1
- package/dist/cli/src/commands/setup.js.map +1 -1
- package/dist/cli/src/commands/sign-in.d.ts +2 -0
- package/dist/cli/src/commands/sign-in.js +4 -6
- package/dist/cli/src/commands/sign-in.js.map +1 -1
- package/dist/cli/src/pro-membership.d.ts +8 -8
- package/dist/cli/src/pro-membership.js +21 -27
- package/dist/cli/src/pro-membership.js.map +1 -1
- package/dist/cli/tsconfig.tsbuildinfo +1 -1
- package/dist/client-core/src/pro-membership.d.ts +37 -9
- package/dist/client-core/src/pro-membership.js +98 -70
- package/dist/client-core/src/pro-membership.js.map +1 -1
- package/dist/gateway/src/relay.js +17 -17
- package/dist/gateway/src/relay.js.map +1 -1
- package/dist/gateway/src/subscription.d.ts +4 -1
- package/dist/gateway/src/subscription.js +25 -13
- package/dist/gateway/src/subscription.js.map +1 -1
- package/dist/host/src/children.d.ts +43 -0
- package/dist/host/src/children.js +213 -0
- package/dist/host/src/children.js.map +1 -0
- package/dist/host/src/drivers/acp/antigravity.js +1 -1
- package/dist/host/src/drivers/acp/antigravity.js.map +1 -1
- package/dist/host/src/drivers/acp/client-services.js +2 -0
- package/dist/host/src/drivers/acp/client-services.js.map +1 -1
- package/dist/host/src/drivers/acp/connection.js +8 -2
- package/dist/host/src/drivers/acp/connection.js.map +1 -1
- package/dist/host/src/drivers/acp/driver.d.ts +1 -5
- package/dist/host/src/drivers/acp/driver.js +11 -16
- package/dist/host/src/drivers/acp/driver.js.map +1 -1
- package/dist/host/src/drivers/acp/mcp.js +2 -0
- package/dist/host/src/drivers/acp/mcp.js.map +1 -1
- package/dist/host/src/drivers/claude/activity.js +13 -0
- package/dist/host/src/drivers/claude/activity.js.map +1 -1
- package/dist/host/src/drivers/claude/driver.d.ts +15 -0
- package/dist/host/src/drivers/claude/driver.js +44 -2
- package/dist/host/src/drivers/claude/driver.js.map +1 -1
- package/dist/host/src/drivers/claude/mcp-apps.d.ts +70 -0
- package/dist/host/src/drivers/claude/mcp-apps.js +399 -0
- package/dist/host/src/drivers/claude/mcp-apps.js.map +1 -0
- package/dist/host/src/drivers/claude/task-process.d.ts +23 -0
- package/dist/host/src/drivers/claude/task-process.js +121 -0
- package/dist/host/src/drivers/claude/task-process.js.map +1 -0
- package/dist/host/src/drivers/claude/tasks.d.ts +8 -1
- package/dist/host/src/drivers/claude/tasks.js +34 -6
- package/dist/host/src/drivers/claude/tasks.js.map +1 -1
- package/dist/host/src/drivers/codex/driver.d.ts +21 -0
- package/dist/host/src/drivers/codex/driver.js +99 -12
- package/dist/host/src/drivers/codex/driver.js.map +1 -1
- package/dist/host/src/drivers/queue.d.ts +4 -0
- package/dist/host/src/drivers/queue.js +9 -0
- package/dist/host/src/drivers/queue.js.map +1 -0
- package/dist/host/src/drivers/types.d.ts +1 -1
- package/dist/host/src/fs.js +8 -8
- package/dist/host/src/fs.js.map +1 -1
- package/dist/host/src/gateway.js +3 -3
- package/dist/host/src/gateway.js.map +1 -1
- package/dist/host/src/host.js +6 -0
- package/dist/host/src/host.js.map +1 -1
- package/dist/host/src/hub.js +28 -14
- package/dist/host/src/hub.js.map +1 -1
- package/dist/host/src/ports.js +3 -3
- package/dist/host/src/ports.js.map +1 -1
- package/dist/host/src/process.d.ts +8 -2
- package/dist/host/src/process.js +37 -2
- package/dist/host/src/process.js.map +1 -1
- package/dist/host/src/rpc/mcp.d.ts +1 -1
- package/dist/host/src/rpc/mcp.js +2 -2
- package/dist/host/src/rpc/mcp.js.map +1 -1
- package/dist/host/src/rpc/server.js +5 -5
- package/dist/host/src/rpc/server.js.map +1 -1
- package/dist/host/src/screen-viewer.js +7 -7
- package/dist/host/src/screen.js +3 -3
- package/dist/host/src/screen.js.map +1 -1
- package/dist/host/src/slim.js +16 -4
- package/dist/host/src/slim.js.map +1 -1
- package/dist/host/src/store.js +8 -4
- package/dist/host/src/store.js.map +1 -1
- package/dist/host/src/terminals.js +15 -8
- package/dist/host/src/terminals.js.map +1 -1
- package/dist/wire/src/model.d.ts +4 -0
- package/dist/wire/src/model.js +4 -0
- package/dist/wire/src/model.js.map +1 -1
- package/dist/wire/src/peer.js +4 -4
- package/dist/wire/src/peer.js.map +1 -1
- package/dist/wire/src/relay-client.js +9 -9
- package/dist/wire/src/relay-client.js.map +1 -1
- package/dist/wire/src/relay.js +2 -2
- package/dist/wire/src/relay.js.map +1 -1
- package/dist/wire/src/rpc-mcp.js +5 -4
- package/dist/wire/src/rpc-mcp.js.map +1 -1
- package/dist/wire/src/rpc.d.ts +5 -0
- package/dist/wire/src/updates.js +1 -1
- package/package.json +4 -4
- package/src/commands/desktop.ts +2 -40
- package/src/commands/host.ts +3 -3
- package/src/commands/login.ts +1 -1
- package/src/commands/setup.ts +1 -1
- package/src/commands/sign-in.ts +6 -6
- package/src/pro-membership.ts +23 -23
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
import { fetchProMembership,
|
|
3
|
+
import { fetchProMembership, MembershipError } from "../../client-core/src/pro-membership.js";
|
|
4
4
|
import { getValidToken, loadAuth, SUPABASE_ANON_KEY, SUPABASE_URL } from "./auth.js";
|
|
5
5
|
import { linkshellDir } from "./utils/daemon.js";
|
|
6
|
-
const unknownMembership = { plan: "unknown", planExpiresAt: null };
|
|
6
|
+
const unknownMembership = { plan: "unknown", planExpiresAt: null, tier: null };
|
|
7
7
|
const changedAccount = "登录账号已变更,请刷新账号后重试";
|
|
8
8
|
const cachePath = () => join(linkshellDir(), "account-pro.json");
|
|
9
9
|
/** Snapshot polling stays offline; the dashboard refreshes this account-scoped cache separately. */
|
|
@@ -15,7 +15,10 @@ export function cachedMembership(userId) {
|
|
|
15
15
|
const expiry = typeof value.planExpiresAt === "string" && Number.isFinite(Date.parse(value.planExpiresAt)) ? value.planExpiresAt : null;
|
|
16
16
|
if (value.plan === "pro" && !expiry)
|
|
17
17
|
return { ...unknownMembership };
|
|
18
|
-
|
|
18
|
+
const tier = value.tier === "yearly" || value.tier === "monthly" ? value.tier : null;
|
|
19
|
+
if (value.plan !== "pro")
|
|
20
|
+
return { plan: value.plan, planExpiresAt: expiry, tier: null };
|
|
21
|
+
return Date.parse(expiry) > Date.now() ? { plan: "pro", planExpiresAt: expiry, tier: tier ?? "monthly" } : { plan: "free", planExpiresAt: expiry, tier: null };
|
|
19
22
|
}
|
|
20
23
|
catch {
|
|
21
24
|
return { ...unknownMembership };
|
|
@@ -24,7 +27,7 @@ export function cachedMembership(userId) {
|
|
|
24
27
|
export function cacheMembership(userId, membership, observedAt = Date.now()) {
|
|
25
28
|
try {
|
|
26
29
|
const previous = JSON.parse(readFileSync(cachePath(), "utf8"));
|
|
27
|
-
// A
|
|
30
|
+
// A slower request begun earlier cannot replace a newer observation.
|
|
28
31
|
if (previous.userId === userId && previous.observedAt > observedAt)
|
|
29
32
|
return;
|
|
30
33
|
}
|
|
@@ -46,20 +49,31 @@ async function accountToken(expectedUserId) {
|
|
|
46
49
|
throw new Error("登录已失效,请重新登录后再试");
|
|
47
50
|
return { userId: auth.userId, accessToken };
|
|
48
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* CLI and desktop often run where supabase.co is blocked: itool.tech first, the RPC after.
|
|
54
|
+
* `LINKSHELL_TOKEN_PROXY=off`, the switch that keeps sign-in off itool.tech, reverses the order.
|
|
55
|
+
*/
|
|
56
|
+
export async function lookupMembership(accessToken, signal) {
|
|
57
|
+
const prefer = process.env.LINKSHELL_TOKEN_PROXY === "off" ? "supabase" : "itool";
|
|
58
|
+
const membership = await fetchProMembership({ accessToken, supabaseUrl: SUPABASE_URL, anonKey: SUPABASE_ANON_KEY, prefer, signal });
|
|
59
|
+
return { plan: membership.plan, planExpiresAt: membership.expiresAt ?? null, tier: membership.tier ?? null };
|
|
60
|
+
}
|
|
49
61
|
export async function refreshMembership() {
|
|
50
62
|
const userId = loadAuth()?.userId;
|
|
51
63
|
const observedAt = Date.now();
|
|
52
64
|
try {
|
|
53
65
|
const account = await accountToken(userId);
|
|
54
|
-
const
|
|
66
|
+
const result = await lookupMembership(account.accessToken);
|
|
55
67
|
if (loadAuth()?.userId !== account.userId)
|
|
56
68
|
throw new Error(changedAccount);
|
|
57
|
-
const result = { plan: membership.plan, planExpiresAt: membership.expiresAt ?? null };
|
|
58
69
|
cacheMembership(account.userId, result, observedAt);
|
|
59
70
|
return result;
|
|
60
71
|
}
|
|
61
72
|
catch (error) {
|
|
62
|
-
|
|
73
|
+
// An unreachable or briefly unavailable service says nothing about the account: the last
|
|
74
|
+
// known state stays. Anything else (a refused token, an odd answer) leaves it unknown.
|
|
75
|
+
const transient = error instanceof MembershipError && (error.kind === "network" || error.kind === "unavailable");
|
|
76
|
+
if (!transient && userId && loadAuth()?.userId === userId) {
|
|
63
77
|
try {
|
|
64
78
|
cacheMembership(userId, unknownMembership, observedAt);
|
|
65
79
|
}
|
|
@@ -68,24 +82,4 @@ export async function refreshMembership() {
|
|
|
68
82
|
throw error;
|
|
69
83
|
}
|
|
70
84
|
}
|
|
71
|
-
export async function redeemDesktopPro(code, userId) {
|
|
72
|
-
if (!code.trim())
|
|
73
|
-
throw new Error("请输入激活码");
|
|
74
|
-
if (Buffer.byteLength(code, "utf8") > 512)
|
|
75
|
-
throw new Error("激活码内容过长,请检查后重试");
|
|
76
|
-
const account = await accountToken(userId);
|
|
77
|
-
const redeemed = await redeemProCode(account.accessToken, code);
|
|
78
|
-
const redemption = { userId, idempotent: redeemed.idempotent, planExpiresAt: redeemed.expiresAt };
|
|
79
|
-
let accountWarning;
|
|
80
|
-
try {
|
|
81
|
-
if (loadAuth()?.userId === userId)
|
|
82
|
-
cacheMembership(userId, { plan: "pro", planExpiresAt: redeemed.expiresAt });
|
|
83
|
-
}
|
|
84
|
-
catch {
|
|
85
|
-
accountWarning = "兑换已成功,会员状态暂未保存,请刷新会员状态";
|
|
86
|
-
}
|
|
87
|
-
if (loadAuth()?.userId !== userId)
|
|
88
|
-
accountWarning = "兑换已成功,登录账号已变更,请切回兑换时的账号查看会员状态";
|
|
89
|
-
return { redemption, accountWarning };
|
|
90
|
-
}
|
|
91
85
|
//# sourceMappingURL=pro-membership.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pro-membership.js","sourceRoot":"","sources":["../../../src/pro-membership.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"pro-membership.js","sourceRoot":"","sources":["../../../src/pro-membership.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAuB,MAAM,yCAAyC,CAAC;AACnH,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AASjD,MAAM,iBAAiB,GAAsB,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAClG,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAC1C,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,kBAAkB,CAAC,CAAC;AAEjE,oGAAoG;AACpG,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5D,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,GAAG,iBAAiB,EAAE,CAAC;QACjH,MAAM,MAAM,GAAG,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;QACxI,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,GAAG,iBAAiB,EAAE,CAAC;QACrE,MAAM,IAAI,GAA0B,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5G,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;YAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACzF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAClK,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAClC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,UAA6B,EAAE,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE;IACpG,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/D,qEAAqE;QACrE,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,IAAI,QAAQ,CAAC,UAAU,GAAG,UAAU;YAAE,OAAO;IAC7E,CAAC;IAAC,MAAM,CAAC,CAAC,mDAAmD,CAAC,CAAC;IAC/D,SAAS,CAAC,YAAY,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,aAAa,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,UAAU,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC9H,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,cAAuB;IACjD,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;IACxB,IAAI,CAAC,IAAI,EAAE,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,cAAc,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,cAAc;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;IACpG,MAAM,WAAW,GAAG,MAAM,aAAa,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,QAAQ,EAAE,CAAC;IAC3B,IAAI,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;IACrE,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,KAAK,WAAW;QAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC3F,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,WAAmB,EAAE,MAAoB;IAC9E,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;IAClF,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACpI,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,CAAC,SAAS,IAAI,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;AAC/G,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,MAAM,GAAG,QAAQ,EAAE,EAAE,MAAM,CAAC;IAClC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC3D,IAAI,QAAQ,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;QAC3E,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QACpD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,yFAAyF;QACzF,uFAAuF;QACvF,MAAM,SAAS,GAAG,KAAK,YAAY,eAAe,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;QACjH,IAAI,CAAC,SAAS,IAAI,MAAM,IAAI,QAAQ,EAAE,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;YAC1D,IAAI,CAAC;gBAAC,eAAe,CAAC,MAAM,EAAE,iBAAiB,EAAE,UAAU,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,mCAAmC,CAAC,CAAC;QAC/G,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|