create-agentic-dev-env 0.2.2 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/create.js CHANGED
@@ -3,14 +3,16 @@ const fs = require('fs')
3
3
  const path = require('path')
4
4
  const { execSync } = require('child_process')
5
5
 
6
+ console.log(`create-agentic-dev-env v${require('../package.json').version}`)
7
+
6
8
  const name = process.argv[2]
7
9
  if (!name || !/^[a-z0-9][a-z0-9._-]*$/i.test(name)) {
8
- console.error('用法: create-agentic-dev-env <repo-name>')
10
+ console.error('Usage: create-agentic-dev-env <repo-name>')
9
11
  process.exit(1)
10
12
  }
11
13
  const dest = path.resolve(name)
12
14
  if (fs.existsSync(dest)) {
13
- console.error(`${name} 已存在`)
15
+ console.error(`${name} already exists`)
14
16
  process.exit(1)
15
17
  }
16
18
 
@@ -18,6 +20,8 @@ fs.cpSync(path.join(__dirname, '..', 'template'), dest, { recursive: true })
18
20
  // npm publish 會剝掉 dot 開頭的檔案/目錄,template 內以無點名稱存放,複製後改名
19
21
  fs.renameSync(path.join(dest, 'gitignore'), path.join(dest, '.gitignore'))
20
22
  fs.renameSync(path.join(dest, 'dot-claude'), path.join(dest, '.claude'))
23
+ // add-service 主要使用場景在 ADE repo 內,symlink 進 .claude/skills/ 讓它在本 repo 也可觸發(單一真相在 skills/)
24
+ fs.symlinkSync(path.join('..', '..', 'skills', 'ade-add-service'), path.join(dest, '.claude', 'skills', 'ade-add-service'), 'dir')
21
25
  for (const rel of fs.readdirSync(dest, { recursive: true })) {
22
26
  const p = path.join(dest, rel)
23
27
  if (!fs.statSync(p).isFile()) continue
@@ -35,10 +39,10 @@ fs.writeFileSync(destPkgPath, JSON.stringify(destPkg, null, 2) + '\n')
35
39
  execSync('git init', { cwd: dest, stdio: 'inherit' })
36
40
 
37
41
  console.log(`
38
- 已建立 ADE repo: ${name}/
42
+ Created ADE repo: ${name}/
39
43
 
40
- 下一步:
41
- 1. ${name}/package.json 的 repository.url
42
- 2. 開始填 knowledge/(服務格式見 knowledge/services/_template.yaml
43
- 3. push 後團隊即可: pnpm dlx "git+ssh://git@github.com/ORG/${name}.git" init
44
+ Next steps:
45
+ 1. Set repository.url in ${name}/package.json
46
+ 2. Start filling knowledge/ (service format: knowledge/services/_template.yaml)
47
+ 3. After pushing, team members run: pnpm dlx "git+ssh://git@github.com/ORG/${name}.git" init
44
48
  `)
package/lib/runner.js CHANGED
@@ -11,7 +11,7 @@ function run(cmd, pkgDir) {
11
11
  if (cmd === 'init') init(process.cwd(), pkgDir)
12
12
  else if (cmd === 'update') update(process.cwd())
13
13
  else {
14
- console.error('用法: init | update')
14
+ console.error('Usage: init | update')
15
15
  process.exit(1)
16
16
  }
17
17
  } catch (e) {
@@ -22,17 +22,17 @@ function run(cmd, pkgDir) {
22
22
 
23
23
  function init(cwd, srcDir) {
24
24
  if (fs.existsSync(path.join(cwd, '.ade.json'))) {
25
- throw new Error('此目錄已 init 過,請改用 update')
25
+ throw new Error('Already initialized here; run update instead')
26
26
  }
27
27
  install(cwd, srcDir)
28
- console.log('ADE init 完成')
28
+ console.log('ADE init done')
29
29
  }
30
30
 
31
31
  function update(cwd) {
32
32
  const cfgPath = path.join(cwd, '.ade.json')
33
- if (!fs.existsSync(cfgPath)) throw new Error('此目錄尚未 init')
33
+ if (!fs.existsSync(cfgPath)) throw new Error('Not initialized here; run init first')
34
34
  const cfg = JSON.parse(fs.readFileSync(cfgPath, 'utf8'))
35
- if (!cfg.source) throw new Error('.ade.json 缺少 sourceADE repo git url),請補上後重試')
35
+ if (!cfg.source) throw new Error('.ade.json is missing source (the ADE repo git url); add it and retry')
36
36
 
37
37
  // pnpm dlx 有快取(預設 ~24h),cli.js 所在的套件目錄可能是舊版內容;
38
38
  // update 的任務是拿最新知識,因此一律無視 pkgDir、自行 clone source
@@ -44,7 +44,7 @@ function update(cwd) {
44
44
  } finally {
45
45
  fs.rmSync(tmp, { recursive: true, force: true })
46
46
  }
47
- console.log('ADE update 完成')
47
+ console.log('ADE update done')
48
48
  }
49
49
 
50
50
  function removeManaged(cwd) {
@@ -65,7 +65,7 @@ function install(cwd, srcDir) {
65
65
  : []
66
66
  for (const d of skillDirs) {
67
67
  if (!d.startsWith('ade-')) {
68
- throw new Error(`skills/${d}: ADE repo skill 目錄必須以 ade- 前綴命名(update 只管理此前綴)`)
68
+ throw new Error(`skills/${d}: skill directories in an ADE repo must be prefixed with ade- (update only manages this prefix)`)
69
69
  }
70
70
  }
71
71
 
@@ -82,7 +82,7 @@ function install(cwd, srcDir) {
82
82
  const e = md.indexOf(END)
83
83
  if (b !== -1 || e !== -1) {
84
84
  if (b === -1 || e === -1 || e < b) {
85
- throw new Error('CLAUDE.md ADE 標記已損壞(BEGIN/END 不成對或順序顛倒),請手動修復後重試')
85
+ throw new Error('ADE markers in CLAUDE.md are corrupted (unpaired or reversed BEGIN/END); fix them manually and retry')
86
86
  }
87
87
  md = md.slice(0, b) + block + md.slice(e + END.length)
88
88
  } else {
@@ -117,7 +117,7 @@ function install(cwd, srcDir) {
117
117
  JSON.stringify({ source: source || prev.source || null, commit }, null, 2) + '\n'
118
118
  )
119
119
  if (!source && !prev.source) {
120
- console.warn('警告: ADE repo package.json 未設定 repository.url,update 將無法運作,請手動補 .ade.json 的 source')
120
+ console.warn('Warning: repository.url is not set in the ADE repo package.json; update will not work — set source in .ade.json manually')
121
121
  }
122
122
  }
123
123
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-agentic-dev-env",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "description": "Scaffold and manage team Agentic Dev Environment (ADE) knowledge repos",
5
5
  "repository": {
6
6
  "type": "git",
@@ -54,7 +54,7 @@ knowledge/
54
54
  ├── specs/ # 當前功能規格,持續迭代的真相來源
55
55
  └── prd/ # 一次開發一檔的需求文件,歷史文件不迭代
56
56
  skills/ # init 時注入工作目錄的 .claude/skills/(五支,見下方 Skills 一覽)
57
- .claude/skills/ # 在本 repo 內工作用的 skills(三支,見下方 Skills 一覽)
57
+ .claude/skills/ # 在本 repo 內工作用的 skills(三支+ade-add-service 的 symlink,見下方 Skills 一覽)
58
58
  claude-md/ # CLAUDE.md managed 區段的內容
59
59
  ```
60
60
 
@@ -64,7 +64,7 @@ claude-md/ # CLAUDE.md managed 區段的內容
64
64
 
65
65
  - **`ade-contribute`** — 知識回流的核心通道。當 agent 在工作中發現知識庫內容與現實不符(服務資訊過期、文件缺漏),或學到值得保存的新知識時觸發。它會先查 ADE repo 的 open issues/PRs 避免重複回流(已有記錄就留言補充),沒有才開 issue 記錄缺口,接著 clone 本 ADE repo、建分支、修改對應文件、開 PR 連結該 issue。人只需要 review PR。**注意:絕不直接改工作目錄裡的 `.claude/ade/` 副本**——那是 managed 區域,update 時會被覆蓋,改了等於白改;這支 skill 存在的意義就是把修改導向正確的地方。其他三支 skill 的「開 PR」動作也都委派給它,所以回流機制只需要維護這一份。
66
66
 
67
- - **`ade-add-service`** — 在知識庫註冊新服務。使用者說「新增服務」「把某某服務加進知識庫」時觸發。它會依 `knowledge/services/_template.yaml` 的欄位結構建立服務描述檔(`repo` 的 url 與 branch 為必填,因為 agent 之後要靠它自主 clone 服務),同步在 `services/index.md` 總覽表加一列,最後走 `ade-contribute` 流程開 PR。資訊不足時它會問人,不會留空猜測。
67
+ - **`ade-add-service`** — 在知識庫註冊新服務。使用者說「新增服務」「把某某服務加進知識庫」時觸發。它會依 `knowledge/services/_template.yaml` 的欄位結構建立服務描述檔(`repo` 的 url 與 branch 為必填,因為 agent 之後要靠它自主 clone 服務),同步在 `services/index.md` 總覽表加一列。資訊不足時它會問人,不會留空猜測。**本 ADE repo 內也可用**(`.claude/skills/` 有 symlink,這是主要使用場景):在本 repo 直接編輯、照一般 git 慣例收尾;在工作目錄則走 `ade-contribute` 流程開 PR
68
68
 
69
69
  - **`ade-align-spec`** — 開發收尾的文件對齊。RD 完成一個 PRD 的開發後觸發。它對照 `workspaces/` 下的實際實作,逐一核對 spec 中屬於這次 PRD 的 `🚧 尚未實作` 標記:做完且行為一致的移除標記;實作與 spec 有出入的**以實作為準**修改 spec 並記下差異;沒做的保留。全部驗收項完成時把 PRD 狀態改為「已實作」。最後開 PR,把差異清單列給 PO 判斷是否接受。它只動屬於這次 PRD 的標記,同一份 spec 上其他進行中 PRD 的標記不會被誤刪。
70
70
 
@@ -5,10 +5,10 @@ description: 在 ADE 知識庫註冊新服務。使用者說「新增服務」
5
5
 
6
6
  # 新增服務
7
7
 
8
- 1. **先確認尚未註冊**:讀 `knowledge/services/index.md` `services/` 目錄,該服務(或同 repo 的別名)已存在時,改走 `ade-contribute` 更新既有描述檔,不要另建
9
- 2. `ade-contribute` skill 的流程 clone ADE repo 並建立分支
8
+ 1. **判斷所在位置**:repo 根有 `knowledge/services/` 你就在 ADE repo 內,直接編輯本 repo 檔案;只有 `.claude/ade/knowledge/` → 你在工作目錄,依 `ade-contribute` skill 的流程 clone ADE repo 並建立分支(絕不直接改 `.claude/ade/` 副本)
9
+ 2. **確認尚未註冊**:讀 `knowledge/services/index.md` `services/` 目錄,該服務(或同 repo 的別名)已存在時,改為更新既有描述檔,不要另建
10
10
  3. 複製 `knowledge/services/_template.yaml` 為 `knowledge/services/<service-name>.yaml`
11
11
  4. 逐欄位填寫。**`repo`(url、branch)為必填**——agent 之後要靠它自主 clone;bootstrap 流程不要寫進來,那歸服務 repo 自己的文件(分層規則見 `knowledge/README.md`)
12
12
  - 資訊不足時詢問使用者,不要留空、不要猜測
13
13
  5. 在 `knowledge/services/index.md` 的總覽表加入該服務(一~兩行:定位與關係)
14
- 6. 依 `ade-contribute` 流程開 PR 回 ADE repo
14
+ 6. 收尾:在 ADE repo 內 → 依本 repo 一般 git 慣例 commit(是否開 PR 由使用者決定);在工作目錄 → 依 `ade-contribute` 流程開 PR 回 ADE repo