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.
Files changed (108) hide show
  1. package/README.md +4 -4
  2. package/dist/cli/src/commands/desktop.d.ts +3 -0
  3. package/dist/cli/src/commands/desktop.js +2 -46
  4. package/dist/cli/src/commands/desktop.js.map +1 -1
  5. package/dist/cli/src/commands/host.d.ts +2 -2
  6. package/dist/cli/src/commands/host.js +3 -3
  7. package/dist/cli/src/commands/host.js.map +1 -1
  8. package/dist/cli/src/commands/login.js +1 -1
  9. package/dist/cli/src/commands/login.js.map +1 -1
  10. package/dist/cli/src/commands/setup.js +1 -1
  11. package/dist/cli/src/commands/setup.js.map +1 -1
  12. package/dist/cli/src/commands/sign-in.d.ts +2 -0
  13. package/dist/cli/src/commands/sign-in.js +4 -6
  14. package/dist/cli/src/commands/sign-in.js.map +1 -1
  15. package/dist/cli/src/pro-membership.d.ts +8 -8
  16. package/dist/cli/src/pro-membership.js +21 -27
  17. package/dist/cli/src/pro-membership.js.map +1 -1
  18. package/dist/cli/tsconfig.tsbuildinfo +1 -1
  19. package/dist/client-core/src/pro-membership.d.ts +37 -9
  20. package/dist/client-core/src/pro-membership.js +98 -70
  21. package/dist/client-core/src/pro-membership.js.map +1 -1
  22. package/dist/gateway/src/relay.js +17 -17
  23. package/dist/gateway/src/relay.js.map +1 -1
  24. package/dist/gateway/src/subscription.d.ts +4 -1
  25. package/dist/gateway/src/subscription.js +25 -13
  26. package/dist/gateway/src/subscription.js.map +1 -1
  27. package/dist/host/src/children.d.ts +43 -0
  28. package/dist/host/src/children.js +213 -0
  29. package/dist/host/src/children.js.map +1 -0
  30. package/dist/host/src/drivers/acp/antigravity.js +1 -1
  31. package/dist/host/src/drivers/acp/antigravity.js.map +1 -1
  32. package/dist/host/src/drivers/acp/client-services.js +2 -0
  33. package/dist/host/src/drivers/acp/client-services.js.map +1 -1
  34. package/dist/host/src/drivers/acp/connection.js +8 -2
  35. package/dist/host/src/drivers/acp/connection.js.map +1 -1
  36. package/dist/host/src/drivers/acp/driver.d.ts +1 -5
  37. package/dist/host/src/drivers/acp/driver.js +11 -16
  38. package/dist/host/src/drivers/acp/driver.js.map +1 -1
  39. package/dist/host/src/drivers/acp/mcp.js +2 -0
  40. package/dist/host/src/drivers/acp/mcp.js.map +1 -1
  41. package/dist/host/src/drivers/claude/activity.js +13 -0
  42. package/dist/host/src/drivers/claude/activity.js.map +1 -1
  43. package/dist/host/src/drivers/claude/driver.d.ts +15 -0
  44. package/dist/host/src/drivers/claude/driver.js +44 -2
  45. package/dist/host/src/drivers/claude/driver.js.map +1 -1
  46. package/dist/host/src/drivers/claude/mcp-apps.d.ts +70 -0
  47. package/dist/host/src/drivers/claude/mcp-apps.js +399 -0
  48. package/dist/host/src/drivers/claude/mcp-apps.js.map +1 -0
  49. package/dist/host/src/drivers/claude/task-process.d.ts +23 -0
  50. package/dist/host/src/drivers/claude/task-process.js +121 -0
  51. package/dist/host/src/drivers/claude/task-process.js.map +1 -0
  52. package/dist/host/src/drivers/claude/tasks.d.ts +8 -1
  53. package/dist/host/src/drivers/claude/tasks.js +34 -6
  54. package/dist/host/src/drivers/claude/tasks.js.map +1 -1
  55. package/dist/host/src/drivers/codex/driver.d.ts +21 -0
  56. package/dist/host/src/drivers/codex/driver.js +99 -12
  57. package/dist/host/src/drivers/codex/driver.js.map +1 -1
  58. package/dist/host/src/drivers/queue.d.ts +4 -0
  59. package/dist/host/src/drivers/queue.js +9 -0
  60. package/dist/host/src/drivers/queue.js.map +1 -0
  61. package/dist/host/src/drivers/types.d.ts +1 -1
  62. package/dist/host/src/fs.js +8 -8
  63. package/dist/host/src/fs.js.map +1 -1
  64. package/dist/host/src/gateway.js +3 -3
  65. package/dist/host/src/gateway.js.map +1 -1
  66. package/dist/host/src/host.js +6 -0
  67. package/dist/host/src/host.js.map +1 -1
  68. package/dist/host/src/hub.js +28 -14
  69. package/dist/host/src/hub.js.map +1 -1
  70. package/dist/host/src/ports.js +3 -3
  71. package/dist/host/src/ports.js.map +1 -1
  72. package/dist/host/src/process.d.ts +8 -2
  73. package/dist/host/src/process.js +37 -2
  74. package/dist/host/src/process.js.map +1 -1
  75. package/dist/host/src/rpc/mcp.d.ts +1 -1
  76. package/dist/host/src/rpc/mcp.js +2 -2
  77. package/dist/host/src/rpc/mcp.js.map +1 -1
  78. package/dist/host/src/rpc/server.js +5 -5
  79. package/dist/host/src/rpc/server.js.map +1 -1
  80. package/dist/host/src/screen-viewer.js +7 -7
  81. package/dist/host/src/screen.js +3 -3
  82. package/dist/host/src/screen.js.map +1 -1
  83. package/dist/host/src/slim.js +16 -4
  84. package/dist/host/src/slim.js.map +1 -1
  85. package/dist/host/src/store.js +8 -4
  86. package/dist/host/src/store.js.map +1 -1
  87. package/dist/host/src/terminals.js +15 -8
  88. package/dist/host/src/terminals.js.map +1 -1
  89. package/dist/wire/src/model.d.ts +4 -0
  90. package/dist/wire/src/model.js +4 -0
  91. package/dist/wire/src/model.js.map +1 -1
  92. package/dist/wire/src/peer.js +4 -4
  93. package/dist/wire/src/peer.js.map +1 -1
  94. package/dist/wire/src/relay-client.js +9 -9
  95. package/dist/wire/src/relay-client.js.map +1 -1
  96. package/dist/wire/src/relay.js +2 -2
  97. package/dist/wire/src/relay.js.map +1 -1
  98. package/dist/wire/src/rpc-mcp.js +5 -4
  99. package/dist/wire/src/rpc-mcp.js.map +1 -1
  100. package/dist/wire/src/rpc.d.ts +5 -0
  101. package/dist/wire/src/updates.js +1 -1
  102. package/package.json +4 -4
  103. package/src/commands/desktop.ts +2 -40
  104. package/src/commands/host.ts +3 -3
  105. package/src/commands/login.ts +1 -1
  106. package/src/commands/setup.ts +1 -1
  107. package/src/commands/sign-in.ts +6 -6
  108. 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, redeemProCode } from "../../client-core/src/pro-membership.js";
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
- return { plan: value.plan === "pro" ? expiry && Date.parse(expiry) > Date.now() ? "pro" : "free" : value.plan, planExpiresAt: expiry };
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 profile request begun before redemption cannot replace its confirmed result.
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 membership = await fetchProMembership({ ...account, supabaseUrl: SUPABASE_URL, anonKey: SUPABASE_ANON_KEY });
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
- if (userId && loadAuth()?.userId === userId) {
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":"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"}
1
+ {"version":3,"file":"pro-membership.js","sourceRoot":"","sources":["../../../src/pro-membership.ts"],"names":[],"mappings":"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"}