【架构优化】从 Engine.applyObservation 中拆出节点活动文案推导 observationActivity

Ouverte
#453 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

@fx-kurumi y travaille déjà.

Depuis le 13/11/2026.

  • #456 par @fx-kurumi — ouverte

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
15/100
Type d'issue
Refactorisation
Clarté
Clairement spécifiée
Activité
À l'abandon
Stack technique
go
Domaine
backend

Piste de recherche

The activity-text switch sits inside Engine.applyObservation in internal/engine/engine_observe.go; start by reading that switch and the branches the issue lists. Move it unchanged into a package-level observationActivity function and add a table-driven test file in the same package. Done means gofmt, go vet ./internal/engine/ and go test ./internal/engine/ pass. Note that PR #456 is already open against this issue, so the work is claimed.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

现状问题

internal/engine/engine_observe.go 中 Engine.applyObservation 约 120 行,同时负责:幂等去重、字段补全、日志记录、节点属性回填、节点活动文案推导、工具调用计数、用量累计、遥测合并与截断。

其中根据 observation.Category/Name/Phase/Level 推导节点 Activity 文案的 switch 有 6 个分支、约 35 行,内含多层嵌套(tool/sandbox 分支在某些条件下不更新文案,process 分支要拼接 provider/model 标签),是一段纯计算逻辑却嵌在有副作用的大函数里,目前也没有直接的单元测试。

重构方案

  • 把该 switch 原样抽成包级纯函数 observationActivity(observation domain.TelemetryEvent) (string, bool),返回新的活动文案以及是否需要更新(对应原来 tool 非匹配、sandbox.closed 不更新文案的情形)。
  • applyObservation 中改为:if activity, ok := observationActivity(observation); ok { nr.Activity = activity }。
  • 分支逻辑、文案逐字不变,不改其它代码。

影响范围

仅 internal/engine/engine_observe.go 一个函数内部,加一个新测试文件;无对外接口、无行为变化。

验证方式

  • 新增表驱动单测覆盖每个分支(reasoning/output/tool 开始、结束、结束报错/sandbox 普通与 closed/process.started 含与不含 provider、model/其它 process/default 有无 message)。
  • gofmt、go vet ./internal/engine/、go test ./internal/engine/ 通过。
Langage dominant
Go
Étoiles
141
Forks
28
Merge moyen
1 j 15 h
PR mergées (30 j)
113

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de Tencent/LoopForge

Toutes les issues de Tencent/LoopForge

Issues similaires

Plus d'issues Go

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.