@aalis/api-tools 0.8.4 → 0.9.0

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.
package/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # @aalis/api-tools
2
2
 
3
- 类型/接口/能力声明包(只导出 `type` 与 `*Capabilities`,不含运行时逻辑)
3
+ 导出服务描述符(运行时值)与类型;不含服务实现
4
4
 
5
5
  ## 角色
6
6
 
7
- 类型/接口/能力声明包(只导出 `type` 与 `*Capabilities`,不含运行时逻辑)
7
+ 导出服务描述符(运行时值)与类型;不含服务实现
8
8
 
9
9
  ## 安装
10
10
 
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { CapabilityConfirm, CapabilityRisk, CapabilityVisibility, ExecutionGuard } from '@aalis/api-authority';
2
- import type { Context } from '@aalis/core';
2
+ import type { ServiceRef } from '@aalis/core';
3
3
  export interface ToolFunction {
4
4
  name: string;
5
5
  strict?: boolean;
@@ -142,30 +142,11 @@ export interface ToolService {
142
142
  execute(toolName: string, args: Record<string, unknown>, callCtx: ToolCallContext): Promise<ToolExecutionResult>;
143
143
  /** 注入执行守卫,用于能力裁决与 restricted 二次确认 */
144
144
  setExecutionGuard(guard: ExecutionGuard): void;
145
- unregisterByPlugin(contextId: string): void;
146
145
  /** 注册工具分组 */
147
146
  registerGroup(group: Omit<ToolGroupInfo, 'pluginName'>, contextId: string): () => void;
148
147
  /** 获取所有已注册的工具分组 */
149
148
  getGroups(): ToolGroupInfo[];
150
149
  }
151
- /** ToolService 绑定到当前 Context 的便捷视图(pluginName 自动填充) */
152
- export interface ScopedToolService {
153
- /**
154
- * 注册工具。服务未就绪时延迟到就绪后执行,提供者换人自动重挂。
155
- * 同一 Context 内同名是**替换**:新登记顶掉旧登记,旧登记的退订闭包随即失效(不会误删新登记)。
156
- */
157
- register(tool: Omit<RegisteredTool, 'pluginName'>): () => void;
158
- /** 注册工具分组。就绪 / 重挂 / 同名替换语义同 {@link register}。 */
159
- registerGroup(group: Omit<ToolGroupInfo, 'pluginName'>): () => void;
160
- getDefinitions: ToolService['getDefinitions'];
161
- getSummaries: ToolService['getSummaries'];
162
- getAll: ToolService['getAll'];
163
- getGroups: ToolService['getGroups'];
164
- execute: ToolService['execute'];
165
- setExecutionGuard: ToolService['setExecutionGuard'];
166
- /** 原始 ToolService 引用(服务未就绪时为 undefined) */
167
- readonly raw: ToolService | undefined;
168
- }
169
150
  /**
170
151
  * 给「从外部抓取的内容」(网页正文、搜索结果、HTTP 响应体)套一层不可信数据边界。
171
152
  *
@@ -184,22 +165,17 @@ export declare function wrapUntrustedContent(content: string, source: string): s
184
165
  * 调用方经它读结果,配旧实现(返回字符串)也不会把 `.content` 读成 undefined。
185
166
  */
186
167
  export declare function asToolExecutionResult(result: string | ToolExecutionResult): ToolExecutionResult;
187
- export declare function useToolService(ctx: Context): ScopedToolService;
188
- /**
189
- * 返回一个 ScopedToolService 的视图,其 `register` 会自动为工具
190
- * 追加给定 groups(合并而不是覆盖原 tool.groups)。
191
- *
192
- * 用于一组工具想共享相同分组的场景(如某游戏插件的 'game' 分组)。
193
- */
194
- export declare function toolsWithGroups(tools: ScopedToolService, groups: string[]): ScopedToolService;
195
168
  declare module '@aalis/core' {
196
169
  interface AalisEvents {
197
170
  'tool:execute': [info: ToolExecuteMessage];
198
171
  }
199
172
  }
200
- declare module '@aalis/core' {
201
- interface ServiceTypeMap {
202
- tools: ToolService;
203
- }
173
+ /** `tools` 的按激活绑定接口:登记自动归属这次激活,同名替换、提供者换人整体重挂、关闭后拒收。 */
174
+ export interface BoundTools extends ServiceRef<ToolService> {
175
+ register(tool: Omit<RegisteredTool, 'pluginName'>): () => void;
176
+ registerGroup(group: Omit<ToolGroupInfo, 'pluginName'>): () => void;
204
177
  }
178
+ /** 给一份 tools 绑定接口加默认分组:经它登记的工具自动带上这些分组(一组工具共用分组时用) */
179
+ export declare function withToolGroups(bound: BoundTools, groups: string[]): BoundTools;
180
+ export declare const tools: import("@aalis/core").ServiceDescriptor<ToolService, BoundTools>;
205
181
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -6,13 +6,14 @@
6
6
  // - 工具调用上下文(ToolCallContext)—— 平台/会话语义
7
7
  // - 工具执行通知(ToolExecuteMessage)
8
8
  // - 服务接口(ToolService)
9
- // - useToolService(ctx) helper(M2 后取代 ctx.registerTool mixin)
9
+ // - 服务描述符 `tools`(按激活绑定的登记门面)与 `withToolGroups`
10
10
  // - 通过 declaration merging 向 AalisEvents 注入 'tool:execute'
11
11
  //
12
12
  // 注:`ToolCall`(assistant 消息携带的调用载荷)位于 @aalis/schema-message,
13
13
  // 与 Message 同源同生命周期。本包不依赖 message-api(双向解耦)。
14
14
  //
15
15
  // 实现见 @aalis/plugin-tool-system。
16
+ import { defineService, serviceRef } from '@aalis/core';
16
17
  /**
17
18
  * 给「从外部抓取的内容」(网页正文、搜索结果、HTTP 响应体)套一层不可信数据边界。
18
19
  *
@@ -42,108 +43,26 @@ export function wrapUntrustedContent(content, source) {
42
43
  export function asToolExecutionResult(result) {
43
44
  return typeof result === 'string' ? { content: result } : result;
44
45
  }
45
- const bindings = new WeakMap();
46
- function bind(ctx) {
47
- const existing = bindings.get(ctx);
48
- if (existing)
49
- return existing;
50
- const b = { svc: undefined, tools: new Map(), groups: new Map() };
51
- bindings.set(ctx, b);
52
- const contextId = ctx.id;
53
- ctx.whenService('tools', s => {
54
- b.svc = s;
55
- for (const e of b.groups.values())
56
- e.off = s.registerGroup(e.item, contextId);
57
- for (const e of b.tools.values())
58
- e.off = s.register(e.item, contextId);
59
- return () => {
60
- b.svc = undefined;
61
- for (const e of [...b.tools.values(), ...b.groups.values()]) {
62
- e.off?.();
63
- e.off = undefined;
64
- }
65
- };
46
+ /** 给一份 tools 绑定接口加默认分组:经它登记的工具自动带上这些分组(一组工具共用分组时用) */
47
+ export function withToolGroups(bound, groups) {
48
+ // 只覆盖 register,其余(含 current 这个 getter)沿原型链落到原接口上,跟着提供者换人
49
+ return Object.assign(Object.create(bound), {
50
+ register: (tool) => bound.register({ ...tool, groups: [...(tool.groups ?? []), ...groups] }),
66
51
  });
67
- return b;
68
- }
69
- /**
70
- * 向绑定加一条登记:同名先摘旧登记(替换语义,与 core 对贡献点的同键替换同口径);提供者在场立即登记。
71
- * 返回的退订按条目身份比对——被同名替换后的旧闭包是 no-op。
72
- */
73
- function addBound(map, key, item, registerNow, current) {
74
- map.get(key)?.off?.();
75
- const svc = current();
76
- const entry = { item, off: svc ? registerNow(svc) : undefined };
77
- map.set(key, entry);
78
- return () => {
79
- if (map.get(key) !== entry)
80
- return;
81
- map.delete(key);
82
- entry.off?.();
83
- entry.off = undefined;
84
- };
85
- }
86
- export function useToolService(ctx) {
87
- const contextId = ctx.id;
88
- /** 用于读 API:服务未就绪时抛错。 */
89
- function need() {
90
- const s = ctx.getService('tools');
91
- if (!s) {
92
- throw new Error(`useToolService: 'tools' 服务不可用。请在插件 manifest 的 inject 中声明 'tools',或确认 @aalis/plugin-tools 已激活。`);
93
- }
94
- return s;
95
- }
96
- /** 关闭后登记:与 core 登记面(`on` / `whenService`)同口径——`ctx.disposed` 即 warn + no-op。 */
97
- function refused(key) {
98
- if (!ctx.disposed)
99
- return undefined;
100
- ctx.logger.warn(`Context "${contextId}" 已 dispose,忽略 tools 登记 "${key}"`);
101
- return () => { };
102
- }
103
- return {
104
- register: tool => {
105
- const name = tool.definition.function.name;
106
- const refuse = refused(name);
107
- if (refuse)
108
- return refuse;
109
- const b = bind(ctx);
110
- return addBound(b.tools, name, tool, s => s.register(tool, contextId), () => b.svc);
111
- },
112
- registerGroup: group => {
113
- const refuse = refused(group.name);
114
- if (refuse)
115
- return refuse;
116
- const b = bind(ctx);
117
- return addBound(b.groups, group.name, group, s => s.registerGroup(group, contextId), () => b.svc);
118
- },
119
- getDefinitions: (...args) => need().getDefinitions(...args),
120
- getSummaries: (...args) => need().getSummaries(...args),
121
- getAll: (...args) => need().getAll(...args),
122
- getGroups: (...args) => need().getGroups(...args),
123
- execute: (...args) => need().execute(...args),
124
- setExecutionGuard: (...args) => need().setExecutionGuard(...args),
125
- get raw() {
126
- return ctx.getService('tools');
127
- },
128
- };
129
- }
130
- /**
131
- * 返回一个 ScopedToolService 的视图,其 `register` 会自动为工具
132
- * 追加给定 groups(合并而不是覆盖原 tool.groups)。
133
- *
134
- * 用于一组工具想共享相同分组的场景(如某游戏插件的 'game' 分组)。
135
- */
136
- export function toolsWithGroups(tools, groups) {
137
- return {
138
- ...tools,
139
- register: tool => tools.register({
140
- ...tool,
141
- groups: [...(tool.groups ?? []), ...groups],
142
- }),
143
- // 展开会把 getter 求值成构造时的快照;raw 必须活取才能跟着提供者换人
144
- get raw() {
145
- return tools.raw;
146
- },
147
- };
148
52
  }
53
+ export const tools = defineService('tools', port => {
54
+ // 分组账本先建:提供者换人时分组先于工具重挂
55
+ const groups = port.registrar({
56
+ key: group => group.name,
57
+ register: (service, group) => service.registerGroup(group, port.id),
58
+ });
59
+ const entries = port.registrar({
60
+ key: tool => tool.definition.function.name,
61
+ register: (service, tool) => service.register(tool, port.id),
62
+ });
63
+ return serviceRef(port, {
64
+ register: (tool) => entries.add(tool),
65
+ registerGroup: (group) => groups.add(group),
66
+ });
67
+ });
149
68
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,EAAE;AACF,sBAAsB;AACtB,gDAAgD;AAChD,4DAA4D;AAC5D,uCAAuC;AACvC,+BAA+B;AAC/B,sBAAsB;AACtB,gDAAgD;AAChD,2DAA2D;AAC3D,EAAE;AACF,6DAA6D;AAC7D,6CAA6C;AAC7C,EAAE;AACF,iCAAiC;AAIjC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAkKxD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe,EAAE,MAAc;IAClE,oDAAoD;IACpD,8CAA8C;IAC9C,uCAAuC;IACvC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnE,OAAO,CACL,aAAa,UAAU,aAAa;QACpC,oCAAoC;QACpC,4CAA4C;QAC5C,OAAO,CACR,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAoC;IACxE,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AACnE,CAAC;AAsBD,sDAAsD;AACtD,MAAM,UAAU,cAAc,CAAC,KAAiB,EAAE,MAAgB;IAChE,yDAAyD;IACzD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAe,EAAE;QACvD,QAAQ,EAAE,CAAC,IAAwC,EAAE,EAAE,CACrD,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;KAC3E,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,KAAK,GAAG,aAAa,CAA0B,OAAO,EAAE,IAAI,CAAC,EAAE;IAC1E,wBAAwB;IACxB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAoC;QAC/D,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI;QACxB,QAAQ,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;KACpE,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAqC;QACjE,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI;QAC1C,QAAQ,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;KAC7D,CAAC,CAAC;IACH,OAAO,UAAU,CAAC,IAAI,EAAE;QACtB,QAAQ,EAAE,CAAC,IAAwC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACzE,aAAa,EAAE,CAAC,KAAwC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;KAC/E,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aalis/api-tools",
3
- "version": "0.8.4",
3
+ "version": "0.9.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -24,13 +24,13 @@
24
24
  "devDependencies": {
25
25
  "@types/node": "^22.0.0",
26
26
  "typescript": "^5.7.0",
27
- "@aalis/core": "0.16.0"
27
+ "@aalis/core": "0.17.0"
28
28
  },
29
29
  "aalis": {
30
30
  "types": true
31
31
  },
32
32
  "peerDependencies": {
33
- "@aalis/core": ">=0.2.0 <1.0.0"
33
+ "@aalis/core": ">=0.17.0 <1.0.0"
34
34
  },
35
35
  "keywords": [
36
36
  "aalis",