@skillfm/local 2.7.10 → 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.
- package/README.md +2 -2
- package/dist/_vendored-contracts/beacon-assets-v1.d.ts +160 -0
- package/dist/_vendored-contracts/beacon-assets-v1.d.ts.map +1 -0
- package/dist/_vendored-contracts/beacon-assets-v1.js +29 -0
- package/dist/_vendored-contracts/beacon-assets-v1.js.map +1 -0
- package/dist/_vendored-contracts/beacon-mcp-tools-v1.d.ts +373 -0
- package/dist/_vendored-contracts/beacon-mcp-tools-v1.d.ts.map +1 -0
- package/dist/_vendored-contracts/beacon-mcp-tools-v1.js +131 -0
- package/dist/_vendored-contracts/beacon-mcp-tools-v1.js.map +1 -0
- package/dist/_vendored-contracts/beacon-preferences-v1.d.ts +68 -0
- package/dist/_vendored-contracts/beacon-preferences-v1.d.ts.map +1 -0
- package/dist/_vendored-contracts/beacon-preferences-v1.js +26 -0
- package/dist/_vendored-contracts/beacon-preferences-v1.js.map +1 -0
- package/dist/_vendored-contracts/beacon-rule-protocol-v1.d.ts +208 -0
- package/dist/_vendored-contracts/beacon-rule-protocol-v1.d.ts.map +1 -0
- package/dist/_vendored-contracts/beacon-rule-protocol-v1.js +25 -0
- package/dist/_vendored-contracts/beacon-rule-protocol-v1.js.map +1 -0
- package/dist/_vendored-contracts/beacon-usage-v1.d.ts +88 -0
- package/dist/_vendored-contracts/beacon-usage-v1.d.ts.map +1 -0
- package/dist/_vendored-contracts/beacon-usage-v1.js +27 -0
- package/dist/_vendored-contracts/beacon-usage-v1.js.map +1 -0
- package/dist/_vendored-contracts/index.d.ts +29 -0
- package/dist/_vendored-contracts/index.d.ts.map +1 -1
- package/dist/_vendored-contracts/index.js.map +1 -1
- package/dist/_vendored-contracts/safe-skill-observation-v1.d.ts +149 -0
- package/dist/_vendored-contracts/safe-skill-observation-v1.d.ts.map +1 -0
- package/dist/_vendored-contracts/safe-skill-observation-v1.js +23 -0
- package/dist/_vendored-contracts/safe-skill-observation-v1.js.map +1 -0
- package/dist/_vendored-contracts/skill-distribution.d.ts +16 -0
- package/dist/_vendored-contracts/skill-distribution.d.ts.map +1 -1
- package/dist/_vendored-contracts/skill-distribution.js.map +1 -1
- package/dist/{safe → agent-forcing}/claude-code-skill-v2.d.ts +7 -4
- package/dist/agent-forcing/claude-code-skill-v2.d.ts.map +1 -0
- package/dist/{safe → agent-forcing}/claude-code-skill-v2.js +21 -19
- package/dist/agent-forcing/claude-code-skill-v2.js.map +1 -0
- package/dist/{safe/safe-rules.d.ts → agent-forcing/forcing-rules.d.ts} +6 -15
- package/dist/agent-forcing/forcing-rules.d.ts.map +1 -0
- package/dist/agent-forcing/forcing-rules.js +203 -0
- package/dist/agent-forcing/forcing-rules.js.map +1 -0
- package/dist/agent-forcing/index.d.ts +5 -0
- package/dist/agent-forcing/index.d.ts.map +1 -0
- package/dist/agent-forcing/index.js +6 -0
- package/dist/agent-forcing/index.js.map +1 -0
- package/dist/{safe → agent-forcing}/injectors.d.ts +7 -7
- package/dist/agent-forcing/injectors.d.ts.map +1 -0
- package/dist/{safe → agent-forcing}/injectors.js +24 -21
- package/dist/agent-forcing/injectors.js.map +1 -0
- package/dist/agent-forcing/slash-commands.d.ts +49 -0
- package/dist/agent-forcing/slash-commands.d.ts.map +1 -0
- package/dist/agent-forcing/slash-commands.js +166 -0
- package/dist/agent-forcing/slash-commands.js.map +1 -0
- package/dist/{safe → agent-forcing}/types.d.ts +1 -1
- package/dist/agent-forcing/types.d.ts.map +1 -0
- package/dist/{safe → agent-forcing}/types.js +4 -4
- package/dist/agent-forcing/types.js.map +1 -0
- package/dist/agent-hints.d.ts +1 -1
- package/dist/agent-hints.d.ts.map +1 -1
- package/dist/agent-hints.js +35 -41
- package/dist/agent-hints.js.map +1 -1
- package/dist/beacon/apprentice-capabilities.d.ts +10 -0
- package/dist/beacon/apprentice-capabilities.d.ts.map +1 -0
- package/dist/beacon/apprentice-capabilities.js +34 -0
- package/dist/beacon/apprentice-capabilities.js.map +1 -0
- package/dist/checkup/dimension-1-usage.d.ts +8 -1
- package/dist/checkup/dimension-1-usage.d.ts.map +1 -1
- package/dist/checkup/dimension-1-usage.js +3 -2
- package/dist/checkup/dimension-1-usage.js.map +1 -1
- package/dist/checkup/dimension-2-context.d.ts +12 -0
- package/dist/checkup/dimension-2-context.d.ts.map +1 -0
- package/dist/checkup/dimension-2-context.js +56 -0
- package/dist/checkup/dimension-2-context.js.map +1 -0
- package/dist/checkup/dimension-5-behavior.d.ts +12 -0
- package/dist/checkup/dimension-5-behavior.d.ts.map +1 -0
- package/dist/checkup/dimension-5-behavior.js +40 -0
- package/dist/checkup/dimension-5-behavior.js.map +1 -0
- package/dist/checkup/dimension-6-injection.d.ts +41 -0
- package/dist/checkup/dimension-6-injection.d.ts.map +1 -0
- package/dist/checkup/dimension-6-injection.js +74 -0
- package/dist/checkup/dimension-6-injection.js.map +1 -0
- package/dist/checkup/index.d.ts +3 -0
- package/dist/checkup/index.d.ts.map +1 -1
- package/dist/checkup/index.js +3 -0
- package/dist/checkup/index.js.map +1 -1
- package/dist/checkup/last-report.d.ts +32 -0
- package/dist/checkup/last-report.d.ts.map +1 -0
- package/dist/checkup/last-report.js +91 -0
- package/dist/checkup/last-report.js.map +1 -0
- package/dist/checkup/report.d.ts +13 -1
- package/dist/checkup/report.d.ts.map +1 -1
- package/dist/checkup/report.js +5 -3
- package/dist/checkup/report.js.map +1 -1
- package/dist/forcing-cli.d.ts +2 -0
- package/dist/forcing-cli.d.ts.map +1 -0
- package/dist/forcing-cli.js +2 -0
- package/dist/forcing-cli.js.map +1 -0
- package/dist/guard/bin.js +0 -0
- package/dist/guard/cli.js +2 -2
- package/dist/guard/cli.js.map +1 -1
- package/dist/guard/prompt-context.d.ts +3 -3
- package/dist/guard/prompt-context.d.ts.map +1 -1
- package/dist/guard/prompt-context.js +24 -42
- package/dist/guard/prompt-context.js.map +1 -1
- package/dist/harness/templates.d.ts +1 -1
- package/dist/harness/templates.js +1 -1
- package/dist/harness/templates.js.map +1 -1
- package/dist/index.js +14 -20
- package/dist/index.js.map +1 -1
- package/dist/mcp/brain-client.d.ts.map +1 -1
- package/dist/mcp/brain-client.js +3 -0
- package/dist/mcp/brain-client.js.map +1 -1
- package/dist/mcp/index.d.ts +1 -0
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +5 -0
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/tools/_sentry-descriptions.js +2 -2
- package/dist/mcp/tools/_sentry-descriptions.js.map +1 -1
- package/dist/mcp/tools/checkup.d.ts +17 -2
- package/dist/mcp/tools/checkup.d.ts.map +1 -1
- package/dist/mcp/tools/checkup.js +41 -3
- package/dist/mcp/tools/checkup.js.map +1 -1
- package/dist/mcp/tools/index.d.ts +3 -16
- package/dist/mcp/tools/index.d.ts.map +1 -1
- package/dist/mcp/tools/index.js +40 -228
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp/tools/install-module.d.ts +25 -0
- package/dist/mcp/tools/install-module.d.ts.map +1 -0
- package/dist/mcp/tools/install-module.js +87 -0
- package/dist/mcp/tools/install-module.js.map +1 -0
- package/dist/mcp/tools/send-daily-report.d.ts +29 -0
- package/dist/mcp/tools/send-daily-report.d.ts.map +1 -0
- package/dist/mcp/tools/send-daily-report.js +61 -0
- package/dist/mcp/tools/send-daily-report.js.map +1 -0
- package/dist/mcp/tools/setup-agent-forcing.d.ts +19 -0
- package/dist/mcp/tools/setup-agent-forcing.d.ts.map +1 -0
- package/dist/mcp/tools/setup-agent-forcing.js +86 -0
- package/dist/mcp/tools/setup-agent-forcing.js.map +1 -0
- package/dist/mcp/tools/setup-gateway.d.ts +2 -1
- package/dist/mcp/tools/setup-gateway.d.ts.map +1 -1
- package/dist/mcp/tools/setup-gateway.js +24 -6
- package/dist/mcp/tools/setup-gateway.js.map +1 -1
- package/dist/mcp/tools/setup-safe.d.ts +1 -18
- package/dist/mcp/tools/setup-safe.d.ts.map +1 -1
- package/dist/mcp/tools/setup-safe.js +1 -89
- package/dist/mcp/tools/setup-safe.js.map +1 -1
- package/dist/mcp/tools/unlock.d.ts +2 -2
- package/dist/mcp/tools/unlock.d.ts.map +1 -1
- package/dist/mcp/tools/unlock.js +40 -27
- package/dist/mcp/tools/unlock.js.map +1 -1
- package/dist/mcp-stdio/bin.js +0 -0
- package/dist/mcp-stdio/server.d.ts.map +1 -1
- package/dist/mcp-stdio/server.js +108 -265
- package/dist/mcp-stdio/server.js.map +1 -1
- package/dist/safe/index.d.ts +4 -4
- package/dist/safe/index.d.ts.map +1 -1
- package/dist/safe/index.js +7 -4
- package/dist/safe/index.js.map +1 -1
- package/dist/safe-cli.d.ts +6 -0
- package/dist/safe-cli.d.ts.map +1 -1
- package/dist/safe-cli.js +13 -5
- package/dist/safe-cli.js.map +1 -1
- package/dist/safe-observation/collector.d.ts +21 -0
- package/dist/safe-observation/collector.d.ts.map +1 -0
- package/dist/safe-observation/collector.js +101 -0
- package/dist/safe-observation/collector.js.map +1 -0
- package/dist/safe-observation/store.d.ts +34 -0
- package/dist/safe-observation/store.d.ts.map +1 -0
- package/dist/safe-observation/store.js +80 -0
- package/dist/safe-observation/store.js.map +1 -0
- package/dist/save-token/gateway-setup.d.ts +33 -3
- package/dist/save-token/gateway-setup.d.ts.map +1 -1
- package/dist/save-token/gateway-setup.js +165 -18
- package/dist/save-token/gateway-setup.js.map +1 -1
- package/dist/scheduler/brain-push-client.d.ts.map +1 -1
- package/dist/scheduler/brain-push-client.js +13 -2
- package/dist/scheduler/brain-push-client.js.map +1 -1
- package/dist/scheduler/types.d.ts +5 -0
- package/dist/scheduler/types.d.ts.map +1 -1
- package/dist/scheduler/types.js +3 -1
- package/dist/scheduler/types.js.map +1 -1
- package/dist/setup-safe.d.ts +20 -0
- package/dist/setup-safe.d.ts.map +1 -0
- package/dist/setup-safe.js +93 -0
- package/dist/setup-safe.js.map +1 -0
- package/dist/skill-installer/index.d.ts +9 -0
- package/dist/skill-installer/index.d.ts.map +1 -1
- package/dist/skill-installer/index.js +20 -1
- package/dist/skill-installer/index.js.map +1 -1
- package/dist/skill-md/template.d.ts +18 -4
- package/dist/skill-md/template.d.ts.map +1 -1
- package/dist/skill-md/template.js +253 -59
- package/dist/skill-md/template.js.map +1 -1
- package/dist/skill-runner/discovery.d.ts.map +1 -1
- package/dist/skill-runner/discovery.js +8 -5
- package/dist/skill-runner/discovery.js.map +1 -1
- package/dist/skill-tunnel/cli.d.ts.map +1 -1
- package/dist/skill-tunnel/cli.js +22 -0
- package/dist/skill-tunnel/cli.js.map +1 -1
- package/dist/skill-tunnel/client.d.ts +5 -0
- package/dist/skill-tunnel/client.d.ts.map +1 -1
- package/dist/skill-tunnel/client.js +2 -0
- package/dist/skill-tunnel/client.js.map +1 -1
- package/dist/skill-tunnel/local-bridge.d.ts +9 -0
- package/dist/skill-tunnel/local-bridge.d.ts.map +1 -1
- package/dist/skill-tunnel/local-bridge.js +24 -1
- package/dist/skill-tunnel/local-bridge.js.map +1 -1
- package/package.json +3 -3
- package/dist/beacon-cleanup/audit.d.ts +0 -24
- package/dist/beacon-cleanup/audit.d.ts.map +0 -1
- package/dist/beacon-cleanup/audit.js +0 -292
- package/dist/beacon-cleanup/audit.js.map +0 -1
- package/dist/safe/claude-code-skill-v2.d.ts.map +0 -1
- package/dist/safe/claude-code-skill-v2.js.map +0 -1
- package/dist/safe/injectors.d.ts.map +0 -1
- package/dist/safe/injectors.js.map +0 -1
- package/dist/safe/safe-rules.d.ts.map +0 -1
- package/dist/safe/safe-rules.js +0 -152
- package/dist/safe/safe-rules.js.map +0 -1
- package/dist/safe/types.d.ts.map +0 -1
- package/dist/safe/types.js.map +0 -1
package/dist/mcp/index.js
CHANGED
|
@@ -41,6 +41,7 @@ import { Vault } from '../vault/index.js';
|
|
|
41
41
|
import { startUsageLocal } from '../usage-local/index.js';
|
|
42
42
|
import { ReconciliationEngine } from '../reconciliation/index.js';
|
|
43
43
|
import { AnthropicConnector, OpenAIConnector, DeepSeekConnector, KimiConnector, QwenConnector, DoubaoConnector, } from '../connectors/index.js';
|
|
44
|
+
import { getApprenticeCapabilityCatalog, } from '../beacon/apprentice-capabilities.js';
|
|
44
45
|
const PACKAGE_NAME = '@skillfm/local';
|
|
45
46
|
// Resolve version from the host package.json so the MCP server reports the
|
|
46
47
|
// same version as `skillfm-local --version`. dist/mcp/index.js sits two
|
|
@@ -127,6 +128,9 @@ export async function startServer() {
|
|
|
127
128
|
// Phase 0 stub: any token = Pro. Week 5 will read tier from token claims.
|
|
128
129
|
isProTier: !cfg.degraded,
|
|
129
130
|
});
|
|
131
|
+
console.error(`[skillfm-local mcp] apprentice capability catalog ready: ${getApprenticeCapabilityCatalog()
|
|
132
|
+
.map((cap) => cap.name)
|
|
133
|
+
.join(', ')}`);
|
|
130
134
|
const transport = new StdioServerTransport();
|
|
131
135
|
await server.connect(transport);
|
|
132
136
|
console.error(`[skillfm-local mcp] ${PACKAGE_NAME}@${PACKAGE_VERSION} ready on stdio (degraded=${cfg.degraded})`);
|
|
@@ -139,4 +143,5 @@ export { loadConfig } from './config.js';
|
|
|
139
143
|
export { evaluateSuggestion } from './decision-engine.js';
|
|
140
144
|
export { loadPrefs, savePrefs, loadRules, saveRules, openSessionCache, BEACON_HOME, } from './cache.js';
|
|
141
145
|
export { SkillFmError, SKILLFM_ERROR_CODES } from './errors.js';
|
|
146
|
+
export { APRENTICE_CAPABILITIES, getApprenticeCapabilityCatalog, } from '../beacon/apprentice-capabilities.js';
|
|
142
147
|
//# sourceMappingURL=index.js.map
|
package/dist/mcp/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,eAAe,GAChB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
// 6. <hints> IMPORTANT note + secondary hints </hints>
|
|
13
13
|
//
|
|
14
14
|
// L4 Agent Voice Philosophy (Eric 真核, V2.0 §2.6):
|
|
15
|
-
//
|
|
15
|
+
// Forcing 不是"必须调 X", 是 agent 用自己口吻**站在替用户着想角度** surface 价值.
|
|
16
16
|
// <examples> 段必含 agent voice (good) vs (BAD) 真示范.
|
|
17
17
|
//
|
|
18
18
|
// Length budget: each description targets ~800-1400 chars. Tool descriptions
|
|
@@ -54,7 +54,7 @@ Agent voice (good): "好, 我拉完整 finding 列表" → call skillfm_checkup
|
|
|
54
54
|
<hints>
|
|
55
55
|
- **IMPORTANT**: The response includes a \`rendered\` field — show it directly to the user. Do NOT paraphrase or replace with \`curl /status\` or generic shell exec.
|
|
56
56
|
- If \`BEACON_V2.NOT_READY\` is returned, the sidecar is not running — guide the user to \`npx @skillfm/local checkup\` CLI fallback.
|
|
57
|
-
- Default surface mode is concise (< 300 chars rendered). Pass \`{full: true}\` only when the user asks for the full finding list.
|
|
57
|
+
- Default surface mode is concise (< 300 chars rendered). Pass \`{full: true\}\` only when the user asks for the full finding list.
|
|
58
58
|
- Trigger semantically (not just by keyword). "AI 怎么了" / "我家 AI 怎样" / "状态" / "我的 AI 健不健康" all imply checkup.
|
|
59
59
|
</hints>`;
|
|
60
60
|
export const SHOW_MY_USAGE_DESCRIPTION = `Show the user's real LLM token usage and cost for a time window (today/week/month), broken down by provider, agent, and model. Includes Save Token suggestions (E1 router / E2 cache / E3 batch) ranked by estimated monthly savings.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_sentry-descriptions.js","sourceRoot":"","sources":["../../../src/mcp/tools/_sentry-descriptions.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,8EAA8E;AAC9E,mDAAmD;AACnD,4BAA4B;AAC5B,qCAAqC;AACrC,mDAAmD;AACnD,yCAAyC;AACzC,wDAAwD;AACxD,yDAAyD;AACzD,EAAE;AACF,kDAAkD;AAClD,
|
|
1
|
+
{"version":3,"file":"_sentry-descriptions.js","sourceRoot":"","sources":["../../../src/mcp/tools/_sentry-descriptions.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,8EAA8E;AAC9E,mDAAmD;AACnD,4BAA4B;AAC5B,qCAAqC;AACrC,mDAAmD;AACnD,yCAAyC;AACzC,wDAAwD;AACxD,yDAAyD;AACzD,EAAE;AACF,kDAAkD;AAClD,8DAA8D;AAC9D,oDAAoD;AACpD,EAAE;AACF,6EAA6E;AAC7E,yEAAyE;AACzE,wEAAwE;AAExE,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAsC1B,CAAC;AAEV,MAAM,CAAC,MAAM,yBAAyB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAsChC,CAAC;AAEV,MAAM,CAAC,MAAM,gCAAgC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAuCvC,CAAC;AAEV,MAAM,CAAC,MAAM,2BAA2B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAgClC,CAAC;AAEV,MAAM,CAAC,MAAM,yBAAyB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAgChC,CAAC;AAEV,+EAA+E;AAC/E,0DAA0D;AAC1D,EAAE;AACF,qEAAqE;AACrE,qEAAqE;AACrE,gEAAgE;AAChE,EAAE;AACF,2DAA2D;AAC3D,8DAA8D;AAC9D,8BAA8B;AAC9B,+EAA+E;AAE/E,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;SA0BzB,CAAC"}
|
|
@@ -5,17 +5,32 @@ import type { SkillFmToolResult } from '../_vendored-contracts/beacon-mcp-tools-
|
|
|
5
5
|
export interface SkillFmCheckupInput {
|
|
6
6
|
/** 是否返完整 finding 列表 (默认 false, 主入口模式只返 score + 5 维度 + top_focus) */
|
|
7
7
|
full?: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* 是否按"上次报告 → 现在"的时间窗扫描. 触发自 /skillfm slash command 或
|
|
10
|
+
* 客户端手动 trigger. tool 内部:
|
|
11
|
+
* 1. 读 ~/.skillfm/last-report.json 的 last_report_at (默认 24h ago)
|
|
12
|
+
* 2. 用作 dim 6 injection sinceHours (其它 5 维度暂 snapshot)
|
|
13
|
+
* 3. 完成后写 last_report_at = now (side-effect)
|
|
14
|
+
* Default false (snapshot mode, 跟旧行为兼容).
|
|
15
|
+
*/
|
|
16
|
+
since_last_report?: boolean;
|
|
8
17
|
}
|
|
9
18
|
export interface SkillFmCheckupOutput {
|
|
10
|
-
/** 渲染好的主入口文本 (< 300
|
|
19
|
+
/** 渲染好的主入口文本 (< 300 字, 含扫描期间标注 if since_last_report) */
|
|
11
20
|
rendered: string;
|
|
12
21
|
/** 完整 report (agent 可深挖) */
|
|
13
22
|
report: CheckupReport;
|
|
23
|
+
/** 扫描期间 (ISO timestamps), 仅 since_last_report=true 时有 */
|
|
24
|
+
scan_window?: {
|
|
25
|
+
since: string;
|
|
26
|
+
until: string;
|
|
27
|
+
hours_since: number;
|
|
28
|
+
};
|
|
14
29
|
}
|
|
15
30
|
export interface CheckupToolDeps {
|
|
16
31
|
store: LocalUsageStore;
|
|
17
32
|
reconciliationEngine: ReconciliationEngine;
|
|
18
33
|
is_pro: boolean;
|
|
19
34
|
}
|
|
20
|
-
export declare function handleSkillFmCheckup(
|
|
35
|
+
export declare function handleSkillFmCheckup(input: SkillFmCheckupInput, deps: CheckupToolDeps): Promise<SkillFmToolResult<SkillFmCheckupOutput>>;
|
|
21
36
|
//# sourceMappingURL=checkup.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkup.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/checkup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"checkup.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/checkup.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAE1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAM5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAEvF,MAAM,WAAW,mBAAmB;IAClC,oEAAoE;IACpE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,oBAAoB;IACnC,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,MAAM,EAAE,aAAa,CAAC;IACtB,yDAAyD;IACzD,WAAW,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CACrE;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,eAAe,CAAC;IACvB,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,mBAAmB,EAC1B,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,CAAC,CA0DlD"}
|
|
@@ -7,18 +7,56 @@
|
|
|
7
7
|
// - 完整 CheckupReport (data, agent 可深挖各维度)
|
|
8
8
|
//
|
|
9
9
|
// 触发: 用户在 IM / agent 里说"看 SkillFM 体检" / "/skillfm" / "我家 AI 状态" 等
|
|
10
|
+
//
|
|
11
|
+
// 时间窗 (since_last_report): /skillfm 触发时设 true → 扫描期间从上次报告
|
|
12
|
+
// (sidecar local ~/.skillfm/last-report.json) 到 now. tool 完成后内部更新
|
|
13
|
+
// last_report_at = now (side-effect). 5 维度中 dim 6 (injection) 真用 since
|
|
14
|
+
// window, dim 1 (用量) 仍 snapshot (LocalUsageStore 时间窗 query 待 follow-up
|
|
15
|
+
// PR), dim 3/4/5 性质上是 snapshot (文件/上下文/behavior 状态都是当前).
|
|
10
16
|
import { runCheckup, renderMainEntry } from '../../checkup/index.js';
|
|
11
|
-
|
|
17
|
+
import { resolveSinceCutoff, writeLastReport, renderScanWindowLine, } from '../../checkup/last-report.js';
|
|
18
|
+
export async function handleSkillFmCheckup(input, deps) {
|
|
12
19
|
try {
|
|
20
|
+
const since_last_report = input.since_last_report ?? false;
|
|
21
|
+
const now = new Date();
|
|
22
|
+
let scan_window;
|
|
23
|
+
let scanWindowLine = '';
|
|
24
|
+
let usageWindow;
|
|
25
|
+
if (since_last_report) {
|
|
26
|
+
const since = await resolveSinceCutoff(now);
|
|
27
|
+
const hoursSince = Math.max(1, Math.ceil((now.getTime() - since.getTime()) / (60 * 60 * 1000)));
|
|
28
|
+
scan_window = {
|
|
29
|
+
since: since.toISOString(),
|
|
30
|
+
until: now.toISOString(),
|
|
31
|
+
hours_since: hoursSince,
|
|
32
|
+
};
|
|
33
|
+
scanWindowLine = renderScanWindowLine(since, now);
|
|
34
|
+
// Plumb the same window into dimension 1 so usage stats reflect the
|
|
35
|
+
// since→now period (not the default "today" snapshot).
|
|
36
|
+
usageWindow = { start: since.toISOString(), end: now.toISOString() };
|
|
37
|
+
}
|
|
13
38
|
const report = await runCheckup({
|
|
14
39
|
store: deps.store,
|
|
15
40
|
reconciliationEngine: deps.reconciliationEngine,
|
|
16
41
|
is_pro: deps.is_pro,
|
|
42
|
+
usageWindow,
|
|
17
43
|
});
|
|
18
|
-
const
|
|
44
|
+
const baseRendered = renderMainEntry(report);
|
|
45
|
+
const rendered = scanWindowLine
|
|
46
|
+
? `${scanWindowLine}\n\n${baseRendered}`
|
|
47
|
+
: baseRendered;
|
|
48
|
+
if (since_last_report) {
|
|
49
|
+
// Side-effect: persist new last_report_at so the next /skillfm picks
|
|
50
|
+
// up from this moment. Failure here is non-fatal — tool still returns
|
|
51
|
+
// the report.
|
|
52
|
+
await writeLastReport({
|
|
53
|
+
last_report_at: now.toISOString(),
|
|
54
|
+
trigger: 'manual_slash_command',
|
|
55
|
+
}).catch(() => undefined);
|
|
56
|
+
}
|
|
19
57
|
return {
|
|
20
58
|
ok: true,
|
|
21
|
-
data: { rendered, report },
|
|
59
|
+
data: { rendered, report, scan_window },
|
|
22
60
|
};
|
|
23
61
|
}
|
|
24
62
|
catch (e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkup.js","sourceRoot":"","sources":["../../../src/mcp/tools/checkup.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,EAAE;AACF,6DAA6D;AAC7D,EAAE;AACF,qBAAqB;AACrB,gCAAgC;AAChC,4CAA4C;AAC5C,EAAE;AACF,kEAAkE;
|
|
1
|
+
{"version":3,"file":"checkup.js","sourceRoot":"","sources":["../../../src/mcp/tools/checkup.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,EAAE;AACF,6DAA6D;AAC7D,EAAE;AACF,qBAAqB;AACrB,gCAAgC;AAChC,4CAA4C;AAC5C,EAAE;AACF,kEAAkE;AAClE,EAAE;AACF,0DAA0D;AAC1D,kEAAkE;AAClE,uEAAuE;AACvE,uEAAuE;AACvE,yDAAyD;AAIzD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAErE,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,oBAAoB,GACrB,MAAM,8BAA8B,CAAC;AAgCtC,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,KAA0B,EAC1B,IAAqB;IAErB,IAAI,CAAC;QACH,MAAM,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC;QAC3D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,WAAgD,CAAC;QACrD,IAAI,cAAc,GAAG,EAAE,CAAC;QAExB,IAAI,WAAyD,CAAC;QAC9D,IAAI,iBAAiB,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC;YAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAChG,WAAW,GAAG;gBACZ,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE;gBAC1B,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE;gBACxB,WAAW,EAAE,UAAU;aACxB,CAAC;YACF,cAAc,GAAG,oBAAoB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAClD,oEAAoE;YACpE,uDAAuD;YACvD,WAAW,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;QACvE,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;YAC9B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;YAC/C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,WAAW;SACZ,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,cAAc;YAC7B,CAAC,CAAC,GAAG,cAAc,OAAO,YAAY,EAAE;YACxC,CAAC,CAAC,YAAY,CAAC;QAEjB,IAAI,iBAAiB,EAAE,CAAC;YACtB,qEAAqE;YACrE,sEAAsE;YACtE,cAAc;YACd,MAAM,eAAe,CAAC;gBACpB,cAAc,EAAE,GAAG,CAAC,WAAW,EAAE;gBACjC,OAAO,EAAE,sBAAsB;aAChC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO;YACL,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE;SACxC,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE;gBACL,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAG,CAAW,CAAC,OAAO;gBAC7B,SAAS,EAAE,IAAI;aAChB;SACF,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -40,24 +40,11 @@ export interface ToolRegistryDeps {
|
|
|
40
40
|
/** Beacon V2: L0+L1+L2 三口径对账 engine (PRD §5) */
|
|
41
41
|
reconciliationEngine?: ReconciliationEngine | null;
|
|
42
42
|
}
|
|
43
|
-
export type ToolRegistryToolset = 'compact' | 'legacy-full';
|
|
44
|
-
export interface ToolRegistryOptions {
|
|
45
|
-
/**
|
|
46
|
-
* compact: launch SAFE surface, grouped into 3 tools.
|
|
47
|
-
* legacy-full: old per-capability tools + contract placeholders.
|
|
48
|
-
*/
|
|
49
|
-
toolset?: ToolRegistryToolset;
|
|
50
|
-
}
|
|
51
43
|
/**
|
|
52
|
-
* Register
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
* Set SKILLFM_MCP_TOOLSET=legacy-full to expose the old fine-grained tools
|
|
56
|
-
* and reserved contract placeholders for compatibility testing.
|
|
44
|
+
* Register every Phase 0 beacon MCP tool. Called once by src/index.ts on
|
|
45
|
+
* server bootstrap.
|
|
57
46
|
*/
|
|
58
|
-
export declare function registerAllTools(server: McpServer, deps: ToolRegistryDeps
|
|
47
|
+
export declare function registerAllTools(server: McpServer, deps: ToolRegistryDeps): void;
|
|
59
48
|
/** For tests / sanity checks. Not part of the public package surface. */
|
|
60
49
|
export declare function _listAllRegisteredToolNames(): string[];
|
|
61
|
-
/** For tests / launch smoke. Not part of the public package surface. */
|
|
62
|
-
export declare function _listCompactRegisteredToolNames(): string[];
|
|
63
50
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAoCtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAM1E,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,WAAW,CAAC;IACnB,uEAAuE;IACvE,SAAS,EAAE,OAAO,CAAC;IACnB,yFAAyF;IACzF,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,mFAAmF;IACnF,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,wDAAwD;IACxD,UAAU,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACpC,gDAAgD;IAChD,oBAAoB,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACpD;AA0bD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAGhF;AAED,yEAAyE;AACzE,wBAAgB,2BAA2B,IAAI,MAAM,EAAE,CAEtD"}
|
package/dist/mcp/tools/index.js
CHANGED
|
@@ -40,10 +40,11 @@ import { handleExplainProviderKey } from './explain-provider-key.js';
|
|
|
40
40
|
import { handleSkillFmCheckup } from './checkup.js';
|
|
41
41
|
import { handleSkillFmShowMyUsage } from './show-my-usage.js';
|
|
42
42
|
import { handleSkillFmSetupGateway } from './setup-gateway.js';
|
|
43
|
-
import { handleSetupSafe } from './setup-safe.js';
|
|
43
|
+
import { handleSetupSafe, handleSetupAgentForcing } from './setup-safe.js';
|
|
44
44
|
import { handleUnlockSkillFmBeacon } from './unlock.js';
|
|
45
|
+
import { handleSkillFmSendDailyReport } from './send-daily-report.js';
|
|
46
|
+
import { handleSkillFmInstallModule } from './install-module.js';
|
|
45
47
|
import { CHECKUP_DESCRIPTION, SHOW_MY_USAGE_DESCRIPTION, EXPLAIN_PROVIDER_KEY_DESCRIPTION, SAVE_CREDENTIAL_DESCRIPTION, SETUP_GATEWAY_DESCRIPTION, UNLOCK_DESCRIPTION, } from './_sentry-descriptions.js';
|
|
46
|
-
import { runBeaconCleanupAudit } from '../../beacon-cleanup/audit.js';
|
|
47
48
|
// ============================================================================
|
|
48
49
|
// Minimal input shape — every Phase 0 tool accepts a free-form object.
|
|
49
50
|
// Validation is done inside handlers (so failures come back as
|
|
@@ -68,6 +69,9 @@ const REMOVE_CREDENTIAL_SCHEMA = z.object({
|
|
|
68
69
|
// Beacon V2 tool schemas (P0: PASSTHROUGH 让 fields 被 strip 是真根因 dry_run/window/full 失效)
|
|
69
70
|
const CHECKUP_SCHEMA = z.object({
|
|
70
71
|
full: z.boolean().optional().describe('true 返完整 finding 列表; false (默认) 只返主入口模式'),
|
|
72
|
+
since_last_report: z.boolean().optional().describe('true 时按"上次报告 → 现在"的时间窗扫描 (用于 /skillfm slash command). ' +
|
|
73
|
+
'内部读 ~/.skillfm/last-report.json 拿 last_report_at, render 扫描期间 header, ' +
|
|
74
|
+
'完成后写新 last_report_at = now. Default false (snapshot, 跟旧行为兼容).'),
|
|
71
75
|
});
|
|
72
76
|
const SHOW_MY_USAGE_SCHEMA = z.object({
|
|
73
77
|
window: z.enum(['today', 'week', 'month', 'all']).optional().describe('时间窗口, 默认 today'),
|
|
@@ -81,63 +85,16 @@ const SETUP_SAFE_SCHEMA = z.object({
|
|
|
81
85
|
sidecar_url: z.string().optional().describe('Sidecar URL 注入到 guide (默认 http://127.0.0.1:19821)'),
|
|
82
86
|
version: z.string().optional().describe('包版本 写入 guide header'),
|
|
83
87
|
});
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
window: z.enum(['today', 'week', 'month', 'all']).optional().describe('For action=show_usage, usage time window'),
|
|
88
|
-
dry_run: z.boolean().optional().describe('For action=setup_gateway, preview changes before applying'),
|
|
89
|
-
cwd: z.string().optional().describe('For action=cleanup_audit, optional workspace path to scan'),
|
|
90
|
-
max_candidates: z.number().int().positive().max(50).optional().describe('For action=cleanup_audit, max candidates to return'),
|
|
88
|
+
const SEND_DAILY_REPORT_SCHEMA = z.object({
|
|
89
|
+
trigger: z.enum(['manual', 'cron']).optional().describe('触发来源 — manual (用户/agent 主动) / cron (BeaconScheduler 定时器). Default manual.'),
|
|
90
|
+
push_time: z.enum(['07:00', '09:00', '12:00', '18:00', '21:00']).optional().describe('Push 时间 (5 个固定 slot) 用于跟 user 设置对账. Default 09:00.'),
|
|
91
91
|
});
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
92
|
+
const INSTALL_MODULE_SCHEMA = z.object({
|
|
93
|
+
name: z.enum(['beacon', 'apprentice']).describe("模块名 — 'beacon' 默认装 SAFE forcing + slash command; 'apprentice' Phase 1 占位 (返 NOT_AVAILABLE)."),
|
|
94
|
+
dry_run: z.boolean().optional().describe('true 仅 detect 不真改 (跟 setup-safe 一致). Default false.'),
|
|
95
|
+
sidecar_url: z.string().optional().describe('Sidecar URL 注入到 SAFE guide'),
|
|
96
|
+
version: z.string().optional().describe('包版本'),
|
|
97
97
|
});
|
|
98
|
-
const SAFE_SUITE_SCHEMA = z.object({
|
|
99
|
-
action: z.enum(['setup_safe', 'uninstall_safe', 'unlock', 'help']).describe('SAFE action: setup_safe / uninstall_safe / unlock / help'),
|
|
100
|
-
dry_run: z.boolean().optional().describe('For action=setup_safe, preview detected harnesses before writing files'),
|
|
101
|
-
sidecar_url: z.string().optional().describe('Sidecar URL injected into SAFE guide'),
|
|
102
|
-
version: z.string().optional().describe('Package version written into SAFE guide'),
|
|
103
|
-
});
|
|
104
|
-
const BEACON_SUITE_DESCRIPTION = `SkillFM Beacon suite for AI asset health, token usage, savings, and install/config onboarding.
|
|
105
|
-
|
|
106
|
-
USE THIS TOOL WHEN the user asks about AI status/checkup/健康度, token usage/cost/省钱, or installing/configuring SkillFM.
|
|
107
|
-
Also use it when the user asks why their agent is slow, wants to clean unused tools, reduce prompt bloat, remove stale worktrees, or lower ordinary-chat latency.
|
|
108
|
-
For those intents, call this tool before replying. Do not answer with a placeholder such as "I'll check" unless you have already called the tool and surfaced its result.
|
|
109
|
-
Actions:
|
|
110
|
-
- action="checkup": AI health dashboard. Optional {full:true}.
|
|
111
|
-
- action="show_usage": real token/cost report. Optional {window:"today"|"week"|"month"|"all"}.
|
|
112
|
-
- action="setup_gateway": preview/apply IDE gateway config. Always use {dry_run:true} first.
|
|
113
|
-
- action="cleanup_audit": dry-run only audit for stale tools, prompt bloat, stale worktrees, and large logs. It protects current access components and never deletes files.
|
|
114
|
-
- action="help": returns the compact action map.
|
|
115
|
-
|
|
116
|
-
Do not call for ordinary chat. When result.data.rendered exists, surface rendered directly.`;
|
|
117
|
-
const BYOK_SUITE_DESCRIPTION = `SkillFM BYOK suite for provider API key education and local encrypted vault operations.
|
|
118
|
-
|
|
119
|
-
USE THIS TOOL WHEN the user is about to provide, update, check, list, or remove an OpenAI/Anthropic/DeepSeek/Doubao/Qwen/Kimi key.
|
|
120
|
-
For key-sharing intents, call this tool before asking the user to paste or generate a key.
|
|
121
|
-
Actions:
|
|
122
|
-
- action="explain_provider_key": show provider-specific risk/scope/revoke guidance BEFORE accepting a key.
|
|
123
|
-
- action="save_credential": encrypt and save {provider,key} locally after the user has seen the explanation.
|
|
124
|
-
- action="get_credential": check whether a provider key exists, without revealing the key.
|
|
125
|
-
- action="list_credentials": list provider names only.
|
|
126
|
-
- action="remove_credential": remove a provider key.
|
|
127
|
-
- action="help": returns the compact action map.
|
|
128
|
-
|
|
129
|
-
BYOK red line: never expose key values in responses or logs.`;
|
|
130
|
-
const SAFE_SUITE_DESCRIPTION = `SkillFM SAFE suite for agent-side guidance and SkillFM behavior bootstrap.
|
|
131
|
-
|
|
132
|
-
USE THIS TOOL WHEN the user asks to inject/uninstall SAFE rules, when the agent needs the SkillFM behavior contract, or when SkillFM intent routing is confused.
|
|
133
|
-
For SAFE setup/repair/uninstall intents, call this tool before replying with instructions.
|
|
134
|
-
Actions:
|
|
135
|
-
- action="setup_safe": detect/inject SAFE guide. Use {dry_run:true} before writing.
|
|
136
|
-
- action="uninstall_safe": remove injected SAFE guide.
|
|
137
|
-
- action="unlock": return the behavior protocol and tool/action family.
|
|
138
|
-
- action="help": returns the compact action map.
|
|
139
|
-
|
|
140
|
-
Ordinary chat should not call this tool.`;
|
|
141
98
|
/** MCP SDK requires content blocks. We always wrap our envelope as JSON text. */
|
|
142
99
|
function wrapEnvelope(envelope) {
|
|
143
100
|
return {
|
|
@@ -148,153 +105,6 @@ function wrapEnvelope(envelope) {
|
|
|
148
105
|
// ============================================================================
|
|
149
106
|
// Key tool registration
|
|
150
107
|
// ============================================================================
|
|
151
|
-
function vaultNotConfigured() {
|
|
152
|
-
return wrapEnvelope({
|
|
153
|
-
ok: false,
|
|
154
|
-
error: { code: 'VAULT.NOT_CONFIGURED', message: 'Local vault not available in this MCP transport.', retryable: false },
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
function usageStoreNotReady() {
|
|
158
|
-
return wrapEnvelope({
|
|
159
|
-
ok: false,
|
|
160
|
-
error: { code: 'BEACON_V2.NOT_READY', message: 'Usage store not initialized.', retryable: false },
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
function checkupNotReady() {
|
|
164
|
-
return wrapEnvelope({
|
|
165
|
-
ok: false,
|
|
166
|
-
error: { code: 'BEACON_V2.NOT_READY', message: 'Usage store / reconciliation engine not initialized in this transport.', retryable: false },
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
function inputInvalid(message) {
|
|
170
|
-
return wrapEnvelope({
|
|
171
|
-
ok: false,
|
|
172
|
-
error: { code: 'INPUT.INVALID', message, retryable: false },
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
function registerCompactSuiteTools(server, deps) {
|
|
176
|
-
server.tool('skillfm_beacon', BEACON_SUITE_DESCRIPTION, BEACON_SUITE_SCHEMA.shape, async (input) => {
|
|
177
|
-
const action = input.action ?? 'help';
|
|
178
|
-
if (action === 'help') {
|
|
179
|
-
return wrapEnvelope({
|
|
180
|
-
ok: true,
|
|
181
|
-
data: {
|
|
182
|
-
rendered: 'SkillFM Beacon actions: checkup({full?}), show_usage({window?}), setup_gateway({dry_run}), cleanup_audit({cwd?,max_candidates?}). Show data.rendered directly when present.',
|
|
183
|
-
},
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
if (action === 'checkup') {
|
|
187
|
-
if (!deps.usageStore || !deps.reconciliationEngine)
|
|
188
|
-
return checkupNotReady();
|
|
189
|
-
const env = await handleSkillFmCheckup({ full: input.full }, {
|
|
190
|
-
store: deps.usageStore,
|
|
191
|
-
reconciliationEngine: deps.reconciliationEngine,
|
|
192
|
-
is_pro: deps.isProTier,
|
|
193
|
-
});
|
|
194
|
-
return wrapEnvelope(env);
|
|
195
|
-
}
|
|
196
|
-
if (action === 'show_usage') {
|
|
197
|
-
if (!deps.usageStore)
|
|
198
|
-
return usageStoreNotReady();
|
|
199
|
-
const env = await handleSkillFmShowMyUsage({ window: input.window }, {
|
|
200
|
-
store: deps.usageStore,
|
|
201
|
-
is_pro: deps.isProTier,
|
|
202
|
-
});
|
|
203
|
-
return wrapEnvelope(env);
|
|
204
|
-
}
|
|
205
|
-
if (action === 'setup_gateway') {
|
|
206
|
-
const env = await handleSkillFmSetupGateway({ dry_run: input.dry_run });
|
|
207
|
-
return wrapEnvelope(env);
|
|
208
|
-
}
|
|
209
|
-
if (action === 'cleanup_audit') {
|
|
210
|
-
const audit = await runBeaconCleanupAudit({
|
|
211
|
-
cwd: input.cwd,
|
|
212
|
-
max_candidates: input.max_candidates,
|
|
213
|
-
});
|
|
214
|
-
return wrapEnvelope({
|
|
215
|
-
ok: true,
|
|
216
|
-
data: audit,
|
|
217
|
-
});
|
|
218
|
-
}
|
|
219
|
-
return inputInvalid(`Unsupported skillfm_beacon action: ${String(action)}`);
|
|
220
|
-
});
|
|
221
|
-
server.tool('skillfm_byok', BYOK_SUITE_DESCRIPTION, BYOK_SUITE_SCHEMA.shape, async (input) => {
|
|
222
|
-
const action = input.action ?? 'help';
|
|
223
|
-
if (action === 'help') {
|
|
224
|
-
return wrapEnvelope({
|
|
225
|
-
ok: true,
|
|
226
|
-
data: {
|
|
227
|
-
rendered: 'SkillFM BYOK actions: explain_provider_key({provider}), save_credential({provider,key}), get_credential({provider}), list_credentials(), remove_credential({provider}). Never reveal key values.',
|
|
228
|
-
},
|
|
229
|
-
});
|
|
230
|
-
}
|
|
231
|
-
if (action === 'explain_provider_key') {
|
|
232
|
-
if (!input.provider)
|
|
233
|
-
return inputInvalid('provider required');
|
|
234
|
-
const env = await handleExplainProviderKey({ provider: input.provider });
|
|
235
|
-
return wrapEnvelope(env);
|
|
236
|
-
}
|
|
237
|
-
if (!deps.vault)
|
|
238
|
-
return vaultNotConfigured();
|
|
239
|
-
if (action === 'save_credential') {
|
|
240
|
-
if (!input.provider)
|
|
241
|
-
return inputInvalid('provider required');
|
|
242
|
-
if (!input.key)
|
|
243
|
-
return inputInvalid('key required');
|
|
244
|
-
const env = await handleSaveCredential({ provider: input.provider, key: input.key }, { vault: deps.vault });
|
|
245
|
-
return wrapEnvelope(env);
|
|
246
|
-
}
|
|
247
|
-
if (action === 'get_credential') {
|
|
248
|
-
if (!input.provider)
|
|
249
|
-
return inputInvalid('provider required');
|
|
250
|
-
const env = await handleGetCredential({ provider: input.provider }, { vault: deps.vault });
|
|
251
|
-
return wrapEnvelope(env);
|
|
252
|
-
}
|
|
253
|
-
if (action === 'list_credentials') {
|
|
254
|
-
const env = await handleListCredentials(input, { vault: deps.vault });
|
|
255
|
-
return wrapEnvelope(env);
|
|
256
|
-
}
|
|
257
|
-
if (action === 'remove_credential') {
|
|
258
|
-
if (!input.provider)
|
|
259
|
-
return inputInvalid('provider required');
|
|
260
|
-
const env = await handleRemoveCredential({ provider: input.provider }, { vault: deps.vault });
|
|
261
|
-
return wrapEnvelope(env);
|
|
262
|
-
}
|
|
263
|
-
return inputInvalid(`Unsupported skillfm_byok action: ${String(action)}`);
|
|
264
|
-
});
|
|
265
|
-
server.tool('skillfm_safe', SAFE_SUITE_DESCRIPTION, SAFE_SUITE_SCHEMA.shape, async (input) => {
|
|
266
|
-
const action = input.action ?? 'help';
|
|
267
|
-
if (action === 'help') {
|
|
268
|
-
return wrapEnvelope({
|
|
269
|
-
ok: true,
|
|
270
|
-
data: {
|
|
271
|
-
rendered: 'SkillFM SAFE actions: setup_safe({dry_run,sidecar_url,version}), uninstall_safe(), unlock(). Use only for SkillFM setup or routing confusion.',
|
|
272
|
-
},
|
|
273
|
-
});
|
|
274
|
-
}
|
|
275
|
-
if (action === 'setup_safe') {
|
|
276
|
-
const env = await handleSetupSafe({
|
|
277
|
-
dry_run: input.dry_run,
|
|
278
|
-
sidecar_url: input.sidecar_url,
|
|
279
|
-
version: input.version,
|
|
280
|
-
});
|
|
281
|
-
return wrapEnvelope(env);
|
|
282
|
-
}
|
|
283
|
-
if (action === 'uninstall_safe') {
|
|
284
|
-
const env = await handleSetupSafe({
|
|
285
|
-
uninstall: true,
|
|
286
|
-
sidecar_url: input.sidecar_url,
|
|
287
|
-
version: input.version,
|
|
288
|
-
});
|
|
289
|
-
return wrapEnvelope(env);
|
|
290
|
-
}
|
|
291
|
-
if (action === 'unlock') {
|
|
292
|
-
const env = await handleUnlockSkillFmBeacon(input);
|
|
293
|
-
return wrapEnvelope(env);
|
|
294
|
-
}
|
|
295
|
-
return inputInvalid(`Unsupported skillfm_safe action: ${String(action)}`);
|
|
296
|
-
});
|
|
297
|
-
}
|
|
298
108
|
function registerKeyTools(server, deps) {
|
|
299
109
|
server.tool('skillfm_check_usage', 'Get the agent\'s LLM/API spending for the current period across all platforms (Anthropic / OpenAI / DeepSeek / Qwen / Doubao / etc). Returns total spent, per-platform breakdown, savings already realized, and warnings. Call this before suggesting a budget action to the user.', PASSTHROUGH_SCHEMA.shape, async (input) => {
|
|
300
110
|
const env = await handleCheckUsage(input, { brain: deps.brain });
|
|
@@ -308,7 +118,7 @@ function registerKeyTools(server, deps) {
|
|
|
308
118
|
const env = await handleCheckExpiry(input, { brain: deps.brain });
|
|
309
119
|
return wrapEnvelope(env);
|
|
310
120
|
});
|
|
311
|
-
server.tool('skillfm_avatar_market', '
|
|
121
|
+
server.tool('skillfm_avatar_market', 'Recommend SkillFM avatars (autonomous money-making skills) matching a detected user intent. Returns avatar matches + pricing + real success cases + setup requirements. Use this when the user mentions making money, side income, or specific platforms (xianyu, fiverr, etc).', PASSTHROUGH_SCHEMA.shape, async (input) => {
|
|
312
122
|
const env = await handleAvatarMarket(input, { brain: deps.brain });
|
|
313
123
|
return wrapEnvelope(env);
|
|
314
124
|
});
|
|
@@ -423,12 +233,31 @@ function registerKeyTools(server, deps) {
|
|
|
423
233
|
const env = await handleSkillFmSetupGateway(input);
|
|
424
234
|
return wrapEnvelope(env);
|
|
425
235
|
});
|
|
426
|
-
server.tool('skillfm_setup_safe', 'Inject SkillFM SAFE rules into agent harness (OpenClaw/Claude Code/Cursor) so agent reliably calls SkillFM tools. Auto-runs at sidecar start; manually trigger if needed. {dry_run: true} preview / {uninstall: true} remove.', SETUP_SAFE_SCHEMA.shape, async (input) => {
|
|
236
|
+
server.tool('skillfm_setup_safe', 'Inject SkillFM SAFE rules into agent harness (OpenClaw/Claude Code/Cursor) so the agent reliably calls SkillFM tools. Auto-runs at sidecar start; manually trigger if needed. {dry_run: true} preview / {uninstall: true} remove.', SETUP_SAFE_SCHEMA.shape, async (input) => {
|
|
427
237
|
const env = await handleSetupSafe(input);
|
|
428
238
|
return wrapEnvelope(env);
|
|
429
239
|
});
|
|
430
|
-
server.tool('skillfm_setup_agent_forcing', 'Deprecated alias
|
|
431
|
-
const env = await
|
|
240
|
+
server.tool('skillfm_setup_agent_forcing', 'Deprecated alias of skillfm_setup_safe for backward compatibility; forwards to SAFE.', SETUP_SAFE_SCHEMA.shape, async (input) => {
|
|
241
|
+
const env = await handleSetupAgentForcing(input);
|
|
242
|
+
return wrapEnvelope(env);
|
|
243
|
+
});
|
|
244
|
+
// ─── PRD V2.1 §8.1 + §8.3 forcing rules — install_module + send_daily_report ───
|
|
245
|
+
server.tool('skillfm_install_module', "Install a SkillFM module ('beacon' default) for the user. Wraps SAFE setup so the agent doesn't have to know about the SAFE / slash-command plumbing. Use this when the user asks to install Beacon, set up a SkillFM module, or after the first-setup forcing rule fires (PRD V2.1 §8.1).", INSTALL_MODULE_SCHEMA.shape, async (input) => {
|
|
246
|
+
const env = await handleSkillFmInstallModule(input);
|
|
247
|
+
return wrapEnvelope(env);
|
|
248
|
+
});
|
|
249
|
+
server.tool('skillfm_send_daily_report', "Trigger a Beacon daily report — runs the 5-dimension checkup, renders a short IM-style push (60-200 chars), and updates last_report_at as a side-effect. Use this for the daily report forcing rule (PRD V2.1 §8.3, BeaconScheduler 9:00 cron) or when the user asks 'show me today's report'. Default trigger='manual'.", SEND_DAILY_REPORT_SCHEMA.shape, async (input) => {
|
|
250
|
+
if (!deps.usageStore || !deps.reconciliationEngine) {
|
|
251
|
+
return wrapEnvelope({
|
|
252
|
+
ok: false,
|
|
253
|
+
error: { code: 'BEACON_V2.NOT_READY', message: 'Usage store / reconciliation engine not initialized.', retryable: false },
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
const env = await handleSkillFmSendDailyReport(input, {
|
|
257
|
+
store: deps.usageStore,
|
|
258
|
+
reconciliationEngine: deps.reconciliationEngine,
|
|
259
|
+
is_pro: deps.isProTier,
|
|
260
|
+
});
|
|
432
261
|
return wrapEnvelope(env);
|
|
433
262
|
});
|
|
434
263
|
// ─── V2 L0: Blockscout fallback bootstrap (PRD §2.2) ───
|
|
@@ -471,24 +300,11 @@ function registerPlaceholderTools(server) {
|
|
|
471
300
|
});
|
|
472
301
|
}
|
|
473
302
|
}
|
|
474
|
-
function normalizeToolset(value) {
|
|
475
|
-
if (value === 'legacy-full' || value === 'full')
|
|
476
|
-
return 'legacy-full';
|
|
477
|
-
return 'compact';
|
|
478
|
-
}
|
|
479
303
|
/**
|
|
480
|
-
* Register
|
|
481
|
-
*
|
|
482
|
-
*
|
|
483
|
-
* Set SKILLFM_MCP_TOOLSET=legacy-full to expose the old fine-grained tools
|
|
484
|
-
* and reserved contract placeholders for compatibility testing.
|
|
304
|
+
* Register every Phase 0 beacon MCP tool. Called once by src/index.ts on
|
|
305
|
+
* server bootstrap.
|
|
485
306
|
*/
|
|
486
|
-
export function registerAllTools(server, deps
|
|
487
|
-
const toolset = options.toolset ?? normalizeToolset(process.env.SKILLFM_MCP_TOOLSET);
|
|
488
|
-
if (toolset === 'compact') {
|
|
489
|
-
registerCompactSuiteTools(server, deps);
|
|
490
|
-
return;
|
|
491
|
-
}
|
|
307
|
+
export function registerAllTools(server, deps) {
|
|
492
308
|
registerKeyTools(server, deps);
|
|
493
309
|
registerPlaceholderTools(server);
|
|
494
310
|
}
|
|
@@ -496,8 +312,4 @@ export function registerAllTools(server, deps, options = {}) {
|
|
|
496
312
|
export function _listAllRegisteredToolNames() {
|
|
497
313
|
return Object.values(SKILLFM_TOOL_NAMES).flat();
|
|
498
314
|
}
|
|
499
|
-
/** For tests / launch smoke. Not part of the public package surface. */
|
|
500
|
-
export function _listCompactRegisteredToolNames() {
|
|
501
|
-
return ['skillfm_beacon', 'skillfm_byok', 'skillfm_safe'];
|
|
502
|
-
}
|
|
503
315
|
//# sourceMappingURL=index.js.map
|