@sparkelf/dsh-dataops-managed 0.3.27 → 0.3.28

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/lib/client.js CHANGED
@@ -747,22 +747,22 @@ window.__ModuleLoader__.load({
747
747
  document.head.appendChild(tag);
748
748
  }
749
749
  var ManagedDataOpsSection_module_css_default = {
750
+ "reviewActions": "_2dqzjG_reviewActions",
751
+ "card": "_2dqzjG_card",
752
+ "reviewHint": "_2dqzjG_reviewHint",
750
753
  "heading": "_2dqzjG_heading",
751
- "row": "_2dqzjG_row",
752
- "title": "_2dqzjG_title",
754
+ "reviewRows": "_2dqzjG_reviewRows",
753
755
  "label": "_2dqzjG_label",
754
- "card": "_2dqzjG_card",
755
- "refusal": "_2dqzjG_refusal",
756
+ "title": "_2dqzjG_title",
756
757
  "reviewRow": "_2dqzjG_reviewRow",
757
- "fields": "_2dqzjG_fields",
758
- "reviewRows": "_2dqzjG_reviewRows",
759
- "reviewActions": "_2dqzjG_reviewActions",
760
- "meta": "_2dqzjG_meta",
758
+ "refusal": "_2dqzjG_refusal",
761
759
  "section": "_2dqzjG_section",
762
- "copy": "_2dqzjG_copy",
763
- "reviewHint": "_2dqzjG_reviewHint",
760
+ "row": "_2dqzjG_row",
761
+ "status": "_2dqzjG_status",
762
+ "meta": "_2dqzjG_meta",
764
763
  "actions": "_2dqzjG_actions",
765
- "status": "_2dqzjG_status"
764
+ "fields": "_2dqzjG_fields",
765
+ "copy": "_2dqzjG_copy"
766
766
  };
767
767
  //#endregion
768
768
  //#region src/client/ReviewSettingsCard.tsx
@@ -1617,24 +1617,24 @@ window.__ModuleLoader__.load({
1617
1617
  document.head.appendChild(tag);
1618
1618
  }
1619
1619
  var NotificationBell_module_css_default = {
1620
- "button": "tE0trG_button",
1621
- "list": "tE0trG_list",
1622
- "row": "tE0trG_row",
1623
- "badge": "tE0trG_badge",
1624
- "bell": "tE0trG_bell",
1625
- "rowTime": "tE0trG_rowTime",
1626
1620
  "linkButton": "tE0trG_linkButton",
1627
- "rowBody": "tE0trG_rowBody",
1628
1621
  "rowText": "tE0trG_rowText",
1629
- "rowTitle": "tE0trG_rowTitle",
1630
- "rowMeta": "tE0trG_rowMeta",
1631
- "actions": "tE0trG_actions",
1622
+ "demo": "tE0trG_demo",
1623
+ "bell": "tE0trG_bell",
1632
1624
  "empty": "tE0trG_empty",
1633
- "rowIcon": "tE0trG_rowIcon",
1634
- "pager": "tE0trG_pager",
1635
1625
  "dot": "tE0trG_dot",
1626
+ "rowBody": "tE0trG_rowBody",
1627
+ "rowTitle": "tE0trG_rowTitle",
1628
+ "row": "tE0trG_row",
1636
1629
  "dialog": "tE0trG_dialog",
1637
- "demo": "tE0trG_demo"
1630
+ "actions": "tE0trG_actions",
1631
+ "rowMeta": "tE0trG_rowMeta",
1632
+ "button": "tE0trG_button",
1633
+ "badge": "tE0trG_badge",
1634
+ "pager": "tE0trG_pager",
1635
+ "rowTime": "tE0trG_rowTime",
1636
+ "list": "tE0trG_list",
1637
+ "rowIcon": "tE0trG_rowIcon"
1638
1638
  };
1639
1639
  //#endregion
1640
1640
  //#region src/client/NotificationBell.tsx
@@ -1926,61 +1926,61 @@ window.__ModuleLoader__.load({
1926
1926
  }
1927
1927
  var SkillPlazaSection_module_css_default = {
1928
1928
  "demoTag": "_9FdZvq_demoTag",
1929
- "mine": "_9FdZvq_mine",
1930
- "notice": "_9FdZvq_notice",
1931
- "title": "_9FdZvq_title",
1929
+ "card": "_9FdZvq_card",
1930
+ "riskEmpty": "_9FdZvq_riskEmpty",
1931
+ "noteField": "_9FdZvq_noteField",
1932
+ "cardEnd": "_9FdZvq_cardEnd",
1933
+ "detailRow": "_9FdZvq_detailRow",
1934
+ "severity": "_9FdZvq_severity",
1935
+ "audit": "_9FdZvq_audit",
1936
+ "tabActive": "_9FdZvq_tabActive",
1937
+ "sharedTag": "_9FdZvq_sharedTag",
1938
+ "tabCount": "_9FdZvq_tabCount",
1939
+ "findingText": "_9FdZvq_findingText",
1940
+ "dialog": "_9FdZvq_dialog",
1941
+ "pendingTag": "_9FdZvq_pendingTag",
1942
+ "auditDialog": "_9FdZvq_auditDialog",
1932
1943
  "status": "_9FdZvq_status",
1944
+ "mark": "_9FdZvq_mark",
1945
+ "tagTop": "_9FdZvq_tagTop",
1933
1946
  "headRow": "_9FdZvq_headRow",
1934
- "findingHint": "_9FdZvq_findingHint",
1935
- "head": "_9FdZvq_head",
1936
- "dialog": "_9FdZvq_dialog",
1947
+ "departmentSelect": "_9FdZvq_departmentSelect",
1948
+ "departmentBar": "_9FdZvq_departmentBar",
1949
+ "cardTop": "_9FdZvq_cardTop",
1950
+ "detail": "_9FdZvq_detail",
1937
1951
  "emptyText": "_9FdZvq_emptyText",
1938
- "detailButton": "_9FdZvq_detailButton",
1939
- "sharedTag": "_9FdZvq_sharedTag",
1952
+ "riskFailed": "_9FdZvq_riskFailed",
1953
+ "finding": "_9FdZvq_finding",
1954
+ "findingHint": "_9FdZvq_findingHint",
1955
+ "detailLabel": "_9FdZvq_detailLabel",
1940
1956
  "section": "_9FdZvq_section",
1941
- "riskHead": "_9FdZvq_riskHead",
1942
- "detail": "_9FdZvq_detail",
1943
- "audit": "_9FdZvq_audit",
1944
- "reviewButton": "_9FdZvq_reviewButton",
1945
- "cardMarks": "_9FdZvq_cardMarks",
1957
+ "head": "_9FdZvq_head",
1958
+ "cardTitle": "_9FdZvq_cardTitle",
1959
+ "departmentLabel": "_9FdZvq_departmentLabel",
1946
1960
  "detailValue": "_9FdZvq_detailValue",
1947
- "tabCount": "_9FdZvq_tabCount",
1948
- "noteField": "_9FdZvq_noteField",
1949
- "riskFailed": "_9FdZvq_riskFailed",
1950
- "riskEmpty": "_9FdZvq_riskEmpty",
1961
+ "mine": "_9FdZvq_mine",
1951
1962
  "cardIcon": "_9FdZvq_cardIcon",
1952
- "departmentSelect": "_9FdZvq_departmentSelect",
1953
- "risk": "_9FdZvq_risk",
1963
+ "emptyIcon": "_9FdZvq_emptyIcon",
1964
+ "title": "_9FdZvq_title",
1954
1965
  "cards": "_9FdZvq_cards",
1955
- "riskSummary": "_9FdZvq_riskSummary",
1956
- "empty": "_9FdZvq_empty",
1957
- "tabActive": "_9FdZvq_tabActive",
1958
- "cardTop": "_9FdZvq_cardTop",
1959
- "departmentBar": "_9FdZvq_departmentBar",
1960
- "tagTop": "_9FdZvq_tagTop",
1961
- "pendingTag": "_9FdZvq_pendingTag",
1962
- "auditDialog": "_9FdZvq_auditDialog",
1963
- "auditFooter": "_9FdZvq_auditFooter",
1964
1966
  "tabs": "_9FdZvq_tabs",
1965
- "reviewNote": "_9FdZvq_reviewNote",
1966
- "severity": "_9FdZvq_severity",
1967
- "cardDesc": "_9FdZvq_cardDesc",
1968
- "tab": "_9FdZvq_tab",
1969
1967
  "rejectedTag": "_9FdZvq_rejectedTag",
1970
- "mark": "_9FdZvq_mark",
1971
- "cardEnd": "_9FdZvq_cardEnd",
1972
- "findingText": "_9FdZvq_findingText",
1968
+ "auditFooter": "_9FdZvq_auditFooter",
1969
+ "risk": "_9FdZvq_risk",
1970
+ "tab": "_9FdZvq_tab",
1971
+ "detailButton": "_9FdZvq_detailButton",
1972
+ "empty": "_9FdZvq_empty",
1973
+ "reviewButton": "_9FdZvq_reviewButton",
1974
+ "notice": "_9FdZvq_notice",
1975
+ "reviewNote": "_9FdZvq_reviewNote",
1976
+ "riskHead": "_9FdZvq_riskHead",
1973
1977
  "titleCount": "_9FdZvq_titleCount",
1974
- "departmentLabel": "_9FdZvq_departmentLabel",
1975
- "emptyIcon": "_9FdZvq_emptyIcon",
1976
- "detailLabel": "_9FdZvq_detailLabel",
1977
- "cardTitle": "_9FdZvq_cardTitle",
1978
+ "cardDesc": "_9FdZvq_cardDesc",
1979
+ "riskSummary": "_9FdZvq_riskSummary",
1980
+ "riskScore": "_9FdZvq_riskScore",
1978
1981
  "findings": "_9FdZvq_findings",
1979
1982
  "reviewError": "_9FdZvq_reviewError",
1980
- "riskScore": "_9FdZvq_riskScore",
1981
- "card": "_9FdZvq_card",
1982
- "finding": "_9FdZvq_finding",
1983
- "detailRow": "_9FdZvq_detailRow"
1983
+ "cardMarks": "_9FdZvq_cardMarks"
1984
1984
  };
1985
1985
  //#endregion
1986
1986
  //#region src/client/SkillPlazaSection.tsx
@@ -2645,19 +2645,19 @@ window.__ModuleLoader__.load({
2645
2645
  document.head.appendChild(tag);
2646
2646
  }
2647
2647
  var WanxiangBrand_module_css_default = {
2648
- "unitTop": "s0HPxG_unitTop",
2648
+ "unitLeft": "s0HPxG_unitLeft",
2649
+ "unit-core": "s0HPxG_unit-core",
2649
2650
  "unit-top": "s0HPxG_unit-top",
2651
+ "unitCore": "s0HPxG_unitCore",
2650
2652
  "unit-right": "s0HPxG_unit-right",
2651
- "unit-core": "s0HPxG_unit-core",
2652
- "unitLeft": "s0HPxG_unitLeft",
2653
+ "mark": "s0HPxG_mark",
2653
2654
  "wordmark": "s0HPxG_wordmark",
2655
+ "unitTop": "s0HPxG_unitTop",
2654
2656
  "harness": "s0HPxG_harness",
2655
- "mark": "s0HPxG_mark",
2656
- "unitCore": "s0HPxG_unitCore",
2657
- "sidebarName": "s0HPxG_sidebarName",
2658
- "unitRight": "s0HPxG_unitRight",
2657
+ "animatedMark": "s0HPxG_animatedMark",
2659
2658
  "unit-left": "s0HPxG_unit-left",
2660
- "animatedMark": "s0HPxG_animatedMark"
2659
+ "unitRight": "s0HPxG_unitRight",
2660
+ "sidebarName": "s0HPxG_sidebarName"
2661
2661
  };
2662
2662
  //#endregion
2663
2663
  //#region src/client/WanxiangBrand.tsx
@@ -3074,72 +3074,72 @@ window.__ModuleLoader__.load({
3074
3074
  document.head.appendChild(tag);
3075
3075
  }
3076
3076
  var PermissionCenterSection_module_css_default = {
3077
- "treeToggle": "PNbOqW_treeToggle",
3078
3077
  "copied": "PNbOqW_copied",
3079
- "detailGrid": "PNbOqW_detailGrid",
3080
3078
  "dialogHint": "PNbOqW_dialogHint",
3081
- "error": "PNbOqW_error",
3082
- "matrixGroup": "PNbOqW_matrixGroup",
3083
- "comboboxOption": "PNbOqW_comboboxOption",
3084
- "title": "PNbOqW_title",
3085
- "notice": "PNbOqW_notice",
3086
- "scopeBadge": "PNbOqW_scopeBadge",
3087
- "comboboxTrigger": "PNbOqW_comboboxTrigger",
3088
3079
  "treeRoot": "PNbOqW_treeRoot",
3089
- "permission": "PNbOqW_permission",
3090
- "matrixModule": "PNbOqW_matrixModule",
3091
- "comboboxCheck": "PNbOqW_comboboxCheck",
3092
- "comboboxSearch": "PNbOqW_comboboxSearch",
3093
- "comboboxOptionActive": "PNbOqW_comboboxOptionActive",
3080
+ "readOnly": "PNbOqW_readOnly",
3081
+ "comboboxEmpty": "PNbOqW_comboboxEmpty",
3082
+ "panelFoot": "PNbOqW_panelFoot",
3083
+ "rowActions": "PNbOqW_rowActions",
3084
+ "dialogFooter": "PNbOqW_dialogFooter",
3085
+ "subtitle": "PNbOqW_subtitle",
3086
+ "head": "PNbOqW_head",
3094
3087
  "demo": "PNbOqW_demo",
3095
- "dialogBody": "PNbOqW_dialogBody",
3096
- "candidates": "PNbOqW_candidates",
3097
- "tabActive": "PNbOqW_tabActive",
3098
- "permDescription": "PNbOqW_permDescription",
3099
- "sectionTitle": "PNbOqW_sectionTitle",
3100
- "departments": "PNbOqW_departments",
3088
+ "muted": "PNbOqW_muted",
3089
+ "department": "PNbOqW_department",
3090
+ "comboboxMenu": "PNbOqW_comboboxMenu",
3091
+ "title": "PNbOqW_title",
3101
3092
  "tabs": "PNbOqW_tabs",
3102
- "subtitle": "PNbOqW_subtitle",
3103
3093
  "panelHead": "PNbOqW_panelHead",
3104
- "dialogFooter": "PNbOqW_dialogFooter",
3105
- "comboboxMenu": "PNbOqW_comboboxMenu",
3106
- "adminTag": "PNbOqW_adminTag",
3107
- "comboboxPlaceholder": "PNbOqW_comboboxPlaceholder",
3108
- "matrix": "PNbOqW_matrix",
3109
- "treeActions": "PNbOqW_treeActions",
3094
+ "treeName": "PNbOqW_treeName",
3095
+ "treeToggle": "PNbOqW_treeToggle",
3096
+ "comboboxTrigger": "PNbOqW_comboboxTrigger",
3110
3097
  "pager": "PNbOqW_pager",
3111
- "muted": "PNbOqW_muted",
3112
- "department": "PNbOqW_department",
3113
- "field": "PNbOqW_field",
3114
- "matrixScroll": "PNbOqW_matrixScroll",
3115
- "treeSpacer": "PNbOqW_treeSpacer",
3098
+ "sectionTitle": "PNbOqW_sectionTitle",
3099
+ "combobox": "PNbOqW_combobox",
3100
+ "permCopy": "PNbOqW_permCopy",
3101
+ "candidate": "PNbOqW_candidate",
3102
+ "treeRow": "PNbOqW_treeRow",
3103
+ "protected": "PNbOqW_protected",
3116
3104
  "table": "PNbOqW_table",
3105
+ "departments": "PNbOqW_departments",
3106
+ "comboboxPlaceholder": "PNbOqW_comboboxPlaceholder",
3107
+ "empty": "PNbOqW_empty",
3108
+ "candidates": "PNbOqW_candidates",
3109
+ "treeActions": "PNbOqW_treeActions",
3110
+ "detailGrid": "PNbOqW_detailGrid",
3111
+ "matrixNote": "PNbOqW_matrixNote",
3117
3112
  "onlyAdmin": "PNbOqW_onlyAdmin",
3118
- "rowActions": "PNbOqW_rowActions",
3119
3113
  "treeChildren": "PNbOqW_treeChildren",
3120
- "page": "PNbOqW_page",
3121
- "waiting": "PNbOqW_waiting",
3122
- "comboboxList": "PNbOqW_comboboxList",
3123
- "panelFoot": "PNbOqW_panelFoot",
3124
- "head": "PNbOqW_head",
3114
+ "error": "PNbOqW_error",
3125
3115
  "tab": "PNbOqW_tab",
3126
- "comboboxEmpty": "PNbOqW_comboboxEmpty",
3127
- "comboboxHint": "PNbOqW_comboboxHint",
3128
3116
  "tableScroll": "PNbOqW_tableScroll",
3129
- "matrixNote": "PNbOqW_matrixNote",
3130
- "combobox": "PNbOqW_combobox",
3131
- "dialog": "PNbOqW_dialog",
3132
- "treeRow": "PNbOqW_treeRow",
3133
- "panel": "PNbOqW_panel",
3134
- "protected": "PNbOqW_protected",
3135
3117
  "matrixPermission": "PNbOqW_matrixPermission",
3136
- "deptAdmins": "PNbOqW_deptAdmins",
3137
- "permCopy": "PNbOqW_permCopy",
3118
+ "comboboxOption": "PNbOqW_comboboxOption",
3119
+ "tabActive": "PNbOqW_tabActive",
3120
+ "comboboxOptionActive": "PNbOqW_comboboxOptionActive",
3121
+ "comboboxHint": "PNbOqW_comboboxHint",
3138
3122
  "search": "PNbOqW_search",
3139
- "empty": "PNbOqW_empty",
3140
- "candidate": "PNbOqW_candidate",
3141
- "treeName": "PNbOqW_treeName",
3142
- "readOnly": "PNbOqW_readOnly"
3123
+ "matrix": "PNbOqW_matrix",
3124
+ "comboboxSearch": "PNbOqW_comboboxSearch",
3125
+ "dialog": "PNbOqW_dialog",
3126
+ "field": "PNbOqW_field",
3127
+ "deptAdmins": "PNbOqW_deptAdmins",
3128
+ "panel": "PNbOqW_panel",
3129
+ "scopeBadge": "PNbOqW_scopeBadge",
3130
+ "waiting": "PNbOqW_waiting",
3131
+ "comboboxCheck": "PNbOqW_comboboxCheck",
3132
+ "dialogBody": "PNbOqW_dialogBody",
3133
+ "adminTag": "PNbOqW_adminTag",
3134
+ "treeSpacer": "PNbOqW_treeSpacer",
3135
+ "permDescription": "PNbOqW_permDescription",
3136
+ "page": "PNbOqW_page",
3137
+ "permission": "PNbOqW_permission",
3138
+ "matrixModule": "PNbOqW_matrixModule",
3139
+ "notice": "PNbOqW_notice",
3140
+ "comboboxList": "PNbOqW_comboboxList",
3141
+ "matrixGroup": "PNbOqW_matrixGroup",
3142
+ "matrixScroll": "PNbOqW_matrixScroll"
3143
3143
  };
3144
3144
  //#endregion
3145
3145
  //#region src/client/combobox.ts
@@ -4568,18 +4568,18 @@ window.__ModuleLoader__.load({
4568
4568
  document.head.appendChild(tag);
4569
4569
  }
4570
4570
  var WorkspaceUpgradePrompt_module_css_default = {
4571
- "sessionRow": "razUfG_sessionRow",
4571
+ "title": "razUfG_title",
4572
4572
  "sessionTitle": "razUfG_sessionTitle",
4573
- "sessionPath": "razUfG_sessionPath",
4574
4573
  "error": "razUfG_error",
4575
- "dialogBody": "razUfG_dialogBody",
4576
4574
  "banner": "razUfG_banner",
4575
+ "sessionRow": "razUfG_sessionRow",
4576
+ "dialogText": "razUfG_dialogText",
4577
+ "sessionPath": "razUfG_sessionPath",
4577
4578
  "body": "razUfG_body",
4579
+ "copy": "razUfG_copy",
4578
4580
  "actions": "razUfG_actions",
4579
- "dialogText": "razUfG_dialogText",
4580
- "title": "razUfG_title",
4581
- "sessionList": "razUfG_sessionList",
4582
- "copy": "razUfG_copy"
4581
+ "dialogBody": "razUfG_dialogBody",
4582
+ "sessionList": "razUfG_sessionList"
4583
4583
  };
4584
4584
  //#endregion
4585
4585
  //#region src/client/WorkspaceUpgradePrompt.tsx
package/lib/index.js CHANGED
@@ -2444,23 +2444,34 @@ const CAPABILITIES = [
2444
2444
  name: "数据查询",
2445
2445
  description: "通过 DataOps 数据查询能力回答业务问题",
2446
2446
  defaultEnabled: true,
2447
+ visible: () => true,
2447
2448
  allowed: () => true
2448
2449
  },
2449
2450
  {
2450
- id: "approval.push",
2451
- name: "审批资源",
2452
- description: "读取/办理万相中台的审批任务,并把状态回写",
2451
+ id: "resource.manage",
2452
+ name: "资源管理",
2453
+ description: "在对话中批量审批资源申请,给用户或角色授予资源访问权限",
2453
2454
  defaultEnabled: true,
2454
- allowed: (scope) => canReview(scope)
2455
+ visible: (scope) => isAdmin(scope),
2456
+ allowed: (scope) => isAdmin(scope)
2455
2457
  },
2456
2458
  {
2457
2459
  id: "admin.manage",
2458
2460
  name: "万相中台管理",
2459
2461
  description: "登录万相中台后台执行管理动作",
2460
2462
  defaultEnabled: true,
2463
+ visible: (scope) => isAdmin(scope),
2461
2464
  allowed: (scope) => isAdmin(scope)
2462
2465
  }
2463
2466
  ];
2467
+ /**
2468
+ * Persisted ids that moved to a new capability id.
2469
+ *
2470
+ * `approval.push` shipped before the capability grew from approval push into resource
2471
+ * approval and authorization. Its stored toggle carries over to `resource.manage`; when both
2472
+ * keys are present the current id wins.
2473
+ */
2474
+ const CAPABILITY_ALIASES = { "approval.push": "resource.manage" };
2464
2475
  /** The ids the catalogue accepts; any other persisted key is a legacy value. */
2465
2476
  const CAPABILITY_IDS = CAPABILITIES.map((capability) => capability.id);
2466
2477
  /**
@@ -2477,6 +2488,7 @@ function migrateCapabilities(value) {
2477
2488
  const stored = value;
2478
2489
  const capabilities = {};
2479
2490
  for (const id of CAPABILITY_IDS) if (typeof stored[id] === "boolean") capabilities[id] = stored[id];
2491
+ for (const [legacyId, id] of Object.entries(CAPABILITY_ALIASES)) if (capabilities[id] === void 0 && typeof stored[legacyId] === "boolean") capabilities[id] = stored[legacyId];
2480
2492
  return capabilities;
2481
2493
  }
2482
2494
  /** Read state; a missing or corrupt file is a safe disabled state. */
@@ -2512,7 +2524,7 @@ async function writeConnectorState(state, path = CONNECTOR_STATE_PATH) {
2512
2524
  }
2513
2525
  /** Build the connector row for one current scope. */
2514
2526
  function buildConnectorView(scope, state) {
2515
- const capabilities = scope === void 0 ? [] : CAPABILITIES.filter((capability) => capability.allowed(scope)).map((capability) => ({
2527
+ const capabilities = scope === void 0 ? [] : CAPABILITIES.filter((capability) => capability.visible(scope) && capability.allowed(scope)).map((capability) => ({
2516
2528
  id: capability.id,
2517
2529
  name: capability.name,
2518
2530
  description: capability.description,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sparkelf/dsh-dataops-managed",
3
- "version": "0.3.27",
3
+ "version": "0.3.28",
4
4
  "description": "DataOps JWT intake and credential-backed MCP tools for managed DeepSeek Harness workspaces.",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
@@ -38,7 +38,7 @@ description: 把表格 / Excel / CSV 建成可问数的数据资源,或把新
38
38
 
39
39
  1. **一次会话一份文件、一个目标资源。** 多文件批量不做。
40
40
  2. **有引用 = 追加;无引用 = 先问,不默认新建。** 用户话里已经说清“新建”或“追加”的,跳过这一问;没说清又没引用,必须先出「新建资源 / 选择已有资源」二选一,不能直接出新建计划。
41
- 3. **计划确认是唯一硬闸。** 用户点「开始导入」之前,绝不调用 `dataops_collect_execute`,绝不建表、绝不写数。预览和计划工具本身不建表,可以放心调用。
41
+ 3. **计划确认是唯一硬闸。** 用户明确回复「确认」「开始吧」「可以」等之前,绝不调用 `dataops_collect_execute`,绝不建表、绝不写数。预览和计划工具本身不建表,可以放心调用。
42
42
  4. **执行走原生工具流。** 不要自己造执行卡、进度卡;工具参数、结果、耗时、失败原因都在原生工具卡里。你只在旁边说人话。
43
43
 
44
44
  ## 三、主流程
@@ -86,43 +86,42 @@ description: 把表格 / Excel / CSV 建成可问数的数据资源,或把新
86
86
  - 新建表:`plan.mode === 'CREATE_TABLE'`,有 `plan.createTable`、`plan.createSql`;
87
87
  - 追加:`plan.mode === 'EXISTING_TABLE'`,有 `plan.mappings`,并在计划里多一行映射摘要(匹配 N 个字段、新增 N 个、N 个类型不兼容)。
88
88
 
89
- ### 5. 出计划 GenUI
89
+ ### 5. 出计划 GenUI(只读预览,语言确认)
90
90
 
91
- 计划是主确认点。必须包含:
91
+ 计划是主确认点,但**只读**:卡上不放 `input` / `textarea` / 下拉 / `submit`,也不放「开始导入」「再调整」按钮。用户看完卡后,直接用自然语言回复「确认」「开始吧」才执行。
92
92
 
93
- - 资源名(AI 起草,可改)
94
- - 目标表(原始层库表名,AI 起草,可改)
95
- - 导入数据源(只有一个源时自动选中并置灰;多个源时让用户选)
96
- - 字段总数,以及哪几个类型拿不准(标黄 / 写“需确认”)
97
- - 去向(新建资源 / 追加到某个已有资源)
98
- - 描述与标签(AI 起草,可改)
99
- - 默认权限(仅自己可见)
93
+ 必须包含(全部纯展示):
100
94
 
101
- 底部只有一组主次按钮:**开始导入**(`submit`,提交资源名/表名/描述)和 **再调整**(`button`)。不要做第二个确认步骤。
95
+ - 资源名(AI 起草)
96
+ - 去向(新建资源 / 追加到「已有资源名」)
97
+ - 目标表(库.表)
98
+ - 导入数据源
99
+ - 行数 / 字段数
100
+ - **表头映射**:原表头 → 目标字段 → 类型;低置信度类型写「需确认」,并用 warning callout 再列一遍(GenUI 表格单元格不支持单独标黄)
101
+ - 默认权限
102
102
 
103
- 计划 GenUI 示例(把 `<...>` 换成真实值):
103
+ 计划 GenUI 示例(把 `<...>` 换成真实值;注意没有任何输入控件):
104
104
 
105
105
  ```dsh-ui
106
- {"title":"导入计划","items":[{"type":"text","size":"body","content":"看了下,明细 sheet 共 <行数> 行、<列数> 列;我先按明细建资源。"},{"type":"card","title":"<资源名>","items":[{"type":"keyvalue","pairs":[{"key":"去向","value":"新建资源"},{"key":"导入数据源","value":"<数据源名>"},{"key":"目标表","value":"<schema.table>"},{"key":"字段","value":"<字段数> 列(<需确认数> 列类型需确认)"},{"key":"默认权限","value":"仅自己可见"}]},{"type":"table","columns":["字段","类型","说明"],"rows":[["<字段1>","<类型>","<说明>"],["<字段2>","<类型>","需确认"]]},{"type":"input","id":"resourceName","label":"资源名","value":"<资源名>"},{"type":"input","id":"tableName","label":"目标表","value":"<目标表>"},{"type":"textarea","id":"description","label":"描述与标签","value":"<描述>"},{"type":"submit","label":"开始导入","action":"dataops_collect_confirm","groups":["resourceName","tableName","description"]},{"type":"button","label":"再调整","tone":"ghost","action":"dataops_collect_adjust"}]}]}
106
+ {"title":"导入计划","items":[{"type":"text","size":"body","content":"看了下,明细 sheet 共 <行数> 行、<列数> 列;我先按明细建资源。"},{"type":"card","title":"<资源名>","items":[{"type":"keyvalue","pairs":[{"key":"资源名","value":"<资源名>"},{"key":"去向","value":"新建资源"},{"key":"目标表","value":"<schema.table>"},{"key":"导入数据源","value":"<数据源名>"},{"key":"行数 / 字段数","value":"<行数> 行 / <字段数> 列"},{"key":"默认权限","value":"仅自己可见"}]},{"type":"table","columns":["原表头","目标字段","类型"],"rows":[["<原表头1>","<目标字段1>","<类型1>"],["<原表头2>","<目标字段2>","⚠️ 需确认"]]},{"type":"callout","tone":"warning","content":"以下类型需要确认:<列出低置信度字段>。"},{"type":"callout","tone":"info","content":"确认无误请直接回复「确认」或「开始吧」;要改表名、类型或资源名,直接说,我会重新出计划,不会执行。"}]}]}
107
107
  ```
108
108
 
109
109
  规则:
110
110
 
111
- - 用户点「再调整」后,只在对话里改参数,然后重新调用 `dataops_collect_plan` / 修改计划,**不要执行**;
112
- - 用户改了参数,重新出计划,不直接执行;
113
- - 确认后,计划折叠成一行“已按此计划执行”的回执,把屏幕让给工具流;
111
+ - 用户提出修改(「表名换成 xxx」「金额按文本存」「资源名改成 xxx」)→ 只在对话里改参数,然后重新调用 `dataops_collect_plan` / 调整计划,**重新出只读计划卡,不要执行**;
112
+ - 用户确认后,计划折叠成一行“已按此计划执行”的回执,把屏幕让给工具流;
114
113
  - 确认后如果要改参数,先停,再出新计划。
115
114
 
116
115
  ### 6. 执行
117
116
 
118
- 用户点「开始导入」后,从 GenUI 的 `fields` 取 `resourceName`、`tableName`、`description`,然后调用:
117
+ 用户明确回复「确认」「开始吧」「可以」后,使用计划卡上展示的资源名/目标表/描述调用:
119
118
 
120
119
  `dataops_collect_execute({ session_id, data_source_urn, mode, target_schema?, target_table?, create_plan_json, mappings_json, resource_name, resource_description, resource_tags?, ai_visible?, access_level? })`
121
120
 
122
121
  - `mode` 用 `plan.mode`;
123
122
  - 新建表:`create_plan_json` 传 `JSON.stringify(plan.createTable)`,`mappings_json` 传 `"[]"`;
124
123
  - 追加:`mappings_json` 传 `JSON.stringify(plan.mappings)`;
125
- - `resource_name` 用用户确认后的资源名;
124
+ - `resource_name` 用计划卡上展示、用户确认过的资源名;
126
125
  - `access_level` 默认 `PRIVATE`;`ai_visible` 默认 `true`。
127
126
 
128
127
  执行期间只说阶段小结,例如: