diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 980cd753..6fe5b34b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -226,6 +226,28 @@ jobs: needs: [go, race, cross, gui, csrc, docs] if: github.ref == 'refs/heads/main' && github.event_name == 'push' timeout-minutes: 10 + env: + # ══════════════════════════════════════════════════════════════════ + # ★★ gitcode 镜像目标仓名 —— **本 job 的唯一定义处**。 + # 改 gitcode 仓名时只改这一行;下面所有消费点都走 ${GC_REPO}。 + # 与 release.yml 的 sync-gitcode 保持同值(两个 workflow 各自独立 + # 定义:改的时候两个文件都要改,但每个文件内部只有一个定义处)。 + # + # 取值依据(实测 2026-10-21,直连不带代理,非推测): + # https://gitcode.com/JianFeeeee/HologramAgent → 200 ← 当前用这个 + # https://gitcode.com/JianFeeeee/HomeAgent → 301 ← 旧名,跳转到上面 + # https://gitcode.com/JianFeeeee/hologramagentsdk → 200(SDK 仓,另一对象) + # https://gitcode.com/JianFeeeee/homeagentsdk → 404 + # + # 背景:gitcode 侧镜像仓已由 HomeAgent 改名为 HologramAgent(与 GitHub + # 主仓同名)。旧地址仍 301 跳转,跟随后也能到达,但走重定向 ⇒ 别再用它。 + # 判定两仓同一对象:两地址 git ls-remote 的 refs 列表 md5 相同。 + # + # ⚠ 失败面:本 job 的 needs 是 [go, race, cross, gui, csrc, docs]。 + # 前置检查 exit 1 ⇒ 本 job 红 ⇒ **main 的整条 CI 红**(不是只红一格)。 + # release.yml 的 sync-gitcode 只红在镜像同步这一格(GitHub 侧产物已发)。 + # ══════════════════════════════════════════════════════════════════ + GC_REPO: JianFeeeee/HologramAgent steps: - id: tok name: 检查 gitcode 凭据 @@ -258,9 +280,7 @@ jobs: if: steps.tok.outputs.ok == 'true' env: GC_TOKEN: ${{ secrets.GITCODE_TOKEN }} - # 显式传环境变量(而不是 shell 局部变量):脚本的默认值与这里 - # 相同,但写在 env 里才是**真的传下去**,改仓名时不用改两处逻辑。 - GC_REPO: JianFeeeee/HologramAgent + # GC_REPO 来自 job 级 env(唯一定义处),此处不重复字面量。 run: | set -euo pipefail bash .github/scripts/check-gitcode-repo.sh @@ -271,6 +291,7 @@ jobs: run: | set -euo pipefail GC_URL="https://JianFeeeee:${GC_TOKEN}@gitcode.com" - git push "${GC_URL}/JianFeeeee/HologramAgent.git" \ + # GC_REPO 来自 job 级 env(唯一定义处),此处不重复字面量。 + git push "${GC_URL}/${GC_REPO}.git" \ "refs/heads/main:refs/heads/main" echo " gitcode/main 已快进到 ${GITHUB_SHA}" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2a8a2e20..3806e5b0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -352,6 +352,27 @@ jobs: if: needs.prepare.outputs.exists == 'false' runs-on: ubuntu-latest timeout-minutes: 60 + env: + # ══════════════════════════════════════════════════════════════════ + # ★★ gitcode 镜像目标仓名 —— **本 job 的唯一定义处**。 + # 改 gitcode 仓名时只改这一行;下面所有消费点都走 ${GC_REPO}。 + # 与 ci.yml 的 sync-gitcode-main 保持同值(两个 workflow 各自独立 + # 定义:改的时候两个文件都要改,但每个文件内部只有一个定义处)。 + # + # 取值依据(实测 2026-10-21,直连不带代理,非推测): + # https://gitcode.com/JianFeeeee/HologramAgent → 200 ← 当前用这个 + # https://gitcode.com/JianFeeeee/HomeAgent → 301 ← 旧名,跳转到上面 + # https://gitcode.com/JianFeeeee/hologramagentsdk → 200(SDK 仓,另一对象) + # https://gitcode.com/JianFeeeee/homeagentsdk → 404 + # + # 背景:gitcode 侧镜像仓已由 HomeAgent 改名为 HologramAgent(与 GitHub + # 主仓同名)。旧地址仍 301 跳转,跟随后也能到达,但走重定向 ⇒ 别再用它。 + # 判定两仓同一对象:两地址 git ls-remote 的 refs 列表 md5 相同。 + # + # ⚠ 失败面(与 ci.yml 不同,别搞混):本 job 只红在镜像同步这一格, + # GitHub 侧 release 产物此时已经发出去了;ci.yml 那个会红整条 main CI。 + # ══════════════════════════════════════════════════════════════════ + GC_REPO: JianFeeeee/HologramAgent steps: - uses: actions/checkout@v7 - id: tok @@ -381,9 +402,7 @@ jobs: if: steps.tok.outputs.ok == 'true' env: GC_TOKEN: ${{ secrets.GITCODE_TOKEN }} - # 显式传环境变量(而不是 shell 局部变量):脚本的默认值与这里 - # 相同,但写在 env 里才是**真的传下去**,改仓名时不用改两处逻辑。 - GC_REPO: JianFeeeee/HologramAgent + # GC_REPO 来自 job 级 env(唯一定义处),此处不重复字面量。 run: | set -euo pipefail bash .github/scripts/check-gitcode-repo.sh @@ -394,7 +413,7 @@ jobs: TAG: ${{ needs.prepare.outputs.tag }} run: | set -euo pipefail - GC_REPO="JianFeeeee/HologramAgent" + # GC_REPO 来自 job 级 env(唯一定义处),此处不重复字面量。 GC_URL="https://JianFeeeee:${GC_TOKEN}@gitcode.com" # 1) 推 tag(附件上传前 release 条目必须先存在) git config user.name "github-actions[bot]" @@ -414,5 +433,5 @@ jobs: # 不传文件名时它扫描 ASSET_DIR 并按后缀识别发布产物 —— 这里正合适 # (.deb/.tar.gz/SHA256SUMS 都在白名单里)。 # 不要传 "./x" 或 "dist/x":那会拼成 dist/dist/x。 - ASSET_DIR=. GITCODE_REPO=JianFeeeee/HologramAgent \ + ASSET_DIR=. GITCODE_REPO="${GC_REPO}" \ python3 ../deploy/scripts/upload_assets.py "$TAG" "$GC_TOKEN" diff --git a/README.md b/README.md index 908c6388..f929346b 100644 --- a/README.md +++ b/README.md @@ -240,7 +240,7 @@ internal/ ├── config/ SQLite 配置中心 ├── events/ 事件总线 └── internal/lua/adapters/ 10 个 LLM 协议适配器脚本 -外部插件开发见 [homeagent-sdk](https://github.com/JianFeeeee/homeagentsdk) 仓库,使用 `hmapdev` 工具链开发,参考 `example/` 目录下的 Go 和 Lua 示例 +外部插件开发见 [homeagentsdk](https://github.com/JianFeeeee/homeagentsdk) 仓库,使用 `hmapdev` 工具链开发,参考 `example/` 目录下的 Go 和 Lua 示例 ``` ## 项目状态 @@ -326,7 +326,7 @@ internal/ **v0.9.0** — C ABI v2:外部插件 Stage 回调支持写回(`invoke_stage` 增加 result 输出,插件可在 OnInput/AfterToolcall/PostAction 修改 RawMessage/LLMText/ToolResults 等并同步回内核),ABI 版本随内核 minor 对齐(v0.9.x → ABIVersion=2,`version_min=1` 向后兼容旧插件)。同步修复工具循环 zen 兼容补位误伤首轮 system 上下文的问题。配套 SDK 提供增强版 sanitizer 示例(坏 UTF-8/U+FFFD/ANSI 转义全链路清洗)。**该 ABI 已随 v1.0.0 退场。** -**v0.8.0** — 核心可用,插件系统增强。内置 20+ 插件,外部插件开发见 [homeagent-sdk](https://github.com/JianFeeeee/homeagentsdk) 仓库。新增输入通道 `NoMemory`/`Cleaner`、`ChannelDef`、插件禁用/启用系统(CLI + WebUI),`plugindev` 工具链完成 C ABI `ChannelDef` 传递。 +**v0.8.0** — 核心可用,插件系统增强。内置 20+ 插件,外部插件开发见 [homeagentsdk](https://github.com/JianFeeeee/homeagentsdk) 仓库。新增输入通道 `NoMemory`/`Cleaner`、`ChannelDef`、插件禁用/启用系统(CLI + WebUI),`plugindev` 工具链完成 C ABI `ChannelDef` 传递。 ## 文档 @@ -347,7 +347,7 @@ internal/ ## 下载 -[Releases](https://github.com/JianFeeeee/HomeAgent/releases) 提供三种变体: +[Releases](https://github.com/JianFeeeee/HologramAgent/releases) 提供三种变体: | 变体 | 内容 | 适用 | | --- | --- | --- | @@ -385,7 +385,7 @@ make install # 安装到系统 **通过网络提供服务时也要向使用者提供源码**(§13 Remote Network Interaction)。 即:任何人把改过的 HologramAgent 对外提供网络服务,都必须让该服务的使用者拿到改动后的源码。 -插件与本项目通过公开 [homeagent-sdk](https://github.com/JianFeeeee/homeagentsdk) 静态链接 +插件与本项目通过公开 [homeagentsdk](https://github.com/JianFeeeee/homeagentsdk) 静态链接 (SDK 源码会进入插件二进制),但那个仓**以 MIT 发布**——MIT 是宽松许可,拿到授权的代码不继承 本项目的 AGPL。因此**外部插件不是本项目的衍生作品**,作者可自行选择许可(含闭源、商业、私有), 既不必同许可、也不受 §13 网络条款约束。第三方插件生态的安全与活跃正建立在这条之上。 diff --git a/README_EN.md b/README_EN.md index 99fa5c32..223d2a68 100644 --- a/README_EN.md +++ b/README_EN.md @@ -221,7 +221,7 @@ internal/ ├── config/ SQLite config center ├── events/ Event bus └── internal/lua/adapters/ 10 LLM protocol adapter scripts -External plugin development: see [homeagent-sdk](https://github.com/JianFeeeee/homeagentsdk) repo, use `hmapdev` toolchain, refer to Go and Lua examples in `example/` +External plugin development: see [homeagentsdk](https://github.com/JianFeeeee/homeagentsdk) repo, use `hmapdev` toolchain, refer to Go and Lua examples in `example/` ``` ## Project Status @@ -346,7 +346,7 @@ semantic memory; the blob is only a cache that capacity GC may evict. **v0.9.0** — C ABI v2: external plugin Stage callbacks can now write back (`invoke_stage` gained a result out-param; plugins may mutate RawMessage/LLMText/ToolResults etc. in OnInput/AfterToolcall/PostAction and have them synced to the core). ABI version now tracks core minor releases (v0.9.x → ABIVersion=2, `version_min=1` keeps old plugins loadable). Also fixes the tool-loop zen-compat placeholder that wrongly fired on first-turn system context tail. The SDK ships an enhanced sanitizer example (bad-UTF-8 / U+FFFD / ANSI-escape scrub across the whole pipeline). **This ABI retired with v1.0.0.** -**v0.8.0** — Core is functional, plugin system enhanced. 20+ built-in plugins. External plugin development via [homeagent-sdk](https://github.com/JianFeeeee/homeagentsdk) repo. Added input channel `NoMemory`/`Cleaner`, `ChannelDef`, plugin disable/enable system (CLI + WebUI), `plugindev` toolchain C ABI `ChannelDef` support. +**v0.8.0** — Core is functional, plugin system enhanced. 20+ built-in plugins. External plugin development via [homeagentsdk](https://github.com/JianFeeeee/homeagentsdk) repo. Added input channel `NoMemory`/`Cleaner`, `ChannelDef`, plugin disable/enable system (CLI + WebUI), `plugindev` toolchain C ABI `ChannelDef` support. ## Documentation @@ -367,7 +367,7 @@ semantic memory; the blob is only a cache that capacity GC may evict. ## Downloads -[Releases](https://github.com/JianFeeeee/HomeAgent/releases) ship three variants: +[Releases](https://github.com/JianFeeeee/HologramAgent/releases) ship three variants: | Variant | Contents | For | | --- | --- | --- | @@ -408,7 +408,7 @@ with it over a network** (§13, Remote Network Interaction). Anyone running a mo as a network service therefore has to make the modified source available to that service's users. Plugins are **statically linked** against this project through the public -[homeagent-sdk](https://github.com/JianFeeeee/homeagentsdk) (the SDK source ends up inside the +[homeagentsdk](https://github.com/JianFeeeee/homeagentsdk) (the SDK source ends up inside the plugin binary), but that repository is released under **MIT** — a permissive license, so code received under it does **not** inherit this project's AGPL. External plugins are therefore **not derivative works of this project**: authors pick their own license (closed-source, commercial or diff --git a/assets/docs/en/OVERVIEW.md b/assets/docs/en/OVERVIEW.md index 7dce0fce..b05375a0 100644 --- a/assets/docs/en/OVERVIEW.md +++ b/assets/docs/en/OVERVIEW.md @@ -111,5 +111,5 @@ Core functionality is operational. Plugin system and SDK are ready for independe - Built-in plugins (13): webui / cli / agentcli / cfgmgr / healthcheck / kbtree / multimodal / pluginmgr / clawhubadapter / remotedevice / skillmgr / seemedia / seq - Criterion: **a plugin stays built-in only if it requires internal-SDK-only capabilities**; everything else ships as an .hmap external plugin (see ARCHITECTURE) -- External plugin examples ([homeagent-sdk](https://github.com/JianFeeeee/homeagentsdk) repo `example/`, both Go and Lua types): qq / files / a2a / ai_image / bili / browser / calendar / editdoc / memo / music / ocr / rss / sanitizer / weather / luademo +- External plugin examples ([homeagentsdk](https://github.com/JianFeeeee/homeagentsdk) repo `example/`, both Go and Lua types): qq / files / a2a / ai_image / bili / browser / calendar / editdoc / memo / music / ocr / rss / sanitizer / weather / luademo - Distribution: `.hmap` plugin package format, installable via WebUI diff --git a/assets/docs/en/PLUGIN_DEV.md b/assets/docs/en/PLUGIN_DEV.md index a32e3245..6b7973a8 100644 --- a/assets/docs/en/PLUGIN_DEV.md +++ b/assets/docs/en/PLUGIN_DEV.md @@ -8,11 +8,11 @@ All external interaction capabilities of HologramAgent comes from plugins. Plugins interact with the kernel through `PluginSDK` (Go API). -**SDK Repository**: Plugin development tools, template code, and example plugins are hosted in the [homeagent-sdk](https://github.com/JianFeeeee/homeagentsdk) repository. +**SDK Repository**: Plugin development tools, template code, and example plugins are hosted in the [homeagentsdk](https://github.com/JianFeeeee/homeagentsdk) repository. ```bash git clone https://github.com/JianFeeeee/homeagentsdk.git -cd homeagent-sdk +cd homeagentsdk ``` Each plugin implements a three-method interface: @@ -48,7 +48,7 @@ plugin types, and producing `.hmap` plugin bundles (the tool is named after that ### Installation ```bash -cd homeagent-sdk/tools/hmapdev +cd homeagentsdk/tools/hmapdev go build -o hmapdev # Add hmapdev to PATH or use directly # Prebuilt binaries also ship as release assets (hmapdev_linux_amd64, ...) @@ -738,8 +738,8 @@ internal/plugins/yourplugin/ package yourplugin import ( - "gitcode.com/JianFeeeee/HomeAgent/internal/plugin" - sdk "gitcode.com/JianFeeeee/HomeAgent/internal/sdk" + "github.com/JianFeeeee/HologramAgent/internal/plugin" + sdk "github.com/JianFeeeee/HologramAgent/internal/sdk" ) func init() { @@ -777,7 +777,7 @@ Add blank import in `internal/plugins/all.go`: package plugins import ( - _ "gitcode.com/JianFeeeee/HomeAgent/internal/plugins/yourplugin" + _ "github.com/JianFeeeee/HologramAgent/internal/plugins/yourplugin" // ... other plugins ) ``` @@ -844,7 +844,7 @@ Internal: records are stored in SQLite `disabled_plugins` table (`name`, `disabl ## 7. Example Plugin Reference -### SDK Repository Examples (`homeagent-sdk/example/`) +### SDK Repository Examples (`homeagentsdk/example/`) | Example | Type | Features | |---------|------|----------| @@ -903,4 +903,4 @@ Internal: records are stored in SQLite `disabled_plugins` table (`name`, `disabl *Want to understand the project goals? See [OVERVIEW.md](OVERVIEW.md).* *Want to understand the architecture? See [ARCHITECTURE.md](ARCHITECTURE.md).* -*SDK repository and development tools? See [homeagent-sdk](https://github.com/JianFeeeee/homeagentsdk).* +*SDK repository and development tools? See [homeagentsdk](https://github.com/JianFeeeee/homeagentsdk).* diff --git a/assets/docs/zh/OVERVIEW.md b/assets/docs/zh/OVERVIEW.md index 2621112b..2c0a767a 100644 --- a/assets/docs/zh/OVERVIEW.md +++ b/assets/docs/zh/OVERVIEW.md @@ -101,5 +101,5 @@ CLI 需要终端面板时,**订阅事件总线**(`EventTerminalOutput` + `Ev - 内置插件(13 个):webui / cli / agentcli / cfgmgr / healthcheck / kbtree / multimodal / pluginmgr / clawhubadapter / remotedevice / skillmgr / seemedia / seq - 判定标准:**只有必须使用内部 SDK 能力(公开 SDK 没有的接口面)的插件才内置**,其余一律外置为 .hmap 插件(详见 ARCHITECTURE「内置插件的判定标准」) -- 外部插件示例([homeagent-sdk](https://github.com/JianFeeeee/homeagentsdk) 仓库 `example/`,含 Go 和 Lua 两种类型):qq / files / a2a / ai_image / bili / browser / calendar / editdoc / memo / music / ocr / rss / sanitizer / weather / luademo +- 外部插件示例([homeagentsdk](https://github.com/JianFeeeee/homeagentsdk) 仓库 `example/`,含 Go 和 Lua 两种类型):qq / files / a2a / ai_image / bili / browser / calendar / editdoc / memo / music / ocr / rss / sanitizer / weather / luademo - 打包分发:`.hmap` 插件包格式,通过 WebUI 安装 diff --git a/assets/docs/zh/PLUGIN_DEV.md b/assets/docs/zh/PLUGIN_DEV.md index f728847b..1a3f1579 100644 --- a/assets/docs/zh/PLUGIN_DEV.md +++ b/assets/docs/zh/PLUGIN_DEV.md @@ -9,11 +9,11 @@ HologramAgent 的所有外部交互能力都来自插件。插件通过 `PluginSDK`(Go API)与内核交互。 **SDK 仓库**:插件开发工具、模板代码和示例插件统一托管在 -[homeagent-sdk](https://github.com/JianFeeeee/homeagentsdk) 仓库。 +[homeagentsdk](https://github.com/JianFeeeee/homeagentsdk) 仓库。 ```bash git clone https://github.com/JianFeeeee/homeagentsdk.git -cd homeagent-sdk +cd homeagentsdk ``` 每个插件实现一个三方法接口: @@ -49,7 +49,7 @@ type Plugin interface { ### 安装 ```bash -cd homeagent-sdk/tools/hmapdev +cd homeagentsdk/tools/hmapdev go build -o hmapdev # 将 hmapdev 加入 PATH 或直接使用 # 也可从 SDK 的 release 附件下载预编译二进制(hmapdev_linux_amd64 等) @@ -726,8 +726,8 @@ internal/plugins/yourplugin/ package yourplugin import ( - "gitcode.com/JianFeeeee/HomeAgent/internal/plugin" - sdk "gitcode.com/JianFeeeee/HomeAgent/internal/sdk" + "github.com/JianFeeeee/HologramAgent/internal/plugin" + sdk "github.com/JianFeeeee/HologramAgent/internal/sdk" ) func init() { @@ -765,7 +765,7 @@ func (p *Plugin) Stop() error { package plugins import ( - _ "gitcode.com/JianFeeeee/HomeAgent/internal/plugins/yourplugin" + _ "github.com/JianFeeeee/HologramAgent/internal/plugins/yourplugin" // ... 其他插件 ) ``` @@ -830,7 +830,7 @@ pmgr.ReloadPlugins() // 重载所有插件 ## 七、示例插件参考 -### SDK 仓库示例(`homeagent-sdk/example/`) +### SDK 仓库示例(`homeagentsdk/example/`) | 示例 | 类型 | 特点 | |------|------|------| @@ -884,4 +884,4 @@ pmgr.ReloadPlugins() // 重载所有插件 *了解项目整体目标?查看 [OVERVIEW.md](OVERVIEW.md)。* *了解技术架构?查看 [ARCHITECTURE.md](ARCHITECTURE.md)。* -*SDK 仓库与开发工具?查看 [homeagent-sdk](https://github.com/JianFeeeee/homeagentsdk)。* +*SDK 仓库与开发工具?查看 [homeagentsdk](https://github.com/JianFeeeee/homeagentsdk)。* diff --git a/assets/skills/commondev-discipline/SKILL.md b/assets/skills/commondev-discipline/SKILL.md index 9d665310..952bff6f 100644 --- a/assets/skills/commondev-discipline/SKILL.md +++ b/assets/skills/commondev-discipline/SKILL.md @@ -552,7 +552,7 @@ hmapdev sdk current # 当前活跃 SDK 版本(★ 动手前必看) hmapdev sdk list # 本机已装的所有 SDK 版本 ``` -- 核心仓 `/home/program/TrueAgent`(Go module `gitcode.com/JianFeeeee/HomeAgent`) +- 核心仓 `/home/program/TrueAgent`(Go module `github.com/JianFeeeee/HologramAgent`) - **SDK 仓** `third_party/homeagent-sdk`(独立 git 仓、独立版本号) ### 33. 开工流程 diff --git a/cmd/gui/package.json b/cmd/gui/package.json index a4aa3f82..7059aa34 100644 --- a/cmd/gui/package.json +++ b/cmd/gui/package.json @@ -2,7 +2,7 @@ "name": "homeagent-gui", "version": "1.4.0", "author": "JianFeeeee ", - "homepage": "https://github.com/JianFeeeee/HomeAgent", + "homepage": "https://github.com/JianFeeeee/HologramAgent", "description": "HomeAgent Desktop GUI - Multi-connection management dashboard", "main": "main.js", "scripts": { diff --git a/deploy/scripts/upload_assets.py b/deploy/scripts/upload_assets.py index 1e8211ef..d6c05971 100755 --- a/deploy/scripts/upload_assets.py +++ b/deploy/scripts/upload_assets.py @@ -5,7 +5,19 @@ 不传 file 时上传 dist/release/ 下全部发布产物。 环境变量: - GITCODE_REPO 目标仓库,默认 JianFeeeee/HomeAgent(SDK 仓传 JianFeeeee/homeagent-sdk) + GITCODE_REPO 目标仓库,默认 JianFeeeee/HologramAgent(SDK 仓传 JianFeeeee/hologramagentsdk) + 这是 gitcode 镜像仓名的**唯一定义处**(workflow 里通过 job 级 + env.GC_REPO 传入同一个值)。改 gitcode 仓名时改这里 + 两个 + workflow 的 GC_REPO,共三处(每个文件各一个定义点)。 + 取值依据(实测 2026-10-21 20:1x,直连不带代理): + JianFeeeee/HologramAgent → 200 ← 当前取值 + JianFeeeee/HomeAgent → 301 ← 旧名,跳转到上面 + JianFeeeee/homeagent-sdk → 200(SDK 仓,另一对象) + JianFeeeee/hologramagentsdk → 200(SDK 仓,另一对象) + JianFeeeee/homeagentsdk → 404 + JianFeeeee/HologramAgent-sdk → 404 + gitcode 侧镜像仓已由 HomeAgent 改名为 HologramAgent(与 GitHub + 主仓同名),旧地址仍 301,别再写旧名。 ASSET_DIR 资产目录,默认 /dist/release 为何两步:gitcode 的 release 附件不走 API 直传,而是先向 @@ -20,7 +32,7 @@ import urllib.error import urllib.parse import urllib.request -REPO = os.environ.get("GITCODE_REPO", "JianFeeeee/HomeAgent") +REPO = os.environ.get("GITCODE_REPO", "JianFeeeee/HologramAgent") API = "https://gitcode.com/api/v5/repos" # 发布产物后缀。注意 Windows 安装器是 HomeAgent_v*_win64.exe, diff --git a/docs/git-branching.md b/docs/git-branching.md index c1fa8fd4..dfb4e4c7 100644 --- a/docs/git-branching.md +++ b/docs/git-branching.md @@ -195,7 +195,7 @@ git switch main && git cherry-pick # 遵守 §三:只 pick,不 merge > - `feature/*` 分支(`input-semantics`、`multimodal-embedding`、`memory-media`、`plugin-proc-migration`) > 均已合入并删除。 -### SDK 仓(homeagent-sdk) +### SDK 仓(homeagentsdk) | 分支 | 状态 | 处理 | |---|---|---| @@ -417,7 +417,7 @@ VERSION=<版本> bash deploy/packaging/package-windows.sh client amd64 # 需 # 核心仓 python3 deploy/scripts/upload_assets.py # 默认上传 dist/release 下可识别的产物 # SDK 仓(hmapdev_* 没有扩展名,不会被自动识别 ⇒ 必须显式列文件名) -GITCODE_REPO=JianFeeeee/homeagent-sdk ASSET_DIR=/dist/release \ +GITCODE_REPO=JianFeeeee/hologramagentsdk ASSET_DIR=/dist/release \ python3 deploy/scripts/upload_assets.py hmapdev_linux_amd64 ... ``` diff --git a/docs/zh/ci-cd-runbook.md b/docs/zh/ci-cd-runbook.md index 7ae50570..11fe0c69 100644 --- a/docs/zh/ci-cd-runbook.md +++ b/docs/zh/ci-cd-runbook.md @@ -8,9 +8,9 @@ | 仓 | 位置 | 流水线 | 触发 | | --- | --- | --- | --- | -| 主仓 HologramAgent | `github.com/JianFeeeee/HomeAgent`(公开) | `ci.yml` + `release.yml` | push / PR、`release/**` push | +| 主仓 HologramAgent | `github.com/JianFeeeee/HologramAgent`(公开) | `ci.yml` + `release.yml` | push / PR、`release/**` push | | SDK 仓 homeagentsdk | `github.com/JianFeeeee/homeagentsdk`(公开) | `release.yml` | `release/**` push | -| gitcode 镜像 | 同名仓库 | 无(由主仓 Release 的 sync job 同步) | — | +| gitcode 镜像 | `gitcode.com/JianFeeeee/HologramAgent`(与主仓同名) | 无(由主仓 Release 的 sync job 同步) | — | **分支保护**(main,公开仓免费):10 项必须检查(Go build/vet/test、Race、 cross×5、GUI、C gates、Docs)+ `strict`(必须与 main 同步)+ 禁 force push。 @@ -19,6 +19,50 @@ cross×5、GUI、C gates、Docs)+ `strict`(必须与 main 同步)+ 禁 for **gitcode 的角色**:只读镜像(git push 同步)。Release 附件由 sync job 自动 补传,或手工跑 `deploy/scripts/upload_assets.py`(见 §3.4)。 +**gitcode 仓名的单点化**(2026-10-21 加):gitcode 镜像目标仓名曾在多处写死, +改名时要遍改且易漏(漏一处就是一个小死链)。现在收继到**每文件一个定义处**, +消费点全部走变量: + +| 定义处 | 形式 | 消费点 | +| --- | --- | --- | +| `.github/workflows/release.yml` | `env.GC_REPO`(job 级) | `${GC_REPO}` ×4 | +| `.github/workflows/ci.yml` | `env.GC_REPO`(job 级) | `${GC_REPO}` ×2 | +| `deploy/scripts/upload_assets.py` | `GITCODE_REPO` 环境变量默认值 | 脚本自身 | + +两个 workflow 是独立 workflow,因此各自一个定义(不能跨文件共享 env)。 +**gitcode 侧以后再改仓名,只改这三个定义点即可**,消费点无需动。 + +**当前取值 `JianFeeeee/HologramAgent`**(与 GitHub 主仓同名)。gitcode 侧镜像仓 +**已由 `HomeAgent` 改名为 `HologramAgent`**;旧地址仍 301 跳转,跟随后也能到, +但走重定向,不应再用。实测(2026-10-21 20:1x,直连不带代理, +`curl -s -o /dev/null -w '%{http_code}' https://gitcode.com/JianFeeeee/`): + +| 仓名 | HTTP | 说明 | +| --- | --- | --- | +| `HologramAgent` | **200** | 当前取值(主仓镜像) | +| `HomeAgent` | 301 | 旧名,跳转到 `HologramAgent` | +| `homeagent-sdk` | 200 | SDK 仓,另一对象 | +| `hologramagentsdk` | 200 | SDK 仓,另一对象 | +| `homeagentsdk` | 404 | 不存在 | +| `HologramAgent-sdk` | 404 | 不存在 | + +判定「301 不是另一个仓、就是同一仓改名」的依据:两个地址 `git ls-remote` +得到的 refs 列表 md5 相同(同一组分支与 SHA)。 + +API 侧同样兼容两个名字:`/api/v5/repos/JianFeeeee/{HomeAgent,HologramAgent}` +不带 token 都返回 **400**(需要鉴权,不是仓不存在), +`/releases/tags/v1.3.13` 都返回 **200** 且响应体一致。 + +**失败面(两个 job 不一样,别搞混)**: + +- `release.yml` 的 `sync-gitcode`:`needs: [prepare, publish]`。前置检查 `exit 1` + ⇒ **只红镜像同步这一格**;GitHub 侧 release 产物已经发出去了。 +- `ci.yml` 的 `sync-gitcode-main`:`needs` 全绿(go/race/cross/gui/csrc/docs)后才跑。 + 前置检查 `exit 1` ⇒ 该 job 红 ⇒ **main 的整条 CI 红**。 + +所以仓名写错的实际后果是「每次 release/main CI 必红一格 + 国内镜像不更新」, +**不是**「发不出包」。 + ## 1. CI(ci.yml)—— 每次推送到 main / release/** / PR 都跑 六个 job,**全部命令均本地实测过**(原则:不写"应该有用"的未验证步骤): @@ -163,12 +207,12 @@ tar 写 stdout 收到 EPIPE ⇒ pipefail 判失败。**包越大越易触发** CI 的 sync job 需要仓库 secret `GITCODE_TOKEN`;**未配置时该 job 显式跳过** (不阻断 GitHub 侧发布)。 -**2026-09-29 已配置**:两仓(`JianFeeeee/HomeAgent`、`JianFeeeee/homeagentsdk`) +**2026-09-29 已配置**:两仓(`JianFeeeee/HologramAgent`、`JianFeeeee/homeagentsdk`) 均已设同名 secret,取值自 `~/.git-credentials` 里那条 `https://JianFeeeee:@gitcode.com`。 配置方式(经 stdin 传入,避免 token 出现在进程列表): ```bash -printf '%s' "$TOKEN" | gh secret set GITCODE_TOKEN --repo JianFeeeee/HomeAgent +printf '%s' "$TOKEN" | gh secret set GITCODE_TOKEN --repo JianFeeeee/HologramAgent printf '%s' "$TOKEN" | gh secret set GITCODE_TOKEN --repo JianFeeeee/homeagentsdk ``` @@ -177,12 +221,16 @@ printf '%s' "$TOKEN" | gh secret set GITCODE_TOKEN --repo JianFeeeee/homeagentsd ```bash # ① secret 存在 -gh secret list --repo JianFeeeee/HomeAgent | grep GITCODE_TOKEN +gh secret list --repo JianFeeeee/HologramAgent | grep GITCODE_TOKEN # ② token 有效 curl -s "https://gitcode.com/api/v5/user?access_token=$TOKEN" # ③ job 用的 private-token 头可读 release(两仓都测) +# ⚠ gitcode 侧主仓镜像现已改名为 HologramAgent(与 GitHub 同名), +# 旧名 HomeAgent 仍 301 跳转。实测 2026-10-21 20:1x(直连不带代理): +# /api/v5/repos/JianFeeeee/{HomeAgent,HologramAgent} 不带 token 均 400 +# (需鉴权,非仓不存在);/releases/tags/v1.3.13 两名字均 200 且响应一致。 curl -s -H "private-token: $TOKEN" \ - "https://gitcode.com/api/v5/repos/JianFeeeee/HomeAgent/releases/tags/v1.3.13" + "https://gitcode.com/api/v5/repos/JianFeeeee/HologramAgent/releases/tags/v1.3.13" ``` ★ **token 是宽范围的个人令牌**(可读 92 仓/48 私有、有写权限),而 CI 只需要这两个仓。 @@ -193,7 +241,8 @@ curl -s -H "private-token: $TOKEN" \ ```bash # token 放 ~/.git-credentials(https://JianFeeeee:@gitcode.com) -ASSET_DIR=<产物目录> GITCODE_REPO=JianFeeeee/HomeAgent \ +# GITCODE_REPO 是 gitcode 镜像仓名(当前 HologramAgent,旧名 HomeAgent 为 301)。 +ASSET_DIR=<产物目录> GITCODE_REPO=JianFeeeee/HologramAgent \ python3 deploy/scripts/upload_assets.py # release 条目必须先存在(脚本向 releases//upload_url 取 OBS 签名 URL) ``` diff --git a/site/index.html b/site/index.html index 130af6de..0130a5c7 100644 --- a/site/index.html +++ b/site/index.html @@ -2018,7 +2018,7 @@

@@ -3010,34 +3010,34 @@ echo "你好,记住我喜欢喝咖啡" | ./build/waiter