Publish agent-radar via gitea-publish skill
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
# ============================================================
|
||||
# 许可证成色分级 → 镜像可见性规则
|
||||
# ------------------------------------------------------------
|
||||
# 这是新增项目时的**第一判断项**:先定级,再决定源码镜像能不能公开。
|
||||
# 定错级的代价:L3 项目被公开镜像,等于替对方做了一次未经授权的公开分发。
|
||||
#
|
||||
# 判定顺序自上而下,命中即停。
|
||||
# ============================================================
|
||||
|
||||
tiers:
|
||||
|
||||
- level: L1
|
||||
label: 完全开源
|
||||
redistributable: true
|
||||
visibility: public
|
||||
match_spdx:
|
||||
- MIT
|
||||
- Apache-2.0
|
||||
- BSD-2-Clause
|
||||
- BSD-3-Clause
|
||||
- ISC
|
||||
- MPL-2.0
|
||||
- GPL-2.0
|
||||
- GPL-3.0
|
||||
- LGPL-3.0
|
||||
- Unlicense
|
||||
note: "可自由镜像与再分发,保留原许可证声明即可。"
|
||||
|
||||
- level: L2
|
||||
label: 有限开源
|
||||
redistributable: true
|
||||
visibility: public
|
||||
match_spdx:
|
||||
- AGPL-3.0
|
||||
- SSPL-1.0
|
||||
- BUSL-1.1
|
||||
- Elastic-2.0
|
||||
note: "有附加限制(网络使用即触发开源义务、或限制商业化托管)。可公开镜像,但档案中必须记录限制条款。"
|
||||
|
||||
- level: L3
|
||||
label: 源码可得 · 非开源
|
||||
redistributable: false
|
||||
visibility: private
|
||||
match_spdx:
|
||||
- NOASSERTION
|
||||
- OTHER
|
||||
- LicenseRef-scanned
|
||||
note: |
|
||||
SPDX 无法识别的自定义许可,典型为 source-available。
|
||||
必须人工读 LICENSE 原文确认,再决定是否归 L3 或 L4。
|
||||
判为 L3 时镜像**一律私有**,仅作个人代码级研究,不构成公开分发。
|
||||
|
||||
- level: L4
|
||||
label: 不可得
|
||||
redistributable: false
|
||||
visibility: none
|
||||
match_spdx:
|
||||
- ""
|
||||
- null
|
||||
note: "无 LICENSE 文件或明确 proprietary。不镜像,档案里只留仓库链接与 commit 快照。"
|
||||
|
||||
# ---------- 人工复核触发条件 ----------
|
||||
# 命中以下任一情形,脚本必须停下来要求人工确认,不得自动定级:
|
||||
manual_review_triggers:
|
||||
- "SPDX 为 NOASSERTION 且 LICENSE 文件超过 200 行(条款复杂,容易漏掉分发限制)"
|
||||
- "同一仓库存在多个 LICENSE 文件(如 LICENSE + LICENSES/ 目录,可能混合许可)"
|
||||
- "README 自称 open source 但 SPDX 不是 OSI 认证标识(名实不符,需显式记录)"
|
||||
- "LICENSE 中出现 SaaS / hosting / white-label / marketplace / resale 任一关键词"
|
||||
|
||||
# ---------- 已定级样本(供后续同类项目参照) ----------
|
||||
precedents:
|
||||
- repo: Devin-AXIS/iPolloWork
|
||||
level: L3
|
||||
visibility: private
|
||||
license_name: "iPolloWork Source Available License 1.0"
|
||||
decided_at: 2026-09-01
|
||||
reason: |
|
||||
条款原文要求:任何售卖、转售、收费服务、SaaS、托管、白标、市场分发或
|
||||
面向客户的使用,无论个人还是企业,均需事先书面授权;且面向用户的前端
|
||||
必须保留 iPolloWork 名称、Logo 与产品归属。公开镜像落入「托管/市场分发」
|
||||
的解释空间,故设为私有。
|
||||
@@ -0,0 +1,148 @@
|
||||
# ============================================================
|
||||
# agent-radar · 项目档案 Schema
|
||||
# ------------------------------------------------------------
|
||||
# 本文件有双重身份:
|
||||
# 1) 人类阅读的填写规范(desc / note 字段)
|
||||
# 2) scripts/new_project.py 的机器可读骨架生成源
|
||||
# 改结构时两处要同步,否则脚本生成的空档案会缺字段。
|
||||
#
|
||||
# 五维度设计意图:
|
||||
# 业务(business) — 它靠什么活着、为谁活着
|
||||
# 场景(scenario) — 它在什么场合被用、产出什么
|
||||
# 技术(tech) — 它怎么做到的、抽象在哪一层
|
||||
# 生态(ecosystem) — 它的社区动能(多数字段由脚本自动刷新)
|
||||
# 风险(risk) — 它的坑在哪、宣称与实测的落差
|
||||
# 其中 risk.claim_vs_reality 是全套 schema 里最不该留空的字段:
|
||||
# 它逼着每篇分析去核实「项目方宣称 vs 实际状态」,防止文章退化成 README 复读。
|
||||
# ============================================================
|
||||
|
||||
version: 1
|
||||
|
||||
# ---------- 枚举值 ----------
|
||||
enums:
|
||||
status: [active, watch, archived] # active=持续追踪 watch=观察中 archived=停更归档
|
||||
openness: [L1, L2, L3, L4] # 许可证成色分级,详见 license-tiers.yaml
|
||||
vendor_type: [startup, bigtech, community, solo, unknown]
|
||||
interaction_mode: [cli, ide-plugin, desktop-app, web-app, api, editor-fork]
|
||||
human_in_the_loop: [autonomous, approval-gated, supervised, manual]
|
||||
maturity: [concept, preview, beta, stable, mature]
|
||||
model_binding: [locked, preferred, byom, neutral] # locked=仅自家模型 byom=自带模型 neutral=完全中立
|
||||
visibility: [public, private, none]
|
||||
|
||||
# ---------- 字段定义 ----------
|
||||
# type 用于脚本生成占位值:str->"" int->0 bool->false list->[] dict->{}
|
||||
fields:
|
||||
|
||||
# ===== 顶层标识 =====
|
||||
id: {type: str, required: true, desc: "档案唯一标识,小写连字符,如 ipollowork"}
|
||||
name: {type: str, required: true, desc: "项目显示名"}
|
||||
repo: {type: str, required: true, desc: "GitHub 仓库 owner/name"}
|
||||
homepage: {type: str, required: false, desc: "官网"}
|
||||
added_at: {type: str, required: true, desc: "收录日期 YYYY-MM-DD"}
|
||||
status: {type: str, required: true, enum: status, desc: "追踪状态"}
|
||||
|
||||
# ===== 身份层 =====
|
||||
identity:
|
||||
tagline: {type: str, required: true, desc: "一句话定位,优先用官方原文"}
|
||||
vendor: {type: str, required: false, desc: "背后公司/组织"}
|
||||
vendor_type: {type: str, required: false, enum: vendor_type}
|
||||
region: {type: str, required: false, desc: "团队所在地,如 中国/美国/欧洲"}
|
||||
first_seen: {type: str, required: false, desc: "首次公开时间"}
|
||||
|
||||
# ===== 业务维度 =====
|
||||
business:
|
||||
positioning: {type: str, required: true, desc: "它在产业链里到底站在哪一层"}
|
||||
target_users: {type: list, required: true, desc: "目标用户群"}
|
||||
monetization: {type: str, required: true, desc: "变现方式:捐赠/商业授权/SaaS/双轨/未定"}
|
||||
license:
|
||||
spdx: {type: str, required: true, desc: "SPDX 标识,如 MIT / Apache-2.0 / NOASSERTION"}
|
||||
name: {type: str, required: true, desc: "许可证实际名称"}
|
||||
openness: {type: str, required: true, enum: openness, desc: "成色分级 L1-L4"}
|
||||
redistributable: {type: bool, required: true, desc: "可否公开再分发 —— 直接决定镜像可见性"}
|
||||
key_restrictions: {type: list, required: false, desc: "关键限制条款原文要点"}
|
||||
moat: {type: str, required: false, desc: "护城河/不可轻易复制的部分"}
|
||||
competitive_risk: {type: str, required: false, desc: "最容易被谁替代、为什么"}
|
||||
|
||||
# ===== 场景维度 =====
|
||||
scenario:
|
||||
primary: {type: list, required: true, desc: "核心场景"}
|
||||
typical_use_cases: {type: list, required: true, desc: "典型用例,写给读者看的具体例子"}
|
||||
industries: {type: list, required: false, desc: "行业落点"}
|
||||
interaction_mode: {type: list, required: true, enum: interaction_mode, desc: "交互形态,可多选"}
|
||||
human_in_the_loop: {type: str, required: true, enum: human_in_the_loop, desc: "人机协作模式"}
|
||||
deliverables: {type: list, required: true, desc: "交付物类型:code/doc/ppt/website/design/video/data/report"}
|
||||
|
||||
# ===== 技术维度 =====
|
||||
tech:
|
||||
form_factor: {type: str, required: true, desc: "产品形态:CLI/IDE插件/桌面应用/Web平台/库"}
|
||||
stack: {type: list, required: true, desc: "技术栈"}
|
||||
engine_abstraction:
|
||||
supported: {type: list, required: false, desc: "支持的 agent 引擎/runtime"}
|
||||
mechanism: {type: str, required: false, desc: "统一接入机制描述"}
|
||||
abstraction_layer: {type: str, required: false, desc: "抽象层名称,如 Engine Protocol"}
|
||||
depth_notes: {type: str, required: false, desc: "**关键**:各引擎接入深度是否对等,逐个说明"}
|
||||
extension_system:
|
||||
skills: {type: str, required: false, desc: "Skills 支持情况"}
|
||||
plugins: {type: str, required: false, desc: "插件机制"}
|
||||
mcp: {type: str, required: false, desc: "MCP 支持方式"}
|
||||
model_binding: {type: str, required: true, enum: model_binding, desc: "模型绑定程度"}
|
||||
local_first: {type: bool, required: true, desc: "是否可完全本地运行"}
|
||||
multi_agent: {type: str, required: false, desc: "多 Agent 编排方式"}
|
||||
permission_sandbox: {type: str, required: false, desc: "权限审批与沙箱机制"}
|
||||
observability: {type: str, required: false, desc: "执行过程可观测性"}
|
||||
|
||||
# ===== 生态维度(metrics 由 fetch_stats.py 自动刷新,勿手填) =====
|
||||
ecosystem:
|
||||
metrics:
|
||||
stars: {type: int, auto: true}
|
||||
forks: {type: int, auto: true}
|
||||
open_issues: {type: int, auto: true}
|
||||
subscribers: {type: int, auto: true}
|
||||
created_at: {type: str, auto: true}
|
||||
pushed_at: {type: str, auto: true}
|
||||
size_kb: {type: int, auto: true}
|
||||
languages: {type: dict, auto: true}
|
||||
latest_release: {type: str, auto: true}
|
||||
release_cadence: {type: str, auto: true}
|
||||
data_date: {type: str, auto: true, desc: "本组数据的抓取日期"}
|
||||
stale: {type: bool, auto: true, desc: "true=本次抓取失败,沿用上次快照"}
|
||||
community: {type: str, required: false, desc: "社区形态与活跃度"}
|
||||
standards: {type: list, required: false, desc: "采纳/挂靠的标准与联盟,如 OPEA/OpenSSF"}
|
||||
notable_events: {type: list, required: false, desc: "关键事件与时间点"}
|
||||
|
||||
# ===== 风险维度 =====
|
||||
risk:
|
||||
license_risk: {type: str, required: true, desc: "许可证带来的使用/分发风险"}
|
||||
vendor_lockin: {type: str, required: false, desc: "供应商锁定点"}
|
||||
# 结构化三项式:claim / actual / source。不用裸字符串,
|
||||
# 因为 build_matrix.py 要把它渲染成表格,且缺 source 的断言无法复核。
|
||||
claim_vs_reality: {type: list, required: true, desc: "**必填**:每项为 {claim, actual, source} 三项,写清 宣称/实际/证据来源"}
|
||||
maturity: {type: str, required: true, enum: maturity}
|
||||
|
||||
# ===== 象限图坐标(0-10,人工评定,供 build_matrix.py 出图) =====
|
||||
# 评分是主观判断,但一旦统一口径,横向比较就成立了。
|
||||
# 评完请回头看一眼:如果所有项目都打 9 分,说明这套轴失去了区分度。
|
||||
chart:
|
||||
form_depth: {type: int, required: false, desc: "形态纵深:0=单点工具 10=统一工作台"}
|
||||
engine_neutral: {type: int, required: false, desc: "引擎立场:0=绑定单引擎 10=多引擎中立"}
|
||||
local_first_score: {type: int, required: false, desc: "本地优先:0=强云依赖 10=完全本地可跑"}
|
||||
deliverable_depth: {type: int, required: false, desc: "交付物纵深:0=只出代码 10=多模态可编辑产出"}
|
||||
|
||||
# ===== 结论 =====
|
||||
verdict:
|
||||
one_liner: {type: str, required: true, desc: "一句话结论,进总纲索引表"}
|
||||
who_should_use: {type: str, required: true}
|
||||
who_should_not: {type: str, required: true}
|
||||
|
||||
# ===== 镜像与文章回写 =====
|
||||
mirror:
|
||||
gitea_repo: {type: str, required: false, desc: "gitinbox 下的镜像仓,如 gitinbox/iPolloWork"}
|
||||
visibility: {type: str, required: false, enum: visibility}
|
||||
upstream: {type: str, required: false}
|
||||
last_sync: {type: str, required: false}
|
||||
sync_note: {type: str, required: false, desc: "如体积过大改用 treeless clone 等降级说明"}
|
||||
|
||||
article:
|
||||
emlog_id: {type: int, required: false, desc: "emlog 文章 ID,发布后回写"}
|
||||
published_at: {type: str, required: false}
|
||||
url: {type: str, required: false}
|
||||
Reference in New Issue
Block a user