@visiblebase/manager 0.1.1

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 (98) hide show
  1. package/README.md +33 -0
  2. package/bin/admin/auth-error.d.ts +30 -0
  3. package/bin/admin/auth-error.d.ts.map +1 -0
  4. package/bin/admin/auth-error.js +45 -0
  5. package/bin/admin/auth-error.js.map +1 -0
  6. package/bin/admin/commands/accounts.d.ts +6 -0
  7. package/bin/admin/commands/accounts.d.ts.map +1 -0
  8. package/bin/admin/commands/accounts.js +44 -0
  9. package/bin/admin/commands/accounts.js.map +1 -0
  10. package/bin/admin/commands/balance.d.ts +6 -0
  11. package/bin/admin/commands/balance.d.ts.map +1 -0
  12. package/bin/admin/commands/balance.js +100 -0
  13. package/bin/admin/commands/balance.js.map +1 -0
  14. package/bin/admin/commands/config.d.ts +9 -0
  15. package/bin/admin/commands/config.d.ts.map +1 -0
  16. package/bin/admin/commands/config.js +55 -0
  17. package/bin/admin/commands/config.js.map +1 -0
  18. package/bin/admin/commands/custom.d.ts +6 -0
  19. package/bin/admin/commands/custom.d.ts.map +1 -0
  20. package/bin/admin/commands/custom.js +47 -0
  21. package/bin/admin/commands/custom.js.map +1 -0
  22. package/bin/admin/commands/models.d.ts +14 -0
  23. package/bin/admin/commands/models.d.ts.map +1 -0
  24. package/bin/admin/commands/models.js +56 -0
  25. package/bin/admin/commands/models.js.map +1 -0
  26. package/bin/admin/commands/payment.d.ts +6 -0
  27. package/bin/admin/commands/payment.d.ts.map +1 -0
  28. package/bin/admin/commands/payment.js +33 -0
  29. package/bin/admin/commands/payment.js.map +1 -0
  30. package/bin/admin/commands/plugin-env.d.ts +11 -0
  31. package/bin/admin/commands/plugin-env.d.ts.map +1 -0
  32. package/bin/admin/commands/plugin-env.js +283 -0
  33. package/bin/admin/commands/plugin-env.js.map +1 -0
  34. package/bin/admin/commands/products.d.ts +6 -0
  35. package/bin/admin/commands/products.d.ts.map +1 -0
  36. package/bin/admin/commands/products.js +77 -0
  37. package/bin/admin/commands/products.js.map +1 -0
  38. package/bin/admin/commands/usage.d.ts +6 -0
  39. package/bin/admin/commands/usage.d.ts.map +1 -0
  40. package/bin/admin/commands/usage.js +44 -0
  41. package/bin/admin/commands/usage.js.map +1 -0
  42. package/bin/admin/loop.d.ts +6 -0
  43. package/bin/admin/loop.d.ts.map +1 -0
  44. package/bin/admin/loop.js +75 -0
  45. package/bin/admin/loop.js.map +1 -0
  46. package/bin/agent/pi-agent.d.ts +15 -0
  47. package/bin/agent/pi-agent.d.ts.map +1 -0
  48. package/bin/agent/pi-agent.js +136 -0
  49. package/bin/agent/pi-agent.js.map +1 -0
  50. package/bin/app.d.ts +13 -0
  51. package/bin/app.d.ts.map +1 -0
  52. package/bin/app.js +67 -0
  53. package/bin/app.js.map +1 -0
  54. package/bin/auth/admin.d.ts +8 -0
  55. package/bin/auth/admin.d.ts.map +1 -0
  56. package/bin/auth/admin.js +24 -0
  57. package/bin/auth/admin.js.map +1 -0
  58. package/bin/auth/mode-select.d.ts +12 -0
  59. package/bin/auth/mode-select.d.ts.map +1 -0
  60. package/bin/auth/mode-select.js +30 -0
  61. package/bin/auth/mode-select.js.map +1 -0
  62. package/bin/auth/server-switch.d.ts +16 -0
  63. package/bin/auth/server-switch.d.ts.map +1 -0
  64. package/bin/auth/server-switch.js +98 -0
  65. package/bin/auth/server-switch.js.map +1 -0
  66. package/bin/auth/user.d.ts +21 -0
  67. package/bin/auth/user.d.ts.map +1 -0
  68. package/bin/auth/user.js +223 -0
  69. package/bin/auth/user.js.map +1 -0
  70. package/bin/core/env.d.ts +15 -0
  71. package/bin/core/env.d.ts.map +1 -0
  72. package/bin/core/env.js +67 -0
  73. package/bin/core/env.js.map +1 -0
  74. package/bin/core/session.d.ts +53 -0
  75. package/bin/core/session.d.ts.map +1 -0
  76. package/bin/core/session.js +118 -0
  77. package/bin/core/session.js.map +1 -0
  78. package/bin/core/ui.d.ts +29 -0
  79. package/bin/core/ui.d.ts.map +1 -0
  80. package/bin/core/ui.js +58 -0
  81. package/bin/core/ui.js.map +1 -0
  82. package/bin/user/balance.d.ts +19 -0
  83. package/bin/user/balance.d.ts.map +1 -0
  84. package/bin/user/balance.js +62 -0
  85. package/bin/user/balance.js.map +1 -0
  86. package/bin/user/chat.d.ts +12 -0
  87. package/bin/user/chat.d.ts.map +1 -0
  88. package/bin/user/chat.js +70 -0
  89. package/bin/user/chat.js.map +1 -0
  90. package/bin/user/loop.d.ts +13 -0
  91. package/bin/user/loop.d.ts.map +1 -0
  92. package/bin/user/loop.js +87 -0
  93. package/bin/user/loop.js.map +1 -0
  94. package/bin/user/models.d.ts +10 -0
  95. package/bin/user/models.d.ts.map +1 -0
  96. package/bin/user/models.js +39 -0
  97. package/bin/user/models.js.map +1 -0
  98. package/package.json +52 -0
package/README.md ADDED
@@ -0,0 +1,33 @@
1
+ # @visiblebase/manager
2
+
3
+ `@visiblebase/manager` 是 VisibleBase 的交互式终端代理。
4
+
5
+ 它把管理侧和用户侧的常见操作收口到一个 `visiblebase` 命令里,适合本地调试、初始化 Base、切换身份、查看模型以及直接体验产品侧调用。
6
+
7
+ ## 安装
8
+
9
+ ```bash
10
+ npm i -g @visiblebase/manager
11
+ ```
12
+
13
+ ## 使用
14
+
15
+ ```bash
16
+ visiblebase
17
+ ```
18
+
19
+ 默认会进入交互式终端界面,你可以:
20
+
21
+ - 切换 Base 服务端
22
+ - 以 Admin 身份管理 env、models、products、accounts、usage、payment
23
+ - 以 User 身份登录并直接体验 chat、models、service 调用
24
+
25
+ ## 依赖关系
26
+
27
+ - `@visiblebase/manager` 负责终端里的交互入口
28
+ - `@visiblebase/client` 负责真正的 SDK 调用边界
29
+
30
+ ## 文档
31
+
32
+ - 仓库首页:[visiblebase](https://github.com/wangenius/visiblebase)
33
+ - 文档目录:[homepage/content/docs](https://github.com/wangenius/visiblebase/tree/main/homepage/content/docs)
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Admin 鉴权错误工具。
3
+ *
4
+ * 关键说明(中文)
5
+ * - 当 admin key 不正确或已失效时,SDK 会把请求失败包装成带 `status` 的 Error。
6
+ * - 这里统一把 401 转成可识别的 AdminAuthError,方便外层清理缓存 session 并提示重新输入。
7
+ */
8
+ /**
9
+ * admin key 无效时给用户展示的统一提示。
10
+ */
11
+ export declare const ADMIN_AUTH_INVALID_MESSAGE = "Current server admin key is incorrect or expired. Please set it again.";
12
+ /**
13
+ * admin 鉴权失效错误。
14
+ */
15
+ export declare class AdminAuthError extends Error {
16
+ constructor(message?: string);
17
+ }
18
+ /**
19
+ * 判断当前错误是否是 admin 鉴权失效。
20
+ */
21
+ export declare function isAdminAuthError(error: unknown): error is AdminAuthError;
22
+ /**
23
+ * 如果底层错误是 401,则提升为 AdminAuthError。
24
+ */
25
+ export declare function rethrowAdminAuthError(error: unknown): void;
26
+ /**
27
+ * 提取可展示的错误文本。
28
+ */
29
+ export declare function adminErrorMessage(error: unknown): string;
30
+ //# sourceMappingURL=auth-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-error.d.ts","sourceRoot":"","sources":["../../src/admin/auth-error.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,eAAO,MAAM,0BAA0B,2EACmC,CAAC;AAO3E;;GAEG;AACH,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,SAA6B;CAIjD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAExE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAK1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKxD"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Admin 鉴权错误工具。
3
+ *
4
+ * 关键说明(中文)
5
+ * - 当 admin key 不正确或已失效时,SDK 会把请求失败包装成带 `status` 的 Error。
6
+ * - 这里统一把 401 转成可识别的 AdminAuthError,方便外层清理缓存 session 并提示重新输入。
7
+ */
8
+ /**
9
+ * admin key 无效时给用户展示的统一提示。
10
+ */
11
+ export const ADMIN_AUTH_INVALID_MESSAGE = "Current server admin key is incorrect or expired. Please set it again.";
12
+ /**
13
+ * admin 鉴权失效错误。
14
+ */
15
+ export class AdminAuthError extends Error {
16
+ constructor(message = ADMIN_AUTH_INVALID_MESSAGE) {
17
+ super(message);
18
+ this.name = "AdminAuthError";
19
+ }
20
+ }
21
+ /**
22
+ * 判断当前错误是否是 admin 鉴权失效。
23
+ */
24
+ export function isAdminAuthError(error) {
25
+ return error instanceof AdminAuthError;
26
+ }
27
+ /**
28
+ * 如果底层错误是 401,则提升为 AdminAuthError。
29
+ */
30
+ export function rethrowAdminAuthError(error) {
31
+ const status = error?.status;
32
+ if (status === 401) {
33
+ throw new AdminAuthError();
34
+ }
35
+ }
36
+ /**
37
+ * 提取可展示的错误文本。
38
+ */
39
+ export function adminErrorMessage(error) {
40
+ if (error instanceof Error) {
41
+ return error.message;
42
+ }
43
+ return String(error);
44
+ }
45
+ //# sourceMappingURL=auth-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-error.js","sourceRoot":"","sources":["../../src/admin/auth-error.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GACrC,wEAAwE,CAAC;AAO3E;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,YAAY,OAAO,GAAG,0BAA0B;QAC9C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,KAAK,YAAY,cAAc,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,MAAM,MAAM,GAAI,KAAqC,EAAE,MAAM,CAAC;IAC9D,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,MAAM,IAAI,cAAc,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Admin Accounts 管理命令。
3
+ */
4
+ import { AdminClient } from "@visiblebase/client";
5
+ export declare function manageAccounts(a: AdminClient): Promise<void>;
6
+ //# sourceMappingURL=accounts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../../src/admin/commands/accounts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAKlD,wBAAsB,cAAc,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAkClE"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Admin Accounts 管理命令。
3
+ */
4
+ import { select, isCancel } from "@clack/prompts";
5
+ import { showError } from "../../core/ui.js";
6
+ import { adminErrorMessage, rethrowAdminAuthError } from "../auth-error.js";
7
+ export async function manageAccounts(a) {
8
+ const svc = a.service("accounts");
9
+ while (true) {
10
+ const act = await select({
11
+ message: "Accounts",
12
+ options: [
13
+ { label: "List users", value: "users" },
14
+ { label: "List sessions", value: "sessions" },
15
+ { label: "Back", value: "back" },
16
+ ],
17
+ });
18
+ if (!act || isCancel(act) || act === "back")
19
+ return;
20
+ try {
21
+ if (act === "users") {
22
+ const b = await svc.get("users");
23
+ console.log(`\n${b.items.length} users:\n`);
24
+ for (const u of b.items) {
25
+ console.log(` ${u.user_id.padEnd(30)} ${u.email.padEnd(30)} ${u.created_at.slice(0, 10)}`);
26
+ }
27
+ console.log("");
28
+ }
29
+ else {
30
+ const b = await svc.get("sessions");
31
+ console.log(`\n${b.items.length} sessions:\n`);
32
+ for (const s of b.items) {
33
+ console.log(` ${s.session_id.padEnd(36)} ${s.user_id.padEnd(30)} [${s.status}]`);
34
+ }
35
+ console.log("");
36
+ }
37
+ }
38
+ catch (e) {
39
+ rethrowAdminAuthError(e);
40
+ showError(adminErrorMessage(e));
41
+ }
42
+ }
43
+ }
44
+ //# sourceMappingURL=accounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../../src/admin/commands/accounts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAE5E,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,CAAc;IACjD,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAClC,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC;YACvB,OAAO,EAAE,UAAU;YACnB,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE;gBACvC,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE;gBAC7C,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;aACjC;SACF,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,MAAM;YAAE,OAAO;QAEpD,IAAI,CAAC;YACH,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;gBACpB,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,CAAsE,OAAO,CAAC,CAAC;gBACtG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,WAAW,CAAC,CAAC;gBAC5C,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;oBACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC9F,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,CAAuE,UAAU,CAAC,CAAC;gBAC1G,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,cAAc,CAAC,CAAC;gBAC/C,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;oBACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;gBACpF,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,qBAAqB,CAAC,CAAC,CAAC,CAAC;YACzB,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Admin Balance 管理命令。
3
+ */
4
+ import { AdminClient } from "@visiblebase/client";
5
+ export declare function manageBalance(a: AdminClient): Promise<void>;
6
+ //# sourceMappingURL=balance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../../src/admin/commands/balance.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAgDlD,wBAAsB,aAAa,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA+FjE"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Admin Balance 管理命令。
3
+ */
4
+ import { isCancel, select } from "@clack/prompts";
5
+ import { askText, showError, showSuccess } from "../../core/ui.js";
6
+ import { adminErrorMessage, rethrowAdminAuthError } from "../auth-error.js";
7
+ export async function manageBalance(a) {
8
+ const svc = a.service("balance");
9
+ while (true) {
10
+ const act = await select({
11
+ message: "Balance",
12
+ options: [
13
+ { label: "List users", value: "users" },
14
+ { label: "History", value: "history" },
15
+ { label: "Topups", value: "topups" },
16
+ { label: "Add balance", value: "add" },
17
+ { label: "Subtract balance", value: "sub" },
18
+ { label: "Finish topup", value: "finish" },
19
+ { label: "Cancel topup", value: "cancel" },
20
+ { label: "Back", value: "back" },
21
+ ],
22
+ });
23
+ if (!act || isCancel(act) || act === "back")
24
+ return;
25
+ try {
26
+ if (act === "users") {
27
+ const response = await svc.get("users", { limit: 30 });
28
+ console.log(`\n${response.items.length} balance accounts:\n`);
29
+ for (const item of response.items) {
30
+ console.log(` ${item.user_id.padEnd(28)} ${String(item.balance).padStart(8)} ${item.unit.padEnd(10)} ${item.updated_at.slice(0, 19)}`);
31
+ }
32
+ console.log("");
33
+ continue;
34
+ }
35
+ if (act === "history") {
36
+ const userId = await askText("user_id (optional)");
37
+ const response = await svc.get("history", {
38
+ limit: 30,
39
+ user_id: userId ?? "",
40
+ });
41
+ console.log(`\n${response.items.length} balance history entries:\n`);
42
+ for (const item of response.items) {
43
+ console.log(` ${item.created_at.slice(0, 19)} ${item.user_id.padEnd(20)} ${item.kind.padEnd(8)} ${String(item.amount).padStart(6)} -> ${String(item.balance_after).padStart(6)} ${item.note}`);
44
+ }
45
+ console.log("");
46
+ continue;
47
+ }
48
+ if (act === "topups") {
49
+ const userId = await askText("user_id (optional)");
50
+ const response = await svc.get("topups", {
51
+ limit: 30,
52
+ user_id: userId ?? "",
53
+ });
54
+ console.log(`\n${response.items.length} topup orders:\n`);
55
+ for (const item of response.items) {
56
+ console.log(` ${item.topup_id.padEnd(24)} ${item.user_id.padEnd(20)} ${String(item.amount).padStart(6)} ${item.unit.padEnd(10)} [${item.status}] ${item.note}`);
57
+ }
58
+ console.log("");
59
+ continue;
60
+ }
61
+ if (act === "add" || act === "sub") {
62
+ const userId = await askText("user_id");
63
+ if (!userId)
64
+ continue;
65
+ const rawAmount = await askText("amount");
66
+ if (!rawAmount)
67
+ continue;
68
+ const amount = Number(rawAmount);
69
+ if (!Number.isInteger(amount) || amount <= 0) {
70
+ showError("amount must be a positive integer");
71
+ continue;
72
+ }
73
+ const note = await askText("note (optional)");
74
+ const path = act === "add" ? "add" : "sub";
75
+ const account = await svc.action(path).invoke({
76
+ user_id: userId,
77
+ amount,
78
+ note: note ?? "",
79
+ });
80
+ showSuccess(`balance updated: ${account.user_id} -> ${account.balance} ${account.unit}`);
81
+ continue;
82
+ }
83
+ const topupId = await askText("topup_id");
84
+ if (!topupId)
85
+ continue;
86
+ const note = await askText("note (optional)");
87
+ const path = act === "finish" ? "topups/finish" : "topups/cancel";
88
+ const topup = await svc.action(path).invoke({
89
+ topup_id: topupId,
90
+ note: note ?? "",
91
+ });
92
+ showSuccess(`topup updated: ${topup.topup_id} -> ${topup.status}`);
93
+ }
94
+ catch (e) {
95
+ rethrowAdminAuthError(e);
96
+ showError(adminErrorMessage(e));
97
+ }
98
+ }
99
+ }
100
+ //# sourceMappingURL=balance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balance.js","sourceRoot":"","sources":["../../../src/admin/commands/balance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Admin 服务端管理命令。
3
+ *
4
+ * 支持多服务端地址:列表、切换、添加、删除。
5
+ * 切换后清除当前 session 提示重新鉴权。
6
+ */
7
+ import { type AdminSession } from "../../core/session.js";
8
+ export declare function changeServerUrl(session: AdminSession): Promise<void>;
9
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/admin/commands/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAA+D,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAKvH,wBAAsB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B1E"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Admin 服务端管理命令。
3
+ *
4
+ * 支持多服务端地址:列表、切换、添加、删除。
5
+ * 切换后清除当前 session 提示重新鉴权。
6
+ */
7
+ import { readConfig, switchServer, removeServer, clearServerSessions } from "../../core/session.js";
8
+ import { promptAddServer } from "../../auth/server-switch.js";
9
+ import { showSuccess, showError } from "../../core/ui.js";
10
+ import { isCancel, select } from "@clack/prompts";
11
+ export async function changeServerUrl(session) {
12
+ while (true) {
13
+ const config = readConfig();
14
+ const choices = config.servers.map((s) => ({
15
+ label: s.url === config.base_url ? `★ ${s.name}` : ` ${s.name}`,
16
+ value: s.url,
17
+ hint: s.url,
18
+ }));
19
+ choices.push({ label: "Add new server...", value: "__add__", hint: "" }, { label: "Delete server...", value: "__del__", hint: "" });
20
+ const selected = await select({ message: "Servers (★ active)", options: choices });
21
+ if (!selected || isCancel(selected))
22
+ return;
23
+ if (selected === "__add__") {
24
+ await promptAddServer();
25
+ }
26
+ else if (selected === "__del__") {
27
+ await promptDeleteServer(config);
28
+ }
29
+ else if (selected !== config.base_url) {
30
+ const oldUrl = config.base_url;
31
+ switchServer(selected);
32
+ clearServerSessions(oldUrl);
33
+ showSuccess(`Switched to ${selected}. Please re-authenticate.`);
34
+ return;
35
+ }
36
+ }
37
+ }
38
+ async function promptDeleteServer(config) {
39
+ if (config.servers.length <= 1) {
40
+ showError("Cannot delete the only server");
41
+ return;
42
+ }
43
+ const choices = config.servers.map((s) => ({
44
+ label: `${s.name} (${s.url})`,
45
+ value: s.url,
46
+ hint: s.url === config.base_url ? "★ active" : "",
47
+ }));
48
+ choices.push({ label: "Cancel", value: "__cancel__", hint: "" });
49
+ const selected = await select({ message: "Delete server", options: choices });
50
+ if (!selected || isCancel(selected) || selected === "__cancel__")
51
+ return;
52
+ removeServer(selected);
53
+ showSuccess(`Removed: ${selected}`);
54
+ }
55
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/admin/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Admin Custom Service 命令。
3
+ */
4
+ import { AdminClient } from "@visiblebase/client";
5
+ export declare function manageCustom(a: AdminClient): Promise<void>;
6
+ //# sourceMappingURL=custom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom.d.ts","sourceRoot":"","sources":["../../../src/admin/commands/custom.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAKlD,wBAAsB,YAAY,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAoChE"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Admin Custom Service 命令。
3
+ */
4
+ import { select, isCancel } from "@clack/prompts";
5
+ import { askText, showError } from "../../core/ui.js";
6
+ import { adminErrorMessage, rethrowAdminAuthError } from "../auth-error.js";
7
+ export async function manageCustom(a) {
8
+ while (true) {
9
+ const name = await askText("service name (empty to go back)");
10
+ if (!name)
11
+ return;
12
+ const act = await select({
13
+ message: name,
14
+ options: [
15
+ { label: "GET", value: "get" },
16
+ { label: "POST", value: "post" },
17
+ { label: "Back", value: "back" },
18
+ ],
19
+ });
20
+ if (!act || isCancel(act) || act === "back")
21
+ return;
22
+ try {
23
+ const svc = a.service(name);
24
+ if (act === "get") {
25
+ const path = await askText("path") ?? "";
26
+ console.log(JSON.stringify(await svc.get(path), null, 2));
27
+ }
28
+ else {
29
+ const raw = await askText("body (JSON)") ?? "{}";
30
+ let body;
31
+ try {
32
+ body = JSON.parse(raw);
33
+ }
34
+ catch {
35
+ showError("Invalid JSON body");
36
+ continue;
37
+ }
38
+ console.log(JSON.stringify(await svc.action("").invoke(body), null, 2));
39
+ }
40
+ }
41
+ catch (e) {
42
+ rethrowAdminAuthError(e);
43
+ showError(adminErrorMessage(e));
44
+ }
45
+ }
46
+ }
47
+ //# sourceMappingURL=custom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom.js","sourceRoot":"","sources":["../../../src/admin/commands/custom.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAE5E,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,CAAc;IAC/C,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,iCAAiC,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC;YACvB,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;gBAC9B,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;gBAChC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;aACjC;SACF,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,MAAM;YAAE,OAAO;QAEpD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;gBAClB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACzC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5D,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC;gBACjD,IAAI,IAA6B,CAAC;gBAClC,IAAI,CAAC;oBACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACzB,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS,CAAC,mBAAmB,CAAC,CAAC;oBAC/B,SAAS;gBACX,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,qBAAqB,CAAC,CAAC,CAAC,CAAC;YACzB,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Admin Models 只读视图。
3
+ *
4
+ * 关键说明(中文)
5
+ * - 这里不提供模型新增、删除、启停。
6
+ * - 模型定义仍然来自代码注册;admin 只负责查看当前可用状态。
7
+ * - 如果模型缺少 provider key,会在这里直接显示缺失项。
8
+ */
9
+ import { AdminClient } from "@visiblebase/client";
10
+ /**
11
+ * 展示全部代码注册模型及其运行状态。
12
+ */
13
+ export declare function manageModels(a: AdminClient): Promise<void>;
14
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../src/admin/commands/models.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAgClD;;GAEG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA0ChE"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Admin Models 只读视图。
3
+ *
4
+ * 关键说明(中文)
5
+ * - 这里不提供模型新增、删除、启停。
6
+ * - 模型定义仍然来自代码注册;admin 只负责查看当前可用状态。
7
+ * - 如果模型缺少 provider key,会在这里直接显示缺失项。
8
+ */
9
+ import { show, showError } from "../../core/ui.js";
10
+ import { adminErrorMessage, rethrowAdminAuthError } from "../auth-error.js";
11
+ /**
12
+ * 展示全部代码注册模型及其运行状态。
13
+ */
14
+ export async function manageModels(a) {
15
+ try {
16
+ const [modelResp, envItems] = await Promise.all([
17
+ a.json("/v1/ai/models", { method: "GET" }),
18
+ a.env.list(),
19
+ ]);
20
+ const items = modelResp.items ?? [];
21
+ const envMap = new Map(envItems.map((item) => [item.key, item.value]));
22
+ if (items.length === 0) {
23
+ show("No models registered on server.");
24
+ return;
25
+ }
26
+ console.log(`\n${items.length} models:\n`);
27
+ for (const model of items) {
28
+ const requirements = model.env_requirements ?? [];
29
+ const missingEnv = requirements
30
+ .filter((item) => item.required && !envMap.get(item.key))
31
+ .map((item) => item.key);
32
+ const status = missingEnv.length === 0 ? "READY" : `MISSING ${missingEnv.join(", ")}`;
33
+ const defaults = (model.default_modes ?? []).length > 0
34
+ ? `default: ${(model.default_modes ?? []).join(", ")}`
35
+ : "default: none";
36
+ const envText = requirements.length > 0
37
+ ? requirements
38
+ .map((item) => `${item.key}${envMap.get(item.key) ? "✓" : "✗"}`)
39
+ .join(", ")
40
+ : "none";
41
+ console.log(` ${model.name} (${model.id})`);
42
+ console.log(` status: ${status}`);
43
+ console.log(` modalities: ${model.modalities.join(", ") || "none"}`);
44
+ console.log(` ${defaults}`);
45
+ console.log(` env: ${envText}`);
46
+ if (model.description)
47
+ console.log(` desc: ${model.description}`);
48
+ console.log("");
49
+ }
50
+ }
51
+ catch (e) {
52
+ rethrowAdminAuthError(e);
53
+ showError(adminErrorMessage(e));
54
+ }
55
+ }
56
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/admin/commands/models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Admin Payment 管理命令。
3
+ */
4
+ import { AdminClient } from "@visiblebase/client";
5
+ export declare function managePayment(a: AdminClient): Promise<void>;
6
+ //# sourceMappingURL=payment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment.d.ts","sourceRoot":"","sources":["../../../src/admin/commands/payment.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAKlD,wBAAsB,aAAa,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBjE"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Admin Payment 管理命令。
3
+ */
4
+ import { select, isCancel } from "@clack/prompts";
5
+ import { showError } from "../../core/ui.js";
6
+ import { adminErrorMessage, rethrowAdminAuthError } from "../auth-error.js";
7
+ export async function managePayment(a) {
8
+ const svc = a.service("payment.stripe");
9
+ while (true) {
10
+ const act = await select({
11
+ message: "Payment",
12
+ options: [
13
+ { label: "List entitlements", value: "entitlements" },
14
+ { label: "Back", value: "back" },
15
+ ],
16
+ });
17
+ if (!act || isCancel(act) || act === "back")
18
+ return;
19
+ try {
20
+ const b = await svc.get("entitlements");
21
+ console.log(`\n${b.items.length} entitlements:\n`);
22
+ for (const e of b.items) {
23
+ console.log(` ${e.product_id.padEnd(22)} ${e.user_id.padEnd(26)} ${e.plan_id.padEnd(16)} [${e.status}]`);
24
+ }
25
+ console.log("");
26
+ }
27
+ catch (e) {
28
+ rethrowAdminAuthError(e);
29
+ showError(adminErrorMessage(e));
30
+ }
31
+ }
32
+ }
33
+ //# sourceMappingURL=payment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment.js","sourceRoot":"","sources":["../../../src/admin/commands/payment.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAE5E,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,CAAc;IAChD,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACxC,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC;YACvB,OAAO,EAAE,SAAS;YAClB,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,cAAc,EAAE;gBACrD,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;aACjC;SACF,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,MAAM;YAAE,OAAO;QAEpD,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,CAAwF,cAAc,CAAC,CAAC;YAC/H,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,kBAAkB,CAAC,CAAC;YACnD,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAC5G,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,qBAAqB,CAAC,CAAC,CAAC,CAAC;YACzB,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Admin Env 管理命令。
3
+ *
4
+ * 三种模式:
5
+ * - Init:遍历所有 service 的 env 需求,逐一交互式配置
6
+ * - 按 Service 查看:选择一个 service,查看/配置其 env
7
+ * - 直接管理:list / upsert / remove 裸 key-value
8
+ */
9
+ import { AdminClient } from "@visiblebase/client";
10
+ export declare function manageEnv(a: AdminClient): Promise<void>;
11
+ //# sourceMappingURL=plugin-env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-env.d.ts","sourceRoot":"","sources":["../../../src/admin/commands/plugin-env.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAyClD,wBAAsB,SAAS,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAsC7D"}