@aalis/plugin-tools 0.9.0 → 0.10.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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAIA,wBASG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;IA4CI,yDAAyD;;;;IAIzD,kDAAkD;;IAElD,6BAA6B;;;AAfjC,wBAqDG"}
package/dist/index.js CHANGED
@@ -1,14 +1,86 @@
1
- import { tools } from '@aalis/api-tools';
2
- import { definePlugin, logger, provide } from '@aalis/core';
1
+ import { sessionManager } from '@aalis/api-session-manager';
2
+ import { storage } from '@aalis/api-storage';
3
+ import { backgroundTasks, tools } from '@aalis/api-tools';
4
+ import { config, definePlugin, events, lifecycle, logger, optional, provide } from '@aalis/core';
5
+ import { defineConfig, parseConfig } from '@aalis/schema-config';
6
+ import { BackgroundTasks, DEFAULT_LIMITS } from './background.js';
3
7
  import { ToolRegistry } from './tools.js';
8
+ const configSchema = defineConfig({
9
+ background: {
10
+ label: '后台任务',
11
+ fields: {
12
+ maxWaitSeconds: {
13
+ type: 'number',
14
+ label: '前台最多等待(秒)',
15
+ default: DEFAULT_LIMITS.maxWaitSeconds,
16
+ min: 1,
17
+ // 计时器能表示的最长时限(2147483647 毫秒):超过时 Node 按 1 毫秒算,等于立即转后台
18
+ max: 2_147_483,
19
+ integer: true,
20
+ description: '可转后台的工具调用在前台最多等多少秒,模型给的 waitSeconds 超过它按它算;到时还没结束就转到后台',
21
+ },
22
+ maxPerSession: {
23
+ type: 'number',
24
+ label: '每个会话同时在跑的上限',
25
+ default: DEFAULT_LIMITS.maxPerSession,
26
+ min: 1,
27
+ integer: true,
28
+ description: '同一会话里对话回合中同时在跑的可转后台工具调用(前台与后台一起数),满了时新的调用在执行之前就被拒绝;不在对话回合里的调用不会转后台,不占名额',
29
+ },
30
+ },
31
+ },
32
+ });
4
33
  export default definePlugin({
5
34
  name: '@aalis/plugin-tools',
6
35
  displayName: '工具注册表',
7
36
  subsystem: 'agent',
8
- provides: [tools],
9
- uses: { logger, provide },
10
- apply({ logger, provide }) {
11
- provide(tools, new ToolRegistry(logger));
37
+ configSchema,
38
+ provides: [tools, backgroundTasks],
39
+ uses: {
40
+ logger,
41
+ provide,
42
+ /** 后台任务的 tool:output、background:changed 与结束通知;会话删除与停机 */
43
+ events,
44
+ lifecycle,
45
+ config,
46
+ /** 会话设置项「工具分组」登记在会话管理上;没有会话管理时各会话只拿到不属于任何分组的工具 */
47
+ sessionManager: optional(sessionManager),
48
+ /** 后台任务登记写进插件数据;没有时只记在内存里 */
49
+ storage: optional(storage),
50
+ },
51
+ apply(caps) {
52
+ const { logger, events, lifecycle, sessionManager } = caps;
53
+ const cfg = parseConfig(configSchema, caps.config.use, logger.use);
54
+ sessionManager.use.registerSetting({
55
+ key: 'enabledToolGroups',
56
+ field: {
57
+ type: 'multiselect',
58
+ label: '工具分组',
59
+ dynamicOptions: 'toolGroups',
60
+ allowCustom: true,
61
+ description: '这个会话能用的工具分组,* 为全部;没设置或为空时只给不属于任何分组的工具',
62
+ },
63
+ appliesTo: ['owner', 'room', 'task'],
64
+ prominence: 'common',
65
+ order: 30,
66
+ unset: '只给不属于任何分组的工具',
67
+ });
68
+ const tasks = new BackgroundTasks({ logger: logger.use, events: events.use, limits: cfg.background });
69
+ events.use.on('session:deleted', sessionId => tasks.deleteSession(sessionId));
70
+ events.use.on('app:stopping', () => tasks.shutdown());
71
+ // 停接新活时:在跑的落成 aborted 并写盘,这时依赖的存储还在
72
+ lifecycle.use.onDrain(() => tasks.close());
73
+ // 登记表读回一次:optional 依赖不参与激活顺序,存储可能晚于本插件上线,有了插件数据根才读
74
+ const store = caps.storage.use;
75
+ let restoring = false;
76
+ caps.storage.follow(() => {
77
+ if (restoring || !store.listRoots().some(root => root.name === 'pluginData'))
78
+ return;
79
+ restoring = true;
80
+ void tasks.restore(store.own);
81
+ });
82
+ caps.provide.use(tools, new ToolRegistry(logger.use, tasks));
83
+ caps.provide.use(backgroundTasks, tasks);
12
84
  },
13
85
  });
14
86
  //# 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":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,eAAe,YAAY,CAAC;IAC1B,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,OAAO;IACpB,SAAS,EAAE,OAAO;IAClB,QAAQ,EAAE,CAAC,KAAK,CAAC;IACjB,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;IACzB,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE;QACvB,OAAO,CAAC,KAAK,EAAE,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3C,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/tools.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import type { CapabilityConfirm, CapabilityRisk, CapabilityVisibility, ExecutionGuard } from '@aalis/api-authority';
2
- import type { RegisteredTool, ToolCallContext, ToolDefinition, ToolExecutionResult, ToolGroupInfo, ToolService, ToolSummary } from '@aalis/api-tools';
2
+ import { type RegisteredTool, type ToolCallContext, type ToolDefinition, type ToolDisplay, type ToolExecutionResult, type ToolGroupInfo, type ToolService, type ToolSummary } from '@aalis/api-tools';
3
3
  import type { Logger } from '@aalis/core';
4
+ import { type BackgroundTasks } from './background.js';
4
5
  /**
5
6
  * 工具注册表 —— 管理 AI 可调用工具的注册、查询、执行
6
7
  *
@@ -8,17 +9,23 @@ import type { Logger } from '@aalis/core';
8
9
  * 消费方声明 @aalis/api-tools 的 `tools` 描述符,经绑定接口注册与查询。
9
10
  *
10
11
  * 与 plugin-commands/CommandRegistry 同属"中心 Registry 模式":
11
- * - 单一 Map<name, Registered> 存储,name 全局唯一(重名警告并覆盖)
12
+ * - 一张登记表,name 全局唯一(重名警告并覆盖),另加四个自带的后台任务工具:它们的名字保留,同名登记被拒并告警
12
13
  * - register() 返回退订,退订按条目身份,由绑定门面在激活撤回时调用
13
14
  * - 通过 setExecutionGuard() 注入统一权限/安全检查钩子
15
+ *
16
+ * 声明了 background 的工具由执行器转后台(见 background.ts);四个后台任务工具只在可见的工具里有可转后台的时才可见。
14
17
  */
15
18
  export declare class ToolRegistry implements ToolService {
16
19
  private tools;
20
+ private readonly taskTools;
17
21
  private _groups;
18
22
  private logger;
23
+ private readonly tasks;
19
24
  private _guard?;
20
- constructor(logger: Logger);
25
+ constructor(logger: Logger, tasks: BackgroundTasks);
21
26
  register(tool: Omit<RegisteredTool, 'pluginName'>, contextId: string): () => void;
27
+ /** 发给模型的声明与让出时限:声明了 background、参数表里没有同名项的补上两项参数;有同名项的当作没声明 */
28
+ private declare;
22
29
  getDefinitions(filter?: {
23
30
  groups?: string[];
24
31
  }): ToolDefinition[];
@@ -35,8 +42,11 @@ export declare class ToolRegistry implements ToolService {
35
42
  * 分组过滤:无分组的通用工具恒可见;带分组的只在命中 `groups` 时可见,`'*'` 表示全部分组。
36
43
  * 未指定(或为空)即只给通用工具——多人平台上 public 工具的可达性靠这道闸
37
44
  * (docs/concepts/security-model.md);owner 专用平台由平台档显式给 `['*']`。
45
+ * 可见的工具里有可转后台的,才连同四个后台任务工具
38
46
  */
39
47
  private filtered;
48
+ /** 后台任务工具:执行面与列举面同一判据;调用方没给 enabledGroups 时不过分组闸,有可转后台的工具即可用 */
49
+ private taskTool;
40
50
  getAll(): Array<{
41
51
  name: string;
42
52
  description: string;
@@ -45,12 +55,17 @@ export declare class ToolRegistry implements ToolService {
45
55
  confirm?: CapabilityConfirm;
46
56
  risk?: CapabilityRisk;
47
57
  groups?: string[];
58
+ display?: ToolDisplay;
48
59
  }>;
49
60
  registerGroup(group: Omit<ToolGroupInfo, 'pluginName'>, contextId: string): () => void;
50
61
  getGroups(): ToolGroupInfo[];
51
- setExecutionGuard(guard: ExecutionGuard): void;
62
+ setExecutionGuard(guard: ExecutionGuard | undefined): void;
52
63
  /** 工具名未命中时,按下划线分词的 token 交集 + 子串关系给出近似建议(最多 3 个)。 */
53
64
  private suggestToolNames;
54
65
  execute(toolName: string, args: Record<string, unknown>, callCtx: ToolCallContext): Promise<ToolExecutionResult>;
66
+ /** 过执行守卫;拒绝时回原因。守卫可能等过一轮 owner 审批:期间回合若已中止(latest-wins / 手动 abort),不替死回合执行 */
67
+ private guard;
68
+ /** 跑工具:字符串结果归一为统一形态,带图结果只保留非空 images(空数组等于没图);抛错转成 { error },不冒泡 */
69
+ private invoke;
55
70
  }
56
71
  //# sourceMappingURL=tools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEpH,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C;;;;;;;;;;GAUG;AACH,qBAAa,YAAa,YAAW,WAAW;IAC9C,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAC,CAAiB;gBAEpB,MAAM,EAAE,MAAM;IAM1B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,IAAI;IAkBjF,cAAc,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,cAAc,EAAE;IAIhE,YAAY,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,WAAW,EAAE;IAQ3D;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAMpB;;;;OAIG;IACH,OAAO,CAAC,QAAQ;IAIhB,MAAM,IAAI,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,oBAAoB,CAAC;QACjC,OAAO,CAAC,EAAE,iBAAiB,CAAC;QAC5B,IAAI,CAAC,EAAE,cAAc,CAAC;QACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IAeF,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,IAAI;IAWtF,SAAS,IAAI,aAAa,EAAE;IAM5B,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAI9C,qDAAqD;IACrD,OAAO,CAAC,gBAAgB;IAmBlB,OAAO,CACX,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,mBAAmB,CAAC;CA0EhC"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEpH,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,WAAW,EAEjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,KAAK,eAAe,EAA4C,MAAM,iBAAiB,CAAC;AAUjG;;;;;;;;;;;;GAYG;AACH,qBAAa,YAAa,YAAW,WAAW;IAC9C,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkB;IACxC,OAAO,CAAC,MAAM,CAAC,CAAiB;gBAEpB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe;IAalD,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,IAAI;IAsBjF,8DAA8D;IAC9D,OAAO,CAAC,OAAO;IA8Bf,cAAc,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,cAAc,EAAE;IAIhE,YAAY,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,WAAW,EAAE;IAQ3D;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAMpB;;;;;OAKG;IACH,OAAO,CAAC,QAAQ;IAKhB,gEAAgE;IAChE,OAAO,CAAC,QAAQ;IAShB,MAAM,IAAI,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,oBAAoB,CAAC;QACjC,OAAO,CAAC,EAAE,iBAAiB,CAAC;QAC5B,IAAI,CAAC,EAAE,cAAc,CAAC;QACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,OAAO,CAAC,EAAE,WAAW,CAAC;KACvB,CAAC;IAgBF,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,IAAI;IAWtF,SAAS,IAAI,aAAa,EAAE;IAM5B,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,GAAG,IAAI;IAI1D,qDAAqD;IACrD,OAAO,CAAC,gBAAgB;IAmBlB,OAAO,CACX,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,mBAAmB,CAAC;IA4E/B,8EAA8E;YAChE,KAAK;IAsCnB,oEAAoE;YACtD,MAAM;CAiBrB"}
package/dist/tools.js CHANGED
@@ -1,4 +1,7 @@
1
1
  import { capabilityMinLevel, DEFAULT_AUTHORITY, resolveCapabilityPolicy } from '@aalis/api-authority';
2
+ import { takenBackgroundParams, } from '@aalis/api-tools';
3
+ import { DEFAULT_YIELD_SECONDS, inTurn } from './background.js';
4
+ import { backgroundTaskTools } from './background-tools.js';
2
5
  /**
3
6
  * 工具注册表 —— 管理 AI 可调用工具的注册、查询、执行
4
7
  *
@@ -6,41 +9,84 @@ import { capabilityMinLevel, DEFAULT_AUTHORITY, resolveCapabilityPolicy } from '
6
9
  * 消费方声明 @aalis/api-tools 的 `tools` 描述符,经绑定接口注册与查询。
7
10
  *
8
11
  * 与 plugin-commands/CommandRegistry 同属"中心 Registry 模式":
9
- * - 单一 Map<name, Registered> 存储,name 全局唯一(重名警告并覆盖)
12
+ * - 一张登记表,name 全局唯一(重名警告并覆盖),另加四个自带的后台任务工具:它们的名字保留,同名登记被拒并告警
10
13
  * - register() 返回退订,退订按条目身份,由绑定门面在激活撤回时调用
11
14
  * - 通过 setExecutionGuard() 注入统一权限/安全检查钩子
15
+ *
16
+ * 声明了 background 的工具由执行器转后台(见 background.ts);四个后台任务工具只在可见的工具里有可转后台的时才可见。
12
17
  */
13
18
  export class ToolRegistry {
14
19
  tools = new Map();
20
+ taskTools;
15
21
  _groups = new Map();
16
22
  logger;
23
+ tasks;
17
24
  _guard;
18
- constructor(logger) {
25
+ constructor(logger, tasks) {
19
26
  this.logger = logger.child('tools');
27
+ this.tasks = tasks;
28
+ this.taskTools = new Map(backgroundTaskTools(this.tasks).map(tool => [
29
+ tool.definition.function.name,
30
+ { tool: { ...tool, pluginName: '@aalis/plugin-tools' }, definition: tool.definition },
31
+ ]));
20
32
  }
21
33
  // ---- 注册 / 注销 ----
22
34
  register(tool, contextId) {
23
35
  const name = tool.definition.function.name;
36
+ if (this.taskTools.has(name)) {
37
+ this.logger.warn(`工具名 "${name}" 留给后台任务工具,${contextId} 的这个登记已忽略`);
38
+ return () => { };
39
+ }
24
40
  if (this.tools.has(name)) {
25
41
  this.logger.warn(`工具 "${name}" 已存在,将被覆盖 (来自 ${contextId})`);
26
42
  }
27
- const entry = { ...tool, pluginName: contextId };
43
+ const entry = { tool: { ...tool, pluginName: contextId }, ...this.declare(tool) };
28
44
  this.tools.set(name, entry);
29
45
  this.logger.debug(`注册工具: ${name} (来自 ${contextId})`);
30
- // 退订按条目引用比对:同名重注册后,旧退订闭包不得误删新登记(按 name + contextId 比对会)
46
+ // 退订按条目引用比对:同名重注册后,旧退订闭包不得误删新登记(按 name + contextId 比对会)。
47
+ // 这个登记在跑的调用随撤回一并中止(所属插件停用),不论它是否已被同名登记顶掉
31
48
  return () => {
49
+ this.tasks.withdraw(entry, name);
32
50
  if (this.tools.get(name) !== entry)
33
51
  return;
34
52
  this.tools.delete(name);
35
53
  this.logger.debug(`注销工具: ${name}`);
36
54
  };
37
55
  }
56
+ /** 发给模型的声明与让出时限:声明了 background、参数表里没有同名项的补上两项参数;有同名项的当作没声明 */
57
+ declare(tool) {
58
+ const fn = tool.definition.function;
59
+ if (!tool.background)
60
+ return { definition: tool.definition };
61
+ const taken = takenBackgroundParams(fn.parameters);
62
+ if (taken.length > 0) {
63
+ this.logger.warn(`工具 "${fn.name}" 的参数表里已有 ${taken.join('、')},当作不可转后台`);
64
+ return { definition: tool.definition };
65
+ }
66
+ const yieldSeconds = tool.background.yieldSeconds ?? DEFAULT_YIELD_SECONDS;
67
+ const max = this.tasks.limits.maxWaitSeconds;
68
+ const properties = {
69
+ ...fn.parameters.properties,
70
+ runInBackground: {
71
+ type: 'boolean',
72
+ description: '立即转到后台:先回给你任务 id,不等结果,结束时会通知你。明知要很久的(构建、下载、长驻进程)用它',
73
+ },
74
+ waitSeconds: {
75
+ type: 'number',
76
+ description: `前台最多等多少秒,到时还没结束就转到后台(默认 ${Math.min(yieldSeconds, max)},最多 ${max})`,
77
+ },
78
+ };
79
+ return {
80
+ yieldSeconds,
81
+ definition: { ...tool.definition, function: { ...fn, parameters: { ...fn.parameters, properties } } },
82
+ };
83
+ }
38
84
  // ---- 查询 ----
39
85
  getDefinitions(filter) {
40
- return this.filtered(filter).map(t => t.definition);
86
+ return this.filtered(filter).map(e => e.definition);
41
87
  }
42
88
  getSummaries(filter) {
43
- return this.filtered(filter).map(t => ({
89
+ return this.filtered(filter).map(({ tool: t }) => ({
44
90
  name: t.definition.function.name,
45
91
  description: t.definition.function.description,
46
92
  groups: t.groups,
@@ -62,12 +108,22 @@ export class ToolRegistry {
62
108
  * 分组过滤:无分组的通用工具恒可见;带分组的只在命中 `groups` 时可见,`'*'` 表示全部分组。
63
109
  * 未指定(或为空)即只给通用工具——多人平台上 public 工具的可达性靠这道闸
64
110
  * (docs/concepts/security-model.md);owner 专用平台由平台档显式给 `['*']`。
111
+ * 可见的工具里有可转后台的,才连同四个后台任务工具
65
112
  */
66
113
  filtered(filter) {
67
- return [...this.tools.values()].filter(t => this.groupAllowed(t, filter?.groups ?? []));
114
+ const visible = [...this.tools.values()].filter(e => this.groupAllowed(e.tool, filter?.groups ?? []));
115
+ return visible.some(e => e.yieldSeconds !== undefined) ? [...visible, ...this.taskTools.values()] : visible;
116
+ }
117
+ /** 后台任务工具:执行面与列举面同一判据;调用方没给 enabledGroups 时不过分组闸,有可转后台的工具即可用 */
118
+ taskTool(name, groups) {
119
+ const entry = this.taskTools.get(name);
120
+ if (!entry)
121
+ return undefined;
122
+ const available = [...this.tools.values()].some(e => e.yieldSeconds !== undefined && (!groups || this.groupAllowed(e.tool, groups)));
123
+ return available ? entry : undefined;
68
124
  }
69
125
  getAll() {
70
- return [...this.tools.values()].map(t => {
126
+ return this.filtered({ groups: ['*'] }).map(({ tool: t }) => {
71
127
  const { visibility, confirm } = resolveCapabilityPolicy(t);
72
128
  return {
73
129
  name: t.definition.function.name,
@@ -77,6 +133,7 @@ export class ToolRegistry {
77
133
  confirm,
78
134
  risk: t.risk, // 原始风险透传:让 authority 区分 sensitive(朋友) / dangerous(信任),否则二者都折成 restricted=信任
79
135
  groups: t.groups,
136
+ display: t.display,
80
137
  };
81
138
  });
82
139
  }
@@ -103,7 +160,7 @@ export class ToolRegistry {
103
160
  const q = query.toLowerCase();
104
161
  const qTokens = new Set(q.split(/[_\s-]+/).filter(Boolean));
105
162
  const scored = [];
106
- for (const [name, tool] of this.tools) {
163
+ for (const [name, { tool }] of this.tools) {
107
164
  // 不把本会话未暴露分组的工具名建议回模型:那等于替它把闸外的名字念一遍
108
165
  if (enabledGroups && !this.groupAllowed(tool, enabledGroups))
109
166
  continue;
@@ -123,14 +180,15 @@ export class ToolRegistry {
123
180
  .map(s => s.name);
124
181
  }
125
182
  async execute(toolName, args, callCtx) {
126
- const tool = this.tools.get(toolName);
127
- if (!tool) {
183
+ const entry = this.tools.get(toolName) ?? this.taskTool(toolName, callCtx.enabledGroups);
184
+ if (!entry) {
128
185
  // LLM 常臆造工具名(如把 send_attachment 叫成 send_image)。给出近似名建议,
129
186
  // 让模型本轮直接纠正调用,而不是再花一轮 search_tools 找正确名字。
130
187
  const suggestions = this.suggestToolNames(toolName, callCtx.enabledGroups);
131
188
  const hint = suggestions.length > 0 ? `,你是否想用:${suggestions.join(' / ')}` : '';
132
- return { content: JSON.stringify({ error: `工具 "${toolName}" 未找到${hint}` }) };
189
+ return failure(`工具 "${toolName}" 未找到${hint}`);
133
190
  }
191
+ const { tool } = entry;
134
192
  // 分组闸:此前只在列举面(filtered)生效,execute 按名直调完全不校验。被提示注入的
135
193
  // 模型可以叫出一个本回合没下发给它的名字(安全模型把 LLM 输出列为不可信),于是
136
194
  // onebot 群会话里未暴露分组的工具照样被执行——而「不在 enabledGroups 里故不可达」
@@ -139,14 +197,64 @@ export class ToolRegistry {
139
197
  // 各自另有暴露面控制,行为不变。
140
198
  if (callCtx.enabledGroups && !this.groupAllowed(tool, callCtx.enabledGroups)) {
141
199
  // 与「未找到」同形:不向闸外的调用者确认该工具存在
142
- return { content: JSON.stringify({ error: `工具 "${toolName}" 未找到` }) };
200
+ return failure(`工具 "${toolName}" 未找到`);
201
+ }
202
+ // 可转后台的工具:执行器的两项参数先取出,再做参数校验、过守卫、交给工具(审批事实里没有它们)
203
+ let toolArgs = args;
204
+ let plan;
205
+ if (entry.yieldSeconds !== undefined) {
206
+ const taken = takeFlags(args);
207
+ if (typeof taken === 'string')
208
+ return failure(taken);
209
+ if (taken.runInBackground && !inTurn(callCtx)) {
210
+ return failure('不在对话回合里的调用不能转后台:没有可以通知的对话');
211
+ }
212
+ toolArgs = taken.args;
213
+ plan = {
214
+ waitSeconds: Math.min(taken.waitSeconds ?? entry.yieldSeconds, this.tasks.limits.maxWaitSeconds),
215
+ immediate: taken.runInBackground,
216
+ };
143
217
  }
144
218
  // 参数 schema 校验:检测缺失必填项 / 多余未知键(LLM 写错参数名时给出明确提示)
145
- const schemaError = validateToolArgs(toolName, tool.definition, args);
219
+ const schemaError = validateToolArgs(toolName, tool.definition, toolArgs);
146
220
  if (schemaError) {
147
221
  this.logger.warn(`工具 ${toolName} 参数校验失败: ${schemaError}`);
148
- return { content: JSON.stringify({ error: schemaError }) };
222
+ return failure(schemaError);
149
223
  }
224
+ // 同一会话里在跑的可转后台调用满了时,在过守卫之前就拒绝(不为执行不了的调用发审批)
225
+ const call = plan && this.tasks.admit(callCtx, entry, plan);
226
+ if (typeof call === 'string')
227
+ return { content: call };
228
+ // 占到的位置没交给 run 的(守卫拒绝或抛错、已中止)一律让出
229
+ let handedOver = false;
230
+ try {
231
+ // 等审批期间这次调用可能已被中止(工具撤回登记、会话删除、执行器停用)
232
+ const refused = (await this.guard(tool, toolArgs, callCtx)) ??
233
+ (call?.controller.signal.aborted ? '调用已中止,未执行' : undefined);
234
+ if (refused !== undefined)
235
+ return failure(refused);
236
+ if (resolveCapabilityPolicy(tool).visibility === 'restricted') {
237
+ this.logger.info(`受限工具执行: ${toolName} session=${callCtx.sessionId} platform=${callCtx.platform ?? 'unknown'} args=${JSON.stringify(toolArgs)}`);
238
+ }
239
+ if (!call)
240
+ return this.invoke(tool, toolArgs, { ...callCtx, output: this.tasks.outputFor(callCtx) });
241
+ handedOver = true;
242
+ return this.tasks.run(call, {
243
+ tool: toolName,
244
+ args,
245
+ ctx: callCtx,
246
+ display: tool.display,
247
+ invoke: ctx => this.invoke(tool, toolArgs, ctx),
248
+ });
249
+ }
250
+ finally {
251
+ if (call && !handedOver)
252
+ this.tasks.release(call);
253
+ }
254
+ }
255
+ /** 过执行守卫;拒绝时回原因。守卫可能等过一轮 owner 审批:期间回合若已中止(latest-wins / 手动 abort),不替死回合执行 */
256
+ async guard(tool, args, callCtx) {
257
+ const toolName = tool.definition.function.name;
150
258
  const { visibility, confirm } = resolveCapabilityPolicy(tool);
151
259
  if (this._guard) {
152
260
  const denied = await this._guard({
@@ -160,30 +268,31 @@ export class ToolRegistry {
160
268
  userId: callCtx.userId,
161
269
  actor: callCtx.actor,
162
270
  args,
271
+ turnId: callCtx.turnId,
272
+ callId: callCtx.callId,
273
+ inbound: callCtx.inbound,
163
274
  signal: callCtx.signal,
164
275
  });
165
276
  if (denied) {
166
277
  this.logger.warn(`工具 ${toolName} 被执行守卫拦截: ${denied}`);
167
- return { content: JSON.stringify({ error: denied }) };
278
+ return denied;
168
279
  }
169
280
  }
170
281
  else if (confirm || capabilityMinLevel({ risk: tool.risk, visibility }) > DEFAULT_AUTHORITY) {
171
- // 没有守卫(未装权限插件)时 fail-closed:等同人人都是默认等级、没有确认通道。
282
+ // 没有守卫(未装权限插件)时 fail-closed:等同人人都是默认等级、没人能确认。
172
283
  // 需要更高等级或需要确认的工具一律拒绝,默认等级可用且无需确认的照常执行。
173
284
  const reason = `工具 "${toolName}" 需要权限校验或确认,但未安装权限插件 @aalis/plugin-authority,已拒绝执行`;
174
285
  this.logger.warn(reason);
175
- return { content: JSON.stringify({ error: reason }) };
286
+ return reason;
176
287
  }
177
- // 守卫可能等过一轮人工确认:期间回合若已中止(latest-wins / 手动 abort),不替死回合执行
178
- if (callCtx.signal?.aborted)
179
- return { content: JSON.stringify({ error: '回合已中止,未执行' }) };
288
+ return callCtx.signal?.aborted ? '回合已中止,未执行' : undefined;
289
+ }
290
+ /** 跑工具:字符串结果归一为统一形态,带图结果只保留非空 images(空数组等于没图);抛错转成 { error },不冒泡 */
291
+ async invoke(tool, args, ctx) {
292
+ const toolName = tool.definition.function.name;
180
293
  try {
181
- if (visibility === 'restricted') {
182
- this.logger.info(`受限工具执行: ${toolName} session=${callCtx.sessionId} platform=${callCtx.platform ?? 'unknown'} args=${JSON.stringify(args)}`);
183
- }
184
- const result = await tool.handler(args, callCtx);
294
+ const result = await tool.handler(args, ctx);
185
295
  this.logger.debug(`工具 ${toolName} 执行成功`);
186
- // 字符串结果归一为统一形态;带图结果只保留非空 images(空数组等于没图)
187
296
  if (typeof result === 'string')
188
297
  return { content: result };
189
298
  return result.images && result.images.length > 0 ? result : { content: result.content };
@@ -191,10 +300,26 @@ export class ToolRegistry {
191
300
  catch (err) {
192
301
  const message = err instanceof Error ? err.message : String(err);
193
302
  this.logger.error(`工具 ${toolName} 执行失败: ${message}`);
194
- return { content: JSON.stringify({ error: message }) };
303
+ return failure(message);
195
304
  }
196
305
  }
197
306
  }
307
+ const failure = (message) => ({ content: JSON.stringify({ error: message }) });
308
+ /** 取出执行器的两项参数并核对类型:回剩下交给工具的参数,类型不对时回错误 */
309
+ function takeFlags(args) {
310
+ const { runInBackground, waitSeconds, ...rest } = args;
311
+ if (runInBackground !== undefined && typeof runInBackground !== 'boolean')
312
+ return 'runInBackground 要是布尔值';
313
+ if (waitSeconds !== undefined &&
314
+ !(typeof waitSeconds === 'number' && Number.isFinite(waitSeconds) && waitSeconds >= 0)) {
315
+ return 'waitSeconds 要是不小于 0 的秒数';
316
+ }
317
+ return {
318
+ args: rest,
319
+ runInBackground: runInBackground === true,
320
+ ...(waitSeconds !== undefined ? { waitSeconds } : {}),
321
+ };
322
+ }
198
323
  /**
199
324
  * 轻量工具参数校验:
200
325
  * - 检测 required 字段是否缺失
package/dist/tools.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aalis/plugin-tools",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -24,25 +24,38 @@
24
24
  "dist"
25
25
  ],
26
26
  "dependencies": {
27
- "@aalis/api-authority": ">=0.10.0 <1.0.0",
28
- "@aalis/api-tools": ">=0.10.0 <1.0.0"
27
+ "@aalis/api-authority": ">=0.11.0 <1.0.0",
28
+ "@aalis/api-tools": ">=0.11.0 <1.0.0",
29
+ "@aalis/api-session-manager": ">=0.11.0 <1.0.0",
30
+ "@aalis/api-storage": ">=0.8.0 <1.0.0",
31
+ "@aalis/schema-config": ">=0.15.0 <1.0.0",
32
+ "@aalis/schema-message": ">=0.10.0 <1.0.0",
33
+ "@aalis/util-text-normalize": ">=0.5.2 <1.0.0"
29
34
  },
30
35
  "devDependencies": {
31
36
  "@types/node": "^22.0.0",
32
37
  "typescript": "^5.7.0",
33
- "@aalis/core": "0.18.0"
38
+ "@aalis/core": "0.20.0"
34
39
  },
35
40
  "peerDependencies": {
36
- "@aalis/core": ">=0.18.0 <1.0.0"
41
+ "@aalis/core": ">=0.20.0 <1.0.0"
37
42
  },
38
43
  "aalis": {
39
44
  "service": {
40
45
  "provides": [
41
- "tools"
46
+ "tools",
47
+ "background-tasks"
42
48
  ],
43
49
  "required": [
50
+ "config",
51
+ "events",
52
+ "lifecycle",
44
53
  "logger",
45
54
  "provide"
55
+ ],
56
+ "optional": [
57
+ "session-manager",
58
+ "storage"
46
59
  ]
47
60
  }
48
61
  },