downcity 1.1.259 → 1.1.265

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 (52) hide show
  1. package/bin/city/process/registry/CityPaths.d.ts +10 -10
  2. package/bin/city/process/registry/CityPaths.d.ts.map +1 -1
  3. package/bin/city/process/registry/CityPaths.js +12 -12
  4. package/bin/city/process/registry/CityPaths.js.map +1 -1
  5. package/bin/city/process/registry/CityRegistry.d.ts +18 -19
  6. package/bin/city/process/registry/CityRegistry.d.ts.map +1 -1
  7. package/bin/city/process/registry/CityRegistry.js +179 -141
  8. package/bin/city/process/registry/CityRegistry.js.map +1 -1
  9. package/bin/city/runtime/store/index.d.ts +8 -0
  10. package/bin/city/runtime/store/index.d.ts.map +1 -1
  11. package/bin/city/runtime/store/index.js +13 -1
  12. package/bin/city/runtime/store/index.js.map +1 -1
  13. package/bin/city/shared/CityAgentRuntime.d.ts +3 -1
  14. package/bin/city/shared/CityAgentRuntime.d.ts.map +1 -1
  15. package/bin/city/shared/CityAgentRuntime.js +3 -7
  16. package/bin/city/shared/CityAgentRuntime.js.map +1 -1
  17. package/bin/city/shared/CityBalance.d.ts +3 -3
  18. package/bin/city/shared/CityBalance.d.ts.map +1 -1
  19. package/bin/city/shared/CityBalance.js +15 -11
  20. package/bin/city/shared/CityBalance.js.map +1 -1
  21. package/bin/city/shared/CityStateStore.d.ts.map +1 -1
  22. package/bin/city/shared/CityStateStore.js +20 -5
  23. package/bin/city/shared/CityStateStore.js.map +1 -1
  24. package/bin/city/shared/PluginTargetSupport.d.ts +0 -3
  25. package/bin/city/shared/PluginTargetSupport.d.ts.map +1 -1
  26. package/bin/city/shared/PluginTargetSupport.js +1 -6
  27. package/bin/city/shared/PluginTargetSupport.js.map +1 -1
  28. package/bin/city/tui/FederationManagerFormat.d.ts.map +1 -1
  29. package/bin/city/tui/FederationManagerFormat.js +7 -4
  30. package/bin/city/tui/FederationManagerFormat.js.map +1 -1
  31. package/bin/city/tui/FederationManagerPrompts.d.ts +1 -1
  32. package/bin/city/tui/FederationManagerPrompts.d.ts.map +1 -1
  33. package/bin/city/tui/FederationManagerPrompts.js +5 -5
  34. package/bin/city/tui/FederationManagerPrompts.js.map +1 -1
  35. package/bin/city/tui/FederationManagerState.js +3 -3
  36. package/bin/city/tui/FederationManagerState.js.map +1 -1
  37. package/bin/city/types/CityBalance.d.ts +20 -8
  38. package/bin/city/types/CityBalance.d.ts.map +1 -1
  39. package/bin/city/types/CityBalance.js +2 -2
  40. package/bin/city/types/CityState.d.ts +4 -0
  41. package/bin/city/types/CityState.d.ts.map +1 -1
  42. package/bin/federation/admin/commands/balance.js +26 -26
  43. package/bin/federation/admin/commands/balance.js.map +1 -1
  44. package/bin/federation/admin/commands/payment.js +3 -3
  45. package/bin/federation/admin/commands/payment.js.map +1 -1
  46. package/bin/federation/core/session.d.ts +5 -5
  47. package/bin/federation/core/session.d.ts.map +1 -1
  48. package/bin/federation/core/session.js +37 -14
  49. package/bin/federation/core/session.js.map +1 -1
  50. package/bin/federation/create/commands/create.js +15 -6
  51. package/bin/federation/create/commands/create.js.map +1 -1
  52. package/package.json +7 -7
@@ -1,11 +1,11 @@
1
1
  /**
2
- * CityPaths:City 全局运行态路径规则。
2
+ * CityPaths:用户级平台路径规则。
3
3
  *
4
4
  * 关键点(中文)
5
- * - Downcity 的全局根目录固定在用户目录 `~/.downcity/`。
6
- * - `~/.downcity/downcity.db`:全局 SQLite 数据库,保存平台级配置。
7
- * - `~/.downcity/main/*`:全局 agent registry、旧 pid/log 清理文件与平台密钥目录。
8
- * - 这里定义的是“全局路径约定”,不是单个 agent 项目的 `.downcity/` 路径。
5
+ * - Downcity 的用户级根目录固定在 `~/.downcity/`,测试可用 `DC_PLATFORM_ROOT` 覆盖。
6
+ * - `downcity.db` 保存 City 本地加密状态。
7
+ * - `federation.db` 保存 downfed / Federation 管理端加密状态。
8
+ * - Agent 项目列表等全局索引进入数据库,不再写 `main/agents.json`。
9
9
  */
10
10
  /**
11
11
  * 全局根目录(用户级)。
@@ -19,7 +19,11 @@ export declare function getPlatformRootDirPath(): string;
19
19
  */
20
20
  export declare function getPlatformStoreDbPath(): string;
21
21
  /**
22
- * City 全局状态目录(registry / 平台密钥 / 旧运行态文件)。
22
+ * Federation 管理端 SQLite 数据库路径(用户级)。
23
+ */
24
+ export declare function getFederationStoreDbPath(): string;
25
+ /**
26
+ * City 全局运行目录(平台密钥 / 旧运行态文件)。
23
27
  */
24
28
  export declare function getCityRuntimeDirPath(): string;
25
29
  /**
@@ -46,8 +50,4 @@ export declare function getGatewayPidPath(): string;
46
50
  * 关键点(中文):仅保留路径约定,便于后续迁移或清理旧安装状态文件。
47
51
  */
48
52
  export declare function getGatewayMetaPath(): string;
49
- /**
50
- * 受管 agent registry 文件路径(City 维护的 agent 清单)。
51
- */
52
- export declare function getManagedAgentRegistryPath(): string;
53
53
  //# sourceMappingURL=CityPaths.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CityPaths.d.ts","sourceRoot":"","sources":["../../../../src/city/process/registry/CityPaths.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH;;;;;GAKG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAI/C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,CAEpD"}
1
+ {"version":3,"file":"CityPaths.d.ts","sourceRoot":"","sources":["../../../../src/city/process/registry/CityPaths.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH;;;;;GAKG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAI/C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C"}
@@ -1,11 +1,11 @@
1
1
  /**
2
- * CityPaths:City 全局运行态路径规则。
2
+ * CityPaths:用户级平台路径规则。
3
3
  *
4
4
  * 关键点(中文)
5
- * - Downcity 的全局根目录固定在用户目录 `~/.downcity/`。
6
- * - `~/.downcity/downcity.db`:全局 SQLite 数据库,保存平台级配置。
7
- * - `~/.downcity/main/*`:全局 agent registry、旧 pid/log 清理文件与平台密钥目录。
8
- * - 这里定义的是“全局路径约定”,不是单个 agent 项目的 `.downcity/` 路径。
5
+ * - Downcity 的用户级根目录固定在 `~/.downcity/`,测试可用 `DC_PLATFORM_ROOT` 覆盖。
6
+ * - `downcity.db` 保存 City 本地加密状态。
7
+ * - `federation.db` 保存 downfed / Federation 管理端加密状态。
8
+ * - Agent 项目列表等全局索引进入数据库,不再写 `main/agents.json`。
9
9
  */
10
10
  import os from "node:os";
11
11
  import path from "node:path";
@@ -28,7 +28,13 @@ export function getPlatformStoreDbPath() {
28
28
  return path.join(getPlatformRootDirPath(), "downcity.db");
29
29
  }
30
30
  /**
31
- * City 全局状态目录(registry / 平台密钥 / 旧运行态文件)。
31
+ * Federation 管理端 SQLite 数据库路径(用户级)。
32
+ */
33
+ export function getFederationStoreDbPath() {
34
+ return path.join(getPlatformRootDirPath(), "federation.db");
35
+ }
36
+ /**
37
+ * City 全局运行目录(平台密钥 / 旧运行态文件)。
32
38
  */
33
39
  export function getCityRuntimeDirPath() {
34
40
  return path.join(getPlatformRootDirPath(), "main");
@@ -67,10 +73,4 @@ export function getGatewayPidPath() {
67
73
  export function getGatewayMetaPath() {
68
74
  return path.join(getCityRuntimeDirPath(), "gateway.json");
69
75
  }
70
- /**
71
- * 受管 agent registry 文件路径(City 维护的 agent 清单)。
72
- */
73
- export function getManagedAgentRegistryPath() {
74
- return path.join(getCityRuntimeDirPath(), "agents.json");
75
- }
76
76
  //# sourceMappingURL=CityPaths.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CityPaths.js","sourceRoot":"","sources":["../../../../src/city/process/registry/CityPaths.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACvE,IAAI,YAAY;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACpD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,aAAa,CAAC,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,MAAM,CAAC,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,cAAc,CAAC,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,UAAU,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,UAAU,CAAC,CAAC;AACxD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,aAAa,CAAC,CAAC;AAC3D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,cAAc,CAAC,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,aAAa,CAAC,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"CityPaths.js","sourceRoot":"","sources":["../../../../src/city/process/registry/CityPaths.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACvE,IAAI,YAAY;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACpD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,aAAa,CAAC,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,eAAe,CAAC,CAAC;AAC9D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,MAAM,CAAC,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,cAAc,CAAC,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,UAAU,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,UAAU,CAAC,CAAC;AACxD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,aAAa,CAAC,CAAC;AAC3D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,cAAc,CAAC,CAAC;AAC5D,CAAC"}
@@ -1,51 +1,50 @@
1
1
  /**
2
- * CityRegistrycity 后台维护的 agent registry(`~/.downcity/main/agents.json`)。
2
+ * CityAgentProjectStoreCity 维护的 agent 项目索引。
3
3
  *
4
4
  * 关键点(中文)
5
- * - registry 只维护“City 认知到的 agent 项目列表”,用于统一观测与批量管理。
6
- * - registry 不承载实时健康检查:status/list 会读取每个项目的 daemon pid 并判活。
7
- * - registry 是普通本地状态文件,不依赖任何 top-level city 常驻进程。
5
+ * - 全局 agent 列表进入 `downcity.db` 的加密 secure setting,不再写 `agents.json`。
6
+ * - 这里只保存 projectRoot 列表;运行状态统一由项目 daemon pid/meta 推导。
7
+ * - 保留旧导出函数名,降低上层命令改造面积。
8
8
  */
9
9
  import type { ManagedAgentRegistryEntry, ManagedAgentRegistryV1 } from "@downcity/agent";
10
10
  /**
11
- * 确保 city agent registry 文件存在。
12
- *
13
- * 关键点(中文)
14
- * - 空 City 运行态也应拥有显式的空 registry,避免管理侧将“尚未启动任何 agent”误判为异常。
15
- * - 若文件已存在则不覆盖,保持历史记录不丢失。
11
+ * 确保 agent 项目索引已初始化。
16
12
  */
17
13
  export declare function ensureManagedAgentRegistry(): Promise<void>;
18
14
  /**
19
- * 获取 city agent registry 文件路径。
15
+ * 获取旧 registry 文件路径。
16
+ *
17
+ * 关键点(中文)
18
+ * - 仅用于诊断或迁移提示;当前版本不会再写这个文件。
20
19
  */
21
20
  export declare function getManagedAgentsRegistryPath(): string;
22
21
  /**
23
- * 读取 city agent registry(容错)。
24
- *
25
- * 关键点(中文)
26
- * - 文件不存在或损坏时返回空 registry,避免影响主流程。
22
+ * 读取 agent 项目索引的兼容视图。
27
23
  */
28
24
  export declare function readManagedAgentRegistry(): Promise<ManagedAgentRegistryV1>;
29
25
  /**
30
- * 列出 City registry 中记录的 agent(按 projectRoot 排序)。
26
+ * 列出 City 已登记 agent
31
27
  */
32
28
  export declare function listManagedAgentEntries(): Promise<ManagedAgentRegistryEntry[]>;
33
29
  /**
34
- * 新增或更新一条 city agent 记录。
30
+ * 登记或刷新 agent 项目。
35
31
  */
36
32
  export declare function upsertManagedAgentEntry(input: {
37
33
  projectRoot: string;
38
- pid: number;
34
+ pid?: number;
39
35
  startedAt?: string;
40
36
  status?: "running" | "stopped";
41
37
  stoppedAt?: string;
42
38
  }): Promise<void>;
43
39
  /**
44
- * 标记 agent 为 stopped(保留历史记录,不删除)。
40
+ * 标记 agent 停止。
41
+ *
42
+ * 关键点(中文)
43
+ * - 当前状态只由 daemon pid/meta 推导,所以这里不写 stopped 状态,只保证项目仍在索引中。
45
44
  */
46
45
  export declare function markManagedAgentStopped(projectRoot: string): Promise<void>;
47
46
  /**
48
- * projectRoot 移除一条 agent 记录。
47
+ * agent 项目索引中移除项目。
49
48
  */
50
49
  export declare function removeManagedAgentEntry(projectRoot: string): Promise<void>;
51
50
  //# sourceMappingURL=CityRegistry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CityRegistry.d.ts","sourceRoot":"","sources":["../../../../src/city/process/registry/CityRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EACV,yBAAyB,EACzB,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AA6GzB;;;;;;GAMG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAMhE;AAED;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,MAAM,CAErD;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAUhF;AAED;;GAEG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAGpF;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoChB;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAehF;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQhF"}
1
+ {"version":3,"file":"CityRegistry.d.ts","sourceRoot":"","sources":["../../../../src/city/process/registry/CityRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAwLzF;;GAEG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAEhE;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,IAAI,MAAM,CAErD;AAED;;GAEG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAWhF;AAED;;GAEG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAGpF;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,IAAI,CAAC,CAOhB;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhF;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAShF"}
@@ -1,21 +1,27 @@
1
1
  /**
2
- * CityRegistrycity 后台维护的 agent registry(`~/.downcity/main/agents.json`)。
2
+ * CityAgentProjectStoreCity 维护的 agent 项目索引。
3
3
  *
4
4
  * 关键点(中文)
5
- * - registry 只维护“City 认知到的 agent 项目列表”,用于统一观测与批量管理。
6
- * - registry 不承载实时健康检查:status/list 会读取每个项目的 daemon pid 并判活。
7
- * - registry 是普通本地状态文件,不依赖任何 top-level city 常驻进程。
5
+ * - 全局 agent 列表进入 `downcity.db` 的加密 secure setting,不再写 `agents.json`。
6
+ * - 这里只保存 projectRoot 列表;运行状态统一由项目 daemon pid/meta 推导。
7
+ * - 保留旧导出函数名,降低上层命令改造面积。
8
8
  */
9
9
  import fs from "fs-extra";
10
10
  import path from "node:path";
11
- import { getManagedAgentRegistryPath, getCityRuntimeDirPath } from "./CityPaths.js";
12
- const CONSOLE_DIR = getCityRuntimeDirPath();
13
- const MANAGED_AGENTS_FILE = getManagedAgentRegistryPath();
14
- function buildEmptyRegistry() {
11
+ import { createCityPlatformStore } from "../../runtime/store/index.js";
12
+ import { getCityRuntimeDirPath } from "./CityPaths.js";
13
+ import { DAEMON_META_FILENAME, DAEMON_PID_FILENAME, } from "../daemon/Types.js";
14
+ import { getDowncityDebugDirPath } from "../../config/Paths.js";
15
+ const CITY_AGENT_PROJECTS_KEY = "city.agent.projects";
16
+ const LEGACY_MANAGED_AGENTS_FILE = path.join(getCityRuntimeDirPath(), "agents.json");
17
+ function nowIso() {
18
+ return new Date().toISOString();
19
+ }
20
+ function buildEmptyState() {
15
21
  return {
16
22
  v: 1,
17
- updatedAt: new Date().toISOString(),
18
- agents: [],
23
+ updatedAt: nowIso(),
24
+ projectRoots: [],
19
25
  };
20
26
  }
21
27
  function normalizeProjectRoot(projectRoot) {
@@ -24,189 +30,221 @@ function normalizeProjectRoot(projectRoot) {
24
30
  throw new Error("projectRoot is required");
25
31
  return resolved;
26
32
  }
27
- function normalizePid(pid) {
28
- if (!Number.isFinite(pid) || Number.isNaN(pid) || !Number.isInteger(pid) || pid < 1) {
29
- throw new Error(`Invalid pid: ${pid}`);
30
- }
31
- return pid;
32
- }
33
33
  function normalizeIsoTime(input) {
34
34
  const value = String(input || "").trim();
35
35
  if (!value)
36
- return new Date().toISOString();
36
+ return nowIso();
37
37
  const ms = Date.parse(value);
38
38
  if (!Number.isFinite(ms))
39
- return new Date().toISOString();
39
+ return nowIso();
40
40
  return new Date(ms).toISOString();
41
41
  }
42
- function normalizeRegistryEntry(entry) {
42
+ function getDaemonPidPath(projectRoot) {
43
+ return path.join(getDowncityDebugDirPath(projectRoot), DAEMON_PID_FILENAME);
44
+ }
45
+ function getDaemonMetaPath(projectRoot) {
46
+ return path.join(getDowncityDebugDirPath(projectRoot), DAEMON_META_FILENAME);
47
+ }
48
+ async function readDaemonPid(projectRoot) {
43
49
  try {
44
- const projectRoot = normalizeProjectRoot(String(entry.projectRoot || ""));
45
- const pid = normalizePid(Number(entry.pid));
46
- const startedAt = normalizeIsoTime(typeof entry.startedAt === "string" ? entry.startedAt : undefined);
47
- const updatedAt = normalizeIsoTime(typeof entry.updatedAt === "string" ? entry.updatedAt : undefined);
48
- return {
49
- projectRoot,
50
- pid,
51
- startedAt,
52
- updatedAt,
53
- status: entry.status === "stopped"
54
- ? "stopped"
55
- : "running",
56
- stoppedAt: entry.status === "stopped"
57
- ? normalizeIsoTime(typeof entry.stoppedAt === "string"
58
- ? entry.stoppedAt
59
- : undefined)
60
- : undefined,
61
- };
50
+ const raw = await fs.readFile(getDaemonPidPath(projectRoot), "utf-8");
51
+ const pid = Number.parseInt(String(raw).trim(), 10);
52
+ return Number.isFinite(pid) && pid > 0 ? pid : null;
62
53
  }
63
54
  catch {
64
55
  return null;
65
56
  }
66
57
  }
67
- function normalizeRegistry(value) {
68
- if (!value || typeof value !== "object")
69
- return buildEmptyRegistry();
70
- const source = Array.isArray(value.agents) ? value.agents : [];
71
- const normalizedAgents = [];
72
- for (const item of source) {
73
- if (!item || typeof item !== "object")
74
- continue;
75
- const normalized = normalizeRegistryEntry(item);
76
- if (!normalized)
77
- continue;
78
- const existingIndex = normalizedAgents.findIndex((entry) => entry.projectRoot === normalized.projectRoot);
79
- if (existingIndex >= 0) {
80
- normalizedAgents[existingIndex] = normalized;
81
- continue;
82
- }
83
- normalizedAgents.push(normalized);
58
+ function isProcessAlive(pid) {
59
+ try {
60
+ process.kill(pid, 0);
61
+ return true;
62
+ }
63
+ catch {
64
+ return false;
65
+ }
66
+ }
67
+ async function readDaemonMeta(projectRoot) {
68
+ try {
69
+ const value = await fs.readJson(getDaemonMetaPath(projectRoot));
70
+ const pid = Number(value?.pid);
71
+ if (!Number.isFinite(pid) || pid <= 0)
72
+ return null;
73
+ const startedAt = String(value?.startedAt || "").trim();
74
+ if (!startedAt)
75
+ return null;
76
+ const command = String(value?.command || "").trim();
77
+ const project = String(value?.projectRoot || "").trim();
78
+ if (!command || !project)
79
+ return null;
80
+ return value;
81
+ }
82
+ catch {
83
+ return null;
84
84
  }
85
+ }
86
+ function normalizeState(value) {
87
+ if (!value || typeof value !== "object")
88
+ return buildEmptyState();
89
+ const projectRoots = Array.isArray(value.projectRoots)
90
+ ? value.projectRoots
91
+ .map((item) => {
92
+ try {
93
+ return normalizeProjectRoot(String(item || ""));
94
+ }
95
+ catch {
96
+ return "";
97
+ }
98
+ })
99
+ .filter(Boolean)
100
+ : [];
85
101
  return {
86
102
  v: 1,
87
- updatedAt: normalizeIsoTime(typeof value.updatedAt === "string" ? value.updatedAt : undefined),
88
- agents: normalizedAgents.sort((a, b) => a.projectRoot.localeCompare(b.projectRoot)),
103
+ updatedAt: normalizeIsoTime(value.updatedAt),
104
+ projectRoots: [...new Set(projectRoots)].sort((a, b) => a.localeCompare(b)),
89
105
  };
90
106
  }
91
- async function writeManagedAgentRegistry(registry) {
92
- await fs.ensureDir(CONSOLE_DIR);
93
- await fs.writeJson(MANAGED_AGENTS_FILE, normalizeRegistry(registry), {
94
- spaces: 2,
107
+ function readDbState() {
108
+ const store = createCityPlatformStore();
109
+ try {
110
+ return store.getSecureSettingJsonSync(CITY_AGENT_PROJECTS_KEY);
111
+ }
112
+ finally {
113
+ store.close();
114
+ }
115
+ }
116
+ function writeDbState(state) {
117
+ const store = createCityPlatformStore();
118
+ try {
119
+ store.setSecureSettingJsonSync(CITY_AGENT_PROJECTS_KEY, normalizeState(state));
120
+ }
121
+ finally {
122
+ store.close();
123
+ }
124
+ }
125
+ async function readLegacyProjectRoots() {
126
+ try {
127
+ if (!(await fs.pathExists(LEGACY_MANAGED_AGENTS_FILE)))
128
+ return [];
129
+ const raw = (await fs.readJson(LEGACY_MANAGED_AGENTS_FILE));
130
+ const agents = Array.isArray(raw.agents) ? raw.agents : [];
131
+ return agents
132
+ .map((entry) => {
133
+ try {
134
+ return normalizeProjectRoot(String(entry?.projectRoot || ""));
135
+ }
136
+ catch {
137
+ return "";
138
+ }
139
+ })
140
+ .filter(Boolean);
141
+ }
142
+ catch {
143
+ return [];
144
+ }
145
+ }
146
+ async function readProjectState() {
147
+ const stored = readDbState();
148
+ if (stored)
149
+ return normalizeState(stored);
150
+ const legacyProjectRoots = await readLegacyProjectRoots();
151
+ const migrated = normalizeState({
152
+ v: 1,
153
+ updatedAt: nowIso(),
154
+ projectRoots: legacyProjectRoots,
155
+ });
156
+ writeDbState(migrated);
157
+ return migrated;
158
+ }
159
+ async function writeProjectState(state) {
160
+ writeDbState({
161
+ ...normalizeState(state),
162
+ updatedAt: nowIso(),
95
163
  });
96
164
  }
165
+ async function buildEntry(projectRoot) {
166
+ const project_root = normalizeProjectRoot(projectRoot);
167
+ const daemon_pid = await readDaemonPid(project_root);
168
+ const meta = await readDaemonMeta(project_root);
169
+ const running = Boolean(daemon_pid && isProcessAlive(daemon_pid));
170
+ return {
171
+ projectRoot: project_root,
172
+ pid: daemon_pid ?? meta?.pid ?? 0,
173
+ startedAt: normalizeIsoTime(meta?.startedAt),
174
+ updatedAt: normalizeIsoTime(meta?.startedAt),
175
+ status: running ? "running" : "stopped",
176
+ stoppedAt: running ? undefined : nowIso(),
177
+ };
178
+ }
97
179
  /**
98
- * 确保 city agent registry 文件存在。
99
- *
100
- * 关键点(中文)
101
- * - 空 City 运行态也应拥有显式的空 registry,避免管理侧将“尚未启动任何 agent”误判为异常。
102
- * - 若文件已存在则不覆盖,保持历史记录不丢失。
180
+ * 确保 agent 项目索引已初始化。
103
181
  */
104
182
  export async function ensureManagedAgentRegistry() {
105
- await fs.ensureDir(CONSOLE_DIR);
106
- if (await fs.pathExists(MANAGED_AGENTS_FILE)) {
107
- return;
108
- }
109
- await writeManagedAgentRegistry(buildEmptyRegistry());
183
+ await readProjectState();
110
184
  }
111
185
  /**
112
- * 获取 city agent registry 文件路径。
186
+ * 获取旧 registry 文件路径。
187
+ *
188
+ * 关键点(中文)
189
+ * - 仅用于诊断或迁移提示;当前版本不会再写这个文件。
113
190
  */
114
191
  export function getManagedAgentsRegistryPath() {
115
- return MANAGED_AGENTS_FILE;
192
+ return LEGACY_MANAGED_AGENTS_FILE;
116
193
  }
117
194
  /**
118
- * 读取 city agent registry(容错)。
119
- *
120
- * 关键点(中文)
121
- * - 文件不存在或损坏时返回空 registry,避免影响主流程。
195
+ * 读取 agent 项目索引的兼容视图。
122
196
  */
123
197
  export async function readManagedAgentRegistry() {
124
- try {
125
- if (!(await fs.pathExists(MANAGED_AGENTS_FILE))) {
126
- return buildEmptyRegistry();
127
- }
128
- const raw = (await fs.readJson(MANAGED_AGENTS_FILE));
129
- return normalizeRegistry(raw);
130
- }
131
- catch {
132
- return buildEmptyRegistry();
198
+ const state = await readProjectState();
199
+ const agents = [];
200
+ for (const projectRoot of state.projectRoots) {
201
+ agents.push(await buildEntry(projectRoot));
133
202
  }
203
+ return {
204
+ v: 1,
205
+ updatedAt: state.updatedAt,
206
+ agents,
207
+ };
134
208
  }
135
209
  /**
136
- * 列出 City registry 中记录的 agent(按 projectRoot 排序)。
210
+ * 列出 City 已登记 agent
137
211
  */
138
212
  export async function listManagedAgentEntries() {
139
213
  const registry = await readManagedAgentRegistry();
140
- return [...registry.agents].sort((a, b) => a.projectRoot.localeCompare(b.projectRoot));
214
+ return registry.agents.sort((a, b) => a.projectRoot.localeCompare(b.projectRoot));
141
215
  }
142
216
  /**
143
- * 新增或更新一条 city agent 记录。
217
+ * 登记或刷新 agent 项目。
144
218
  */
145
219
  export async function upsertManagedAgentEntry(input) {
146
220
  const projectRoot = normalizeProjectRoot(input.projectRoot);
147
- const pid = normalizePid(input.pid);
148
- const nowIso = new Date().toISOString();
149
- const registry = await readManagedAgentRegistry();
150
- const index = registry.agents.findIndex((entry) => entry.projectRoot === projectRoot);
151
- if (index >= 0) {
152
- const existing = registry.agents[index];
153
- registry.agents[index] = {
154
- projectRoot,
155
- pid,
156
- startedAt: normalizeIsoTime(existing.startedAt || input.startedAt),
157
- updatedAt: nowIso,
158
- status: input.status === "stopped" ? "stopped" : "running",
159
- stoppedAt: input.status === "stopped"
160
- ? normalizeIsoTime(input.stoppedAt || nowIso)
161
- : undefined,
162
- };
221
+ const state = await readProjectState();
222
+ if (!state.projectRoots.includes(projectRoot)) {
223
+ state.projectRoots.push(projectRoot);
163
224
  }
164
- else {
165
- registry.agents.push({
166
- projectRoot,
167
- pid,
168
- startedAt: normalizeIsoTime(input.startedAt),
169
- updatedAt: nowIso,
170
- status: input.status === "stopped" ? "stopped" : "running",
171
- stoppedAt: input.status === "stopped"
172
- ? normalizeIsoTime(input.stoppedAt || nowIso)
173
- : undefined,
174
- });
175
- }
176
- registry.updatedAt = nowIso;
177
- await writeManagedAgentRegistry(registry);
225
+ await writeProjectState(state);
178
226
  }
179
227
  /**
180
- * 标记 agent 为 stopped(保留历史记录,不删除)。
228
+ * 标记 agent 停止。
229
+ *
230
+ * 关键点(中文)
231
+ * - 当前状态只由 daemon pid/meta 推导,所以这里不写 stopped 状态,只保证项目仍在索引中。
181
232
  */
182
233
  export async function markManagedAgentStopped(projectRoot) {
183
- const key = normalizeProjectRoot(projectRoot);
184
- const registry = await readManagedAgentRegistry();
185
- const index = registry.agents.findIndex((entry) => entry.projectRoot === key);
186
- if (index < 0)
187
- return;
188
- const nowIso = new Date().toISOString();
189
- const current = registry.agents[index];
190
- registry.agents[index] = {
191
- ...current,
192
- status: "stopped",
193
- stoppedAt: nowIso,
194
- updatedAt: nowIso,
195
- };
196
- registry.updatedAt = nowIso;
197
- await writeManagedAgentRegistry(registry);
234
+ await upsertManagedAgentEntry({ projectRoot, status: "stopped" });
198
235
  }
199
236
  /**
200
- * projectRoot 移除一条 agent 记录。
237
+ * agent 项目索引中移除项目。
201
238
  */
202
239
  export async function removeManagedAgentEntry(projectRoot) {
203
240
  const key = normalizeProjectRoot(projectRoot);
204
- const registry = await readManagedAgentRegistry();
205
- const nextAgents = registry.agents.filter((entry) => entry.projectRoot !== key);
206
- if (nextAgents.length === registry.agents.length)
241
+ const state = await readProjectState();
242
+ const nextProjectRoots = state.projectRoots.filter((item) => item !== key);
243
+ if (nextProjectRoots.length === state.projectRoots.length)
207
244
  return;
208
- registry.agents = nextAgents;
209
- registry.updatedAt = new Date().toISOString();
210
- await writeManagedAgentRegistry(registry);
245
+ await writeProjectState({
246
+ ...state,
247
+ projectRoots: nextProjectRoots,
248
+ });
211
249
  }
212
250
  //# sourceMappingURL=CityRegistry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CityRegistry.js","sourceRoot":"","sources":["../../../../src/city/process/registry/CityRegistry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CityRegistry.js","sourceRoot":"","sources":["../../../../src/city/process/registry/CityRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GAEpB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,MAAM,uBAAuB,GAAG,qBAAqB,CAAC;AACtD,MAAM,0BAA0B,GAAG,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,aAAa,CAAC,CAAC;AAWrF,SAAS,MAAM;IACb,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,eAAe;IACtB,OAAO;QACL,CAAC,EAAE,CAAC;QACJ,SAAS,EAAE,MAAM,EAAE;QACnB,YAAY,EAAE,EAAE;KACjB,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,WAAmB;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAChE,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC1D,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAyB;IACjD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACzC,IAAI,CAAC,KAAK;QAAE,OAAO,MAAM,EAAE,CAAC;IAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAE,OAAO,MAAM,EAAE,CAAC;IAC1C,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,gBAAgB,CAAC,WAAmB;IAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE,mBAAmB,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,iBAAiB,CAAC,WAAmB;IAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,EAAE,oBAAoB,CAAC,CAAC;AAC/E,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,WAAmB;IAC9C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;QACtE,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACpD,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,WAAmB;IAC/C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,MAAM,CAAE,KAA2B,EAAE,GAAG,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACnD,MAAM,SAAS,GAAG,MAAM,CAAE,KAAiC,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACrF,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAC5B,MAAM,OAAO,GAAG,MAAM,CAAE,KAA+B,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/E,MAAM,OAAO,GAAG,MAAM,CAAE,KAAmC,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACvF,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QACtC,OAAO,KAAmB,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAyD;IAC/E,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,eAAe,EAAE,CAAC;IAClE,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;QACpD,CAAC,CAAC,KAAK,CAAC,YAAY;aACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,IAAI,CAAC;gBACH,OAAO,oBAAoB,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;YAClD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC;aACD,MAAM,CAAC,OAAO,CAAC;QACpB,CAAC,CAAC,EAAE,CAAC;IACP,OAAO;QACL,CAAC,EAAE,CAAC;QACJ,SAAS,EAAE,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC;QAC5C,YAAY,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;KAC5E,CAAC;AACJ,CAAC;AAED,SAAS,WAAW;IAClB,MAAM,KAAK,GAAG,uBAAuB,EAAE,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,KAAK,CAAC,wBAAwB,CAAyB,uBAAuB,CAAC,CAAC;IACzF,CAAC;YAAS,CAAC;QACT,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAA6B;IACjD,MAAM,KAAK,GAAG,uBAAuB,EAAE,CAAC;IACxC,IAAI,CAAC;QACH,KAAK,CAAC,wBAAwB,CAAC,uBAAuB,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IACjF,CAAC;YAAS,CAAC;QACT,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,sBAAsB;IACnC,IAAI,CAAC;QACH,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,0BAA0B,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;QAClE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAoC,CAAC;QAC/F,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,OAAO,MAAM;aACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACb,IAAI,CAAC;gBACH,OAAO,oBAAoB,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC;YAChE,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC;aACD,MAAM,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB;IAC7B,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;IAC7B,IAAI,MAAM;QAAE,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;IAE1C,MAAM,kBAAkB,GAAG,MAAM,sBAAsB,EAAE,CAAC;IAC1D,MAAM,QAAQ,GAAG,cAAc,CAAC;QAC9B,CAAC,EAAE,CAAC;QACJ,SAAS,EAAE,MAAM,EAAE;QACnB,YAAY,EAAE,kBAAkB;KACjC,CAAC,CAAC;IACH,YAAY,CAAC,QAAQ,CAAC,CAAC;IACvB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,KAA6B;IAC5D,YAAY,CAAC;QACX,GAAG,cAAc,CAAC,KAAK,CAAC;QACxB,SAAS,EAAE,MAAM,EAAE;KACpB,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,WAAmB;IAC3C,MAAM,YAAY,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;IAClE,OAAO;QACL,WAAW,EAAE,YAAY;QACzB,GAAG,EAAE,UAAU,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC;QACjC,SAAS,EAAE,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC;QAC5C,SAAS,EAAE,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC;QAC5C,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QACvC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE;KAC1C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B;IAC9C,MAAM,gBAAgB,EAAE,CAAC;AAC3B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B;IAC1C,OAAO,0BAA0B,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB;IAC5C,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACvC,MAAM,MAAM,GAAgC,EAAE,CAAC;IAC/C,KAAK,MAAM,WAAW,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO;QACL,CAAC,EAAE,CAAC;QACJ,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB;IAC3C,MAAM,QAAQ,GAAG,MAAM,wBAAwB,EAAE,CAAC;IAClD,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AACpF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,KAM7C;IACC,MAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACvC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9C,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,WAAmB;IAC/D,MAAM,uBAAuB,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,WAAmB;IAC/D,MAAM,GAAG,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACvC,MAAM,gBAAgB,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;IAC3E,IAAI,gBAAgB,CAAC,MAAM,KAAK,KAAK,CAAC,YAAY,CAAC,MAAM;QAAE,OAAO;IAClE,MAAM,iBAAiB,CAAC;QACtB,GAAG,KAAK;QACR,YAAY,EAAE,gBAAgB;KAC/B,CAAC,CAAC;AACL,CAAC"}
@@ -135,6 +135,14 @@ export declare class PlatformStore {
135
135
  */
136
136
  removeChannelAccount(accountIdInput: string): void;
137
137
  }
138
+ /**
139
+ * 创建 City 本地状态存储。
140
+ */
141
+ export declare function createCityPlatformStore(): PlatformStore;
142
+ /**
143
+ * 创建 Federation 管理端状态存储。
144
+ */
145
+ export declare function createFederationPlatformStore(): PlatformStore;
138
146
  /**
139
147
  * 在 PlatformStore 上下文中执行操作。
140
148
  *