@skillfm/local 2.1.0 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/agent-hints 2.js +102 -0
  2. package/dist/agent-hints.d 2.ts +25 -0
  3. package/dist/agent-hints.d.ts 2.map +1 -0
  4. package/dist/agent-hints.js 2.map +1 -0
  5. package/dist/doctor 2.js +456 -0
  6. package/dist/doctor.d 2.ts +56 -0
  7. package/dist/doctor.d.ts 2.map +1 -0
  8. package/dist/doctor.js 2.map +1 -0
  9. package/dist/guard/bin.js +0 -0
  10. package/dist/index.js +8 -0
  11. package/dist/index.js.map +1 -1
  12. package/dist/mcp-stdio/bin.js +0 -0
  13. package/dist/mcp-stdio 2/api-client.d.ts +28 -0
  14. package/dist/mcp-stdio 2/api-client.d.ts.map +1 -0
  15. package/dist/mcp-stdio 2/api-client.js +123 -0
  16. package/dist/mcp-stdio 2/api-client.js.map +1 -0
  17. package/dist/mcp-stdio 2/bin.d.ts +3 -0
  18. package/dist/mcp-stdio 2/bin.d.ts.map +1 -0
  19. package/dist/mcp-stdio 2/bin.js +18 -0
  20. package/dist/mcp-stdio 2/bin.js.map +1 -0
  21. package/dist/mcp-stdio 2/config.d.ts +6 -0
  22. package/dist/mcp-stdio 2/config.d.ts.map +1 -0
  23. package/dist/mcp-stdio 2/config.js +26 -0
  24. package/dist/mcp-stdio 2/config.js.map +1 -0
  25. package/dist/mcp-stdio 2/render-flow.d.ts +53 -0
  26. package/dist/mcp-stdio 2/render-flow.d.ts.map +1 -0
  27. package/dist/mcp-stdio 2/render-flow.js +70 -0
  28. package/dist/mcp-stdio 2/render-flow.js.map +1 -0
  29. package/dist/mcp-stdio 2/request-context.d.ts +30 -0
  30. package/dist/mcp-stdio 2/request-context.d.ts.map +1 -0
  31. package/dist/mcp-stdio 2/request-context.js +78 -0
  32. package/dist/mcp-stdio 2/request-context.js.map +1 -0
  33. package/dist/mcp-stdio 2/server.d.ts +19 -0
  34. package/dist/mcp-stdio 2/server.d.ts.map +1 -0
  35. package/dist/mcp-stdio 2/server.js +651 -0
  36. package/dist/mcp-stdio 2/server.js.map +1 -0
  37. package/dist/soul 2.js +439 -0
  38. package/dist/soul-security 2.js +197 -0
  39. package/dist/soul-security.d 2.ts +76 -0
  40. package/dist/soul-security.d.ts 2.map +1 -0
  41. package/dist/soul-security.d.ts.map +1 -1
  42. package/dist/soul-security.js +4 -2
  43. package/dist/soul-security.js 2.map +1 -0
  44. package/dist/soul-security.js.map +1 -1
  45. package/dist/soul.d 2.ts +135 -0
  46. package/dist/soul.d.ts 2.map +1 -0
  47. package/dist/soul.js 2.map +1 -0
  48. package/package.json +12 -2
@@ -0,0 +1,70 @@
1
+ // Render envelope.dialogue_flow + EnhancedError 成 Agent 可读文本
2
+ //
3
+ // PRD Book 3 §3.2: MCP 工具不翻译业务话术, 只把服务端 envelope 完整呈现给 Agent。
4
+ // Agent 自己根据 dialogue_flow.this_turn / next_turn_hints / gentle_exit 决定怎么说。
5
+ //
6
+ // 核心约束: 不在 MCP 这层注入额外文案, 只做"忠实搬运 + 结构化展示"。
7
+ function pickText(loc) {
8
+ return loc?.zh || loc?.en || '';
9
+ }
10
+ /**
11
+ * 把一份 dialogue_flow 渲染成对 Agent 友好的 markdown 块。
12
+ *
13
+ * 目标读者: Agent (Claude Code / Cursor 等), 不是终端用户。
14
+ * 因此用 [Guide / 引导剧本] 开头, 让 Agent 知道这是元信息而非用户话语。
15
+ */
16
+ export function renderDialogueFlow(flow) {
17
+ const lines = [];
18
+ lines.push(`[引导剧本 · ${flow.flow_id} · turn ${flow.current_turn}/${flow.total_turns}]`);
19
+ lines.push('');
20
+ lines.push(`本轮目标: ${flow.this_turn.semantic_goal}`);
21
+ if (flow.this_turn.talk_points?.length) {
22
+ lines.push('可以用的话题点:');
23
+ for (const p of flow.this_turn.talk_points)
24
+ lines.push(` - ${p}`);
25
+ }
26
+ lines.push(`本轮收尾方式: ${flow.this_turn.end_with}`);
27
+ lines.push('');
28
+ lines.push('下一轮根据 ta 的反应分支:');
29
+ lines.push(` · ta 接茬: ${flow.next_turn_hints.if_user_engages}`);
30
+ lines.push(` · ta 犹豫: ${flow.next_turn_hints.if_user_hesitates}`);
31
+ lines.push(` · ta 拒绝: ${flow.next_turn_hints.if_user_declines}`);
32
+ lines.push('');
33
+ lines.push(`温柔退路 (gentle_exit): ${flow.gentle_exit.semantic_goal}`);
34
+ if (flow.gentle_exit.talk_points?.length) {
35
+ for (const p of flow.gentle_exit.talk_points)
36
+ lines.push(` - ${p}`);
37
+ }
38
+ lines.push('');
39
+ lines.push(`本轮成功判定: ${flow.success_criterion}`);
40
+ return lines.join('\n');
41
+ }
42
+ /**
43
+ * 渲染整个 envelope 的"软错误 + dialogue_flow"区段。
44
+ * 用在 MCP 工具的 catch 路径里。
45
+ */
46
+ export function renderEnvelopeError(envelope) {
47
+ if (!envelope || !envelope.error)
48
+ return null;
49
+ const err = envelope.error;
50
+ const blocks = [];
51
+ const userMsg = pickText(err.user_message);
52
+ if (userMsg)
53
+ blocks.push(userMsg);
54
+ const directive = pickText(err.agent_directive);
55
+ if (directive)
56
+ blocks.push(`[agent 心法] ${directive}`);
57
+ const flow = envelope.dialogue_flow || err.dialogue_flow;
58
+ if (flow)
59
+ blocks.push(renderDialogueFlow(flow));
60
+ if (envelope.conversation_hints?.length) {
61
+ blocks.push('—');
62
+ for (const h of envelope.conversation_hints) {
63
+ const t = pickText(h.text);
64
+ if (t)
65
+ blocks.push(`[hint] ${t}`);
66
+ }
67
+ }
68
+ return blocks.join('\n\n');
69
+ }
70
+ //# sourceMappingURL=render-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-flow.js","sourceRoot":"","sources":["../../src/mcp-stdio/render-flow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export interface RequestContext {
2
+ apiBaseUrl: string;
3
+ brainKey: string;
4
+ jwtToken: string;
5
+ /** 同一个 brainKey 下的 conversation-state 读写器(HTTP 模式下从 store 借用,stdio 下可以是全局单例) */
6
+ convState: ConvStateHandle;
7
+ }
8
+ export interface ConvStateHandle {
9
+ get(): string | null;
10
+ set(v: string | null): void;
11
+ getFeedback(): string | null;
12
+ consumeFeedback(): string | null;
13
+ pushFeedback(v: unknown): void;
14
+ }
15
+ export declare class ConvStateStore {
16
+ private map;
17
+ getHandle(brainKey: string): ConvStateHandle;
18
+ private getEntry;
19
+ private touch;
20
+ private evictIfNeeded;
21
+ /** 测试辅助 */
22
+ _clear(): void;
23
+ _size(): number;
24
+ }
25
+ /**
26
+ * 全局单例 store — stdio 模式/tests 也会用到,HTTP 模式的 app 实例也直接用它。
27
+ * 不同 brainKey 天然隔离。
28
+ */
29
+ export declare const globalConvStore: ConvStateStore;
30
+ //# sourceMappingURL=request-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-context.d.ts","sourceRoot":"","sources":["../../src/mcp-stdio/request-context.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,SAAS,EAAE,eAAe,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,IAAI,MAAM,GAAG,IAAI,CAAC;IACrB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC5B,WAAW,IAAI,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,IAAI,MAAM,GAAG,IAAI,CAAC;IACjC,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAChC;AASD,qBAAa,cAAc;IACzB,OAAO,CAAC,GAAG,CAAgC;IAE3C,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe;IAwB5C,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,KAAK;IAMb,OAAO,CAAC,aAAa;IAWrB,WAAW;IACX,MAAM,IAAI,IAAI;IAId,KAAK,IAAI,MAAM;CAGhB;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,gBAAuB,CAAC"}
@@ -0,0 +1,78 @@
1
+ // RequestContext — 每请求独立的客户端上下文,HTTP Streamable 模式下使用。
2
+ //
3
+ // 为什么需要这个?
4
+ // stdio 模式是单租户进程,全局 config + 全局 conv-state 没问题。
5
+ // HTTP 模式是多租户(多个 agent 带各自的 Bearer 打到同一个 process),
6
+ // 必须按 brainKey 隔离出站状态,避免 conv-state bleed across agents。
7
+ //
8
+ // 设计:
9
+ // - RequestContext 不可变 (per-request frozen)
10
+ // - ConvStateStore 是 brainKey → {state, feedback} 的 Map
11
+ // - LRU-ish cap(512 条)防止内存无界增长;真出问题再换 Redis
12
+ //
13
+ // BYOK 红线 (Principle 24): 这里永不读/存任何 LLM key, 只存平台自己的 brainKey + JWT。
14
+ const MAX_ENTRIES = 512;
15
+ export class ConvStateStore {
16
+ map = new Map();
17
+ getHandle(brainKey) {
18
+ const store = this;
19
+ return {
20
+ get: () => store.getEntry(brainKey).state,
21
+ set: (v) => {
22
+ const e = store.getEntry(brainKey);
23
+ e.state = v;
24
+ store.touch(brainKey, e);
25
+ },
26
+ getFeedback: () => store.getEntry(brainKey).feedback,
27
+ consumeFeedback: () => {
28
+ const e = store.getEntry(brainKey);
29
+ const f = e.feedback;
30
+ e.feedback = null;
31
+ return f;
32
+ },
33
+ pushFeedback: (v) => {
34
+ const e = store.getEntry(brainKey);
35
+ e.feedback = v === null ? null : JSON.stringify(v);
36
+ store.touch(brainKey, e);
37
+ },
38
+ };
39
+ }
40
+ getEntry(brainKey) {
41
+ let e = this.map.get(brainKey);
42
+ if (!e) {
43
+ e = { state: null, feedback: null };
44
+ this.map.set(brainKey, e);
45
+ this.evictIfNeeded();
46
+ }
47
+ return e;
48
+ }
49
+ touch(brainKey, e) {
50
+ // LRU: delete + re-set 让它移到 Map 末尾
51
+ this.map.delete(brainKey);
52
+ this.map.set(brainKey, e);
53
+ }
54
+ evictIfNeeded() {
55
+ while (this.map.size > MAX_ENTRIES) {
56
+ const oldest = this.map.keys().next().value;
57
+ if (oldest !== undefined) {
58
+ this.map.delete(oldest);
59
+ }
60
+ else {
61
+ break;
62
+ }
63
+ }
64
+ }
65
+ /** 测试辅助 */
66
+ _clear() {
67
+ this.map.clear();
68
+ }
69
+ _size() {
70
+ return this.map.size;
71
+ }
72
+ }
73
+ /**
74
+ * 全局单例 store — stdio 模式/tests 也会用到,HTTP 模式的 app 实例也直接用它。
75
+ * 不同 brainKey 天然隔离。
76
+ */
77
+ export const globalConvStore = new ConvStateStore();
78
+ //# sourceMappingURL=request-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-context.js","sourceRoot":"","sources":["../../src/mcp-stdio/request-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env node
2
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ import { type RequestContext } from './request-context.js';
4
+ type ToolContextProvider = (extra: {
5
+ authInfo?: {
6
+ token?: string;
7
+ };
8
+ } | undefined) => RequestContext;
9
+ /**
10
+ * 构造一个注册了所有工具的 McpServer。
11
+ * 工具回调在运行时调用 getCtx(extra) 拿到 per-request RequestContext。
12
+ */
13
+ declare function buildMcpServer(getCtx: ToolContextProvider): McpServer;
14
+ export { buildMcpServer };
15
+ export { globalConvStore } from './request-context.js';
16
+ export type { RequestContext } from './request-context.js';
17
+ export type { ToolContextProvider };
18
+ export declare function main(): Promise<void>;
19
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp-stdio/server.ts"],"names":[],"mappings":";AAoBA,OAAO,EAAE,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AAOtF,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAQ5E,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,CAqkB9D;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"}