@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.
- package/bin/init-run.mjs +64 -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(
|
|
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
|
+
}
|