@skillfm/local 2.7.9 → 2.7.11

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 (172) hide show
  1. package/dist/_vendored-contracts/beacon-assets-v1.d.ts +160 -0
  2. package/dist/_vendored-contracts/beacon-assets-v1.d.ts.map +1 -0
  3. package/dist/_vendored-contracts/beacon-assets-v1.js +29 -0
  4. package/dist/_vendored-contracts/beacon-assets-v1.js.map +1 -0
  5. package/dist/_vendored-contracts/beacon-mcp-tools-v1.d.ts +373 -0
  6. package/dist/_vendored-contracts/beacon-mcp-tools-v1.d.ts.map +1 -0
  7. package/dist/_vendored-contracts/beacon-mcp-tools-v1.js +131 -0
  8. package/dist/_vendored-contracts/beacon-mcp-tools-v1.js.map +1 -0
  9. package/dist/_vendored-contracts/beacon-preferences-v1.d.ts +68 -0
  10. package/dist/_vendored-contracts/beacon-preferences-v1.d.ts.map +1 -0
  11. package/dist/_vendored-contracts/beacon-preferences-v1.js +26 -0
  12. package/dist/_vendored-contracts/beacon-preferences-v1.js.map +1 -0
  13. package/dist/_vendored-contracts/beacon-rule-protocol-v1.d.ts +208 -0
  14. package/dist/_vendored-contracts/beacon-rule-protocol-v1.d.ts.map +1 -0
  15. package/dist/_vendored-contracts/beacon-rule-protocol-v1.js +25 -0
  16. package/dist/_vendored-contracts/beacon-rule-protocol-v1.js.map +1 -0
  17. package/dist/_vendored-contracts/beacon-usage-v1.d.ts +88 -0
  18. package/dist/_vendored-contracts/beacon-usage-v1.d.ts.map +1 -0
  19. package/dist/_vendored-contracts/beacon-usage-v1.js +27 -0
  20. package/dist/_vendored-contracts/beacon-usage-v1.js.map +1 -0
  21. package/dist/_vendored-contracts/index.d.ts +29 -0
  22. package/dist/_vendored-contracts/index.d.ts.map +1 -1
  23. package/dist/_vendored-contracts/index.js.map +1 -1
  24. package/dist/_vendored-contracts/safe-skill-observation-v1.d.ts +149 -0
  25. package/dist/_vendored-contracts/safe-skill-observation-v1.d.ts.map +1 -0
  26. package/dist/_vendored-contracts/safe-skill-observation-v1.js +23 -0
  27. package/dist/_vendored-contracts/safe-skill-observation-v1.js.map +1 -0
  28. package/dist/_vendored-contracts/skill-distribution.d.ts +16 -0
  29. package/dist/_vendored-contracts/skill-distribution.d.ts.map +1 -1
  30. package/dist/_vendored-contracts/skill-distribution.js.map +1 -1
  31. package/dist/agent-forcing/claude-code-skill-v2.d.ts +4 -1
  32. package/dist/agent-forcing/claude-code-skill-v2.d.ts.map +1 -1
  33. package/dist/agent-forcing/claude-code-skill-v2.js +5 -6
  34. package/dist/agent-forcing/claude-code-skill-v2.js.map +1 -1
  35. package/dist/agent-forcing/forcing-rules.d.ts +0 -9
  36. package/dist/agent-forcing/forcing-rules.d.ts.map +1 -1
  37. package/dist/agent-forcing/forcing-rules.js +61 -9
  38. package/dist/agent-forcing/forcing-rules.js.map +1 -1
  39. package/dist/agent-forcing/injectors.d.ts.map +1 -1
  40. package/dist/agent-forcing/injectors.js +11 -0
  41. package/dist/agent-forcing/injectors.js.map +1 -1
  42. package/dist/agent-forcing/slash-commands.d.ts +49 -0
  43. package/dist/agent-forcing/slash-commands.d.ts.map +1 -0
  44. package/dist/agent-forcing/slash-commands.js +166 -0
  45. package/dist/agent-forcing/slash-commands.js.map +1 -0
  46. package/dist/beacon/apprentice-capabilities.d.ts +10 -0
  47. package/dist/beacon/apprentice-capabilities.d.ts.map +1 -0
  48. package/dist/beacon/apprentice-capabilities.js +34 -0
  49. package/dist/beacon/apprentice-capabilities.js.map +1 -0
  50. package/dist/checkup/dimension-1-usage.d.ts +8 -1
  51. package/dist/checkup/dimension-1-usage.d.ts.map +1 -1
  52. package/dist/checkup/dimension-1-usage.js +3 -2
  53. package/dist/checkup/dimension-1-usage.js.map +1 -1
  54. package/dist/checkup/dimension-2-context.d.ts +12 -0
  55. package/dist/checkup/dimension-2-context.d.ts.map +1 -0
  56. package/dist/checkup/dimension-2-context.js +56 -0
  57. package/dist/checkup/dimension-2-context.js.map +1 -0
  58. package/dist/checkup/dimension-5-behavior.d.ts +12 -0
  59. package/dist/checkup/dimension-5-behavior.d.ts.map +1 -0
  60. package/dist/checkup/dimension-5-behavior.js +40 -0
  61. package/dist/checkup/dimension-5-behavior.js.map +1 -0
  62. package/dist/checkup/dimension-6-injection.d.ts +41 -0
  63. package/dist/checkup/dimension-6-injection.d.ts.map +1 -0
  64. package/dist/checkup/dimension-6-injection.js +74 -0
  65. package/dist/checkup/dimension-6-injection.js.map +1 -0
  66. package/dist/checkup/index.d.ts +3 -0
  67. package/dist/checkup/index.d.ts.map +1 -1
  68. package/dist/checkup/index.js +3 -0
  69. package/dist/checkup/index.js.map +1 -1
  70. package/dist/checkup/last-report.d.ts +32 -0
  71. package/dist/checkup/last-report.d.ts.map +1 -0
  72. package/dist/checkup/last-report.js +91 -0
  73. package/dist/checkup/last-report.js.map +1 -0
  74. package/dist/checkup/report.d.ts +13 -1
  75. package/dist/checkup/report.d.ts.map +1 -1
  76. package/dist/checkup/report.js +5 -3
  77. package/dist/checkup/report.js.map +1 -1
  78. package/dist/forcing-cli.d.ts +1 -1
  79. package/dist/forcing-cli.d.ts.map +1 -1
  80. package/dist/forcing-cli.js +1 -52
  81. package/dist/forcing-cli.js.map +1 -1
  82. package/dist/guard/bin.js +0 -0
  83. package/dist/guard/prompt-context.d.ts +2 -2
  84. package/dist/guard/prompt-context.d.ts.map +1 -1
  85. package/dist/guard/prompt-context.js +16 -21
  86. package/dist/guard/prompt-context.js.map +1 -1
  87. package/dist/index.js +15 -8
  88. package/dist/index.js.map +1 -1
  89. package/dist/mcp/brain-client.d.ts.map +1 -1
  90. package/dist/mcp/brain-client.js +3 -0
  91. package/dist/mcp/brain-client.js.map +1 -1
  92. package/dist/mcp/index.d.ts +1 -0
  93. package/dist/mcp/index.d.ts.map +1 -1
  94. package/dist/mcp/index.js +5 -0
  95. package/dist/mcp/index.js.map +1 -1
  96. package/dist/mcp/tools/checkup.d.ts +17 -2
  97. package/dist/mcp/tools/checkup.d.ts.map +1 -1
  98. package/dist/mcp/tools/checkup.js +41 -3
  99. package/dist/mcp/tools/checkup.js.map +1 -1
  100. package/dist/mcp/tools/index.d.ts.map +1 -1
  101. package/dist/mcp/tools/index.js +42 -4
  102. package/dist/mcp/tools/index.js.map +1 -1
  103. package/dist/mcp/tools/install-module.d.ts +25 -0
  104. package/dist/mcp/tools/install-module.d.ts.map +1 -0
  105. package/dist/mcp/tools/install-module.js +87 -0
  106. package/dist/mcp/tools/install-module.js.map +1 -0
  107. package/dist/mcp/tools/send-daily-report.d.ts +29 -0
  108. package/dist/mcp/tools/send-daily-report.d.ts.map +1 -0
  109. package/dist/mcp/tools/send-daily-report.js +61 -0
  110. package/dist/mcp/tools/send-daily-report.js.map +1 -0
  111. package/dist/mcp/tools/setup-gateway.d.ts +2 -1
  112. package/dist/mcp/tools/setup-gateway.d.ts.map +1 -1
  113. package/dist/mcp/tools/setup-gateway.js +24 -6
  114. package/dist/mcp/tools/setup-gateway.js.map +1 -1
  115. package/dist/mcp/tools/setup-safe.d.ts +2 -0
  116. package/dist/mcp/tools/setup-safe.d.ts.map +1 -0
  117. package/dist/mcp/tools/setup-safe.js +2 -0
  118. package/dist/mcp/tools/setup-safe.js.map +1 -0
  119. package/dist/mcp-stdio/bin.js +0 -0
  120. package/dist/mcp-stdio/server.d.ts.map +1 -1
  121. package/dist/mcp-stdio/server.js +89 -1
  122. package/dist/mcp-stdio/server.js.map +1 -1
  123. package/dist/safe/index.d.ts +5 -0
  124. package/dist/safe/index.d.ts.map +1 -0
  125. package/dist/safe/index.js +9 -0
  126. package/dist/safe/index.js.map +1 -0
  127. package/dist/safe-cli.d.ts +8 -0
  128. package/dist/safe-cli.d.ts.map +1 -0
  129. package/dist/safe-cli.js +61 -0
  130. package/dist/safe-cli.js.map +1 -0
  131. package/dist/safe-observation/collector.d.ts +21 -0
  132. package/dist/safe-observation/collector.d.ts.map +1 -0
  133. package/dist/safe-observation/collector.js +101 -0
  134. package/dist/safe-observation/collector.js.map +1 -0
  135. package/dist/safe-observation/store.d.ts +34 -0
  136. package/dist/safe-observation/store.d.ts.map +1 -0
  137. package/dist/safe-observation/store.js +80 -0
  138. package/dist/safe-observation/store.js.map +1 -0
  139. package/dist/save-token/gateway-setup.d.ts +33 -3
  140. package/dist/save-token/gateway-setup.d.ts.map +1 -1
  141. package/dist/save-token/gateway-setup.js +165 -18
  142. package/dist/save-token/gateway-setup.js.map +1 -1
  143. package/dist/scheduler/brain-push-client.d.ts.map +1 -1
  144. package/dist/scheduler/brain-push-client.js +53 -3
  145. package/dist/scheduler/brain-push-client.js.map +1 -1
  146. package/dist/scheduler/types.d.ts +5 -0
  147. package/dist/scheduler/types.d.ts.map +1 -1
  148. package/dist/scheduler/types.js +3 -1
  149. package/dist/scheduler/types.js.map +1 -1
  150. package/dist/setup-safe.d.ts +20 -0
  151. package/dist/setup-safe.d.ts.map +1 -0
  152. package/dist/setup-safe.js +93 -0
  153. package/dist/setup-safe.js.map +1 -0
  154. package/dist/skill-installer/index.d.ts +9 -0
  155. package/dist/skill-installer/index.d.ts.map +1 -1
  156. package/dist/skill-installer/index.js +20 -1
  157. package/dist/skill-installer/index.js.map +1 -1
  158. package/dist/skill-runner/discovery.d.ts.map +1 -1
  159. package/dist/skill-runner/discovery.js +8 -5
  160. package/dist/skill-runner/discovery.js.map +1 -1
  161. package/dist/skill-tunnel/cli.d.ts.map +1 -1
  162. package/dist/skill-tunnel/cli.js +22 -0
  163. package/dist/skill-tunnel/cli.js.map +1 -1
  164. package/dist/skill-tunnel/client.d.ts +5 -0
  165. package/dist/skill-tunnel/client.d.ts.map +1 -1
  166. package/dist/skill-tunnel/client.js +2 -0
  167. package/dist/skill-tunnel/client.js.map +1 -1
  168. package/dist/skill-tunnel/local-bridge.d.ts +9 -0
  169. package/dist/skill-tunnel/local-bridge.d.ts.map +1 -1
  170. package/dist/skill-tunnel/local-bridge.js +24 -1
  171. package/dist/skill-tunnel/local-bridge.js.map +1 -1
  172. package/package.json +3 -3
@@ -0,0 +1,131 @@
1
+ // ⚠️ AUTO-GENERATED — do not edit. Source: shared/contracts/envelope-v2/beacon-mcp-tools-v1.ts
2
+ // Re-generate via `node sdk/skillfm-local/scripts/inline-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_list_credentials',
79
+ 'skillfm_remove_credential',
80
+ 'skillfm_explain_provider_key',
81
+ 'skillfm_memory_sync',
82
+ 'skillfm_memory_recall',
83
+ ],
84
+ // 月度推送类(Pro)
85
+ push: [
86
+ 'skillfm_get_monthly_picks',
87
+ 'skillfm_install_recommended_skill',
88
+ ],
89
+ // 反馈类
90
+ feedback: [
91
+ 'skillfm_record_acceptance',
92
+ 'skillfm_record_rejection',
93
+ 'skillfm_user_preferences',
94
+ ],
95
+ };
96
+ /** 把分组扁平化的所有 tool 名,Phase 0 用于 sanity check */
97
+ export const ALL_SKILLFM_TOOL_NAMES = Object.values(SKILLFM_TOOL_NAMES).flat();
98
+ // ============================================================================
99
+ // §3 关键 tool 1: skillfm_check_usage(数据查询)
100
+ // ============================================================================
101
+ export const SkillFmPlatform = {
102
+ ALL: 'all',
103
+ ANTHROPIC: 'anthropic',
104
+ OPENAI: 'openai',
105
+ DEEPSEEK: 'deepseek',
106
+ QWEN: 'qwen',
107
+ DOUBAO: 'doubao',
108
+ KIMI: 'kimi',
109
+ CURSOR: 'cursor',
110
+ CLAUDE_CODE: 'claude_code',
111
+ OPENCLAW: 'openclaw',
112
+ CLINE: 'cline',
113
+ };
114
+ /** 提取分类 letter,client 决策树用来查 user_prefs.disabledCategories */
115
+ export function getCategoryFromTriggerType(triggerType) {
116
+ const m = /^([A-H])\d+_/.exec(triggerType);
117
+ return m ? m[1] : null;
118
+ }
119
+ // ============================================================================
120
+ // §13 Phase 1 → Phase 2 演进的 stable surface
121
+ // ============================================================================
122
+ /**
123
+ * 本契约 v1 → v2 演进规则:
124
+ * - 字段只允许加,不能删
125
+ * - enum 只允许加新值,不能改/删现值
126
+ * - tool 名字本身永不改(改 = 出新 tool 名 + 老 tool 标 deprecated)
127
+ *
128
+ * 任何破坏性变更必须出 beacon-mcp-tools-v2.ts 新文件,v1 保留至少 6 个月。
129
+ */
130
+ export const BEACON_MCP_TOOLS_CONTRACT_VERSION = 'v1';
131
+ //# sourceMappingURL=beacon-mcp-tools-v1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beacon-mcp-tools-v1.js","sourceRoot":"","sources":["../../src/_vendored-contracts/beacon-mcp-tools-v1.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,4EAA4E;AAC5E,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,0BAA0B;QAC1B,2BAA2B;QAC3B,8BAA8B;QAC9B,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,68 @@
1
+ import type { UserPreferences } from './beacon-mcp-tools-v1.js';
2
+ export type { UserPreferences };
3
+ export declare const BEACON_PREFERENCES_PATH: "/v1/beacon/preferences";
4
+ /** 跨工作空间的契约版本标记 */
5
+ export declare const BEACON_PREFERENCES_PROTOCOL_VERSION: "v1";
6
+ /** client 兜底轮询间隔(分钟);Phase 2 引入 push 后可调长 */
7
+ export declare const BEACON_PREFERENCES_POLL_INTERVAL_MIN: 30;
8
+ /** 请求 headers */
9
+ export interface BeaconPreferencesRequestHeaders {
10
+ /** v0.2 一致:长效 agent_token */
11
+ 'X-Agent-Token': string;
12
+ 'X-Skillfm-Local-Version'?: string;
13
+ Accept?: 'application/json';
14
+ }
15
+ /**
16
+ * 200 OK 响应 — 直接是完整 UserPreferences shape。
17
+ * 用户首次调用且未设过偏好时,Brain 应返回服务端默认值(详见 beacon-mcp-tools-v1.ts
18
+ * UserPreferences 字段注释中的默认值约定:maxPerSession=3 / maxPerDay=10 / 全分类启用 /
19
+ * quietHours.enabled=false)。
20
+ */
21
+ export type BeaconPreferencesGetResponse = UserPreferences;
22
+ /**
23
+ * 请求 body — Partial<UserPreferences>;只更新提供的字段。
24
+ *
25
+ * 例:用户只改 quietHours
26
+ * { "quietHours": { "enabled": true, "start": "23:00", "end": "07:00", "timezone": "Asia/Shanghai" } }
27
+ *
28
+ * 例:用户禁某分类
29
+ * { "disabledCategories": ["B", "G"] }
30
+ *
31
+ * 例:client 调整频率限流
32
+ * { "maxPerSession": 1, "maxPerDay": 3 }
33
+ */
34
+ export type BeaconPreferencesPutRequest = Partial<UserPreferences>;
35
+ /**
36
+ * 200 OK 响应 — 更新后的 full UserPreferences。
37
+ * client 直接覆盖本地缓存,**不**做 merge(避免双方 race / merge 冲突)。
38
+ */
39
+ export type BeaconPreferencesPutResponse = UserPreferences;
40
+ export declare const BEACON_PREFERENCES_ERROR_CODES: {
41
+ readonly AUTH_MISSING_TOKEN: "BEACON.PREFS.AUTH.MISSING_TOKEN";
42
+ readonly AUTH_BAD_TOKEN: "BEACON.PREFS.AUTH.BAD_TOKEN";
43
+ readonly BAD_REQUEST: "BEACON.PREFS.BAD_REQUEST";
44
+ /** quietHours.start / end 格式错(必须 'HH:MM');或 timezone 不在 IANA 列表 */
45
+ readonly INVALID_QUIET_HOURS: "BEACON.PREFS.INVALID_QUIET_HOURS";
46
+ /** maxPerSession / maxPerDay 超合理范围(0-100) */
47
+ readonly INVALID_QUOTA: "BEACON.PREFS.INVALID_QUOTA";
48
+ readonly RATE_LIMITED: "BEACON.PREFS.RATE_LIMITED";
49
+ readonly INTERNAL: "BEACON.PREFS.INTERNAL";
50
+ };
51
+ export type BeaconPreferencesErrorCode = (typeof BEACON_PREFERENCES_ERROR_CODES)[keyof typeof BEACON_PREFERENCES_ERROR_CODES];
52
+ export interface BeaconPreferencesErrorResponse {
53
+ ok: false;
54
+ error: {
55
+ code: BeaconPreferencesErrorCode;
56
+ message: string;
57
+ details?: Record<string, unknown>;
58
+ };
59
+ }
60
+ export type BeaconPreferencesGetEnvelope = {
61
+ ok: true;
62
+ data: BeaconPreferencesGetResponse;
63
+ } | BeaconPreferencesErrorResponse;
64
+ export type BeaconPreferencesPutEnvelope = {
65
+ ok: true;
66
+ data: BeaconPreferencesPutResponse;
67
+ } | BeaconPreferencesErrorResponse;
68
+ //# sourceMappingURL=beacon-preferences-v1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beacon-preferences-v1.d.ts","sourceRoot":"","sources":["../../src/_vendored-contracts/beacon-preferences-v1.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAGhE,YAAY,EAAE,eAAe,EAAE,CAAC;AAMhC,eAAO,MAAM,uBAAuB,EAAG,wBAAiC,CAAC;AAEzE,mBAAmB;AACnB,eAAO,MAAM,mCAAmC,EAAG,IAAa,CAAC;AAEjE,6CAA6C;AAC7C,eAAO,MAAM,oCAAoC,EAAG,EAAW,CAAC;AAMhE,iBAAiB;AACjB,MAAM,WAAW,+BAA+B;IAC9C,6BAA6B;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC7B;AAED;;;;;GAKG;AACH,MAAM,MAAM,4BAA4B,GAAG,eAAe,CAAC;AAM3D;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,2BAA2B,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AAEnE;;;GAGG;AACH,MAAM,MAAM,4BAA4B,GAAG,eAAe,CAAC;AAM3D,eAAO,MAAM,8BAA8B;;;;IAIzC,mEAAmE;;IAEnE,6CAA6C;;;;CAIrC,CAAC;AAEX,MAAM,MAAM,0BAA0B,GACpC,CAAC,OAAO,8BAA8B,CAAC,CAAC,MAAM,OAAO,8BAA8B,CAAC,CAAC;AAEvF,MAAM,WAAW,8BAA8B;IAC7C,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE;QACL,IAAI,EAAE,0BAA0B,CAAC;QACjC,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,CAAC;CACH;AAMD,MAAM,MAAM,4BAA4B,GACpC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,4BAA4B,CAAA;CAAE,GAChD,8BAA8B,CAAC;AAEnC,MAAM,MAAM,4BAA4B,GACpC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,4BAA4B,CAAA;CAAE,GAChD,8BAA8B,CAAC"}
@@ -0,0 +1,26 @@
1
+ // ⚠️ AUTO-GENERATED — do not edit. Source: shared/contracts/envelope-v2/beacon-preferences-v1.ts
2
+ // Re-generate via `node sdk/skillfm-local/scripts/inline-contracts.ts`.
3
+ // Edit the source file in shared/contracts/envelope-v2/ instead.
4
+ // ============================================================================
5
+ // §1 路径常量
6
+ // ============================================================================
7
+ export const BEACON_PREFERENCES_PATH = '/v1/beacon/preferences';
8
+ /** 跨工作空间的契约版本标记 */
9
+ export const BEACON_PREFERENCES_PROTOCOL_VERSION = 'v1';
10
+ /** client 兜底轮询间隔(分钟);Phase 2 引入 push 后可调长 */
11
+ export const BEACON_PREFERENCES_POLL_INTERVAL_MIN = 30;
12
+ // ============================================================================
13
+ // §4 错误码(统一前缀 BEACON.PREFS.*)
14
+ // ============================================================================
15
+ export const BEACON_PREFERENCES_ERROR_CODES = {
16
+ AUTH_MISSING_TOKEN: 'BEACON.PREFS.AUTH.MISSING_TOKEN',
17
+ AUTH_BAD_TOKEN: 'BEACON.PREFS.AUTH.BAD_TOKEN',
18
+ BAD_REQUEST: 'BEACON.PREFS.BAD_REQUEST',
19
+ /** quietHours.start / end 格式错(必须 'HH:MM');或 timezone 不在 IANA 列表 */
20
+ INVALID_QUIET_HOURS: 'BEACON.PREFS.INVALID_QUIET_HOURS',
21
+ /** maxPerSession / maxPerDay 超合理范围(0-100) */
22
+ INVALID_QUOTA: 'BEACON.PREFS.INVALID_QUOTA',
23
+ RATE_LIMITED: 'BEACON.PREFS.RATE_LIMITED',
24
+ INTERNAL: 'BEACON.PREFS.INTERNAL',
25
+ };
26
+ //# sourceMappingURL=beacon-preferences-v1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beacon-preferences-v1.js","sourceRoot":"","sources":["../../src/_vendored-contracts/beacon-preferences-v1.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,4EAA4E;AAC5E,qEAAqE;AAgCrE,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,MAAM,CAAC,MAAM,uBAAuB,GAAG,wBAAiC,CAAC;AAEzE,mBAAmB;AACnB,MAAM,CAAC,MAAM,mCAAmC,GAAG,IAAa,CAAC;AAEjE,6CAA6C;AAC7C,MAAM,CAAC,MAAM,oCAAoC,GAAG,EAAW,CAAC;AA8ChE,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,kBAAkB,EAAE,iCAAiC;IACrD,cAAc,EAAE,6BAA6B;IAC7C,WAAW,EAAE,0BAA0B;IACvC,mEAAmE;IACnE,mBAAmB,EAAE,kCAAkC;IACvD,6CAA6C;IAC7C,aAAa,EAAE,4BAA4B;IAC3C,YAAY,EAAE,2BAA2B;IACzC,QAAQ,EAAE,uBAAuB;CACzB,CAAC"}
@@ -0,0 +1,208 @@
1
+ import type { Market, Money, SubscriptionTier, SuggestionCategory, TriggerType } from './beacon-mcp-tools-v1.js';
2
+ export type { Market, Money, SubscriptionTier, SuggestionCategory, TriggerType };
3
+ /** 批量拉规则(client 24h 全量同步) */
4
+ export declare const BEACON_RULES_PATH: "/v1/beacon/rules";
5
+ /** 单条决策(client 实时调,Brain 返回个性化建议) */
6
+ export declare const BEACON_RULES_DECIDE_PATH: "/v1/beacon/rules/decide";
7
+ /** 跨工作空间的契约版本标记 */
8
+ export declare const BEACON_RULE_PROTOCOL_VERSION: "v1";
9
+ /**
10
+ * trigger_pattern JSONB 形状(Phase 1 MVP):
11
+ * 用 key/value 描述"什么状况触发这条规则"。
12
+ * Brain 决策端用模式匹配 + 阈值比较;client 24h 同步后本地决策树也按此 evaluate。
13
+ *
14
+ * 例(D 时效预警):
15
+ * { kind: 'asset_expiry', asset_type: 'domain', within_days_lte: 7 }
16
+ * 例(B 异常):
17
+ * { kind: 'session_burn_anomaly', burn_usd_per_hour_gte: 5 }
18
+ */
19
+ export interface RuleTriggerPattern {
20
+ kind: string;
21
+ /** 任意机读字段;client / Brain 共用 evaluator */
22
+ [key: string]: unknown;
23
+ }
24
+ /**
25
+ * decision_logic 描述"匹配后给什么样的 suggestion"。
26
+ * Phase 1 MVP 走简单 template 路线;Phase 2 引入 ml_model_version。
27
+ */
28
+ export interface RuleDecisionLogic {
29
+ /** 'template' | 'ml_v1' | 'experiment'(Phase 1 主用 'template') */
30
+ strategy: 'template' | 'ml_v1' | 'experiment';
31
+ /** strategy=template 时,该字段必填:对应 suggestion_template 的 key */
32
+ template_key?: string;
33
+ /** strategy=experiment 时,变体配比 */
34
+ experiment_variants?: Record<string, number>;
35
+ /** 评分函数所需参数(Phase 1 选填) */
36
+ scoring?: Record<string, unknown>;
37
+ }
38
+ /**
39
+ * suggestion_template 中英分语,client 按 user_profile.market 选语言。
40
+ * placeholder 用 {{name}} 风格,client / Brain evaluator 都按此 fill。
41
+ */
42
+ export interface RuleSuggestionTemplate {
43
+ /** 给 agent 解释给用户的英文提示 */
44
+ reasoning_en: string;
45
+ /** 中文版 */
46
+ reasoning_zh: string;
47
+ /** 命中后的预估价值 — 如 "省 $30/月" / "续费防止域名过期" */
48
+ estimated_value?: Money;
49
+ /** 用户点击后跳转 — 续费 / 升级 / 安装 skill */
50
+ action_url?: string;
51
+ }
52
+ /**
53
+ * beacon_rules 表 row 在网络层的标准映射。
54
+ * 顺序、字段名都跟 PRD-SKILLFM-BRAIN-RULE-CENTER-V1.md §3 schema 完全对齐。
55
+ */
56
+ export interface BeaconRule {
57
+ /** UUID 或语义化 id;Phase 1 用 'D3_domain_7d_warning' 形式 */
58
+ rule_id: string;
59
+ /** 触发场景大类 A-H,见 beacon-mcp-tools-v1.ts SuggestionCategory */
60
+ category: SuggestionCategory;
61
+ /** 关联的 trigger_type(beacon-mcp-tools-v1.ts) — 形如 'D3_domain_7d_warning' */
62
+ trigger_type: TriggerType;
63
+ /** JSONB 模式 */
64
+ trigger_pattern: RuleTriggerPattern;
65
+ /** 决策逻辑(template / ml / experiment) */
66
+ decision_logic: RuleDecisionLogic;
67
+ /** 建议模板(中英) */
68
+ suggestion_template: RuleSuggestionTemplate;
69
+ /** Pro-only 规则:Free 命中时 should_suggest=true 但 is_pro_locked=true */
70
+ is_pro_only: boolean;
71
+ /** 单调递增,client since_version=N 拉增量用 */
72
+ version: number;
73
+ /** 0-100;Phase 1 灰度发布用 */
74
+ rollout_percent: number;
75
+ /** false → client 即使 cache 也不应再触发 */
76
+ is_active: boolean;
77
+ /** 实验 id(可选);决策结果须把 experiment_variant 透传给 client + feedback 上报 */
78
+ experiment_id?: string;
79
+ /** 适用市场过滤,可选;不写则全市场命中 */
80
+ applicable_markets?: Market[];
81
+ /** 适用订阅 tier 过滤,可选;不写则全 tier 命中 */
82
+ applicable_tiers?: SubscriptionTier[];
83
+ /** ISO 8601 UTC,Brain 写入,client 用作展示 */
84
+ created_at?: string;
85
+ updated_at?: string;
86
+ }
87
+ /** 请求 query params */
88
+ export interface BeaconRulesRequestQuery {
89
+ /** A-H 单选;省略则返回全分类 */
90
+ category?: SuggestionCategory;
91
+ /** 增量同步 — 只回 version > since_version 的规则 */
92
+ since_version?: number;
93
+ /** 默认仅 is_active=true;internal 工具可置 false */
94
+ include_inactive?: boolean;
95
+ }
96
+ /** 请求 headers */
97
+ export interface BeaconRulesRequestHeaders {
98
+ /** v0.2 一致:长效 agent_token */
99
+ 'X-Agent-Token': string;
100
+ /** client 版本(observability) */
101
+ 'X-Skillfm-Local-Version'?: string;
102
+ Accept?: 'application/json';
103
+ }
104
+ /** 200 OK 成功响应 */
105
+ export interface BeaconRulesResponse {
106
+ /** 服务端最新 rule version(client 下次 since_version 用此) */
107
+ version: number;
108
+ /** 命中规则;空数组也是合法 */
109
+ rules: BeaconRule[];
110
+ /** ISO 8601 UTC */
111
+ generated_at: string;
112
+ }
113
+ /**
114
+ * 调用方传入"现在发生了什么"+ "用户是谁",Brain 决策返回是否应给建议。
115
+ *
116
+ * trigger_context 例(F 用户口头提到副业):
117
+ * { mention_keywords: ['side income', 'monetize'], chat_window_size: 5 }
118
+ *
119
+ * ⚠️ BYOK 红线: trigger_context **禁止**包含 api_key / cookie / token / bearer / session_id
120
+ */
121
+ export interface BeaconDecideUserProfile {
122
+ /** 必传 */
123
+ market: Market;
124
+ /** 必传 */
125
+ is_pro: boolean;
126
+ /** 订阅 tier 细分(免费 / 月付 / 年付 / team / trial) */
127
+ tier?: SubscriptionTier;
128
+ /** 用户偏好 hash(client 同步给 Brain,让决策端考虑 quietHours / disabledCategories) */
129
+ preferences_hash?: string;
130
+ /** 当前会话已经触发过的 rule_id(去重) */
131
+ session_already_suggested?: string[];
132
+ /** 当前 IANA 时区,Brain 决策端判断 quietHours */
133
+ timezone?: string;
134
+ /** 可选用户标识(脱敏 hash,Brain 用作个性化 cache key);**不要** 传明文 user_id */
135
+ user_hash?: string;
136
+ }
137
+ export interface BeaconDecideRequest {
138
+ /** 形如 'D3_domain_7d_warning';客户端必传 */
139
+ trigger_type: TriggerType;
140
+ /** 触发上下文,见上方 BYOK 红线注释 */
141
+ trigger_context: Record<string, unknown>;
142
+ /** 用户画像 */
143
+ user_profile: BeaconDecideUserProfile;
144
+ /** 决策时戳(client 端时间,ISO 8601);Brain 用作幂等 + 限流 */
145
+ client_timestamp?: string;
146
+ }
147
+ /** 200 OK 决策结果(无论是否建议都是 200) */
148
+ export interface BeaconDecideResponse {
149
+ /** false → client 静默,不弹建议 */
150
+ should_suggest: boolean;
151
+ /** 命中规则 id;should_suggest=false 时仍可填(便于 client 调试) */
152
+ rule_id?: string;
153
+ /** should_suggest=true 时必填 */
154
+ suggestion?: BeaconSuggestion;
155
+ /** 命中实验时透传变体名,client feedback 必带回 */
156
+ experiment_variant?: string;
157
+ /** should_suggest=false 时给 client 的人话理由,便于本地决策树调优 */
158
+ reason?: 'no_match' | 'in_quiet_hours' | 'category_disabled' | 'session_quota_exceeded' | 'daily_quota_exceeded' | 'duplicate_in_session' | 'rolled_out_off' | 'other';
159
+ }
160
+ /**
161
+ * suggestion 跟 beacon-mcp-tools-v1.ts 中各 tool output 的 reasoning / estimated_value
162
+ * 字段语义对齐;Pro-locked 规则在此显式标记,client 决定是否弹"升 Pro 解锁"卡片。
163
+ */
164
+ export interface BeaconSuggestion {
165
+ /** 给 agent 解释给用户的英文提示 */
166
+ reasoning_en: string;
167
+ /** 中文 */
168
+ reasoning_zh: string;
169
+ /** 决策端置信度(0-1);可选 */
170
+ confidence?: number;
171
+ /** 预估对用户的价值,如 { amount: 30, currency: 'USD' } */
172
+ estimated_value?: Money;
173
+ /** Free 用户命中 Pro-only 规则时 = true;client 应渲染升级卡 */
174
+ is_pro_locked: boolean;
175
+ /** 续费 / 升级 / 安装 skill 的跳转 */
176
+ action_url?: string;
177
+ /** session 内本次建议唯一 id,feedback 上报必带回 */
178
+ suggestion_id?: string;
179
+ }
180
+ export declare const BEACON_RULE_ERROR_CODES: {
181
+ readonly AUTH_MISSING_TOKEN: "BEACON.RULES.AUTH.MISSING_TOKEN";
182
+ readonly AUTH_BAD_TOKEN: "BEACON.RULES.AUTH.BAD_TOKEN";
183
+ readonly BAD_REQUEST: "BEACON.RULES.BAD_REQUEST";
184
+ /** trigger_context 含敏感字段 */
185
+ readonly BYOK_VIOLATION: "BEACON.RULES.BYOK_VIOLATION";
186
+ readonly RATE_LIMITED: "BEACON.RULES.RATE_LIMITED";
187
+ readonly INTERNAL: "BEACON.RULES.INTERNAL";
188
+ };
189
+ export type BeaconRuleErrorCode = (typeof BEACON_RULE_ERROR_CODES)[keyof typeof BEACON_RULE_ERROR_CODES];
190
+ export interface BeaconRuleErrorResponse {
191
+ ok: false;
192
+ error: {
193
+ code: BeaconRuleErrorCode;
194
+ message: string;
195
+ details?: Record<string, unknown>;
196
+ };
197
+ }
198
+ /** GET /v1/beacon/rules 的统一 envelope */
199
+ export type BeaconRulesEnvelope = {
200
+ ok: true;
201
+ data: BeaconRulesResponse;
202
+ } | BeaconRuleErrorResponse;
203
+ /** POST /v1/beacon/rules/decide 的统一 envelope */
204
+ export type BeaconDecideEnvelope = {
205
+ ok: true;
206
+ data: BeaconDecideResponse;
207
+ } | BeaconRuleErrorResponse;
208
+ //# sourceMappingURL=beacon-rule-protocol-v1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beacon-rule-protocol-v1.d.ts","sourceRoot":"","sources":["../../src/_vendored-contracts/beacon-rule-protocol-v1.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ // ⚠️ AUTO-GENERATED — do not edit. Source: shared/contracts/envelope-v2/beacon-rule-protocol-v1.ts
2
+ // Re-generate via `node sdk/skillfm-local/scripts/inline-contracts.ts`.
3
+ // Edit the source file in shared/contracts/envelope-v2/ instead.
4
+ // ============================================================================
5
+ // §1 路径常量
6
+ // ============================================================================
7
+ /** 批量拉规则(client 24h 全量同步) */
8
+ export const BEACON_RULES_PATH = '/v1/beacon/rules';
9
+ /** 单条决策(client 实时调,Brain 返回个性化建议) */
10
+ export const BEACON_RULES_DECIDE_PATH = '/v1/beacon/rules/decide';
11
+ /** 跨工作空间的契约版本标记 */
12
+ export const BEACON_RULE_PROTOCOL_VERSION = 'v1';
13
+ // ============================================================================
14
+ // §5 错误码(统一前缀 BEACON.RULES.*)
15
+ // ============================================================================
16
+ export const BEACON_RULE_ERROR_CODES = {
17
+ AUTH_MISSING_TOKEN: 'BEACON.RULES.AUTH.MISSING_TOKEN',
18
+ AUTH_BAD_TOKEN: 'BEACON.RULES.AUTH.BAD_TOKEN',
19
+ BAD_REQUEST: 'BEACON.RULES.BAD_REQUEST',
20
+ /** trigger_context 含敏感字段 */
21
+ BYOK_VIOLATION: 'BEACON.RULES.BYOK_VIOLATION',
22
+ RATE_LIMITED: 'BEACON.RULES.RATE_LIMITED',
23
+ INTERNAL: 'BEACON.RULES.INTERNAL',
24
+ };
25
+ //# sourceMappingURL=beacon-rule-protocol-v1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beacon-rule-protocol-v1.js","sourceRoot":"","sources":["../../src/_vendored-contracts/beacon-rule-protocol-v1.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,4EAA4E;AAC5E,qEAAqE;AAoCrE,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,6BAA6B;AAC7B,MAAM,CAAC,MAAM,iBAAiB,GAAG,kBAA2B,CAAC;AAE7D,qCAAqC;AACrC,MAAM,CAAC,MAAM,wBAAwB,GAAG,yBAAkC,CAAC;AAE3E,mBAAmB;AACnB,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAa,CAAC;AA4M1D,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,kBAAkB,EAAE,iCAAiC;IACrD,cAAc,EAAE,6BAA6B;IAC7C,WAAW,EAAE,0BAA0B;IACvC,4BAA4B;IAC5B,cAAc,EAAE,6BAA6B;IAC7C,YAAY,EAAE,2BAA2B;IACzC,QAAQ,EAAE,uBAAuB;CACzB,CAAC"}
@@ -0,0 +1,88 @@
1
+ import type { Currency, Money, SkillFmPlatformKey } from './beacon-mcp-tools-v1.js';
2
+ export type { Currency, Money, SkillFmPlatformKey };
3
+ /** sidecar 批量上报用量 */
4
+ export declare const BEACON_USAGE_SNAPSHOT_PATH: "/v1/beacon/usage/snapshot";
5
+ /** 跨工作空间的契约版本标记 */
6
+ export declare const BEACON_USAGE_PROTOCOL_VERSION: "v1";
7
+ /** 单次请求的 snapshot 数量上限(Brain 实施侧 hard cap) */
8
+ export declare const BEACON_USAGE_MAX_SNAPSHOTS_PER_REQUEST: 200;
9
+ /**
10
+ * 用量快照 — sidecar 每 30 分钟扫描本地 agent 日志后产出。
11
+ * 每个 (platform, period) 一条;一次 POST 可批量传多条。
12
+ */
13
+ export interface UsageSnapshot {
14
+ /** 与 SkillFmPlatformKey 对齐(anthropic / openai / deepseek / cursor / claude_code / ...) */
15
+ platform: SkillFmPlatformKey;
16
+ /** 统计窗口起,ISO 8601 UTC */
17
+ period_start: string;
18
+ /** 统计窗口止,ISO 8601 UTC */
19
+ period_end: string;
20
+ /** 该窗口内累计花费(数值;currency 与字段同条 currency 字段一致) */
21
+ total_spent: number;
22
+ /** 'USD' | 'CNY' */
23
+ currency: Currency;
24
+ /** 该窗口内累计 token 数(可选) */
25
+ total_tokens?: number;
26
+ /** 该窗口内累计 API 调用次数(可选) */
27
+ total_calls?: number;
28
+ /** 模型粒度细分(可选,Pro 用户更详细) */
29
+ by_model?: Record<string, {
30
+ tokens: number;
31
+ calls: number;
32
+ spent: number;
33
+ }>;
34
+ /**
35
+ * 任意去敏机读字段。⚠️ **绝对禁止**包含 BEACON_USAGE_BYOK_BANNED_FIELDS 中任一 key。
36
+ * 允许的例子: { router_version: 'v1.2', cache_hit_rate: 0.42 }
37
+ */
38
+ metadata?: Record<string, unknown>;
39
+ }
40
+ /** 请求 headers */
41
+ export interface BeaconUsageRequestHeaders {
42
+ /** v0.2 一致:长效 agent_token */
43
+ 'X-Agent-Token': string;
44
+ /** sidecar 版本(observability) */
45
+ 'X-Skillfm-Local-Version'?: string;
46
+ 'Content-Type': 'application/json';
47
+ }
48
+ /** 请求 body — 批量上报 */
49
+ export interface BeaconUsageSnapshotRequest {
50
+ /** 1-200 条;超过 200 → 400 BAD_REQUEST */
51
+ snapshots: UsageSnapshot[];
52
+ /** 上报时戳(ISO 8601);可选 */
53
+ client_timestamp?: string;
54
+ }
55
+ /** 200 OK 响应 */
56
+ export interface BeaconUsageSnapshotResponse {
57
+ ok: true;
58
+ /** 实际入库的快照条数(去重后) */
59
+ accepted: number;
60
+ /** 因重复被忽略的条数(可选) */
61
+ skipped?: number;
62
+ }
63
+ export declare const BEACON_USAGE_ERROR_CODES: {
64
+ readonly AUTH_MISSING_TOKEN: "BEACON.USAGE.AUTH.MISSING_TOKEN";
65
+ readonly AUTH_BAD_TOKEN: "BEACON.USAGE.AUTH.BAD_TOKEN";
66
+ readonly BAD_REQUEST: "BEACON.USAGE.BAD_REQUEST";
67
+ /** snapshots 长度超出 BEACON_USAGE_MAX_SNAPSHOTS_PER_REQUEST */
68
+ readonly PAYLOAD_TOO_LARGE: "BEACON.USAGE.PAYLOAD_TOO_LARGE";
69
+ /** metadata 含 BYOK 黑名单字段 */
70
+ readonly BYOK_VIOLATION: "BEACON.USAGE.BYOK_VIOLATION";
71
+ readonly RATE_LIMITED: "BEACON.USAGE.RATE_LIMITED";
72
+ readonly INTERNAL: "BEACON.USAGE.INTERNAL";
73
+ };
74
+ export type BeaconUsageErrorCode = (typeof BEACON_USAGE_ERROR_CODES)[keyof typeof BEACON_USAGE_ERROR_CODES];
75
+ export interface BeaconUsageErrorResponse {
76
+ ok: false;
77
+ error: {
78
+ code: BeaconUsageErrorCode;
79
+ message: string;
80
+ /** 可选诊断字段(如 banned_field='api_key' / snapshot_index=3) */
81
+ details?: Record<string, unknown>;
82
+ };
83
+ }
84
+ export type BeaconUsageEnvelope = {
85
+ ok: true;
86
+ data: BeaconUsageSnapshotResponse;
87
+ } | BeaconUsageErrorResponse;
88
+ //# sourceMappingURL=beacon-usage-v1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beacon-usage-v1.d.ts","sourceRoot":"","sources":["../../src/_vendored-contracts/beacon-usage-v1.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEpF,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;AAMpD,qBAAqB;AACrB,eAAO,MAAM,0BAA0B,EAAG,2BAAoC,CAAC;AAE/E,mBAAmB;AACnB,eAAO,MAAM,6BAA6B,EAAG,IAAa,CAAC;AAE3D,8CAA8C;AAC9C,eAAO,MAAM,sCAAsC,EAAG,GAAY,CAAC;AASnE;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,0FAA0F;IAC1F,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,yBAAyB;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,yBAAyB;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,MAAM,CACf,MAAM,EACN;QACE,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,CACF,CAAC;IACF;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAMD,iBAAiB;AACjB,MAAM,WAAW,yBAAyB;IACxC,6BAA6B;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,gCAAgC;IAChC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,cAAc,EAAE,kBAAkB,CAAC;CACpC;AAED,qBAAqB;AACrB,MAAM,WAAW,0BAA0B;IACzC,uCAAuC;IACvC,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,wBAAwB;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,gBAAgB;AAChB,MAAM,WAAW,2BAA2B;IAC1C,EAAE,EAAE,IAAI,CAAC;IACT,qBAAqB;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD,eAAO,MAAM,wBAAwB;;;;IAInC,4DAA4D;;IAE5D,4BAA4B;;;;CAIpB,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAC9B,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,OAAO,wBAAwB,CAAC,CAAC;AAE3E,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE;QACL,IAAI,EAAE,oBAAoB,CAAC;QAC3B,OAAO,EAAE,MAAM,CAAC;QAChB,0DAA0D;QAC1D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,CAAC;CACH;AAMD,MAAM,MAAM,mBAAmB,GAC3B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,2BAA2B,CAAA;CAAE,GAC/C,wBAAwB,CAAC"}
@@ -0,0 +1,27 @@
1
+ // ⚠️ AUTO-GENERATED — do not edit. Source: shared/contracts/envelope-v2/beacon-usage-v1.ts
2
+ // Re-generate via `node sdk/skillfm-local/scripts/inline-contracts.ts`.
3
+ // Edit the source file in shared/contracts/envelope-v2/ instead.
4
+ // ============================================================================
5
+ // §1 路径常量
6
+ // ============================================================================
7
+ /** sidecar 批量上报用量 */
8
+ export const BEACON_USAGE_SNAPSHOT_PATH = '/v1/beacon/usage/snapshot';
9
+ /** 跨工作空间的契约版本标记 */
10
+ export const BEACON_USAGE_PROTOCOL_VERSION = 'v1';
11
+ /** 单次请求的 snapshot 数量上限(Brain 实施侧 hard cap) */
12
+ export const BEACON_USAGE_MAX_SNAPSHOTS_PER_REQUEST = 200;
13
+ // ============================================================================
14
+ // §5 错误码(统一前缀 BEACON.USAGE.*)
15
+ // ============================================================================
16
+ export const BEACON_USAGE_ERROR_CODES = {
17
+ AUTH_MISSING_TOKEN: 'BEACON.USAGE.AUTH.MISSING_TOKEN',
18
+ AUTH_BAD_TOKEN: 'BEACON.USAGE.AUTH.BAD_TOKEN',
19
+ BAD_REQUEST: 'BEACON.USAGE.BAD_REQUEST',
20
+ /** snapshots 长度超出 BEACON_USAGE_MAX_SNAPSHOTS_PER_REQUEST */
21
+ PAYLOAD_TOO_LARGE: 'BEACON.USAGE.PAYLOAD_TOO_LARGE',
22
+ /** metadata 含 BYOK 黑名单字段 */
23
+ BYOK_VIOLATION: 'BEACON.USAGE.BYOK_VIOLATION',
24
+ RATE_LIMITED: 'BEACON.USAGE.RATE_LIMITED',
25
+ INTERNAL: 'BEACON.USAGE.INTERNAL',
26
+ };
27
+ //# sourceMappingURL=beacon-usage-v1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beacon-usage-v1.js","sourceRoot":"","sources":["../../src/_vendored-contracts/beacon-usage-v1.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,4EAA4E;AAC5E,qEAAqE;AAgCrE,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,qBAAqB;AACrB,MAAM,CAAC,MAAM,0BAA0B,GAAG,2BAAoC,CAAC;AAE/E,mBAAmB;AACnB,MAAM,CAAC,MAAM,6BAA6B,GAAG,IAAa,CAAC;AAE3D,8CAA8C;AAC9C,MAAM,CAAC,MAAM,sCAAsC,GAAG,GAAY,CAAC;AA0EnE,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,kBAAkB,EAAE,iCAAiC;IACrD,cAAc,EAAE,6BAA6B;IAC7C,WAAW,EAAE,0BAA0B;IACvC,4DAA4D;IAC5D,iBAAiB,EAAE,gCAAgC;IACnD,4BAA4B;IAC5B,cAAc,EAAE,6BAA6B;IAC7C,YAAY,EAAE,2BAA2B;IACzC,QAAQ,EAAE,uBAAuB;CACzB,CAAC"}