@aalis/plugin-tool-code-runner 0.9.2 → 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.
- package/dist/index.d.ts +9 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +142 -131
- package/dist/index.js.map +1 -1
- package/dist/runner.d.ts +2 -1
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js.map +1 -1
- package/package.json +14 -11
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
export declare const configSchema: ConfigSchema;
|
|
11
|
-
export declare function apply(ctx: Context, config: Record<string, unknown>): void;
|
|
1
|
+
declare const _default: import("@aalis/core").PluginDefinition<{
|
|
2
|
+
tools: import("@aalis/core/dist/composition/descriptors.js").OptionalUse<import("@aalis/api-tools").ToolService, import("@aalis/api-tools").BoundTools>;
|
|
3
|
+
storage: import("@aalis/core").ServiceDescriptor<import("@aalis/api-storage").StorageService, import("@aalis/core").ServiceRef<import("@aalis/api-storage").StorageService>>;
|
|
4
|
+
proc: import("@aalis/core").ServiceDescriptor<import("@aalis/api-process").ProcessService, import("@aalis/core").ServiceRef<import("@aalis/api-process").ProcessService>>;
|
|
5
|
+
codeSandbox: import("@aalis/core/dist/composition/descriptors.js").OptionalUse<import("@aalis/api-code-sandbox").CodeSandboxService, import("@aalis/core").ServiceRef<import("@aalis/api-code-sandbox").CodeSandboxService>>;
|
|
6
|
+
logger: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Logger, import("@aalis/core").Logger>;
|
|
7
|
+
config: import("@aalis/core").ServiceDescriptor<(identity: symbol) => Readonly<Record<string, unknown>>, Readonly<Record<string, unknown>>>;
|
|
8
|
+
}>;
|
|
9
|
+
export default _default;
|
|
12
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;AA4KA,wBA2JG"}
|
package/dist/index.js
CHANGED
|
@@ -1,18 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { createProcessGateway } from '@aalis/api-process';
|
|
3
|
-
import { createStorageGateway, resolveAgainstCwd } from '@aalis/api-storage';
|
|
4
|
-
import {
|
|
1
|
+
import { codeSandbox } from '@aalis/api-code-sandbox';
|
|
2
|
+
import { createProcessGateway, processService } from '@aalis/api-process';
|
|
3
|
+
import { createStorageGateway, resolveAgainstCwd, storage } from '@aalis/api-storage';
|
|
4
|
+
import { tools, withToolGroups } from '@aalis/api-tools';
|
|
5
|
+
import { config, definePlugin, logger, optional } from '@aalis/core';
|
|
5
6
|
import { runCode } from './runner.js';
|
|
6
|
-
|
|
7
|
-
export const name = '@aalis/plugin-tool-code-runner';
|
|
8
|
-
export const displayName = '代码执行器';
|
|
9
|
-
export const subsystem = 'tools';
|
|
10
|
-
export const inject = {
|
|
11
|
-
// storage 仅按名等待;local-path 由 createRunnerConfig 运行时探测 resolveLocalPath 守卫。
|
|
12
|
-
required: ['storage', 'process'],
|
|
13
|
-
optional: ['code-sandbox'],
|
|
14
|
-
};
|
|
15
|
-
export const configSchema = {
|
|
7
|
+
const configSchema = {
|
|
16
8
|
python: {
|
|
17
9
|
label: 'Python',
|
|
18
10
|
fields: {
|
|
@@ -124,141 +116,160 @@ function safeEnv() {
|
|
|
124
116
|
}
|
|
125
117
|
return env;
|
|
126
118
|
}
|
|
127
|
-
|
|
128
|
-
|
|
119
|
+
// ===== 插件入口 =====
|
|
120
|
+
// storage 仅按名等待;local-path 由 createRunnerConfig 运行时探测 resolveLocalPath 守卫。
|
|
121
|
+
// tools 只被登记、不被读,缺席时登记在账上等提供者到场,因此不设激活闸。
|
|
122
|
+
const uses = {
|
|
123
|
+
tools: optional(tools),
|
|
124
|
+
storage,
|
|
125
|
+
proc: processService,
|
|
126
|
+
codeSandbox: optional(codeSandbox),
|
|
127
|
+
logger,
|
|
128
|
+
config,
|
|
129
|
+
};
|
|
130
|
+
async function createRunnerConfig(caps, cfg) {
|
|
131
|
+
if (!caps.storage.all().some(e => typeof e.instance.resolveLocalPath === 'function')) {
|
|
129
132
|
throw new Error('代码执行器需要至少一个支持 local-path 的 storage entry');
|
|
130
133
|
}
|
|
131
|
-
const
|
|
134
|
+
const gateway = createStorageGateway(caps.storage);
|
|
132
135
|
const cwdUri = toRunnerCwdUri(cfg.workingDirectory);
|
|
133
136
|
return {
|
|
134
137
|
defaultTimeout: cfg.defaultTimeout,
|
|
135
138
|
maxTimeout: cfg.maxTimeout,
|
|
136
139
|
maxOutputSize: cfg.maxOutputSize,
|
|
137
|
-
cwd: await
|
|
140
|
+
cwd: await gateway.resolveLocalPath(cwdUri, 'read'),
|
|
138
141
|
env: safeEnv(),
|
|
139
142
|
// mode='none' → 不带 sandbox(裸跑);mode='auto' → 带策略,runCode 经 code-sandbox 强制隔离或 fail-closed
|
|
140
143
|
sandbox: cfg.sandbox.mode === 'none' ? undefined : { network: cfg.sandbox.network },
|
|
141
|
-
codeSandbox:
|
|
144
|
+
codeSandbox: caps.codeSandbox.current,
|
|
142
145
|
};
|
|
143
146
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
147
|
+
export default definePlugin({
|
|
148
|
+
name: '@aalis/plugin-tool-code-runner',
|
|
149
|
+
displayName: '代码执行器',
|
|
150
|
+
subsystem: 'tools',
|
|
151
|
+
configSchema,
|
|
152
|
+
uses,
|
|
153
|
+
apply(caps) {
|
|
154
|
+
const { tools, proc, storage, codeSandbox, logger, config } = caps;
|
|
155
|
+
const cfg = resolveConfig(config);
|
|
156
|
+
if (cfg.sandbox.mode === 'none') {
|
|
157
|
+
logger.warn('⚠️ code-runner 运行在【无隔离】模式(sandbox.mode=none):代码以宿主用户全权限裸跑,仅在完全可信环境使用。');
|
|
158
|
+
}
|
|
159
|
+
const cwdUri = toRunnerCwdUri(cfg.workingDirectory);
|
|
160
|
+
const processGateway = createProcessGateway(proc);
|
|
161
|
+
const storageGateway = createStorageGateway(storage);
|
|
162
|
+
// 每次调用现取:cwd 要按当时的 storage 实况解析,沙箱后端也可能中途上下线
|
|
163
|
+
const runnerDeps = { storage, codeSandbox };
|
|
164
|
+
// 创建带分组标记的工具视图
|
|
165
|
+
const groupTools = withToolGroups(tools, ['code-runner']);
|
|
166
|
+
// 注册工具分组
|
|
167
|
+
tools.registerGroup({
|
|
168
|
+
name: 'code-runner',
|
|
169
|
+
label: '代码执行',
|
|
170
|
+
description: '编写并运行 Python / JavaScript 代码来解决计算、分析、文件处理等问题',
|
|
171
|
+
});
|
|
172
|
+
const osName = process.platform === 'darwin' ? 'macOS' : process.platform === 'win32' ? 'Windows' : 'Linux';
|
|
173
|
+
// ==================== run_python ====================
|
|
174
|
+
if (cfg.python.enabled) {
|
|
175
|
+
groupTools.register({
|
|
176
|
+
definition: {
|
|
177
|
+
type: 'function',
|
|
178
|
+
function: {
|
|
179
|
+
name: 'run_python',
|
|
180
|
+
description: `在本机 ${osName} 系统上编写并执行一段 Python 脚本,返回 stdout 和 stderr。` +
|
|
181
|
+
'代码会保存到临时文件后执行,无需担心转义问题,可以编写任意多行代码。\n\n' +
|
|
182
|
+
'**适用场景(请在合适时主动使用):**\n' +
|
|
183
|
+
'- 复杂数学计算、方程求解、符号推导(math / sympy / numpy / scipy)\n' +
|
|
184
|
+
'- 数据统计分析、CSV/JSON 数据处理(pandas / json / csv)\n' +
|
|
185
|
+
'- 批量文件解析与文本处理(正则匹配、格式转换、批量重命名)\n' +
|
|
186
|
+
'- 编码转换、加解密、哈希计算(base64 / hashlib)\n' +
|
|
187
|
+
'- 日期 / 时间计算(datetime / calendar)\n' +
|
|
188
|
+
'- 需要精确结果而非近似回答的任何计算问题\n' +
|
|
189
|
+
'- 生成结构化输出(表格、Markdown、LaTeX)\n\n' +
|
|
190
|
+
'**使用技巧:**\n' +
|
|
191
|
+
'- 将最终结果通过 print() 输出,该输出会作为工具返回值\n' +
|
|
192
|
+
'- 可使用标准库和已安装的第三方库(如 numpy, sympy, pandas 等)\n' +
|
|
193
|
+
'- 处理多个文件时,在一个脚本内循环处理并汇总输出,效率远高于多次调用\n' +
|
|
194
|
+
'- 若需读写文件,请优先使用相对于逻辑工作目录的路径;不要依赖宿主机绝对路径',
|
|
195
|
+
parameters: {
|
|
196
|
+
type: 'object',
|
|
197
|
+
properties: {
|
|
198
|
+
code: {
|
|
199
|
+
type: 'string',
|
|
200
|
+
description: '完整的 Python 脚本源代码',
|
|
201
|
+
},
|
|
202
|
+
timeout: {
|
|
203
|
+
type: 'number',
|
|
204
|
+
description: `超时毫秒数(可选,默认 ${cfg.defaultTimeout},最大 ${cfg.maxTimeout})`,
|
|
205
|
+
},
|
|
195
206
|
},
|
|
207
|
+
required: ['code'],
|
|
208
|
+
additionalProperties: false,
|
|
196
209
|
},
|
|
197
|
-
required: ['code'],
|
|
198
|
-
additionalProperties: false,
|
|
199
210
|
},
|
|
200
211
|
},
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
212
|
+
visibility: 'restricted',
|
|
213
|
+
handler: async (args) => {
|
|
214
|
+
const code = args.code;
|
|
215
|
+
const timeout = args.timeout;
|
|
216
|
+
logger.debug(`run_python: ${code.length} 字符`);
|
|
217
|
+
const runnerConfig = await createRunnerConfig(runnerDeps, cfg);
|
|
218
|
+
const result = await runCode(processGateway, storageGateway, cfg.python.interpreter, code, '.py', runnerConfig, timeout);
|
|
219
|
+
return JSON.stringify(result);
|
|
220
|
+
},
|
|
221
|
+
});
|
|
222
|
+
logger.info(`Python 代码执行工具已启用 (解释器: ${cfg.python.interpreter})`);
|
|
223
|
+
}
|
|
224
|
+
// ==================== run_javascript ====================
|
|
225
|
+
if (cfg.javascript.enabled) {
|
|
226
|
+
groupTools.register({
|
|
227
|
+
definition: {
|
|
228
|
+
type: 'function',
|
|
229
|
+
function: {
|
|
230
|
+
name: 'run_javascript',
|
|
231
|
+
description: `在本机 ${osName} 系统上编写并执行一段 JavaScript (Node.js) 脚本,返回 stdout 和 stderr。` +
|
|
232
|
+
'代码会保存为 .mjs 文件(ESM 模块)后执行,支持 top-level await。\n\n' +
|
|
233
|
+
'**适用场景(请在合适时主动使用):**\n' +
|
|
234
|
+
'- JSON 数据处理与转换\n' +
|
|
235
|
+
'- 正则表达式测试与文本处理\n' +
|
|
236
|
+
'- Node.js API 调用、文件系统操作\n' +
|
|
237
|
+
'- HTTP 请求与 API 测试(fetch)\n' +
|
|
238
|
+
'- 需要 JavaScript 运行时特性的验证和计算\n\n' +
|
|
239
|
+
'**使用技巧:**\n' +
|
|
240
|
+
'- 通过 console.log() 输出结果\n' +
|
|
241
|
+
'- 使用 ESM import 语法导入模块\n' +
|
|
242
|
+
'- 支持 top-level await,可直接使用 await fetch(...) 等',
|
|
243
|
+
parameters: {
|
|
244
|
+
type: 'object',
|
|
245
|
+
properties: {
|
|
246
|
+
code: {
|
|
247
|
+
type: 'string',
|
|
248
|
+
description: '完整的 JavaScript (Node.js ESM) 脚本源代码',
|
|
249
|
+
},
|
|
250
|
+
timeout: {
|
|
251
|
+
type: 'number',
|
|
252
|
+
description: `超时毫秒数(可选,默认 ${cfg.defaultTimeout},最大 ${cfg.maxTimeout})`,
|
|
253
|
+
},
|
|
243
254
|
},
|
|
255
|
+
required: ['code'],
|
|
256
|
+
additionalProperties: false,
|
|
244
257
|
},
|
|
245
|
-
required: ['code'],
|
|
246
|
-
additionalProperties: false,
|
|
247
258
|
},
|
|
248
259
|
},
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
}
|
|
260
|
+
visibility: 'restricted',
|
|
261
|
+
handler: async (args) => {
|
|
262
|
+
const code = args.code;
|
|
263
|
+
const timeout = args.timeout;
|
|
264
|
+
logger.debug(`run_javascript: ${code.length} 字符`);
|
|
265
|
+
const runnerConfig = await createRunnerConfig(runnerDeps, cfg);
|
|
266
|
+
const result = await runCode(processGateway, storageGateway, cfg.javascript.interpreter, code, '.mjs', runnerConfig, timeout);
|
|
267
|
+
return JSON.stringify(result);
|
|
268
|
+
},
|
|
269
|
+
});
|
|
270
|
+
logger.info(`JavaScript 代码执行工具已启用 (解释器: ${cfg.javascript.interpreter})`);
|
|
271
|
+
}
|
|
272
|
+
logger.info(`代码执行器插件已启动 (工作目录: ${cwdUri})`);
|
|
273
|
+
},
|
|
274
|
+
});
|
|
264
275
|
//# 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,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/runner.d.ts
CHANGED
|
@@ -13,7 +13,8 @@ export interface RunnerConfig {
|
|
|
13
13
|
maxOutputSize: number;
|
|
14
14
|
/** 子进程 cwd(已通过 storage.resolveLocalPath 解析的本地路径) */
|
|
15
15
|
cwd: string;
|
|
16
|
-
/**
|
|
16
|
+
/** 透传给子进程的环境变量。仅沙箱路径(env -i 真清)构成白名单隔离;
|
|
17
|
+
* 非沙箱路径走 process-local,env 被**叠加**在宿主全量环境之上(提供与否都合并),无隔离作用 */
|
|
17
18
|
env?: Record<string, string | undefined>;
|
|
18
19
|
/**
|
|
19
20
|
* 沙箱:给定即要求 OS 隔离(写白名单 = [cwd, 本次临时目录]、网络按 network、env 仅白名单);
|
package/dist/runner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAC;IACZ
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAC;IACZ;mEAC+D;IAC/D,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC;;;OAGG;IACH,OAAO,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IACxC,mDAAmD;IACnD,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAClC;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAQD;;;;;;;;;;;GAWG;AACH,wBAAsB,OAAO,CAC3B,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,GAAE,MAAM,EAAO,GACvB,OAAO,CAAC,SAAS,CAAC,CAuEpB"}
|
package/dist/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aalis/plugin-tool-code-runner",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -24,28 +24,31 @@
|
|
|
24
24
|
"dist"
|
|
25
25
|
],
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@aalis/api-code-sandbox": ">=0.
|
|
28
|
-
"@aalis/schema-config": ">=0.
|
|
29
|
-
"@aalis/api-process": ">=0.
|
|
30
|
-
"@aalis/api-storage": ">=0.
|
|
31
|
-
"@aalis/api-tools": ">=0.
|
|
27
|
+
"@aalis/api-code-sandbox": ">=0.6.0 <1.0.0",
|
|
28
|
+
"@aalis/schema-config": ">=0.12.0 <1.0.0",
|
|
29
|
+
"@aalis/api-process": ">=0.7.0 <1.0.0",
|
|
30
|
+
"@aalis/api-storage": ">=0.6.0 <1.0.0",
|
|
31
|
+
"@aalis/api-tools": ">=0.9.0 <1.0.0"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@types/node": "^22.0.0",
|
|
35
35
|
"typescript": "^5.7.0",
|
|
36
|
-
"@aalis/core": "0.
|
|
36
|
+
"@aalis/core": "0.17.0"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
|
-
"@aalis/core": ">=0.
|
|
39
|
+
"@aalis/core": ">=0.17.0 <1.0.0"
|
|
40
40
|
},
|
|
41
41
|
"aalis": {
|
|
42
42
|
"service": {
|
|
43
43
|
"required": [
|
|
44
|
-
"
|
|
45
|
-
"
|
|
44
|
+
"config",
|
|
45
|
+
"logger",
|
|
46
|
+
"process",
|
|
47
|
+
"storage"
|
|
46
48
|
],
|
|
47
49
|
"optional": [
|
|
48
|
-
"code-sandbox"
|
|
50
|
+
"code-sandbox",
|
|
51
|
+
"tools"
|
|
49
52
|
]
|
|
50
53
|
}
|
|
51
54
|
},
|