sema-core 2.1.0 → 2.1.1
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/conf/config.d.ts +2 -0
- package/dist/conf/config.d.ts.map +1 -1
- package/dist/conf/config.js +4 -1
- package/dist/conf/config.js.map +1 -1
- package/dist/core/SemaCore.d.ts +5 -0
- package/dist/core/SemaCore.d.ts.map +1 -1
- package/dist/core/SemaCore.js +8 -0
- package/dist/core/SemaCore.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/manager/UsageStatsManager.d.ts +79 -0
- package/dist/manager/UsageStatsManager.d.ts.map +1 -0
- package/dist/manager/UsageStatsManager.js +402 -0
- package/dist/manager/UsageStatsManager.js.map +1 -0
- package/dist/prompt/inputPredict.d.ts +1 -1
- package/dist/prompt/inputPredict.d.ts.map +1 -1
- package/dist/prompt/inputPredict.js +2 -0
- package/dist/prompt/inputPredict.js.map +1 -1
- package/dist/services/api/queryLLM.d.ts.map +1 -1
- package/dist/services/api/queryLLM.js +13 -0
- package/dist/services/api/queryLLM.js.map +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/package.json +1 -1
package/dist/conf/config.d.ts
CHANGED
|
@@ -18,4 +18,6 @@ export declare const TRACKS_FILES_RETAIN_COUNT = 30;
|
|
|
18
18
|
export declare const EVENT_DIR_PATH = "event";
|
|
19
19
|
export declare const EVENT_LOG_FILES_RETAIN_COUNT = 10;
|
|
20
20
|
export declare const EVENT_LOG_CLEANUP_INTERVAL: number;
|
|
21
|
+
export declare const STATS_DIR_PATH = "stats";
|
|
22
|
+
export declare const USAGE_STATS_FLUSH_INTERVAL: number;
|
|
21
23
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/conf/config.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,SAAS,YAAY,CAAA;AAGlC,eAAO,MAAM,oBAAoB,eAAe,CAAA;AAGhD,eAAO,MAAM,sBAAsB,kBAAkB,CAAA;AACrD,eAAO,MAAM,oBAAoB,MAAM,CAAA;AACvC,eAAO,MAAM,4BAA4B,KAAK,CAAA;AAG9C,eAAO,MAAM,gBAAgB,YAAY,CAAA;AACzC,eAAO,MAAM,0BAA0B,MAAM,CAAA;AAC7C,eAAO,MAAM,gCAAgC,KAAK,CAAA;AAClD,eAAO,MAAM,wBAAwB,QAAiB,CAAC;AAGvD,eAAO,MAAM,kBAAkB,cAAc,CAAA;AAG7C,eAAO,MAAM,YAAY,SAAS,CAAA;AAClC,eAAO,MAAM,8BAA8B,IAAI,CAAA;AAG/C,eAAO,MAAM,gBAAgB,aAAa,CAAA;AAC1C,eAAO,MAAM,0BAA0B,KAAK,CAAA;AAC5C,eAAO,MAAM,wBAAwB,QAAiB,CAAC;AAGvD,eAAO,MAAM,eAAe,WAAW,CAAA;AACvC,eAAO,MAAM,yBAAyB,KAAK,CAAA;AAG3C,eAAO,MAAM,cAAc,UAAU,CAAA;AACrC,eAAO,MAAM,4BAA4B,KAAK,CAAA;AAC9C,eAAO,MAAM,0BAA0B,QAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/conf/config.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,SAAS,YAAY,CAAA;AAGlC,eAAO,MAAM,oBAAoB,eAAe,CAAA;AAGhD,eAAO,MAAM,sBAAsB,kBAAkB,CAAA;AACrD,eAAO,MAAM,oBAAoB,MAAM,CAAA;AACvC,eAAO,MAAM,4BAA4B,KAAK,CAAA;AAG9C,eAAO,MAAM,gBAAgB,YAAY,CAAA;AACzC,eAAO,MAAM,0BAA0B,MAAM,CAAA;AAC7C,eAAO,MAAM,gCAAgC,KAAK,CAAA;AAClD,eAAO,MAAM,wBAAwB,QAAiB,CAAC;AAGvD,eAAO,MAAM,kBAAkB,cAAc,CAAA;AAG7C,eAAO,MAAM,YAAY,SAAS,CAAA;AAClC,eAAO,MAAM,8BAA8B,IAAI,CAAA;AAG/C,eAAO,MAAM,gBAAgB,aAAa,CAAA;AAC1C,eAAO,MAAM,0BAA0B,KAAK,CAAA;AAC5C,eAAO,MAAM,wBAAwB,QAAiB,CAAC;AAGvD,eAAO,MAAM,eAAe,WAAW,CAAA;AACvC,eAAO,MAAM,yBAAyB,KAAK,CAAA;AAG3C,eAAO,MAAM,cAAc,UAAU,CAAA;AACrC,eAAO,MAAM,4BAA4B,KAAK,CAAA;AAC9C,eAAO,MAAM,0BAA0B,QAAiB,CAAC;AAGzD,eAAO,MAAM,cAAc,UAAU,CAAA;AACrC,eAAO,MAAM,0BAA0B,QAAY,CAAA"}
|
package/dist/conf/config.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EVENT_LOG_CLEANUP_INTERVAL = exports.EVENT_LOG_FILES_RETAIN_COUNT = exports.EVENT_DIR_PATH = exports.TRACKS_FILES_RETAIN_COUNT = exports.TRACKS_DIR_PATH = exports.LLM_LOG_CLEANUP_INTERVAL = exports.LLM_LOG_FILES_RETAIN_COUNT = exports.LLM_LOG_DIR_PATH = exports.SERVICE_LOG_FILES_RETAIN_COUNT = exports.LOG_DIR_PATH = exports.SNAPSHOTS_DIR_PATH = exports.HISTORY_CLEANUP_INTERVAL = exports.PER_PROJECT_HISTORY_LENGTH_LIMIT = exports.HISTORY_FILES_RETAIN_COUNT = exports.HISTORY_DIR_PATH = exports.PROJECT_HISTORY_LENGTH_LIMIT = exports.PROJECT_LENGTH_LIMIT = exports.PROJECT_CONF_FILE_PATH = exports.MODEL_CONF_FILE_PATH = exports.SEMA_ROOT = void 0;
|
|
3
|
+
exports.USAGE_STATS_FLUSH_INTERVAL = exports.STATS_DIR_PATH = exports.EVENT_LOG_CLEANUP_INTERVAL = exports.EVENT_LOG_FILES_RETAIN_COUNT = exports.EVENT_DIR_PATH = exports.TRACKS_FILES_RETAIN_COUNT = exports.TRACKS_DIR_PATH = exports.LLM_LOG_CLEANUP_INTERVAL = exports.LLM_LOG_FILES_RETAIN_COUNT = exports.LLM_LOG_DIR_PATH = exports.SERVICE_LOG_FILES_RETAIN_COUNT = exports.LOG_DIR_PATH = exports.SNAPSHOTS_DIR_PATH = exports.HISTORY_CLEANUP_INTERVAL = exports.PER_PROJECT_HISTORY_LENGTH_LIMIT = exports.HISTORY_FILES_RETAIN_COUNT = exports.HISTORY_DIR_PATH = exports.PROJECT_HISTORY_LENGTH_LIMIT = exports.PROJECT_LENGTH_LIMIT = exports.PROJECT_CONF_FILE_PATH = exports.MODEL_CONF_FILE_PATH = exports.SEMA_ROOT = void 0;
|
|
4
4
|
// sema数据存储目录
|
|
5
5
|
exports.SEMA_ROOT = '~/.sema';
|
|
6
6
|
// 模型配置文件
|
|
@@ -30,4 +30,7 @@ exports.TRACKS_FILES_RETAIN_COUNT = 30; // 轨迹归档文件保留数量
|
|
|
30
30
|
exports.EVENT_DIR_PATH = 'event';
|
|
31
31
|
exports.EVENT_LOG_FILES_RETAIN_COUNT = 10; // 事件日志文件保留数量
|
|
32
32
|
exports.EVENT_LOG_CLEANUP_INTERVAL = 60 * 60 * 1000; // 清理事件日志文件的时间间隔(毫秒)
|
|
33
|
+
// 使用统计
|
|
34
|
+
exports.STATS_DIR_PATH = 'stats';
|
|
35
|
+
exports.USAGE_STATS_FLUSH_INTERVAL = 10 * 1000; // 增量账本落盘延迟(毫秒)
|
|
33
36
|
//# sourceMappingURL=config.js.map
|
package/dist/conf/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/conf/config.ts"],"names":[],"mappings":";;;AAAA,aAAa;AACA,QAAA,SAAS,GAAG,SAAS,CAAA;AAElC,SAAS;AACI,QAAA,oBAAoB,GAAG,YAAY,CAAA;AAEhD,SAAS;AACI,QAAA,sBAAsB,GAAG,eAAe,CAAA;AACxC,QAAA,oBAAoB,GAAG,GAAG,CAAA,CAAE,SAAS;AACrC,QAAA,4BAA4B,GAAG,EAAE,CAAA,CAAE,WAAW;AAE3D,SAAS;AACI,QAAA,gBAAgB,GAAG,SAAS,CAAA;AAC5B,QAAA,0BAA0B,GAAG,GAAG,CAAA,CAAE,eAAe;AACjD,QAAA,gCAAgC,GAAG,EAAE,CAAA,CAAC,iBAAiB;AACvD,QAAA,wBAAwB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAE,sBAAsB;AAE/E,yCAAyC;AAC5B,QAAA,kBAAkB,GAAG,WAAW,CAAA;AAE7C,SAAS;AACI,QAAA,YAAY,GAAG,MAAM,CAAA;AACrB,QAAA,8BAA8B,GAAG,CAAC,CAAA,CAAE,aAAa;AAE9D,UAAU;AACG,QAAA,gBAAgB,GAAG,UAAU,CAAA;AAC7B,QAAA,0BAA0B,GAAG,EAAE,CAAA,CAAE,cAAc;AAC/C,QAAA,wBAAwB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAE,qBAAqB;AAE9E,YAAY;AACC,QAAA,eAAe,GAAG,QAAQ,CAAA;AAC1B,QAAA,yBAAyB,GAAG,EAAE,CAAA,CAAE,aAAa;AAE1D,OAAO;AACM,QAAA,cAAc,GAAG,OAAO,CAAA;AACxB,QAAA,4BAA4B,GAAG,EAAE,CAAA,CAAE,aAAa;AAChD,QAAA,0BAA0B,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAE,oBAAoB"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/conf/config.ts"],"names":[],"mappings":";;;AAAA,aAAa;AACA,QAAA,SAAS,GAAG,SAAS,CAAA;AAElC,SAAS;AACI,QAAA,oBAAoB,GAAG,YAAY,CAAA;AAEhD,SAAS;AACI,QAAA,sBAAsB,GAAG,eAAe,CAAA;AACxC,QAAA,oBAAoB,GAAG,GAAG,CAAA,CAAE,SAAS;AACrC,QAAA,4BAA4B,GAAG,EAAE,CAAA,CAAE,WAAW;AAE3D,SAAS;AACI,QAAA,gBAAgB,GAAG,SAAS,CAAA;AAC5B,QAAA,0BAA0B,GAAG,GAAG,CAAA,CAAE,eAAe;AACjD,QAAA,gCAAgC,GAAG,EAAE,CAAA,CAAC,iBAAiB;AACvD,QAAA,wBAAwB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAE,sBAAsB;AAE/E,yCAAyC;AAC5B,QAAA,kBAAkB,GAAG,WAAW,CAAA;AAE7C,SAAS;AACI,QAAA,YAAY,GAAG,MAAM,CAAA;AACrB,QAAA,8BAA8B,GAAG,CAAC,CAAA,CAAE,aAAa;AAE9D,UAAU;AACG,QAAA,gBAAgB,GAAG,UAAU,CAAA;AAC7B,QAAA,0BAA0B,GAAG,EAAE,CAAA,CAAE,cAAc;AAC/C,QAAA,wBAAwB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAE,qBAAqB;AAE9E,YAAY;AACC,QAAA,eAAe,GAAG,QAAQ,CAAA;AAC1B,QAAA,yBAAyB,GAAG,EAAE,CAAA,CAAE,aAAa;AAE1D,OAAO;AACM,QAAA,cAAc,GAAG,OAAO,CAAA;AACxB,QAAA,4BAA4B,GAAG,EAAE,CAAA,CAAE,aAAa;AAChD,QAAA,0BAA0B,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAE,oBAAoB;AAE/E,OAAO;AACM,QAAA,cAAc,GAAG,OAAO,CAAA;AACxB,QAAA,0BAA0B,GAAG,EAAE,GAAG,IAAI,CAAA,CAAE,eAAe"}
|
package/dist/core/SemaCore.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ import { RuleConfig } from '../types/rule';
|
|
|
11
11
|
import { HooksInfo } from '../types/hook';
|
|
12
12
|
import { DesignSkillInfo, DesignSystemInfo } from '../types/design';
|
|
13
13
|
import { CronTask } from '../types/cron';
|
|
14
|
+
import { UsageStatsData } from '../manager/UsageStatsManager';
|
|
14
15
|
import { CreateSessionOptions, CreateSessionResult } from '../types/session';
|
|
15
16
|
import { ProcessEvent } from '../events/types';
|
|
16
17
|
/**
|
|
@@ -88,6 +89,10 @@ export declare class SemaCore {
|
|
|
88
89
|
deleteCronTask: (id: string) => boolean;
|
|
89
90
|
enableCronTask: (id: string) => boolean;
|
|
90
91
|
disableCronTask: (id: string) => boolean;
|
|
92
|
+
getUsageStats: (opts?: {
|
|
93
|
+
product?: string;
|
|
94
|
+
}) => Promise<UsageStatsData>;
|
|
95
|
+
clearUsageStats: (product: string) => Promise<void>;
|
|
91
96
|
dispose: () => Promise<void>;
|
|
92
97
|
}
|
|
93
98
|
//# sourceMappingURL=SemaCore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SemaCore.d.ts","sourceRoot":"","sources":["../../src/core/SemaCore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACtM,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAE1E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGpE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAQ7E,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C;;;GAGG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,aAAa,CAA8B;IACnD,uCAAuC;IACvC,OAAO,CAAC,aAAa,CAAoD;gBAE7D,MAAM,CAAC,EAAE,cAAc;
|
|
1
|
+
{"version":3,"file":"SemaCore.d.ts","sourceRoot":"","sources":["../../src/core/SemaCore.ts"],"names":[],"mappings":"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"}
|
package/dist/core/SemaCore.js
CHANGED
|
@@ -13,6 +13,7 @@ const hooksManager_1 = require("../services/hooks/hooksManager");
|
|
|
13
13
|
const designManager_1 = require("../services/design/designManager");
|
|
14
14
|
const TaskManager_1 = require("../manager/TaskManager");
|
|
15
15
|
const CronManager_1 = require("../manager/CronManager");
|
|
16
|
+
const UsageStatsManager_1 = require("../manager/UsageStatsManager");
|
|
16
17
|
const SessionPool_1 = require("./SessionPool");
|
|
17
18
|
const ConfManager_1 = require("../manager/ConfManager");
|
|
18
19
|
const ModelManager_1 = require("../manager/ModelManager");
|
|
@@ -150,6 +151,9 @@ class SemaCore {
|
|
|
150
151
|
this.deleteCronTask = (id) => (0, CronManager_1.getCronManager)().deleteTask(id);
|
|
151
152
|
this.enableCronTask = (id) => (0, CronManager_1.getCronManager)().enableTask(id);
|
|
152
153
|
this.disableCronTask = (id) => (0, CronManager_1.getCronManager)().disableTask(id);
|
|
154
|
+
// ==================== 使用统计(全局) ====================
|
|
155
|
+
this.getUsageStats = (opts) => (0, UsageStatsManager_1.getUsageStatsManager)().getUsageStats(opts);
|
|
156
|
+
this.clearUsageStats = (product) => (0, UsageStatsManager_1.getUsageStatsManager)().clearUsageStats(product);
|
|
153
157
|
// ==================== 资源管理(进程级) ====================
|
|
154
158
|
this.dispose = async () => {
|
|
155
159
|
// 摘除进程级事件监听器
|
|
@@ -157,6 +161,8 @@ class SemaCore {
|
|
|
157
161
|
this.procListeners = [];
|
|
158
162
|
// 关闭所有会话
|
|
159
163
|
(0, SessionPool_1.getSessionPool)().disposeAll();
|
|
164
|
+
// 使用统计:同步落盘并摘除监听(放在会话关闭之后,收尾期间的工具事件也能计入)
|
|
165
|
+
(0, UsageStatsManager_1.getUsageStatsManager)().dispose();
|
|
160
166
|
// 释放全局单例
|
|
161
167
|
(0, CronManager_1.getCronManager)().dispose();
|
|
162
168
|
(0, TaskManager_1.getTaskManager)().dispose();
|
|
@@ -173,6 +179,8 @@ class SemaCore {
|
|
|
173
179
|
(0, memManager_1.getMemoryManager)();
|
|
174
180
|
(0, rulesManager_1.getRuleManager)();
|
|
175
181
|
(0, hooksManager_1.getHooksManager)();
|
|
182
|
+
// 使用统计:usageProduct 未配置时 init 直接返回,不做任何采集
|
|
183
|
+
(0, UsageStatsManager_1.getUsageStatsManager)().init(config?.usageProduct);
|
|
176
184
|
});
|
|
177
185
|
(0, log_1.logInfo)(`初始化SemaCore: ${JSON.stringify(config, null, 2)}`);
|
|
178
186
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SemaCore.js","sourceRoot":"","sources":["../../src/core/SemaCore.ts"],"names":[],"mappings":";;;AAGA,qDAAyE;AACzE,uEAAuE;AAEvE,oEAAoE;AAEpE,oEAAoE;AAEpE,0EAA0E;AAE1E,2DAA2D;AAE3D,8DAAiE;AAEjE,iEAAgE;AAEhE,iEAAiE;AAEjE,oEAAoE;AAEpE,wDAAwD;AACxD,wDAAwD;
|
|
1
|
+
{"version":3,"file":"SemaCore.js","sourceRoot":"","sources":["../../src/core/SemaCore.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,5 +3,6 @@ export { SemaSession } from './core/SemaSession';
|
|
|
3
3
|
export type { ForkPreview, ForkFileChange, ForkFileEffect, ForkOptions, ForkResult, BranchResult, } from './types/fork';
|
|
4
4
|
export type { InputImageAttachment } from './types/message';
|
|
5
5
|
export type { Language } from './types/index';
|
|
6
|
+
export type { UsageStatsData } from './manager/UsageStatsManager';
|
|
6
7
|
export { SUPPORTED_LANGUAGES } from './types/index';
|
|
7
8
|
//# 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,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,YAAY,EACV,WAAW,EACX,cAAc,EACd,cAAc,EACd,WAAW,EACX,UAAU,EACV,YAAY,GACb,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,YAAY,EACV,WAAW,EACX,cAAc,EACd,cAAc,EACd,WAAW,EACX,UAAU,EACV,YAAY,GACb,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,YAAY,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,4CAA2C;AAAlC,oGAAA,QAAQ,OAAA;AACjB,kDAAiD;AAAxC,0GAAA,WAAW,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,4CAA2C;AAAlC,oGAAA,QAAQ,OAAA;AACjB,kDAAiD;AAAxC,0GAAA,WAAW,OAAA;AAYpB,uCAAoD;AAA3C,4GAAA,mBAAmB,OAAA"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
export interface UsageTokens {
|
|
2
|
+
hit: number;
|
|
3
|
+
miss: number;
|
|
4
|
+
output: number;
|
|
5
|
+
}
|
|
6
|
+
export interface UsageModelStat {
|
|
7
|
+
requests: number;
|
|
8
|
+
hitKnown: boolean;
|
|
9
|
+
tokens: UsageTokens;
|
|
10
|
+
}
|
|
11
|
+
export interface UsageToolStat {
|
|
12
|
+
calls: number;
|
|
13
|
+
errors: number;
|
|
14
|
+
}
|
|
15
|
+
export interface UsageSkillStat {
|
|
16
|
+
calls: number;
|
|
17
|
+
lastAt: number;
|
|
18
|
+
}
|
|
19
|
+
export interface UsageDayData {
|
|
20
|
+
requests: number;
|
|
21
|
+
tokens: UsageTokens;
|
|
22
|
+
models: Record<string, UsageModelStat>;
|
|
23
|
+
tools: Record<string, UsageToolStat>;
|
|
24
|
+
skills: Record<string, UsageSkillStat>;
|
|
25
|
+
sessions: string[];
|
|
26
|
+
}
|
|
27
|
+
export interface UsageTotals {
|
|
28
|
+
requests: number;
|
|
29
|
+
tokens: UsageTokens;
|
|
30
|
+
sessions: number;
|
|
31
|
+
days: number;
|
|
32
|
+
}
|
|
33
|
+
export interface UsageStatsData {
|
|
34
|
+
since: string | null;
|
|
35
|
+
updatedAt: number;
|
|
36
|
+
totals: UsageTotals;
|
|
37
|
+
days: Record<string, UsageDayData>;
|
|
38
|
+
}
|
|
39
|
+
export interface RecordLlmParams {
|
|
40
|
+
model: string;
|
|
41
|
+
inputTokens: number;
|
|
42
|
+
outputTokens: number;
|
|
43
|
+
cacheReadTokens?: number;
|
|
44
|
+
sessionId?: string;
|
|
45
|
+
}
|
|
46
|
+
export declare class UsageStatsManager {
|
|
47
|
+
private product;
|
|
48
|
+
private ledger;
|
|
49
|
+
private flushTimer;
|
|
50
|
+
private listeners;
|
|
51
|
+
init(product: string | undefined): void;
|
|
52
|
+
dispose(): void;
|
|
53
|
+
recordLlm(params: RecordLlmParams): void;
|
|
54
|
+
private recordTool;
|
|
55
|
+
private get statsDir();
|
|
56
|
+
private productDir;
|
|
57
|
+
private scheduleFlush;
|
|
58
|
+
private clearTimer;
|
|
59
|
+
/** 取出并清空账本,返回待写的一行;账本为空返回 null */
|
|
60
|
+
private takeLine;
|
|
61
|
+
private flushAsync;
|
|
62
|
+
private flushSync;
|
|
63
|
+
/** stats/ 下的产品子目录(只取名字合法的目录),目录不存在返回空 */
|
|
64
|
+
private listProducts;
|
|
65
|
+
/** 某产品目录下的日文件,按日期升序;目录不存在返回空 */
|
|
66
|
+
private listDayFiles;
|
|
67
|
+
private readLines;
|
|
68
|
+
/** 先写临时文件再 rename 覆盖,失败时清理临时文件并抛出 */
|
|
69
|
+
private writeFileAtomic;
|
|
70
|
+
/** 把每个产品目录下早于今天且多于一行的文件合并成一行;多进程同时压缩产出相同内容,无需加锁 */
|
|
71
|
+
private compactOldFiles;
|
|
72
|
+
getUsageStats(opts?: {
|
|
73
|
+
product?: string;
|
|
74
|
+
}): Promise<UsageStatsData>;
|
|
75
|
+
/** 删除该产品的统计目录;产品为本进程产品时同时清内存账本 */
|
|
76
|
+
clearUsageStats(product: string): Promise<void>;
|
|
77
|
+
}
|
|
78
|
+
export declare function getUsageStatsManager(): UsageStatsManager;
|
|
79
|
+
//# sourceMappingURL=UsageStatsManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UsageStatsManager.d.ts","sourceRoot":"","sources":["../../src/manager/UsageStatsManager.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,WAAW,CAAA;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,WAAW,CAAA;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IACtC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IACtC,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,WAAW,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,WAAW,CAAA;IACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;CACnC;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AA4FD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,UAAU,CAA6C;IAC/D,OAAO,CAAC,SAAS,CAA6C;IAI9D,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAmBvC,OAAO,IAAI,IAAI;IAWf,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAgBxC,OAAO,CAAC,UAAU;IAelB,OAAO,KAAK,QAAQ,GAEnB;IAED,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,UAAU;IAOlB,kCAAkC;IAClC,OAAO,CAAC,QAAQ;YASF,UAAU;IAWxB,OAAO,CAAC,SAAS;IAajB,yCAAyC;YAC3B,YAAY;IAU1B,gCAAgC;YAClB,YAAY;YAeZ,SAAS;IASvB,qCAAqC;YACvB,eAAe;IAa7B,mDAAmD;YACrC,eAAe;IAyBvB,aAAa,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IA0CzE,kCAAkC;IAC5B,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAetD;AAKD,wBAAgB,oBAAoB,IAAI,iBAAiB,CAKxD"}
|
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.UsageStatsManager = void 0;
|
|
37
|
+
exports.getUsageStatsManager = getUsageStatsManager;
|
|
38
|
+
/**
|
|
39
|
+
* 使用统计管理器
|
|
40
|
+
* 只记计数与 id(模型名 / 工具名 / skill 名 / sessionId),不存任何对话内容、路径、入参。
|
|
41
|
+
* usageProduct 未配置时完全不工作:不建目录、不注册监听、不起定时器。
|
|
42
|
+
*
|
|
43
|
+
* 落盘:内存只持"上次落盘后的增量"账本,账本从空变非空后 USAGE_STATS_FLUSH_INTERVAL 到点
|
|
44
|
+
* 序列化成一行追加到 <semaRoot>/stats/<product>/YYYY-MM-DD.jsonl;dispose 时同步落盘。
|
|
45
|
+
* 目录:每个产品一个子目录,product 须为字母数字 ._- 组成的简单名字;清除某产品即删除其目录。
|
|
46
|
+
* 压缩:初始化时把早于今天且多于一行的文件合并成一行。
|
|
47
|
+
*/
|
|
48
|
+
const fs = __importStar(require("fs"));
|
|
49
|
+
const path = __importStar(require("path"));
|
|
50
|
+
const EventSystem_1 = require("../events/EventSystem");
|
|
51
|
+
const config_1 = require("../conf/config");
|
|
52
|
+
const savePath_1 = require("../util/savePath");
|
|
53
|
+
const time_1 = require("../util/time");
|
|
54
|
+
const tool_1 = require("../prompt/tool");
|
|
55
|
+
const log_1 = require("../util/log");
|
|
56
|
+
const DAY_FILE_RE = /^(\d{4}-\d{2}-\d{2})\.jsonl$/;
|
|
57
|
+
const DAYS_WINDOW = 366;
|
|
58
|
+
/** 产品标识用作目录名:只允许字母数字 ._-,且不能以 . 开头(排除 . / .. / 隐藏目录 / 路径分隔符) */
|
|
59
|
+
const PRODUCT_RE = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
|
|
60
|
+
function isValidProduct(product) {
|
|
61
|
+
return !!product && PRODUCT_RE.test(product);
|
|
62
|
+
}
|
|
63
|
+
function emptyTokens() {
|
|
64
|
+
return { hit: 0, miss: 0, output: 0 };
|
|
65
|
+
}
|
|
66
|
+
function emptyLedger() {
|
|
67
|
+
return { requests: 0, tokens: emptyTokens(), models: {}, tools: {}, skills: {}, sessions: new Set() };
|
|
68
|
+
}
|
|
69
|
+
function addTokens(target, src) {
|
|
70
|
+
target.hit += src.hit || 0;
|
|
71
|
+
target.miss += src.miss || 0;
|
|
72
|
+
target.output += src.output || 0;
|
|
73
|
+
}
|
|
74
|
+
/** 把一行数据合并进账本(数值相加、sessions 去重、lastAt 取大、hitKnown 取或) */
|
|
75
|
+
function mergeInto(target, src) {
|
|
76
|
+
target.requests += src.requests || 0;
|
|
77
|
+
addTokens(target.tokens, src.tokens || emptyTokens());
|
|
78
|
+
for (const [name, m] of Object.entries(src.models || {})) {
|
|
79
|
+
const cur = target.models[name] ?? (target.models[name] = { requests: 0, hitKnown: false, tokens: emptyTokens() });
|
|
80
|
+
cur.requests += m.requests || 0;
|
|
81
|
+
cur.hitKnown = cur.hitKnown || !!m.hitKnown;
|
|
82
|
+
addTokens(cur.tokens, m.tokens || emptyTokens());
|
|
83
|
+
}
|
|
84
|
+
for (const [name, t] of Object.entries(src.tools || {})) {
|
|
85
|
+
const cur = target.tools[name] ?? (target.tools[name] = { calls: 0, errors: 0 });
|
|
86
|
+
cur.calls += t.calls || 0;
|
|
87
|
+
cur.errors += t.errors || 0;
|
|
88
|
+
}
|
|
89
|
+
for (const [name, s] of Object.entries(src.skills || {})) {
|
|
90
|
+
const cur = target.skills[name] ?? (target.skills[name] = { calls: 0, lastAt: 0 });
|
|
91
|
+
cur.calls += s.calls || 0;
|
|
92
|
+
cur.lastAt = Math.max(cur.lastAt, s.lastAt || 0);
|
|
93
|
+
}
|
|
94
|
+
for (const id of src.sessions || [])
|
|
95
|
+
target.sessions.add(id);
|
|
96
|
+
}
|
|
97
|
+
function ledgerToDay(ledger) {
|
|
98
|
+
return {
|
|
99
|
+
requests: ledger.requests,
|
|
100
|
+
tokens: ledger.tokens,
|
|
101
|
+
models: ledger.models,
|
|
102
|
+
tools: ledger.tools,
|
|
103
|
+
skills: ledger.skills,
|
|
104
|
+
sessions: [...ledger.sessions],
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
function parseLines(content) {
|
|
108
|
+
const lines = [];
|
|
109
|
+
for (const raw of content.split('\n')) {
|
|
110
|
+
const line = raw.trim();
|
|
111
|
+
if (!line)
|
|
112
|
+
continue;
|
|
113
|
+
try {
|
|
114
|
+
const obj = JSON.parse(line);
|
|
115
|
+
if (obj && typeof obj === 'object' && typeof obj.t === 'number')
|
|
116
|
+
lines.push(obj);
|
|
117
|
+
}
|
|
118
|
+
catch (e) {
|
|
119
|
+
(0, log_1.logError)(`使用统计行解析失败,已跳过: ${e}`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return lines;
|
|
123
|
+
}
|
|
124
|
+
function isENOENT(e) {
|
|
125
|
+
return !!e && typeof e === 'object' && e.code === 'ENOENT';
|
|
126
|
+
}
|
|
127
|
+
// ==================== 管理器 ====================
|
|
128
|
+
class UsageStatsManager {
|
|
129
|
+
constructor() {
|
|
130
|
+
this.product = '';
|
|
131
|
+
this.ledger = emptyLedger();
|
|
132
|
+
this.flushTimer = null;
|
|
133
|
+
this.listeners = [];
|
|
134
|
+
}
|
|
135
|
+
// ============ 生命周期 ============
|
|
136
|
+
init(product) {
|
|
137
|
+
if (!product)
|
|
138
|
+
return;
|
|
139
|
+
if (!isValidProduct(product)) {
|
|
140
|
+
(0, log_1.logError)(`使用统计已禁用:usageProduct "${product}" 不是合法目录名(只允许字母数字 ._-,不能以 . 开头)`);
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
this.product = product;
|
|
144
|
+
const onComplete = (data) => this.recordTool(data.toolName, data.title, false);
|
|
145
|
+
const onError = (data) => this.recordTool(data.toolName, data.title, true);
|
|
146
|
+
const bus = (0, EventSystem_1.getEventBus)();
|
|
147
|
+
bus.on('tool:execution:complete', onComplete, null);
|
|
148
|
+
bus.on('tool:execution:error', onError, null);
|
|
149
|
+
this.listeners = [
|
|
150
|
+
{ event: 'tool:execution:complete', fn: onComplete },
|
|
151
|
+
{ event: 'tool:execution:error', fn: onError },
|
|
152
|
+
];
|
|
153
|
+
this.compactOldFiles().catch(e => (0, log_1.logError)(`使用统计压缩失败: ${e}`));
|
|
154
|
+
}
|
|
155
|
+
dispose() {
|
|
156
|
+
if (!this.product)
|
|
157
|
+
return;
|
|
158
|
+
this.flushSync();
|
|
159
|
+
const bus = (0, EventSystem_1.getEventBus)();
|
|
160
|
+
this.listeners.forEach(({ event, fn }) => bus.off(event, fn));
|
|
161
|
+
this.listeners = [];
|
|
162
|
+
this.product = '';
|
|
163
|
+
}
|
|
164
|
+
// ============ 采集(热路径只做内存加法) ============
|
|
165
|
+
recordLlm(params) {
|
|
166
|
+
if (!this.product)
|
|
167
|
+
return;
|
|
168
|
+
const { model, inputTokens, outputTokens, cacheReadTokens, sessionId } = params;
|
|
169
|
+
const hit = cacheReadTokens ?? 0;
|
|
170
|
+
const delta = { hit, miss: inputTokens - hit, output: outputTokens };
|
|
171
|
+
this.ledger.requests += 1;
|
|
172
|
+
addTokens(this.ledger.tokens, delta);
|
|
173
|
+
const m = this.ledger.models[model] ?? (this.ledger.models[model] = { requests: 0, hitKnown: false, tokens: emptyTokens() });
|
|
174
|
+
m.requests += 1;
|
|
175
|
+
if (cacheReadTokens !== undefined)
|
|
176
|
+
m.hitKnown = true;
|
|
177
|
+
addTokens(m.tokens, delta);
|
|
178
|
+
if (sessionId)
|
|
179
|
+
this.ledger.sessions.add(sessionId);
|
|
180
|
+
this.scheduleFlush();
|
|
181
|
+
}
|
|
182
|
+
recordTool(toolName, title, isError) {
|
|
183
|
+
if (!this.product)
|
|
184
|
+
return;
|
|
185
|
+
const t = this.ledger.tools[toolName] ?? (this.ledger.tools[toolName] = { calls: 0, errors: 0 });
|
|
186
|
+
t.calls += 1;
|
|
187
|
+
if (isError)
|
|
188
|
+
t.errors += 1;
|
|
189
|
+
if (toolName === tool_1.TOOL_NAME_SKILL && title) {
|
|
190
|
+
const s = this.ledger.skills[title] ?? (this.ledger.skills[title] = { calls: 0, lastAt: 0 });
|
|
191
|
+
s.calls += 1;
|
|
192
|
+
s.lastAt = Date.now();
|
|
193
|
+
}
|
|
194
|
+
this.scheduleFlush();
|
|
195
|
+
}
|
|
196
|
+
// ============ 落盘 ============
|
|
197
|
+
get statsDir() {
|
|
198
|
+
return path.join((0, savePath_1.getSemaRootDir)(), config_1.STATS_DIR_PATH);
|
|
199
|
+
}
|
|
200
|
+
productDir(product) {
|
|
201
|
+
return path.join(this.statsDir, product);
|
|
202
|
+
}
|
|
203
|
+
scheduleFlush() {
|
|
204
|
+
if (this.flushTimer)
|
|
205
|
+
return;
|
|
206
|
+
this.flushTimer = setTimeout(() => {
|
|
207
|
+
this.flushTimer = null;
|
|
208
|
+
this.flushAsync().catch(e => (0, log_1.logError)(`使用统计落盘失败: ${e}`));
|
|
209
|
+
}, config_1.USAGE_STATS_FLUSH_INTERVAL);
|
|
210
|
+
if (this.flushTimer.unref)
|
|
211
|
+
this.flushTimer.unref();
|
|
212
|
+
}
|
|
213
|
+
clearTimer() {
|
|
214
|
+
if (this.flushTimer) {
|
|
215
|
+
clearTimeout(this.flushTimer);
|
|
216
|
+
this.flushTimer = null;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
/** 取出并清空账本,返回待写的一行;账本为空返回 null */
|
|
220
|
+
takeLine() {
|
|
221
|
+
this.clearTimer();
|
|
222
|
+
if (this.ledger.requests === 0 && Object.keys(this.ledger.tools).length === 0)
|
|
223
|
+
return null;
|
|
224
|
+
const line = { t: Date.now(), ...ledgerToDay(this.ledger) };
|
|
225
|
+
this.ledger = emptyLedger();
|
|
226
|
+
const dir = this.productDir(this.product);
|
|
227
|
+
return { dir, file: path.join(dir, `${(0, time_1.getDayTimeString)()}.jsonl`), line: JSON.stringify(line) + '\n' };
|
|
228
|
+
}
|
|
229
|
+
async flushAsync() {
|
|
230
|
+
const pending = this.takeLine();
|
|
231
|
+
if (!pending)
|
|
232
|
+
return;
|
|
233
|
+
try {
|
|
234
|
+
await fs.promises.mkdir(pending.dir, { recursive: true });
|
|
235
|
+
await fs.promises.appendFile(pending.file, pending.line, 'utf8');
|
|
236
|
+
}
|
|
237
|
+
catch (e) {
|
|
238
|
+
(0, log_1.logError)(`使用统计落盘失败: ${e}`);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
flushSync() {
|
|
242
|
+
const pending = this.takeLine();
|
|
243
|
+
if (!pending)
|
|
244
|
+
return;
|
|
245
|
+
try {
|
|
246
|
+
fs.mkdirSync(pending.dir, { recursive: true });
|
|
247
|
+
fs.appendFileSync(pending.file, pending.line, 'utf8');
|
|
248
|
+
}
|
|
249
|
+
catch (e) {
|
|
250
|
+
(0, log_1.logError)(`使用统计落盘失败: ${e}`);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
// ============ 列举 / 读取文件 ============
|
|
254
|
+
/** stats/ 下的产品子目录(只取名字合法的目录),目录不存在返回空 */
|
|
255
|
+
async listProducts() {
|
|
256
|
+
try {
|
|
257
|
+
const entries = await fs.promises.readdir(this.statsDir, { withFileTypes: true });
|
|
258
|
+
return entries.filter(e => e.isDirectory() && isValidProduct(e.name)).map(e => e.name).sort();
|
|
259
|
+
}
|
|
260
|
+
catch (e) {
|
|
261
|
+
if (isENOENT(e))
|
|
262
|
+
return [];
|
|
263
|
+
throw e;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/** 某产品目录下的日文件,按日期升序;目录不存在返回空 */
|
|
267
|
+
async listDayFiles(product) {
|
|
268
|
+
const dir = this.productDir(product);
|
|
269
|
+
let names;
|
|
270
|
+
try {
|
|
271
|
+
names = await fs.promises.readdir(dir);
|
|
272
|
+
}
|
|
273
|
+
catch (e) {
|
|
274
|
+
if (isENOENT(e))
|
|
275
|
+
return [];
|
|
276
|
+
throw e;
|
|
277
|
+
}
|
|
278
|
+
return names
|
|
279
|
+
.map(n => ({ day: DAY_FILE_RE.exec(n)?.[1] ?? '', file: path.join(dir, n) }))
|
|
280
|
+
.filter(f => f.day)
|
|
281
|
+
.sort((a, b) => a.day.localeCompare(b.day));
|
|
282
|
+
}
|
|
283
|
+
async readLines(file) {
|
|
284
|
+
try {
|
|
285
|
+
return parseLines(await fs.promises.readFile(file, 'utf8'));
|
|
286
|
+
}
|
|
287
|
+
catch (e) {
|
|
288
|
+
if (!isENOENT(e))
|
|
289
|
+
(0, log_1.logError)(`使用统计读取失败 ${path.basename(file)}: ${e}`);
|
|
290
|
+
return [];
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
/** 先写临时文件再 rename 覆盖,失败时清理临时文件并抛出 */
|
|
294
|
+
async writeFileAtomic(file, content) {
|
|
295
|
+
const tmp = `${file}.${process.pid}.tmp`;
|
|
296
|
+
try {
|
|
297
|
+
await fs.promises.writeFile(tmp, content, 'utf8');
|
|
298
|
+
await fs.promises.rename(tmp, file);
|
|
299
|
+
}
|
|
300
|
+
catch (e) {
|
|
301
|
+
await fs.promises.unlink(tmp).catch(() => { });
|
|
302
|
+
throw e;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
// ============ 压缩 ============
|
|
306
|
+
/** 把每个产品目录下早于今天且多于一行的文件合并成一行;多进程同时压缩产出相同内容,无需加锁 */
|
|
307
|
+
async compactOldFiles() {
|
|
308
|
+
const today = (0, time_1.getDayTimeString)();
|
|
309
|
+
for (const product of await this.listProducts()) {
|
|
310
|
+
for (const { day, file } of await this.listDayFiles(product)) {
|
|
311
|
+
if (day >= today)
|
|
312
|
+
continue;
|
|
313
|
+
const lines = await this.readLines(file);
|
|
314
|
+
if (lines.length <= 1)
|
|
315
|
+
continue;
|
|
316
|
+
const ledger = emptyLedger();
|
|
317
|
+
let maxT = 0;
|
|
318
|
+
for (const l of lines) {
|
|
319
|
+
mergeInto(ledger, l);
|
|
320
|
+
maxT = Math.max(maxT, l.t || 0);
|
|
321
|
+
}
|
|
322
|
+
const merged = JSON.stringify({ t: maxT, ...ledgerToDay(ledger) }) + '\n';
|
|
323
|
+
try {
|
|
324
|
+
await this.writeFileAtomic(file, merged);
|
|
325
|
+
}
|
|
326
|
+
catch (e) {
|
|
327
|
+
(0, log_1.logError)(`使用统计压缩失败 ${product}/${path.basename(file)}: ${e}`);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
// ============ 读取 / 清空 ============
|
|
333
|
+
async getUsageStats(opts) {
|
|
334
|
+
// 先把内存增量落盘,避免漏掉最近 10 秒的数据
|
|
335
|
+
if (this.product)
|
|
336
|
+
await this.flushAsync();
|
|
337
|
+
const filter = opts?.product;
|
|
338
|
+
const totals = { requests: 0, tokens: emptyTokens(), sessions: 0, days: 0 };
|
|
339
|
+
const days = {};
|
|
340
|
+
if (filter !== undefined && !isValidProduct(filter)) {
|
|
341
|
+
return { since: null, updatedAt: Date.now(), totals, days };
|
|
342
|
+
}
|
|
343
|
+
// 先按天聚合:同一天可能分布在多个产品目录
|
|
344
|
+
const byDay = new Map();
|
|
345
|
+
for (const product of filter ? [filter] : await this.listProducts()) {
|
|
346
|
+
for (const { day, file } of await this.listDayFiles(product)) {
|
|
347
|
+
const lines = await this.readLines(file);
|
|
348
|
+
if (lines.length === 0)
|
|
349
|
+
continue;
|
|
350
|
+
const ledger = byDay.get(day) ?? emptyLedger();
|
|
351
|
+
for (const l of lines)
|
|
352
|
+
mergeInto(ledger, l);
|
|
353
|
+
byDay.set(day, ledger);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
const today = new Date();
|
|
357
|
+
const cutoff = new Date(today.getFullYear(), today.getMonth(), today.getDate() - DAYS_WINDOW);
|
|
358
|
+
const cutoffDay = `${cutoff.getFullYear()}-${String(cutoff.getMonth() + 1).padStart(2, '0')}-${String(cutoff.getDate()).padStart(2, '0')}`;
|
|
359
|
+
const allSessions = new Set();
|
|
360
|
+
let since = null;
|
|
361
|
+
for (const day of [...byDay.keys()].sort()) {
|
|
362
|
+
const ledger = byDay.get(day);
|
|
363
|
+
if (since === null)
|
|
364
|
+
since = day;
|
|
365
|
+
totals.days += 1;
|
|
366
|
+
totals.requests += ledger.requests;
|
|
367
|
+
addTokens(totals.tokens, ledger.tokens);
|
|
368
|
+
ledger.sessions.forEach(id => allSessions.add(id));
|
|
369
|
+
if (day > cutoffDay)
|
|
370
|
+
days[day] = ledgerToDay(ledger);
|
|
371
|
+
}
|
|
372
|
+
totals.sessions = allSessions.size;
|
|
373
|
+
return { since, updatedAt: Date.now(), totals, days };
|
|
374
|
+
}
|
|
375
|
+
/** 删除该产品的统计目录;产品为本进程产品时同时清内存账本 */
|
|
376
|
+
async clearUsageStats(product) {
|
|
377
|
+
if (!isValidProduct(product)) {
|
|
378
|
+
(0, log_1.logError)(`使用统计清空失败:product "${product}" 不是合法目录名`);
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
if (product === this.product) {
|
|
382
|
+
this.clearTimer();
|
|
383
|
+
this.ledger = emptyLedger();
|
|
384
|
+
}
|
|
385
|
+
try {
|
|
386
|
+
await fs.promises.rm(this.productDir(product), { recursive: true, force: true });
|
|
387
|
+
}
|
|
388
|
+
catch (e) {
|
|
389
|
+
(0, log_1.logError)(`使用统计清空失败 ${product}: ${e}`);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
exports.UsageStatsManager = UsageStatsManager;
|
|
394
|
+
// 单例
|
|
395
|
+
let instance = null;
|
|
396
|
+
function getUsageStatsManager() {
|
|
397
|
+
if (!instance) {
|
|
398
|
+
instance = new UsageStatsManager();
|
|
399
|
+
}
|
|
400
|
+
return instance;
|
|
401
|
+
}
|
|
402
|
+
//# sourceMappingURL=UsageStatsManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UsageStatsManager.js","sourceRoot":"","sources":["../../src/manager/UsageStatsManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const INPUT_PREDICT_SYSTEM_PROMPT = "Output contract: your ENTIRE reply MUST be exactly one tag and nothing else \u2014 <predict>the predicted user message</predict> or <none/>. No text before or after it.\n\nYou are an input-prediction assistant for a coding agent's chat UI. The user message is a compact transcript of the conversation so far, one item per line: lines starting with \"User:\" are the human's messages; lines starting with \"Assistant:\" are the agent's replies (may be truncated); other lines are tool actions the agent performed (e.g. \"run_shell <command>\"). The agent has just finished its turn. Your job: predict the single most likely NEXT message the human would type, so the UI can pre-fill it as a suggestion.\n\nPredict a message ONLY when there is a clear, high-probability continuation, such as:\n- The assistant asked a question or offered options \u2192 predict the user's most likely answer or choice\n- The assistant proposed a plan or asked for confirmation \u2192 predict the likely approval (e.g. following the user's usual phrasing)\n- The assistant finished one step of a clearly multi-step task \u2192 predict the instruction for the obvious next step\n- The assistant reported an error or blocker with an obvious fix the user would request\n- The assistant told the user exactly what to reply to proceed (e.g. \"reply 'submit' to confirm\") \u2192 predict that reply, even if the assistant also raised caveats or listed alternatives; the user can still edit the suggestion\n\nReply <none/> when the user is unlikely to send another message, such as:\n- The task is fully completed and wrapped up, with no open question or pending decision\n- The next input is unguessable: several directions are about equally likely and none is the default path the assistant set up\n\nRules for the predicted message:\n- Write it in the human's voice, as if they typed it themselves \u2014 an instruction or answer TO the agent, never a reply FROM the agent\n- Use the same language the human has been writing in (a transcript in another language gets a prediction in that language)\n- Keep it short: one sentence, no trailing punctuation-heavy prose, no explanations\n- Never invent file names or requirements that the transcript does not support\n\nExamples (transcript gist \u2192 your reply):\nAssistant asked \"Should I apply the same change to the Java SDK?\"\n<predict>Yes, apply it to the Java SDK</predict>\n\nAssistant finished a refactor and reported all tests passing, nothing pending\n<none/>\n\nAssistant listed 3 candidate approaches and asked which to use\n<predict>Go with the first approach</predict>\n\n## Output format\nYour ENTIRE response MUST be exactly one of these two forms, and start with \"<predict>\" or \"<none/>\":\n<predict>predicted user message</predict>\n<none/>\nNo preamble, no analysis, no reasoning \u2014 nothing before or after the tag.";
|
|
1
|
+
export declare const INPUT_PREDICT_SYSTEM_PROMPT = "Output contract: your ENTIRE reply MUST be exactly one tag and nothing else \u2014 <predict>the predicted user message</predict> or <none/>. No text before or after it.\n\nYou are an input-prediction assistant for a coding agent's chat UI. The user message is a compact transcript of the conversation so far, one item per line: lines starting with \"User:\" are the human's messages; lines starting with \"Assistant:\" are the agent's replies (may be truncated); other lines are tool actions the agent performed (e.g. \"run_shell <command>\"). The agent has just finished its turn. Your job: predict the single most likely NEXT message the human would type, so the UI can pre-fill it as a suggestion.\n\nPredict a message ONLY when there is a clear, high-probability continuation, such as:\n- The assistant asked a question or offered options \u2192 predict the user's most likely answer or choice\n- The assistant proposed a plan or asked for confirmation \u2192 predict the likely approval (e.g. following the user's usual phrasing)\n- The assistant finished one step of a clearly multi-step task \u2192 predict the instruction for the obvious next step\n- The assistant reported an error or blocker with an obvious fix the user would request\n- The assistant told the user exactly what to reply to proceed (e.g. \"reply 'submit' to confirm\") \u2192 predict that reply, even if the assistant also raised caveats or listed alternatives; the user can still edit the suggestion\n\nReply <none/> when the user is unlikely to send another message, such as:\n- The task is fully completed and wrapped up, with no open question or pending decision\n- The next input is unguessable: several directions are about equally likely and none is the default path the assistant set up\n- The conversation is just greetings, small talk, or an open-ended \"what can I help with?\" \u2014 there is no task on the table yet, so the next message cannot be inferred from the transcript\n\nRules for the predicted message:\n- Write it in the human's voice, as if they typed it themselves \u2014 an instruction or answer TO the agent, never a reply FROM the agent\n- Use the same language the human has been writing in (a transcript in another language gets a prediction in that language)\n- Keep it short: one sentence, no trailing punctuation-heavy prose, no explanations\n- Never invent file names or requirements that the transcript does not support\n- Never invent a brand-new task the human has not asked for; a prediction may extend the current task to its obvious next step, but must not start an unrelated one\n\nExamples (transcript gist \u2192 your reply):\nAssistant asked \"Should I apply the same change to the Java SDK?\"\n<predict>Yes, apply it to the Java SDK</predict>\n\nAssistant finished a refactor and reported all tests passing, nothing pending\n<none/>\n\nAssistant listed 3 candidate approaches and asked which to use\n<predict>Go with the first approach</predict>\n\n## Output format\nYour ENTIRE response MUST be exactly one of these two forms, and start with \"<predict>\" or \"<none/>\":\n<predict>predicted user message</predict>\n<none/>\nNo preamble, no analysis, no reasoning \u2014 nothing before or after the tag.";
|
|
2
2
|
//# sourceMappingURL=inputPredict.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputPredict.d.ts","sourceRoot":"","sources":["../../src/prompt/inputPredict.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,2BAA2B,
|
|
1
|
+
{"version":3,"file":"inputPredict.d.ts","sourceRoot":"","sources":["../../src/prompt/inputPredict.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,2BAA2B,gqGAqCkC,CAAA"}
|
|
@@ -18,12 +18,14 @@ Predict a message ONLY when there is a clear, high-probability continuation, suc
|
|
|
18
18
|
Reply <none/> when the user is unlikely to send another message, such as:
|
|
19
19
|
- The task is fully completed and wrapped up, with no open question or pending decision
|
|
20
20
|
- The next input is unguessable: several directions are about equally likely and none is the default path the assistant set up
|
|
21
|
+
- The conversation is just greetings, small talk, or an open-ended "what can I help with?" — there is no task on the table yet, so the next message cannot be inferred from the transcript
|
|
21
22
|
|
|
22
23
|
Rules for the predicted message:
|
|
23
24
|
- Write it in the human's voice, as if they typed it themselves — an instruction or answer TO the agent, never a reply FROM the agent
|
|
24
25
|
- Use the same language the human has been writing in (a transcript in another language gets a prediction in that language)
|
|
25
26
|
- Keep it short: one sentence, no trailing punctuation-heavy prose, no explanations
|
|
26
27
|
- Never invent file names or requirements that the transcript does not support
|
|
28
|
+
- Never invent a brand-new task the human has not asked for; a prediction may extend the current task to its obvious next step, but must not start an unrelated one
|
|
27
29
|
|
|
28
30
|
Examples (transcript gist → your reply):
|
|
29
31
|
Assistant asked "Should I apply the same change to the Java SDK?"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputPredict.js","sourceRoot":"","sources":["../../src/prompt/inputPredict.ts"],"names":[],"mappings":";;;AAAA,gDAAgD;AAChD,2EAA2E;AAC3E,6CAA6C;AAChC,QAAA,2BAA2B,GAAG
|
|
1
|
+
{"version":3,"file":"inputPredict.js","sourceRoot":"","sources":["../../src/prompt/inputPredict.ts"],"names":[],"mappings":";;;AAAA,gDAAgD;AAChD,2EAA2E;AAC3E,6CAA6C;AAChC,QAAA,2BAA2B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0EAqC+B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryLLM.d.ts","sourceRoot":"","sources":["../../../src/services/api/queryLLM.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"queryLLM.d.ts","sourceRoot":"","sources":["../../../src/services/api/queryLLM.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAUpD,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAY5C,iCAAiC;AACjC,MAAM,WAAW,eAAe;IAC9B,qBAAqB;IACrB,YAAY,CAAC,EAAE,gBAAgB,CAAA;IAC/B,oBAAoB;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,aAAa;IACb,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,kBAAkB;IAClB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,sBAAsB;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,CAAC,OAAO,GAAG,SAAS,CAAC,EAAE,EACjC,mBAAmB,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAC1D,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,IAAI,EAAE,EACb,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,SAAS,CAAC,CAmGpB;AAsFD,wBAAsB,UAAU,CAAC,EAC/B,YAAiB,EACjB,UAAU,EACV,MAAM,EACN,SAAS,GACV,EAAE;IACD,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACpD,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,cAAc,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,GAAG,OAAO,CAAC,SAAS,CAAC,CAyBrB"}
|
|
@@ -5,6 +5,8 @@ exports.queryQuick = queryQuick;
|
|
|
5
5
|
const crypto_1 = require("crypto");
|
|
6
6
|
const ModelManager_1 = require("../../manager/ModelManager");
|
|
7
7
|
const ConfManager_1 = require("../../manager/ConfManager");
|
|
8
|
+
const UsageStatsManager_1 = require("../../manager/UsageStatsManager");
|
|
9
|
+
const tokens_1 = require("../../util/tokens");
|
|
8
10
|
const log_1 = require("../../util/log");
|
|
9
11
|
const logLLM_1 = require("../../util/logLLM");
|
|
10
12
|
const EventSystem_1 = require("../../events/EventSystem");
|
|
@@ -52,6 +54,17 @@ async function queryLLM(messages, systemPromptContent, signal, tools, options =
|
|
|
52
54
|
break;
|
|
53
55
|
}
|
|
54
56
|
(0, logLLM_1.logLLMResponse)(result, sessionId);
|
|
57
|
+
// 使用统计:只记计数,usageProduct 未配置时 recordLlm 直接返回
|
|
58
|
+
const tokenCount = (0, tokens_1.countTokens)([result]);
|
|
59
|
+
if (tokenCount.index >= 0) {
|
|
60
|
+
(0, UsageStatsManager_1.getUsageStatsManager)().recordLlm({
|
|
61
|
+
model: modelProfile.name,
|
|
62
|
+
inputTokens: tokenCount.inputTokens,
|
|
63
|
+
outputTokens: tokenCount.outputTokens,
|
|
64
|
+
cacheReadTokens: tokenCount.cacheReadTokens,
|
|
65
|
+
sessionId,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
55
68
|
// 检测空响应:既没有文本内容,也没有工具调用(统一在这里处理)
|
|
56
69
|
if (!signal.aborted && result.message.content.length === 0) {
|
|
57
70
|
(0, log_1.logError)(`API返回空响应: messageId=${result.message.id}, model=${modelProfile.modelName}, stopReason=${result.message.stop_reason}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryLLM.js","sourceRoot":"","sources":["../../../src/services/api/queryLLM.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"queryLLM.js","sourceRoot":"","sources":["../../../src/services/api/queryLLM.ts"],"names":[],"mappings":";;AAsCA,4BAyGC;AAsFD,gCAoCC;AAzQD,mCAAmC;AAGnC,6DAA4D;AAC5D,2DAA0D;AAC1D,uEAAsE;AACtE,8CAA+C;AAC/C,wCAAmD;AACnD,8CAAiE;AACjE,0DAAsD;AAEtD,mCAA+E;AAE/E,0CAAmC;AAEnC,QAAQ;AACR,2CAA4C;AAC5C,iDAAkD;AAClD,uCAAyD;AAoBlD,KAAK,UAAU,QAAQ,CAC5B,QAAiC,EACjC,mBAA0D,EAC1D,MAAmB,EACnB,KAAa,EACb,UAA2B,EAAE;IAE7B,MAAM,EACJ,YAAY,GAAG,MAAM,EACrB,kBAAkB,GAAG,KAAK,EAC1B,kBAAkB,GAAG,KAAK,EAC1B,eAAe,GAAG,KAAK,EACvB,SAAS,GACV,GAAG,OAAO,CAAA;IAEX,iEAAiE;IACjE,MAAM,YAAY,GAAG,IAAA,8BAAe,GAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;IAExE,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,IAAA,QAAC,EAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,GAAG,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,aAAa,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;IACvH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAA,4BAAc,GAAE,CAAC,aAAa,EAAE,CAAA;QACnD,MAAM,cAAc,GAAG,UAAU,EAAE,cAAc,CAAA,CAAE,QAAQ;QAC3D,MAAM,YAAY,GAAG,UAAU,EAAE,MAAM,KAAK,KAAK,CAAA,CAAE,OAAO;QAC1D,MAAM,cAAc,GAAG,CAAC,eAAe,IAAI,UAAU,EAAE,QAAQ,KAAK,KAAK,CAAC,CAAE,OAAO;QACnF,MAAM,eAAe,GAAG,CAAC,kBAAkB,IAAI,YAAY,KAAK,KAAK,CAAC,CAAE,OAAO;QAE/E,2CAA2C;QAC3C,qCAAqC;QACrC,MAAM,qBAAqB,GAAG,YAAY,CAAC,qBAAqB,IAAI,UAAU,CAAA;QAC9E,MAAM,eAAe,GAAG,cAAc,CAAC,CAAC,CAAC,IAAA,iCAA0B,EAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;QAE/G,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,cAAc,GAAG,MAAM,IAAA,4BAAoB,EAC/C,eAAe,EACf,mBAAmB,EACnB,YAAY,CAAC,SAAS,EACtB,YAAY,EACZ,cAAc,EACd,eAAe,EACf,MAAM,EACN,SAAS,CACV,CAAA;YACD,IAAI,cAAc,EAAE,CAAC;gBACnB,gBAAgB;gBAChB,IAAA,sBAAa,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,EAAE,SAAS,CAAC,CAAA;gBACpG,IAAA,uBAAc,EAAC,cAAc,EAAE,SAAS,CAAC,CAAA;gBACzC,OAAO,cAAc,CAAA;YACvB,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,IAAI,MAAiB,CAAA;QAErB,QAAQ,YAAY,CAAC,KAAK,EAAE,CAAC;YAC3B,KAAK,WAAW;gBACd,MAAM,GAAG,MAAM,IAAA,0BAAc,EAAC,eAAe,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,SAAS,CAAC,CAAA;gBAC5I,MAAK;YACP,KAAK,QAAQ,CAAC;YACd;gBACE,MAAM,GAAG,MAAM,IAAA,oBAAW,EAAC,eAAe,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,SAAS,CAAC,CAAA;gBACzI,MAAK;QACT,CAAC;QAED,IAAA,uBAAc,EAAC,MAAM,EAAE,SAAS,CAAC,CAAA;QAEjC,6CAA6C;QAC7C,MAAM,UAAU,GAAG,IAAA,oBAAW,EAAC,CAAC,MAAM,CAAC,CAAC,CAAA;QACxC,IAAI,UAAU,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;YAC1B,IAAA,wCAAoB,GAAE,CAAC,SAAS,CAAC;gBAC/B,KAAK,EAAE,YAAY,CAAC,IAAI;gBACxB,WAAW,EAAE,UAAU,CAAC,WAAW;gBACnC,YAAY,EAAE,UAAU,CAAC,YAAY;gBACrC,eAAe,EAAE,UAAU,CAAC,eAAe;gBAC3C,SAAS;aACV,CAAC,CAAA;QACJ,CAAC;QAED,iCAAiC;QACjC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3D,IAAA,cAAQ,EAAC,uBAAuB,MAAM,CAAC,OAAO,CAAC,EAAE,WAAW,YAAY,CAAC,SAAS,gBAAgB,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;YAC/H,MAAM,IAAI,KAAK,CAAC,IAAA,QAAC,EAAC,qBAAqB,CAAC,CAAC,CAAA;QAC3C,CAAC;QAED,4BAA4B;QAC5B,IAAI,cAAc,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACtC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CACrD,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;gBACvD,KAAK,CAAC,IAAI,KAAK,UAAU,CAC1B,CAAA;YACD,IAAI,UAAU,EAAE,CAAC;gBACf,IAAA,yBAAiB,EAAC,eAAe,EAAE,mBAAmB,EAAE,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,CAAA;gBACvG,IAAA,cAAQ,EAAC,qBAAqB,IAAA,oBAAY,GAAE,EAAE,CAAC,CAAA;YACjD,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,kBAAkB,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;YAC3F,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,CAAA;QACjD,CAAC;QACD,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,WAAW;AACX,+EAA+E;AAE/E,SAAS,gBAAgB,CAAC,KAAU,EAAE,OAAiC,WAAW,EAAE,SAAkB;IACpG,MAAM,QAAQ,GAAG,IAAA,yBAAW,GAAE,CAAA;IAE9B,IAAI,SAAS,GAAG,eAAe,CAAA;IAC/B,IAAI,YAAY,GAAG,IAAA,QAAC,EAAC,eAAe,CAAC,CAAA;IAErC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,YAAY,GAAG,KAAK,CAAC,OAAO,CAAA;QAE5B,kBAAkB;QAClB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7E,OAAM,CAAC,mBAAmB;QAC5B,CAAC;QAED,wDAAwD;QACxD,IAAI,QAAQ,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1D,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAA;YAC/B,SAAS,GAAG,aAAa,UAAU,EAAE,CAAA;YACrC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAA,CAAE,WAAW;YACzC,IAAI,GAAG,WAAW,CAAA;YAElB,iBAAiB;YACjB,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;gBACvB,SAAS,GAAG,YAAY,CAAA;gBACxB,YAAY,GAAG,IAAA,QAAC,EAAC,eAAe,CAAC,CAAA;YACnC,CAAC;iBAAM,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;gBAC9B,SAAS,GAAG,mBAAmB,CAAA;gBAC/B,YAAY,GAAG,IAAA,QAAC,EAAC,oBAAoB,CAAC,CAAA;YACxC,CAAC;iBAAM,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;gBAC9B,SAAS,GAAG,YAAY,CAAA;gBACxB,YAAY,GAAG,IAAA,QAAC,EAAC,oBAAoB,CAAC,CAAA;YACxC,CAAC;QACH,CAAC;QACD,oCAAoC;aAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,EAAE,CAAC;YAC/D,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAE,CAAA;YAC5E,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;YACnC,SAAS,GAAG,aAAa,UAAU,EAAE,CAAA;YACrC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAA;YAC5B,IAAI,GAAG,WAAW,CAAA;QACpB,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1C,SAAS,GAAG,oBAAoB,CAAA;YAChC,YAAY,GAAG,IAAA,QAAC,EAAC,gBAAgB,CAAC,CAAA;YAClC,IAAI,GAAG,WAAW,CAAA;QACpB,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAChF,SAAS,GAAG,eAAe,CAAA;YAC3B,YAAY,GAAG,IAAA,QAAC,EAAC,eAAe,CAAC,CAAA;YACjC,IAAI,GAAG,WAAW,CAAA;QACpB,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3E,SAAS,GAAG,YAAY,CAAA;YACxB,YAAY,GAAG,IAAA,QAAC,EAAC,eAAe,CAAC,CAAA;YACjC,IAAI,GAAG,WAAW,CAAA;QACpB,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACjF,SAAS,GAAG,YAAY,CAAA;YACxB,YAAY,GAAG,IAAA,QAAC,EAAC,oBAAoB,CAAC,CAAA;YACtC,IAAI,GAAG,WAAW,CAAA;QACpB,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAChF,SAAS,GAAG,kBAAkB,CAAA;YAC9B,YAAY,GAAG,IAAA,QAAC,EAAC,sBAAsB,CAAC,CAAA;YACxC,IAAI,GAAG,yBAAyB,CAAA;QAClC,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAqB;QACrC,IAAI;QACJ,KAAK,EAAE;YACL,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,YAAY;YACrB,OAAO,EAAE,KAAK;SACf;KACF,CAAA;IAED,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,YAAY,EAAE,SAAS,CAAC,CAAA;IACvD,IAAA,cAAQ,EAAC,SAAS,SAAS,MAAM,YAAY,EAAE,CAAC,CAAA;AAClD,CAAC;AAED,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAExE,KAAK,UAAU,UAAU,CAAC,EAC/B,YAAY,GAAG,EAAE,EACjB,UAAU,EACV,MAAM,EACN,SAAS,GAOV;IACC,MAAM,QAAQ,GAAG;QACf;YACE,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;aAC9C;YACD,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAA,mBAAU,GAAE;SACnB;KACyB,CAAA;IAE5B,OAAO,QAAQ,CACb,QAAQ,EACR,YAAY,EACZ,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC,MAAM,EACtC,EAAE,EACF;QACE,YAAY,EAAE,OAAO;QACrB,kBAAkB,EAAE,IAAI;QACxB,kBAAkB,EAAE,IAAI;QACxB,eAAe,EAAE,IAAI;QACrB,SAAS;KACV,CACF,CAAA;AACH,CAAC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -29,6 +29,7 @@ export interface SemaCoreConfig {
|
|
|
29
29
|
enableToolSearch?: boolean;
|
|
30
30
|
toolSearchDefaultTools?: string[] | null;
|
|
31
31
|
maxSessions?: number;
|
|
32
|
+
usageProduct?: string;
|
|
32
33
|
}
|
|
33
34
|
export type UpdatableCoreConfigKeys = keyof typeof defaultCoreConfig;
|
|
34
35
|
export declare const defaultCoreConfig: {
|
|
@@ -125,6 +126,7 @@ export type { RuleScope, RuleConfig } from './rule';
|
|
|
125
126
|
export type { TaskListItem } from './task';
|
|
126
127
|
export type { TodoItem, TodoTaskStatus, TodoTask, } from './todoTask';
|
|
127
128
|
export type { CronTask, CronTaskFile, } from './cron';
|
|
129
|
+
export type { UsageStatsData, UsageDayData, UsageTotals, UsageTokens, UsageModelStat, UsageToolStat, UsageSkillStat, } from '../manager/UsageStatsManager';
|
|
128
130
|
export { TOOL_NAME_VIEW_FILE, TOOL_NAME_RUN_SHELL, TOOL_NAME_PEEK_BG_JOB, TOOL_NAME_STOP_BG_JOB, TOOL_NAME_DEL_CRON, TOOL_NAME_LIST_CRONS, TOOL_NAME_CREATE_TODO, TOOL_NAME_LIST_TODOS, TOOL_NAME_GET_TODO, TOOL_NAME_UPDATE_TODO, TOOL_NAME_CREATE_CRON, TOOL_NAME_PICK_OPTION, TOOL_NAME_PLAN_TO_AGENT, TOOL_NAME_FETCH_URL, TOOL_NAME_SEARCH_FILES, TOOL_NAME_SEARCH_CONTENT, TOOL_NAME_EDIT_NOTEBOOK, TOOL_NAME_SKILL, TOOL_NAME_SUB_AGENT, TOOL_NAME_WRITE_FILE, TOOL_NAME_PATCH_FILE, } from '../prompt/tool';
|
|
129
131
|
export type { CreateSessionOptions, CreateSessionResult } from './session';
|
|
130
132
|
export type { ModelProfile, ThinkingHistoryPolicy } from './model';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAIpD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,CAAC;AAOnE,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;AAIxE,eAAO,MAAM,mBAAmB,yCAA0C,CAAC;AAC3E,MAAM,MAAM,QAAQ,GAAG,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAE1D,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IACxD,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,8BAA8B,CAAC,EAAE,OAAO,CAAC;IACzC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAChC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAG3B,sBAAsB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAMzC,WAAW,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAIpD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,CAAC;AAOnE,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;AAIxE,eAAO,MAAM,mBAAmB,yCAA0C,CAAC;AAC3E,MAAM,MAAM,QAAQ,GAAG,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAE1D,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IACxD,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,8BAA8B,CAAC,EAAE,OAAO,CAAC;IACzC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAChC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAG3B,sBAAsB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAMzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CAEvB;AAGD,MAAM,MAAM,uBAAuB,GAAG,MAAM,OAAO,iBAAiB,CAAC;AAGrE,eAAO,MAAM,iBAAiB;UACd,QAAQ;;;;;;;;;;;;;;;;CAgBvB,CAAC;AAGF,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEpE,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,OAAO,SAAS,EAAE,WAAW,CAAC;IACrC,qBAAqB,CAAC,EAAE,OAAO,SAAS,EAAE,qBAAqB,CAAC;CACjE;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,SAAS,EAAE,WAAW,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAGD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAGD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,SAAS,EAAE,WAAW,CAAC;CACtC;AAGD,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAGD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAGD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAA;CAC7B;AAGD,YAAY,EACV,YAAY,EACZ,aAAa,GACd,MAAM,WAAW,CAAC;AAGnB,YAAY,EACV,UAAU,EACV,WAAW,GACZ,MAAM,SAAS,CAAC;AAGjB,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAGlB,YAAY,EACV,WAAW,EACX,UAAU,EACX,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,aAAa,EAAG,MAAM,yBAAyB,CAAC;AAGzD,YAAY,EACV,eAAe,EACf,sBAAsB,EACvB,MAAM,UAAU,CAAC;AAGlB,YAAY,EACV,eAAe,EACf,aAAa,EACd,MAAM,OAAO,CAAC;AAGf,YAAY,EACV,YAAY,EACb,MAAM,UAAU,CAAC;AAGlB,YAAY,EACV,SAAS,EACT,UAAU,EACX,MAAM,QAAQ,CAAC;AAGhB,YAAY,EACV,YAAY,EACb,MAAM,QAAQ,CAAC;AAGhB,YAAY,EACV,QAAQ,EACR,cAAc,EACd,QAAQ,GACT,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,QAAQ,EACR,YAAY,GACb,MAAM,QAAQ,CAAC;AAGhB,YAAY,EACV,cAAc,EACd,YAAY,EACZ,WAAW,EACX,WAAW,EACX,cAAc,EACd,aAAa,EACb,cAAc,GACf,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAG3E,YAAY,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAGnE,YAAY,EACV,SAAS,EACT,aAAa,GACd,MAAM,QAAQ,CAAC"}
|
package/dist/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;AAAA,6CAAuD;AAevD,0DAA0D;AAC1D,6DAA6D;AAChD,QAAA,mBAAmB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;AAAA,6CAAuD;AAevD,0DAA0D;AAC1D,6DAA6D;AAChD,QAAA,mBAAmB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC;AA2C3E,SAAS;AACI,QAAA,iBAAiB,GAAG;IAC/B,IAAI,EAAE,IAAgB;IACtB,MAAM,EAAE,KAAK;IACb,QAAQ,EAAE,KAAK;IACf,sBAAsB,EAAE,KAAK;IAC7B,uBAAuB,EAAE,KAAK;IAC9B,mBAAmB,EAAE,KAAK;IAC1B,qBAAqB,EAAE,KAAK;IAC5B,sBAAsB,EAAE,KAAK;IAC7B,wBAAwB,EAAE,KAAK;IAC/B,8BAA8B,EAAE,KAAK;IACrC,YAAY,EAAE,6BAAoB;IAClC,WAAW,EAAE,EAAE;IACf,cAAc,EAAE,KAAK;IACrB,sBAAsB,EAAE,KAAK;IAC7B,gBAAgB,EAAE,KAAK;IACvB,qBAAqB,EAAE,KAAK;CAC7B,CAAC;AA4GF,wDAAyD;AAAhD,6GAAA,aAAa,OAAA;AAsDtB,UAAU;AACV,uCAsBwB;AArBtB,2GAAA,mBAAmB,OAAA;AACnB,2GAAA,mBAAmB,OAAA;AACnB,6GAAA,qBAAqB,OAAA;AACrB,6GAAA,qBAAqB,OAAA;AACrB,0GAAA,kBAAkB,OAAA;AAClB,4GAAA,oBAAoB,OAAA;AACpB,6GAAA,qBAAqB,OAAA;AACrB,4GAAA,oBAAoB,OAAA;AACpB,0GAAA,kBAAkB,OAAA;AAClB,6GAAA,qBAAqB,OAAA;AACrB,6GAAA,qBAAqB,OAAA;AACrB,6GAAA,qBAAqB,OAAA;AACrB,+GAAA,uBAAuB,OAAA;AACvB,2GAAA,mBAAmB,OAAA;AACnB,8GAAA,sBAAsB,OAAA;AACtB,gHAAA,wBAAwB,OAAA;AACxB,+GAAA,uBAAuB,OAAA;AACvB,uGAAA,eAAe,OAAA;AACf,2GAAA,mBAAmB,OAAA;AACnB,4GAAA,oBAAoB,OAAA;AACpB,4GAAA,oBAAoB,OAAA"}
|