@godv61/dsh-task-engine 0.30.2 → 0.30.3
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/.sonar-rule-catalog-test.mjs +42 -0
- package/.sonarlint-local-test.mjs +14 -1
- package/README.md +5 -1
- package/docs/manual.html +3 -1
- package/lib/client.js +694 -362
- package/lib/client.js.map +3 -3
- package/lib/controller.d.ts +25 -0
- package/lib/controller.js +49 -3
- package/lib/controller.js.map +1 -1
- package/lib/sonar-rule-catalog.d.ts +28 -0
- package/lib/sonar-rule-catalog.js +82 -0
- package/lib/sonar-rule-catalog.js.map +1 -0
- package/lib/sonarlint-local.d.ts +10 -2
- package/lib/sonarlint-local.js +85 -9
- package/lib/sonarlint-local.js.map +1 -1
- package/package.json +4 -3
package/lib/client.js
CHANGED
|
@@ -4379,7 +4379,22 @@ var sonarAnalyzerStatusSchema = external_exports.object({ profiles: external_exp
|
|
|
4379
4379
|
language: external_exports.string(),
|
|
4380
4380
|
active_rules: external_exports.number(),
|
|
4381
4381
|
analyzer: external_exports.string()
|
|
4382
|
-
})) });
|
|
4382
|
+
})), analyzed_languages: external_exports.array(external_exports.string()), other_profile_count: external_exports.number(), updated_at: external_exports.string().optional() });
|
|
4383
|
+
var sonarRuleUpdateInfoSchema = external_exports.object({ updated_at: external_exports.string().optional() });
|
|
4384
|
+
var sonarRuleRequestSchema = external_exports.object({ path: external_exports.string(), language: external_exports.string().optional() });
|
|
4385
|
+
var sonarRuleViewSchema = external_exports.object({
|
|
4386
|
+
profiles: external_exports.array(external_exports.object({
|
|
4387
|
+
key: external_exports.string(),
|
|
4388
|
+
name: external_exports.string(),
|
|
4389
|
+
language: external_exports.string(),
|
|
4390
|
+
active_rules: external_exports.number(),
|
|
4391
|
+
analyzed: external_exports.boolean()
|
|
4392
|
+
})),
|
|
4393
|
+
analyzed_languages: external_exports.array(external_exports.string()),
|
|
4394
|
+
selected_language: external_exports.string(),
|
|
4395
|
+
rule_total: external_exports.number(),
|
|
4396
|
+
rules: external_exports.array(external_exports.object({ key: external_exports.string(), name: external_exports.string(), language: external_exports.string(), severity: external_exports.string() }))
|
|
4397
|
+
});
|
|
4383
4398
|
var projectSkillProfileRequestSchema = external_exports.object({ path: external_exports.string(), name: external_exports.string() });
|
|
4384
4399
|
var projectSkillProfileWriteRequestSchema = projectSkillProfileRequestSchema.extend({
|
|
4385
4400
|
profile: skillProfileSchema,
|
|
@@ -4460,6 +4475,25 @@ var TYPERT_REMOTE = {
|
|
|
4460
4475
|
}],
|
|
4461
4476
|
result: { mode: "strict", typeSymbol: `${PACKAGE}/types#SonarTokenInfo`, create: () => sonarTokenInfoSchema, schema: sonarTokenInfoSchema }
|
|
4462
4477
|
},
|
|
4478
|
+
{
|
|
4479
|
+
id: `${PACKAGE}#task-engine/describeSonarRuleUpdate`,
|
|
4480
|
+
service: "taskEngineController",
|
|
4481
|
+
namespace: "task-engine",
|
|
4482
|
+
method: "describeSonarRuleUpdate",
|
|
4483
|
+
invocation: { kind: "direct" },
|
|
4484
|
+
parameters: [{
|
|
4485
|
+
name: "path",
|
|
4486
|
+
wire: "path",
|
|
4487
|
+
source: "json",
|
|
4488
|
+
codec: { mode: "strict", typeSymbol: "string", create: () => external_exports.string(), schema: external_exports.string() }
|
|
4489
|
+
}],
|
|
4490
|
+
result: {
|
|
4491
|
+
mode: "strict",
|
|
4492
|
+
typeSymbol: `${PACKAGE}/types#SonarRuleUpdateInfo`,
|
|
4493
|
+
create: () => sonarRuleUpdateInfoSchema,
|
|
4494
|
+
schema: sonarRuleUpdateInfoSchema
|
|
4495
|
+
}
|
|
4496
|
+
},
|
|
4463
4497
|
{
|
|
4464
4498
|
id: `${PACKAGE}#task-engine/prepareSonarAnalyzer`,
|
|
4465
4499
|
service: "taskEngineController",
|
|
@@ -4479,6 +4513,44 @@ var TYPERT_REMOTE = {
|
|
|
4479
4513
|
schema: sonarAnalyzerStatusSchema
|
|
4480
4514
|
}
|
|
4481
4515
|
},
|
|
4516
|
+
{
|
|
4517
|
+
id: `${PACKAGE}#task-engine/updateSonarRules`,
|
|
4518
|
+
service: "taskEngineController",
|
|
4519
|
+
namespace: "task-engine",
|
|
4520
|
+
method: "updateSonarRules",
|
|
4521
|
+
invocation: { kind: "direct" },
|
|
4522
|
+
parameters: [{
|
|
4523
|
+
name: "path",
|
|
4524
|
+
wire: "path",
|
|
4525
|
+
source: "json",
|
|
4526
|
+
codec: { mode: "strict", typeSymbol: "string", create: () => external_exports.string(), schema: external_exports.string() }
|
|
4527
|
+
}],
|
|
4528
|
+
result: {
|
|
4529
|
+
mode: "strict",
|
|
4530
|
+
typeSymbol: `${PACKAGE}/types#SonarAnalyzerStatus`,
|
|
4531
|
+
create: () => sonarAnalyzerStatusSchema,
|
|
4532
|
+
schema: sonarAnalyzerStatusSchema
|
|
4533
|
+
}
|
|
4534
|
+
},
|
|
4535
|
+
{
|
|
4536
|
+
id: `${PACKAGE}#task-engine/readSonarProjectRules`,
|
|
4537
|
+
service: "taskEngineController",
|
|
4538
|
+
namespace: "task-engine",
|
|
4539
|
+
method: "readSonarProjectRules",
|
|
4540
|
+
invocation: { kind: "direct" },
|
|
4541
|
+
parameters: [{
|
|
4542
|
+
name: "request",
|
|
4543
|
+
wire: "request",
|
|
4544
|
+
source: "json",
|
|
4545
|
+
codec: { mode: "strict", typeSymbol: `${PACKAGE}/types#SonarRuleRequest`, create: () => sonarRuleRequestSchema, schema: sonarRuleRequestSchema }
|
|
4546
|
+
}],
|
|
4547
|
+
result: {
|
|
4548
|
+
mode: "strict",
|
|
4549
|
+
typeSymbol: `${PACKAGE}/types#SonarRuleView`,
|
|
4550
|
+
create: () => sonarRuleViewSchema,
|
|
4551
|
+
schema: sonarRuleViewSchema
|
|
4552
|
+
}
|
|
4553
|
+
},
|
|
4482
4554
|
{
|
|
4483
4555
|
id: `${PACKAGE}#task-engine/readProjectSkillProfile`,
|
|
4484
4556
|
service: "taskEngineController",
|
|
@@ -4842,8 +4914,8 @@ var TYPERT_REMOTE = {
|
|
|
4842
4914
|
var remote_default = TYPERT_REMOTE;
|
|
4843
4915
|
|
|
4844
4916
|
// src/client/Workbench.tsx
|
|
4845
|
-
var
|
|
4846
|
-
var
|
|
4917
|
+
var import_react10 = require("react");
|
|
4918
|
+
var import_dsh_client_ui_primitives7 = require("@deepseek-ai/dsh-client-ui-primitives");
|
|
4847
4919
|
|
|
4848
4920
|
// src/client/icons.ts
|
|
4849
4921
|
var primitives = __toESM(require("@deepseek-ai/dsh-client-ui-primitives"), 1);
|
|
@@ -5110,8 +5182,8 @@ var styles = {
|
|
|
5110
5182
|
};
|
|
5111
5183
|
|
|
5112
5184
|
// src/client/AdaptivePanel.tsx
|
|
5113
|
-
var
|
|
5114
|
-
var
|
|
5185
|
+
var import_react4 = require("react");
|
|
5186
|
+
var import_dsh_client_ui_primitives3 = require("@deepseek-ai/dsh-client-ui-primitives");
|
|
5115
5187
|
|
|
5116
5188
|
// src/adaptive.ts
|
|
5117
5189
|
var META_STAGES = {
|
|
@@ -5429,6 +5501,210 @@ function SkillRuleDialog({ skill, profile, rules, description, saveLabel, onSave
|
|
|
5429
5501
|
);
|
|
5430
5502
|
}
|
|
5431
5503
|
|
|
5504
|
+
// src/client/SonarRuleViewer.tsx
|
|
5505
|
+
var import_react3 = require("react");
|
|
5506
|
+
var import_dsh_client_ui_primitives2 = require("@deepseek-ai/dsh-client-ui-primitives");
|
|
5507
|
+
var muted = { fontSize: 12, color: "var(--dsw-alias-label-secondary)" };
|
|
5508
|
+
var outline = {
|
|
5509
|
+
border: "1px solid var(--dsw-alias-border-l2)",
|
|
5510
|
+
borderRadius: 7,
|
|
5511
|
+
background: "var(--dsw-alias-bg-layer-1)",
|
|
5512
|
+
color: "var(--dsw-alias-label-primary)"
|
|
5513
|
+
};
|
|
5514
|
+
function SonarRuleViewer({ workspace, host, remote, onClose }) {
|
|
5515
|
+
const [view, setView] = (0, import_react3.useState)(null);
|
|
5516
|
+
const [busy, setBusy] = (0, import_react3.useState)(true);
|
|
5517
|
+
const [error, setError] = (0, import_react3.useState)("");
|
|
5518
|
+
const [search, setSearch] = (0, import_react3.useState)("");
|
|
5519
|
+
const [showOther, setShowOther] = (0, import_react3.useState)(false);
|
|
5520
|
+
(0, import_react3.useEffect)(() => {
|
|
5521
|
+
let active = true;
|
|
5522
|
+
void remote.readSonarProjectRules({ path: workspace }).then((result) => {
|
|
5523
|
+
if (!active) return;
|
|
5524
|
+
setBusy(false);
|
|
5525
|
+
if (result.ok) setView(result.value);
|
|
5526
|
+
else setError(describeError(result.error));
|
|
5527
|
+
}, (failure) => {
|
|
5528
|
+
if (active) {
|
|
5529
|
+
setBusy(false);
|
|
5530
|
+
setError(describeError(failure));
|
|
5531
|
+
}
|
|
5532
|
+
});
|
|
5533
|
+
return () => {
|
|
5534
|
+
active = false;
|
|
5535
|
+
};
|
|
5536
|
+
}, [remote, workspace]);
|
|
5537
|
+
const selectLanguage = (language) => {
|
|
5538
|
+
if (busy || language === view?.selected_language) return;
|
|
5539
|
+
setBusy(true);
|
|
5540
|
+
setError("");
|
|
5541
|
+
setSearch("");
|
|
5542
|
+
void remote.readSonarProjectRules({ path: workspace, language }).then((result) => {
|
|
5543
|
+
setBusy(false);
|
|
5544
|
+
if (result.ok) setView(result.value);
|
|
5545
|
+
else setError(describeError(result.error));
|
|
5546
|
+
}, (failure) => {
|
|
5547
|
+
setBusy(false);
|
|
5548
|
+
setError(describeError(failure));
|
|
5549
|
+
});
|
|
5550
|
+
};
|
|
5551
|
+
const refreshRules = () => {
|
|
5552
|
+
if (busy) return;
|
|
5553
|
+
setBusy(true);
|
|
5554
|
+
setError("");
|
|
5555
|
+
void remote.readSonarProjectRules({ path: workspace, language: view?.selected_language || void 0 }).then((result) => {
|
|
5556
|
+
setBusy(false);
|
|
5557
|
+
if (result.ok) setView(result.value);
|
|
5558
|
+
else setError(describeError(result.error));
|
|
5559
|
+
}, (failure) => {
|
|
5560
|
+
setBusy(false);
|
|
5561
|
+
setError(describeError(failure));
|
|
5562
|
+
});
|
|
5563
|
+
};
|
|
5564
|
+
const hasAnalyzedProfiles = view?.profiles.some((profile2) => profile2.analyzed) ?? false;
|
|
5565
|
+
const profiles = view?.profiles.filter((profile2) => showOther || !hasAnalyzedProfiles || profile2.analyzed) ?? [];
|
|
5566
|
+
const query = search.trim().toLowerCase();
|
|
5567
|
+
const rules = view?.rules.filter((rule) => !query || `${rule.key} ${rule.name} ${rule.severity}`.toLowerCase().includes(query)) ?? [];
|
|
5568
|
+
const profile = view?.profiles.find((item) => item.language === view.selected_language);
|
|
5569
|
+
const profileUrl = profile ? `${host.replace(/\/$/u, "")}/profiles/show?name=${encodeURIComponent(profile.name)}&language=${encodeURIComponent(profile.language.toLowerCase())}` : "";
|
|
5570
|
+
return (0, import_react3.createElement)(
|
|
5571
|
+
"div",
|
|
5572
|
+
{ role: "presentation", style: {
|
|
5573
|
+
position: "fixed",
|
|
5574
|
+
inset: 0,
|
|
5575
|
+
zIndex: 1e3,
|
|
5576
|
+
background: "rgba(0,0,0,.35)"
|
|
5577
|
+
}, onClick: onClose },
|
|
5578
|
+
(0, import_react3.createElement)(
|
|
5579
|
+
"section",
|
|
5580
|
+
{
|
|
5581
|
+
role: "dialog",
|
|
5582
|
+
"aria-modal": true,
|
|
5583
|
+
"aria-label": "\u67E5\u770B\u5F53\u524D\u9879\u76EE SonarQube \u89C4\u5219",
|
|
5584
|
+
onClick: (event) => event.stopPropagation(),
|
|
5585
|
+
style: {
|
|
5586
|
+
position: "absolute",
|
|
5587
|
+
right: 0,
|
|
5588
|
+
top: 0,
|
|
5589
|
+
bottom: 0,
|
|
5590
|
+
width: "min(760px, 96vw)",
|
|
5591
|
+
padding: 20,
|
|
5592
|
+
boxSizing: "border-box",
|
|
5593
|
+
background: "var(--dsw-alias-bg-layer-1)",
|
|
5594
|
+
color: "var(--dsw-alias-label-primary)",
|
|
5595
|
+
display: "flex",
|
|
5596
|
+
flexDirection: "column",
|
|
5597
|
+
gap: 12,
|
|
5598
|
+
boxShadow: "-8px 0 30px rgba(0,0,0,.14)"
|
|
5599
|
+
}
|
|
5600
|
+
},
|
|
5601
|
+
(0, import_react3.createElement)(
|
|
5602
|
+
"div",
|
|
5603
|
+
{ style: { display: "flex", justifyContent: "space-between", alignItems: "center" } },
|
|
5604
|
+
(0, import_react3.createElement)("strong", null, "\u5F53\u524D\u9879\u76EE\u7684 SonarQube \u89C4\u5219"),
|
|
5605
|
+
(0, import_react3.createElement)(
|
|
5606
|
+
"div",
|
|
5607
|
+
{ style: { display: "flex", gap: 8 } },
|
|
5608
|
+
(0, import_react3.createElement)(
|
|
5609
|
+
import_dsh_client_ui_primitives2.Button,
|
|
5610
|
+
{ variant: "outline", size: "sm", disabled: busy, onClick: refreshRules },
|
|
5611
|
+
busy ? "\u8BFB\u53D6\u4E2D\u2026" : "\u5237\u65B0\u670D\u52A1\u5668\u6E05\u5355"
|
|
5612
|
+
),
|
|
5613
|
+
(0, import_react3.createElement)(import_dsh_client_ui_primitives2.Button, { variant: "outline", size: "sm", onClick: onClose }, "\u5173\u95ED")
|
|
5614
|
+
)
|
|
5615
|
+
),
|
|
5616
|
+
(0, import_react3.createElement)(
|
|
5617
|
+
"p",
|
|
5618
|
+
{ style: { ...muted, margin: 0 } },
|
|
5619
|
+
"\u8FD9\u91CC\u5B9E\u65F6\u8BFB\u53D6\u5F53\u524D\u9879\u76EE Quality Profile \u4E2D\u542F\u7528\u7684\u89C4\u5219\uFF1B\u5237\u65B0\u6E05\u5355\u53EA\u66F4\u65B0\u9875\u9762\u663E\u793A\u3002\u672C\u5730\u5206\u6790\u5668\u4F7F\u7528\u65B0\u89C4\u5219\u8BF7\u8FD4\u56DE\u914D\u7F6E\u9875\u70B9\u51FB\u201C\u66F4\u65B0\u5F53\u524D\u9879\u76EE\u89C4\u5219\u201D\u3002Quality Gate \u662F\u626B\u63CF\u7ED3\u679C\u7684\u901A\u8FC7\u6761\u4EF6\u3002"
|
|
5620
|
+
),
|
|
5621
|
+
error ? (0, import_react3.createElement)("div", { role: "alert", style: { color: "var(--dsw-alias-danger, #b42318)" } }, error) : null,
|
|
5622
|
+
busy && !view ? (0, import_react3.createElement)("div", { style: muted }, "\u6B63\u5728\u8BFB\u53D6\u5F53\u524D\u9879\u76EE\u7684\u8D28\u91CF\u914D\u7F6E\u548C\u89C4\u5219\u2026") : null,
|
|
5623
|
+
view ? (0, import_react3.createElement)(
|
|
5624
|
+
"div",
|
|
5625
|
+
{ style: { display: "flex", flexDirection: "column", gap: 12, minHeight: 0, flex: 1 } },
|
|
5626
|
+
(0, import_react3.createElement)("div", { style: muted }, hasAnalyzedProfiles ? `\u6700\u8FD1\u4E00\u6B21\u670D\u52A1\u7AEF\u5206\u6790\u6D89\u53CA\uFF1A${view.analyzed_languages.join("\u3001")}\u3002\u9ED8\u8BA4\u53EA\u663E\u793A\u8FD9\u4E9B\u8BED\u8A00\u3002` : "\u670D\u52A1\u5668\u5C1A\u672A\u8FD4\u56DE\u53EF\u5339\u914D\u7684\u5DF2\u5206\u6790\u8BED\u8A00\uFF0C\u663E\u793A\u6240\u6709\u751F\u6548\u7684\u8BED\u8A00\u914D\u7F6E\u3002"),
|
|
5627
|
+
hasAnalyzedProfiles && view.profiles.some((item) => !item.analyzed) ? (0, import_react3.createElement)(
|
|
5628
|
+
"label",
|
|
5629
|
+
{ style: muted },
|
|
5630
|
+
(0, import_react3.createElement)("input", {
|
|
5631
|
+
type: "checkbox",
|
|
5632
|
+
checked: showOther,
|
|
5633
|
+
onChange: (event) => setShowOther(event.target.checked)
|
|
5634
|
+
}),
|
|
5635
|
+
` \u663E\u793A\u5176\u5B83\u8BED\u8A00\u914D\u7F6E\uFF08${view.profiles.filter((item) => !item.analyzed).length}\uFF09`
|
|
5636
|
+
) : null,
|
|
5637
|
+
(0, import_react3.createElement)(
|
|
5638
|
+
"div",
|
|
5639
|
+
{ style: { display: "flex", flexWrap: "wrap", gap: 6, maxHeight: 110, overflowY: "auto" } },
|
|
5640
|
+
...profiles.map((item) => (0, import_react3.createElement)(
|
|
5641
|
+
"button",
|
|
5642
|
+
{
|
|
5643
|
+
key: item.key,
|
|
5644
|
+
type: "button",
|
|
5645
|
+
disabled: busy,
|
|
5646
|
+
onClick: () => selectLanguage(item.language),
|
|
5647
|
+
style: {
|
|
5648
|
+
...outline,
|
|
5649
|
+
cursor: "pointer",
|
|
5650
|
+
padding: "5px 9px",
|
|
5651
|
+
fontWeight: item.language === view.selected_language ? 700 : 400,
|
|
5652
|
+
borderColor: item.language === view.selected_language ? "var(--dsw-alias-label-primary)" : void 0
|
|
5653
|
+
}
|
|
5654
|
+
},
|
|
5655
|
+
`${item.language} \xB7 ${item.active_rules}`
|
|
5656
|
+
))
|
|
5657
|
+
),
|
|
5658
|
+
profile ? (0, import_react3.createElement)(
|
|
5659
|
+
"div",
|
|
5660
|
+
{ style: {
|
|
5661
|
+
...outline,
|
|
5662
|
+
padding: 10,
|
|
5663
|
+
display: "flex",
|
|
5664
|
+
flexWrap: "wrap",
|
|
5665
|
+
gap: 8,
|
|
5666
|
+
justifyContent: "space-between",
|
|
5667
|
+
alignItems: "center"
|
|
5668
|
+
} },
|
|
5669
|
+
(0, import_react3.createElement)("span", null, `${profile.language} / ${profile.name}\uFF1A\u670D\u52A1\u5668\u542F\u7528 ${profile.active_rules} \u6761\uFF0C\u5DF2\u8BFB\u53D6 ${view.rule_total} \u6761`),
|
|
5670
|
+
(0, import_react3.createElement)("a", { href: profileUrl, target: "_blank", rel: "noopener noreferrer" }, "\u5728 SonarQube \u67E5\u770B\u914D\u7F6E")
|
|
5671
|
+
) : null,
|
|
5672
|
+
profile && view.rule_total !== profile.active_rules ? (0, import_react3.createElement)("div", { role: "alert" }, "\u670D\u52A1\u7AEF\u914D\u7F6E\u7EDF\u8BA1\u4E0E\u89C4\u5219\u5217\u8868\u6570\u91CF\u4E0D\u4E00\u81F4\uFF0C\u8BF7\u5237\u65B0\u540E\u6838\u5BF9\u3002") : null,
|
|
5673
|
+
(0, import_react3.createElement)("input", {
|
|
5674
|
+
type: "search",
|
|
5675
|
+
"aria-label": "\u641C\u7D22 SonarQube \u89C4\u5219\u7F16\u53F7\u6216\u540D\u79F0",
|
|
5676
|
+
placeholder: "\u641C\u7D22\u89C4\u5219\u7F16\u53F7\u3001\u540D\u79F0\u6216\u4E25\u91CD\u6027",
|
|
5677
|
+
value: search,
|
|
5678
|
+
onChange: (event) => setSearch(event.target.value),
|
|
5679
|
+
style: { ...outline, padding: "8px 10px", width: "100%", boxSizing: "border-box" }
|
|
5680
|
+
}),
|
|
5681
|
+
(0, import_react3.createElement)("div", { style: muted }, busy ? "\u6B63\u5728\u5207\u6362\u8BED\u8A00\u2026" : `\u663E\u793A ${rules.length} / ${view.rule_total} \u6761\u89C4\u5219`),
|
|
5682
|
+
(0, import_react3.createElement)(
|
|
5683
|
+
"div",
|
|
5684
|
+
{ style: { flex: 1, minHeight: 0, overflowY: "auto", display: "flex", flexDirection: "column", gap: 6 } },
|
|
5685
|
+
...rules.map((rule) => (0, import_react3.createElement)(
|
|
5686
|
+
"a",
|
|
5687
|
+
{
|
|
5688
|
+
key: rule.key,
|
|
5689
|
+
href: `${host.replace(/\/$/u, "")}/coding_rules?selected=${encodeURIComponent(rule.key)}`,
|
|
5690
|
+
target: "_blank",
|
|
5691
|
+
rel: "noopener noreferrer",
|
|
5692
|
+
style: { ...outline, padding: "9px 11px", textDecoration: "none" }
|
|
5693
|
+
},
|
|
5694
|
+
(0, import_react3.createElement)("strong", null, rule.name),
|
|
5695
|
+
(0, import_react3.createElement)("div", { style: muted }, `${rule.key} \xB7 ${rule.severity}`)
|
|
5696
|
+
))
|
|
5697
|
+
),
|
|
5698
|
+
(0, import_react3.createElement)(
|
|
5699
|
+
"p",
|
|
5700
|
+
{ style: { ...muted, margin: 0 } },
|
|
5701
|
+
"\u672C\u5730\u5206\u6790\u5668\u72B6\u6001\u6309\u8BED\u8A00\u5224\u65AD\uFF1B\u5373\u4F7F\u663E\u793A SYNCED\uFF0C\u4E5F\u4E0D\u4FDD\u8BC1\u8FD9\u91CC\u6BCF\u6761\u670D\u52A1\u7AEF\u89C4\u5219\u90FD\u80FD\u5728\u63D0\u4EA4\u524D\u672C\u5730\u6267\u884C\u3002"
|
|
5702
|
+
)
|
|
5703
|
+
) : null
|
|
5704
|
+
)
|
|
5705
|
+
);
|
|
5706
|
+
}
|
|
5707
|
+
|
|
5432
5708
|
// src/client/AdaptivePanel.tsx
|
|
5433
5709
|
var card = {
|
|
5434
5710
|
border: "1px solid var(--dsw-alias-border-l2)",
|
|
@@ -5454,33 +5730,42 @@ function effectiveSource(entries, name) {
|
|
|
5454
5730
|
return entries.filter((entry) => entry.name === name).sort((a, b) => SOURCE_ORDER.indexOf(a.source) - SOURCE_ORDER.indexOf(b.source))[0]?.sourceLabel ?? "\u7F3A\u5931";
|
|
5455
5731
|
}
|
|
5456
5732
|
function AdaptivePanel({ workspace, remote, onOpenInit }) {
|
|
5457
|
-
const [view, setView] = (0,
|
|
5458
|
-
const [draft, setDraft] = (0,
|
|
5459
|
-
const [skills, setSkills] = (0,
|
|
5460
|
-
const [rules, setRules] = (0,
|
|
5461
|
-
const [selected, setSelected] = (0,
|
|
5462
|
-
const [activeMeta, setActiveMeta] = (0,
|
|
5463
|
-
const [metaQuery, setMetaQuery] = (0,
|
|
5464
|
-
const [skillQuery, setSkillQuery] = (0,
|
|
5465
|
-
const [loading, setLoading] = (0,
|
|
5466
|
-
const [saving, setSaving] = (0,
|
|
5467
|
-
const [dirty, setDirty] = (0,
|
|
5468
|
-
const [message, setMessage] = (0,
|
|
5469
|
-
const [sonarToken, setSonarToken] = (0,
|
|
5470
|
-
const [tokenInfo, setTokenInfo] = (0,
|
|
5471
|
-
const [tokenBusy, setTokenBusy] = (0,
|
|
5472
|
-
const [
|
|
5473
|
-
const [analyzerProfiles, setAnalyzerProfiles] = (0,
|
|
5474
|
-
const
|
|
5733
|
+
const [view, setView] = (0, import_react4.useState)(null);
|
|
5734
|
+
const [draft, setDraft] = (0, import_react4.useState)({});
|
|
5735
|
+
const [skills, setSkills] = (0, import_react4.useState)([]);
|
|
5736
|
+
const [rules, setRules] = (0, import_react4.useState)([]);
|
|
5737
|
+
const [selected, setSelected] = (0, import_react4.useState)(null);
|
|
5738
|
+
const [activeMeta, setActiveMeta] = (0, import_react4.useState)("requirements-analysis");
|
|
5739
|
+
const [metaQuery, setMetaQuery] = (0, import_react4.useState)("");
|
|
5740
|
+
const [skillQuery, setSkillQuery] = (0, import_react4.useState)("");
|
|
5741
|
+
const [loading, setLoading] = (0, import_react4.useState)(true);
|
|
5742
|
+
const [saving, setSaving] = (0, import_react4.useState)(false);
|
|
5743
|
+
const [dirty, setDirty] = (0, import_react4.useState)(false);
|
|
5744
|
+
const [message, setMessage] = (0, import_react4.useState)("");
|
|
5745
|
+
const [sonarToken, setSonarToken] = (0, import_react4.useState)("");
|
|
5746
|
+
const [tokenInfo, setTokenInfo] = (0, import_react4.useState)(null);
|
|
5747
|
+
const [tokenBusy, setTokenBusy] = (0, import_react4.useState)(false);
|
|
5748
|
+
const [analyzerOperation, setAnalyzerOperation] = (0, import_react4.useState)("");
|
|
5749
|
+
const [analyzerProfiles, setAnalyzerProfiles] = (0, import_react4.useState)(null);
|
|
5750
|
+
const [analyzerOtherCount, setAnalyzerOtherCount] = (0, import_react4.useState)(0);
|
|
5751
|
+
const [analyzerUpdatedAt, setAnalyzerUpdatedAt] = (0, import_react4.useState)("");
|
|
5752
|
+
const [ruleViewerOpen, setRuleViewerOpen] = (0, import_react4.useState)(false);
|
|
5753
|
+
const refresh = (0, import_react4.useCallback)(() => {
|
|
5475
5754
|
setLoading(true);
|
|
5476
5755
|
setMessage("");
|
|
5477
5756
|
setSonarToken("");
|
|
5478
5757
|
setTokenInfo(null);
|
|
5479
5758
|
setAnalyzerProfiles(null);
|
|
5759
|
+
setAnalyzerOtherCount(0);
|
|
5760
|
+
setAnalyzerUpdatedAt("");
|
|
5480
5761
|
void remote.describeSonarToken(workspace).then((result) => {
|
|
5481
5762
|
if (result.ok) setTokenInfo(result.value);
|
|
5482
5763
|
}, () => {
|
|
5483
5764
|
});
|
|
5765
|
+
void remote.describeSonarRuleUpdate(workspace).then((result) => {
|
|
5766
|
+
if (result.ok) setAnalyzerUpdatedAt(result.value.updated_at ?? "");
|
|
5767
|
+
}, () => {
|
|
5768
|
+
});
|
|
5484
5769
|
void Promise.all([remote.readAdaptive(workspace), remote.listSkills(workspace), remote.listRules(workspace)]).then(([config, catalog, ruleCatalog]) => {
|
|
5485
5770
|
setLoading(false);
|
|
5486
5771
|
if (!config.ok) {
|
|
@@ -5505,7 +5790,7 @@ function AdaptivePanel({ workspace, remote, onOpenInit }) {
|
|
|
5505
5790
|
setMessage("\u8BFB\u53D6\u5931\u8D25\uFF1A" + describeError(error));
|
|
5506
5791
|
});
|
|
5507
5792
|
}, [remote, workspace]);
|
|
5508
|
-
(0,
|
|
5793
|
+
(0, import_react4.useEffect)(() => {
|
|
5509
5794
|
refresh();
|
|
5510
5795
|
}, [refresh]);
|
|
5511
5796
|
const update = (config) => {
|
|
@@ -5670,22 +5955,46 @@ function AdaptivePanel({ workspace, remote, onOpenInit }) {
|
|
|
5670
5955
|
setMessage("\u8BF7\u5148\u4FDD\u5B58 SonarQube \u5BA1\u6838\u914D\u7F6E\uFF0C\u518D\u68C0\u67E5\u672C\u5730\u5206\u6790\u5668\u3002");
|
|
5671
5956
|
return;
|
|
5672
5957
|
}
|
|
5673
|
-
|
|
5958
|
+
setAnalyzerOperation("prepare");
|
|
5674
5959
|
setAnalyzerProfiles(null);
|
|
5675
5960
|
setMessage("\u6B63\u5728\u5B89\u88C5\u6216\u68C0\u67E5\u672C\u5730\u5206\u6790\u5668\uFF0C\u5E76\u8FDE\u63A5\u5F53\u524D\u9879\u76EE\u7684 SonarQube\uFF1B\u9996\u6B21\u4E0B\u8F7D\u53EF\u80FD\u9700\u8981\u8F83\u957F\u65F6\u95F4\u3002");
|
|
5676
5961
|
void remote.prepareSonarAnalyzer(workspace).then((result) => {
|
|
5677
|
-
|
|
5962
|
+
setAnalyzerOperation("");
|
|
5678
5963
|
if (!result.ok) {
|
|
5679
5964
|
setMessage("\u672C\u5730\u5206\u6790\u5668\u68C0\u67E5\u5931\u8D25\uFF1A" + describeError(result.error));
|
|
5680
5965
|
return;
|
|
5681
5966
|
}
|
|
5682
5967
|
setAnalyzerProfiles(result.value.profiles);
|
|
5683
|
-
|
|
5968
|
+
setAnalyzerOtherCount(result.value.other_profile_count);
|
|
5969
|
+
setAnalyzerUpdatedAt(result.value.updated_at ?? "");
|
|
5970
|
+
setMessage("\u5DF2\u8FDE\u63A5 SonarQube\uFF1B\u4E0B\u65B9\u4F18\u5148\u663E\u793A\u672C\u9879\u76EE\u6700\u8FD1\u4E00\u6B21\u5206\u6790\u6D89\u53CA\u7684\u8BED\u8A00\u3002");
|
|
5684
5971
|
}, (error) => {
|
|
5685
|
-
|
|
5972
|
+
setAnalyzerOperation("");
|
|
5686
5973
|
setMessage("\u672C\u5730\u5206\u6790\u5668\u68C0\u67E5\u5931\u8D25\uFF1A" + describeError(error));
|
|
5687
5974
|
});
|
|
5688
5975
|
};
|
|
5976
|
+
const updateRules = () => {
|
|
5977
|
+
if (dirty) {
|
|
5978
|
+
setMessage("\u8BF7\u5148\u4FDD\u5B58 SonarQube \u5BA1\u6838\u914D\u7F6E\uFF0C\u518D\u66F4\u65B0\u89C4\u5219\u3002");
|
|
5979
|
+
return;
|
|
5980
|
+
}
|
|
5981
|
+
setAnalyzerOperation("update");
|
|
5982
|
+
setMessage("\u6B63\u5728\u4ECE\u5F53\u524D SonarQube \u9879\u76EE\u91CD\u65B0\u540C\u6B65\u89C4\u5219\uFF1B\u5B8C\u6210\u540E\u540E\u7EED\u5BA1\u6838\u4F1A\u4F7F\u7528\u65B0\u914D\u7F6E\u3002");
|
|
5983
|
+
void remote.updateSonarRules(workspace).then((result) => {
|
|
5984
|
+
setAnalyzerOperation("");
|
|
5985
|
+
if (!result.ok) {
|
|
5986
|
+
setMessage("\u66F4\u65B0\u89C4\u5219\u5931\u8D25\uFF1A" + describeError(result.error));
|
|
5987
|
+
return;
|
|
5988
|
+
}
|
|
5989
|
+
setAnalyzerProfiles(result.value.profiles);
|
|
5990
|
+
setAnalyzerOtherCount(result.value.other_profile_count);
|
|
5991
|
+
setAnalyzerUpdatedAt(result.value.updated_at ?? "");
|
|
5992
|
+
setMessage("\u5F53\u524D\u9879\u76EE\u7684\u672C\u5730\u89C4\u5219\u5DF2\u66F4\u65B0\uFF1B\u540E\u7EED\u4EE3\u7801\u5BA1\u6838\u5C06\u4F7F\u7528\u8FD9\u6B21\u540C\u6B65\u7684\u914D\u7F6E\u3002");
|
|
5993
|
+
}, (error) => {
|
|
5994
|
+
setAnalyzerOperation("");
|
|
5995
|
+
setMessage("\u66F4\u65B0\u89C4\u5219\u5931\u8D25\uFF1A" + describeError(error));
|
|
5996
|
+
});
|
|
5997
|
+
};
|
|
5689
5998
|
const candidates = [...new Set(skills.map((skill) => skill.name))].filter((name) => name !== "eng-delivery" && !(name in META_STAGES)).sort();
|
|
5690
5999
|
const stageQuery = metaQuery.trim().toLowerCase();
|
|
5691
6000
|
const visibleStages = Object.entries(META_STAGES).filter(([id, stage]) => !stageQuery || `${id} ${stage} ${(draft.meta_bindings?.[id] ?? []).join(" ")}`.toLowerCase().includes(stageQuery));
|
|
@@ -5694,34 +6003,34 @@ function AdaptivePanel({ workspace, remote, onOpenInit }) {
|
|
|
5694
6003
|
const candidateQuery = skillQuery.trim().toLowerCase();
|
|
5695
6004
|
const matchingCandidates = candidates.filter((name) => !mounted.includes(name) && (!candidateQuery || name.toLowerCase().includes(candidateQuery) || skills.some((skill) => skill.name === name && `${skill.description} ${skill.sourceLabel}`.toLowerCase().includes(candidateQuery))));
|
|
5696
6005
|
const sonar = draft.sonar ?? {};
|
|
5697
|
-
return (0,
|
|
6006
|
+
return (0, import_react4.createElement)(
|
|
5698
6007
|
"div",
|
|
5699
6008
|
{ style: { ...styles.section, display: "flex", flexDirection: "column", gap: 16 } },
|
|
5700
|
-
(0,
|
|
6009
|
+
(0, import_react4.createElement)(
|
|
5701
6010
|
"div",
|
|
5702
6011
|
{ style: row },
|
|
5703
|
-
(0,
|
|
5704
|
-
(0,
|
|
6012
|
+
(0, import_react4.createElement)(import_dsh_client_ui_primitives3.Button, { variant: "outline", size: "sm", onClick: onOpenInit }, "\u521D\u59CB\u5316\u9879\u76EE Skill / Rule"),
|
|
6013
|
+
(0, import_react4.createElement)("span", { style: label }, "\u626B\u63CF\u9879\u76EE\u540E\u5148\u9884\u89C8\uFF0C\u786E\u8BA4\u540E\u5199\u5165\u3002")
|
|
5705
6014
|
),
|
|
5706
|
-
(0,
|
|
6015
|
+
(0, import_react4.createElement)(
|
|
5707
6016
|
"details",
|
|
5708
6017
|
{ style: card },
|
|
5709
|
-
(0,
|
|
5710
|
-
(0,
|
|
5711
|
-
(0,
|
|
6018
|
+
(0, import_react4.createElement)("summary", { style: { cursor: "pointer", fontWeight: 600 } }, "\u6309\u9700\u6C42\u9009\u62E9\u6D41\u7A0B \xB7 \u67E5\u770B\u56DB\u6863\u9636\u6BB5"),
|
|
6019
|
+
(0, import_react4.createElement)("span", { style: label }, "\u6BCF\u4E2A\u4EFB\u52A1\u5355\u72EC\u9009\u62E9\u590D\u6742\u5EA6\u5E76\u51BB\u7ED3\u9636\u6BB5\u548C\u6280\u80FD\uFF1B\u4E0D\u540C\u4F1A\u8BDD\u53EF\u8D70\u4E0D\u540C\u6D41\u7A0B\u3002"),
|
|
6020
|
+
(0, import_react4.createElement)("div", { style: grid }, ...(view?.grades ?? []).map((grade) => (0, import_react4.createElement)(
|
|
5712
6021
|
"div",
|
|
5713
6022
|
{ key: grade.id, style: { ...card, gap: 5 } },
|
|
5714
|
-
(0,
|
|
5715
|
-
(0,
|
|
5716
|
-
(0,
|
|
6023
|
+
(0, import_react4.createElement)("strong", null, `${grade.label} \xB7 ${grade.id}`),
|
|
6024
|
+
(0, import_react4.createElement)("span", { style: label }, grade.guidance),
|
|
6025
|
+
(0, import_react4.createElement)("span", { style: { fontSize: 12 } }, grade.stages.join(" \u2192 "))
|
|
5717
6026
|
)))
|
|
5718
6027
|
),
|
|
5719
|
-
(0,
|
|
6028
|
+
(0, import_react4.createElement)(
|
|
5720
6029
|
"div",
|
|
5721
6030
|
{ style: card },
|
|
5722
|
-
(0,
|
|
5723
|
-
(0,
|
|
5724
|
-
(0,
|
|
6031
|
+
(0, import_react4.createElement)("strong", null, "\u5143\u6280\u80FD\u4E0E\u9879\u76EE\u6280\u80FD"),
|
|
6032
|
+
(0, import_react4.createElement)("span", { style: label }, "\u6BCF\u4E2A\u5143\u6280\u80FD\u59CB\u7EC8\u52A0\u8F7D\u540C\u540D\u6838\u5FC3 Skill\uFF1B\u540C\u540D\u9879\u76EE Skill \u8986\u76D6\u7528\u6237\u4E0E\u5185\u7F6E\u7248\u672C\u3002\u9644\u52A0\u6280\u80FD\u6309\u540D\u79F0\u6302\u8F7D\uFF0C\u5B9E\u9645\u6765\u6E90\u5728\u4EFB\u52A1\u521B\u5EFA\u65F6\u89E3\u6790\u3002Rule \u4FDD\u5B58\u5728\u5BF9\u5E94 Skill \u7684 profile.json\u3002"),
|
|
6033
|
+
(0, import_react4.createElement)("input", {
|
|
5725
6034
|
className: "te-input",
|
|
5726
6035
|
type: "search",
|
|
5727
6036
|
"aria-label": "\u641C\u7D22\u5143\u6280\u80FD\u6216\u5DF2\u6302\u8F7D\u6280\u80FD",
|
|
@@ -5729,13 +6038,13 @@ function AdaptivePanel({ workspace, remote, onOpenInit }) {
|
|
|
5729
6038
|
value: metaQuery,
|
|
5730
6039
|
onChange: (event) => setMetaQuery(event.target.value)
|
|
5731
6040
|
}),
|
|
5732
|
-
(0,
|
|
6041
|
+
(0, import_react4.createElement)(
|
|
5733
6042
|
"div",
|
|
5734
6043
|
{ className: "te-meta-layout" },
|
|
5735
|
-
(0,
|
|
6044
|
+
(0, import_react4.createElement)(
|
|
5736
6045
|
"nav",
|
|
5737
6046
|
{ className: "te-meta-nav", "aria-label": "\u5143\u6280\u80FD\u9636\u6BB5" },
|
|
5738
|
-
...visibleStages.map(([id, stage]) => (0,
|
|
6047
|
+
...visibleStages.map(([id, stage]) => (0, import_react4.createElement)(
|
|
5739
6048
|
"button",
|
|
5740
6049
|
{
|
|
5741
6050
|
key: id,
|
|
@@ -5747,45 +6056,45 @@ function AdaptivePanel({ workspace, remote, onOpenInit }) {
|
|
|
5747
6056
|
}
|
|
5748
6057
|
},
|
|
5749
6058
|
stage,
|
|
5750
|
-
(0,
|
|
6059
|
+
(0, import_react4.createElement)("small", null, `\u5DF2\u6302\u8F7D ${(draft.meta_bindings?.[id] ?? []).length} \u4E2A Skill`)
|
|
5751
6060
|
)),
|
|
5752
|
-
visibleStages.length === 0 ? (0,
|
|
6061
|
+
visibleStages.length === 0 ? (0, import_react4.createElement)("span", { style: label }, "\u6CA1\u6709\u5339\u914D\u7684\u9636\u6BB5\u3002") : null
|
|
5753
6062
|
),
|
|
5754
|
-
visibleMeta ? (0,
|
|
6063
|
+
visibleMeta ? (0, import_react4.createElement)(
|
|
5755
6064
|
"div",
|
|
5756
6065
|
{ className: "te-meta-detail" },
|
|
5757
|
-
(0,
|
|
6066
|
+
(0, import_react4.createElement)(
|
|
5758
6067
|
"div",
|
|
5759
6068
|
null,
|
|
5760
|
-
(0,
|
|
5761
|
-
(0,
|
|
6069
|
+
(0, import_react4.createElement)("strong", null, META_STAGES[visibleMeta]),
|
|
6070
|
+
(0, import_react4.createElement)("div", { style: label }, "\u6838\u5FC3 Skill \u4E0E\u9644\u52A0 Skill \u7684 Rule \u5206\u522B\u4FDD\u5B58\u5728\u5404\u81EA\u7684\u914D\u7F6E\u4E2D\u3002")
|
|
5762
6071
|
),
|
|
5763
|
-
(0,
|
|
6072
|
+
(0, import_react4.createElement)(
|
|
5764
6073
|
"div",
|
|
5765
6074
|
{ className: "te-meta-skill-row" },
|
|
5766
|
-
(0,
|
|
6075
|
+
(0, import_react4.createElement)(
|
|
5767
6076
|
"span",
|
|
5768
6077
|
null,
|
|
5769
|
-
(0,
|
|
5770
|
-
(0,
|
|
6078
|
+
(0, import_react4.createElement)("strong", null, visibleMeta),
|
|
6079
|
+
(0, import_react4.createElement)("small", { style: { ...label, display: "block" } }, `\u6838\u5FC3 \xB7 ${effectiveSource(skills, visibleMeta)}`)
|
|
5771
6080
|
),
|
|
5772
|
-
(0,
|
|
6081
|
+
(0, import_react4.createElement)(import_dsh_client_ui_primitives3.Button, { variant: "outline", size: "sm", onClick: () => openRules(visibleMeta) }, "\u914D\u7F6E Rule")
|
|
5773
6082
|
),
|
|
5774
|
-
(0,
|
|
5775
|
-
...mounted.map((name) => (0,
|
|
6083
|
+
(0, import_react4.createElement)("strong", { style: { fontSize: 13 } }, `\u9644\u52A0 Skill \xB7 ${mounted.length}`),
|
|
6084
|
+
...mounted.map((name) => (0, import_react4.createElement)(
|
|
5776
6085
|
"div",
|
|
5777
6086
|
{ key: name, className: "te-meta-skill-row" },
|
|
5778
|
-
(0,
|
|
6087
|
+
(0, import_react4.createElement)(
|
|
5779
6088
|
"span",
|
|
5780
6089
|
null,
|
|
5781
|
-
(0,
|
|
5782
|
-
(0,
|
|
6090
|
+
(0, import_react4.createElement)("strong", null, name),
|
|
6091
|
+
(0, import_react4.createElement)("small", { style: { ...label, display: "block" } }, effectiveSource(skills, name))
|
|
5783
6092
|
),
|
|
5784
|
-
(0,
|
|
6093
|
+
(0, import_react4.createElement)(
|
|
5785
6094
|
"div",
|
|
5786
6095
|
{ className: "te-meta-skill-actions" },
|
|
5787
|
-
(0,
|
|
5788
|
-
(0,
|
|
6096
|
+
(0, import_react4.createElement)(import_dsh_client_ui_primitives3.Button, { variant: "outline", size: "sm", onClick: () => openRules(name) }, "\u914D\u7F6E Rule"),
|
|
6097
|
+
(0, import_react4.createElement)("button", {
|
|
5789
6098
|
type: "button",
|
|
5790
6099
|
className: "te-transfer-remove",
|
|
5791
6100
|
"aria-label": `\u4ECE${META_STAGES[visibleMeta]}\u79FB\u9664 ${name}`,
|
|
@@ -5793,12 +6102,12 @@ function AdaptivePanel({ workspace, remote, onOpenInit }) {
|
|
|
5793
6102
|
}, "\xD7")
|
|
5794
6103
|
)
|
|
5795
6104
|
)),
|
|
5796
|
-
mounted.length === 0 ? (0,
|
|
5797
|
-
(0,
|
|
6105
|
+
mounted.length === 0 ? (0, import_react4.createElement)("span", { style: label }, "\u5C1A\u672A\u6302\u8F7D\u9644\u52A0 Skill\u3002") : null,
|
|
6106
|
+
(0, import_react4.createElement)(
|
|
5798
6107
|
"div",
|
|
5799
6108
|
{ style: { display: "flex", flexDirection: "column", gap: 7 } },
|
|
5800
|
-
(0,
|
|
5801
|
-
(0,
|
|
6109
|
+
(0, import_react4.createElement)("strong", { style: { fontSize: 13 } }, "\u6302\u8F7D\u9644\u52A0 Skill"),
|
|
6110
|
+
(0, import_react4.createElement)("input", {
|
|
5802
6111
|
className: "te-input",
|
|
5803
6112
|
type: "search",
|
|
5804
6113
|
"aria-label": "\u641C\u7D22\u53EF\u6302\u8F7D\u6280\u80FD",
|
|
@@ -5806,38 +6115,38 @@ function AdaptivePanel({ workspace, remote, onOpenInit }) {
|
|
|
5806
6115
|
value: skillQuery,
|
|
5807
6116
|
onChange: (event) => setSkillQuery(event.target.value)
|
|
5808
6117
|
}),
|
|
5809
|
-
(0,
|
|
5810
|
-
(0,
|
|
6118
|
+
(0, import_react4.createElement)("span", { style: label }, `\u53EF\u9009 ${matchingCandidates.length} \u4E2A${matchingCandidates.length > 12 ? "\uFF0C\u5148\u663E\u793A\u524D 12 \u4E2A\uFF1B\u53EF\u7EE7\u7EED\u8F93\u5165\u7F29\u5C0F\u8303\u56F4" : ""}`),
|
|
6119
|
+
(0, import_react4.createElement)(
|
|
5811
6120
|
"div",
|
|
5812
6121
|
{ className: "te-meta-candidates" },
|
|
5813
|
-
...matchingCandidates.slice(0, 12).map((name) => (0,
|
|
6122
|
+
...matchingCandidates.slice(0, 12).map((name) => (0, import_react4.createElement)(
|
|
5814
6123
|
"div",
|
|
5815
6124
|
{ key: name, className: "te-meta-candidate" },
|
|
5816
|
-
(0,
|
|
6125
|
+
(0, import_react4.createElement)(
|
|
5817
6126
|
"span",
|
|
5818
6127
|
null,
|
|
5819
|
-
(0,
|
|
5820
|
-
(0,
|
|
6128
|
+
(0, import_react4.createElement)("strong", null, name),
|
|
6129
|
+
(0, import_react4.createElement)("small", null, effectiveSource(skills, name))
|
|
5821
6130
|
),
|
|
5822
|
-
(0,
|
|
6131
|
+
(0, import_react4.createElement)(import_dsh_client_ui_primitives3.Button, { variant: "outline", size: "sm", onClick: () => addSkill(visibleMeta, name) }, "\u6302\u8F7D")
|
|
5823
6132
|
)),
|
|
5824
|
-
matchingCandidates.length === 0 ? (0,
|
|
6133
|
+
matchingCandidates.length === 0 ? (0, import_react4.createElement)("span", { style: label }, "\u6CA1\u6709\u5339\u914D\u7684 Skill\u3002") : null
|
|
5825
6134
|
)
|
|
5826
6135
|
)
|
|
5827
6136
|
) : null
|
|
5828
6137
|
)
|
|
5829
6138
|
),
|
|
5830
|
-
(0,
|
|
6139
|
+
(0, import_react4.createElement)(
|
|
5831
6140
|
"div",
|
|
5832
6141
|
{ style: card },
|
|
5833
|
-
(0,
|
|
6142
|
+
(0, import_react4.createElement)(
|
|
5834
6143
|
"div",
|
|
5835
6144
|
{ style: row },
|
|
5836
|
-
(0,
|
|
5837
|
-
(0,
|
|
6145
|
+
(0, import_react4.createElement)("strong", null, "SonarQube \u5BA1\u6838"),
|
|
6146
|
+
(0, import_react4.createElement)(
|
|
5838
6147
|
"label",
|
|
5839
6148
|
{ style: row },
|
|
5840
|
-
(0,
|
|
6149
|
+
(0, import_react4.createElement)("input", {
|
|
5841
6150
|
type: "checkbox",
|
|
5842
6151
|
checked: sonar.enabled === true,
|
|
5843
6152
|
onChange: (event) => updateSonar({ enabled: event.target.checked })
|
|
@@ -5845,49 +6154,49 @@ function AdaptivePanel({ workspace, remote, onOpenInit }) {
|
|
|
5845
6154
|
"\u542F\u7528\uFF08\u4EC5\u4EE3\u7801\u5BA1\u6838\u9636\u6BB5\uFF09"
|
|
5846
6155
|
)
|
|
5847
6156
|
),
|
|
5848
|
-
(0,
|
|
5849
|
-
sonar.enabled === true && sonar.source && sonar.source !== "ide-local" ? (0,
|
|
6157
|
+
(0, import_react4.createElement)("span", { style: label }, "\u6D4B\u8BD5\u901A\u8FC7\u540E\uFF0C\u4EE3\u7801\u5BA1\u6838\u5143\u6280\u80FD\u4F1A\u68C0\u67E5\u63D0\u4EA4\u524D\u7684\u65B0\u589E\u4EE3\u7801\u3002\u9996\u6B21\u5BA1\u6838\u81EA\u52A8\u51C6\u5907\u672C\u5730\u5206\u6790\u7EC4\u4EF6\uFF0C\u5E76\u4ECE SonarQube \u540C\u6B65\u5F53\u524D\u9879\u76EE\u7684\u89C4\u5219\u3002Token \u6309\u9879\u76EE\u4FDD\u5B58\u5728\u672C\u673A DSH \u51ED\u636E\u5B58\u50A8\u3002"),
|
|
6158
|
+
sonar.enabled === true && sonar.source && sonar.source !== "ide-local" ? (0, import_react4.createElement)(
|
|
5850
6159
|
"span",
|
|
5851
6160
|
{ style: label },
|
|
5852
6161
|
"\u6B64\u9879\u76EE\u4ECD\u662F\u65E7\u5BA1\u6838\u6A21\u5F0F\uFF1B\u4FDD\u5B58\u914D\u7F6E\u540E\uFF0C\u65B0\u4EFB\u52A1\u5C06\u4F7F\u7528\u63D0\u4EA4\u524D\u672C\u5730\u5BA1\u6838\u3002\u5DF2\u6709\u4EFB\u52A1\u6309\u521B\u5EFA\u65F6\u7684\u914D\u7F6E\u7EE7\u7EED\u3002"
|
|
5853
6162
|
) : null,
|
|
5854
|
-
sonar.enabled === true ? (0,
|
|
6163
|
+
sonar.enabled === true ? (0, import_react4.createElement)(
|
|
5855
6164
|
"div",
|
|
5856
6165
|
{ style: grid },
|
|
5857
|
-
...[["host_url", "\u670D\u52A1\u5730\u5740", "https://sonar.example"], ["project_key", "\u9879\u76EE Key", "my-project"]].map(([key, title, placeholder]) => (0,
|
|
6166
|
+
...[["host_url", "\u670D\u52A1\u5730\u5740", "https://sonar.example"], ["project_key", "\u9879\u76EE Key", "my-project"]].map(([key, title, placeholder]) => (0, import_react4.createElement)(
|
|
5858
6167
|
"label",
|
|
5859
6168
|
{ key, style: { display: "flex", flexDirection: "column", gap: 4 } },
|
|
5860
|
-
(0,
|
|
5861
|
-
(0,
|
|
6169
|
+
(0, import_react4.createElement)("span", { style: label }, title),
|
|
6170
|
+
(0, import_react4.createElement)("input", {
|
|
5862
6171
|
style: input,
|
|
5863
6172
|
value: sonar[key] ?? "",
|
|
5864
6173
|
placeholder,
|
|
5865
6174
|
onChange: (event) => updateSonar({ [key]: event.target.value })
|
|
5866
6175
|
})
|
|
5867
6176
|
)),
|
|
5868
|
-
(0,
|
|
6177
|
+
(0, import_react4.createElement)(
|
|
5869
6178
|
"details",
|
|
5870
6179
|
{ style: { gridColumn: "1 / -1" } },
|
|
5871
|
-
(0,
|
|
5872
|
-
(0,
|
|
6180
|
+
(0, import_react4.createElement)("summary", null, "\u9AD8\u7EA7\u8BBE\u7F6E\uFF1A\u65B0\u589E\u4EE3\u7801\u53C2\u8003\u7248\u672C\u4E0E\u5BA1\u6838\u8303\u56F4"),
|
|
6181
|
+
(0, import_react4.createElement)(
|
|
5873
6182
|
"div",
|
|
5874
6183
|
{ style: { ...grid, marginTop: 8 } },
|
|
5875
|
-
(0,
|
|
6184
|
+
(0, import_react4.createElement)(
|
|
5876
6185
|
"label",
|
|
5877
6186
|
{ style: { display: "flex", flexDirection: "column", gap: 4 } },
|
|
5878
|
-
(0,
|
|
5879
|
-
(0,
|
|
6187
|
+
(0, import_react4.createElement)("span", { style: label }, "Git \u53C2\u8003\u7248\u672C\uFF08\u9ED8\u8BA4 HEAD\uFF0C\u5373\u672A\u63D0\u4EA4\u53D8\u66F4\uFF09"),
|
|
6188
|
+
(0, import_react4.createElement)("input", {
|
|
5880
6189
|
style: input,
|
|
5881
6190
|
value: sonar.reference_branch ?? "HEAD",
|
|
5882
6191
|
placeholder: "HEAD",
|
|
5883
6192
|
onChange: (event) => updateSonar({ reference_branch: event.target.value })
|
|
5884
6193
|
})
|
|
5885
6194
|
),
|
|
5886
|
-
(0,
|
|
6195
|
+
(0, import_react4.createElement)(
|
|
5887
6196
|
"label",
|
|
5888
6197
|
{ style: { display: "flex", flexDirection: "column", gap: 4 } },
|
|
5889
|
-
(0,
|
|
5890
|
-
(0,
|
|
6198
|
+
(0, import_react4.createElement)("span", { style: label }, "\u5BA1\u6838\u8DEF\u5F84\uFF08\u6BCF\u884C\u4E00\u4E2A\uFF1B\u7559\u7A7A\u4E3A\u672C\u6B21\u4EFB\u52A1\u7684\u5168\u90E8\u4EE3\u7801\uFF09"),
|
|
6199
|
+
(0, import_react4.createElement)("textarea", {
|
|
5891
6200
|
style: { ...input, minHeight: 76 },
|
|
5892
6201
|
value: (sonar.include_paths ?? []).join("\n"),
|
|
5893
6202
|
onChange: (event) => updateSonar({
|
|
@@ -5897,37 +6206,59 @@ function AdaptivePanel({ workspace, remote, onOpenInit }) {
|
|
|
5897
6206
|
)
|
|
5898
6207
|
)
|
|
5899
6208
|
),
|
|
5900
|
-
(0,
|
|
6209
|
+
(0, import_react4.createElement)(
|
|
5901
6210
|
"span",
|
|
5902
6211
|
{ style: { ...label, gridColumn: "1 / -1" } },
|
|
5903
6212
|
"\u65E0\u9700\u5B89\u88C5 IDEA\u3001Maven \u6216 SonarScanner\u3002\u9996\u6B21\u5BA1\u6838\u4F1A\u4E0B\u8F7D\u5B98\u65B9\u672C\u5730\u5206\u6790\u540E\u53F0\uFF1B\u8BED\u8A00\u5206\u6790\u5668\u7531\u540E\u53F0\u4ECE SonarQube \u540C\u6B65\u3002\u90E8\u5206\u670D\u52A1\u7AEF\u89C4\u5219\u65E0\u6CD5\u5728\u672C\u5730\u6267\u884C\uFF0C\u672C\u5730\u901A\u8FC7\u4E0D\u7B49\u4E8E\u670D\u52A1\u7AEF\u8D28\u91CF\u95E8\u7981\u901A\u8FC7\u3002"
|
|
5904
6213
|
),
|
|
5905
|
-
(0,
|
|
6214
|
+
(0, import_react4.createElement)(
|
|
5906
6215
|
"div",
|
|
5907
6216
|
{ style: { ...row, gridColumn: "1 / -1" } },
|
|
5908
|
-
(0,
|
|
6217
|
+
(0, import_react4.createElement)(import_dsh_client_ui_primitives3.Button, {
|
|
5909
6218
|
variant: "outline",
|
|
5910
6219
|
size: "sm",
|
|
5911
|
-
disabled:
|
|
6220
|
+
disabled: !!analyzerOperation || saving || dirty,
|
|
5912
6221
|
onClick: prepareAnalyzer
|
|
5913
|
-
},
|
|
5914
|
-
(0,
|
|
6222
|
+
}, analyzerOperation === "prepare" ? "\u5B89\u88C5\u4E0E\u68C0\u67E5\u4E2D\u2026" : "\u5B89\u88C5\u6216\u68C0\u67E5\u672C\u5730\u5206\u6790\u5668"),
|
|
6223
|
+
(0, import_react4.createElement)(import_dsh_client_ui_primitives3.Button, {
|
|
6224
|
+
variant: "outline",
|
|
6225
|
+
size: "sm",
|
|
6226
|
+
disabled: !!analyzerOperation || saving || dirty,
|
|
6227
|
+
onClick: updateRules
|
|
6228
|
+
}, analyzerOperation === "update" ? "\u89C4\u5219\u66F4\u65B0\u4E2D\u2026" : "\u66F4\u65B0\u5F53\u524D\u9879\u76EE\u89C4\u5219"),
|
|
6229
|
+
(0, import_react4.createElement)(import_dsh_client_ui_primitives3.Button, {
|
|
6230
|
+
variant: "outline",
|
|
6231
|
+
size: "sm",
|
|
6232
|
+
disabled: saving || dirty,
|
|
6233
|
+
onClick: () => setRuleViewerOpen(true)
|
|
6234
|
+
}, "\u67E5\u770B\u5F53\u524D\u9879\u76EE\u89C4\u5219"),
|
|
6235
|
+
(0, import_react4.createElement)("span", { style: label }, "\u5148\u4FDD\u5B58\u670D\u52A1\u5730\u5740\u3001\u9879\u76EE Key \u548C Token\uFF1B\u68C0\u67E5\u4E0D\u4F1A\u5BA1\u6838\u6216\u4E0A\u4F20\u9879\u76EE\u4EE3\u7801\u3002")
|
|
5915
6236
|
),
|
|
5916
|
-
|
|
6237
|
+
analyzerUpdatedAt && !dirty ? (0, import_react4.createElement)(
|
|
6238
|
+
"span",
|
|
6239
|
+
{ style: { ...label, gridColumn: "1 / -1" } },
|
|
6240
|
+
`\u4E0A\u6B21\u624B\u52A8\u66F4\u65B0\uFF1A${new Date(analyzerUpdatedAt).toLocaleString()}`
|
|
6241
|
+
) : null,
|
|
6242
|
+
analyzerProfiles ? (0, import_react4.createElement)(
|
|
5917
6243
|
"div",
|
|
5918
6244
|
{ style: { ...label, gridColumn: "1 / -1" } },
|
|
5919
|
-
analyzerProfiles.length ? analyzerProfiles.map((profile) => (0,
|
|
6245
|
+
analyzerProfiles.length ? analyzerProfiles.map((profile) => (0, import_react4.createElement)(
|
|
5920
6246
|
"div",
|
|
5921
6247
|
{ key: profile.language },
|
|
5922
6248
|
`${profile.language}\uFF1A\u670D\u52A1\u7AEF ${profile.active_rules} \u6761\u89C4\u5219\uFF1B\u672C\u5730\u5206\u6790\u5668 ${profile.analyzer}`
|
|
5923
6249
|
)) : "\u9879\u76EE\u6CA1\u6709\u8FD4\u56DE\u5DF2\u542F\u7528\u89C4\u5219\u7684\u8BED\u8A00\u3002",
|
|
5924
|
-
(0,
|
|
6250
|
+
analyzerOtherCount ? (0, import_react4.createElement)(
|
|
6251
|
+
"div",
|
|
6252
|
+
null,
|
|
6253
|
+
`\u5176\u5B83 ${analyzerOtherCount} \u4E2A\u8BED\u8A00\u914D\u7F6E\u5DF2\u6536\u8D77\uFF1B\u53EF\u5728\u201C\u67E5\u770B\u5F53\u524D\u9879\u76EE\u89C4\u5219\u201D\u4E2D\u663E\u793A\u3002`
|
|
6254
|
+
) : null,
|
|
6255
|
+
(0, import_react4.createElement)("div", null, "\u5DF2\u540C\u6B65\u8868\u793A\u8BE5\u8BED\u8A00\u5206\u6790\u5668\u53EF\u7528\uFF0C\u4E0D\u4EE3\u8868\u670D\u52A1\u7AEF\u5168\u90E8\u89C4\u5219\u90FD\u80FD\u5728\u672C\u5730\u6267\u884C\u3002")
|
|
5925
6256
|
) : null,
|
|
5926
|
-
(0,
|
|
6257
|
+
(0, import_react4.createElement)(
|
|
5927
6258
|
"div",
|
|
5928
6259
|
{ style: { display: "flex", flexDirection: "column", gap: 5 } },
|
|
5929
|
-
(0,
|
|
5930
|
-
(0,
|
|
6260
|
+
(0, import_react4.createElement)("span", { style: label }, `\u5F53\u524D\u9879\u76EE Token\uFF1A${tokenInfo === null ? "\u72B6\u6001\u4E0D\u53EF\u7528" : tokenInfo.configured ? "\u5DF2\u914D\u7F6E" : "\u672A\u914D\u7F6E"}`),
|
|
6261
|
+
(0, import_react4.createElement)("input", {
|
|
5931
6262
|
type: "password",
|
|
5932
6263
|
autoComplete: "new-password",
|
|
5933
6264
|
style: input,
|
|
@@ -5935,16 +6266,16 @@ function AdaptivePanel({ workspace, remote, onOpenInit }) {
|
|
|
5935
6266
|
placeholder: "\u8F93\u5165\u7528\u6237\u4EE4\u724C\uFF08\u4FDD\u5B58\u540E\u4E0D\u56DE\u663E\uFF09",
|
|
5936
6267
|
onChange: (event) => setSonarToken(event.target.value)
|
|
5937
6268
|
}),
|
|
5938
|
-
(0,
|
|
6269
|
+
(0, import_react4.createElement)(
|
|
5939
6270
|
"div",
|
|
5940
6271
|
{ style: row },
|
|
5941
|
-
(0,
|
|
6272
|
+
(0, import_react4.createElement)(import_dsh_client_ui_primitives3.Button, {
|
|
5942
6273
|
variant: "outline",
|
|
5943
6274
|
size: "sm",
|
|
5944
6275
|
disabled: tokenBusy || !sonarToken.trim() || tokenInfo?.writable === false,
|
|
5945
6276
|
onClick: saveToken
|
|
5946
6277
|
}, tokenBusy ? "\u5904\u7406\u4E2D\u2026" : "\u4FDD\u5B58 Token"),
|
|
5947
|
-
tokenInfo?.configured ? (0,
|
|
6278
|
+
tokenInfo?.configured ? (0, import_react4.createElement)(import_dsh_client_ui_primitives3.Button, {
|
|
5948
6279
|
variant: "outline",
|
|
5949
6280
|
size: "sm",
|
|
5950
6281
|
disabled: tokenBusy || tokenInfo.writable === false,
|
|
@@ -5954,20 +6285,21 @@ function AdaptivePanel({ workspace, remote, onOpenInit }) {
|
|
|
5954
6285
|
)
|
|
5955
6286
|
) : null
|
|
5956
6287
|
),
|
|
5957
|
-
(0,
|
|
6288
|
+
(0, import_react4.createElement)(
|
|
5958
6289
|
"div",
|
|
5959
6290
|
{ className: "te-adaptive-savebar" },
|
|
5960
|
-
(0,
|
|
5961
|
-
(0,
|
|
5962
|
-
|
|
6291
|
+
(0, import_react4.createElement)(import_dsh_client_ui_primitives3.Button, { variant: "outline", size: "sm", disabled: loading || saving, onClick: refresh }, "\u5237\u65B0"),
|
|
6292
|
+
(0, import_react4.createElement)(
|
|
6293
|
+
import_dsh_client_ui_primitives3.Button,
|
|
5963
6294
|
{ variant: "primary", size: "sm", disabled: loading || saving || !dirty, onClick: save },
|
|
5964
6295
|
saving ? "\u4FDD\u5B58\u4E2D\u2026" : "\u4FDD\u5B58\u81EA\u9002\u5E94\u914D\u7F6E"
|
|
5965
6296
|
),
|
|
5966
|
-
(0,
|
|
5967
|
-
message ? (0,
|
|
6297
|
+
(0, import_react4.createElement)("span", { style: label }, dirty ? "\u6709\u672A\u4FDD\u5B58\u7684\u9879\u76EE\u914D\u7F6E" : "\u9879\u76EE\u914D\u7F6E\u5DF2\u4FDD\u5B58"),
|
|
6298
|
+
message ? (0, import_react4.createElement)("span", { role: "status", style: { ...label, flexBasis: "100%" } }, message) : null
|
|
5968
6299
|
),
|
|
5969
|
-
view?.problems.length ? (0,
|
|
5970
|
-
|
|
6300
|
+
view?.problems.length ? (0, import_react4.createElement)("p", { role: "alert", style: styles.status }, view.problems.join("\uFF1B")) : null,
|
|
6301
|
+
ruleViewerOpen && sonar.enabled === true && sonar.host_url ? (0, import_react4.createElement)(SonarRuleViewer, { workspace, host: sonar.host_url, remote, onClose: () => setRuleViewerOpen(false) }) : null,
|
|
6302
|
+
selected ? (0, import_react4.createElement)(SkillRuleDialog, {
|
|
5971
6303
|
key: `${selected.skill.source}:${selected.skill.name}`,
|
|
5972
6304
|
skill: selected.skill,
|
|
5973
6305
|
profile: selected.profile,
|
|
@@ -5981,8 +6313,8 @@ function AdaptivePanel({ workspace, remote, onOpenInit }) {
|
|
|
5981
6313
|
}
|
|
5982
6314
|
|
|
5983
6315
|
// src/client/InitPanel.tsx
|
|
5984
|
-
var
|
|
5985
|
-
var
|
|
6316
|
+
var import_react5 = require("react");
|
|
6317
|
+
var import_dsh_client_ui_primitives4 = require("@deepseek-ai/dsh-client-ui-primitives");
|
|
5986
6318
|
var MD_LABELS = { code: { copyLabel: "\u590D\u5236", copiedLabel: "\u5DF2\u590D\u5236" }, footnotes: "\u811A\u6CE8" };
|
|
5987
6319
|
var INIT_TIMEOUT_S = 150;
|
|
5988
6320
|
var card2 = {
|
|
@@ -5994,18 +6326,18 @@ var card2 = {
|
|
|
5994
6326
|
padding: "12px 14px"
|
|
5995
6327
|
};
|
|
5996
6328
|
function InitPanel({ workspace, remote }) {
|
|
5997
|
-
const [view, setView] = (0,
|
|
5998
|
-
const [generating, setGenerating] = (0,
|
|
5999
|
-
const [elapsed, setElapsed] = (0,
|
|
6000
|
-
const [draft, setDraft] = (0,
|
|
6001
|
-
const [editing, setEditing] = (0,
|
|
6002
|
-
const [body2, setBody] = (0,
|
|
6003
|
-
const [msg, setMsg] = (0,
|
|
6004
|
-
const [projectInitMsg, setProjectInitMsg] = (0,
|
|
6005
|
-
const [projectBusy, setProjectBusy] = (0,
|
|
6006
|
-
const [projectDraft, setProjectDraft] = (0,
|
|
6007
|
-
const [projectResources, setProjectResources] = (0,
|
|
6008
|
-
(0,
|
|
6329
|
+
const [view, setView] = (0, import_react5.useState)(null);
|
|
6330
|
+
const [generating, setGenerating] = (0, import_react5.useState)(false);
|
|
6331
|
+
const [elapsed, setElapsed] = (0, import_react5.useState)(0);
|
|
6332
|
+
const [draft, setDraft] = (0, import_react5.useState)(null);
|
|
6333
|
+
const [editing, setEditing] = (0, import_react5.useState)(false);
|
|
6334
|
+
const [body2, setBody] = (0, import_react5.useState)("");
|
|
6335
|
+
const [msg, setMsg] = (0, import_react5.useState)("");
|
|
6336
|
+
const [projectInitMsg, setProjectInitMsg] = (0, import_react5.useState)("");
|
|
6337
|
+
const [projectBusy, setProjectBusy] = (0, import_react5.useState)(false);
|
|
6338
|
+
const [projectDraft, setProjectDraft] = (0, import_react5.useState)(null);
|
|
6339
|
+
const [projectResources, setProjectResources] = (0, import_react5.useState)([]);
|
|
6340
|
+
(0, import_react5.useEffect)(() => {
|
|
6009
6341
|
if (!generating && !projectBusy) {
|
|
6010
6342
|
setElapsed(0);
|
|
6011
6343
|
return;
|
|
@@ -6019,7 +6351,7 @@ function InitPanel({ workspace, remote }) {
|
|
|
6019
6351
|
clearInterval(timer);
|
|
6020
6352
|
};
|
|
6021
6353
|
}, [generating, projectBusy]);
|
|
6022
|
-
(0,
|
|
6354
|
+
(0, import_react5.useEffect)(() => {
|
|
6023
6355
|
setProjectDraft(null);
|
|
6024
6356
|
setProjectResources([]);
|
|
6025
6357
|
setProjectInitMsg("");
|
|
@@ -6085,13 +6417,13 @@ function InitPanel({ workspace, remote }) {
|
|
|
6085
6417
|
setProjectBusy(false);
|
|
6086
6418
|
}
|
|
6087
6419
|
};
|
|
6088
|
-
const refresh = (0,
|
|
6420
|
+
const refresh = (0, import_react5.useCallback)(() => {
|
|
6089
6421
|
void remote.readInit(workspace).then((r) => {
|
|
6090
6422
|
if (r.ok) setView(r.value);
|
|
6091
6423
|
}, () => {
|
|
6092
6424
|
});
|
|
6093
6425
|
}, [remote, workspace]);
|
|
6094
|
-
(0,
|
|
6426
|
+
(0, import_react5.useEffect)(() => {
|
|
6095
6427
|
refresh();
|
|
6096
6428
|
}, [refresh]);
|
|
6097
6429
|
const generate = async () => {
|
|
@@ -6134,27 +6466,27 @@ function InitPanel({ workspace, remote }) {
|
|
|
6134
6466
|
setMsg("");
|
|
6135
6467
|
};
|
|
6136
6468
|
const exists = view?.exists === true;
|
|
6137
|
-
return (0,
|
|
6469
|
+
return (0, import_react5.createElement)(
|
|
6138
6470
|
"div",
|
|
6139
6471
|
{ style: styles.section },
|
|
6140
|
-
(0,
|
|
6472
|
+
(0, import_react5.createElement)(
|
|
6141
6473
|
"div",
|
|
6142
6474
|
{ style: card2 },
|
|
6143
|
-
(0,
|
|
6144
|
-
(0,
|
|
6475
|
+
(0, import_react5.createElement)("h2", { style: { margin: 0, fontSize: 17 } }, "\u9879\u76EE Skill / Rule \u521D\u59CB\u5316"),
|
|
6476
|
+
(0, import_react5.createElement)(
|
|
6145
6477
|
"p",
|
|
6146
6478
|
{ style: styles.muted },
|
|
6147
6479
|
"\u5728\u6B64\u626B\u63CF\u4ED3\u5E93\u5E76\u751F\u6210\u9879\u76EE Skill / Rule \u63D0\u6848\u3002\u9879\u76EE\u5730\u56FE\u8986\u76D6\u6574\u4E2A\u4ED3\u5E93\uFF0C\u5F53\u524D\u9700\u6C42\u7684\u4E13\u5C5E\u4FE1\u606F\u5E94\u5199\u5165\u4EFB\u52A1\u4EA7\u7269\u3002\u9010\u9879\u5BA1\u9605\u540E\u786E\u8BA4\u5199\u5165\uFF1B\u5DF2\u6709\u540C\u540D\u8D44\u6E90\u4E0D\u4F1A\u88AB\u8986\u76D6\u3002"
|
|
6148
6480
|
),
|
|
6149
|
-
(0,
|
|
6481
|
+
(0, import_react5.createElement)(
|
|
6150
6482
|
"p",
|
|
6151
6483
|
{ style: styles.muted },
|
|
6152
6484
|
"\u56E2\u961F\u5171\u4EAB\u65F6\uFF0C\u8BF7\u5C06\u751F\u6210\u7684 .dsh/skills\u3001.dsh/rules \u548C .dsh/meta.json \u7EB3\u5165 Git\uFF1B\u5BA1\u6838\u62A5\u544A\u53EF\u4FDD\u7559\u5728\u672C\u5730\u3002"
|
|
6153
6485
|
),
|
|
6154
|
-
(0,
|
|
6486
|
+
(0, import_react5.createElement)(
|
|
6155
6487
|
"div",
|
|
6156
6488
|
{ style: styles.row },
|
|
6157
|
-
(0,
|
|
6489
|
+
(0, import_react5.createElement)(import_dsh_client_ui_primitives4.Button, {
|
|
6158
6490
|
variant: "primary",
|
|
6159
6491
|
size: "md",
|
|
6160
6492
|
disabled: projectBusy,
|
|
@@ -6162,24 +6494,24 @@ function InitPanel({ workspace, remote }) {
|
|
|
6162
6494
|
void generateProject();
|
|
6163
6495
|
}
|
|
6164
6496
|
}, projectBusy ? "\u626B\u63CF\u4E0E\u751F\u6210\u4E2D\u2026" : "\u626B\u63CF\u5E76\u751F\u6210\u63D0\u6848"),
|
|
6165
|
-
projectBusy ? (0,
|
|
6497
|
+
projectBusy ? (0, import_react5.createElement)("span", { style: styles.status }, `\u5DF2\u8017\u65F6 ${elapsed} \u79D2`) : null
|
|
6166
6498
|
),
|
|
6167
|
-
projectResources.length > 0 ? (0,
|
|
6499
|
+
projectResources.length > 0 ? (0, import_react5.createElement)(
|
|
6168
6500
|
"div",
|
|
6169
6501
|
{ style: styles.section },
|
|
6170
|
-
(0,
|
|
6502
|
+
(0, import_react5.createElement)(
|
|
6171
6503
|
"p",
|
|
6172
6504
|
{ style: styles.muted },
|
|
6173
6505
|
`\u9879\u76EE\uFF1A${workspace}\u3002\u63D0\u6848\u5305\u542B ${projectResources.length} \u4E2A Skill / Rule\uFF1B\u9879\u76EE\u5730\u56FE\u9700\u8986\u76D6\uFF1A${projectDraft?.project_map_coverage.join("\u3001") ?? "\u68C0\u67E5\u4FEE\u6539\u540E\u663E\u793A"}\u3002`
|
|
6174
6506
|
),
|
|
6175
|
-
...projectResources.map((resource, index) => (0,
|
|
6507
|
+
...projectResources.map((resource, index) => (0, import_react5.createElement)(
|
|
6176
6508
|
"div",
|
|
6177
6509
|
{ key: `${resource.kind}-${resource.name}`, style: card2 },
|
|
6178
|
-
(0,
|
|
6510
|
+
(0, import_react5.createElement)(
|
|
6179
6511
|
"div",
|
|
6180
6512
|
{ style: styles.row },
|
|
6181
|
-
(0,
|
|
6182
|
-
(0,
|
|
6513
|
+
(0, import_react5.createElement)("strong", null, `${resource.kind === "skill" ? "Skill" : "Rule"} \xB7 ${resource.name}`),
|
|
6514
|
+
(0, import_react5.createElement)(import_dsh_client_ui_primitives4.Button, {
|
|
6183
6515
|
variant: "ghost",
|
|
6184
6516
|
size: "sm",
|
|
6185
6517
|
disabled: projectBusy,
|
|
@@ -6190,24 +6522,24 @@ function InitPanel({ workspace, remote }) {
|
|
|
6190
6522
|
}
|
|
6191
6523
|
}, "\u79FB\u9664\u5EFA\u8BAE")
|
|
6192
6524
|
),
|
|
6193
|
-
resource.kind === "skill" ? (0,
|
|
6525
|
+
resource.kind === "skill" ? (0, import_react5.createElement)(
|
|
6194
6526
|
"div",
|
|
6195
6527
|
{ style: styles.section },
|
|
6196
|
-
(0,
|
|
6528
|
+
(0, import_react5.createElement)("label", null, "\u7B80\u4ECB", (0, import_react5.createElement)("input", {
|
|
6197
6529
|
style: styles.input,
|
|
6198
6530
|
value: resource.description ?? "",
|
|
6199
6531
|
onChange: (event) => {
|
|
6200
6532
|
updateProjectResource(index, { description: event.target.value });
|
|
6201
6533
|
}
|
|
6202
6534
|
})),
|
|
6203
|
-
(0,
|
|
6535
|
+
(0, import_react5.createElement)("label", null, "\u6302\u8F7D\u5143\u6280\u80FD\uFF08\u9017\u53F7\u5206\u9694\uFF09", (0, import_react5.createElement)("input", {
|
|
6204
6536
|
style: styles.input,
|
|
6205
6537
|
value: (resource.meta_skills ?? []).join(", "),
|
|
6206
6538
|
onChange: (event) => {
|
|
6207
6539
|
updateProjectResource(index, { meta_skills: event.target.value.split(",").map((item) => item.trim()).filter(Boolean) });
|
|
6208
6540
|
}
|
|
6209
6541
|
})),
|
|
6210
|
-
(0,
|
|
6542
|
+
(0, import_react5.createElement)("label", null, "\u5173\u8054 Rule\uFF08\u9017\u53F7\u5206\u9694\uFF09", (0, import_react5.createElement)("input", {
|
|
6211
6543
|
style: styles.input,
|
|
6212
6544
|
value: (resource.rules ?? []).join(", "),
|
|
6213
6545
|
onChange: (event) => {
|
|
@@ -6215,7 +6547,7 @@ function InitPanel({ workspace, remote }) {
|
|
|
6215
6547
|
}
|
|
6216
6548
|
}))
|
|
6217
6549
|
) : null,
|
|
6218
|
-
(0,
|
|
6550
|
+
(0, import_react5.createElement)("label", null, "\u5185\u5BB9", (0, import_react5.createElement)("textarea", {
|
|
6219
6551
|
style: { ...styles.textarea, minHeight: 180 },
|
|
6220
6552
|
value: resource.content,
|
|
6221
6553
|
onChange: (event) => {
|
|
@@ -6223,10 +6555,10 @@ function InitPanel({ workspace, remote }) {
|
|
|
6223
6555
|
}
|
|
6224
6556
|
}))
|
|
6225
6557
|
)),
|
|
6226
|
-
(0,
|
|
6558
|
+
(0, import_react5.createElement)(
|
|
6227
6559
|
"div",
|
|
6228
6560
|
{ style: styles.row },
|
|
6229
|
-
(0,
|
|
6561
|
+
(0, import_react5.createElement)(import_dsh_client_ui_primitives4.Button, {
|
|
6230
6562
|
variant: "outline",
|
|
6231
6563
|
size: "md",
|
|
6232
6564
|
disabled: projectBusy,
|
|
@@ -6234,7 +6566,7 @@ function InitPanel({ workspace, remote }) {
|
|
|
6234
6566
|
void checkProject();
|
|
6235
6567
|
}
|
|
6236
6568
|
}, "\u68C0\u67E5\u4FEE\u6539"),
|
|
6237
|
-
(0,
|
|
6569
|
+
(0, import_react5.createElement)(import_dsh_client_ui_primitives4.Button, {
|
|
6238
6570
|
variant: "primary",
|
|
6239
6571
|
size: "md",
|
|
6240
6572
|
disabled: projectBusy || projectDraft === null,
|
|
@@ -6243,47 +6575,47 @@ function InitPanel({ workspace, remote }) {
|
|
|
6243
6575
|
}
|
|
6244
6576
|
}, "\u786E\u8BA4\u5199\u5165\u9879\u76EE")
|
|
6245
6577
|
),
|
|
6246
|
-
projectDraft !== null ? (0,
|
|
6578
|
+
projectDraft !== null ? (0, import_react5.createElement)("p", { style: styles.muted }, `\u5C06\u521B\u5EFA\uFF1A${projectDraft.files_to_create.join("\u3001")}\uFF0C\u5E76\u66F4\u65B0 .dsh/meta.json`) : null
|
|
6247
6579
|
) : null,
|
|
6248
|
-
projectInitMsg ? (0,
|
|
6580
|
+
projectInitMsg ? (0, import_react5.createElement)("p", { role: "status", style: styles.status }, projectInitMsg) : null
|
|
6249
6581
|
),
|
|
6250
|
-
(0,
|
|
6582
|
+
(0, import_react5.createElement)(
|
|
6251
6583
|
"div",
|
|
6252
6584
|
{ style: card2 },
|
|
6253
|
-
(0,
|
|
6254
|
-
(0,
|
|
6585
|
+
(0, import_react5.createElement)("h2", { style: { margin: 0, fontSize: 17 } }, "AGENTS.md \u521D\u59CB\u5316"),
|
|
6586
|
+
(0, import_react5.createElement)(
|
|
6255
6587
|
"div",
|
|
6256
6588
|
{ style: { display: "flex", alignItems: "center", gap: 8, flexWrap: "wrap" } },
|
|
6257
|
-
(0,
|
|
6258
|
-
(0,
|
|
6259
|
-
view?.path !== void 0 ? (0,
|
|
6589
|
+
(0, import_react5.createElement)(import_dsh_client_ui_primitives4.StateDot, { state: exists ? "done" : "ongoing" }),
|
|
6590
|
+
(0, import_react5.createElement)("span", { style: styles.bindingLabel }, exists ? `AGENTS.md \u5DF2\u5B58\u5728 \xB7 ${view.lines} \u884C\uFF08\u4E0A\u9650 200\uFF09` : "AGENTS.md \u672A\u521B\u5EFA"),
|
|
6591
|
+
view?.path !== void 0 ? (0, import_react5.createElement)("span", { style: styles.sourceBadge }, `\u5DF2\u5B9A\u4F4D\u5230 ${view.path}`) : null
|
|
6260
6592
|
),
|
|
6261
|
-
(0,
|
|
6593
|
+
(0, import_react5.createElement)(
|
|
6262
6594
|
"p",
|
|
6263
6595
|
{ style: styles.muted },
|
|
6264
6596
|
"\u9879\u76EE\u6839 AGENTS.md \u4F1A\u88AB DSH \u81EA\u52A8\u6CE8\u5165\u5230\u6BCF\u4E2A\u4F1A\u8BDD\u3002\u521D\u59CB\u5316\u4E00\u6B21\uFF0C\u4E4B\u540E\u6BCF\u6B21\u4EFB\u52A1\u5F00\u5DE5 AI \u90FD\u81EA\u5E26\u8FD9\u4EFD\u9879\u76EE\u8BA4\u77E5\uFF08\u9879\u76EE\u662F\u4EC0\u4E48 \u2192 \u600E\u4E48\u8DD1 \u2192 \u7ED3\u6784 \u2192 \u7EA6\u5B9A \u2192 \u5751\uFF09\u3002"
|
|
6265
6597
|
),
|
|
6266
|
-
exists && !editing && draft === null ? (0,
|
|
6598
|
+
exists && !editing && draft === null ? (0, import_react5.createElement)(
|
|
6267
6599
|
"div",
|
|
6268
6600
|
{ style: styles.mdPreview },
|
|
6269
|
-
(0,
|
|
6601
|
+
(0, import_react5.createElement)(import_dsh_client_ui_primitives4.MarkdownText, { text: view.content, labels: MD_LABELS })
|
|
6270
6602
|
) : null,
|
|
6271
|
-
draft !== null ? (0,
|
|
6603
|
+
draft !== null ? (0, import_react5.createElement)(
|
|
6272
6604
|
"div",
|
|
6273
6605
|
{ style: styles.section },
|
|
6274
|
-
(0,
|
|
6606
|
+
(0, import_react5.createElement)(
|
|
6275
6607
|
"div",
|
|
6276
6608
|
{ style: styles.sourceRow },
|
|
6277
|
-
(0,
|
|
6278
|
-
(0,
|
|
6609
|
+
(0, import_react5.createElement)(import_dsh_client_ui_primitives4.StateDot, { state: "ongoing", size: 8 }),
|
|
6610
|
+
(0, import_react5.createElement)("span", { style: styles.sourceBadge }, `AI \u8349\u7A3F \xB7 ${draft.lines} \u884C \xB7 \u5C1A\u672A\u5199\u5165`)
|
|
6279
6611
|
),
|
|
6280
|
-
(0,
|
|
6612
|
+
(0, import_react5.createElement)(
|
|
6281
6613
|
"div",
|
|
6282
6614
|
{ style: styles.mdPreview },
|
|
6283
|
-
(0,
|
|
6615
|
+
(0, import_react5.createElement)(import_dsh_client_ui_primitives4.MarkdownText, { text: draft.content, labels: MD_LABELS })
|
|
6284
6616
|
)
|
|
6285
6617
|
) : null,
|
|
6286
|
-
editing ? (0,
|
|
6618
|
+
editing ? (0, import_react5.createElement)("textarea", {
|
|
6287
6619
|
style: { ...styles.textarea, minHeight: 300 },
|
|
6288
6620
|
placeholder: "AGENTS.md \u6B63\u6587\uFF08Markdown\uFF0C\u2264200 \u884C\uFF09",
|
|
6289
6621
|
value: body2,
|
|
@@ -6291,16 +6623,16 @@ function InitPanel({ workspace, remote }) {
|
|
|
6291
6623
|
setBody(ev.target.value);
|
|
6292
6624
|
}
|
|
6293
6625
|
}) : null,
|
|
6294
|
-
generating ? (0,
|
|
6626
|
+
generating ? (0, import_react5.createElement)(
|
|
6295
6627
|
"p",
|
|
6296
6628
|
{ style: styles.status },
|
|
6297
6629
|
`AI \u6B63\u5728\u626B\u63CF\u9879\u76EE\u5E76\u751F\u6210\u8349\u7A3F\u2026 \u5DF2\u8017\u65F6 ${elapsed} \u79D2\uFF08\u6700\u957F ${INIT_TIMEOUT_S} \u79D2\uFF09\uFF0C\u8BF7\u7A0D\u5019`
|
|
6298
6630
|
) : null,
|
|
6299
|
-
msg !== "" ? (0,
|
|
6300
|
-
draft !== null ? (0,
|
|
6631
|
+
msg !== "" ? (0, import_react5.createElement)("p", { style: styles.status }, msg) : null,
|
|
6632
|
+
draft !== null ? (0, import_react5.createElement)(
|
|
6301
6633
|
"div",
|
|
6302
6634
|
{ style: styles.row },
|
|
6303
|
-
(0,
|
|
6635
|
+
(0, import_react5.createElement)(import_dsh_client_ui_primitives4.Button, {
|
|
6304
6636
|
variant: "primary",
|
|
6305
6637
|
size: "md",
|
|
6306
6638
|
disabled: draft.lines > 200,
|
|
@@ -6309,14 +6641,14 @@ function InitPanel({ workspace, remote }) {
|
|
|
6309
6641
|
void write(draft.content, exists);
|
|
6310
6642
|
}
|
|
6311
6643
|
}, exists ? "\u4FDD\u5B58\u5E76\u8986\u76D6" : "\u4FDD\u5B58"),
|
|
6312
|
-
draft.lines > 200 ? (0,
|
|
6313
|
-
(0,
|
|
6644
|
+
draft.lines > 200 ? (0, import_react5.createElement)("span", { style: styles.sourceBadge }, `\u8349\u7A3F ${draft.lines} \u884C\u8D85\u9650\uFF0C\u8BF7\u70B9\u300C\u653E\u5F03\u300D\u540E\u91CD\u8BD5`) : null,
|
|
6645
|
+
(0, import_react5.createElement)(import_dsh_client_ui_primitives4.Button, { variant: "ghost", size: "md", onClick: () => {
|
|
6314
6646
|
setDraft(null);
|
|
6315
6647
|
} }, "\u653E\u5F03")
|
|
6316
|
-
) : editing ? (0,
|
|
6648
|
+
) : editing ? (0, import_react5.createElement)(
|
|
6317
6649
|
"div",
|
|
6318
6650
|
{ style: styles.row },
|
|
6319
|
-
(0,
|
|
6651
|
+
(0, import_react5.createElement)(import_dsh_client_ui_primitives4.Button, {
|
|
6320
6652
|
variant: "primary",
|
|
6321
6653
|
size: "md",
|
|
6322
6654
|
disabled: body2.trim() === "",
|
|
@@ -6325,13 +6657,13 @@ function InitPanel({ workspace, remote }) {
|
|
|
6325
6657
|
void write(body2, exists);
|
|
6326
6658
|
}
|
|
6327
6659
|
}, exists ? "\u4FDD\u5B58\u5E76\u8986\u76D6" : "\u4FDD\u5B58"),
|
|
6328
|
-
(0,
|
|
6660
|
+
(0, import_react5.createElement)(import_dsh_client_ui_primitives4.Button, { variant: "ghost", size: "md", onClick: () => {
|
|
6329
6661
|
setEditing(false);
|
|
6330
6662
|
} }, "\u53D6\u6D88")
|
|
6331
|
-
) : (0,
|
|
6663
|
+
) : (0, import_react5.createElement)(
|
|
6332
6664
|
"div",
|
|
6333
6665
|
{ style: styles.row },
|
|
6334
|
-
(0,
|
|
6666
|
+
(0, import_react5.createElement)(import_dsh_client_ui_primitives4.Button, {
|
|
6335
6667
|
variant: "primary",
|
|
6336
6668
|
size: "md",
|
|
6337
6669
|
disabled: generating,
|
|
@@ -6340,18 +6672,18 @@ function InitPanel({ workspace, remote }) {
|
|
|
6340
6672
|
void generate();
|
|
6341
6673
|
}
|
|
6342
6674
|
}, exists ? "\u91CD\u65B0\u751F\u6210 AGENTS.md" : "\u751F\u6210 AGENTS.md"),
|
|
6343
|
-
exists ? (0,
|
|
6675
|
+
exists ? (0, import_react5.createElement)(import_dsh_client_ui_primitives4.Button, { variant: "outline", size: "md", onClick: startEdit }, "\u624B\u52A8\u7F16\u8F91") : null
|
|
6344
6676
|
)
|
|
6345
6677
|
)
|
|
6346
6678
|
);
|
|
6347
6679
|
}
|
|
6348
6680
|
|
|
6349
6681
|
// src/client/SkillManager.tsx
|
|
6350
|
-
var
|
|
6682
|
+
var import_react7 = require("react");
|
|
6351
6683
|
|
|
6352
6684
|
// src/client/ResourceManager.tsx
|
|
6353
|
-
var
|
|
6354
|
-
var
|
|
6685
|
+
var import_react6 = require("react");
|
|
6686
|
+
var import_dsh_client_ui_primitives5 = require("@deepseek-ai/dsh-client-ui-primitives");
|
|
6355
6687
|
var labels = { code: { copyLabel: "\u590D\u5236", copiedLabel: "\u5DF2\u590D\u5236" }, footnotes: "\u811A\u6CE8" };
|
|
6356
6688
|
var levelOf = (row2) => row2.source === "bundled" ? "bundled" : row2.source.startsWith("user") ? "user" : "project";
|
|
6357
6689
|
var sourceText = (source) => source === "bundled" ? "\u5185\u7F6E" : source === "codex-project" ? "\u9879\u76EE \xB7 Codex" : source.startsWith("user") ? "\u4E2A\u4EBA" : "\u9879\u76EE";
|
|
@@ -6359,36 +6691,36 @@ var sizeText = (bytes) => bytes < 1024 ? `${bytes} B` : bytes < 1024 * 1024 ? `$
|
|
|
6359
6691
|
var fail = (r) => describeError(r.error ?? "\u64CD\u4F5C\u5931\u8D25");
|
|
6360
6692
|
function ResourceManager({ workspace, remote, kind, onConfigureSkill }) {
|
|
6361
6693
|
const noun = kind === "skill" ? "\u6280\u80FD" : "\u89C4\u5219";
|
|
6362
|
-
const [rows, setRows] = (0,
|
|
6363
|
-
const [query, setQuery] = (0,
|
|
6364
|
-
const [filter, setFilter] = (0,
|
|
6365
|
-
const [notice, setNotice] = (0,
|
|
6366
|
-
const [error, setError] = (0,
|
|
6367
|
-
const [loading, setLoading] = (0,
|
|
6368
|
-
const [revision, refresh] = (0,
|
|
6369
|
-
const [busy, setBusy] = (0,
|
|
6370
|
-
const [roots, setRoots] = (0,
|
|
6371
|
-
const [importing, setImporting] = (0,
|
|
6372
|
-
const [request, setRequest] = (0,
|
|
6373
|
-
const [preview, setPreview] = (0,
|
|
6374
|
-
const [level, setLevel] = (0,
|
|
6375
|
-
const [manual, setManual] = (0,
|
|
6376
|
-
const [sourceDir, setSourceDir] = (0,
|
|
6377
|
-
const [dirs, setDirs] = (0,
|
|
6378
|
-
const [browsePath, setBrowsePath] = (0,
|
|
6379
|
-
const [editing, setEditing] = (0,
|
|
6380
|
-
const [viewing, setViewing] = (0,
|
|
6381
|
-
const [name, setName] = (0,
|
|
6382
|
-
const [description, setDescription] = (0,
|
|
6383
|
-
const [whenToUse, setWhenToUse] = (0,
|
|
6384
|
-
const [body2, setBody] = (0,
|
|
6385
|
-
const [templateSource, setTemplateSource] = (0,
|
|
6386
|
-
const [deleting, setDeleting] = (0,
|
|
6387
|
-
const input2 = (0,
|
|
6388
|
-
const fileEpoch = (0,
|
|
6389
|
-
const browseEpoch = (0,
|
|
6694
|
+
const [rows, setRows] = (0, import_react6.useState)([]);
|
|
6695
|
+
const [query, setQuery] = (0, import_react6.useState)("");
|
|
6696
|
+
const [filter, setFilter] = (0, import_react6.useState)("all");
|
|
6697
|
+
const [notice, setNotice] = (0, import_react6.useState)("");
|
|
6698
|
+
const [error, setError] = (0, import_react6.useState)("");
|
|
6699
|
+
const [loading, setLoading] = (0, import_react6.useState)(true);
|
|
6700
|
+
const [revision, refresh] = (0, import_react6.useState)(0);
|
|
6701
|
+
const [busy, setBusy] = (0, import_react6.useState)(false);
|
|
6702
|
+
const [roots, setRoots] = (0, import_react6.useState)(null);
|
|
6703
|
+
const [importing, setImporting] = (0, import_react6.useState)(false);
|
|
6704
|
+
const [request, setRequest] = (0, import_react6.useState)(null);
|
|
6705
|
+
const [preview, setPreview] = (0, import_react6.useState)(null);
|
|
6706
|
+
const [level, setLevel] = (0, import_react6.useState)("project");
|
|
6707
|
+
const [manual, setManual] = (0, import_react6.useState)(false);
|
|
6708
|
+
const [sourceDir, setSourceDir] = (0, import_react6.useState)("");
|
|
6709
|
+
const [dirs, setDirs] = (0, import_react6.useState)([]);
|
|
6710
|
+
const [browsePath, setBrowsePath] = (0, import_react6.useState)("");
|
|
6711
|
+
const [editing, setEditing] = (0, import_react6.useState)(null);
|
|
6712
|
+
const [viewing, setViewing] = (0, import_react6.useState)(false);
|
|
6713
|
+
const [name, setName] = (0, import_react6.useState)("");
|
|
6714
|
+
const [description, setDescription] = (0, import_react6.useState)("");
|
|
6715
|
+
const [whenToUse, setWhenToUse] = (0, import_react6.useState)("");
|
|
6716
|
+
const [body2, setBody] = (0, import_react6.useState)("");
|
|
6717
|
+
const [templateSource, setTemplateSource] = (0, import_react6.useState)(null);
|
|
6718
|
+
const [deleting, setDeleting] = (0, import_react6.useState)(null);
|
|
6719
|
+
const input2 = (0, import_react6.useRef)(null);
|
|
6720
|
+
const fileEpoch = (0, import_react6.useRef)(0);
|
|
6721
|
+
const browseEpoch = (0, import_react6.useRef)(0);
|
|
6390
6722
|
const readonly = editing !== null && editing !== "new" && (levelOf(editing) === "bundled" || editing.source === "codex-project");
|
|
6391
|
-
(0,
|
|
6723
|
+
(0, import_react6.useEffect)(() => {
|
|
6392
6724
|
let active = true;
|
|
6393
6725
|
setLoading(true);
|
|
6394
6726
|
setRows([]);
|
|
@@ -6415,7 +6747,7 @@ function ResourceManager({ workspace, remote, kind, onConfigureSkill }) {
|
|
|
6415
6747
|
fileEpoch.current++;
|
|
6416
6748
|
};
|
|
6417
6749
|
}, [workspace, remote, kind, revision]);
|
|
6418
|
-
(0,
|
|
6750
|
+
(0, import_react6.useEffect)(() => {
|
|
6419
6751
|
let active = true;
|
|
6420
6752
|
setPreview(null);
|
|
6421
6753
|
if (!request) return;
|
|
@@ -6619,93 +6951,93 @@ function ResourceManager({ workspace, remote, kind, onConfigureSkill }) {
|
|
|
6619
6951
|
setBusy(false);
|
|
6620
6952
|
}
|
|
6621
6953
|
};
|
|
6622
|
-
const status = () => error ? (0,
|
|
6623
|
-
const targets = () => (0,
|
|
6954
|
+
const status = () => error ? (0, import_react6.createElement)("div", { className: "te-alert", role: "alert" }, error) : null;
|
|
6955
|
+
const targets = () => (0, import_react6.createElement)(
|
|
6624
6956
|
"div",
|
|
6625
6957
|
{ className: "te-targets" },
|
|
6626
|
-
...["project", "user"].map((lvl) => (0,
|
|
6958
|
+
...["project", "user"].map((lvl) => (0, import_react6.createElement)(
|
|
6627
6959
|
"button",
|
|
6628
6960
|
{ type: "button", key: lvl, className: `te-target ${level === lvl ? "selected" : ""}`, "aria-pressed": level === lvl, disabled: busy || editing !== null && editing !== "new", onClick: () => {
|
|
6629
6961
|
setPreview(null);
|
|
6630
6962
|
setLevel(lvl);
|
|
6631
6963
|
} },
|
|
6632
|
-
(0,
|
|
6633
|
-
(0,
|
|
6964
|
+
(0, import_react6.createElement)("strong", null, lvl === "project" ? "\u9879\u76EE\u5171\u4EAB" : "\u4E2A\u4EBA\u5168\u5C40"),
|
|
6965
|
+
(0, import_react6.createElement)("small", null, lvl === "project" ? "\u4EC5\u5F53\u524D\u5DE5\u4F5C\u533A\u4F7F\u7528" : "\u6B64\u4E3B\u673A\u4E0A\u7684\u6240\u6709\u9879\u76EE\u53EF\u7528")
|
|
6634
6966
|
)),
|
|
6635
|
-
(0,
|
|
6967
|
+
(0, import_react6.createElement)("code", { className: "te-path" }, roots?.[level] ?? (level === "project" ? `${workspace}/.dsh/${kind}s` : `DSH_HOME/${kind}s`))
|
|
6636
6968
|
);
|
|
6637
6969
|
const visible = rows.filter((r) => `${r.name} ${r.description ?? ""}`.toLowerCase().includes(query.toLowerCase()) && (filter === "all" || levelOf(r) === filter));
|
|
6638
|
-
return (0,
|
|
6970
|
+
return (0, import_react6.createElement)(
|
|
6639
6971
|
"section",
|
|
6640
6972
|
{ className: "te-resource" },
|
|
6641
|
-
(0,
|
|
6973
|
+
(0, import_react6.createElement)("input", { type: "file", ref: input2, hidden: true, "aria-label": kind === "skill" ? "\u9009\u62E9\u6280\u80FD\u6587\u4EF6\u5939" : "\u9009\u62E9\u89C4\u5219\u6587\u4EF6", ...kind === "skill" ? { webkitdirectory: "", multiple: true } : { accept: ".md,text/markdown" }, onChange: (e) => {
|
|
6642
6974
|
void selected(Array.from(e.target.files ?? []));
|
|
6643
6975
|
} }),
|
|
6644
|
-
(0,
|
|
6976
|
+
(0, import_react6.createElement)("div", { className: "te-section-heading" }, (0, import_react6.createElement)("div", null, (0, import_react6.createElement)("h2", null, `${noun}\u5E93`), (0, import_react6.createElement)("p", null, kind === "skill" ? "\u628A\u53EF\u590D\u7528\u7684\u5DE5\u4F5C\u65B9\u6CD5\u5E26\u5165\u9879\u76EE\u3002" : "\u4E3A\u9879\u76EE\u660E\u786E\u7EA6\u5B9A\uFF0C\u8BA9\u6BCF\u6B21\u4EA4\u4ED8\u4FDD\u6301\u4E00\u81F4\u3002")), (0, import_react6.createElement)("div", { className: "te-actions" }, (0, import_react6.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "outline", onClick: () => {
|
|
6645
6977
|
void edit("new");
|
|
6646
|
-
} }, `\u65B0\u5EFA${noun}`), (0,
|
|
6647
|
-
(0,
|
|
6648
|
-
notice ? (0,
|
|
6978
|
+
} }, `\u65B0\u5EFA${noun}`), (0, import_react6.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "primary", onClick: choose }, `\u5B89\u88C5${noun}`))),
|
|
6979
|
+
(0, import_react6.createElement)("div", { className: "te-toolbar" }, (0, import_react6.createElement)("input", { className: "te-input", placeholder: `\u641C\u7D22${noun}\u540D\u79F0${kind === "skill" ? "\u6216\u63CF\u8FF0" : ""}`, value: query, onChange: (e) => setQuery(e.target.value) }), (0, import_react6.createElement)("select", { className: "te-input", "aria-label": "\u7B5B\u9009\u6765\u6E90", value: filter, onChange: (e) => setFilter(e.target.value) }, (0, import_react6.createElement)("option", { value: "all" }, `\u5168\u90E8\u6765\u6E90 \xB7 ${rows.length}`), (0, import_react6.createElement)("option", { value: "project" }, "\u9879\u76EE"), (0, import_react6.createElement)("option", { value: "user" }, "\u4E2A\u4EBA")), (0, import_react6.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "ghost", onClick: () => refresh((n) => n + 1), disabled: loading }, "\u5237\u65B0")),
|
|
6980
|
+
notice ? (0, import_react6.createElement)("div", { className: "te-success", role: "status" }, notice) : null,
|
|
6649
6981
|
!importing && !editing && !deleting ? status() : null,
|
|
6650
|
-
loading ? (0,
|
|
6982
|
+
loading ? (0, import_react6.createElement)("div", { className: "te-empty", role: "status" }, "\u6B63\u5728\u52A0\u8F7D\u2026") : visible.length === 0 ? (0, import_react6.createElement)("div", { className: "te-empty" }, (0, import_react6.createElement)("h3", null, query || filter !== "all" ? "\u6CA1\u6709\u5339\u914D\u7684\u7ED3\u679C" : `\u8FD8\u6CA1\u6709${noun}`), (0, import_react6.createElement)("p", null, "\u8C03\u6574\u7B5B\u9009\uFF0C\u6216\u4F7F\u7528\u53F3\u4E0A\u89D2\u6309\u94AE\u6DFB\u52A0\u3002")) : (0, import_react6.createElement)("div", { className: "te-resource-grid" }, ...visible.map((row2) => (0, import_react6.createElement)(
|
|
6651
6983
|
"article",
|
|
6652
6984
|
{ className: "te-resource-card", key: row2.source + "/" + row2.name },
|
|
6653
|
-
(0,
|
|
6654
|
-
(0,
|
|
6655
|
-
(0,
|
|
6656
|
-
(0,
|
|
6985
|
+
(0, import_react6.createElement)("div", { className: "te-card-top" }, (0, import_react6.createElement)("span", { className: "te-resource-icon", "aria-hidden": true }, kind === "skill" ? "\u25C7" : "\u2261"), (0, import_react6.createElement)("span", { className: "te-badge" }, sourceText(row2.source))),
|
|
6986
|
+
(0, import_react6.createElement)("h3", null, row2.name),
|
|
6987
|
+
(0, import_react6.createElement)("p", null, row2.description || "\u9879\u76EE\u7EA6\u5B9A\u4E0E\u6267\u884C\u89C4\u5219"),
|
|
6988
|
+
(0, import_react6.createElement)("div", { className: "te-actions" }, kind === "skill" && onConfigureSkill ? (0, import_react6.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "primary", size: "sm", onClick: () => onConfigureSkill({ source: row2.source === "codex-project" ? "codex-project" : levelOf(row2), name: row2.name }) }, "\u914D\u7F6E\u89C4\u5219") : null, (0, import_react6.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "outline", size: "sm", onClick: () => {
|
|
6657
6989
|
void edit(row2, true);
|
|
6658
|
-
} }, "\u67E5\u770B"), levelOf(row2) === "bundled" ? (0,
|
|
6990
|
+
} }, "\u67E5\u770B"), levelOf(row2) === "bundled" ? (0, import_react6.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "ghost", size: "sm", disabled: busy, onClick: () => {
|
|
6659
6991
|
void copyTemplate(row2);
|
|
6660
|
-
} }, "\u4EE5\u6B64\u4E3A\u6A21\u677F\u65B0\u5EFA") : row2.source !== "codex-project" ? (0,
|
|
6992
|
+
} }, "\u4EE5\u6B64\u4E3A\u6A21\u677F\u65B0\u5EFA") : row2.source !== "codex-project" ? (0, import_react6.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "ghost", size: "sm", onClick: () => {
|
|
6661
6993
|
void edit(row2);
|
|
6662
|
-
} }, "\u7F16\u8F91") : null, levelOf(row2) !== "bundled" && row2.source !== "codex-project" ? (0,
|
|
6994
|
+
} }, "\u7F16\u8F91") : null, levelOf(row2) !== "bundled" && row2.source !== "codex-project" ? (0, import_react6.createElement)("button", { className: "te-delete", onClick: () => {
|
|
6663
6995
|
setDeleting(row2);
|
|
6664
6996
|
setError("");
|
|
6665
6997
|
} }, "\u5220\u9664") : null)
|
|
6666
6998
|
))),
|
|
6667
|
-
kind === "skill" ? (0,
|
|
6999
|
+
kind === "skill" ? (0, import_react6.createElement)("button", { className: "te-link", onClick: () => {
|
|
6668
7000
|
setImporting(true);
|
|
6669
7001
|
setManual(true);
|
|
6670
7002
|
setError("");
|
|
6671
7003
|
} }, "\u9AD8\u7EA7\uFF1A\u4ECE Harness \u4E3B\u673A\u8DEF\u5F84\u5B89\u88C5") : null,
|
|
6672
|
-
importing ? (0,
|
|
7004
|
+
importing ? (0, import_react6.createElement)(
|
|
6673
7005
|
ResourceModal,
|
|
6674
|
-
{ title: `\u5B89\u88C5${noun}`, description: "\u5148\u68C0\u67E5\u5185\u5BB9\u548C\u5B89\u88C5\u4F4D\u7F6E\uFF0C\u786E\u8BA4\u540E\u624D\u4F1A\u5199\u5165\u3002", onClose: close, footer: (0,
|
|
7006
|
+
{ title: `\u5B89\u88C5${noun}`, description: "\u5148\u68C0\u67E5\u5185\u5BB9\u548C\u5B89\u88C5\u4F4D\u7F6E\uFF0C\u786E\u8BA4\u540E\u624D\u4F1A\u5199\u5165\u3002", onClose: close, footer: (0, import_react6.createElement)("div", { className: "te-actions" }, (0, import_react6.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "ghost", disabled: busy, onClick: close }, "\u53D6\u6D88"), (0, import_react6.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "primary", disabled: busy || !preview || preview.conflict, onClick: () => {
|
|
6675
7007
|
void install();
|
|
6676
7008
|
} }, busy ? "\u5904\u7406\u4E2D\u2026" : "\u786E\u8BA4\u5B89\u88C5")) },
|
|
6677
7009
|
targets(),
|
|
6678
|
-
(0,
|
|
6679
|
-
manual ? (0,
|
|
7010
|
+
(0, import_react6.createElement)("div", { className: "te-actions" }, (0, import_react6.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "outline", disabled: busy, onClick: choose }, "\u91CD\u65B0\u9009\u62E9"), kind === "skill" ? (0, import_react6.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "ghost", disabled: busy, onClick: () => setManual(!manual) }, manual ? "\u6536\u8D77\u9AD8\u7EA7\u65B9\u5F0F" : "\u4E3B\u673A\u8DEF\u5F84") : null),
|
|
7011
|
+
manual ? (0, import_react6.createElement)("div", { className: "te-advanced" }, (0, import_react6.createElement)("p", null, "\u6B64\u8DEF\u5F84\u4F4D\u4E8E Harness \u4E3B\u673A\uFF1B\u6D4F\u89C8\u5668\u9009\u62E9\u5668\u8BFB\u53D6\u7684\u662F\u4F60\u5F53\u524D\u7535\u8111\u3002"), (0, import_react6.createElement)("div", { className: "te-toolbar" }, (0, import_react6.createElement)("input", { className: "te-input", "aria-label": "\u4E3B\u673A\u6280\u80FD\u76EE\u5F55", value: sourceDir, onChange: (e) => {
|
|
6680
7012
|
setSourceDir(e.target.value);
|
|
6681
7013
|
setRequest(null);
|
|
6682
|
-
} }), (0,
|
|
7014
|
+
} }), (0, import_react6.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "outline", onClick: () => {
|
|
6683
7015
|
void browse(sourceDir);
|
|
6684
|
-
} }, "\u6D4F\u89C8"), (0,
|
|
7016
|
+
} }, "\u6D4F\u89C8"), (0, import_react6.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "outline", disabled: busy || !sourceDir.trim(), onClick: () => setRequest({ kind, level, path: workspace, files: [], sourceDir }) }, "\u9884\u89C8\u76EE\u5F55")), (0, import_react6.createElement)("div", { className: "te-dir-list" }, browsePath ? (0, import_react6.createElement)("button", { onClick: () => {
|
|
6685
7017
|
void browse(browsePath.replace(/[\\/][^\\/]+[\\/]?$/u, "") || "/");
|
|
6686
|
-
} }, "\u2191 \u4E0A\u7EA7\u76EE\u5F55") : null, ...dirs.map((d) => (0,
|
|
7018
|
+
} }, "\u2191 \u4E0A\u7EA7\u76EE\u5F55") : null, ...dirs.map((d) => (0, import_react6.createElement)("button", { key: d.name, onClick: () => {
|
|
6687
7019
|
setRequest(null);
|
|
6688
7020
|
void browse(browsePath.replace(/[\\/]+$/u, "") + "/" + d.name);
|
|
6689
7021
|
} }, d.name + (d.hasSkill ? " \xB7 SKILL.md" : ""))))) : null,
|
|
6690
|
-
busy ? (0,
|
|
7022
|
+
busy ? (0, import_react6.createElement)("p", { role: "status" }, "\u6B63\u5728\u6821\u9A8C\u6587\u4EF6\uFF0C\u8BF7\u7A0D\u5019\u2026") : null,
|
|
6691
7023
|
status(),
|
|
6692
|
-
preview ? (0,
|
|
7024
|
+
preview ? (0, import_react6.createElement)("div", { className: "te-preview" }, (0, import_react6.createElement)("h3", null, preview.name), (0, import_react6.createElement)("p", null, preview.description), (0, import_react6.createElement)("div", { className: "te-actions" }, (0, import_react6.createElement)("span", { className: "te-badge" }, `${preview.files} \u4E2A\u6587\u4EF6`), (0, import_react6.createElement)("span", { className: "te-badge" }, sizeText(preview.bytes))), (0, import_react6.createElement)("code", { className: "te-path" }, preview.target), preview.conflict ? (0, import_react6.createElement)("div", { className: "te-alert", role: "alert" }, "\u5DF2\u6709\u540C\u540D\u8D44\u6E90\u3002\u8BF7\u53D6\u6D88\u5E76\u68C0\u67E5\u73B0\u6709\u5185\u5BB9\uFF0C\u5B89\u88C5\u4E0D\u4F1A\u8986\u76D6\u5B83\u3002") : null, (0, import_react6.createElement)("div", { className: "te-markdown" }, (0, import_react6.createElement)(import_dsh_client_ui_primitives5.MarkdownText, { text: preview.content, labels }))) : null
|
|
6693
7025
|
) : null,
|
|
6694
|
-
editing ? (0,
|
|
7026
|
+
editing ? (0, import_react6.createElement)(
|
|
6695
7027
|
ResourceModal,
|
|
6696
|
-
{ title: editing === "new" ? `\u65B0\u5EFA${noun}` : `${viewing ? "\u67E5\u770B" : "\u7F16\u8F91"}${noun} \xB7 ${name}`, onClose: close, footer: (0,
|
|
7028
|
+
{ title: editing === "new" ? `\u65B0\u5EFA${noun}` : `${viewing ? "\u67E5\u770B" : "\u7F16\u8F91"}${noun} \xB7 ${name}`, onClose: close, footer: (0, import_react6.createElement)("div", { className: "te-actions" }, (0, import_react6.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "ghost", disabled: busy, onClick: close }, "\u5173\u95ED"), editing !== "new" && levelOf(editing) === "bundled" ? (0, import_react6.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "outline", disabled: busy, onClick: () => {
|
|
6697
7029
|
void copyTemplate(editing);
|
|
6698
|
-
} }, "\u4EE5\u6B64\u4E3A\u6A21\u677F\u65B0\u5EFA") : null, !readonly ? (0,
|
|
7030
|
+
} }, "\u4EE5\u6B64\u4E3A\u6A21\u677F\u65B0\u5EFA") : null, !readonly ? (0, import_react6.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "outline", disabled: busy, onClick: () => setViewing(!viewing) }, viewing ? "\u7F16\u8F91\u5185\u5BB9" : "\u9884\u89C8") : null, !readonly ? (0, import_react6.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "primary", disabled: busy || !name.trim() || !body2.trim() || kind === "skill" && !description.trim(), onClick: () => {
|
|
6699
7031
|
void save();
|
|
6700
7032
|
} }, busy ? "\u5904\u7406\u4E2D\u2026" : "\u4FDD\u5B58") : null) },
|
|
6701
|
-
!readonly ? targets() : (0,
|
|
6702
|
-
templateSource ? (0,
|
|
7033
|
+
!readonly ? targets() : (0, import_react6.createElement)("p", { className: "te-badge" }, editing.source === "codex-project" ? "Codex \u9879\u76EE\u6280\u80FD \xB7 \u6B63\u6587\u8BF7\u5728\u539F\u76EE\u5F55\u7F16\u8F91" : "\u5185\u7F6E\u6837\u672C \xB7 \u53EA\u8BFB"),
|
|
7034
|
+
templateSource ? (0, import_react6.createElement)("p", null, `\u4EE5\u300C${templateSource.name}\u300D\u4E3A\u6A21\u677F\u590D\u5236\u6B63\u6587\u3002\u65B0\u8D44\u6E90\u7684\u5B8C\u6210\u51ED\u8BC1\u3001\u89C4\u5219\u548C\u9636\u6BB5\u7ED1\u5B9A\u9700\u5355\u72EC\u914D\u7F6E\uFF0C\u4FDD\u5B58\u672C\u8EAB\u4E0D\u4F1A\u542F\u7528\u5B83\u3002`) : null,
|
|
6703
7035
|
status(),
|
|
6704
|
-
viewing ? (0,
|
|
7036
|
+
viewing ? (0, import_react6.createElement)("div", { className: "te-markdown" }, (0, import_react6.createElement)(import_dsh_client_ui_primitives5.MarkdownText, { text: body2, labels })) : (0, import_react6.createElement)("div", { className: "te-form" }, (0, import_react6.createElement)("label", null, "\u540D\u79F0", (0, import_react6.createElement)("input", { className: "te-input", value: name, disabled: editing !== "new" || busy, onChange: (e) => setName(e.target.value), placeholder: "\u5C0F\u5199\u5B57\u6BCD\u3001\u6570\u5B57\u548C\u8FDE\u5B57\u7B26" })), kind === "skill" ? (0, import_react6.createElement)("label", null, "\u63CF\u8FF0", (0, import_react6.createElement)("input", { className: "te-input", value: description, disabled: busy, onChange: (e) => setDescription(e.target.value) })) : null, kind === "skill" ? (0, import_react6.createElement)("label", null, "\u4F7F\u7528\u65F6\u673A\uFF08\u53EF\u9009\uFF09", (0, import_react6.createElement)("input", { className: "te-input", value: whenToUse, disabled: busy, onChange: (e) => setWhenToUse(e.target.value) })) : null, (0, import_react6.createElement)("label", null, "Markdown \u6B63\u6587", (0, import_react6.createElement)("textarea", { className: "te-input te-editor", value: body2, disabled: busy, onChange: (e) => setBody(e.target.value) })))
|
|
6705
7037
|
) : null,
|
|
6706
|
-
deleting ? (0,
|
|
7038
|
+
deleting ? (0, import_react6.createElement)(ResourceModal, { title: `\u5220\u9664${noun}\u300C${deleting.name}\u300D\uFF1F`, description: levelOf(deleting) === "user" ? "\u8FD9\u662F\u4E2A\u4EBA\u5168\u5C40\u8D44\u6E90\uFF0C\u5220\u9664\u4F1A\u5F71\u54CD\u6B64\u4E3B\u673A\u4E0A\u7684\u6240\u6709\u9879\u76EE\u3002" : "\u5220\u9664\u5C06\u5F71\u54CD\u5F53\u524D\u9879\u76EE\u3002", onClose: close, footer: (0, import_react6.createElement)("div", { className: "te-actions" }, (0, import_react6.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "outline", disabled: busy, onClick: close }, "\u4FDD\u7559"), (0, import_react6.createElement)("button", { className: "te-danger-button", disabled: busy, onClick: () => {
|
|
6707
7039
|
void remove();
|
|
6708
|
-
} }, busy ? "\u5220\u9664\u4E2D\u2026" : "\u786E\u8BA4\u6C38\u4E45\u5220\u9664")) }, (0,
|
|
7040
|
+
} }, busy ? "\u5220\u9664\u4E2D\u2026" : "\u786E\u8BA4\u6C38\u4E45\u5220\u9664")) }, (0, import_react6.createElement)("code", { className: "te-path" }, `${roots?.[levelOf(deleting) === "user" ? "user" : "project"] ?? "\u8D44\u6E90\u76EE\u5F55"}/${deleting.name}${kind === "rule" ? ".md" : ""}`), (0, import_react6.createElement)("p", null, "\u6B64\u64CD\u4F5C\u4E0D\u4F1A\u8FDB\u5165\u56DE\u6536\u7AD9\uFF0C\u8BF7\u786E\u8BA4\u5DF2\u6709\u5907\u4EFD\u3002"), status()) : null
|
|
6709
7041
|
);
|
|
6710
7042
|
}
|
|
6711
7043
|
|
|
@@ -6937,11 +7269,11 @@ function resolveFlow(flow, project) {
|
|
|
6937
7269
|
// src/client/SkillManager.tsx
|
|
6938
7270
|
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
6939
7271
|
function SkillManager({ workspace, remote }) {
|
|
6940
|
-
const [config, setConfig] = (0,
|
|
6941
|
-
const [rules, setRules] = (0,
|
|
6942
|
-
const [selected, setSelected] = (0,
|
|
6943
|
-
const [message, setMessage] = (0,
|
|
6944
|
-
(0,
|
|
7272
|
+
const [config, setConfig] = (0, import_react7.useState)(null);
|
|
7273
|
+
const [rules, setRules] = (0, import_react7.useState)([]);
|
|
7274
|
+
const [selected, setSelected] = (0, import_react7.useState)(null);
|
|
7275
|
+
const [message, setMessage] = (0, import_react7.useState)("");
|
|
7276
|
+
(0, import_react7.useEffect)(() => {
|
|
6945
7277
|
let active = true;
|
|
6946
7278
|
void Promise.all([remote.read(workspace), remote.listRules(workspace)]).then(([saved, availableRules]) => {
|
|
6947
7279
|
if (!active) return;
|
|
@@ -7006,14 +7338,14 @@ function SkillManager({ workspace, remote }) {
|
|
|
7006
7338
|
}
|
|
7007
7339
|
|
|
7008
7340
|
// src/client/RuleManager.tsx
|
|
7009
|
-
var
|
|
7341
|
+
var import_react8 = require("react");
|
|
7010
7342
|
function RuleManager(props) {
|
|
7011
|
-
return (0,
|
|
7343
|
+
return (0, import_react8.createElement)(ResourceManager, { ...props, key: props.workspace, kind: "rule" });
|
|
7012
7344
|
}
|
|
7013
7345
|
|
|
7014
7346
|
// src/client/TaskLedger.tsx
|
|
7015
|
-
var
|
|
7016
|
-
var
|
|
7347
|
+
var import_react9 = require("react");
|
|
7348
|
+
var import_dsh_client_ui_primitives6 = require("@deepseek-ai/dsh-client-ui-primitives");
|
|
7017
7349
|
var card3 = {
|
|
7018
7350
|
display: "flex",
|
|
7019
7351
|
flexDirection: "column",
|
|
@@ -7051,10 +7383,10 @@ var badge = {
|
|
|
7051
7383
|
color: "var(--dsw-alias-label-secondary)"
|
|
7052
7384
|
};
|
|
7053
7385
|
function verdictDot(outcome) {
|
|
7054
|
-
return (0,
|
|
7386
|
+
return (0, import_react9.createElement)(import_dsh_client_ui_primitives6.StateDot, { state: outcome === "pass" ? "done" : "error" });
|
|
7055
7387
|
}
|
|
7056
7388
|
function itemStatusDot(status) {
|
|
7057
|
-
return (0,
|
|
7389
|
+
return (0, import_react9.createElement)(import_dsh_client_ui_primitives6.StateDot, { state: status === "done" ? "done" : "ongoing" });
|
|
7058
7390
|
}
|
|
7059
7391
|
function timeText(at) {
|
|
7060
7392
|
return at.slice(0, 19).replace("T", " ");
|
|
@@ -7062,94 +7394,94 @@ function timeText(at) {
|
|
|
7062
7394
|
function itemAudit(item) {
|
|
7063
7395
|
const lines = [];
|
|
7064
7396
|
if (item.dispatch !== void 0) {
|
|
7065
|
-
lines.push((0,
|
|
7397
|
+
lines.push((0, import_react9.createElement)(
|
|
7066
7398
|
"div",
|
|
7067
7399
|
{ key: "dispatch", style: metaLine },
|
|
7068
|
-
(0,
|
|
7069
|
-
(0,
|
|
7070
|
-
(0,
|
|
7400
|
+
(0, import_react9.createElement)("span", { style: badge }, "\u5DF2\u5F00\u59CB"),
|
|
7401
|
+
(0, import_react9.createElement)("span", null, item.dispatch.description === "" ? "\uFF08\u65E0\u63CF\u8FF0\uFF09" : item.dispatch.description),
|
|
7402
|
+
(0, import_react9.createElement)("span", { style: badge }, timeText(item.dispatch.at))
|
|
7071
7403
|
));
|
|
7072
7404
|
}
|
|
7073
7405
|
if (item.review !== void 0) {
|
|
7074
7406
|
const spec = item.review.spec;
|
|
7075
7407
|
const quality = item.review.quality;
|
|
7076
|
-
lines.push((0,
|
|
7408
|
+
lines.push((0, import_react9.createElement)(
|
|
7077
7409
|
"div",
|
|
7078
7410
|
{ key: "review", style: metaLine },
|
|
7079
7411
|
verdictDot(spec.outcome),
|
|
7080
|
-
(0,
|
|
7081
|
-
(0,
|
|
7412
|
+
(0, import_react9.createElement)("span", null, `\u89C4\u683C\u7B26\u5408 ${spec.outcome === "pass" ? "\u901A\u8FC7" : "\u4E0D\u901A\u8FC7"}`),
|
|
7413
|
+
(0, import_react9.createElement)("span", null, "\xB7"),
|
|
7082
7414
|
verdictDot(quality.outcome),
|
|
7083
|
-
(0,
|
|
7415
|
+
(0, import_react9.createElement)("span", null, `\u4EE3\u7801\u8D28\u91CF ${quality.outcome === "pass" ? "\u901A\u8FC7" : "\u4E0D\u901A\u8FC7"}`)
|
|
7084
7416
|
));
|
|
7085
7417
|
const failNotes = [spec, quality].flatMap((stage) => stage.outcome === "fail" ? stage.notes ?? [] : []);
|
|
7086
7418
|
if (failNotes.length > 0) {
|
|
7087
|
-
lines.push((0,
|
|
7419
|
+
lines.push((0, import_react9.createElement)(
|
|
7088
7420
|
"div",
|
|
7089
7421
|
{ key: "notes", style: metaLine },
|
|
7090
|
-
...failNotes.map((note) => (0,
|
|
7422
|
+
...failNotes.map((note) => (0, import_react9.createElement)("span", { key: note, style: badge }, note))
|
|
7091
7423
|
));
|
|
7092
7424
|
}
|
|
7093
7425
|
}
|
|
7094
7426
|
if (lines.length === 0) {
|
|
7095
7427
|
const status = item.status === "done" ? "\u5DF2\u6807\u8BB0\u5B8C\u6210\uFF0C\u7F3A\u5C11\u5B9E\u65BD\u9879\u5BA1\u67E5\u8BB0\u5F55" : item.status === "doing" ? "\u5B9E\u65BD\u4E2D\uFF0C\u5F85\u5BA1\u67E5" : "\u5F85\u5F00\u59CB";
|
|
7096
|
-
lines.push((0,
|
|
7428
|
+
lines.push((0, import_react9.createElement)("div", { key: "none", style: metaLine }, (0, import_react9.createElement)("span", { style: badge }, status)));
|
|
7097
7429
|
}
|
|
7098
|
-
return (0,
|
|
7430
|
+
return (0, import_react9.createElement)("div", { style: { display: "flex", flexDirection: "column", gap: 4 } }, ...lines);
|
|
7099
7431
|
}
|
|
7100
7432
|
function sonarAudit(task) {
|
|
7101
7433
|
if (!task.sonar) return null;
|
|
7102
7434
|
const audit = task.sonar.audit;
|
|
7103
|
-
if (!audit) return (0,
|
|
7435
|
+
if (!audit) return (0, import_react9.createElement)("div", { style: metaLine }, "SonarQube \u5DF2\u542F\u7528\uFF0C\u5C1A\u672A\u8FD0\u884C\u4EE3\u7801\u5BA1\u6838\u3002");
|
|
7104
7436
|
const source = { "ide-local": "\u672C\u5730\u89C4\u5219\u5BA1\u6838", local: "\u672C\u673A\u4E0A\u4F20\u626B\u63CF", ci: "CI \u626B\u63CF" }[task.sonar.source] ?? task.sonar.source;
|
|
7105
7437
|
const reviewGate = audit.review_gate ?? audit.gate;
|
|
7106
7438
|
const outcome = reviewGate === "OK" ? "\u901A\u8FC7" : "\u672A\u901A\u8FC7";
|
|
7107
7439
|
const unresolved = audit.unresolved_count ?? audit.blocking_count;
|
|
7108
|
-
return (0,
|
|
7440
|
+
return (0, import_react9.createElement)(
|
|
7109
7441
|
"details",
|
|
7110
7442
|
{ style: { borderTop: "1px solid var(--dsw-alias-border-l2)", paddingTop: 8 } },
|
|
7111
|
-
(0,
|
|
7443
|
+
(0, import_react9.createElement)(
|
|
7112
7444
|
"summary",
|
|
7113
7445
|
{ style: { cursor: "pointer", fontSize: 13 } },
|
|
7114
7446
|
`\u6700\u8FD1\u4E00\u6B21 SonarQube \u5BA1\u6838\uFF1A${outcome} \xB7 \u672A\u89E3\u51B3 ${unresolved} \u6761 \xB7 \u539F\u59CB\u547D\u4E2D ${audit.blocking_count} \u6761 \xB7 ${timeText(audit.checked_at)}`
|
|
7115
7447
|
),
|
|
7116
|
-
(0,
|
|
7448
|
+
(0, import_react9.createElement)(
|
|
7117
7449
|
"p",
|
|
7118
7450
|
{ style: metaLine },
|
|
7119
7451
|
`\u6765\u6E90\uFF1A${source}\uFF1B\u5206\u6790\u76EE\u6807\uFF1A${audit.target}\uFF1B\u539F\u59CB\u7ED3\u679C\uFF1A${audit.gate}\u3002\u8FD9\u662F\u8BE5\u6B21\u5BA1\u6838\u8BB0\u5F55\uFF1B\u4EE3\u7801\u6216\u89C4\u5219\u53D8\u66F4\u540E\u9700\u91CD\u65B0\u6D4B\u8BD5\u5E76\u5BA1\u6838\u3002`
|
|
7120
7452
|
),
|
|
7121
|
-
audit.report_path ? (0,
|
|
7122
|
-
audit.scanned_files?.length ? (0,
|
|
7453
|
+
audit.report_path ? (0, import_react9.createElement)("p", { style: metaLine }, `\u5BA1\u6838\u6587\u4EF6\uFF1A${audit.report_path}`) : null,
|
|
7454
|
+
audit.scanned_files?.length ? (0, import_react9.createElement)(
|
|
7123
7455
|
"details",
|
|
7124
7456
|
null,
|
|
7125
|
-
(0,
|
|
7126
|
-
...audit.scanned_files.map((file) => (0,
|
|
7457
|
+
(0, import_react9.createElement)("summary", { style: { cursor: "pointer", fontSize: 12 } }, `\u672C\u6B21\u5206\u6790\u6587\u4EF6\uFF08${audit.scanned_files.length}\uFF09`),
|
|
7458
|
+
...audit.scanned_files.map((file) => (0, import_react9.createElement)("div", { key: file, style: metaLine }, file))
|
|
7127
7459
|
) : null,
|
|
7128
|
-
audit.profile_coverage?.length ? (0,
|
|
7460
|
+
audit.profile_coverage?.length ? (0, import_react9.createElement)(
|
|
7129
7461
|
"details",
|
|
7130
7462
|
null,
|
|
7131
|
-
(0,
|
|
7132
|
-
...audit.profile_coverage.map((profile) => (0,
|
|
7463
|
+
(0, import_react9.createElement)("summary", { style: { cursor: "pointer", fontSize: 12 } }, "\u9879\u76EE\u89C4\u5219\u4E0E\u672C\u5730\u5206\u6790\u5668"),
|
|
7464
|
+
...audit.profile_coverage.map((profile) => (0, import_react9.createElement)(
|
|
7133
7465
|
"div",
|
|
7134
7466
|
{ key: profile.language, style: metaLine },
|
|
7135
7467
|
`${profile.language}\uFF1A\u670D\u52A1\u7AEF\u542F\u7528 ${profile.active_rules} \u6761\u89C4\u5219\uFF1B\u672C\u5730\u5206\u6790\u5668 ${profile.analyzer}`
|
|
7136
7468
|
)),
|
|
7137
|
-
(0,
|
|
7469
|
+
(0, import_react9.createElement)("div", { style: metaLine }, "\u6B64\u5904\u663E\u793A\u8BED\u8A00\u5206\u6790\u5668\u72B6\u6001\uFF0C\u4E0D\u80FD\u8BC1\u660E\u6BCF\u6761\u670D\u52A1\u7AEF\u89C4\u5219\u90FD\u53EF\u5728\u672C\u5730\u6267\u884C\u3002")
|
|
7138
7470
|
) : null,
|
|
7139
|
-
...audit.uncovered_files.map((file) => (0,
|
|
7471
|
+
...audit.uncovered_files.map((file) => (0, import_react9.createElement)(
|
|
7140
7472
|
"div",
|
|
7141
7473
|
{ key: `uncovered-${file}`, style: metaLine },
|
|
7142
7474
|
`\u672A\u8986\u76D6\uFF1A${file}`
|
|
7143
7475
|
)),
|
|
7144
|
-
...(audit.dispositions ?? []).map((entry) => (0,
|
|
7476
|
+
...(audit.dispositions ?? []).map((entry) => (0, import_react9.createElement)(
|
|
7145
7477
|
"div",
|
|
7146
7478
|
{ key: `disposition-${entry.issue_key}`, style: metaLine },
|
|
7147
7479
|
`\u4EBA\u5DE5\u786E\u8BA4\u8BEF\u62A5\uFF1A${entry.issue_key} \xB7 ${entry.reason} \xB7 ${entry.approved_at}`
|
|
7148
7480
|
)),
|
|
7149
|
-
audit.findings.length === 0 ? (0,
|
|
7481
|
+
audit.findings.length === 0 ? (0, import_react9.createElement)("p", { style: metaLine }, "\u6CA1\u6709\u65B0\u589E\u4EE3\u7801\u95EE\u9898\u3002") : (0, import_react9.createElement)(
|
|
7150
7482
|
"div",
|
|
7151
7483
|
{ style: { display: "flex", flexDirection: "column", gap: 6 } },
|
|
7152
|
-
...audit.findings.map((finding) => (0,
|
|
7484
|
+
...audit.findings.map((finding) => (0, import_react9.createElement)(
|
|
7153
7485
|
"div",
|
|
7154
7486
|
{ key: finding.key, style: {
|
|
7155
7487
|
...itemRow,
|
|
@@ -7157,26 +7489,26 @@ function sonarAudit(task) {
|
|
|
7157
7489
|
fontSize: 12,
|
|
7158
7490
|
overflowWrap: "anywhere"
|
|
7159
7491
|
} },
|
|
7160
|
-
(0,
|
|
7492
|
+
(0, import_react9.createElement)(
|
|
7161
7493
|
"div",
|
|
7162
7494
|
{ style: headerRow },
|
|
7163
|
-
(0,
|
|
7164
|
-
(0,
|
|
7165
|
-
(0,
|
|
7495
|
+
(0, import_react9.createElement)("strong", null, finding.severity),
|
|
7496
|
+
(0, import_react9.createElement)("code", null, finding.rule),
|
|
7497
|
+
(0, import_react9.createElement)("span", null, `${finding.file}${finding.line === void 0 ? "" : `:${finding.line}`}`)
|
|
7166
7498
|
),
|
|
7167
|
-
(0,
|
|
7499
|
+
(0, import_react9.createElement)("span", null, finding.message)
|
|
7168
7500
|
))
|
|
7169
7501
|
)
|
|
7170
7502
|
);
|
|
7171
7503
|
}
|
|
7172
7504
|
function TaskLedger({ workspace, remote }) {
|
|
7173
|
-
const [tasks, setTasks] = (0,
|
|
7174
|
-
const [error, setError] = (0,
|
|
7175
|
-
const [loading, setLoading] = (0,
|
|
7176
|
-
const [query, setQuery] = (0,
|
|
7177
|
-
const [risk, setRisk] = (0,
|
|
7178
|
-
const [stage, setStage] = (0,
|
|
7179
|
-
const refresh = (0,
|
|
7505
|
+
const [tasks, setTasks] = (0, import_react9.useState)([]);
|
|
7506
|
+
const [error, setError] = (0, import_react9.useState)("");
|
|
7507
|
+
const [loading, setLoading] = (0, import_react9.useState)(true);
|
|
7508
|
+
const [query, setQuery] = (0, import_react9.useState)("");
|
|
7509
|
+
const [risk, setRisk] = (0, import_react9.useState)("all");
|
|
7510
|
+
const [stage, setStage] = (0, import_react9.useState)("all");
|
|
7511
|
+
const refresh = (0, import_react9.useCallback)(() => {
|
|
7180
7512
|
if (workspace === "") return;
|
|
7181
7513
|
setError("");
|
|
7182
7514
|
setLoading(true);
|
|
@@ -7195,59 +7527,59 @@ function TaskLedger({ workspace, remote }) {
|
|
|
7195
7527
|
if (timer !== void 0) clearTimeout(timer);
|
|
7196
7528
|
});
|
|
7197
7529
|
}, [remote, workspace]);
|
|
7198
|
-
(0,
|
|
7530
|
+
(0, import_react9.useEffect)(() => {
|
|
7199
7531
|
refresh();
|
|
7200
7532
|
}, [refresh]);
|
|
7201
7533
|
const visible = tasks.filter((task) => `${task.task_id} ${task.title} ${task.branch}`.toLowerCase().includes(query.toLowerCase()) && (risk === "all" || task.risk_level === risk) && (stage === "all" || task.stage === stage));
|
|
7202
|
-
return (0,
|
|
7534
|
+
return (0, import_react9.createElement)(
|
|
7203
7535
|
"div",
|
|
7204
7536
|
{ style: styles.section },
|
|
7205
|
-
(0,
|
|
7537
|
+
(0, import_react9.createElement)(
|
|
7206
7538
|
"div",
|
|
7207
7539
|
{ className: "te-toolbar" },
|
|
7208
|
-
(0,
|
|
7209
|
-
(0,
|
|
7210
|
-
(0,
|
|
7540
|
+
(0, import_react9.createElement)("input", { className: "te-input", placeholder: "\u641C\u7D22\u4EFB\u52A1\u3001\u6807\u9898\u6216\u5206\u652F", value: query, onChange: (e) => setQuery(e.target.value) }),
|
|
7541
|
+
(0, import_react9.createElement)("select", { className: "te-input", "aria-label": "\u98CE\u9669\u7B5B\u9009", value: risk, onChange: (e) => setRisk(e.target.value) }, (0, import_react9.createElement)("option", { value: "all" }, "\u5168\u90E8\u98CE\u9669"), (0, import_react9.createElement)("option", { value: "standard" }, "\u6807\u51C6"), (0, import_react9.createElement)("option", { value: "high_risk" }, "\u9AD8\u98CE\u9669")),
|
|
7542
|
+
(0, import_react9.createElement)("select", { className: "te-input", "aria-label": "\u9636\u6BB5\u7B5B\u9009", value: stage, onChange: (e) => setStage(e.target.value) }, (0, import_react9.createElement)("option", { value: "all" }, "\u5168\u90E8\u9636\u6BB5"), ...Array.from(new Set(tasks.map((t) => t.stage))).map((value) => (0, import_react9.createElement)("option", { key: value, value }, value)))
|
|
7211
7543
|
),
|
|
7212
|
-
(0,
|
|
7544
|
+
(0, import_react9.createElement)(
|
|
7213
7545
|
"div",
|
|
7214
7546
|
{ style: headerRow },
|
|
7215
|
-
(0,
|
|
7216
|
-
(0,
|
|
7217
|
-
(0,
|
|
7547
|
+
(0, import_react9.createElement)("span", { style: styles.bindingLabel }, "\u4EFB\u52A1\u53F0\u8D26"),
|
|
7548
|
+
(0, import_react9.createElement)("span", { style: styles.sourceBadge }, "\u53EA\u8BFB \xB7 \u6765\u81EA .dsh/task-*.json"),
|
|
7549
|
+
(0, import_react9.createElement)(import_dsh_client_ui_primitives6.Button, { variant: "outline", size: "sm", disabled: loading, onClick: refresh }, loading ? "\u8BFB\u53D6\u4E2D\u2026" : "\u5237\u65B0")
|
|
7218
7550
|
),
|
|
7219
|
-
loading ? (0,
|
|
7551
|
+
loading ? (0, import_react9.createElement)("p", { role: "status" }, "\u6B63\u5728\u8BFB\u53D6\u4EFB\u52A1\u2026") : error !== "" ? (0, import_react9.createElement)("p", { style: styles.status }, error) : tasks.length === 0 ? (0, import_react9.createElement)("p", { style: styles.muted }, "\u5F53\u524D\u5DE5\u4F5C\u533A\u8FD8\u6CA1\u6709\u4EFB\u52A1\uFF1A\u5F00\u5DE5\u540E\uFF08dev_task create\uFF09\u4F1A\u5728\u8FD9\u91CC\u5217\u51FA\u5B9E\u65BD\u4E0E\u5BA1\u67E5\u8BB0\u5F55\u3002") : visible.length === 0 ? (0, import_react9.createElement)("div", { className: "te-empty" }, "\u6CA1\u6709\u5339\u914D\u7684\u4EFB\u52A1\uFF0C\u8BF7\u8C03\u6574\u7B5B\u9009\u3002") : (0, import_react9.createElement)(
|
|
7220
7552
|
"div",
|
|
7221
7553
|
{ style: { display: "flex", flexDirection: "column", gap: 12 } },
|
|
7222
|
-
...visible.map((task) => (0,
|
|
7554
|
+
...visible.map((task) => (0, import_react9.createElement)(
|
|
7223
7555
|
"div",
|
|
7224
7556
|
{ key: task.task_id, style: card3 },
|
|
7225
|
-
(0,
|
|
7557
|
+
(0, import_react9.createElement)(
|
|
7226
7558
|
"div",
|
|
7227
7559
|
{ style: headerRow },
|
|
7228
|
-
(0,
|
|
7229
|
-
(0,
|
|
7230
|
-
(0,
|
|
7231
|
-
task.complexity ? (0,
|
|
7232
|
-
(0,
|
|
7233
|
-
(0,
|
|
7234
|
-
(0,
|
|
7235
|
-
(0,
|
|
7236
|
-
task.updated_at ? (0,
|
|
7560
|
+
(0, import_react9.createElement)("span", { style: { fontSize: 14, fontWeight: 600, color: "var(--dsw-alias-label-primary)" } }, task.task_id),
|
|
7561
|
+
(0, import_react9.createElement)("span", { style: { fontSize: 13, color: "var(--dsw-alias-label-primary)" } }, task.title),
|
|
7562
|
+
(0, import_react9.createElement)("span", { style: badge }, task.stage),
|
|
7563
|
+
task.complexity ? (0, import_react9.createElement)("span", { style: badge }, `\u590D\u6742\u5EA6\uFF1A${{ low: "\u4F4E", medium: "\u4E2D", high: "\u9AD8", ultra: "\u8D85\u9AD8" }[task.complexity] ?? task.complexity}`) : null,
|
|
7564
|
+
(0, import_react9.createElement)("span", { style: badge }, task.branch),
|
|
7565
|
+
(0, import_react9.createElement)("span", { className: "te-badge", style: task.risk_level === "high_risk" ? { color: "var(--dsw-alias-state-error-primary)" } : {} }, task.risk_level === "high_risk" ? "\u9AD8\u98CE\u9669" : "\u6807\u51C6"),
|
|
7566
|
+
(0, import_react9.createElement)("span", { className: "te-badge" }, task.verification_passed ? "\u9A8C\u8BC1\u901A\u8FC7" : "\u5F85\u9A8C\u8BC1"),
|
|
7567
|
+
(0, import_react9.createElement)("span", { className: "te-badge" }, `\u5BA1\u6838\uFF1A${task.review_outcome ?? "pending"}`),
|
|
7568
|
+
task.updated_at ? (0, import_react9.createElement)("span", { style: metaLine }, "\u66F4\u65B0\u4E8E " + timeText(task.updated_at)) : null
|
|
7237
7569
|
),
|
|
7238
7570
|
sonarAudit(task),
|
|
7239
|
-
(0,
|
|
7571
|
+
(0, import_react9.createElement)(
|
|
7240
7572
|
"div",
|
|
7241
7573
|
{ style: { display: "flex", flexDirection: "column" } },
|
|
7242
|
-
...task.items.map((item) => (0,
|
|
7574
|
+
...task.items.map((item) => (0, import_react9.createElement)(
|
|
7243
7575
|
"div",
|
|
7244
7576
|
{ key: item.id, style: itemRow },
|
|
7245
|
-
(0,
|
|
7577
|
+
(0, import_react9.createElement)(
|
|
7246
7578
|
"div",
|
|
7247
7579
|
{ style: headerRow },
|
|
7248
7580
|
itemStatusDot(item.status),
|
|
7249
|
-
(0,
|
|
7250
|
-
(0,
|
|
7581
|
+
(0, import_react9.createElement)("span", { style: { fontSize: 13, color: "var(--dsw-alias-label-primary)" } }, item.id),
|
|
7582
|
+
(0, import_react9.createElement)("span", { style: { fontSize: 12, color: "var(--dsw-alias-label-secondary)" } }, item.title)
|
|
7251
7583
|
),
|
|
7252
7584
|
itemAudit(item)
|
|
7253
7585
|
))
|
|
@@ -7321,29 +7653,29 @@ var TABS = [
|
|
|
7321
7653
|
function Workbench({ useStore, actions, useWorkspaces, remote }) {
|
|
7322
7654
|
const open = useStore((s) => s.open);
|
|
7323
7655
|
const workspaces = useWorkspaces((s) => s.items);
|
|
7324
|
-
const [tab, setTab] = (0,
|
|
7325
|
-
const [workspace, setWorkspace] = (0,
|
|
7656
|
+
const [tab, setTab] = (0, import_react10.useState)("adaptive");
|
|
7657
|
+
const [workspace, setWorkspace] = (0, import_react10.useState)("");
|
|
7326
7658
|
if (!open) return null;
|
|
7327
7659
|
const current = workspaces.some((w) => w.path === workspace) ? workspace : workspaces[0]?.path ?? "";
|
|
7328
|
-
return (0,
|
|
7660
|
+
return (0, import_react10.createElement)(
|
|
7329
7661
|
"div",
|
|
7330
7662
|
{ style: overlay, className: "te-workbench" },
|
|
7331
|
-
(0,
|
|
7332
|
-
(0,
|
|
7663
|
+
(0, import_react10.createElement)("style", null, workbenchTheme),
|
|
7664
|
+
(0, import_react10.createElement)(
|
|
7333
7665
|
"div",
|
|
7334
7666
|
{ style: header },
|
|
7335
|
-
(0,
|
|
7667
|
+
(0, import_react10.createElement)(
|
|
7336
7668
|
"div",
|
|
7337
7669
|
{ style: headerBrand },
|
|
7338
|
-
(0,
|
|
7339
|
-
(0,
|
|
7670
|
+
(0, import_react10.createElement)(IconSettings, { size: 18 }),
|
|
7671
|
+
(0, import_react10.createElement)(
|
|
7340
7672
|
"div",
|
|
7341
7673
|
{ style: headerText },
|
|
7342
|
-
(0,
|
|
7343
|
-
(0,
|
|
7674
|
+
(0, import_react10.createElement)("span", { style: headerTitle }, "\u5DE5\u7A0B\u4EFB\u52A1"),
|
|
7675
|
+
(0, import_react10.createElement)("p", { style: headerSub }, "\u6309\u9700\u6C42\u590D\u6742\u5EA6\u9009\u62E9\u4EFB\u52A1\u6D41\u7A0B \xB7 \u5143\u6280\u80FD\u6302\u8F7D\u9879\u76EE Skill \u4E0E Rule")
|
|
7344
7676
|
)
|
|
7345
7677
|
),
|
|
7346
|
-
(0,
|
|
7678
|
+
(0, import_react10.createElement)(
|
|
7347
7679
|
"button",
|
|
7348
7680
|
{
|
|
7349
7681
|
type: "button",
|
|
@@ -7359,43 +7691,43 @@ function Workbench({ useStore, actions, useWorkspaces, remote }) {
|
|
|
7359
7691
|
event.currentTarget.style.background = "transparent";
|
|
7360
7692
|
}
|
|
7361
7693
|
},
|
|
7362
|
-
(0,
|
|
7694
|
+
(0, import_react10.createElement)(IconClose, { size: 16 })
|
|
7363
7695
|
)
|
|
7364
7696
|
),
|
|
7365
|
-
(0,
|
|
7697
|
+
(0, import_react10.createElement)(
|
|
7366
7698
|
"div",
|
|
7367
7699
|
{ style: tabbar },
|
|
7368
|
-
...TABS.map((t) => (0,
|
|
7700
|
+
...TABS.map((t) => (0, import_react10.createElement)(import_dsh_client_ui_primitives7.Pill, { key: t.id, active: tab === t.id, onClick: () => {
|
|
7369
7701
|
setTab(t.id);
|
|
7370
7702
|
} }, t.label)),
|
|
7371
|
-
workspaces.length > 0 ? (0,
|
|
7703
|
+
workspaces.length > 0 ? (0, import_react10.createElement)("select", {
|
|
7372
7704
|
style: selectStyle,
|
|
7373
7705
|
"aria-label": "\u5F53\u524D\u5DE5\u4F5C\u533A",
|
|
7374
7706
|
value: current,
|
|
7375
7707
|
onChange: (ev) => {
|
|
7376
7708
|
setWorkspace(ev.target.value);
|
|
7377
7709
|
}
|
|
7378
|
-
}, ...workspaces.map((w) => (0,
|
|
7710
|
+
}, ...workspaces.map((w) => (0, import_react10.createElement)("option", { key: w.path, value: w.path }, w.title || w.path))) : null
|
|
7379
7711
|
),
|
|
7380
|
-
(0,
|
|
7712
|
+
(0, import_react10.createElement)(
|
|
7381
7713
|
"div",
|
|
7382
7714
|
{ style: body },
|
|
7383
|
-
(0,
|
|
7715
|
+
(0, import_react10.createElement)(
|
|
7384
7716
|
"div",
|
|
7385
7717
|
{ className: "te-content", key: current },
|
|
7386
|
-
(0,
|
|
7387
|
-
current === "" ? (0,
|
|
7718
|
+
(0, import_react10.createElement)("p", { style: { ...styles.hint, marginBottom: 10 }, title: current }, "\u5DE5\u4F5C\u533A \xB7 " + current),
|
|
7719
|
+
current === "" ? (0, import_react10.createElement)("p", { style: styles.muted }, "\u5F53\u524D\u6CA1\u6709\u5DE5\u4F5C\u533A\uFF1A\u8BF7\u5148\u5728\u4FA7\u680F\u521B\u5EFA\u4E00\u4E2A\u5DE5\u4F5C\u533A\u3002") : tab === "init" ? (0, import_react10.createElement)(InitPanel, { workspace: current, remote }) : tab === "adaptive" ? (0, import_react10.createElement)(AdaptivePanel, { workspace: current, remote, onOpenInit: () => setTab("init") }) : tab === "tasks" ? (0, import_react10.createElement)(TaskLedger, { workspace: current, remote }) : tab === "skills" ? (0, import_react10.createElement)(SkillManager, { workspace: current, remote }) : (0, import_react10.createElement)(RuleManager, { workspace: current, remote })
|
|
7388
7720
|
)
|
|
7389
7721
|
)
|
|
7390
7722
|
);
|
|
7391
7723
|
}
|
|
7392
7724
|
|
|
7393
7725
|
// src/client/TriggerButton.tsx
|
|
7394
|
-
var
|
|
7726
|
+
var import_react11 = require("react");
|
|
7395
7727
|
var hover = "var(--dsw-alias-bg-layer-2)";
|
|
7396
7728
|
var label2 = "var(--dsw-alias-label-primary)";
|
|
7397
7729
|
function TriggerButton({ wide, actions }) {
|
|
7398
|
-
return (0,
|
|
7730
|
+
return (0, import_react11.createElement)(
|
|
7399
7731
|
"button",
|
|
7400
7732
|
{
|
|
7401
7733
|
type: "button",
|
|
@@ -7435,8 +7767,8 @@ function TriggerButton({ wide, actions }) {
|
|
|
7435
7767
|
transition: "background 120ms ease"
|
|
7436
7768
|
}
|
|
7437
7769
|
},
|
|
7438
|
-
(0,
|
|
7439
|
-
wide ? (0,
|
|
7770
|
+
(0, import_react11.createElement)(IconSettings, { size: wide ? 16 : 18 }),
|
|
7771
|
+
wide ? (0, import_react11.createElement)("span", { style: { fontSize: 14, lineHeight: "22px" } }, "\u5DE5\u7A0B\u6D41\u7A0B") : null
|
|
7440
7772
|
);
|
|
7441
7773
|
}
|
|
7442
7774
|
|