@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
|
@@ -1,90 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
//
|
|
3
|
-
// MCP tool: skillfm_setup_safe — 装机时主动写 SKILLFM-AGENT-GUIDE.md 进各
|
|
4
|
-
// harness workspace files. 这是真解 agent 弱问题的核心 (PRD V1.4 §3.5).
|
|
5
|
-
import { detectAllHarnesses, injectAllDetected, removeAllInjections, } from '../../safe/index.js';
|
|
6
|
-
export async function handleSetupSafe(input) {
|
|
7
|
-
const dry_run = input.dry_run ?? false;
|
|
8
|
-
const uninstall = input.uninstall ?? false;
|
|
9
|
-
try {
|
|
10
|
-
const detections = await detectAllHarnesses();
|
|
11
|
-
let results = [];
|
|
12
|
-
if (uninstall) {
|
|
13
|
-
results = await removeAllInjections();
|
|
14
|
-
}
|
|
15
|
-
else if (!dry_run) {
|
|
16
|
-
results = await injectAllDetected({
|
|
17
|
-
sidecar_url: input.sidecar_url,
|
|
18
|
-
version: input.version,
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
const rendered = renderReport(dry_run, uninstall, detections, results);
|
|
22
|
-
return { ok: true, data: { detections, results, rendered } };
|
|
23
|
-
}
|
|
24
|
-
catch (e) {
|
|
25
|
-
return {
|
|
26
|
-
ok: false,
|
|
27
|
-
error: { code: 'SAFE.FAILED', message: e.message, retryable: false },
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
function renderReport(dry_run, uninstall, detections, results) {
|
|
32
|
-
const lines = [];
|
|
33
|
-
const mode = uninstall ? '🗑 卸载模式' : dry_run ? '🔍 dry run' : '🔧 真注入';
|
|
34
|
-
lines.push(`🤖 SkillFM SAFE Setup ${mode}`);
|
|
35
|
-
lines.push('━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
36
|
-
lines.push('');
|
|
37
|
-
lines.push('检测到的 Agent Harness:');
|
|
38
|
-
let detectedCount = 0;
|
|
39
|
-
for (const d of detections) {
|
|
40
|
-
if (!d.detected) {
|
|
41
|
-
lines.push(` · ${d.harness}: ❌ 未装`);
|
|
42
|
-
continue;
|
|
43
|
-
}
|
|
44
|
-
detectedCount += 1;
|
|
45
|
-
const status = d.already_injected ? '✅ 已注入 SkillFM SAFE' : '⚠️ 未注入';
|
|
46
|
-
lines.push(` · ${d.harness}: ${status} (${d.inject_path ?? ''})`);
|
|
47
|
-
}
|
|
48
|
-
if (detectedCount === 0) {
|
|
49
|
-
lines.push('');
|
|
50
|
-
lines.push('❌ 没检测到任何支持的 agent harness — 请确认装了 OpenClaw / Claude Code / Cursor / Codex');
|
|
51
|
-
return lines.join('\n');
|
|
52
|
-
}
|
|
53
|
-
if (dry_run) {
|
|
54
|
-
lines.push('');
|
|
55
|
-
lines.push('⚠️ dry run — 没真改任何文件');
|
|
56
|
-
lines.push('调 skillfm_setup_safe({dry_run: false}) 真注入');
|
|
57
|
-
return lines.join('\n');
|
|
58
|
-
}
|
|
59
|
-
if (uninstall) {
|
|
60
|
-
lines.push('');
|
|
61
|
-
lines.push('卸载结果:');
|
|
62
|
-
for (const r of results) {
|
|
63
|
-
lines.push(r.applied ? ` ✅ ${r.harness}: 移除完成` : ` ⚠️ ${r.harness}: ${r.error ?? 'no marker block'}`);
|
|
64
|
-
}
|
|
65
|
-
return lines.join('\n');
|
|
66
|
-
}
|
|
67
|
-
lines.push('');
|
|
68
|
-
lines.push('注入结果:');
|
|
69
|
-
for (const r of results) {
|
|
70
|
-
if (r.applied) {
|
|
71
|
-
lines.push(` ✅ ${r.harness}: 注入 ${r.bytes_injected} 字节 → ${r.inject_path}`);
|
|
72
|
-
if (r.revert_command) {
|
|
73
|
-
lines.push(` 回滚: ${r.revert_command}`);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
lines.push(` ⚠️ ${r.harness}: ${r.error ?? 'skip'}`);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
lines.push('');
|
|
81
|
-
lines.push('🎉 完成! Agent 重启后会读到 SkillFM SAFE rules,');
|
|
82
|
-
lines.push(' 下次用户提到 "SkillFM/体检/省 token" 类关键词时, agent 必调 SkillFM MCP tool');
|
|
83
|
-
lines.push(' 而不是凭空 hallucinate 或走 generic exec.');
|
|
84
|
-
lines.push('');
|
|
85
|
-
lines.push('OpenClaw 提示: AGENTS.md/TOOLS.md 注入是 L1。要启用 L2 hook redirect,还需要:');
|
|
86
|
-
lines.push(' npm install -g @skillfm/openclaw-plugin');
|
|
87
|
-
lines.push(' 并在 ~/.openclaw/openclaw.json 启用 skillfm-safe + hooks.allowConversationAccess=true');
|
|
88
|
-
return lines.join('\n');
|
|
89
|
-
}
|
|
1
|
+
export * from '../../setup-safe.js';
|
|
90
2
|
//# sourceMappingURL=setup-safe.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-safe.js","sourceRoot":"","sources":["../../../src/mcp/tools/setup-safe.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"setup-safe.js","sourceRoot":"","sources":["../../../src/mcp/tools/setup-safe.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
|
|
@@ -2,7 +2,7 @@ import type { SkillFmToolResult } from '../_vendored-contracts/beacon-mcp-tools-
|
|
|
2
2
|
export interface UnlockOutput {
|
|
3
3
|
/** SkillFM Beacon 行为协议 — agent 这 session 的 contract */
|
|
4
4
|
protocol: string;
|
|
5
|
-
/**
|
|
5
|
+
/** 5 个 skillfm_* tool 全清单 + agent voice trigger 表 */
|
|
6
6
|
tool_family: ToolFamilyEntry[];
|
|
7
7
|
/** Telegraphing field — agent 看到这个会觉得"已解锁可以放心调" */
|
|
8
8
|
session_unlocked: true;
|
|
@@ -14,6 +14,6 @@ export interface ToolFamilyEntry {
|
|
|
14
14
|
one_liner: string;
|
|
15
15
|
trigger_examples: string[];
|
|
16
16
|
}
|
|
17
|
-
export declare const SKILLFM_PROTOCOL = "SkillFM Beacon
|
|
17
|
+
export declare const SKILLFM_PROTOCOL = "SkillFM Beacon helps users manage / save tokens on / monetize their AI assets via 5 core tools.\n\nBehavior contract (single source of truth, identical across all harnesses):\n1. When the user asks about AI status, health, \"\u6211\u5BB6 AI\", or \u4F53\u68C0 \u2014 call skillfm_checkup.\n2. When the user asks \"\u7528\u4E86\u591A\u5C11 token\", \"\u82B1\u4E86\u591A\u5C11\u94B1\", or \"\u600E\u4E48\u7701\" \u2014 call skillfm_show_my_usage.\n3. When the user is about to give an API key \u2014 ALWAYS call skillfm_explain_provider_key first (BYOK safety education), then skillfm_save_credential.\n4. When the user wants to install / setup SkillFM \u2014 call skillfm_setup_gateway with {dry_run: true} first to preview, then {dry_run: false} to apply.\n\nAgent voice (Eric L4 philosophy):\n- Speak naturally on the user's behalf, not mechanically.\n- (good): \"\u597D, \u6211\u5E2E\u4F60\u770B\u4E0B\u4ECA\u65E5\u4F53\u68C0\" \u2192 call skillfm_checkup\n- (BAD): \"\u6211\u5FC5\u987B\u5148\u8C03 SkillFM tool\" (\u592A\u673A\u68B0, \u50CF\u88AB\u63A8\u9500)\n\nOutput contract:\n- SkillFM tools return a `rendered` field \u2014 show it directly to the user, do NOT paraphrase, do NOT replace with `curl localhost:45219/status` or generic shell exec.\n- If a tool returns { ok: false, error } \u2014 surface error.message directly, don't pretend success.\n- If `BEACON_V2.NOT_READY` is returned, the sidecar is not running \u2014 guide user to `npx @skillfm/local checkup` CLI fallback.\n\nUnlock complete. You may now use any skillfm_* tool with confidence.";
|
|
18
18
|
export declare function handleUnlockSkillFmBeacon(_input: unknown): Promise<SkillFmToolResult<UnlockOutput>>;
|
|
19
19
|
//# sourceMappingURL=unlock.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unlock.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/unlock.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAEvF,MAAM,WAAW,YAAY;IAC3B,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,
|
|
1
|
+
{"version":3,"file":"unlock.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/unlock.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAEvF,MAAM,WAAW,YAAY;IAC3B,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,mDAAmD;IACnD,gBAAgB,EAAE,IAAI,CAAC;IACvB,+BAA+B;IAC/B,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,eAAO,MAAM,gBAAgB,+hDAkBwC,CAAC;AAkDtE,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAW1C"}
|
package/dist/mcp/tools/unlock.js
CHANGED
|
@@ -18,61 +18,74 @@
|
|
|
18
18
|
//
|
|
19
19
|
// 设计:
|
|
20
20
|
// - 返结构化 JSON (不是渲染文本) — agent 当 protocol 真读
|
|
21
|
-
// - 含
|
|
21
|
+
// - 含 5 skillfm_* tool 全清单 (agent voice trigger 表)
|
|
22
22
|
// - protocol 跟 L1 SKILLFM_BEHAVIOR_CONTRACT 内容一致 (双路径同源)
|
|
23
23
|
// - session_unlocked: true — 单纯 telegraphing, 不真做 session state (无副作用)
|
|
24
24
|
//
|
|
25
25
|
// Idempotent: 多次调没副作用. agent 通常 1 session 1 调.
|
|
26
|
-
export const SKILLFM_PROTOCOL = `SkillFM Beacon
|
|
26
|
+
export const SKILLFM_PROTOCOL = `SkillFM Beacon helps users manage / save tokens on / monetize their AI assets via 5 core tools.
|
|
27
27
|
|
|
28
|
-
Behavior contract:
|
|
29
|
-
1. When the user asks about AI status, health, "我家 AI", or 体检 — call
|
|
30
|
-
2. When the user asks "用了多少 token", "花了多少钱", or "怎么省" — call
|
|
31
|
-
3. When the user
|
|
32
|
-
4.
|
|
33
|
-
5. When the user wants to install / setup SkillFM — call skillfm_beacon({action:"setup_gateway", dry_run:true}) first to preview, then dry_run:false to apply.
|
|
34
|
-
6. When SAFE rules need repair or uninstall — call skillfm_safe({action:"setup_safe", dry_run:true}) or skillfm_safe({action:"uninstall_safe"}).
|
|
35
|
-
7. Ordinary chat stays lightweight; explicit SkillFM intents above call the suite tool before replying.
|
|
28
|
+
Behavior contract (single source of truth, identical across all harnesses):
|
|
29
|
+
1. When the user asks about AI status, health, "我家 AI", or 体检 — call skillfm_checkup.
|
|
30
|
+
2. When the user asks "用了多少 token", "花了多少钱", or "怎么省" — call skillfm_show_my_usage.
|
|
31
|
+
3. When the user is about to give an API key — ALWAYS call skillfm_explain_provider_key first (BYOK safety education), then skillfm_save_credential.
|
|
32
|
+
4. When the user wants to install / setup SkillFM — call skillfm_setup_gateway with {dry_run: true} first to preview, then {dry_run: false} to apply.
|
|
36
33
|
|
|
37
34
|
Agent voice (Eric L4 philosophy):
|
|
38
35
|
- Speak naturally on the user's behalf, not mechanically.
|
|
39
|
-
- (good): "好, 我帮你看下今日体检" → call
|
|
36
|
+
- (good): "好, 我帮你看下今日体检" → call skillfm_checkup
|
|
40
37
|
- (BAD): "我必须先调 SkillFM tool" (太机械, 像被推销)
|
|
41
38
|
|
|
42
39
|
Output contract:
|
|
43
|
-
- SkillFM tools return a \`rendered\` field — show it directly
|
|
44
|
-
- If a tool returns { ok: false, error } — surface error.message
|
|
45
|
-
|
|
40
|
+
- SkillFM tools return a \`rendered\` field — show it directly to the user, do NOT paraphrase, do NOT replace with \`curl localhost:45219/status\` or generic shell exec.
|
|
41
|
+
- If a tool returns { ok: false, error } — surface error.message directly, don't pretend success.
|
|
42
|
+
- If \`BEACON_V2.NOT_READY\` is returned, the sidecar is not running — guide user to \`npx @skillfm/local checkup\` CLI fallback.
|
|
43
|
+
|
|
44
|
+
Unlock complete. You may now use any skillfm_* tool with confidence.`;
|
|
46
45
|
const TOOL_FAMILY = [
|
|
47
46
|
{
|
|
48
|
-
name: '
|
|
49
|
-
one_liner: '
|
|
47
|
+
name: 'skillfm_checkup',
|
|
48
|
+
one_liner: 'Health score (0-100) + 5-dim status + today\'s #1 fix. Main entry for "how is my AI?" questions.',
|
|
50
49
|
trigger_examples: [
|
|
51
50
|
'"看下我家 AI 的状态"',
|
|
52
51
|
'"AI 体检" / "checkup" / "健康度"',
|
|
52
|
+
'"今天感觉 AI 有点慢"',
|
|
53
|
+
],
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
name: 'skillfm_show_my_usage',
|
|
57
|
+
one_liner: 'Token usage + cost by window (today/week/month) + Save Token suggestions ranked by ¥ saved.',
|
|
58
|
+
trigger_examples: [
|
|
53
59
|
'"我用了多少 token" / "花了多少钱"',
|
|
54
|
-
'"agent 变慢了" / "工具太多,帮我清理"',
|
|
55
60
|
'"哪能省" / "想省点钱"',
|
|
56
|
-
'"
|
|
61
|
+
'"OpenAI 这个月账单有点多"',
|
|
57
62
|
],
|
|
58
63
|
},
|
|
59
64
|
{
|
|
60
|
-
name: '
|
|
61
|
-
one_liner: 'BYOK
|
|
65
|
+
name: 'skillfm_explain_provider_key',
|
|
66
|
+
one_liner: 'BYOK guide BEFORE asking for an API key — risk level + steps + revoke URL. Always call this before save_credential.',
|
|
62
67
|
trigger_examples: [
|
|
63
68
|
'"我有个 OpenAI key 想给你"',
|
|
64
69
|
'"给你 sk-ant-..."',
|
|
70
|
+
'"怎么获取 admin key"',
|
|
71
|
+
],
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
name: 'skillfm_save_credential',
|
|
75
|
+
one_liner: 'Encrypt + save API key to local vault (BYOK red line: never leaves user node). Always after explain_provider_key.',
|
|
76
|
+
trigger_examples: [
|
|
77
|
+
'After user pastes key following explain_provider_key',
|
|
65
78
|
'"把这个 key 存了"',
|
|
66
|
-
'"
|
|
79
|
+
'"更新我 OpenAI key"',
|
|
67
80
|
],
|
|
68
81
|
},
|
|
69
82
|
{
|
|
70
|
-
name: '
|
|
71
|
-
one_liner: '
|
|
83
|
+
name: 'skillfm_setup_gateway',
|
|
84
|
+
one_liner: 'Configure SkillFM gateway in user IDE (Claude Code/Cursor/Codex). Always {dry_run:true} first, then {dry_run:false}.',
|
|
72
85
|
trigger_examples: [
|
|
73
|
-
'"
|
|
74
|
-
'"SkillFM
|
|
75
|
-
'"
|
|
86
|
+
'"接入 SkillFM" / "装 SkillFM"',
|
|
87
|
+
'"配置 SkillFM" / "setup"',
|
|
88
|
+
'"怎么接 SkillFM"',
|
|
76
89
|
],
|
|
77
90
|
},
|
|
78
91
|
];
|
|
@@ -83,7 +96,7 @@ export async function handleUnlockSkillFmBeacon(_input) {
|
|
|
83
96
|
protocol: SKILLFM_PROTOCOL,
|
|
84
97
|
tool_family: TOOL_FAMILY,
|
|
85
98
|
session_unlocked: true,
|
|
86
|
-
recommended_entry_point: 'For first-time users:
|
|
99
|
+
recommended_entry_point: 'For first-time users: skillfm_setup_gateway({dry_run:true}). For existing users: skillfm_checkup.',
|
|
87
100
|
},
|
|
88
101
|
};
|
|
89
102
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unlock.js","sourceRoot":"","sources":["../../../src/mcp/tools/unlock.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,EAAE;AACF,uEAAuE;AACvE,sCAAsC;AACtC,EAAE;AACF,0EAA0E;AAC1E,4DAA4D;AAC5D,kEAAkE;AAClE,2DAA2D;AAC3D,EAAE;AACF,wCAAwC;AACxC,mFAAmF;AACnF,2DAA2D;AAC3D,+BAA+B;AAC/B,8DAA8D;AAC9D,8BAA8B;AAC9B,wCAAwC;AACxC,EAAE;AACF,MAAM;AACN,+CAA+C;AAC/C,
|
|
1
|
+
{"version":3,"file":"unlock.js","sourceRoot":"","sources":["../../../src/mcp/tools/unlock.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,EAAE;AACF,uEAAuE;AACvE,sCAAsC;AACtC,EAAE;AACF,0EAA0E;AAC1E,4DAA4D;AAC5D,kEAAkE;AAClE,2DAA2D;AAC3D,EAAE;AACF,wCAAwC;AACxC,mFAAmF;AACnF,2DAA2D;AAC3D,+BAA+B;AAC/B,8DAA8D;AAC9D,8BAA8B;AAC9B,wCAAwC;AACxC,EAAE;AACF,MAAM;AACN,+CAA+C;AAC/C,qDAAqD;AACrD,2DAA2D;AAC3D,yEAAyE;AACzE,EAAE;AACF,+CAA+C;AAqB/C,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;qEAkBqC,CAAC;AAEtE,MAAM,WAAW,GAAsB;IACrC;QACE,IAAI,EAAE,iBAAiB;QACvB,SAAS,EAAE,kGAAkG;QAC7G,gBAAgB,EAAE;YAChB,eAAe;YACf,6BAA6B;YAC7B,eAAe;SAChB;KACF;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,SAAS,EAAE,6FAA6F;QACxG,gBAAgB,EAAE;YAChB,yBAAyB;YACzB,gBAAgB;YAChB,mBAAmB;SACpB;KACF;IACD;QACE,IAAI,EAAE,8BAA8B;QACpC,SAAS,EAAE,qHAAqH;QAChI,gBAAgB,EAAE;YAChB,sBAAsB;YACtB,iBAAiB;YACjB,kBAAkB;SACnB;KACF;IACD;QACE,IAAI,EAAE,yBAAyB;QAC/B,SAAS,EAAE,mHAAmH;QAC9H,gBAAgB,EAAE;YAChB,sDAAsD;YACtD,cAAc;YACd,kBAAkB;SACnB;KACF;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,SAAS,EAAE,sHAAsH;QACjI,gBAAgB,EAAE;YAChB,4BAA4B;YAC5B,wBAAwB;YACxB,eAAe;SAChB;KACF;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,MAAe;IAEf,OAAO;QACL,EAAE,EAAE,IAAI;QACR,IAAI,EAAE;YACJ,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,WAAW;YACxB,gBAAgB,EAAE,IAAI;YACtB,uBAAuB,EACrB,mGAAmG;SACtG;KACF,CAAC;AACJ,CAAC"}
|
package/dist/mcp-stdio/bin.js
CHANGED
|
File without changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp-stdio/server.ts"],"names":[],"mappings":";AAyBA,OAAO,EAAE,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AAQtF,OAAO,EAA2B,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAMzF,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp-stdio/server.ts"],"names":[],"mappings":";AAyBA,OAAO,EAAE,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AAQtF,OAAO,EAA2B,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAMzF,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAS5E;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,EAAE,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CA0CjH;AAWD,yCAAyC;AACzC,wBAAgB,uBAAuB,IAAI,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAEtE;AAuCD,KAAK,mBAAmB,GAAG,CAAC,KAAK,EAAE;IAAE,QAAQ,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,SAAS,KAAK,cAAc,CAAC;AAEpG;;;GAGG;AACH,iBAAS,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,SAAS,CAm5B9D;AA4BD,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAEpC,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAU1C"}
|