@house365/comate 0.2.1 → 0.2.3

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 (2) hide show
  1. package/bin/init-run.mjs +64 -2
  2. package/package.json +1 -1
package/bin/init-run.mjs CHANGED
@@ -1,11 +1,12 @@
1
1
  // The `init` flow: install whatever the current project is missing.
2
- import { existsSync } from 'node:fs';
2
+ import { existsSync, readFileSync } from 'node:fs';
3
3
  import { join, resolve } from 'node:path';
4
4
 
5
5
  import {
6
6
  MIN_OPENSPEC,
7
7
  NPM_TIMEOUT_MS,
8
8
  SKILLS_TIMEOUT_MS,
9
+ capture,
9
10
  npmInvocation,
10
11
  openSpecState,
11
12
  run,
@@ -147,6 +148,67 @@ function report(results) {
147
148
  console.error(`\n${failed.length} 项失败,修好后重跑 comate init。`);
148
149
  return 1;
149
150
  }
150
- console.log('\n完成。在 agent 中输入 /comate 开始使用,或跑 comate doctor 自检。');
151
+ console.log(banner(pkgVersion()));
152
+ console.log('在 agent 中输入 /comate 开始使用,或跑 comate doctor 自检。\n');
151
153
  return 0;
152
154
  }
155
+
156
+ // ponytail: read package.json rather than hardcoding — npm version bumps the
157
+ // file, and a stale literal in the banner is worse than no version at all.
158
+ export function pkgVersion(root = resolve(import.meta.dirname, '..')) {
159
+ try {
160
+ return JSON.parse(readFileSync(join(root, 'package.json'), 'utf8')).version;
161
+ } catch {
162
+ return '';
163
+ }
164
+ }
165
+
166
+ // Box-drawing glyphs need a UTF-8 capable terminal. Windows consoles still
167
+ // default to a legacy codepage where they render as mojibake, so the wordmark
168
+ // only goes out when the codepage says otherwise; everything else gets the
169
+ // plain line.
170
+ //
171
+ // isTTY deliberately does NOT gate this. npm's Windows global install resolves
172
+ // `comate` to a comate.ps1 shim, and PowerShell calling node through a .ps1
173
+ // wrapper takes over stdout — so isTTY is false in a real terminal and the
174
+ // wordmark never showed. CI is the case actually worth suppressing, and it
175
+ // announces itself with an env var.
176
+ export function banner(version, { utf8 = unicodeSafe(), ci = isCI() } = {}) {
177
+ const tag = `comate${version ? ` v${version}` : ''}`;
178
+ const plain = `\n ${tag} - AI coding almost there!\n`;
179
+ if (!utf8 || ci) return plain;
180
+
181
+ const art = [
182
+ ' ██████╗ ██████╗ ███╗ ███╗ █████╗ ████████╗███████╗',
183
+ '██╔════╝██╔═══██╗████╗ ████║██╔══██╗╚══██╔══╝██╔════╝',
184
+ '██║ ██║ ██║██╔████╔██║███████║ ██║ █████╗ ',
185
+ '██║ ██║ ██║██║╚██╔╝██║██╔══██║ ██║ ██╔══╝ ',
186
+ '╚██████╗╚██████╔╝██║ ╚═╝ ██║██║ ██║ ██║ ███████╗',
187
+ ' ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚══════╝',
188
+ ];
189
+ const cyan = (s) => (process.env.NO_COLOR ? s : `\x1B[36m${s}\x1B[0m`);
190
+ const dim = (s) => (process.env.NO_COLOR ? s : `\x1B[2m${s}\x1B[0m`);
191
+ return [
192
+ '',
193
+ // Trailing padding keeps the source rows aligned; strip it so the colour
194
+ // reset doesn't sit behind spaces the terminal may highlight on select.
195
+ ...art.map((line) => ` ${cyan(line.replace(/\s+$/, ''))}`),
196
+ '',
197
+ ` ${dim(`${tag} - AI coding almost there!`)}`,
198
+ '',
199
+ ].join('\n');
200
+ }
201
+
202
+ // POSIX terminals are UTF-8 in practice. Windows consoles are not: the legacy
203
+ // codepage (936, 437, …) renders box-drawing glyphs as mojibake, so ask chcp
204
+ // and only claim UTF-8 on 65001.
205
+ function unicodeSafe() {
206
+ if (process.platform !== 'win32') return true;
207
+ return /65001/.test(capture('chcp', []) ?? '');
208
+ }
209
+
210
+ // Every major CI sets CI=true; GITHUB_ACTIONS covers the Actions runner even in
211
+ // the odd config that doesn't.
212
+ function isCI() {
213
+ return Boolean(process.env.CI || process.env.GITHUB_ACTIONS);
214
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@house365/comate",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "comate —— OpenSpec + Superpowers 规约驱动的 AI 开发编排器(Agent Skills)",
5
5
  "type": "module",
6
6
  "license": "MIT",