feat: 经验复用 MCP 暴露——项目记忆列/建/废弃(注入与提取已存在,不重复造)

This commit is contained in:
host committed 2026-10-30 05:01:44 +08:00
1 parent c10fda4e4a
commit 60283d55fc
2 files changed
+66

No files matched your search

+29
View File
@@ -65,6 +65,13 @@ class FakeTransport:
return 200, {"members": []}
if path == "/models":
return 200, {"models": []}
if path == "/projects/p1/identity-memories":
return 200, {"memories": [{"id": "m1", "content": "x"}]}
if path == "/projects/p1/identity-memories?top_k=3":
return 200, {"memories": []}
if path == "/projects/p1/identity-memories/m1/supersede" \
and method == "POST":
return 200, {"id": "m1", "status": "superseded"}
if path == "/tasks/nope":
return 404, {"error": "not found"}
return 400, {"error": "bad request"}
@@ -179,6 +186,28 @@ class MCPServerTestCase(unittest.TestCase):
self.assertFalse(is_error, name)
self.assertEqual(self.transport.calls[-1][:2], expected, name)
is_error, _ = self.server.call_tool("create_followup", {"task_id": "t1"})
def test_project_memory_tools_translate_to_rest(self):
is_error, payload = self.server.call_tool(
"list_project_memories", {"project_id": "p1", "top_k": 3})
self.assertFalse(is_error)
self.assertEqual(self.transport.calls[-1][:2],
("GET", "/projects/p1/identity-memories?top_k=3"))
is_error, _ = self.server.call_tool(
"create_project_memory",
{"project_id": "p1", "kind": "convention", "content": "先跑测试"})
self.assertFalse(is_error)
self.assertEqual(self.transport.calls[-1][:2],
("POST", "/projects/p1/identity-memories"))
is_error, _ = self.server.call_tool(
"supersede_project_memory",
{"project_id": "p1", "memory_id": "m1",
"replacement_content": "新约定"})
self.assertFalse(is_error)
self.assertEqual(self.transport.calls[-1][:2],
("POST",
"/projects/p1/identity-memories/m1/supersede"))
is_error, _ = self.server.call_tool(
"create_project_memory", {"project_id": "p1", "kind": "k"})
self.assertTrue(is_error)
def test_missing_arg_is_error_not_rest_call(self):