@restoai/resto-datacli 0.1.11 → 0.2.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.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: resto-datacli
3
- description: Use deterministic local/remote resto-datacli commands to discover reports, inspect fields, validate query plans, execute report queries, and transform saved snapshots.
3
+ description: Use deterministic local/remote resto-datacli commands to discover reports, inspect fields, validate query plans, execute report queries, drill into order details, and transform saved snapshots.
4
4
  ---
5
5
 
6
6
  # resto-datacli Skill
@@ -16,6 +16,17 @@ Use `resto-datacli` as evidence-backed tools for restaurant reporting data. Agen
16
16
  - Ask clarification when metric meaning is ambiguous, for example when "sales" could mean net sales, gross sales, paid amount, quantity, or order count.
17
17
  - Treat missing fields as capability gaps. Explain the gap, cite what was searched or inspected, and offer alternatives such as nearby fields, another report, narrower scope, or asking the data owner.
18
18
 
19
+ ## Startup Freshness Check
20
+
21
+ At the start of a Resto data task or a new Agent session, check tool and knowledge freshness before discovery:
22
+
23
+ 1. Run `resto --version`.
24
+ 2. Run `npm view @restoai/resto-datacli version --cache /private/tmp/resto-datacli-npm-cache`.
25
+ 3. If npm has a newer version, run `npm install -g @restoai/resto-datacli@latest --cache /private/tmp/resto-datacli-npm-cache`, then run `resto install-skill`, and tell the user to restart the current Agent or open a new session so the updated skill is loaded.
26
+ 4. run `resto knowledge status` to inspect local knowledge.
27
+ 5. run `resto knowledge check` with the task's env and schema version when auth is available.
28
+ 6. run `resto knowledge sync` when local knowledge is missing, stale, or older than the remote manifest. For China production, use `--env bj --schema-version 1` unless the user or deployment context says otherwise.
29
+
19
30
  ## Prerequisites
20
31
 
21
32
  - run `resto knowledge status` to see the current local package.
@@ -27,13 +38,31 @@ Use `resto-datacli` as evidence-backed tools for restaurant reporting data. Agen
27
38
  ## Discovery Workflow
28
39
 
29
40
  1. Search candidate reports with `resto report search`.
30
- 2. Inspect promising reports with `resto report inspect` to confirm report metadata and available fields.
41
+ 2. Inspect promising reports with `resto report inspect` to confirm report metadata, composition, row-pivot rules, and merged-head evidence.
31
42
  3. Search fields with `resto field search` when a metric, dimension, filter, currency, or time grain is unclear.
32
43
  4. Review reusable references with `resto playbook list` and `resto playbook inspect`. Playbooks are reference material, not automatic intent resolution.
33
44
  5. Build an explicit JSON query plan containing `reportId`, `selectFields`, `filters`, optional `orderBy`, paging, proportions, and additional dimension strategies.
34
45
  6. Validate before executing with `resto query validate`.
35
46
  7. Execute only validated plans with `resto query execute`.
36
47
 
48
+ ## Composite And Row-Pivot Reports
49
+
50
+ - When `report inspect` returns `composition`, keep `reportId` / `queryReportId` as the executable report and use `basicReportId` plus merged fields as field evidence. Do not replace the executable report id with the basic report id.
51
+ - Treat `metricsByDim` as an explicit dimension-to-metric allowlist. Use `metricFieldNames` for available metrics and prefer `defaultMetricFieldNames` only when they match the user's requested measure.
52
+ - Do not generate row-pivot plans for entries where `disableMetricsByDim=true`.
53
+ - Use `mergedHeads` to understand static versus dynamic sub-heads, subtotal behavior, and the dimension that generates dynamic columns. Do not invent possible dynamic values from metadata alone.
54
+ - Hidden fields are omitted from normal field discovery. Use `resto field list --include-hidden` or `resto field search --include-hidden` only when technical validation, required filters, or drilldown needs them. A hidden field may be valid in a query plan even though it should not appear in a customer-facing field list.
55
+
56
+ ## Order Detail Drilldown
57
+
58
+ - Treat the账单明细表 page (`reportId=888002`, `basicReportId=3`) and an individual order detail as different operations.
59
+ - Use a normal validated query plan on `reportId=888002` to list or locate orders by date, shop, POS order id, and other fields.
60
+ - Once an exact POS order id is known, retrieve the rendered multi-entity detail with `resto order detail --report-id 888002 --pos-order-id <id> --business-date-start <YYYY-MM-DD> --business-date-end <YYYY-MM-DD>`.
61
+ - POS order drilldown requires both business-date options. The inclusive range must be at most 31 days; use the date range that was used to locate the order. The logged-in profile supplies the trusted corporation context.
62
+ - Use `--order-id` only for a known internal order id, and never pass both order identifiers.
63
+ - Do not emulate order detail by selecting many fields from report 3 or by directly calling BO/report-api. The dedicated command preserves server-side auth, report permission, shop scope, flow control, Sentinel, audit, and alerting.
64
+ - The detail response is dynamic JSON produced by report-api order-type templates. Cite the executable main `reportId`, returned `shopId`, order identifier, and the dedicated detail command as evidence.
65
+
37
66
  ## Fast Report Catalog Workflow
38
67
 
39
68
  Use these shortcuts before slower exploratory analysis when the user asks for report counts, report names, or report identity:
@@ -60,6 +89,7 @@ Always cite the evidence used in the final answer:
60
89
  - selected fields and filter fields
61
90
  - filters and time range
62
91
  - currency, or state that no currency field/value was present
92
+ - for row-pivot queries, cite the dimension and metric relationship from `metricsByDim`
63
93
  - `resultId` from `resto query execute`
64
94
  - for snapshot transforms, cite the source query `resultId`
65
95
  - for `resto analysis topn`, cite the transform command and parameters: transform name, dimension, metric, limit
package/README.md CHANGED
@@ -36,33 +36,69 @@ Customer-facing installation steps are documented in [`docs/installation.md`](do
36
36
 
37
37
  ## Auth
38
38
 
39
- Interactive login prompts for the BO URL, corporation id, auth method, and secret values. Passwords and tokens are hidden while you paste them:
39
+ Interactive login prompts for the CLI auth gateway URL, corporation id, auth method, and secret values. Phone dynamic codes and passwords are hidden while you paste them:
40
40
 
41
41
  ```bash
42
42
  resto auth login --interactive
43
43
  ```
44
44
 
45
- Token login still requires an explicit corporation id:
45
+ Phone login uses the CLI auth gateway to send a dynamic verification code, then exchanges the phone number and code for a CLI-platform token:
46
46
 
47
47
  ```bash
48
48
  resto auth login \
49
- --base-url https://bo.restosuite.cn \
50
- --token <token> \
51
- --corporation-id 302
49
+ --base-url https://cli.test.restosuite.ai \
50
+ --plat cli \
51
+ --corporation-id 302 \
52
+ --phone-number <phone-number> \
53
+ --dynamic-code <verification-code>
52
54
  ```
53
55
 
54
- Password login follows the BO login step flow, encrypts the password with BO's RSA-OAEP/SHA-256 public key, and stores the returned token in the same local auth profile:
56
+ Password login follows the auth gateway login step flow, encrypts the password with the gateway-compatible RSA-OAEP/SHA-256 public key, and stores the returned token in the same local auth profile:
55
57
 
56
58
  ```bash
57
59
  resto auth login \
58
- --base-url https://bo.restosuite.cn \
60
+ --base-url https://cli.test.restosuite.ai \
61
+ --plat cli \
59
62
  --username <account> \
60
63
  --password <password>
61
64
  ```
62
65
 
63
- `--base-url` is the BO gateway host used for login, knowledge manifest sync, and report query execution. `language-code` and `timezone` default to `zh_CN` and `Asia/Shanghai`. If the BO password flow requires an explicit tenant or flow step, pass `--corporation-id`, `--login-flow-code`, and optionally `--login-step-name`.
66
+ `--base-url` is the CLI auth gateway host used for login and token acquisition, and `--plat` defaults to `cli`. Knowledge manifest sync/check, report query execution, and shop filter lookup go through `report-cli-service`; configure `--report-cli-url` or `RESTO_REPORT_CLI_URL` when using a non-default service endpoint. `language-code` and `timezone` default to `zh_CN` and `Asia/Shanghai`. For phone login, `--phone-area-code` defaults to `+86` and `--phone-region` defaults to `CN` when omitted. If the gateway password flow requires an explicit tenant or flow step, pass `--corporation-id`, `--login-flow-code`, and optionally `--login-step-name`.
64
67
  For normal email/password login, `--login-flow-code` is not required; it is kept only as a troubleshooting escape hatch.
65
68
 
69
+ ## Query Backend
70
+
71
+ `resto query execute` sends query requests to `report-cli-service`:
72
+
73
+ ```bash
74
+ resto query execute --plan ./plan.json
75
+ ```
76
+
77
+ For local report CLI chain testing, start `report-api` and `report-cli-service` locally, then point the CLI at the local service:
78
+
79
+ ```bash
80
+ resto query execute \
81
+ --plan ./plan.json \
82
+ --report-cli-url http://127.0.0.1:18081
83
+ ```
84
+
85
+ The same service URL can be selected with an environment variable:
86
+
87
+ ```bash
88
+ RESTO_REPORT_CLI_URL=http://127.0.0.1:18081 \
89
+ resto query execute --plan ./plan.json
90
+ ```
91
+
92
+ `resto shop search` also sends shop filter requests to `report-cli-service`:
93
+
94
+ ```bash
95
+ resto shop search zn线上店铺 \
96
+ --report-id 888001 \
97
+ --organization-type 1 \
98
+ --org-type-list 1,2 \
99
+ --report-cli-url http://127.0.0.1:18081
100
+ ```
101
+
66
102
  ## Fixture Mode
67
103
 
68
104
  Fixture mode uses bundled local knowledge and does not require remote services or auth:
package/dist/cli.js CHANGED
@@ -7,6 +7,7 @@ import { createAuthCommand } from "./commands/auth.js";
7
7
  import { createFieldCommand } from "./commands/field.js";
8
8
  import { createInstallSkillCommand } from "./commands/install-skill.js";
9
9
  import { createKnowledgeCommand } from "./commands/knowledge.js";
10
+ import { createOrderCommand } from "./commands/order.js";
10
11
  import { configureJsonParseErrors, JsonCommandError } from "./commands/json-command.js";
11
12
  import { createPlaybookCommand } from "./commands/playbook.js";
12
13
  import { createQueryCommand } from "./commands/query.js";
@@ -49,6 +50,7 @@ The CLI does not infer user intent. Agents choose reports, fields, filters, and
49
50
  program.addCommand(createQueryCommand(options));
50
51
  program.addCommand(createSnapshotCommand(options));
51
52
  program.addCommand(createAnalysisCommand(options));
53
+ program.addCommand(createOrderCommand(options));
52
54
  program.addCommand(createShopCommand(options));
53
55
  program.addCommand(createInstallSkillCommand(options));
54
56
  program.addCommand(createUninstallCommand(options));