@teammates/cli 0.6.1 → 0.6.2

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/dist/cli.js CHANGED
@@ -304,11 +304,12 @@ class TeammatesREPL {
304
304
  this.statusFrame = 0;
305
305
  this.statusRotateIndex = 0;
306
306
  this.renderStatusFrame();
307
- // Animate spinner at ~80ms
307
+ // Animate spinner at ~200ms (fast enough for visual smoothness,
308
+ // slow enough to avoid saturating the render loop under load)
308
309
  this.statusTimer = setInterval(() => {
309
310
  this.statusFrame++;
310
311
  this.renderStatusFrame();
311
- }, 80);
312
+ }, 200);
312
313
  // Rotate through teammates every 3 seconds
313
314
  this.statusRotateTimer = setInterval(() => {
314
315
  if (this.activeTasks.size > 1) {
@@ -395,7 +396,7 @@ class TeammatesREPL {
395
396
  : cleanTask;
396
397
  if (this.chatView) {
397
398
  this.chatView.setProgress(concat(tp.accent(`${spinChar} ${displayName}... `), tp.muted(`${taskText}${suffix}`)));
398
- this.app.refresh();
399
+ this.app.scheduleRefresh();
399
400
  }
400
401
  else {
401
402
  const spinColor = this.statusFrame % 8 === 0 ? chalk.blue : chalk.blueBright;
@@ -1737,8 +1738,8 @@ Do NOT modify any other teammate's files. Only edit your own SOUL.md and daily l
1737
1738
  const userMdPath = join(teammatesDir, "USER.md");
1738
1739
  try {
1739
1740
  const content = readFileSync(userMdPath, "utf-8");
1740
- // Template placeholders contain "<your name>" — treat as not set up
1741
- return !content.trim() || content.includes("<your name>");
1741
+ // Template placeholders contain "<Your name>" — treat as not set up
1742
+ return !content.trim() || content.toLowerCase().includes("<your name>");
1742
1743
  }
1743
1744
  catch {
1744
1745
  // File doesn't exist
@@ -3339,7 +3340,7 @@ Do NOT modify any other teammate's files. Only edit your own SOUL.md and daily l
3339
3340
  {
3340
3341
  name: "script",
3341
3342
  aliases: [],
3342
- usage: "/script [list | run <name> | what should the script do?]",
3343
+ usage: "/script [description]",
3343
3344
  description: "Write and run reusable scripts via the coding agent",
3344
3345
  run: (args) => this.cmdScript(args),
3345
3346
  },
package/dist/onboard.js CHANGED
@@ -108,6 +108,19 @@ async function isTeammateFolder(dirPath) {
108
108
  return false;
109
109
  }
110
110
  }
111
+ /**
112
+ * Detect whether a teammate folder is a human avatar (**Type:** human in SOUL.md).
113
+ * Human avatars are user-specific and should not be imported to other projects.
114
+ */
115
+ async function isHumanAvatar(dirPath) {
116
+ try {
117
+ const soul = await readFile(join(dirPath, "SOUL.md"), "utf-8");
118
+ return /\*\*Type:\*\*\s*human/i.test(soul);
119
+ }
120
+ catch {
121
+ return false;
122
+ }
123
+ }
111
124
  /**
112
125
  * Import teammates from another project's .teammates/ dir.
113
126
  *
@@ -138,6 +151,9 @@ export async function importTeammates(sourceDir, targetDir) {
138
151
  if (entry.isDirectory() && !isNonTeammateEntry(entry.name)) {
139
152
  // Check if it's a teammate folder
140
153
  if (await isTeammateFolder(srcPath)) {
154
+ // Skip human avatar folders — those are user-specific, not team members
155
+ if (await isHumanAvatar(srcPath))
156
+ continue;
141
157
  // Skip if teammate already exists in target
142
158
  try {
143
159
  await stat(destPath);
@@ -165,18 +181,8 @@ export async function importTeammates(sourceDir, targetDir) {
165
181
  teammates.push(entry.name);
166
182
  }
167
183
  }
168
- else if (entry.isFile() && entry.name === "USER.md") {
169
- // Only USER.md transfers framework files (CROSS-TEAM.md, README.md,
170
- // PROTOCOL.md, TEMPLATE.md) are project-specific and get created fresh
171
- // from the template by copyTemplateFiles().
172
- try {
173
- await stat(destPath);
174
- }
175
- catch {
176
- await copyFile(srcPath, destPath);
177
- files.push(entry.name);
178
- }
179
- }
184
+ // USER.md is user-specific (gitignored) never import it.
185
+ // The new user creates their own profile during setup.
180
186
  }
181
187
  // Ensure .gitignore exists
182
188
  const gitignoreDest = join(targetDir, ".gitignore");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@teammates/cli",
3
- "version": "0.6.1",
3
+ "version": "0.6.2",
4
4
  "description": "Agent-agnostic CLI for teammates. Routes tasks, manages handoffs, and plugs into any coding agent backend.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",