diff --git a/.codex-plugin/plugin.json b/.codex-plugin/plugin.json index 8d9861e..0730cb0 100644 --- a/.codex-plugin/plugin.json +++ b/.codex-plugin/plugin.json @@ -1,15 +1,15 @@ { "name": "devopsflow", - "version": "0.2.16", + "version": "0.2.17", "description": "DevOpsFlow engineering workflow skills for Codex: routing, DDD, TDD, planning, execution, debugging, review, verification, and branch finishing.", "composerIcon": "./assets/app-icon-small.svg", "logo": "./assets/app-icon.png", "author": { - "name": "LiTeXz", - "url": "https://github.com/LiTeXz" + "name": "TrueNine", + "url": "https://github.com/TrueNine" }, - "homepage": "https://github.com/LiTeXz/devflow-skills", - "repository": "https://github.com/LiTeXz/devflow-skills", + "homepage": "https://github.com/TrueNine/devopsflow", + "repository": "https://github.com/TrueNine/devopsflow", "license": "GPL-3.0-only", "keywords": ["codex", "skills", "workflow", "ddd", "tdd"], "skills": "./skills/", @@ -18,10 +18,10 @@ "displayName": "DevOpsFlow", "shortDescription": "Engineering workflow skills for Codex", "longDescription": "DevOpsFlow provides a composable Codex workflow for routing engineering requests, DDD modeling, TDD handoff, implementation planning, execution, debugging, review, verification, and branch finishing.", - "developerName": "LiTeXz", + "developerName": "TrueNine", "category": "Developer Tools", "capabilities": ["Interactive", "Read", "Write"], - "websiteURL": "https://github.com/LiTeXz/devflow-skills", + "websiteURL": "https://github.com/TrueNine/devopsflow", "defaultPrompt": [ "Use df-engineering-workflow-router to classify this task", "Use the df-publisher Codex worker session for git and GitHub publishing tasks.", diff --git a/.github/workflows/version-check.yml b/.github/workflows/version-check.yml index 236a5eb..315d7bb 100644 --- a/.github/workflows/version-check.yml +++ b/.github/workflows/version-check.yml @@ -69,7 +69,7 @@ jobs: set -euo pipefail VERSION=$(bun -e "console.log(require('./package.json').version)") TAG="v${VERSION}" - REPO=$(bun -e "const p=require('./.codex-plugin/plugin.json'); const repo=String(p.repository||'https://github.com/LiTeXz/devflow-skills'); const m=repo.match(/github\\.com[:/]([^/]+\\/[^/.#]+)(?:\\.git)?/); console.log(m ? m[1] : 'LiTeXz/devflow-skills')") + REPO=$(bun -e "const p=require('./.codex-plugin/plugin.json'); const repo=String(p.repository||'https://github.com/TrueNine/devopsflow'); const m=repo.match(/github\\.com[:/]([^/]+\\/[^/.#]+)(?:\\.git)?/); console.log(m ? m[1] : 'TrueNine/devopsflow')") HASH_FILE="skills/df-codex-assets/assets/hash.txt" STORED_HASH=$(tr -d '[:space:]' < "$HASH_FILE") diff --git a/README.md b/README.md index 2d33e7d..f505000 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +> 本项目基于 [LiTeXz/devflow-skills](https://github.com/LiTeXz/devflow-skills) 二次开发并公开发布。感谢原作者 [LiTeXz](https://github.com/LiTeXz) 的贡献;本项目继续遵循 [GPL-3.0-only](LICENSE) 协议。 +

DevOpsFlow

@@ -21,7 +23,7 @@ ### Codex ```bash -codex plugin marketplace add LiTeXz/devflow-skills +codex plugin marketplace add TrueNine/devopsflow codex plugin marketplace upgrade devopsflow codex plugin add devopsflow@devopsflow ``` @@ -35,9 +37,9 @@ codex plugin add devopsflow@devopsflow ```json { "$schema": "https://opencode.ai/config.json", - "plugin": ["/absolute/path/to/devflow-skills/.opencode/plugin/devopsflow.ts"], + "plugin": ["/absolute/path/to/devopsflow/.opencode/plugin/devopsflow.ts"], "skills": { - "paths": ["/absolute/path/to/devflow-skills/skills"] + "paths": ["/absolute/path/to/devopsflow/skills"] } } ``` diff --git a/agents/df-publisher.toml b/agents/df-publisher.toml index aced500..968e030 100644 --- a/agents/df-publisher.toml +++ b/agents/df-publisher.toml @@ -1,4 +1,4 @@ -# devopsflow-version = "0.2.16" +# devopsflow-version = "0.2.17" name = "df-publisher" description = "唯一被授权执行 git 和 gh 命令的 Codex worker session。负责提交、推送、PR、合并、发布等全部 git/github 操作。遵守保护分支规则。" nickname_candidates = ["df-publisher", "publisher"] diff --git a/package.json b/package.json index 261dbe3..d26b970 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "devopsflow", - "version": "0.2.16", + "version": "0.2.17", "type": "module", "private": true, "scripts": { diff --git a/scripts/project-branding.test.ts b/scripts/project-branding.test.ts index 9fef350..f88809a 100644 --- a/scripts/project-branding.test.ts +++ b/scripts/project-branding.test.ts @@ -20,7 +20,11 @@ const legacySlug = ["dev", "flow-skills"].join(""); const legacyBrand = ["Dev", "Flow"].join(""); const legacyUpper = ["DEV", "FLOW"].join(""); const legacyDotDirectory = [".dev", "flow"].join(""); -const allowedGithubSource = `LiTeXz/${legacySlug}`; +const legacyOwner = ["Li", "TeXz"].join(""); +const expectedOwner = "TrueNine"; +const expectedRepository = `${expectedOwner}/devopsflow`; +const originalRepository = `${legacyOwner}/${legacySlug}`; +const originalAttribution = `> 本项目基于 [${originalRepository}](https://github.com/${originalRepository}) 二次开发并公开发布。感谢原作者 [${legacyOwner}](https://github.com/${legacyOwner}) 的贡献;本项目继续遵循 [GPL-3.0-only](LICENSE) 协议。`; function collectTextFiles(directory: string): string[] { const files: string[] = []; @@ -42,17 +46,23 @@ describe("DevOpsFlow project identity", () => { const projectPath = relative(ROOT, file).replaceAll("\\", "/"); expect(projectPath, projectPath).not.toContain(legacySlug); - const content = readFileSync(file, "utf-8").replaceAll( - allowedGithubSource, + const content = readFileSync(file, "utf-8").replace( + originalAttribution, "", ); expect(content, projectPath).not.toContain(legacySlug); expect(content, projectPath).not.toContain(legacyBrand); expect(content, projectPath).not.toContain(legacyUpper); expect(content, projectPath).not.toContain(legacyDotDirectory); + expect(content, projectPath).not.toContain(legacyOwner); } }); + it("attributes the original project in the README first line", () => { + const readme = readFileSync(join(ROOT, "README.md"), "utf-8"); + expect(readme.split(/\r?\n/, 1)[0]).toBe(originalAttribution); + }); + it("uses the new package and plugin identity", () => { const packageJson = JSON.parse( readFileSync(join(ROOT, "package.json"), "utf-8"), @@ -64,5 +74,17 @@ describe("DevOpsFlow project identity", () => { expect(packageJson.name).toBe("devopsflow"); expect(pluginJson.name).toBe("devopsflow"); expect(pluginJson.interface.displayName).toBe("DevOpsFlow"); + expect(pluginJson.author.name).toBe(expectedOwner); + expect(pluginJson.author.url).toBe(`https://github.com/${expectedOwner}`); + expect(pluginJson.homepage).toBe( + `https://github.com/${expectedRepository}`, + ); + expect(pluginJson.repository).toBe( + `https://github.com/${expectedRepository}`, + ); + expect(pluginJson.interface.developerName).toBe(expectedOwner); + expect(pluginJson.interface.websiteURL).toBe( + `https://github.com/${expectedRepository}`, + ); }); }); diff --git a/skills/df-codex-assets/assets/hash.txt b/skills/df-codex-assets/assets/hash.txt index 4d87bce..a38c4d2 100644 --- a/skills/df-codex-assets/assets/hash.txt +++ b/skills/df-codex-assets/assets/hash.txt @@ -1 +1 @@ -c74dde06081009652f86893fe436f9b4a155f659c224deab4f5d5ec5a5f153fa +4b808f927420bf3f789448bb1a66673a3932d73cb0f5132198442c2b8cdd9bc3 diff --git a/skills/df-codex-assets/scripts/df-codex-assets.ts b/skills/df-codex-assets/scripts/df-codex-assets.ts index 783e946..c74845c 100644 --- a/skills/df-codex-assets/scripts/df-codex-assets.ts +++ b/skills/df-codex-assets/scripts/df-codex-assets.ts @@ -20,7 +20,7 @@ export const MANAGED_ASSET_PATHS = [ ] as const; export const HASH_FILE_PATH = "skills/df-codex-assets/assets/hash.txt"; -export const DEFAULT_REPOSITORY = "LiTeXz/devflow-skills"; +export const DEFAULT_REPOSITORY = "TrueNine/devopsflow"; export type FetchLike = ( input: string | URL | Request, diff --git a/skills/df-google-aip-api-design/SKILL.md b/skills/df-google-aip-api-design/SKILL.md index dea717e..6395bdf 100644 --- a/skills/df-google-aip-api-design/SKILL.md +++ b/skills/df-google-aip-api-design/SKILL.md @@ -72,4 +72,4 @@ Treat linter output as a useful guardrail, not the full design review. Some AIP ## Resources - Read `references/aip-map.md` when selecting which AIP rules to consult for a task. -- This skill was copied from `https://github.com/LiTeXz/google-aip-api-design` at commit `fa650a59f791cf3ba84e431dfcce441157ac5587` on branch `main`. +- This skill is maintained at `https://github.com/TrueNine/devopsflow/tree/main/skills/df-google-aip-api-design`.