Add EXT-19 account lister host capability
ci / vet-and-test (pull_request) Successful in 42s

Why: 方案 r1 U3/KTD2——RDM 成员管理需最小账号目录(owner+有效态+分页);此前无公开能力,下游只能盲加成员字符串。
Evidence: 红(AccountLister 未定义编译红);绿:surface 棘轮 2.11.0 + TestInprocHostListAccounts(排序/游标/limit 钳制/真实 store);go test ./... 全绿。
Impact: 公开面 AccountEntry{Owner,Valid}+AccountLister(游标分页,limit 1-200 缺省 50);inprocHost 实现(users 表,无姓名/联系方式下发);既有 EXT-8b 版本断言放宽为下限。
Refs: 方案 r1 U3/KTD2;Dev#477/#180 identity CLI
This commit is contained in:
weichen
2026-10-12 13:46:15 +00:00
parent f718d36d23
commit bff6820e5f
5 changed files with 115 additions and 3 deletions
+17 -1
View File
@@ -25,12 +25,14 @@ import (
// 2.8.0-experimental:EXT-17 新增可选能力接口 SurfaceHost(SurfaceSave/Get/List/
// Activation;Generative UI U2)。实现由基座 hostcaps 注入;未装配时类型断言
// 不成立即明确拒绝,不给必实现 Host 接口加方法(不破坏既有消费者)。
// 2.11.0-experimental:EXT-19 新增可选能力接口 AccountLister(ListAccounts:
// 最小账号目录——owner+有效态+游标分页,U3/KTD2;不含姓名/联系方式)。
// 2.10.0-experimental:EXT-8b 新增 ResourceAuthzQuery/ResourceAuthorizerV2 与
// Registry.RegisterResourceAuthorizerV2(资源级授权,U9 首切片)。
// 2.9.0-experimental:Registry.AddAdminZone 与 AdminZoneSpec(WP3-I3/KTD4:编译
// 插件向基座管理区声明展示分区;分区入口不做基座级权限判定,数据能力由
// 分区组件自身的命令面 fail-closed)。
const SurfaceVersion = "2.10.0-experimental"
const SurfaceVersion = "2.11.0-experimental"
// ErrNotLinked 表示进程没有空白导入 link 包,Main 无法启动服务。
var ErrNotLinked = errors.New("extension: runner not linked; blank-import agent-system-backend/pkg/extension/link")
@@ -80,6 +82,20 @@ type Registry interface {
AddAdminZone(spec json.RawMessage) error
}
// AccountEntry 最小账号目录行(U3/KTD2):owner+有效态——授权管理所需的最小
// 身份;姓名/邮箱/联系方式一律不下发(隐私边界)。
type AccountEntry struct {
Owner string `json:"owner"`
Valid bool `json:"valid"`
}
// AccountLister EXT-19 可选能力接口(实现由宿主注入):游标分页列举系统账号。
// 未实现时下游回落现行行为(成员添加不做账号有效性校验);实现后仅用于
// 授权管理读面——不授予任何写权。
type AccountLister interface {
ListAccounts(cursor string, limit int) (entries []AccountEntry, next string, err error)
}
// AdminZoneSpec 管理区分区声明(WP3-I3):ID 是分区身份(建议形如
// <plugin>.<section>,前端按 ID 映射内置分区组件);Title/Icon/Desc 为展示
// 元数据(icon 取基座前端 IconName 词表,未知值前端回退通用图标);Order
+2 -2
View File
@@ -13,8 +13,8 @@ import (
)
func TestResourceAuthzV2SurfacePresent(t *testing.T) {
if !strings.HasPrefix(SurfaceVersion, "2.10.0") {
t.Fatalf("SurfaceVersion 应升至 2.10.0-experimental(新增导出符号须升版),got %s", SurfaceVersion)
if SurfaceVersion < "2.10.0" {
t.Fatalf("SurfaceVersion 应 ≥2.10.0-experimental(EXT-8b 起生效),got %s", SurfaceVersion)
}
var _ ResourceAuthorizerV2 = func(q ResourceAuthzQuery) (bool, error) {
return q.Actor != "" && q.Action != "" && q.ResourceType != "" && q.ResourceID != "", nil
+3
View File
@@ -1,3 +1,6 @@
AccountEntry
AccountLister
AccountLister.ListAccounts
AdminProvider
AdminProvider.IsAdmin
AdminZoneSpec