@skillfm/local 2.7.3 → 2.7.5

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.
Files changed (120) hide show
  1. package/dist/checkup/daily-push.d.ts +29 -0
  2. package/dist/checkup/daily-push.d.ts.map +1 -0
  3. package/dist/checkup/daily-push.js +86 -0
  4. package/dist/checkup/daily-push.js.map +1 -0
  5. package/dist/checkup/dimension-1-usage.d.ts +22 -0
  6. package/dist/checkup/dimension-1-usage.d.ts.map +1 -0
  7. package/dist/checkup/dimension-1-usage.js +115 -0
  8. package/dist/checkup/dimension-1-usage.js.map +1 -0
  9. package/dist/checkup/dimension-3-files.d.ts +36 -0
  10. package/dist/checkup/dimension-3-files.d.ts.map +1 -0
  11. package/dist/checkup/dimension-3-files.js +276 -0
  12. package/dist/checkup/dimension-3-files.js.map +1 -0
  13. package/dist/checkup/dimension-4-context.d.ts +18 -0
  14. package/dist/checkup/dimension-4-context.d.ts.map +1 -0
  15. package/dist/checkup/dimension-4-context.js +177 -0
  16. package/dist/checkup/dimension-4-context.js.map +1 -0
  17. package/dist/checkup/index.d.ts +11 -0
  18. package/dist/checkup/index.d.ts.map +1 -0
  19. package/dist/checkup/index.js +10 -0
  20. package/dist/checkup/index.js.map +1 -0
  21. package/dist/checkup/report.d.ts +26 -0
  22. package/dist/checkup/report.d.ts.map +1 -0
  23. package/dist/checkup/report.js +173 -0
  24. package/dist/checkup/report.js.map +1 -0
  25. package/dist/checkup/score.d.ts +27 -0
  26. package/dist/checkup/score.d.ts.map +1 -0
  27. package/dist/checkup/score.js +101 -0
  28. package/dist/checkup/score.js.map +1 -0
  29. package/dist/checkup/types.d.ts +64 -0
  30. package/dist/checkup/types.d.ts.map +1 -0
  31. package/dist/checkup/types.js +5 -0
  32. package/dist/checkup/types.js.map +1 -0
  33. package/dist/mcp/index.d.ts.map +1 -1
  34. package/dist/mcp/index.js +27 -0
  35. package/dist/mcp/index.js.map +1 -1
  36. package/dist/mcp/tools/checkup.d.ts +21 -0
  37. package/dist/mcp/tools/checkup.d.ts.map +1 -0
  38. package/dist/mcp/tools/checkup.js +35 -0
  39. package/dist/mcp/tools/checkup.js.map +1 -0
  40. package/dist/mcp/tools/index.d.ts +6 -0
  41. package/dist/mcp/tools/index.d.ts.map +1 -1
  42. package/dist/mcp/tools/index.js +47 -0
  43. package/dist/mcp/tools/index.js.map +1 -1
  44. package/dist/mcp/tools/setup-gateway.d.ts +16 -0
  45. package/dist/mcp/tools/setup-gateway.d.ts.map +1 -0
  46. package/dist/mcp/tools/setup-gateway.js +79 -0
  47. package/dist/mcp/tools/setup-gateway.js.map +1 -0
  48. package/dist/mcp/tools/show-my-usage.d.ts +26 -0
  49. package/dist/mcp/tools/show-my-usage.d.ts.map +1 -0
  50. package/dist/mcp/tools/show-my-usage.js +68 -0
  51. package/dist/mcp/tools/show-my-usage.js.map +1 -0
  52. package/dist/reconciliation/engine.d.ts +30 -0
  53. package/dist/reconciliation/engine.d.ts.map +1 -0
  54. package/dist/reconciliation/engine.js +62 -0
  55. package/dist/reconciliation/engine.js.map +1 -0
  56. package/dist/reconciliation/index.d.ts +8 -0
  57. package/dist/reconciliation/index.d.ts.map +1 -0
  58. package/dist/reconciliation/index.js +8 -0
  59. package/dist/reconciliation/index.js.map +1 -0
  60. package/dist/reconciliation/l1-reconciler.d.ts +29 -0
  61. package/dist/reconciliation/l1-reconciler.d.ts.map +1 -0
  62. package/dist/reconciliation/l1-reconciler.js +144 -0
  63. package/dist/reconciliation/l1-reconciler.js.map +1 -0
  64. package/dist/reconciliation/l2-reconciler.d.ts +21 -0
  65. package/dist/reconciliation/l2-reconciler.d.ts.map +1 -0
  66. package/dist/reconciliation/l2-reconciler.js +241 -0
  67. package/dist/reconciliation/l2-reconciler.js.map +1 -0
  68. package/dist/reconciliation/types.d.ts +49 -0
  69. package/dist/reconciliation/types.d.ts.map +1 -0
  70. package/dist/reconciliation/types.js +9 -0
  71. package/dist/reconciliation/types.js.map +1 -0
  72. package/dist/save-token/e1-router.d.ts +7 -0
  73. package/dist/save-token/e1-router.d.ts.map +1 -0
  74. package/dist/save-token/e1-router.js +112 -0
  75. package/dist/save-token/e1-router.js.map +1 -0
  76. package/dist/save-token/e2-cache.d.ts +7 -0
  77. package/dist/save-token/e2-cache.d.ts.map +1 -0
  78. package/dist/save-token/e2-cache.js +128 -0
  79. package/dist/save-token/e2-cache.js.map +1 -0
  80. package/dist/save-token/e3-batch.d.ts +7 -0
  81. package/dist/save-token/e3-batch.d.ts.map +1 -0
  82. package/dist/save-token/e3-batch.js +80 -0
  83. package/dist/save-token/e3-batch.js.map +1 -0
  84. package/dist/save-token/gateway-setup.d.ts +27 -0
  85. package/dist/save-token/gateway-setup.d.ts.map +1 -0
  86. package/dist/save-token/gateway-setup.js +200 -0
  87. package/dist/save-token/gateway-setup.js.map +1 -0
  88. package/dist/save-token/index.d.ts +13 -0
  89. package/dist/save-token/index.d.ts.map +1 -0
  90. package/dist/save-token/index.js +23 -0
  91. package/dist/save-token/index.js.map +1 -0
  92. package/dist/save-token/types.d.ts +46 -0
  93. package/dist/save-token/types.d.ts.map +1 -0
  94. package/dist/save-token/types.js +5 -0
  95. package/dist/save-token/types.js.map +1 -0
  96. package/dist/usage-local/index.d.ts +34 -0
  97. package/dist/usage-local/index.d.ts.map +1 -0
  98. package/dist/usage-local/index.js +33 -0
  99. package/dist/usage-local/index.js.map +1 -0
  100. package/dist/usage-local/model-pricing.d.ts +42 -0
  101. package/dist/usage-local/model-pricing.d.ts.map +1 -0
  102. package/dist/usage-local/model-pricing.js +253 -0
  103. package/dist/usage-local/model-pricing.js.map +1 -0
  104. package/dist/usage-local/openclaw-watcher.d.ts +35 -0
  105. package/dist/usage-local/openclaw-watcher.d.ts.map +1 -0
  106. package/dist/usage-local/openclaw-watcher.js +190 -0
  107. package/dist/usage-local/openclaw-watcher.js.map +1 -0
  108. package/dist/usage-local/plan.d.ts +58 -0
  109. package/dist/usage-local/plan.d.ts.map +1 -0
  110. package/dist/usage-local/plan.js +84 -0
  111. package/dist/usage-local/plan.js.map +1 -0
  112. package/dist/usage-local/store.d.ts +50 -0
  113. package/dist/usage-local/store.d.ts.map +1 -0
  114. package/dist/usage-local/store.js +201 -0
  115. package/dist/usage-local/store.js.map +1 -0
  116. package/dist/usage-local/types.d.ts +94 -0
  117. package/dist/usage-local/types.d.ts.map +1 -0
  118. package/dist/usage-local/types.js +6 -0
  119. package/dist/usage-local/types.js.map +1 -0
  120. package/package.json +2 -2
@@ -0,0 +1,23 @@
1
+ // sdk/skillfm-local/src/save-token/index.ts
2
+ //
3
+ // Save Token Engine — public API.
4
+ // 真"省 token" 5 大引擎 (PRD V1.3 §6).
5
+ export { scanE1Router } from './e1-router.js';
6
+ export { scanE2Cache } from './e2-cache.js';
7
+ export { scanE3Batch } from './e3-batch.js';
8
+ export { detectIDEs, setupClaudeCodeGateway, setupShellEnvGateway, setupAllDetectedGateways, SKILLFM_GATEWAY_BASE_URL, } from './gateway-setup.js';
9
+ import { scanE1Router } from './e1-router.js';
10
+ import { scanE2Cache } from './e2-cache.js';
11
+ import { scanE3Batch } from './e3-batch.js';
12
+ /**
13
+ * 跑全 engine 扫描 (E1+E2+E3 并行) — 主入口用
14
+ */
15
+ export async function scanAllEngines(store, opts) {
16
+ const [e1, e2, e3] = await Promise.all([
17
+ scanE1Router(store, opts),
18
+ scanE2Cache(store, opts),
19
+ scanE3Batch(store, opts),
20
+ ]);
21
+ return [...e1, ...e2, ...e3].sort((a, b) => b.estimated_savings_cny - a.estimated_savings_cny);
22
+ }
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/save-token/index.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,EAAE;AACF,kCAAkC;AAClC,kCAAkC;AAUlC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EACL,UAAU,EACV,sBAAsB,EACtB,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAsB,EACtB,IAA0B;IAE1B,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACrC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC;QACzB,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC;QACxB,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC;KACzB,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,qBAAqB,GAAG,CAAC,CAAC,qBAAqB,CAAC,CAAC;AACjG,CAAC"}
@@ -0,0 +1,46 @@
1
+ export type EngineId = 'E1_router' | 'E2_cache' | 'E3_batch' | 'E4_compress' | 'E5_rotate';
2
+ export type FixMethod = 'free_manual' | 'pro_auto' | 'pro_locked';
3
+ /**
4
+ * 一条省 token 建议 (来自任一 engine 的扫描)
5
+ */
6
+ export interface SaveTokenSuggestion {
7
+ engine: EngineId;
8
+ /** 短文案 — surface 给 agent / 用户 (e.g. "5 次 Sonnet 可切 Haiku") */
9
+ headline: string;
10
+ /** 估算省 token 百分比 (0-100) */
11
+ estimated_savings_pct: number;
12
+ /** 估算月省 token (基于过去 7 天日均) */
13
+ estimated_savings_tokens: number;
14
+ /** 估算月省 CNY (基于价目表) */
15
+ estimated_savings_cny: number;
16
+ /** 修法 */
17
+ fix_method: FixMethod;
18
+ /** Free 用户手动操作步骤 */
19
+ fix_instructions?: string;
20
+ /** Pro 升级文案 */
21
+ pro_unlock_label?: string;
22
+ /** Engine 详情 — 比如哪个 model / 哪个 prompt 触发了建议 */
23
+ details?: Record<string, unknown>;
24
+ }
25
+ /**
26
+ * Save Token Engine 扫描请求
27
+ */
28
+ export interface SaveTokenScanOptions {
29
+ /** 是否 Pro 用户 */
30
+ is_pro: boolean;
31
+ /** 时间窗口 (默认近 7 天) */
32
+ start?: string;
33
+ end?: string;
34
+ }
35
+ /**
36
+ * Gateway setup 状态 (per IDE)
37
+ */
38
+ export type GatewaySetupStatus = 'not_configured' | 'configured' | 'partial' | 'unknown';
39
+ export interface GatewayDetection {
40
+ ide: 'claude-code' | 'cursor' | 'codex' | 'aider' | 'continue' | 'shell-env';
41
+ detected: boolean;
42
+ config_path?: string;
43
+ current_base_url?: string;
44
+ setup_status: GatewaySetupStatus;
45
+ }
46
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/save-token/types.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,QAAQ,GAChB,WAAW,GACX,UAAU,GACV,UAAU,GACV,aAAa,GACb,WAAW,CAAC;AAEhB,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,UAAU,GAAG,YAAY,CAAC;AAElE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,QAAQ,CAAC;IACjB,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,8BAA8B;IAC9B,wBAAwB,EAAE,MAAM,CAAC;IACjC,uBAAuB;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,SAAS;IACT,UAAU,EAAE,SAAS,CAAC;IACtB,oBAAoB;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,gBAAgB;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAC1B,gBAAgB,GAChB,YAAY,GACZ,SAAS,GACT,SAAS,CAAC;AAEd,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,WAAW,CAAC;IAC7E,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,kBAAkB,CAAC;CAClC"}
@@ -0,0 +1,5 @@
1
+ // sdk/skillfm-local/src/save-token/types.ts
2
+ //
3
+ // Save Token Engine 5 大引擎 types (PRD V1.3 §6).
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/save-token/types.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,EAAE;AACF,+CAA+C"}
@@ -0,0 +1,34 @@
1
+ import { OpenClawWatcher } from './openclaw-watcher.js';
2
+ import { LocalUsageStore } from './store.js';
3
+ export type { LocalUsageRecord, AgentHarness, UsageAggregation, UsageByProvider, UsageByAgent, UsageByModel, WatcherConfig, WatchPath, } from './types.js';
4
+ export { LocalUsageStore, timeWindow } from './store.js';
5
+ export type { UsageQuery } from './store.js';
6
+ export { OpenClawWatcher } from './openclaw-watcher.js';
7
+ export { getModelPrice, estimateCostUsd, estimateCostCny, listVerifiedModels, USD_TO_CNY, PRICING_TABLE } from './model-pricing.js';
8
+ export type { ModelPrice, Currency } from './model-pricing.js';
9
+ export { loadPlanConfig, savePlanConfig, getProviderPlan, renderProviderUsage, formatTokens, DEFAULT_PLAN_CONFIG, } from './plan.js';
10
+ export type { PlanType, ProviderPlan, PlanConfig } from './plan.js';
11
+ export interface UsageLocalDeps {
12
+ /** Override store path (默认 ~/.skillfm/usage-local.jsonl) */
13
+ storePath?: string;
14
+ /** Override OpenClaw agents dir (默认 ~/.openclaw/agents) */
15
+ openclawAgentsDir?: string;
16
+ /** verbose 日志到 stderr */
17
+ verbose?: boolean;
18
+ }
19
+ export interface UsageLocalHandle {
20
+ store: LocalUsageStore;
21
+ openclawWatcher: OpenClawWatcher;
22
+ /** 主动 scan 一次所有 trajectory (cron poll fallback 或手动 trigger) */
23
+ scanAll: () => Promise<number>;
24
+ /** 关闭所有 watcher */
25
+ stop: () => void;
26
+ }
27
+ /**
28
+ * 启动 Usage Local 子系统:
29
+ * 1. load store 从 jsonl
30
+ * 2. 启动 OpenClaw watcher (warm scan + fs.watch)
31
+ * 3. 返回 handle 供 sidecar / scheduler 用
32
+ */
33
+ export declare function startUsageLocal(deps?: UsageLocalDeps): Promise<UsageLocalHandle>;
34
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/usage-local/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,YAAY,EACV,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,EAChD,eAAe,EAAE,YAAY,EAAE,YAAY,EAC3C,aAAa,EAAE,SAAS,GACzB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACzD,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACpI,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EACL,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EACpE,YAAY,EAAE,mBAAmB,GAClC,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEpE,MAAM,WAAW,cAAc;IAC7B,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,yBAAyB;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,eAAe,CAAC;IACvB,eAAe,EAAE,eAAe,CAAC;IACjC,+DAA+D;IAC/D,OAAO,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,mBAAmB;IACnB,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAiB1F"}
@@ -0,0 +1,33 @@
1
+ // sdk/skillfm-local/src/usage-local/index.ts
2
+ //
3
+ // L0 Usage Local — 入口 + 启动函数.
4
+ // Sidecar / BeaconScheduler 调 startUsageLocal() 启动 watcher + 返回 store.
5
+ import { OpenClawWatcher } from './openclaw-watcher.js';
6
+ import { LocalUsageStore } from './store.js';
7
+ export { LocalUsageStore, timeWindow } from './store.js';
8
+ export { OpenClawWatcher } from './openclaw-watcher.js';
9
+ export { getModelPrice, estimateCostUsd, estimateCostCny, listVerifiedModels, USD_TO_CNY, PRICING_TABLE } from './model-pricing.js';
10
+ export { loadPlanConfig, savePlanConfig, getProviderPlan, renderProviderUsage, formatTokens, DEFAULT_PLAN_CONFIG, } from './plan.js';
11
+ /**
12
+ * 启动 Usage Local 子系统:
13
+ * 1. load store 从 jsonl
14
+ * 2. 启动 OpenClaw watcher (warm scan + fs.watch)
15
+ * 3. 返回 handle 供 sidecar / scheduler 用
16
+ */
17
+ export async function startUsageLocal(deps = {}) {
18
+ const store = new LocalUsageStore({ filePath: deps.storePath });
19
+ await store.load();
20
+ const openclawWatcher = new OpenClawWatcher({
21
+ store,
22
+ agentsDir: deps.openclawAgentsDir,
23
+ verbose: deps.verbose,
24
+ });
25
+ await openclawWatcher.start();
26
+ return {
27
+ store,
28
+ openclawWatcher,
29
+ scanAll: () => openclawWatcher.scanAll(),
30
+ stop: () => openclawWatcher.stop(),
31
+ };
32
+ }
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/usage-local/index.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,EAAE;AACF,8BAA8B;AAC9B,uEAAuE;AAEvE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAO7C,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEpI,OAAO,EACL,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EACpE,YAAY,EAAE,mBAAmB,GAClC,MAAM,WAAW,CAAC;AAqBnB;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAuB,EAAE;IAC7D,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IAChE,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;IAEnB,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC;QAC1C,KAAK;QACL,SAAS,EAAE,IAAI,CAAC,iBAAiB;QACjC,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CAAC;IACH,MAAM,eAAe,CAAC,KAAK,EAAE,CAAC;IAE9B,OAAO;QACL,KAAK;QACL,eAAe;QACf,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE;QACxC,IAAI,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE;KACnC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,42 @@
1
+ export declare const USD_TO_CNY = 7.3;
2
+ export type Currency = 'USD' | 'CNY';
3
+ export interface ModelPrice {
4
+ /** Input token 单价 (单位由 currency 决定, USD/1M 或 CNY/1M) */
5
+ input_per_1m: number;
6
+ /** Output token 单价 */
7
+ output_per_1m: number;
8
+ /** Cache read 单价 (通常 input 的 0.1-0.5x) */
9
+ cache_read_per_1m: number;
10
+ /** Cache write 单价 (Anthropic 1.25x input, OpenAI 同 input) */
11
+ cache_write_per_1m: number;
12
+ /** 真单位 (国内 provider 走 RMB 原单位 不要二次乘 7.3 翻倍) */
13
+ currency: Currency;
14
+ /** 是否官方 verified (false = 用 fallback 估算) */
15
+ verified: boolean;
16
+ /** 真来源 URL (verify 用) */
17
+ source_url: string;
18
+ }
19
+ /**
20
+ * 价目表 — 跨 provider × model 的真价目.
21
+ * Key 格式: `${provider}/${model_id}` (统一小写 normalize)
22
+ */
23
+ export declare const PRICING_TABLE: Record<string, ModelPrice>;
24
+ /**
25
+ * 查找 model 真价目. 找不到返 fallback + verified=false.
26
+ */
27
+ export declare function getModelPrice(provider: string, model_id: string): ModelPrice;
28
+ /**
29
+ * 估算一次 LLM 调用的成本 — USD.
30
+ * 国内 provider 自动 ¥ → USD 转换.
31
+ */
32
+ export declare function estimateCostUsd(provider: string, model_id: string, input_tokens: number, output_tokens: number, cache_read_tokens?: number, cache_write_tokens?: number): number;
33
+ /**
34
+ * 估算一次 LLM 调用的成本 — CNY.
35
+ * 国际 provider 自动 USD → ¥ 转换. 国内 provider 直接返 (不二次翻倍).
36
+ */
37
+ export declare function estimateCostCny(provider: string, model_id: string, input_tokens: number, output_tokens: number, cache_read_tokens?: number, cache_write_tokens?: number): number;
38
+ /**
39
+ * 列出所有 verified 的 model (用于 surface "我们能精准估算的 model")
40
+ */
41
+ export declare function listVerifiedModels(): string[];
42
+ //# sourceMappingURL=model-pricing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-pricing.d.ts","sourceRoot":"","sources":["../../src/usage-local/model-pricing.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,UAAU,MAAM,CAAC;AAE9B,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC;AAErC,MAAM,WAAW,UAAU;IACzB,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAC;IACrB,sBAAsB;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,6DAA6D;IAC7D,kBAAkB,EAAE,MAAM,CAAC;IAC3B,+CAA+C;IAC/C,QAAQ,EAAE,QAAQ,CAAC;IACnB,4CAA4C;IAC5C,QAAQ,EAAE,OAAO,CAAC;IAClB,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAiKpD,CAAC;AAmBF;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CAgB5E;AAcD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,iBAAiB,GAAE,MAAU,EAC7B,kBAAkB,GAAE,MAAU,GAC7B,MAAM,CAIR;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAClC,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAC3C,iBAAiB,GAAE,MAAU,EAAE,kBAAkB,GAAE,MAAU,GAC5D,MAAM,CAIR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAK7C"}
@@ -0,0 +1,253 @@
1
+ // sdk/skillfm-local/src/usage-local/model-pricing.ts
2
+ //
3
+ // Vendored model pricing table (7 provider × cache 折扣).
4
+ // 真价目来源 (2026-05-03 verified):
5
+ // - Anthropic: https://docs.anthropic.com/en/docs/about-claude/pricing
6
+ // - OpenAI: https://openai.com/api/pricing/
7
+ // - DeepSeek: https://api-docs.deepseek.com/quick_start/pricing
8
+ // - 阿里 Qwen / 百炼: https://help.aliyun.com/zh/model-studio/billing-overview-of-model-studio
9
+ // - 字节豆包 / 火山方舟: https://www.volcengine.com/docs/82379
10
+ // - Kimi / Moonshot: https://platform.moonshot.cn/docs/price/chat
11
+ // - MiniMax: https://platform.minimaxi.com/document/Pricing
12
+ //
13
+ // 真单位 (V1.4 修):
14
+ // - 国际 provider (Anthropic / OpenAI): currency='USD', 数字 USD/1M
15
+ // - 国内 provider (DeepSeek/Qwen/Doubao/Kimi/MiniMax): currency='CNY', 数字 RMB/1M
16
+ // estimate 函数按 currency 自动转换 — 不要二次乘 7.3
17
+ //
18
+ // 维护策略 (Eric 决策点 #2):
19
+ // - 每发版 (npm publish) 手动 verify 1 次
20
+ // - 长期: CI weekly 拉官方页 diff alert
21
+ //
22
+ // CNY 转换: 固定 7.3 (汇率波动 < 5%, 不影响估算精度)
23
+ export const USD_TO_CNY = 7.3;
24
+ /**
25
+ * 价目表 — 跨 provider × model 的真价目.
26
+ * Key 格式: `${provider}/${model_id}` (统一小写 normalize)
27
+ */
28
+ export const PRICING_TABLE = {
29
+ // ── Anthropic Claude (USD/1M) ────────────────────────────────────
30
+ // https://docs.anthropic.com/en/docs/about-claude/pricing
31
+ 'anthropic/claude-opus-4-7': {
32
+ input_per_1m: 15, output_per_1m: 75,
33
+ cache_read_per_1m: 1.5, cache_write_per_1m: 18.75,
34
+ currency: 'USD', verified: true,
35
+ source_url: 'https://docs.anthropic.com/en/docs/about-claude/pricing',
36
+ },
37
+ 'anthropic/claude-sonnet-4-6': {
38
+ input_per_1m: 3, output_per_1m: 15,
39
+ cache_read_per_1m: 0.3, cache_write_per_1m: 3.75,
40
+ currency: 'USD', verified: true,
41
+ source_url: 'https://docs.anthropic.com/en/docs/about-claude/pricing',
42
+ },
43
+ 'anthropic/claude-haiku-4-5': {
44
+ input_per_1m: 0.8, output_per_1m: 4,
45
+ cache_read_per_1m: 0.08, cache_write_per_1m: 1,
46
+ currency: 'USD', verified: true,
47
+ source_url: 'https://docs.anthropic.com/en/docs/about-claude/pricing',
48
+ },
49
+ 'anthropic/claude-3-5-sonnet': {
50
+ input_per_1m: 3, output_per_1m: 15,
51
+ cache_read_per_1m: 0.3, cache_write_per_1m: 3.75,
52
+ currency: 'USD', verified: true,
53
+ source_url: 'https://docs.anthropic.com/en/docs/about-claude/pricing',
54
+ },
55
+ 'anthropic/claude-3-5-haiku': {
56
+ input_per_1m: 0.8, output_per_1m: 4,
57
+ cache_read_per_1m: 0.08, cache_write_per_1m: 1,
58
+ currency: 'USD', verified: true,
59
+ source_url: 'https://docs.anthropic.com/en/docs/about-claude/pricing',
60
+ },
61
+ 'anthropic/claude-3-opus': {
62
+ input_per_1m: 15, output_per_1m: 75,
63
+ cache_read_per_1m: 1.5, cache_write_per_1m: 18.75,
64
+ currency: 'USD', verified: true,
65
+ source_url: 'https://docs.anthropic.com/en/docs/about-claude/pricing',
66
+ },
67
+ // ── OpenAI GPT (USD/1M) ──────────────────────────────────────────
68
+ // https://openai.com/api/pricing/
69
+ 'openai/gpt-4o': {
70
+ input_per_1m: 2.5, output_per_1m: 10,
71
+ cache_read_per_1m: 1.25, cache_write_per_1m: 2.5,
72
+ currency: 'USD', verified: true,
73
+ source_url: 'https://openai.com/api/pricing/',
74
+ },
75
+ 'openai/gpt-4o-mini': {
76
+ input_per_1m: 0.15, output_per_1m: 0.6,
77
+ cache_read_per_1m: 0.075, cache_write_per_1m: 0.15,
78
+ currency: 'USD', verified: true,
79
+ source_url: 'https://openai.com/api/pricing/',
80
+ },
81
+ 'openai/o1': {
82
+ input_per_1m: 15, output_per_1m: 60,
83
+ cache_read_per_1m: 7.5, cache_write_per_1m: 15,
84
+ currency: 'USD', verified: true,
85
+ source_url: 'https://openai.com/api/pricing/',
86
+ },
87
+ 'openai/o1-mini': {
88
+ input_per_1m: 3, output_per_1m: 12,
89
+ cache_read_per_1m: 1.5, cache_write_per_1m: 3,
90
+ currency: 'USD', verified: true,
91
+ source_url: 'https://openai.com/api/pricing/',
92
+ },
93
+ 'openai/gpt-4-turbo': {
94
+ input_per_1m: 10, output_per_1m: 30,
95
+ cache_read_per_1m: 5, cache_write_per_1m: 10,
96
+ currency: 'USD', verified: true,
97
+ source_url: 'https://openai.com/api/pricing/',
98
+ },
99
+ 'openai/gpt-3.5-turbo': {
100
+ input_per_1m: 0.5, output_per_1m: 1.5,
101
+ cache_read_per_1m: 0.25, cache_write_per_1m: 0.5,
102
+ currency: 'USD', verified: true,
103
+ source_url: 'https://openai.com/api/pricing/',
104
+ },
105
+ // ── DeepSeek (CNY/1M, 国内官网定价) ──────────────────────────────
106
+ // V4 优惠期定价
107
+ 'deepseek/deepseek-v4-pro': {
108
+ input_per_1m: 4, output_per_1m: 16,
109
+ cache_read_per_1m: 0.4, cache_write_per_1m: 4,
110
+ currency: 'CNY', verified: true,
111
+ source_url: 'https://api-docs.deepseek.com/quick_start/pricing',
112
+ },
113
+ 'deepseek/deepseek-v4-flash': {
114
+ input_per_1m: 0.7, output_per_1m: 2.8,
115
+ cache_read_per_1m: 0.07, cache_write_per_1m: 0.7,
116
+ currency: 'CNY', verified: true,
117
+ source_url: 'https://api-docs.deepseek.com/quick_start/pricing',
118
+ },
119
+ 'deepseek/deepseek-chat': {
120
+ input_per_1m: 2, output_per_1m: 8,
121
+ cache_read_per_1m: 0.5, cache_write_per_1m: 2,
122
+ currency: 'CNY', verified: true,
123
+ source_url: 'https://api-docs.deepseek.com/quick_start/pricing',
124
+ },
125
+ 'deepseek/deepseek-reasoner': {
126
+ input_per_1m: 4, output_per_1m: 16,
127
+ cache_read_per_1m: 1, cache_write_per_1m: 4,
128
+ currency: 'CNY', verified: true,
129
+ source_url: 'https://api-docs.deepseek.com/quick_start/pricing',
130
+ },
131
+ // ── Qwen / 百炼 (CNY/1M) ──────────────────────────────────────────
132
+ 'bailian/qwen3.5-plus': {
133
+ input_per_1m: 0.8, output_per_1m: 2,
134
+ cache_read_per_1m: 0.08, cache_write_per_1m: 0.8,
135
+ currency: 'CNY', verified: true,
136
+ source_url: 'https://help.aliyun.com/zh/model-studio/billing-overview-of-model-studio',
137
+ },
138
+ 'bailian/qwen3.5-turbo': {
139
+ input_per_1m: 0.3, output_per_1m: 0.6,
140
+ cache_read_per_1m: 0.03, cache_write_per_1m: 0.3,
141
+ currency: 'CNY', verified: true,
142
+ source_url: 'https://help.aliyun.com/zh/model-studio/billing-overview-of-model-studio',
143
+ },
144
+ // ── Doubao / 火山方舟 (CNY/1M) ────────────────────────────────────
145
+ 'volc/doubao-seed-2-0-pro-260215': {
146
+ input_per_1m: 0.8, output_per_1m: 2,
147
+ cache_read_per_1m: 0.08, cache_write_per_1m: 0.8,
148
+ currency: 'CNY', verified: true,
149
+ source_url: 'https://www.volcengine.com/docs/82379',
150
+ },
151
+ 'volc/deepseek-v3-2-251201': {
152
+ input_per_1m: 2, output_per_1m: 8,
153
+ cache_read_per_1m: 0.5, cache_write_per_1m: 2,
154
+ currency: 'CNY', verified: true,
155
+ source_url: 'https://www.volcengine.com/docs/82379',
156
+ },
157
+ // ── Kimi / Moonshot (CNY/1M) ──────────────────────────────────────
158
+ 'bailian/kimi-k2.5': {
159
+ input_per_1m: 1, output_per_1m: 4,
160
+ cache_read_per_1m: 0.1, cache_write_per_1m: 1,
161
+ currency: 'CNY', verified: true,
162
+ source_url: 'https://platform.moonshot.cn/docs/price/chat',
163
+ },
164
+ 'kimi/moonshot-v1-128k': {
165
+ input_per_1m: 60, output_per_1m: 60,
166
+ cache_read_per_1m: 6, cache_write_per_1m: 60,
167
+ currency: 'CNY', verified: true,
168
+ source_url: 'https://platform.moonshot.cn/docs/price/chat',
169
+ },
170
+ // ── MiniMax (CNY/1M, 国内 RMB 真单位) ──────────────────────────────
171
+ 'minimax-cn/MiniMax-M2.7': {
172
+ input_per_1m: 1.4, output_per_1m: 5.5,
173
+ cache_read_per_1m: 0.14, cache_write_per_1m: 1.4,
174
+ currency: 'CNY', verified: true,
175
+ source_url: 'https://platform.minimaxi.com/document/Pricing',
176
+ },
177
+ 'minimax-cn/MiniMax-M2.5': {
178
+ input_per_1m: 0.55, output_per_1m: 2.2,
179
+ cache_read_per_1m: 0.055, cache_write_per_1m: 0.55,
180
+ currency: 'CNY', verified: true,
181
+ source_url: 'https://platform.minimaxi.com/document/Pricing',
182
+ },
183
+ };
184
+ /**
185
+ * Fallback price (provider/model 不在表里时用)
186
+ * 默认 USD currency + Sonnet 价
187
+ */
188
+ const FALLBACK_PRICE = {
189
+ input_per_1m: 3, output_per_1m: 15,
190
+ cache_read_per_1m: 0.3, cache_write_per_1m: 3.75,
191
+ currency: 'USD', verified: false,
192
+ source_url: 'fallback (Sonnet pricing)',
193
+ };
194
+ function normalizeKey(provider, model_id) {
195
+ return `${provider.toLowerCase().trim()}/${model_id.toLowerCase().trim()}`;
196
+ }
197
+ function m_lc(s) { return s.toLowerCase(); }
198
+ /**
199
+ * 查找 model 真价目. 找不到返 fallback + verified=false.
200
+ */
201
+ export function getModelPrice(provider, model_id) {
202
+ const key = normalizeKey(provider, model_id);
203
+ const exact = PRICING_TABLE[key];
204
+ if (exact)
205
+ return exact;
206
+ // 模糊匹配 — 找 provider 下包含 model_id 关键词的
207
+ for (const [k, v] of Object.entries(PRICING_TABLE)) {
208
+ if (k.startsWith(`${provider.toLowerCase()}/`)) {
209
+ const tableModel = k.split('/')[1] ?? '';
210
+ if (tableModel.includes(m_lc(model_id)) || m_lc(model_id).includes(tableModel)) {
211
+ return v;
212
+ }
213
+ }
214
+ }
215
+ return FALLBACK_PRICE;
216
+ }
217
+ /**
218
+ * 在 model 真单位下计算原始成本 (USD 或 CNY by currency)
219
+ */
220
+ function rawCost(p, input, output, cacheRead, cacheWrite) {
221
+ return ((input / 1_000_000) * p.input_per_1m +
222
+ (output / 1_000_000) * p.output_per_1m +
223
+ (cacheRead / 1_000_000) * p.cache_read_per_1m +
224
+ (cacheWrite / 1_000_000) * p.cache_write_per_1m);
225
+ }
226
+ /**
227
+ * 估算一次 LLM 调用的成本 — USD.
228
+ * 国内 provider 自动 ¥ → USD 转换.
229
+ */
230
+ export function estimateCostUsd(provider, model_id, input_tokens, output_tokens, cache_read_tokens = 0, cache_write_tokens = 0) {
231
+ const p = getModelPrice(provider, model_id);
232
+ const raw = rawCost(p, input_tokens, output_tokens, cache_read_tokens, cache_write_tokens);
233
+ return p.currency === 'USD' ? raw : raw / USD_TO_CNY;
234
+ }
235
+ /**
236
+ * 估算一次 LLM 调用的成本 — CNY.
237
+ * 国际 provider 自动 USD → ¥ 转换. 国内 provider 直接返 (不二次翻倍).
238
+ */
239
+ export function estimateCostCny(provider, model_id, input_tokens, output_tokens, cache_read_tokens = 0, cache_write_tokens = 0) {
240
+ const p = getModelPrice(provider, model_id);
241
+ const raw = rawCost(p, input_tokens, output_tokens, cache_read_tokens, cache_write_tokens);
242
+ return p.currency === 'CNY' ? raw : raw * USD_TO_CNY;
243
+ }
244
+ /**
245
+ * 列出所有 verified 的 model (用于 surface "我们能精准估算的 model")
246
+ */
247
+ export function listVerifiedModels() {
248
+ return Object.entries(PRICING_TABLE)
249
+ .filter(([_, v]) => v.verified)
250
+ .map(([k, _]) => k)
251
+ .sort();
252
+ }
253
+ //# sourceMappingURL=model-pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-pricing.js","sourceRoot":"","sources":["../../src/usage-local/model-pricing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { LocalUsageStore } from './store.js';
2
+ /**
3
+ * OpenClaw trajectory watcher
4
+ *
5
+ * 启动后:
6
+ * 1. 扫现有 *.trajectory.jsonl, 全量解析 (warm start)
7
+ * 2. fs.watch 监听新文件 + 现有文件 append
8
+ * 3. 增量解析 (记录每个 file 的最后 byte offset)
9
+ * 4. 调 store.appendBatch 持久化
10
+ */
11
+ export declare class OpenClawWatcher {
12
+ private offsets;
13
+ private watchers;
14
+ private agentsDir;
15
+ private agent_harness;
16
+ private store;
17
+ private verbose;
18
+ constructor(opts: {
19
+ store: LocalUsageStore;
20
+ agentsDir?: string;
21
+ verbose?: boolean;
22
+ });
23
+ /** 启动:warm-scan 现有文件 + 注册 fs.watch */
24
+ start(): Promise<void>;
25
+ /** 扫一次现有所有文件 (manual trigger, 用于 cron poll fallback) */
26
+ scanAll(): Promise<number>;
27
+ /** 关闭 watcher */
28
+ stop(): void;
29
+ private discoverTrajectoryFiles;
30
+ private scanFile;
31
+ private eventToRecord;
32
+ private registerWatchers;
33
+ private log;
34
+ }
35
+ //# sourceMappingURL=openclaw-watcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw-watcher.d.ts","sourceRoot":"","sources":["../../src/usage-local/openclaw-watcher.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAuBlD;;;;;;;;GAQG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,OAAO,CAAU;gBAEb,IAAI,EAAE;QAAE,KAAK,EAAE,eAAe,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE;IAMnF,sCAAsC;IAChC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB5B,wDAAwD;IAClD,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAShC,iBAAiB;IACjB,IAAI,IAAI,IAAI;YAOE,uBAAuB;YAiBvB,QAAQ;IA+CtB,OAAO,CAAC,aAAa;IAiCrB,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,GAAG;CAGZ"}