feat: codebuddy-mem v13.0.0 - 基于 claude-mem 12.6.0 AGPL-3.0 分叉

- 全局重命名 claude-mem → codebuddy-mem
- AI 后端改为 DeepSeek V4 直连
- 适配 CodeBuddy Code 作为 MCP 客户端
- 修复 GS 函数 timeoutMs bug
- 新增 README / CHANGELOG / UPSTREAM / install.sh
- 协议:AGPL-3.0
This commit is contained in:
Mac
2026-05-05 01:52:14 +08:00
commit 6c8d178f5d
77 changed files with 9950 additions and 0 deletions

View File

@@ -0,0 +1,63 @@
---
name: claude-code-plugin-release
description: Automated semantic versioning and release workflow for Claude Code plugins. Handles version increments across package.json, marketplace.json, plugin.json manifests, npm publishing (so `npx claude-mem@X.Y.Z` resolves), build verification, git tagging, GitHub releases, and changelog generation.
---
# Version Bump & Release Workflow
**IMPORTANT:** Plan and write detailed release notes before starting.
**CRITICAL:** Commit EVERYTHING (including build artifacts). At the end of this workflow, NOTHING should be left uncommitted or unpushed. Run `git status` at the end to verify.
## Preparation
1. **Analyze**: Determine if the change is **PATCH** (bug fixes), **MINOR** (features), or **MAJOR** (breaking).
2. **Environment**: Identify repository owner/name from `git remote -v`.
3. **Paths — every file that carries the version string**:
- `package.json`**the npm/npx-published version** (`npx claude-mem@X.Y.Z` resolves from this)
- `plugin/package.json` — bundled plugin runtime deps
- `.claude-plugin/marketplace.json` — version inside `plugins[0].version`
- `.claude-plugin/plugin.json` — top-level Claude-plugin manifest
- `plugin/.claude-plugin/plugin.json` — bundled Claude-plugin manifest
- `.codex-plugin/plugin.json` — Codex-plugin manifest
- `openclaw/openclaw.plugin.json` — OpenClaw plugin manifest
Verify coverage before editing: `git grep -l "\"version\": \"<OLD>\""` should list all seven. If a new manifest has been added since this doc was last updated, update this list.
## Workflow
1. **Update**: Increment the version string in every path above. Do NOT touch `CHANGELOG.md` — it's regenerated.
2. **Verify**: `git grep -n "\"version\": \"<NEW>\""` — confirm all seven files match. `git grep -n "\"version\": \"<OLD>\""` — should return zero hits.
3. **Build**: `npm run build` to regenerate artifacts.
4. **Commit**: `git add -A && git commit -m "chore: bump version to X.Y.Z"`.
5. **Tag**: `git tag -a vX.Y.Z -m "Version X.Y.Z"`.
6. **Push**: `git push origin main && git push origin vX.Y.Z`.
7. **Publish to npm** (this is what makes `npx claude-mem@X.Y.Z` work):
```bash
npm publish
```
The `prepublishOnly` script re-runs `npm run build` automatically. Confirm publish succeeded:
```bash
npm view claude-mem@X.Y.Z version # should print X.Y.Z
```
Alternative: `npm run release:patch` / `release:minor` / `release:major` invokes `np` and handles tag+push+publish in one shot — use ONLY if you skipped steps 46, otherwise `np` will error on the existing tag.
8. **GitHub release**: `gh release create vX.Y.Z --title "vX.Y.Z" --notes "RELEASE_NOTES"`.
9. **Changelog**: Regenerate via the project's changelog script:
```bash
npm run changelog:generate
```
(Runs `node scripts/generate-changelog.js`, which pulls releases from the GitHub API and rewrites `CHANGELOG.md`.)
10. **Sync changelog**: Commit and push the updated `CHANGELOG.md`.
11. **Notify**: `npm run discord:notify vX.Y.Z` if applicable.
12. **Finalize**: `git status` — working tree must be clean.
## Checklist
- [ ] All seven config files have matching versions
- [ ] `git grep` for old version returns zero hits
- [ ] `npm run build` succeeded
- [ ] Git tag created and pushed
- [ ] **`npm publish` succeeded and `npm view claude-mem@X.Y.Z version` confirms it** (so `npx claude-mem@X.Y.Z` resolves)
- [ ] GitHub release created with notes
- [ ] `CHANGELOG.md` updated and pushed
- [ ] `git status` shows clean tree

View File

@@ -0,0 +1,34 @@
#!/usr/bin/env node
const fs = require('fs');
function generate() {
try {
const input = fs.readFileSync(0, 'utf8');
if (!input || input.trim() === '') {
process.stderr.write('No input received on stdin
');
process.exit(1);
}
const releases = JSON.parse(input);
const lines = ['# Changelog', '', 'All notable changes to this project.', ''];
releases.slice(0, 50).forEach(r => {
const date = r.published_at.split('T')[0];
lines.push(`## [${r.tag_name}] - ${date}`);
lines.push('');
if (r.body) lines.push(r.body.trim());
lines.push('');
});
process.stdout.write(lines.join('
') + '
');
} catch (err) {
process.stderr.write(`Error generating changelog: ${err.message}
`);
process.exit(1);
}
}
generate();