@aalis/core 0.8.0 → 0.9.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 (202) hide show
  1. package/dist/app.d.ts +12 -13
  2. package/dist/app.d.ts.map +1 -1
  3. package/dist/app.js +16 -45
  4. package/dist/app.js.map +1 -1
  5. package/dist/config.d.ts +2 -25
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/config.js +2 -96
  8. package/dist/config.js.map +1 -1
  9. package/dist/context.d.ts +50 -23
  10. package/dist/context.d.ts.map +1 -1
  11. package/dist/context.js +102 -33
  12. package/dist/context.js.map +1 -1
  13. package/dist/contributions.d.ts +1 -1
  14. package/dist/contributions.js +1 -1
  15. package/dist/disposable-chain.d.ts +47 -6
  16. package/dist/disposable-chain.d.ts.map +1 -1
  17. package/dist/disposable-chain.js +92 -12
  18. package/dist/disposable-chain.js.map +1 -1
  19. package/dist/events.d.ts +1 -9
  20. package/dist/events.d.ts.map +1 -1
  21. package/dist/events.js +1 -23
  22. package/dist/events.js.map +1 -1
  23. package/dist/index.d.ts +4 -4
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +2 -2
  26. package/dist/index.js.map +1 -1
  27. package/dist/plugin-activation.d.ts +2 -0
  28. package/dist/plugin-activation.d.ts.map +1 -1
  29. package/dist/plugin-activation.js +9 -5
  30. package/dist/plugin-activation.js.map +1 -1
  31. package/dist/plugin-topology.d.ts +6 -2
  32. package/dist/plugin-topology.d.ts.map +1 -1
  33. package/dist/plugin-topology.js +6 -4
  34. package/dist/plugin-topology.js.map +1 -1
  35. package/dist/plugin.d.ts +20 -14
  36. package/dist/plugin.d.ts.map +1 -1
  37. package/dist/plugin.js +53 -72
  38. package/dist/plugin.js.map +1 -1
  39. package/dist/{service-helpers.d.ts → services-helpers.d.ts} +2 -2
  40. package/dist/services-helpers.d.ts.map +1 -0
  41. package/dist/{service-helpers.js → services-helpers.js} +2 -2
  42. package/dist/{service-helpers.js.map → services-helpers.js.map} +1 -1
  43. package/dist/{service.d.ts → services.d.ts} +44 -9
  44. package/dist/services.d.ts.map +1 -0
  45. package/dist/{service.js → services.js} +35 -11
  46. package/dist/services.js.map +1 -0
  47. package/dist/types/app.d.ts +8 -8
  48. package/dist/types/app.d.ts.map +1 -1
  49. package/dist/types/events.d.ts +44 -0
  50. package/dist/types/events.d.ts.map +1 -0
  51. package/dist/types/events.js +6 -0
  52. package/dist/types/events.js.map +1 -0
  53. package/dist/types/hooks.d.ts +8 -0
  54. package/dist/types/hooks.d.ts.map +1 -1
  55. package/dist/types/index.d.ts +4 -3
  56. package/dist/types/index.d.ts.map +1 -1
  57. package/dist/types/index.js +7 -6
  58. package/dist/types/index.js.map +1 -1
  59. package/dist/types/plugin.d.ts +12 -4
  60. package/dist/types/plugin.d.ts.map +1 -1
  61. package/dist/types/plugin.js.map +1 -1
  62. package/dist/types/services.d.ts +4 -0
  63. package/dist/types/services.d.ts.map +1 -1
  64. package/package.json +1 -1
  65. package/dist/constants.d.ts +0 -31
  66. package/dist/constants.d.ts.map +0 -1
  67. package/dist/constants.js +0 -36
  68. package/dist/constants.js.map +0 -1
  69. package/dist/i18n.d.ts +0 -6
  70. package/dist/i18n.d.ts.map +0 -1
  71. package/dist/i18n.js +0 -26
  72. package/dist/i18n.js.map +0 -1
  73. package/dist/identity.d.ts +0 -26
  74. package/dist/identity.d.ts.map +0 -1
  75. package/dist/identity.js +0 -36
  76. package/dist/identity.js.map +0 -1
  77. package/dist/init.d.ts +0 -20
  78. package/dist/init.d.ts.map +0 -1
  79. package/dist/init.js +0 -455
  80. package/dist/init.js.map +0 -1
  81. package/dist/llm-router.d.ts.map +0 -1
  82. package/dist/llm-router.js +0 -123
  83. package/dist/llm-router.js.map +0 -1
  84. package/dist/marketplace-bootstrap.d.ts +0 -54
  85. package/dist/marketplace-bootstrap.d.ts.map +0 -1
  86. package/dist/marketplace-bootstrap.js +0 -132
  87. package/dist/marketplace-bootstrap.js.map +0 -1
  88. package/dist/mixin-registry.d.ts +0 -34
  89. package/dist/mixin-registry.d.ts.map +0 -1
  90. package/dist/mixin-registry.js +0 -60
  91. package/dist/mixin-registry.js.map +0 -1
  92. package/dist/model-ref.d.ts +0 -22
  93. package/dist/model-ref.d.ts.map +0 -1
  94. package/dist/model-ref.js +0 -46
  95. package/dist/model-ref.js.map +0 -1
  96. package/dist/pending-buffer.d.ts +0 -46
  97. package/dist/pending-buffer.d.ts.map +0 -1
  98. package/dist/pending-buffer.js +0 -131
  99. package/dist/pending-buffer.js.map +0 -1
  100. package/dist/platform-registry.d.ts +0 -40
  101. package/dist/platform-registry.d.ts.map +0 -1
  102. package/dist/platform-registry.js +0 -64
  103. package/dist/platform-registry.js.map +0 -1
  104. package/dist/semver-mini.d.ts +0 -20
  105. package/dist/semver-mini.d.ts.map +0 -1
  106. package/dist/semver-mini.js +0 -94
  107. package/dist/semver-mini.js.map +0 -1
  108. package/dist/service-helpers.d.ts.map +0 -1
  109. package/dist/service.d.ts.map +0 -1
  110. package/dist/service.js.map +0 -1
  111. package/dist/types/agent.d.ts +0 -51
  112. package/dist/types/agent.d.ts.map +0 -1
  113. package/dist/types/agent.js +0 -3
  114. package/dist/types/agent.js.map +0 -1
  115. package/dist/types/archive.d.ts +0 -59
  116. package/dist/types/archive.d.ts.map +0 -1
  117. package/dist/types/archive.js +0 -16
  118. package/dist/types/archive.js.map +0 -1
  119. package/dist/types/authority.d.ts +0 -63
  120. package/dist/types/authority.d.ts.map +0 -1
  121. package/dist/types/authority.js +0 -3
  122. package/dist/types/authority.js.map +0 -1
  123. package/dist/types/capabilities.d.ts +0 -53
  124. package/dist/types/capabilities.d.ts.map +0 -1
  125. package/dist/types/capabilities.js +0 -87
  126. package/dist/types/capabilities.js.map +0 -1
  127. package/dist/types/cli.d.ts +0 -14
  128. package/dist/types/cli.d.ts.map +0 -1
  129. package/dist/types/cli.js +0 -3
  130. package/dist/types/cli.js.map +0 -1
  131. package/dist/types/commands.d.ts +0 -98
  132. package/dist/types/commands.d.ts.map +0 -1
  133. package/dist/types/commands.js +0 -3
  134. package/dist/types/commands.js.map +0 -1
  135. package/dist/types/core.d.ts +0 -116
  136. package/dist/types/core.d.ts.map +0 -1
  137. package/dist/types/core.js +0 -6
  138. package/dist/types/core.js.map +0 -1
  139. package/dist/types/embedding.d.ts +0 -7
  140. package/dist/types/embedding.d.ts.map +0 -1
  141. package/dist/types/embedding.js +0 -3
  142. package/dist/types/embedding.js.map +0 -1
  143. package/dist/types/flow-control.d.ts +0 -51
  144. package/dist/types/flow-control.d.ts.map +0 -1
  145. package/dist/types/flow-control.js +0 -12
  146. package/dist/types/flow-control.js.map +0 -1
  147. package/dist/types/gateway.d.ts +0 -24
  148. package/dist/types/gateway.d.ts.map +0 -1
  149. package/dist/types/gateway.js +0 -15
  150. package/dist/types/gateway.js.map +0 -1
  151. package/dist/types/image-recognition.d.ts +0 -123
  152. package/dist/types/image-recognition.d.ts.map +0 -1
  153. package/dist/types/image-recognition.js +0 -31
  154. package/dist/types/image-recognition.js.map +0 -1
  155. package/dist/types/llm.d.ts +0 -146
  156. package/dist/types/llm.d.ts.map +0 -1
  157. package/dist/types/llm.js +0 -27
  158. package/dist/types/llm.js.map +0 -1
  159. package/dist/types/memory.d.ts +0 -62
  160. package/dist/types/memory.d.ts.map +0 -1
  161. package/dist/types/memory.js +0 -22
  162. package/dist/types/memory.js.map +0 -1
  163. package/dist/types/persona.d.ts +0 -45
  164. package/dist/types/persona.d.ts.map +0 -1
  165. package/dist/types/persona.js +0 -3
  166. package/dist/types/persona.js.map +0 -1
  167. package/dist/types/platform.d.ts +0 -126
  168. package/dist/types/platform.d.ts.map +0 -1
  169. package/dist/types/platform.js +0 -5
  170. package/dist/types/platform.js.map +0 -1
  171. package/dist/types/service.d.ts +0 -41
  172. package/dist/types/service.d.ts.map +0 -1
  173. package/dist/types/service.js +0 -35
  174. package/dist/types/service.js.map +0 -1
  175. package/dist/types/session.d.ts +0 -153
  176. package/dist/types/session.d.ts.map +0 -1
  177. package/dist/types/session.js +0 -19
  178. package/dist/types/session.js.map +0 -1
  179. package/dist/types/storage.d.ts +0 -100
  180. package/dist/types/storage.d.ts.map +0 -1
  181. package/dist/types/storage.js +0 -29
  182. package/dist/types/storage.js.map +0 -1
  183. package/dist/types/tools.d.ts +0 -39
  184. package/dist/types/tools.d.ts.map +0 -1
  185. package/dist/types/tools.js +0 -3
  186. package/dist/types/tools.js.map +0 -1
  187. package/dist/types/trigger-policy.d.ts +0 -16
  188. package/dist/types/trigger-policy.d.ts.map +0 -1
  189. package/dist/types/trigger-policy.js +0 -6
  190. package/dist/types/trigger-policy.js.map +0 -1
  191. package/dist/types/vectorstore.d.ts +0 -23
  192. package/dist/types/vectorstore.d.ts.map +0 -1
  193. package/dist/types/vectorstore.js +0 -3
  194. package/dist/types/vectorstore.js.map +0 -1
  195. package/dist/types/web-search.d.ts +0 -88
  196. package/dist/types/web-search.d.ts.map +0 -1
  197. package/dist/types/web-search.js +0 -23
  198. package/dist/types/web-search.js.map +0 -1
  199. package/dist/types/webui.d.ts +0 -137
  200. package/dist/types/webui.d.ts.map +0 -1
  201. package/dist/types/webui.js +0 -3
  202. package/dist/types/webui.js.map +0 -1
@@ -1,54 +0,0 @@
1
- /**
2
- * 最小化 marketplace HTTP 客户端,专供 init 向导/全新工程的 bootstrap 使用。
3
- *
4
- * 与 plugin-marketplace-client 的关系:
5
- * - core 不依赖任何 plugin 包,因此这里独立实现一份"够用就好"的 HTTP fetch + 解压。
6
- * - 不做签名校验(仅 sha256 对比 tarball.size/sha256,签名留给运行时插件)。
7
- * - 安装目标固定为 packages/<dir>/,与 plugin-marketplace-client 的 install-pipeline 对齐。
8
- *
9
- * 路由与 plugin-marketplace-client/src/protocol.ts 的 ROUTES 保持一致:
10
- * GET /v1/plugins
11
- * GET /v1/plugins/:name/:version/tarball
12
- */
13
- export interface BootstrapIndexEntry {
14
- name: string;
15
- latest: string;
16
- versions: string[];
17
- displayName?: string;
18
- description?: string;
19
- keywords?: string[];
20
- provides?: string[];
21
- inject?: string[];
22
- }
23
- export interface BootstrapListResponse {
24
- protocol: string;
25
- total: number;
26
- items: BootstrapIndexEntry[];
27
- }
28
- /** 把 manifest.name 转成 packages/<dir> 的目录名(与 install-pipeline.pluginDirName 对齐)。 */
29
- export declare function pluginDirName(manifestName: string): string;
30
- export declare class MarketplaceBootstrap {
31
- readonly baseUrl: string;
32
- readonly timeoutMs: number;
33
- constructor(baseUrl: string, timeoutMs?: number);
34
- private get base();
35
- /** 拉取插件列表 */
36
- listPlugins(): Promise<BootstrapIndexEntry[]>;
37
- /** 下载指定版本 tarball */
38
- fetchTarball(name: string, version: string): Promise<Buffer>;
39
- /**
40
- * 下载 + 校验 + 解压到 packages/<dir>/。
41
- * 调用方须自行决定是否在所有插件下载完毕后跑一次 pnpm install。
42
- */
43
- installToPackages(name: string, version: string, opts: {
44
- packagesDir: string;
45
- cacheDir?: string;
46
- expectedSha256?: string;
47
- }): Promise<{
48
- pluginDir: string;
49
- tarballPath?: string;
50
- }>;
51
- }
52
- /** 在项目根触发 pnpm install(让 workspace 重新解析 deps) */
53
- export declare function runRootPnpmInstall(projectRoot: string, timeoutMs?: number): Promise<void>;
54
- //# sourceMappingURL=marketplace-bootstrap.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"marketplace-bootstrap.d.ts","sourceRoot":"","sources":["../src/marketplace-bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAWH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,mBAAmB,EAAE,CAAC;CAC9B;AAED,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED,qBAAa,oBAAoB;aAEb,OAAO,EAAE,MAAM;aACf,SAAS,EAAE,MAAM;gBADjB,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAAe;IAG5C,OAAO,KAAK,IAAI,GAAuD;IAEvE,aAAa;IACP,WAAW,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAgBnD,qBAAqB;IACf,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAalE;;;OAGG;IACG,iBAAiB,CACrB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;QACJ,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,GACA,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CA2CxD;AAMD,iDAAiD;AACjD,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,SAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAOhG"}
@@ -1,132 +0,0 @@
1
- /**
2
- * 最小化 marketplace HTTP 客户端,专供 init 向导/全新工程的 bootstrap 使用。
3
- *
4
- * 与 plugin-marketplace-client 的关系:
5
- * - core 不依赖任何 plugin 包,因此这里独立实现一份"够用就好"的 HTTP fetch + 解压。
6
- * - 不做签名校验(仅 sha256 对比 tarball.size/sha256,签名留给运行时插件)。
7
- * - 安装目标固定为 packages/<dir>/,与 plugin-marketplace-client 的 install-pipeline 对齐。
8
- *
9
- * 路由与 plugin-marketplace-client/src/protocol.ts 的 ROUTES 保持一致:
10
- * GET /v1/plugins
11
- * GET /v1/plugins/:name/:version/tarball
12
- */
13
- import { execFile } from 'node:child_process';
14
- import { createHash } from 'node:crypto';
15
- import { existsSync } from 'node:fs';
16
- import { mkdir, rm, writeFile } from 'node:fs/promises';
17
- import { resolve } from 'node:path';
18
- import { promisify } from 'node:util';
19
- const execFileAsync = promisify(execFile);
20
- /** 把 manifest.name 转成 packages/<dir> 的目录名(与 install-pipeline.pluginDirName 对齐)。 */
21
- export function pluginDirName(manifestName) {
22
- if (manifestName.startsWith('@')) {
23
- const slash = manifestName.indexOf('/');
24
- return slash > 0 ? manifestName.slice(slash + 1) : manifestName;
25
- }
26
- return manifestName;
27
- }
28
- export class MarketplaceBootstrap {
29
- baseUrl;
30
- timeoutMs;
31
- constructor(baseUrl, timeoutMs = 15_000) {
32
- this.baseUrl = baseUrl;
33
- this.timeoutMs = timeoutMs;
34
- }
35
- get base() { return this.baseUrl.replace(/\/+$/, ''); }
36
- /** 拉取插件列表 */
37
- async listPlugins() {
38
- const ac = new AbortController();
39
- const timer = setTimeout(() => ac.abort(), this.timeoutMs);
40
- try {
41
- const res = await fetch(this.base + '/v1/plugins', {
42
- signal: ac.signal,
43
- headers: { accept: 'application/json' },
44
- });
45
- if (!res.ok)
46
- throw new Error(`registry list ${res.status}`);
47
- const data = (await res.json());
48
- return data.items ?? [];
49
- }
50
- finally {
51
- clearTimeout(timer);
52
- }
53
- }
54
- /** 下载指定版本 tarball */
55
- async fetchTarball(name, version) {
56
- const ac = new AbortController();
57
- const timer = setTimeout(() => ac.abort(), this.timeoutMs * 4);
58
- try {
59
- const url = this.base + `/v1/plugins/${encodeURIComponent(name)}/${encodeURIComponent(version)}/tarball`;
60
- const res = await fetch(url, { signal: ac.signal });
61
- if (!res.ok)
62
- throw new Error(`tarball ${name}@${version} ${res.status}`);
63
- return Buffer.from(await res.arrayBuffer());
64
- }
65
- finally {
66
- clearTimeout(timer);
67
- }
68
- }
69
- /**
70
- * 下载 + 校验 + 解压到 packages/<dir>/。
71
- * 调用方须自行决定是否在所有插件下载完毕后跑一次 pnpm install。
72
- */
73
- async installToPackages(name, version, opts) {
74
- const dir = pluginDirName(name);
75
- const finalDir = resolve(opts.packagesDir, dir);
76
- if (existsSync(finalDir)) {
77
- throw new Error(`packages/${dir}/ 已存在,拒绝覆盖`);
78
- }
79
- const tarball = await this.fetchTarball(name, version);
80
- if (opts.expectedSha256) {
81
- const got = sha256Hex(tarball);
82
- if (got !== opts.expectedSha256) {
83
- throw new Error(`sha256 mismatch: expected ${opts.expectedSha256}, got ${got}`);
84
- }
85
- }
86
- let tarballPath;
87
- if (opts.cacheDir) {
88
- await mkdir(opts.cacheDir, { recursive: true });
89
- tarballPath = resolve(opts.cacheDir, `${name.replace(/[\/@]/g, '-')}-${version}.tgz`);
90
- await writeFile(tarballPath, tarball);
91
- }
92
- else {
93
- // 没有 cacheDir 也得有个临时落点供 system tar 读取
94
- tarballPath = resolve(opts.packagesDir, `.aalis-bootstrap-${Date.now()}.tgz`);
95
- await writeFile(tarballPath, tarball);
96
- }
97
- await mkdir(finalDir, { recursive: true });
98
- try {
99
- await execFileAsync('tar', ['-xzf', tarballPath, '-C', finalDir, '--strip-components=1'], {
100
- timeout: 60_000,
101
- maxBuffer: 128 * 1024 * 1024,
102
- });
103
- }
104
- catch (e) {
105
- await rm(finalDir, { recursive: true, force: true });
106
- throw e;
107
- }
108
- finally {
109
- // 临时 tarball 用完即删
110
- if (!opts.cacheDir && tarballPath && existsSync(tarballPath)) {
111
- try {
112
- await rm(tarballPath, { force: true });
113
- }
114
- catch { /* ignore */ }
115
- }
116
- }
117
- return { pluginDir: finalDir, tarballPath: opts.cacheDir ? tarballPath : undefined };
118
- }
119
- }
120
- function sha256Hex(data) {
121
- return createHash('sha256').update(data).digest('hex');
122
- }
123
- /** 在项目根触发 pnpm install(让 workspace 重新解析 deps) */
124
- export async function runRootPnpmInstall(projectRoot, timeoutMs = 180_000) {
125
- await execFileAsync('pnpm', ['install', '--silent'], {
126
- cwd: projectRoot,
127
- timeout: timeoutMs,
128
- maxBuffer: 32 * 1024 * 1024,
129
- env: process.env,
130
- });
131
- }
132
- //# sourceMappingURL=marketplace-bootstrap.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"marketplace-bootstrap.js","sourceRoot":"","sources":["../src/marketplace-bootstrap.ts"],"names":[],"mappings":"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"}
@@ -1,34 +0,0 @@
1
- import type { Logger } from './logger.js';
2
- /** Mixin 条目记录 */
3
- export interface MixinEntry {
4
- service: string;
5
- methods: string[];
6
- contextId: string;
7
- }
8
- /** 承载 mixin 方法的目标 prototype(一般是 Context.prototype) */
9
- type MixinTarget = object;
10
- /**
11
- * Mixin 注册表(进程级)
12
- *
13
- * 职责:
14
- * - 维护 mixin 条目列表(哪些服务的哪些方法被代理到了 target prototype 上)
15
- * - 在 target prototype 上安装 getter,按 `this` 运行时解析服务实例并 bind
16
- * - `dispose()` 时如该方法已无其他 mixin 引用则清除
17
- *
18
- * 设计:静态类而非单例——因为 Context.prototype 是进程级共享资源,
19
- * 不存在"每实例一个 registry"的语义;集中成静态便于测试和管理。
20
- */
21
- export declare class MixinRegistry {
22
- private static _entries;
23
- /**
24
- * 注册 mixin:把 `serviceName` 指代的服务实例的若干方法
25
- * 代理到 `target` prototype 上。
26
- *
27
- * @returns 卸载函数
28
- */
29
- static register(target: MixinTarget, serviceName: string, methods: string[], contextId: string, logger: Logger): () => void;
30
- /** 当前所有 mixin 注册信息(快照) */
31
- static list(): MixinEntry[];
32
- }
33
- export {};
34
- //# sourceMappingURL=mixin-registry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mixin-registry.d.ts","sourceRoot":"","sources":["../src/mixin-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,iBAAiB;AACjB,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAOD,sDAAsD;AACtD,KAAK,WAAW,GAAG,MAAM,CAAC;AAE1B;;;;;;;;;;GAUG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAoB;IAE3C;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CACb,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EAAE,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,MAAM,IAAI;IAoCb,0BAA0B;IAC1B,MAAM,CAAC,IAAI,IAAI,UAAU,EAAE;CAG5B"}
@@ -1,60 +0,0 @@
1
- /**
2
- * Mixin 注册表(进程级)
3
- *
4
- * 职责:
5
- * - 维护 mixin 条目列表(哪些服务的哪些方法被代理到了 target prototype 上)
6
- * - 在 target prototype 上安装 getter,按 `this` 运行时解析服务实例并 bind
7
- * - `dispose()` 时如该方法已无其他 mixin 引用则清除
8
- *
9
- * 设计:静态类而非单例——因为 Context.prototype 是进程级共享资源,
10
- * 不存在"每实例一个 registry"的语义;集中成静态便于测试和管理。
11
- */
12
- export class MixinRegistry {
13
- static _entries = [];
14
- /**
15
- * 注册 mixin:把 `serviceName` 指代的服务实例的若干方法
16
- * 代理到 `target` prototype 上。
17
- *
18
- * @returns 卸载函数
19
- */
20
- static register(target, serviceName, methods, contextId, logger) {
21
- const entry = { service: serviceName, methods, contextId };
22
- MixinRegistry._entries.push(entry);
23
- for (const method of methods) {
24
- if (method in target) {
25
- logger.warn(`mixin: 方法 "${method}" 已存在于 target,跳过`);
26
- continue;
27
- }
28
- Object.defineProperty(target, method, {
29
- configurable: true,
30
- enumerable: false,
31
- get() {
32
- const svc = this.getService(serviceName);
33
- if (!svc)
34
- return undefined;
35
- const val = svc[method];
36
- if (typeof val === 'function')
37
- return val.bind(svc);
38
- return val;
39
- },
40
- });
41
- }
42
- logger.debug(`mixin: ${methods.join(', ')} → ${serviceName}`);
43
- return () => {
44
- const idx = MixinRegistry._entries.indexOf(entry);
45
- if (idx >= 0)
46
- MixinRegistry._entries.splice(idx, 1);
47
- for (const method of methods) {
48
- const stillUsed = MixinRegistry._entries.some(e => e.methods.includes(method));
49
- if (!stillUsed) {
50
- delete target[method];
51
- }
52
- }
53
- };
54
- }
55
- /** 当前所有 mixin 注册信息(快照) */
56
- static list() {
57
- return MixinRegistry._entries.map(e => ({ ...e }));
58
- }
59
- }
60
- //# sourceMappingURL=mixin-registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mixin-registry.js","sourceRoot":"","sources":["../src/mixin-registry.ts"],"names":[],"mappings":"AAiBA;;;;;;;;;;GAUG;AACH,MAAM,OAAO,aAAa;IAChB,MAAM,CAAC,QAAQ,GAAiB,EAAE,CAAC;IAE3C;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CACb,MAAmB,EACnB,WAAmB,EACnB,OAAiB,EACjB,SAAiB,EACjB,MAAc;QAEd,MAAM,KAAK,GAAe,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QACvE,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEnC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC,cAAc,MAAM,kBAAkB,CAAC,CAAC;gBACpD,SAAS;YACX,CAAC;YACD,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE;gBACpC,YAAY,EAAE,IAAI;gBAClB,UAAU,EAAE,KAAK;gBACjB,GAAG;oBACD,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAA0B,WAAW,CAAC,CAAC;oBAClE,IAAI,CAAC,GAAG;wBAAE,OAAO,SAAS,CAAC;oBAC3B,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;oBACxB,IAAI,OAAO,GAAG,KAAK,UAAU;wBAAE,OAAQ,GAAuC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACzF,OAAO,GAAG,CAAC;gBACb,CAAC;aACF,CAAC,CAAC;QACL,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,UAAU,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,WAAW,EAAE,CAAC,CAAC;QAE9D,OAAO,GAAG,EAAE;YACV,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAClD,IAAI,GAAG,IAAI,CAAC;gBAAE,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACpD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC/E,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,OAAQ,MAAkC,CAAC,MAAM,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED,0BAA0B;IAC1B,MAAM,CAAC,IAAI;QACT,OAAO,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC"}
@@ -1,22 +0,0 @@
1
- export interface ModelRef {
2
- /** provider 的 contextId(instanceId)。未指定则 router 走"按 model id 在所有 provider listModels 中查找" */
3
- provider?: string;
4
- /** 模型 id;未指定则 provider 用其默认模型 */
5
- model?: string;
6
- }
7
- /**
8
- * 解析复合 model 引用字符串。
9
- *
10
- * - `"@aalis/plugin-openai::gpt-4o"` → `{ provider: "@aalis/plugin-openai", model: "gpt-4o" }`
11
- * - `"gpt-4o"` (无 `::`)→ `{ model: "gpt-4o" }`(旧风格,仅 model)
12
- * - `""` / null / undefined → `{}`(让调用方走默认 provider/model)
13
- *
14
- * 注意:分隔符使用 `::` 而非 `:`,因为 model id 中允许包含 `:`(如 ollama 的 `qwen2.5:7b`)。
15
- */
16
- export declare function parseModelRef(value: string | null | undefined): ModelRef;
17
- /**
18
- * 将 (provider, model) 编码为复合 string,用于持久化或 UI 选项 value。
19
- * 任一方缺失时不输出分隔符(避免产生 `::xxx` 或 `xxx::` 这种不规整形式)。
20
- */
21
- export declare function formatModelRef(ref: ModelRef): string;
22
- //# sourceMappingURL=model-ref.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model-ref.d.ts","sourceRoot":"","sources":["../src/model-ref.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,QAAQ;IACvB,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,QAAQ,CAUxE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,CAGpD"}
package/dist/model-ref.js DELETED
@@ -1,46 +0,0 @@
1
- // ===== Model 引用编解码 =====
2
- //
3
- // 把 (provider, model) 二元组与配置/UI 友好的 string 形式互转,避免在 yaml 与 form 里
4
- // 引入复合 schema。yaml 与 WebUI dynamicOptions:'llm' 的 select value 都使用此格式:
5
- //
6
- // "<providerContextId>::<modelId>"
7
- //
8
- // 例如:
9
- // "@aalis/plugin-openai::gpt-4o"
10
- // "@aalis/plugin-deepseek::deepseek-chat"
11
- // "@aalis/plugin-ollama::qwen2.5:7b" ← model id 内部出现 ':' 仍然安全(用 '::' 分隔)
12
- //
13
- // 只接受 contextId 作为 provider 部分;不接受 label,避免歧义。
14
- const MODEL_REF_SEPARATOR = '::';
15
- /**
16
- * 解析复合 model 引用字符串。
17
- *
18
- * - `"@aalis/plugin-openai::gpt-4o"` → `{ provider: "@aalis/plugin-openai", model: "gpt-4o" }`
19
- * - `"gpt-4o"` (无 `::`)→ `{ model: "gpt-4o" }`(旧风格,仅 model)
20
- * - `""` / null / undefined → `{}`(让调用方走默认 provider/model)
21
- *
22
- * 注意:分隔符使用 `::` 而非 `:`,因为 model id 中允许包含 `:`(如 ollama 的 `qwen2.5:7b`)。
23
- */
24
- export function parseModelRef(value) {
25
- if (!value)
26
- return {};
27
- const idx = value.indexOf(MODEL_REF_SEPARATOR);
28
- if (idx < 0)
29
- return { model: value };
30
- const provider = value.slice(0, idx);
31
- const model = value.slice(idx + MODEL_REF_SEPARATOR.length);
32
- return {
33
- provider: provider || undefined,
34
- model: model || undefined,
35
- };
36
- }
37
- /**
38
- * 将 (provider, model) 编码为复合 string,用于持久化或 UI 选项 value。
39
- * 任一方缺失时不输出分隔符(避免产生 `::xxx` 或 `xxx::` 这种不规整形式)。
40
- */
41
- export function formatModelRef(ref) {
42
- if (ref.provider && ref.model)
43
- return `${ref.provider}${MODEL_REF_SEPARATOR}${ref.model}`;
44
- return ref.model ?? ref.provider ?? '';
45
- }
46
- //# sourceMappingURL=model-ref.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"model-ref.js","sourceRoot":"","sources":["../src/model-ref.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,EAAE;AACF,kEAAkE;AAClE,uEAAuE;AACvE,EAAE;AACF,qCAAqC;AACrC,EAAE;AACF,MAAM;AACN,mCAAmC;AACnC,4CAA4C;AAC5C,6EAA6E;AAC7E,EAAE;AACF,+CAA+C;AAE/C,MAAM,mBAAmB,GAAG,IAAI,CAAC;AASjC;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,KAAgC;IAC5D,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC/C,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5D,OAAO;QACL,QAAQ,EAAE,QAAQ,IAAI,SAAS;QAC/B,KAAK,EAAE,KAAK,IAAI,SAAS;KAC1B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,GAAa;IAC1C,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,KAAK;QAAE,OAAO,GAAG,GAAG,CAAC,QAAQ,GAAG,mBAAmB,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;IAC1F,OAAO,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;AACzC,CAAC"}
@@ -1,46 +0,0 @@
1
- import type { DisposableChain } from './disposable-chain.js';
2
- import type { Logger } from './logger.js';
3
- import type { ServiceContainer } from './service.js';
4
- import type { RegisteredTool, ToolGroupInfo, CommandDefinition, AalisEvents } from './types/index.js';
5
- /**
6
- * 工具/指令注册缓冲
7
- *
8
- * 用途:插件加载顺序无法保证 tools/commands 服务已就绪时,
9
- * 调用 `ctx.registerTool / registerToolGroup / command` 会被临时收纳,
10
- * 等 `service:registered` 事件触发后自动刷入真实服务。
11
- *
12
- * 从 Context 抽出以便独立测试与理解。
13
- *
14
- * 设计要点:
15
- * - 该缓冲是"按 Context 实例一份"的,因为每条注册都要归属到发起者 contextId
16
- * - 刷入成功后获得的 dispose 函数会被加入传入的 DisposableChain,保证 Context
17
- * dispose 时能统一回收
18
- * - 如调用方尚未刷入前主动 dispose,会从本地数组里移除条目,不会到达底层服务
19
- */
20
- export declare class PendingRegistrationBuffer {
21
- private readonly contextId;
22
- private readonly services;
23
- private readonly logger;
24
- private readonly disposables;
25
- /** 由 Context 注入的 `on(event, handler)` —— 让生命周期统一托管 */
26
- private readonly onEvent;
27
- private _tools;
28
- private _toolGroups;
29
- private _commands;
30
- private _flushListenerAttached;
31
- constructor(contextId: string, services: ServiceContainer, logger: Logger, disposables: DisposableChain,
32
- /** 由 Context 注入的 `on(event, handler)` —— 让生命周期统一托管 */
33
- onEvent: <E extends string & keyof AalisEvents>(event: E, handler: (...args: AalisEvents[E]) => void | Promise<void>) => () => void);
34
- /** 注册 AI 工具。服务可用则直接注册,否则缓冲到 tools 服务就绪。 */
35
- registerTool(tool: Omit<RegisteredTool, 'pluginName'>): () => void;
36
- /** 注册工具分组。行为同 registerTool。 */
37
- registerToolGroup(group: Omit<ToolGroupInfo, 'pluginName'>): () => void;
38
- /** 注册斜杠指令。服务可用则直接注册,否则缓冲到 commands 服务就绪。 */
39
- registerCommand(def: CommandDefinition): () => void;
40
- /** 清空本地缓冲(Context.dispose 时调用,底层服务已由 DisposableChain 回收) */
41
- clear(): void;
42
- private _ensureFlushListener;
43
- private _flushTools;
44
- private _flushCommands;
45
- }
46
- //# sourceMappingURL=pending-buffer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pending-buffer.d.ts","sourceRoot":"","sources":["../src/pending-buffer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAA+B,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEnI;;;;;;;;;;;;;;GAcG;AACH,qBAAa,yBAAyB;IAOlC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,sDAAsD;IACtD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAX1B,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,WAAW,CAA2C;IAC9D,OAAO,CAAC,SAAS,CAAmD;IACpE,OAAO,CAAC,sBAAsB,CAAS;gBAGpB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,eAAe;IAC7C,sDAAsD;IACrC,OAAO,EAAE,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,WAAW,EAC7D,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KACvD,MAAM,IAAI;IAGjB,2CAA2C;IAC3C,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,GAAG,MAAM,IAAI;IAgBlE,+BAA+B;IAC/B,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,GAAG,MAAM,IAAI;IAgBvE,4CAA4C;IAC5C,eAAe,CAAC,GAAG,EAAE,iBAAiB,GAAG,MAAM,IAAI;IAiBnD,4DAA4D;IAC5D,KAAK,IAAI,IAAI;IAMb,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,cAAc;CASvB"}
@@ -1,131 +0,0 @@
1
- /**
2
- * 工具/指令注册缓冲
3
- *
4
- * 用途:插件加载顺序无法保证 tools/commands 服务已就绪时,
5
- * 调用 `ctx.registerTool / registerToolGroup / command` 会被临时收纳,
6
- * 等 `service:registered` 事件触发后自动刷入真实服务。
7
- *
8
- * 从 Context 抽出以便独立测试与理解。
9
- *
10
- * 设计要点:
11
- * - 该缓冲是"按 Context 实例一份"的,因为每条注册都要归属到发起者 contextId
12
- * - 刷入成功后获得的 dispose 函数会被加入传入的 DisposableChain,保证 Context
13
- * dispose 时能统一回收
14
- * - 如调用方尚未刷入前主动 dispose,会从本地数组里移除条目,不会到达底层服务
15
- */
16
- export class PendingRegistrationBuffer {
17
- contextId;
18
- services;
19
- logger;
20
- disposables;
21
- onEvent;
22
- _tools = [];
23
- _toolGroups = [];
24
- _commands = [];
25
- _flushListenerAttached = false;
26
- constructor(contextId, services, logger, disposables,
27
- /** 由 Context 注入的 `on(event, handler)` —— 让生命周期统一托管 */
28
- onEvent) {
29
- this.contextId = contextId;
30
- this.services = services;
31
- this.logger = logger;
32
- this.disposables = disposables;
33
- this.onEvent = onEvent;
34
- }
35
- /** 注册 AI 工具。服务可用则直接注册,否则缓冲到 tools 服务就绪。 */
36
- registerTool(tool) {
37
- const tools = this.services.get('tools');
38
- if (tools) {
39
- const dispose = tools.register(tool, this.contextId);
40
- this.disposables.push(dispose);
41
- return dispose;
42
- }
43
- this._tools.push(tool);
44
- this._ensureFlushListener();
45
- this.logger.debug(`工具 "${tool.definition.function.name}" 已缓冲,等待 tools 服务就绪`);
46
- return () => {
47
- const idx = this._tools.indexOf(tool);
48
- if (idx >= 0)
49
- this._tools.splice(idx, 1);
50
- };
51
- }
52
- /** 注册工具分组。行为同 registerTool。 */
53
- registerToolGroup(group) {
54
- const tools = this.services.get('tools');
55
- if (tools) {
56
- const dispose = tools.registerGroup(group, this.contextId);
57
- this.disposables.push(dispose);
58
- return dispose;
59
- }
60
- this._toolGroups.push(group);
61
- this._ensureFlushListener();
62
- this.logger.debug(`工具分组 "${group.name}" 已缓冲,等待 tools 服务就绪`);
63
- return () => {
64
- const idx = this._toolGroups.indexOf(group);
65
- if (idx >= 0)
66
- this._toolGroups.splice(idx, 1);
67
- };
68
- }
69
- /** 注册斜杠指令。服务可用则直接注册,否则缓冲到 commands 服务就绪。 */
70
- registerCommand(def) {
71
- const commands = this.services.get('commands');
72
- if (commands) {
73
- const dispose = commands.register(def, this.contextId);
74
- this.disposables.push(dispose);
75
- return dispose;
76
- }
77
- const entry = { def, ctxId: this.contextId };
78
- this._commands.push(entry);
79
- this._ensureFlushListener();
80
- this.logger.debug(`指令 "${def.name}" 已缓冲,等待 commands 服务就绪`);
81
- return () => {
82
- const idx = this._commands.indexOf(entry);
83
- if (idx >= 0)
84
- this._commands.splice(idx, 1);
85
- };
86
- }
87
- /** 清空本地缓冲(Context.dispose 时调用,底层服务已由 DisposableChain 回收) */
88
- clear() {
89
- this._tools = [];
90
- this._toolGroups = [];
91
- this._commands = [];
92
- }
93
- _ensureFlushListener() {
94
- if (this._flushListenerAttached)
95
- return;
96
- this._flushListenerAttached = true;
97
- const off = this.onEvent('service:registered', (svcName) => {
98
- if (svcName === 'tools')
99
- this._flushTools();
100
- if (svcName === 'commands')
101
- this._flushCommands();
102
- });
103
- this.disposables.push(off);
104
- }
105
- _flushTools() {
106
- const tools = this.services.get('tools');
107
- if (!tools)
108
- return;
109
- for (const tool of this._tools) {
110
- const dispose = tools.register(tool, this.contextId);
111
- this.disposables.push(dispose);
112
- }
113
- this._tools = [];
114
- for (const group of this._toolGroups) {
115
- const dispose = tools.registerGroup(group, this.contextId);
116
- this.disposables.push(dispose);
117
- }
118
- this._toolGroups = [];
119
- }
120
- _flushCommands() {
121
- const commands = this.services.get('commands');
122
- if (!commands)
123
- return;
124
- for (const { def, ctxId } of this._commands) {
125
- const dispose = commands.register(def, ctxId);
126
- this.disposables.push(dispose);
127
- }
128
- this._commands = [];
129
- }
130
- }
131
- //# sourceMappingURL=pending-buffer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pending-buffer.js","sourceRoot":"","sources":["../src/pending-buffer.ts"],"names":[],"mappings":"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"}
@@ -1,40 +0,0 @@
1
- import type { ServiceContainer } from './service.js';
2
- import type { PlatformAdapter, PlatformConnection, PlatformSelfIdentity } from './types/index.js';
3
- /**
4
- * 平台注册表
5
- *
6
- * 从 ServiceContainer 中聚合 `'platform'` 服务的所有条目,返回按不同视角
7
- * 的平台信息快照。不持有状态——每次调用直接从容器读取。
8
- *
9
- * 提取动机:把"领域聚合查询"从 Context 里抽出,与 LLMRouter 同风格。
10
- */
11
- export declare class PlatformRegistry {
12
- private readonly services;
13
- constructor(services: ServiceContainer);
14
- /**
15
- * 获取所有已注册的平台适配器实例(过滤掉不合规的)。
16
- */
17
- listAdapters(): PlatformAdapter[];
18
- /**
19
- * 获取所有已注册的平台名称(去重)。
20
- *
21
- * 基于各 platform 服务的 capabilities 聚合,而非 adapter.platform 字段,
22
- * 因此一个 adapter 可以声明承载多个 platform(罕见)。
23
- */
24
- listPlatformNames(): string[];
25
- /**
26
- * 获取所有平台适配器及其连接详情
27
- */
28
- listDetails(): Array<{
29
- adapterName: string;
30
- platform: string;
31
- contextId: string;
32
- capabilities: string[];
33
- connections: PlatformConnection[];
34
- }>;
35
- /**
36
- * 获取某个平台账号自身身份。
37
- */
38
- getSelfIdentity(platform: string, sessionId?: string): PlatformSelfIdentity | undefined;
39
- }
40
- //# sourceMappingURL=platform-registry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"platform-registry.d.ts","sourceRoot":"","sources":["../src/platform-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAElG;;;;;;;GAOG;AACH,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,gBAAgB;IAEvD;;OAEG;IACH,YAAY,IAAI,eAAe,EAAE;IAMjC;;;;;OAKG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAQ7B;;OAEG;IACH,WAAW,IAAI,KAAK,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,WAAW,EAAE,kBAAkB,EAAE,CAAC;KACnC,CAAC;IAaF;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;CAQxF"}