feat: add system disclosure policy gate
Memind CI / Test, build, and release guards (pull_request) Successful in 3m14s

This commit is contained in:
john
2026-07-23 22:53:15 +08:00
parent ba6cc10f08
commit 205b5fd8be
20 changed files with 1585 additions and 2 deletions
+79
View File
@@ -66,6 +66,85 @@ test('direct chat registers session through sessionAccess when provided', async
assert.equal(isDirectChatSessionId(result.sessionId), true);
});
test('direct chat deterministic response stores a reply without model, memory, or billing calls', async () => {
const calls = { model: 0, billing: 0, memory: 0 };
const saved = [];
const service = createDirectChatService({
enabled: true,
userAuth: {
async registerAgentSession() {},
async billSessionUsage() {
calls.billing += 1;
},
},
llmProviderService: {
async createChatCompletion() {
calls.model += 1;
},
},
sessionSnapshotService: {
async get() {
return null;
},
async save(_sessionId, _userId, _session, messages) {
saved.push(messages);
},
},
memoryV2: {
async resolve() {
calls.memory += 1;
},
},
});
const result = await service.respondDeterministically({
userId: 'user-1',
requestId: 'req-policy',
userMessage: {
role: 'user',
content: [{ type: 'text', text: 'TKMind 的底层架构是什么?' }],
},
reply: '不提供内部技术信息。',
metadata: { policyId: 'system-disclosure' },
});
assert.equal(result.deterministic, true);
assert.equal(result.billing, null);
assert.deepEqual(calls, { model: 0, billing: 0, memory: 0 });
assert.equal(saved.length, 1);
assert.equal(saved[0][1].content[0].text, '不提供内部技术信息。');
assert.equal(saved[0][1].metadata.policyId, 'system-disclosure');
});
test('direct chat deterministic response preserves an existing agent session id', async () => {
let registered = 0;
const service = createDirectChatService({
userAuth: {},
sessionAccess: {
enabled: true,
async registerAgentSession() {
registered += 1;
},
},
llmProviderService: {},
sessionSnapshotService: {
async get() {
return null;
},
async save() {},
},
});
const result = await service.respondDeterministically({
userId: 'user-1',
sessionId: 'goose-session-1',
requestId: 'req-policy-existing',
userMessage: { role: 'user', content: [{ type: 'text', text: '内部架构是什么?' }] },
reply: '不提供内部技术信息。',
});
assert.equal(result.sessionId, 'goose-session-1');
assert.equal(registered, 0);
});
test('direct chat creates a direct session, saves snapshot, and bills returned usage', async () => {
const registered = [];
const saved = [];