@godv61/dsh-task-engine 0.27.0 → 0.27.1

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.
Files changed (51) hide show
  1. package/.acceptance.mjs +11 -6
  2. package/.assessment-batch1.mjs +14 -11
  3. package/.codex-project-test.mjs +80 -0
  4. package/.enforce-test.mjs +4 -5
  5. package/.evidence-test.mjs +3 -3
  6. package/.filter-test.mjs +6 -8
  7. package/.freeze-test.mjs +20 -11
  8. package/.p0-test.mjs +21 -24
  9. package/.roundtrip-test.mjs +16 -28
  10. package/.workflow-test.mjs +6 -8
  11. package/README.md +8 -6
  12. package/defaults/eng.json +1 -97
  13. package/docs/CHANGELOG.md +7 -0
  14. package/docs/configuration.md +12 -13
  15. package/docs/faq.md +1 -1
  16. package/docs/manual.html +16 -34
  17. package/docs/resource-install.md +5 -3
  18. package/hooks/commit-msg +4 -33
  19. package/lib/client.js +94 -108
  20. package/lib/client.js.map +3 -3
  21. package/lib/controller.d.ts +4 -3
  22. package/lib/controller.js +12 -6
  23. package/lib/controller.js.map +1 -1
  24. package/lib/dev-task.js +33 -27
  25. package/lib/dev-task.js.map +1 -1
  26. package/lib/engine.d.ts +2 -3
  27. package/lib/engine.js +2 -2
  28. package/lib/engine.js.map +1 -1
  29. package/lib/shipped-skills.d.ts +2 -4
  30. package/lib/shipped-skills.js +2 -4
  31. package/lib/shipped-skills.js.map +1 -1
  32. package/lib/skill-audit.d.ts +4 -4
  33. package/lib/skill-audit.js +19 -14
  34. package/lib/skill-audit.js.map +1 -1
  35. package/lib/workflows.d.ts +3 -4
  36. package/lib/workflows.js +2 -41
  37. package/lib/workflows.js.map +1 -1
  38. package/package.json +4 -4
  39. package/preset/agent.cordis.yml +1 -1
  40. package/preset/persona.md +1 -1
  41. package/scripts/verify-package.mjs +3 -1
  42. package/skills/eng-delivery/SKILL.md +4 -4
  43. package/rules/coding-conventions.md +0 -7
  44. package/rules/commit-conventions.md +0 -6
  45. package/rules/security-redlines.md +0 -6
  46. package/skills/code-commit/SKILL.md +0 -13
  47. package/skills/code-implement/SKILL.md +0 -24
  48. package/skills/code-review/SKILL.md +0 -13
  49. package/skills/code-verify/SKILL.md +0 -20
  50. package/skills/requirement-analysis/SKILL.md +0 -16
  51. package/skills/solution-design/SKILL.md +0 -19
package/lib/client.js CHANGED
@@ -2,9 +2,11 @@ window.__ModuleLoader__.load({ id: "@godv61/dsh-task-engine", factory: (require)
2
2
  var module = { exports: {} }; var exports = module.exports;
3
3
 
4
4
  "use strict";
5
+ var __create = Object.create;
5
6
  var __defProp = Object.defineProperty;
6
7
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
8
  var __getOwnPropNames = Object.getOwnPropertyNames;
9
+ var __getProtoOf = Object.getPrototypeOf;
8
10
  var __hasOwnProp = Object.prototype.hasOwnProperty;
9
11
  var __export = (target, all) => {
10
12
  for (var name in all)
@@ -18,6 +20,14 @@ var __copyProps = (to, from, except, desc) => {
18
20
  }
19
21
  return to;
20
22
  };
23
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
24
+ // If the importer is in node compatibility mode or this is not an ESM
25
+ // file that has been converted to a CommonJS file using a Babel-
26
+ // compatible transform (i.e. "__esModule" has not been set), then set
27
+ // "default" to the CommonJS "module.exports" for node compatibility.
28
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
29
+ mod
30
+ ));
21
31
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
32
 
23
33
  // src/client/index.ts
@@ -4088,7 +4098,7 @@ var commitSchema = external_exports.object({
4088
4098
  checkpoints: external_exports.array(external_exports.string()),
4089
4099
  file_scope: external_exports.boolean()
4090
4100
  });
4091
- var resourceRefSchema = external_exports.object({ source: external_exports.enum(["bundled", "project", "user"]), name: external_exports.string() });
4101
+ var resourceRefSchema = external_exports.object({ source: external_exports.enum(["bundled", "project", "codex-project", "user"]), name: external_exports.string() });
4092
4102
  var evidenceSchema = external_exports.enum(["command", "artifact", "review", "manual", "none"]);
4093
4103
  var skillProfileSchema = external_exports.object({ rules: external_exports.array(resourceRefSchema), evidence: evidenceSchema.optional() });
4094
4104
  var skillBindingSchema = external_exports.object({
@@ -4189,7 +4199,7 @@ var writeResourceResultSchema = external_exports.object({
4189
4199
  });
4190
4200
  var readSkillRequestSchema = external_exports.object({
4191
4201
  name: external_exports.string(),
4192
- level: external_exports.enum(["project", "user", "bundled"]),
4202
+ level: external_exports.enum(["project", "codex-project", "user", "bundled"]),
4193
4203
  path: external_exports.string().optional()
4194
4204
  });
4195
4205
  var readSkillResultSchema = external_exports.object({
@@ -4578,7 +4588,13 @@ var remote_default = TYPERT_REMOTE;
4578
4588
 
4579
4589
  // src/client/Workbench.tsx
4580
4590
  var import_react9 = require("react");
4581
- var import_dsh_client_ui_primitives7 = require("@deepseek-ai/dsh-client-ui-primitives");
4591
+ var import_dsh_client_ui_primitives6 = require("@deepseek-ai/dsh-client-ui-primitives");
4592
+
4593
+ // src/client/icons.ts
4594
+ var primitives = __toESM(require("@deepseek-ai/dsh-client-ui-primitives"), 1);
4595
+ var IconSettings = primitives.IconSettingsOutlineRegular ?? primitives.IconSettingsOutline16;
4596
+ var IconClose = primitives.IconCloseOutlineRegular ?? primitives.IconCloseOutline16;
4597
+ var IconCheck = primitives.IconCheckOutlineRegular ?? primitives.IconCheckOutline16;
4582
4598
 
4583
4599
  // src/client/workbench-theme.ts
4584
4600
  var workbenchTheme = `
@@ -4824,14 +4840,14 @@ var styles = {
4824
4840
 
4825
4841
  // src/client/TaskEngineSection.tsx
4826
4842
  var import_react3 = require("react");
4827
- var import_dsh_client_ui_primitives3 = require("@deepseek-ai/dsh-client-ui-primitives");
4843
+ var import_dsh_client_ui_primitives2 = require("@deepseek-ai/dsh-client-ui-primitives");
4828
4844
 
4829
4845
  // src/engine.ts
4830
4846
  function formatResourceRef(ref) {
4831
4847
  return `${ref.source}:${ref.name}`;
4832
4848
  }
4833
4849
  function parseResourceRef(text2) {
4834
- const match = /^(bundled|project|user):(.+)$/u.exec(text2);
4850
+ const match = /^(bundled|project|codex-project|user):(.+)$/u.exec(text2);
4835
4851
  if (match === null) return void 0;
4836
4852
  return { source: match[1], name: match[2] };
4837
4853
  }
@@ -4901,7 +4917,7 @@ function validateWorkflow(config) {
4901
4917
  problems.push(`stage_bindings "${stage}": skill ${index + 1} has no name`);
4902
4918
  continue;
4903
4919
  }
4904
- if (!["bundled", "project", "user"].includes(entry.skill.source)) {
4920
+ if (!["bundled", "project", "codex-project", "user"].includes(entry.skill.source)) {
4905
4921
  problems.push(`stage_bindings "${stage}": skill "${entry.skill.name}" has unknown source "${String(entry.skill.source)}"`);
4906
4922
  }
4907
4923
  const skillKey = formatResourceRef(entry.skill);
@@ -4953,10 +4969,6 @@ function validateWorkflow(config) {
4953
4969
  }
4954
4970
 
4955
4971
  // src/workflows.ts
4956
- function bundled(skill, ...rules) {
4957
- const ref = (name) => ({ source: "bundled", name });
4958
- return { skill: ref(skill), rules: rules.map(ref) };
4959
- }
4960
4972
  var FLOW_OPTIONS = [
4961
4973
  { id: "standard", label: "\u5B8C\u6574\u7814\u53D1", description: "\u65B0\u529F\u80FD\u3001\u67B6\u6784\u6216\u8DE8\u6A21\u5757\u6539\u52A8\u3001\u9AD8\u98CE\u9669\u4EFB\u52A1\uFF1A\u9700\u6C42\u786E\u8BA4 \u2192 \u65B9\u6848\u786E\u8BA4 \u2192 \u5B9E\u73B0 \u2192 \u9A8C\u8BC1 \u2192 \u5BA1\u6838 \u2192 \u63D0\u4EA4" },
4962
4974
  { id: "agile", label: "\u65E5\u5E38\u8FED\u4EE3", description: "\u76EE\u6807\u660E\u786E\u7684\u5E38\u89C4\u529F\u80FD\u4E0E\u7F3A\u9677\u4FEE\u590D\uFF1A\u76EE\u6807\u4E0E\u9A8C\u6536 \u2192 \u5B9E\u73B0 \u2192 \u9A8C\u6536\u4E0E\u5BA1\u67E5 \u2192 \u63D0\u4EA4" },
@@ -4988,19 +5000,7 @@ var STANDARD_RECOMMENDATION = {
4988
5000
  { stage: "\u9700\u6C42\u8BC4\u5BA1", id: "requirement", name: "\u9700\u6C42\u8BF4\u660E", fields: ["scope", "acceptance_criteria"] },
4989
5001
  { stage: "\u8BBE\u8BA1", id: "design", name: "\u8BBE\u8BA1\u6587\u6863", fields: ["approach", "risks", "impact"] },
4990
5002
  { stage: "\u4EE3\u7801\u5BA1\u6838", id: "review", name: "\u8BC4\u5BA1\u8BB0\u5F55", fields: ["conclusion", "issues"] }
4991
- ],
4992
- stage_bindings: {
4993
- "\u9700\u6C42\u8BC4\u5BA1": { skills: [bundled("requirement-analysis", "security-redlines")] },
4994
- "\u8BBE\u8BA1": { skills: [bundled("solution-design")] },
4995
- "\u5F00\u53D1": { skills: [bundled("code-implement", "coding-conventions", "security-redlines")] },
4996
- "\u4EA4\u4ED8": { skills: [bundled("code-verify")] },
4997
- "\u4EE3\u7801\u5BA1\u6838": {
4998
- skills: [
4999
- bundled("code-review", "coding-conventions", "security-redlines"),
5000
- bundled("code-commit", "commit-conventions")
5001
- ]
5002
- }
5003
- }
5003
+ ]
5004
5004
  };
5005
5005
  var AGILE = {
5006
5006
  stages: ["\u9700\u6C42", "\u5F00\u53D1", "\u4EA4\u4ED8", "\u5BA1\u67E5"],
@@ -5034,18 +5034,9 @@ var AGILE_RECOMMENDATION = {
5034
5034
  },
5035
5035
  artifacts: [
5036
5036
  { stage: "\u9700\u6C42", id: "requirement", name: "\u9700\u6C42\u8BF4\u660E", fields: ["scope"] },
5037
- // The 审查 stage binds code-review, whose instructions write this artifact with
5038
- // `record artifact=review`. Declaring it keeps that binding executable: the
5039
- // engine refuses an undeclared artifact, so a bound skill pointing at one would
5040
- // be a contract the recommendation made impossible to satisfy.
5037
+ // Optional review record; the flow's review gate itself does not require a skill.
5041
5038
  { stage: "\u5BA1\u67E5", id: "review", name: "\u8BC4\u5BA1\u8BB0\u5F55", fields: ["conclusion", "issues"] }
5042
- ],
5043
- stage_bindings: {
5044
- "\u9700\u6C42": { skills: [bundled("requirement-analysis", "security-redlines")] },
5045
- "\u5F00\u53D1": { skills: [bundled("code-implement", "coding-conventions", "security-redlines")] },
5046
- "\u4EA4\u4ED8": { skills: [bundled("code-verify"), bundled("code-commit", "commit-conventions")] },
5047
- "\u5BA1\u67E5": { skills: [bundled("code-review", "coding-conventions", "security-redlines")] }
5048
- }
5039
+ ]
5049
5040
  };
5050
5041
  var MINIMAL = {
5051
5042
  stages: ["\u5F00\u53D1", "\u4EA4\u4ED8"],
@@ -5061,11 +5052,7 @@ var MINIMAL_RECOMMENDATION = {
5061
5052
  // A fast-change flow checks each change once, not twice under two headings a
5062
5053
  // short change rarely distinguishes. The item still has to be reviewed — what
5063
5054
  // drops is the duplicated verdict, which is where the weight actually was.
5064
- review_depth: "single",
5065
- stage_bindings: {
5066
- "\u5F00\u53D1": { skills: [bundled("code-implement", "coding-conventions", "security-redlines")] },
5067
- "\u4EA4\u4ED8": { skills: [bundled("code-commit", "commit-conventions")] }
5068
- }
5055
+ review_depth: "single"
5069
5056
  };
5070
5057
  function deriveCapabilities(config) {
5071
5058
  const caps = [];
@@ -5251,12 +5238,11 @@ function describeError(error) {
5251
5238
 
5252
5239
  // src/client/SkillRuleDialog.tsx
5253
5240
  var import_react2 = require("react");
5254
- var import_dsh_client_ui_primitives2 = require("@deepseek-ai/dsh-client-ui-primitives");
5241
+ var import_dsh_client_ui_primitives = require("@deepseek-ai/dsh-client-ui-primitives");
5255
5242
 
5256
5243
  // src/client/ResourceModal.tsx
5257
5244
  var import_react = require("react");
5258
5245
  var import_react_dom = require("react-dom");
5259
- var import_dsh_client_ui_primitives = require("@deepseek-ai/dsh-client-ui-primitives");
5260
5246
  var rootStyle = {
5261
5247
  position: "fixed",
5262
5248
  inset: 0,
@@ -5408,7 +5394,7 @@ function ResourceModal({ title, description, onClose, footer, children, placemen
5408
5394
  (0, import_react.createElement)(
5409
5395
  "button",
5410
5396
  { type: "button", style: closeBtnStyle, "aria-label": "\u5173\u95ED", onClick: onClose },
5411
- (0, import_react.createElement)(import_dsh_client_ui_primitives.IconCloseOutline16, { size: 14 })
5397
+ (0, import_react.createElement)(IconClose, { size: 14 })
5412
5398
  )
5413
5399
  ),
5414
5400
  description !== void 0 && description !== "" ? (0, import_react.createElement)("p", { style: descStyle }, description) : null,
@@ -5475,8 +5461,8 @@ function SkillRuleDialog({ skill, profile, rules, description, saveLabel, onSave
5475
5461
  onClose: close,
5476
5462
  footer: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
5477
5463
  error ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { role: "alert", className: "te-dialog-error", children: error }) : null,
5478
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dsh_client_ui_primitives2.Button, { variant: "ghost", disabled: busy, onClick: close, children: "\u53D6\u6D88" }),
5479
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dsh_client_ui_primitives2.Button, { variant: "primary", disabled: busy || !dirty, onClick: () => {
5464
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dsh_client_ui_primitives.Button, { variant: "ghost", disabled: busy, onClick: close, children: "\u53D6\u6D88" }),
5465
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dsh_client_ui_primitives.Button, { variant: "primary", disabled: busy || !dirty, onClick: () => {
5480
5466
  void save2();
5481
5467
  }, children: busy ? "\u5904\u7406\u4E2D\u2026" : saveLabel ?? "\u4FDD\u5B58\u914D\u7F6E" })
5482
5468
  ] }),
@@ -5629,14 +5615,15 @@ function TaskEngineSection(props) {
5629
5615
  setSavedAt("");
5630
5616
  };
5631
5617
  const adopt = () => {
5632
- const adopted = adoptRecommendation(flow);
5618
+ const adopted = adoptRecommendation(flow, {
5619
+ flow,
5620
+ stage_bindings: stageBindings,
5621
+ skill_profiles: skillProfiles,
5622
+ ...commitRequired !== void 0 ? { commit_required: commitRequired } : {}
5623
+ });
5633
5624
  if (adopted === void 0) return;
5634
- if (dirty && !window.confirm("\u91C7\u7528\u63A8\u8350\u914D\u7F6E\u4F1A\u66FF\u6362\u5F53\u524D\u7684\u6280\u80FD\u4E0E\u89C4\u5219\u8BBE\u7F6E\u3002\u7EE7\u7EED\uFF1F")) return;
5635
- setStageBindings({ ...adopted.stage_bindings ?? {} });
5636
- setPendingAdoption(true);
5625
+ if (dirty && !window.confirm("\u91C7\u7528\u63A8\u8350\u7684\u63D0\u4EA4\u6587\u672C\u3001\u4EA7\u7269\u5B57\u6BB5\u548C\u8BC4\u5BA1\u6DF1\u5EA6\uFF1F\u73B0\u6709\u6280\u80FD\u4E0E\u89C4\u5219\u4F1A\u4FDD\u7559\u3002")) return;
5637
5626
  setFlowNotice("");
5638
- const adoptedFlow = resolveFlow(flow, adopted);
5639
- setSkillProfiles(adoptedFlow.ok ? adoptedFlow.config.skill_profiles ?? {} : {});
5640
5627
  setCommitRule(adopted.commit);
5641
5628
  setArtifacts(adopted.artifacts);
5642
5629
  setReviewDepth(adopted.review_depth);
@@ -5665,11 +5652,11 @@ function TaskEngineSection(props) {
5665
5652
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("h2", { style: styles.title, children: "\u5DE5\u7A0B\u6D41\u7A0B\u914D\u7F6E" }),
5666
5653
  /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: styles.problems, children: [
5667
5654
  /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { style: styles.problemsTitle, children: [
5668
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dsh_client_ui_primitives3.StateDot, { state: "error" }),
5655
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dsh_client_ui_primitives2.StateDot, { state: "error" }),
5669
5656
  "\u8BFB\u53D6\u5931\u8D25"
5670
5657
  ] }),
5671
5658
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { style: styles.muted, children: loadError }),
5672
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dsh_client_ui_primitives3.Button, { onClick: () => setLoadAttempt((n) => n + 1), children: "\u91CD\u8BD5" })
5659
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dsh_client_ui_primitives2.Button, { onClick: () => setLoadAttempt((n) => n + 1), children: "\u91CD\u8BD5" })
5673
5660
  ] })
5674
5661
  ] });
5675
5662
  }
@@ -5684,27 +5671,27 @@ function TaskEngineSection(props) {
5684
5671
  flowNotice && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { role: "status", className: "te-flow-notice", children: flowNotice }),
5685
5672
  /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: styles.head, children: [
5686
5673
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("h2", { style: styles.title, children: "\u5DE5\u7A0B\u6D41\u7A0B\u914D\u7F6E" }),
5687
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { style: styles.muted, children: "\u6D41\u7A0B\u51B3\u5B9A\u5DE5\u4F5C\u600E\u4E48\u6D41\u8F6C\uFF08\u9636\u6BB5\u4E0E\u95E8\u7981\uFF09\uFF1B\u6280\u80FD\u3001\u89C4\u5219\u3001\u63D0\u4EA4\u683C\u5F0F\u548C\u4EA7\u7269\u5B57\u6BB5\u7531\u4F60\u81EA\u5DF1\u914D\u7F6E\u3002 \u9700\u8981\u4E00\u4EFD\u73B0\u6210\u7684\u8D77\u70B9\u65F6\uFF0C\u53EF\u4EE5\u300C\u91C7\u7528\u63A8\u8350\u914D\u7F6E\u300D\uFF1B\u4FDD\u5B58\u65F6\u4F1A\u628A\u5185\u7F6E\u6837\u672C\u590D\u5236\u5230\u5F53\u524D\u9879\u76EE\uFF0C\u518D\u7531\u4F60\u7684\u9879\u76EE\u8D44\u6E90\u627F\u8F7D\u8FD9\u4E9B\u89C4\u5219\u3002" })
5674
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { style: styles.muted, children: "\u6D41\u7A0B\u51B3\u5B9A\u5DE5\u4F5C\u600E\u4E48\u6D41\u8F6C\uFF08\u9636\u6BB5\u4E0E\u95E8\u7981\uFF09\uFF1B\u6280\u80FD\u3001\u89C4\u5219\u3001\u63D0\u4EA4\u683C\u5F0F\u548C\u4EA7\u7269\u5B57\u6BB5\u7531\u4F60\u81EA\u5DF1\u914D\u7F6E\u3002 \u9700\u8981\u63D0\u4EA4\u6587\u672C\u3001\u4EA7\u7269\u5B57\u6BB5\u548C\u8BC4\u5BA1\u6DF1\u5EA6\u7684\u8D77\u70B9\u65F6\uFF0C\u53EF\u4EE5\u300C\u91C7\u7528\u63A8\u8350\u914D\u7F6E\u300D\u3002\u6280\u80FD\u4E0E\u89C4\u5219\u8BF7\u6309\u9879\u76EE\u9700\u8981\u81EA\u884C\u521B\u5EFA\u5E76\u7ED1\u5B9A\u3002" })
5688
5675
  ] }),
5689
5676
  /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: styles.adoptRow, children: [
5690
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_dsh_client_ui_primitives3.Button, { size: "sm", onClick: adopt, children: [
5677
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_dsh_client_ui_primitives2.Button, { size: "sm", onClick: adopt, children: [
5691
5678
  "\u91C7\u7528\u300C",
5692
5679
  FLOW_PRESETS[flow]?.label ?? flow,
5693
5680
  "\u300D\u7684\u63A8\u8350\u914D\u7F6E"
5694
5681
  ] }),
5695
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: styles.muted, children: "\u4FDD\u5B58\u540E\u590D\u5236\u63A8\u8350\u6280\u80FD\u4E0E\u5171\u4EAB\u89C4\u5219\u5404\u4E00\u4EFD\u5230\u9879\u76EE\uFF1B\u5DF2\u6709\u9879\u76EE\u526F\u672C\u4E0D\u4F1A\u88AB\u8986\u76D6\uFF0C\u4E4B\u540E\u63D2\u4EF6\u5347\u7EA7\u4E5F\u4E0D\u4F1A\u6539\u5199\u5B83\u4EEC\u3002" })
5682
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: styles.muted, children: "\u4EC5\u5199\u5165\u53EF\u4FEE\u6539\u7684\u6587\u672C\u4E0E\u5B57\u6BB5\uFF0C\u4E0D\u589E\u5220\u73B0\u6709\u6280\u80FD\u548C\u89C4\u5219\u7ED1\u5B9A\u3002" })
5696
5683
  ] }),
5697
5684
  hasBundledReferences && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: styles.adoptRow, children: [
5698
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dsh_client_ui_primitives3.Button, { size: "sm", onClick: () => {
5685
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dsh_client_ui_primitives2.Button, { size: "sm", onClick: () => {
5699
5686
  setPendingAdoption(true);
5700
5687
  setDirty(true);
5701
5688
  setSavedAt("");
5702
5689
  setFlowNotice("\u4FDD\u5B58\u540E\u4F1A\u628A\u5F53\u524D\u914D\u7F6E\u4E2D\u7684\u5185\u7F6E\u5F15\u7528\u590D\u5236\u5230\u9879\u76EE\uFF0C\u4FDD\u7559\u5DF2\u6709\u9879\u76EE\u526F\u672C\u53CA\u5176\u4ED6\u914D\u7F6E\u3002");
5703
5690
  }, children: "\u628A\u5F53\u524D\u5185\u7F6E\u5F15\u7528\u8FC1\u79FB\u5230\u9879\u76EE" }),
5704
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: styles.muted, children: "\u65E7\u9879\u76EE\u53EF\u5355\u72EC\u8FC1\u79FB\uFF0C\u4E0D\u5FC5\u91CD\u65B0\u91C7\u7528\u63A8\u8350\u914D\u7F6E\u3002" })
5691
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: styles.muted, children: "\u5C06\u5F53\u524D\u5185\u7F6E\u5F15\u7528\u590D\u5236\u4E3A\u9879\u76EE\u8D44\u6E90\u3002" })
5705
5692
  ] }),
5706
5693
  /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: styles.sourceRow, children: [
5707
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dsh_client_ui_primitives3.StateDot, { state: source === "project" ? "done" : source === "invalid" ? "warning" : "ongoing" }),
5694
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dsh_client_ui_primitives2.StateDot, { state: source === "project" ? "done" : source === "invalid" ? "warning" : "ongoing" }),
5708
5695
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: styles.sourceText, children: sourceText(source) })
5709
5696
  ] }),
5710
5697
  /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: styles.field, children: [
@@ -5722,7 +5709,7 @@ function TaskEngineSection(props) {
5722
5709
  style: { ...styles.flowOption, ...active ? styles.flowOptionActive : {} },
5723
5710
  children: [
5724
5711
  /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { style: styles.flowOptionTitle, children: [
5725
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dsh_client_ui_primitives3.StateDot, { state: active ? "done" : "ongoing", size: 8 }),
5712
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dsh_client_ui_primitives2.StateDot, { state: active ? "done" : "ongoing", size: 8 }),
5726
5713
  option.label
5727
5714
  ] }),
5728
5715
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { style: styles.flowOptionDesc, children: option.description })
@@ -5732,7 +5719,7 @@ function TaskEngineSection(props) {
5732
5719
  );
5733
5720
  }) })
5734
5721
  ] }),
5735
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(SectionCard, { icon: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dsh_client_ui_primitives3.IconSettingsOutline16, { size: 16 }), title: "\u9636\u6BB5\u6280\u80FD", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(BindingEditor, { stages, stageBindings, setStageBindings: (next) => {
5722
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(SectionCard, { icon: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(IconSettings, { size: 16 }), title: "\u9636\u6BB5\u6280\u80FD", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(BindingEditor, { stages, stageBindings, setStageBindings: (next) => {
5736
5723
  setStageBindings(next);
5737
5724
  setDirty(true);
5738
5725
  setSavedAt("");
@@ -5743,23 +5730,23 @@ function TaskEngineSection(props) {
5743
5730
  }, skills, onConfigureSkill: setConfiguringSkill }) }),
5744
5731
  problems.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: styles.problems, children: [
5745
5732
  /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { style: styles.problemsTitle, children: [
5746
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dsh_client_ui_primitives3.StateDot, { state: "error" }),
5733
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dsh_client_ui_primitives2.StateDot, { state: "error" }),
5747
5734
  "\u6709 ",
5748
5735
  problems.length,
5749
5736
  " \u4E2A\u95EE\u9898\uFF08\u4FDD\u5B58\u4F1A\u88AB\u62D2\u7EDD\uFF09"
5750
5737
  ] }),
5751
5738
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("ul", { style: styles.problemsList, children: problems.map((p) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("li", { children: p }, p)) })
5752
5739
  ] }) : /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { style: styles.okText, children: [
5753
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dsh_client_ui_primitives3.StateDot, { state: "done" }),
5740
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dsh_client_ui_primitives2.StateDot, { state: "done" }),
5754
5741
  source === "project" ? "\u914D\u7F6E\u6709\u6548" : "\u4F7F\u7528\u7A7A\u767D\u6D41\u7A0B\u914D\u7F6E\uFF08\u5C1A\u672A\u4FDD\u5B58\uFF09"
5755
5742
  ] }),
5756
5743
  /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: styles.actions, children: [
5757
5744
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
5758
- import_dsh_client_ui_primitives3.Button,
5745
+ import_dsh_client_ui_primitives2.Button,
5759
5746
  {
5760
5747
  variant: "primary",
5761
5748
  size: "md",
5762
- icon: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dsh_client_ui_primitives3.IconCheckOutline16, { size: 16 }),
5749
+ icon: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(IconCheck, { size: 16 }),
5763
5750
  disabled: problems.length > 0 || saving,
5764
5751
  onClick: () => {
5765
5752
  setSaving(true);
@@ -5778,7 +5765,7 @@ function TaskEngineSection(props) {
5778
5765
  }
5779
5766
  ),
5780
5767
  savedAt !== "" ? /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { style: styles.okText, children: [
5781
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dsh_client_ui_primitives3.StateDot, { state: savedAt.startsWith("\u5DF2") ? "done" : "error" }),
5768
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dsh_client_ui_primitives2.StateDot, { state: savedAt.startsWith("\u5DF2") ? "done" : "error" }),
5782
5769
  savedAt
5783
5770
  ] }) : null
5784
5771
  ] })
@@ -5811,7 +5798,7 @@ function sourceText(source) {
5811
5798
  function SectionCard({ icon, title, hint, children }) {
5812
5799
  const [open, setOpen] = (0, import_react3.useState)(true);
5813
5800
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { style: styles.section, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
5814
- import_dsh_client_ui_primitives3.DisclosureRow,
5801
+ import_dsh_client_ui_primitives2.DisclosureRow,
5815
5802
  {
5816
5803
  icon,
5817
5804
  title,
@@ -5858,7 +5845,7 @@ function BindingEditor({ stages, stageBindings, setStageBindings, skillProfiles,
5858
5845
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: styles.section, children: [
5859
5846
  /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { style: styles.field, children: [
5860
5847
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: styles.bindingLabel, children: "\u9009\u62E9\u8282\u70B9" }),
5861
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { style: styles.chips, children: stages.map((s) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dsh_client_ui_primitives3.Pill, { active: s === currentStage, onClick: () => {
5848
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { style: styles.chips, children: stages.map((s) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_dsh_client_ui_primitives2.Pill, { active: s === currentStage, onClick: () => {
5862
5849
  setStage(s);
5863
5850
  }, children: s }, s)) })
5864
5851
  ] }),
@@ -5957,7 +5944,7 @@ async function save(remote, config, workspace, setSavedAt, setSource) {
5957
5944
 
5958
5945
  // src/client/InitPanel.tsx
5959
5946
  var import_react4 = require("react");
5960
- var import_dsh_client_ui_primitives4 = require("@deepseek-ai/dsh-client-ui-primitives");
5947
+ var import_dsh_client_ui_primitives3 = require("@deepseek-ai/dsh-client-ui-primitives");
5961
5948
  var MD_LABELS = { code: { copyLabel: "\u590D\u5236", copiedLabel: "\u5DF2\u590D\u5236" }, footnotes: "\u811A\u6CE8" };
5962
5949
  var INIT_TIMEOUT_S = 150;
5963
5950
  var card = {
@@ -6048,7 +6035,7 @@ function InitPanel({ workspace, remote }) {
6048
6035
  (0, import_react4.createElement)(
6049
6036
  "div",
6050
6037
  { style: { display: "flex", alignItems: "center", gap: 8, flexWrap: "wrap" } },
6051
- (0, import_react4.createElement)(import_dsh_client_ui_primitives4.StateDot, { state: exists ? "done" : "ongoing" }),
6038
+ (0, import_react4.createElement)(import_dsh_client_ui_primitives3.StateDot, { state: exists ? "done" : "ongoing" }),
6052
6039
  (0, import_react4.createElement)("span", { style: styles.bindingLabel }, exists ? `\u5DF2\u521D\u59CB\u5316 \xB7 ${view.lines} \u884C\uFF08\u4E0A\u9650 200\uFF09` : "\u672A\u521D\u59CB\u5316"),
6053
6040
  view?.path !== void 0 ? (0, import_react4.createElement)("span", { style: styles.sourceBadge }, `\u5DF2\u5B9A\u4F4D\u5230 ${view.path}`) : null
6054
6041
  ),
@@ -6060,7 +6047,7 @@ function InitPanel({ workspace, remote }) {
6060
6047
  exists && !editing && draft === null ? (0, import_react4.createElement)(
6061
6048
  "div",
6062
6049
  { style: styles.mdPreview },
6063
- (0, import_react4.createElement)(import_dsh_client_ui_primitives4.MarkdownText, { text: view.content, labels: MD_LABELS })
6050
+ (0, import_react4.createElement)(import_dsh_client_ui_primitives3.MarkdownText, { text: view.content, labels: MD_LABELS })
6064
6051
  ) : null,
6065
6052
  draft !== null ? (0, import_react4.createElement)(
6066
6053
  "div",
@@ -6068,13 +6055,13 @@ function InitPanel({ workspace, remote }) {
6068
6055
  (0, import_react4.createElement)(
6069
6056
  "div",
6070
6057
  { style: styles.sourceRow },
6071
- (0, import_react4.createElement)(import_dsh_client_ui_primitives4.StateDot, { state: "ongoing", size: 8 }),
6058
+ (0, import_react4.createElement)(import_dsh_client_ui_primitives3.StateDot, { state: "ongoing", size: 8 }),
6072
6059
  (0, import_react4.createElement)("span", { style: styles.sourceBadge }, `AI \u8349\u7A3F \xB7 ${draft.lines} \u884C \xB7 \u5C1A\u672A\u5199\u5165`)
6073
6060
  ),
6074
6061
  (0, import_react4.createElement)(
6075
6062
  "div",
6076
6063
  { style: styles.mdPreview },
6077
- (0, import_react4.createElement)(import_dsh_client_ui_primitives4.MarkdownText, { text: draft.content, labels: MD_LABELS })
6064
+ (0, import_react4.createElement)(import_dsh_client_ui_primitives3.MarkdownText, { text: draft.content, labels: MD_LABELS })
6078
6065
  )
6079
6066
  ) : null,
6080
6067
  editing ? (0, import_react4.createElement)("textarea", {
@@ -6094,7 +6081,7 @@ function InitPanel({ workspace, remote }) {
6094
6081
  draft !== null ? (0, import_react4.createElement)(
6095
6082
  "div",
6096
6083
  { style: styles.row },
6097
- (0, import_react4.createElement)(import_dsh_client_ui_primitives4.Button, {
6084
+ (0, import_react4.createElement)(import_dsh_client_ui_primitives3.Button, {
6098
6085
  variant: "primary",
6099
6086
  size: "md",
6100
6087
  disabled: draft.lines > 200,
@@ -6104,13 +6091,13 @@ function InitPanel({ workspace, remote }) {
6104
6091
  }
6105
6092
  }, exists ? "\u4FDD\u5B58\u5E76\u8986\u76D6" : "\u4FDD\u5B58"),
6106
6093
  draft.lines > 200 ? (0, import_react4.createElement)("span", { style: styles.sourceBadge }, `\u8349\u7A3F ${draft.lines} \u884C\u8D85\u9650\uFF0C\u8BF7\u70B9\u300C\u653E\u5F03\u300D\u540E\u91CD\u8BD5`) : null,
6107
- (0, import_react4.createElement)(import_dsh_client_ui_primitives4.Button, { variant: "ghost", size: "md", onClick: () => {
6094
+ (0, import_react4.createElement)(import_dsh_client_ui_primitives3.Button, { variant: "ghost", size: "md", onClick: () => {
6108
6095
  setDraft(null);
6109
6096
  } }, "\u653E\u5F03")
6110
6097
  ) : editing ? (0, import_react4.createElement)(
6111
6098
  "div",
6112
6099
  { style: styles.row },
6113
- (0, import_react4.createElement)(import_dsh_client_ui_primitives4.Button, {
6100
+ (0, import_react4.createElement)(import_dsh_client_ui_primitives3.Button, {
6114
6101
  variant: "primary",
6115
6102
  size: "md",
6116
6103
  disabled: body2.trim() === "",
@@ -6119,13 +6106,13 @@ function InitPanel({ workspace, remote }) {
6119
6106
  void write(body2, exists);
6120
6107
  }
6121
6108
  }, exists ? "\u4FDD\u5B58\u5E76\u8986\u76D6" : "\u4FDD\u5B58"),
6122
- (0, import_react4.createElement)(import_dsh_client_ui_primitives4.Button, { variant: "ghost", size: "md", onClick: () => {
6109
+ (0, import_react4.createElement)(import_dsh_client_ui_primitives3.Button, { variant: "ghost", size: "md", onClick: () => {
6123
6110
  setEditing(false);
6124
6111
  } }, "\u53D6\u6D88")
6125
6112
  ) : (0, import_react4.createElement)(
6126
6113
  "div",
6127
6114
  { style: styles.row },
6128
- (0, import_react4.createElement)(import_dsh_client_ui_primitives4.Button, {
6115
+ (0, import_react4.createElement)(import_dsh_client_ui_primitives3.Button, {
6129
6116
  variant: "primary",
6130
6117
  size: "md",
6131
6118
  disabled: generating,
@@ -6134,7 +6121,7 @@ function InitPanel({ workspace, remote }) {
6134
6121
  void generate();
6135
6122
  }
6136
6123
  }, exists ? "\u91CD\u65B0\u521D\u59CB\u5316\uFF08AI \u626B\u63CF\u8986\u76D6\uFF09" : "\u8BA9 AI \u521D\u59CB\u5316"),
6137
- exists ? (0, import_react4.createElement)(import_dsh_client_ui_primitives4.Button, { variant: "outline", size: "md", onClick: startEdit }, "\u624B\u52A8\u7F16\u8F91") : null
6124
+ exists ? (0, import_react4.createElement)(import_dsh_client_ui_primitives3.Button, { variant: "outline", size: "md", onClick: startEdit }, "\u624B\u52A8\u7F16\u8F91") : null
6138
6125
  )
6139
6126
  )
6140
6127
  );
@@ -6145,10 +6132,10 @@ var import_react6 = require("react");
6145
6132
 
6146
6133
  // src/client/ResourceManager.tsx
6147
6134
  var import_react5 = require("react");
6148
- var import_dsh_client_ui_primitives5 = require("@deepseek-ai/dsh-client-ui-primitives");
6135
+ var import_dsh_client_ui_primitives4 = require("@deepseek-ai/dsh-client-ui-primitives");
6149
6136
  var labels = { code: { copyLabel: "\u590D\u5236", copiedLabel: "\u5DF2\u590D\u5236" }, footnotes: "\u811A\u6CE8" };
6150
6137
  var levelOf = (row) => row.source === "bundled" ? "bundled" : row.source.startsWith("user") ? "user" : "project";
6151
- var sourceText2 = (source) => source === "bundled" ? "\u5185\u7F6E" : source.startsWith("user") ? "\u4E2A\u4EBA" : "\u9879\u76EE";
6138
+ var sourceText2 = (source) => source === "bundled" ? "\u5185\u7F6E" : source === "codex-project" ? "\u9879\u76EE \xB7 Codex" : source.startsWith("user") ? "\u4E2A\u4EBA" : "\u9879\u76EE";
6152
6139
  var sizeText = (bytes) => bytes < 1024 ? `${bytes} B` : bytes < 1024 * 1024 ? `${(bytes / 1024).toFixed(1)} KB` : `${(bytes / 1024 / 1024).toFixed(1)} MB`;
6153
6140
  var fail = (r) => describeError(r.error ?? "\u64CD\u4F5C\u5931\u8D25");
6154
6141
  function ResourceManager({ workspace, remote, kind, onConfigureSkill }) {
@@ -6181,7 +6168,7 @@ function ResourceManager({ workspace, remote, kind, onConfigureSkill }) {
6181
6168
  const input = (0, import_react5.useRef)(null);
6182
6169
  const fileEpoch = (0, import_react5.useRef)(0);
6183
6170
  const browseEpoch = (0, import_react5.useRef)(0);
6184
- const readonly = editing !== null && editing !== "new" && levelOf(editing) === "bundled";
6171
+ const readonly = editing !== null && editing !== "new" && (levelOf(editing) === "bundled" || editing.source === "codex-project");
6185
6172
  (0, import_react5.useEffect)(() => {
6186
6173
  let active = true;
6187
6174
  setLoading(true);
@@ -6323,7 +6310,7 @@ function ResourceManager({ workspace, remote, kind, onConfigureSkill }) {
6323
6310
  setLevel(lvl === "user" ? "user" : "project");
6324
6311
  setBusy(true);
6325
6312
  try {
6326
- const r = kind === "skill" ? await remote.readSkill({ name: row.name, level: lvl, path: workspace }) : await remote.readRule({ name: row.name, level: lvl, path: workspace });
6313
+ const r = kind === "skill" ? await remote.readSkill({ name: row.name, level: row.source === "codex-project" ? "codex-project" : lvl, path: workspace }) : await remote.readRule({ name: row.name, level: lvl, path: workspace });
6327
6314
  if (!r.ok) throw new Error(fail(r));
6328
6315
  if (!r.value.ok) throw new Error(r.value.error ?? "\u8BFB\u53D6\u5931\u8D25");
6329
6316
  setBody(r.value.content);
@@ -6433,10 +6420,10 @@ function ResourceManager({ workspace, remote, kind, onConfigureSkill }) {
6433
6420
  (0, import_react5.createElement)("input", { type: "file", ref: input, 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) => {
6434
6421
  void selected(Array.from(e.target.files ?? []));
6435
6422
  } }),
6436
- (0, import_react5.createElement)("div", { className: "te-section-heading" }, (0, import_react5.createElement)("div", null, (0, import_react5.createElement)("h2", null, `${noun}\u5E93`), (0, import_react5.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_react5.createElement)("div", { className: "te-actions" }, (0, import_react5.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "outline", onClick: () => {
6423
+ (0, import_react5.createElement)("div", { className: "te-section-heading" }, (0, import_react5.createElement)("div", null, (0, import_react5.createElement)("h2", null, `${noun}\u5E93`), (0, import_react5.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_react5.createElement)("div", { className: "te-actions" }, (0, import_react5.createElement)(import_dsh_client_ui_primitives4.Button, { variant: "outline", onClick: () => {
6437
6424
  void edit("new");
6438
- } }, `\u65B0\u5EFA${noun}`), (0, import_react5.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "primary", onClick: choose }, `\u5B89\u88C5${noun}`))),
6439
- (0, import_react5.createElement)("div", { className: "te-toolbar" }, (0, import_react5.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_react5.createElement)("select", { className: "te-input", "aria-label": "\u7B5B\u9009\u6765\u6E90", value: filter, onChange: (e) => setFilter(e.target.value) }, (0, import_react5.createElement)("option", { value: "all" }, `\u5168\u90E8\u6765\u6E90 \xB7 ${rows.length}`), (0, import_react5.createElement)("option", { value: "bundled" }, "\u5185\u7F6E"), (0, import_react5.createElement)("option", { value: "project" }, "\u9879\u76EE"), (0, import_react5.createElement)("option", { value: "user" }, "\u4E2A\u4EBA")), (0, import_react5.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "ghost", onClick: () => refresh((n) => n + 1), disabled: loading }, "\u5237\u65B0")),
6425
+ } }, `\u65B0\u5EFA${noun}`), (0, import_react5.createElement)(import_dsh_client_ui_primitives4.Button, { variant: "primary", onClick: choose }, `\u5B89\u88C5${noun}`))),
6426
+ (0, import_react5.createElement)("div", { className: "te-toolbar" }, (0, import_react5.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_react5.createElement)("select", { className: "te-input", "aria-label": "\u7B5B\u9009\u6765\u6E90", value: filter, onChange: (e) => setFilter(e.target.value) }, (0, import_react5.createElement)("option", { value: "all" }, `\u5168\u90E8\u6765\u6E90 \xB7 ${rows.length}`), (0, import_react5.createElement)("option", { value: "project" }, "\u9879\u76EE"), (0, import_react5.createElement)("option", { value: "user" }, "\u4E2A\u4EBA")), (0, import_react5.createElement)(import_dsh_client_ui_primitives4.Button, { variant: "ghost", onClick: () => refresh((n) => n + 1), disabled: loading }, "\u5237\u65B0")),
6440
6427
  notice ? (0, import_react5.createElement)("div", { className: "te-success", role: "status" }, notice) : null,
6441
6428
  !importing && !editing && !deleting ? status() : null,
6442
6429
  loading ? (0, import_react5.createElement)("div", { className: "te-empty", role: "status" }, "\u6B63\u5728\u52A0\u8F7D\u2026") : visible.length === 0 ? (0, import_react5.createElement)("div", { className: "te-empty" }, (0, import_react5.createElement)("h3", null, query || filter !== "all" ? "\u6CA1\u6709\u5339\u914D\u7684\u7ED3\u679C" : `\u8FD8\u6CA1\u6709${noun}`), (0, import_react5.createElement)("p", null, "\u8C03\u6574\u7B5B\u9009\uFF0C\u6216\u4F7F\u7528\u53F3\u4E0A\u89D2\u6309\u94AE\u6DFB\u52A0\u3002")) : (0, import_react5.createElement)("div", { className: "te-resource-grid" }, ...visible.map((row) => (0, import_react5.createElement)(
@@ -6445,13 +6432,13 @@ function ResourceManager({ workspace, remote, kind, onConfigureSkill }) {
6445
6432
  (0, import_react5.createElement)("div", { className: "te-card-top" }, (0, import_react5.createElement)("span", { className: "te-resource-icon", "aria-hidden": true }, kind === "skill" ? "\u25C7" : "\u2261"), (0, import_react5.createElement)("span", { className: "te-badge" }, sourceText2(row.source))),
6446
6433
  (0, import_react5.createElement)("h3", null, row.name),
6447
6434
  (0, import_react5.createElement)("p", null, row.description || "\u9879\u76EE\u7EA6\u5B9A\u4E0E\u6267\u884C\u89C4\u5219"),
6448
- (0, import_react5.createElement)("div", { className: "te-actions" }, kind === "skill" && onConfigureSkill ? (0, import_react5.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "primary", size: "sm", onClick: () => onConfigureSkill({ source: levelOf(row), name: row.name }) }, "\u914D\u7F6E\u89C4\u5219") : null, (0, import_react5.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "outline", size: "sm", onClick: () => {
6435
+ (0, import_react5.createElement)("div", { className: "te-actions" }, kind === "skill" && onConfigureSkill ? (0, import_react5.createElement)(import_dsh_client_ui_primitives4.Button, { variant: "primary", size: "sm", onClick: () => onConfigureSkill({ source: row.source === "codex-project" ? "codex-project" : levelOf(row), name: row.name }) }, "\u914D\u7F6E\u89C4\u5219") : null, (0, import_react5.createElement)(import_dsh_client_ui_primitives4.Button, { variant: "outline", size: "sm", onClick: () => {
6449
6436
  void edit(row, true);
6450
- } }, "\u67E5\u770B"), levelOf(row) === "bundled" ? (0, import_react5.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "ghost", size: "sm", disabled: busy, onClick: () => {
6437
+ } }, "\u67E5\u770B"), levelOf(row) === "bundled" ? (0, import_react5.createElement)(import_dsh_client_ui_primitives4.Button, { variant: "ghost", size: "sm", disabled: busy, onClick: () => {
6451
6438
  void copyTemplate(row);
6452
- } }, "\u4EE5\u6B64\u4E3A\u6A21\u677F\u65B0\u5EFA") : (0, import_react5.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "ghost", size: "sm", onClick: () => {
6439
+ } }, "\u4EE5\u6B64\u4E3A\u6A21\u677F\u65B0\u5EFA") : row.source !== "codex-project" ? (0, import_react5.createElement)(import_dsh_client_ui_primitives4.Button, { variant: "ghost", size: "sm", onClick: () => {
6453
6440
  void edit(row);
6454
- } }, "\u7F16\u8F91"), levelOf(row) !== "bundled" ? (0, import_react5.createElement)("button", { className: "te-delete", onClick: () => {
6441
+ } }, "\u7F16\u8F91") : null, levelOf(row) !== "bundled" && row.source !== "codex-project" ? (0, import_react5.createElement)("button", { className: "te-delete", onClick: () => {
6455
6442
  setDeleting(row);
6456
6443
  setError("");
6457
6444
  } }, "\u5220\u9664") : null)
@@ -6463,17 +6450,17 @@ function ResourceManager({ workspace, remote, kind, onConfigureSkill }) {
6463
6450
  } }, "\u9AD8\u7EA7\uFF1A\u4ECE Harness \u4E3B\u673A\u8DEF\u5F84\u5B89\u88C5") : null,
6464
6451
  importing ? (0, import_react5.createElement)(
6465
6452
  ResourceModal,
6466
- { 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_react5.createElement)("div", { className: "te-actions" }, (0, import_react5.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "ghost", disabled: busy, onClick: close }, "\u53D6\u6D88"), (0, import_react5.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "primary", disabled: busy || !preview || preview.conflict, onClick: () => {
6453
+ { 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_react5.createElement)("div", { className: "te-actions" }, (0, import_react5.createElement)(import_dsh_client_ui_primitives4.Button, { variant: "ghost", disabled: busy, onClick: close }, "\u53D6\u6D88"), (0, import_react5.createElement)(import_dsh_client_ui_primitives4.Button, { variant: "primary", disabled: busy || !preview || preview.conflict, onClick: () => {
6467
6454
  void install();
6468
6455
  } }, busy ? "\u5904\u7406\u4E2D\u2026" : "\u786E\u8BA4\u5B89\u88C5")) },
6469
6456
  targets(),
6470
- (0, import_react5.createElement)("div", { className: "te-actions" }, (0, import_react5.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "outline", disabled: busy, onClick: choose }, "\u91CD\u65B0\u9009\u62E9"), kind === "skill" ? (0, import_react5.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),
6457
+ (0, import_react5.createElement)("div", { className: "te-actions" }, (0, import_react5.createElement)(import_dsh_client_ui_primitives4.Button, { variant: "outline", disabled: busy, onClick: choose }, "\u91CD\u65B0\u9009\u62E9"), kind === "skill" ? (0, import_react5.createElement)(import_dsh_client_ui_primitives4.Button, { variant: "ghost", disabled: busy, onClick: () => setManual(!manual) }, manual ? "\u6536\u8D77\u9AD8\u7EA7\u65B9\u5F0F" : "\u4E3B\u673A\u8DEF\u5F84") : null),
6471
6458
  manual ? (0, import_react5.createElement)("div", { className: "te-advanced" }, (0, import_react5.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_react5.createElement)("div", { className: "te-toolbar" }, (0, import_react5.createElement)("input", { className: "te-input", "aria-label": "\u4E3B\u673A\u6280\u80FD\u76EE\u5F55", value: sourceDir, onChange: (e) => {
6472
6459
  setSourceDir(e.target.value);
6473
6460
  setRequest(null);
6474
- } }), (0, import_react5.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "outline", onClick: () => {
6461
+ } }), (0, import_react5.createElement)(import_dsh_client_ui_primitives4.Button, { variant: "outline", onClick: () => {
6475
6462
  void browse(sourceDir);
6476
- } }, "\u6D4F\u89C8"), (0, import_react5.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_react5.createElement)("div", { className: "te-dir-list" }, browsePath ? (0, import_react5.createElement)("button", { onClick: () => {
6463
+ } }, "\u6D4F\u89C8"), (0, import_react5.createElement)(import_dsh_client_ui_primitives4.Button, { variant: "outline", disabled: busy || !sourceDir.trim(), onClick: () => setRequest({ kind, level, path: workspace, files: [], sourceDir }) }, "\u9884\u89C8\u76EE\u5F55")), (0, import_react5.createElement)("div", { className: "te-dir-list" }, browsePath ? (0, import_react5.createElement)("button", { onClick: () => {
6477
6464
  void browse(browsePath.replace(/[\\/][^\\/]+[\\/]?$/u, "") || "/");
6478
6465
  } }, "\u2191 \u4E0A\u7EA7\u76EE\u5F55") : null, ...dirs.map((d) => (0, import_react5.createElement)("button", { key: d.name, onClick: () => {
6479
6466
  setRequest(null);
@@ -6481,21 +6468,21 @@ function ResourceManager({ workspace, remote, kind, onConfigureSkill }) {
6481
6468
  } }, d.name + (d.hasSkill ? " \xB7 SKILL.md" : ""))))) : null,
6482
6469
  busy ? (0, import_react5.createElement)("p", { role: "status" }, "\u6B63\u5728\u6821\u9A8C\u6587\u4EF6\uFF0C\u8BF7\u7A0D\u5019\u2026") : null,
6483
6470
  status(),
6484
- preview ? (0, import_react5.createElement)("div", { className: "te-preview" }, (0, import_react5.createElement)("h3", null, preview.name), (0, import_react5.createElement)("p", null, preview.description), (0, import_react5.createElement)("div", { className: "te-actions" }, (0, import_react5.createElement)("span", { className: "te-badge" }, `${preview.files} \u4E2A\u6587\u4EF6`), (0, import_react5.createElement)("span", { className: "te-badge" }, sizeText(preview.bytes))), (0, import_react5.createElement)("code", { className: "te-path" }, preview.target), preview.conflict ? (0, import_react5.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_react5.createElement)("div", { className: "te-markdown" }, (0, import_react5.createElement)(import_dsh_client_ui_primitives5.MarkdownText, { text: preview.content, labels }))) : null
6471
+ preview ? (0, import_react5.createElement)("div", { className: "te-preview" }, (0, import_react5.createElement)("h3", null, preview.name), (0, import_react5.createElement)("p", null, preview.description), (0, import_react5.createElement)("div", { className: "te-actions" }, (0, import_react5.createElement)("span", { className: "te-badge" }, `${preview.files} \u4E2A\u6587\u4EF6`), (0, import_react5.createElement)("span", { className: "te-badge" }, sizeText(preview.bytes))), (0, import_react5.createElement)("code", { className: "te-path" }, preview.target), preview.conflict ? (0, import_react5.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_react5.createElement)("div", { className: "te-markdown" }, (0, import_react5.createElement)(import_dsh_client_ui_primitives4.MarkdownText, { text: preview.content, labels }))) : null
6485
6472
  ) : null,
6486
6473
  editing ? (0, import_react5.createElement)(
6487
6474
  ResourceModal,
6488
- { title: editing === "new" ? `\u65B0\u5EFA${noun}` : `${viewing ? "\u67E5\u770B" : "\u7F16\u8F91"}${noun} \xB7 ${name}`, onClose: close, footer: (0, import_react5.createElement)("div", { className: "te-actions" }, (0, import_react5.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "ghost", disabled: busy, onClick: close }, "\u5173\u95ED"), readonly ? (0, import_react5.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "outline", disabled: busy, onClick: () => {
6475
+ { title: editing === "new" ? `\u65B0\u5EFA${noun}` : `${viewing ? "\u67E5\u770B" : "\u7F16\u8F91"}${noun} \xB7 ${name}`, onClose: close, footer: (0, import_react5.createElement)("div", { className: "te-actions" }, (0, import_react5.createElement)(import_dsh_client_ui_primitives4.Button, { variant: "ghost", disabled: busy, onClick: close }, "\u5173\u95ED"), editing !== "new" && levelOf(editing) === "bundled" ? (0, import_react5.createElement)(import_dsh_client_ui_primitives4.Button, { variant: "outline", disabled: busy, onClick: () => {
6489
6476
  void copyTemplate(editing);
6490
- } }, "\u4EE5\u6B64\u4E3A\u6A21\u677F\u65B0\u5EFA") : null, !readonly ? (0, import_react5.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_react5.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "primary", disabled: busy || !name.trim() || !body2.trim() || kind === "skill" && !description.trim(), onClick: () => {
6477
+ } }, "\u4EE5\u6B64\u4E3A\u6A21\u677F\u65B0\u5EFA") : null, !readonly ? (0, import_react5.createElement)(import_dsh_client_ui_primitives4.Button, { variant: "outline", disabled: busy, onClick: () => setViewing(!viewing) }, viewing ? "\u7F16\u8F91\u5185\u5BB9" : "\u9884\u89C8") : null, !readonly ? (0, import_react5.createElement)(import_dsh_client_ui_primitives4.Button, { variant: "primary", disabled: busy || !name.trim() || !body2.trim() || kind === "skill" && !description.trim(), onClick: () => {
6491
6478
  void save2();
6492
6479
  } }, busy ? "\u5904\u7406\u4E2D\u2026" : "\u4FDD\u5B58") : null) },
6493
- !readonly ? targets() : (0, import_react5.createElement)("p", { className: "te-badge" }, "\u5185\u7F6E\u6837\u672C \xB7 \u53EA\u8BFB"),
6480
+ !readonly ? targets() : (0, import_react5.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"),
6494
6481
  templateSource ? (0, import_react5.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,
6495
6482
  status(),
6496
- viewing ? (0, import_react5.createElement)("div", { className: "te-markdown" }, (0, import_react5.createElement)(import_dsh_client_ui_primitives5.MarkdownText, { text: body2, labels })) : (0, import_react5.createElement)("div", { className: "te-form" }, (0, import_react5.createElement)("label", null, "\u540D\u79F0", (0, import_react5.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_react5.createElement)("label", null, "\u63CF\u8FF0", (0, import_react5.createElement)("input", { className: "te-input", value: description, disabled: busy, onChange: (e) => setDescription(e.target.value) })) : null, kind === "skill" ? (0, import_react5.createElement)("label", null, "\u4F7F\u7528\u65F6\u673A\uFF08\u53EF\u9009\uFF09", (0, import_react5.createElement)("input", { className: "te-input", value: whenToUse, disabled: busy, onChange: (e) => setWhenToUse(e.target.value) })) : null, (0, import_react5.createElement)("label", null, "Markdown \u6B63\u6587", (0, import_react5.createElement)("textarea", { className: "te-input te-editor", value: body2, disabled: busy, onChange: (e) => setBody(e.target.value) })))
6483
+ viewing ? (0, import_react5.createElement)("div", { className: "te-markdown" }, (0, import_react5.createElement)(import_dsh_client_ui_primitives4.MarkdownText, { text: body2, labels })) : (0, import_react5.createElement)("div", { className: "te-form" }, (0, import_react5.createElement)("label", null, "\u540D\u79F0", (0, import_react5.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_react5.createElement)("label", null, "\u63CF\u8FF0", (0, import_react5.createElement)("input", { className: "te-input", value: description, disabled: busy, onChange: (e) => setDescription(e.target.value) })) : null, kind === "skill" ? (0, import_react5.createElement)("label", null, "\u4F7F\u7528\u65F6\u673A\uFF08\u53EF\u9009\uFF09", (0, import_react5.createElement)("input", { className: "te-input", value: whenToUse, disabled: busy, onChange: (e) => setWhenToUse(e.target.value) })) : null, (0, import_react5.createElement)("label", null, "Markdown \u6B63\u6587", (0, import_react5.createElement)("textarea", { className: "te-input te-editor", value: body2, disabled: busy, onChange: (e) => setBody(e.target.value) })))
6497
6484
  ) : null,
6498
- deleting ? (0, import_react5.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_react5.createElement)("div", { className: "te-actions" }, (0, import_react5.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "outline", disabled: busy, onClick: close }, "\u4FDD\u7559"), (0, import_react5.createElement)("button", { className: "te-danger-button", disabled: busy, onClick: () => {
6485
+ deleting ? (0, import_react5.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_react5.createElement)("div", { className: "te-actions" }, (0, import_react5.createElement)(import_dsh_client_ui_primitives4.Button, { variant: "outline", disabled: busy, onClick: close }, "\u4FDD\u7559"), (0, import_react5.createElement)("button", { className: "te-danger-button", disabled: busy, onClick: () => {
6499
6486
  void remove();
6500
6487
  } }, busy ? "\u5220\u9664\u4E2D\u2026" : "\u786E\u8BA4\u6C38\u4E45\u5220\u9664")) }, (0, import_react5.createElement)("code", { className: "te-path" }, `${roots?.[levelOf(deleting) === "user" ? "user" : "project"] ?? "\u8D44\u6E90\u76EE\u5F55"}/${deleting.name}${kind === "rule" ? ".md" : ""}`), (0, import_react5.createElement)("p", null, "\u6B64\u64CD\u4F5C\u4E0D\u4F1A\u8FDB\u5165\u56DE\u6536\u7AD9\uFF0C\u8BF7\u786E\u8BA4\u5DF2\u6709\u5907\u4EFD\u3002"), status()) : null
6501
6488
  );
@@ -6580,7 +6567,7 @@ function RuleManager(props) {
6580
6567
 
6581
6568
  // src/client/TaskLedger.tsx
6582
6569
  var import_react8 = require("react");
6583
- var import_dsh_client_ui_primitives6 = require("@deepseek-ai/dsh-client-ui-primitives");
6570
+ var import_dsh_client_ui_primitives5 = require("@deepseek-ai/dsh-client-ui-primitives");
6584
6571
  var card2 = {
6585
6572
  display: "flex",
6586
6573
  flexDirection: "column",
@@ -6618,10 +6605,10 @@ var badge = {
6618
6605
  color: "var(--dsw-alias-label-secondary)"
6619
6606
  };
6620
6607
  function verdictDot(outcome) {
6621
- return (0, import_react8.createElement)(import_dsh_client_ui_primitives6.StateDot, { state: outcome === "pass" ? "done" : "error" });
6608
+ return (0, import_react8.createElement)(import_dsh_client_ui_primitives5.StateDot, { state: outcome === "pass" ? "done" : "error" });
6622
6609
  }
6623
6610
  function itemStatusDot(status) {
6624
- return (0, import_react8.createElement)(import_dsh_client_ui_primitives6.StateDot, { state: status === "done" ? "done" : "ongoing" });
6611
+ return (0, import_react8.createElement)(import_dsh_client_ui_primitives5.StateDot, { state: status === "done" ? "done" : "ongoing" });
6625
6612
  }
6626
6613
  function timeText(at) {
6627
6614
  return at.slice(0, 19).replace("T", " ");
@@ -6702,7 +6689,7 @@ function TaskLedger({ workspace, remote }) {
6702
6689
  { style: headerRow },
6703
6690
  (0, import_react8.createElement)("span", { style: styles.bindingLabel }, "\u4EFB\u52A1\u53F0\u8D26"),
6704
6691
  (0, import_react8.createElement)("span", { style: styles.sourceBadge }, "\u53EA\u8BFB \xB7 \u6765\u81EA .dsh/task-*.json"),
6705
- (0, import_react8.createElement)(import_dsh_client_ui_primitives6.Button, { variant: "outline", size: "sm", disabled: loading, onClick: refresh }, loading ? "\u8BFB\u53D6\u4E2D\u2026" : "\u5237\u65B0")
6692
+ (0, import_react8.createElement)(import_dsh_client_ui_primitives5.Button, { variant: "outline", size: "sm", disabled: loading, onClick: refresh }, loading ? "\u8BFB\u53D6\u4E2D\u2026" : "\u5237\u65B0")
6706
6693
  ),
6707
6694
  loading ? (0, import_react8.createElement)("p", { role: "status" }, "\u6B63\u5728\u8BFB\u53D6\u4EFB\u52A1\u2026") : error !== "" ? (0, import_react8.createElement)("p", { style: styles.status }, error) : tasks.length === 0 ? (0, import_react8.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\u6D3E\u53D1\u4E0E\u5BA1\u67E5\u7559\u75D5\u3002") : visible.length === 0 ? (0, import_react8.createElement)("div", { className: "te-empty" }, "\u6CA1\u6709\u5339\u914D\u7684\u4EFB\u52A1\uFF0C\u8BF7\u8C03\u6574\u7B5B\u9009\u3002") : (0, import_react8.createElement)(
6708
6695
  "div",
@@ -6821,7 +6808,7 @@ function Workbench({ useStore, actions, useWorkspaces, remote }) {
6821
6808
  (0, import_react9.createElement)(
6822
6809
  "div",
6823
6810
  { style: headerBrand },
6824
- (0, import_react9.createElement)(import_dsh_client_ui_primitives7.IconSettingsOutline16, { size: 18 }),
6811
+ (0, import_react9.createElement)(IconSettings, { size: 18 }),
6825
6812
  (0, import_react9.createElement)(
6826
6813
  "div",
6827
6814
  { style: headerText },
@@ -6845,13 +6832,13 @@ function Workbench({ useStore, actions, useWorkspaces, remote }) {
6845
6832
  event.currentTarget.style.background = "transparent";
6846
6833
  }
6847
6834
  },
6848
- (0, import_react9.createElement)(import_dsh_client_ui_primitives7.IconCloseOutline16, { size: 16 })
6835
+ (0, import_react9.createElement)(IconClose, { size: 16 })
6849
6836
  )
6850
6837
  ),
6851
6838
  (0, import_react9.createElement)(
6852
6839
  "div",
6853
6840
  { style: tabbar },
6854
- ...TABS.map((t) => (0, import_react9.createElement)(import_dsh_client_ui_primitives7.Pill, { key: t.id, active: tab === t.id, onClick: () => {
6841
+ ...TABS.map((t) => (0, import_react9.createElement)(import_dsh_client_ui_primitives6.Pill, { key: t.id, active: tab === t.id, onClick: () => {
6855
6842
  setTab(t.id);
6856
6843
  } }, t.label)),
6857
6844
  workspaces.length > 0 ? (0, import_react9.createElement)("select", {
@@ -6878,7 +6865,6 @@ function Workbench({ useStore, actions, useWorkspaces, remote }) {
6878
6865
 
6879
6866
  // src/client/TriggerButton.tsx
6880
6867
  var import_react10 = require("react");
6881
- var import_dsh_client_ui_primitives8 = require("@deepseek-ai/dsh-client-ui-primitives");
6882
6868
  var hover = "var(--dsw-alias-bg-layer-2)";
6883
6869
  var label = "var(--dsw-alias-label-primary)";
6884
6870
  function TriggerButton({ wide, actions }) {
@@ -6922,7 +6908,7 @@ function TriggerButton({ wide, actions }) {
6922
6908
  transition: "background 120ms ease"
6923
6909
  }
6924
6910
  },
6925
- (0, import_react10.createElement)(import_dsh_client_ui_primitives8.IconSettingsOutline16, { size: wide ? 16 : 18 }),
6911
+ (0, import_react10.createElement)(IconSettings, { size: wide ? 16 : 18 }),
6926
6912
  wide ? (0, import_react10.createElement)("span", { style: { fontSize: 14, lineHeight: "22px" } }, "\u5DE5\u7A0B\u6D41\u7A0B") : null
6927
6913
  );
6928
6914
  }