awesome-copilot 中 Tiny Tool Town Submitter 扩展详解:从仓库检查到提交 Listing Issue 的完整工作流
awesome-copilot 中 Tiny Tool Town Submitter 扩展详解从仓库检查到提交 Listing Issue 的完整工作流【免费下载链接】awesome-copilotCommunity-contributed instructions, agents, skills, and configurations to help you make the most of GitHub Copilot.项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-copilot导读Tiny Tool Town Submitter 是 awesome-copilot 仓库中提供的一个 GitHub Copilot Canvas 扩展它把将一个开源仓库提交到 Tiny Tool Town 工具目录这件事做成了一条流水线从当前 Git 仓库出发自动检查并提取 Tiny Tool Town 要求的全部提交字段评估仓库的就绪度README、许可证、展示图、仓库可见性等借助 Copilot SDK 起草三种长度的描述文案最后通过 GitHub CLI 直接在目标仓库创建 Listing Issue。读完本文你将掌握该扩展的四大 Action 用法、元数据字段与校验规则、就绪度推荐项的判定逻辑以及它背后的本地服务、隔离会话与防重复提交设计。扩展定位为上架 Tiny Tool Town而生的提交工作台根据 extensions/tiny-tool-town-submitter/README.md该扩展的职责是检查当前 Git 仓库核对 Tiny Tool Town 要求的每个字段并从 Copilot Canvas 提交一份完整的 Listing Issue。除了采集信息Canvas 还会做三类公共仓库就绪度检查是否存在 README 指南、许可证与展示图片并在发现问题时可以请求一个专用的 Copilot 项目会话来实施选中的改进建议。扩展的插件元数据位于 plugins/tiny-tool-town-submitter/plugin.json版本 1.0.2作者 James Montemagno它把扩展入口./extensions/tiny-tool-town-submitter注册到com.github.awesome-copilot命名空间下。整体代码由四个文件组成文件职责extension.mjsCanvas 生命周期、本地 HTTP 服务、四大 Action 的 HTTP 端点与状态持久化lib/analyzer.mjs仓库元数据采集、就绪度检查、提交校验与 Issue 正文构建lib/copy-generator.mjs用 Copilot 会话起草短/均衡/详细三种描述文案lib/renderer.mjsCanvas 界面表单、指标卡、推荐项、主题预览的 HTML 渲染运行前提GitHub CLI 与仓库路径扩展对环境的依赖很明确见 README.md 与 extension.mjsGitHub CLIgh必须已安装并完成认证否则无法验证仓库可见性也无法创建 Issue必须从项目会话project session打开 Canvas或在输入参数中显式传入repoPath。扩展通过ctx.input?.repoPath || ctx.session?.workingDirectory解析仓库路径两者都缺失时会抛出repository_unavailable错误extension.mjs目标提交仓库被硬编码为shanselman/TinyToolTownextension.mjs提交动作全部走gh子命令单次执行超时 30 秒、输出缓冲上限 1 MB。四大 Action 详解Canvas 的注册说明extension.mjs与 README.md 中列出了四个用户可见的 Action它们在 Canvas 界面中分别对应不同的交互入口。1. Re-scan repository刷新检测结果对应 Canvas 注册的inspect_repositoryActionextension.mjs也对应界面右上角的 Re-scan repository 按钮renderer.mjs。每次扫描会调用 lib/analyzer.mjs 的inspectRepository()先通过git rev-parse --show-toplevel定位仓库根目录然后依次收集 README按README.md、readme.md、README、README.rst等候选名查找、许可证文件、package.json、git remote get-url origin并调用gh repo view拉取 GitHub 元数据可见性、是否归档、默认分支、主题标签、仓库 Topics 等。界面顶部的四个指标卡即来自这些事实README是否存在 README 文件License file根目录是否存在LICENSE/LICENCE系列文件Showcase image是否在 README 中检测到合适的展示图详见下文展示图检测GitHub visibility仓库是 Public / Private / Unverified。2. Generate options用 Copilot SDK 起草描述界面中 Generate options 按钮触发/generate-descriptions端点renderer.mjs其核心实现在 lib/copy-generator.mjs。扩展会启动一个隔离的 Copilot 会话createSession时传入availableTools: []并在系统消息中追加仅返回 JSON、禁止使用工具、禁止副作用的约束见 extension.mjs然后让该会话一次产出三种长度的描述选项 id标签目标长度词数校验区间shortShort一句20-35 词8–45mediumBalanced两句45-70 词25–100detailedDetailed三到四句80-120 词45–180提示词copy-generator.mjs明确要求把源数据当作不可信事实绝不编造功能、采纳量、性能声明或动机并将名称、现有一行描述、标签、语言、许可证、网站等限定长度后作为 Source JSON 传入。返回结果必须是指定 JSON 形状{short:...,medium:...,detailed:...}且三者的词数必须严格递增否则解析会直接报错copy-generator.mjs。用户在界面里点击 Use this option 即可把选中文案回填到草稿。3. Start improvement session把改进项交给专属会话当扫描结果里存在推荐项时Canvas 底部 Start improvement session 按钮会调用/implement端点renderer.mjs。requestImprovementSession()extension.mjs会把勾选的推荐项组装成一段 kickoff 提示通过当前活动会话请求create_session工具新建一个本地项目会话coordinate_with_creator: true、notify_on_idle: once、名称 Tiny Tool readiness、kickoff 模式 autopilot把补齐这些就绪度缺口的工作交出去而当前会话不做任何修改随后仅返回一行确认。4. Submit to Tiny Tool Town查重并创建公开 Issue提交按钮触发/submit端点renderer.mjs最终进入submitIssue()extension.mjs。流程分三步强制确认请求体必须带confirm: true否则返回confirmation_required错误查重先用gh issue list --repo shanselman/TinyToolTown --state all --search githubUrl in:body搜索是否已有同仓库 URL 的提交命中则直接返回既有 Issue 链接标记existing: true不会重复创建创建未命中时执行gh issue create标题固定为[Tool] namelabel 为new-tool正文由buildIssueBody()生成详见下文。另外提交前会调用validateSubmission()做一次完整的合法性校验analyzer.mjs任何不满足都会以submission_invalid错误中止。元数据字段与界面表单Canvas 表单对应metadataSchemaextension.mjs与界面字段renderer.mjs字段、是否必填与约束如下字段必填约束name是工具名称Issue 标题前缀tagline是一行描述maxLength: 100字符界面实时显示计数description是工具详情可用 Generate options 生成githubUrl是规范化的https://github.com/owner/repoURLwebsiteUrl否网站/演示地址必须是合法 URLthumbnailUrl否展示图 URL必须是合法 URL界面提示 PNG/JPG/WebP/GIF、建议至少 960x540author是作者姓名authorGitHub是GitHub 用户名tags是逗号分隔的发现标签最多保留 6 个language否主要编程语言license否许可证标识theme否页面主题见下文主题列表confirmations是三个布尔确认freeOpenSource、notEnterpriseSaas、publicAndWorks扫描时这些字段大部分会自动预填analyzer.mjsname优先取package.json的displayName/name或 GitHub 仓库名tagline从描述截断到 100 字符author通过gh api users/login查询tags合并package.jsonkeywords、GitHub Topics、主语言与open-source不足 3 个时依次补充developer-tools、productivity、utilitytheme默认 None (site default)三项confirmations默认全部为false必须由用户手动勾选。主题与实时预览主题来自THEMES常量analyzer.mjs共 13 项None (site default)、terminal、neon、minimal、pastel、matrix、sunset、ocean、forest、candy、synthwave、newspaper、retro。界面右侧的主题工作台renderer.mjs为每个主题维护一套配色背景、卡片、文字、主色、强调色、标签色、字体切换下拉框即可在浏览器标签样式的预览卡片中实时看到效果包括工具名、一行描述和标签的呈现。提交校验哪些情况会被拒绝validateSubmission()analyzer.mjs是提交前最后一道闸门校验点包括七个必填字段name、tagline、description、githubUrl、author、authorGitHub、tags任一为空即拒绝tagline超过 100 字符即拒绝githubUrl必须是规范的https://github.com/owner/repository形式并且owner/repo 必须与当前被检查仓库的 slug 一致gitgithub.com:形式的 remote 会自动归一化为 HTTPS见normalizeGitUrl()websiteUrl、thumbnailUrl非空时必须可通过new URL()解析theme必须在支持列表内三项confirmations必须全部为true若 GitHub 元数据显示仓库为私有isPrivate或已归档isArchived同样直接拒绝——Tiny Tool Town 只接受公开且处于活跃状态的项目。生成的 Issue 正文结构buildIssueBody()analyzer.mjs按 Tiny Tool Town 的模板生成 Markdown 正文依次是Tool Name、One-line description、Tell us about your tool、GitHub Repository URL、Website or Demo URL (optional)、Thumbnail image URL (optional)、Your Name、Your GitHub Username、Tags (comma-separated)、Primary Programming Language、License、Page Theme (optional)并以三条已勾选的 Checklist 结尾free and open source、not enterprise software or paid SaaS、repo is public and the tool works。可选字段为空时输出N/A。此外publicIssueMetadata()会对正文做 提及抑制把替换为零宽字符避免提交内容意外触发 GitHub 用户提醒。就绪度推荐自动发现上架前缺口扫描产生的recommendations数组analyzer.mjs是 Canvas 第二阶段Finish the curb appeal的数据来源每条推荐带severityblocking/recommended/suggestion、title、detail和可直接喂给实施会话的prompt。完整清单如下推荐 id严重级别触发条件add-readmeblocking仓库没有 READMEdocument-installationrecommended有 README 但缺少 Install/Installation/Quick Start 章节document-usagerecommended有 README 但缺少 Usage/Examples/How to use 章节add-licenseblocking根目录没有许可证文件即使 package.json 声明了 SPDX 许可add-thumbnailrecommendedREADME 中未检测到展示图建议 16:9、至少 960x540improve-image-altsuggestion有展示图但 alt 文本为空make-publicblocking仓库为私有verify-public-reporecommended无法用 GitHub CLI 验证可见性未认证或 remote 非 GitHubunarchive-repositoryblocking仓库已归档verify-working-releasesuggestion常驻建议从干净环境按 README 完整跑通主流程界面按严重级别用不同颜色的徽标区分blocking与recommended级别的推荐默认处于勾选状态renderer.mjs。blocking数量为 0 时顶部状态标签会显示绿色 Ready for final review。支撑这些判定的检测细节README 章节检测通过正则(^|\n)#{1,4}\s(install|installation|getting started|quick start)\b与(usage|examples?|how to use)\b匹配标题analyzer.mjs许可证识别detectLicenseText()根据文件内容关键词识别 MIT、Apache-2.0、GPL-3.0、GPL-2.0、BSD-2/3-Clause、MPL-2.0、ISC、Unlicense识别失败再回退到package.json的license字段和 README 文本analyzer.mjs主语言判定优先用gh repo view的primaryLanguage否则扫描源码扩展名计数内置约 30 种语言映射跳过.git、node_modules、dist、target、vendor等目录遍历深度不超过 6 层、文件访问上限 12000见 analyzer.mjs展示图检测从 README 中按出现顺序提取 Markdown 图片与img标签过滤掉徽章类主机img.shields.io、avatars.githubusercontent.com、contrib.rocks等和.svg/contributors/sponsors 链接把相对路径换算为raw.githubusercontent.com的完整 URLanalyzer.mjs构建信号检测package.json中是否有test/build脚本或存在Makefile、Cargo.toml、go.mod、pyproject.toml、requirements.txt、*.csprojanalyzer.mjs。草稿持久化与安全性设计扩展把已填写的表单和提交结果持久化到活动会话工作区的files/tiny-tool-town-submitter.jsonextension.mjs。重新扫描时inspect()会尽量保留用户手工填写的字段非空字符串与已勾选的确认项避免刷新把草稿冲掉extension.mjs。安全方面有三层设计extension.mjs每个 Canvas 实例启动一个绑定127.0.0.1随机端口的本地 HTTP 服务URL 携带一次性token所有接口除首页外均校验 token非法请求返回 403首页响应带严格的Content-Security-Policy脚本/样式使用 nonceconnect-src self禁用base-uri与form-action请求体限制为 256 KBMAX_REQUEST_BYTES超限返回 413且只接受合法 JSON。安装与使用方式该扩展已作为插件打包在 awesome-copilot 中可通过 Copilot CLI 的插件命令安装见 plugins/tiny-tool-town-submitter/README.mdbash copilot plugin install tiny-tool-town-submitterawesome-copilot安装后在任意项目会话中打开 Tiny Tool Town Submitter Canvas可显式传入repoPath依次经历扫描 → 编辑表单 → 生成描述 → 勾选改进项 → 提交即可完成整个上架流程。整个过程不会在当前会话中改动仓库代码改进工作会通过独立项目会话执行仓库内容仅供查看与配置提交的是 Tiny Tool Town 目录的 Listing Issue而非修改本仓库。小结一条完整的上架前流水线从源码结构看Tiny Tool Town Submitter 把人工容易遗漏的上架细节拆成了可检查、可验证、可委派的步骤inspectRepository()负责看generateDescriptionOptions()负责写requestImprovementSession()负责改submitIssue()负责交validateSubmission()与buildIssueBody()则保证提交内容合法、格式正确且不重复。对于任何想把自己或社区的开源工具收录进 Tiny Tool Town 目录的开发者它都提供了一条从当前仓库一键直达公开 Issue 的完整路径。【免费下载链接】awesome-copilotCommunity-contributed instructions, agents, skills, and configurations to help you make the most of GitHub Copilot.项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-copilot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考