@aalis/plugin-prompt-budget 0.5.2 → 0.7.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 +24 -0
- package/dist/index.d.ts +8 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -10
- package/dist/index.js.map +1 -1
- package/package.json +18 -6
package/README.md
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# @aalis/plugin-prompt-budget
|
|
2
|
+
|
|
3
|
+
提示词预算:token 计数与上下文裁剪自检
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm add @aalis/plugin-prompt-budget
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 提供 / 依赖
|
|
12
|
+
|
|
13
|
+
`definePlugin` 默认导出:
|
|
14
|
+
|
|
15
|
+
- provides:无
|
|
16
|
+
- uses:`events`、`lifecycle`、`logger`;可选 `tools`
|
|
17
|
+
|
|
18
|
+
## 文档
|
|
19
|
+
|
|
20
|
+
详见 [docs/plugins/plugin-prompt-budget.md](../../docs/plugins/plugin-prompt-budget.md)。
|
|
21
|
+
|
|
22
|
+
## 许可
|
|
23
|
+
|
|
24
|
+
见仓库根目录 LICENSE。
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @aalis/plugin-prompt-budget —— 暴露 Prompt 预算自检工具
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* 设计动机:@aalis/plugin-agent 已 emit `token:usage` 事件(含 12 桶 breakdown),
|
|
5
5
|
* WebUI 通过 plugin-webui-server 订阅并渲染面板。但 AI 自己跑在工具循环里时,
|
|
6
6
|
* 没有看 WebUI 的机会——需要一个**主动 query** 路径,让模型怀疑"是不是 prompt 太大了"
|
|
7
7
|
* 时能立即查到当前 session 的最新预算消耗。
|
|
@@ -9,9 +9,11 @@
|
|
|
9
9
|
* 实现:监听 `token:usage` 事件维护 sessionId → 最新 usage 缓存,注册
|
|
10
10
|
* `prompt_budget_info` 工具供 AI 查询。零业务逻辑,纯只读 introspection。
|
|
11
11
|
*/
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
declare const _default: import("@aalis/core").PluginDefinition<{
|
|
13
|
+
tools: import("@aalis/core").OptionalUse<import("@aalis/api-tools").ToolService, import("@aalis/api-tools").BoundTools>;
|
|
14
|
+
events: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Events, import("@aalis/core").Events>;
|
|
15
|
+
lifecycle: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").LifecycleCap, import("@aalis/core").LifecycleCap>;
|
|
16
|
+
logger: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Logger, import("@aalis/core").Logger>;
|
|
17
|
+
}>;
|
|
18
|
+
export default _default;
|
|
17
19
|
//# 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":"AAAA;;;;;;;;;;GAUG
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;;;;;;;AAiBH,wBAQG"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @aalis/plugin-prompt-budget —— 暴露 Prompt 预算自检工具
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* 设计动机:@aalis/plugin-agent 已 emit `token:usage` 事件(含 12 桶 breakdown),
|
|
5
5
|
* WebUI 通过 plugin-webui-server 订阅并渲染面板。但 AI 自己跑在工具循环里时,
|
|
6
6
|
* 没有看 WebUI 的机会——需要一个**主动 query** 路径,让模型怀疑"是不是 prompt 太大了"
|
|
7
7
|
* 时能立即查到当前 session 的最新预算消耗。
|
|
@@ -9,16 +9,24 @@
|
|
|
9
9
|
* 实现:监听 `token:usage` 事件维护 sessionId → 最新 usage 缓存,注册
|
|
10
10
|
* `prompt_budget_info` 工具供 AI 查询。零业务逻辑,纯只读 introspection。
|
|
11
11
|
*/
|
|
12
|
-
import {
|
|
12
|
+
import { tools } from '@aalis/api-tools';
|
|
13
|
+
import { definePlugin, events, lifecycle, logger, optional } from '@aalis/core';
|
|
13
14
|
import { createBoundedMap } from '@aalis/util-bounded-map';
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
export
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
/** tools 声明为可选:没有工具服务时本插件照常激活,缓存先攒着,工具服务上线即补登记 */
|
|
16
|
+
const uses = { tools: optional(tools), events, lifecycle, logger };
|
|
17
|
+
export default definePlugin({
|
|
18
|
+
name: '@aalis/plugin-prompt-budget',
|
|
19
|
+
displayName: 'Prompt 预算自检',
|
|
20
|
+
subsystem: 'agent',
|
|
21
|
+
uses,
|
|
22
|
+
apply(caps) {
|
|
23
|
+
registerBudgetTool(caps);
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
function registerBudgetTool({ tools, events, lifecycle, logger }) {
|
|
19
27
|
/** sessionId → 最新一次的 token:usage 快照(派生只读,逐出后 AI 重查即重算);有界防长跑泄漏 */
|
|
20
28
|
const cache = createBoundedMap({ max: 500, ttlMs: 6 * 60 * 60 * 1000 });
|
|
21
|
-
|
|
29
|
+
events.on('token:usage', u => {
|
|
22
30
|
if (!u || typeof u.sessionId !== 'string')
|
|
23
31
|
return;
|
|
24
32
|
cache.set(u.sessionId, { ...u, observedAt: Date.now() });
|
|
@@ -90,7 +98,7 @@ export function apply(ctx) {
|
|
|
90
98
|
});
|
|
91
99
|
},
|
|
92
100
|
});
|
|
93
|
-
|
|
94
|
-
|
|
101
|
+
lifecycle.onDispose(() => cache.clear());
|
|
102
|
+
logger.info('prompt_budget_info 工具已注册');
|
|
95
103
|
}
|
|
96
104
|
//# 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;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAgB,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAQ3D,kDAAkD;AAClD,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AAGnE,eAAe,YAAY,CAAC;IAC1B,IAAI,EAAE,6BAA6B;IACnC,WAAW,EAAE,aAAa;IAC1B,SAAS,EAAE,OAAO;IAClB,IAAI;IACJ,KAAK,CAAC,IAAI;QACR,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;CACF,CAAC,CAAC;AAEH,SAAS,kBAAkB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAQ;IACpE,kEAAkE;IAClE,MAAM,KAAK,GAAG,gBAAgB,CAAqB,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IAE5F,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE;QAC3B,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ;YAAE,OAAO;QAClD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,QAAQ,CAAC;QACb,UAAU,EAAE;YACV,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,oBAAoB;gBAC1B,WAAW,EACT,8CAA8C;oBAC9C,qDAAqD;oBACrD,+EAA+E;oBAC/E,yFAAyF;oBACzF,sCAAsC;oBACtC,0CAA0C;gBAC5C,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,SAAS,EAAE;4BACT,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,mDAAmD;yBACjE;qBACF;oBACD,QAAQ,EAAE,EAAE;oBACZ,oBAAoB,EAAE,KAAK;iBAC5B;aACF;SACF;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;YAC/B,MAAM,SAAS,GAAI,IAAI,CAAC,SAAoB,IAAI,OAAO,CAAC,SAAS,CAAC;YAClE,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC/B,IAAI,CAAC,CAAC,EAAE,CAAC;gBACP,OAAO,IAAI,CAAC,SAAS,CAAC;oBACpB,MAAM,EAAE,IAAI;oBACZ,SAAS;oBACT,MAAM,EACJ,6DAA6D;wBAC7D,wBAAwB;iBAC3B,CAAC,CAAC;YACL,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC;YACxC,MAAM,GAAG,GACP,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YACzG,4DAA4D;YAC5D,wCAAwC;YACxC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;iBACxC,MAAM,CAAC,CAAC,CAAC,EAAyB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;iBAC9D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3E,6CAA6C;YAC7C,+BAA+B;YAC/B,MAAM,eAAe,GACnB,uDAAuD,CAAC;YAC1D,MAAM,MAAM,GACV,CAAC,CAAC,UAAU,IAAI,IAAI;gBAClB,CAAC,CAAC,gDAAgD,eAAe,EAAE;gBACnE,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,GAAG;oBACnB,CAAC,CAAC,WAAW,eAAe,EAAE;oBAC9B,CAAC,CAAC,YAAY,CAAC;YACrB,OAAO,IAAI,CAAC,SAAS,CAAC;gBACpB,SAAS;gBACT,KAAK;gBACL,UAAU,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE;gBAChD,GAAG;gBACH,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,aAAa,EAAE,CAAC,CAAC,aAAa;gBAC9B,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC3C,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,IAAI;gBACJ,MAAM;aACP,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;IAEH,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;AAC1C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aalis/plugin-prompt-budget",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -24,17 +24,29 @@
|
|
|
24
24
|
"dist"
|
|
25
25
|
],
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@aalis/api-tools": ">=0.
|
|
28
|
-
"@aalis/util-bounded-map": ">=0.
|
|
27
|
+
"@aalis/api-tools": ">=0.10.0 <1.0.0",
|
|
28
|
+
"@aalis/util-bounded-map": ">=0.6.1 <1.0.0"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@types/node": "^22.0.0",
|
|
32
32
|
"typescript": "^5.7.0",
|
|
33
|
-
"@aalis/core": "0.
|
|
34
|
-
"@aalis/api-agent": "0.
|
|
33
|
+
"@aalis/core": "0.18.0",
|
|
34
|
+
"@aalis/api-agent": "0.9.0"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
37
|
-
"@aalis/core": ">=0.
|
|
37
|
+
"@aalis/core": ">=0.18.0 <1.0.0"
|
|
38
|
+
},
|
|
39
|
+
"aalis": {
|
|
40
|
+
"service": {
|
|
41
|
+
"optional": [
|
|
42
|
+
"tools"
|
|
43
|
+
],
|
|
44
|
+
"required": [
|
|
45
|
+
"events",
|
|
46
|
+
"lifecycle",
|
|
47
|
+
"logger"
|
|
48
|
+
]
|
|
49
|
+
}
|
|
38
50
|
},
|
|
39
51
|
"scripts": {
|
|
40
52
|
"build": "tsc",
|