feat: 不用斜杠,单发 goal 也触发 /goal 目标

触发词从仅 /goal 放宽到 /goal 或裸 goal(大小写不敏感,
单数 only,goals/mygoal 不算):goal 收xxx、goal,目标是
收xxx、发goal 收xxx 均同款触发,新建与主线转换入口共用
同一解析。讨论句式仍不触发:goal 的用法、goal 是什么、
讨论goal的用法、/goal的用法 均返回 None。
单测补 4 项:裸 goal 触发、裸 goal 讨论不触发、followup
裸 goal 转换、新建裸 goal。
This commit is contained in:
host committed 2026-10-30 07:15:05 +08:00
1 parent f3bd65c171
commit f1aab5415c
3 files changed
+93 -32

No files matched your search

+30
View File
@@ -56,6 +56,22 @@ class ParserTestCase(unittest.TestCase):
self.assertIsNone(parse_goal_command("请帮我完成目标收xxx"))
self.assertIsNone(parse_goal_command("hello world"))
def test_bare_goal_without_slash(self):
# 不用斜杠:用户单发 goal 也触发同款目标。
self.assertEqual(parse_goal_command("goal 收xxx"), "收xxx")
self.assertEqual(parse_goal_command("goal,目标是收xxx"), "收xxx")
self.assertEqual(parse_goal_command("goal目标是收xxx"), "收xxx")
self.assertEqual(parse_goal_command("goal收xxx"), "收xxx")
self.assertEqual(parse_goal_command("发goal 收xxx"), "收xxx")
self.assertEqual(parse_goal_command("goal"), "")
def test_bare_goal_discussion_still_not_a_command(self):
self.assertIsNone(parse_goal_command("goal的用法"))
self.assertIsNone(parse_goal_command("goal是什么意思"))
self.assertIsNone(parse_goal_command("讨论goal的用法"))
self.assertIsNone(parse_goal_command("请问goal是什么意思"))
self.assertIsNone(parse_goal_command("/goal的用法"))
class ServerTestCase(unittest.TestCase):
def setUp(self):
@@ -248,6 +264,20 @@ class ServerTestCase(unittest.TestCase):
task = self._create(prompt="讨论/goal的用法")
self.assertEqual(task["goal_mode"], 0)
def test_followup_bare_goal_converts(self):
task = self._create()
status, body = self._req(
"POST", "/tasks/%s/followups" % task["id"],
{"body": "goal 收xxx"}, self.owner_key)
self.assertEqual(status, 200, body)
self.assertEqual(body["delivery"], "goal_converted")
self.assertEqual(body["goal"], "收xxx")
def test_create_task_bare_goal(self):
task = self._create(prompt="goal 收xxx")
self.assertEqual(task["goal_mode"], 1)
self.assertEqual(task["goal"], "收xxx")
def test_continue_goal_command(self):
task = self._create()
self._set_status(task["id"], "completed")