Add the intent seed domain for the agent-intent module.
ci / vet-and-test (push) Successful in 2s
ci / docker-checkout-hostgateway (push) Successful in 3s

This commit is contained in:
weichen
2026-09-29 15:18:32 +00:00
parent 95a03b7578
commit 28fa06eaa5
9 changed files with 68 additions and 6 deletions
+2 -1
View File
@@ -9,7 +9,7 @@
| 包 | 职责 | 依赖边界 |
|---|---|---|
| errcode | 码格式、定义、注册表、`E` 错误类型 | 只依赖标准库 |
| domains | sys / agent / squad 种子码;Go 为权威,JSON 为导出快照 | 只依赖 errcode |
| domains | sys / agent / squad / intent 种子码;Go 为权威,JSON 为导出快照 | 只依赖 errcode |
| httpx | 统一错误信封与 `X-Trace-Id` | 只依赖 errcode |
| server | HTTP API,默认 `:8091` | 组合根之一 |
| cli | `errcode` 命令 | 组合根之一 |
@@ -27,6 +27,7 @@
- [注册治理](docs/governance.md)
- [agent-native](docs/agent-native-mapping.md)
- [agent-squad](docs/agent-squad-mapping.md)
- [agent-intent](docs/agent-intent-mapping.md)
- [和日志系统对齐](docs/integration.md)
## 进程内用法
+12
View File
@@ -0,0 +1,12 @@
# agent-intent 错误码映射
agent-intent v1 无 HTTP 面,核心包按 Pattern B 接入:错误常量的字符串值即下列规范码,错误类型实现 `ErrorCode()` / `ErrorFields()` 鸭子方法供日志系统展开;其仓内 `catalogcheck` 对齐测试保证两边常量相等,本表是人类可读对照。
| agent-intent 常量 | 规范码 | HTTP | 触发场景 |
|---|---|---|---|
| `intent.InvalidSpec` | intent.invalid_spec | 400 | spec 定义/校验失败:id 冲突、正则不合法、未知字段、matcher 无正向条件、槽位 group 越界、覆盖版本未递增 |
| `intent.SpecProtected` | intent.spec_protected | 400 | overlay 试图覆盖或禁用保护域内的 spec |
| `intent.LoadFailed` | intent.load_failed | 500 | 配置读取/解析失败;此时保留上一生效快照 |
| `intent.InvalidArgument`(复用框架域) | sys.invalid_argument | 400 | 调用方错误:nil 快照、输入超长 |
「无匹配」(fallback 分支)是正常识别结果,不产生错误码;识别路径的失败语义与重试由宿主决定。
+1 -1
View File
@@ -10,7 +10,7 @@ import (
func TestEmbeddedCatalogMatchesRegistry(t *testing.T) {
r := errcode.NewRegistry()
RegisterAll(r)
for _, domain := range []string{"sys", "agent", "squad"} {
for _, domain := range []string{"sys", "agent", "squad", "intent"} {
got, err := ExportDomain(r, domain)
if err != nil {
t.Fatal(err)
+2 -2
View File
@@ -9,11 +9,11 @@ import (
func TestWriteCatalog(t *testing.T) {
if os.Getenv("WRITE_CATALOG") != "1" {
t.Skip("set WRITE_CATALOG=1 to regenerate sys.json agent.json squad.json")
t.Skip("set WRITE_CATALOG=1 to regenerate sys.json agent.json squad.json intent.json")
}
r := errcode.NewRegistry()
RegisterAll(r)
for _, domain := range []string{"sys", "agent", "squad"} {
for _, domain := range []string{"sys", "agent", "squad", "intent"} {
data, err := ExportDomain(r, domain)
if err != nil {
t.Fatal(err)
+1 -1
View File
@@ -4,7 +4,7 @@ import "embed"
// 导出的目录快照。改 Go 定义后用 WRITE_CATALOG=1 重写这些文件。
//
//go:embed sys.json agent.json squad.json
//go:embed sys.json agent.json squad.json intent.json
var catalogFS embed.FS
// CatalogJSON 返回已嵌入的域目录原文。
+12
View File
@@ -0,0 +1,12 @@
package domains
import "error-code-system/errcode"
func registerIntent(r *errcode.Registry) {
must(r, def(errcode.IntentInvalidSpec, 400, errcode.SeverityError, errcode.RetryNever, errcode.SideEffectNone,
"意图定义校验失败", "检查 spec 的 id/domain/matcher/slots 与来源文件;整批配置已原子拒绝"))
must(r, def(errcode.IntentSpecProtected, 400, errcode.SeverityError, errcode.RetryNever, errcode.SideEffectNone,
"试图覆盖或禁用保护域意图", "保护域由宿主构建时声明;修改须走宿主内置定义,不接受 overlay"))
must(r, def(errcode.IntentLoadFailed, 500, errcode.SeverityError, errcode.RetryNever, errcode.SideEffectNone,
"意图配置加载失败", "查看来源路径与解析原因;失败时保留上一生效快照"))
}
+29
View File
@@ -0,0 +1,29 @@
[
{
"code": "intent.invalid_spec",
"http": 400,
"severity": "error",
"retry": "never",
"side_effects": "none",
"summary": "意图定义校验失败",
"hint": "检查 spec 的 id/domain/matcher/slots 与来源文件;整批配置已原子拒绝"
},
{
"code": "intent.load_failed",
"http": 500,
"severity": "error",
"retry": "never",
"side_effects": "none",
"summary": "意图配置加载失败",
"hint": "查看来源路径与解析原因;失败时保留上一生效快照"
},
{
"code": "intent.spec_protected",
"http": 400,
"severity": "error",
"retry": "never",
"side_effects": "none",
"summary": "试图覆盖或禁用保护域意图",
"hint": "保护域由宿主构建时声明;修改须走宿主内置定义,不接受 overlay"
}
]
+2 -1
View File
@@ -8,11 +8,12 @@ import "error-code-system/errcode"
func init() { RegisterAll(errcode.Default) }
// RegisterAll 向 r 登记 sys / agent / squad 三域。重复调用会因码冲突失败。
// RegisterAll 向 r 登记 sys / agent / squad / intent 四域。重复调用会因码冲突失败。
func RegisterAll(r *errcode.Registry) {
registerSys(r)
registerAgent(r)
registerSquad(r)
registerIntent(r)
}
func must(r *errcode.Registry, def errcode.Definition) {
+7
View File
@@ -48,3 +48,10 @@ const (
SquadQualityFailed Code = "squad.quality_failed"
SquadCancelled Code = "squad.cancelled"
)
// 意图识别域。对齐 agent-intent 核心包错误常量;消费方以 catalogcheck 对齐测试防止双权威。
const (
IntentInvalidSpec Code = "intent.invalid_spec"
IntentSpecProtected Code = "intent.spec_protected"
IntentLoadFailed Code = "intent.load_failed"
)