@thinkingai/ae-cli 6.1.23 → 6.1.25
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/README.md +7 -1
- package/README.zh.md +7 -1
- package/dist/{auth-XZNXFRJS.js → auth-LHM7NQPR.js} +167 -7
- package/dist/{capability-FYTU3X6L.js → capability-SJI5KOCK.js} +11 -6
- package/dist/{chunk-CCS66K4K.js → chunk-2FJM4HRV.js} +3 -3
- package/dist/{chunk-57RRFUEZ.js → chunk-5XRQ3CZR.js} +4 -4
- package/dist/{chunk-EQ255HKO.js → chunk-7WZACOAI.js} +2 -2
- package/dist/{chunk-DX5CDO34.js → chunk-BW7JUDEI.js} +84 -19
- package/dist/{chunk-7XGFSUOM.js → chunk-DU72X2IO.js} +271 -76
- package/dist/{chunk-V2NUHPXF.js → chunk-GK7WDY7E.js} +1 -1
- package/dist/{chunk-7FTTULED.js → chunk-IG3DYEIR.js} +4 -1
- package/dist/{chunk-HBGADCKA.js → chunk-KJDOTPYU.js} +3 -3
- package/dist/{chunk-4NRCTUZJ.js → chunk-KS4DE3MX.js} +4 -4
- package/dist/{chunk-JOCDD4ON.js → chunk-N4BLPJC7.js} +1 -1
- package/dist/{chunk-HFGZGYCG.js → chunk-QYXDJOLA.js} +252 -6
- package/dist/{chunk-DVMLWQD4.js → chunk-SO5LKIWP.js} +2 -2
- package/dist/{chunk-VYXXOKYS.js → chunk-XKIW3QMF.js} +7 -4
- package/dist/{chunk-MAPZ7VB6.js → chunk-YVGXGTD6.js} +13 -0
- package/dist/{community-report-client-CU22W53K.js → community-report-client-6VJDDMJJ.js} +1 -1
- package/dist/{config-XO3LI3SA.js → config-XQWOPDHN.js} +25 -6
- package/dist/{context-IFJI3LIT.js → context-M3HDGEIR.js} +4 -4
- package/dist/{data-integration-HNGUKFIC.js → data-integration-XBTCGXQT.js} +6 -6
- package/dist/index.js +78 -41
- package/dist/{local-data-upload-client-GTRIT64F.js → local-data-upload-client-3P7NIVQ4.js} +1 -1
- package/dist/{memory-QGPSNCQS.js → memory-6APEB2JB.js} +4 -4
- package/dist/{metadata-DI5BMYFU.js → metadata-JRYKNUS5.js} +7 -7
- package/dist/{model-RNPQXIBI.js → model-ZS7HVGKN.js} +4 -4
- package/dist/{personal-semantic-preference-5C3WUXFI.js → personal-semantic-preference-IDE2GE5T.js} +8 -6
- package/dist/project-semantic-36KOCYN7.js +356 -0
- package/dist/{sync-O45NXEQY.js → sync-EQLSTUS7.js} +7 -7
- package/dist/{te-agent-K5MSPNHJ.js → te-agent-Z3HCTKR7.js} +348 -55
- package/dist/{te-analysis-AISWCOOZ.js → te-analysis-5ZZ6YHVH.js} +940 -144
- package/dist/{te-community-4OYU3BDA.js → te-community-Z7JACGF3.js} +3 -3
- package/dist/{te-dataops-NFIPB6FX.js → te-dataops-F7GQOIS6.js} +644 -276
- package/dist/{te-engage-BAM3GBFX.js → te-engage-RNRMYDO3.js} +6 -6
- package/dist/{te-experiment-GUTZXZ5Z.js → te-experiment-BTAC2UNK.js} +6 -6
- package/dist/{te-kb-3TS73NO6.js → te-kb-QJLJEX5K.js} +323 -181
- package/dist/{te-system-STMHLS5J.js → te-system-IXC43QHZ.js} +6 -6
- package/dist/{te-team-3I5AOX3N.js → te-team-BIZIKIHZ.js} +6 -6
- package/dist/{update-RZXLPCRH.js → update-W2SGQNKT.js} +4 -4
- package/package.json +11 -4
- package/skills/ae-agent/SKILL.md +9 -4
- package/skills/ae-agent/references/notification.md +40 -0
- package/skills/ae-analysis/SKILL.md +44 -21
- package/skills/ae-analysis/references/adhoc_export.md +1 -1
- package/skills/ae-analysis/references/adhoc_run.md +1 -1
- package/skills/ae-analysis/references/agent_review_submit_to_page.md +3 -1
- package/skills/ae-analysis/references/ai_models/event.md +6 -1
- package/skills/ae-analysis/references/ai_models/funnel.md +7 -1
- package/skills/ae-analysis/references/ai_models/heat_map.md +23 -0
- package/skills/ae-analysis/references/ai_models/interval.md +24 -0
- package/skills/ae-analysis/references/ai_models/path.md +20 -0
- package/skills/ae-analysis/references/ai_models/prop_analysis.md +2 -0
- package/skills/ae-analysis/references/ai_models/rank_list.md +30 -0
- package/skills/ae-analysis/references/ai_models/retention.md +45 -1
- package/skills/ae-analysis/references/ai_models/revenue.md +20 -2
- package/skills/ae-analysis/references/ai_models/session.md +76 -0
- package/skills/ae-analysis/references/ai_models/tag.md +2 -0
- package/skills/ae-analysis/references/ai_models.md +76 -6
- package/skills/ae-analysis/references/analysis_data_retrieval.md +4 -0
- package/skills/ae-analysis/references/analysis_drilldown_contract.md +4 -1
- package/skills/ae-analysis/references/asset_batch_info_export.md +10 -0
- package/skills/ae-analysis/references/asset_batch_sql_export.md +13 -1
- package/skills/ae-analysis/references/asset_export.md +12 -1
- package/skills/ae-analysis/references/asset_list.md +1 -0
- package/skills/ae-analysis/references/asset_search.md +11 -5
- package/skills/ae-analysis/references/bi_panel_list.md +1 -1
- package/skills/ae-analysis/references/catalog_list.md +1 -1
- package/skills/ae-analysis/references/collaboration.md +48 -0
- package/skills/ae-analysis/references/command_index.md +19 -17
- package/skills/ae-analysis/references/dashboard_list.md +4 -4
- package/skills/ae-analysis/references/dashboard_report_data_export.md +2 -0
- package/skills/ae-analysis/references/drilldown_session_details_run.md +41 -0
- package/skills/ae-analysis/references/event_export.md +3 -1
- package/skills/ae-analysis/references/governance_recommendation_auto_review.md +77 -0
- package/skills/ae-analysis/references/governance_recommendation_export.md +11 -0
- package/skills/ae-analysis/references/metadata_resolution.md +3 -3
- package/skills/ae-analysis/references/metric_export.md +3 -1
- package/skills/ae-analysis/references/metric_list.md +1 -1
- package/skills/ae-analysis/references/operation_record_export.md +10 -0
- package/skills/ae-analysis/references/personal_semantic_preference_add.md +2 -2
- package/skills/ae-analysis/references/personal_semantic_preference_get.md +4 -4
- package/skills/ae-analysis/references/personal_semantic_preference_list.md +4 -4
- package/skills/ae-analysis/references/project_semantic_knowledge_wiki.md +30 -12
- package/skills/ae-analysis/references/project_semantic_knowledge_wiki_plan_schema.md +59 -0
- package/skills/ae-analysis/references/property_export.md +3 -1
- package/skills/ae-analysis/references/report_create.md +5 -1
- package/skills/ae-analysis/references/report_data_export.md +6 -0
- package/skills/ae-analysis/references/report_get.md +2 -0
- package/skills/ae-analysis/references/report_list.md +5 -5
- package/skills/ae-analysis/references/report_update.md +7 -1
- package/skills/ae-analysis/references/sql_table_columns.md +4 -4
- package/skills/ae-analysis/references/sql_table_list.md +5 -5
- package/skills/ae-analysis/references/user_cluster_models.md +8 -0
- package/skills/ae-analysis/references/user_tag_create.md +7 -1
- package/skills/ae-analysis/references/user_tag_get.md +1 -1
- package/skills/ae-analysis/references/user_tag_models.md +18 -2
- package/skills/ae-analysis/references/user_tag_refresh.md +1 -1
- package/skills/ae-analysis/references/user_tag_update.md +2 -2
- package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/build-project-semantic-wiki.mjs +337 -12
- package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/default-compile-rules.md +8 -3
- package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/generate-build-ir.mjs +284 -24
- package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/package-wiki-source-zip.mjs +185 -22
- package/skills/ae-analysis/scripts/project-semantic-knowledge-wiki/precompiled-source.mjs +46 -2
- package/skills/ae-capability/SKILL.md +63 -1
- package/skills/ae-capability/references/collaboration.md +48 -0
- package/skills/ae-community/SKILL.md +5 -1
- package/skills/ae-community/references/collaboration.md +48 -0
- package/skills/ae-data-integration/SKILL.md +4 -0
- package/skills/ae-data-integration/references/collaboration.md +48 -0
- package/skills/ae-data-integration-helper/references/cpp_server_sdk_faq.md +2 -2
- package/skills/ae-data-integration-helper/references/logbus2_parser_plugin.md +6 -6
- package/skills/ae-data-integration-helper/references/sdk_log_guide.md +4 -4
- package/skills/ae-dataops/SKILL.md +54 -74
- package/skills/ae-dataops/references/collaboration.md +48 -0
- package/skills/ae-dataops/references/dataops-backfill.md +23 -18
- package/skills/ae-dataops/references/dataops-flow-create.md +74 -23
- package/skills/ae-dataops/references/dataops-flow-monitor.md +45 -13
- package/skills/ae-dataops/references/dataops-integration.md +57 -30
- package/skills/ae-dataops/references/dataops-query.md +21 -4
- package/skills/ae-dataops/references/dataops-table.md +143 -11
- package/skills/ae-engage/SKILL.md +21 -6
- package/skills/ae-engage/references/add-channel.md +3 -3
- package/skills/ae-engage/references/channel-mgmt.md +3 -3
- package/skills/ae-engage/references/collaboration.md +48 -0
- package/skills/ae-engage/references/common-metric.md +2 -2
- package/skills/ae-engage/references/save-task.md +2 -2
- package/skills/ae-engage/references/scene-config-channel.md +4 -4
- package/skills/ae-generate-tracking-code/SKILL.md +1 -1
- package/skills/ae-generate-tracking-plan/SKILL.md +4 -0
- package/skills/ae-generate-tracking-plan/references/collaboration.md +48 -0
- package/skills/ae-kb/SKILL.md +9 -1
- package/skills/ae-kb/references/collaboration.md +48 -0
- package/skills/ae-kb/references/schema-import.md +30 -0
- package/skills/ae-kb-discovery/SKILL.md +7 -2
- package/skills/ae-kb-discovery/references/collaboration.md +48 -0
- package/skills/ae-metadata/SKILL.md +20 -12
- package/skills/ae-metadata/references/collaboration.md +48 -0
- package/dist/project-semantic-3LF6Q6JZ.js +0 -1119
- package/skills/ae-project-semantic/SKILL.md +0 -193
- package/skills/ae-project-semantic/references/query-routing-v5.md +0 -165
- package/skills/ae-project-semantic/references/recommendation-quality.md +0 -68
|
@@ -7,12 +7,12 @@ import {
|
|
|
7
7
|
waitForAnalysisRun,
|
|
8
8
|
withAsyncArtifactLifecycle,
|
|
9
9
|
withInterruptSignal
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-XKIW3QMF.js";
|
|
11
11
|
import {
|
|
12
12
|
createCapabilityCommand,
|
|
13
13
|
definitionIntentSnapshotFlag,
|
|
14
14
|
modelDefinitionIntentSnapshotFlag
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-2FJM4HRV.js";
|
|
16
16
|
import {
|
|
17
17
|
CapabilityGatewayError,
|
|
18
18
|
buildCapabilityGatewayUrl,
|
|
@@ -22,23 +22,24 @@ import {
|
|
|
22
22
|
requestCapabilityGateway,
|
|
23
23
|
requestCapabilityGatewayWithEnvelope,
|
|
24
24
|
uploadInputFile,
|
|
25
|
-
validateCapability
|
|
26
|
-
|
|
25
|
+
validateCapability,
|
|
26
|
+
validateCapabilityWithEnvelope
|
|
27
|
+
} from "./chunk-QYXDJOLA.js";
|
|
27
28
|
import {
|
|
28
29
|
registerCapabilityGatewayRoute,
|
|
29
30
|
resolveGatewayDomain
|
|
30
31
|
} from "./chunk-KPQY44JQ.js";
|
|
31
32
|
import {
|
|
32
33
|
withOutputMetadata
|
|
33
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-BW7JUDEI.js";
|
|
34
35
|
import "./chunk-Y74WTIKJ.js";
|
|
35
36
|
import {
|
|
36
37
|
getCliToken
|
|
37
|
-
} from "./chunk-
|
|
38
|
-
import "./chunk-
|
|
38
|
+
} from "./chunk-DU72X2IO.js";
|
|
39
|
+
import "./chunk-IG3DYEIR.js";
|
|
39
40
|
import {
|
|
40
41
|
CliValidationError
|
|
41
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-YVGXGTD6.js";
|
|
42
43
|
|
|
43
44
|
// src/commands/te-analysis/capability-shared.ts
|
|
44
45
|
var ANALYSIS_GATEWAY_CLI_SERVICES = /* @__PURE__ */ new Set(["project", "system"]);
|
|
@@ -148,7 +149,7 @@ var sqlTableUsageFlag = {
|
|
|
148
149
|
name: "usage",
|
|
149
150
|
type: "string",
|
|
150
151
|
required: false,
|
|
151
|
-
desc: "Authorized table set: analysis (default) or
|
|
152
|
+
desc: "Authorized table set: analysis (default), tag_cluster for SQL tags/clusters, or sql_datatable for SQL-built data tables. Use the same usage for list and columns."
|
|
152
153
|
};
|
|
153
154
|
var reportListLimitFlag = {
|
|
154
155
|
name: "limit",
|
|
@@ -288,7 +289,7 @@ function certificationScopeInput(ctx) {
|
|
|
288
289
|
}
|
|
289
290
|
return value;
|
|
290
291
|
}
|
|
291
|
-
function dashboardReportDataInput(ctx) {
|
|
292
|
+
function dashboardReportDataInput(ctx, includeCache = true) {
|
|
292
293
|
return compactInput({
|
|
293
294
|
...projectInput(ctx),
|
|
294
295
|
dashboard_id: ctx.num("dashboard-id"),
|
|
@@ -299,7 +300,7 @@ function dashboardReportDataInput(ctx) {
|
|
|
299
300
|
cluster_query_scope: optionalString(ctx, "cluster-query-scope"),
|
|
300
301
|
slave_cluster_id: optionalString(ctx, "slave-cluster-id"),
|
|
301
302
|
zone_offset: optionalNumber(ctx, "zone-offset"),
|
|
302
|
-
use_cache: optionalBoolean(ctx, "use-cache"),
|
|
303
|
+
...includeCache ? { use_cache: optionalBoolean(ctx, "use-cache") } : {},
|
|
303
304
|
request_id: optionalString(ctx, "request-id"),
|
|
304
305
|
preview_rows: optionalNumber(ctx, "preview-rows"),
|
|
305
306
|
timeout_seconds: optionalNumber(ctx, "timeout-seconds"),
|
|
@@ -756,6 +757,7 @@ var metadataEventExport = createAnalysisMetaCapabilityCommand({
|
|
|
756
757
|
queriesFlag,
|
|
757
758
|
fieldsFlag,
|
|
758
759
|
{ name: "authenticated-only", type: "boolean", required: false, desc: "When true, export only authenticated events." },
|
|
760
|
+
certificationScopeFlag,
|
|
759
761
|
metadataExportOutputFlag
|
|
760
762
|
],
|
|
761
763
|
risk: "read",
|
|
@@ -764,7 +766,8 @@ var metadataEventExport = createAnalysisMetaCapabilityCommand({
|
|
|
764
766
|
...projectInput(ctx),
|
|
765
767
|
queries: optionalQueries(ctx),
|
|
766
768
|
fields: optionalJson(ctx, "fields"),
|
|
767
|
-
authenticated_only: optionalBoolean(ctx, "authenticated-only")
|
|
769
|
+
authenticated_only: optionalBoolean(ctx, "authenticated-only"),
|
|
770
|
+
certification_scope: certificationScopeInput(ctx)
|
|
768
771
|
}),
|
|
769
772
|
postProcess: metadataExportPostProcess("event", "events")
|
|
770
773
|
});
|
|
@@ -947,6 +950,7 @@ var metadataPropertyExport = createAnalysisMetaCapabilityCommand({
|
|
|
947
950
|
queriesFlag,
|
|
948
951
|
fieldsFlag,
|
|
949
952
|
{ name: "authenticated-only", type: "boolean", required: false, desc: "When true, export only authenticated properties." },
|
|
953
|
+
certificationScopeFlag,
|
|
950
954
|
metadataExportOutputFlag
|
|
951
955
|
],
|
|
952
956
|
risk: "read",
|
|
@@ -958,7 +962,8 @@ var metadataPropertyExport = createAnalysisMetaCapabilityCommand({
|
|
|
958
962
|
event_name: optionalString(ctx, "event-name"),
|
|
959
963
|
queries: optionalQueries(ctx),
|
|
960
964
|
fields: optionalJson(ctx, "fields"),
|
|
961
|
-
authenticated_only: optionalBoolean(ctx, "authenticated-only")
|
|
965
|
+
authenticated_only: optionalBoolean(ctx, "authenticated-only"),
|
|
966
|
+
certification_scope: certificationScopeInput(ctx)
|
|
962
967
|
}),
|
|
963
968
|
postProcess: metadataExportPostProcess("property", "properties")
|
|
964
969
|
});
|
|
@@ -1350,6 +1355,7 @@ var metadataMetricExport = createAnalysisMetaCapabilityCommand({
|
|
|
1350
1355
|
queriesFlag,
|
|
1351
1356
|
fieldsFlag,
|
|
1352
1357
|
{ name: "authenticated-only", type: "boolean", required: false, desc: "When true, export only authenticated metrics." },
|
|
1358
|
+
certificationScopeFlag,
|
|
1353
1359
|
metadataExportOutputFlag
|
|
1354
1360
|
],
|
|
1355
1361
|
risk: "read",
|
|
@@ -1359,7 +1365,8 @@ var metadataMetricExport = createAnalysisMetaCapabilityCommand({
|
|
|
1359
1365
|
ignore_authentication: optionalBoolean(ctx, "ignore-authentication"),
|
|
1360
1366
|
queries: optionalQueries(ctx),
|
|
1361
1367
|
fields: optionalJson(ctx, "fields"),
|
|
1362
|
-
authenticated_only: optionalBoolean(ctx, "authenticated-only")
|
|
1368
|
+
authenticated_only: optionalBoolean(ctx, "authenticated-only"),
|
|
1369
|
+
certification_scope: certificationScopeInput(ctx)
|
|
1363
1370
|
}),
|
|
1364
1371
|
postProcess: metadataExportPostProcess("metric", "metrics")
|
|
1365
1372
|
});
|
|
@@ -1500,13 +1507,13 @@ var ownTypesFlag = {
|
|
|
1500
1507
|
var requiredQueriesFlag = {
|
|
1501
1508
|
...queriesFlag,
|
|
1502
1509
|
required: true,
|
|
1503
|
-
desc: "Required JSON array of 1 to 20 keyword filters. For first-pass asset discovery, use one broad search without --asset-types
|
|
1510
|
+
desc: "Required JSON array of 1 to 20 keyword filters. For first-pass asset discovery, use one broad search without --asset-types and request a large page; when has_more is true and no strong candidate is present, continue with next_offset before narrowing or rewriting keywords."
|
|
1504
1511
|
};
|
|
1505
1512
|
var analysisAssetSearch = createAnalysisCapabilityCommand({
|
|
1506
1513
|
resource: "asset",
|
|
1507
1514
|
command: "search",
|
|
1508
1515
|
capabilityId: "analysis.asset.search",
|
|
1509
|
-
description: "Search
|
|
1516
|
+
description: "Search readable saved analysis assets by keyword, including shared read-only and editable dashboards and reports. Results are ranked before pagination by match quality, certification, recent heat/users, and governance impact. Omit --asset-types for first-pass discovery.",
|
|
1510
1517
|
flags: [
|
|
1511
1518
|
projectIdFlag,
|
|
1512
1519
|
requiredQueriesFlag,
|
|
@@ -1635,7 +1642,16 @@ var statusFlag = { name: "status", type: "json", required: false, desc: "Operati
|
|
|
1635
1642
|
var sortFieldFlag = { name: "sort-field", type: "string", required: false, desc: "Sort field." };
|
|
1636
1643
|
var sortOrderFlag = { name: "sort-order", type: "string", required: false, desc: "Sort order: asc or desc." };
|
|
1637
1644
|
var recordIdFlag = { name: "record-id", type: "number", required: false, desc: "Operation record ID." };
|
|
1645
|
+
var governanceExportFlags = (format) => [
|
|
1646
|
+
requestIdFlag,
|
|
1647
|
+
{ ...artifactFormatFlag, desc: `Artifact format: ${format}. This capability supports only ${format}.` },
|
|
1648
|
+
{ ...asyncTimeoutSecondsFlag, max: 7200, desc: "Async export runtime in seconds. Default: 3600, max: 7200." }
|
|
1649
|
+
];
|
|
1650
|
+
var governanceExportFields = ["request_id", "format", "timeout_seconds"];
|
|
1638
1651
|
var readers = {
|
|
1652
|
+
request_id: (ctx) => optionalString(ctx, "request-id"),
|
|
1653
|
+
format: (ctx) => optionalString(ctx, "artifact-format"),
|
|
1654
|
+
timeout_seconds: (ctx) => optionalNumber(ctx, "timeout-seconds"),
|
|
1639
1655
|
node_id: (ctx) => optionalString(ctx, "node-id"),
|
|
1640
1656
|
resource_id: (ctx) => optionalString(ctx, "resource-id"),
|
|
1641
1657
|
resource_type: (ctx) => optionalString(ctx, "resource-type"),
|
|
@@ -2238,6 +2254,715 @@ var metadataGovernanceRecommendationSubmit = createAnalysisMetaCapabilityCommand
|
|
|
2238
2254
|
})
|
|
2239
2255
|
});
|
|
2240
2256
|
|
|
2257
|
+
// src/commands/te-analysis/meta/governance-recommendation/auto-review.ts
|
|
2258
|
+
import { randomUUID } from "crypto";
|
|
2259
|
+
var windowDaysFlag3 = {
|
|
2260
|
+
name: "window-days",
|
|
2261
|
+
type: "number",
|
|
2262
|
+
required: false,
|
|
2263
|
+
min: 1,
|
|
2264
|
+
max: 365,
|
|
2265
|
+
desc: "Usage window in days for the recommendation batch. Default: 90."
|
|
2266
|
+
};
|
|
2267
|
+
var limitFlag4 = {
|
|
2268
|
+
name: "limit",
|
|
2269
|
+
type: "number",
|
|
2270
|
+
required: false,
|
|
2271
|
+
min: 1,
|
|
2272
|
+
max: 100,
|
|
2273
|
+
desc: "Maximum hot dashboard evidence packages selected before automatic asset review. Omit for CLI bounded expansion over top-20/top-50/top-100; pass explicitly for a fixed diagnostic scope."
|
|
2274
|
+
};
|
|
2275
|
+
var GOVERNANCE_RECOMMENDATION_AUTO_REVIEW_HELP = [
|
|
2276
|
+
"Automatic asset certification contract:",
|
|
2277
|
+
"- Use this command only when the user explicitly asks to automatically review or automatically certify recommended assets.",
|
|
2278
|
+
"- Do not call this command for a plain recommendation request.",
|
|
2279
|
+
"- Do not call this command when the user asks to submit recommendations to the review page.",
|
|
2280
|
+
"- The command first validates project config agent_auto_asset_certification_enabled and project_semantic_enable. If disabled, report the returned config error and stop before collecting recommendations.",
|
|
2281
|
+
"- When --limit is omitted, the CLI performs the same bounded expansion used by recurring page-review jobs: inspect top-20 pending material, then top-50/top-100 only when pending assets or pending dashboard branches are insufficient.",
|
|
2282
|
+
"- Expansion is read-only. The CLI Agent builds automatic decisions once from the final selected material, then submits those decisions for execution and audit.",
|
|
2283
|
+
"- When --limit is explicitly provided, respect that scope and do not expand it.",
|
|
2284
|
+
"- Automatic review only certifies eligible asset candidates from the current recommendation batch. It does not create recommended metrics.",
|
|
2285
|
+
"- CLI Agent blocks semantic duplicates, copy-like assets, synonym properties and ambiguous close definitions; every duplicate skip must name the conflicting asset targets.",
|
|
2286
|
+
"- The result includes manual_review_handoff for assets still uncertified after automatic review. Use it only when the user later asks to submit those assets to the review page.",
|
|
2287
|
+
"- For that later page submission, build the review packet from manual_review_handoff.page_review_items and relations so skipped assets keep their dashboard/report parent context; manual_review_handoff.items remains the exact unapproved review workload.",
|
|
2288
|
+
"- Automatic decisions are recorded for audit. Page-visible reasons must be reviewer-readable Chinese; keep raw source/rule codes only in debug exports.",
|
|
2289
|
+
"- Returned SKIP decisions mean the asset remains for manual review; do not describe skipped items as certified."
|
|
2290
|
+
].join("\n");
|
|
2291
|
+
var AUTO_REVIEW_CAPABILITY_ID = "metadata.governance_recommendation.auto_review";
|
|
2292
|
+
var EXPORT_CAPABILITY_ID = "metadata.governance_recommendation.export";
|
|
2293
|
+
var SUBMIT_CAPABILITY_ID = "metadata.governance_recommendation.submit";
|
|
2294
|
+
var DEFAULT_LIMIT = 20;
|
|
2295
|
+
var EXPANSION_LIMITS = [20, 50, 100];
|
|
2296
|
+
var MIN_PENDING_ASSETS = 10;
|
|
2297
|
+
var MIN_PENDING_WORK_UNITS = 3;
|
|
2298
|
+
var AUTO_REVIEW_DECISION_LIMIT = 100;
|
|
2299
|
+
var AUTO_REVIEW_MIN_HEAT = 50;
|
|
2300
|
+
var AUTO_REVIEW_MIN_USERS = 5;
|
|
2301
|
+
var AUTO_REVIEW_MIN_IMPACT = 2;
|
|
2302
|
+
var metadataGovernanceRecommendationAutoReview = {
|
|
2303
|
+
service: "analysis-meta",
|
|
2304
|
+
resource: "governance-recommendation",
|
|
2305
|
+
command: "auto-review",
|
|
2306
|
+
capabilityId: AUTO_REVIEW_CAPABILITY_ID,
|
|
2307
|
+
description: "Automatically review and certify eligible recommended assets when the project switch is enabled.",
|
|
2308
|
+
helpText: GOVERNANCE_RECOMMENDATION_AUTO_REVIEW_HELP,
|
|
2309
|
+
flags: [projectIdFlag, windowDaysFlag3, limitFlag4],
|
|
2310
|
+
risk: "write",
|
|
2311
|
+
preflight: (ctx) => {
|
|
2312
|
+
autoReviewInput(ctx);
|
|
2313
|
+
},
|
|
2314
|
+
validateInput: async (ctx) => validateCapability(
|
|
2315
|
+
ctx.host(),
|
|
2316
|
+
gatewayDomain(),
|
|
2317
|
+
AUTO_REVIEW_CAPABILITY_ID,
|
|
2318
|
+
autoReviewInput(ctx)
|
|
2319
|
+
),
|
|
2320
|
+
dryRun: async (ctx) => dryRunCapability(
|
|
2321
|
+
ctx.host(),
|
|
2322
|
+
gatewayDomain(),
|
|
2323
|
+
AUTO_REVIEW_CAPABILITY_ID,
|
|
2324
|
+
autoReviewInput(ctx)
|
|
2325
|
+
),
|
|
2326
|
+
execute: async (ctx) => {
|
|
2327
|
+
const input = autoReviewInput(ctx);
|
|
2328
|
+
if (hasExplicitLimit(ctx)) {
|
|
2329
|
+
await validateCapabilityWithEnvelope(ctx.host(), gatewayDomain(), AUTO_REVIEW_CAPABILITY_ID, input);
|
|
2330
|
+
const finalExport = await exportRecommendationMaterial(ctx, input, numberValue(input.limit) || DEFAULT_LIMIT);
|
|
2331
|
+
const result2 = await executeCliAgentAutoReview(ctx, input, finalExport.data);
|
|
2332
|
+
return withOutputMetadata({
|
|
2333
|
+
...record(result2.data),
|
|
2334
|
+
manual_review_handoff: buildManualReviewHandoff(result2.data, finalExport.data)
|
|
2335
|
+
}, result2.meta);
|
|
2336
|
+
}
|
|
2337
|
+
const plan = await planBoundedExpansion(ctx, input);
|
|
2338
|
+
const expansion = plan.expansion;
|
|
2339
|
+
const finalInput = { ...input, limit: expansion.final_limit };
|
|
2340
|
+
const result = await executeCliAgentAutoReview(ctx, finalInput, plan.finalExport);
|
|
2341
|
+
if (result.data && typeof result.data === "object" && !Array.isArray(result.data)) {
|
|
2342
|
+
return withOutputMetadata({
|
|
2343
|
+
...result.data,
|
|
2344
|
+
auto_review_expansion: expansion,
|
|
2345
|
+
manual_review_handoff: buildManualReviewHandoff(result.data, plan.finalExport)
|
|
2346
|
+
}, result.meta);
|
|
2347
|
+
}
|
|
2348
|
+
return withOutputMetadata(result.data, result.meta);
|
|
2349
|
+
}
|
|
2350
|
+
};
|
|
2351
|
+
function autoReviewInput(ctx) {
|
|
2352
|
+
return compactInput({
|
|
2353
|
+
...projectInput(ctx),
|
|
2354
|
+
window_days: optionalNumber(ctx, "window-days"),
|
|
2355
|
+
limit: optionalNumber(ctx, "limit")
|
|
2356
|
+
});
|
|
2357
|
+
}
|
|
2358
|
+
function gatewayDomain() {
|
|
2359
|
+
return resolveGatewayDomain("analysis-meta", "analysis");
|
|
2360
|
+
}
|
|
2361
|
+
function hasExplicitLimit(ctx) {
|
|
2362
|
+
return typeof ctx.has === "function" ? ctx.has("limit") : ctx.str("limit") !== "";
|
|
2363
|
+
}
|
|
2364
|
+
async function executeCliAgentAutoReview(ctx, input, exportResult) {
|
|
2365
|
+
const review = buildCliAgentAutoReview(input, exportResult);
|
|
2366
|
+
if (review.decisions.length === 0) {
|
|
2367
|
+
return {
|
|
2368
|
+
data: {
|
|
2369
|
+
...review.base,
|
|
2370
|
+
total: 0,
|
|
2371
|
+
applied: 0,
|
|
2372
|
+
recorded: 0,
|
|
2373
|
+
failed: 0,
|
|
2374
|
+
items: []
|
|
2375
|
+
},
|
|
2376
|
+
meta: {}
|
|
2377
|
+
};
|
|
2378
|
+
}
|
|
2379
|
+
const submitted = await executeCapabilityWithEnvelope(ctx.host(), gatewayDomain(), SUBMIT_CAPABILITY_ID, {
|
|
2380
|
+
...input,
|
|
2381
|
+
run_id: review.runId,
|
|
2382
|
+
snapshot_hash: review.snapshotHash,
|
|
2383
|
+
topic_id: "agent_auto_asset_certification",
|
|
2384
|
+
topic_name: "Agent \u81EA\u52A8\u8BA4\u8BC1\u8D44\u4EA7",
|
|
2385
|
+
decisions: review.decisions
|
|
2386
|
+
});
|
|
2387
|
+
const submittedData = record(submitted.data);
|
|
2388
|
+
return {
|
|
2389
|
+
data: {
|
|
2390
|
+
...review.base,
|
|
2391
|
+
total: submittedData.total,
|
|
2392
|
+
applied: submittedData.applied,
|
|
2393
|
+
recorded: submittedData.recorded,
|
|
2394
|
+
failed: submittedData.failed,
|
|
2395
|
+
items: autoReviewItemsWithDisplayReason(submittedData.items)
|
|
2396
|
+
},
|
|
2397
|
+
meta: submitted.meta
|
|
2398
|
+
};
|
|
2399
|
+
}
|
|
2400
|
+
async function planBoundedExpansion(ctx, input) {
|
|
2401
|
+
await validateCapabilityWithEnvelope(ctx.host(), gatewayDomain(), AUTO_REVIEW_CAPABILITY_ID, {
|
|
2402
|
+
...input,
|
|
2403
|
+
limit: DEFAULT_LIMIT
|
|
2404
|
+
});
|
|
2405
|
+
const attempts = [];
|
|
2406
|
+
let finalExport = {};
|
|
2407
|
+
let finalLimit = DEFAULT_LIMIT;
|
|
2408
|
+
let stopReason = "top_100_inspected";
|
|
2409
|
+
for (const limit of EXPANSION_LIMITS) {
|
|
2410
|
+
const exported = await exportRecommendationMaterial(ctx, input, limit);
|
|
2411
|
+
finalExport = exported.data;
|
|
2412
|
+
const summary = summarizeExport(exported.data, limit);
|
|
2413
|
+
attempts.push(summary);
|
|
2414
|
+
finalLimit = limit;
|
|
2415
|
+
const pendingAssets = numberValue(summary.pending_asset_candidates);
|
|
2416
|
+
const pendingWorkUnits = numberValue(summary.pending_work_units);
|
|
2417
|
+
const hasMore = summary.has_more === true;
|
|
2418
|
+
if (pendingAssets >= MIN_PENDING_ASSETS && pendingWorkUnits >= MIN_PENDING_WORK_UNITS) {
|
|
2419
|
+
stopReason = "sufficient_pending_scope";
|
|
2420
|
+
break;
|
|
2421
|
+
}
|
|
2422
|
+
if (!hasMore) {
|
|
2423
|
+
stopReason = "dashboard_pool_exhausted";
|
|
2424
|
+
break;
|
|
2425
|
+
}
|
|
2426
|
+
}
|
|
2427
|
+
return {
|
|
2428
|
+
expansion: {
|
|
2429
|
+
strategy: "bounded_hot_dashboard_expansion",
|
|
2430
|
+
initial_limit: DEFAULT_LIMIT,
|
|
2431
|
+
final_limit: finalLimit,
|
|
2432
|
+
inspected_limits: attempts.map((attempt) => attempt.dashboard_limit),
|
|
2433
|
+
min_pending_asset_candidates: MIN_PENDING_ASSETS,
|
|
2434
|
+
min_pending_work_units: MIN_PENDING_WORK_UNITS,
|
|
2435
|
+
attempts,
|
|
2436
|
+
stop_reason: stopReason,
|
|
2437
|
+
write_policy: "single_auto_review_execute_after_read_only_expansion"
|
|
2438
|
+
},
|
|
2439
|
+
finalExport
|
|
2440
|
+
};
|
|
2441
|
+
}
|
|
2442
|
+
function exportRecommendationMaterial(ctx, input, limit) {
|
|
2443
|
+
return executeCapabilityWithEnvelope(
|
|
2444
|
+
ctx.host(),
|
|
2445
|
+
gatewayDomain(),
|
|
2446
|
+
EXPORT_CAPABILITY_ID,
|
|
2447
|
+
compactInput({ ...input, limit, include_completed: false })
|
|
2448
|
+
);
|
|
2449
|
+
}
|
|
2450
|
+
function summarizeExport(result, requestedLimit) {
|
|
2451
|
+
const data = record(result);
|
|
2452
|
+
const workUnits = array(data.work_units);
|
|
2453
|
+
const coverage = record(data.coverage);
|
|
2454
|
+
const pendingAssetCandidates = countPendingAssetCandidates(workUnits);
|
|
2455
|
+
return {
|
|
2456
|
+
dashboard_limit: numberValue(data.dashboard_limit) || requestedLimit,
|
|
2457
|
+
run_id: stringValue(data.run_id),
|
|
2458
|
+
snapshot_hash: stringValue(data.snapshot_hash),
|
|
2459
|
+
selected_dashboards: numberValue(coverage.selected_dashboards),
|
|
2460
|
+
returned_work_units: workUnits.length,
|
|
2461
|
+
pending_work_units: workUnits.filter((unit) => numberValue(record(unit).actionable_count) > 0).length,
|
|
2462
|
+
pending_asset_candidates: pendingAssetCandidates,
|
|
2463
|
+
has_more: coverage.has_more === true
|
|
2464
|
+
};
|
|
2465
|
+
}
|
|
2466
|
+
function countPendingAssetCandidates(workUnits) {
|
|
2467
|
+
const seen = /* @__PURE__ */ new Set();
|
|
2468
|
+
for (const unit of workUnits) {
|
|
2469
|
+
for (const candidate of array(record(unit).asset_candidates)) {
|
|
2470
|
+
const item = record(candidate);
|
|
2471
|
+
if (item.actionable !== true || item.action_state !== "PENDING") {
|
|
2472
|
+
continue;
|
|
2473
|
+
}
|
|
2474
|
+
const type = stringValue(item.resource_type);
|
|
2475
|
+
const key = stringValue(item.resource_key);
|
|
2476
|
+
if (type && key) {
|
|
2477
|
+
seen.add(`${type}|${key}`);
|
|
2478
|
+
}
|
|
2479
|
+
}
|
|
2480
|
+
}
|
|
2481
|
+
return seen.size;
|
|
2482
|
+
}
|
|
2483
|
+
function buildCliAgentAutoReview(input, exportResult) {
|
|
2484
|
+
const exported = record(exportResult);
|
|
2485
|
+
const material = record(exported.review_material_package);
|
|
2486
|
+
const candidates = array(material.candidate_assets).map(record);
|
|
2487
|
+
const runId = `rec_auto_${randomUUID().replace(/-/g, "")}`;
|
|
2488
|
+
const snapshotHash = stringValue(exported.snapshot_hash);
|
|
2489
|
+
const semanticConflicts = semanticDuplicateConflicts(candidates);
|
|
2490
|
+
const decisions = [];
|
|
2491
|
+
let approved = 0;
|
|
2492
|
+
let skipped = 0;
|
|
2493
|
+
let overflow = 0;
|
|
2494
|
+
const seen = /* @__PURE__ */ new Set();
|
|
2495
|
+
for (const candidate of candidates) {
|
|
2496
|
+
const target = record(candidate.target_ref);
|
|
2497
|
+
const type = stringValue(target.type);
|
|
2498
|
+
const key = stringValue(target.key);
|
|
2499
|
+
if (!type || !key || !seen.add(`${type}|${key}`)) continue;
|
|
2500
|
+
if (candidate.actionable !== true || candidate.action_state !== "PENDING") continue;
|
|
2501
|
+
if (decisions.length >= AUTO_REVIEW_DECISION_LIMIT) {
|
|
2502
|
+
overflow++;
|
|
2503
|
+
continue;
|
|
2504
|
+
}
|
|
2505
|
+
const verdict = cliAgentAutoReviewVerdict(candidate, semanticConflicts.get(`${type}|${key}`));
|
|
2506
|
+
if (verdict.decision === "APPROVE") approved++;
|
|
2507
|
+
else skipped++;
|
|
2508
|
+
decisions.push({
|
|
2509
|
+
item_type: "asset",
|
|
2510
|
+
decision: verdict.decision,
|
|
2511
|
+
resource_type: type,
|
|
2512
|
+
resource_key: key,
|
|
2513
|
+
evidence_hash: candidate.evidence_hash,
|
|
2514
|
+
reason: verdict.reason
|
|
2515
|
+
});
|
|
2516
|
+
}
|
|
2517
|
+
return {
|
|
2518
|
+
runId,
|
|
2519
|
+
snapshotHash,
|
|
2520
|
+
decisions,
|
|
2521
|
+
base: {
|
|
2522
|
+
schema_version: "1.0",
|
|
2523
|
+
run_id: runId,
|
|
2524
|
+
project_id: input.project_id ?? exported.project_id,
|
|
2525
|
+
window_days: input.window_days ?? exported.window_days,
|
|
2526
|
+
dashboard_limit: input.limit ?? exported.dashboard_limit,
|
|
2527
|
+
snapshot_hash: snapshotHash,
|
|
2528
|
+
rule_version: "agent_auto_asset_certification_v1",
|
|
2529
|
+
config_key: "agent_auto_asset_certification_enabled",
|
|
2530
|
+
semantic_config_key: "project_semantic_enable",
|
|
2531
|
+
auto_approved: approved,
|
|
2532
|
+
skipped,
|
|
2533
|
+
overflow
|
|
2534
|
+
}
|
|
2535
|
+
};
|
|
2536
|
+
}
|
|
2537
|
+
function cliAgentAutoReviewVerdict(candidate, semanticConflict) {
|
|
2538
|
+
if (semanticConflict) {
|
|
2539
|
+
return {
|
|
2540
|
+
decision: "SKIP",
|
|
2541
|
+
reason: autoReviewReason(`semantic_duplicate_targets=${encodeReasonPayload(semanticConflict)}`)
|
|
2542
|
+
};
|
|
2543
|
+
}
|
|
2544
|
+
if (listIncludes(candidate.conflict_risks, "same_evidence_rejected_before")) {
|
|
2545
|
+
return {
|
|
2546
|
+
decision: "SKIP",
|
|
2547
|
+
reason: autoReviewReason("same_evidence_rejected_before")
|
|
2548
|
+
};
|
|
2549
|
+
}
|
|
2550
|
+
if (array(candidate.source_evidence).length === 0 && candidate.recommendation_role !== "source_dashboard") {
|
|
2551
|
+
return {
|
|
2552
|
+
decision: "SKIP",
|
|
2553
|
+
reason: autoReviewReason("source_evidence_missing")
|
|
2554
|
+
};
|
|
2555
|
+
}
|
|
2556
|
+
const heat = numberValue(candidate.heat_count90d);
|
|
2557
|
+
const users = numberValue(candidate.user_count90d);
|
|
2558
|
+
const impact = numberValue(candidate.impact_degree);
|
|
2559
|
+
const matched = [];
|
|
2560
|
+
if (heat >= AUTO_REVIEW_MIN_HEAT) matched.push(`heat_count90d>=${AUTO_REVIEW_MIN_HEAT}`);
|
|
2561
|
+
if (users >= AUTO_REVIEW_MIN_USERS) matched.push(`user_count90d>=${AUTO_REVIEW_MIN_USERS}`);
|
|
2562
|
+
if (impact > AUTO_REVIEW_MIN_IMPACT) matched.push(`impact_degree>${AUTO_REVIEW_MIN_IMPACT}.0`);
|
|
2563
|
+
if (matched.length === 0) {
|
|
2564
|
+
return {
|
|
2565
|
+
decision: "SKIP",
|
|
2566
|
+
reason: autoReviewReason(`signals_below_threshold: heat_count90d=${heat}, user_count90d=${users}, impact_degree=${impact}`)
|
|
2567
|
+
};
|
|
2568
|
+
}
|
|
2569
|
+
return {
|
|
2570
|
+
decision: "APPROVE",
|
|
2571
|
+
reason: autoReviewReason(`matched=${matched.join(",")}; role=${stringValue(candidate.recommendation_role) ?? "asset"}`)
|
|
2572
|
+
};
|
|
2573
|
+
}
|
|
2574
|
+
function autoReviewReason(reason) {
|
|
2575
|
+
return `source=AGENT_AUTO_REVIEW; rule_version=agent_auto_asset_certification_v1; ${reason}`;
|
|
2576
|
+
}
|
|
2577
|
+
function autoReviewItemsWithDisplayReason(items) {
|
|
2578
|
+
return array(items).map((value) => {
|
|
2579
|
+
const item = record(value);
|
|
2580
|
+
const copy = {
|
|
2581
|
+
...item,
|
|
2582
|
+
semantic_duplicate_targets: semanticDuplicateTargetsFromReason(stringValue(item.reason) ?? "")
|
|
2583
|
+
};
|
|
2584
|
+
if (item.decision !== "APPROVE") {
|
|
2585
|
+
copy.display_reason = autoReviewDisplayReason(item);
|
|
2586
|
+
}
|
|
2587
|
+
return copy;
|
|
2588
|
+
});
|
|
2589
|
+
}
|
|
2590
|
+
function semanticDuplicateConflicts(candidates) {
|
|
2591
|
+
const result = /* @__PURE__ */ new Map();
|
|
2592
|
+
const comparable = candidates.map((candidate) => comparableAsset(candidate)).filter((candidate) => !!candidate);
|
|
2593
|
+
for (const candidate of comparable) {
|
|
2594
|
+
if (candidate.actionable !== true || candidate.actionState !== "PENDING") continue;
|
|
2595
|
+
const matches = [];
|
|
2596
|
+
for (const other of comparable) {
|
|
2597
|
+
if (candidate.assetKey === other.assetKey) continue;
|
|
2598
|
+
const basis = semanticDuplicateBasis(candidate, other);
|
|
2599
|
+
if (basis) matches.push({ asset: other, basis });
|
|
2600
|
+
}
|
|
2601
|
+
if (!matches.length) continue;
|
|
2602
|
+
matches.sort((left, right) => duplicateRank(right.asset) - duplicateRank(left.asset));
|
|
2603
|
+
const targets = matches.slice(0, 3).map(({ asset, basis }) => ({
|
|
2604
|
+
target_ref: { type: asset.type, key: asset.key },
|
|
2605
|
+
display_name: asset.displayName,
|
|
2606
|
+
resource_type: asset.type,
|
|
2607
|
+
resource_key: asset.key,
|
|
2608
|
+
authentication_status: asset.authenticationStatus,
|
|
2609
|
+
action_state: asset.actionState,
|
|
2610
|
+
reason: duplicateBasisText(basis)
|
|
2611
|
+
}));
|
|
2612
|
+
result.set(candidate.assetKey, {
|
|
2613
|
+
targets,
|
|
2614
|
+
basis: Array.from(new Set(matches.map((match) => match.basis))).map(duplicateBasisText)
|
|
2615
|
+
});
|
|
2616
|
+
}
|
|
2617
|
+
return result;
|
|
2618
|
+
}
|
|
2619
|
+
function comparableAsset(candidate) {
|
|
2620
|
+
const target = record(candidate.target_ref);
|
|
2621
|
+
const type = stringValue(target.type);
|
|
2622
|
+
const key = stringValue(target.key);
|
|
2623
|
+
if (!type || !key) return void 0;
|
|
2624
|
+
const displayName = stringValue(candidate.display_name) ?? key;
|
|
2625
|
+
const evidence = record(candidate.evidence_snapshot);
|
|
2626
|
+
const evidenceAsset = record(evidence.asset);
|
|
2627
|
+
const description = stringValue(record(candidate.evidence_snapshot).description) ?? stringValue(evidenceAsset.description) ?? stringValue(candidate.description) ?? "";
|
|
2628
|
+
return {
|
|
2629
|
+
assetKey: `${type}|${key}`,
|
|
2630
|
+
type,
|
|
2631
|
+
key,
|
|
2632
|
+
displayName,
|
|
2633
|
+
description,
|
|
2634
|
+
authenticationStatus: numberValue(evidenceAsset.authentication_status ?? candidate.authentication_status),
|
|
2635
|
+
actionState: stringValue(candidate.action_state) ?? "",
|
|
2636
|
+
actionable: candidate.actionable === true,
|
|
2637
|
+
normalizedName: normalizeSemanticText(displayName || key),
|
|
2638
|
+
canonicalName: canonicalDuplicateText(displayName || key),
|
|
2639
|
+
aliasName: aliasDuplicateText(displayName || key),
|
|
2640
|
+
normalizedDescription: normalizeSemanticText(description),
|
|
2641
|
+
heat: numberValue(candidate.heat_count90d),
|
|
2642
|
+
users: numberValue(candidate.user_count90d),
|
|
2643
|
+
impact: numberValue(candidate.impact_degree)
|
|
2644
|
+
};
|
|
2645
|
+
}
|
|
2646
|
+
function semanticDuplicateBasis(left, right) {
|
|
2647
|
+
if (!left.normalizedName || !right.normalizedName) return void 0;
|
|
2648
|
+
if (left.normalizedName.length >= 3 && left.normalizedName === right.normalizedName) return "same_display_name";
|
|
2649
|
+
if (left.canonicalName.length >= 3 && left.canonicalName === right.canonicalName) return "copy_or_suffix_variant";
|
|
2650
|
+
if (left.aliasName.length >= 3 && left.aliasName === right.aliasName && relatedAssetTypes(left.type, right.type)) {
|
|
2651
|
+
return "business_alias_equivalent";
|
|
2652
|
+
}
|
|
2653
|
+
if (left.normalizedDescription.length >= 6 && left.normalizedDescription === right.normalizedDescription) {
|
|
2654
|
+
return "same_description";
|
|
2655
|
+
}
|
|
2656
|
+
return void 0;
|
|
2657
|
+
}
|
|
2658
|
+
function relatedAssetTypes(left, right) {
|
|
2659
|
+
if (left === right) return true;
|
|
2660
|
+
return left.endsWith("_prop") && right.endsWith("_prop");
|
|
2661
|
+
}
|
|
2662
|
+
function duplicateRank(asset) {
|
|
2663
|
+
return (asset.authenticationStatus === 1 ? 1e5 : 0) + (asset.actionState === "AUTHENTICATED" ? 5e4 : 0) + asset.heat + asset.users * 10 + asset.impact * 100;
|
|
2664
|
+
}
|
|
2665
|
+
function normalizeSemanticText(value) {
|
|
2666
|
+
return value.toLowerCase().replace(/[\s_\-—–/\\|::,,.。"'`【】\[\]()(){}<>《》]/g, "").trim();
|
|
2667
|
+
}
|
|
2668
|
+
function canonicalDuplicateText(value) {
|
|
2669
|
+
return normalizeSemanticText(value).replace(/(副本|复制|拷贝|备份|copy|backup|bak|test|测试|临时|tmp)+$/g, "").replace(/v\d+$/g, "").replace(/\d+$/g, "");
|
|
2670
|
+
}
|
|
2671
|
+
function aliasDuplicateText(value) {
|
|
2672
|
+
return canonicalDuplicateText(value).replace(/(公司|企业|客户|客戶|client|customer|company|account)/g, "\u5BA2\u6237").replace(/(项目|工程|project)/g, "\u9879\u76EE").replace(/(用户|玩家|会员|user|player|member)/g, "\u7528\u6237");
|
|
2673
|
+
}
|
|
2674
|
+
function duplicateBasisText(value) {
|
|
2675
|
+
switch (value) {
|
|
2676
|
+
case "same_display_name":
|
|
2677
|
+
return "\u8D44\u4EA7\u540D\u79F0\u4E00\u81F4";
|
|
2678
|
+
case "copy_or_suffix_variant":
|
|
2679
|
+
return "\u540D\u79F0\u4EC5\u5B58\u5728\u526F\u672C\u3001\u7248\u672C\u6216\u4E34\u65F6\u540E\u7F00\u5DEE\u5F02";
|
|
2680
|
+
case "business_alias_equivalent":
|
|
2681
|
+
return "\u4E1A\u52A1\u5BF9\u8C61\u8868\u8FF0\u76F8\u8FD1\uFF0C\u53EF\u80FD\u662F\u540C\u4E49\u5C5E\u6027\u6216\u76F8\u8FD1\u53E3\u5F84";
|
|
2682
|
+
case "same_description":
|
|
2683
|
+
return "\u8D44\u4EA7\u63CF\u8FF0\u4E00\u81F4";
|
|
2684
|
+
default:
|
|
2685
|
+
return value;
|
|
2686
|
+
}
|
|
2687
|
+
}
|
|
2688
|
+
function encodeReasonPayload(value) {
|
|
2689
|
+
return Buffer.from(JSON.stringify(value), "utf8").toString("base64url");
|
|
2690
|
+
}
|
|
2691
|
+
function decodeReasonPayload(value) {
|
|
2692
|
+
try {
|
|
2693
|
+
return record(JSON.parse(Buffer.from(value, "base64url").toString("utf8")));
|
|
2694
|
+
} catch {
|
|
2695
|
+
return {};
|
|
2696
|
+
}
|
|
2697
|
+
}
|
|
2698
|
+
function semanticDuplicateTargetsFromReason(reason) {
|
|
2699
|
+
const encoded = /semantic_duplicate_targets=([A-Za-z0-9_-]+)/.exec(reason)?.[1];
|
|
2700
|
+
if (!encoded) return [];
|
|
2701
|
+
return array(decodeReasonPayload(encoded).targets);
|
|
2702
|
+
}
|
|
2703
|
+
function listIncludes(value, expected) {
|
|
2704
|
+
return array(value).some((item) => item === expected);
|
|
2705
|
+
}
|
|
2706
|
+
function buildManualReviewHandoff(autoReviewResult, exportResult) {
|
|
2707
|
+
const result = record(autoReviewResult);
|
|
2708
|
+
const exported = record(exportResult);
|
|
2709
|
+
const material = record(exported.review_material_package);
|
|
2710
|
+
const decisions = decisionsByAsset(result.items);
|
|
2711
|
+
const candidates = array(material.candidate_assets);
|
|
2712
|
+
const relations = array(material.relations).map(record);
|
|
2713
|
+
const handoffItems = [];
|
|
2714
|
+
const approved = /* @__PURE__ */ new Set();
|
|
2715
|
+
for (const decision of decisions.values()) {
|
|
2716
|
+
if (decision.decision === "APPROVE" && decision.landing_status === "APPLIED") {
|
|
2717
|
+
approved.add(decision.assetKey);
|
|
2718
|
+
}
|
|
2719
|
+
}
|
|
2720
|
+
const autoCertifiedItems = buildAutoCertifiedItems(decisions, candidates);
|
|
2721
|
+
for (const value of candidates) {
|
|
2722
|
+
const candidate = record(value);
|
|
2723
|
+
const target = record(candidate.target_ref);
|
|
2724
|
+
const type = stringValue(target.type);
|
|
2725
|
+
const key = stringValue(target.key);
|
|
2726
|
+
if (!type || !key) {
|
|
2727
|
+
continue;
|
|
2728
|
+
}
|
|
2729
|
+
const assetKey = `${type}|${key}`;
|
|
2730
|
+
if (approved.has(assetKey)) {
|
|
2731
|
+
continue;
|
|
2732
|
+
}
|
|
2733
|
+
const decision = decisions.get(assetKey);
|
|
2734
|
+
const actionable = candidate.actionable === true;
|
|
2735
|
+
if (!decision && !actionable) {
|
|
2736
|
+
continue;
|
|
2737
|
+
}
|
|
2738
|
+
const reviewReason = decision ? manualReviewReason(decision, candidate) : "\u672C\u6B21\u81EA\u52A8\u8BA4\u8BC1\u672A\u4EA7\u751F\u660E\u786E\u7ED3\u8BBA\uFF0C\u53EF\u80FD\u662F\u5019\u9009\u8D44\u4EA7\u8D85\u51FA\u672C\u6B21\u81EA\u52A8\u8BA4\u8BC1\u5904\u7406\u4E0A\u9650\u6216\u88AB\u53BB\u91CD\uFF0C\u8BF7\u4EBA\u5DE5\u786E\u8BA4\u3002";
|
|
2739
|
+
handoffItems.push({
|
|
2740
|
+
...candidate,
|
|
2741
|
+
auto_review_decision: decision ? decision.raw : {
|
|
2742
|
+
decision: "NOT_REVIEWED",
|
|
2743
|
+
reason: reviewReason
|
|
2744
|
+
},
|
|
2745
|
+
semantic_duplicate_targets: decision ? array(decision.raw.semantic_duplicate_targets) : [],
|
|
2746
|
+
manual_review_reason: reviewReason
|
|
2747
|
+
});
|
|
2748
|
+
}
|
|
2749
|
+
const pageReviewItems = buildPageReviewItems(handoffItems, candidates, relations, decisions);
|
|
2750
|
+
const pageReviewIds = new Set(pageReviewItems.map((item) => stringValue(item.client_item_id)).filter(Boolean));
|
|
2751
|
+
return {
|
|
2752
|
+
schema_version: "1.0",
|
|
2753
|
+
handoff_type: "auto_review_uncertified_assets_to_page_review",
|
|
2754
|
+
project_id: result.project_id ?? exported.project_id,
|
|
2755
|
+
source_auto_review_run_id: result.run_id,
|
|
2756
|
+
source_export_run_id: exported.run_id,
|
|
2757
|
+
snapshot_hash: exported.snapshot_hash ?? result.snapshot_hash,
|
|
2758
|
+
dashboard_limit: exported.dashboard_limit ?? result.dashboard_limit,
|
|
2759
|
+
auto_review_trace: {
|
|
2760
|
+
run_id: result.run_id,
|
|
2761
|
+
rule_version: result.rule_version,
|
|
2762
|
+
auto_approved: result.auto_approved,
|
|
2763
|
+
skipped: result.skipped,
|
|
2764
|
+
overflow: result.overflow,
|
|
2765
|
+
approved_items: autoCertifiedItems,
|
|
2766
|
+
skipped_items: handoffItems.map((item) => ({
|
|
2767
|
+
target_ref: record(item.target_ref),
|
|
2768
|
+
display_name: item.display_name,
|
|
2769
|
+
manual_review_reason: item.manual_review_reason
|
|
2770
|
+
}))
|
|
2771
|
+
},
|
|
2772
|
+
auto_certified_items: autoCertifiedItems,
|
|
2773
|
+
candidate_count: handoffItems.length,
|
|
2774
|
+
items: handoffItems,
|
|
2775
|
+
page_review_items: pageReviewItems,
|
|
2776
|
+
page_review_context_count: pageReviewItems.length - handoffItems.length,
|
|
2777
|
+
relations: relations.filter((edge) => pageReviewIds.has(stringValue(edge.parent)) && pageReviewIds.has(stringValue(edge.child))),
|
|
2778
|
+
source_index: array(material.source_index).map(record).filter((source) => pageReviewIds.has(stringValue(source.client_item_id))),
|
|
2779
|
+
quality_gates: array(material.quality_gates),
|
|
2780
|
+
definition_policy: record(material.definition_policy),
|
|
2781
|
+
submit_to_page_policy: {
|
|
2782
|
+
command: "analysis-meta agent-review submit-to-page",
|
|
2783
|
+
scope: "Submit page_review_items so unapproved assets keep dashboard/report parent context; only items without manual_review_context require human certification decisions.",
|
|
2784
|
+
reason_field: "manual_review_reason",
|
|
2785
|
+
source_metadata: "When submitting leftovers, copy manual_review_handoff.auto_review_trace to submit-to-page source_metadata.auto_review_trace so the page audit records show the assets Agent already certified.",
|
|
2786
|
+
requires_user_submission_intent: true
|
|
2787
|
+
}
|
|
2788
|
+
};
|
|
2789
|
+
}
|
|
2790
|
+
function buildPageReviewItems(handoffItems, candidates, relations, decisions) {
|
|
2791
|
+
const byId = /* @__PURE__ */ new Map();
|
|
2792
|
+
const requiredIds = /* @__PURE__ */ new Set();
|
|
2793
|
+
for (const value of candidates) {
|
|
2794
|
+
const candidate = record(value);
|
|
2795
|
+
const id = stringValue(candidate.client_item_id);
|
|
2796
|
+
if (id) byId.set(id, candidate);
|
|
2797
|
+
}
|
|
2798
|
+
for (const item of handoffItems) {
|
|
2799
|
+
const id = stringValue(item.client_item_id);
|
|
2800
|
+
if (id) requiredIds.add(id);
|
|
2801
|
+
}
|
|
2802
|
+
let changed = true;
|
|
2803
|
+
while (changed) {
|
|
2804
|
+
changed = false;
|
|
2805
|
+
for (const edge of relations) {
|
|
2806
|
+
const parent = stringValue(edge.parent);
|
|
2807
|
+
const child = stringValue(edge.child);
|
|
2808
|
+
if (parent && child && requiredIds.has(child) && !requiredIds.has(parent) && byId.has(parent)) {
|
|
2809
|
+
requiredIds.add(parent);
|
|
2810
|
+
changed = true;
|
|
2811
|
+
}
|
|
2812
|
+
}
|
|
2813
|
+
}
|
|
2814
|
+
const handoffById = new Map(handoffItems.map((item) => [stringValue(item.client_item_id), item]).filter((entry) => !!entry[0]));
|
|
2815
|
+
return candidates.map(record).filter((candidate) => {
|
|
2816
|
+
const id = stringValue(candidate.client_item_id);
|
|
2817
|
+
return id !== void 0 && requiredIds.has(id);
|
|
2818
|
+
}).map((candidate) => {
|
|
2819
|
+
const id = stringValue(candidate.client_item_id) ?? "";
|
|
2820
|
+
const handoff = handoffById.get(id);
|
|
2821
|
+
if (handoff) return handoff;
|
|
2822
|
+
const target = record(candidate.target_ref);
|
|
2823
|
+
const type = stringValue(target.type);
|
|
2824
|
+
const key = stringValue(target.key);
|
|
2825
|
+
const decision = type && key ? decisions.get(`${type}|${key}`) : void 0;
|
|
2826
|
+
return markContextCandidate(candidate, decision);
|
|
2827
|
+
});
|
|
2828
|
+
}
|
|
2829
|
+
function markContextCandidate(candidate, decision) {
|
|
2830
|
+
const item = { ...candidate };
|
|
2831
|
+
item.manual_review_context = true;
|
|
2832
|
+
item.manual_review_reason = "\u8BE5\u8D44\u4EA7\u7528\u4E8E\u4FDD\u7559\u81EA\u52A8\u53D1\u73B0\u9875\u9762\u7684\u7236\u5B50\u5C42\u7EA7\u548C\u6765\u6E90\u4E0A\u4E0B\u6587\uFF0C\u4E0D\u4F5C\u4E3A\u672C\u6B21\u4EBA\u5DE5\u5BA1\u6838\u5BF9\u8C61\u3002";
|
|
2833
|
+
if (decision?.decision === "APPROVE" && decision.landing_status === "APPLIED") {
|
|
2834
|
+
item.auto_review_decision = decision.raw;
|
|
2835
|
+
item.auto_review_context_reason = autoReviewDisplayReason(decision.raw, candidate);
|
|
2836
|
+
item.evidence_snapshot = markEvidenceAuthenticated(record(candidate.evidence_snapshot));
|
|
2837
|
+
}
|
|
2838
|
+
return item;
|
|
2839
|
+
}
|
|
2840
|
+
function markEvidenceAuthenticated(evidence) {
|
|
2841
|
+
const snapshot = { ...evidence };
|
|
2842
|
+
const asset = record(snapshot.asset);
|
|
2843
|
+
if (Object.keys(asset).length) {
|
|
2844
|
+
snapshot.asset = { ...asset, authentication_status: 1 };
|
|
2845
|
+
}
|
|
2846
|
+
return snapshot;
|
|
2847
|
+
}
|
|
2848
|
+
function decisionsByAsset(value) {
|
|
2849
|
+
const result = /* @__PURE__ */ new Map();
|
|
2850
|
+
for (const itemValue of array(value)) {
|
|
2851
|
+
const item = record(itemValue);
|
|
2852
|
+
if (item.item_type !== "asset") {
|
|
2853
|
+
continue;
|
|
2854
|
+
}
|
|
2855
|
+
const type = stringValue(item.resource_type);
|
|
2856
|
+
const key = stringValue(item.resource_key);
|
|
2857
|
+
if (!type || !key) {
|
|
2858
|
+
continue;
|
|
2859
|
+
}
|
|
2860
|
+
const assetKey = `${type}|${key}`;
|
|
2861
|
+
result.set(assetKey, {
|
|
2862
|
+
assetKey,
|
|
2863
|
+
decision: stringValue(item.decision) ?? "",
|
|
2864
|
+
landing_status: stringValue(item.landing_status) ?? "",
|
|
2865
|
+
raw: item
|
|
2866
|
+
});
|
|
2867
|
+
}
|
|
2868
|
+
return result;
|
|
2869
|
+
}
|
|
2870
|
+
function buildAutoCertifiedItems(decisions, candidates) {
|
|
2871
|
+
const byAsset = /* @__PURE__ */ new Map();
|
|
2872
|
+
for (const value of candidates) {
|
|
2873
|
+
const candidate = record(value);
|
|
2874
|
+
const target = record(candidate.target_ref);
|
|
2875
|
+
const type = stringValue(target.type);
|
|
2876
|
+
const key = stringValue(target.key);
|
|
2877
|
+
if (type && key) byAsset.set(`${type}|${key}`, candidate);
|
|
2878
|
+
}
|
|
2879
|
+
const items = [];
|
|
2880
|
+
for (const decision of decisions.values()) {
|
|
2881
|
+
if (decision.decision !== "APPROVE" || decision.landing_status !== "APPLIED") continue;
|
|
2882
|
+
const candidate = byAsset.get(decision.assetKey) ?? {};
|
|
2883
|
+
items.push({
|
|
2884
|
+
target_ref: record(candidate.target_ref),
|
|
2885
|
+
display_name: candidate.display_name ?? decision.raw.resource_key,
|
|
2886
|
+
auto_review_reason: autoReviewDisplayReason(decision.raw, candidate),
|
|
2887
|
+
landing_message: decision.raw.landing_message
|
|
2888
|
+
});
|
|
2889
|
+
}
|
|
2890
|
+
return items;
|
|
2891
|
+
}
|
|
2892
|
+
function manualReviewReason(decision, context) {
|
|
2893
|
+
const reason = autoReviewDisplayReason(decision.raw, context);
|
|
2894
|
+
if (decision.decision === "SKIP") {
|
|
2895
|
+
return reason;
|
|
2896
|
+
}
|
|
2897
|
+
if (decision.decision === "APPROVE" && decision.landing_status !== "APPLIED") {
|
|
2898
|
+
const landing = stringValue(decision.raw.landing_message);
|
|
2899
|
+
return landing ? `${reason}; landing_${decision.landing_status.toLowerCase()}: ${landing}` : `${reason}; landing_${decision.landing_status.toLowerCase()}`;
|
|
2900
|
+
}
|
|
2901
|
+
return reason;
|
|
2902
|
+
}
|
|
2903
|
+
function autoReviewDisplayReason(raw, context = {}) {
|
|
2904
|
+
const display = stringValue(raw.display_reason);
|
|
2905
|
+
if (display) return display;
|
|
2906
|
+
const reason = stringValue(raw.reason);
|
|
2907
|
+
if (!reason) return "\u672C\u6B21\u81EA\u52A8\u8BA4\u8BC1\u6CA1\u6709\u8FD4\u56DE\u539F\u56E0\uFF0C\u8BF7\u4EBA\u5DE5\u786E\u8BA4\u3002";
|
|
2908
|
+
return humanizeAutoReviewReason(reason, context);
|
|
2909
|
+
}
|
|
2910
|
+
function humanizeAutoReviewReason(reason, context) {
|
|
2911
|
+
if (reason.includes("semantic_duplicate_targets=")) {
|
|
2912
|
+
const targets = semanticDuplicateTargetsFromReason(reason).map(record).map((target) => {
|
|
2913
|
+
const ref = record(target.target_ref);
|
|
2914
|
+
const label = stringValue(target.display_name) ?? stringValue(target.resource_key) ?? stringValue(ref.key) ?? "\u672A\u77E5\u8D44\u4EA7";
|
|
2915
|
+
const type = stringValue(target.resource_type) ?? stringValue(ref.type) ?? "asset";
|
|
2916
|
+
const key = stringValue(target.resource_key) ?? stringValue(ref.key) ?? "-";
|
|
2917
|
+
const targetReason = stringValue(target.reason);
|
|
2918
|
+
return `${label}\uFF08${type}:${key}${targetReason ? `\uFF0C${targetReason}` : ""}\uFF09`;
|
|
2919
|
+
});
|
|
2920
|
+
const targetText = targets.length ? targets.join("\uFF1B") : "\u76F8\u8FD1\u8D44\u4EA7";
|
|
2921
|
+
return `\u672A\u81EA\u52A8\u8BA4\u8BC1\u539F\u56E0\uFF1A\u7591\u4F3C\u4E0E ${targetText} \u8BED\u4E49\u91CD\u590D\u6216\u53E3\u5F84\u76F8\u8FD1\u3002\u8BF7\u4EBA\u5DE5\u786E\u8BA4\u662F\u5426\u5E94\u4F5C\u4E3A\u72EC\u7ACB\u8D44\u4EA7\u8BA4\u8BC1\uFF1B\u5982\u679C\u53EA\u662F\u526F\u672C\u3001\u540C\u4E49\u5C5E\u6027\u6216\u76F8\u8FD1\u53E3\u5F84\uFF0C\u8BF7\u4F18\u5148\u9009\u62E9\u66F4\u6807\u51C6\u7684\u8D44\u4EA7\u3002`;
|
|
2922
|
+
}
|
|
2923
|
+
if (reason.includes("previous_decision_exists_for_different_evidence")) {
|
|
2924
|
+
return "\u672A\u81EA\u52A8\u8BA4\u8BC1\u539F\u56E0\uFF1A\u68C0\u6D4B\u5230\u8BE5\u8D44\u4EA7\u5B58\u5728\u5386\u53F2\u5904\u7406\u8BB0\u5F55\uFF0C\u4F46\u672C\u6B21\u672A\u8FD4\u56DE\u53EF\u6838\u9A8C\u7684\u91CD\u590D\u5BF9\u8C61\u3002\u8BF7\u6309\u5F53\u524D\u8D44\u4EA7\u5B9A\u4E49\u548C\u6765\u6E90\u8BC1\u636E\u4EBA\u5DE5\u786E\u8BA4\uFF1B\u8FD9\u4E0D\u4EE3\u8868\u7CFB\u7EDF\u53D1\u73B0\u4E86\u91CD\u590D\u8D44\u4EA7\u3002";
|
|
2925
|
+
}
|
|
2926
|
+
if (reason.includes("same_evidence_rejected_before")) {
|
|
2927
|
+
return "\u672A\u81EA\u52A8\u8BA4\u8BC1\u539F\u56E0\uFF1A\u76F8\u540C\u8BA4\u8BC1\u5EFA\u8BAE\u6B64\u524D\u5DF2\u88AB\u4EBA\u5DE5\u9A73\u56DE\uFF0C\u81EA\u52A8\u8BA4\u8BC1\u4E0D\u4F1A\u8986\u76D6\u4EBA\u5DE5\u7ED3\u8BBA\u3002\u5982\u4E1A\u52A1\u53E3\u5F84\u5DF2\u8C03\u6574\uFF0C\u8BF7\u4EBA\u5DE5\u91CD\u65B0\u786E\u8BA4\u662F\u5426\u8BA4\u8BC1\u3002";
|
|
2928
|
+
}
|
|
2929
|
+
if (reason.includes("source_evidence_missing")) {
|
|
2930
|
+
return "\u81EA\u52A8\u8BA4\u8BC1\u672A\u901A\u8FC7\uFF1A\u7F3A\u5C11\u53EF\u6838\u9A8C\u7684\u6765\u6E90\u8D44\u4EA7\u8BC1\u636E\uFF0C\u8BF7\u4EBA\u5DE5\u786E\u8BA4\u8D44\u4EA7\u6765\u6E90\u3001\u5B9A\u4E49\u548C\u4F9D\u8D56\u5173\u7CFB\u540E\u518D\u8BA4\u8BC1\u3002";
|
|
2931
|
+
}
|
|
2932
|
+
if (reason.includes("signals_below_threshold")) {
|
|
2933
|
+
const heat = /heat_count90d=(\d+)/.exec(reason)?.[1];
|
|
2934
|
+
const users = /user_count90d=(\d+)/.exec(reason)?.[1];
|
|
2935
|
+
const impact = /impact_degree=([0-9.]+)/.exec(reason)?.[1];
|
|
2936
|
+
return `\u81EA\u52A8\u8BA4\u8BC1\u672A\u901A\u8FC7\uFF1A\u8BE5\u8D44\u4EA7\u8FD1 90 \u5929\u8BBF\u95EE/\u4F7F\u7528 ${heat ?? "\u672A\u77E5"} \u6B21\u3001\u4F7F\u7528\u4EBA\u6570 ${users ?? "\u672A\u77E5"}\uFF0C\u5F71\u54CD\u5EA6 ${impact ?? "\u672A\u77E5"}\uFF0C\u672A\u8FBE\u5230\u81EA\u52A8\u8BA4\u8BC1\u9608\u503C\uFF0C\u8BF7\u4EBA\u5DE5\u786E\u8BA4\u662F\u5426\u4ECD\u9700\u8981\u8BA4\u8BC1\u3002`;
|
|
2937
|
+
}
|
|
2938
|
+
if (reason.includes("matched=")) {
|
|
2939
|
+
const matched = [];
|
|
2940
|
+
if (reason.includes("heat_count90d>=")) matched.push("\u8BBF\u95EE/\u4F7F\u7528\u6B21\u6570\u8FBE\u5230\u9608\u503C");
|
|
2941
|
+
if (reason.includes("user_count90d>=")) matched.push("\u4F7F\u7528\u4EBA\u6570\u8FBE\u5230\u9608\u503C");
|
|
2942
|
+
if (reason.includes("impact_degree>")) matched.push("\u5F71\u54CD\u5EA6\u8FBE\u5230\u9608\u503C");
|
|
2943
|
+
const matchedText = matched.length ? matched.join("\u3001") : "\u547D\u4E2D\u81EA\u52A8\u8BA4\u8BC1\u89C4\u5219";
|
|
2944
|
+
return `Agent \u81EA\u52A8\u8BA4\u8BC1\u901A\u8FC7\uFF1A\u8BE5\u8D44\u4EA7\u8FD1 90 \u5929\u8BBF\u95EE/\u4F7F\u7528 ${displaySignal(context.heat_count90d)} \u6B21\u3001\u4F7F\u7528\u4EBA\u6570 ${displaySignal(context.user_count90d)}\uFF0C\u5F71\u54CD\u5EA6 ${displaySignal(context.impact_degree)}\uFF1B\u672A\u53D1\u73B0\u8BED\u4E49\u91CD\u590D\u98CE\u9669\uFF0C\u4E14${matchedText}\u3002`;
|
|
2945
|
+
}
|
|
2946
|
+
return reason.replace(/^source=AGENT_AUTO_REVIEW;\s*/, "").replace(/rule_version=[^;]+;\s*/, "").replace(/conflict_risks=\[[^\]]*]/, "\u81EA\u52A8\u8BA4\u8BC1\u672A\u901A\u8FC7\uFF1A\u5B58\u5728\u9700\u8981\u4EBA\u5DE5\u786E\u8BA4\u7684\u5BA1\u6838\u98CE\u9669\u3002").replace(/conflict_risks=/, "\u81EA\u52A8\u8BA4\u8BC1\u672A\u901A\u8FC7\uFF1A\u5B58\u5728\u9700\u8981\u4EBA\u5DE5\u786E\u8BA4\u7684\u5BA1\u6838\u98CE\u9669\u3002");
|
|
2947
|
+
}
|
|
2948
|
+
function displaySignal(value) {
|
|
2949
|
+
if (typeof value === "number" && Number.isFinite(value)) return String(value);
|
|
2950
|
+
if (typeof value === "string" && value.trim()) return value;
|
|
2951
|
+
return "\u672A\u77E5";
|
|
2952
|
+
}
|
|
2953
|
+
function record(value) {
|
|
2954
|
+
return value && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
2955
|
+
}
|
|
2956
|
+
function array(value) {
|
|
2957
|
+
return Array.isArray(value) ? value : [];
|
|
2958
|
+
}
|
|
2959
|
+
function numberValue(value) {
|
|
2960
|
+
return typeof value === "number" && Number.isFinite(value) ? value : 0;
|
|
2961
|
+
}
|
|
2962
|
+
function stringValue(value) {
|
|
2963
|
+
return typeof value === "string" && value.trim() ? value : void 0;
|
|
2964
|
+
}
|
|
2965
|
+
|
|
2241
2966
|
// src/commands/te-analysis/meta/governance-recommendation/decisions.ts
|
|
2242
2967
|
var runIdFlag2 = {
|
|
2243
2968
|
name: "run-id",
|
|
@@ -2245,7 +2970,7 @@ var runIdFlag2 = {
|
|
|
2245
2970
|
required: false,
|
|
2246
2971
|
desc: "Optional run_id filter."
|
|
2247
2972
|
};
|
|
2248
|
-
var
|
|
2973
|
+
var limitFlag5 = {
|
|
2249
2974
|
name: "limit",
|
|
2250
2975
|
type: "number",
|
|
2251
2976
|
required: false,
|
|
@@ -2258,7 +2983,7 @@ var metadataGovernanceRecommendationDecisions = createAnalysisMetaCapabilityComm
|
|
|
2258
2983
|
command: "decisions",
|
|
2259
2984
|
capabilityId: "metadata.governance_recommendation.decisions",
|
|
2260
2985
|
description: "List recent CLI Agent recommendation approval decisions.",
|
|
2261
|
-
flags: [projectIdFlag, runIdFlag2,
|
|
2986
|
+
flags: [projectIdFlag, runIdFlag2, limitFlag5],
|
|
2262
2987
|
risk: "read",
|
|
2263
2988
|
buildInput: (ctx) => compactInput({
|
|
2264
2989
|
...projectInput(ctx),
|
|
@@ -2271,6 +2996,7 @@ var metadataGovernanceRecommendationDecisions = createAnalysisMetaCapabilityComm
|
|
|
2271
2996
|
var commands11 = [
|
|
2272
2997
|
metadataGovernanceRecommendationExport,
|
|
2273
2998
|
metadataGovernanceRecommendationSubmit,
|
|
2999
|
+
metadataGovernanceRecommendationAutoReview,
|
|
2274
3000
|
metadataGovernanceRecommendationDecisions
|
|
2275
3001
|
];
|
|
2276
3002
|
var governance_recommendation_default = commands11;
|
|
@@ -2322,7 +3048,7 @@ function object(value, name) {
|
|
|
2322
3048
|
}
|
|
2323
3049
|
return value;
|
|
2324
3050
|
}
|
|
2325
|
-
function
|
|
3051
|
+
function array2(value, name) {
|
|
2326
3052
|
if (!Array.isArray(value) || value.length < 1 || value.length > 5e3) {
|
|
2327
3053
|
throw new Error(`${name} must contain 1 to 5000 items.`);
|
|
2328
3054
|
}
|
|
@@ -2367,6 +3093,7 @@ var SUBMIT_TO_PAGE_HELP = [
|
|
|
2367
3093
|
"- relations should let the page render dashboard -> report -> metadata with contains/uses edges. Use an empty relations array only when the package truly has no known parent-child evidence.",
|
|
2368
3094
|
"- Each submitted item must keep source_link or evidence_links[].url so reviewers can jump to source evidence.",
|
|
2369
3095
|
"- item.ai_summary.summary is the per-item recommendation reason. It must cite concrete item evidence, not generic review boilerplate. batch ai_summary.summary is only the batch overview.",
|
|
3096
|
+
"- When submitting manual_review_handoff leftovers, copy manual_review_handoff.auto_review_trace into source_metadata.auto_review_trace so page audit records include the assets already certified automatically.",
|
|
2370
3097
|
"- For reports and SQL reports, item.ai_summary.analysis_explanation must explain reviewer-readable calculations or measures from packaged evidence_snapshot.analysis. A purpose-only summary is incomplete and is rejected locally before dispatch.",
|
|
2371
3098
|
"- Reviewer-visible text should follow the project-KB source style: one business Chinese Agent summary that explains purpose, calculation caliber, filters, time scope, boundaries, and concrete reviewer questions. Keep raw SQL, parser labels, temporary aliases, parameter placeholders, hashes, and evidence paths in evidence_snapshot only; independent Agent preflight flags visible implementation terms as quality findings.",
|
|
2372
3099
|
"- The command output includes review_page_url when review_url is present. Return review_page_url to the user; do not prepend the Common/API host to review_url yourself.",
|
|
@@ -2378,6 +3105,7 @@ var SUBMIT_TO_PAGE_HELP = [
|
|
|
2378
3105
|
' "title": "<review batch title>",',
|
|
2379
3106
|
' "source_run_id": "<export.run_id>",',
|
|
2380
3107
|
' "source_task_id": "<optional preauthorized task id>",',
|
|
3108
|
+
' "source_metadata": { "auto_review_trace": "<optional trace from manual_review_handoff.auto_review_trace>" },',
|
|
2381
3109
|
' "ai_summary": { "summary": "<batch overview>" },',
|
|
2382
3110
|
' "presentation_snapshot": {',
|
|
2383
3111
|
' "project": { "id": 1, "name": "<project name>" },',
|
|
@@ -2465,7 +3193,7 @@ var agentReviewSubmitToPage = createAnalysisMetaCapabilityCommand({
|
|
|
2465
3193
|
postProcess: (result, _input, ctx) => normalizeSubmitResult(result, resolvePublicWebHost(ctx.host()), ctx.host())
|
|
2466
3194
|
});
|
|
2467
3195
|
function validateInput(input) {
|
|
2468
|
-
const items =
|
|
3196
|
+
const items = array2(input.items, "items").map((value) => {
|
|
2469
3197
|
const item = object(value, "items[]");
|
|
2470
3198
|
fields(item, [
|
|
2471
3199
|
"client_item_id",
|
|
@@ -2512,6 +3240,7 @@ function validateInput(input) {
|
|
|
2512
3240
|
"title",
|
|
2513
3241
|
"source_run_id",
|
|
2514
3242
|
"source_task_id",
|
|
3243
|
+
"source_metadata",
|
|
2515
3244
|
"ai_summary",
|
|
2516
3245
|
"presentation_snapshot",
|
|
2517
3246
|
"items"
|
|
@@ -2581,7 +3310,7 @@ function validateEvidenceLinks(item) {
|
|
|
2581
3310
|
const sourceLink = typeof item.source_link === "string" && item.source_link.trim();
|
|
2582
3311
|
let evidenceLink = false;
|
|
2583
3312
|
if ("evidence_links" in item) {
|
|
2584
|
-
evidenceLink =
|
|
3313
|
+
evidenceLink = array2(item.evidence_links, "items[].evidence_links").some((value) => {
|
|
2585
3314
|
const link = object(value, "items[].evidence_links[]");
|
|
2586
3315
|
return typeof link.url === "string" && !!link.url.trim();
|
|
2587
3316
|
});
|
|
@@ -2592,17 +3321,17 @@ function validateEvidenceLinks(item) {
|
|
|
2592
3321
|
}
|
|
2593
3322
|
function validatePresentation(presentation, itemIds) {
|
|
2594
3323
|
const displayed = /* @__PURE__ */ new Set();
|
|
2595
|
-
for (const topicValue of
|
|
3324
|
+
for (const topicValue of array2(presentation.topics, "presentation_snapshot.topics")) {
|
|
2596
3325
|
const topic = object(topicValue, "presentation_snapshot.topics[]");
|
|
2597
3326
|
if ("items" in topic) {
|
|
2598
3327
|
throw new Error("presentation_snapshot.topics[] must use groups[].items, not top-level items.");
|
|
2599
3328
|
}
|
|
2600
|
-
for (const groupValue of
|
|
3329
|
+
for (const groupValue of array2(topic.groups, "presentation_snapshot.topics[].groups")) {
|
|
2601
3330
|
const group = object(groupValue, "presentation_snapshot.topics[].groups[]");
|
|
2602
3331
|
if (typeof group.id !== "string" || !group.id.trim() || typeof group.name !== "string" || !group.name.trim()) {
|
|
2603
3332
|
throw new Error("presentation_snapshot.topics[].groups[] requires nonempty string id and name.");
|
|
2604
3333
|
}
|
|
2605
|
-
for (const itemValue of
|
|
3334
|
+
for (const itemValue of array2(group.items, "presentation_snapshot.topics[].groups[].items")) {
|
|
2606
3335
|
const item = object(itemValue, "presentation_snapshot.topics[].groups[].items[]");
|
|
2607
3336
|
if (typeof item.id !== "string" || !item.id.trim()) {
|
|
2608
3337
|
throw new Error("presentation_snapshot display items require nonempty string id.");
|
|
@@ -2649,7 +3378,7 @@ var agentReviewReview = createAnalysisMetaCapabilityCommand({
|
|
|
2649
3378
|
{ name: "decisions", type: "json", required: true, desc: "Versioned decisions: item_id (string), version (integer), decision APPROVE/DEFER/REJECT, reason (required for DEFER/REJECT)." }
|
|
2650
3379
|
],
|
|
2651
3380
|
buildInput: (ctx) => {
|
|
2652
|
-
const decisions =
|
|
3381
|
+
const decisions = array2(ctx.json("decisions"), "--decisions").map((value) => {
|
|
2653
3382
|
const decision = object(value, "decisions[]");
|
|
2654
3383
|
fields(decision, ["item_id", "version", "decision", "reason"], "decisions[]");
|
|
2655
3384
|
decimalId(decision.item_id, "decisions[].item_id");
|
|
@@ -2686,7 +3415,7 @@ var agentReviewRetry = createAnalysisMetaCapabilityCommand({
|
|
|
2686
3415
|
{ name: "item-ids", type: "json", required: true, desc: "1 to 5000 failed item IDs as decimal strings. Successful items must not be retried." }
|
|
2687
3416
|
],
|
|
2688
3417
|
buildInput: (ctx) => {
|
|
2689
|
-
const ids =
|
|
3418
|
+
const ids = array2(ctx.json("item-ids"), "--item-ids").map((id) => decimalId(id, "item_ids[]"));
|
|
2690
3419
|
unique(ids, "item_ids");
|
|
2691
3420
|
return { ...batchInput(ctx), client_request_id: text(ctx, "client-request-id"), item_ids: ids };
|
|
2692
3421
|
}
|
|
@@ -2770,9 +3499,9 @@ var analysisMetaAssetUsageList = createAnalysisGovernanceCapabilityCommand({
|
|
|
2770
3499
|
command: "list",
|
|
2771
3500
|
capabilityId: "governance.asset.list",
|
|
2772
3501
|
description: "List assets for usage governance.",
|
|
2773
|
-
flags: [projectIdFlag, queryFlag, searchsFlag, ruleFlag, operationTypeFlag, directoryLimitFlag, directoryOffsetFlag, payloadFlag],
|
|
3502
|
+
flags: [projectIdFlag, nodeIdFlag, queryFlag, searchsFlag, ruleFlag, operationTypeFlag, directoryLimitFlag, directoryOffsetFlag, payloadFlag],
|
|
2774
3503
|
risk: "read",
|
|
2775
|
-
buildInput: (ctx) => assetGovernanceInput(ctx, ["query", "searchs", "rule", "operation_type", "limit", "offset"])
|
|
3504
|
+
buildInput: (ctx) => assetGovernanceInput(ctx, ["node_id", "query", "searchs", "rule", "operation_type", "limit", "offset"])
|
|
2776
3505
|
});
|
|
2777
3506
|
|
|
2778
3507
|
// src/commands/te-analysis/meta/asset/usage-export.ts
|
|
@@ -2780,10 +3509,11 @@ var analysisMetaAssetUsageExport = createAnalysisGovernanceCapabilityCommand({
|
|
|
2780
3509
|
resource: "asset",
|
|
2781
3510
|
command: "export",
|
|
2782
3511
|
capabilityId: "governance.asset.export",
|
|
2783
|
-
description: "Export asset usage governance rows as an
|
|
2784
|
-
flags: [projectIdFlag, queryFlag, searchsFlag, ruleFlag, operationTypeFlag, limitFlag, offsetFlag, payloadFlag],
|
|
3512
|
+
description: "Export asset usage governance rows as an asynchronous artifact; optionally wait and download.",
|
|
3513
|
+
flags: [projectIdFlag, nodeIdFlag, queryFlag, searchsFlag, ruleFlag, operationTypeFlag, limitFlag, offsetFlag, payloadFlag, ...governanceExportFlags("jsonl")],
|
|
2785
3514
|
risk: "read",
|
|
2786
|
-
|
|
3515
|
+
asyncArtifact: true,
|
|
3516
|
+
buildInput: (ctx) => assetGovernanceInput(ctx, [...governanceExportFields, "node_id", "query", "searchs", "rule", "operation_type", "limit", "offset"])
|
|
2787
3517
|
});
|
|
2788
3518
|
|
|
2789
3519
|
// src/commands/te-analysis/meta/asset/lineage-get.ts
|
|
@@ -2891,9 +3621,10 @@ var analysisMetaAssetBatchInfoExport = createAnalysisGovernanceCapabilityCommand
|
|
|
2891
3621
|
command: "batch-info-export",
|
|
2892
3622
|
capabilityId: "governance.asset.batch_export_info",
|
|
2893
3623
|
description: "Batch export asset information.",
|
|
2894
|
-
flags: [projectIdFlag, nodeIdsFlag, payloadFlag],
|
|
3624
|
+
flags: [projectIdFlag, nodeIdsFlag, payloadFlag, ...governanceExportFlags("xlsx")],
|
|
2895
3625
|
risk: "read",
|
|
2896
|
-
|
|
3626
|
+
asyncArtifact: true,
|
|
3627
|
+
buildInput: (ctx) => assetGovernanceInput(ctx, [...governanceExportFields, "node_ids"])
|
|
2897
3628
|
});
|
|
2898
3629
|
|
|
2899
3630
|
// src/commands/te-analysis/meta/asset/batch-sql-export.ts
|
|
@@ -2902,9 +3633,10 @@ var analysisMetaAssetBatchSqlExport = createAnalysisGovernanceCapabilityCommand(
|
|
|
2902
3633
|
command: "batch-sql-export",
|
|
2903
3634
|
capabilityId: "governance.asset.batch_export_sql",
|
|
2904
3635
|
description: "Batch export asset SQL definitions.",
|
|
2905
|
-
flags: [projectIdFlag, nodeIdsFlag, payloadFlag],
|
|
3636
|
+
flags: [projectIdFlag, nodeIdsFlag, payloadFlag, ...governanceExportFlags("xlsx")],
|
|
2906
3637
|
risk: "read",
|
|
2907
|
-
|
|
3638
|
+
asyncArtifact: true,
|
|
3639
|
+
buildInput: (ctx) => assetGovernanceInput(ctx, [...governanceExportFields, "node_ids"])
|
|
2908
3640
|
});
|
|
2909
3641
|
|
|
2910
3642
|
// src/commands/te-analysis/meta/asset/batch-delete.ts
|
|
@@ -2979,9 +3711,10 @@ var analysisMetaAssetOperationRecordExport = createAnalysisGovernanceCapabilityC
|
|
|
2979
3711
|
command: "export",
|
|
2980
3712
|
capabilityId: "governance.operation_record.export",
|
|
2981
3713
|
description: "Export one asset batch operation record result.",
|
|
2982
|
-
flags: [projectIdFlag, recordIdFlag, payloadFlag],
|
|
3714
|
+
flags: [projectIdFlag, recordIdFlag, payloadFlag, ...governanceExportFlags("xlsx")],
|
|
2983
3715
|
risk: "read",
|
|
2984
|
-
|
|
3716
|
+
asyncArtifact: true,
|
|
3717
|
+
buildInput: (ctx) => assetGovernanceInput(ctx, [...governanceExportFields, "record_id"])
|
|
2985
3718
|
});
|
|
2986
3719
|
|
|
2987
3720
|
// src/commands/te-analysis/governance/asset-authentication-shared.ts
|
|
@@ -3359,7 +4092,7 @@ var reportList = createAnalysisCapabilityCommand({
|
|
|
3359
4092
|
resource: "report",
|
|
3360
4093
|
command: "list",
|
|
3361
4094
|
capabilityId: "analysis.report.list",
|
|
3362
|
-
description: "List analysis reports
|
|
4095
|
+
description: "List analysis reports the current user can edit or manage. Read-only reports are excluded; use analysis asset search for readable asset discovery.",
|
|
3363
4096
|
flags: [
|
|
3364
4097
|
projectIdFlag,
|
|
3365
4098
|
queriesFlag,
|
|
@@ -3428,18 +4161,19 @@ var AI_MODEL_TYPE_VALUES = [
|
|
|
3428
4161
|
"path",
|
|
3429
4162
|
"prop_analysis",
|
|
3430
4163
|
"sql",
|
|
4164
|
+
"session",
|
|
3431
4165
|
"heat_map",
|
|
3432
4166
|
"rank_list",
|
|
3433
4167
|
"revenue"
|
|
3434
4168
|
];
|
|
3435
|
-
var AI_MODEL_DESCRIPTION = "Supported AI-facing model_type values,
|
|
4169
|
+
var AI_MODEL_DESCRIPTION = "Supported AI-facing model_type values, 13 total. 10 common models: event (event analysis), retention (retention analysis), funnel (funnel conversion), distribution (distribution analysis), attribution (attribution analysis), interval (interval analysis), path (path analysis), prop_analysis (property analysis), sql (SQL analysis), session (session analysis). 3 scenario models: heat_map (heat map analysis), rank_list (ranking analysis), revenue (revenue analysis). Tags and cohorts/clusters are separate capabilities and are not ad-hoc model_type values.";
|
|
3436
4170
|
var REPORT_WRITE_MODEL_TYPE_VALUES = [
|
|
3437
4171
|
...AI_MODEL_TYPE_VALUES,
|
|
3438
4172
|
"tag"
|
|
3439
4173
|
];
|
|
3440
4174
|
var REPORT_WRITE_MODEL_DESCRIPTION = `${AI_MODEL_DESCRIPTION} Report create/update also supports tag for saved tag report data; use tag as the AI-facing spelling.`;
|
|
3441
|
-
var AI_DEFINITION_DESCRIPTION = 'Event metrics: omit optional display_name unless the target command schema explicitly supports it. Funnel step filters use event_property_name (not field) and string-array values, including "true"/"false" for boolean properties. For tag/cluster filters, cluster_date_policy accepts LATEST (default), AUTO (match the computed result for each analysis date), or SPECIFIED (requires specified_cluster_date in yyyy-MM-dd format). AI-facing model definition JSON. Do not pass raw QP, events, event_view, visual_view, or analysis_query. Distribution filters must be attached to the corresponding distribution_metrics[].filters; do not use top-level filters or relation. For path definitions, global filters support user_property, cluster, and tag only; event_property is not supported. session_unit accepts second (1..999), minute (1..999), or hour (1..24). Do not use day; express one day as session_interval=24 and session_unit=hour. For SQL, a simple query is {"sql":"select ..."}; raw variables use ${name}, while typed params use ${Text:name}, ${Selector:name}, or ${PartDate:name}. PartDate expands to a complete predicate, so write WHERE ${PartDate:d}, not a column followed by the placeholder. A part_date parameter may set boolean use_timezone; it defaults to false and controls whether that parameter uses the query effective timezone. Selector value must match one options[].value. Trino identifiers containing #, $, @, spaces, punctuation, or a reserved word must be delimited with double quotes, for example SELECT "#user_id", "$part_event", "end" FROM ...; single quotes are string literals. For multiline SQL JSON, the decoded sql value must contain a real line break; do not submit a literal \\n sequence outside quoted SQL text. Queries against an event table must include a date-partition predicate on the quoted "$part_date" column, for example WHERE "$part_date" BETWEEN \'2026-07-01\' AND \'2026-07-07\'; the backend rejects event-table SQL without it. The CLI preserves SQL text and never auto-quotes identifiers.';
|
|
3442
|
-
var REPORT_WRITE_DEFINITION_DESCRIPTION = `${AI_DEFINITION_DESCRIPTION} For model_type=tag, pass a tag report intent such as {"tag":{"tag_name":"vip_users","time_range":{"mode":"recent","unit":"day","value":7}}}. Tags are supported for report create/update and report data, not ad-hoc analysis.`;
|
|
4175
|
+
var AI_DEFINITION_DESCRIPTION = 'Event metrics: omit optional display_name unless the target command schema explicitly supports it. Funnel step filters use event_property_name (not field) and string-array values, including "true"/"false" for boolean properties. For tag/cluster filters, cluster_date_policy accepts LATEST (default), AUTO (match the computed result for each analysis date), or SPECIFIED (requires specified_cluster_date in yyyy-MM-dd format). AI-facing model definition JSON. Do not pass raw QP, events, event_view, visual_view, or analysis_query. Distribution filters must be attached to the corresponding distribution_metrics[].filters; do not use top-level filters or relation. For path definitions, global filters support user_property, cluster, and tag only; event_property is not supported. session_unit accepts second (1..999), minute (1..999), or hour (1..24). Do not use day; express one day as session_interval=24 and session_unit=hour. Session analysis is a different model: it cuts sessions with session_interval plus interval_unit (second and minute 1..999, hour 1..24), required unless cut_mode=session_id, and its metrics must match view_mode. For SQL, a simple query is {"sql":"select ..."}; raw variables use ${name}, while typed params use ${Text:name}, ${Selector:name}, or ${PartDate:name}. PartDate expands to a complete predicate, so write WHERE ${PartDate:d}, not a column followed by the placeholder. A part_date parameter may set boolean use_timezone; it defaults to false and controls whether that parameter uses the query effective timezone. Selector value must match one options[].value. Trino identifiers containing #, $, @, spaces, punctuation, or a reserved word must be delimited with double quotes, for example SELECT "#user_id", "$part_event", "end" FROM ...; single quotes are string literals. For multiline SQL JSON, the decoded sql value must contain a real line break; do not submit a literal \\n sequence outside quoted SQL text. Queries against an event table must include a date-partition predicate on the quoted "$part_date" column, for example WHERE "$part_date" BETWEEN \'2026-07-01\' AND \'2026-07-07\'; the backend rejects event-table SQL without it. The CLI preserves SQL text and never auto-quotes identifiers.';
|
|
4176
|
+
var REPORT_WRITE_DEFINITION_DESCRIPTION = `${AI_DEFINITION_DESCRIPTION} Saved-report filters may contain one compound group level only; every item inside that group must be a leaf without another items array. Historical deeper trees remain readable but cannot be written back as a definition. For model_type=tag, pass a tag report intent such as {"tag":{"tag_name":"vip_users","time_range":{"mode":"recent","unit":"day","value":7}}}. Tags are supported for report create/update and report data, not ad-hoc analysis.`;
|
|
3443
4177
|
function aiModelTypeFlag(required) {
|
|
3444
4178
|
return {
|
|
3445
4179
|
name: "model-type",
|
|
@@ -3453,18 +4187,32 @@ function validateFunnelStepFilters(modelType, definition) {
|
|
|
3453
4187
|
const steps = definition.funnel.steps;
|
|
3454
4188
|
if (!Array.isArray(steps)) return;
|
|
3455
4189
|
const errors = [];
|
|
3456
|
-
|
|
3457
|
-
if (!isRecord(
|
|
3458
|
-
|
|
3459
|
-
|
|
3460
|
-
|
|
3461
|
-
|
|
3462
|
-
|
|
4190
|
+
const visit = (filter, location) => {
|
|
4191
|
+
if (!isRecord(filter)) {
|
|
4192
|
+
errors.push(`${location}: use a filter object.`);
|
|
4193
|
+
return;
|
|
4194
|
+
}
|
|
4195
|
+
if ("items" in filter) {
|
|
4196
|
+
if (Object.keys(filter).some((key) => key !== "items" && key !== "relation")) {
|
|
4197
|
+
errors.push(`${location}: compound groups contain only items and relation; put event_property_name and operator on their leaf items.`);
|
|
3463
4198
|
}
|
|
3464
|
-
if (
|
|
3465
|
-
errors.push(`${location}.
|
|
4199
|
+
if (!Array.isArray(filter.items) || filter.items.length === 0) {
|
|
4200
|
+
errors.push(`${location}.items: use a non-empty array of event-property filters or nested groups.`);
|
|
4201
|
+
} else {
|
|
4202
|
+
filter.items.forEach((item, index) => visit(item, `${location}.items[${index}]`));
|
|
3466
4203
|
}
|
|
3467
|
-
|
|
4204
|
+
return;
|
|
4205
|
+
}
|
|
4206
|
+
if ("field" in filter || typeof filter.event_property_name !== "string" || !filter.event_property_name.trim()) {
|
|
4207
|
+
errors.push(`${location}: use a non-empty event_property_name, not a generic field object.`);
|
|
4208
|
+
}
|
|
4209
|
+
if ("values" in filter && (!Array.isArray(filter.values) || filter.values.some((value) => typeof value !== "string"))) {
|
|
4210
|
+
errors.push(`${location}.values: use an array of strings (boolean properties use "true" or "false").`);
|
|
4211
|
+
}
|
|
4212
|
+
};
|
|
4213
|
+
steps.forEach((step, stepIndex) => {
|
|
4214
|
+
if (!isRecord(step) || !Array.isArray(step.filters)) return;
|
|
4215
|
+
step.filters.forEach((filter, filterIndex) => visit(filter, `definition.funnel.steps[${stepIndex}].filters[${filterIndex}]`));
|
|
3468
4216
|
});
|
|
3469
4217
|
if (errors.length) {
|
|
3470
4218
|
throw new CliValidationError(errors.join("\n"), {
|
|
@@ -3554,7 +4302,7 @@ var reportCreate = createAnalysisCapabilityCommand({
|
|
|
3554
4302
|
function validateReportUpdate(ctx) {
|
|
3555
4303
|
const hasDefinition = ctx.str("definition") !== "";
|
|
3556
4304
|
const hasResolutions = ctx.json("resolutions") !== void 0;
|
|
3557
|
-
const hasMetadataUpdate = ctx.str("report-name") !== "" || ctx
|
|
4305
|
+
const hasMetadataUpdate = ctx.str("report-name") !== "" || optionalStringPreserveEmpty(ctx, "report-desc") !== void 0;
|
|
3558
4306
|
if (!hasDefinition && !hasMetadataUpdate) {
|
|
3559
4307
|
throw new Error("At least one of --report-name, --report-desc, or --definition is required.");
|
|
3560
4308
|
}
|
|
@@ -3576,7 +4324,7 @@ var reportUpdate = createAnalysisCapabilityCommand({
|
|
|
3576
4324
|
{ name: "report-id", type: "number", required: true, desc: "Report ID to update." },
|
|
3577
4325
|
{ name: "report-version", type: "number", required: true, desc: "Current report version from report get." },
|
|
3578
4326
|
{ name: "report-name", type: "string", required: false, desc: "New report display name." },
|
|
3579
|
-
{ name: "report-desc", type: "string", required: false, desc: "New report description." },
|
|
4327
|
+
{ name: "report-desc", type: "string", required: false, desc: "New report description. Pass an empty string to clear it; omit to preserve it." },
|
|
3580
4328
|
reportWriteModelTypeFlag(false),
|
|
3581
4329
|
reportWriteDefinitionFlag(false),
|
|
3582
4330
|
modelDefinitionIntentSnapshotFlag,
|
|
@@ -3592,7 +4340,7 @@ var reportUpdate = createAnalysisCapabilityCommand({
|
|
|
3592
4340
|
report_id: ctx.num("report-id"),
|
|
3593
4341
|
version: ctx.num("report-version"),
|
|
3594
4342
|
report_name: optionalString(ctx, "report-name"),
|
|
3595
|
-
report_desc:
|
|
4343
|
+
report_desc: optionalStringPreserveEmpty(ctx, "report-desc"),
|
|
3596
4344
|
model_type: optionalString(ctx, "model-type"),
|
|
3597
4345
|
definition: optionalJson(ctx, "definition"),
|
|
3598
4346
|
resolutions: optionalJson(ctx, "resolutions"),
|
|
@@ -3841,7 +4589,7 @@ var dashboardList = createAnalysisCapabilityCommand({
|
|
|
3841
4589
|
resource: "dashboard",
|
|
3842
4590
|
command: "list",
|
|
3843
4591
|
capabilityId: "analysis.dashboard.list",
|
|
3844
|
-
description: "List dashboards
|
|
4592
|
+
description: "List dashboards the current user can update or manage. Read-only dashboards are excluded; use analysis asset search for readable asset discovery.",
|
|
3845
4593
|
flags: [
|
|
3846
4594
|
projectIdFlag,
|
|
3847
4595
|
queriesFlag,
|
|
@@ -4176,14 +4924,13 @@ var dashboardReportDataExport = createAnalysisCapabilityCommand({
|
|
|
4176
4924
|
clusterQueryScopeFlag,
|
|
4177
4925
|
slaveClusterIdFlag,
|
|
4178
4926
|
{ name: "zone-offset", type: "number", required: false, desc: reportDataZoneOffsetDescription },
|
|
4179
|
-
{ name: "use-cache", type: "boolean", required: false, desc: "Whether to use cache. Default: true." },
|
|
4180
4927
|
{ name: "request-id", type: "string", required: false, desc: "Optional cli_<32 lowercase hex> request ID. Generated when omitted." },
|
|
4181
4928
|
asyncTimeoutSecondsFlag,
|
|
4182
4929
|
{ name: "artifact-format", type: "string", required: false, desc: "Artifact format. Only jsonl is supported." }
|
|
4183
4930
|
],
|
|
4184
4931
|
risk: "read",
|
|
4185
4932
|
validate: validateClusterQueryRouting,
|
|
4186
|
-
buildInput: dashboardReportDataInput
|
|
4933
|
+
buildInput: (ctx) => dashboardReportDataInput(ctx, false)
|
|
4187
4934
|
});
|
|
4188
4935
|
|
|
4189
4936
|
// src/commands/te-analysis/dashboard-report-data/index.ts
|
|
@@ -4548,7 +5295,7 @@ var adhocRun = createAnalysisCapabilityCommand({
|
|
|
4548
5295
|
resource: "adhoc",
|
|
4549
5296
|
command: "run",
|
|
4550
5297
|
capabilityId: "analysis.adhoc.run",
|
|
4551
|
-
description: `Run one unified ad-hoc analysis from an AI-facing model definition. Supports
|
|
5298
|
+
description: `Run one unified ad-hoc analysis from an AI-facing model definition. Supports 13 AI-facing models: 10 common models plus 3 scenario models. Tags and cohorts/clusters are separate capabilities, not ad-hoc model_type values. Returns query_context_id for Redis-backed query follow-ups. ${analysisDataRunRoutingHelp}`,
|
|
4552
5299
|
flags: [
|
|
4553
5300
|
...adhocRunFlags,
|
|
4554
5301
|
syncTimeoutSecondsFlag
|
|
@@ -5797,6 +6544,54 @@ var drilldownUserEventsRun = createAnalysisCapabilityCommand({
|
|
|
5797
6544
|
var commands40 = [drilldownUserEventsRun, drilldownUserEventsExport];
|
|
5798
6545
|
var drilldown_user_events_default = commands40;
|
|
5799
6546
|
|
|
6547
|
+
// src/commands/te-analysis/drilldown-session-details/run.ts
|
|
6548
|
+
var queryContextIdFlag3 = {
|
|
6549
|
+
name: "query-context-id",
|
|
6550
|
+
type: "string",
|
|
6551
|
+
required: true,
|
|
6552
|
+
desc: "query_context_id returned by a synchronous session-analysis preview. Analysis exports never create one."
|
|
6553
|
+
};
|
|
6554
|
+
var sessionPreviewRowsFlag = {
|
|
6555
|
+
name: "preview-rows",
|
|
6556
|
+
type: "number",
|
|
6557
|
+
required: false,
|
|
6558
|
+
desc: "Maximum session or step detail rows returned. Default: 100, max: 1000. 1000 is also the backend session-detail ceiling, so a larger population cannot be completed by paging.",
|
|
6559
|
+
min: 1,
|
|
6560
|
+
max: 1e3
|
|
6561
|
+
};
|
|
6562
|
+
var sessionDetailsRoutingHelp = "Routing: --preview-rows bounds returned detail rows; agents should normally pass 100. There is no export variant, so rows beyond the limit are unreachable; narrow the analysis itself and re-run the preview.";
|
|
6563
|
+
var drilldownSessionDetailsRun = createAnalysisCapabilityCommand({
|
|
6564
|
+
resource: "drilldown-session-details",
|
|
6565
|
+
command: "run",
|
|
6566
|
+
capabilityId: "analysis.query.drilldown_session_details",
|
|
6567
|
+
description: `Preview the individual sessions or steps behind one session-analysis session-count or step-count cell. Session-user and step-user columns drill down with analysis drilldown-entities run instead. ${sessionDetailsRoutingHelp}`,
|
|
6568
|
+
flags: [
|
|
6569
|
+
projectIdFlag,
|
|
6570
|
+
queryContextIdFlag3,
|
|
6571
|
+
sourceFlag,
|
|
6572
|
+
coordinateFlag,
|
|
6573
|
+
requestIdFlag,
|
|
6574
|
+
useCacheFlag,
|
|
6575
|
+
sessionPreviewRowsFlag,
|
|
6576
|
+
syncTimeoutSecondsFlag
|
|
6577
|
+
],
|
|
6578
|
+
risk: "read",
|
|
6579
|
+
buildInput: (ctx) => compactInput({
|
|
6580
|
+
project_id: ctx.num("project-id"),
|
|
6581
|
+
query_context_id: ctx.str("query-context-id"),
|
|
6582
|
+
source: optionalJson(ctx, "source"),
|
|
6583
|
+
coordinate: ctx.json("coordinate"),
|
|
6584
|
+
request_id: optionalString(ctx, "request-id"),
|
|
6585
|
+
use_cache: optionalBoolean(ctx, "use-cache"),
|
|
6586
|
+
preview_rows: optionalNumber(ctx, "preview-rows"),
|
|
6587
|
+
timeout_seconds: optionalNumber(ctx, "timeout-seconds")
|
|
6588
|
+
})
|
|
6589
|
+
});
|
|
6590
|
+
|
|
6591
|
+
// src/commands/te-analysis/drilldown-session-details/index.ts
|
|
6592
|
+
var commands41 = [drilldownSessionDetailsRun];
|
|
6593
|
+
var drilldown_session_details_default = commands41;
|
|
6594
|
+
|
|
5800
6595
|
// src/commands/te-analysis/user/index.ts
|
|
5801
6596
|
import { existsSync, statSync as statSync2 } from "fs";
|
|
5802
6597
|
var authenticatedOnlyFlag = {
|
|
@@ -6308,7 +7103,7 @@ var memberExportFlags = [
|
|
|
6308
7103
|
memberArtifactFormatFlag,
|
|
6309
7104
|
asyncTimeoutSecondsFlag
|
|
6310
7105
|
];
|
|
6311
|
-
var
|
|
7106
|
+
var commands42 = [
|
|
6312
7107
|
capability(
|
|
6313
7108
|
"user-cluster",
|
|
6314
7109
|
"list",
|
|
@@ -6563,7 +7358,7 @@ var commands41 = [
|
|
|
6563
7358
|
...memberExportFlags
|
|
6564
7359
|
], "read", (ctx) => historyTagDataDrilldownInput(ctx, false), { asyncArtifact: true })
|
|
6565
7360
|
];
|
|
6566
|
-
var user_default =
|
|
7361
|
+
var user_default = commands42;
|
|
6567
7362
|
|
|
6568
7363
|
// src/commands/te-analysis/query-cluster/list.ts
|
|
6569
7364
|
var queryClusterList = createAnalysisCapabilityCommand({
|
|
@@ -6577,8 +7372,8 @@ var queryClusterList = createAnalysisCapabilityCommand({
|
|
|
6577
7372
|
});
|
|
6578
7373
|
|
|
6579
7374
|
// src/commands/te-analysis/query-cluster/index.ts
|
|
6580
|
-
var
|
|
6581
|
-
var query_cluster_default =
|
|
7375
|
+
var commands43 = [queryClusterList];
|
|
7376
|
+
var query_cluster_default = commands43;
|
|
6582
7377
|
|
|
6583
7378
|
// src/commands/te-analysis/sql-table/columns.ts
|
|
6584
7379
|
var sqlTableColumns = createAnalysisCapabilityCommand({
|
|
@@ -6592,7 +7387,7 @@ var sqlTableColumns = createAnalysisCapabilityCommand({
|
|
|
6592
7387
|
name: "table-ref",
|
|
6593
7388
|
type: "string",
|
|
6594
7389
|
required: true,
|
|
6595
|
-
desc: "Exact table_ref returned by analysis sql-table list; a unique table-only reference is also accepted."
|
|
7390
|
+
desc: "Exact table_ref or quoted sql_reference returned by analysis sql-table list; a unique table-only reference is also accepted."
|
|
6596
7391
|
},
|
|
6597
7392
|
sqlTableUsageFlag
|
|
6598
7393
|
],
|
|
@@ -6609,7 +7404,7 @@ var sqlTableList = createAnalysisCapabilityCommand({
|
|
|
6609
7404
|
resource: "sql-table",
|
|
6610
7405
|
command: "list",
|
|
6611
7406
|
capabilityId: "analysis.sql_table.list",
|
|
6612
|
-
description: "List server-authoritative SQL table references queryable by the current user in a project.",
|
|
7407
|
+
description: "List server-authoritative SQL table references queryable by the current user in a project, including authorized space tables. Use sql_reference when copying a table into SQL.",
|
|
6613
7408
|
flags: [projectIdFlag, queriesFlag, directoryLimitFlag, directoryOffsetFlag, sqlTableUsageFlag],
|
|
6614
7409
|
risk: "read",
|
|
6615
7410
|
validate: validateQueriesFlag,
|
|
@@ -6623,8 +7418,8 @@ var sqlTableList = createAnalysisCapabilityCommand({
|
|
|
6623
7418
|
});
|
|
6624
7419
|
|
|
6625
7420
|
// src/commands/te-analysis/sql-table/index.ts
|
|
6626
|
-
var
|
|
6627
|
-
var sql_table_default =
|
|
7421
|
+
var commands44 = [sqlTableList, sqlTableColumns];
|
|
7422
|
+
var sql_table_default = commands44;
|
|
6628
7423
|
|
|
6629
7424
|
// src/commands/te-analysis/entity/id-import-options.ts
|
|
6630
7425
|
var entityIdImportOptions = createAnalysisCapabilityCommand({
|
|
@@ -6649,8 +7444,8 @@ var entityIdImportOptions = createAnalysisCapabilityCommand({
|
|
|
6649
7444
|
});
|
|
6650
7445
|
|
|
6651
7446
|
// src/commands/te-analysis/entity/index.ts
|
|
6652
|
-
var
|
|
6653
|
-
var entity_default =
|
|
7447
|
+
var commands45 = [entityIdImportOptions];
|
|
7448
|
+
var entity_default = commands45;
|
|
6654
7449
|
|
|
6655
7450
|
// src/commands/te-analysis/input-file/inspect.ts
|
|
6656
7451
|
var inputFileInspect = {
|
|
@@ -6733,8 +7528,8 @@ var inputFileUpload = {
|
|
|
6733
7528
|
};
|
|
6734
7529
|
|
|
6735
7530
|
// src/commands/te-analysis/input-file/index.ts
|
|
6736
|
-
var
|
|
6737
|
-
var input_file_default =
|
|
7531
|
+
var commands46 = [inputFileUpload, inputFileInspect, inputFilePurposeList];
|
|
7532
|
+
var input_file_default = commands46;
|
|
6738
7533
|
|
|
6739
7534
|
// src/commands/te-analysis/project/access-detail/get.ts
|
|
6740
7535
|
var projectAccessDetailGet = createAnalysisCapabilityCommand({
|
|
@@ -6752,10 +7547,10 @@ var projectAccessDetailGet = createAnalysisCapabilityCommand({
|
|
|
6752
7547
|
});
|
|
6753
7548
|
|
|
6754
7549
|
// src/commands/te-analysis/project/access-detail/index.ts
|
|
6755
|
-
var
|
|
7550
|
+
var commands47 = [
|
|
6756
7551
|
projectAccessDetailGet
|
|
6757
7552
|
];
|
|
6758
|
-
var access_detail_default =
|
|
7553
|
+
var access_detail_default = commands47;
|
|
6759
7554
|
|
|
6760
7555
|
// src/commands/te-analysis/project/data-power/delete.ts
|
|
6761
7556
|
var projectDataPowerDelete = createAnalysisCapabilityCommand({
|
|
@@ -6827,13 +7622,13 @@ var projectDataPowerUpsert = createAnalysisCapabilityCommand({
|
|
|
6827
7622
|
});
|
|
6828
7623
|
|
|
6829
7624
|
// src/commands/te-analysis/project/data-power/index.ts
|
|
6830
|
-
var
|
|
7625
|
+
var commands48 = [
|
|
6831
7626
|
projectDataPowerDelete,
|
|
6832
7627
|
projectDataPowerGet,
|
|
6833
7628
|
projectDataPowerList,
|
|
6834
7629
|
projectDataPowerUpsert
|
|
6835
7630
|
];
|
|
6836
|
-
var data_power_default =
|
|
7631
|
+
var data_power_default = commands48;
|
|
6837
7632
|
|
|
6838
7633
|
// src/commands/te-analysis/project/entity/create.ts
|
|
6839
7634
|
var projectEntityCreate = createAnalysisCapabilityCommand({
|
|
@@ -6944,14 +7739,14 @@ var projectEntityUpdate = createAnalysisCapabilityCommand({
|
|
|
6944
7739
|
});
|
|
6945
7740
|
|
|
6946
7741
|
// src/commands/te-analysis/project/entity/index.ts
|
|
6947
|
-
var
|
|
7742
|
+
var commands49 = [
|
|
6948
7743
|
projectEntityCreate,
|
|
6949
7744
|
projectEntityDelete,
|
|
6950
7745
|
projectEntityGet,
|
|
6951
7746
|
projectEntityList,
|
|
6952
7747
|
projectEntityUpdate
|
|
6953
7748
|
];
|
|
6954
|
-
var entity_default2 =
|
|
7749
|
+
var entity_default2 = commands49;
|
|
6955
7750
|
|
|
6956
7751
|
// src/commands/te-analysis/project/entity-event/list.ts
|
|
6957
7752
|
var projectEntityEventList = createAnalysisCapabilityCommand({
|
|
@@ -6971,10 +7766,10 @@ var projectEntityEventList = createAnalysisCapabilityCommand({
|
|
|
6971
7766
|
});
|
|
6972
7767
|
|
|
6973
7768
|
// src/commands/te-analysis/project/entity-event/index.ts
|
|
6974
|
-
var
|
|
7769
|
+
var commands50 = [
|
|
6975
7770
|
projectEntityEventList
|
|
6976
7771
|
];
|
|
6977
|
-
var entity_event_default =
|
|
7772
|
+
var entity_event_default = commands50;
|
|
6978
7773
|
|
|
6979
7774
|
// src/commands/te-analysis/project/function/list.ts
|
|
6980
7775
|
var projectFunctionList = createAnalysisCapabilityCommand({
|
|
@@ -6994,10 +7789,10 @@ var projectFunctionList = createAnalysisCapabilityCommand({
|
|
|
6994
7789
|
});
|
|
6995
7790
|
|
|
6996
7791
|
// src/commands/te-analysis/project/function/index.ts
|
|
6997
|
-
var
|
|
7792
|
+
var commands51 = [
|
|
6998
7793
|
projectFunctionList
|
|
6999
7794
|
];
|
|
7000
|
-
var function_default =
|
|
7795
|
+
var function_default = commands51;
|
|
7001
7796
|
|
|
7002
7797
|
// src/commands/te-analysis/project/info/create.ts
|
|
7003
7798
|
var projectInfoCreate = createAnalysisCapabilityCommand({
|
|
@@ -7092,14 +7887,14 @@ var projectInfoUpdate = createAnalysisCapabilityCommand({
|
|
|
7092
7887
|
});
|
|
7093
7888
|
|
|
7094
7889
|
// src/commands/te-analysis/project/info/index.ts
|
|
7095
|
-
var
|
|
7890
|
+
var commands52 = [
|
|
7096
7891
|
projectInfoCreate,
|
|
7097
7892
|
projectInfoDelete,
|
|
7098
7893
|
projectInfoGet,
|
|
7099
7894
|
projectInfoList,
|
|
7100
7895
|
projectInfoUpdate
|
|
7101
7896
|
];
|
|
7102
|
-
var info_default =
|
|
7897
|
+
var info_default = commands52;
|
|
7103
7898
|
|
|
7104
7899
|
// src/commands/te-analysis/project/mark-time/create.ts
|
|
7105
7900
|
var projectMarkTimeCreate = createAnalysisCapabilityCommand({
|
|
@@ -7193,13 +7988,13 @@ var projectMarkTimeUpdate = createAnalysisCapabilityCommand({
|
|
|
7193
7988
|
});
|
|
7194
7989
|
|
|
7195
7990
|
// src/commands/te-analysis/project/mark-time/index.ts
|
|
7196
|
-
var
|
|
7991
|
+
var commands53 = [
|
|
7197
7992
|
projectMarkTimeCreate,
|
|
7198
7993
|
projectMarkTimeDelete,
|
|
7199
7994
|
projectMarkTimeList,
|
|
7200
7995
|
projectMarkTimeUpdate
|
|
7201
7996
|
];
|
|
7202
|
-
var mark_time_default =
|
|
7997
|
+
var mark_time_default = commands53;
|
|
7203
7998
|
|
|
7204
7999
|
// src/commands/te-analysis/project/member/add.ts
|
|
7205
8000
|
var projectMemberAdd = createAnalysisCapabilityCommand({
|
|
@@ -7315,7 +8110,7 @@ var projectMemberUpdate = createAnalysisCapabilityCommand({
|
|
|
7315
8110
|
});
|
|
7316
8111
|
|
|
7317
8112
|
// src/commands/te-analysis/project/member/index.ts
|
|
7318
|
-
var
|
|
8113
|
+
var commands54 = [
|
|
7319
8114
|
projectMemberAdd,
|
|
7320
8115
|
projectMemberBatchUpdate,
|
|
7321
8116
|
projectMemberImport,
|
|
@@ -7323,7 +8118,7 @@ var commands53 = [
|
|
|
7323
8118
|
projectMemberRemove,
|
|
7324
8119
|
projectMemberUpdate
|
|
7325
8120
|
];
|
|
7326
|
-
var member_default =
|
|
8121
|
+
var member_default = commands54;
|
|
7327
8122
|
|
|
7328
8123
|
// src/commands/te-analysis/project/member-candidate/list.ts
|
|
7329
8124
|
var projectMemberCandidateList = createAnalysisCapabilityCommand({
|
|
@@ -7355,10 +8150,10 @@ var projectMemberCandidateList = createAnalysisCapabilityCommand({
|
|
|
7355
8150
|
});
|
|
7356
8151
|
|
|
7357
8152
|
// src/commands/te-analysis/project/member-candidate/index.ts
|
|
7358
|
-
var
|
|
8153
|
+
var commands55 = [
|
|
7359
8154
|
projectMemberCandidateList
|
|
7360
8155
|
];
|
|
7361
|
-
var member_candidate_default =
|
|
8156
|
+
var member_candidate_default = commands55;
|
|
7362
8157
|
|
|
7363
8158
|
// src/commands/te-analysis/project/member-handover/export.ts
|
|
7364
8159
|
var projectMemberHandoverExport = createAnalysisCapabilityCommand({
|
|
@@ -7399,11 +8194,11 @@ var projectMemberHandoverRun = createAnalysisCapabilityCommand({
|
|
|
7399
8194
|
});
|
|
7400
8195
|
|
|
7401
8196
|
// src/commands/te-analysis/project/member-handover/index.ts
|
|
7402
|
-
var
|
|
8197
|
+
var commands56 = [
|
|
7403
8198
|
projectMemberHandoverExport,
|
|
7404
8199
|
projectMemberHandoverRun
|
|
7405
8200
|
];
|
|
7406
|
-
var member_handover_default =
|
|
8201
|
+
var member_handover_default = commands56;
|
|
7407
8202
|
|
|
7408
8203
|
// src/commands/te-analysis/project/member-receiver/list.ts
|
|
7409
8204
|
var projectMemberReceiverList = createAnalysisCapabilityCommand({
|
|
@@ -7421,10 +8216,10 @@ var projectMemberReceiverList = createAnalysisCapabilityCommand({
|
|
|
7421
8216
|
});
|
|
7422
8217
|
|
|
7423
8218
|
// src/commands/te-analysis/project/member-receiver/index.ts
|
|
7424
|
-
var
|
|
8219
|
+
var commands57 = [
|
|
7425
8220
|
projectMemberReceiverList
|
|
7426
8221
|
];
|
|
7427
|
-
var member_receiver_default =
|
|
8222
|
+
var member_receiver_default = commands57;
|
|
7428
8223
|
|
|
7429
8224
|
// src/commands/te-analysis/project/owner/update.ts
|
|
7430
8225
|
var projectOwnerUpdate = createAnalysisCapabilityCommand({
|
|
@@ -7450,10 +8245,10 @@ var projectOwnerUpdate = createAnalysisCapabilityCommand({
|
|
|
7450
8245
|
});
|
|
7451
8246
|
|
|
7452
8247
|
// src/commands/te-analysis/project/owner/index.ts
|
|
7453
|
-
var
|
|
8248
|
+
var commands58 = [
|
|
7454
8249
|
projectOwnerUpdate
|
|
7455
8250
|
];
|
|
7456
|
-
var owner_default =
|
|
8251
|
+
var owner_default = commands58;
|
|
7457
8252
|
|
|
7458
8253
|
// src/commands/te-analysis/project/permission-binding/list.ts
|
|
7459
8254
|
var projectPermissionBindingList = createAnalysisCapabilityCommand({
|
|
@@ -7475,10 +8270,10 @@ var projectPermissionBindingList = createAnalysisCapabilityCommand({
|
|
|
7475
8270
|
});
|
|
7476
8271
|
|
|
7477
8272
|
// src/commands/te-analysis/project/permission-binding/index.ts
|
|
7478
|
-
var
|
|
8273
|
+
var commands59 = [
|
|
7479
8274
|
projectPermissionBindingList
|
|
7480
8275
|
];
|
|
7481
|
-
var permission_binding_default =
|
|
8276
|
+
var permission_binding_default = commands59;
|
|
7482
8277
|
|
|
7483
8278
|
// src/commands/te-analysis/project/receive-status/update.ts
|
|
7484
8279
|
var projectReceiveStatusUpdate = createAnalysisCapabilityCommand({
|
|
@@ -7499,10 +8294,10 @@ var projectReceiveStatusUpdate = createAnalysisCapabilityCommand({
|
|
|
7499
8294
|
});
|
|
7500
8295
|
|
|
7501
8296
|
// src/commands/te-analysis/project/receive-status/index.ts
|
|
7502
|
-
var
|
|
8297
|
+
var commands60 = [
|
|
7503
8298
|
projectReceiveStatusUpdate
|
|
7504
8299
|
];
|
|
7505
|
-
var receive_status_default =
|
|
8300
|
+
var receive_status_default = commands60;
|
|
7506
8301
|
|
|
7507
8302
|
// src/commands/te-analysis/project/role/delete.ts
|
|
7508
8303
|
var projectRoleDelete = createAnalysisCapabilityCommand({
|
|
@@ -7594,13 +8389,13 @@ var projectRoleUpsert = createAnalysisCapabilityCommand({
|
|
|
7594
8389
|
});
|
|
7595
8390
|
|
|
7596
8391
|
// src/commands/te-analysis/project/role/index.ts
|
|
7597
|
-
var
|
|
8392
|
+
var commands61 = [
|
|
7598
8393
|
projectRoleDelete,
|
|
7599
8394
|
projectRoleGet,
|
|
7600
8395
|
projectRoleList,
|
|
7601
8396
|
projectRoleUpsert
|
|
7602
8397
|
];
|
|
7603
|
-
var role_default =
|
|
8398
|
+
var role_default = commands61;
|
|
7604
8399
|
|
|
7605
8400
|
// src/commands/te-analysis/project/role-function/list.ts
|
|
7606
8401
|
var projectRoleFunctionList = createAnalysisCapabilityCommand({
|
|
@@ -7626,10 +8421,10 @@ var projectRoleFunctionList = createAnalysisCapabilityCommand({
|
|
|
7626
8421
|
});
|
|
7627
8422
|
|
|
7628
8423
|
// src/commands/te-analysis/project/role-function/index.ts
|
|
7629
|
-
var
|
|
8424
|
+
var commands62 = [
|
|
7630
8425
|
projectRoleFunctionList
|
|
7631
8426
|
];
|
|
7632
|
-
var role_function_default =
|
|
8427
|
+
var role_function_default = commands62;
|
|
7633
8428
|
|
|
7634
8429
|
// src/commands/te-analysis/project/role-user/list.ts
|
|
7635
8430
|
var projectRoleUserList = createAnalysisCapabilityCommand({
|
|
@@ -7649,10 +8444,10 @@ var projectRoleUserList = createAnalysisCapabilityCommand({
|
|
|
7649
8444
|
});
|
|
7650
8445
|
|
|
7651
8446
|
// src/commands/te-analysis/project/role-user/index.ts
|
|
7652
|
-
var
|
|
8447
|
+
var commands63 = [
|
|
7653
8448
|
projectRoleUserList
|
|
7654
8449
|
];
|
|
7655
|
-
var role_user_default =
|
|
8450
|
+
var role_user_default = commands63;
|
|
7656
8451
|
|
|
7657
8452
|
// src/commands/te-analysis/project/timezone/get.ts
|
|
7658
8453
|
var projectTimezoneGet = createAnalysisCapabilityCommand({
|
|
@@ -7790,12 +8585,12 @@ function isObject(value) {
|
|
|
7790
8585
|
}
|
|
7791
8586
|
|
|
7792
8587
|
// src/commands/te-analysis/project/timezone/index.ts
|
|
7793
|
-
var
|
|
8588
|
+
var commands64 = [
|
|
7794
8589
|
projectTimezoneGet,
|
|
7795
8590
|
projectTimezoneOverview,
|
|
7796
8591
|
projectTimezoneUpdate
|
|
7797
8592
|
];
|
|
7798
|
-
var timezone_default =
|
|
8593
|
+
var timezone_default = commands64;
|
|
7799
8594
|
|
|
7800
8595
|
// src/commands/te-analysis/project/user-id-items/update.ts
|
|
7801
8596
|
var projectUserIdItemsUpdate = createAnalysisCapabilityCommand({
|
|
@@ -7815,13 +8610,13 @@ var projectUserIdItemsUpdate = createAnalysisCapabilityCommand({
|
|
|
7815
8610
|
});
|
|
7816
8611
|
|
|
7817
8612
|
// src/commands/te-analysis/project/user-id-items/index.ts
|
|
7818
|
-
var
|
|
8613
|
+
var commands65 = [
|
|
7819
8614
|
projectUserIdItemsUpdate
|
|
7820
8615
|
];
|
|
7821
|
-
var user_id_items_default =
|
|
8616
|
+
var user_id_items_default = commands65;
|
|
7822
8617
|
|
|
7823
8618
|
// src/commands/te-analysis/project/index.ts
|
|
7824
|
-
var
|
|
8619
|
+
var commands66 = [
|
|
7825
8620
|
...access_detail_default,
|
|
7826
8621
|
...data_power_default,
|
|
7827
8622
|
...entity_default2,
|
|
@@ -7842,7 +8637,7 @@ var commands65 = [
|
|
|
7842
8637
|
...timezone_default,
|
|
7843
8638
|
...user_id_items_default
|
|
7844
8639
|
];
|
|
7845
|
-
var project_default =
|
|
8640
|
+
var project_default = commands66;
|
|
7846
8641
|
|
|
7847
8642
|
// src/commands/te-analysis/tracking/shared.ts
|
|
7848
8643
|
function createTrackingCapabilityCommand(config) {
|
|
@@ -8573,7 +9368,7 @@ function counts(plan, value) {
|
|
|
8573
9368
|
}
|
|
8574
9369
|
|
|
8575
9370
|
// src/commands/te-analysis/tracking/plan/index.ts
|
|
8576
|
-
var
|
|
9371
|
+
var commands67 = [
|
|
8577
9372
|
trackingPlanGet,
|
|
8578
9373
|
trackingPlanSaveItems,
|
|
8579
9374
|
trackingPlanDeleteItems,
|
|
@@ -8583,7 +9378,7 @@ var commands66 = [
|
|
|
8583
9378
|
trackingPlanSyncFromMeta,
|
|
8584
9379
|
trackingPlanSyncDisplayNames
|
|
8585
9380
|
];
|
|
8586
|
-
var plan_default =
|
|
9381
|
+
var plan_default = commands67;
|
|
8587
9382
|
|
|
8588
9383
|
// src/commands/te-analysis/tracking/sdk-sample/generate.ts
|
|
8589
9384
|
var trackingSdkSampleGenerate = createTrackingCapabilityCommand({
|
|
@@ -8597,10 +9392,10 @@ var trackingSdkSampleGenerate = createTrackingCapabilityCommand({
|
|
|
8597
9392
|
});
|
|
8598
9393
|
|
|
8599
9394
|
// src/commands/te-analysis/tracking/sdk-sample/index.ts
|
|
8600
|
-
var
|
|
9395
|
+
var commands68 = [
|
|
8601
9396
|
trackingSdkSampleGenerate
|
|
8602
9397
|
];
|
|
8603
|
-
var sdk_sample_default =
|
|
9398
|
+
var sdk_sample_default = commands68;
|
|
8604
9399
|
|
|
8605
9400
|
// src/commands/te-analysis/tracking/plan-change-log/list.ts
|
|
8606
9401
|
var trackingPlanChangeLogList = createTrackingCapabilityCommand({
|
|
@@ -8626,11 +9421,11 @@ var trackingPlanChangeLogExport = createTrackingCapabilityCommand({
|
|
|
8626
9421
|
});
|
|
8627
9422
|
|
|
8628
9423
|
// src/commands/te-analysis/tracking/plan-change-log/index.ts
|
|
8629
|
-
var
|
|
9424
|
+
var commands69 = [
|
|
8630
9425
|
trackingPlanChangeLogList,
|
|
8631
9426
|
trackingPlanChangeLogExport
|
|
8632
9427
|
];
|
|
8633
|
-
var plan_change_log_default =
|
|
9428
|
+
var plan_change_log_default = commands69;
|
|
8634
9429
|
|
|
8635
9430
|
// src/commands/te-analysis/tracking/check/run.ts
|
|
8636
9431
|
var trackingCheckRun = createTrackingCapabilityCommand({
|
|
@@ -8704,7 +9499,7 @@ var trackingCheckExport = createTrackingCapabilityCommand({
|
|
|
8704
9499
|
});
|
|
8705
9500
|
|
|
8706
9501
|
// src/commands/te-analysis/tracking/check/index.ts
|
|
8707
|
-
var
|
|
9502
|
+
var commands70 = [
|
|
8708
9503
|
trackingCheckRun,
|
|
8709
9504
|
trackingCheckList,
|
|
8710
9505
|
trackingCheckGet,
|
|
@@ -8712,7 +9507,7 @@ var commands69 = [
|
|
|
8712
9507
|
trackingCheckDelete,
|
|
8713
9508
|
trackingCheckExport
|
|
8714
9509
|
];
|
|
8715
|
-
var check_default =
|
|
9510
|
+
var check_default = commands70;
|
|
8716
9511
|
|
|
8717
9512
|
// src/commands/te-analysis/tracking/ingest/summary.ts
|
|
8718
9513
|
var trackingIngestSummary = createTrackingCapabilityCommand({
|
|
@@ -8726,10 +9521,10 @@ var trackingIngestSummary = createTrackingCapabilityCommand({
|
|
|
8726
9521
|
});
|
|
8727
9522
|
|
|
8728
9523
|
// src/commands/te-analysis/tracking/ingest/index.ts
|
|
8729
|
-
var
|
|
9524
|
+
var commands71 = [
|
|
8730
9525
|
trackingIngestSummary
|
|
8731
9526
|
];
|
|
8732
|
-
var ingest_default =
|
|
9527
|
+
var ingest_default = commands71;
|
|
8733
9528
|
|
|
8734
9529
|
// src/commands/te-analysis/tracking/ingest-error/list.ts
|
|
8735
9530
|
var trackingIngestErrorList = createTrackingCapabilityCommand({
|
|
@@ -8743,10 +9538,10 @@ var trackingIngestErrorList = createTrackingCapabilityCommand({
|
|
|
8743
9538
|
});
|
|
8744
9539
|
|
|
8745
9540
|
// src/commands/te-analysis/tracking/ingest-error/index.ts
|
|
8746
|
-
var
|
|
9541
|
+
var commands72 = [
|
|
8747
9542
|
trackingIngestErrorList
|
|
8748
9543
|
];
|
|
8749
|
-
var ingest_error_default =
|
|
9544
|
+
var ingest_error_default = commands72;
|
|
8750
9545
|
|
|
8751
9546
|
// src/commands/te-analysis/tracking/live-data/list.ts
|
|
8752
9547
|
var trackingLiveDataList = createTrackingCapabilityCommand({
|
|
@@ -8772,11 +9567,11 @@ var trackingLiveDataExport = createTrackingCapabilityCommand({
|
|
|
8772
9567
|
});
|
|
8773
9568
|
|
|
8774
9569
|
// src/commands/te-analysis/tracking/live-data/index.ts
|
|
8775
|
-
var
|
|
9570
|
+
var commands73 = [
|
|
8776
9571
|
trackingLiveDataList,
|
|
8777
9572
|
trackingLiveDataExport
|
|
8778
9573
|
];
|
|
8779
|
-
var live_data_default =
|
|
9574
|
+
var live_data_default = commands73;
|
|
8780
9575
|
|
|
8781
9576
|
// src/commands/te-analysis/tracking/event-blacklist/list.ts
|
|
8782
9577
|
var trackingEventBlacklistList = createTrackingCapabilityCommand({
|
|
@@ -8812,12 +9607,12 @@ var trackingEventBlacklistUpdate = createTrackingCapabilityCommand({
|
|
|
8812
9607
|
});
|
|
8813
9608
|
|
|
8814
9609
|
// src/commands/te-analysis/tracking/event-blacklist/index.ts
|
|
8815
|
-
var
|
|
9610
|
+
var commands74 = [
|
|
8816
9611
|
trackingEventBlacklistList,
|
|
8817
9612
|
trackingEventBlacklistAdd,
|
|
8818
9613
|
trackingEventBlacklistUpdate
|
|
8819
9614
|
];
|
|
8820
|
-
var event_blacklist_default =
|
|
9615
|
+
var event_blacklist_default = commands74;
|
|
8821
9616
|
|
|
8822
9617
|
// src/commands/te-analysis/tracking/debug-device/add.ts
|
|
8823
9618
|
var trackingDebugDeviceAdd = createTrackingCapabilityCommand({
|
|
@@ -8860,12 +9655,12 @@ var trackingDebugDeviceSelect = createTrackingCapabilityCommand({
|
|
|
8860
9655
|
});
|
|
8861
9656
|
|
|
8862
9657
|
// src/commands/te-analysis/tracking/debug-device/index.ts
|
|
8863
|
-
var
|
|
9658
|
+
var commands75 = [
|
|
8864
9659
|
trackingDebugDeviceList,
|
|
8865
9660
|
trackingDebugDeviceAdd,
|
|
8866
9661
|
trackingDebugDeviceSelect
|
|
8867
9662
|
];
|
|
8868
|
-
var debug_device_default =
|
|
9663
|
+
var debug_device_default = commands75;
|
|
8869
9664
|
|
|
8870
9665
|
// src/commands/te-analysis/tracking/debug-data/list.ts
|
|
8871
9666
|
var debugStartTimeFlag = {
|
|
@@ -8924,11 +9719,11 @@ function isRecord3(value) {
|
|
|
8924
9719
|
}
|
|
8925
9720
|
|
|
8926
9721
|
// src/commands/te-analysis/tracking/debug-data/index.ts
|
|
8927
|
-
var
|
|
8928
|
-
var debug_data_default =
|
|
9722
|
+
var commands76 = [trackingDebugDataList];
|
|
9723
|
+
var debug_data_default = commands76;
|
|
8929
9724
|
|
|
8930
9725
|
// src/commands/te-analysis/tracking/index.ts
|
|
8931
|
-
var
|
|
9726
|
+
var commands77 = [
|
|
8932
9727
|
...plan_default,
|
|
8933
9728
|
...sdk_sample_default,
|
|
8934
9729
|
...plan_change_log_default,
|
|
@@ -8940,7 +9735,7 @@ var commands76 = [
|
|
|
8940
9735
|
...debug_device_default,
|
|
8941
9736
|
...debug_data_default
|
|
8942
9737
|
];
|
|
8943
|
-
var tracking_default =
|
|
9738
|
+
var tracking_default = commands77;
|
|
8944
9739
|
|
|
8945
9740
|
// src/commands/te-analysis/alert/shared.ts
|
|
8946
9741
|
var alertIdFlag = {
|
|
@@ -9053,7 +9848,7 @@ var analysisAlertStop = createAnalysisCapabilityCommand({
|
|
|
9053
9848
|
});
|
|
9054
9849
|
|
|
9055
9850
|
// src/commands/te-analysis/alert/index.ts
|
|
9056
|
-
var
|
|
9851
|
+
var commands78 = [
|
|
9057
9852
|
analysisAlertList,
|
|
9058
9853
|
analysisAlertGet,
|
|
9059
9854
|
analysisAlertCreate,
|
|
@@ -9062,7 +9857,7 @@ var commands77 = [
|
|
|
9062
9857
|
analysisAlertStart,
|
|
9063
9858
|
analysisAlertStop
|
|
9064
9859
|
];
|
|
9065
|
-
var alert_default =
|
|
9860
|
+
var alert_default = commands78;
|
|
9066
9861
|
|
|
9067
9862
|
// src/commands/te-analysis/alert-detail/list.ts
|
|
9068
9863
|
var analysisAlertDetailList = createAnalysisCapabilityCommand({
|
|
@@ -9076,10 +9871,10 @@ var analysisAlertDetailList = createAnalysisCapabilityCommand({
|
|
|
9076
9871
|
});
|
|
9077
9872
|
|
|
9078
9873
|
// src/commands/te-analysis/alert-detail/index.ts
|
|
9079
|
-
var
|
|
9874
|
+
var commands79 = [
|
|
9080
9875
|
analysisAlertDetailList
|
|
9081
9876
|
];
|
|
9082
|
-
var alert_detail_default =
|
|
9877
|
+
var alert_detail_default = commands79;
|
|
9083
9878
|
|
|
9084
9879
|
// src/commands/te-analysis/alert-job/list.ts
|
|
9085
9880
|
var analysisAlertJobList = createAnalysisCapabilityCommand({
|
|
@@ -9093,10 +9888,10 @@ var analysisAlertJobList = createAnalysisCapabilityCommand({
|
|
|
9093
9888
|
});
|
|
9094
9889
|
|
|
9095
9890
|
// src/commands/te-analysis/alert-job/index.ts
|
|
9096
|
-
var
|
|
9891
|
+
var commands80 = [
|
|
9097
9892
|
analysisAlertJobList
|
|
9098
9893
|
];
|
|
9099
|
-
var alert_job_default =
|
|
9894
|
+
var alert_job_default = commands80;
|
|
9100
9895
|
|
|
9101
9896
|
// src/commands/te-analysis/alert-notice-config/list.ts
|
|
9102
9897
|
var analysisAlertNoticeConfigList = createAnalysisCapabilityCommand({
|
|
@@ -9110,10 +9905,10 @@ var analysisAlertNoticeConfigList = createAnalysisCapabilityCommand({
|
|
|
9110
9905
|
});
|
|
9111
9906
|
|
|
9112
9907
|
// src/commands/te-analysis/alert-notice-config/index.ts
|
|
9113
|
-
var
|
|
9908
|
+
var commands81 = [
|
|
9114
9909
|
analysisAlertNoticeConfigList
|
|
9115
9910
|
];
|
|
9116
|
-
var alert_notice_config_default =
|
|
9911
|
+
var alert_notice_config_default = commands81;
|
|
9117
9912
|
|
|
9118
9913
|
// src/commands/te-analysis/system/shared.ts
|
|
9119
9914
|
import { readFileSync as readFileSync3, statSync as statSync3 } from "fs";
|
|
@@ -10177,14 +10972,14 @@ var systemUsageCommands = [
|
|
|
10177
10972
|
];
|
|
10178
10973
|
|
|
10179
10974
|
// src/commands/te-analysis/system/index.ts
|
|
10180
|
-
var
|
|
10975
|
+
var commands82 = [
|
|
10181
10976
|
...systemUsageCommands,
|
|
10182
10977
|
...systemIdentityCommands,
|
|
10183
10978
|
...systemSecurityCommands,
|
|
10184
10979
|
...systemMonitoringCommands,
|
|
10185
10980
|
...systemConfigurationCommands
|
|
10186
10981
|
];
|
|
10187
|
-
var system_default =
|
|
10982
|
+
var system_default = commands82;
|
|
10188
10983
|
|
|
10189
10984
|
// src/commands/te-analysis/index.ts
|
|
10190
10985
|
registerCapabilityGatewayRoute("analysis", { gatewayDomain: "analysis" });
|
|
@@ -10221,6 +11016,7 @@ var baseCommands = [
|
|
|
10221
11016
|
...drilldown_events_default,
|
|
10222
11017
|
...drilldown_entities_default,
|
|
10223
11018
|
...drilldown_user_events_default,
|
|
11019
|
+
...drilldown_session_details_default,
|
|
10224
11020
|
...user_default,
|
|
10225
11021
|
...sql_table_default,
|
|
10226
11022
|
...query_cluster_default,
|
|
@@ -10234,8 +11030,8 @@ var baseCommands = [
|
|
|
10234
11030
|
...alert_notice_config_default,
|
|
10235
11031
|
...system_default
|
|
10236
11032
|
];
|
|
10237
|
-
var
|
|
10238
|
-
var te_analysis_default =
|
|
11033
|
+
var commands83 = [...baseCommands];
|
|
11034
|
+
var te_analysis_default = commands83;
|
|
10239
11035
|
export {
|
|
10240
11036
|
baseCommands,
|
|
10241
11037
|
te_analysis_default as default
|