Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# 0.3.4

Codex 插件采用小程序首页云屋图标,补充官方网站链接;同步生成、安装与打包均保留品牌资源。运行时权限和业务命令不变。

# 0.3.3

新增官方 npm 安装渠道、手动与 Agent 安装指南;运行时接口与权限保持兼容。
Expand Down
Binary file added assets/codex-logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions docs/03-agent-setup.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,3 +67,7 @@ OpenCode 接入 ZIP 中 skills/cloudhouse-admin 复制到 .opencode/skills/;Op
## 全量只读分析(CLI 0.3.0)

先执行 `ch auth status --profile prod --json`,检查 `data.profile.dataAnalysisEnabled`。开启时使用 `ch analysis resources` 发现字段和实际可用资源,再使用 `ch analysis list/get/export/download --profile prod`。例如:“使用 cloudhouse-admin 导出所有组别的报名记录,分析各轮通过率;保留 JSONL 在我指定的本机路径。”各页不是同一时刻快照,失败导出不能当作完整数据。分析权限不会授权通知、评分或账号管理等写操作。

## Codex 插件品牌与更新(0.3.4)

插件详情使用小程序首页的云屋图标,网站为 https://dayunwu.cn/ 。升级 CLI 后重新运行 `ch agent install codex --scope user`,再按输出运行 marketplace 注册和 plugin add。保留已有启用配置;必要时重新打开插件详情或启动新会话。
7 changes: 5 additions & 2 deletions integrations/codex/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
{
"name": "cloudhouse-admin",
"version": "0.3.3",
"version": "0.3.4",
"description": "CloudHouse 管理后台 CLI 原生技能",
"skills": "./skills/",
"interface": {
"displayName": "CloudHouse Admin",
"shortDescription": "用 CLI 管理招新、面试与 AI Coding"
"shortDescription": "用 CLI 管理招新、面试与 AI Coding",
"websiteURL": "https://dayunwu.cn/",
"logo": "./assets/logo.png",
"composerIcon": "./assets/logo.png"
}
}
Binary file added integrations/codex/assets/logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion integrations/codex/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "cloudhouse-admin-codex",
"version": "0.3.3",
"version": "0.3.4",
"type": "module",
"private": true,
"license": "MIT"
Expand Down
12 changes: 10 additions & 2 deletions integrations/codex/plugin.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,19 @@
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "cloudhouse-admin",
"version": "0.3.3",
"version": "0.3.4",
"description": "CloudHouse 管理后台 CLI 原生技能",
"homepage": "https://dayunwu.cn/",
"extensions": {
"com.openai": {
"skills": "./skills/"
"skills": "./skills/",
"interface": {
"displayName": "CloudHouse Admin",
"shortDescription": "用 CLI 管理招新、面试与 AI Coding",
"websiteURL": "https://dayunwu.cn/",
"logo": "./assets/logo.png",
"composerIcon": "./assets/logo.png"
}
}
}
}

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion integrations/dsh/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "cloudhouse-admin-dsh",
"version": "0.3.3",
"version": "0.3.4",
"type": "module",
"private": true,
"license": "MIT",
Expand Down

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion integrations/openclaw/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "cloudhouse-admin-openclaw",
"version": "0.3.3",
"version": "0.3.4",
"type": "module",
"private": true,
"license": "MIT"
Expand Down

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion integrations/opencode/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "cloudhouse-admin-opencode",
"version": "0.3.3",
"version": "0.3.4",
"type": "module",
"private": true,
"license": "MIT"
Expand Down

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion integrations/pi/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "cloudhouse-admin-pi",
"version": "0.3.3",
"version": "0.3.4",
"type": "module",
"private": true,
"license": "MIT",
Expand Down
105 changes: 105 additions & 0 deletions integrations/pi/skills/cloudhouse-admin/references/07-data-analysis.md

Large diffs are not rendered by default.

5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "cloudhouse-admin-cli",
"version": "0.3.3",
"version": "0.3.4",
"description": "CloudHouse 招新管理后台命令行工具(Agent 优先,JSON 输出)",
"type": "module",
"private": false,
Expand All @@ -26,7 +26,8 @@
"LICENSE",
"SECURITY.md",
"THIRD_PARTY_NOTICES.md",
"CHANGELOG.md"
"CHANGELOG.md",
"assets"
],
"license": "MIT",
"repository": {
Expand Down
66 changes: 51 additions & 15 deletions public-files.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"scope": "reviewed independent source; excludes this manifest, dist and .git",
"scope": "reviewed independent source; excludes this manifest and .git",
"files": [
{
"path": ".github/workflows/ci.yml",
Expand All @@ -11,7 +11,7 @@
},
{
"path": "CHANGELOG.md",
"sha256": "275fbba7159d655685c10ffc4bbf52f6206bebad070006c5fe15bf587cd3e0f5"
"sha256": "60580c84ebd5d1de37e5f22f611cb7d5441b994e7eccf379e2755e7a022a2658"
},
{
"path": "CONTRIBUTING.md",
Expand All @@ -33,6 +33,10 @@
"path": "THIRD_PARTY_NOTICES.md",
"sha256": "ca47054c162b01a70bd27c69a2ff0d7cc56eb0317b183067d14048d4a7f15e23"
},
{
"path": "assets/codex-logo.png",
"sha256": "5a288905e9086fb15c1b5d1df6cb36b4080653b22366c6068139d3b1803f1df2"
},
{
"path": "bin/ch.mjs",
"sha256": "4a0747e694362293f5116420c9627eab09632219985d57754048b6dc46e439dd"
Expand All @@ -51,7 +55,7 @@
},
{
"path": "docs/03-agent-setup.md",
"sha256": "52c9c4871b7916f2b84917f8d05cd8acefb6dbd975976a8921ddad76905cc14c"
"sha256": "474ba56346064db8f28eef936ddc7ba4b9c71fe07d7dbb9b11a67dd5a91a69be"
},
{
"path": "docs/04-audit.md",
Expand Down Expand Up @@ -83,7 +87,7 @@
},
{
"path": "integrations/codex/.codex-plugin/plugin.json",
"sha256": "cb77d2e347392e12346f8a12a9dba08b9474450929b0000bd349e271911a8304"
"sha256": "a43135c25343edd2797763878dcbd20dd011d9cd0592e4ca717abd711cd323f7"
},
{
"path": "integrations/codex/LICENSE",
Expand All @@ -93,13 +97,17 @@
"path": "integrations/codex/README.md",
"sha256": "82f69d19466acec192a2fa88a7884dac6b138cde0f35706c7c9890f75409798a"
},
{
"path": "integrations/codex/assets/logo.png",
"sha256": "5a288905e9086fb15c1b5d1df6cb36b4080653b22366c6068139d3b1803f1df2"
},
{
"path": "integrations/codex/package.json",
"sha256": "d86b6b5872979ce8ae92f51de5da85537a5165436c45615ae94055f1229668c7"
"sha256": "104565b2afac6bd4d1f2e38436e81dcef565833d586f96bca5ffe62da5d96206"
},
{
"path": "integrations/codex/plugin.json",
"sha256": "f59c30ff36801721210f4aca08d9a2bb6f217df91022af6942cf3a769ed1d50f"
"sha256": "50646bd4518ff27a1ad29a8a059b01b265be1c793e8cbc3dedbd7caf960c2e94"
},
{
"path": "integrations/codex/skills/cloudhouse-admin/SKILL.md",
Expand All @@ -113,6 +121,10 @@
"path": "integrations/codex/skills/cloudhouse-admin/references/02-agent-contract.md",
"sha256": "1b12baf8a56812a2d31300db13932e58b7187c6ae68681964bf98dc0f9f49eeb"
},
{
"path": "integrations/codex/skills/cloudhouse-admin/references/07-data-analysis.md",
"sha256": "2fe6398e24938911ceabcf888bac7388629e11b04e2e4930124fc5238c70f451"
},
{
"path": "integrations/dsh/LICENSE",
"sha256": "cb76b5c9bec926cd9fc21e23139363e22b1b92305586ac18e75391b99ab7608b"
Expand All @@ -127,7 +139,7 @@
},
{
"path": "integrations/dsh/package.json",
"sha256": "ad643e897df235b49528d29bc8bcf6eb6ca66711882ce7bb20800c165d7addda"
"sha256": "da552007babe340c5a4d4105fb907738018764b2abb4be4ddd23751e8870e4b5"
},
{
"path": "integrations/dsh/skills/cloudhouse-admin/SKILL.md",
Expand All @@ -141,6 +153,10 @@
"path": "integrations/dsh/skills/cloudhouse-admin/references/02-agent-contract.md",
"sha256": "1b12baf8a56812a2d31300db13932e58b7187c6ae68681964bf98dc0f9f49eeb"
},
{
"path": "integrations/dsh/skills/cloudhouse-admin/references/07-data-analysis.md",
"sha256": "2fe6398e24938911ceabcf888bac7388629e11b04e2e4930124fc5238c70f451"
},
{
"path": "integrations/openclaw/LICENSE",
"sha256": "cb76b5c9bec926cd9fc21e23139363e22b1b92305586ac18e75391b99ab7608b"
Expand All @@ -151,7 +167,7 @@
},
{
"path": "integrations/openclaw/package.json",
"sha256": "20b58309df1aa871b6dab5a8ef5ed5ce814057a45a06f084fd45177d199532c6"
"sha256": "ac807f894dc5cddb5368b4f0ddfd9cc7378bf44dc6348f2a04474ec5125c5cb7"
},
{
"path": "integrations/openclaw/skills/cloudhouse-admin/SKILL.md",
Expand All @@ -165,6 +181,10 @@
"path": "integrations/openclaw/skills/cloudhouse-admin/references/02-agent-contract.md",
"sha256": "1b12baf8a56812a2d31300db13932e58b7187c6ae68681964bf98dc0f9f49eeb"
},
{
"path": "integrations/openclaw/skills/cloudhouse-admin/references/07-data-analysis.md",
"sha256": "2fe6398e24938911ceabcf888bac7388629e11b04e2e4930124fc5238c70f451"
},
{
"path": "integrations/opencode/LICENSE",
"sha256": "cb76b5c9bec926cd9fc21e23139363e22b1b92305586ac18e75391b99ab7608b"
Expand All @@ -175,7 +195,7 @@
},
{
"path": "integrations/opencode/package.json",
"sha256": "c0a96f9022dcb692457b990e15e40578f8ffd82638f7e3934aec06a410db7548"
"sha256": "f6dbb76f6cf2d565d7133a580cf79b584b212ed95912711e5f16b773e321e7d4"
},
{
"path": "integrations/opencode/skills/cloudhouse-admin/SKILL.md",
Expand All @@ -189,6 +209,10 @@
"path": "integrations/opencode/skills/cloudhouse-admin/references/02-agent-contract.md",
"sha256": "1b12baf8a56812a2d31300db13932e58b7187c6ae68681964bf98dc0f9f49eeb"
},
{
"path": "integrations/opencode/skills/cloudhouse-admin/references/07-data-analysis.md",
"sha256": "2fe6398e24938911ceabcf888bac7388629e11b04e2e4930124fc5238c70f451"
},
{
"path": "integrations/pi/LICENSE",
"sha256": "cb76b5c9bec926cd9fc21e23139363e22b1b92305586ac18e75391b99ab7608b"
Expand All @@ -199,7 +223,7 @@
},
{
"path": "integrations/pi/package.json",
"sha256": "14c28aa9a8a5bcc42153070817d57ad5374c03976640db71b1823baab833e218"
"sha256": "528ff52e4a508ad557d5547a90c6089e18a0af86778c5a7b9a465952f62a0984"
},
{
"path": "integrations/pi/skills/cloudhouse-admin/SKILL.md",
Expand All @@ -213,21 +237,25 @@
"path": "integrations/pi/skills/cloudhouse-admin/references/02-agent-contract.md",
"sha256": "1b12baf8a56812a2d31300db13932e58b7187c6ae68681964bf98dc0f9f49eeb"
},
{
"path": "integrations/pi/skills/cloudhouse-admin/references/07-data-analysis.md",
"sha256": "2fe6398e24938911ceabcf888bac7388629e11b04e2e4930124fc5238c70f451"
},
{
"path": "package.json",
"sha256": "85284e80a020fbbc7fbd13c1990d07d4ba708166175f404993129f4c9fc196c1"
"sha256": "a266db20bf5bca510678f955b32218f086adb3b44ae3dde664f26db2f3a54e06"
},
{
"path": "scripts/build-release.mjs",
"sha256": "6ce3567a7bfa6a7e3932e258ed70f6486965996fcc8fe56fb0e65cae277c10fc"
"sha256": "50b613d5ea797cd7e8e4a993bfeff0cafe27efda845c1fa111f969cfd5551127"
},
{
"path": "scripts/check-security.mjs",
"sha256": "12d576170fb8ce2d046a6848436729b245635f4b1f662b82e2a3c734fcc1c89d"
},
{
"path": "scripts/sync-integrations.mjs",
"sha256": "c36faa5dc5ecc6c8b3ea1762165c305d29781810c63f59aca75c1475e8ce494a"
"sha256": "17be81015cb78fee9293a3735f1851c5a6684d15ee296fce1e1c65f5e1b327af"
},
{
"path": "scripts/update-docs.mjs",
Expand All @@ -245,6 +273,10 @@
"path": "skills/cloudhouse-admin/references/02-agent-contract.md",
"sha256": "1b12baf8a56812a2d31300db13932e58b7187c6ae68681964bf98dc0f9f49eeb"
},
{
"path": "skills/cloudhouse-admin/references/07-data-analysis.md",
"sha256": "2fe6398e24938911ceabcf888bac7388629e11b04e2e4930124fc5238c70f451"
},
{
"path": "src/agent-install.mjs",
"sha256": "60c66810e17807f781d562035093e6c95ba461af77dcc615c58d11db64c60219"
Expand Down Expand Up @@ -411,7 +443,7 @@
},
{
"path": "src/version.mjs",
"sha256": "02290e003dc095d629e955af4ee5f50e4334a389caf7983aa5c27c7710b65fa2"
"sha256": "a68dab0371366e189c6808f8c1c3c4c093a9afc527816216c3528b114c31329a"
},
{
"path": "test/accounts-applies.test.mjs",
Expand All @@ -429,6 +461,10 @@
"path": "test/cli-run.test.mjs",
"sha256": "002c3d28213b80cc6aa8d41e23407edfaa4e48147c5c13dfcb7be24df35cc2c3"
},
{
"path": "test/codex-brand.test.mjs",
"sha256": "37a35f869d1217f98b7043abda544b9101af439ee1418bcb60598e18e5270142"
},
{
"path": "test/config.test.mjs",
"sha256": "28d2da1a885c20344486e82e7d7ebd4878939608832a714da41c2e7d2df499b4"
Expand All @@ -447,7 +483,7 @@
},
{
"path": "test/extended.test.mjs",
"sha256": "bc018b7d0af09a5dc0be8f05f49f9d37730b4fd6feff08b18733cad652d00e0b"
"sha256": "e1d0cb24ad3358aed97d5845c639217bed2749c6cd0c41fed285330b558bdbe6"
},
{
"path": "test/flags.test.mjs",
Expand Down
2 changes: 1 addition & 1 deletion scripts/build-release.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ if (pack.filename !== `cloudhouse-admin-cli-${VERSION}.tgz`) throw Error('Unexpe
const stage = fs.mkdtempSync(path.join(os.tmpdir(), 'ch-oss-release-'))
try {
const portable = path.join(stage, 'cloudhouse-admin-cli'); fs.mkdirSync(portable)
for (const name of ['bin', 'src', 'skills', 'integrations', 'docs', 'package.json', 'README.md', 'LICENSE', 'SECURITY.md', 'THIRD_PARTY_NOTICES.md', 'CHANGELOG.md']) fs.cpSync(path.join(root, name), path.join(portable, name), { recursive: true })
for (const name of ['bin', 'src', 'assets', 'skills', 'integrations', 'docs', 'package.json', 'README.md', 'LICENSE', 'SECURITY.md', 'THIRD_PARTY_NOTICES.md', 'CHANGELOG.md']) fs.cpSync(path.join(root, name), path.join(portable, name), { recursive: true })
execFileSync('zip', ['-qr', path.join(out, `cloudhouse-admin-cli-${VERSION}.zip`), 'cloudhouse-admin-cli'], { cwd: stage })
for (const agent of ['codex', 'dsh', 'opencode', 'openclaw', 'pi']) {
const name = `cloudhouse-admin-${agent}`; fs.cpSync(path.join(root, 'integrations', agent), path.join(stage, name), { recursive: true })
Expand Down
16 changes: 11 additions & 5 deletions scripts/sync-integrations.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,28 @@ import { VERSION } from '../src/version.mjs'
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..')
const write = (file, value) => { fs.mkdirSync(path.dirname(file), { recursive: true }); fs.writeFileSync(file, typeof value === 'string' ? value : JSON.stringify(value, null, 2) + '\n') }
for (const name of ['00-overview', '01-command-reference', '02-agent-contract', '03-agent-setup', '04-audit', '05-release', '06-coverage', '07-data-analysis']) {
const source = path.join(root, 'docs', `${name}.md`)
const publicSource = path.join(root, 'opensource/docs', `${name}.md`)
const source = fs.existsSync(publicSource) ? publicSource : path.join(root, 'docs', `${name}.md`)
// Public docs already live inside this repository.
}
for (const name of ['01-command-reference', '02-agent-contract']) write(path.join(root, 'skills/cloudhouse-admin/references', `${name}.md`), fs.readFileSync(path.join(root, 'docs', `${name}.md`), 'utf8'))
for (const name of ['01-command-reference', '02-agent-contract', '07-data-analysis']) write(path.join(root, 'skills/cloudhouse-admin/references', `${name}.md`), fs.readFileSync(path.join(root, 'docs', `${name}.md`), 'utf8'))
for (const agent of ['codex', 'dsh', 'opencode', 'openclaw', 'pi']) {
const out = path.join(root, 'integrations', agent)
fs.mkdirSync(out, { recursive: true })
fs.cpSync(path.join(root, 'skills/cloudhouse-admin'), path.join(out, 'skills/cloudhouse-admin'), { recursive: true })
write(path.join(out, 'README.md'), `# CloudHouse Admin — ${agent}\n\n安装 CLI 后运行 \`ch agent install ${agent} --scope user\` 或 \`--scope project\`。\n\n凭据只由本机 CLI 会话或环境提供;本包不含凭据。详见 https://dayunwu.cn/cli/#agents 。\n` + (agent === 'dsh' ? '\n本地 Cordis 配置示例:\n\n```yaml\n- id: cloudhouse-admin\n name: /absolute/path/to/dsh/index.mjs\n```\n\n在桌面插件管理器导入本目录插件并启用。该插件需要宿主 skills 服务;由模型的 skill 工具发现 cloudhouse-admin,然后通过宿主终端调用 ch。\n' : ''))
write(path.join(out, 'package.json'), { name: `cloudhouse-admin-${agent}`, version: VERSION, type: 'module', private: true, license: 'MIT', ...(agent === 'pi' ? { keywords: ['pi-package'], pi: { skills: ['./skills'] } } : {}), ...(agent === 'dsh' ? { main: './index.mjs', exports: './index.mjs', peerDependencies: { '@deepseek-ai/cordis': '>=4' } } : {}) })
write(path.join(out, 'package.json'), { name: `cloudhouse-admin-${agent}`, version: VERSION, type: 'module', private: true, license: 'MIT', license: 'MIT', ...(agent === 'pi' ? { keywords: ['pi-package'], pi: { skills: ['./skills'] } } : {}), ...(agent === 'dsh' ? { main: './index.mjs', exports: './index.mjs', peerDependencies: { '@deepseek-ai/cordis': '>=4' } } : {}) })
if (agent === 'codex') {
write(path.join(out, 'plugin.json'), { '$schema': 'https://agent-plugins.org/schemas/1.0.0/plugin.schema.json', name: 'cloudhouse-admin', version: VERSION, description: 'CloudHouse 管理后台 CLI 原生技能', extensions: { 'com.openai': { skills: './skills/' } } })
write(path.join(out, '.codex-plugin/plugin.json'), { name: 'cloudhouse-admin', version: VERSION, description: 'CloudHouse 管理后台 CLI 原生技能', skills: './skills/', interface: { displayName: 'CloudHouse Admin', shortDescription: '用 CLI 管理招新、面试与 AI Coding' } })
const presentation = { displayName: 'CloudHouse Admin', shortDescription: '用 CLI 管理招新、面试与 AI Coding', websiteURL: 'https://dayunwu.cn/', logo: './assets/logo.png', composerIcon: './assets/logo.png' }
fs.mkdirSync(path.join(out, 'assets'), { recursive: true })
fs.copyFileSync(path.join(root, 'assets/codex-logo.png'), path.join(out, 'assets/logo.png'))
write(path.join(out, 'plugin.json'), { '$schema': 'https://agent-plugins.org/schemas/1.0.0/plugin.schema.json', name: 'cloudhouse-admin', version: VERSION, description: 'CloudHouse 管理后台 CLI 原生技能', homepage: 'https://dayunwu.cn/', extensions: { 'com.openai': { skills: './skills/', interface: presentation } } })
write(path.join(out, '.codex-plugin/plugin.json'), { name: 'cloudhouse-admin', version: VERSION, description: 'CloudHouse 管理后台 CLI 原生技能', skills: './skills/', interface: presentation })
write(path.join(out, '.agents/plugins/marketplace.json'), { name: 'cloudhouse-admin-local', interface: { displayName: 'CloudHouse Admin' }, plugins: [{ name: 'cloudhouse-admin', category: 'Productivity', source: { source: 'local', path: './' }, policy: { installation: 'AVAILABLE', authentication: 'ON_INSTALL' } }] })
}
if (agent === 'dsh') write(path.join(out, 'index.mjs'), `import fs from 'node:fs'\nimport { fileURLToPath } from 'node:url'\nexport const name = 'cloudhouse-admin'\nexport const inject = ['skills']\nexport function apply(ctx) {\n ctx.skills.register({ name, description: '通过 ch CLI 管理 CloudHouse 招新后台', content: fs.readFileSync(new URL('./skills/cloudhouse-admin/SKILL.md', import.meta.url), 'utf8'), source: 'bundled', invocation: { modelInvocable: true, userInvocable: true }, resourceBase: { kind: 'directory', path: fileURLToPath(new URL('./skills/cloudhouse-admin/', import.meta.url)) } })\n}\n`)
}

for (const agent of ['codex','dsh','opencode','openclaw','pi']) fs.copyFileSync(path.join(root,'LICENSE'),path.join(root,'integrations',agent,'LICENSE'))

for (const agent of ['codex','dsh','opencode','openclaw','pi']) fs.copyFileSync(path.join(root,'LICENSE'),path.join(root,'integrations',agent,'LICENSE'))
Loading
Loading