dsh-run2skill 0.5.0-alpha.2 → 0.5.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/client.js CHANGED
@@ -5550,16 +5550,31 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5550
5550
  }
5551
5551
  };
5552
5552
  }
5553
- async function createRun2skillRemoteCaller(remote) {
5553
+ async function createRun2skillRemoteCaller(remote, context) {
5554
+ const dispose = await remote.$mount(RUN2SKILL_REMOTE);
5555
+ let namespace;
5556
+ const scope = context?.inject(["remote.run2skill"], (child) => {
5557
+ namespace = child.get("remote.run2skill");
5558
+ });
5559
+ try {
5560
+ if (scope !== void 0) await scope;
5561
+ } catch (error) {
5562
+ await dispose();
5563
+ throw error;
5564
+ }
5554
5565
  return {
5555
- dispose: await remote.$mount(RUN2SKILL_REMOTE),
5566
+ async dispose() {
5567
+ await scope?.dispose();
5568
+ await dispose();
5569
+ },
5556
5570
  async call(endpoint, payload, signal) {
5557
5571
  const route = routeRun2skillEndpoint(endpoint);
5558
5572
  const request = {
5559
5573
  endpoint,
5560
5574
  payload
5561
5575
  };
5562
- const result = route === "query" ? await remote.run2skill.query(request, signal) : await remote.run2skill.command(request, signal);
5576
+ const target = context === void 0 ? remote.run2skill : namespace;
5577
+ const result = route === "query" ? await target.query(request, signal) : await target.command(request, signal);
5563
5578
  return result.ok ? result.value : carrierFailure(result.error);
5564
5579
  }
5565
5580
  };
@@ -5628,50 +5643,50 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5628
5643
  }
5629
5644
  //#endregion
5630
5645
  //#region \0run2skill-css:run2skill-settings-page.module.css.mjs
5631
- const css = ".run2skill_page_7hKdxq{width:min(100%,1040px);color:var(--dsw-alias-label-primary);gap:24px;padding:16px 0 48px;display:grid}.run2skill_intro_7hKdxq,.run2skill_muted_7hKdxq{color:var(--dsw-alias-label-secondary);margin:0;font-size:13px;line-height:1.5}.run2skill_section_7hKdxq{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);box-shadow:0 1px 2px var(--dsw-alias-border-l1);border-radius:16px;overflow:hidden}.run2skill_sectionHeader_7hKdxq{box-sizing:border-box;height:auto;min-height:56px;padding:14px 20px}.run2skill_sectionTitle_7hKdxq{font-size:15px}.run2skill_sectionBody_7hKdxq{gap:18px;padding:12px 24px 24px 56px;display:grid;container-type:inline-size}.run2skill_attentionGroup_7hKdxq{gap:16px;min-width:0;display:grid}.run2skill_empty_7hKdxq{min-height:56px;color:var(--dsw-alias-label-secondary);place-items:center;margin:0;font-size:13px;display:grid}.run2skill_toolbar_7hKdxq,.run2skill_actions_7hKdxq,.run2skill_modeGroup_7hKdxq{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.run2skill_learningStatusRow_7hKdxq{justify-content:space-between;align-items:center;gap:16px;min-width:0;display:flex}.run2skill_learningStatusRow_7hKdxq>:first-child{overflow-wrap:anywhere;min-width:0}@container (width<=30rem){.run2skill_learningStatusRow_7hKdxq{flex-direction:column;align-items:stretch}.run2skill_learningStatusRow_7hKdxq .run2skill_actions_7hKdxq{flex-direction:column;align-items:stretch;width:100%}.run2skill_learningStatusRow_7hKdxq .run2skill_actions_7hKdxq>*{box-sizing:border-box;white-space:normal;overflow-wrap:anywhere;flex:none;width:100%;min-width:0;max-width:100%;height:auto}}.run2skill_attentionList_7hKdxq,.run2skill_proposalList_7hKdxq,.run2skill_activityList_7hKdxq{gap:8px;margin:0;padding:0;list-style:none;display:grid}.run2skill_activityItem_7hKdxq{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);border-radius:12px;justify-content:space-between;align-items:center;gap:12px;padding:12px 14px;display:flex}.run2skill_activitySummary_7hKdxq{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.run2skill_proposalToolbar_7hKdxq{grid-template-columns:minmax(12rem,1fr) auto;align-items:center;gap:8px;display:grid}.run2skill_proposalToolbar_7hKdxq>:first-child{width:100%}.run2skill_proposalToolbarCompact_7hKdxq{justify-content:flex-end;display:flex}.run2skill_proposalToolbarCompact_7hKdxq>:first-child{width:auto}.run2skill_proposalLayout_7hKdxq{grid-template-columns:1fr;gap:12px;display:grid}.run2skill_proposalListButton_7hKdxq{text-align:start;white-space:normal;overflow-wrap:anywhere;border-radius:10px;flex-direction:column;justify-content:flex-start;align-items:flex-start;gap:2px;width:100%;height:auto;min-height:48px;padding:8px 12px}.run2skill_proposalListButton_7hKdxq[aria-current=true]{border-color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-interactive-bg-active);color:var(--dsw-alias-label-primary);box-shadow:inset 3px 0 var(--dsw-alias-brand-primary)}.run2skill_proposalName_7hKdxq{max-width:100%;font-size:14px;font-weight:600;line-height:20px}.run2skill_proposalMeta_7hKdxq{max-width:100%;color:var(--dsw-alias-label-secondary);font-size:12px;line-height:18px}.run2skill_detail_7hKdxq{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);border-radius:12px;min-width:0;max-height:640px;padding:18px;overflow:auto}.run2skill_detail_7hKdxq>:first-child{margin-top:0}.run2skill_detailFacts_7hKdxq{grid-template-columns:minmax(6rem,max-content) minmax(0,1fr);gap:8px 16px;margin:0 0 20px;display:grid}.run2skill_detailFacts_7hKdxq dt{color:var(--dsw-alias-label-secondary);font-size:13px}.run2skill_detailFacts_7hKdxq dd{overflow-wrap:anywhere;min-width:0;margin:0}.run2skill_detail_7hKdxq pre{white-space:pre-wrap;unicode-bidi:isolate;overflow:auto}.run2skill_technicalDetails_7hKdxq{border:1px solid var(--dsw-alias-border-l2);border-radius:8px;margin:16px 0;padding:10px 12px}.run2skill_technicalDetails_7hKdxq summary{cursor:pointer;color:var(--dsw-alias-label-secondary);font-size:13px}.run2skill_technicalDetails_7hKdxq[open] summary{margin-bottom:12px}.run2skill_status_7hKdxq{min-height:20px;margin:0;font-size:13px}.run2skill_revisionBox_7hKdxq{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);border-radius:12px;gap:8px;margin:18px 0;padding:14px;display:grid}.run2skill_revisionBox_7hKdxq label{font-size:14px;font-weight:600}.run2skill_revisionBox_7hKdxq textarea{box-sizing:border-box;resize:vertical;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);width:100%;min-height:84px;color:var(--dsw-alias-label-primary);font:inherit;border-radius:10px;padding:10px 12px;line-height:1.5}.run2skill_revisionBox_7hKdxq textarea:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:2px}.run2skill_revisionBox_7hKdxq textarea:disabled{cursor:not-allowed;opacity:.65}.run2skill_revisionBox_7hKdxq>:last-child{justify-self:start}.run2skill_danger_7hKdxq{color:var(--dsw-alias-state-error-primary)}.run2skill_backdrop_7hKdxq,.run2skill_rejectOverlay_7hKdxq{background:var(--dsw-alias-bg-mask-1);position:fixed;inset:0}.run2skill_backdrop_7hKdxq{z-index:999}.run2skill_rejectOverlay_7hKdxq{z-index:1001;place-items:center;padding:16px;display:grid}.run2skill_legacyDialog_7hKdxq{z-index:1000;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);box-shadow:0 16px 48px var(--dsw-alias-bg-mask-1);border-radius:16px;grid-template-columns:minmax(16rem,24rem) minmax(0,1fr);gap:16px;padding:16px;display:grid;position:fixed;inset:5vh 5vw;overflow:hidden}.run2skill_blocked_7hKdxq{pointer-events:none;display:contents}.run2skill_queue_7hKdxq,.run2skill_legacyDetail_7hKdxq{min-width:0;overflow:auto}.run2skill_legacyHeader_7hKdxq{justify-content:space-between;align-items:center;gap:8px;display:flex}.run2skill_legacyList_7hKdxq{margin:0;padding:0;list-style:none}.run2skill_rejectCard_7hKdxq{background:var(--dsw-alias-bg-layer-1);border-radius:16px;max-width:32rem;padding:16px}.run2skill_textBlock_7hKdxq{white-space:pre-wrap;overflow-wrap:anywhere;unicode-bidi:isolate;overflow:auto}.run2skill_previewFacts_7hKdxq{grid-template-columns:max-content 1fr;gap:6px 12px;display:grid}.run2skill_previewFacts_7hKdxq dt,.run2skill_previewFacts_7hKdxq dd{margin:0}@container (width>=760px){.run2skill_proposalLayout_7hKdxq{grid-template-columns:minmax(240px,.8fr) minmax(0,1.6fr);gap:20px}}@container (width<=420px){.run2skill_proposalToolbar_7hKdxq,.run2skill_detailFacts_7hKdxq{grid-template-columns:1fr}.run2skill_proposalToolbar_7hKdxq>:last-child{justify-self:start}.run2skill_detailFacts_7hKdxq dt:not(:first-child){margin-top:8px}}@media (width<=720px){.run2skill_sectionBody_7hKdxq{padding:8px 18px 20px}.run2skill_activityItem_7hKdxq{flex-direction:column;align-items:flex-start}}";
5646
+ const css = ".run2skill_page_OghXMq{width:min(100%,960px);min-width:0;color:var(--dsw-alias-label-primary);gap:14px;padding:8px 0 32px;font-size:14px;line-height:1.6;display:grid}.run2skill_muted_OghXMq{color:var(--dsw-alias-label-secondary);margin:0;font-size:13px;line-height:1.6}.run2skill_section_OghXMq{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);border-radius:12px;overflow:hidden}.run2skill_sectionHeader_OghXMq{box-sizing:border-box;height:auto;min-height:52px;padding:12px 16px}.run2skill_sectionTitle_OghXMq{font-size:14px;font-weight:600}.run2skill_sectionBody_OghXMq{gap:14px;min-width:0;padding:4px 18px 18px;display:grid;container-type:inline-size}.run2skill_sectionBody_OghXMq h3{margin:0 0 8px;font-size:14px;line-height:1.5}.run2skill_sectionBody_OghXMq p{line-height:1.6}.run2skill_publicationFeedback_OghXMq{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);border-radius:12px;gap:8px;padding:14px 16px;font-size:13px;display:grid}.run2skill_publicationFeedback_OghXMq p{margin:0}.run2skill_publicationFeedback_OghXMq>:last-child{justify-self:start}.run2skill_attentionGroup_OghXMq{gap:16px;min-width:0;display:grid}.run2skill_empty_OghXMq{min-height:56px;color:var(--dsw-alias-label-secondary);place-items:center;margin:0;font-size:13px;display:grid}.run2skill_toolbar_OghXMq,.run2skill_actions_OghXMq,.run2skill_modeGroup_OghXMq{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.run2skill_learningStatusRow_OghXMq{justify-content:space-between;align-items:center;gap:16px;min-width:0;display:flex}.run2skill_learningStatusRow_OghXMq>:first-child{overflow-wrap:anywhere;min-width:0}@container (width<=30rem){.run2skill_learningStatusRow_OghXMq{flex-direction:column;align-items:stretch}.run2skill_learningStatusRow_OghXMq .run2skill_actions_OghXMq{flex-direction:column;align-items:stretch;width:100%}.run2skill_learningStatusRow_OghXMq .run2skill_actions_OghXMq>*{box-sizing:border-box;white-space:normal;overflow-wrap:anywhere;flex:none;width:100%;min-width:0;max-width:100%;height:auto;min-height:36px}}.run2skill_attentionList_OghXMq,.run2skill_proposalList_OghXMq,.run2skill_activityList_OghXMq{gap:8px;margin:0;padding:0;list-style:none;display:grid}.run2skill_activityItem_OghXMq{background:var(--dsw-alias-bg-layer-2);border-radius:8px;justify-content:space-between;align-items:center;gap:12px;padding:10px 12px;display:flex}.run2skill_activitySummary_OghXMq{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.run2skill_proposalToolbar_OghXMq{grid-template-columns:minmax(12rem,1fr) auto;align-items:center;gap:8px;display:grid}.run2skill_proposalToolbar_OghXMq>:first-child{width:100%}.run2skill_proposalToolbarCompact_OghXMq{justify-content:flex-end;display:flex}.run2skill_proposalToolbarCompact_OghXMq>:first-child{width:auto}.run2skill_proposalLayout_OghXMq{grid-template-columns:1fr;gap:16px;display:grid}.run2skill_proposalListButton_OghXMq{text-align:start;white-space:normal;overflow-wrap:anywhere;border-radius:8px;flex-direction:column;justify-content:flex-start;align-items:flex-start;gap:4px;width:100%;height:auto;min-height:48px;padding:12px 14px}.run2skill_proposalListButton_OghXMq[aria-current=true]{border-color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-interactive-bg-active);color:var(--dsw-alias-label-primary);box-shadow:inset 2px 0 var(--dsw-alias-brand-primary)}.run2skill_proposalName_OghXMq{max-width:100%;font-size:14px;font-weight:600;line-height:20px}.run2skill_proposalMeta_OghXMq{max-width:100%;color:var(--dsw-alias-label-secondary);font-size:12px;line-height:18px}.run2skill_detail_OghXMq{border-top:1px solid var(--dsw-alias-border-l2);min-width:0;padding:16px 0 0}.run2skill_detail_OghXMq>:first-child{margin-top:0}.run2skill_detail_OghXMq h3,.run2skill_legacyDetail_OghXMq h3{overflow-wrap:anywhere;margin:0 0 16px;font-size:16px;font-weight:600;line-height:1.5}.run2skill_detail_OghXMq h4,.run2skill_legacyDetail_OghXMq h4{margin:22px 0 8px;font-size:13px;font-weight:600;line-height:1.5}.run2skill_detail_OghXMq p{margin:8px 0}.run2skill_detail_OghXMq>article{border-left:2px solid var(--dsw-alias-border-l2);margin:12px 0;padding-left:12px}.run2skill_detail_OghXMq>article strong{font-size:13px;font-weight:500}.run2skill_detailFacts_OghXMq{grid-template-columns:minmax(6rem,max-content) minmax(0,1fr);gap:8px 14px;margin:0 0 16px;display:grid}.run2skill_detailFacts_OghXMq dt{color:var(--dsw-alias-label-secondary);font-size:13px}.run2skill_detailFacts_OghXMq dd{overflow-wrap:anywhere;min-width:0;margin:0;font-size:14px}.run2skill_detail_OghXMq pre{white-space:pre-wrap;unicode-bidi:isolate;overflow:auto}.run2skill_technicalDetails_OghXMq{background:var(--dsw-alias-bg-layer-2);border-radius:8px;margin:16px 0;padding:10px 12px}.run2skill_technicalDetails_OghXMq summary{cursor:pointer;color:var(--dsw-alias-label-secondary);font-size:13px}.run2skill_technicalDetails_OghXMq[open] summary{margin-bottom:12px}.run2skill_status_OghXMq{min-height:20px;margin:0;font-size:13px}.run2skill_revisionBox_OghXMq{background:var(--dsw-alias-bg-layer-2);border-radius:10px;gap:8px;margin:18px 0;padding:14px;display:grid}.run2skill_revisionBox_OghXMq label{font-size:14px;font-weight:600}.run2skill_revisionBox_OghXMq textarea{box-sizing:border-box;resize:vertical;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);width:100%;min-height:84px;color:var(--dsw-alias-label-primary);font:inherit;border-radius:10px;padding:10px 12px;line-height:1.5}.run2skill_revisionBox_OghXMq textarea:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:2px}.run2skill_revisionBox_OghXMq textarea:disabled{cursor:not-allowed;opacity:.65}.run2skill_revisionBox_OghXMq>:last-child{justify-self:start}.run2skill_danger_OghXMq{color:var(--dsw-alias-state-error-primary)}.run2skill_backdrop_OghXMq,.run2skill_rejectOverlay_OghXMq{background:var(--dsw-alias-bg-mask-1);position:fixed;inset:0}.run2skill_backdrop_OghXMq{z-index:999}.run2skill_rejectOverlay_OghXMq{z-index:1001;place-items:center;padding:16px;display:grid}.run2skill_legacyDialog_OghXMq{z-index:1000;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);box-shadow:0 16px 48px var(--dsw-alias-bg-mask-1);border-radius:16px;grid-template-columns:minmax(16rem,24rem) minmax(0,1fr);gap:16px;padding:16px;display:grid;position:fixed;inset:5vh 5vw;overflow:hidden}.run2skill_blocked_OghXMq{pointer-events:none;display:contents}.run2skill_queue_OghXMq,.run2skill_legacyDetail_OghXMq{min-width:0;overflow:auto}.run2skill_legacyHeader_OghXMq{justify-content:space-between;align-items:center;gap:8px;display:flex}.run2skill_legacyList_OghXMq{margin:0;padding:0;list-style:none}.run2skill_rejectCard_OghXMq{background:var(--dsw-alias-bg-layer-1);border-radius:16px;max-width:32rem;padding:16px}.run2skill_textBlock_OghXMq{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);max-width:100%;font-family:var(--ds-font-family-code);white-space:pre-wrap;overflow-wrap:anywhere;unicode-bidi:isolate;border-radius:8px;padding:14px;font-size:12px;line-height:1.75;overflow:auto}.run2skill_previewFacts_OghXMq{grid-template-columns:max-content 1fr;gap:6px 12px;display:grid}.run2skill_previewFacts_OghXMq dt,.run2skill_previewFacts_OghXMq dd{margin:0}@container (width>=760px){.run2skill_proposalLayout_OghXMq{grid-template-columns:minmax(200px,.8fr) minmax(0,1.8fr);gap:20px}.run2skill_proposalLayout_OghXMq .run2skill_detail_OghXMq{border-top:0;border-left:1px solid var(--dsw-alias-border-l2);padding:0 0 0 20px}}@container (width<=420px){.run2skill_proposalToolbar_OghXMq,.run2skill_detailFacts_OghXMq{grid-template-columns:1fr}.run2skill_proposalToolbar_OghXMq>:last-child{justify-self:start}.run2skill_detailFacts_OghXMq dt:not(:first-child){margin-top:8px}}@media (width<=720px){.run2skill_sectionBody_OghXMq{padding:8px 18px 20px}.run2skill_activityItem_OghXMq{flex-direction:column;align-items:flex-start}}";
5632
5647
  if (typeof document !== "undefined") upsertRun2skillStyle(css);
5633
5648
  var _run2skill_css_run2skill_settings_page_module_css_default = {
5634
- "intro": "run2skill_intro_7hKdxq",
5635
- "sectionTitle": "run2skill_sectionTitle_7hKdxq",
5636
- "page": "run2skill_page_7hKdxq",
5637
- "proposalToolbarCompact": "run2skill_proposalToolbarCompact_7hKdxq",
5638
- "toolbar": "run2skill_toolbar_7hKdxq",
5639
- "rejectOverlay": "run2skill_rejectOverlay_7hKdxq",
5640
- "previewFacts": "run2skill_previewFacts_7hKdxq",
5641
- "empty": "run2skill_empty_7hKdxq",
5642
- "technicalDetails": "run2skill_technicalDetails_7hKdxq",
5643
- "revisionBox": "run2skill_revisionBox_7hKdxq",
5644
- "danger": "run2skill_danger_7hKdxq",
5645
- "rejectCard": "run2skill_rejectCard_7hKdxq",
5646
- "learningStatusRow": "run2skill_learningStatusRow_7hKdxq",
5647
- "detail": "run2skill_detail_7hKdxq",
5648
- "legacyList": "run2skill_legacyList_7hKdxq",
5649
- "section": "run2skill_section_7hKdxq",
5650
- "proposalList": "run2skill_proposalList_7hKdxq",
5651
- "activitySummary": "run2skill_activitySummary_7hKdxq",
5652
- "proposalListButton": "run2skill_proposalListButton_7hKdxq",
5653
- "actions": "run2skill_actions_7hKdxq",
5654
- "sectionBody": "run2skill_sectionBody_7hKdxq",
5655
- "modeGroup": "run2skill_modeGroup_7hKdxq",
5656
- "proposalName": "run2skill_proposalName_7hKdxq",
5657
- "status": "run2skill_status_7hKdxq",
5658
- "legacyDialog": "run2skill_legacyDialog_7hKdxq",
5659
- "detailFacts": "run2skill_detailFacts_7hKdxq",
5660
- "attentionGroup": "run2skill_attentionGroup_7hKdxq",
5661
- "blocked": "run2skill_blocked_7hKdxq",
5662
- "legacyHeader": "run2skill_legacyHeader_7hKdxq",
5663
- "legacyDetail": "run2skill_legacyDetail_7hKdxq",
5664
- "sectionHeader": "run2skill_sectionHeader_7hKdxq",
5665
- "proposalLayout": "run2skill_proposalLayout_7hKdxq",
5666
- "proposalMeta": "run2skill_proposalMeta_7hKdxq",
5667
- "backdrop": "run2skill_backdrop_7hKdxq",
5668
- "textBlock": "run2skill_textBlock_7hKdxq",
5669
- "muted": "run2skill_muted_7hKdxq",
5670
- "queue": "run2skill_queue_7hKdxq",
5671
- "proposalToolbar": "run2skill_proposalToolbar_7hKdxq",
5672
- "attentionList": "run2skill_attentionList_7hKdxq",
5673
- "activityList": "run2skill_activityList_7hKdxq",
5674
- "activityItem": "run2skill_activityItem_7hKdxq"
5649
+ "publicationFeedback": "run2skill_publicationFeedback_OghXMq",
5650
+ "sectionHeader": "run2skill_sectionHeader_OghXMq",
5651
+ "muted": "run2skill_muted_OghXMq",
5652
+ "backdrop": "run2skill_backdrop_OghXMq",
5653
+ "activitySummary": "run2skill_activitySummary_OghXMq",
5654
+ "proposalMeta": "run2skill_proposalMeta_OghXMq",
5655
+ "proposalName": "run2skill_proposalName_OghXMq",
5656
+ "previewFacts": "run2skill_previewFacts_OghXMq",
5657
+ "modeGroup": "run2skill_modeGroup_OghXMq",
5658
+ "revisionBox": "run2skill_revisionBox_OghXMq",
5659
+ "actions": "run2skill_actions_OghXMq",
5660
+ "sectionBody": "run2skill_sectionBody_OghXMq",
5661
+ "legacyDetail": "run2skill_legacyDetail_OghXMq",
5662
+ "proposalToolbarCompact": "run2skill_proposalToolbarCompact_OghXMq",
5663
+ "section": "run2skill_section_OghXMq",
5664
+ "proposalToolbar": "run2skill_proposalToolbar_OghXMq",
5665
+ "activityList": "run2skill_activityList_OghXMq",
5666
+ "detail": "run2skill_detail_OghXMq",
5667
+ "activityItem": "run2skill_activityItem_OghXMq",
5668
+ "technicalDetails": "run2skill_technicalDetails_OghXMq",
5669
+ "attentionGroup": "run2skill_attentionGroup_OghXMq",
5670
+ "proposalListButton": "run2skill_proposalListButton_OghXMq",
5671
+ "status": "run2skill_status_OghXMq",
5672
+ "queue": "run2skill_queue_OghXMq",
5673
+ "proposalLayout": "run2skill_proposalLayout_OghXMq",
5674
+ "page": "run2skill_page_OghXMq",
5675
+ "rejectCard": "run2skill_rejectCard_OghXMq",
5676
+ "toolbar": "run2skill_toolbar_OghXMq",
5677
+ "danger": "run2skill_danger_OghXMq",
5678
+ "sectionTitle": "run2skill_sectionTitle_OghXMq",
5679
+ "rejectOverlay": "run2skill_rejectOverlay_OghXMq",
5680
+ "textBlock": "run2skill_textBlock_OghXMq",
5681
+ "empty": "run2skill_empty_OghXMq",
5682
+ "attentionList": "run2skill_attentionList_OghXMq",
5683
+ "proposalList": "run2skill_proposalList_OghXMq",
5684
+ "learningStatusRow": "run2skill_learningStatusRow_OghXMq",
5685
+ "detailFacts": "run2skill_detailFacts_OghXMq",
5686
+ "legacyDialog": "run2skill_legacyDialog_OghXMq",
5687
+ "legacyHeader": "run2skill_legacyHeader_OghXMq",
5688
+ "blocked": "run2skill_blocked_OghXMq",
5689
+ "legacyList": "run2skill_legacyList_OghXMq"
5675
5690
  };
5676
5691
  //#endregion
5677
5692
  //#region src/client/purge-settings.ts
@@ -6178,7 +6193,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6178
6193
  return (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Modal, {
6179
6194
  open: true,
6180
6195
  title: scope === "ALL" ? "确认清理所有缓存?" : `确认清理 ${scope} Run2Skill 数据?`,
6181
- description: "此操作只清理 Run2Skill 自己产生的中间缓存数据,不会卸载插件。",
6196
+ description: "清理 Run2Skill 的待处理草稿和中间缓存。",
6182
6197
  closeLabel: "关闭清理确认框",
6183
6198
  onClose: () => {
6184
6199
  props.controller.cancelPreview();
@@ -6233,7 +6248,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6233
6248
  const activeReceipt = state.inProgressReceipt?.state === "IN_PROGRESS" ? state.inProgressReceipt : void 0;
6234
6249
  const activePhase = active?.phase ?? activeReceipt?.phase ?? (activeReceipt === void 0 ? void 0 : "HIDING");
6235
6250
  const disabled = state.previewPending || state.mutationPending || active !== void 0 || activeReceipt !== void 0;
6236
- return (0, react.createElement)("section", { "aria-labelledby": "run2skill-purge-heading" }, (0, react.createElement)("h3", { id: "run2skill-purge-heading" }, "缓存清理"), (0, react.createElement)("p", null, "清理 Run2Skill 自己产生的中间缓存数据"), (0, react.createElement)("div", { className: _run2skill_css_run2skill_settings_page_module_css_default.actions }, (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6251
+ return (0, react.createElement)("section", { "aria-label": "缓存清理" }, (0, react.createElement)("div", { className: _run2skill_css_run2skill_settings_page_module_css_default.actions }, (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6237
6252
  variant: "outline",
6238
6253
  icon: (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconTrashOutlineMedium),
6239
6254
  disabled,
@@ -6885,6 +6900,14 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6885
6900
  });
6886
6901
  const receipt = parseMutationReceipt(await this.call(targetEndpoint, request, signal));
6887
6902
  if (receipt === void 0) throw new Error("invalid mutation receipt");
6903
+ if (this.#disposed || signal.aborted) return;
6904
+ if ((action === "APPROVE" || action === "RETRY") && (receipt.workItemId !== detail.workItemId || receipt.proposalRef.proposalId !== proposalRef.proposalId || receipt.proposalRef.revision !== proposalRef.revision || receipt.proposalRef.digest !== proposalRef.digest)) throw new Error("unrelated mutation receipt");
6905
+ if (action === "APPROVE" || action === "RETRY") this.options.onPublicationFeedback?.({
6906
+ name: detail.proposal.name,
6907
+ persistenceScope: detail.proposal.persistenceScope,
6908
+ processingState: receipt.processingState,
6909
+ publicationOutcome: receipt.publicationOutcome
6910
+ });
6888
6911
  const announcement = describeProposalOutcome(receipt) || "技能草稿状态已更新";
6889
6912
  this.#publish({
6890
6913
  ...this.#state,
@@ -7510,7 +7533,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7510
7533
  const revisionDiff = proposal.revisionParent === void 0 ? [] : makeExactLineDiff(proposal.revisionParent.exactSkillBytes, proposal.exactSkillBytes);
7511
7534
  const revisionFeedbackBytes = new TextEncoder().encode(revisionFeedback.trim()).byteLength;
7512
7535
  const revisionFeedbackValid = revisionFeedback.trim().length > 0 && revisionFeedbackBytes <= 2048;
7513
- return (0, react.createElement)(react.Fragment, null, (0, react.createElement)("h3", null, coveringCandidate === void 0 ? `${describeProposalKind(proposal.kind)}:${makeSafeText(proposal.name)}` : `无需新建技能:继续使用 ${makeSafeText(coveringCandidate.name)}`), (0, react.createElement)("dl", { className: _run2skill_css_run2skill_settings_page_module_css_default.detailFacts }, coveringCandidate === void 0 ? (0, react.createElement)(react.Fragment, null, (0, react.createElement)("dt", null, "这个技能有什么用"), (0, react.createElement)("dd", null, makeSafeText(proposal.description)), (0, react.createElement)("dt", null, "什么时候会用到"), (0, react.createElement)("dd", null, makeSafeText(proposal.whenToUse)), (0, react.createElement)("dt", null, "保存后在哪里可用"), (0, react.createElement)("dd", null, describePersistenceScope(proposal.persistenceScope))) : (0, react.createElement)(react.Fragment, null, (0, react.createElement)("dt", null, "原本想保存的经验"), (0, react.createElement)("dd", null, makeSafeText(proposal.description)), (0, react.createElement)("dt", null, "适用场景"), (0, react.createElement)("dd", null, makeSafeText(proposal.whenToUse)), (0, react.createElement)("dt", null, "这次经验的范围"), (0, react.createElement)("dd", null, describeProposalScope(proposal.kind, proposal.persistenceScope))), (0, react.createElement)("dt", null, "当前进度"), (0, react.createElement)("dd", null, describeProposalOutcome(detail))), (0, react.createElement)("h4", null, coveringCandidate === void 0 ? "为什么建议保存" : "为什么无需新建"), (0, react.createElement)("p", null, makeSafeText(proposal.curationRationale)), ...detail.experiences.map((experience) => (0, react.createElement)("article", { key: experience.experienceId }, (0, react.createElement)("strong", null, `${describeExperienceType(experience.type)} · 来自明确表达`), (0, react.createElement)("p", null, makeSafeText(experience.lesson)))), (0, react.createElement)("h4", null, "参考的对话内容"), (0, react.createElement)("p", { className: _run2skill_css_run2skill_settings_page_module_css_default.muted }, "以下片段来自本次对话,并已过滤不可安全展示的内容。"), ...detail.evidenceRefs.map((evidence, index) => (0, react.createElement)("article", { key: `${String(evidence.messageSeq)}:${evidence.excerptDigest}` }, (0, react.createElement)("strong", null, `对话片段 ${String(index + 1)}${evidence.truncated ? "(内容较长,已节选)" : ""}`), (0, react.createElement)(ProposalTextView, {
7536
+ return (0, react.createElement)(react.Fragment, null, (0, react.createElement)("h3", null, coveringCandidate === void 0 ? `${describeProposalKind(proposal.kind)}:${makeSafeText(proposal.name)}` : `无需新建技能:继续使用 ${makeSafeText(coveringCandidate.name)}`), (0, react.createElement)("dl", { className: _run2skill_css_run2skill_settings_page_module_css_default.detailFacts }, coveringCandidate === void 0 ? (0, react.createElement)(react.Fragment, null, (0, react.createElement)("dt", null, "这个技能有什么用"), (0, react.createElement)("dd", null, makeSafeText(proposal.description)), (0, react.createElement)("dt", null, "什么时候会用到"), (0, react.createElement)("dd", null, makeSafeText(proposal.whenToUse)), (0, react.createElement)("dt", null, "保存后在哪里可用"), (0, react.createElement)("dd", null, describePersistenceScope(proposal.persistenceScope))) : (0, react.createElement)(react.Fragment, null, (0, react.createElement)("dt", null, "原本想保存的经验"), (0, react.createElement)("dd", null, makeSafeText(proposal.description)), (0, react.createElement)("dt", null, "适用场景"), (0, react.createElement)("dd", null, makeSafeText(proposal.whenToUse)), (0, react.createElement)("dt", null, "这次经验的范围"), (0, react.createElement)("dd", null, describeProposalScope(proposal.kind, proposal.persistenceScope))), (0, react.createElement)("dt", null, "当前进度"), (0, react.createElement)("dd", null, describeProposalOutcome(detail))), (0, react.createElement)("h4", null, coveringCandidate === void 0 ? "为什么建议保存" : "为什么无需新建"), (0, react.createElement)("p", null, makeSafeText(proposal.curationRationale)), ...detail.experiences.map((experience) => (0, react.createElement)("article", { key: experience.experienceId }, (0, react.createElement)("strong", null, `${describeExperienceType(experience.type)} · 来自明确表达`), (0, react.createElement)("p", null, makeSafeText(experience.lesson)))), (0, react.createElement)("h4", null, "参考的对话内容"), ...detail.evidenceRefs.map((evidence, index) => (0, react.createElement)("article", { key: `${String(evidence.messageSeq)}:${evidence.excerptDigest}` }, (0, react.createElement)("strong", null, `对话片段 ${String(index + 1)}${evidence.truncated ? "(内容较长,已节选)" : ""}`), (0, react.createElement)(ProposalTextView, {
7514
7537
  value: evidence.excerpt,
7515
7538
  mode: "SAFE",
7516
7539
  label: `参考的对话内容 ${String(index + 1)}`
@@ -7534,7 +7557,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7534
7557
  onClick: () => {
7535
7558
  props.setTextMode("RAW");
7536
7559
  }
7537
- }, "按原文显示")), (0, react.createElement)("h4", null, coveringCandidate === void 0 ? "确认要保存的技能说明" : "用于判断的草稿内容"), (0, react.createElement)("p", { className: _run2skill_css_run2skill_settings_page_module_css_default.muted }, coveringCandidate === void 0 ? "这是 Agent 以后会遵循的完整说明。开头是技能名称和设置,标题下方是具体规则。" : "这份草稿不会保存,仅用于核对已有技能是否已经包含相同经验。"), (0, react.createElement)(ProposalTextView, {
7560
+ }, "按原文显示")), (0, react.createElement)("h4", null, coveringCandidate === void 0 ? "确认要保存的技能说明" : "用于判断的草稿内容"), (0, react.createElement)(ProposalTextView, {
7538
7561
  value: proposal.exactSkillBytes,
7539
7562
  mode: props.textMode,
7540
7563
  label: coveringCandidate === void 0 ? "确认要保存的技能说明" : "用于判断的草稿内容"
@@ -7548,7 +7571,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7548
7571
  }, (0, react.createElement)("label", { htmlFor: `run2skill-revision-${proposal.proposalId}` }, "想怎么修改?"), (0, react.createElement)("p", {
7549
7572
  id: `run2skill-revision-help-${proposal.proposalId}`,
7550
7573
  className: _run2skill_css_run2skill_settings_page_module_css_default.muted
7551
- }, "写一条简短意见。Run2Skill 会重新生成完整草稿,原草稿不会直接发布。"), (0, react.createElement)("textarea", {
7574
+ }, "根据意见生成新版草稿,审核后保存。"), (0, react.createElement)("textarea", {
7552
7575
  id: `run2skill-revision-${proposal.proposalId}`,
7553
7576
  value: revisionFeedback,
7554
7577
  rows: 3,
@@ -7605,7 +7628,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7605
7628
  }, "放弃草稿"))));
7606
7629
  }
7607
7630
  function RejectConfirmationBody(props) {
7608
- return (0, react.createElement)(react.Fragment, null, (0, react.createElement)("h3", { id: "run2skill-reject-title" }, "确认放弃这份技能草稿?"), (0, react.createElement)("p", { id: "run2skill-reject-description" }, "现有 Skill 不会改变;这份技能草稿将离开待处理队列;经过筛选的学习材料仍按项目规则保留。"), (0, react.createElement)("button", {
7631
+ return (0, react.createElement)(react.Fragment, null, (0, react.createElement)("h3", { id: "run2skill-reject-title" }, "确认放弃这份技能草稿?"), (0, react.createElement)("p", { id: "run2skill-reject-description" }, "移除这份待处理草稿,保留已有 Skill 和学习材料。"), (0, react.createElement)("button", {
7609
7632
  type: "button",
7610
7633
  "data-initial-focus": true,
7611
7634
  disabled: props.disabled,
@@ -7921,7 +7944,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7921
7944
  props.workspaceId,
7922
7945
  scopeIdentity
7923
7946
  ]);
7924
- return (0, react.createElement)("div", { className: _run2skill_css_run2skill_settings_page_module_css_default.sectionBody }, (0, react.createElement)("p", { className: _run2skill_css_run2skill_settings_page_module_css_default.muted }, "展示最近沉淀的 Skill"), visibleState.phase === "LOADING" ? (0, react.createElement)("p", { role: "status" }, "正在读取最近活动…") : null, visibleState.phase === "ERROR" ? (0, react.createElement)("p", { role: "alert" }, "最近活动暂不可用。") : null, visibleState.phase === "READY" && visibleState.items.length === 0 ? (0, react.createElement)("p", null, "最近 7 天没有成功沉淀的 Skill。") : null, visibleState.items.length === 0 ? null : (0, react.createElement)("ul", { className: _run2skill_css_run2skill_settings_page_module_css_default.activityList }, ...visibleState.items.map((item) => (0, react.createElement)("li", {
7947
+ return (0, react.createElement)("div", { className: _run2skill_css_run2skill_settings_page_module_css_default.sectionBody }, visibleState.phase === "LOADING" ? (0, react.createElement)("p", { role: "status" }, "正在读取最近活动…") : null, visibleState.phase === "ERROR" ? (0, react.createElement)("p", { role: "alert" }, "最近活动暂不可用。") : null, visibleState.phase === "READY" && visibleState.items.length === 0 ? (0, react.createElement)("p", null, "最近 7 天没有成功沉淀的 Skill。") : null, visibleState.items.length === 0 ? null : (0, react.createElement)("ul", { className: _run2skill_css_run2skill_settings_page_module_css_default.activityList }, ...visibleState.items.map((item) => (0, react.createElement)("li", {
7925
7948
  className: _run2skill_css_run2skill_settings_page_module_css_default.activityItem,
7926
7949
  key: item.activityId
7927
7950
  }, (0, react.createElement)("div", { className: _run2skill_css_run2skill_settings_page_module_css_default.activitySummary }, (0, react.createElement)("strong", null, item.skillName), (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Pill, null, item.operation === "CREATED" ? "新建技能" : "更新技能"), usefulActivityScope(visibleState.items, item) ? (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Pill, null, describePersistenceScope(item.scope)) : null), (0, react.createElement)("time", {
@@ -8003,6 +8026,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8003
8026
  GENERATION: "Skill 草稿生成"
8004
8027
  };
8005
8028
  function learningIssueDescription(item) {
8029
+ if (item.failureCode === "CATALOG_SCAN_TEMPORARY_FAILED") return {
8030
+ title: "已有 Skill 检索暂时失败",
8031
+ detail: item.retryable ? "模型服务暂时不可用。已完成的检测和检索结果已保留,可手动重试检索一次。" : "本次检索已停止。已完成的检测和失败信息已保留。"
8032
+ };
8006
8033
  if (item.failureCode === "BASELINE_INCOMPLETE") return {
8007
8034
  title: "自动沉淀已停止",
8008
8035
  detail: "缺少任务开始前的 Skill 状态记录,无法确认 Agent 是否已经保存过同类 Skill。为避免重复生成,本次已停止。已有 Skill 和原始会话记录不受影响。"
@@ -8127,7 +8154,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8127
8154
  return (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Toast, {
8128
8155
  key: toast.sequence,
8129
8156
  icon: (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutlineMedium),
8130
- text: `Run2Skill 有 ${String(toast.count)} 项需要处理,请前往设置 → 插件 → Run2Skill`,
8157
+ text: `Run2Skill 有 ${String(toast.count)} 项需要处理,请前往左侧栏 → 插件 → Run2Skill`,
8131
8158
  onDone: () => {
8132
8159
  setToast(void 0);
8133
8160
  }
@@ -8136,14 +8163,14 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8136
8163
  function AutomaticLearningSection(props) {
8137
8164
  const state = (0, react.useSyncExternalStore)(props.controller.subscribe, props.controller.getSnapshot, props.controller.getSnapshot);
8138
8165
  const disabled = state.status !== "ready" || !state.writable || state.saving;
8139
- return (0, react.createElement)("div", { className: _run2skill_css_run2skill_settings_page_module_css_default.sectionBody }, (0, react.createElement)("p", { className: _run2skill_css_run2skill_settings_page_module_css_default.muted }, "在后台识别可复用经验并生成待确认的技能草稿;关闭后,明确说“保存为 Skill”仍然有效。"), (0, react.createElement)("div", { className: _run2skill_css_run2skill_settings_page_module_css_default.actions }, (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
8166
+ return (0, react.createElement)("div", { className: _run2skill_css_run2skill_settings_page_module_css_default.sectionBody }, (0, react.createElement)("p", { className: _run2skill_css_run2skill_settings_page_module_css_default.muted }, "自动生成技能草稿;关闭后可手动请求保存。"), (0, react.createElement)("div", { className: _run2skill_css_run2skill_settings_page_module_css_default.actions }, (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
8140
8167
  variant: state.automaticLearning ? "primary" : "outline",
8141
8168
  "aria-pressed": state.automaticLearning === true,
8142
8169
  disabled,
8143
8170
  onClick: () => {
8144
8171
  props.controller.setAutomaticLearning(state.automaticLearning !== true);
8145
8172
  }
8146
- }, state.saving ? "正在保存…" : state.automaticLearning ? "自动学习已开启" : "自动学习已关闭"), (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Pill, null, "沿用当前会话模型")), state.error === void 0 ? null : (0, react.createElement)("p", {
8173
+ }, state.saving ? "正在保存…" : state.automaticLearning ? "自动学习已开启" : "自动学习已关闭")), state.error === void 0 ? null : (0, react.createElement)("p", {
8147
8174
  role: "status",
8148
8175
  className: _run2skill_css_run2skill_settings_page_module_css_default.danger
8149
8176
  }, "设置已变化,请刷新后重试。"));
@@ -8168,7 +8195,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8168
8195
  };
8169
8196
  const controller = (0, react.useMemo)(() => new ProposalInboxController(props.workspaceId ?? "__run2skill_user_only__", props.callReview, void 0, {
8170
8197
  attentionDriven: true,
8171
- scopeAccess: () => scopeAccessRef.current
8198
+ scopeAccess: () => scopeAccessRef.current,
8199
+ onPublicationFeedback: props.onPublicationFeedback
8172
8200
  }), [
8173
8201
  props.callReview,
8174
8202
  props.scopeGeneration,
@@ -8381,7 +8409,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8381
8409
  const description = isCoverageConfirmation ? {
8382
8410
  title: "发现可能重复的 Skill",
8383
8411
  detail: "Run2Skill 发现已有 Skill 可能已经包含这次经验,因此暂停生成新草稿。请选择下一步。"
8384
- } : learningIssueDescription(item);
8412
+ } : learningIssueDescription({
8413
+ ...item,
8414
+ retryable: item.retryable && action?.availableActions?.includes("RETRY") === true
8415
+ });
8385
8416
  return (0, react.createElement)("article", {
8386
8417
  className: _run2skill_css_run2skill_settings_page_module_css_default.detail,
8387
8418
  key: item.workItemId
@@ -8391,7 +8422,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8391
8422
  onClick: () => {
8392
8423
  mutate("learning/issues/retry", item);
8393
8424
  }
8394
- }, busy ? "正在处理…" : isCoverageConfirmation ? "继续生成新 Skill 草稿" : "重试学习") : null, action?.availableActions?.includes("DISMISS") === true ? (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
8425
+ }, busy ? "正在处理…" : isCoverageConfirmation ? "继续生成新 Skill 草稿" : item.failureCode === "CATALOG_SCAN_TEMPORARY_FAILED" ? "重试检索一次" : "重试学习") : null, action?.availableActions?.includes("DISMISS") === true ? (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
8395
8426
  variant: "outline",
8396
8427
  disabled: busy || pending !== void 0,
8397
8428
  onClick: (event) => {
@@ -8402,7 +8433,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8402
8433
  }), (0, react.createElement)(ManagedConfirmationModal, {
8403
8434
  open: dismiss !== void 0,
8404
8435
  title: dismiss?.failureCode === "COVERED_NEEDS_CONFIRMATION" ? "使用已有 Skill,不生成新草稿?" : "确认关闭此待处理事项?",
8405
- description: dismiss?.failureCode === "COVERED_NEEDS_CONFIRMATION" ? "确认后,此项将从待处理列表移除,Run2Skill 不会为这次经验生成新草稿;已有 Skill 和 DSH 原始会话记录不会改变。" : "关闭后,本次自动沉淀不会继续,也不会生成草稿;已有 Skill 和 DSH 的原始会话记录不会改变。",
8436
+ description: dismiss?.failureCode === "COVERED_NEEDS_CONFIRMATION" ? "移除此待处理项,继续使用已有 Skill。" : "结束本次整理,保留已有 Skill 和会话记录。",
8406
8437
  disabled: pending !== void 0,
8407
8438
  triggerRef: dismissTriggerRef,
8408
8439
  onClose: () => {
@@ -8420,7 +8451,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8420
8451
  return (0, react.createElement)(ManagedConfirmationModal, {
8421
8452
  ...props,
8422
8453
  title: "确认放弃这份技能草稿?",
8423
- description: "现有 Skill 不会改变;这份技能草稿将离开待处理队列。",
8454
+ description: "移除这份待处理草稿,保留已有 Skill。",
8424
8455
  confirmLabel: "确认放弃"
8425
8456
  });
8426
8457
  }
@@ -8592,7 +8623,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8592
8623
  }, warning.message ?? "存在尚未持久化的学习信号。"))));
8593
8624
  }
8594
8625
  function Run2skillSettingsPage(props) {
8595
- const liveSessionId = props.useSessions?.((state) => state.current);
8626
+ const liveSessionId = props.useSessions?.(selectedSessionId);
8596
8627
  const liveWorkspaceId = props.useWorkspaces?.((state) => state.items.find((workspace) => workspace.sessionIds?.includes(liveSessionId ?? ""))?.workspaceId);
8597
8628
  const workspaceId = props.useSessions === void 0 ? props.workspaceId : liveWorkspaceId;
8598
8629
  const sessionId = props.useSessions === void 0 ? props.sessionId : liveSessionId;
@@ -8601,8 +8632,27 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8601
8632
  const [attention, setAttention] = (0, react.useState)();
8602
8633
  const [attentionRefresh, setAttentionRefresh] = (0, react.useState)(0);
8603
8634
  const [scopeGeneration, setScopeGeneration] = (0, react.useState)(1);
8635
+ const [publicationFeedback, setPublicationFeedback] = (0, react.useState)();
8604
8636
  const purgeState = (0, react.useSyncExternalStore)(props.purgeController.subscribe, props.purgeController.snapshot, props.purgeController.snapshot);
8605
8637
  const purgeDataChanging = purgeState.mutationPending || purgeState.status?.state === "IN_PROGRESS" || purgeState.inProgressReceipt?.state === "IN_PROGRESS";
8638
+ const feedbackScopeIdentity = JSON.stringify([
8639
+ sessionId,
8640
+ workspaceId,
8641
+ scopeGeneration,
8642
+ purgeState.hostDataEpoch,
8643
+ purgeDataChanging
8644
+ ]);
8645
+ const feedbackScopeRef = (0, react.useRef)(feedbackScopeIdentity);
8646
+ feedbackScopeRef.current = feedbackScopeIdentity;
8647
+ const visibleFeedback = publicationFeedback?.scopeIdentity === feedbackScopeIdentity ? publicationFeedback.value : void 0;
8648
+ (0, react.useEffect)(() => {
8649
+ setPublicationFeedback(void 0);
8650
+ }, [
8651
+ sessionId,
8652
+ workspaceId,
8653
+ purgeState.hostDataEpoch,
8654
+ purgeDataChanging
8655
+ ]);
8606
8656
  (0, react.useEffect)(() => {
8607
8657
  setAttention(void 0);
8608
8658
  setScopeGeneration((value) => value + 1);
@@ -8633,7 +8683,17 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8633
8683
  ref: hostTab.ref,
8634
8684
  className: _run2skill_css_run2skill_settings_page_module_css_default.page,
8635
8685
  "data-run2skill-settings-page": true
8636
- }, (0, react.createElement)("p", { className: _run2skill_css_run2skill_settings_page_module_css_default.intro }, "Run2Skill 在后台自动沉淀经验;这里展示当前状态、需要处理的事项和持久设置。"), props.callLearningStatus === void 0 ? null : disclosure("status", "整理状态", (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconSparkleMedium), (0, react.createElement)(LearningStatusSection, {
8686
+ }, visibleFeedback === void 0 ? null : (0, react.createElement)("div", { className: _run2skill_css_run2skill_settings_page_module_css_default.publicationFeedback }, (0, react.createElement)("p", {
8687
+ role: "status",
8688
+ "aria-live": "polite",
8689
+ "aria-atomic": true
8690
+ }, visibleFeedback.publicationOutcome === "PUBLISHED" ? `已保存「${visibleFeedback.name}」· ${describePersistenceScope(visibleFeedback.persistenceScope)}` : describeProposalOutcome(visibleFeedback)), visibleFeedback.publicationOutcome === "PUBLISHED" ? (0, react.createElement)(react.Fragment, null, (0, react.createElement)("p", null, "下次相关任务时,Agent 可加载此 Skill。"), (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.Button, {
8691
+ variant: "outline",
8692
+ size: "sm",
8693
+ onClick: () => {
8694
+ setOpen((previous) => /* @__PURE__ */ new Set([...previous, "activity"]));
8695
+ }
8696
+ }, "查看最近活动")) : null), props.callLearningStatus === void 0 ? null : disclosure("status", "整理状态", (0, react.createElement)(_deepseek_ai_dsh_client_ui_primitives.IconSparkleMedium), (0, react.createElement)(LearningStatusSection, {
8637
8697
  key: JSON.stringify([
8638
8698
  sessionId ?? null,
8639
8699
  workspaceId ?? null,
@@ -8657,13 +8717,20 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8657
8717
  "REFRESH_PROPOSAL",
8658
8718
  "RETRY_PUBLICATION"
8659
8719
  ].includes(action.kind ?? "")) === true ? (0, react.createElement)(ProposalSettingsSection, {
8720
+ key: feedbackScopeIdentity,
8660
8721
  ...workspaceId === void 0 ? {} : { workspaceId },
8661
8722
  callReview: props.callReview,
8662
- active: hostTab.visible && open.has("attention"),
8723
+ active: hostTab.visible && open.has("attention") && !purgeDataChanging,
8663
8724
  actions: attention.actions,
8664
8725
  onMutationSettled: () => {
8665
8726
  setAttentionRefresh((value) => value + 1);
8666
8727
  },
8728
+ onPublicationFeedback: (value) => {
8729
+ if (feedbackScopeRef.current === feedbackScopeIdentity && !purgeDataChanging) setPublicationFeedback({
8730
+ scopeIdentity: feedbackScopeIdentity,
8731
+ value
8732
+ });
8733
+ },
8667
8734
  scopeGeneration
8668
8735
  }) : null, (0, react.createElement)(LearningFailureSection, {
8669
8736
  ...workspaceId === void 0 ? {} : { workspaceId },
@@ -8694,15 +8761,20 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8694
8761
  }
8695
8762
  }))));
8696
8763
  }
8764
+ function selectedSessionId(state) {
8765
+ const selected = Object.values(state.byId).filter((session) => (session.retainedBy.mainView ?? 0) > 0);
8766
+ return selected.length === 1 ? selected[0].id : void 0;
8767
+ }
8697
8768
  function currentSessionId(context) {
8698
- return context.sessions?.list.getSnapshot().current;
8769
+ const snapshot = context.sessions?.list.getSnapshot();
8770
+ return snapshot === void 0 ? void 0 : selectedSessionId(snapshot);
8699
8771
  }
8700
8772
  function workspaceFor(context, sessionId) {
8701
8773
  if (sessionId === void 0) return void 0;
8702
8774
  return context.workspaces.list.getSnapshot().items.find((workspace) => workspace.sessionIds?.includes(sessionId))?.workspaceId;
8703
8775
  }
8704
8776
  async function applyRun2skillClient(context) {
8705
- const mounted = await createRun2skillRemoteCaller(context.remote);
8777
+ const mounted = await createRun2skillRemoteCaller(context.remote, context);
8706
8778
  const controller = new AutomaticLearningSettingsController(context.configForms.get("run2skill"));
8707
8779
  const callReview = mounted.call;
8708
8780
  const callAttention = async (payload, signal) => await mounted.call("attention", payload, signal);
@@ -8717,12 +8789,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8717
8789
  purgeController.dispose();
8718
8790
  disposeStyle();
8719
8791
  };
8720
- }, "run2skill: native settings surface");
8721
- context.slots.inject("settings.plugins.tab", () => context.slots.register({
8722
- name: "settings.plugins.tab",
8723
- id: "run2skill",
8724
- order: 20,
8725
- label: "Run2Skill",
8792
+ }, "run2skill: native plugin detail surface");
8793
+ context.slots.inject("plugins.bundle.config", () => context.slots.register({
8794
+ name: "plugins.bundle.config",
8795
+ key: "dsh-run2skill",
8726
8796
  inject: () => ({
8727
8797
  controller,
8728
8798
  purgeController,
package/lib/index.d.ts CHANGED
@@ -1950,6 +1950,13 @@ declare const ExperienceIntentV2Schema: z.ZodObject<{
1950
1950
  recordedAt: z.ZodString;
1951
1951
  receiptDigest: z.ZodString;
1952
1952
  }, z.core.$strict>>;
1953
+ catalogRetry: z.ZodOptional<z.ZodObject<{
1954
+ authorizationRevision: z.ZodNumber;
1955
+ failedCallId: z.ZodString;
1956
+ actionIdentity: z.ZodString;
1957
+ scopeDigest: z.ZodString;
1958
+ recordedAt: z.ZodString;
1959
+ }, z.core.$strict>>;
1953
1960
  stageCalls: z.ZodArray<z.ZodObject<{
1954
1961
  stage: z.ZodEnum<{
1955
1962
  CATALOG_SCAN: "CATALOG_SCAN";
@@ -3970,6 +3977,13 @@ declare const run2skillV2DomainSpec: {
3970
3977
  recordedAt: import("zod").ZodString;
3971
3978
  receiptDigest: import("zod").ZodString;
3972
3979
  }, import("zod/v4/core").$strict>>;
3980
+ catalogRetry: import("zod").ZodOptional<import("zod").ZodObject<{
3981
+ authorizationRevision: import("zod").ZodNumber;
3982
+ failedCallId: import("zod").ZodString;
3983
+ actionIdentity: import("zod").ZodString;
3984
+ scopeDigest: import("zod").ZodString;
3985
+ recordedAt: import("zod").ZodString;
3986
+ }, import("zod/v4/core").$strict>>;
3973
3987
  stageCalls: import("zod").ZodArray<import("zod").ZodObject<{
3974
3988
  stage: import("zod").ZodEnum<{
3975
3989
  CATALOG_SCAN: "CATALOG_SCAN";