@succsoft/succapp 5.0.5 → 5.0.6
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/CHANGELOG.md +11 -0
- package/README.md +2 -1
- package/dist/cli/l10n/bundle.l10n.json +154 -39
- package/dist/cli/l10n/bundle.l10n.zh-cn.json +152 -37
- package/dist/cli/succapp.js +100 -86
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
|
+
## 5.0.6(2026-07-18)
|
|
4
|
+
|
|
5
|
+
- 新增 `db source probe <datasource>`,支持验证已有数据源连接;`db source test` 同时支持已有数据源和 JSON 配置,并统一返回 schema、数据库版本和驱动等结构化连接信息。
|
|
6
|
+
- 新增 `succapp model search`,支持按路径、项目、模型属性和字段属性跨模型检索,以及忽略大小写的字面匹配和正则匹配。
|
|
7
|
+
- 增强 `server file search`,支持按正文执行 AND/OR 字面或正则匹配,并返回命中片段和文件级警告。
|
|
8
|
+
- 统一文件和模型搜索的相关度排序、结果数量限制与目录范围语义,裸关键词默认执行包含搜索,并完善结果元数据和终端展示。
|
|
9
|
+
- 优化 SuccApp CLI 帮助:human 输出支持选项分组和按终端宽度换行,`--help --json` 提供版本化、可导航的结构化命令契约。
|
|
10
|
+
- `server file open` 和 `workspace file open` 新增 `--no-open`,可仅返回页面 URL 而不启动系统浏览器。
|
|
11
|
+
- 新增 `succapp server cache list` 和 `succapp server cache clean`,支持列出和清空服务器系统缓存。
|
|
12
|
+
- `workspace file compile` 增加元数据内容版本检查,旧版文件会提示先升级,避免按当前 Schema 产生误报。
|
|
13
|
+
|
|
3
14
|
## 5.0.5(2026-07-06)
|
|
4
15
|
|
|
5
16
|
- 新增 `succapp server file locate` 和 `succapp server file search`,支持按文件 id、路径、名称等条件定位和检索服务器文件。
|
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@ SuccApp 的核心思路是把页面、仪表板、报表、数据模型、程序
|
|
|
10
10
|
|
|
11
11
|
## SuccApp CLI / 命令行工具
|
|
12
12
|
|
|
13
|
-
SuccApp CLI 面向终端、脚本和 AI Agent,命令名为 `succapp`。它适合初始化工作区、连接服务器、查询状态、查看 diff、拉取和推送元数据、读取文件历史、解析页面地址、查询数据库结构,并用 `--json`
|
|
13
|
+
SuccApp CLI 面向终端、脚本和 AI Agent,命令名为 `succapp`。它适合初始化工作区、连接服务器、查询状态、查看 diff、拉取和推送元数据、读取文件历史、解析页面地址、查询数据库结构,并用 `--json` 输出结构化结果。需要人工阅读结构化结果时,可以使用 `--pretty-json` 输出格式化 JSON。
|
|
14
14
|
|
|
15
15
|
Install:
|
|
16
16
|
|
|
@@ -32,6 +32,7 @@ succapp workspace init --server=<server-url>
|
|
|
32
32
|
succapp auth login <server-url>
|
|
33
33
|
succapp workspace project clone <project>
|
|
34
34
|
succapp workspace status --json
|
|
35
|
+
succapp workspace status --pretty-json
|
|
35
36
|
succapp workspace file diff <path>
|
|
36
37
|
succapp workspace push <path>
|
|
37
38
|
```
|
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
"err.net.connectionFailed": "Cannot connect to server: {url}{causeMessage}",
|
|
7
7
|
"err.net.connectionFailed.desc": "Check the server address and network connection, then retry or log in again.",
|
|
8
8
|
"err.login.notlogin": "Authentication failed, please log in again",
|
|
9
|
+
"err.login.busy": "The system is busy. Please try later!",
|
|
10
|
+
"err.login.busy.desc": "Possible causes include license limits on sessions or users, or database connection/query failures.",
|
|
9
11
|
"err.oauth2.tokenExpired": "OAuth2 access token expired.",
|
|
10
12
|
"err.login.oauthTimeout": "OAuth2 authorization timed out.",
|
|
11
13
|
"err.login.oauthTimeout.desc": "Restart login, complete authorization in the browser, or use PAT login in environments without a browser.",
|
|
@@ -37,6 +39,12 @@
|
|
|
37
39
|
"err.net.invalidUrl": "Invalid URL: {url}",
|
|
38
40
|
"err.meta.invalidPath": "Invalid metadata path",
|
|
39
41
|
"err.meta.invalidPath.desc": "Use a valid absolute metadata path and try again.",
|
|
42
|
+
"err.meta.invalidPath.relativeSearchQuery": "Relative search paths are not supported: {path}",
|
|
43
|
+
"err.meta.invalidPath.relativeSearchQuery.hint": "Use an absolute path beginning with '/', or a file name without '/'.",
|
|
44
|
+
"err.meta.invalidPath.parentDirGlob": "Glob wildcards are not supported in --parent-dir: {path}",
|
|
45
|
+
"err.meta.invalidPath.parentDirGlob.hint": "--parent-dir already searches recursively. Use --path='/DIR/*' to match direct children or --path for another glob.",
|
|
46
|
+
"err.meta.invalidPath.parentProjectMismatch": "Parent directory {path} does not belong to project {projectName}.",
|
|
47
|
+
"err.meta.invalidPath.parentProjectMismatch.hint": "Use a parent directory whose first path segment matches --project.",
|
|
40
48
|
"err.meta.projectExist": "A project with the same name already exists.",
|
|
41
49
|
"err.meta.projectname.illegal": "Invalid project name. Use letters, numbers, and underscores only, and keep it within 16 characters.",
|
|
42
50
|
"err.meta.projectname.reservedwords": "This project name is reserved by the system.",
|
|
@@ -61,7 +69,8 @@
|
|
|
61
69
|
"err.workspace.issue.E402": "SuccApp .gitignore rules are missing",
|
|
62
70
|
"err.workspace.issue.E403": "AI agent workspace files are missing",
|
|
63
71
|
"err.workspace.issue.E404": "TypeScript support files are missing",
|
|
64
|
-
"err.workspace.issue.E405": "
|
|
72
|
+
"err.workspace.issue.E405": "Metadata validation support files are missing",
|
|
73
|
+
"err.workspace.issue.E405.hint": "Run 'succapp workspace init --scope dev', then retry the command.",
|
|
65
74
|
"err.workspace.issue.E407": "SuccApp docs skill files are missing",
|
|
66
75
|
"err.lock.busy": "Cannot {attemptedCommand}: workspace scope {conflictScope} is held by another process.",
|
|
67
76
|
"err.lock.busy.desc": "Stop the running process and retry; locks left by crashed processes are cleaned up automatically on the next attempt.",
|
|
@@ -82,10 +91,12 @@
|
|
|
82
91
|
"err.cli.unknownOption": "Unknown option: {option}",
|
|
83
92
|
"err.cli.missingOptionValue": "Option requires a value: {option}",
|
|
84
93
|
"err.cli.unexpectedOptionValue": "Option does not take a value: {option}",
|
|
85
|
-
"err.cli.missingArgument": "Missing required argument: {argument}
|
|
86
|
-
"err.cli.missingArgument.hint": "Usage: {usage}
|
|
94
|
+
"err.cli.missingArgument": "Missing required argument: {argument}",
|
|
95
|
+
"err.cli.missingArgument.hint": "Usage: {usage}",
|
|
87
96
|
"err.cli.tooManyArguments": "Too many arguments for {command}.",
|
|
88
97
|
"err.cli.tooManyArguments.hint": "This command accepts at most {max} positional argument(s).",
|
|
98
|
+
"err.cli.tooManyValues": "Too many values for {input}: received {actualItems}.",
|
|
99
|
+
"err.cli.tooManyValues.hint": "Provide at most {maxItems} values.",
|
|
89
100
|
"err.cli.missingInput": "Missing required input: {input}.",
|
|
90
101
|
"err.cli.missingInput.hint": "Provide the required input and retry.",
|
|
91
102
|
"err.cli.missingInput.hintWithSources": "Provide {sources} and retry.",
|
|
@@ -95,7 +106,7 @@
|
|
|
95
106
|
"err.cli.invalidUrl.hint": "Provide a full http:// or https:// URL.",
|
|
96
107
|
"err.cli.invalidPositiveInteger": "{input} must be a positive integer: {value}.",
|
|
97
108
|
"err.cli.invalidNonNegativeInteger": "{input} must be a non-negative integer: {value}.",
|
|
98
|
-
"err.cli.invalidNonNegativeIntegerRange": "{input} must be
|
|
109
|
+
"err.cli.invalidNonNegativeIntegerRange": "{input} must be an integer from {min} to {max}: {value}.",
|
|
99
110
|
"err.cli.invalidChoice": "Invalid value for {input}: {value}.",
|
|
100
111
|
"err.cli.invalidChoice.hint": "Expected one of: {allowedValues}.",
|
|
101
112
|
"err.cli.invalidKeyValue": "Invalid key=value for {input}: {value}.",
|
|
@@ -200,8 +211,6 @@
|
|
|
200
211
|
"workspace.sync.progress.upgradeMeta.checked": "Checked {0} metadata file(s): {1} upgradeable.",
|
|
201
212
|
"workspace.sync.progress.upgradeMeta.done": "Upgraded metadata files: {0} changed, {1} failed, {2} checked.",
|
|
202
213
|
"workspace.sync.progress.upgradeMeta.scan": "Scanning metadata files",
|
|
203
|
-
"workspace.validation.json.invalidJson": "Invalid JSON: {0}.",
|
|
204
|
-
"workspace.validation.json.jsonFileEmpty": "JSON file is empty.",
|
|
205
214
|
"cli.cmd.common.desc": "Common commands.",
|
|
206
215
|
"cli.cmd.common.summary": "common commands",
|
|
207
216
|
"cli.cmd.common.title": "Common",
|
|
@@ -212,6 +221,7 @@
|
|
|
212
221
|
"cli.opt.locale": "Use the given locale for CLI messages.",
|
|
213
222
|
"cli.opt.lockTimeout": "Wait for a workspace lock before failing.",
|
|
214
223
|
"cli.opt.logLevel": "Set log level: trace, debug, info, warn, or error.",
|
|
224
|
+
"cli.opt.prettyJson": "Write formatted JSON for people; not intended for line-oriented scripts.",
|
|
215
225
|
"cli.opt.quiet": "Suppress progress and informational output.",
|
|
216
226
|
"cli.opt.server": "Use the specified server for commands that support it.",
|
|
217
227
|
"cli.opt.verbose": "Enable debug logging.",
|
|
@@ -246,7 +256,13 @@
|
|
|
246
256
|
"cli.cmd.db.summary": "inspect and operate server databases and data sources",
|
|
247
257
|
"cli.cmd.db.desc": "Inspect and operate server databases and data sources.",
|
|
248
258
|
"cli.cmd.db.dataSource": "Data source",
|
|
249
|
-
"cli.cmd.db.
|
|
259
|
+
"cli.cmd.db.connection": "Connection",
|
|
260
|
+
"cli.cmd.db.defaultSchema": "Logical default schema",
|
|
261
|
+
"cli.cmd.db.databaseProduct": "Database product",
|
|
262
|
+
"cli.cmd.db.databaseVersion": "Database version",
|
|
263
|
+
"cli.cmd.db.databaseFullVersion": "Full database version",
|
|
264
|
+
"cli.cmd.db.driver": "JDBC driver",
|
|
265
|
+
"cli.cmd.db.driverVersion": "Driver version",
|
|
250
266
|
"cli.cmd.db.dryImport": "Dry run import",
|
|
251
267
|
"cli.cmd.db.dsConfigMust": "Datasource config must be a JSON object: {0}",
|
|
252
268
|
"cli.cmd.db.imported": "Imported",
|
|
@@ -268,18 +284,23 @@
|
|
|
268
284
|
"cli.cmd.db.sqlExecutedSuccess": "SQL executed successfully.",
|
|
269
285
|
"cli.cmd.db.sqlOrFileConflict": "Pass SQL either as <sql> or --file, not both.",
|
|
270
286
|
"cli.cmd.db.sqlUpdateCount": "SQL update count: {0}",
|
|
287
|
+
"cli.cmd.db.query.empty": "Query succeeded; 0 rows returned.",
|
|
271
288
|
"cli.cmd.db.tableOrQueryConflict": "Pass either <table> or --query/--query-file, not both.",
|
|
272
289
|
"cli.cmd.db.source.title": "Database source",
|
|
273
290
|
"cli.cmd.db.source.summary": "inspect and manage database sources",
|
|
274
291
|
"cli.cmd.db.source.desc": "Inspect and manage database sources.",
|
|
275
292
|
"cli.cmd.db.source.list.summary": "List visible data sources.",
|
|
276
293
|
"cli.cmd.db.source.list.desc": "List data sources visible to the active SuccApp server session.",
|
|
294
|
+
"cli.cmd.db.source.list.empty": "No data sources are available.",
|
|
277
295
|
"cli.cmd.db.source.show.summary": "Show a datasource configuration.",
|
|
278
296
|
"cli.cmd.db.source.show.desc": "Show a datasource configuration.",
|
|
279
|
-
"cli.cmd.db.source.
|
|
280
|
-
"cli.cmd.db.source.
|
|
297
|
+
"cli.cmd.db.source.probe.summary": "Validate an existing datasource and show its logical schema, database, and driver details.",
|
|
298
|
+
"cli.cmd.db.source.probe.desc": "Open and validate an existing datasource connection, then report its logical default schema, database product, normalized and full versions, and JDBC driver. JSON output also includes the sanitized datasource configuration.",
|
|
299
|
+
"cli.cmd.db.source.probe.datasource": "Name of the existing datasource to probe.",
|
|
300
|
+
"cli.cmd.db.source.test.summary": "Test connectivity for an existing datasource or an unsaved JSON configuration.",
|
|
301
|
+
"cli.cmd.db.source.test.desc": "Validate connectivity for an existing datasource, or for a JSON configuration without saving it. Both modes return the logical default schema, database versions, and JDBC driver details.",
|
|
302
|
+
"cli.cmd.db.source.test.datasource": "Name of the existing datasource to test.",
|
|
281
303
|
"cli.cmd.db.source.test.config": "Read datasource configuration JSON from a file, or use - for stdin.",
|
|
282
|
-
"cli.cmd.db.source.test.testOk": "Datasource connection succeeded: {0}",
|
|
283
304
|
"cli.cmd.db.source.create.summary": "Create a datasource.",
|
|
284
305
|
"cli.cmd.db.source.create.desc": "Create a datasource from a JSON configuration.",
|
|
285
306
|
"cli.cmd.db.source.create.config": "Read datasource configuration JSON from a file, or use - for stdin.",
|
|
@@ -301,12 +322,15 @@
|
|
|
301
322
|
"cli.cmd.db.schema.list.summary": "List schemas for a data source.",
|
|
302
323
|
"cli.cmd.db.schema.list.desc": "List schemas for a data source.",
|
|
303
324
|
"cli.cmd.db.schema.list.catalog": "Catalog",
|
|
325
|
+
"cli.cmd.db.schema.list.empty": "No schemas found for data source '{0}'.",
|
|
304
326
|
"cli.cmd.db.table.title": "Database table",
|
|
305
327
|
"cli.cmd.db.table.summary": "inspect database tables",
|
|
306
328
|
"cli.cmd.db.table.desc": "Inspect database tables.",
|
|
307
329
|
"cli.cmd.db.table.list.summary": "List tables for a data source.",
|
|
308
330
|
"cli.cmd.db.table.list.desc": "List tables for a data source.",
|
|
309
331
|
"cli.cmd.db.table.list.tableNameContains": "Filter tables by name. Supports * and ? wildcards.",
|
|
332
|
+
"cli.cmd.db.table.list.empty": "No tables are available.",
|
|
333
|
+
"cli.cmd.db.table.list.noMatches": "No tables matched the current filters.",
|
|
310
334
|
"cli.cmd.db.table.describe.summary": "Describe a database table.",
|
|
311
335
|
"cli.cmd.db.table.describe.desc": "Describe columns and metadata for a database table.",
|
|
312
336
|
"cli.cmd.db.table.describe.schema": "Schema name.",
|
|
@@ -360,14 +384,19 @@
|
|
|
360
384
|
"cli.cmd.server.cache.title": "Server cache",
|
|
361
385
|
"cli.cmd.server.cache.summary": "manage server cache",
|
|
362
386
|
"cli.cmd.server.cache.desc": "Manage server cache.",
|
|
363
|
-
"cli.cmd.server.cache.
|
|
364
|
-
"cli.cmd.server.cache.
|
|
365
|
-
"cli.cmd.server.cache.
|
|
387
|
+
"cli.cmd.server.cache.list.summary": "List server cache entries.",
|
|
388
|
+
"cli.cmd.server.cache.list.desc": "List server-side system cache entries (count, disk/memory usage, hit rate).",
|
|
389
|
+
"cli.cmd.server.cache.list.empty": "No server cache entries.",
|
|
390
|
+
"cli.cmd.server.cache.clean.summary": "Clean server cache.",
|
|
391
|
+
"cli.cmd.server.cache.clean.desc": "Clean a server-side system cache entry by <name>, or all caches with --all.",
|
|
392
|
+
"cli.cmd.server.cache.clean.all": "Clean all server cache entries.",
|
|
393
|
+
"cli.cmd.server.cache.clean.cleaned": "Server cache cleaned: {1} ({0})",
|
|
366
394
|
"cli.cmd.server.proj.title": "Server project",
|
|
367
395
|
"cli.cmd.server.proj.summary": "inspect server projects",
|
|
368
396
|
"cli.cmd.server.proj.desc": "Inspect server projects.",
|
|
369
397
|
"cli.cmd.server.proj.list.summary": "List server projects.",
|
|
370
398
|
"cli.cmd.server.proj.list.desc": "List projects visible on a server.",
|
|
399
|
+
"cli.cmd.server.proj.list.empty": "No visible projects found.",
|
|
371
400
|
"cli.cmd.server.proj.create.summary": "Create a server project.",
|
|
372
401
|
"cli.cmd.server.proj.create.desc": "Create a metadata project on a server.",
|
|
373
402
|
"cli.cmd.server.proj.create.descOption": "Set the project description.",
|
|
@@ -387,19 +416,28 @@
|
|
|
387
416
|
"cli.cmd.server.file.unknownServerFile": "Unknown server file error.",
|
|
388
417
|
"cli.cmd.server.file.list.summary": "List server files.",
|
|
389
418
|
"cli.cmd.server.file.list.desc": "List direct children of a server metadata directory.",
|
|
419
|
+
"cli.cmd.server.file.list.empty": "Directory is empty: {0}",
|
|
390
420
|
"cli.cmd.server.file.search.summary": "Search server files.",
|
|
391
|
-
"cli.cmd.server.file.search.desc": "Search readable server metadata files by
|
|
392
|
-
"cli.cmd.server.file.search.
|
|
393
|
-
"cli.cmd.server.file.search.
|
|
394
|
-
"cli.cmd.server.file.search.
|
|
395
|
-
"cli.cmd.server.file.search.
|
|
421
|
+
"cli.cmd.server.file.search.desc": "Search readable server metadata files by full path or by combinable project, parent-directory, and file-name filters.",
|
|
422
|
+
"cli.cmd.server.file.search.url": "Optional server URL. A lone non-URL argument is treated as <query>.",
|
|
423
|
+
"cli.cmd.server.file.search.query": "Starts with '/': full path or path glob. Contains '*' or '?': file name glob. Otherwise searches file metadata by keyword.",
|
|
424
|
+
"cli.cmd.server.file.search.path": "Search by an absolute metadata path glob; a project root searches recursively. Can be combined with a keyword <query>, but not with a path <query>, --project, --parent-dir, or --name.",
|
|
425
|
+
"cli.cmd.server.file.search.name": "Search by a file name glob; without wildcards, matches exactly. Can be combined with a keyword <query>, --project, and --parent-dir, but not with a glob <query> or --path.",
|
|
426
|
+
"cli.cmd.server.file.search.parentDir": "Search one absolute directory scope recursively. Glob wildcards are not supported; use --path='/DIR/*' for direct children. With --project, its first path segment must match the project name.",
|
|
427
|
+
"cli.cmd.server.file.search.project": "Match one project name. Can be combined with --parent-dir and --name.",
|
|
396
428
|
"cli.cmd.server.file.search.type": "Limit search to metadata type. Repeat or use comma-separated values.",
|
|
397
429
|
"cli.cmd.server.file.search.subType": "Limit search to metadata subtype. Repeat or use comma-separated values.",
|
|
398
430
|
"cli.cmd.server.file.search.minSize": "Minimum original content size in bytes.",
|
|
399
431
|
"cli.cmd.server.file.search.maxSize": "Maximum original content size in bytes.",
|
|
400
|
-
"cli.cmd.server.file.search.limit": "
|
|
401
|
-
"cli.cmd.server.file.search.offset": "Skip this many matched files.",
|
|
432
|
+
"cli.cmd.server.file.search.limit": "Return at most this many most relevant files. Defaults to 50; maximum is 1000.",
|
|
402
433
|
"cli.cmd.server.file.search.includeFolders": "Include folders in the result.",
|
|
434
|
+
"cli.cmd.server.file.search.contentContains": "Require every repeated plain-text or /pattern/flags expression in text-file content. Plain text uses case-insensitive literal contains; regex defaults to multiline without flags. Values are not split on commas.",
|
|
435
|
+
"cli.cmd.server.file.search.contentContainsAny": "Require at least one repeated plain-text or /pattern/flags expression in text-file content. Plain text uses case-insensitive literal contains; regex defaults to multiline without flags. Values are not split on commas.",
|
|
436
|
+
"cli.cmd.server.file.search.empty": "No matching files.",
|
|
437
|
+
"cli.cmd.server.file.search.pathHint": "'{0}' is an exact metadata path. Use '{1}' to search recursively.",
|
|
438
|
+
"cli.cmd.server.file.search.nameHint": "File names match exactly without wildcards; wildcards are not added automatically.",
|
|
439
|
+
"cli.cmd.server.file.search.hasMore": "Only the {0} most relevant files are shown; add a project, directory, type, or more specific keyword to narrow the search.",
|
|
440
|
+
"cli.cmd.server.file.search.warningDetails": "Content was not checked; use --json for full details.",
|
|
403
441
|
"cli.cmd.server.file.locate.summary": "Locate a server file by metadata ID.",
|
|
404
442
|
"cli.cmd.server.file.locate.desc": "Resolve a metadata ID to the current server file path.",
|
|
405
443
|
"cli.cmd.server.file.locate.url": "Only print the server view or edit URL.",
|
|
@@ -419,8 +457,10 @@
|
|
|
419
457
|
"cli.cmd.server.file.download.force": "Overwrite the local output file if it exists.",
|
|
420
458
|
"cli.cmd.server.file.download.downloaded": "Downloaded {0} to {1}",
|
|
421
459
|
"cli.cmd.server.file.open.summary": "Open the server file page.",
|
|
422
|
-
"cli.cmd.server.file.open.desc": "Open the server view or edit page
|
|
423
|
-
"cli.cmd.server.file.open.edit": "Open the server edit page.",
|
|
460
|
+
"cli.cmd.server.file.open.desc": "Open the server view or edit page in the system browser, or return its URL without opening the browser.",
|
|
461
|
+
"cli.cmd.server.file.open.edit": "Open the server edit page instead of the view page.",
|
|
462
|
+
"cli.cmd.server.file.open.noOpen": "Return the page URL without launching the system browser.",
|
|
463
|
+
"cli.cmd.server.file.open.path": "Absolute server metadata path. The URL is constructed without checking whether the file exists.",
|
|
424
464
|
"cli.cmd.server.file.open.openedEdit": "Opened server edit page: {0}",
|
|
425
465
|
"cli.cmd.server.file.open.openedView": "Opened server view page: {0}",
|
|
426
466
|
"cli.cmd.server.file.history.summary": "Show server file history.",
|
|
@@ -556,6 +596,7 @@
|
|
|
556
596
|
"cli.cmd.workspace.proj.desc": "Manage workspace projects.",
|
|
557
597
|
"cli.cmd.workspace.proj.list.summary": "List workspace projects.",
|
|
558
598
|
"cli.cmd.workspace.proj.list.desc": "List workspace projects.",
|
|
599
|
+
"cli.cmd.workspace.proj.list.empty": "No projects are tracked in this workspace.",
|
|
559
600
|
"cli.cmd.workspace.proj.clone.summary": "Clone server projects into the workspace.",
|
|
560
601
|
"cli.cmd.workspace.proj.clone.desc": "Clone projects from the active server into the current workspace.",
|
|
561
602
|
"cli.cmd.workspace.proj.clone.force": "Allow clone to overwrite existing local workspace projects.",
|
|
@@ -597,8 +638,10 @@
|
|
|
597
638
|
"cli.cmd.workspace.file.resolve.remote": "Remote path: {0}",
|
|
598
639
|
"cli.cmd.workspace.file.resolve.viewUrl": "View URL: {0}",
|
|
599
640
|
"cli.cmd.workspace.file.open.summary": "Open the server file page.",
|
|
600
|
-
"cli.cmd.workspace.file.open.desc": "Open the server view or edit page for a workspace file.",
|
|
601
|
-
"cli.cmd.workspace.file.open.edit": "Open the server edit page.",
|
|
641
|
+
"cli.cmd.workspace.file.open.desc": "Open the server view or edit page for a workspace file, or return its URL without opening the browser.",
|
|
642
|
+
"cli.cmd.workspace.file.open.edit": "Open the server edit page instead of the view page.",
|
|
643
|
+
"cli.cmd.workspace.file.open.noOpen": "Return the page URL without launching the system browser.",
|
|
644
|
+
"cli.cmd.workspace.file.open.path": "Workspace-relative file path or absolute server metadata path.",
|
|
602
645
|
"cli.cmd.workspace.file.open.force": "Open the server page even when the local file has unpushed changes.",
|
|
603
646
|
"cli.cmd.workspace.file.open.localChangedForce": "The local file has unpushed changes. The browser opens the server version of {0}.",
|
|
604
647
|
"cli.cmd.workspace.file.open.openedEdit": "Opened server edit page: {0}",
|
|
@@ -611,19 +654,26 @@
|
|
|
611
654
|
"cli.cmd.workspace.file.show.badSource": "Invalid value for --source: {0}",
|
|
612
655
|
"cli.cmd.workspace.file.show.revSource": "--revision is only supported with --source=server.",
|
|
613
656
|
"cli.cmd.workspace.file.diff.summary": "Show workspace diff against server.",
|
|
614
|
-
"cli.cmd.workspace.file.diff.desc": "
|
|
657
|
+
"cli.cmd.workspace.file.diff.desc": "Compare local workspace metadata files with server content. Inputs may be files, directories (recursively including all files), or globs.",
|
|
615
658
|
"cli.cmd.workspace.file.diff.source": "Compare against server content.",
|
|
616
659
|
"cli.cmd.workspace.file.diff.badSource": "Invalid value for --source: {0}",
|
|
617
660
|
"cli.cmd.workspace.file.history.summary": "Show server file history.",
|
|
618
661
|
"cli.cmd.workspace.file.history.desc": "Show server-side file history for a workspace file.",
|
|
619
662
|
"cli.cmd.workspace.file.history.limit": "Limit the number of history records.",
|
|
620
|
-
"cli.cmd.workspace.file.compile.summary": "
|
|
621
|
-
"cli.cmd.workspace.file.compile.desc": "
|
|
663
|
+
"cli.cmd.workspace.file.compile.summary": "Validate workspace metadata files.",
|
|
664
|
+
"cli.cmd.workspace.file.compile.desc": "Validate local workspace metadata files. Inputs may be files, directories (recursively including all files), or globs.",
|
|
622
665
|
"cli.cmd.workspace.file.compile.compiler": "Compiler",
|
|
666
|
+
"cli.cmd.workspace.file.compile.done": "Validated {0} workspace metadata file(s).",
|
|
623
667
|
"cli.cmd.workspace.file.compile.failed": "Failed files: {0}",
|
|
624
|
-
"cli.cmd.workspace.file.compile.
|
|
668
|
+
"cli.cmd.workspace.file.compile.newerVersion": "{0} file(s) are newer than the active server and were skipped. Connect to a matching server, then validate again.",
|
|
669
|
+
"cli.cmd.workspace.file.compile.result": "Metadata validation result: {0} file(s), {1} passed, {2} failed",
|
|
670
|
+
"cli.cmd.workspace.file.compile.running": "Validating workspace metadata files",
|
|
671
|
+
"cli.cmd.workspace.file.compile.schemaFailed": "Metadata validation failed.",
|
|
672
|
+
"cli.cmd.workspace.file.compile.schemaFailedMsg": "Metadata validation failed: {0}",
|
|
673
|
+
"cli.cmd.workspace.file.compile.skipped": "Skipped files: {0}",
|
|
674
|
+
"cli.cmd.workspace.file.compile.upgradeRequired": "{0} file(s) require a metadata upgrade. Run `{1}` with the same pathspec, then validate again.",
|
|
625
675
|
"cli.cmd.workspace.file.upgrade.summary": "Upgrade old SuccApp metadata files.",
|
|
626
|
-
"cli.cmd.workspace.file.upgrade.desc": "Preview or upgrade old SuccApp metadata files in local workspace
|
|
676
|
+
"cli.cmd.workspace.file.upgrade.desc": "Preview or upgrade old SuccApp metadata files in the local workspace. Inputs may be files, directories (recursively including all files), or globs; with no input, all local projects are processed.",
|
|
627
677
|
"cli.cmd.workspace.file.upgrade.dryRun": "Preview upgrade candidates without changing files.",
|
|
628
678
|
"cli.cmd.workspace.file.upgrade.cands": "Upgrade candidates: {0}",
|
|
629
679
|
"cli.cmd.workspace.file.upgrade.dryRunRes": "Metadata upgrade dry-run: {0} checked, {1} candidate(s), {2} skipped, {3} failed",
|
|
@@ -639,6 +689,7 @@
|
|
|
639
689
|
"cli.cmd.workspace.lock.list.summary": "List locked workspace scopes.",
|
|
640
690
|
"cli.cmd.workspace.lock.list.desc": "List scopes currently locked in the SuccApp workspace.",
|
|
641
691
|
"cli.cmd.workspace.lock.list.scope": "Scope",
|
|
692
|
+
"cli.cmd.workspace.lock.list.empty": "No active workspace locks.",
|
|
642
693
|
"cli.cmd.workspace.lock.status.summary": "Show workspace lock holders.",
|
|
643
694
|
"cli.cmd.workspace.lock.status.desc": "Workspace lock status",
|
|
644
695
|
"cli.cmd.workspace.lock.status.heartbeat": "Last heartbeat",
|
|
@@ -657,6 +708,7 @@
|
|
|
657
708
|
"cli.cmd.workspace.backup.cleared": "Merge backup clear: {0} cleared, {1} remaining.",
|
|
658
709
|
"cli.cmd.workspace.backup.list.summary": "List saved merge backups.",
|
|
659
710
|
"cli.cmd.workspace.backup.list.desc": "List local versions saved before pull conflict handling.",
|
|
711
|
+
"cli.cmd.workspace.backup.list.empty": "No merge backups found.",
|
|
660
712
|
"cli.cmd.workspace.backup.clear.summary": "Clear saved merge backups.",
|
|
661
713
|
"cli.cmd.workspace.backup.clear.desc": "Clear local versions saved before pull conflict handling.",
|
|
662
714
|
"cli.cmd.workspace.ext.title": "Workspace extension",
|
|
@@ -678,6 +730,7 @@
|
|
|
678
730
|
"cli.cmd.workspace.ext.push.force": "Allow local extension files to overwrite remote changes.",
|
|
679
731
|
"cli.cmd.workspace.ext.push.needNamePath": "Pass an extension name or --path=<path>.",
|
|
680
732
|
"cli.cmd.workspace.ext.push.onlyOne": "Use either <name> or --path=<path>, not both.",
|
|
733
|
+
"cli.out.search.score": "Score",
|
|
681
734
|
"cli.out.common.active": "Active",
|
|
682
735
|
"cli.out.common.api": "Dev Tool API",
|
|
683
736
|
"cli.out.common.baseline": "Baseline",
|
|
@@ -686,6 +739,7 @@
|
|
|
686
739
|
"cli.out.common.id": "ID",
|
|
687
740
|
"cli.out.common.jvmInfo": "JVM properties",
|
|
688
741
|
"cli.out.common.metaVersions": "Metadata versions",
|
|
742
|
+
"cli.out.common.noResults": "No results.",
|
|
689
743
|
"cli.out.common.noServers": "No servers configured.",
|
|
690
744
|
"cli.out.common.product": "Product",
|
|
691
745
|
"cli.out.common.productInfo": "Product information",
|
|
@@ -728,14 +782,41 @@
|
|
|
728
782
|
"cli.out.model.extractMode": "Extract mode",
|
|
729
783
|
"cli.out.model.fields": "Fields",
|
|
730
784
|
"cli.out.model.kind": "Kind",
|
|
785
|
+
"cli.out.model.matchedFields": "Matched fields",
|
|
731
786
|
"cli.out.model.primary": "Primary",
|
|
732
787
|
"cli.out.model.primaryKeys": "Primary keys",
|
|
788
|
+
"cli.out.model.profile": "Data profile",
|
|
789
|
+
"cli.out.model.profile.profiledRowCount": "Rows",
|
|
790
|
+
"cli.out.model.profile.sampled": "Sampled",
|
|
791
|
+
"cli.out.model.profile.nullCount": "Nulls",
|
|
792
|
+
"cli.out.model.profile.nullRate": "Null rate",
|
|
793
|
+
"cli.out.model.profile.distinctCount": "Distinct",
|
|
794
|
+
"cli.out.model.profile.minValue": "Min",
|
|
795
|
+
"cli.out.model.profile.maxValue": "Max",
|
|
796
|
+
"cli.out.model.profile.sum": "Sum",
|
|
797
|
+
"cli.out.model.profile.avg": "Average",
|
|
798
|
+
"cli.out.model.profile.median": "Median",
|
|
799
|
+
"cli.out.model.profile.p90": "P90",
|
|
800
|
+
"cli.out.model.profile.p95": "P95",
|
|
801
|
+
"cli.out.model.profile.zeroCount": "Zeros",
|
|
802
|
+
"cli.out.model.profile.negativeCount": "Negatives",
|
|
803
|
+
"cli.out.model.profile.topValues": "Top values",
|
|
804
|
+
"cli.out.model.profile.sampleValues": "Samples",
|
|
805
|
+
"cli.out.model.profile.estimatedProperties": "Estimated",
|
|
806
|
+
"cli.out.model.profile.unavailableProperties": "Unavailable",
|
|
807
|
+
"cli.out.model.role": "Role",
|
|
808
|
+
"cli.out.model.rowCount": "Row count",
|
|
733
809
|
"cli.out.model.targetTable": "Target table",
|
|
734
810
|
"cli.out.model.title": "Title",
|
|
735
811
|
"cli.out.model.type": "Model type",
|
|
736
812
|
"cli.out.model.unique": "Unique",
|
|
737
813
|
"cli.out.model.writable": "Writable",
|
|
738
814
|
"cli.out.header.action": "Action",
|
|
815
|
+
"cli.out.header.cacheDisk": "Disk",
|
|
816
|
+
"cli.out.header.cacheEntries": "Entries",
|
|
817
|
+
"cli.out.header.cacheHitRate": "Hit rate",
|
|
818
|
+
"cli.out.header.cacheMem": "Memory",
|
|
819
|
+
"cli.out.header.cacheName": "Cache",
|
|
739
820
|
"cli.out.header.column": "Column",
|
|
740
821
|
"cli.out.header.command": "Command",
|
|
741
822
|
"cli.out.header.comment": "Comment",
|
|
@@ -769,8 +850,16 @@
|
|
|
769
850
|
"cli.out.help.commandHelpRead": "Run 'succapp {0} <command> --help' to read about a specific command.",
|
|
770
851
|
"cli.out.help.commandHelpSee": "Run 'succapp <command> --help' to see command help.",
|
|
771
852
|
"cli.out.help.commands": "Commands",
|
|
853
|
+
"cli.out.help.arguments": "arguments:",
|
|
772
854
|
"cli.out.help.examples": "examples:",
|
|
773
|
-
"cli.out.help.
|
|
855
|
+
"cli.out.help.group.content": "content options:",
|
|
856
|
+
"cli.out.help.group.field": "field options:",
|
|
857
|
+
"cli.out.help.group.global": "global options:",
|
|
858
|
+
"cli.out.help.group.input": "input options:",
|
|
859
|
+
"cli.out.help.group.options": "options:",
|
|
860
|
+
"cli.out.help.group.output": "output options:",
|
|
861
|
+
"cli.out.help.group.query": "query options:",
|
|
862
|
+
"cli.out.help.group.search": "search options:",
|
|
774
863
|
"cli.out.help.usageHeader": "usage:",
|
|
775
864
|
"cli.out.help.usageLine": "usage: succapp {command} {usageArgs}",
|
|
776
865
|
"cli.out.human.error": "error: {0}",
|
|
@@ -832,6 +921,7 @@
|
|
|
832
921
|
"cli.input.activeServer": "active server",
|
|
833
922
|
"cli.input.contentSource": "content source",
|
|
834
923
|
"cli.input.dataSourceConfig": "data source config",
|
|
924
|
+
"cli.input.dataSourceTestTarget": "data source or data source config",
|
|
835
925
|
"cli.input.exportTarget": "export target",
|
|
836
926
|
"cli.input.extensionName": "extension name",
|
|
837
927
|
"cli.input.extensionNameOrPath": "extension name or path",
|
|
@@ -1111,23 +1201,48 @@
|
|
|
1111
1201
|
"cli.cmd.model.title": "Model",
|
|
1112
1202
|
"cli.cmd.model.summary": "inspect and query semantic data models",
|
|
1113
1203
|
"cli.cmd.model.desc": "Inspect and query SuccApp semantic data models.",
|
|
1114
|
-
"cli.cmd.model.
|
|
1115
|
-
"cli.cmd.model.
|
|
1116
|
-
"cli.cmd.model.
|
|
1117
|
-
"cli.cmd.model.
|
|
1118
|
-
"cli.cmd.model.
|
|
1119
|
-
"cli.cmd.model.
|
|
1204
|
+
"cli.cmd.model.search.summary": "Search semantic models.",
|
|
1205
|
+
"cli.cmd.model.search.desc": "Search visible .tbl semantic models by full path or by combinable location, model-property, and field-property filters.",
|
|
1206
|
+
"cli.cmd.model.search.query": "Starts with '/': full model path or path glob. Contains '*' or '?': model file name glob. Otherwise broadly searches model metadata or visible field metadata by keyword.",
|
|
1207
|
+
"cli.cmd.model.search.path": "Search by an absolute model metadata path glob; a project root searches recursively. Can be combined with a keyword <query>, but not with a path <query>, --project, --parent-dir, or --name.",
|
|
1208
|
+
"cli.cmd.model.search.name": "Search by a model file name glob; without wildcards, matches exactly. Can be combined with a keyword <query>, --project, and --parent-dir, but not with a glob <query> or --path.",
|
|
1209
|
+
"cli.cmd.model.search.parentDir": "Search one absolute directory scope recursively. Glob wildcards are not supported; use --path='/DIR/*' for direct children. With --project, its first path segment must match the project name.",
|
|
1210
|
+
"cli.cmd.model.search.project": "Match one project name. Can be combined with --parent-dir and --name.",
|
|
1211
|
+
"cli.cmd.model.search.type": "Match Table.tableType values. Repeat or use comma-separated values; values are ORed.",
|
|
1212
|
+
"cli.cmd.model.search.contains": "Require every value to match a model name, description, or physical table name (AND). Plain text uses case-insensitive contains; /pattern/flags uses regex with i (case-insensitive), m (multiline), and g (compatibility only; no effect).",
|
|
1213
|
+
"cli.cmd.model.search.containsAny": "Match when any value matches a model name, description, or physical table name (OR). Plain text uses case-insensitive contains; /pattern/flags uses regex with i, m, and g (compatibility only; no effect).",
|
|
1214
|
+
"cli.cmd.model.search.fieldContains": "Require every value to match a field name, description, physical name, or keyword (AND). Plain text uses case-insensitive contains; /pattern/flags uses regex with i (case-insensitive), m (multiline), and g (compatibility only; no effect).",
|
|
1215
|
+
"cli.cmd.model.search.fieldContainsAny": "Match when any value matches a field name, description, physical name, or keyword (OR). Plain text uses case-insensitive contains; /pattern/flags uses regex with i, m, and g (compatibility only; no effect).",
|
|
1216
|
+
"cli.cmd.model.search.fieldMatch": "Limit field-text matching to dim, measure, or all fields. Defaults to all.",
|
|
1217
|
+
"cli.cmd.model.search.allFields": "Include hidden and extended fields in field-text matching.",
|
|
1218
|
+
"cli.cmd.model.search.fieldLimit": "Maximum matched fields returned per model. Defaults to 5; valid range is 1 to 50.",
|
|
1219
|
+
"cli.cmd.model.search.limit": "Return at most this many most relevant models. Defaults to 50; valid range is 1 to 200.",
|
|
1220
|
+
"cli.cmd.model.search.empty": "No matching models.",
|
|
1221
|
+
"cli.cmd.model.search.pathHint": "'{0}' is an exact model path. Use '{1}' to search recursively.",
|
|
1222
|
+
"cli.cmd.model.search.nameHint": "Model names match exactly without wildcards; wildcards and the .tbl suffix are not added automatically.",
|
|
1223
|
+
"cli.cmd.model.search.hasMore": "Only the {0} most relevant models are shown; add a project, directory, type, or more specific keyword to narrow the search.",
|
|
1120
1224
|
"cli.cmd.model.show.summary": "Show model metadata summary.",
|
|
1121
1225
|
"cli.cmd.model.show.desc": "Show semantic model metadata summary.",
|
|
1122
|
-
"cli.cmd.model.
|
|
1226
|
+
"cli.cmd.model.profile.summary": "Profile one semantic model.",
|
|
1227
|
+
"cli.cmd.model.profile.desc": "Return the model summary, current full metadata, and physical table row count. Human output is concise; use --json for the full metadata.",
|
|
1228
|
+
"cli.cmd.model.fieldProfile.summary": "Profile selected model fields.",
|
|
1229
|
+
"cli.cmd.model.fieldProfile.desc": "Inspect selected fields, inferred analytical roles, dimension attributes, and optional data statistics. Select 1 to 20 fields; aliases resolving to the same fieldPath are deduplicated.\n\nCapability depends on field type, data source, data volume, permissions, and masking. nullCount/nullRate apply to queryable fields. Numeric fields can use distinctCount, minValue, maxValue, sum, avg, zeroCount, negativeCount, topValues, and sampleValues. String/date fields can use distinctCount, minValue, maxValue, topValues, and sampleValues; boolean fields can use distinctCount, topValues, and sampleValues. median, p90, and p95 are accepted for protocol compatibility but currently return unsupported. Check dataProfile.unavailableProperties for the actual result. For unknown-size models, distinctCount/topValues run only after the visible row count is confirmed at 100,000 or less; million-scale models return costLimit. JSON sum/avg values are decimal strings to preserve precision.",
|
|
1230
|
+
"cli.cmd.model.fieldProfile.field": "Field physical name, business name, or fieldPath. Repeat to select up to 20 fields; equivalent names are deduplicated by fieldPath.",
|
|
1231
|
+
"cli.cmd.model.fieldProfile.dataProperty": "Data statistic to calculate. Repeat or use comma-separated values. Values: nullCount, nullRate, distinctCount, minValue, maxValue, sum, avg, median, p90, p95, zeroCount, negativeCount, topValues, sampleValues. Without this option, calculates nullCount, nullRate, distinctCount, minValue, and maxValue.",
|
|
1232
|
+
"cli.cmd.model.fieldProfile.noData": "Do not scan field data; return semantic and dimension information only. Cannot be combined with --data-property.",
|
|
1233
|
+
"cli.cmd.model.fieldProfile.topN": "Maximum topValues entries. Defaults to 20; valid range is 1 to 50.",
|
|
1234
|
+
"cli.cmd.model.fieldProfile.sampleLimit": "Maximum sampleValues entries. Defaults to 10; valid range is 1 to 50.",
|
|
1235
|
+
"cli.cmd.model.fieldProfile.dimensionAttributeDepth": "Dimension-attribute expansion depth. Defaults to 1; valid range is 0 to 3.",
|
|
1123
1236
|
"cli.cmd.model.fields.summary": "List model fields.",
|
|
1124
1237
|
"cli.cmd.model.fields.desc": "List semantic model fields.",
|
|
1125
1238
|
"cli.cmd.model.fields.all": "Include hidden fields and extended properties.",
|
|
1126
|
-
"cli.cmd.model.fields.contains": "
|
|
1239
|
+
"cli.cmd.model.fields.contains": "Match fields by name, title, or database field. Plain text uses case-insensitive contains; /pattern/flags uses regex with i, m, and g (compatibility only; no effect).",
|
|
1127
1240
|
"cli.cmd.model.fields.dim": "Only list dimension-key fields.",
|
|
1128
1241
|
"cli.cmd.model.fields.measure": "Only list measure fields.",
|
|
1242
|
+
"cli.cmd.model.fields.empty": "No matching fields found.",
|
|
1129
1243
|
"cli.cmd.model.indexes.summary": "List model indexes.",
|
|
1130
1244
|
"cli.cmd.model.indexes.desc": "List primary keys, business keys, and model indexes.",
|
|
1245
|
+
"cli.cmd.model.indexes.empty": "This model has no indexes.",
|
|
1131
1246
|
"cli.cmd.model.select.summary": "Select rows from one model.",
|
|
1132
1247
|
"cli.cmd.model.select.desc": "Select rows from one .tbl model with SuccApp expression filters.",
|
|
1133
1248
|
"cli.cmd.model.select.select": "Select fields, separated by commas. Can be repeated.",
|
|
@@ -1141,7 +1256,7 @@
|
|
|
1141
1256
|
"cli.cmd.model.query.queryFile": "Read Query DSL JSON from a file.",
|
|
1142
1257
|
"cli.cmd.model.query.stdin": "Read Query DSL JSON from stdin.",
|
|
1143
1258
|
"cli.cmd.model.query.maxRows": "Maximum preview row count.",
|
|
1144
|
-
"cli.cmd.model.query.empty": "Query
|
|
1259
|
+
"cli.cmd.model.query.empty": "Query succeeded; 0 rows returned.",
|
|
1145
1260
|
"cli.cmd.model.export.summary": "Export model query results as CSV.",
|
|
1146
1261
|
"cli.cmd.model.export.desc": "Export one model or Query DSL result as CSV.",
|
|
1147
1262
|
"cli.cmd.model.export.select": "Select fields, separated by commas. Can be repeated.",
|