@aalis/plugin-tools 0.1.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 ADDED
@@ -0,0 +1,21 @@
1
+ # @aalis/plugin-tools
2
+
3
+ 运行时插件
4
+
5
+ ## 角色
6
+
7
+ 运行时插件
8
+
9
+ ## 安装
10
+
11
+ ```bash
12
+ pnpm add @aalis/plugin-tools
13
+ ```
14
+
15
+ ## 文档
16
+
17
+ 详见 [docs/plugins/plugin-tool-system.md](../../docs/plugins/plugin-tool-system.md)。
18
+
19
+ ## 许可
20
+
21
+ 见仓库根目录 LICENSE。
@@ -0,0 +1,8 @@
1
+ import type { Context } from '@aalis/core';
2
+ import '@aalis/plugin-tools-api';
3
+ export declare const name = "@aalis/plugin-tools";
4
+ export declare const displayName = "\u5DE5\u5177\u6CE8\u518C\u8868";
5
+ export declare const subsystem = "agent";
6
+ export declare const provides: string[];
7
+ export declare function apply(ctx: Context): void;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,yBAAyB,CAAC;AAEjC,eAAO,MAAM,IAAI,wBAAwB,CAAC;AAC1C,eAAO,MAAM,WAAW,mCAAU,CAAC;AACnC,eAAO,MAAM,SAAS,UAAU,CAAC;AACjC,eAAO,MAAM,QAAQ,UAAY,CAAC;AAElC,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAGxC"}
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ import { ToolRegistry } from './tools.js';
2
+ import '@aalis/plugin-tools-api';
3
+ export const name = '@aalis/plugin-tools';
4
+ export const displayName = '工具注册表';
5
+ export const subsystem = 'agent';
6
+ export const provides = ['tools'];
7
+ export function apply(ctx) {
8
+ const tools = new ToolRegistry(ctx.logger);
9
+ ctx.provide('tools', tools);
10
+ }
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,yBAAyB,CAAC;AAEjC,MAAM,CAAC,MAAM,IAAI,GAAG,qBAAqB,CAAC;AAC1C,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;AACnC,MAAM,CAAC,MAAM,SAAS,GAAG,OAAO,CAAC;AACjC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC;AAElC,MAAM,UAAU,KAAK,CAAC,GAAY;IAChC,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3C,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,68 @@
1
+ import type { Logger } from '@aalis/core';
2
+ import type { ExecutionGuard, SafetyLevel } from '@aalis/plugin-authority-api';
3
+ import type { RegisteredTool, ToolCallContext, ToolDefinition, ToolGroupInfo, ToolService, ToolSummary } from '@aalis/plugin-tools-api';
4
+ /**
5
+ * 工具注册表 —— 管理 AI 可调用工具的注册、查询、执行
6
+ *
7
+ * 由 plugin-agent-tools 创建并注册为服务 'tools',
8
+ * 所有插件通过 ctx.registerTool() 注册工具,通过 ctx.getService<ToolService>('tools') 访问。
9
+ *
10
+ * 与 plugin-commands/CommandRegistry 同属"中心 Registry 模式":
11
+ * - 单一 Map<name, Registered> 存储,name 全局唯一(重名警告并覆盖)
12
+ * - register() 返回 disposer,插件 dispose 时按 pluginName 自动注销
13
+ * - 通过 setExecutionGuard() 注入统一权限/安全检查钩子
14
+ *
15
+ * 与 LLM/Storage/Platform 路由器(同名 facade 模式)的差异:
16
+ * - 这里没有"多个底层 provider"概念——所有工具都直接落到这个 Map
17
+ * - 因此不需要 ctx.getAllServices('tools') 枚举,也不需要 'router' capability
18
+ */
19
+ export declare class ToolRegistry implements ToolService {
20
+ private tools;
21
+ private _groups;
22
+ private overrides;
23
+ private logger;
24
+ private _guard?;
25
+ constructor(logger: Logger);
26
+ register(tool: Omit<RegisteredTool, 'pluginName'>, pluginName: string): () => void;
27
+ getDefinitions(filter?: {
28
+ groups?: string[];
29
+ }): ToolDefinition[];
30
+ getSummaries(filter?: {
31
+ groups?: string[];
32
+ }): ToolSummary[];
33
+ getAll(): Array<{
34
+ name: string;
35
+ description: string;
36
+ pluginName: string;
37
+ authority?: number;
38
+ safety?: import('@aalis/plugin-authority-api').SafetyLevel;
39
+ permissions?: string[];
40
+ groups?: string[];
41
+ baseAuthority?: number;
42
+ baseSafety?: import('@aalis/plugin-authority-api').SafetyLevel;
43
+ overridden?: boolean;
44
+ }>;
45
+ registerGroup(group: Omit<ToolGroupInfo, 'pluginName'>, pluginName: string): () => void;
46
+ getGroups(): ToolGroupInfo[];
47
+ setExecutionGuard(guard: ExecutionGuard): void;
48
+ loadOverrides(overrides: Record<string, {
49
+ authority?: number;
50
+ safety?: SafetyLevel;
51
+ }>): void;
52
+ setOverride(name: string, override: {
53
+ authority?: number;
54
+ safety?: SafetyLevel;
55
+ }): void;
56
+ removeOverride(name: string): void;
57
+ getOverrides(): Record<string, {
58
+ authority?: number;
59
+ safety?: SafetyLevel;
60
+ }>;
61
+ /** 工具名未命中时,按下划线分词的 token 交集 + 子串关系给出近似建议(最多 3 个)。 */
62
+ private suggestToolNames;
63
+ execute(toolName: string, args: Record<string, unknown>, callCtx: ToolCallContext): Promise<string>;
64
+ unregisterByPlugin(pluginName: string): void;
65
+ private getStaticPermissions;
66
+ private resolvePermissions;
67
+ }
68
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,cAAc,EACd,aAAa,EACb,WAAW,EACX,WAAW,EACZ,MAAM,yBAAyB,CAAC;AACjC;;;;;;;;;;;;;;GAcG;AACH,qBAAa,YAAa,YAAW,WAAW;IAC9C,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,SAAS,CAAmE;IACpF,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,UAAU,EAAE,MAAM,GAAG,MAAM,IAAI;IAiBlF,cAAc,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,cAAc,EAAE;IAYhE,YAAY,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,WAAW,EAAE;IAmB3D,MAAM,IAAI,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,OAAO,6BAA6B,EAAE,WAAW,CAAC;QAC3D,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,UAAU,CAAC,EAAE,OAAO,6BAA6B,EAAE,WAAW,CAAC;QAC/D,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,CAAC;IAqBF,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,IAAI;IAYvF,SAAS,IAAI,aAAa,EAAE;IAM5B,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAM9C,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,CAAC,GAAG,IAAI;IAS5F,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,IAAI;IAGvF,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAGlC,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,CAAC;IAI5E,qDAAqD;IACrD,OAAO,CAAC,gBAAgB;IAiBlB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IA8DzG,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAgB5C,OAAO,CAAC,oBAAoB;YAId,kBAAkB;CAQjC"}
package/dist/tools.js ADDED
@@ -0,0 +1,266 @@
1
+ /**
2
+ * 工具注册表 —— 管理 AI 可调用工具的注册、查询、执行
3
+ *
4
+ * 由 plugin-agent-tools 创建并注册为服务 'tools',
5
+ * 所有插件通过 ctx.registerTool() 注册工具,通过 ctx.getService<ToolService>('tools') 访问。
6
+ *
7
+ * 与 plugin-commands/CommandRegistry 同属"中心 Registry 模式":
8
+ * - 单一 Map<name, Registered> 存储,name 全局唯一(重名警告并覆盖)
9
+ * - register() 返回 disposer,插件 dispose 时按 pluginName 自动注销
10
+ * - 通过 setExecutionGuard() 注入统一权限/安全检查钩子
11
+ *
12
+ * 与 LLM/Storage/Platform 路由器(同名 facade 模式)的差异:
13
+ * - 这里没有"多个底层 provider"概念——所有工具都直接落到这个 Map
14
+ * - 因此不需要 ctx.getAllServices('tools') 枚举,也不需要 'router' capability
15
+ */
16
+ export class ToolRegistry {
17
+ tools = new Map();
18
+ _groups = new Map();
19
+ overrides = new Map();
20
+ logger;
21
+ _guard;
22
+ constructor(logger) {
23
+ this.logger = logger.child('tools');
24
+ }
25
+ // ---- 注册 / 注销 ----
26
+ register(tool, pluginName) {
27
+ const name = tool.definition.function.name;
28
+ if (this.tools.has(name)) {
29
+ this.logger.warn(`工具 "${name}" 已存在,将被覆盖 (来自 ${pluginName})`);
30
+ }
31
+ this.tools.set(name, { ...tool, pluginName });
32
+ this.logger.debug(`注册工具: ${name} (来自 ${pluginName})`);
33
+ return () => {
34
+ if (this.tools.get(name)?.pluginName === pluginName) {
35
+ this.tools.delete(name);
36
+ this.logger.debug(`注销工具: ${name}`);
37
+ }
38
+ };
39
+ }
40
+ // ---- 查询 ----
41
+ getDefinitions(filter) {
42
+ const tools = [...this.tools.values()];
43
+ if (filter?.groups && filter.groups.length > 0) {
44
+ const enabledGroups = new Set(filter.groups);
45
+ return tools
46
+ .filter(t => !t.groups || t.groups.length === 0 || t.groups.some(g => enabledGroups.has(g)))
47
+ .map(t => t.definition);
48
+ }
49
+ // 未指定分组时,只返回无分组(通用)工具;有分组的工具需要显式启用
50
+ return tools.filter(t => !t.groups || t.groups.length === 0).map(t => t.definition);
51
+ }
52
+ getSummaries(filter) {
53
+ let tools = [...this.tools.values()];
54
+ if (filter?.groups && filter.groups.length > 0) {
55
+ const enabledGroups = new Set(filter.groups);
56
+ tools = tools.filter(t => !t.groups || t.groups.length === 0 || t.groups.some(g => enabledGroups.has(g)));
57
+ }
58
+ else {
59
+ // 未指定分组时,只返回无分组(通用)工具
60
+ tools = tools.filter(t => !t.groups || t.groups.length === 0);
61
+ }
62
+ return tools.map(t => {
63
+ return {
64
+ name: t.definition.function.name,
65
+ description: t.definition.function.description,
66
+ groups: t.groups,
67
+ permissions: this.getStaticPermissions(t),
68
+ };
69
+ });
70
+ }
71
+ getAll() {
72
+ return [...this.tools.values()].map(t => {
73
+ const name = t.definition.function.name;
74
+ const ovr = this.overrides.get(name);
75
+ const baseAuthority = t.authority;
76
+ const baseSafety = t.safety;
77
+ return {
78
+ name,
79
+ description: t.definition.function.description,
80
+ pluginName: t.pluginName,
81
+ authority: ovr?.authority ?? baseAuthority,
82
+ safety: ovr?.safety ?? baseSafety,
83
+ permissions: this.getStaticPermissions(t),
84
+ groups: t.groups,
85
+ baseAuthority,
86
+ baseSafety,
87
+ overridden: !!ovr,
88
+ };
89
+ });
90
+ }
91
+ registerGroup(group, pluginName) {
92
+ const info = { ...group, pluginName };
93
+ this._groups.set(group.name, info);
94
+ this.logger.debug(`注册工具分组: ${group.name} (来自 ${pluginName})`);
95
+ return () => {
96
+ if (this._groups.get(group.name)?.pluginName === pluginName) {
97
+ this._groups.delete(group.name);
98
+ this.logger.debug(`注销工具分组: ${group.name}`);
99
+ }
100
+ };
101
+ }
102
+ getGroups() {
103
+ return [...this._groups.values()];
104
+ }
105
+ // ---- 执行 ----
106
+ setExecutionGuard(guard) {
107
+ this._guard = guard;
108
+ }
109
+ // ---- Overrides(与 CommandRegistry 对齐)----
110
+ loadOverrides(overrides) {
111
+ this.overrides.clear();
112
+ for (const [name, o] of Object.entries(overrides)) {
113
+ // 过滤空 override,避免污染
114
+ if (o && (typeof o.authority === 'number' || o.safety === 'safe' || o.safety === 'dangerous')) {
115
+ this.overrides.set(name, o);
116
+ }
117
+ }
118
+ }
119
+ setOverride(name, override) {
120
+ this.overrides.set(name, override);
121
+ }
122
+ removeOverride(name) {
123
+ this.overrides.delete(name);
124
+ }
125
+ getOverrides() {
126
+ return Object.fromEntries(this.overrides);
127
+ }
128
+ /** 工具名未命中时,按下划线分词的 token 交集 + 子串关系给出近似建议(最多 3 个)。 */
129
+ suggestToolNames(query) {
130
+ const q = query.toLowerCase();
131
+ const qTokens = new Set(q.split(/[_\s-]+/).filter(Boolean));
132
+ const scored = [];
133
+ for (const name of this.tools.keys()) {
134
+ const n = name.toLowerCase();
135
+ let score = 0;
136
+ if (n.includes(q) || q.includes(n))
137
+ score += 2;
138
+ for (const t of n.split(/[_\s-]+/))
139
+ if (t && qTokens.has(t))
140
+ score += 1;
141
+ if (score > 0)
142
+ scored.push({ name, score });
143
+ }
144
+ return scored
145
+ .sort((a, b) => b.score - a.score)
146
+ .slice(0, 3)
147
+ .map(s => s.name);
148
+ }
149
+ async execute(toolName, args, callCtx) {
150
+ const tool = this.tools.get(toolName);
151
+ if (!tool) {
152
+ // LLM 常臆造工具名(如把 send_attachment 叫成 send_image)。给出近似名建议,
153
+ // 让模型本轮直接纠正调用,而不是再花一轮 search_tools 找正确名字。
154
+ const suggestions = this.suggestToolNames(toolName);
155
+ const hint = suggestions.length > 0 ? `,你是否想用:${suggestions.join(' / ')}` : '';
156
+ return JSON.stringify({ error: `工具 "${toolName}" 未找到${hint}` });
157
+ }
158
+ // 参数 schema 校验:检测缺失必填项 / 多余未知键(LLM 写错参数名时给出明确提示)
159
+ const schemaError = validateToolArgs(toolName, tool.definition, args);
160
+ if (schemaError) {
161
+ this.logger.warn(`工具 ${toolName} 参数校验失败: ${schemaError}`);
162
+ return JSON.stringify({ error: schemaError });
163
+ }
164
+ const ovr = this.overrides.get(toolName);
165
+ const authority = ovr?.authority ?? tool.authority ?? 1;
166
+ const safety = ovr?.safety ?? tool.safety ?? 'safe';
167
+ let permissions;
168
+ try {
169
+ permissions = await this.resolvePermissions(tool, args, callCtx);
170
+ }
171
+ catch (err) {
172
+ const message = err instanceof Error ? err.message : String(err);
173
+ this.logger.warn(`工具 ${toolName} 权限解析失败: ${message}`);
174
+ return JSON.stringify({ error: message });
175
+ }
176
+ if (this._guard) {
177
+ const denied = await this._guard({
178
+ name: toolName,
179
+ type: 'tool',
180
+ authority,
181
+ safety,
182
+ permissions,
183
+ sessionId: callCtx.sessionId,
184
+ platform: callCtx.platform ?? 'unknown',
185
+ userId: callCtx.userId,
186
+ args,
187
+ });
188
+ if (denied) {
189
+ this.logger.warn(`工具 ${toolName} 被执行守卫拦截: ${denied}`);
190
+ return JSON.stringify({ error: denied });
191
+ }
192
+ }
193
+ try {
194
+ if (safety === 'dangerous') {
195
+ this.logger.info(`危险工具执行: ${toolName} session=${callCtx.sessionId} platform=${callCtx.platform ?? 'unknown'} args=${JSON.stringify(args)}`);
196
+ }
197
+ const result = await tool.handler(args, callCtx);
198
+ this.logger.debug(`工具 ${toolName} 执行成功`);
199
+ return result;
200
+ }
201
+ catch (err) {
202
+ const message = err instanceof Error ? err.message : String(err);
203
+ this.logger.error(`工具 ${toolName} 执行失败: ${message}`);
204
+ return JSON.stringify({ error: message });
205
+ }
206
+ }
207
+ unregisterByPlugin(pluginName) {
208
+ for (const [name, tool] of this.tools) {
209
+ if (tool.pluginName === pluginName) {
210
+ this.tools.delete(name);
211
+ this.logger.debug(`注销工具: ${name} (插件 ${pluginName} 卸载)`);
212
+ }
213
+ }
214
+ for (const [name, group] of this._groups) {
215
+ if (group.pluginName === pluginName) {
216
+ this._groups.delete(name);
217
+ }
218
+ }
219
+ }
220
+ // ---- 内部 ----
221
+ getStaticPermissions(tool) {
222
+ return unique([`tool:${tool.definition.function.name}`, ...(tool.permissions ?? [])]);
223
+ }
224
+ async resolvePermissions(tool, args, callCtx) {
225
+ const dynamic = tool.resolvePermissions ? await tool.resolvePermissions(args, callCtx) : [];
226
+ return unique([...this.getStaticPermissions(tool), ...dynamic]);
227
+ }
228
+ }
229
+ function unique(values) {
230
+ return [...new Set(values.filter(Boolean))];
231
+ }
232
+ /**
233
+ * 轻量工具参数校验:
234
+ * - 检测 required 字段是否缺失
235
+ * - 当 additionalProperties === false 时,检测不在 properties 里的多余键
236
+ *
237
+ * 返回错误字符串(有问题时),或 null(通过)。
238
+ */
239
+ function validateToolArgs(toolName, definition, args) {
240
+ const params = definition.function.parameters;
241
+ if (!params || typeof params !== 'object')
242
+ return null;
243
+ const properties = params.properties;
244
+ const required = params.required;
245
+ const noExtra = params.additionalProperties === false;
246
+ const errors = [];
247
+ // 必填项缺失
248
+ if (required && properties) {
249
+ for (const key of required) {
250
+ if (!(key in args)) {
251
+ errors.push(`缺少必填参数 "${key}"`);
252
+ }
253
+ }
254
+ }
255
+ // 多余/未知参数(仅在 additionalProperties: false 时)
256
+ if (noExtra && properties) {
257
+ const knownKeys = Object.keys(properties);
258
+ const extraKeys = Object.keys(args).filter(k => !knownKeys.includes(k));
259
+ if (extraKeys.length > 0) {
260
+ errors.push(`包含未知参数 ${extraKeys.map(k => `"${k}"`).join(', ')}。` +
261
+ `工具 ${toolName} 支持的参数: ${knownKeys.map(k => `"${k}"`).join(', ')}`);
262
+ }
263
+ }
264
+ return errors.length > 0 ? errors.join(';') : null;
265
+ }
266
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@aalis/plugin-tools",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "keywords": [
6
+ "aalis-plugin"
7
+ ],
8
+ "main": "dist/index.js",
9
+ "types": "dist/index.d.ts",
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "dependencies": {
14
+ "@aalis/plugin-authority-api": "^0.1.0",
15
+ "@aalis/plugin-tools-api": "^0.1.0"
16
+ },
17
+ "devDependencies": {
18
+ "@types/node": "^22.0.0",
19
+ "typescript": "^5.7.0",
20
+ "@aalis/core": "0.1.0"
21
+ },
22
+ "peerDependencies": {
23
+ "@aalis/core": "^0.1.0"
24
+ },
25
+ "aalis": {
26
+ "service": {
27
+ "provides": [
28
+ "tools"
29
+ ]
30
+ }
31
+ },
32
+ "scripts": {
33
+ "build": "tsc",
34
+ "dev": "tsc --watch"
35
+ }
36
+ }