@skillfm/local 2.6.3 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -1
- package/dist/_signers/aliyun-v3.d.ts +21 -0
- package/dist/_signers/aliyun-v3.d.ts.map +1 -0
- package/dist/_signers/aliyun-v3.js +47 -0
- package/dist/_signers/aliyun-v3.js.map +1 -0
- package/dist/_signers/canonical.d.ts +29 -0
- package/dist/_signers/canonical.d.ts.map +1 -0
- package/dist/_signers/canonical.js +59 -0
- package/dist/_signers/canonical.js.map +1 -0
- package/dist/_signers/index.d.ts +9 -0
- package/dist/_signers/index.d.ts.map +1 -0
- package/dist/_signers/index.js +6 -0
- package/dist/_signers/index.js.map +1 -0
- package/dist/_signers/tencent-tc3.d.ts +21 -0
- package/dist/_signers/tencent-tc3.d.ts.map +1 -0
- package/dist/_signers/tencent-tc3.js +48 -0
- package/dist/_signers/tencent-tc3.js.map +1 -0
- package/dist/_signers/volc-v4.d.ts +18 -0
- package/dist/_signers/volc-v4.d.ts.map +1 -0
- package/dist/_signers/volc-v4.js +43 -0
- package/dist/_signers/volc-v4.js.map +1 -0
- package/dist/asset-connectors/aliyun-ecs.d.ts +18 -0
- package/dist/asset-connectors/aliyun-ecs.d.ts.map +1 -0
- package/dist/asset-connectors/aliyun-ecs.js +99 -0
- package/dist/asset-connectors/aliyun-ecs.js.map +1 -0
- package/dist/asset-connectors/base.d.ts +15 -0
- package/dist/asset-connectors/base.d.ts.map +1 -0
- package/dist/asset-connectors/base.js +19 -0
- package/dist/asset-connectors/base.js.map +1 -0
- package/dist/asset-connectors/cloudflare.d.ts +18 -0
- package/dist/asset-connectors/cloudflare.d.ts.map +1 -0
- package/dist/asset-connectors/cloudflare.js +94 -0
- package/dist/asset-connectors/cloudflare.js.map +1 -0
- package/dist/asset-connectors/digitalocean.d.ts +18 -0
- package/dist/asset-connectors/digitalocean.d.ts.map +1 -0
- package/dist/asset-connectors/digitalocean.js +79 -0
- package/dist/asset-connectors/digitalocean.js.map +1 -0
- package/dist/asset-connectors/godaddy.d.ts +18 -0
- package/dist/asset-connectors/godaddy.d.ts.map +1 -0
- package/dist/asset-connectors/godaddy.js +62 -0
- package/dist/asset-connectors/godaddy.js.map +1 -0
- package/dist/asset-connectors/hetzner.d.ts +18 -0
- package/dist/asset-connectors/hetzner.d.ts.map +1 -0
- package/dist/asset-connectors/hetzner.js +52 -0
- package/dist/asset-connectors/hetzner.js.map +1 -0
- package/dist/asset-connectors/index.d.ts +18 -0
- package/dist/asset-connectors/index.d.ts.map +1 -0
- package/dist/asset-connectors/index.js +52 -0
- package/dist/asset-connectors/index.js.map +1 -0
- package/dist/asset-connectors/namecheap.d.ts +34 -0
- package/dist/asset-connectors/namecheap.d.ts.map +1 -0
- package/dist/asset-connectors/namecheap.js +178 -0
- package/dist/asset-connectors/namecheap.js.map +1 -0
- package/dist/asset-connectors/ssl-labs.d.ts +22 -0
- package/dist/asset-connectors/ssl-labs.d.ts.map +1 -0
- package/dist/asset-connectors/ssl-labs.js +79 -0
- package/dist/asset-connectors/ssl-labs.js.map +1 -0
- package/dist/asset-connectors/tencent-cvm.d.ts +18 -0
- package/dist/asset-connectors/tencent-cvm.d.ts.map +1 -0
- package/dist/asset-connectors/tencent-cvm.js +145 -0
- package/dist/asset-connectors/tencent-cvm.js.map +1 -0
- package/dist/asset-connectors/types.d.ts +45 -0
- package/dist/asset-connectors/types.d.ts.map +1 -0
- package/dist/asset-connectors/types.js +26 -0
- package/dist/asset-connectors/types.js.map +1 -0
- package/dist/asset-connectors/vultr.d.ts +18 -0
- package/dist/asset-connectors/vultr.d.ts.map +1 -0
- package/dist/asset-connectors/vultr.js +73 -0
- package/dist/asset-connectors/vultr.js.map +1 -0
- package/dist/connectors/anthropic.d.ts +10 -0
- package/dist/connectors/anthropic.d.ts.map +1 -0
- package/dist/connectors/anthropic.js +103 -0
- package/dist/connectors/anthropic.js.map +1 -0
- package/dist/connectors/base.d.ts +11 -0
- package/dist/connectors/base.d.ts.map +1 -0
- package/dist/connectors/base.js +19 -0
- package/dist/connectors/base.js.map +1 -0
- package/dist/connectors/deepseek.d.ts +14 -0
- package/dist/connectors/deepseek.d.ts.map +1 -0
- package/dist/connectors/deepseek.js +77 -0
- package/dist/connectors/deepseek.js.map +1 -0
- package/dist/connectors/doubao.d.ts +10 -0
- package/dist/connectors/doubao.d.ts.map +1 -0
- package/dist/connectors/doubao.js +64 -0
- package/dist/connectors/doubao.js.map +1 -0
- package/dist/connectors/index.d.ts +14 -0
- package/dist/connectors/index.d.ts.map +1 -0
- package/dist/connectors/index.js +42 -0
- package/dist/connectors/index.js.map +1 -0
- package/dist/connectors/kimi.d.ts +10 -0
- package/dist/connectors/kimi.d.ts.map +1 -0
- package/dist/connectors/kimi.js +67 -0
- package/dist/connectors/kimi.js.map +1 -0
- package/dist/connectors/openai.d.ts +10 -0
- package/dist/connectors/openai.d.ts.map +1 -0
- package/dist/connectors/openai.js +101 -0
- package/dist/connectors/openai.js.map +1 -0
- package/dist/connectors/qwen.d.ts +10 -0
- package/dist/connectors/qwen.d.ts.map +1 -0
- package/dist/connectors/qwen.js +66 -0
- package/dist/connectors/qwen.js.map +1 -0
- package/dist/connectors/types.d.ts +47 -0
- package/dist/connectors/types.d.ts.map +1 -0
- package/dist/connectors/types.js +24 -0
- package/dist/connectors/types.js.map +1 -0
- package/dist/guard/bin.js +0 -0
- package/dist/index.js +50 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/_vendored-contracts/beacon-mcp-tools-v1.d.ts +373 -0
- package/dist/mcp/_vendored-contracts/beacon-mcp-tools-v1.d.ts.map +1 -0
- package/dist/mcp/_vendored-contracts/beacon-mcp-tools-v1.js +128 -0
- package/dist/mcp/_vendored-contracts/beacon-mcp-tools-v1.js.map +1 -0
- package/dist/mcp/brain-client.d.ts +96 -0
- package/dist/mcp/brain-client.d.ts.map +1 -0
- package/dist/mcp/brain-client.js +214 -0
- package/dist/mcp/brain-client.js.map +1 -0
- package/dist/mcp/cache.d.ts +55 -0
- package/dist/mcp/cache.d.ts.map +1 -0
- package/dist/mcp/cache.js +109 -0
- package/dist/mcp/cache.js.map +1 -0
- package/dist/mcp/config.d.ts +29 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +69 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/decision-engine.d.ts +54 -0
- package/dist/mcp/decision-engine.d.ts.map +1 -0
- package/dist/mcp/decision-engine.js +107 -0
- package/dist/mcp/decision-engine.js.map +1 -0
- package/dist/mcp/errors.d.ts +66 -0
- package/dist/mcp/errors.d.ts.map +1 -0
- package/dist/mcp/errors.js +127 -0
- package/dist/mcp/errors.js.map +1 -0
- package/dist/mcp/index.d.ts +40 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +98 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/tools/_placeholder.d.ts +24 -0
- package/dist/mcp/tools/_placeholder.d.ts.map +1 -0
- package/dist/mcp/tools/_placeholder.js +29 -0
- package/dist/mcp/tools/_placeholder.js.map +1 -0
- package/dist/mcp/tools/avatar-market.d.ts +22 -0
- package/dist/mcp/tools/avatar-market.d.ts.map +1 -0
- package/dist/mcp/tools/avatar-market.js +33 -0
- package/dist/mcp/tools/avatar-market.js.map +1 -0
- package/dist/mcp/tools/check-expiry.d.ts +23 -0
- package/dist/mcp/tools/check-expiry.d.ts.map +1 -0
- package/dist/mcp/tools/check-expiry.js +29 -0
- package/dist/mcp/tools/check-expiry.js.map +1 -0
- package/dist/mcp/tools/check-usage.d.ts +25 -0
- package/dist/mcp/tools/check-usage.d.ts.map +1 -0
- package/dist/mcp/tools/check-usage.js +33 -0
- package/dist/mcp/tools/check-usage.js.map +1 -0
- package/dist/mcp/tools/get-monthly-picks.d.ts +25 -0
- package/dist/mcp/tools/get-monthly-picks.d.ts.map +1 -0
- package/dist/mcp/tools/get-monthly-picks.js +35 -0
- package/dist/mcp/tools/get-monthly-picks.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +41 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +139 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mcp/tools/memory-recent.d.ts +17 -0
- package/dist/mcp/tools/memory-recent.d.ts.map +1 -0
- package/dist/mcp/tools/memory-recent.js +46 -0
- package/dist/mcp/tools/memory-recent.js.map +1 -0
- package/dist/mcp/tools/memory-save.d.ts +15 -0
- package/dist/mcp/tools/memory-save.d.ts.map +1 -0
- package/dist/mcp/tools/memory-save.js +53 -0
- package/dist/mcp/tools/memory-save.js.map +1 -0
- package/dist/mcp/tools/memory-search.d.ts +24 -0
- package/dist/mcp/tools/memory-search.d.ts.map +1 -0
- package/dist/mcp/tools/memory-search.js +64 -0
- package/dist/mcp/tools/memory-search.js.map +1 -0
- package/dist/mcp/tools/record-acceptance.d.ts +22 -0
- package/dist/mcp/tools/record-acceptance.d.ts.map +1 -0
- package/dist/mcp/tools/record-acceptance.js +33 -0
- package/dist/mcp/tools/record-acceptance.js.map +1 -0
- package/dist/mcp/tools/record-rejection.d.ts +23 -0
- package/dist/mcp/tools/record-rejection.d.ts.map +1 -0
- package/dist/mcp/tools/record-rejection.js +34 -0
- package/dist/mcp/tools/record-rejection.js.map +1 -0
- package/dist/mcp/tools/suggest-route.d.ts +26 -0
- package/dist/mcp/tools/suggest-route.d.ts.map +1 -0
- package/dist/mcp/tools/suggest-route.js +56 -0
- package/dist/mcp/tools/suggest-route.js.map +1 -0
- package/dist/mcp/tools/user-preferences.d.ts +22 -0
- package/dist/mcp/tools/user-preferences.d.ts.map +1 -0
- package/dist/mcp/tools/user-preferences.js +63 -0
- package/dist/mcp/tools/user-preferences.js.map +1 -0
- package/dist/mcp-stdio/bin.js +0 -0
- package/dist/memory/index.d.ts +5 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +4 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/mem0-client.d.ts +32 -0
- package/dist/memory/mem0-client.d.ts.map +1 -0
- package/dist/memory/mem0-client.js +161 -0
- package/dist/memory/mem0-client.js.map +1 -0
- package/dist/memory/types.d.ts +47 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +20 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/router/catalog.d.ts +4 -0
- package/dist/router/catalog.d.ts.map +1 -0
- package/dist/router/catalog.js +103 -0
- package/dist/router/catalog.js.map +1 -0
- package/dist/router/classifier.d.ts +5 -0
- package/dist/router/classifier.d.ts.map +1 -0
- package/dist/router/classifier.js +43 -0
- package/dist/router/classifier.js.map +1 -0
- package/dist/router/index.d.ts +7 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +6 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/litellm-config.d.ts +34 -0
- package/dist/router/litellm-config.d.ts.map +1 -0
- package/dist/router/litellm-config.js +78 -0
- package/dist/router/litellm-config.js.map +1 -0
- package/dist/router/route.d.ts +3 -0
- package/dist/router/route.d.ts.map +1 -0
- package/dist/router/route.js +63 -0
- package/dist/router/route.js.map +1 -0
- package/dist/router/types.d.ts +36 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/router/types.js +7 -0
- package/dist/router/types.js.map +1 -0
- package/dist/saas-connectors/base.d.ts +16 -0
- package/dist/saas-connectors/base.d.ts.map +1 -0
- package/dist/saas-connectors/base.js +16 -0
- package/dist/saas-connectors/base.js.map +1 -0
- package/dist/saas-connectors/brave.d.ts +19 -0
- package/dist/saas-connectors/brave.d.ts.map +1 -0
- package/dist/saas-connectors/brave.js +50 -0
- package/dist/saas-connectors/brave.js.map +1 -0
- package/dist/saas-connectors/fal.d.ts +15 -0
- package/dist/saas-connectors/fal.d.ts.map +1 -0
- package/dist/saas-connectors/fal.js +35 -0
- package/dist/saas-connectors/fal.js.map +1 -0
- package/dist/saas-connectors/index.d.ts +11 -0
- package/dist/saas-connectors/index.d.ts.map +1 -0
- package/dist/saas-connectors/index.js +32 -0
- package/dist/saas-connectors/index.js.map +1 -0
- package/dist/saas-connectors/replicate.d.ts +19 -0
- package/dist/saas-connectors/replicate.d.ts.map +1 -0
- package/dist/saas-connectors/replicate.js +43 -0
- package/dist/saas-connectors/replicate.js.map +1 -0
- package/dist/saas-connectors/serper.d.ts +19 -0
- package/dist/saas-connectors/serper.d.ts.map +1 -0
- package/dist/saas-connectors/serper.js +47 -0
- package/dist/saas-connectors/serper.js.map +1 -0
- package/dist/saas-connectors/types.d.ts +31 -0
- package/dist/saas-connectors/types.d.ts.map +1 -0
- package/dist/saas-connectors/types.js +6 -0
- package/dist/saas-connectors/types.js.map +1 -0
- package/dist/scheduler/index.d.ts +4 -0
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/index.js +4 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/scheduler/poll.d.ts +4 -0
- package/dist/scheduler/poll.d.ts.map +1 -0
- package/dist/scheduler/poll.js +170 -0
- package/dist/scheduler/poll.js.map +1 -0
- package/dist/scheduler/scheduler.d.ts +18 -0
- package/dist/scheduler/scheduler.d.ts.map +1 -0
- package/dist/scheduler/scheduler.js +67 -0
- package/dist/scheduler/scheduler.js.map +1 -0
- package/dist/scheduler/types.d.ts +49 -0
- package/dist/scheduler/types.d.ts.map +1 -0
- package/dist/scheduler/types.js +14 -0
- package/dist/scheduler/types.js.map +1 -0
- package/dist/skill-installer/npm-installer.d.ts +11 -1
- package/dist/skill-installer/npm-installer.d.ts.map +1 -1
- package/dist/skill-installer/npm-installer.js +13 -3
- package/dist/skill-installer/npm-installer.js.map +1 -1
- package/dist/vault/cli.d.ts +2 -0
- package/dist/vault/cli.d.ts.map +1 -0
- package/dist/vault/cli.js +170 -0
- package/dist/vault/cli.js.map +1 -0
- package/dist/vault/crypto.d.ts +9 -0
- package/dist/vault/crypto.d.ts.map +1 -0
- package/dist/vault/crypto.js +54 -0
- package/dist/vault/crypto.js.map +1 -0
- package/dist/vault/index.d.ts +6 -0
- package/dist/vault/index.d.ts.map +1 -0
- package/dist/vault/index.js +5 -0
- package/dist/vault/index.js.map +1 -0
- package/dist/vault/types.d.ts +28 -0
- package/dist/vault/types.d.ts.map +1 -0
- package/dist/vault/types.js +22 -0
- package/dist/vault/types.js.map +1 -0
- package/dist/vault/vault.d.ts +34 -0
- package/dist/vault/vault.d.ts.map +1 -0
- package/dist/vault/vault.js +149 -0
- package/dist/vault/vault.js.map +1 -0
- package/package.json +17 -5
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/tools/_placeholder.ts — Stub handler for the 25+ Phase 0 placeholder tools.
|
|
3
|
+
*
|
|
4
|
+
* The beacon-mcp-tools-v1 contract reserves 30+ tool names but only writes
|
|
5
|
+
* full input/output schemas for 8 of them (5 key + 3 feedback/prefs). Until
|
|
6
|
+
* subagent-A finishes the schema sweep in Week 5, every reserved name still
|
|
7
|
+
* has to be a registered MCP tool — otherwise agents discover only 8 tools
|
|
8
|
+
* and can't reason about the full surface.
|
|
9
|
+
*
|
|
10
|
+
* This handler returns SkillFmToolError code = TOOL_NOT_IMPLEMENTED.
|
|
11
|
+
*
|
|
12
|
+
* TODO Week 5:
|
|
13
|
+
* - Delete this file once every tool name has its own typed handler.
|
|
14
|
+
* - Until then, keep the userHint copy short — agents may forward it
|
|
15
|
+
* verbatim to end users.
|
|
16
|
+
*/
|
|
17
|
+
import { type SkillFmToolResult } from '../_vendored-contracts/beacon-mcp-tools-v1.js';
|
|
18
|
+
/**
|
|
19
|
+
* Generic placeholder. The MCP server registers it for every reserved tool
|
|
20
|
+
* name, capturing `toolName` in a closure so the error message identifies
|
|
21
|
+
* which tool the agent tried to call.
|
|
22
|
+
*/
|
|
23
|
+
export declare function makePlaceholderHandler(toolName: string): (input: Record<string, unknown>) => Promise<SkillFmToolResult<Record<string, unknown>>>;
|
|
24
|
+
//# sourceMappingURL=_placeholder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_placeholder.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/_placeholder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAGvF;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,GACf,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAKzF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/tools/_placeholder.ts — Stub handler for the 25+ Phase 0 placeholder tools.
|
|
3
|
+
*
|
|
4
|
+
* The beacon-mcp-tools-v1 contract reserves 30+ tool names but only writes
|
|
5
|
+
* full input/output schemas for 8 of them (5 key + 3 feedback/prefs). Until
|
|
6
|
+
* subagent-A finishes the schema sweep in Week 5, every reserved name still
|
|
7
|
+
* has to be a registered MCP tool — otherwise agents discover only 8 tools
|
|
8
|
+
* and can't reason about the full surface.
|
|
9
|
+
*
|
|
10
|
+
* This handler returns SkillFmToolError code = TOOL_NOT_IMPLEMENTED.
|
|
11
|
+
*
|
|
12
|
+
* TODO Week 5:
|
|
13
|
+
* - Delete this file once every tool name has its own typed handler.
|
|
14
|
+
* - Until then, keep the userHint copy short — agents may forward it
|
|
15
|
+
* verbatim to end users.
|
|
16
|
+
*/
|
|
17
|
+
import { notImplemented } from '../errors.js';
|
|
18
|
+
/**
|
|
19
|
+
* Generic placeholder. The MCP server registers it for every reserved tool
|
|
20
|
+
* name, capturing `toolName` in a closure so the error message identifies
|
|
21
|
+
* which tool the agent tried to call.
|
|
22
|
+
*/
|
|
23
|
+
export function makePlaceholderHandler(toolName) {
|
|
24
|
+
return async (_input) => {
|
|
25
|
+
const err = notImplemented(toolName);
|
|
26
|
+
return { ok: false, error: err.toToolError() };
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=_placeholder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_placeholder.js","sourceRoot":"","sources":["../../../src/mcp/tools/_placeholder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,QAAgB;IAEhB,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE;QACtB,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QACrC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;IACjD,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/tools/avatar-market.ts — handler for `skillfm_avatar_market`.
|
|
3
|
+
*
|
|
4
|
+
* Recommend SkillFM "avatars" (e.g. xianyu-avatar-adult) based on a detected
|
|
5
|
+
* user intent. Phase 0: passes through the empty mock fixture.
|
|
6
|
+
*
|
|
7
|
+
* TODO Week 5:
|
|
8
|
+
* - Real intent classification on the brain (LLM call) → marketplace match.
|
|
9
|
+
* - Plug `realCase` field with live "Eric ¥15 first sale" once xianyu Day 0
|
|
10
|
+
* KPI lands.
|
|
11
|
+
* - Add inline upsell: if user is Free, only return top-1 match + Pro hint
|
|
12
|
+
* for unlocking the full 5.
|
|
13
|
+
* - i18n market filter: cn agents see CNY pricing + zh strings primary.
|
|
14
|
+
* - Cache hot intents (e.g. "make money on the side") for 1h to cut LLM cost.
|
|
15
|
+
*/
|
|
16
|
+
import { type SkillFmAvatarMarketInput, type SkillFmAvatarMarketOutput, type SkillFmToolResult } from '../_vendored-contracts/beacon-mcp-tools-v1.js';
|
|
17
|
+
import type { BrainClient } from '../brain-client.js';
|
|
18
|
+
export interface AvatarMarketDeps {
|
|
19
|
+
brain: BrainClient;
|
|
20
|
+
}
|
|
21
|
+
export declare function handleAvatarMarket(input: SkillFmAvatarMarketInput, deps: AvatarMarketDeps): Promise<SkillFmToolResult<SkillFmAvatarMarketOutput>>;
|
|
22
|
+
//# sourceMappingURL=avatar-market.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar-market.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/avatar-market.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EACvB,MAAM,+CAA+C,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGtD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,wBAAwB,EAC/B,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,iBAAiB,CAAC,yBAAyB,CAAC,CAAC,CAevD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/tools/avatar-market.ts — handler for `skillfm_avatar_market`.
|
|
3
|
+
*
|
|
4
|
+
* Recommend SkillFM "avatars" (e.g. xianyu-avatar-adult) based on a detected
|
|
5
|
+
* user intent. Phase 0: passes through the empty mock fixture.
|
|
6
|
+
*
|
|
7
|
+
* TODO Week 5:
|
|
8
|
+
* - Real intent classification on the brain (LLM call) → marketplace match.
|
|
9
|
+
* - Plug `realCase` field with live "Eric ¥15 first sale" once xianyu Day 0
|
|
10
|
+
* KPI lands.
|
|
11
|
+
* - Add inline upsell: if user is Free, only return top-1 match + Pro hint
|
|
12
|
+
* for unlocking the full 5.
|
|
13
|
+
* - i18n market filter: cn agents see CNY pricing + zh strings primary.
|
|
14
|
+
* - Cache hot intents (e.g. "make money on the side") for 1h to cut LLM cost.
|
|
15
|
+
*/
|
|
16
|
+
import { invalidInput } from '../errors.js';
|
|
17
|
+
export async function handleAvatarMarket(input, deps) {
|
|
18
|
+
if (typeof input.userIntent !== 'string' || input.userIntent.length === 0) {
|
|
19
|
+
return {
|
|
20
|
+
ok: false,
|
|
21
|
+
error: invalidInput('userIntent is required').toToolError(),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
const result = await deps.brain.getAvatarMarket(input.userIntent);
|
|
25
|
+
if (!result.ok) {
|
|
26
|
+
return {
|
|
27
|
+
ok: false,
|
|
28
|
+
error: { code: result.code, message: result.message, retryable: result.retryable },
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
return { ok: true, data: result.data, degraded: deps.brain.isDegraded() };
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=avatar-market.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar-market.js","sourceRoot":"","sources":["../../../src/mcp/tools/avatar-market.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAM5C,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAA+B,EAC/B,IAAsB;IAEtB,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1E,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,YAAY,CAAC,wBAAwB,CAAC,CAAC,WAAW,EAAE;SAC5D,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAClE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE;SACnF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC;AAC5E,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/tools/check-expiry.ts — handler for `skillfm_check_expiry`.
|
|
3
|
+
*
|
|
4
|
+
* Returns domain / SSL / card / API-balance expiry items within `withinDays`.
|
|
5
|
+
*
|
|
6
|
+
* Phase 0: passes through brain.getAssets mock (currently empty fixture).
|
|
7
|
+
*
|
|
8
|
+
* TODO Week 5:
|
|
9
|
+
* - Real backend `/v1/beacon/assets` join across user-registered domains
|
|
10
|
+
* (WHOIS), SSL (CT logs), payment cards (Stripe vault meta), API balances
|
|
11
|
+
* (provider-specific endpoints scraped via BYOK reverse dispatch).
|
|
12
|
+
* - Severity calculation moves to brain (consistency across users).
|
|
13
|
+
* - Free tier filter: only return `severity >= 'critical'` (≤ 7 days).
|
|
14
|
+
* Apply `proLockedDetails=true` to other items so agent shows a teaser.
|
|
15
|
+
* - `actionUrl` deep-link generation (Stripe portal, registrar console).
|
|
16
|
+
*/
|
|
17
|
+
import { type SkillFmCheckExpiryInput, type SkillFmCheckExpiryOutput, type SkillFmToolResult } from '../_vendored-contracts/beacon-mcp-tools-v1.js';
|
|
18
|
+
import type { BrainClient } from '../brain-client.js';
|
|
19
|
+
export interface CheckExpiryDeps {
|
|
20
|
+
brain: BrainClient;
|
|
21
|
+
}
|
|
22
|
+
export declare function handleCheckExpiry(input: SkillFmCheckExpiryInput, deps: CheckExpiryDeps): Promise<SkillFmToolResult<SkillFmCheckExpiryOutput>>;
|
|
23
|
+
//# sourceMappingURL=check-expiry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-expiry.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/check-expiry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,iBAAiB,EACvB,MAAM,+CAA+C,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,uBAAuB,EAC9B,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,CAAC,CAWtD"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/tools/check-expiry.ts — handler for `skillfm_check_expiry`.
|
|
3
|
+
*
|
|
4
|
+
* Returns domain / SSL / card / API-balance expiry items within `withinDays`.
|
|
5
|
+
*
|
|
6
|
+
* Phase 0: passes through brain.getAssets mock (currently empty fixture).
|
|
7
|
+
*
|
|
8
|
+
* TODO Week 5:
|
|
9
|
+
* - Real backend `/v1/beacon/assets` join across user-registered domains
|
|
10
|
+
* (WHOIS), SSL (CT logs), payment cards (Stripe vault meta), API balances
|
|
11
|
+
* (provider-specific endpoints scraped via BYOK reverse dispatch).
|
|
12
|
+
* - Severity calculation moves to brain (consistency across users).
|
|
13
|
+
* - Free tier filter: only return `severity >= 'critical'` (≤ 7 days).
|
|
14
|
+
* Apply `proLockedDetails=true` to other items so agent shows a teaser.
|
|
15
|
+
* - `actionUrl` deep-link generation (Stripe portal, registrar console).
|
|
16
|
+
*/
|
|
17
|
+
export async function handleCheckExpiry(input, deps) {
|
|
18
|
+
const within = input.withinDays ?? 30;
|
|
19
|
+
const cat = input.category ?? 'all';
|
|
20
|
+
const result = await deps.brain.getAssets(within, cat === 'all' ? undefined : cat);
|
|
21
|
+
if (!result.ok) {
|
|
22
|
+
return {
|
|
23
|
+
ok: false,
|
|
24
|
+
error: { code: result.code, message: result.message, retryable: result.retryable },
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
return { ok: true, data: result.data, degraded: deps.brain.isDegraded() };
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=check-expiry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-expiry.js","sourceRoot":"","sources":["../../../src/mcp/tools/check-expiry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAaH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,KAA8B,EAC9B,IAAqB;IAErB,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;IACtC,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC;IACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE;SACnF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC;AAC5E,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/tools/check-usage.ts — handler for `skillfm_check_usage`.
|
|
3
|
+
*
|
|
4
|
+
* Phase 0: returns the mock fixture from BrainClient.getUsage() (matches
|
|
5
|
+
* ACCEPTANCE-SCENARIO §1.1 A2 — $487 / month, $312 already saved).
|
|
6
|
+
*
|
|
7
|
+
* TODO Week 5:
|
|
8
|
+
* - Pull real usage from each provider via BYOK proxy (LlmTask reverse
|
|
9
|
+
* dispatch — agent runs the SDK calls on user machine, MCP only
|
|
10
|
+
* aggregates). Never read API keys here.
|
|
11
|
+
* - Honor `period` input ('24h' / '7d' / '30d') — Phase 0 always returns
|
|
12
|
+
* monthly.
|
|
13
|
+
* - Apply Pro gating: Free users get totalSpent + savings only;
|
|
14
|
+
* `byPlatform` breakdown locked behind ProLockedFeature.
|
|
15
|
+
* - Per-platform `tokens` and `calls` should come from ccusage / Mem0
|
|
16
|
+
* integrations, not from brain.
|
|
17
|
+
* - Add cache: if last fetch < 30s ago, return cached blob.
|
|
18
|
+
*/
|
|
19
|
+
import { type SkillFmCheckUsageInput, type SkillFmCheckUsageOutput, type SkillFmToolResult } from '../_vendored-contracts/beacon-mcp-tools-v1.js';
|
|
20
|
+
import type { BrainClient } from '../brain-client.js';
|
|
21
|
+
export interface CheckUsageDeps {
|
|
22
|
+
brain: BrainClient;
|
|
23
|
+
}
|
|
24
|
+
export declare function handleCheckUsage(_input: SkillFmCheckUsageInput, deps: CheckUsageDeps): Promise<SkillFmToolResult<SkillFmCheckUsageOutput>>;
|
|
25
|
+
//# sourceMappingURL=check-usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-usage.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/check-usage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACvB,MAAM,+CAA+C,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,sBAAsB,EAC9B,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,CAAC,CAarD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/tools/check-usage.ts — handler for `skillfm_check_usage`.
|
|
3
|
+
*
|
|
4
|
+
* Phase 0: returns the mock fixture from BrainClient.getUsage() (matches
|
|
5
|
+
* ACCEPTANCE-SCENARIO §1.1 A2 — $487 / month, $312 already saved).
|
|
6
|
+
*
|
|
7
|
+
* TODO Week 5:
|
|
8
|
+
* - Pull real usage from each provider via BYOK proxy (LlmTask reverse
|
|
9
|
+
* dispatch — agent runs the SDK calls on user machine, MCP only
|
|
10
|
+
* aggregates). Never read API keys here.
|
|
11
|
+
* - Honor `period` input ('24h' / '7d' / '30d') — Phase 0 always returns
|
|
12
|
+
* monthly.
|
|
13
|
+
* - Apply Pro gating: Free users get totalSpent + savings only;
|
|
14
|
+
* `byPlatform` breakdown locked behind ProLockedFeature.
|
|
15
|
+
* - Per-platform `tokens` and `calls` should come from ccusage / Mem0
|
|
16
|
+
* integrations, not from brain.
|
|
17
|
+
* - Add cache: if last fetch < 30s ago, return cached blob.
|
|
18
|
+
*/
|
|
19
|
+
export async function handleCheckUsage(_input, deps) {
|
|
20
|
+
const result = await deps.brain.getUsage();
|
|
21
|
+
if (!result.ok) {
|
|
22
|
+
return {
|
|
23
|
+
ok: false,
|
|
24
|
+
error: {
|
|
25
|
+
code: result.code,
|
|
26
|
+
message: result.message,
|
|
27
|
+
retryable: result.retryable,
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
return { ok: true, data: result.data, degraded: deps.brain.isDegraded() };
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=check-usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-usage.js","sourceRoot":"","sources":["../../../src/mcp/tools/check-usage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAaH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAA8B,EAC9B,IAAoB;IAEpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B;SACF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC;AAC5E,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/tools/get-monthly-picks.ts — handler for `skillfm_get_monthly_picks` (Pro).
|
|
3
|
+
*
|
|
4
|
+
* Phase 0:
|
|
5
|
+
* - Free users → ok=false + AUTH.PRO_REQUIRED (per contract §7 comment).
|
|
6
|
+
* - Pro users → returns the empty mock fixture.
|
|
7
|
+
*
|
|
8
|
+
* TODO Week 5:
|
|
9
|
+
* - Real Pro-tier check from agent_token claims (currently we treat
|
|
10
|
+
* "no token" → degraded, "with token" → assume Pro; need real tier).
|
|
11
|
+
* - Personalized picks: pass user usage profile into brain rule eval.
|
|
12
|
+
* - Localize curationTheme strings per agent locale.
|
|
13
|
+
* - Cache picks for 24h — same pick set across MCP server restarts.
|
|
14
|
+
* - Pre-render install commands per agent (claude_code / cursor / openclaw)
|
|
15
|
+
* using detected agent harness (skillfm-local already does harness probe).
|
|
16
|
+
*/
|
|
17
|
+
import { type SkillFmGetMonthlyPicksInput, type SkillFmGetMonthlyPicksOutput, type SkillFmToolResult } from '../_vendored-contracts/beacon-mcp-tools-v1.js';
|
|
18
|
+
import type { BrainClient } from '../brain-client.js';
|
|
19
|
+
export interface GetMonthlyPicksDeps {
|
|
20
|
+
brain: BrainClient;
|
|
21
|
+
/** Phase 0 stub — Week 5 will read from agent_token claims */
|
|
22
|
+
isProTier: boolean;
|
|
23
|
+
}
|
|
24
|
+
export declare function handleGetMonthlyPicks(input: SkillFmGetMonthlyPicksInput, deps: GetMonthlyPicksDeps): Promise<SkillFmToolResult<SkillFmGetMonthlyPicksOutput>>;
|
|
25
|
+
//# sourceMappingURL=get-monthly-picks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-monthly-picks.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/get-monthly-picks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EACL,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,KAAK,iBAAiB,EACvB,MAAM,+CAA+C,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGtD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,WAAW,CAAC;IACnB,8DAA8D;IAC9D,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,2BAA2B,EAClC,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,iBAAiB,CAAC,4BAA4B,CAAC,CAAC,CAiB1D"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/tools/get-monthly-picks.ts — handler for `skillfm_get_monthly_picks` (Pro).
|
|
3
|
+
*
|
|
4
|
+
* Phase 0:
|
|
5
|
+
* - Free users → ok=false + AUTH.PRO_REQUIRED (per contract §7 comment).
|
|
6
|
+
* - Pro users → returns the empty mock fixture.
|
|
7
|
+
*
|
|
8
|
+
* TODO Week 5:
|
|
9
|
+
* - Real Pro-tier check from agent_token claims (currently we treat
|
|
10
|
+
* "no token" → degraded, "with token" → assume Pro; need real tier).
|
|
11
|
+
* - Personalized picks: pass user usage profile into brain rule eval.
|
|
12
|
+
* - Localize curationTheme strings per agent locale.
|
|
13
|
+
* - Cache picks for 24h — same pick set across MCP server restarts.
|
|
14
|
+
* - Pre-render install commands per agent (claude_code / cursor / openclaw)
|
|
15
|
+
* using detected agent harness (skillfm-local already does harness probe).
|
|
16
|
+
*/
|
|
17
|
+
import { proRequired } from '../errors.js';
|
|
18
|
+
export async function handleGetMonthlyPicks(input, deps) {
|
|
19
|
+
if (!deps.isProTier) {
|
|
20
|
+
return {
|
|
21
|
+
ok: false,
|
|
22
|
+
error: proRequired('skillfm_get_monthly_picks').toToolError(),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
const personalized = input.forUserContext ?? false;
|
|
26
|
+
const result = await deps.brain.getMonthlyPicks(personalized);
|
|
27
|
+
if (!result.ok) {
|
|
28
|
+
return {
|
|
29
|
+
ok: false,
|
|
30
|
+
error: { code: result.code, message: result.message, retryable: result.retryable },
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
return { ok: true, data: result.data };
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=get-monthly-picks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-monthly-picks.js","sourceRoot":"","sources":["../../../src/mcp/tools/get-monthly-picks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAQH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAQ3C,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,KAAkC,EAClC,IAAyB;IAEzB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,WAAW,CAAC,2BAA2B,CAAC,CAAC,WAAW,EAAE;SAC9D,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC;IACnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IAC9D,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE;SACnF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/tools/index.ts — MCP tool registry.
|
|
3
|
+
*
|
|
4
|
+
* Pulls the canonical tool-name list from `SKILLFM_TOOL_NAMES` (vendored
|
|
5
|
+
* contract beacon-mcp-tools-v1) and registers a handler for each:
|
|
6
|
+
* - 8 "key" tools have real handlers (Phase 0 mock-backed)
|
|
7
|
+
* - 25+ remaining names → `_placeholder` returning TOOL_NOT_IMPLEMENTED
|
|
8
|
+
*
|
|
9
|
+
* `registerAllTools(server, deps)` is the single entry point the MCP server
|
|
10
|
+
* calls in src/index.ts. We use minimal zod schemas for each tool's input —
|
|
11
|
+
* just enough to satisfy the MCP SDK's `inputSchema` requirement; deeper
|
|
12
|
+
* validation lives inside each handler (so violations come back as
|
|
13
|
+
* SkillFmToolError envelopes, not MCP protocol errors).
|
|
14
|
+
*
|
|
15
|
+
* TODO Week 5:
|
|
16
|
+
* - Replace `z.object({}).passthrough()` placeholder schemas with real zod
|
|
17
|
+
* schemas derived from the vendored contract types.
|
|
18
|
+
* - Add per-tool `description` strings (English; agents read these to
|
|
19
|
+
* match Tool Search) — keep them keyword-rich per PRD-MCP-SKILL §4.
|
|
20
|
+
* - Track tool-call telemetry: invocation count + latency histogram.
|
|
21
|
+
* - Add `outputSchema` (MCP SDK supports it as of 1.1) for each Phase-0
|
|
22
|
+
* handler with a real Output type.
|
|
23
|
+
*/
|
|
24
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
25
|
+
import type { BrainClient } from '../brain-client.js';
|
|
26
|
+
import type { MemoryStore } from '../../memory/index.js';
|
|
27
|
+
export interface ToolRegistryDeps {
|
|
28
|
+
brain: BrainClient;
|
|
29
|
+
/** Phase 0: derived from `agentToken !== null`; Week 5: real claim. */
|
|
30
|
+
isProTier: boolean;
|
|
31
|
+
/** Mem0 self-host client (Day 6 B1, Pro-only); null = 未配置, MCP tools 返 NOT_CONFIGURED */
|
|
32
|
+
memory?: MemoryStore | null;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Register every Phase 0 beacon MCP tool. Called once by src/index.ts on
|
|
36
|
+
* server bootstrap.
|
|
37
|
+
*/
|
|
38
|
+
export declare function registerAllTools(server: McpServer, deps: ToolRegistryDeps): void;
|
|
39
|
+
/** For tests / sanity checks. Not part of the public package surface. */
|
|
40
|
+
export declare function _listAllRegisteredToolNames(): string[];
|
|
41
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +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;AActD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAMzD,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;CAC7B;AA+KD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAGhF;AAED,yEAAyE;AACzE,wBAAgB,2BAA2B,IAAI,MAAM,EAAE,CAEtD"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/tools/index.ts — MCP tool registry.
|
|
3
|
+
*
|
|
4
|
+
* Pulls the canonical tool-name list from `SKILLFM_TOOL_NAMES` (vendored
|
|
5
|
+
* contract beacon-mcp-tools-v1) and registers a handler for each:
|
|
6
|
+
* - 8 "key" tools have real handlers (Phase 0 mock-backed)
|
|
7
|
+
* - 25+ remaining names → `_placeholder` returning TOOL_NOT_IMPLEMENTED
|
|
8
|
+
*
|
|
9
|
+
* `registerAllTools(server, deps)` is the single entry point the MCP server
|
|
10
|
+
* calls in src/index.ts. We use minimal zod schemas for each tool's input —
|
|
11
|
+
* just enough to satisfy the MCP SDK's `inputSchema` requirement; deeper
|
|
12
|
+
* validation lives inside each handler (so violations come back as
|
|
13
|
+
* SkillFmToolError envelopes, not MCP protocol errors).
|
|
14
|
+
*
|
|
15
|
+
* TODO Week 5:
|
|
16
|
+
* - Replace `z.object({}).passthrough()` placeholder schemas with real zod
|
|
17
|
+
* schemas derived from the vendored contract types.
|
|
18
|
+
* - Add per-tool `description` strings (English; agents read these to
|
|
19
|
+
* match Tool Search) — keep them keyword-rich per PRD-MCP-SKILL §4.
|
|
20
|
+
* - Track tool-call telemetry: invocation count + latency histogram.
|
|
21
|
+
* - Add `outputSchema` (MCP SDK supports it as of 1.1) for each Phase-0
|
|
22
|
+
* handler with a real Output type.
|
|
23
|
+
*/
|
|
24
|
+
import { z } from 'zod';
|
|
25
|
+
import { SKILLFM_TOOL_NAMES, } from '../_vendored-contracts/beacon-mcp-tools-v1.js';
|
|
26
|
+
import { handleCheckUsage } from './check-usage.js';
|
|
27
|
+
import { handleSuggestRoute } from './suggest-route.js';
|
|
28
|
+
import { handleCheckExpiry } from './check-expiry.js';
|
|
29
|
+
import { handleAvatarMarket } from './avatar-market.js';
|
|
30
|
+
import { handleGetMonthlyPicks } from './get-monthly-picks.js';
|
|
31
|
+
import { handleRecordAcceptance } from './record-acceptance.js';
|
|
32
|
+
import { handleRecordRejection } from './record-rejection.js';
|
|
33
|
+
import { handleUserPreferences } from './user-preferences.js';
|
|
34
|
+
import { makePlaceholderHandler } from './_placeholder.js';
|
|
35
|
+
import { handleMemorySearch } from './memory-search.js';
|
|
36
|
+
import { handleMemorySave } from './memory-save.js';
|
|
37
|
+
import { handleMemoryRecent } from './memory-recent.js';
|
|
38
|
+
// ============================================================================
|
|
39
|
+
// Minimal input shape — every Phase 0 tool accepts a free-form object.
|
|
40
|
+
// Validation is done inside handlers (so failures come back as
|
|
41
|
+
// SkillFmToolError, not MCP-protocol level rejections).
|
|
42
|
+
// ============================================================================
|
|
43
|
+
const PASSTHROUGH_SCHEMA = z.object({}).passthrough();
|
|
44
|
+
/** MCP SDK requires content blocks. We always wrap our envelope as JSON text. */
|
|
45
|
+
function wrapEnvelope(envelope) {
|
|
46
|
+
return {
|
|
47
|
+
content: [{ type: 'text', text: JSON.stringify(envelope) }],
|
|
48
|
+
isError: !envelope.ok,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
// ============================================================================
|
|
52
|
+
// Key tool registration
|
|
53
|
+
// ============================================================================
|
|
54
|
+
function registerKeyTools(server, deps) {
|
|
55
|
+
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) => {
|
|
56
|
+
const env = await handleCheckUsage(input, { brain: deps.brain });
|
|
57
|
+
return wrapEnvelope(env);
|
|
58
|
+
});
|
|
59
|
+
server.tool('skillfm_suggest_route', 'Recommend a cheaper / faster LLM model for a specific task before the agent runs it. Returns recommended model + alternatives + estimated savings + human-readable reasoning. Use this BEFORE executing an LLM call when cost is a concern.', PASSTHROUGH_SCHEMA.shape, async (input) => {
|
|
60
|
+
const env = await handleSuggestRoute(input, { brain: deps.brain });
|
|
61
|
+
return wrapEnvelope(env);
|
|
62
|
+
});
|
|
63
|
+
server.tool('skillfm_check_expiry', 'List the user\'s expiring assets (domains, SSL certs, payment cards, API balances) within a window. Returns severity-ranked items with renewal action URLs. Use this when the user asks "what\'s expiring" or proactively in monthly reviews.', PASSTHROUGH_SCHEMA.shape, async (input) => {
|
|
64
|
+
const env = await handleCheckExpiry(input, { brain: deps.brain });
|
|
65
|
+
return wrapEnvelope(env);
|
|
66
|
+
});
|
|
67
|
+
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) => {
|
|
68
|
+
const env = await handleAvatarMarket(input, { brain: deps.brain });
|
|
69
|
+
return wrapEnvelope(env);
|
|
70
|
+
});
|
|
71
|
+
server.tool('skillfm_get_monthly_picks', 'Fetch this month\'s curated SkillFM skill picks (Pro feature). Returns a personalized list of skills with install commands for each agent harness. Free users receive AUTH.PRO_REQUIRED — surface the upgrade prompt to the user.', PASSTHROUGH_SCHEMA.shape, async (input) => {
|
|
72
|
+
const env = await handleGetMonthlyPicks(input, { brain: deps.brain, isProTier: deps.isProTier });
|
|
73
|
+
return wrapEnvelope(env);
|
|
74
|
+
});
|
|
75
|
+
server.tool('skillfm_record_acceptance', 'Record that the user accepted a SkillFM suggestion. Pass the ruleId returned by the originating tool. Drives the brain feedback loop that personalizes future suggestions.', PASSTHROUGH_SCHEMA.shape, async (input) => {
|
|
76
|
+
const env = await handleRecordAcceptance(input, { brain: deps.brain });
|
|
77
|
+
return wrapEnvelope(env);
|
|
78
|
+
});
|
|
79
|
+
server.tool('skillfm_record_rejection', 'Record that the user dismissed a SkillFM suggestion. Optionally include a reason (not_relevant / too_pushy / wrong_timing / other). Critical for keeping suggestion quality high — call this whenever the user says no.', PASSTHROUGH_SCHEMA.shape, async (input) => {
|
|
80
|
+
const env = await handleRecordRejection(input, { brain: deps.brain });
|
|
81
|
+
return wrapEnvelope(env);
|
|
82
|
+
});
|
|
83
|
+
server.tool('skillfm_user_preferences', 'Read or update SkillFM suggestion preferences (per-session/day frequency limits, quiet hours, disabled categories A-H). Use action=get to read, action=set with a partial preferences patch to update.', PASSTHROUGH_SCHEMA.shape, async (input) => {
|
|
84
|
+
const env = await handleUserPreferences(input, { brain: deps.brain });
|
|
85
|
+
return wrapEnvelope(env);
|
|
86
|
+
});
|
|
87
|
+
// ─── Day 6 B1: Memory tools (Pro-only, Mem0 self-host backend) ───
|
|
88
|
+
const memoryDeps = { memory: deps.memory ?? null, isProTier: deps.isProTier };
|
|
89
|
+
server.tool('skillfm_memory_search', 'Search the user\'s cross-device / cross-session memory (Pro feature, Mem0-backed). Returns relevant past conversation snippets ranked by semantic similarity. Use this when the agent needs to recall what the user discussed in previous sessions or what they learned.', PASSTHROUGH_SCHEMA.shape, async (input) => {
|
|
90
|
+
const env = await handleMemorySearch(input, memoryDeps);
|
|
91
|
+
return wrapEnvelope(env);
|
|
92
|
+
});
|
|
93
|
+
server.tool('skillfm_memory_save', 'Explicitly save a conversation snippet or learning to the user\'s cross-device memory (Pro feature, Mem0-backed). Use this when the user asks to "remember this" or when the agent identifies a fact worth persisting across sessions.', PASSTHROUGH_SCHEMA.shape, async (input) => {
|
|
94
|
+
const env = await handleMemorySave(input, memoryDeps);
|
|
95
|
+
return wrapEnvelope(env);
|
|
96
|
+
});
|
|
97
|
+
server.tool('skillfm_memory_recent', 'List the user\'s most recent memory items (Pro feature, Mem0-backed). Returns up to N items in reverse chronological order. Use this for "what did we work on yesterday" type queries.', PASSTHROUGH_SCHEMA.shape, async (input) => {
|
|
98
|
+
const env = await handleMemoryRecent(input, memoryDeps);
|
|
99
|
+
return wrapEnvelope(env);
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
// ============================================================================
|
|
103
|
+
// Placeholder tools — names reserved by contract but Phase 0 = NOT_IMPLEMENTED
|
|
104
|
+
// ============================================================================
|
|
105
|
+
const KEY_TOOL_NAMES = new Set([
|
|
106
|
+
'skillfm_check_usage',
|
|
107
|
+
'skillfm_suggest_route',
|
|
108
|
+
'skillfm_check_expiry',
|
|
109
|
+
'skillfm_avatar_market',
|
|
110
|
+
'skillfm_get_monthly_picks',
|
|
111
|
+
'skillfm_record_acceptance',
|
|
112
|
+
'skillfm_record_rejection',
|
|
113
|
+
'skillfm_user_preferences',
|
|
114
|
+
]);
|
|
115
|
+
function registerPlaceholderTools(server) {
|
|
116
|
+
const allNames = Object.values(SKILLFM_TOOL_NAMES).flat();
|
|
117
|
+
for (const name of allNames) {
|
|
118
|
+
if (KEY_TOOL_NAMES.has(name))
|
|
119
|
+
continue;
|
|
120
|
+
const handler = makePlaceholderHandler(name);
|
|
121
|
+
server.tool(name, `[Phase 0 placeholder] ${name} ships in Week 5. Calling this returns SKILLFM.TOOL.NOT_IMPLEMENTED.`, PASSTHROUGH_SCHEMA.shape, async (input) => {
|
|
122
|
+
const env = await handler(input);
|
|
123
|
+
return wrapEnvelope(env);
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Register every Phase 0 beacon MCP tool. Called once by src/index.ts on
|
|
129
|
+
* server bootstrap.
|
|
130
|
+
*/
|
|
131
|
+
export function registerAllTools(server, deps) {
|
|
132
|
+
registerKeyTools(server, deps);
|
|
133
|
+
registerPlaceholderTools(server);
|
|
134
|
+
}
|
|
135
|
+
/** For tests / sanity checks. Not part of the public package surface. */
|
|
136
|
+
export function _listAllRegisteredToolNames() {
|
|
137
|
+
return Object.values(SKILLFM_TOOL_NAMES).flat();
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { SkillFmToolResult } from '../_vendored-contracts/beacon-mcp-tools-v1.js';
|
|
2
|
+
import type { MemoryToolsDeps } from './memory-search.js';
|
|
3
|
+
interface MemoryRecentInput {
|
|
4
|
+
limit?: number;
|
|
5
|
+
}
|
|
6
|
+
interface MemoryRecentOutput {
|
|
7
|
+
items: Array<{
|
|
8
|
+
id: string;
|
|
9
|
+
text: string;
|
|
10
|
+
created_at: string;
|
|
11
|
+
metadata: Record<string, unknown>;
|
|
12
|
+
}>;
|
|
13
|
+
count: number;
|
|
14
|
+
}
|
|
15
|
+
export declare function handleMemoryRecent(input: MemoryRecentInput, deps: MemoryToolsDeps): Promise<SkillFmToolResult<MemoryRecentOutput>>;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=memory-recent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-recent.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/memory-recent.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAEvF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,UAAU,iBAAiB;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,kBAAkB;IAC1B,KAAK,EAAE,KAAK,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,CAAC,CAAC;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC,CAsChD"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// sdk/skillfm-local/src/mcp/tools/memory-recent.ts
|
|
2
|
+
//
|
|
3
|
+
// MCP tool: skillfm_memory_recent (Day 6 B1, Pro-only)
|
|
4
|
+
// 列最近 N 条记忆 (无相关性, 仅时序)
|
|
5
|
+
import { MemoryError } from '../../memory/index.js';
|
|
6
|
+
export async function handleMemoryRecent(input, deps) {
|
|
7
|
+
if (!deps.isProTier) {
|
|
8
|
+
return {
|
|
9
|
+
ok: false,
|
|
10
|
+
error: { code: 'AUTH.PRO_REQUIRED', message: 'Memory is a Pro feature.', retryable: false },
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
if (!deps.memory) {
|
|
14
|
+
return {
|
|
15
|
+
ok: false,
|
|
16
|
+
error: { code: 'MEMORY.NOT_CONFIGURED', message: 'Mem0 backend not configured.', retryable: false },
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
const items = await deps.memory.recent(Math.min(input.limit ?? 20, 100));
|
|
21
|
+
return {
|
|
22
|
+
ok: true,
|
|
23
|
+
data: {
|
|
24
|
+
items: items.map((i) => ({
|
|
25
|
+
id: i.id,
|
|
26
|
+
text: i.text,
|
|
27
|
+
created_at: i.created_at,
|
|
28
|
+
metadata: i.metadata,
|
|
29
|
+
})),
|
|
30
|
+
count: items.length,
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
catch (e) {
|
|
35
|
+
const code = e instanceof MemoryError ? e.code : 'MEMORY.UNKNOWN';
|
|
36
|
+
return {
|
|
37
|
+
ok: false,
|
|
38
|
+
error: {
|
|
39
|
+
code,
|
|
40
|
+
message: e instanceof Error ? e.message : String(e),
|
|
41
|
+
retryable: code === 'MEMORY_BACKEND_UNREACHABLE',
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=memory-recent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-recent.js","sourceRoot":"","sources":["../../../src/mcp/tools/memory-recent.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,EAAE;AACF,uDAAuD;AACvD,wBAAwB;AAGxB,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAiBpD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAwB,EACxB,IAAqB;IAErB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,0BAA0B,EAAE,SAAS,EAAE,KAAK,EAAE;SAC5F,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,8BAA8B,EAAE,SAAS,EAAE,KAAK,EAAE;SACpG,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;QACzE,OAAO;YACL,EAAE,EAAE,IAAI;YACR,IAAI,EAAE;gBACJ,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACvB,EAAE,EAAE,CAAC,CAAC,EAAE;oBACR,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,QAAQ,EAAE,CAAC,CAAC,QAAmC;iBAChD,CAAC,CAAC;gBACH,KAAK,EAAE,KAAK,CAAC,MAAM;aACpB;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,GAAG,CAAC,YAAY,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;QAClE,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE;gBACL,IAAI;gBACJ,OAAO,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;gBACnD,SAAS,EAAE,IAAI,KAAK,4BAA4B;aACjD;SACF,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { SkillFmToolResult } from '../_vendored-contracts/beacon-mcp-tools-v1.js';
|
|
2
|
+
import type { MemoryToolsDeps } from './memory-search.js';
|
|
3
|
+
interface MemorySaveInput {
|
|
4
|
+
text: string;
|
|
5
|
+
source?: 'claude-code' | 'cursor' | 'openclaw' | 'manual';
|
|
6
|
+
user_tags?: string[];
|
|
7
|
+
privacy?: 'private' | 'shared';
|
|
8
|
+
}
|
|
9
|
+
interface MemorySaveOutput {
|
|
10
|
+
id: string;
|
|
11
|
+
saved_at: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function handleMemorySave(input: MemorySaveInput, deps: MemoryToolsDeps): Promise<SkillFmToolResult<MemorySaveOutput>>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=memory-save.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-save.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/memory-save.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAEvF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,aAAa,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC1D,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;CAChC;AAED,UAAU,gBAAgB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,eAAe,EACtB,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,CA6C9C"}
|