diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 835ad465f..b041c1395 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -3,14 +3,6 @@ name: Publish on: workflow_dispatch: inputs: - package: - description: "Which package set to publish" - required: true - type: choice - options: - - bailian-cli - - knowledge-studio-cli - - bailian-kb-dsh mode: description: "Publish mode" required: true @@ -19,18 +11,18 @@ on: - channel - stable channel: - description: "Required when mode=channel. npm dist-tag only (lowercase, digits, dashes), e.g. mcp / plugin / sync-release. bailian-cli binary CDN always overwrites sync-release.json; knowledge-studio-cli and bailian-kb-dsh are npm-only." + description: "Required when mode=channel. npm dist-tag only (lowercase, digits, dashes), e.g. mcp / plugin / sync-release. bailian-cli binary CDN always overwrites sync-release.json; knowledge-studio-cli and dsh plugins are npm-only." required: false type: string concurrency: - group: publish-${{ inputs.package }}-${{ inputs.mode }}-${{ inputs.channel }} + group: publish-${{ inputs.mode }}-${{ inputs.channel }} cancel-in-progress: false jobs: publish-stable: - if: inputs.mode == 'stable' && inputs.package != 'bailian-kb-dsh' - name: publish stable (${{ inputs.package }}) to npm + binary + tag + if: inputs.mode == 'stable' + name: publish stable (bailian-cli + kscli + dsh plugins) to npm + binary + tag runs-on: ubuntu-latest environment: production # Required Reviewers gate permissions: @@ -96,11 +88,11 @@ jobs: FC_RELEASE_AUDIENCE: ${{ vars.FC_RELEASE_AUDIENCE }} # Script order: git tag, then binary GitHub Release + OSS, then npm. # OSS upload can fail on a network blip; npm must not succeed first. - run: node tools/release/publish-stable.mjs ${{ inputs.package == 'knowledge-studio-cli' && '--knowledge' || '' }} + run: node tools/release/publish-stable.mjs publish-channel: - if: inputs.mode == 'channel' && inputs.package != 'bailian-kb-dsh' - name: publish channel (${{ inputs.package }}) to npm + binary + if: inputs.mode == 'channel' + name: publish channel (bailian-cli + kscli + dsh plugins) to npm + binary runs-on: ubuntu-latest permissions: contents: write # create prerelease GitHub Release with binary assets @@ -164,52 +156,7 @@ jobs: # credentials in this repo (see publish-stable env notes). FC_TRIGGER_URL: ${{ vars.FC_TRIGGER_URL }} FC_RELEASE_AUDIENCE: ${{ vars.FC_RELEASE_AUDIENCE }} + RELEASE_CHANNEL: ${{ inputs.channel }} # Script order: binary GitHub Release + OSS, then npm. # OSS upload can fail on a network blip; npm must not succeed first. - run: node tools/release/publish-channel.mjs ${{ inputs.package == 'knowledge-studio-cli' && '--knowledge' || '' }} --channel "${{ inputs.channel }}" - - # bailian-kb-dsh is the dsh plugin (downstream host adapter): independent version, - # tsc + tsdown build, npm-only. It shares this workflow's entry UI and setup steps - # but NOT publish-stable.mjs / publish-channel.mjs — those broadcast one version - # across the locked bl package set and produce binary artifacts, neither of which - # applies here. See docs/agents/dsh-plugin.md. - publish-kb-dsh: - if: inputs.package == 'bailian-kb-dsh' - name: publish ${{ inputs.mode }} (bailian-kb-dsh) to npm - runs-on: ubuntu-latest - # stable goes through the Required Reviewers gate, same as the bl stable job; - # channel stays ungated so dist-tag drops need no approval. - environment: ${{ inputs.mode == 'stable' && 'production' || '' }} - permissions: - contents: write # push the bailian-kb-dsh-v tag (stable only) - id-token: write # OIDC for npm Trusted Publishing + provenance - steps: - - name: Require channel input - if: ${{ inputs.mode == 'channel' && inputs.channel == '' }} - run: | - echo "::error::mode=channel requires the workflow input \"channel\" (npm dist-tag, e.g. mcp / plugin). Leave mode=stable if you do not need a dist-tag." - exit 1 - - - uses: actions/checkout@v6 - - - uses: pnpm/action-setup@v6 - - - uses: actions/setup-node@v6 - with: - node-version: "24" - cache: pnpm - registry-url: "https://registry.npmjs.org/" - - - name: Install gitleaks - run: | - set -euo pipefail - GITLEAKS_VERSION=8.21.2 - curl -sSfL \ - "https://github.com/gitleaks/gitleaks/releases/download/v${GITLEAKS_VERSION}/gitleaks_${GITLEAKS_VERSION}_linux_x64.tar.gz" \ - | sudo tar -xz -C /usr/local/bin gitleaks - gitleaks version - - - run: pnpm install --frozen-lockfile - - - name: publish-kb-dsh - run: node tools/release/publish-kb-dsh.mjs ${{ inputs.mode == 'channel' && format('--channel "{0}"', inputs.channel) || '' }} + run: node tools/release/publish-channel.mjs --channel "$RELEASE_CHANNEL" diff --git a/.vite-hooks/pre-commit b/.vite-hooks/pre-commit index b1c222fb5..a24428f19 100755 --- a/.vite-hooks/pre-commit +++ b/.vite-hooks/pre-commit @@ -17,6 +17,8 @@ git add \ skills/bailian-managed-agent/reference \ skills/bailian-sandbox/SKILL.md \ skills/bailian-sandbox/reference \ + skills/bailian-memory/SKILL.md \ + skills/bailian-memory/reference \ skills/bailian-web-search/SKILL.md vp staged diff --git a/AGENTS.md b/AGENTS.md index cc60a1ec2..2c2488c14 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -11,7 +11,8 @@ monorepo 现在按"纯逻辑 → 运行时框架 → 命令库 → 产品入口" - `packages/commands` — `bailian-cli-commands`,可复用命令实现库,只导出 command,不决定产品路径 - `packages/cli` — `bailian-cli`,完整 `bl` 产品入口;`src/commands.ts` 组装 `bl` 暴露的命令路径 - `packages/kscli` — `knowledge-studio-cli`,Knowledge Studio 专用入口;`src/main.ts` 复用 commands 并重映射为 `kscli` 路径 -- `packages/bailian-kb-dsh` — `bailian-kb-dsh`,**下游宿主适配层**(依赖方向朝外):百炼知识库的 DeepSeek Harness (dsh) 插件,消费 `bl` CLI 与知识库 API,不在上面这条分层链上;版本、构建、发布都独立,见 [docs/agents/dsh-plugin.md](docs/agents/dsh-plugin.md) +- `packages/bailian-kb-dsh` — `bailian-kb-dsh`,**下游宿主适配层**(依赖方向朝外):百炼知识库的 DeepSeek Harness (dsh) 插件,消费 `bl` CLI 与知识库 API,不在上面这条分层链上;构建独立,版本与发布跟随 bailian-cli,见 [docs/agents/dsh-plugin.md](docs/agents/dsh-plugin.md) +- `packages/bailian-memo-dsh` — `bailian-memo-dsh`,**下游宿主适配层**:百炼个人记忆 dsh 插件(dsh 0.2.1 Volatile Config / SettingsForms);身份在 `~/.bailian/personal-memory/config.json`;构建独立,版本与发布跟随 bailian-cli,见 [docs/agents/dsh-plugin.md](docs/agents/dsh-plugin.md) ### 关键文件 @@ -41,7 +42,7 @@ Skill / 命令手册随 `skills/bailian-*/` 经 `bl skill init` 安装(装齐 约定: - 命令实现文件路径仍按能力放置:`packages/commands/src/commands/text/chat.ts` -- 产品命令路径由入口 map 决定:同一个实现可暴露为 `bl knowledge retrieve` 或 `kscli retrieve` +- 产品命令路径由入口 map 决定:同一个实现可暴露为 `bl knowledge search` 或 `kscli search` - `defineCommand` 只写命令元数据与逻辑: `auth`、`flags`、`usageArgs`、`exampleArgs`、`validate`、`run` - `usageArgs` / `exampleArgs` 不写 `bl` 或 `kscli` 前缀;runtime / reference 生成器按产品路径补前缀 - 不再使用 `catalog.ts` 作为登记处;新增/重命名命令必须同时看命令库导出和产品入口 map @@ -57,27 +58,27 @@ Skill / 命令手册随 `skills/bailian-*/` 经 `bl skill init` 安装(装齐 按当前任务从下表挑一条进入对应文档: -| 场景 | 何时进入 | 详见 | -| ----------------- | ------------------------------------------------------ | ---------------------------------------------------------------------------- | -| 命令增删改 | 增加 / 删除 / 重命名 `bl xxx` 或入口命令路径 | [docs/agents/command-add-remove.md](docs/agents/command-add-remove.md) | -| E2E 测试维护 | 新增/改命令或 e2e 用例、补 help/缺参/dry-run | [docs/agents/cli-e2e-tests.md](docs/agents/cli-e2e-tests.md) | -| 测试隔离 | 单测/E2E 受本地 HOME、语言、系统目录干扰;统一隔离基建 | [docs/agents/test-isolation.md](docs/agents/test-isolation.md) | -| 批量压测 | 改/跑多能力并发压测、`test:stress`、fixtures | [docs/agents/stress-batch-tests.md](docs/agents/stress-batch-tests.md) | -| 选项变更 | 给已有命令加 `--flag` 或改默认值 | [docs/agents/command-flag-change.md](docs/agents/command-flag-change.md) | -| 模型上下架 | 增加新模型 / 改默认模型 / 废弃旧模型 | [docs/agents/model-add-remove.md](docs/agents/model-add-remove.md) | -| Skill 文案 / 路由 | 改 SKILL 路由、安装约定、hand-off、hub/领域边界 | [docs/agents/skill-change.md](docs/agents/skill-change.md) | -| 错误文案变更 | 改 `BailianError` 的 message 或 hint | [docs/agents/error-hint-change.md](docs/agents/error-hint-change.md) | -| URL / 渠道变更 | 控制台域名 / 文档站 / 追踪参数 | [docs/agents/url-change.md](docs/agents/url-change.md) | -| 埋点变更 | 改 AEM 命令事件、后端渠道 header、User-Agent | [docs/agents/telemetry-change.md](docs/agents/telemetry-change.md) | -| 鉴权扩展 | 加 OAuth / SSO / 换 token 来源 | [docs/agents/auth-change.md](docs/agents/auth-change.md) | -| 配置项扩展 | 新 env var 或 `~/.bailian/config.json` 字段 | [docs/agents/config-add.md](docs/agents/config-add.md) | -| Profile / 激活 | 改命名 Profile、预设或 `active_config` | [docs/agents/config-profile-change.md](docs/agents/config-profile-change.md) | -| 安装文档 | 改安装、鉴权、验证流程或线上 install 页面 | [docs/agents/install-doc-change.md](docs/agents/install-doc-change.md) | -| 发布 | channel / stable 发布到 npm(CI 驱动) | [docs/agents/publish.md](docs/agents/publish.md) | -| Change Log | 发版说明 / 历史版本说明 | [docs/agents/changelog-write.md](docs/agents/changelog-write.md) | -| 工具链调整 | lint 规则 / 构建配置 / 依赖升级 | [docs/agents/lint-toolchain.md](docs/agents/lint-toolchain.md) | -| Command Pack | 扩展包 / 白名单 / plugin 管理命令 | [docs/agents/command-pack.md](docs/agents/command-pack.md) | -| dsh 插件 | 改 `packages/bailian-kb-dsh`、dsh 依赖、插件发布 | [docs/agents/dsh-plugin.md](docs/agents/dsh-plugin.md) | +| 场景 | 何时进入 | 详见 | +| ----------------- | --------------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| 命令增删改 | 增加 / 删除 / 重命名 `bl xxx` 或入口命令路径 | [docs/agents/command-add-remove.md](docs/agents/command-add-remove.md) | +| E2E 测试维护 | 新增/改命令或 e2e 用例、补 help/缺参/dry-run | [docs/agents/cli-e2e-tests.md](docs/agents/cli-e2e-tests.md) | +| 测试隔离 | 单测/E2E 受本地 HOME、语言、系统目录干扰;统一隔离基建 | [docs/agents/test-isolation.md](docs/agents/test-isolation.md) | +| 批量压测 | 改/跑多能力并发压测、`test:stress`、fixtures | [docs/agents/stress-batch-tests.md](docs/agents/stress-batch-tests.md) | +| 选项变更 | 给已有命令加 `--flag` 或改默认值 | [docs/agents/command-flag-change.md](docs/agents/command-flag-change.md) | +| 模型上下架 | 增加新模型 / 改默认模型 / 废弃旧模型 | [docs/agents/model-add-remove.md](docs/agents/model-add-remove.md) | +| Skill 文案 / 路由 | 改 SKILL 路由、安装约定、hand-off、hub/领域边界 | [docs/agents/skill-change.md](docs/agents/skill-change.md) | +| 错误文案变更 | 改 `BailianError` 的 message 或 hint | [docs/agents/error-hint-change.md](docs/agents/error-hint-change.md) | +| URL / 渠道变更 | 控制台域名 / 文档站 / 追踪参数 | [docs/agents/url-change.md](docs/agents/url-change.md) | +| 埋点变更 | 改 AEM 命令事件、后端渠道 header、User-Agent | [docs/agents/telemetry-change.md](docs/agents/telemetry-change.md) | +| 鉴权扩展 | 加 OAuth / SSO / 换 token 来源 | [docs/agents/auth-change.md](docs/agents/auth-change.md) | +| 配置项扩展 | 新 env var 或 `~/.bailian/config.json` 字段 | [docs/agents/config-add.md](docs/agents/config-add.md) | +| Profile / 激活 | 改命名 Profile、预设或 `active_config` | [docs/agents/config-profile-change.md](docs/agents/config-profile-change.md) | +| 安装文档 | 改安装、鉴权、验证流程或线上 install 页面 | [docs/agents/install-doc-change.md](docs/agents/install-doc-change.md) | +| 发布 | channel / stable 发布到 npm(CI 驱动) | [docs/agents/publish.md](docs/agents/publish.md) | +| Change Log | 发版说明 / 历史版本说明 | [docs/agents/changelog-write.md](docs/agents/changelog-write.md) | +| 工具链调整 | lint 规则 / 构建配置 / 依赖升级 | [docs/agents/lint-toolchain.md](docs/agents/lint-toolchain.md) | +| Command Pack | 扩展包 / 白名单 / plugin 管理命令 | [docs/agents/command-pack.md](docs/agents/command-pack.md) | +| dsh 插件 | 改 `packages/bailian-kb-dsh` / `bailian-memo-dsh`、dsh 依赖、插件发布 | [docs/agents/dsh-plugin.md](docs/agents/dsh-plugin.md) | 如果当前任务无法对应任何场景,先按经验完成,然后**回来评估这是不是一类新场景** —— 是就新增 `docs/agents/.md`,把清单沉淀下来。 @@ -85,9 +86,9 @@ Skill / 命令手册随 `skills/bailian-*/` 经 `bl skill init` 安装(装齐 ### 1. 发布包版本号同步 -源码包的 `version` 当前保持一致: `packages/core`、`packages/runtime`、`packages/commands`、`packages/cli`、`packages/kscli`。做版本 bump 时一动多动。release 工具当前强校验 / 发布范围以 `tools/release/lib/packages.mjs` 为准;把新包纳入发布前必须同步该清单和 [publish.md](docs/agents/publish.md)。 +源码包的 `version` 当前保持一致: `packages/core`、`packages/runtime`、`packages/commands`、`packages/cli`、`packages/kscli`、`packages/bailian-kb-dsh`、`packages/bailian-memo-dsh`。做版本 bump 时一动多动。release 工具当前强校验 / 发布范围以 `tools/release/lib/packages.mjs` 为准;把新包纳入发布前必须同步该清单和 [publish.md](docs/agents/publish.md)。 -**例外**: `packages/bailian-kb-dsh` 不参与这个锁步(独立 `0.1.x`,跟随 dsh rc 节奏),也不在 release 白名单里;它走 `publish.yml` 里 `package=bailian-kb-dsh` 的独立 job(`tools/release/publish-kb-dsh.mjs`)。 +两个 dsh 插件也纳入七包锁步版本和统一发布,仅构建方式保留各自的 `tsc` / `tsdown`。 ### 2. 分层边界 @@ -95,7 +96,7 @@ Skill / 命令手册随 `skills/bailian-*/` 经 `bl skill init` 安装(装齐 - `runtime` 是通用 CLI 框架:可以处理 TTY、help、错误输出、middleware,但不写具体业务命令逻辑 - `commands` 是命令实现库:不决定产品路径;不在 `usageArgs` / `exampleArgs` / hint 里硬编码产品 bin 前缀 - `cli` / `kscli` 是产品层:负责命令路径 map、产品 identity、README、技能 reference、发版入口 -- `bailian-kb-dsh` 在这条链之外:它是别的宿主(dsh)里的插件,只允许依赖 `core`(且当前刻意零依赖),反过来 `core` / `runtime` / `commands` / 产品层**永远不许**依赖它 +- `bailian-kb-dsh` / `bailian-memo-dsh` 在这条链之外:它们是别的宿主(dsh)里的插件,刻意不依赖本仓 `core`/`runtime`/`commands`(自包含 endpoints/client);反过来产品层**永远不许**依赖它们 - URL 集中在 `packages/runtime/src/urls.ts`(用户面控制台)和 `packages/core/src/config/schema.ts` / client 层(API) ### 3. 错误处理边界:CLI 不翻译服务端错误 diff --git a/CHANGELOG.md b/CHANGELOG.md index 19eb0b1e4..d783172af 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,10 +2,38 @@ All notable changes to the `bailian-cli` packages are documented here. -The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). The `bailian-cli`, `bailian-cli-core`, `bailian-cli-runtime`, `bailian-cli-commands`, and `knowledge-studio-cli` packages share a single version number. +The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). The `bailian-cli`, `bailian-cli-core`, `bailian-cli-runtime`, `bailian-cli-commands`, `knowledge-studio-cli`, `bailian-kb-dsh`, and `bailian-memo-dsh` packages share a single version number. [中文版](CHANGELOG.zh.md) · [README](README.md) · [Contributing](CONTRIBUTING.md) +## [2.5.0] - 2026-10-20 + +### Added + +- **Memory management** — Add node details, Skill memory export, and profile schema listing, inspection, updates and deletion; support rule-scoped recall, pro/lite search, skill metadata and profile-only extraction. +- **Personal memory Skill** — Add `bailian-memory` for consent-based personal memory, recall and user profile workflows. +- **DeepSeek Harness integrations** — Add the personal memory plugin with automatic recall, asynchronous curation and remember/forget tools; update the knowledge plugin for dsh 0.2.1 settings and isolated management credentials. + +### Changed + +- **Memory CLI migration (BREAKING)** — Memory commands now use a Workspace-specific endpoint. Configure `--workspace-id`, `BAILIAN_WORKSPACE_ID` or `workspace_id`; replace `--memory-library-id` with `--library-id` on commands that support it. Remove `--user-id` from `memory update` and `memory delete`; confirmed node deletion now requires `--yes`. +- **Memory writes (BREAKING)** — `memory add` now submits asynchronous extraction and waits up to 120 seconds by default. Use `--wait 0` for submission-only behavior. JSON consumers must handle `event_id` and `events`; a submission receipt is not proof of completed extraction. +- **Unified releases** — CLI, Knowledge Studio CLI and both dsh plugins now share one version and release workflow. The dsh knowledge plugin moves from its independent 0.1.x series to 2.5.0. + +### Removed + +- **Legacy knowledge retrieval (BREAKING)** — Remove `bl knowledge retrieve`, `kscli retrieve` and the `knowledgeRetrieve` command export. Migrate to `bl knowledge search` or `kscli search` using a retrieval service's `--agent-id`; old index-based arguments are not interchangeable. +- **Legacy Memory library API (BREAKING)** — Replace the exported `MemoryAddResponse` type with `MemoryAddAsyncResponse`; library consumers must adapt to the updated asynchronous request/response contracts. + +### Fixed + +- **Memory completion and input validation** — Empty event lists and missing event IDs no longer falsely confirm completion; polling obeys its deadline, partial failures return a non-zero exit code, and malformed JSON elements and attribute types are rejected before requests. +- **Search documentation** — Clarify that `--min-score` defaults to 0.3 and only applies to pro search; lite does not filter by this threshold. + +### Security + +- **Workspace endpoints** — Reject Workspace identifiers that could alter the destination host, preventing credentials from being sent to an unintended host. + ## [2.4.0] - 2026-10-19 ### Added diff --git a/CHANGELOG.zh.md b/CHANGELOG.zh.md index 3eaa5871a..c8cd9346a 100644 --- a/CHANGELOG.zh.md +++ b/CHANGELOG.zh.md @@ -2,10 +2,38 @@ `bailian-cli` 系列包的所有重要变更都记录在此。 -格式遵循 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/),版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/spec/v2.0.0.html)。`bailian-cli`、`bailian-cli-core`、`bailian-cli-runtime`、`bailian-cli-commands`、`knowledge-studio-cli` 共享一个版本号。 +格式遵循 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/),版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/spec/v2.0.0.html)。`bailian-cli`、`bailian-cli-core`、`bailian-cli-runtime`、`bailian-cli-commands`、`knowledge-studio-cli`、`bailian-kb-dsh`、`bailian-memo-dsh` 共享一个版本号。 [English](CHANGELOG.md) · [README](README.zh.md) · [参与贡献](CONTRIBUTING.zh.md) +## [2.5.0] - 2026-10-20 + +### 新增 + +- **Memory 管理** —— 新增节点详情、Skill记忆导出,以及画像模板列表、详情、更新和删除;支持按规则召回、pro/lite检索、技能元数据和仅画像抽取。 +- **个人记忆 Skill** —— 新增 `bailian-memory`,支持经用户授权的个人记忆、召回和画像流程。 +- **DeepSeek Harness 集成** —— 新增个人记忆插件,提供自动召回、异步整理和记住/遗忘工具;知识库插件适配dsh 0.2.1设置体系与隔离的管理凭据。 + +### 变更 + +- **Memory CLI 迁移(BREAKING)** —— Memory命令改用Workspace专属端点。配置 `--workspace-id`、`BAILIAN_WORKSPACE_ID` 或 `workspace_id`;在支持记忆库参数的命令中将 `--memory-library-id` 替换为 `--library-id`。`memory update` 和 `memory delete` 移除 `--user-id`;确认删除节点时需传 `--yes`。 +- **记忆写入(BREAKING)** —— `memory add` 改为提交异步抽取,默认最多等待120秒。仅提交可使用 `--wait 0`;JSON调用方需适配 `event_id`、`events`,提交回执不等于抽取完成。 +- **统一发布** —— CLI、Knowledge Studio CLI和两个dsh插件共用版本与发布流程;dsh知识库插件从独立0.1.x版本系列迁至2.5.0。 + +### 已移除 + +- **旧知识库检索(BREAKING)** —— 移除 `bl knowledge retrieve`、`kscli retrieve` 和 `knowledgeRetrieve` 命令导出。迁移至 `bl knowledge search` 或 `kscli search`,使用检索服务的 `--agent-id`;旧的index参数不能直接照搬。 +- **旧Memory库接口(BREAKING)** —— 导出类型 `MemoryAddResponse` 替换为 `MemoryAddAsyncResponse`;库调用方需适配更新后的异步请求/响应契约。 + +### 修复 + +- **记忆完成判定与输入校验** —— 空事件列表或缺少事件ID不再误报完成;轮询遵守超时预算,部分失败返回非零退出码,非法JSON元素和属性类型在请求前拒绝。 +- **检索说明** —— 明确 `--min-score` 默认0.3且仅对pro生效,lite不按该阈值过滤。 + +### 安全 + +- **Workspace端点** —— 拒绝可能改变请求目标主机的Workspace标识,防止凭据被发送到非预期主机。 + ## [2.4.0] - 2026-10-19 ### 新增 diff --git a/README.md b/README.md index b35b055b0..a8fb51936 100644 --- a/README.md +++ b/README.md @@ -194,6 +194,8 @@ Scan the QR code to join the Aliyun Model Studio CLI DingTalk user group for usa ## Links +Memory documentation (Chinese): [capability matrix](https://github.com/modelstudioai/cli/blob/main/docs/memory/cli-matrix.md) · [command guide](https://github.com/modelstudioai/cli/blob/main/docs/memory/memory-cli-guide.md). + | Resource | URL | | :--------------------------- | :-------------------------------------------------------------------------------------------------- | | Aliyun Model Studio CLI Site | https://bailian.console.aliyun.com/cli?spm=a2ty07.github | diff --git a/README.zh.md b/README.zh.md index 4cdebf186..7b0503dc4 100644 --- a/README.zh.md +++ b/README.zh.md @@ -193,6 +193,8 @@ bl update ## 相关链接 +Memory 用户文档:[能力矩阵](https://github.com/modelstudioai/cli/blob/main/docs/memory/cli-matrix.md) · [命令指南](https://github.com/modelstudioai/cli/blob/main/docs/memory/memory-cli-guide.md)。 + | 资源 | 地址 | | :---------------------- | :-------------------------------------------------------------------------------------------------- | | 阿里云百炼 CLI 官方主页 | https://bailian.console.aliyun.com/cli?spm=a2ty07.github | diff --git a/docs/agents/cli-e2e-tests.md b/docs/agents/cli-e2e-tests.md index 2601f92a6..0cf6ed89f 100644 --- a/docs/agents/cli-e2e-tests.md +++ b/docs/agents/cli-e2e-tests.md @@ -75,12 +75,13 @@ describe.skipIf()("e2e: (DashScope …)", () => { | 场景 | 条件 | | ----------------------- | ---------------------------------------------------------------------------------------------------------- | -| 文本/搜索/记忆/配置 | `isDashScopeE2EReady()`(`.env` 中的 `DASHSCOPE_API_KEY`) | +| 文本/搜索/配置 | `isDashScopeE2EReady()`(`.env` 中的 `DASHSCOPE_API_KEY`) | | 图像/语音 | `isBailianE2EMediaEnabled() && isDashScopeE2EReady()` | | 视频 | `isBailianE2EVideoEnabled() && isDashScopeE2EReady()` | | OpenAPI AK/SK | `isOpenApiE2EReady()`(`.env` 中必须同时提供完整 AK/SK) | | 视频 download/task | 另需 `BAILIAN_E2E_VIDEO_TASK_ID` | | 知识库 chat/search live | `isChatE2EReady()` / `isSearchE2EReady()`(`knowledge chat/search`,需 `BAILIAN_WORKSPACE_ID` + agent ID) | +| 记忆 live | `isMemoryE2EReady()`(另需 `BAILIAN_E2E_MEMORY_LIBRARY_ID`;记忆服务需账号单独开通) | ## 用例类型 @@ -98,6 +99,8 @@ describe.skipIf()("e2e: (DashScope …)", () => { ## Journey 层(用户旅程全链路) +- Memory 主干:`packages/commands/tests/e2e/memory/journeys`(J1–J5 CLI)与 `packages/bailian-memo-dsh/tests/journeys`(J6–J8 受控宿主);严格入口 `node tools/test-memory-journeys.mjs`。默认库只要求 Key/Workspace,缺环境或跳过必跑项不能当作通过。真实 Agent 会话验收与受控宿主分开报告。 + - **定位**:命令 E2E 验单命令契约;journey 验“用户带着目标跨命令走通回路”,结构性断言不在 journey 重复 - **闭环断言**:fixture 埋独特标记词,以“标记词能否被召回”判定回路闭合;硬断言 fail,软断言 `recordSoft` 落报告人工复核 - **日志产物**:`createJourneyReporter` 在 `test/output//` 落盘 `journey-report.md`、分步 stdout/stderr、`resources.json`(未清理资源警示) @@ -164,6 +167,10 @@ test("foo bar --dry-run 仅输出计划", async () => { }); ``` +## Memory 发布前审计 + +发布判断应包含命令契约、风险到测试的映射和安装产物验证,不能只看用例总数或源代码 harness 全绿。参考 [Memory CLI 发布审计](../memory/2026-10-19-cli-release-audit.md)。`tools/smoke-memory-package.mjs` 接受本地 tarball 目录,使用隔离配置安装并执行产物 bin;`--live` 只对随机测试身份执行自清理 CRUD。服务 fixture 未配置的分组必须在报告中列为未运行,不能当作通过。真实 dsh/Skill 宿主是否作为门槛按当次用户明确的范围决定。 + ## 与批量压测的关系 - **E2E**:单条/少量调用、断言固定、可进 `vp test`(见上文 skip 条件) diff --git a/docs/agents/command-add-remove.md b/docs/agents/command-add-remove.md index be97d0e64..9a5585f5e 100644 --- a/docs/agents/command-add-remove.md +++ b/docs/agents/command-add-remove.md @@ -13,11 +13,11 @@ ``` 实现文件: - packages/commands/src/commands/knowledge/retrieve.ts - ↓ packages/commands/src/index.ts export { default as knowledgeRetrieve } + packages/commands/src/commands/knowledge/search.ts + ↓ packages/commands/src/index.ts export { default as knowledgeSearch } 产品入口: - packages/cli/src/commands.ts "knowledge retrieve": knowledgeRetrieve ↔ bl knowledge retrieve - packages/kscli/src/main.ts "retrieve": knowledgeRetrieve ↔ kscli retrieve + packages/cli/src/commands.ts "knowledge search": knowledgeSearch ↔ bl knowledge search + packages/kscli/src/main.ts "search": knowledgeSearch ↔ kscli search ``` 常见路径形态: @@ -43,7 +43,7 @@ packages/commands/src/index.ts ↓ ┌──────────────────────────────┬──────────────────────────────┐ │ packages/cli/src/commands.ts │ packages/kscli/src/main.ts │ -│ { "text chat": textChat } │ { "retrieve": knowledge... } │ +│ { "text chat": textChat } │ { "search": knowledge... } │ └──────────────┬───────────────┴──────────────┬───────────────┘ ↓ ↓ createCli(commands, identity) → runtime registry/help/middleware diff --git a/docs/agents/dsh-plugin.md b/docs/agents/dsh-plugin.md index b5f953560..6ce58b0ac 100644 --- a/docs/agents/dsh-plugin.md +++ b/docs/agents/dsh-plugin.md @@ -1,125 +1,147 @@ -# dsh 插件维护(packages/bailian-kb-dsh) +# dsh 插件维护(bailian-*-dsh) ## 触发条件 -- 改 `packages/bailian-kb-dsh` 的工具(`kb_search` / `kb_chat`)、服务缓存、settings / 凭据解析 -- 改 web 半(Settings 配置页 React 组件、CSS Modules) +- 改 `packages/bailian-kb-dsh` 或 `packages/bailian-memo-dsh` 的工具、Host/Client、settings、凭据解析 +- 改 web 半(设置页 React 组件、CSS Modules、locale) - 升级 `@deepseek-ai/dsh-*` peer 依赖 - 改插件包名、bundle 声明或产物布局 -- 发布插件到 npm +- 发布任一 dsh 插件到 npm -## 这个包和其他 packages 不一样的地方 +## 这个家族和其他 packages 不一样的地方 -它是**下游宿主适配层**:依赖方向朝外(消费 `bl` CLI 与百炼 API,装进 DeepSeek Harness 运行),不是 `core → runtime → commands → 产品入口` 这条链上的一环。由此带来四条与 `packages/*` 通行约定的**故意偏离**: +它们是**下游宿主适配层**:依赖方向朝外(消费百炼 API / 本地身份文件,装进 DeepSeek Harness 运行),不是 `core → runtime → commands → 产品入口` 这条链上的一环。 -| 项 | 本包 | 其他包 | 原因 | -| -------- | ---------------------------------------------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------ | -| 版本 | 独立 `0.1.x` | core/runtime/commands/cli/kscli 锁步 | 跟随 dsh 的 rc 节奏,与 `bl` 发版无关;不在 `tools/release/lib/packages.mjs` 白名单里 | -| 构建 | `tsc` + `tsdown` | `vp pack` | 浏览器半需要 `__ModuleLoader__` banner/footer 与 lightningcss CSS Modules 内联,`vp pack` 产不出 | -| 发布 | `publish.yml` 里 `package=bailian-kb-dsh` job,走 `publish-kb-dsh.mjs` | `publish.yml` 里 `publish-stable/channel.mjs` | 不在 `bailian-cli` 依赖闭包内,版本与构建都不同,不能与 `bl` 共用同一条 script | -| tsconfig | 三个 | 一个 | 见下 | +| 项 | dsh 插件包 | 其他包 | 原因 | +| -------- | -------------------------- | --------- | ------------------------------------------------------------------------------ | +| 版本 | 与 bailian-cli 相同 | 七包锁步 | 同一次发布使用相同版本 | +| 构建 | `tsc` + `tsdown` | `vp pack` | 浏览器半需要 `__ModuleLoader__` banner/footer 与 lightningcss CSS Modules 内联 | +| 发布 | publish-stable/channel.mjs | 同左 | 共用校验、npm 发布与 git tag | +| tsconfig | 三个 | 一个 | 见下 | + +当前包: + +| 包 | 职责 | 目标 dsh | 用户文档 | +| ------------------ | ------------------------------------------ | ----------------------------------------- | ------------------------------------------------------------ | +| `bailian-kb-dsh` | 知识库 `kb_search` / `kb_chat` + skill | **0.2.1** Volatile Config + SettingsForms | [README.zh.md](../../packages/bailian-kb-dsh/README.zh.md) | +| `bailian-memo-dsh` | 个人记忆自动召回 / 静默筛选 / 工具与设置页 | **0.2.1** Volatile Config + SettingsForms | [README.zh.md](../../packages/bailian-memo-dsh/README.zh.md) | ## tsconfig 三件套(改动前先读) -| 文件 | 谁在用 | 作用 | -| --------------------- | ---------------------------- | --------------------------------------------------------------------------------------------------------------- | -| `tsconfig.json` | oxlint / `vp check` 自动发现 | **纯类型检查**,覆盖 `src` + `tests` 两半:`noEmit` + `jsx: react-jsx` + DOM lib + `allowImportingTsExtensions` | -| `tsconfig.build.json` | `build` script(`tsc -b`) | **产出** node 半到 `dist/`,`exclude: src/web` | -| `tsconfig.web.json` | `build` / `typecheck` script | web 半的**隔离检查**:`types: []`,确保浏览器代码不误用 node 全局 | +| 文件 | 谁在用 | 作用 | +| --------------------- | --------------------- | ------------------------------------------------------- | +| `tsconfig.json` | oxlint / `vp check` | **纯类型检查**,`src` + `tests`,`noEmit` + `jsx` + DOM | +| `tsconfig.build.json` | `build`(`tsc -b`) | 产出 node 半到 `dist/`,`exclude: src/web` | +| `tsconfig.web.json` | `build` / `typecheck` | web 半隔离检查:`types: []` | -- 不要把 `tsconfig.json` 改成产出配置:`allowImportingTsExtensions` 与 emit 互斥,一改 oxlint 就再也检查不了 `.tsx`(报 TS17004 `--jsx` not set)。 -- web 半的隔离检查挂在 `build` script 里,因为 CI 只跑 `build` / 根 `check` / 根 `test`,`typecheck` script 没有调用点。 +- 不要把 `tsconfig.json` 改成产出配置。 +- web 隔离检查挂在 `build` script 里。 ## 必查清单 ### A. 包身份(改包名时三处必须一起改) - [ ] `package.json` 的 `name` -- [ ] `cordis.patch.yml` 的 `insert[].name`(profile 层栈按这个名字解析插件) -- [ ] `tsdown.config.ts` 的 `PLUGIN_ID`(进 `window.__ModuleLoader__.load({ id })` 与 `