@skillfm/local 2.6.3 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (294) hide show
  1. package/README.md +50 -1
  2. package/dist/_signers/aliyun-v3.d.ts +21 -0
  3. package/dist/_signers/aliyun-v3.d.ts.map +1 -0
  4. package/dist/_signers/aliyun-v3.js +47 -0
  5. package/dist/_signers/aliyun-v3.js.map +1 -0
  6. package/dist/_signers/canonical.d.ts +29 -0
  7. package/dist/_signers/canonical.d.ts.map +1 -0
  8. package/dist/_signers/canonical.js +59 -0
  9. package/dist/_signers/canonical.js.map +1 -0
  10. package/dist/_signers/index.d.ts +9 -0
  11. package/dist/_signers/index.d.ts.map +1 -0
  12. package/dist/_signers/index.js +6 -0
  13. package/dist/_signers/index.js.map +1 -0
  14. package/dist/_signers/tencent-tc3.d.ts +21 -0
  15. package/dist/_signers/tencent-tc3.d.ts.map +1 -0
  16. package/dist/_signers/tencent-tc3.js +48 -0
  17. package/dist/_signers/tencent-tc3.js.map +1 -0
  18. package/dist/_signers/volc-v4.d.ts +18 -0
  19. package/dist/_signers/volc-v4.d.ts.map +1 -0
  20. package/dist/_signers/volc-v4.js +43 -0
  21. package/dist/_signers/volc-v4.js.map +1 -0
  22. package/dist/asset-connectors/aliyun-ecs.d.ts +18 -0
  23. package/dist/asset-connectors/aliyun-ecs.d.ts.map +1 -0
  24. package/dist/asset-connectors/aliyun-ecs.js +99 -0
  25. package/dist/asset-connectors/aliyun-ecs.js.map +1 -0
  26. package/dist/asset-connectors/base.d.ts +15 -0
  27. package/dist/asset-connectors/base.d.ts.map +1 -0
  28. package/dist/asset-connectors/base.js +19 -0
  29. package/dist/asset-connectors/base.js.map +1 -0
  30. package/dist/asset-connectors/cloudflare.d.ts +18 -0
  31. package/dist/asset-connectors/cloudflare.d.ts.map +1 -0
  32. package/dist/asset-connectors/cloudflare.js +94 -0
  33. package/dist/asset-connectors/cloudflare.js.map +1 -0
  34. package/dist/asset-connectors/digitalocean.d.ts +18 -0
  35. package/dist/asset-connectors/digitalocean.d.ts.map +1 -0
  36. package/dist/asset-connectors/digitalocean.js +79 -0
  37. package/dist/asset-connectors/digitalocean.js.map +1 -0
  38. package/dist/asset-connectors/godaddy.d.ts +18 -0
  39. package/dist/asset-connectors/godaddy.d.ts.map +1 -0
  40. package/dist/asset-connectors/godaddy.js +62 -0
  41. package/dist/asset-connectors/godaddy.js.map +1 -0
  42. package/dist/asset-connectors/hetzner.d.ts +18 -0
  43. package/dist/asset-connectors/hetzner.d.ts.map +1 -0
  44. package/dist/asset-connectors/hetzner.js +52 -0
  45. package/dist/asset-connectors/hetzner.js.map +1 -0
  46. package/dist/asset-connectors/index.d.ts +18 -0
  47. package/dist/asset-connectors/index.d.ts.map +1 -0
  48. package/dist/asset-connectors/index.js +52 -0
  49. package/dist/asset-connectors/index.js.map +1 -0
  50. package/dist/asset-connectors/namecheap.d.ts +34 -0
  51. package/dist/asset-connectors/namecheap.d.ts.map +1 -0
  52. package/dist/asset-connectors/namecheap.js +178 -0
  53. package/dist/asset-connectors/namecheap.js.map +1 -0
  54. package/dist/asset-connectors/ssl-labs.d.ts +22 -0
  55. package/dist/asset-connectors/ssl-labs.d.ts.map +1 -0
  56. package/dist/asset-connectors/ssl-labs.js +79 -0
  57. package/dist/asset-connectors/ssl-labs.js.map +1 -0
  58. package/dist/asset-connectors/tencent-cvm.d.ts +18 -0
  59. package/dist/asset-connectors/tencent-cvm.d.ts.map +1 -0
  60. package/dist/asset-connectors/tencent-cvm.js +145 -0
  61. package/dist/asset-connectors/tencent-cvm.js.map +1 -0
  62. package/dist/asset-connectors/types.d.ts +45 -0
  63. package/dist/asset-connectors/types.d.ts.map +1 -0
  64. package/dist/asset-connectors/types.js +26 -0
  65. package/dist/asset-connectors/types.js.map +1 -0
  66. package/dist/asset-connectors/vultr.d.ts +18 -0
  67. package/dist/asset-connectors/vultr.d.ts.map +1 -0
  68. package/dist/asset-connectors/vultr.js +73 -0
  69. package/dist/asset-connectors/vultr.js.map +1 -0
  70. package/dist/connectors/anthropic.d.ts +10 -0
  71. package/dist/connectors/anthropic.d.ts.map +1 -0
  72. package/dist/connectors/anthropic.js +103 -0
  73. package/dist/connectors/anthropic.js.map +1 -0
  74. package/dist/connectors/base.d.ts +11 -0
  75. package/dist/connectors/base.d.ts.map +1 -0
  76. package/dist/connectors/base.js +19 -0
  77. package/dist/connectors/base.js.map +1 -0
  78. package/dist/connectors/deepseek.d.ts +14 -0
  79. package/dist/connectors/deepseek.d.ts.map +1 -0
  80. package/dist/connectors/deepseek.js +77 -0
  81. package/dist/connectors/deepseek.js.map +1 -0
  82. package/dist/connectors/doubao.d.ts +10 -0
  83. package/dist/connectors/doubao.d.ts.map +1 -0
  84. package/dist/connectors/doubao.js +64 -0
  85. package/dist/connectors/doubao.js.map +1 -0
  86. package/dist/connectors/index.d.ts +14 -0
  87. package/dist/connectors/index.d.ts.map +1 -0
  88. package/dist/connectors/index.js +42 -0
  89. package/dist/connectors/index.js.map +1 -0
  90. package/dist/connectors/kimi.d.ts +10 -0
  91. package/dist/connectors/kimi.d.ts.map +1 -0
  92. package/dist/connectors/kimi.js +67 -0
  93. package/dist/connectors/kimi.js.map +1 -0
  94. package/dist/connectors/openai.d.ts +10 -0
  95. package/dist/connectors/openai.d.ts.map +1 -0
  96. package/dist/connectors/openai.js +101 -0
  97. package/dist/connectors/openai.js.map +1 -0
  98. package/dist/connectors/qwen.d.ts +10 -0
  99. package/dist/connectors/qwen.d.ts.map +1 -0
  100. package/dist/connectors/qwen.js +66 -0
  101. package/dist/connectors/qwen.js.map +1 -0
  102. package/dist/connectors/types.d.ts +47 -0
  103. package/dist/connectors/types.d.ts.map +1 -0
  104. package/dist/connectors/types.js +24 -0
  105. package/dist/connectors/types.js.map +1 -0
  106. package/dist/guard/bin.js +0 -0
  107. package/dist/index.js +50 -1
  108. package/dist/index.js.map +1 -1
  109. package/dist/mcp/_vendored-contracts/beacon-mcp-tools-v1.d.ts +373 -0
  110. package/dist/mcp/_vendored-contracts/beacon-mcp-tools-v1.d.ts.map +1 -0
  111. package/dist/mcp/_vendored-contracts/beacon-mcp-tools-v1.js +128 -0
  112. package/dist/mcp/_vendored-contracts/beacon-mcp-tools-v1.js.map +1 -0
  113. package/dist/mcp/brain-client.d.ts +96 -0
  114. package/dist/mcp/brain-client.d.ts.map +1 -0
  115. package/dist/mcp/brain-client.js +214 -0
  116. package/dist/mcp/brain-client.js.map +1 -0
  117. package/dist/mcp/cache.d.ts +55 -0
  118. package/dist/mcp/cache.d.ts.map +1 -0
  119. package/dist/mcp/cache.js +109 -0
  120. package/dist/mcp/cache.js.map +1 -0
  121. package/dist/mcp/config.d.ts +29 -0
  122. package/dist/mcp/config.d.ts.map +1 -0
  123. package/dist/mcp/config.js +69 -0
  124. package/dist/mcp/config.js.map +1 -0
  125. package/dist/mcp/decision-engine.d.ts +54 -0
  126. package/dist/mcp/decision-engine.d.ts.map +1 -0
  127. package/dist/mcp/decision-engine.js +107 -0
  128. package/dist/mcp/decision-engine.js.map +1 -0
  129. package/dist/mcp/errors.d.ts +66 -0
  130. package/dist/mcp/errors.d.ts.map +1 -0
  131. package/dist/mcp/errors.js +127 -0
  132. package/dist/mcp/errors.js.map +1 -0
  133. package/dist/mcp/index.d.ts +40 -0
  134. package/dist/mcp/index.d.ts.map +1 -0
  135. package/dist/mcp/index.js +98 -0
  136. package/dist/mcp/index.js.map +1 -0
  137. package/dist/mcp/tools/_placeholder.d.ts +24 -0
  138. package/dist/mcp/tools/_placeholder.d.ts.map +1 -0
  139. package/dist/mcp/tools/_placeholder.js +29 -0
  140. package/dist/mcp/tools/_placeholder.js.map +1 -0
  141. package/dist/mcp/tools/avatar-market.d.ts +22 -0
  142. package/dist/mcp/tools/avatar-market.d.ts.map +1 -0
  143. package/dist/mcp/tools/avatar-market.js +33 -0
  144. package/dist/mcp/tools/avatar-market.js.map +1 -0
  145. package/dist/mcp/tools/check-expiry.d.ts +23 -0
  146. package/dist/mcp/tools/check-expiry.d.ts.map +1 -0
  147. package/dist/mcp/tools/check-expiry.js +29 -0
  148. package/dist/mcp/tools/check-expiry.js.map +1 -0
  149. package/dist/mcp/tools/check-usage.d.ts +25 -0
  150. package/dist/mcp/tools/check-usage.d.ts.map +1 -0
  151. package/dist/mcp/tools/check-usage.js +33 -0
  152. package/dist/mcp/tools/check-usage.js.map +1 -0
  153. package/dist/mcp/tools/get-monthly-picks.d.ts +25 -0
  154. package/dist/mcp/tools/get-monthly-picks.d.ts.map +1 -0
  155. package/dist/mcp/tools/get-monthly-picks.js +35 -0
  156. package/dist/mcp/tools/get-monthly-picks.js.map +1 -0
  157. package/dist/mcp/tools/index.d.ts +41 -0
  158. package/dist/mcp/tools/index.d.ts.map +1 -0
  159. package/dist/mcp/tools/index.js +139 -0
  160. package/dist/mcp/tools/index.js.map +1 -0
  161. package/dist/mcp/tools/memory-recent.d.ts +17 -0
  162. package/dist/mcp/tools/memory-recent.d.ts.map +1 -0
  163. package/dist/mcp/tools/memory-recent.js +46 -0
  164. package/dist/mcp/tools/memory-recent.js.map +1 -0
  165. package/dist/mcp/tools/memory-save.d.ts +15 -0
  166. package/dist/mcp/tools/memory-save.d.ts.map +1 -0
  167. package/dist/mcp/tools/memory-save.js +53 -0
  168. package/dist/mcp/tools/memory-save.js.map +1 -0
  169. package/dist/mcp/tools/memory-search.d.ts +24 -0
  170. package/dist/mcp/tools/memory-search.d.ts.map +1 -0
  171. package/dist/mcp/tools/memory-search.js +64 -0
  172. package/dist/mcp/tools/memory-search.js.map +1 -0
  173. package/dist/mcp/tools/record-acceptance.d.ts +22 -0
  174. package/dist/mcp/tools/record-acceptance.d.ts.map +1 -0
  175. package/dist/mcp/tools/record-acceptance.js +33 -0
  176. package/dist/mcp/tools/record-acceptance.js.map +1 -0
  177. package/dist/mcp/tools/record-rejection.d.ts +23 -0
  178. package/dist/mcp/tools/record-rejection.d.ts.map +1 -0
  179. package/dist/mcp/tools/record-rejection.js +34 -0
  180. package/dist/mcp/tools/record-rejection.js.map +1 -0
  181. package/dist/mcp/tools/suggest-route.d.ts +26 -0
  182. package/dist/mcp/tools/suggest-route.d.ts.map +1 -0
  183. package/dist/mcp/tools/suggest-route.js +56 -0
  184. package/dist/mcp/tools/suggest-route.js.map +1 -0
  185. package/dist/mcp/tools/user-preferences.d.ts +22 -0
  186. package/dist/mcp/tools/user-preferences.d.ts.map +1 -0
  187. package/dist/mcp/tools/user-preferences.js +63 -0
  188. package/dist/mcp/tools/user-preferences.js.map +1 -0
  189. package/dist/mcp-stdio/bin.js +0 -0
  190. package/dist/memory/index.d.ts +5 -0
  191. package/dist/memory/index.d.ts.map +1 -0
  192. package/dist/memory/index.js +4 -0
  193. package/dist/memory/index.js.map +1 -0
  194. package/dist/memory/mem0-client.d.ts +32 -0
  195. package/dist/memory/mem0-client.d.ts.map +1 -0
  196. package/dist/memory/mem0-client.js +161 -0
  197. package/dist/memory/mem0-client.js.map +1 -0
  198. package/dist/memory/types.d.ts +47 -0
  199. package/dist/memory/types.d.ts.map +1 -0
  200. package/dist/memory/types.js +20 -0
  201. package/dist/memory/types.js.map +1 -0
  202. package/dist/router/catalog.d.ts +4 -0
  203. package/dist/router/catalog.d.ts.map +1 -0
  204. package/dist/router/catalog.js +103 -0
  205. package/dist/router/catalog.js.map +1 -0
  206. package/dist/router/classifier.d.ts +5 -0
  207. package/dist/router/classifier.d.ts.map +1 -0
  208. package/dist/router/classifier.js +43 -0
  209. package/dist/router/classifier.js.map +1 -0
  210. package/dist/router/index.d.ts +7 -0
  211. package/dist/router/index.d.ts.map +1 -0
  212. package/dist/router/index.js +6 -0
  213. package/dist/router/index.js.map +1 -0
  214. package/dist/router/litellm-config.d.ts +34 -0
  215. package/dist/router/litellm-config.d.ts.map +1 -0
  216. package/dist/router/litellm-config.js +78 -0
  217. package/dist/router/litellm-config.js.map +1 -0
  218. package/dist/router/route.d.ts +3 -0
  219. package/dist/router/route.d.ts.map +1 -0
  220. package/dist/router/route.js +63 -0
  221. package/dist/router/route.js.map +1 -0
  222. package/dist/router/types.d.ts +36 -0
  223. package/dist/router/types.d.ts.map +1 -0
  224. package/dist/router/types.js +7 -0
  225. package/dist/router/types.js.map +1 -0
  226. package/dist/saas-connectors/base.d.ts +16 -0
  227. package/dist/saas-connectors/base.d.ts.map +1 -0
  228. package/dist/saas-connectors/base.js +16 -0
  229. package/dist/saas-connectors/base.js.map +1 -0
  230. package/dist/saas-connectors/brave.d.ts +19 -0
  231. package/dist/saas-connectors/brave.d.ts.map +1 -0
  232. package/dist/saas-connectors/brave.js +50 -0
  233. package/dist/saas-connectors/brave.js.map +1 -0
  234. package/dist/saas-connectors/fal.d.ts +15 -0
  235. package/dist/saas-connectors/fal.d.ts.map +1 -0
  236. package/dist/saas-connectors/fal.js +35 -0
  237. package/dist/saas-connectors/fal.js.map +1 -0
  238. package/dist/saas-connectors/index.d.ts +11 -0
  239. package/dist/saas-connectors/index.d.ts.map +1 -0
  240. package/dist/saas-connectors/index.js +32 -0
  241. package/dist/saas-connectors/index.js.map +1 -0
  242. package/dist/saas-connectors/replicate.d.ts +19 -0
  243. package/dist/saas-connectors/replicate.d.ts.map +1 -0
  244. package/dist/saas-connectors/replicate.js +43 -0
  245. package/dist/saas-connectors/replicate.js.map +1 -0
  246. package/dist/saas-connectors/serper.d.ts +19 -0
  247. package/dist/saas-connectors/serper.d.ts.map +1 -0
  248. package/dist/saas-connectors/serper.js +47 -0
  249. package/dist/saas-connectors/serper.js.map +1 -0
  250. package/dist/saas-connectors/types.d.ts +31 -0
  251. package/dist/saas-connectors/types.d.ts.map +1 -0
  252. package/dist/saas-connectors/types.js +6 -0
  253. package/dist/saas-connectors/types.js.map +1 -0
  254. package/dist/scheduler/index.d.ts +4 -0
  255. package/dist/scheduler/index.d.ts.map +1 -0
  256. package/dist/scheduler/index.js +4 -0
  257. package/dist/scheduler/index.js.map +1 -0
  258. package/dist/scheduler/poll.d.ts +4 -0
  259. package/dist/scheduler/poll.d.ts.map +1 -0
  260. package/dist/scheduler/poll.js +170 -0
  261. package/dist/scheduler/poll.js.map +1 -0
  262. package/dist/scheduler/scheduler.d.ts +18 -0
  263. package/dist/scheduler/scheduler.d.ts.map +1 -0
  264. package/dist/scheduler/scheduler.js +67 -0
  265. package/dist/scheduler/scheduler.js.map +1 -0
  266. package/dist/scheduler/types.d.ts +49 -0
  267. package/dist/scheduler/types.d.ts.map +1 -0
  268. package/dist/scheduler/types.js +14 -0
  269. package/dist/scheduler/types.js.map +1 -0
  270. package/dist/skill-installer/npm-installer.d.ts +11 -1
  271. package/dist/skill-installer/npm-installer.d.ts.map +1 -1
  272. package/dist/skill-installer/npm-installer.js +13 -3
  273. package/dist/skill-installer/npm-installer.js.map +1 -1
  274. package/dist/vault/cli.d.ts +2 -0
  275. package/dist/vault/cli.d.ts.map +1 -0
  276. package/dist/vault/cli.js +170 -0
  277. package/dist/vault/cli.js.map +1 -0
  278. package/dist/vault/crypto.d.ts +9 -0
  279. package/dist/vault/crypto.d.ts.map +1 -0
  280. package/dist/vault/crypto.js +54 -0
  281. package/dist/vault/crypto.js.map +1 -0
  282. package/dist/vault/index.d.ts +6 -0
  283. package/dist/vault/index.d.ts.map +1 -0
  284. package/dist/vault/index.js +5 -0
  285. package/dist/vault/index.js.map +1 -0
  286. package/dist/vault/types.d.ts +28 -0
  287. package/dist/vault/types.d.ts.map +1 -0
  288. package/dist/vault/types.js +22 -0
  289. package/dist/vault/types.js.map +1 -0
  290. package/dist/vault/vault.d.ts +34 -0
  291. package/dist/vault/vault.d.ts.map +1 -0
  292. package/dist/vault/vault.js +149 -0
  293. package/dist/vault/vault.js.map +1 -0
  294. package/package.json +17 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beacon-mcp-tools-v1.d.ts","sourceRoot":"","sources":["../../../src/mcp/_vendored-contracts/beacon-mcp-tools-v1.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ // AUTO-GENERATED — do not edit. Source: shared/contracts/envelope-v2/beacon-mcp-tools-v1.ts
2
+ // Re-generate via `npx tsx sdk/skillfm-local/scripts/inline-mcp-contracts.ts`.
3
+ // Edit the source file in shared/contracts/envelope-v2/ instead.
4
+ // @skillfm/contracts — Beacon MCP Skill Tools V1
5
+ //
6
+ // 本文件是 SkillFM Beacon Phase 1 MVP 的 MCP skill 工具集 CANONICAL 契约。
7
+ // MCP skill (sdk/beacon-mcp) 和 Brain (platform/api/src/beacon/) 双方实现都从这里 import。
8
+ //
9
+ // 权威来源:
10
+ // docs/prd/PRD-SKILLFM-MCP-SKILL-V1.md §4
11
+ // docs/prd/PRD-SKILLFM-BEACON-CALL-SEQUENCE-V1.md §3
12
+ //
13
+ // 设计原则:
14
+ // - 30+ tools 完整名单见 §1 SKILLFM_TOOL_NAMES (常量,不能漂)
15
+ // - Phase 0 只详细定义"关键 5 个"代表 tool(§3-§7)
16
+ // 其余 25+ tool 留 TODO,Week 5 实施时补完
17
+ // - Pro/Free 边界靠 Output 里的 isProLocked / proUpgradeHint 字段表达
18
+ // 不是 input 直接拒(让 Free 用户能看到价值,而不是 403)
19
+ //
20
+ // BYOK 红线提醒:
21
+ // tool input/output 永远不出现 API key / cookie / session 等用户凭证
22
+ // 涉及 LLM 路由时只交换 model 名 + cost 数字,实际 LLM 调用由 agent 用户机器自跑
23
+ // ============================================================================
24
+ // §1 工具命名清单(全 30+ tools 名字定下来,实现可分批)
25
+ // ============================================================================
26
+ /** 全部 beacon MCP tool 名(命名约定: skillfm_<verb>_<noun>) */
27
+ export const SKILLFM_TOOL_NAMES = {
28
+ // 数据查询类(agent 主动查信息)
29
+ query: [
30
+ 'skillfm_check_usage',
31
+ 'skillfm_check_balance',
32
+ 'skillfm_check_expiry',
33
+ 'skillfm_list_assets',
34
+ 'skillfm_get_savings_summary',
35
+ ],
36
+ // 路由建议类(任务前)
37
+ routing: [
38
+ 'skillfm_suggest_route',
39
+ 'skillfm_explain_routing',
40
+ ],
41
+ // 异常检测类(任务中)
42
+ anomaly: [
43
+ 'skillfm_check_session_health',
44
+ 'skillfm_check_burn_rate',
45
+ ],
46
+ // 优化建议类(任务后)
47
+ optimize: [
48
+ 'skillfm_suggest_caching',
49
+ 'skillfm_suggest_batching',
50
+ 'skillfm_suggest_clear_context',
51
+ ],
52
+ // 时效预警类
53
+ expiry: [
54
+ 'skillfm_check_domain_expiry',
55
+ 'skillfm_check_ssl_expiry',
56
+ 'skillfm_check_card_expiry',
57
+ 'skillfm_check_balance_runway',
58
+ ],
59
+ // 跨工具发现类
60
+ discover: [
61
+ 'skillfm_suggest_skill',
62
+ 'skillfm_search_skill_market',
63
+ ],
64
+ // Avatar 推荐类
65
+ avatar: [
66
+ 'skillfm_avatar_market',
67
+ 'skillfm_explain_avatar',
68
+ ],
69
+ // Pro 升级类
70
+ upgrade: [
71
+ 'skillfm_promote_pro',
72
+ 'skillfm_show_savings_potential',
73
+ ],
74
+ // Memory / 凭证类
75
+ storage: [
76
+ 'skillfm_save_credential',
77
+ 'skillfm_get_credential',
78
+ 'skillfm_memory_sync',
79
+ 'skillfm_memory_recall',
80
+ ],
81
+ // 月度推送类(Pro)
82
+ push: [
83
+ 'skillfm_get_monthly_picks',
84
+ 'skillfm_install_recommended_skill',
85
+ ],
86
+ // 反馈类
87
+ feedback: [
88
+ 'skillfm_record_acceptance',
89
+ 'skillfm_record_rejection',
90
+ 'skillfm_user_preferences',
91
+ ],
92
+ };
93
+ /** 把分组扁平化的所有 tool 名,Phase 0 用于 sanity check */
94
+ export const ALL_SKILLFM_TOOL_NAMES = Object.values(SKILLFM_TOOL_NAMES).flat();
95
+ // ============================================================================
96
+ // §3 关键 tool 1: skillfm_check_usage(数据查询)
97
+ // ============================================================================
98
+ export const SkillFmPlatform = {
99
+ ALL: 'all',
100
+ ANTHROPIC: 'anthropic',
101
+ OPENAI: 'openai',
102
+ DEEPSEEK: 'deepseek',
103
+ QWEN: 'qwen',
104
+ DOUBAO: 'doubao',
105
+ KIMI: 'kimi',
106
+ CURSOR: 'cursor',
107
+ CLAUDE_CODE: 'claude_code',
108
+ OPENCLAW: 'openclaw',
109
+ CLINE: 'cline',
110
+ };
111
+ /** 提取分类 letter,client 决策树用来查 user_prefs.disabledCategories */
112
+ export function getCategoryFromTriggerType(triggerType) {
113
+ const m = /^([A-H])\d+_/.exec(triggerType);
114
+ return m ? m[1] : null;
115
+ }
116
+ // ============================================================================
117
+ // §13 Phase 1 → Phase 2 演进的 stable surface
118
+ // ============================================================================
119
+ /**
120
+ * 本契约 v1 → v2 演进规则:
121
+ * - 字段只允许加,不能删
122
+ * - enum 只允许加新值,不能改/删现值
123
+ * - tool 名字本身永不改(改 = 出新 tool 名 + 老 tool 标 deprecated)
124
+ *
125
+ * 任何破坏性变更必须出 beacon-mcp-tools-v2.ts 新文件,v1 保留至少 6 个月。
126
+ */
127
+ export const BEACON_MCP_TOOLS_CONTRACT_VERSION = 'v1';
128
+ //# sourceMappingURL=beacon-mcp-tools-v1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beacon-mcp-tools-v1.js","sourceRoot":"","sources":["../../../src/mcp/_vendored-contracts/beacon-mcp-tools-v1.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,mFAAmF;AACnF,qEAAqE;AAErE,iDAAiD;AACjD,EAAE;AACF,gEAAgE;AAChE,iFAAiF;AACjF,EAAE;AACF,QAAQ;AACR,4CAA4C;AAC5C,uDAAuD;AACvD,EAAE;AACF,QAAQ;AACR,qDAAqD;AACrD,0CAA0C;AAC1C,sCAAsC;AACtC,+DAA+D;AAC/D,2CAA2C;AAC3C,EAAE;AACF,aAAa;AACb,6DAA6D;AAC7D,4DAA4D;AAE5D,+EAA+E;AAC/E,qCAAqC;AACrC,+EAA+E;AAE/E,wDAAwD;AACxD,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,qBAAqB;IACrB,KAAK,EAAE;QACL,qBAAqB;QACrB,uBAAuB;QACvB,sBAAsB;QACtB,qBAAqB;QACrB,6BAA6B;KAC9B;IACD,aAAa;IACb,OAAO,EAAE;QACP,uBAAuB;QACvB,yBAAyB;KAC1B;IACD,aAAa;IACb,OAAO,EAAE;QACP,8BAA8B;QAC9B,yBAAyB;KAC1B;IACD,aAAa;IACb,QAAQ,EAAE;QACR,yBAAyB;QACzB,0BAA0B;QAC1B,+BAA+B;KAChC;IACD,QAAQ;IACR,MAAM,EAAE;QACN,6BAA6B;QAC7B,0BAA0B;QAC1B,2BAA2B;QAC3B,8BAA8B;KAC/B;IACD,SAAS;IACT,QAAQ,EAAE;QACR,uBAAuB;QACvB,6BAA6B;KAC9B;IACD,aAAa;IACb,MAAM,EAAE;QACN,uBAAuB;QACvB,wBAAwB;KACzB;IACD,UAAU;IACV,OAAO,EAAE;QACP,qBAAqB;QACrB,gCAAgC;KACjC;IACD,eAAe;IACf,OAAO,EAAE;QACP,yBAAyB;QACzB,wBAAwB;QACxB,qBAAqB;QACrB,uBAAuB;KACxB;IACD,aAAa;IACb,IAAI,EAAE;QACJ,2BAA2B;QAC3B,mCAAmC;KACpC;IACD,MAAM;IACN,QAAQ,EAAE;QACR,2BAA2B;QAC3B,0BAA0B;QAC1B,0BAA0B;KAC3B;CACO,CAAC;AAEX,+CAA+C;AAC/C,MAAM,CAAC,MAAM,sBAAsB,GAAsB,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,CAAC;AA+ClG,+EAA+E;AAC/E,0CAA0C;AAC1C,+EAA+E;AAE/E,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,GAAG,EAAE,KAAK;IACV,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,aAAa;IAC1B,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;CACN,CAAC;AAsVX,8DAA8D;AAC9D,MAAM,UAAU,0BAA0B,CAAC,WAAwB;IACjE,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3C,OAAO,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAwB,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED,+EAA+E;AAC/E,2CAA2C;AAC3C,+EAA+E;AAE/E;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,IAAa,CAAC"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * src/brain-client.ts — Thin HTTPS wrapper for /v1/beacon/* endpoints.
3
+ *
4
+ * Phase 0 contract:
5
+ * - Every method returns a `BrainResult<T>` envelope. Network/5xx/contract
6
+ * drift never throws — callers always see ok=false and can fall back to
7
+ * local cache without try/catch noise.
8
+ * - 3-attempt exponential backoff (1s / 2s / 4s); 5s per-attempt timeout.
9
+ * - All Phase 0 method bodies return mock fixtures matching
10
+ * ACCEPTANCE-SCENARIO §1.1 numbers ($487 spend, $312 savings, etc.) so
11
+ * the MCP server can demo the call sequence end-to-end without a live
12
+ * brain.
13
+ *
14
+ * BYOK red line: this file MUST NOT read or transmit any LLM API key /
15
+ * cookie / vault secret. The only credential it sends is the
16
+ * `Authorization: Bearer <agentToken>` header (an opaque SkillFM-issued token).
17
+ *
18
+ * TODO Week 5:
19
+ * - Real fetch() against api.skillfm.ai (endpoints listed below).
20
+ * - HTTP-level error → SkillFmError code mapping (429 → BRAIN_RATE_LIMITED,
21
+ * 5xx → BRAIN_INTERNAL, network ECONN → NETWORK_UNREACHABLE).
22
+ * - Idempotency-key on POSTs (record-acceptance / record-rejection) so retry
23
+ * storms don't double-count feedback.
24
+ * - ETag / If-None-Match on GET /rules to take advantage of brain side
25
+ * stale-while-revalidate.
26
+ * - structured tracing (correlation-id) so a brain log line can be linked
27
+ * back to a specific MCP tool invocation.
28
+ *
29
+ * Endpoint inventory (canonical list lives in beacon-rule-protocol-v1.ts,
30
+ * which subagent A will write later — keep names in sync when that arrives):
31
+ * GET /v1/beacon/rules
32
+ * POST /v1/beacon/feedback
33
+ * GET /v1/beacon/preferences
34
+ * PUT /v1/beacon/preferences
35
+ * GET /v1/beacon/monthly-picks
36
+ * GET /v1/beacon/assets
37
+ * POST /v1/beacon/usage-snapshots
38
+ */
39
+ import { type SkillFmCheckUsageOutput, type SkillFmCheckExpiryOutput, type SkillFmAvatarMarketOutput, type SkillFmGetMonthlyPicksOutput, type SkillFmRecordFeedbackOutput, type UserPreferences, type SkillFmRecordAcceptanceInput, type SkillFmRecordRejectionInput } from './_vendored-contracts/beacon-mcp-tools-v1.js';
40
+ export interface BrainClientOpts {
41
+ agentToken: string | null;
42
+ baseUrl: string;
43
+ /** override default 5000ms */
44
+ timeoutMs?: number;
45
+ }
46
+ export type BrainResult<T> = {
47
+ ok: true;
48
+ data: T;
49
+ } | {
50
+ ok: false;
51
+ code: string;
52
+ message: string;
53
+ retryable: boolean;
54
+ };
55
+ export declare class BrainClient {
56
+ private readonly agentToken;
57
+ private readonly baseUrl;
58
+ private readonly timeoutMs;
59
+ constructor(opts: BrainClientOpts);
60
+ /** True if no token configured — caller should serve cache / mock fixtures. */
61
+ isDegraded(): boolean;
62
+ /** GET /v1/beacon/rules — Phase 0 mock; Week 5 real fetch. */
63
+ fetchRule(triggerType: string, _triggerContext: Record<string, unknown>, _userProfile: Record<string, unknown>): Promise<BrainResult<{
64
+ ruleId: string;
65
+ payload: Record<string, unknown>;
66
+ }>>;
67
+ /** POST /v1/beacon/feedback — record acceptance OR rejection. */
68
+ postFeedback(kind: 'acceptance' | 'rejection', _input: SkillFmRecordAcceptanceInput | SkillFmRecordRejectionInput): Promise<BrainResult<SkillFmRecordFeedbackOutput>>;
69
+ /** GET /v1/beacon/preferences */
70
+ getPreferences(): Promise<BrainResult<UserPreferences>>;
71
+ /** PUT /v1/beacon/preferences */
72
+ putPreferences(_prefs: UserPreferences): Promise<BrainResult<{
73
+ ok: true;
74
+ }>>;
75
+ /** GET /v1/beacon/monthly-picks?personalized=... */
76
+ getMonthlyPicks(_personalized: boolean): Promise<BrainResult<SkillFmGetMonthlyPicksOutput>>;
77
+ /** GET /v1/beacon/assets?withinDays=&category= */
78
+ getAssets(_withinDays?: number, _category?: string): Promise<BrainResult<SkillFmCheckExpiryOutput>>;
79
+ /** GET /v1/beacon/usage */
80
+ getUsage(): Promise<BrainResult<SkillFmCheckUsageOutput>>;
81
+ /** GET /v1/beacon/avatar-market */
82
+ getAvatarMarket(_intent: string): Promise<BrainResult<SkillFmAvatarMarketOutput>>;
83
+ /** POST /v1/beacon/usage-snapshots — agents push their own daily usage. */
84
+ postUsageSnapshot(_snapshots: Array<Record<string, unknown>>): Promise<BrainResult<{
85
+ accepted: number;
86
+ }>>;
87
+ /**
88
+ * For tests that need to assert headers / URL. Not exported via index.ts.
89
+ */
90
+ _describe(): {
91
+ baseUrl: string;
92
+ hasToken: boolean;
93
+ timeoutMs: number;
94
+ };
95
+ }
96
+ //# sourceMappingURL=brain-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-client.d.ts","sourceRoot":"","sources":["../../src/mcp/brain-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,eAAe,EACpB,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EACjC,MAAM,8CAA8C,CAAC;AAItD,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,IACrB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GACrB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC;AAsFrE,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,IAAI,EAAE,eAAe;IAMjC,+EAA+E;IAC/E,UAAU,IAAI,OAAO;IAIrB,8DAA8D;IACxD,SAAS,CACb,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACpC,OAAO,CAAC,WAAW,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IAa7E,iEAAiE;IAC3D,YAAY,CAChB,IAAI,EAAE,YAAY,GAAG,WAAW,EAChC,MAAM,EAAE,4BAA4B,GAAG,2BAA2B,GACjE,OAAO,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC;IAYpD,iCAAiC;IAC3B,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IAW7D,iCAAiC;IAC3B,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IASjF,oDAAoD;IAC9C,eAAe,CACnB,aAAa,EAAE,OAAO,GACrB,OAAO,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAC;IAMrD,kDAAkD;IAC5C,SAAS,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IAMzG,2BAA2B;IACrB,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;IAM/D,mCAAmC;IAC7B,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;IAMvF,2EAA2E;IACrE,iBAAiB,CACrB,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACzC,OAAO,CAAC,WAAW,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAM7C;;OAEG;IACH,SAAS,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;CAOvE"}
@@ -0,0 +1,214 @@
1
+ /**
2
+ * src/brain-client.ts — Thin HTTPS wrapper for /v1/beacon/* endpoints.
3
+ *
4
+ * Phase 0 contract:
5
+ * - Every method returns a `BrainResult<T>` envelope. Network/5xx/contract
6
+ * drift never throws — callers always see ok=false and can fall back to
7
+ * local cache without try/catch noise.
8
+ * - 3-attempt exponential backoff (1s / 2s / 4s); 5s per-attempt timeout.
9
+ * - All Phase 0 method bodies return mock fixtures matching
10
+ * ACCEPTANCE-SCENARIO §1.1 numbers ($487 spend, $312 savings, etc.) so
11
+ * the MCP server can demo the call sequence end-to-end without a live
12
+ * brain.
13
+ *
14
+ * BYOK red line: this file MUST NOT read or transmit any LLM API key /
15
+ * cookie / vault secret. The only credential it sends is the
16
+ * `Authorization: Bearer <agentToken>` header (an opaque SkillFM-issued token).
17
+ *
18
+ * TODO Week 5:
19
+ * - Real fetch() against api.skillfm.ai (endpoints listed below).
20
+ * - HTTP-level error → SkillFmError code mapping (429 → BRAIN_RATE_LIMITED,
21
+ * 5xx → BRAIN_INTERNAL, network ECONN → NETWORK_UNREACHABLE).
22
+ * - Idempotency-key on POSTs (record-acceptance / record-rejection) so retry
23
+ * storms don't double-count feedback.
24
+ * - ETag / If-None-Match on GET /rules to take advantage of brain side
25
+ * stale-while-revalidate.
26
+ * - structured tracing (correlation-id) so a brain log line can be linked
27
+ * back to a specific MCP tool invocation.
28
+ *
29
+ * Endpoint inventory (canonical list lives in beacon-rule-protocol-v1.ts,
30
+ * which subagent A will write later — keep names in sync when that arrives):
31
+ * GET /v1/beacon/rules
32
+ * POST /v1/beacon/feedback
33
+ * GET /v1/beacon/preferences
34
+ * PUT /v1/beacon/preferences
35
+ * GET /v1/beacon/monthly-picks
36
+ * GET /v1/beacon/assets
37
+ * POST /v1/beacon/usage-snapshots
38
+ */
39
+ import { SKILLFM_ERROR_CODES } from './errors.js';
40
+ /**
41
+ * Mock fixture matching ACCEPTANCE-SCENARIO §1.1 A2 — $487 monthly spend,
42
+ * 67% Anthropic, $312 already saved. Used until brain endpoints land.
43
+ */
44
+ const MOCK_USAGE_FIXTURE = {
45
+ totalSpent: { amount: 487, currency: 'USD' },
46
+ byPlatform: {
47
+ anthropic: { amount: 326, tokens: 12_400_000, calls: 8_240 },
48
+ openai: { amount: 102, tokens: 3_900_000, calls: 1_810 },
49
+ deepseek: { amount: 59, tokens: 18_000_000, calls: 4_300 },
50
+ },
51
+ savingsThisPeriod: {
52
+ amount: 312,
53
+ mechanisms: ['model_routing', 'prompt_cache', 'context_compression'],
54
+ },
55
+ trend: { direction: 'down', percentChange: -8 },
56
+ warnings: [],
57
+ };
58
+ const MOCK_EXPIRY_FIXTURE = {
59
+ items: [],
60
+ proUpgradeHint: {
61
+ en: 'Upgrade to Pro to see all 30-day expiry alerts (domains, SSL, cards).',
62
+ zh: '升级 Pro 查看 30 天内全部到期提醒(域名 / SSL / 卡片)。',
63
+ },
64
+ };
65
+ const MOCK_AVATAR_FIXTURE = {
66
+ matches: [],
67
+ reasoningWhy: {
68
+ en: 'Phase 0 mock — no avatars matched this intent yet.',
69
+ zh: 'Phase 0 占位 — 暂无匹配 avatar。',
70
+ },
71
+ };
72
+ const MOCK_MONTHLY_PICKS_FIXTURE = {
73
+ monthLabel: '2026-05',
74
+ curationTheme: {
75
+ en: 'Cost-aware coding skills',
76
+ zh: '省钱编程技能精选',
77
+ },
78
+ picks: [],
79
+ };
80
+ // ============================================================================
81
+ // Backoff helper
82
+ // ============================================================================
83
+ const DEFAULT_TIMEOUT_MS = 5000;
84
+ const RETRY_DELAYS_MS = [1_000, 2_000, 4_000];
85
+ async function _sleep(ms) {
86
+ await new Promise((r) => setTimeout(r, ms));
87
+ }
88
+ /**
89
+ * Phase 0 — wrap every method. Currently always resolves to mock data,
90
+ * but the structure is what Week 5 implementations will plug into.
91
+ */
92
+ async function _attemptWithBackoff(fn) {
93
+ let lastErr = {
94
+ ok: false,
95
+ code: SKILLFM_ERROR_CODES.NETWORK_UNREACHABLE,
96
+ message: 'no attempt made',
97
+ retryable: true,
98
+ };
99
+ for (let i = 0; i < RETRY_DELAYS_MS.length; i += 1) {
100
+ const result = await fn();
101
+ if (result.ok)
102
+ return result;
103
+ lastErr = result;
104
+ if (!result.retryable)
105
+ return result;
106
+ if (i < RETRY_DELAYS_MS.length - 1) {
107
+ await _sleep(RETRY_DELAYS_MS[i]);
108
+ }
109
+ }
110
+ return lastErr;
111
+ }
112
+ // ============================================================================
113
+ // Client
114
+ // ============================================================================
115
+ export class BrainClient {
116
+ agentToken;
117
+ baseUrl;
118
+ timeoutMs;
119
+ constructor(opts) {
120
+ this.agentToken = opts.agentToken;
121
+ this.baseUrl = opts.baseUrl.replace(/\/$/, '');
122
+ this.timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
123
+ }
124
+ /** True if no token configured — caller should serve cache / mock fixtures. */
125
+ isDegraded() {
126
+ return this.agentToken === null;
127
+ }
128
+ /** GET /v1/beacon/rules — Phase 0 mock; Week 5 real fetch. */
129
+ async fetchRule(triggerType, _triggerContext, _userProfile) {
130
+ return _attemptWithBackoff(async () => {
131
+ // TODO Week 5: real fetch with abortcontroller(this.timeoutMs)
132
+ return {
133
+ ok: true,
134
+ data: {
135
+ ruleId: `mock_rule_${triggerType}`,
136
+ payload: {},
137
+ },
138
+ };
139
+ });
140
+ }
141
+ /** POST /v1/beacon/feedback — record acceptance OR rejection. */
142
+ async postFeedback(kind, _input) {
143
+ return _attemptWithBackoff(async () => {
144
+ return {
145
+ ok: true,
146
+ data: {
147
+ recorded: true,
148
+ acceptanceRateForCategory: kind === 'acceptance' ? 0.42 : 0.31,
149
+ },
150
+ };
151
+ });
152
+ }
153
+ /** GET /v1/beacon/preferences */
154
+ async getPreferences() {
155
+ return _attemptWithBackoff(async () => {
156
+ return {
157
+ ok: false,
158
+ code: SKILLFM_ERROR_CODES.TOOL_NOT_IMPLEMENTED,
159
+ message: 'preferences are local-only in Phase 0',
160
+ retryable: false,
161
+ };
162
+ });
163
+ }
164
+ /** PUT /v1/beacon/preferences */
165
+ async putPreferences(_prefs) {
166
+ return _attemptWithBackoff(async () => {
167
+ return {
168
+ ok: true,
169
+ data: { ok: true },
170
+ };
171
+ });
172
+ }
173
+ /** GET /v1/beacon/monthly-picks?personalized=... */
174
+ async getMonthlyPicks(_personalized) {
175
+ return _attemptWithBackoff(async () => {
176
+ return { ok: true, data: MOCK_MONTHLY_PICKS_FIXTURE };
177
+ });
178
+ }
179
+ /** GET /v1/beacon/assets?withinDays=&category= */
180
+ async getAssets(_withinDays, _category) {
181
+ return _attemptWithBackoff(async () => {
182
+ return { ok: true, data: MOCK_EXPIRY_FIXTURE };
183
+ });
184
+ }
185
+ /** GET /v1/beacon/usage */
186
+ async getUsage() {
187
+ return _attemptWithBackoff(async () => {
188
+ return { ok: true, data: MOCK_USAGE_FIXTURE };
189
+ });
190
+ }
191
+ /** GET /v1/beacon/avatar-market */
192
+ async getAvatarMarket(_intent) {
193
+ return _attemptWithBackoff(async () => {
194
+ return { ok: true, data: MOCK_AVATAR_FIXTURE };
195
+ });
196
+ }
197
+ /** POST /v1/beacon/usage-snapshots — agents push their own daily usage. */
198
+ async postUsageSnapshot(_snapshots) {
199
+ return _attemptWithBackoff(async () => {
200
+ return { ok: true, data: { accepted: 0 } };
201
+ });
202
+ }
203
+ /**
204
+ * For tests that need to assert headers / URL. Not exported via index.ts.
205
+ */
206
+ _describe() {
207
+ return {
208
+ baseUrl: this.baseUrl,
209
+ hasToken: this.agentToken !== null,
210
+ timeoutMs: this.timeoutMs,
211
+ };
212
+ }
213
+ }
214
+ //# sourceMappingURL=brain-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-client.js","sourceRoot":"","sources":["../../src/mcp/brain-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * src/cache.ts — Local filesystem cache paths + tiny JSON helpers.
3
+ *
4
+ * Ownership layout (everything under `~/.skillfm/beacon-mcp/`):
5
+ * - rules-v{N}.json cached brain rule snapshot (stale-while-revalidate)
6
+ * - user-prefs.json UserPreferences from contract §9
7
+ * - session-cache.db suggestion dedupe + frequency-limit ledger (sqlite stub)
8
+ * - config.json agent token + apiBaseUrl (read by config.ts)
9
+ *
10
+ * Phase 0 keeps everything as JSON files — no real sqlite dependency to keep
11
+ * the npm tarball minimal. Session dedupe lives in-memory for now.
12
+ *
13
+ * TODO Week 5:
14
+ * - Open session-cache.db with `better-sqlite3` (lazy import to avoid
15
+ * making it a hard dep on agents that never use frequency limits).
16
+ * - Add atomic write helper (write to .tmp, rename) so MCP server kill
17
+ * mid-flush never corrupts user-prefs.json.
18
+ * - Add file-lock so two parallel MCP servers (Cursor + Claude Code on same
19
+ * mac) don't race on user-prefs.json — `proper-lockfile` candidate.
20
+ * - Add migration: rules-v1.json → rules-v2.json when contract version bumps.
21
+ */
22
+ import { type UserPreferences } from './_vendored-contracts/beacon-mcp-tools-v1.js';
23
+ export declare const BEACON_HOME: string;
24
+ export declare const RULES_FILE: string;
25
+ export declare const USER_PREFS_FILE: string;
26
+ export declare const SESSION_CACHE_DB: string;
27
+ export declare const SAVINGS_LEDGER_FILE: string;
28
+ export declare const DEFAULT_USER_PREFERENCES: UserPreferences;
29
+ export interface CachedRulesEnvelope {
30
+ /** ISO 8601 timestamp at which rules were fetched from brain */
31
+ fetchedAt: string;
32
+ /** Brain-issued rule revision */
33
+ revision: number;
34
+ /** Opaque rule blob — schema owned by beacon-rule-protocol-v1 (Week 5) */
35
+ rules: Record<string, unknown>;
36
+ }
37
+ export declare function loadRules(): CachedRulesEnvelope | null;
38
+ export declare function saveRules(envelope: CachedRulesEnvelope): void;
39
+ export declare function loadPrefs(): UserPreferences;
40
+ export declare function savePrefs(prefs: UserPreferences): void;
41
+ /**
42
+ * Phase 0 stub — returns a hand-rolled in-memory map. Week 5 will swap to
43
+ * better-sqlite3. The shape is intentionally minimal so callers can be
44
+ * rewritten without changing call sites.
45
+ */
46
+ export interface SessionCacheHandle {
47
+ /** Returns true if the same suggestion fired within the dedupe window. */
48
+ hasRecentSuggestion(key: string, withinMs: number): boolean;
49
+ recordSuggestion(key: string): void;
50
+ /** Number of suggestions emitted in the current session (for maxPerSession). */
51
+ sessionCount(): number;
52
+ reset(): void;
53
+ }
54
+ export declare function openSessionCache(): SessionCacheHandle;
55
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/mcp/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAMH,OAAO,EACL,KAAK,eAAe,EAErB,MAAM,8CAA8C,CAAC;AAMtD,eAAO,MAAM,WAAW,QAA4C,CAAC;AAErE,eAAO,MAAM,UAAU,QAGtB,CAAC;AACF,eAAO,MAAM,eAAe,QAAuC,CAAC;AACpE,eAAO,MAAM,gBAAgB,QAAwC,CAAC;AACtE,eAAO,MAAM,mBAAmB,QAA2C,CAAC;AAM5E,eAAO,MAAM,wBAAwB,EAAE,eAUtC,CAAC;AAgCF,MAAM,WAAW,mBAAmB;IAClC,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,wBAAgB,SAAS,IAAI,mBAAmB,GAAG,IAAI,CAGtD;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAE7D;AAED,wBAAgB,SAAS,IAAI,eAAe,CAE3C;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAEtD;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,0EAA0E;IAC1E,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5D,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,gFAAgF;IAChF,YAAY,IAAI,MAAM,CAAC;IACvB,KAAK,IAAI,IAAI,CAAC;CACf;AAED,wBAAgB,gBAAgB,IAAI,kBAAkB,CAqBrD"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * src/cache.ts — Local filesystem cache paths + tiny JSON helpers.
3
+ *
4
+ * Ownership layout (everything under `~/.skillfm/beacon-mcp/`):
5
+ * - rules-v{N}.json cached brain rule snapshot (stale-while-revalidate)
6
+ * - user-prefs.json UserPreferences from contract §9
7
+ * - session-cache.db suggestion dedupe + frequency-limit ledger (sqlite stub)
8
+ * - config.json agent token + apiBaseUrl (read by config.ts)
9
+ *
10
+ * Phase 0 keeps everything as JSON files — no real sqlite dependency to keep
11
+ * the npm tarball minimal. Session dedupe lives in-memory for now.
12
+ *
13
+ * TODO Week 5:
14
+ * - Open session-cache.db with `better-sqlite3` (lazy import to avoid
15
+ * making it a hard dep on agents that never use frequency limits).
16
+ * - Add atomic write helper (write to .tmp, rename) so MCP server kill
17
+ * mid-flush never corrupts user-prefs.json.
18
+ * - Add file-lock so two parallel MCP servers (Cursor + Claude Code on same
19
+ * mac) don't race on user-prefs.json — `proper-lockfile` candidate.
20
+ * - Add migration: rules-v1.json → rules-v2.json when contract version bumps.
21
+ */
22
+ import { mkdirSync, readFileSync, writeFileSync, existsSync } from 'node:fs';
23
+ import { join } from 'node:path';
24
+ import { homedir } from 'node:os';
25
+ import { BEACON_MCP_TOOLS_CONTRACT_VERSION, } from './_vendored-contracts/beacon-mcp-tools-v1.js';
26
+ // ============================================================================
27
+ // Path constants
28
+ // ============================================================================
29
+ export const BEACON_HOME = join(homedir(), '.skillfm', 'beacon-mcp');
30
+ export const RULES_FILE = join(BEACON_HOME, `rules-${BEACON_MCP_TOOLS_CONTRACT_VERSION}.json`);
31
+ export const USER_PREFS_FILE = join(BEACON_HOME, 'user-prefs.json');
32
+ export const SESSION_CACHE_DB = join(BEACON_HOME, 'session-cache.db');
33
+ export const SAVINGS_LEDGER_FILE = join(BEACON_HOME, 'savings-ledger.json');
34
+ // ============================================================================
35
+ // Defaults
36
+ // ============================================================================
37
+ export const DEFAULT_USER_PREFERENCES = {
38
+ disabledCategories: [],
39
+ maxPerSession: 3,
40
+ maxPerDay: 10,
41
+ quietHours: {
42
+ enabled: false,
43
+ start: '22:00',
44
+ end: '08:00',
45
+ timezone: 'UTC',
46
+ },
47
+ };
48
+ // ============================================================================
49
+ // Helpers
50
+ // ============================================================================
51
+ function ensureHome() {
52
+ if (!existsSync(BEACON_HOME)) {
53
+ mkdirSync(BEACON_HOME, { recursive: true });
54
+ }
55
+ }
56
+ function readJson(path, fallback) {
57
+ if (!existsSync(path))
58
+ return fallback;
59
+ try {
60
+ const raw = readFileSync(path, 'utf8');
61
+ return JSON.parse(raw);
62
+ }
63
+ catch (err) {
64
+ console.error(`[skillfm-beacon-mcp] cache read failed (${path}):`, err.message);
65
+ return fallback;
66
+ }
67
+ }
68
+ function writeJson(path, value) {
69
+ ensureHome();
70
+ writeFileSync(path, JSON.stringify(value, null, 2), 'utf8');
71
+ }
72
+ export function loadRules() {
73
+ if (!existsSync(RULES_FILE))
74
+ return null;
75
+ return readJson(RULES_FILE, null);
76
+ }
77
+ export function saveRules(envelope) {
78
+ writeJson(RULES_FILE, envelope);
79
+ }
80
+ export function loadPrefs() {
81
+ return readJson(USER_PREFS_FILE, DEFAULT_USER_PREFERENCES);
82
+ }
83
+ export function savePrefs(prefs) {
84
+ writeJson(USER_PREFS_FILE, prefs);
85
+ }
86
+ export function openSessionCache() {
87
+ const seen = new Map();
88
+ let count = 0;
89
+ return {
90
+ hasRecentSuggestion(key, withinMs) {
91
+ const t = seen.get(key);
92
+ if (t === undefined)
93
+ return false;
94
+ return Date.now() - t < withinMs;
95
+ },
96
+ recordSuggestion(key) {
97
+ seen.set(key, Date.now());
98
+ count += 1;
99
+ },
100
+ sessionCount() {
101
+ return count;
102
+ },
103
+ reset() {
104
+ seen.clear();
105
+ count = 0;
106
+ },
107
+ };
108
+ }
109
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/mcp/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAEL,iCAAiC,GAClC,MAAM,8CAA8C,CAAC;AAEtD,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;AAErE,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAC5B,WAAW,EACX,SAAS,iCAAiC,OAAO,CAClD,CAAC;AACF,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;AACpE,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;AACtE,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;AAE5E,+EAA+E;AAC/E,WAAW;AACX,+EAA+E;AAE/E,MAAM,CAAC,MAAM,wBAAwB,GAAoB;IACvD,kBAAkB,EAAE,EAAE;IACtB,aAAa,EAAE,CAAC;IAChB,SAAS,EAAE,EAAE;IACb,UAAU,EAAE;QACV,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,OAAO;QACZ,QAAQ,EAAE,KAAK;KAChB;CACF,CAAC;AAEF,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,SAAS,UAAU;IACjB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAI,IAAY,EAAE,QAAW;IAC5C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IACvC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,CAAC;IAC9B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,2CAA2C,IAAI,IAAI,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;QAC3F,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAI,IAAY,EAAE,KAAQ;IAC1C,UAAU,EAAE,CAAC;IACb,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAC9D,CAAC;AAeD,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,QAAQ,CAA6B,UAAU,EAAE,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,QAA6B;IACrD,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,QAAQ,CAAkB,eAAe,EAAE,wBAAwB,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAsB;IAC9C,SAAS,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;AACpC,CAAC;AAgBD,MAAM,UAAU,gBAAgB;IAC9B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO;QACL,mBAAmB,CAAC,GAAG,EAAE,QAAQ;YAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACxB,IAAI,CAAC,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC;YAClC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC;QACnC,CAAC;QACD,gBAAgB,CAAC,GAAG;YAClB,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAC1B,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;QACD,YAAY;YACV,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK;YACH,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,KAAK,GAAG,CAAC,CAAC;QACZ,CAAC;KACF,CAAC;AACJ,CAAC"}