feat: 客户端 API Key 可上传 Agent APK,并可单独授权设置当前版本 #384
Open
opened 2026-10-12 18:03:24 +08:00 by ila
·
2 comments
No Branch/Tag Specified
main
feat/384-client-key-agent-release
feat/383-collection-device-filter
feat/382-purchase-creator-filters
feat/381-syb-cancelled-block
feat/375-open-in-pdd
feat/380-status-device-connection
fix/370-horizontal-grid
feat/372-export-shop
feat/378-heartbeat-diagnostics
feat/372-export-price
feat/372-list-export
fix/377-rejected-purchase-outbox
fix/376-pre-address-spec-verification
fix/374-final-spec-confirmation
fix/373-navigation-diagnostics
fix/370-color-discovery
feat/367-last-batch-repurchase
fix/368-image-search-partial-link
integration/364-365-366-main
feat/364-purchase-failure-snapshot
integration/365-366-validation
fix/365-order-result-observation
fix/366-address-editor-ready
fix/359-auto-match-resume
feat/363-inner-code-page-size
fix/362-truncated-spec-card
fix/361-spec-probe-click
docs/agents-worktree-rules
fix/358-syb-size-weight
feat/357-syb-cancel-status
feat/356-purchase-order-filter
fix/355-syb-list-timeout
feat/353-syb-shop-multiselect
fix/354-syb-top-pagination
fix/352-syb-source-created
fix/348-reveal-swipe
feat/340-syb-excluded-products
fix/351-inner-code-apply-selection
fix/350-match-layout
fix/350-inner-code-matching
feat/349-batch-return-use
feat/347-batch-return-cancel
feat/345-yeeke-reship
fix/346-root-serves-spa
fix/344-inner-code-stall-match
fix/343-syb-writeback-session
feat/339-syb-page-size
feat/338-return-match
feat/337-yeeke-admin-ui
feat/336-yeeke-return-sync
fix/335-bottom-submit-node
fix/334-spec-probe-top-swipe
fix/333-purchaser-device-owner
fix/331-spec-panel-recognition
fix/330-syb-writeback-session
feat/327-syb-writeback-filter
feat/326-order-information
fix/325-order-result
feat/316-chrome-order-backfill
fix/307-backfill-entry
feat/305-syb-order-writeback
feat/306-order-paid-amount
release/283
fix/283-purchase-mapping-consistency
fix/230-horizontal-spec-selection
feat/263-spec-rematch
fix/262-purchase-handoff
fix/260-261-purchase-readiness
fix/259-partial-collection-link
feat/258-one-click-replace
fix/257-color-normalized-match
fix/256-collection-single-dimension
fix/255-current-page-reidentify
feat/253-one-click-link
fix/254-match-loading
fix/251-syb-spec-candidates
feat/250-continuous-collection
fix/249-local-purchase-diagnostics
fix/248-bottom-submit
fix/247-short-address-panel
fix/246-address-return-panel
fix/245-purchase-failure-diagnostics
fix/244-selected-card-duplicates
fix/243-spec-entry-recovery
feat/242-agent-order-backfill
feat/241-order-backfill-endpoint
fix/239-syb-partial-sync
fix/238-spec-panel-preswipe
feat/237-client-api-keys
feat/236-purchaser-syb-sync
fix/235-syb-pagination-overlap
release/234-integrated
fix/229-address-entry-dedup
fix/228-selection-proof-panel-transition
fix/227-address-panel-return
fix/226-reopen-pdd-on-manual-retry
fix/225-in-place-purchase-retry
fix/224-final-spec-revalidation
fix/223-probed-confirmed-mapping
chore/221-devharness-sync
feat/218-purchase-result-bubble
fix/217-agent-retry-current-spec
fix/216-syb-spec-role-order
feat/215-mandatory-live-spec-probe
feat/214-verified-purchase-actions
fix/212-syb-sync-shop-snapshot
feat/211-spec-entry-ready-wait
feat/210-order-result-payment-transition
feat/209-pdd-bottom-spec-entry
feat/200-ai-match-result-purchase-ready
feat/199-job-execution-logs
feat/198-syb-ai-parse
feat/195-scheduled-spec-auto-match
fix/197-ai-write-timeout
feat/190-syb-inline-correction
fix/193-address-entry-reveal
feat/194-one-click-spec-match
fix/192-order-result-scroll
No results found.
Labels
No items
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: OPC/goauto#384
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
基本信息
已核验事实(
origin/main3495de9,2026-10-12)GET/POST /api/admin/v1/agent-app-releases、PUT /api/admin/v1/agent-app-releases/current、GET /:releaseId/download(server/app/goauto/apprelease/router.go),要求 JWT 且RequireRoleKey("admin");权限矩阵中均为非采购员(access/purchaser.go:24–27),归属模块devices(access/modules.go:142)。Upload(apprelease/handler.go:54):multipartfile+releaseNotes,MaxBytesReader(MaxAPKBytes+1MB),仅.apk,创建人取user.GetUserId(c)(JWT);服务端解析 Manifest 的 versionCode/versionName,保存 SHA-256、大小,校验 versionCode 唯一。SetCurrent(:82):JSON{requestId, releaseId},幂等。设为当前后 Agent 启动/手动检查即提示更新(安装仍由 Android 系统人工确认,设备有活动任务时禁止)。clientapi/routes.goInventory):路径前缀/api/client/v1,每个端点声明模块与能力(read/write/delete/动作名);devices模块当前只有GET /devices(read)。网关请求体上限 16MB(clientapi/gateway.go:83),每次请求写client_api_key_audit;key.Allows(module, capability)按密钥授权判断;操作人取密钥的AuthorizedBy。web/src/views/goauto/client-keys/,actionLabels已有activate: '设置当前规则')。目标
经授权的客户端 API Key 可以:①查看与上传 Agent APK 版本;②(单独授权)把某个已上传版本设为当前。现有密钥不自动获得这些能力。
非目标
方案
devices模块下两个新动作,需在密钥上显式勾选):release_upload「上传 Agent 版本」:GET /api/client/v1/agent-app-releases(列表)、POST /api/client/v1/agent-app-releases(上传)。release_activate「设置当前 Agent 版本」:PUT /api/client/v1/agent-app-releases/current。activate(其标签是「设置当前规则」,会混淆),也不挂在read/write上,避免已有 devices 读写密钥被动获得权限。clientapi/routes.go注册上述端点复用apprelease.Handler的List/Upload/SetCurrent;Upload的创建人改为统一取操作人:JWT 用户或客户端密钥AuthorizedBy(与采购operatorID同口径),不改变 Admin 行为。MaxAPKBytes+1MB;若MaxAPKBytes大于 15MB,则仅对上传端点放宽到 APK 上限(不全局放宽)。actionLabels新增release_upload: '上传 Agent 版本'、release_activate: '设置当前 Agent 版本';设为当前的勾选旁加风险提示「设为当前后,所有设备会提示更新」。设计证据
现有客户端密钥授权页沿用模块/动作勾选控件,只新增两个动作标签与一行风险提示;无新页面、无布局变化,不需要原型。
子项目影响、依赖与并行
clientapi/routes.go(及 Catalog 自动生成动作)、apprelease/handler.go(创建人取值)、可能clientapi/gateway.go(上传端点体积)及测试。views/goauto/client-keys/标签与提示。验收标准
release_upload可列表/上传、不可设为当前;授release_activate可设为当前;上传创建人为密钥授权人;Admin 原流程不变。release_upload,用该密钥上传 0.9.70(83)验证;设为当前另行确认。风险与回退
文档影响
开始实施(2026-10-12,Claude Code)
用户:「授权你建单,再按惯例交给 Sonnet 实施,最后部署到上线.」
D:/OPC/goauto-worktrees/issue-384,分支feat/384-client-key-agent-release,基线origin/main3495de9。实现、合并与发布(2026-10-12,Claude Code)
19484f0(服务端:devices 模块新增release_upload/release_activate,三个客户端端点复用 apprelease;上传创建人取密钥 AuthorizedBy;仅上传端点体积放宽到 MaxAPKBytes+1MB)、6107c23(Web 标签与风险提示)。无迁移(授权存 GrantsJSON,动作来自内存目录)。07800cf(--no-ff),已推送。/home/goauto/releases/20261012-07800cf-384,server SHA25658f4a0a4…2131(进程一致),index67c5fcee…098a;config 一致。发布时有 1 个采购执行中、32 个排队,服务器脚本等待「执行中=0 且 10 秒后复查=0」后于 18:34:38 切换并重启,active。/api/client/v1/agent-app-releasesGET/PUT 无密钥 401;下载路由 404(未开放)。日志无 panic/fatal/1146/1054。Nginx vhostclient_max_body_size 100m,APK 超过 100MB 会被 Nginx 拒绝。/home/goauto/releases/20261012-15bab9c-381-382-383并重启。