@eevee-ta/cli 1.0.1 → 1.3.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 (32) hide show
  1. package/README.md +175 -9
  2. package/assets/skills/eevee-integration/SKILL.md +46 -0
  3. package/assets/skills/eevee-integration/agents/openai.yaml +3 -0
  4. package/assets/skills/eevee-integration/references/intake.md +87 -0
  5. package/assets/skills/eevee-integration/references/java-springboot.md +182 -0
  6. package/assets/skills/eevee-integration/references/umijs.md +210 -0
  7. package/assets/skills/eevee-mcp/SKILL.md +74 -5
  8. package/assets/skills/eevee-mcp/reference.md +48 -3
  9. package/dist/src/bin/cli.js +23 -7
  10. package/dist/src/bin/cli.js.map +1 -1
  11. package/dist/src/commands/business-command.js +174 -2
  12. package/dist/src/commands/business-command.js.map +1 -1
  13. package/dist/src/commands/i18n-command.js +194 -0
  14. package/dist/src/commands/i18n-command.js.map +1 -0
  15. package/dist/src/commands/skill-command.js +42 -26
  16. package/dist/src/commands/skill-command.js.map +1 -1
  17. package/dist/src/lib/business-catalog.js +50 -20
  18. package/dist/src/lib/business-catalog.js.map +1 -1
  19. package/dist/src/lib/i18n-exporter.js +402 -0
  20. package/dist/src/lib/i18n-exporter.js.map +1 -0
  21. package/dist/src/lib/i18n-scanner.js +1172 -0
  22. package/dist/src/lib/i18n-scanner.js.map +1 -0
  23. package/dist/src/lib/mcp-client.js +1 -1
  24. package/dist/src/lib/mcp-client.js.map +1 -1
  25. package/dist/src/lib/skill-installer.js +19 -10
  26. package/dist/src/lib/skill-installer.js.map +1 -1
  27. package/dist/src/lib/updater.js +4 -4
  28. package/dist/src/lib/updater.js.map +1 -1
  29. package/dist/src/lib/version.js +1 -1
  30. package/dist/src/lib/version.js.map +1 -1
  31. package/install.sh +3 -3
  32. package/package.json +2 -2
@@ -0,0 +1,210 @@
1
+ # UmiJS / Umi Max Integration
2
+
3
+ Use this reference for Umi, Umi Max, React, TypeScript, and similar front-end repositories.
4
+
5
+ ## Inspect first
6
+
7
+ Determine:
8
+
9
+ - Monorepo app directory, such as `apps/gaia/src`, versus single-app `src`.
10
+ - Existing locale loader and output directory:
11
+ - `src/locales`
12
+ - `public/intl`
13
+ - `apps/<app>/public/intl`
14
+ - Runtime file format:
15
+ - JSON files loaded by `intl.js`
16
+ - ESM `js` / `ts` modules
17
+ - existing `INTL` / `COMM_INTL` maps
18
+ - Existing i18n functions, especially `formatMessage` from `tant-intl`.
19
+ - Existing npm scripts, lint-staged config, ESLint setup, and Git hooks.
20
+ - Existing term maps such as `intl.ts` / `intl.tsx`.
21
+ - Whether old ESLint plugin configuration exists and must be replaced rather than duplicated.
22
+
23
+ ## `intl.json` shape
24
+
25
+ Single-app grouped JSON example:
26
+
27
+ ```json
28
+ {
29
+ "includes": ["src/**/*.{ts,tsx,js,jsx}"],
30
+ "excludes": ["**/*.d.ts"],
31
+ "excludeAscii": true,
32
+ "excludeTrack": true,
33
+ "token": "<basic-read-token-if-approved>",
34
+ "format": "json",
35
+ "groupByTag": true,
36
+ "clean": true,
37
+ "localeAliases": {
38
+ "zh-CN": "zh",
39
+ "en-US": "en"
40
+ },
41
+ "outPaths": [
42
+ {
43
+ "path": "/public/intl/",
44
+ "buildPath": "/public/intl/",
45
+ "projectIds": [
46
+ {
47
+ "projectId": 12,
48
+ "branchIds": [21],
49
+ "tags": ["web"]
50
+ }
51
+ ]
52
+ }
53
+ ]
54
+ }
55
+ ```
56
+
57
+ Monorepos should use app-specific paths and include globs. Confirm project, version, tags, grouping, aliases, and both output directories with the user before writing this file.
58
+
59
+ For ESM output, use `format: "js"` or `"ts"`:
60
+
61
+ ```js
62
+ export default {
63
+ 登录: 'Sign in',
64
+ };
65
+ ```
66
+
67
+ ## npm scripts
68
+
69
+ Prefer wrappers that call the local CLI:
70
+
71
+ ```json
72
+ {
73
+ "scripts": {
74
+ "eevee": "eevee",
75
+ "eevee:export": "eevee i18n export",
76
+ "eevee:i18n": "eevee i18n scan",
77
+ "eevee:check": "eevee doctor"
78
+ }
79
+ }
80
+ ```
81
+
82
+ A shell wrapper can add `--no-update-check`, verify CLI version, and route `scan-changed` / `check`.
83
+
84
+ ## Scanner behavior and false-positive handling
85
+
86
+ The CLI scans:
87
+
88
+ - JavaScript / TypeScript strings
89
+ - template literals
90
+ - JSX text
91
+ - Vue text where applicable
92
+
93
+ It ignores by default:
94
+
95
+ - pure ASCII when `excludeAscii: true`
96
+ - import/export source strings
97
+ - object property keys
98
+ - tracking calls
99
+ - tests, mocks, fixtures, generated Umi directories, and build outputs
100
+ - standard i18n expressions inside template interpolation
101
+ - member expressions such as `INTL.操作`
102
+
103
+ Nonstandard patterns are not automatically exempt. Use explicit comments:
104
+
105
+ ```ts
106
+ // eevee-i18n-disable-next-line:动态拼接词条字典 key
107
+ const title = REPO_INTL[`${isEdit ? '编辑' : '新建'}表`];
108
+ ```
109
+
110
+ ```ts
111
+ title: '操作', // eevee-i18n-disable:表格组件内部按 key 翻译
112
+ ```
113
+
114
+ For a whole term-key map:
115
+
116
+ ```ts
117
+ // eevee-i18n-disable-file:本文件只维护词条 key
118
+ ```
119
+
120
+ Column arrays such as `COLUMN_DEFAULT_ALL` often need line-level comments when the table component translates keys internally. Add the comment to every affected title rather than suppressing an entire page file.
121
+
122
+ ## Commit gate
123
+
124
+ Use a Git hook or lint-staged task that scans only staged frontend source files. A dedicated `scan-changed` script is easier to test than embedding complex shell in Git configuration.
125
+
126
+ Collect staged files with:
127
+
128
+ ```bash
129
+ git diff --name-only --cached --diff-filter=ACMR |
130
+ grep -E '\.(js|jsx|ts|tsx|vue)$'
131
+ ```
132
+
133
+ Pass each file to:
134
+
135
+ ```bash
136
+ eevee i18n scan . --include <file>
137
+ ```
138
+
139
+ Skip when no matching file is staged.
140
+
141
+ For legacy repositories, full scanning can remain informational with `--no-fail`; only staged files should block commits.
142
+
143
+ ## Validation
144
+
145
+ Run:
146
+
147
+ 1. `npm run eevee -- version`, requiring CLI `>= 1.1.0`
148
+ 2. Export dry-run and confirm expected project/version/tag/key counts
149
+ 3. Real export only after confirming source of truth and cleanup behavior
150
+ 4. Locale consistency:
151
+ - same key set
152
+ - expected count
153
+ - no duplicate keys
154
+ - runtime loader still references generated filenames
155
+ 5. `eevee i18n scan --no-fail`
156
+ 6. Blocking scan of staged source files
157
+ 7. Existing project checks:
158
+ ```bash
159
+ npm run tsc
160
+ npm run build
161
+ ```
162
+ 8. If ESLint integration changed, run the project's JS lint command and remove obsolete plugin configuration/dependencies.
163
+
164
+ ## Documentation to leave in the repository
165
+
166
+ Record:
167
+
168
+ - project IDs and version IDs
169
+ - tag semantics and grouping
170
+ - output paths and format
171
+ - locale aliases
172
+ - npm or shell commands
173
+ - commit gate scope
174
+ - known false-positive categories and suppression examples
175
+ - legacy-debt policy and files or directories intentionally excluded
176
+
177
+ ## Term upload requirements (source metadata)
178
+
179
+ When a repository uploads or backfills terms to EEVEE (for example a
180
+ `eevee:upload` wrapper around `eevee term create`), each term entry should carry
181
+ source metadata, not only translations:
182
+
183
+ | Field | Required | Shape / rule |
184
+ |---|---|---|
185
+ | `name` | yes | Term key. In zh-reference projects the key is usually the Chinese source text. |
186
+ | `translations` | yes | Map covering **every** project locale; use `""` only when explicitly intended. |
187
+ | `description` | recommended | Where the term appears, e.g. `顶栏导航:项目`. |
188
+ | `params` | recommended | Placeholder parameter array `[{"name":"count","value":"42","desc":"数量"}]`. Upload it whenever the source text contains `{placeholder}` tokens so translators see the parameter contract. |
189
+ | `source_info` | recommended | Repository origin `{"repo","branch","path","line"}`. All four fields must be filled together or omitted entirely (server rejects partial objects). Capture them from the file location / git revision at extraction time. |
190
+
191
+ Update semantics that scripts must respect:
192
+
193
+ - `term create --translations` is the only batch way to set initial translations.
194
+ - `term update` does **not** accept `--translations` (the server ignores it);
195
+ refresh existing translations per locale with
196
+ `eevee translation set-content --id <pid> --term-id <tid> --locale <locale> --content <text>`.
197
+ - Keep uploads idempotent: diff against `eevee term list`/`terms/page` first and
198
+ only write created terms plus drifted locales.
199
+
200
+ A minimal idempotent upload wrapper therefore looks like:
201
+
202
+ ```bash
203
+ eevee term list <project-id> --version-id <version-id> --json # remote baseline
204
+ eevee term create <project-id> <version-id> --name <key> \
205
+ --description "<location>" \
206
+ --params '[{"name":"count","value":"42","desc":"数量"}]' \
207
+ --source-info '{"repo":"org/web","branch":"main","path":"src/page.tsx","line":12}' \
208
+ --translations '{"zh-CN":"共 {count} 条","en-US":"{count} items"}'
209
+ eevee translation set-content --id <project-id> --term-id <tid> --locale en-US --content "{count} items"
210
+ ```
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: eevee-mcp
3
- description: Operate eevee through the @eevee/cli business commands—projects, versions, terms, translations, tags, permissions, logs—and retain access to raw MCP tools/resources/prompts.
3
+ description: Operate eevee through the @eevee-ta/cli business commands—projects, versions, terms, translations, tags, permissions, logs—and retain access to raw MCP tools/resources/prompts.
4
4
  ---
5
5
 
6
6
  # eevee business-aware MCP skill
@@ -16,6 +16,7 @@ Use this skill when a user asks Codex/Claude or another terminal Agent to inspec
16
16
  5. Keep the user's personal token private; never print it or put it in code/docs/tests.
17
17
  6. Before creating a term or setting/updating translations, search existing terms in the same project/version and inspect their translations. Use those translations as terminology, tone, placeholder, capitalization, and style references before machine-translating the new content.
18
18
  7. Every term should normally provide content for every locale configured by the project. Leave a locale as `""` only when the user explicitly says that locale must remain an empty string.
19
+ 8. When creating or maintaining terms, enrich metadata best effort — description, `params` for placeholders, `source_info` when a repo location is known, and doc-link attachments. If the context is missing, ask once instead of silently omitting it; never force the user to provide everything.
19
20
 
20
21
  ## First-run setup
21
22
 
@@ -58,20 +59,80 @@ eevee project list
58
59
  eevee project create --name Demo --locales zh-CN,en-US --description '示例项目'
59
60
  eevee project detail 12
60
61
  eevee version list 12
61
- eevee version create --id 12 --name 'Release 1' --status 2
62
+ eevee version create --id 12 --name 'Release 1' --deadline-date 2026-12-31
63
+ eevee version copy 12 34 --name 'Release 1.1' --description '复制版本资产' # legacy branch copy
62
64
  eevee term create --id 12 --version-id 34 --name login.button \
63
65
  --translations '{"zh-CN":"登录","en-US":"Sign in"}'
66
+ eevee term check-version-conflicts 12 --term-ids 56,57 --version-id 34
67
+ eevee term move-version 12 --term-ids 56,57 --version-id 34
64
68
  eevee translation set-content --id 12 --term-id 56 --locale zh-CN --content 登录
65
- eevee translation assign-translators --id 12 --locales zh-CN,en-US --translator-ids 2,3
69
+ eevee translation assign-translators --id 12 --locale en-US --user-id 3 --term-ids 56,57
66
70
  eevee permission list 12
67
71
  eevee log list --id 12 --page 1 --page-size 20
68
72
  ```
69
73
 
74
+ `term move-version` is the legacy branch-migration command. It always performs a same-name
75
+ conflict precheck first. In an interactive terminal it prompts for batch ignore/overwrite or
76
+ item-by-item decisions; in non-interactive mode it preserves the legacy API behavior by
77
+ ignoring conflicts and moving only conflict-free terms. Explicit scripts may pass
78
+ `--conflict-strategy overwrite|ignore` or
79
+ `--conflict-decisions '{"56":"ignore","57":"overwrite"}'`. Use `term check-version-conflicts`
80
+ when the user only needs an audit preview.
81
+
82
+ Version status starts at 待开始 on create; change it afterwards with
83
+ `eevee version set-status`. Translation status ceiling depends on role:
84
+ translator → 已翻译(3), reviewer/admin → 已审核(4), plain member → 已机翻(2).
85
+
70
86
  Add `--json` for machine-readable `{ok,data}` output, or `--raw` to inspect the complete MCP result.
71
87
 
88
+ ## Local source i18n scan
89
+
90
+ When the user asks to inspect a repository for hardcoded Chinese UI terms or Spring Boot i18n compatibility, run the packaged local scanner instead of shelling out to ESLint:
91
+
92
+ ```bash
93
+ eevee i18n scan <project-dir> --json
94
+ ```
95
+
96
+ The command preserves the legacy `intl.json` ESLint-plugin options and also scans Java source, Java text blocks, Thymeleaf/JSP/Freemarker/Velocity templates, JS/TS strings, templates, JSX, and Vue files. It ignores tests, mocks, fixtures, generated Umi directories, and i18n expressions inside template interpolation. A non-zero exit code means issues were found.
97
+
98
+ ## Configured term export
99
+
100
+ When the user asks to download or refresh locale files from eevee, inspect `intl.json` and run:
101
+
102
+ ```bash
103
+ eevee i18n export # path / development directory
104
+ eevee i18n export --target build # buildPath / online directory
105
+ ```
106
+
107
+ `branchIds` is a required list of version IDs; `[]` means all versions. `tags: []` means all terms; `tags: [null]` means terms without tags. Output supports JSON, ESM JS/TS, and Java properties, optional tag grouping, locale filename aliases, and configurable cleanup. Projects, versions, and tags are processed in configuration order; later entries overwrite duplicate keys when bundles are merged.
108
+
109
+ ## Enrich term metadata (best effort)
110
+
111
+ Term quality depends on context, not only translations. When creating or
112
+ maintaining terms, upload as much of the following as the user's context
113
+ provides. Nothing below is mandatory — pass it whenever it is available:
114
+
115
+ | Field | When to include | How to collect |
116
+ |---|---|---|
117
+ | version | Always resolve explicitly | Single-version project: use that version. Multi-version project: ask the user which version owns the term before creating it. |
118
+ | description | Whenever the usage location is known | e.g. `顶栏导航:项目`, `设置页 → 保存按钮`. |
119
+ | params | Source text contains `{placeholder}` tokens | `--params '[{"name":"count","value":"42","desc":"数量"}]'` extracted from the call site; translators rely on this contract. |
120
+ | source_info | The term comes from a repository/file the user can point to | `--source-info '{"repo":"org/web","branch":"main","path":"src/page.tsx","line":12}'` from the file location and git revision. All four fields together, or omit entirely. |
121
+ | attachments | The user mentions screenshots, design specs, or docs | Design/doc URLs: `eevee term add-doc-link --id <pid> --term-id <tid> --link <url>`. Local screenshot files cannot be uploaded through MCP (multipart is unsupported) — tell the user to attach those in the web UI. |
122
+
123
+ The same enrichment applies to existing terms — backfill metadata with:
124
+
125
+ ```bash
126
+ eevee term update --id <pid> --term-id <tid> --description '设置页 → 保存按钮' --params '[{"name":"count","value":"42","desc":"数量"}]' --source-info '{"repo":"org/web","branch":"main","path":"src/page.tsx","line":12}'
127
+ ```
128
+
129
+ Translations themselves are refreshed per locale with `translation set-content`.
130
+
72
131
  ## Required translation workflow
73
132
 
74
- Apply this workflow to `term create`, `term update` when `--translations` is supplied, and `translation set-content`:
133
+ Apply this workflow to `term create` and `translation set-content`:
134
+ (`term update` only edits name/description/params/source_info — translations are
135
+ changed with `translation set-content`, one locale at a time.)
75
136
 
76
137
  1. Read project detail or use another authoritative source to determine all project locales and the reference locale.
77
138
  2. Search/list existing terms in the same project, preferably the same version and similar namespace or terminology, for example:
@@ -83,13 +144,16 @@ Apply this workflow to `term create`, `term update` when `--translations` is sup
83
144
 
84
145
  3. Extract existing translations and use them as references for terminology, tone, placeholder handling, capitalization, punctuation, and product-specific wording. Do not blindly translate in isolation.
85
146
  4. Machine-translate the missing or changed content while keeping the source meaning and reference conventions consistent.
86
- 5. Upload a complete translation map whenever the command accepts `--translations`; when using `translation set-content`, fill every missing locale unless it is intentionally empty.
147
+ 5. Upload a complete translation map with `term create --translations`; when using `translation set-content`, fill every missing locale unless it is intentionally empty.
87
148
  6. Before upload, verify that every key matches a project locale exactly and that no configured locale is omitted. Use `""` only when the user explicitly requires an empty value for that locale.
88
149
 
89
150
  Example:
90
151
 
91
152
  ```bash
92
153
  eevee term create <project-id> <version-id> --name login.button \
154
+ --description '登录页 → 提交按钮' \
155
+ --params '[{"name":"retry","value":"3","desc":"重试次数"}]' \
156
+ --source-info '{"repo":"org/web","branch":"main","path":"src/pages/login.tsx","line":42}' \
93
157
  --translations '{"zh-CN":"登录","en-US":"Sign in","ja-JP":"ログイン"}'
94
158
  ```
95
159
 
@@ -120,6 +184,11 @@ Always inspect current capability with `eevee tools list`; future servers may ex
120
184
 
121
185
  ## Other standard MCP surfaces
122
186
 
187
+ The current eevee server implements only `initialize`, `ping`, `tools/*`, and
188
+ `notifications/initialized`. The commands below fail with `Method not found`
189
+ against it; use them only when `eevee tools list` confirms the connected server
190
+ actually exposes resources/prompts.
191
+
123
192
  ```bash
124
193
  eevee resources list
125
194
  eevee resources templates
@@ -1,4 +1,4 @@
1
- # @eevee/cli reference for Agents
1
+ # @eevee-ta/cli reference for Agents
2
2
 
3
3
  ## Command model
4
4
 
@@ -38,8 +38,10 @@ eevee project delete 86 --yes --json
38
38
  # Versions and terms
39
39
  eevee version list 86
40
40
  eevee version create --id 86 --name v1
41
+ eevee version copy 86 9 --name v1-copy --description 'Copied branch assets'
41
42
  eevee term list 86
42
- eevee term set-tags --id 86 --version-id 9 --term-id 22 --tag-ids 3,4
43
+ eevee term set-tags --id 86 --term-id 22 --tag-ids 3,4
44
+ eevee version set-status --id 86 --version-id 9 --status 2
43
45
 
44
46
  # Translations
45
47
  eevee term list 86 --json
@@ -50,9 +52,36 @@ eevee translation set-status --id 86 --term-id 22 --locale en-US --status 3
50
52
 
51
53
  Use the returned IDs from live responses rather than examples above.
52
54
 
55
+ ### Version copy and branch migration
56
+
57
+ Versions are the EEVEE-unified representation of legacy branches.
58
+
59
+ ```bash
60
+ # Copy terms, translations, term-tag links, and attachments to a new version.
61
+ eevee version copy 86 9 --name v1-copy
62
+
63
+ # Audit same-name conflicts before moving selected terms to another version.
64
+ eevee term check-version-conflicts 86 --term-ids 22,23 --version-id 10 --json
65
+
66
+ # Move terms. The CLI always rechecks conflicts before writing.
67
+ eevee term move-version 86 --term-ids 22,23 --version-id 10
68
+
69
+ # Non-interactive/batch-compatible form: skip conflicts and move only safe terms.
70
+ eevee term move-version 86 --term-ids 22,23 --version-id 10 --conflict-strategy ignore
71
+
72
+ # Per-term decisions; keys are source term IDs.
73
+ eevee term move-version 86 --term-ids 22,23 --version-id 10 \
74
+ --conflict-decisions '{"22":"ignore","23":"overwrite"}'
75
+ ```
76
+
77
+ In an interactive terminal, `term move-version` prompts for all-ignore, all-overwrite, or
78
+ item-by-item handling. `overwrite` deletes the target same-name term and its dependent assets
79
+ before moving the source term; `ignore` keeps the target and skips the source term. Locked terms
80
+ are rejected by the server. Do not guess project/version/term IDs—read them from live responses.
81
+
53
82
  ### Translation completeness workflow
54
83
 
55
- Before `term create`, `term update --translations`, or `translation set-content`:
84
+ Before `term create` or `translation set-content` — `term update` does not accept `--translations`; change existing translations one locale at a time with `translation set-content`:
56
85
 
57
86
  1. Determine all locales configured on the project.
58
87
  2. Search existing terms in the same project/version and read their details to collect comparable translations.
@@ -60,6 +89,20 @@ Before `term create`, `term update --translations`, or `translation set-content`
60
89
  4. Provide content for every configured locale in principle. An empty string is allowed only when the user explicitly requests that locale to remain empty.
61
90
  5. Re-check locale keys before upload; do not invent locales that the project has not configured.
62
91
 
92
+ ## Term metadata enrichment (best effort)
93
+
94
+ When creating or maintaining terms, fill every field the context can provide —
95
+ none are mandatory, but pass them whenever possible:
96
+
97
+ - Confirm the owning version first (single version: use it; multi-version: ask the user).
98
+ - `--description` for the usage location, e.g. `设置页 → 保存按钮`.
99
+ - `--params '[{"name":"count","value":"42","desc":"数量"}]'` whenever the text has `{placeholder}` tokens.
100
+ - `--source-info '{"repo":"...","branch":"...","path":"...","line":12}'` when the term comes from a repository (all four fields together or omitted).
101
+ - Design/doc links with `eevee term add-doc-link --id <pid> --term-id <tid> --link <url>`;
102
+ local screenshot files must be attached in the web UI (MCP cannot upload multipart files).
103
+ - Backfill existing terms with `term update --description/--params/--source-info`;
104
+ refresh translations per locale with `translation set-content`.
105
+
63
106
  ## Built-in MCP tool fallbacks
64
107
 
65
108
  | Server tool | Purpose | Invocation |
@@ -72,6 +115,8 @@ Check `eevee tools list` first; it is authoritative if the server adds tools lat
72
115
 
73
116
  ## Full MCP surface
74
117
 
118
+ Capability note: the current eevee server implements only `initialize`, `ping`, `tools/*`, and `notifications/initialized`. The resources/prompts/completion/logging requests below return `Method not found` against it; verify with `eevee tools list` before using them on a different server.
119
+
75
120
  ```bash
76
121
  eevee ping
77
122
  eevee tools list [--raw|--json]
@@ -9,6 +9,7 @@ import { CLI_VERSION } from '../lib/version.js';
9
9
  import { runConfig } from '../commands/config-command.js';
10
10
  import { runPing, runPrompts, runRequest, runResources, runTools, } from '../commands/mcp-command.js';
11
11
  import { runSkills } from '../commands/skill-command.js';
12
+ import { i18nScanUsage, runI18n } from '../commands/i18n-command.js';
12
13
  const VERSION = CLI_VERSION;
13
14
  const RUNTIME_FLAG_NAMES = new Set(['url', 'token', 'timeout']);
14
15
  function extractRuntimeOptions(input) {
@@ -41,7 +42,7 @@ function extractRuntimeOptions(input) {
41
42
  return { argv, options };
42
43
  }
43
44
  function usage() {
44
- console.log(`@eevee/cli ${VERSION} — stable MCP command line client
45
+ console.log(`@eevee-ta/cli ${VERSION} — stable MCP command line client
45
46
 
46
47
  Usage:
47
48
  eevee <group> <action> [options]
@@ -69,6 +70,10 @@ Configuration
69
70
  eevee config unset --url | --token
70
71
  eevee config path
71
72
 
73
+ Local code quality
74
+ i18n scan scan hardcoded i18n terms in JS/TS/JSX/Vue and Java Spring Boot projects
75
+ i18n export export eevee terms through intl.json project/tag configuration
76
+
72
77
  Agent skill commands
73
78
  eevee skills install [codex|claude|cursor|opencode|universal][,...] [--global|--project DIR|--dir DIR]
74
79
  eevee skills update [agents] [...target]
@@ -78,6 +83,10 @@ Agent skill commands
78
83
  eevee skills agents
79
84
  eevee skills info
80
85
 
86
+ Skill selection
87
+ --skill eevee-mcp business-aware eevee MCP operations (default)
88
+ --skill eevee-integration Java Spring Boot / UmiJS project integration guide
89
+
81
90
  Diagnostics and meta commands
82
91
  eevee doctor [--json]
83
92
  eevee update [--yes] [--registry URL]
@@ -103,10 +112,6 @@ async function main() {
103
112
  usage();
104
113
  return;
105
114
  }
106
- if (argv[0] === 'version' || argv[0] === '--version') {
107
- console.log(VERSION);
108
- return;
109
- }
110
115
  if (argv[0] === 'update') {
111
116
  return await runUpdate(argv.slice(1));
112
117
  }
@@ -135,6 +140,10 @@ async function main() {
135
140
  }
136
141
  return await runBusiness(business.command, [...business.argv, ...optionArgv]);
137
142
  }
143
+ if (argv[0] === 'version' || argv[0] === '--version') {
144
+ console.log(VERSION);
145
+ return;
146
+ }
138
147
  const command = argv.shift();
139
148
  const next = argv[0];
140
149
  switch (command) {
@@ -172,6 +181,13 @@ async function main() {
172
181
  throw new Error('用法: eevee skills <install|update|list|paths|agents|info|uninstall>');
173
182
  argv.shift();
174
183
  return await runSkills(next, argv);
184
+ case 'i18n':
185
+ if (!next || next === '--help' || next === '-h') {
186
+ i18nScanUsage();
187
+ return;
188
+ }
189
+ argv.shift();
190
+ return await runI18n(next, argv);
175
191
  case 'update':
176
192
  return await runUpdate(argv);
177
193
  case 'doctor':
@@ -197,12 +213,12 @@ async function promptForUpdate() {
197
213
  return false;
198
214
  const accepted = await confirmUpdate(check.current, check.latest);
199
215
  if (!accepted) {
200
- console.error(`发现新版本 @eevee/cli ${check.latest}(当前 ${check.current})。可执行: npm install --global @eevee/cli@latest --registry=${check.registry}`);
216
+ console.error(`发现新版本 @eevee-ta/cli ${check.latest}(当前 ${check.current})。可执行: npm install --global @eevee-ta/cli@latest --registry=${check.registry}`);
201
217
  return false;
202
218
  }
203
219
  await installLatestCli();
204
220
  const migrated = await migrateSkillsAfterCliUpdate();
205
- console.log(`✓ @eevee/cli 已更新到 ${check.latest},${migrated ? 'Skill 已同步' : 'Skill 未能自动同步'}。请重新执行刚才的命令。`);
221
+ console.log(`✓ @eevee-ta/cli 已更新到 ${check.latest},${migrated ? 'Skill 已同步' : 'Skill 未能自动同步'}。请重新执行刚才的命令。`);
206
222
  return true;
207
223
  }
208
224
  async function doctor(argv) {
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/bin/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/bin/cli.ts"],"names":[],"mappings":"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"}