@skillfm/local 2.7.2 → 2.7.4

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 (126) 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 +23 -0
  10. package/dist/checkup/dimension-3-files.d.ts.map +1 -0
  11. package/dist/checkup/dimension-3-files.js +165 -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 +21 -0
  22. package/dist/checkup/report.d.ts.map +1 -0
  23. package/dist/checkup/report.js +133 -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/connectors/anthropic.d.ts.map +1 -1
  34. package/dist/connectors/anthropic.js +3 -0
  35. package/dist/connectors/anthropic.js.map +1 -1
  36. package/dist/guard/bin.js +0 -0
  37. package/dist/index.js +4 -2
  38. package/dist/index.js.map +1 -1
  39. package/dist/mcp/index.d.ts.map +1 -1
  40. package/dist/mcp/index.js +27 -0
  41. package/dist/mcp/index.js.map +1 -1
  42. package/dist/mcp/tools/checkup.d.ts +21 -0
  43. package/dist/mcp/tools/checkup.d.ts.map +1 -0
  44. package/dist/mcp/tools/checkup.js +35 -0
  45. package/dist/mcp/tools/checkup.js.map +1 -0
  46. package/dist/mcp/tools/explain-provider-key.d.ts.map +1 -1
  47. package/dist/mcp/tools/explain-provider-key.js +15 -13
  48. package/dist/mcp/tools/explain-provider-key.js.map +1 -1
  49. package/dist/mcp/tools/index.d.ts +6 -0
  50. package/dist/mcp/tools/index.d.ts.map +1 -1
  51. package/dist/mcp/tools/index.js +56 -4
  52. package/dist/mcp/tools/index.js.map +1 -1
  53. package/dist/mcp/tools/setup-gateway.d.ts +16 -0
  54. package/dist/mcp/tools/setup-gateway.d.ts.map +1 -0
  55. package/dist/mcp/tools/setup-gateway.js +79 -0
  56. package/dist/mcp/tools/setup-gateway.js.map +1 -0
  57. package/dist/mcp/tools/show-my-usage.d.ts +26 -0
  58. package/dist/mcp/tools/show-my-usage.d.ts.map +1 -0
  59. package/dist/mcp/tools/show-my-usage.js +68 -0
  60. package/dist/mcp/tools/show-my-usage.js.map +1 -0
  61. package/dist/mcp-stdio/bin.js +0 -0
  62. package/dist/reconciliation/engine.d.ts +30 -0
  63. package/dist/reconciliation/engine.d.ts.map +1 -0
  64. package/dist/reconciliation/engine.js +62 -0
  65. package/dist/reconciliation/engine.js.map +1 -0
  66. package/dist/reconciliation/index.d.ts +8 -0
  67. package/dist/reconciliation/index.d.ts.map +1 -0
  68. package/dist/reconciliation/index.js +8 -0
  69. package/dist/reconciliation/index.js.map +1 -0
  70. package/dist/reconciliation/l1-reconciler.d.ts +29 -0
  71. package/dist/reconciliation/l1-reconciler.d.ts.map +1 -0
  72. package/dist/reconciliation/l1-reconciler.js +144 -0
  73. package/dist/reconciliation/l1-reconciler.js.map +1 -0
  74. package/dist/reconciliation/l2-reconciler.d.ts +21 -0
  75. package/dist/reconciliation/l2-reconciler.d.ts.map +1 -0
  76. package/dist/reconciliation/l2-reconciler.js +241 -0
  77. package/dist/reconciliation/l2-reconciler.js.map +1 -0
  78. package/dist/reconciliation/types.d.ts +49 -0
  79. package/dist/reconciliation/types.d.ts.map +1 -0
  80. package/dist/reconciliation/types.js +9 -0
  81. package/dist/reconciliation/types.js.map +1 -0
  82. package/dist/save-token/e1-router.d.ts +7 -0
  83. package/dist/save-token/e1-router.d.ts.map +1 -0
  84. package/dist/save-token/e1-router.js +112 -0
  85. package/dist/save-token/e1-router.js.map +1 -0
  86. package/dist/save-token/e2-cache.d.ts +7 -0
  87. package/dist/save-token/e2-cache.d.ts.map +1 -0
  88. package/dist/save-token/e2-cache.js +128 -0
  89. package/dist/save-token/e2-cache.js.map +1 -0
  90. package/dist/save-token/e3-batch.d.ts +7 -0
  91. package/dist/save-token/e3-batch.d.ts.map +1 -0
  92. package/dist/save-token/e3-batch.js +80 -0
  93. package/dist/save-token/e3-batch.js.map +1 -0
  94. package/dist/save-token/gateway-setup.d.ts +27 -0
  95. package/dist/save-token/gateway-setup.d.ts.map +1 -0
  96. package/dist/save-token/gateway-setup.js +200 -0
  97. package/dist/save-token/gateway-setup.js.map +1 -0
  98. package/dist/save-token/index.d.ts +13 -0
  99. package/dist/save-token/index.d.ts.map +1 -0
  100. package/dist/save-token/index.js +23 -0
  101. package/dist/save-token/index.js.map +1 -0
  102. package/dist/save-token/types.d.ts +46 -0
  103. package/dist/save-token/types.d.ts.map +1 -0
  104. package/dist/save-token/types.js +5 -0
  105. package/dist/save-token/types.js.map +1 -0
  106. package/dist/usage-local/index.d.ts +32 -0
  107. package/dist/usage-local/index.d.ts.map +1 -0
  108. package/dist/usage-local/index.js +32 -0
  109. package/dist/usage-local/index.js.map +1 -0
  110. package/dist/usage-local/model-pricing.d.ts +38 -0
  111. package/dist/usage-local/model-pricing.d.ts.map +1 -0
  112. package/dist/usage-local/model-pricing.js +230 -0
  113. package/dist/usage-local/model-pricing.js.map +1 -0
  114. package/dist/usage-local/openclaw-watcher.d.ts +35 -0
  115. package/dist/usage-local/openclaw-watcher.d.ts.map +1 -0
  116. package/dist/usage-local/openclaw-watcher.js +190 -0
  117. package/dist/usage-local/openclaw-watcher.js.map +1 -0
  118. package/dist/usage-local/store.d.ts +50 -0
  119. package/dist/usage-local/store.d.ts.map +1 -0
  120. package/dist/usage-local/store.js +201 -0
  121. package/dist/usage-local/store.js.map +1 -0
  122. package/dist/usage-local/types.d.ts +94 -0
  123. package/dist/usage-local/types.d.ts.map +1 -0
  124. package/dist/usage-local/types.js +6 -0
  125. package/dist/usage-local/types.js.map +1 -0
  126. package/package.json +2 -2
@@ -37,12 +37,30 @@ import { handleMemorySave } from './memory-save.js';
37
37
  import { handleMemoryRecent } from './memory-recent.js';
38
38
  import { handleSaveCredential, handleGetCredential, handleListCredentials, handleRemoveCredential, } from './credential-tools.js';
39
39
  import { handleExplainProviderKey } from './explain-provider-key.js';
40
+ import { handleSkillFmCheckup } from './checkup.js';
41
+ import { handleSkillFmShowMyUsage } from './show-my-usage.js';
42
+ import { handleSkillFmSetupGateway } from './setup-gateway.js';
40
43
  // ============================================================================
41
44
  // Minimal input shape — every Phase 0 tool accepts a free-form object.
42
45
  // Validation is done inside handlers (so failures come back as
43
46
  // SkillFmToolError, not MCP-protocol level rejections).
44
47
  // ============================================================================
45
48
  const PASSTHROUGH_SCHEMA = z.object({}).passthrough();
49
+ // 真 schemas — agent 必须看到具体参数才会传 (PASSTHROUGH 让 agent 默认传 {})
50
+ const PROVIDER_ENUM = ['openai', 'anthropic', 'deepseek', 'doubao', 'qwen', 'kimi'];
51
+ const EXPLAIN_PROVIDER_KEY_SCHEMA = z.object({
52
+ provider: z.enum(PROVIDER_ENUM).describe('LLM provider name. One of: openai / anthropic / deepseek / doubao / qwen / kimi'),
53
+ });
54
+ const SAVE_CREDENTIAL_SCHEMA = z.object({
55
+ provider: z.string().describe('Provider name (e.g. openai / anthropic / deepseek / doubao / qwen / kimi / cloudflare / namecheap)'),
56
+ key: z.string().describe('The real API key value to encrypt and store in local vault'),
57
+ });
58
+ const GET_CREDENTIAL_SCHEMA = z.object({
59
+ provider: z.string().describe('Provider name to check'),
60
+ });
61
+ const REMOVE_CREDENTIAL_SCHEMA = z.object({
62
+ provider: z.string().describe('Provider name to remove from vault'),
63
+ });
46
64
  /** MCP SDK requires content blocks. We always wrap our envelope as JSON text. */
47
65
  function wrapEnvelope(envelope) {
48
66
  return {
@@ -103,7 +121,7 @@ function registerKeyTools(server, deps) {
103
121
  // ─── Phase 2: Credential vault tools (BYOK: keys 加密存本地, 不出节点) ───
104
122
  // Agent 装 SkillFM 后引导用户加 LLM provider 的 billing API key, 启用 Beacon 监控。
105
123
  const vaultDeps = deps.vault ? { vault: deps.vault } : null;
106
- server.tool('skillfm_save_credential', 'Save a BYOK provider API key to the local encrypted vault (AES-256-GCM, never leaves the user node). Use this when onboarding a user — ask them which LLM provider (openai/anthropic/deepseek/doubao/qwen/kimi) or asset registrar (cloudflare/namecheap/godaddy/...) they want monitored, then save the billing-only API key here. Beacon scheduler reads this vault to poll provider billing APIs every 30 minutes.', PASSTHROUGH_SCHEMA.shape, async (input) => {
124
+ server.tool('skillfm_save_credential', 'Save a BYOK provider API key to the local encrypted vault (AES-256-GCM, never leaves the user node). Use this when onboarding a user — ask them which LLM provider (openai/anthropic/deepseek/doubao/qwen/kimi) or asset registrar (cloudflare/namecheap/godaddy/...) they want monitored, then save the billing-only API key here. Beacon scheduler reads this vault to poll provider billing APIs every 30 minutes.', SAVE_CREDENTIAL_SCHEMA.shape, async (input) => {
107
125
  if (!vaultDeps) {
108
126
  return wrapEnvelope({
109
127
  ok: false,
@@ -113,7 +131,7 @@ function registerKeyTools(server, deps) {
113
131
  const env = await handleSaveCredential(input, vaultDeps);
114
132
  return wrapEnvelope(env);
115
133
  });
116
- server.tool('skillfm_get_credential', 'Check whether a credential exists in the vault for a given provider. Returns { has_key: bool } — does NOT return the key value (security). Use this to decide if the user needs to add a key for a particular provider.', PASSTHROUGH_SCHEMA.shape, async (input) => {
134
+ server.tool('skillfm_get_credential', 'Check whether a credential exists in the vault for a given provider. Returns { has_key: bool } — does NOT return the key value (security). Use this to decide if the user needs to add a key for a particular provider.', GET_CREDENTIAL_SCHEMA.shape, async (input) => {
117
135
  if (!vaultDeps) {
118
136
  return wrapEnvelope({
119
137
  ok: false,
@@ -133,7 +151,7 @@ function registerKeyTools(server, deps) {
133
151
  const env = await handleListCredentials(input, vaultDeps);
134
152
  return wrapEnvelope(env);
135
153
  });
136
- server.tool('skillfm_remove_credential', 'Remove a provider credential from the vault (e.g. user revoked the key, no longer wants Beacon to monitor that provider). Returns { removed: bool, provider }.', PASSTHROUGH_SCHEMA.shape, async (input) => {
154
+ server.tool('skillfm_remove_credential', 'Remove a provider credential from the vault (e.g. user revoked the key, no longer wants Beacon to monitor that provider). Returns { removed: bool, provider }.', REMOVE_CREDENTIAL_SCHEMA.shape, async (input) => {
137
155
  if (!vaultDeps) {
138
156
  return wrapEnvelope({
139
157
  ok: false,
@@ -143,10 +161,44 @@ function registerKeyTools(server, deps) {
143
161
  const env = await handleRemoveCredential(input, vaultDeps);
144
162
  return wrapEnvelope(env);
145
163
  });
146
- server.tool('skillfm_explain_provider_key', 'CRITICAL — call this BEFORE asking the user for any provider API key. Returns structured guidance: key type, why needed, step-by-step generation link, scope recommendations, risk level (LOW/MEDIUM/HIGH), what the key can do (and cannot do), revoke URL, BYOK safety promise, and key format hint. Translate the response into natural language for the user — never just ask for "your API key" without first explaining via this tool. Supported: openai / anthropic / deepseek / doubao / qwen / kimi.', PASSTHROUGH_SCHEMA.shape, async (input) => {
164
+ server.tool('skillfm_explain_provider_key', 'CRITICAL — call this BEFORE asking the user for any provider API key. Returns structured guidance: key type, why needed, step-by-step generation link, scope recommendations, risk level (LOW/MEDIUM/HIGH), what the key can do (and cannot do), revoke URL, BYOK safety promise, and key format hint. Translate the response into natural language for the user — never just ask for "your API key" without first explaining via this tool. Supported: openai / anthropic / deepseek / doubao / qwen / kimi.', EXPLAIN_PROVIDER_KEY_SCHEMA.shape, async (input) => {
147
165
  const env = await handleExplainProviderKey(input);
148
166
  return wrapEnvelope(env);
149
167
  });
168
+ // ─── Beacon V2: 主入口 + 用量 + Gateway onboarding ───
169
+ // 三个新 tool 依赖 usageStore + reconciliationEngine (Sidecar cmdStart 启动后注入).
170
+ // 没启动时返 BEACON_V2_NOT_READY error.
171
+ server.tool('skillfm_checkup', 'CRITICAL — Beacon V2 主入口. 用户说"看 SkillFM 体检" / "/skillfm" / "我家 AI 状态" 时调此 tool. 返渲染好的 < 300 字主入口 UX (text) + 完整 CheckupReport (健康度 score / 5 维度状态 / 今日 #1 / 对账 surface). Rendered text 直接转给用户看, 不要修改; agent 可深挖 report.dimensions 看每维度详情.', PASSTHROUGH_SCHEMA.shape, async (input) => {
172
+ if (!deps.usageStore || !deps.reconciliationEngine) {
173
+ return wrapEnvelope({
174
+ ok: false,
175
+ error: { code: 'BEACON_V2.NOT_READY', message: 'Usage store / reconciliation engine not initialized in this transport.', retryable: false },
176
+ });
177
+ }
178
+ const env = await handleSkillFmCheckup(input, {
179
+ store: deps.usageStore,
180
+ reconciliationEngine: deps.reconciliationEngine,
181
+ is_pro: deps.isProTier,
182
+ });
183
+ return wrapEnvelope(env);
184
+ });
185
+ server.tool('skillfm_show_my_usage', 'Beacon V2: 看用户的 LLM 真用量数据 (按 today / week / month 时间窗口). 返跨 agent / 跨 provider / 跨 model 的聚合 + 估算成本 + Save Token 建议 (E1 router / E2 cache / E3 batch 扫描结果). 用户问"我用了多少 token / 花了多少钱 / 哪能省" 时调.', PASSTHROUGH_SCHEMA.shape, async (input) => {
186
+ if (!deps.usageStore) {
187
+ return wrapEnvelope({
188
+ ok: false,
189
+ error: { code: 'BEACON_V2.NOT_READY', message: 'Usage store not initialized.', retryable: false },
190
+ });
191
+ }
192
+ const env = await handleSkillFmShowMyUsage(input, {
193
+ store: deps.usageStore,
194
+ is_pro: deps.isProTier,
195
+ });
196
+ return wrapEnvelope(env);
197
+ });
198
+ server.tool('skillfm_setup_gateway', 'Beacon V2 Onboarding 一键配置: 检测用户 IDE (Claude Code / Cursor / Codex / shell-env) + 改 ANTHROPIC_BASE_URL / OPENAI_API_BASE 指向 SkillFM gateway. 真改前 backup 原 config + 提供 1 行 revert command. dry_run=true 仅 detect 不真改 (用于 onboarding 时先 surface 给用户看会改啥). 用户授权后调 dry_run=false 真执行.', PASSTHROUGH_SCHEMA.shape, async (input) => {
199
+ const env = await handleSkillFmSetupGateway(input);
200
+ return wrapEnvelope(env);
201
+ });
150
202
  }
151
203
  // ============================================================================
152
204
  // Placeholder tools — names reserved by contract but Phase 0 = NOT_IMPLEMENTED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,kBAAkB,GAOnB,MAAM,+CAA+C,CAAC;AAIvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAkBrE,+EAA+E;AAC/E,uEAAuE;AACvE,+DAA+D;AAC/D,wDAAwD;AACxD,+EAA+E;AAE/E,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAEtD,iFAAiF;AACjF,SAAS,YAAY,CAAI,QAA8B;IAIrD,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3D,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE;KACtB,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E,SAAS,gBAAgB,CAAC,MAAiB,EAAE,IAAsB;IACjE,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,oRAAoR,EACpR,kBAAkB,CAAC,KAAK,EACxB,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACjE,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,6OAA6O,EAC7O,kBAAkB,CAAC,KAAK,EACxB,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,KAAiC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/F,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,+OAA+O,EAC/O,kBAAkB,CAAC,KAAK,EACxB,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAClE,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,iRAAiR,EACjR,kBAAkB,CAAC,KAAK,EACxB,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,KAAiC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/F,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,2BAA2B,EAC3B,mOAAmO,EACnO,kBAAkB,CAAC,KAAK,EACxB,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACjG,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,2BAA2B,EAC3B,4KAA4K,EAC5K,kBAAkB,CAAC,KAAK,EACxB,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,MAAM,GAAG,GAAG,MAAM,sBAAsB,CAAC,KAAqC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACvG,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,0BAA0B,EAC1B,yNAAyN,EACzN,kBAAkB,CAAC,KAAK,EACxB,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAoC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACrG,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,0BAA0B,EAC1B,wMAAwM,EACxM,kBAAkB,CAAC,KAAK,EACxB,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAoC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACrG,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CACF,CAAC;IAEF,oEAAoE;IACpE,MAAM,UAAU,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IAE9E,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,0QAA0Q,EAC1Q,kBAAkB,CAAC,KAAK,EACxB,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,KAA0D,EAAE,UAAU,CAAC,CAAC;QAC7G,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,wOAAwO,EACxO,kBAAkB,CAAC,KAAK,EACxB,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAChC,KAA0I,EAC1I,UAAU,CACX,CAAC;QACF,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,wLAAwL,EACxL,kBAAkB,CAAC,KAAK,EACxB,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,KAA2B,EAAE,UAAU,CAAC,CAAC;QAC9E,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CACF,CAAC;IAEF,mEAAmE;IACnE,uEAAuE;IACvE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAE5D,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB,uZAAuZ,EACvZ,kBAAkB,CAAC,KAAK,EACxB,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,YAAY,CAAC;gBAClB,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,kDAAkD,EAAE,SAAS,EAAE,KAAK,EAAE;aACvH,CAAC,CAAC;QACL,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC,KAA0C,EAAE,SAAS,CAAC,CAAC;QAC9F,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,yNAAyN,EACzN,kBAAkB,CAAC,KAAK,EACxB,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,YAAY,CAAC;gBAClB,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,kDAAkD,EAAE,SAAS,EAAE,KAAK,EAAE;aACvH,CAAC,CAAC;QACL,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,KAA6B,EAAE,SAAS,CAAC,CAAC;QAChF,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,0BAA0B,EAC1B,wMAAwM,EACxM,kBAAkB,CAAC,KAAK,EACxB,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,YAAY,CAAC;gBAClB,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,kDAAkD,EAAE,SAAS,EAAE,KAAK,EAAE;aACvH,CAAC,CAAC;QACL,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC1D,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,2BAA2B,EAC3B,gKAAgK,EAChK,kBAAkB,CAAC,KAAK,EACxB,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,YAAY,CAAC;gBAClB,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,kDAAkD,EAAE,SAAS,EAAE,KAAK,EAAE;aACvH,CAAC,CAAC;QACL,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,sBAAsB,CAAC,KAA6B,EAAE,SAAS,CAAC,CAAC;QACnF,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,8BAA8B,EAC9B,+eAA+e,EAC/e,kBAAkB,CAAC,KAAK,EACxB,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,MAAM,GAAG,GAAG,MAAM,wBAAwB,CAAC,KAA6B,CAAC,CAAC;QAC1E,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CACF,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,+EAA+E;AAC/E,+EAA+E;AAE/E,MAAM,cAAc,GAAG,IAAI,GAAG,CAAS;IACrC,qBAAqB;IACrB,uBAAuB;IACvB,sBAAsB;IACtB,uBAAuB;IACvB,2BAA2B;IAC3B,2BAA2B;IAC3B,0BAA0B;IAC1B,0BAA0B;IAC1B,oEAAoE;IACpE,yBAAyB;IACzB,wBAAwB;IACxB,0BAA0B;IAC1B,2BAA2B;IAC3B,8BAA8B;CAC/B,CAAC,CAAC;AAEH,SAAS,wBAAwB,CAAC,MAAiB;IACjD,MAAM,QAAQ,GAAsB,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7E,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QACvC,MAAM,OAAO,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAI,CACT,IAAI,EACJ,yBAAyB,IAAI,sEAAsE,EACnG,kBAAkB,CAAC,KAAK,EACxB,KAAK,EAAE,KAAK,EAAE,EAAE;YACd,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;YACjC,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC,CACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,IAAsB;IACxE,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC/B,wBAAwB,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,2BAA2B;IACzC,OAAO,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { SetupResult } from '../../save-token/gateway-setup.js';
2
+ import type { GatewayDetection } from '../../save-token/types.js';
3
+ import type { SkillFmToolResult } from '../_vendored-contracts/beacon-mcp-tools-v1.js';
4
+ export interface SkillFmSetupGatewayInput {
5
+ /** dry_run=true 只 detect 不真改 (用于 onboarding 时先 surface 给用户看会改啥) */
6
+ dry_run?: boolean;
7
+ }
8
+ export interface SkillFmSetupGatewayOutput {
9
+ gateway_base_url: string;
10
+ detections: GatewayDetection[];
11
+ setup_results: SetupResult[];
12
+ /** 渲染好的人类可读总结 */
13
+ rendered: string;
14
+ }
15
+ export declare function handleSkillFmSetupGateway(input: SkillFmSetupGatewayInput): Promise<SkillFmToolResult<SkillFmSetupGatewayOutput>>;
16
+ //# sourceMappingURL=setup-gateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-gateway.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/setup-gateway.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAEvF,MAAM,WAAW,wBAAwB;IACvC,mEAAmE;IACnE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,yBAAyB;IACxC,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,aAAa,EAAE,WAAW,EAAE,CAAC;IAC7B,iBAAiB;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,wBAAwB,GAC9B,OAAO,CAAC,iBAAiB,CAAC,yBAAyB,CAAC,CAAC,CA2BvD"}
@@ -0,0 +1,79 @@
1
+ // sdk/skillfm-local/src/mcp/tools/setup-gateway.ts
2
+ //
3
+ // MCP tool: skillfm_setup_gateway — Onboarding 一键配置 (PRD §3.4 + 决策 #8).
4
+ //
5
+ // 用法:
6
+ // 1. agent 收到用户授权 → 调此 tool, dry_run=false
7
+ // 2. 此 tool 检测 IDE → 改 config → 返 setup_results 含 revert_command
8
+ // 3. agent 把结果转译给用户 ("我改了你 ~/.claude/settings.json 里的 ANTHROPIC_BASE_URL,
9
+ // 想 revert 的话跑 cp /tmp/.../claude-settings.json ~/.claude/settings.json")
10
+ import { detectIDEs, setupAllDetectedGateways, SKILLFM_GATEWAY_BASE_URL, } from '../../save-token/gateway-setup.js';
11
+ export async function handleSkillFmSetupGateway(input) {
12
+ const dry_run = input.dry_run ?? false;
13
+ try {
14
+ const detections = await detectIDEs();
15
+ const setup_results = dry_run ? [] : await setupAllDetectedGateways();
16
+ const rendered = renderSetupReport(dry_run, detections, setup_results);
17
+ return {
18
+ ok: true,
19
+ data: {
20
+ gateway_base_url: SKILLFM_GATEWAY_BASE_URL,
21
+ detections,
22
+ setup_results,
23
+ rendered,
24
+ },
25
+ };
26
+ }
27
+ catch (e) {
28
+ return {
29
+ ok: false,
30
+ error: {
31
+ code: 'GATEWAY.SETUP_FAILED',
32
+ message: e.message,
33
+ retryable: false,
34
+ },
35
+ };
36
+ }
37
+ }
38
+ function renderSetupReport(dry_run, detections, results) {
39
+ const lines = [];
40
+ lines.push(`🔌 SkillFM Gateway Setup ${dry_run ? '(dry run)' : ''}`);
41
+ lines.push('━━━━━━━━━━━━━━━━━━━━━━━━');
42
+ lines.push(`Gateway URL: ${SKILLFM_GATEWAY_BASE_URL}`);
43
+ lines.push('');
44
+ lines.push('检测到的 IDE:');
45
+ for (const d of detections) {
46
+ if (!d.detected)
47
+ continue;
48
+ const status = d.setup_status === 'configured' ? '✅ 已配置' : '⚠️ 未配置';
49
+ lines.push(` ${d.ide}: ${status}${d.config_path ? ` (${d.config_path})` : ''}`);
50
+ }
51
+ if (dry_run) {
52
+ lines.push('');
53
+ lines.push('⚠️ dry_run 模式 — 没有真改任何文件');
54
+ lines.push('调 skillfm_setup_gateway({dry_run: false}) 真执行');
55
+ return lines.join('\n');
56
+ }
57
+ if (results.length === 0) {
58
+ lines.push('');
59
+ lines.push('❌ 没有可配置的 IDE — 请确认你装了 Claude Code / Cursor / Codex 等支持的 IDE');
60
+ return lines.join('\n');
61
+ }
62
+ lines.push('');
63
+ lines.push('Setup 结果:');
64
+ for (const r of results) {
65
+ if (r.applied) {
66
+ lines.push(` ✅ ${r.ide}: 已配 (${r.config_path})`);
67
+ if (r.revert_command) {
68
+ lines.push(` 回滚: ${r.revert_command}`);
69
+ }
70
+ }
71
+ else {
72
+ lines.push(` ⚠️ ${r.ide}: ${r.error ?? 'skip'}`);
73
+ }
74
+ }
75
+ lines.push('');
76
+ lines.push('🎉 完成! Agent 重启后, 所有 LLM 调用会经过 SkillFM gateway, 我可以自动 cache + 路由 + 记账.');
77
+ return lines.join('\n');
78
+ }
79
+ //# sourceMappingURL=setup-gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-gateway.js","sourceRoot":"","sources":["../../../src/mcp/tools/setup-gateway.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { LocalUsageStore } from '../../usage-local/index.js';
2
+ import type { UsageAggregation, UsageByProvider, UsageByAgent, UsageByModel } from '../../usage-local/types.js';
3
+ import type { SaveTokenSuggestion } from '../../save-token/types.js';
4
+ import type { SkillFmToolResult } from '../_vendored-contracts/beacon-mcp-tools-v1.js';
5
+ export type UsageWindow = 'today' | 'week' | 'month' | 'all';
6
+ export interface SkillFmShowMyUsageInput {
7
+ /** 时间窗口 (默认 'today') */
8
+ window?: UsageWindow;
9
+ }
10
+ export interface SkillFmShowMyUsageOutput {
11
+ window: UsageWindow;
12
+ total: UsageAggregation;
13
+ by_provider: UsageByProvider[];
14
+ by_agent: UsageByAgent[];
15
+ by_model: UsageByModel[];
16
+ /** Save Token 建议 (Free surface) */
17
+ save_token_suggestions: SaveTokenSuggestion[];
18
+ /** 渲染好的人类可读文本 */
19
+ rendered: string;
20
+ }
21
+ export interface ShowMyUsageDeps {
22
+ store: LocalUsageStore;
23
+ is_pro: boolean;
24
+ }
25
+ export declare function handleSkillFmShowMyUsage(input: SkillFmShowMyUsageInput, deps: ShowMyUsageDeps): Promise<SkillFmToolResult<SkillFmShowMyUsageOutput>>;
26
+ //# sourceMappingURL=show-my-usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show-my-usage.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/show-my-usage.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,YAAY,EACb,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAEvF,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;AAE7D,MAAM,WAAW,uBAAuB;IACtC,wBAAwB;IACxB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,gBAAgB,CAAC;IACxB,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,mCAAmC;IACnC,sBAAsB,EAAE,mBAAmB,EAAE,CAAC;IAC9C,iBAAiB;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,eAAe,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,uBAAuB,EAC9B,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,CAAC,CAsBtD"}
@@ -0,0 +1,68 @@
1
+ // sdk/skillfm-local/src/mcp/tools/show-my-usage.ts
2
+ //
3
+ // MCP tool: skillfm_show_my_usage — 看真用量数据 (PRD §6 Save Token Engine surface)
4
+ // agent 调此 tool 时返:
5
+ // - 时间窗口内用量聚合 (today / week / month)
6
+ // - 按 provider / agent / model 分组
7
+ // - Save Token 建议 (E1/E2/E3 扫描结果)
8
+ import { timeWindow } from '../../usage-local/store.js';
9
+ import { scanAllEngines } from '../../save-token/index.js';
10
+ export async function handleSkillFmShowMyUsage(input, deps) {
11
+ const window = input.window ?? 'today';
12
+ const q = timeWindow(window);
13
+ const total = deps.store.aggregate(q);
14
+ const by_provider = deps.store.aggregateByProvider(q).sort((a, b) => b.total_cost_usd - a.total_cost_usd);
15
+ const by_agent = deps.store.aggregateByAgent(q).sort((a, b) => b.total_cost_usd - a.total_cost_usd);
16
+ const by_model = deps.store.aggregateByModel(q).sort((a, b) => b.total_cost_usd - a.total_cost_usd);
17
+ const save_token_suggestions = await scanAllEngines(deps.store, {
18
+ is_pro: deps.is_pro,
19
+ start: q.start,
20
+ end: q.end,
21
+ });
22
+ const rendered = renderUsageReport(window, total, by_provider, by_agent, by_model, save_token_suggestions);
23
+ return {
24
+ ok: true,
25
+ data: {
26
+ window, total, by_provider, by_agent, by_model, save_token_suggestions, rendered,
27
+ },
28
+ };
29
+ }
30
+ function renderUsageReport(window, total, by_provider, _by_agent, by_model, suggestions) {
31
+ const lines = [];
32
+ const periodLabel = { today: '今日', week: '本周', month: '本月', all: '历史' }[window];
33
+ lines.push(`💰 用量 ${periodLabel}`);
34
+ lines.push('━━━━━━━━━━━━━━━━━━━━━━━━');
35
+ lines.push(`总: ¥${total.total_cost_cny.toFixed(2)} (${total.input_tokens + total.output_tokens} token, ${total.call_count} 次)`);
36
+ if (by_provider.length > 0) {
37
+ lines.push('');
38
+ lines.push('按 Provider:');
39
+ for (const p of by_provider.slice(0, 5)) {
40
+ const pct = total.total_cost_cny > 0 ? (p.total_cost_cny / total.total_cost_cny * 100).toFixed(0) : '0';
41
+ lines.push(` ${p.provider}: ¥${p.total_cost_cny.toFixed(2)} (${pct}%)`);
42
+ }
43
+ }
44
+ if (by_model.length > 0) {
45
+ lines.push('');
46
+ lines.push('按 Model (top 5):');
47
+ for (const m of by_model.slice(0, 5)) {
48
+ lines.push(` ${m.provider}/${m.model_id}: ¥${m.total_cost_cny.toFixed(2)} × ${m.call_count} 次`);
49
+ }
50
+ }
51
+ if (suggestions.length > 0) {
52
+ lines.push('');
53
+ lines.push('💡 省 token 建议 (按月省排序):');
54
+ for (const s of suggestions.slice(0, 5)) {
55
+ lines.push(` ${s.engine}: ${s.headline}`);
56
+ lines.push(` 估月省 ¥${s.estimated_savings_cny} (${s.estimated_savings_pct}% off)`);
57
+ if (s.fix_method === 'free_manual' && s.pro_unlock_label) {
58
+ lines.push(` ${s.pro_unlock_label}`);
59
+ }
60
+ }
61
+ }
62
+ else {
63
+ lines.push('');
64
+ lines.push('✨ 无明显省 token 机会, 你 AI 用得已经很高效');
65
+ }
66
+ return lines.join('\n');
67
+ }
68
+ //# sourceMappingURL=show-my-usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show-my-usage.js","sourceRoot":"","sources":["../../../src/mcp/tools/show-my-usage.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,EAAE;AACF,8EAA8E;AAC9E,oBAAoB;AACpB,uCAAuC;AACvC,oCAAoC;AACpC,oCAAoC;AAGpC,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAOxD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AA4B3D,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,KAA8B,EAC9B,IAAqB;IAErB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC;IACvC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAE7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC;IAC1G,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC;IACpG,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC;IACpG,MAAM,sBAAsB,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE;QAC9D,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,GAAG,EAAE,CAAC,CAAC,GAAG;KACX,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,sBAAsB,CAAC,CAAC;IAE3G,OAAO;QACL,EAAE,EAAE,IAAI;QACR,IAAI,EAAE;YACJ,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,sBAAsB,EAAE,QAAQ;SACjF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,MAAmB,EACnB,KAAuB,EACvB,WAA8B,EAC9B,SAAyB,EACzB,QAAwB,EACxB,WAAkC;IAElC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,WAAW,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;IAEhF,KAAK,CAAC,IAAI,CAAC,SAAS,WAAW,EAAE,CAAC,CAAC;IACnC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,aAAa,WAAW,KAAK,CAAC,UAAU,KAAK,CAAC,CAAC;IAEhI,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1B,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACxC,MAAM,GAAG,GAAG,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YACxG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC;QACnG,CAAC;IACH,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACrC,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,qBAAqB,KAAK,CAAC,CAAC,qBAAqB,QAAQ,CAAC,CAAC;YACpF,IAAI,CAAC,CAAC,UAAU,KAAK,aAAa,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;gBACzD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
File without changes
@@ -0,0 +1,30 @@
1
+ import type { Vault } from '../vault/index.js';
2
+ import type { Connector } from '../connectors/types.js';
3
+ import type { LocalUsageStore } from '../usage-local/store.js';
4
+ import type { ReconciliationResult, ReconcileOptions } from './types.js';
5
+ export interface EngineDeps {
6
+ vault: Vault;
7
+ connectors: Record<string, Connector>;
8
+ store: LocalUsageStore;
9
+ /** Override balance history file path */
10
+ historyPath?: string;
11
+ }
12
+ export declare class ReconciliationEngine {
13
+ private deps;
14
+ constructor(deps: EngineDeps);
15
+ /**
16
+ * 全部 provider 对账 (跑 vault 里所有 key 对应的 provider)
17
+ * 默认窗口: 今日 00:00 → 现在
18
+ */
19
+ reconcileAll(opts?: ReconcileOptions): Promise<ReconciliationResult[]>;
20
+ /**
21
+ * 单 provider 对账 — auto select L1 vs L2 vs no_data
22
+ */
23
+ reconcileProvider(provider: string, start: string, end: string): Promise<ReconciliationResult>;
24
+ /**
25
+ * 单条 surface 用的 1 行总结 (主入口 UX)
26
+ * "OpenAI: 估算 ¥3.20 vs 真扣 ¥3.40 偏差 6.3% ✅"
27
+ */
28
+ static formatSurfaceLine(r: ReconciliationResult): string;
29
+ }
30
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/reconciliation/engine.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAQzE,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACtC,KAAK,EAAE,eAAe,CAAC;IACvB,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,oBAAoB;IACnB,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAEpC;;;OAGG;IACG,YAAY,CAAC,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAiBhF;;OAEG;IACG,iBAAiB,CACrB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,oBAAoB,CAAC;IAsBhC;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,oBAAoB,GAAG,MAAM;CAG1D"}
@@ -0,0 +1,62 @@
1
+ // sdk/skillfm-local/src/reconciliation/engine.ts
2
+ //
3
+ // Reconciliation Engine — 主类,coordinate L1 + L2,produce per-provider 结果.
4
+ // SkillFM 真护城河: 跟 Helicone/Cursor billing 拉开的"双口径对账"层.
5
+ import { reconcileL1 } from './l1-reconciler.js';
6
+ import { reconcileL2 } from './l2-reconciler.js';
7
+ const L1_PROVIDERS = new Set(['openai', 'anthropic']);
8
+ const L2_PROVIDERS = new Set(['deepseek', 'kimi']);
9
+ export class ReconciliationEngine {
10
+ deps;
11
+ constructor(deps) {
12
+ this.deps = deps;
13
+ }
14
+ /**
15
+ * 全部 provider 对账 (跑 vault 里所有 key 对应的 provider)
16
+ * 默认窗口: 今日 00:00 → 现在
17
+ */
18
+ async reconcileAll(opts = {}) {
19
+ const now = new Date();
20
+ const start = opts.start ?? new Date(now.getFullYear(), now.getMonth(), now.getDate()).toISOString();
21
+ const end = opts.end ?? now.toISOString();
22
+ let providers = opts.providers;
23
+ if (!providers) {
24
+ // 默认: vault 里所有 provider
25
+ providers = await this.deps.vault.list();
26
+ }
27
+ const results = await Promise.all(providers.map((p) => this.reconcileProvider(p, start, end)));
28
+ return results;
29
+ }
30
+ /**
31
+ * 单 provider 对账 — auto select L1 vs L2 vs no_data
32
+ */
33
+ async reconcileProvider(provider, start, end) {
34
+ const p = provider.toLowerCase();
35
+ if (L1_PROVIDERS.has(p)) {
36
+ return reconcileL1(this.deps, { provider: p, start, end });
37
+ }
38
+ if (L2_PROVIDERS.has(p)) {
39
+ return reconcileL2(this.deps, { provider: p, start, end });
40
+ }
41
+ // 其他 provider: 仅返 L0 数字,不对账
42
+ const l0Agg = this.deps.store.aggregate({ start, end, providers: [p] });
43
+ return {
44
+ provider: p,
45
+ reconciled_at: new Date().toISOString(),
46
+ window_start: start,
47
+ window_end: end,
48
+ l0_estimated_usd: l0Agg.total_cost_usd,
49
+ level: 'no_data',
50
+ anomalies: [],
51
+ human_summary: `${p}: 仅 L0 估算 ¥${(l0Agg.total_cost_usd * 7.3).toFixed(2)} (此 provider 暂不支持对账)`,
52
+ };
53
+ }
54
+ /**
55
+ * 单条 surface 用的 1 行总结 (主入口 UX)
56
+ * "OpenAI: 估算 ¥3.20 vs 真扣 ¥3.40 偏差 6.3% ✅"
57
+ */
58
+ static formatSurfaceLine(r) {
59
+ return r.human_summary;
60
+ }
61
+ }
62
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/reconciliation/engine.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,EAAE;AACF,yEAAyE;AACzE,uDAAuD;AAOvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;AACtD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;AAWnD,MAAM,OAAO,oBAAoB;IACX;IAApB,YAAoB,IAAgB;QAAhB,SAAI,GAAJ,IAAI,CAAY;IAAG,CAAC;IAExC;;;OAGG;IACH,KAAK,CAAC,YAAY,CAAC,OAAyB,EAAE;QAC5C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACrG,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QAE1C,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAC/B,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,yBAAyB;YACzB,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC3C,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAC5D,CAAC;QACF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CACrB,QAAgB,EAChB,KAAa,EACb,GAAW;QAEX,MAAM,CAAC,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QACjC,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACxB,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACxB,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,4BAA4B;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxE,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,aAAa,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACvC,YAAY,EAAE,KAAK;YACnB,UAAU,EAAE,GAAG;YACf,gBAAgB,EAAE,KAAK,CAAC,cAAc;YACtC,KAAK,EAAE,SAAS;YAChB,SAAS,EAAE,EAAE;YACb,aAAa,EAAE,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB;SAC/F,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CAAC,CAAuB;QAC9C,OAAO,CAAC,CAAC,aAAa,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ export type { DeviationLevel, AnomalyKind, ReconciliationResult, ReconcileOptions, BalanceSnapshot, } from './types.js';
2
+ export { reconcileL1, classifyDeviation } from './l1-reconciler.js';
3
+ export type { L1ReconcileDeps, L1ReconcileOptions } from './l1-reconciler.js';
4
+ export { reconcileL2 } from './l2-reconciler.js';
5
+ export type { L2ReconcileDeps, L2ReconcileOptions } from './l2-reconciler.js';
6
+ export { ReconciliationEngine } from './engine.js';
7
+ export type { EngineDeps } from './engine.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reconciliation/index.ts"],"names":[],"mappings":"AAKA,YAAY,EACV,cAAc,EACd,WAAW,EACX,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACpE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,8 @@
1
+ // sdk/skillfm-local/src/reconciliation/index.ts
2
+ //
3
+ // Reconciliation Engine — public API.
4
+ // 真护城河: L0 (本地 trace) + L1 (provider admin API) + L2 (provider balance diff) 三口径对账.
5
+ export { reconcileL1, classifyDeviation } from './l1-reconciler.js';
6
+ export { reconcileL2 } from './l2-reconciler.js';
7
+ export { ReconciliationEngine } from './engine.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reconciliation/index.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,EAAE;AACF,sCAAsC;AACtC,oFAAoF;AASpF,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEpE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { Vault } from '../vault/index.js';
2
+ import type { Connector } from '../connectors/types.js';
3
+ import type { LocalUsageStore } from '../usage-local/store.js';
4
+ import type { ReconciliationResult, DeviationLevel } from './types.js';
5
+ /**
6
+ * 偏差分级 (Eric 决策点 #1, 拍板 ACTIVE):
7
+ * < 5%: healthy
8
+ * 5-15%: warning
9
+ * 15-30%: medium
10
+ * > 30%: severe
11
+ */
12
+ export declare function classifyDeviation(deviation_pct: number): DeviationLevel;
13
+ export interface L1ReconcileDeps {
14
+ vault: Vault;
15
+ /** Connector registry: provider → Connector instance */
16
+ connectors: Record<string, Connector>;
17
+ store: LocalUsageStore;
18
+ }
19
+ export interface L1ReconcileOptions {
20
+ provider: string;
21
+ start: string;
22
+ end: string;
23
+ }
24
+ /**
25
+ * L1 对账: 单 provider, 时间窗口
26
+ * 返 ReconciliationResult, 含 l1_actual_usd / deviation_pct / level / anomalies.
27
+ */
28
+ export declare function reconcileL1(deps: L1ReconcileDeps, opts: L1ReconcileOptions): Promise<ReconciliationResult>;
29
+ //# sourceMappingURL=l1-reconciler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"l1-reconciler.d.ts","sourceRoot":"","sources":["../../src/reconciliation/l1-reconciler.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EACV,oBAAoB,EACpB,cAAc,EAEf,MAAM,YAAY,CAAC;AAIpB;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,cAAc,CAKvE;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,KAAK,CAAC;IACb,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACtC,KAAK,EAAE,eAAe,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,eAAe,EACrB,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,oBAAoB,CAAC,CAwG/B"}