dsh-plugin-t-expert 0.3.39 → 0.3.40
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 +34 -5
- package/package.json +1 -1
package/lib/client.js
CHANGED
|
@@ -20018,7 +20018,7 @@ var scheduleWorkspaceSchema = external_exports.object({
|
|
|
20018
20018
|
|
|
20019
20019
|
// src/client.jsx
|
|
20020
20020
|
var NS = "t-team";
|
|
20021
|
-
var CLIENT_BUILD_VERSION = "0.3.
|
|
20021
|
+
var CLIENT_BUILD_VERSION = "0.3.40";
|
|
20022
20022
|
var uiPrefs = { showTaskBadge: true, showScheduleButton: true, showActivePulse: true };
|
|
20023
20023
|
var UI_PREF_KEYS = Object.keys(uiPrefs);
|
|
20024
20024
|
var uiPrefsListeners = /* @__PURE__ */ new Set();
|
|
@@ -22023,15 +22023,23 @@ function ActivePulse({ ctx, t }) {
|
|
|
22023
22023
|
const show = useShowActivePulse();
|
|
22024
22024
|
const sessions = useAttentionSessions(ctx);
|
|
22025
22025
|
const [anchor2, setAnchor] = import_react.default.useState(null);
|
|
22026
|
+
import_react.default.useEffect(() => subscribePopoverClaims((owner) => {
|
|
22027
|
+
if (owner !== "pulse") setAnchor(null);
|
|
22028
|
+
}), []);
|
|
22029
|
+
const close = () => {
|
|
22030
|
+
setAnchor(null);
|
|
22031
|
+
releasePopover("pulse");
|
|
22032
|
+
};
|
|
22026
22033
|
const attention = sessions.length > 0;
|
|
22027
22034
|
if (!show) return null;
|
|
22028
22035
|
const label = t(attention ? "pulse.on" : "pulse.off");
|
|
22029
22036
|
const toggle = (event) => {
|
|
22030
22037
|
if (anchor2 !== null) {
|
|
22031
|
-
|
|
22038
|
+
close();
|
|
22032
22039
|
return;
|
|
22033
22040
|
}
|
|
22034
22041
|
const rect = event.currentTarget.getBoundingClientRect();
|
|
22042
|
+
claimPopover("pulse");
|
|
22035
22043
|
setAnchor({ right: Math.max(8, window.innerWidth - rect.right - 24), top: Math.round(rect.bottom) + 6 });
|
|
22036
22044
|
};
|
|
22037
22045
|
return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(
|
|
@@ -22067,11 +22075,11 @@ function ActivePulse({ ctx, t }) {
|
|
|
22067
22075
|
t,
|
|
22068
22076
|
sessions,
|
|
22069
22077
|
anchor: anchor2,
|
|
22070
|
-
onClose:
|
|
22078
|
+
onClose: close,
|
|
22071
22079
|
onOpen: (id) => {
|
|
22072
22080
|
expandOwningWorkspaceGroup(ctx, id);
|
|
22073
22081
|
ctx?.sessions?.open?.(id);
|
|
22074
|
-
|
|
22082
|
+
close();
|
|
22075
22083
|
}
|
|
22076
22084
|
}
|
|
22077
22085
|
));
|
|
@@ -22848,6 +22856,21 @@ function useDockUi() {
|
|
|
22848
22856
|
() => dockUi
|
|
22849
22857
|
);
|
|
22850
22858
|
}
|
|
22859
|
+
var popoverClaim = { owner: "", listeners: /* @__PURE__ */ new Set() };
|
|
22860
|
+
function claimPopover(id) {
|
|
22861
|
+
if (popoverClaim.owner === id) return;
|
|
22862
|
+
popoverClaim.owner = id;
|
|
22863
|
+
for (const listener of [...popoverClaim.listeners]) listener(popoverClaim.owner);
|
|
22864
|
+
}
|
|
22865
|
+
function releasePopover(id) {
|
|
22866
|
+
if (popoverClaim.owner !== id) return;
|
|
22867
|
+
popoverClaim.owner = "";
|
|
22868
|
+
for (const listener of [...popoverClaim.listeners]) listener(popoverClaim.owner);
|
|
22869
|
+
}
|
|
22870
|
+
function subscribePopoverClaims(listener) {
|
|
22871
|
+
popoverClaim.listeners.add(listener);
|
|
22872
|
+
return () => popoverClaim.listeners.delete(listener);
|
|
22873
|
+
}
|
|
22851
22874
|
function jobDockPerfReset() {
|
|
22852
22875
|
try {
|
|
22853
22876
|
performance.clearMarks("t-team-jobs-open");
|
|
@@ -22871,6 +22894,9 @@ function JobsBadge({ t, ctx }) {
|
|
|
22871
22894
|
import_react.default.useEffect(() => {
|
|
22872
22895
|
if (!showBadge) setDockOpen(false);
|
|
22873
22896
|
}, [showBadge]);
|
|
22897
|
+
import_react.default.useEffect(() => subscribePopoverClaims((owner) => {
|
|
22898
|
+
if (owner !== "dock") setDockOpen(false);
|
|
22899
|
+
}), []);
|
|
22874
22900
|
if (!showBadge) return null;
|
|
22875
22901
|
if (rows.length === 0 && subagents.length === 0) return null;
|
|
22876
22902
|
const anyLive = liveCount > 0 || subagentsRunning > 0;
|
|
@@ -22890,7 +22916,10 @@ function JobsBadge({ t, ctx }) {
|
|
|
22890
22916
|
onClick: () => {
|
|
22891
22917
|
const next = !ui.open;
|
|
22892
22918
|
setDockOpen(next);
|
|
22893
|
-
if (next)
|
|
22919
|
+
if (next) {
|
|
22920
|
+
claimPopover("dock");
|
|
22921
|
+
jobDockPerfReset();
|
|
22922
|
+
}
|
|
22894
22923
|
try {
|
|
22895
22924
|
if (next) window.localStorage.removeItem(JOB_DOCK_CLOSED_KEY);
|
|
22896
22925
|
else window.localStorage.setItem(JOB_DOCK_CLOSED_KEY, "1");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-plugin-t-expert",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.40",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "T Expert — a 323-expert, 22-division roster with full Chinese translations, as a standalone DeepSeek Harness plugin, with a built-in multi-agent team engine (T Team).",
|
|
6
6
|
"license": "MIT",
|