@jingyi0605/codingns4dsh 0.2.1-rc.3 → 0.2.1-rc.4

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 (68) hide show
  1. package/README.en.md +3 -3
  2. package/README.md +3 -3
  3. package/data/build/dist/client/bundle.js +168 -47
  4. package/data/build/dist/client/bundle.js.map +1 -1
  5. package/data/build/dist/client/client.native-workspace-store.js +1 -1
  6. package/data/build/dist/client/client.native-workspace-store.js.map +1 -1
  7. package/data/build/dist/client/client.transport.js +32 -10
  8. package/data/build/dist/client/client.transport.js.map +1 -1
  9. package/data/build/dist/client/desktop-assistant.js +32 -10
  10. package/data/build/dist/client/features/magpie-management-controls.d.ts.map +1 -1
  11. package/data/build/dist/client/features/magpie-management-controls.js +45 -10
  12. package/data/build/dist/client/features/magpie-management-controls.js.map +1 -1
  13. package/data/build/dist/client/features/magpie-management-page.d.ts +6 -1
  14. package/data/build/dist/client/features/magpie-management-page.d.ts.map +1 -1
  15. package/data/build/dist/client/features/magpie-management-page.js +29 -6
  16. package/data/build/dist/client/features/magpie-management-page.js.map +1 -1
  17. package/data/build/dist/client/locales/magpie.d.ts.map +1 -1
  18. package/data/build/dist/client/locales/magpie.js +32 -10
  19. package/data/build/dist/client/locales/magpie.js.map +1 -1
  20. package/data/build/dist/client/subscription-slot.d.ts +3 -2
  21. package/data/build/dist/client/subscription-slot.d.ts.map +1 -1
  22. package/data/build/dist/client/subscription-slot.js +68 -22
  23. package/data/build/dist/client/subscription-slot.js.map +1 -1
  24. package/data/build/dist/host/cli-adapters/feature.d.ts.map +1 -1
  25. package/data/build/dist/host/cli-adapters/feature.js +56 -8
  26. package/data/build/dist/host/cli-adapters/feature.js.map +1 -1
  27. package/data/build/dist/host/cli-adapters/magpie-detection.d.ts +3 -3
  28. package/data/build/dist/host/cli-adapters/magpie-detection.d.ts.map +1 -1
  29. package/data/build/dist/host/cli-adapters/magpie-detection.js +18 -4
  30. package/data/build/dist/host/cli-adapters/magpie-detection.js.map +1 -1
  31. package/data/build/dist/host/cli-adapters/magpie-management.d.ts.map +1 -1
  32. package/data/build/dist/host/cli-adapters/magpie-management.js +95 -20
  33. package/data/build/dist/host/cli-adapters/magpie-management.js.map +1 -1
  34. package/data/build/dist/host/cli-adapters/magpie-usage.d.ts +5 -1
  35. package/data/build/dist/host/cli-adapters/magpie-usage.d.ts.map +1 -1
  36. package/data/build/dist/host/cli-adapters/magpie-usage.js +285 -59
  37. package/data/build/dist/host/cli-adapters/magpie-usage.js.map +1 -1
  38. package/data/build/dist/host/cli-adapters/magpie-web.d.ts +15 -0
  39. package/data/build/dist/host/cli-adapters/magpie-web.d.ts.map +1 -1
  40. package/data/build/dist/host/cli-adapters/magpie-web.js +100 -22
  41. package/data/build/dist/host/cli-adapters/magpie-web.js.map +1 -1
  42. package/data/build/dist/host/cli-adapters/process-utils.d.ts.map +1 -1
  43. package/data/build/dist/host/cli-adapters/process-utils.js +4 -0
  44. package/data/build/dist/host/cli-adapters/process-utils.js.map +1 -1
  45. package/data/build/dist/host/cli-adapters/session-performance-projection.d.ts +6 -0
  46. package/data/build/dist/host/cli-adapters/session-performance-projection.d.ts.map +1 -1
  47. package/data/build/dist/host/cli-adapters/session-performance-projection.js +25 -0
  48. package/data/build/dist/host/cli-adapters/session-performance-projection.js.map +1 -1
  49. package/data/build/dist/shared/contracts/magpie-management.d.ts +19 -0
  50. package/data/build/dist/shared/contracts/magpie-management.d.ts.map +1 -1
  51. package/data/build/dist/shared/contracts/subscription.d.ts +2 -0
  52. package/data/build/dist/shared/contracts/subscription.d.ts.map +1 -1
  53. package/data/build/dist/shared/contracts/subscription.js.map +1 -1
  54. package/data/build/dist/shared/contracts/version.d.ts +1 -1
  55. package/data/build/dist/shared/contracts/version.js +1 -1
  56. package/data/build/dist/shared/index.d.ts +2 -1
  57. package/data/build/dist/shared/index.d.ts.map +1 -1
  58. package/data/build/dist/shared/index.js +1 -0
  59. package/data/build/dist/shared/index.js.map +1 -1
  60. package/data/build/dist/shared/magpie-provider-id.d.ts +12 -0
  61. package/data/build/dist/shared/magpie-provider-id.d.ts.map +1 -0
  62. package/data/build/dist/shared/magpie-provider-id.js +16 -0
  63. package/data/build/dist/shared/magpie-provider-id.js.map +1 -0
  64. package/package.json +1 -1
  65. package/profile/README.md +2 -2
  66. package/profile/package.json +2 -2
  67. package/profile/version.json +1 -1
  68. package/version.json +1 -1
@@ -29,9 +29,9 @@ export interface MagpieDetectionServiceOptions {
29
29
  * 两条平台路径刻意分开:
30
30
  * - macOS/Linux:登录 Shell 的完整 PATH(覆盖 Homebrew、nvm、fnm、volta 等用户目录),
31
31
  * 再用常见 bin 目录兜底;入口必须是可执行文件。
32
- * - Windows:`where.exe` 命中的 `.exe/.cmd/.bat` 优先(npm 全局包只有 `.cmd`),
33
- * 再补 USERPROFILE / APPDATA / LOCALAPPDATA 下的 npm、pnpm、Bun、Volta 全局目录,
34
- * 以及可能不在 PATH 上的独立安装目录。无扩展名 shim 不执行。
32
+ * - Windows:`where.exe` 命中的 `.exe/.cmd/.bat` 优先(同时覆盖注册表 PATH),
33
+ * 再扫描 PATH 目录与 USERPROFILE / APPDATA / LOCALAPPDATA 下的 standalone、npm、
34
+ * pnpm、Bun、Volta 全局目录。无扩展名 shim 不执行。
35
35
  */
36
36
  export declare class MagpieInstallDetectionService {
37
37
  private readonly platform;
@@ -1 +1 @@
1
- {"version":3,"file":"magpie-detection.d.ts","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/magpie-detection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,sBAAsB,EAEtB,sBAAsB,EAEvB,MAAM,6CAA6C,CAAA;AAepD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAC3B;AAED,MAAM,WAAW,6BAA6B;IAC5C,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAA;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACxC,+CAA+C;IAC/C,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAC7F,kDAAkD;IAClD,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAA;IACxG,oDAAoD;IACpD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,MAAM,CAAA;IACnC,uCAAuC;IACvC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,4CAA4C;IAC5C,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAA;IAC1E,2CAA2C;IAC3C,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACrF,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CAC5B;AAED;;;;;;;;;GASG;AACH,qBAAa,6BAA6B;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmB;IAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwE;IACpG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoF;IAC/G,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmD;IACjF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA+D;IAC5F,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,6CAA6C;IAC7C,OAAO,CAAC,MAAM,CAA6G;gBAE/G,OAAO,GAAE,6BAAkC;IAYvD,+CAA+C;IACzC,MAAM,CAAC,OAAO,GAAE,sBAA2B,EAAE,OAAO,GAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAkB/H,yCAAyC;IACzC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,sBAAsB,GAAG,OAAO;YAI7C,eAAe;YAcf,eAAe;IAW7B,uCAAuC;YACzB,iBAAiB;YAUjB,eAAe;YAmBf,iBAAiB;IA2B/B,OAAO,CAAC,MAAM;CAWf;AAED,yCAAyC;AACzC,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAQrF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKvG"}
1
+ {"version":3,"file":"magpie-detection.d.ts","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/magpie-detection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,sBAAsB,EAEtB,sBAAsB,EAEvB,MAAM,6CAA6C,CAAA;AAwBpD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAC3B;AAED,MAAM,WAAW,6BAA6B;IAC5C,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAA;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACxC,+CAA+C;IAC/C,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAC7F,kDAAkD;IAClD,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAA;IACxG,oDAAoD;IACpD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,MAAM,CAAA;IACnC,uCAAuC;IACvC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,4CAA4C;IAC5C,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAA;IAC1E,2CAA2C;IAC3C,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACrF,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CAC5B;AAED;;;;;;;;;GASG;AACH,qBAAa,6BAA6B;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmB;IAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwE;IACpG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoF;IAC/G,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmD;IACjF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA+D;IAC5F,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,6CAA6C;IAC7C,OAAO,CAAC,MAAM,CAA6G;gBAE/G,OAAO,GAAE,6BAAkC;IAYvD,+CAA+C;IACzC,MAAM,CAAC,OAAO,GAAE,sBAA2B,EAAE,OAAO,GAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAkB/H,yCAAyC;IACzC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,sBAAsB,GAAG,OAAO;YAI7C,eAAe;YAcf,eAAe;IAW7B,uCAAuC;YACzB,iBAAiB;YAUjB,eAAe;YAmBf,iBAAiB;IAgC/B,OAAO,CAAC,MAAM;CAWf;AAED,yCAAyC;AACzC,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAQrF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKvG"}
@@ -9,7 +9,16 @@ const MAX_VERSION_OUTPUT_BYTES = 256;
9
9
  const MAX_DETECTION_CACHE_MS = 30_000;
10
10
  /** 本机 PATH 里的可执行入口;Windows 上 npm 生成的无扩展名 POSIX shim 不执行。 */
11
11
  const EXECUTABLE_ENTRY = /\.(?:exe|com|cmd|bat)$/iu;
12
- const WINDOWS_LAUNCHER_NAMES = ['magpie.exe', 'magpie.cmd', 'magpie.bat'];
12
+ /** 官方 GitHub 构建与安装脚本可能保留发布文件名,也可能改名为 magpie.exe。 */
13
+ const WINDOWS_LAUNCHER_NAMES = [
14
+ 'magpie.exe',
15
+ 'magpie.cmd',
16
+ 'magpie.bat',
17
+ 'magpie-windows-amd64.exe',
18
+ 'magpie-windows-arm64.exe',
19
+ 'magpie-cli-windows-amd64.exe',
20
+ 'magpie-cli-windows-arm64.exe',
21
+ ];
13
22
  /** macOS/Linux 包管理器与手动安装的常见目录;只在 PATH 未命中时补充探测。 */
14
23
  const POSIX_COMMON_BIN_DIRS = ['/opt/homebrew/bin', '/usr/local/bin', '/opt/local/bin'];
15
24
  /**
@@ -18,9 +27,9 @@ const POSIX_COMMON_BIN_DIRS = ['/opt/homebrew/bin', '/usr/local/bin', '/opt/loca
18
27
  * 两条平台路径刻意分开:
19
28
  * - macOS/Linux:登录 Shell 的完整 PATH(覆盖 Homebrew、nvm、fnm、volta 等用户目录),
20
29
  * 再用常见 bin 目录兜底;入口必须是可执行文件。
21
- * - Windows:`where.exe` 命中的 `.exe/.cmd/.bat` 优先(npm 全局包只有 `.cmd`),
22
- * 再补 USERPROFILE / APPDATA / LOCALAPPDATA 下的 npm、pnpm、Bun、Volta 全局目录,
23
- * 以及可能不在 PATH 上的独立安装目录。无扩展名 shim 不执行。
30
+ * - Windows:`where.exe` 命中的 `.exe/.cmd/.bat` 优先(同时覆盖注册表 PATH),
31
+ * 再扫描 PATH 目录与 USERPROFILE / APPDATA / LOCALAPPDATA 下的 standalone、npm、
32
+ * pnpm、Bun、Volta 全局目录。无扩展名 shim 不执行。
24
33
  */
25
34
  export class MagpieInstallDetectionService {
26
35
  platform;
@@ -132,7 +141,12 @@ export class MagpieInstallDetectionService {
132
141
  const home = this.environment.USERPROFILE;
133
142
  const appData = this.environment.APPDATA;
134
143
  const localAppData = this.environment.LOCALAPPDATA;
144
+ const pathDirectories = this.pathEntries().split(';');
135
145
  const directories = [
146
+ // The official installer puts the standalone command in this directory and adds it
147
+ // to the per-user registry PATH; keep it explicit when the current PATH is stale.
148
+ ...(home === undefined ? [] : [root(`${home}\\.local\\bin`)]),
149
+ ...pathDirectories,
136
150
  ...(appData === undefined ? [] : [root(`${appData}\\npm`), root(`${appData}\\pnpm`)]),
137
151
  ...(localAppData === undefined ? [] : [
138
152
  root(`${localAppData}\\pnpm`),
@@ -1 +1 @@
1
- {"version":3,"file":"magpie-detection.js","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/magpie-detection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"magpie-detection.js","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/magpie-detection.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"magpie-management.d.ts","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/magpie-management.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,6BAA6B,EAC7B,6BAA6B,EAE7B,8BAA8B,EAC9B,wBAAwB,EAGxB,8BAA8B,EAC9B,8BAA8B,EAE9B,kCAAkC,EAClC,kCAAkC,EAEnC,MAAM,6CAA6C,CAAA;AACpD,OAAO,EAAE,gBAAgB,EAAgC,MAAM,iBAAiB,CAAA;AAiChF,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC,CAAA;IAChH,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CAC5B;AAWD,6FAA6F;AAC7F,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;IACjE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAClC,OAAO,CAAC,YAAY,CAAmC;IAEvD,OAAO,CAAC,aAAa,CAAqF;IAC1G,OAAO,CAAC,eAAe,CAA+C;IACtE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmC;gBACzD,OAAO,GAAE,8BAAmC;IAKlD,YAAY,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAYrE,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,8BAA8B,CAAC;IA+C7F,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,8BAA8B,CAAC;IAgC1F,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,8BAA8B,CAAC;IA4BlG,OAAO,CAAC,eAAe;YAMT,YAAY;IA0C1B,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,QAAQ;YAIF,OAAO;YAUP,UAAU;IAKxB;;;;;;OAMG;YACW,mBAAmB;YAuBnB,uBAAuB;CAatC;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG;IACvD,QAAQ,CAAC,OAAO,EAAE,SAAS,8BAA8B,EAAE,CAAA;IAC3D,QAAQ,CAAC,GAAG,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAChD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;CAC7B,GAAG,IAAI,CA0BP;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG;IACpD,QAAQ,CAAC,MAAM,EAAE,SAAS,kCAAkC,EAAE,CAAA;IAC9D,QAAQ,CAAC,GAAG,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;CACjD,GAAG,IAAI,CAcP;AAED,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,OAAO,EACnB,eAAe,EAAE,OAAO,EACxB,aAAa,GAAE,OAAc,GAC5B,SAAS,6BAA6B,EAAE,GAAG,IAAI,CAgBjD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,8BAA8B,CAwBjF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,kCAAkC,CAqClF;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,6BAA6B,CAU/E"}
1
+ {"version":3,"file":"magpie-management.d.ts","sourceRoot":"","sources":["../../../../../src/host/cli-adapters/magpie-management.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,6BAA6B,EAC7B,6BAA6B,EAE7B,8BAA8B,EAC9B,wBAAwB,EAGxB,8BAA8B,EAC9B,8BAA8B,EAE9B,kCAAkC,EAClC,kCAAkC,EAEnC,MAAM,6CAA6C,CAAA;AAEpD,OAAO,EAAE,gBAAgB,EAAgC,MAAM,iBAAiB,CAAA;AA2ChF,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC,CAAA;IAChH,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CAC5B;AAWD,6FAA6F;AAC7F,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;IACjE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAClC,OAAO,CAAC,YAAY,CAAmC;IAEvD,OAAO,CAAC,aAAa,CAAqF;IAC1G,OAAO,CAAC,eAAe,CAA+C;IACtE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmC;gBACzD,OAAO,GAAE,8BAAmC;IAKlD,YAAY,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAYrE,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,8BAA8B,CAAC;IA4D7F,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,8BAA8B,CAAC;IAgC1F,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,8BAA8B,CAAC;IA4BlG,OAAO,CAAC,eAAe;YAMT,YAAY;IA0C1B,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,QAAQ;YAIF,OAAO;YAUP,UAAU;IAKxB;;;;;;OAMG;YACW,mBAAmB;YAuBnB,uBAAuB;CAatC;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG;IACvD,QAAQ,CAAC,OAAO,EAAE,SAAS,8BAA8B,EAAE,CAAA;IAC3D,QAAQ,CAAC,GAAG,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAChD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;CAC7B,GAAG,IAAI,CA0BP;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG;IACpD,QAAQ,CAAC,MAAM,EAAE,SAAS,kCAAkC,EAAE,CAAA;IAC9D,QAAQ,CAAC,GAAG,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;CACjD,GAAG,IAAI,CAcP;AAED,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,OAAO,EACnB,eAAe,EAAE,OAAO,EACxB,aAAa,GAAE,OAAc,GAC5B,SAAS,6BAA6B,EAAE,GAAG,IAAI,CAgBjD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,8BAA8B,CA0BjF;AAoBD,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,kCAAkC,CAqClF;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,6BAA6B,CAU/E"}
@@ -1,3 +1,4 @@
1
+ import { isMagpieProviderId, magpieProviderId } from '../../shared/magpie-provider-id.js';
1
2
  import { MagpieWebService } from './magpie-web.js';
2
3
  const MAX_PROVIDERS = 100;
3
4
  const MAX_GROUPS = 200;
@@ -15,6 +16,16 @@ const MEMBER_LEVELS = ['none', 'minimal', 'low', 'medium', 'high', 'xhigh', 'max
15
16
  const GROUP_EFFORTS = new Set(['', 'auto']);
16
17
  const STICKINESS_POLICIES = new Set(['auto', 'session', 'turn', 'off', 'strict']);
17
18
  const ACCOUNT_AGENT = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/u;
19
+ /**
20
+ * IDs Magpie refuses a provider, whatever its spelling (`provider.Rename`): the gateway itself,
21
+ * the prefix its routing groups carry, and the destination of model IDs that name none.
22
+ */
23
+ const RESERVED_PROVIDER_IDS = new Set(['magpie', 'group', 'auto']);
24
+ /**
25
+ * Fields a provider save does not write back: `was` is the IDs Magpie remembers the provider by,
26
+ * and `id` is read back under the ID a rename gives it.
27
+ */
28
+ const PROVIDER_SAVE_KEEPS = new Set(['was', 'id']);
18
29
  const PROVIDER_VIEW_FIELDS = new Set([
19
30
  'host', 'key', 'keyList', 'balanceToken', 'account', 'ready', 'chosen', 'speaks', 'models', 'exposed', 'unlisted',
20
31
  'noModels', 'groups', 'off', 'agents', 'sponsored',
@@ -69,32 +80,45 @@ export class MagpieManagementService {
69
80
  if (update.endpointField !== undefined && !currentRecord.endpoints.some(endpoint => endpoint.field === update.endpointField && endpoint.editable)) {
70
81
  throw new TypeError('Only an endpoint already present on this provider can be edited');
71
82
  }
83
+ const newId = update.newId !== undefined && update.newId !== currentRecord.id ? update.newId : undefined;
84
+ if (newId !== undefined) {
85
+ if (!currentRecord.idEditable)
86
+ throw new TypeError('Magpie stored this provider under an ID it will not write again, so it cannot be renamed');
87
+ // Magpie answers a rename to a taken ID by saving over that provider, so the ID has to be
88
+ // free here: in the snapshot, and among the IDs Magpie remembers the providers by.
89
+ if (before.snapshot.providers.some(provider => provider.id !== currentRecord.id
90
+ && (provider.id === newId || magpieProviderAliasIds(before.rawProviders ?? [], provider.id).includes(newId)))) {
91
+ throw new TypeError('Another Magpie provider already answers to this ID');
92
+ }
93
+ }
72
94
  const hasConfigChange = providerHasConfigChange(update, currentRecord);
73
95
  const hasStateChange = update.on !== undefined && currentRecord.state !== (update.on ? 'on' : 'off');
74
- if (!hasConfigChange && !hasStateChange)
96
+ if (!hasConfigChange && !hasStateChange && newId === undefined) {
75
97
  return { changed: 'provider', id: update.id, snapshot: before.snapshot };
98
+ }
76
99
  const protectedBefore = providerConfigFingerprint(current);
77
- if (hasConfigChange) {
100
+ if (hasConfigChange || newId !== undefined) {
78
101
  await this.requestApi('/api/provider/save', {
79
- method: 'POST', body: providerSavePayload(currentRecord, update), ...signalOption(signal),
102
+ method: 'POST', body: providerSavePayload(currentRecord, update, newId), ...signalOption(signal),
80
103
  });
81
104
  }
82
105
  if (hasStateChange) {
83
106
  await this.requestApi(`/api/provider/${update.on ? 'on' : 'off'}`, {
84
- method: 'POST', body: { id: update.id }, ...signalOption(signal),
107
+ method: 'POST', body: { id: newId ?? update.id }, ...signalOption(signal),
85
108
  });
86
109
  }
87
110
  const after = await this.readWebState(signal);
88
- const saved = after.snapshot.providers.find(item => item.id === update.id);
89
- const savedRaw = after.rawProviders?.find(item => item.id === update.id);
111
+ const savedId = newId ?? update.id;
112
+ const saved = after.snapshot.providers.find(item => item.id === savedId);
113
+ const savedRaw = after.rawProviders?.find(item => item.id === savedId);
90
114
  this.remember(after);
91
115
  if (saved === undefined || savedRaw === undefined || !providerUpdateMatches(update, saved)
92
116
  || !providerRecordMatchesUpdate(currentRecord, update, saved)
93
117
  || providerConfigFingerprint(savedRaw) !== protectedBefore
94
- || !otherProvidersUnchanged(before.rawProviders ?? [], after.rawProviders ?? [], update.id)) {
118
+ || !otherProvidersUnchanged(before.rawProviders ?? [], after.rawProviders ?? [], savedId, update.id)) {
95
119
  throw new Error('Magpie provider update could not be verified without changing protected settings');
96
120
  }
97
- return { changed: 'provider', id: update.id, snapshot: after.snapshot };
121
+ return { changed: 'provider', id: savedId, snapshot: after.snapshot };
98
122
  });
99
123
  }
100
124
  async updateGroup(input, signal) {
@@ -347,7 +371,8 @@ export function readProviderUpdate(value) {
347
371
  const record = asRecord(value);
348
372
  if (record === null || typeof record.id !== 'string' || !PROVIDER_ID.test(record.id))
349
373
  throw new TypeError('Invalid Magpie provider update');
350
- assertAllowedKeys(record, ['id', 'name', 'endpointField', 'endpointUrl', 'models', 'on']);
374
+ assertAllowedKeys(record, ['id', 'newId', 'name', 'endpointField', 'endpointUrl', 'models', 'on']);
375
+ const newId = record.newId === undefined || record.newId === record.id ? undefined : readProviderId(record.newId);
351
376
  const name = optionalUpdateText(record.name, 80, 'provider name');
352
377
  const endpointField = record.endpointField;
353
378
  const endpointUrl = optionalUpdateUrl(record.endpointUrl);
@@ -361,16 +386,35 @@ export function readProviderUpdate(value) {
361
386
  if ((endpointField === undefined) !== (canonicalEndpointUrl === undefined))
362
387
  throw new TypeError('Endpoint field and URL must be updated together');
363
388
  const models = record.models === undefined ? undefined : readModelList(record.models, record.id, false);
364
- if (name === undefined && endpointUrl === undefined && models === undefined && on === undefined)
389
+ if (newId === undefined && name === undefined && endpointUrl === undefined && models === undefined && on === undefined)
365
390
  throw new TypeError('Provider update has no changes');
366
391
  return {
367
392
  id: record.id,
393
+ ...(newId === undefined ? {} : { newId }),
368
394
  ...(name === undefined ? {} : { name }),
369
395
  ...(endpointField === undefined || canonicalEndpointUrl === undefined ? {} : { endpointField: endpointField, endpointUrl: canonicalEndpointUrl }),
370
396
  ...(models === undefined ? {} : { models }),
371
397
  ...(on === undefined ? {} : { on }),
372
398
  };
373
399
  }
400
+ /**
401
+ * Read the ID a provider is renamed to, in the spelling Magpie itself writes it: lower-case
402
+ * letters, digits and single dashes, its `provider.Slug`. Magpie answers any other spelling by
403
+ * refusing the save, and it refuses some IDs even when they are spelled that way.
404
+ */
405
+ function readProviderId(value) {
406
+ const text = typeof value === 'string' ? value.trim().toLocaleLowerCase() : '';
407
+ if (text === '' || text.length > 64 || text !== magpieProviderId(text))
408
+ throw new TypeError('Invalid Magpie provider ID');
409
+ if (RESERVED_PROVIDER_IDS.has(text))
410
+ throw new TypeError('Magpie reserves this provider ID');
411
+ return text;
412
+ }
413
+ /** The IDs a provider answers to: Magpie's `was`, the ones it had before a rename. */
414
+ function magpieProviderAliasIds(rawProviders, providerId) {
415
+ const aliases = readStringList(rawProviders.find(item => item.id === providerId)?.was, 100);
416
+ return (aliases ?? []).map(alias => alias.toLocaleLowerCase());
417
+ }
374
418
  export function readGroupUpdate(value) {
375
419
  const record = asRecord(value);
376
420
  if (record === null || typeof record.id !== 'string' || !GROUP_ID.test(record.id))
@@ -493,6 +537,7 @@ function readWebProvider(record) {
493
537
  partial = true;
494
538
  const normalized = {
495
539
  id,
540
+ idEditable: isMagpieProviderId(id),
496
541
  name,
497
542
  ...icon,
498
543
  accountAgent,
@@ -760,15 +805,29 @@ function providerHasConfigChange(update, current) {
760
805
  && current.endpoints.find(item => item.field === update.endpointField)?.url !== update.endpointUrl
761
806
  || update.models !== undefined && !sameStringOrder(update.models, current.models.filter(model => model.exposed).map(model => model.id));
762
807
  }
763
- function providerSavePayload(current, update) {
808
+ /**
809
+ * The body of a provider save. A rename goes in as `from`, the ID the provider has now, plus the
810
+ * new `id`: Magpie saves the other fields under the ID it had and then gives it `id`, carrying
811
+ * the routing groups and Agent configs that name its models along with it.
812
+ *
813
+ * The base URLs go back exactly as Magpie returned them: a save that left one out is read as a
814
+ * provider without that API and is refused with "a provider needs a base URL".
815
+ */
816
+ function providerSavePayload(current, update, newId) {
764
817
  const payload = { id: current.id };
818
+ if (newId !== undefined) {
819
+ payload.id = newId;
820
+ payload.from = current.id;
821
+ }
765
822
  if (update.name !== undefined)
766
823
  payload.name = update.name;
767
- if (update.endpointField !== undefined && update.endpointUrl !== undefined) {
768
- payload[update.endpointField] = update.endpointUrl;
824
+ for (const endpoint of current.endpoints) {
825
+ payload[endpoint.field] = endpoint.field === update.endpointField && update.endpointUrl !== undefined ? update.endpointUrl : endpoint.url;
769
826
  }
770
827
  if (update.models !== undefined) {
771
- payload.models = update.models.map(model => localModelId(current.id, model));
828
+ // Magpie appends a pick to the provider it is named under, which for a rename is its new ID.
829
+ const providerId = newId ?? current.id;
830
+ payload.models = update.models.map(model => localModelId(providerId, model.startsWith(`${current.id}/`) ? `${providerId}/${model.slice(current.id.length + 1)}` : model));
772
831
  }
773
832
  return payload;
774
833
  }
@@ -819,8 +878,13 @@ function groupSavePayload(raw, current, update) {
819
878
  }
820
879
  return payload;
821
880
  }
881
+ /**
882
+ * Fingerprint what a provider save must leave alone: everything but the fields it writes
883
+ * (`providerSavePayload`) and the two it keeps of its own. A rename is read back as such rather
884
+ * than as an untouched field, so it is the one ID change this Host accepts.
885
+ */
822
886
  function providerConfigFingerprint(record) {
823
- const viewOrMutable = new Set([...PROVIDER_VIEW_FIELDS, ...PROVIDER_MUTABLE_FIELDS]);
887
+ const viewOrMutable = new Set([...PROVIDER_VIEW_FIELDS, ...PROVIDER_MUTABLE_FIELDS, ...PROVIDER_SAVE_KEEPS]);
824
888
  const preserved = Object.fromEntries(Object.entries(record).filter(([key]) => !viewOrMutable.has(key)));
825
889
  const key = asRecord(record.key);
826
890
  const keyList = Array.isArray(record.keyList)
@@ -860,9 +924,12 @@ function groupRecordFingerprint(record) {
860
924
  const parsed = readWebGroup(record);
861
925
  return stableJson({ record: parsed, protected: groupConfigFingerprint(record) });
862
926
  }
863
- function otherProvidersUnchanged(before, after, id) {
864
- const beforeOthers = before.filter(item => item.id !== id);
865
- const afterOthers = after.filter(item => item.id !== id);
927
+ function otherProvidersUnchanged(before, after, id, previousId = id) {
928
+ // A rename moves one provider between two IDs: neither is another provider whose change would
929
+ // be a side effect of this save.
930
+ const own = new Set([id, previousId]);
931
+ const beforeOthers = before.filter(item => !own.has(String(item.id)));
932
+ const afterOthers = after.filter(item => !own.has(String(item.id)));
866
933
  if (beforeOthers.length !== afterOthers.length)
867
934
  return false;
868
935
  const afterById = new Map(afterOthers.map(item => [String(item.id), item]));
@@ -890,6 +957,9 @@ function otherAccountsUnchanged(before, after, agent, user) {
890
957
  return previous.size === current.size && [...previous].every(([key, value]) => current.get(key) === value);
891
958
  }
892
959
  function providerUpdateMatches(update, saved) {
960
+ // A rename is read back under the new ID; every other field of the record then stands as it is.
961
+ if (update.newId !== undefined && saved.id !== update.newId)
962
+ return false;
893
963
  if (update.name !== undefined && update.name !== saved.name)
894
964
  return false;
895
965
  if (update.on !== undefined && (update.on ? 'on' : 'off') !== saved.state)
@@ -897,7 +967,7 @@ function providerUpdateMatches(update, saved) {
897
967
  if (update.endpointField !== undefined && update.endpointUrl !== undefined
898
968
  && saved.endpoints.find(item => item.field === update.endpointField)?.url !== update.endpointUrl)
899
969
  return false;
900
- if (update.models !== undefined && !sameStringOrder(update.models, saved.models.filter(model => model.exposed).map(model => model.id)))
970
+ if (update.models !== undefined && !sameRenamedModels(update.models, update.id, update.newId ?? update.id, saved.models.filter(model => model.exposed).map(model => model.id)))
901
971
  return false;
902
972
  return true;
903
973
  }
@@ -907,7 +977,7 @@ function providerRecordMatchesUpdate(before, update, saved) {
907
977
  if (saved.state !== (update.on === undefined ? before.state : update.on ? 'on' : 'off'))
908
978
  return false;
909
979
  const models = update.models ?? before.models.filter(model => model.exposed).map(model => model.id);
910
- if (!sameStringOrder(models, saved.models.filter(model => model.exposed).map(model => model.id)))
980
+ if (!sameRenamedModels(models, update.id, update.newId ?? update.id, saved.models.filter(model => model.exposed).map(model => model.id)))
911
981
  return false;
912
982
  return ENDPOINT_FIELDS.every(field => {
913
983
  const expected = field === update.endpointField && update.endpointUrl !== undefined
@@ -916,6 +986,11 @@ function providerRecordMatchesUpdate(before, update, saved) {
916
986
  return expected === saved.endpoints.find(endpoint => endpoint.field === field)?.url;
917
987
  });
918
988
  }
989
+ /** Model IDs as a renamed provider now spells them: `<id>/<model>` under the ID it was given. */
990
+ function sameRenamedModels(expected, fromId, toId, saved) {
991
+ const renamed = expected.map(model => model.startsWith(`${fromId}/`) && fromId !== toId ? `${toId}/${model.slice(fromId.length + 1)}` : model);
992
+ return sameStringOrder(renamed, saved);
993
+ }
919
994
  function groupUpdateMatches(update, saved) {
920
995
  if (update.name !== undefined && update.name !== saved.name)
921
996
  return false;