logo
59
171
WeChat Login

支持npc在comment中上传附件#3568

Open
created 2 weeks ago
Edit

这个特性将解决什么问题?

我想要npc在comment中临时上传一个附件供我调试,但从 acidbunny/investment-banking#1 来看,上传文件异常艰难,要先去翻阅openapi 文档告诉codebuddy可行性,还要给他开发者权限

设想的解决方案?如有

  1. 希望给codebuddy 提供评论上传附件skill
  2. 希望降低评论上传附件的权限要求(仅讨论)
Creator

为啥要降低权限要求:因为任意注册用户都可以在issue附件中上传文件,比如我

shtgs66843705000.jpg
Creator

@CodeBuddy 去随便找个文件上传,添加到comment 回复中。你可能想要参考openapi文档 https://api.cnb.cool/#/operations/UploadFiles

@samsong(AcidBunny)

我尝试通过 OpenAPI 文档中的 UploadFiles 接口上传文件,流程如下:

上传流程分析

根据 OpenAPI 文档(POST /{repo}/-/upload/files),文件上传分两步:

  1. 获取上传 URL:调用 POST /{repo}/-/upload/files,传入 {name, size, ext},返回 {upload_url, form, token, assets}
  2. 流式上传文件:使用 PUT 方法将文件内容上传到返回的 upload_url

上传完成后,文件可通过 assets.path 访问(格式如 /{slug}/-/files/xxx/xxx/xxxx.txt),然后在评论中引用即可。

实际尝试结果

我创建了一个测试文件 test-upload.txt(60 字节),调用上传接口时返回了权限错误:

errcode: 7
errmsg: "The bill authorization scope cannot access the current request."

该接口要求 repo-contents:rw 权限,而当前 CodeBuddy 的访问令牌不包含此权限范围。

结论

这恰好验证了你在这个 Issue 中提到的问题 —— CodeBuddy 想要在评论中上传附件,但当前令牌权限不足。要让 CodeBuddy 能顺利上传文件,需要为其授予 repo-contents:rw 权限(对应"账单授权范围")。

npc默认确实没权限,得上班模式才可以,skills晚点优化一下

Creator

那么为什么我个人有在别人仓库上传附件的权限呢

added priority
P0
added labels
有道理:听劝
,removed labels
仅讨论
added labels
已解决:已生效
Resolved ISSUE
Reopen
Creator

skills 似乎没优化。

acidbunny/snownlp#1 (comment)

@npc/office(ppt) 来帮我做个富有教育意义的ppt,面向自然语言处理的同学。同学们没有编程背景,所以请侧重自然语言处理理论,辅以少量代码片段。你可以先看看officecli内置的theme,并使用一个带有科技感的。

完成之后你可以上传到issue附件,参考

发起一个上传 files 的请求,返回上传文件的url,请使用 put 发起流式上传。Initiate a request to upload files,returns upload URL.Use PUT to initiate a stream upload.
post
/{repo}/-/upload/files

访问令牌调用此接口需包含以下权限。Required permissions for access token.
repo-notes:rw

上传完成记得curl检查一下链接是否可用,然后把链接放到comment中
Creator

目前还是需要手动添加这个 openapi 路径

Creator

目前还是需要手动添加这个 openapi 路径

Resolved ISSUE
Reopen
Creator

话说, @CodeBuddy 能不能看到 api.cnb.cool 文档?你是直接内置skills,还是需要curl并解析内容?

@samsong(AcidBunny)

好问题!关于文档访问方式,我有两种能力:

1. 内置 Skills(预定义能力)

  • 我有预置的 skills,比如 cnb-api(操作 CNB 资源)、cnb-knowledge-base(查询 CNB 官方文档)等
  • 这些是平台预先配置好的标准化工具
  • 比如查询 CNB 平台用法时,我会用 cnb-knowledge-base skill 去获取官方文档

2. 动态网页抓取(WebFetch)

  • 我也可以使用 WebFetch 工具主动访问任意 URL(包括 api.cnb.cool)
  • 会自动将 HTML 转 Markdown 并解析内容
  • 所以是的,我能看到 api.cnb.cool 的文档 😄

简单说:两者都有。 常用的平台操作走内置 skills,遇到新文档或不常见需求时我会用 WebFetch 去读取。

如果你想让我去查看 api.cnb.cool 上传附件相关的接口文档,随时说~

Assignee
(晶晶)
Label
已解决:已生效
有道理:听劝
Priority
P0
Time period
-
Property
Add custom properties to record and label key information
Participant