@fredericboyer/dev-team 0.5.0 → 0.7.0

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.
Files changed (43) hide show
  1. package/README.md +12 -11
  2. package/dist/bin/dev-team.js +12 -12
  3. package/dist/bin/dev-team.js.map +1 -1
  4. package/dist/create-agent.js +6 -6
  5. package/dist/create-agent.js.map +1 -1
  6. package/dist/doctor.js +15 -16
  7. package/dist/doctor.js.map +1 -1
  8. package/dist/files.js +2 -0
  9. package/dist/files.js.map +1 -1
  10. package/dist/init.js +53 -40
  11. package/dist/init.js.map +1 -1
  12. package/dist/scan.js +9 -9
  13. package/dist/scan.js.map +1 -1
  14. package/dist/status.js +11 -11
  15. package/dist/status.js.map +1 -1
  16. package/dist/update.d.ts +1 -4
  17. package/dist/update.js +178 -59
  18. package/dist/update.js.map +1 -1
  19. package/package.json +2 -2
  20. package/templates/CLAUDE.md +14 -11
  21. package/templates/agent-memory/dev-team-hamilton/MEMORY.md +12 -0
  22. package/templates/agents/dev-team-beck.md +7 -0
  23. package/templates/agents/dev-team-borges.md +4 -4
  24. package/templates/agents/dev-team-brooks.md +42 -5
  25. package/templates/agents/dev-team-conway.md +7 -0
  26. package/templates/agents/dev-team-deming.md +16 -2
  27. package/templates/agents/dev-team-drucker.md +17 -5
  28. package/templates/agents/dev-team-hamilton.md +77 -0
  29. package/templates/agents/dev-team-mori.md +11 -2
  30. package/templates/agents/dev-team-tufte.md +24 -0
  31. package/templates/agents/dev-team-voss.md +12 -3
  32. package/templates/hooks/dev-team-post-change-review.js +69 -40
  33. package/templates/hooks/dev-team-pre-commit-gate.js +65 -52
  34. package/templates/hooks/dev-team-tdd-enforce.js +27 -6
  35. package/templates/hooks/dev-team-watch-list.js +3 -3
  36. package/templates/settings.json +6 -16
  37. package/templates/skills/dev-team-assess/SKILL.md +167 -0
  38. package/templates/skills/dev-team-audit/SKILL.md +8 -3
  39. package/templates/skills/dev-team-merge/SKILL.md +95 -0
  40. package/templates/skills/dev-team-review/SKILL.md +9 -4
  41. package/templates/skills/dev-team-security-status/SKILL.md +43 -0
  42. package/templates/skills/dev-team-task/SKILL.md +28 -41
  43. package/templates/hooks/dev-team-task-loop.js +0 -73
package/dist/scan.js CHANGED
@@ -8,7 +8,7 @@ exports.formatScanReport = formatScanReport;
8
8
  exports.parseCiScripts = parseCiScripts;
9
9
  exports.parseHookCommands = parseHookCommands;
10
10
  const path_1 = __importDefault(require("path"));
11
- const files_1 = require("./files");
11
+ const files_js_1 = require("./files.js");
12
12
  /**
13
13
  * Scans a project directory for existing tooling and identifies gaps.
14
14
  * Returns a list of findings with actionable recommendations.
@@ -29,7 +29,7 @@ function scanProject(targetDir) {
29
29
  { file: ".rubocop.yml", tool: "RuboCop" },
30
30
  { file: ".golangci.yml", tool: "golangci-lint" },
31
31
  ];
32
- const foundLinter = linters.find((l) => (0, files_1.fileExists)(path_1.default.join(targetDir, l.file)));
32
+ const foundLinter = linters.find((l) => (0, files_js_1.fileExists)(path_1.default.join(targetDir, l.file)));
33
33
  if (foundLinter) {
34
34
  findings.push({
35
35
  category: "linter",
@@ -40,7 +40,7 @@ function scanProject(targetDir) {
40
40
  }
41
41
  else {
42
42
  // Check package.json for lint script
43
- const pkg = (0, files_1.readFile)(path_1.default.join(targetDir, "package.json"));
43
+ const pkg = (0, files_js_1.readFile)(path_1.default.join(targetDir, "package.json"));
44
44
  if (pkg && pkg.includes('"lint"')) {
45
45
  findings.push({
46
46
  category: "linter",
@@ -69,7 +69,7 @@ function scanProject(targetDir) {
69
69
  { file: "rustfmt.toml", tool: "rustfmt" },
70
70
  { file: ".clang-format", tool: "clang-format" },
71
71
  ];
72
- const foundFormatter = formatters.find((f) => (0, files_1.fileExists)(path_1.default.join(targetDir, f.file)));
72
+ const foundFormatter = formatters.find((f) => (0, files_js_1.fileExists)(path_1.default.join(targetDir, f.file)));
73
73
  if (foundFormatter) {
74
74
  findings.push({
75
75
  category: "formatter",
@@ -96,7 +96,7 @@ function scanProject(targetDir) {
96
96
  { file: ".bandit", tool: "Bandit" },
97
97
  { file: ".safety-policy.yml", tool: "Safety" },
98
98
  ];
99
- const foundSast = sastConfigs.find((s) => (0, files_1.fileExists)(path_1.default.join(targetDir, s.file)));
99
+ const foundSast = sastConfigs.find((s) => (0, files_js_1.fileExists)(path_1.default.join(targetDir, s.file)));
100
100
  if (foundSast) {
101
101
  findings.push({
102
102
  category: "sast",
@@ -125,7 +125,7 @@ function scanProject(targetDir) {
125
125
  ];
126
126
  const foundCi = ciConfigs.find((c) => {
127
127
  const fullPath = path_1.default.join(targetDir, c.path);
128
- return (0, files_1.fileExists)(fullPath) || (0, files_1.dirExists)(fullPath);
128
+ return (0, files_js_1.fileExists)(fullPath) || (0, files_js_1.dirExists)(fullPath);
129
129
  });
130
130
  if (foundCi) {
131
131
  findings.push({
@@ -153,7 +153,7 @@ function scanProject(targetDir) {
153
153
  { file: "Cargo.lock", tool: "cargo audit" },
154
154
  { file: "go.sum", tool: "govulncheck" },
155
155
  ];
156
- const foundLock = lockFiles.find((l) => (0, files_1.fileExists)(path_1.default.join(targetDir, l.file)));
156
+ const foundLock = lockFiles.find((l) => (0, files_js_1.fileExists)(path_1.default.join(targetDir, l.file)));
157
157
  if (foundLock) {
158
158
  findings.push({
159
159
  category: "dependency",
@@ -246,7 +246,7 @@ function formatScanReport(findings) {
246
246
  */
247
247
  function parseCiScripts(targetDir) {
248
248
  const ciRelevantScripts = ["lint", "format:check", "test", "typecheck", "build"];
249
- const pkgContent = (0, files_1.readFile)(path_1.default.join(targetDir, "package.json"));
249
+ const pkgContent = (0, files_js_1.readFile)(path_1.default.join(targetDir, "package.json"));
250
250
  if (!pkgContent)
251
251
  return [];
252
252
  try {
@@ -263,7 +263,7 @@ function parseCiScripts(targetDir) {
263
263
  * Returns an array of command strings found across all hook events.
264
264
  */
265
265
  function parseHookCommands(targetDir) {
266
- const settingsContent = (0, files_1.readFile)(path_1.default.join(targetDir, ".claude", "settings.json"));
266
+ const settingsContent = (0, files_js_1.readFile)(path_1.default.join(targetDir, ".claude", "settings.json"));
267
267
  if (!settingsContent)
268
268
  return [];
269
269
  try {
package/dist/scan.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"scan.js","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scan.js","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"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"}
package/dist/status.js CHANGED
@@ -6,11 +6,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.status = status;
7
7
  const path_1 = __importDefault(require("path"));
8
8
  const fs_1 = __importDefault(require("fs"));
9
- const files_1 = require("./files");
9
+ const files_js_1 = require("./files.js");
10
10
  function status(targetDir) {
11
- const claudeDir = path_1.default.join(targetDir, ".claude");
12
- const prefsPath = path_1.default.join(claudeDir, "dev-team.json");
13
- const prefsContent = (0, files_1.readFile)(prefsPath);
11
+ const devTeamDir = path_1.default.join(targetDir, ".dev-team");
12
+ const prefsPath = path_1.default.join(devTeamDir, "config.json");
13
+ const prefsContent = (0, files_js_1.readFile)(prefsPath);
14
14
  if (!prefsContent) {
15
15
  console.error("Not a dev-team project. Run `npx dev-team init` first.");
16
16
  process.exit(1);
@@ -20,7 +20,7 @@ function status(targetDir) {
20
20
  prefs = JSON.parse(prefsContent);
21
21
  }
22
22
  catch {
23
- console.error("dev-team.json is corrupted.");
23
+ console.error("config.json is corrupted.");
24
24
  process.exit(1);
25
25
  }
26
26
  console.log("\ndev-team status\n");
@@ -36,8 +36,8 @@ function status(targetDir) {
36
36
  const hooks = prefs.hooks || [];
37
37
  console.log(` Hooks: ${hooks.join(", ")} (${hooks.length})`);
38
38
  // Skills (auto-discovered)
39
- const skillsDir = path_1.default.join(claudeDir, "skills");
40
- const skills = (0, files_1.listSubdirectories)(skillsDir).map((s) => s.replace("dev-team-", ""));
39
+ const skillsDir = path_1.default.join(devTeamDir, "skills");
40
+ const skills = (0, files_js_1.listSubdirectories)(skillsDir).map((s) => s.replace("dev-team-", ""));
41
41
  console.log(` Skills: ${skills.length > 0 ? skills.join(", ") : "none"} (${skills.length})`);
42
42
  // Workflow
43
43
  if (prefs.issueTracker) {
@@ -48,11 +48,11 @@ function status(targetDir) {
48
48
  }
49
49
  // Memory status
50
50
  console.log("\n Memory:");
51
- const memoryDir = path_1.default.join(claudeDir, "agent-memory");
51
+ const memoryDir = path_1.default.join(devTeamDir, "agent-memory");
52
52
  for (const label of agents) {
53
53
  const dirName = `dev-team-${label.toLowerCase()}`;
54
54
  const memPath = path_1.default.join(memoryDir, dirName, "MEMORY.md");
55
- if ((0, files_1.fileExists)(memPath)) {
55
+ if ((0, files_js_1.fileExists)(memPath)) {
56
56
  try {
57
57
  const stat = fs_1.default.statSync(memPath);
58
58
  const hasContent = stat.size > 200; // Template is ~200 bytes
@@ -67,8 +67,8 @@ function status(targetDir) {
67
67
  }
68
68
  }
69
69
  // Shared learnings
70
- const learningsPath = path_1.default.join(claudeDir, "dev-team-learnings.md");
71
- if ((0, files_1.fileExists)(learningsPath)) {
70
+ const learningsPath = path_1.default.join(devTeamDir, "learnings.md");
71
+ if ((0, files_js_1.fileExists)(learningsPath)) {
72
72
  try {
73
73
  const stat = fs_1.default.statSync(learningsPath);
74
74
  console.log(` Shared learnings: ${stat.size > 300 ? "has content" : "template only"}`);
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"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"}
package/dist/update.d.ts CHANGED
@@ -1,5 +1,2 @@
1
- /**
2
- * Update flow: upgrades installed agents, hooks, and skills to latest templates.
3
- * Preserves user customizations in CLAUDE.md and agent memory files.
4
- */
1
+ export declare function compareSemver(a: string, b: string): number;
5
2
  export declare function update(targetDir: string): Promise<void>;
package/dist/update.js CHANGED
@@ -3,11 +3,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.compareSemver = compareSemver;
6
7
  exports.update = update;
7
8
  const path_1 = __importDefault(require("path"));
8
- const files_1 = require("./files");
9
+ const files_js_1 = require("./files.js");
9
10
  const fs_1 = __importDefault(require("fs"));
10
- const init_1 = require("./init");
11
+ const init_js_1 = require("./init.js");
11
12
  const MIGRATIONS = [
12
13
  {
13
14
  version: "0.4.0",
@@ -39,19 +40,29 @@ const MIGRATIONS = [
39
40
  ],
40
41
  },
41
42
  ];
42
- function runMigrations(prefs, fromVersion, claudeDir) {
43
+ function compareSemver(a, b) {
44
+ const pa = a.split(".").map((n) => parseInt(n, 10));
45
+ const pb = b.split(".").map((n) => parseInt(n, 10));
46
+ for (let i = 0; i < 3; i++) {
47
+ const diff = (pa[i] || 0) - (pb[i] || 0);
48
+ if (diff !== 0)
49
+ return diff;
50
+ }
51
+ return 0;
52
+ }
53
+ function runMigrations(prefs, fromVersion, devTeamDir) {
43
54
  const log = [];
44
55
  for (const migration of MIGRATIONS) {
45
56
  // Skip migrations for versions already applied
46
- if (fromVersion >= migration.version)
57
+ if (compareSemver(fromVersion, migration.version) >= 0)
47
58
  continue;
48
59
  if (migration.agentRenames) {
49
60
  for (const rename of migration.agentRenames) {
50
- const agentsDir = path_1.default.join(claudeDir, "agents");
51
- const memoryDir = path_1.default.join(claudeDir, "agent-memory");
61
+ const agentsDir = path_1.default.join(devTeamDir, "agents");
62
+ const memoryDir = path_1.default.join(devTeamDir, "agent-memory");
52
63
  // Rename agent file
53
64
  const oldAgentPath = path_1.default.join(agentsDir, rename.oldFile);
54
- if ((0, files_1.fileExists)(oldAgentPath)) {
65
+ if ((0, files_js_1.fileExists)(oldAgentPath)) {
55
66
  try {
56
67
  fs_1.default.unlinkSync(oldAgentPath);
57
68
  }
@@ -63,8 +74,8 @@ function runMigrations(prefs, fromVersion, claudeDir) {
63
74
  // Rename memory directory (preserve calibration data)
64
75
  const oldMemDir = path_1.default.join(memoryDir, rename.oldFile.replace(".md", ""));
65
76
  const newMemDir = path_1.default.join(memoryDir, rename.newFile.replace(".md", ""));
66
- if ((0, files_1.fileExists)(path_1.default.join(oldMemDir, "MEMORY.md")) &&
67
- !(0, files_1.fileExists)(path_1.default.join(newMemDir, "MEMORY.md"))) {
77
+ if ((0, files_js_1.fileExists)(path_1.default.join(oldMemDir, "MEMORY.md")) &&
78
+ !(0, files_js_1.fileExists)(path_1.default.join(newMemDir, "MEMORY.md"))) {
68
79
  try {
69
80
  fs_1.default.mkdirSync(newMemDir, { recursive: true });
70
81
  fs_1.default.renameSync(path_1.default.join(oldMemDir, "MEMORY.md"), path_1.default.join(newMemDir, "MEMORY.md"));
@@ -86,21 +97,129 @@ function runMigrations(prefs, fromVersion, claudeDir) {
86
97
  return log;
87
98
  }
88
99
  // Derived from init.ts — single source of truth, no drift
89
- const AGENT_FILES = Object.fromEntries(init_1.ALL_AGENTS.map((a) => [a.label, a.file]));
90
- const HOOK_FILES = Object.fromEntries(init_1.QUALITY_HOOKS.map((h) => [h.label, h.file]));
100
+ const AGENT_FILES = Object.fromEntries(init_js_1.ALL_AGENTS.map((a) => [a.label, a.file]));
101
+ const HOOK_FILES = Object.fromEntries(init_js_1.QUALITY_HOOKS.map((h) => [h.label, h.file]));
91
102
  // Skills auto-discovered at runtime from templates/skills/
92
103
  /**
93
104
  * Update flow: upgrades installed agents, hooks, and skills to latest templates.
94
105
  * Preserves user customizations in CLAUDE.md and agent memory files.
95
106
  */
107
+ /**
108
+ * Migrates files from .claude/ to .dev-team/ directory structure.
109
+ * Preserves all user content (memories, learnings).
110
+ */
111
+ function migrateFromClaude(targetDir) {
112
+ const log = [];
113
+ const claudeDir = path_1.default.join(targetDir, ".claude");
114
+ const devTeamDir = path_1.default.join(targetDir, ".dev-team");
115
+ // Directories to move
116
+ const dirMappings = [
117
+ { from: path_1.default.join(claudeDir, "agents"), to: path_1.default.join(devTeamDir, "agents") },
118
+ { from: path_1.default.join(claudeDir, "agent-memory"), to: path_1.default.join(devTeamDir, "agent-memory") },
119
+ { from: path_1.default.join(claudeDir, "hooks"), to: path_1.default.join(devTeamDir, "hooks") },
120
+ { from: path_1.default.join(claudeDir, "skills"), to: path_1.default.join(devTeamDir, "skills") },
121
+ ];
122
+ // Protected files that must never be overwritten during migration
123
+ const protectedPatterns = ["learnings.md", "MEMORY.md"];
124
+ for (const { from, to } of dirMappings) {
125
+ if ((0, files_js_1.dirExists)(from)) {
126
+ const files = (0, files_js_1.listFilesRecursive)(from);
127
+ for (const filePath of files) {
128
+ const relativePath = path_1.default.relative(from, filePath);
129
+ const destPath = path_1.default.join(to, relativePath);
130
+ // Never overwrite existing files in .dev-team/ (partial migration safety)
131
+ if (!(0, files_js_1.fileExists)(destPath)) {
132
+ (0, files_js_1.copyFile)(filePath, destPath);
133
+ }
134
+ }
135
+ log.push(`Migrated ${path_1.default.basename(from)}/ → .dev-team/${path_1.default.basename(to)}/`);
136
+ }
137
+ }
138
+ // File mappings
139
+ const fileMappings = [
140
+ {
141
+ from: path_1.default.join(claudeDir, "dev-team-learnings.md"),
142
+ to: path_1.default.join(devTeamDir, "learnings.md"),
143
+ },
144
+ { from: path_1.default.join(claudeDir, "dev-team.json"), to: path_1.default.join(devTeamDir, "config.json") },
145
+ ];
146
+ for (const { from, to } of fileMappings) {
147
+ if ((0, files_js_1.fileExists)(from)) {
148
+ const isProtected = protectedPatterns.some((p) => to.endsWith(p));
149
+ // Never overwrite protected files (learnings, memory)
150
+ if (!isProtected || !(0, files_js_1.fileExists)(to)) {
151
+ (0, files_js_1.copyFile)(from, to);
152
+ }
153
+ log.push(`Migrated ${path_1.default.basename(from)} → .dev-team/${path_1.default.basename(to)}`);
154
+ }
155
+ }
156
+ // Rewrite settings.json hook paths from .claude/hooks/ to .dev-team/hooks/
157
+ const settingsPath = path_1.default.join(claudeDir, "settings.json");
158
+ const settingsContent = (0, files_js_1.readFile)(settingsPath);
159
+ if (settingsContent) {
160
+ const updated = settingsContent.replace(/\.claude\/hooks\//g, ".dev-team/hooks/");
161
+ (0, files_js_1.writeFile)(settingsPath, updated);
162
+ log.push("Rewrote settings.json hook paths to .dev-team/hooks/");
163
+ }
164
+ // Clean up old .claude/ files (except settings.json and settings.local.json)
165
+ for (const { from } of dirMappings) {
166
+ if ((0, files_js_1.dirExists)(from)) {
167
+ try {
168
+ fs_1.default.rmSync(from, { recursive: true });
169
+ }
170
+ catch {
171
+ // best effort
172
+ }
173
+ }
174
+ }
175
+ for (const { from } of fileMappings) {
176
+ if ((0, files_js_1.fileExists)(from)) {
177
+ try {
178
+ fs_1.default.unlinkSync(from);
179
+ }
180
+ catch {
181
+ // best effort
182
+ }
183
+ }
184
+ }
185
+ // Clean up other dev-team files in .claude/
186
+ const otherFiles = [
187
+ path_1.default.join(claudeDir, "dev-team-review-pending.json"),
188
+ path_1.default.join(claudeDir, "dev-team-task.json"),
189
+ ];
190
+ for (const f of otherFiles) {
191
+ if ((0, files_js_1.fileExists)(f)) {
192
+ try {
193
+ fs_1.default.unlinkSync(f);
194
+ }
195
+ catch {
196
+ // best effort
197
+ }
198
+ }
199
+ }
200
+ return log;
201
+ }
96
202
  async function update(targetDir) {
97
203
  console.log("\ndev-team update — Upgrading to latest templates\n");
98
204
  const claudeDir = path_1.default.join(targetDir, ".claude");
99
- const prefsPath = path_1.default.join(claudeDir, "dev-team.json");
205
+ const devTeamDir = path_1.default.join(targetDir, ".dev-team");
206
+ // Check if migration from .claude/ to .dev-team/ is needed
207
+ const oldPrefsPath = path_1.default.join(claudeDir, "dev-team.json");
208
+ const newPrefsPath = path_1.default.join(devTeamDir, "config.json");
209
+ const needsMigration = (0, files_js_1.fileExists)(oldPrefsPath) && !(0, files_js_1.fileExists)(newPrefsPath);
210
+ if (needsMigration) {
211
+ console.log("Migrating from .claude/ to .dev-team/ directory structure...\n");
212
+ const migrationLog = migrateFromClaude(targetDir);
213
+ for (const entry of migrationLog) {
214
+ console.log(` ${entry}`);
215
+ }
216
+ console.log("");
217
+ }
218
+ const prefsPath = newPrefsPath;
100
219
  // Step 1: Read existing preferences
101
- const prefsContent = (0, files_1.readFile)(prefsPath);
220
+ const prefsContent = (0, files_js_1.readFile)(prefsPath);
102
221
  if (!prefsContent) {
103
- console.error("Error: No dev-team.json found. Run `npx dev-team init` first.");
222
+ console.error("Error: No .dev-team/config.json found. Run `npx dev-team init` first.");
104
223
  process.exit(1);
105
224
  }
106
225
  let prefs;
@@ -110,7 +229,7 @@ async function update(targetDir) {
110
229
  catch {
111
230
  const backupPath = prefsPath + ".bak";
112
231
  try {
113
- (0, files_1.copyFile)(prefsPath, backupPath);
232
+ (0, files_js_1.copyFile)(prefsPath, backupPath);
114
233
  console.error(`Error: dev-team.json is corrupted. Backed up to ${backupPath}. Run \`npx dev-team init\` to reinitialize.`);
115
234
  }
116
235
  catch {
@@ -118,7 +237,7 @@ async function update(targetDir) {
118
237
  }
119
238
  process.exit(1);
120
239
  }
121
- const packageVersion = (0, files_1.getPackageVersion)();
240
+ const packageVersion = (0, files_js_1.getPackageVersion)();
122
241
  if (prefs.version === packageVersion) {
123
242
  console.log(`Already at latest version (v${packageVersion})`);
124
243
  }
@@ -126,10 +245,10 @@ async function update(targetDir) {
126
245
  console.log(`Upgrading from v${prefs.version} to v${packageVersion}`);
127
246
  }
128
247
  // Run version migrations before updating agents
129
- const migrationLog = runMigrations(prefs, prefs.version || "0.0.0", claudeDir);
130
- if (migrationLog.length > 0) {
248
+ const agentMigrationLog = runMigrations(prefs, prefs.version || "0.0.0", devTeamDir);
249
+ if (agentMigrationLog.length > 0) {
131
250
  console.log("Migrations:");
132
- for (const entry of migrationLog) {
251
+ for (const entry of agentMigrationLog) {
133
252
  console.log(` ${entry}`);
134
253
  }
135
254
  console.log("");
@@ -137,7 +256,7 @@ async function update(targetDir) {
137
256
  console.log(` Agents: ${prefs.agents.join(", ")}`);
138
257
  console.log(` Hooks: ${prefs.hooks.join(", ")}`);
139
258
  console.log("");
140
- const templates = (0, files_1.templateDir)();
259
+ const templates = (0, files_js_1.templateDir)();
141
260
  const summary = {
142
261
  agents: { updated: [], added: [] },
143
262
  hooks: { updated: [], added: [] },
@@ -146,34 +265,34 @@ async function update(targetDir) {
146
265
  settings: false,
147
266
  };
148
267
  // Step 2: Update agents
149
- const agentsDir = path_1.default.join(claudeDir, "agents");
150
- const memoryDir = path_1.default.join(claudeDir, "agent-memory");
268
+ const agentsDir = path_1.default.join(devTeamDir, "agents");
269
+ const memoryDir = path_1.default.join(devTeamDir, "agent-memory");
151
270
  for (const label of prefs.agents) {
152
271
  const file = AGENT_FILES[label];
153
272
  if (!file)
154
273
  continue;
155
274
  const src = path_1.default.join(templates, "agents", file);
156
275
  const dest = path_1.default.join(agentsDir, file);
157
- if (!(0, files_1.fileExists)(src))
276
+ if (!(0, files_js_1.fileExists)(src))
158
277
  continue;
159
- if ((0, files_1.fileExists)(dest)) {
160
- const srcContent = (0, files_1.readFile)(src);
161
- const destContent = (0, files_1.readFile)(dest);
278
+ if ((0, files_js_1.fileExists)(dest)) {
279
+ const srcContent = (0, files_js_1.readFile)(src);
280
+ const destContent = (0, files_js_1.readFile)(dest);
162
281
  if (srcContent !== destContent) {
163
- (0, files_1.copyFile)(src, dest);
282
+ (0, files_js_1.copyFile)(src, dest);
164
283
  summary.agents.updated.push(label);
165
284
  }
166
285
  }
167
286
  else {
168
- (0, files_1.copyFile)(src, dest);
287
+ (0, files_js_1.copyFile)(src, dest);
169
288
  summary.agents.added.push(label);
170
289
  }
171
290
  // Create memory template if missing (never overwrite existing memory)
172
291
  const agentName = file.replace(".md", "");
173
292
  const memorySrc = path_1.default.join(templates, "agent-memory", agentName, "MEMORY.md");
174
293
  const memoryDest = path_1.default.join(memoryDir, agentName, "MEMORY.md");
175
- if (!(0, files_1.fileExists)(memoryDest) && (0, files_1.fileExists)(memorySrc)) {
176
- (0, files_1.copyFile)(memorySrc, memoryDest);
294
+ if (!(0, files_js_1.fileExists)(memoryDest) && (0, files_js_1.fileExists)(memorySrc)) {
295
+ (0, files_js_1.copyFile)(memorySrc, memoryDest);
177
296
  }
178
297
  }
179
298
  // Detect new agents available in templates but not in preferences
@@ -181,39 +300,39 @@ async function update(targetDir) {
181
300
  if (prefs.agents.includes(label))
182
301
  continue;
183
302
  const src = path_1.default.join(templates, "agents", file);
184
- if ((0, files_1.fileExists)(src)) {
303
+ if ((0, files_js_1.fileExists)(src)) {
185
304
  const dest = path_1.default.join(agentsDir, file);
186
- (0, files_1.copyFile)(src, dest);
305
+ (0, files_js_1.copyFile)(src, dest);
187
306
  summary.agents.added.push(label);
188
307
  prefs.agents.push(label);
189
308
  const agentName = file.replace(".md", "");
190
309
  const memorySrc = path_1.default.join(templates, "agent-memory", agentName, "MEMORY.md");
191
310
  const memoryDest = path_1.default.join(memoryDir, agentName, "MEMORY.md");
192
- if (!(0, files_1.fileExists)(memoryDest) && (0, files_1.fileExists)(memorySrc)) {
193
- (0, files_1.copyFile)(memorySrc, memoryDest);
311
+ if (!(0, files_js_1.fileExists)(memoryDest) && (0, files_js_1.fileExists)(memorySrc)) {
312
+ (0, files_js_1.copyFile)(memorySrc, memoryDest);
194
313
  }
195
314
  }
196
315
  }
197
316
  // Step 3: Update hooks
198
- const hooksDir = path_1.default.join(claudeDir, "hooks");
317
+ const hooksDir = path_1.default.join(devTeamDir, "hooks");
199
318
  for (const label of prefs.hooks) {
200
319
  const file = HOOK_FILES[label];
201
320
  if (!file)
202
321
  continue;
203
322
  const src = path_1.default.join(templates, "hooks", file);
204
323
  const dest = path_1.default.join(hooksDir, file);
205
- if (!(0, files_1.fileExists)(src))
324
+ if (!(0, files_js_1.fileExists)(src))
206
325
  continue;
207
- if ((0, files_1.fileExists)(dest)) {
208
- const srcContent = (0, files_1.readFile)(src);
209
- const destContent = (0, files_1.readFile)(dest);
326
+ if ((0, files_js_1.fileExists)(dest)) {
327
+ const srcContent = (0, files_js_1.readFile)(src);
328
+ const destContent = (0, files_js_1.readFile)(dest);
210
329
  if (srcContent !== destContent) {
211
- (0, files_1.copyFile)(src, dest);
330
+ (0, files_js_1.copyFile)(src, dest);
212
331
  summary.hooks.updated.push(label);
213
332
  }
214
333
  }
215
334
  else {
216
- (0, files_1.copyFile)(src, dest);
335
+ (0, files_js_1.copyFile)(src, dest);
217
336
  summary.hooks.added.push(label);
218
337
  }
219
338
  }
@@ -222,16 +341,16 @@ async function update(targetDir) {
222
341
  if (prefs.hooks.includes(label))
223
342
  continue;
224
343
  const src = path_1.default.join(templates, "hooks", file);
225
- if ((0, files_1.fileExists)(src)) {
344
+ if ((0, files_js_1.fileExists)(src)) {
226
345
  const dest = path_1.default.join(hooksDir, file);
227
- (0, files_1.copyFile)(src, dest);
346
+ (0, files_js_1.copyFile)(src, dest);
228
347
  summary.hooks.added.push(label);
229
348
  prefs.hooks.push(label);
230
349
  }
231
350
  }
232
351
  // Step 4: Update settings
233
352
  const settingsPath = path_1.default.join(claudeDir, "settings.json");
234
- const settingsContent = (0, files_1.readFile)(path_1.default.join(templates, "settings.json"));
353
+ const settingsContent = (0, files_js_1.readFile)(path_1.default.join(templates, "settings.json"));
235
354
  if (settingsContent) {
236
355
  const settingsTemplate = JSON.parse(settingsContent);
237
356
  const selectedHookFiles = prefs.hooks.map((label) => HOOK_FILES[label]).filter(Boolean);
@@ -247,46 +366,46 @@ async function update(targetDir) {
247
366
  filteredSettings.hooks[event] = filteredEntries;
248
367
  }
249
368
  }
250
- (0, files_1.mergeSettings)(settingsPath, filteredSettings);
369
+ (0, files_js_1.mergeSettings)(settingsPath, filteredSettings);
251
370
  summary.settings = true;
252
371
  }
253
372
  // Step 5: Update skills (auto-discovered from templates/skills/)
254
- const skillsDir = path_1.default.join(claudeDir, "skills");
373
+ const skillsDir = path_1.default.join(devTeamDir, "skills");
255
374
  const skillsSrcDir = path_1.default.join(templates, "skills");
256
- const discoveredSkills = (0, files_1.listSubdirectories)(skillsSrcDir);
375
+ const discoveredSkills = (0, files_js_1.listSubdirectories)(skillsSrcDir);
257
376
  for (const skillDir of discoveredSkills) {
258
377
  const src = path_1.default.join(skillsSrcDir, skillDir, "SKILL.md");
259
378
  const dest = path_1.default.join(skillsDir, skillDir, "SKILL.md");
260
- if (!(0, files_1.fileExists)(src))
379
+ if (!(0, files_js_1.fileExists)(src))
261
380
  continue;
262
- if ((0, files_1.fileExists)(dest)) {
263
- const srcContent = (0, files_1.readFile)(src);
264
- const destContent = (0, files_1.readFile)(dest);
381
+ if ((0, files_js_1.fileExists)(dest)) {
382
+ const srcContent = (0, files_js_1.readFile)(src);
383
+ const destContent = (0, files_js_1.readFile)(dest);
265
384
  if (srcContent !== destContent) {
266
- (0, files_1.copyFile)(src, dest);
385
+ (0, files_js_1.copyFile)(src, dest);
267
386
  summary.skills.updated.push(skillDir.replace("dev-team-", ""));
268
387
  }
269
388
  }
270
389
  else {
271
- (0, files_1.copyFile)(src, dest);
390
+ (0, files_js_1.copyFile)(src, dest);
272
391
  summary.skills.added.push(skillDir.replace("dev-team-", ""));
273
392
  }
274
393
  }
275
394
  // Step 6: Update CLAUDE.md (preserves user content outside markers)
276
395
  const claudeMdPath = path_1.default.join(targetDir, "CLAUDE.md");
277
- const claudeMdTemplate = (0, files_1.readFile)(path_1.default.join(templates, "CLAUDE.md"));
396
+ const claudeMdTemplate = (0, files_js_1.readFile)(path_1.default.join(templates, "CLAUDE.md"));
278
397
  if (claudeMdTemplate) {
279
- summary.claudeMd = (0, files_1.mergeClaudeMd)(claudeMdPath, claudeMdTemplate);
398
+ summary.claudeMd = (0, files_js_1.mergeClaudeMd)(claudeMdPath, claudeMdTemplate);
280
399
  }
281
400
  // Step 7: Update shared learnings template (only if missing)
282
401
  const learningsSrc = path_1.default.join(templates, "dev-team-learnings.md");
283
- const learningsDest = path_1.default.join(claudeDir, "dev-team-learnings.md");
284
- if (!(0, files_1.fileExists)(learningsDest)) {
285
- (0, files_1.copyFile)(learningsSrc, learningsDest);
402
+ const learningsDest = path_1.default.join(devTeamDir, "learnings.md");
403
+ if (!(0, files_js_1.fileExists)(learningsDest)) {
404
+ (0, files_js_1.copyFile)(learningsSrc, learningsDest);
286
405
  }
287
406
  // Step 8: Save updated preferences (stamp current package version)
288
407
  prefs.version = packageVersion;
289
- (0, files_1.writeFile)(prefsPath, JSON.stringify(prefs, null, 2) + "\n");
408
+ (0, files_js_1.writeFile)(prefsPath, JSON.stringify(prefs, null, 2) + "\n");
290
409
  // Step 9: Print summary
291
410
  console.log("Update summary:\n");
292
411
  const agentChanges = [...summary.agents.updated, ...summary.agents.added];