@lemoncat7/dsh-partner 1.14.1 → 1.14.2
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/README.md +4 -0
- package/docs/releases/1.14.2.md +10 -0
- package/lib/client-controller.d.ts.map +1 -1
- package/lib/client-controller.js +3 -3
- package/lib/client-controller.js.map +1 -1
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +83 -41
- package/lib/client.js.map +4 -4
- package/lib/main-panel-compat.d.ts +5 -0
- package/lib/main-panel-compat.d.ts.map +1 -0
- package/lib/main-panel-compat.js +38 -0
- package/lib/main-panel-compat.js.map +1 -0
- package/lib/ui/identity-editor.js +1 -1
- package/lib/ui/identity-editor.js.map +1 -1
- package/package.json +15 -14
package/README.md
CHANGED
|
@@ -4,6 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
伙伴不是一次会话中的临时提示词。每个伙伴拥有独立身份、Agent Preset、模型路由、能力声明,以及按微信联系人隔离的 DSH Session。第一版以微信为主要渠道,使用腾讯微信 iLink Bot API,不模拟个人微信网页版协议。
|
|
6
6
|
|
|
7
|
+
## 1.14.2 更新:新版宿主适配与身份页统一
|
|
8
|
+
|
|
9
|
+
插件正式版,已在 DSH `0.1.5-rc.1` 验证新版主面板导航,保留旧版回退。身份页采用伙伴统一卡片与限定作用域的表单样式;不修改记忆、持续关注或工具授权。详见 [更新说明](docs/releases/1.14.2.md)。
|
|
10
|
+
|
|
7
11
|
## 1.13.0 更新:Skill 包导入与看板分工
|
|
8
12
|
|
|
9
13
|
正式版,适配 DSH **0.1.2-rc.1**,需要 Node.js **^22.19.0 或 >=24.0.0**。
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# 1.14.2
|
|
2
|
+
|
|
3
|
+
插件正式版,适配 DSH 0.1.5 主面板导航,保留旧版主面板回退。已在 DSH 0.1.5-rc.1 镜像验证;DSH 本身仍是 RC 版本。
|
|
4
|
+
|
|
5
|
+
- 伙伴工作区使用新版主面板注册与导航,卸载时同步工作区打开状态。
|
|
6
|
+
- 身份页补齐伙伴统一卡片材质,限定表单样式作用域,避免普通宿主主题规则覆盖输入框和按钮。
|
|
7
|
+
- 身份表单保留焦点反馈、保存状态与删除确认,窄屏字段可折行;不增加 WebGL 或大面积动态玻璃开销。
|
|
8
|
+
- 不修改伙伴身份内容、工具权限、记忆提炼、持续关注与通知规则,无新增数据迁移。
|
|
9
|
+
|
|
10
|
+
验证:346 项自动化测试通过;身份控件主题覆盖、焦点及工作区浏览器检查通过。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-controller.d.ts","sourceRoot":"","sources":["../src/client-controller.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAGnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;
|
|
1
|
+
{"version":3,"file":"client-controller.d.ts","sourceRoot":"","sources":["../src/client-controller.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAGnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAMpE,MAAM,WAAW,kBAAkB;IAAG,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE;AAC7F,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAA;IAClE,WAAW,IAAI,kBAAkB,GAAG,SAAS,CAAA;IAC7C,KAAK,IAAI,IAAI,CAAA;IACb,MAAM,IAAI,IAAI,CAAA;IACd,MAAM,IAAI,OAAO,CAAA;IACjB,QAAQ,IAAI,MAAM,GAAG,SAAS,CAAA;IAC9B,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9D,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChD,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5C,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;CAC5C;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,iBAAiB,KAAK,GAAG,CAAC,OAAO,GAAG,iBAAiB,CA2C5L"}
|
package/lib/client-controller.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { api } from './client-api.js';
|
|
2
|
+
import { registerMainPanel } from './main-panel-compat.js';
|
|
2
3
|
import { activatePluginWorkspace } from './workspace-ownership.js';
|
|
3
4
|
export function createPartnerController(ctx, pluginId, render) {
|
|
4
5
|
const listeners = new Set();
|
|
@@ -14,7 +15,7 @@ export function createPartnerController(ctx, pluginId, render) {
|
|
|
14
15
|
selected = companionId;
|
|
15
16
|
if (dispose === undefined) {
|
|
16
17
|
activatePluginWorkspace(pluginId);
|
|
17
|
-
dispose = ctx
|
|
18
|
+
dispose = registerMainPanel(ctx, pluginId, -3, props => render(props, controller), () => controller.close());
|
|
18
19
|
}
|
|
19
20
|
notify();
|
|
20
21
|
},
|
|
@@ -37,8 +38,7 @@ export function createPartnerController(ctx, pluginId, render) {
|
|
|
37
38
|
async startSession(companionId) {
|
|
38
39
|
const created = await api(`/companions/${encodeURIComponent(companionId)}/session`, { method: 'POST' });
|
|
39
40
|
await waitForClientSession(ctx, created.sessionId);
|
|
40
|
-
|
|
41
|
-
dispose = undefined;
|
|
41
|
+
controller.close();
|
|
42
42
|
sessions(ctx).open(created.sessionId);
|
|
43
43
|
},
|
|
44
44
|
async renewSession(routeId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-controller.js","sourceRoot":"","sources":["../src/client-controller.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAA;AAgBlE,MAAM,UAAU,uBAAuB,CAAC,GAAkB,EAAE,QAAgB,EAAE,MAA2F;IACvK,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAA;IACvC,IAAI,QAA4B,CAAA;IAChC,IAAI,WAA2C,CAAA;IAC/C,IAAI,OAAiC,CAAA;IACrC,MAAM,MAAM,GAAG,GAAS,EAAE,GAAG,KAAK,MAAM,QAAQ,IAAI,SAAS;QAAE,QAAQ,EAAE,CAAA,CAAC,CAAC,CAAA;IAC3E,MAAM,UAAU,GAAsB;QACpC,IAAI,CAAC,WAAW,EAAE,MAAM;YACtB,WAAW,GAAG,MAAM,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;YACxC,IAAI,WAAW,KAAK,SAAS;gBAAE,QAAQ,GAAG,WAAW,CAAA;YACrD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,uBAAuB,CAAC,QAAQ,CAAC,CAAA;gBACjC,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"client-controller.js","sourceRoot":"","sources":["../src/client-controller.tsx"],"names":[],"mappings":"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"}
|
package/lib/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAsDnE,eAAO,MAAM,MAAM,UAAkC,CAAA;AAErD,wBAAgB,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAS9C"}
|
package/lib/client.js
CHANGED
|
@@ -35,7 +35,7 @@ __export(client_exports, {
|
|
|
35
35
|
inject: () => inject
|
|
36
36
|
});
|
|
37
37
|
module.exports = __toCommonJS(client_exports);
|
|
38
|
-
var
|
|
38
|
+
var import_react40 = require("react");
|
|
39
39
|
|
|
40
40
|
// src/workspace-ownership.ts
|
|
41
41
|
var WORKSPACE_ACTIVATE_EVENT = "@lemoncat7/dsh-plugin-ui/workspace-activate";
|
|
@@ -8218,23 +8218,25 @@ function IdentityEditorForm({ companion, count, onChanged, onRemoved }) {
|
|
|
8218
8218
|
if (alive.current) setOperation(void 0);
|
|
8219
8219
|
}
|
|
8220
8220
|
};
|
|
8221
|
-
return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("form", { className: "dsh-partner-form is-identity", "aria-busy": operation !== void 0, onSubmit: (event) => {
|
|
8221
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("form", { id: "dsh-partner-identity-editor", className: "dsh-partner-form is-identity", "aria-busy": operation !== void 0, onSubmit: (event) => {
|
|
8222
8222
|
void submit(event);
|
|
8223
8223
|
}, children: [
|
|
8224
8224
|
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(SectionHeading, { eyebrow: "IDENTITY", title: "\u5DE5\u4F5C\u8EAB\u4EFD", detail: "\u5B83\u4E0D\u662F\u4E00\u6B21\u5BF9\u8BDD\u7684\u63D0\u793A\u8BCD\uFF0C\u800C\u662F\u8FD9\u4E2A\u4F19\u4F34\u5728\u684C\u9762\u548C\u5FAE\u4FE1\u4E2D\u7684\u957F\u671F\u884C\u4E3A\u57FA\u7EBF\u3002" }),
|
|
8225
|
-
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("
|
|
8226
|
-
/* @__PURE__ */ (0, import_jsx_runtime34.
|
|
8227
|
-
|
|
8228
|
-
|
|
8229
|
-
|
|
8230
|
-
|
|
8231
|
-
|
|
8232
|
-
|
|
8233
|
-
/* @__PURE__ */ (0, import_jsx_runtime34.
|
|
8234
|
-
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
8235
|
-
|
|
8236
|
-
|
|
8237
|
-
|
|
8225
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("section", { className: "dsh-partner-identity-card", "aria-label": "\u8EAB\u4EFD\u914D\u7F6E", children: [
|
|
8226
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "dsh-partner-fields two", children: [
|
|
8227
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(FormField, { label: "\u540D\u5B57", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("input", { disabled: busy, required: true, maxLength: 60, value: form.name, onChange: (event) => setForm({ ...form, name: event.target.value }) }) }),
|
|
8228
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(FormField, { label: "\u89D2\u8272", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("input", { disabled: busy, required: true, maxLength: 120, value: form.role, onChange: (event) => setForm({ ...form, role: event.target.value }) }) })
|
|
8229
|
+
] }),
|
|
8230
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(FormField, { label: "\u4E00\u53E5\u8BDD\u5B9A\u4F4D", hint: "\u7528\u4E8E\u540D\u518C\u8BC6\u522B\uFF0C\u4E0D\u4F1A\u66FF\u4EE3\u5B8C\u6574\u884C\u4E3A\u51C6\u5219\u3002", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("textarea", { disabled: busy, rows: 2, maxLength: 500, value: form.description, onChange: (event) => setForm({ ...form, description: event.target.value }) }) }),
|
|
8231
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(FormField, { label: "\u957F\u671F\u884C\u4E3A\u51C6\u5219", hint: "\u5EFA\u8BAE\u5199\u804C\u8D23\u3001\u8868\u8FBE\u65B9\u5F0F\u4E0E\u8FB9\u754C\uFF1B\u6E20\u9053\u3001\u5DE5\u5177\u548C\u6388\u6743\u7531\u7CFB\u7EDF\u5355\u72EC\u63A7\u5236\u3002", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("textarea", { disabled: busy, rows: 9, maxLength: 12e3, value: form.instructions, onChange: (event) => setForm({ ...form, instructions: event.target.value }) }) }),
|
|
8232
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("p", { className: "dsh-partner-inline-error", role: "alert", children: error }),
|
|
8233
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "dsh-partner-form-actions", children: [
|
|
8234
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { role: "status", children: saved && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_jsx_runtime34.Fragment, { children: [
|
|
8235
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_dsh_client_ui_primitives19.IconCheckOutline14, { size: 14 }),
|
|
8236
|
+
"\u5DF2\u4FDD\u5B58\uFF0C\u4E0B\u4E00\u8F6E\u5C06\u4F7F\u7528\u65B0\u8EAB\u4EFD"
|
|
8237
|
+
] }) }),
|
|
8238
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("button", { disabled: busy, children: operation === "save" ? "\u6B63\u5728\u4FDD\u5B58\u2026" : "\u4FDD\u5B58\u8EAB\u4EFD" })
|
|
8239
|
+
] })
|
|
8238
8240
|
] }),
|
|
8239
8241
|
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "dsh-partner-identity-danger", "data-confirming": confirming, children: [
|
|
8240
8242
|
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { children: [
|
|
@@ -8252,6 +8254,9 @@ function IdentityEditorForm({ companion, count, onChanged, onRemoved }) {
|
|
|
8252
8254
|
] });
|
|
8253
8255
|
}
|
|
8254
8256
|
|
|
8257
|
+
// src/ui/identity-editor.css
|
|
8258
|
+
var identity_editor_default = "/* Own the identity form skin without changing host forms or theme tokens. */\n#dsh-partner-identity-editor.dsh-partner-form {\n min-width: 0;\n padding: 0;\n border: 0;\n background: transparent;\n box-shadow: none;\n color: var(--partner-text);\n font-family: var(--partner-font-family);\n}\n#dsh-partner-identity-editor .dsh-partner-identity-card {\n min-width: 0;\n padding: 20px;\n border: 1px solid var(--partner-border);\n border-radius: 15px;\n background: var(--partner-card-surface);\n box-shadow: var(--partner-card-shadow);\n}\n#dsh-partner-identity-editor .dsh-partner-field > span { flex-wrap: wrap; gap: 4px 12px; }\n#dsh-partner-identity-editor .dsh-partner-field small { text-align: start; }\n#dsh-partner-identity-editor .dsh-partner-field :is(input, textarea) {\n appearance: none;\n box-sizing: border-box;\n width: 100%;\n min-height: 40px;\n padding: 10px 12px;\n border: 1px solid var(--partner-border);\n border-radius: 10px;\n outline: none;\n color: var(--partner-text);\n background: var(--partner-control);\n font: var(--partner-font-label)/1.5 var(--partner-font-family);\n box-shadow: inset 0 1px 0 var(--partner-glass-highlight);\n}\n#dsh-partner-identity-editor .dsh-partner-field textarea { resize: vertical; }\n#dsh-partner-identity-editor .dsh-partner-field :is(input, textarea):focus {\n border-color: var(--partner-focus-ring);\n background: var(--partner-raised);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--partner-focus-ring) 18%, transparent);\n}\n#dsh-partner-identity-editor .dsh-partner-form-actions { flex-wrap: wrap; gap: 12px; }\n#dsh-partner-identity-editor .dsh-partner-form-actions > button {\n min-height: 40px;\n padding: 0 16px;\n border: 1px solid var(--partner-border);\n border-radius: 10px;\n color: var(--partner-on-accent);\n background: var(--partner-accent-strong);\n box-shadow: none;\n font: 600 var(--partner-font-body)/1.4 var(--partner-font-family);\n}\n#dsh-partner-identity-editor .dsh-partner-form-actions > button:hover:not(:disabled) { filter: brightness(.94); }\n#dsh-partner-identity-editor .dsh-partner-identity-danger { flex-wrap: wrap; }\n#dsh-partner-identity-editor .dsh-partner-identity-danger > span { flex: 1 1 250px; }\n#dsh-partner-identity-editor .dsh-partner-identity-danger > div { display: flex; flex-wrap: wrap; gap: 8px; }\n#dsh-partner-identity-editor .dsh-partner-identity-danger button {\n min-height: 36px;\n padding: 6px 12px;\n border: 1px solid color-mix(in srgb, var(--partner-danger) 24%, transparent);\n border-radius: 8px;\n color: var(--partner-danger);\n background: transparent;\n box-shadow: none;\n font: var(--partner-font-caption)/1.4 var(--partner-font-family);\n}\n#dsh-partner-identity-editor button:focus-visible { outline: 2px solid var(--partner-focus-ring); outline-offset: 3px; }\n#dsh-partner-identity-editor :is(input, textarea, button):disabled { opacity: .55; cursor: default; }\n@media (max-width: 640px) {\n #dsh-partner-identity-editor .dsh-partner-identity-card { padding: 14px; }\n #dsh-partner-identity-editor .dsh-partner-fields.two { grid-template-columns: minmax(0, 1fr); }\n}\n@media (forced-colors: active) {\n #dsh-partner-identity-editor .dsh-partner-field :is(input, textarea):focus { outline: 2px solid Highlight; }\n}\n";
|
|
8259
|
+
|
|
8255
8260
|
// src/ui/companion-create.tsx
|
|
8256
8261
|
var import_react38 = require("react");
|
|
8257
8262
|
var import_dsh_client_ui_primitives20 = require("@deepseek-ai/dsh-client-ui-primitives");
|
|
@@ -8307,6 +8312,43 @@ function CompanionCreateDialog({ close, create }) {
|
|
|
8307
8312
|
] }) });
|
|
8308
8313
|
}
|
|
8309
8314
|
|
|
8315
|
+
// src/main-panel-compat.ts
|
|
8316
|
+
var import_react39 = require("react");
|
|
8317
|
+
function registerMainPanel(ctx, id, priority, render, onHidden = () => {
|
|
8318
|
+
}) {
|
|
8319
|
+
const layout = ctx.layout;
|
|
8320
|
+
if (typeof layout.selectPanel !== "function") {
|
|
8321
|
+
return ctx.slots.register({ name: "conversation", priority }, render);
|
|
8322
|
+
}
|
|
8323
|
+
const slots = ctx.slots;
|
|
8324
|
+
let disposed = false;
|
|
8325
|
+
let generation = 0;
|
|
8326
|
+
const Body = (props) => {
|
|
8327
|
+
(0, import_react39.useEffect)(() => {
|
|
8328
|
+
const current2 = ++generation;
|
|
8329
|
+
return () => {
|
|
8330
|
+
queueMicrotask(() => {
|
|
8331
|
+
if (!disposed && generation === current2) onHidden();
|
|
8332
|
+
});
|
|
8333
|
+
};
|
|
8334
|
+
}, []);
|
|
8335
|
+
return render(props);
|
|
8336
|
+
};
|
|
8337
|
+
const remove = slots.register({ name: "main", key: id }, Body);
|
|
8338
|
+
const dispose = () => {
|
|
8339
|
+
if (disposed) return;
|
|
8340
|
+
disposed = true;
|
|
8341
|
+
remove();
|
|
8342
|
+
};
|
|
8343
|
+
try {
|
|
8344
|
+
layout.selectPanel(id);
|
|
8345
|
+
} catch (error) {
|
|
8346
|
+
dispose();
|
|
8347
|
+
throw error;
|
|
8348
|
+
}
|
|
8349
|
+
return dispose;
|
|
8350
|
+
}
|
|
8351
|
+
|
|
8310
8352
|
// src/client-controller.tsx
|
|
8311
8353
|
function createPartnerController(ctx, pluginId, render) {
|
|
8312
8354
|
const listeners2 = /* @__PURE__ */ new Set();
|
|
@@ -8322,7 +8364,7 @@ function createPartnerController(ctx, pluginId, render) {
|
|
|
8322
8364
|
if (companionId !== void 0) selected = companionId;
|
|
8323
8365
|
if (dispose === void 0) {
|
|
8324
8366
|
activatePluginWorkspace(pluginId);
|
|
8325
|
-
dispose = ctx
|
|
8367
|
+
dispose = registerMainPanel(ctx, pluginId, -3, (props) => render(props, controller), () => controller.close());
|
|
8326
8368
|
}
|
|
8327
8369
|
notify();
|
|
8328
8370
|
},
|
|
@@ -8349,8 +8391,7 @@ function createPartnerController(ctx, pluginId, render) {
|
|
|
8349
8391
|
async startSession(companionId) {
|
|
8350
8392
|
const created = await api(`/companions/${encodeURIComponent(companionId)}/session`, { method: "POST" });
|
|
8351
8393
|
await waitForClientSession(ctx, created.sessionId);
|
|
8352
|
-
|
|
8353
|
-
dispose = void 0;
|
|
8394
|
+
controller.close();
|
|
8354
8395
|
sessions(ctx).open(created.sessionId);
|
|
8355
8396
|
},
|
|
8356
8397
|
async renewSession(routeId) {
|
|
@@ -8400,7 +8441,8 @@ ${responsive_ui_default}
|
|
|
8400
8441
|
${requirement_board_default}
|
|
8401
8442
|
${widget_default}
|
|
8402
8443
|
${settings_panel_default}
|
|
8403
|
-
${memory_ui_default}
|
|
8444
|
+
${memory_ui_default}
|
|
8445
|
+
${identity_editor_default}`;
|
|
8404
8446
|
var WORKSPACE_PAGES = /* @__PURE__ */ new Set(["skills", "board", "schedules", "pendant"]);
|
|
8405
8447
|
var inject = ["slots", "layout", "sessions"];
|
|
8406
8448
|
function apply(ctx) {
|
|
@@ -8416,13 +8458,13 @@ function apply(ctx) {
|
|
|
8416
8458
|
}, (props) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(PartnerSidebar, { ...props, controller, collapse: () => ctx.layout.toggleSidebar() })));
|
|
8417
8459
|
}
|
|
8418
8460
|
function PartnerSidebar(props) {
|
|
8419
|
-
const ref = (0,
|
|
8461
|
+
const ref = (0, import_react40.useRef)(null);
|
|
8420
8462
|
useWorkspaceTopAnchor(ref);
|
|
8421
|
-
const [open, setOpen] = (0,
|
|
8422
|
-
const [snapshot, setSnapshot] = (0,
|
|
8423
|
-
const [, update] = (0,
|
|
8424
|
-
(0,
|
|
8425
|
-
(0,
|
|
8463
|
+
const [open, setOpen] = (0, import_react40.useState)(true);
|
|
8464
|
+
const [snapshot, setSnapshot] = (0, import_react40.useState)();
|
|
8465
|
+
const [, update] = (0, import_react40.useState)(0);
|
|
8466
|
+
(0, import_react40.useEffect)(() => props.controller.subscribe(() => update((value) => value + 1)), [props.controller]);
|
|
8467
|
+
(0, import_react40.useEffect)(() => {
|
|
8426
8468
|
void loadPartner().then(setSnapshot).catch(() => {
|
|
8427
8469
|
});
|
|
8428
8470
|
}, [props.controller.isOpen()]);
|
|
@@ -8447,17 +8489,17 @@ function PartnerSidebar(props) {
|
|
|
8447
8489
|
] });
|
|
8448
8490
|
}
|
|
8449
8491
|
function PartnerWorkspace({ controller }) {
|
|
8450
|
-
const [snapshot, setSnapshot] = (0,
|
|
8451
|
-
const [selectedId, setSelectedId] = (0,
|
|
8452
|
-
const [view, setView] = (0,
|
|
8453
|
-
const [requestedDestination, setRequestedDestination] = (0,
|
|
8454
|
-
const [error, setError] = (0,
|
|
8455
|
-
const [loading, setLoading] = (0,
|
|
8456
|
-
const [creatingCompanion, setCreatingCompanion] = (0,
|
|
8457
|
-
const [notice, setNotice] = (0,
|
|
8458
|
-
const selectionRef = (0,
|
|
8492
|
+
const [snapshot, setSnapshot] = (0, import_react40.useState)();
|
|
8493
|
+
const [selectedId, setSelectedId] = (0, import_react40.useState)(controller.selected());
|
|
8494
|
+
const [view, setView] = (0, import_react40.useState)(controller.destination()?.page ?? "home");
|
|
8495
|
+
const [requestedDestination, setRequestedDestination] = (0, import_react40.useState)(controller.destination());
|
|
8496
|
+
const [error, setError] = (0, import_react40.useState)();
|
|
8497
|
+
const [loading, setLoading] = (0, import_react40.useState)(true);
|
|
8498
|
+
const [creatingCompanion, setCreatingCompanion] = (0, import_react40.useState)(false);
|
|
8499
|
+
const [notice, setNotice] = (0, import_react40.useState)();
|
|
8500
|
+
const selectionRef = (0, import_react40.useRef)({ selectedId, companions: snapshot?.companions });
|
|
8459
8501
|
selectionRef.current = { selectedId, companions: snapshot?.companions };
|
|
8460
|
-
const refresh = (0,
|
|
8502
|
+
const refresh = (0, import_react40.useCallback)(async (throwOnError = false) => {
|
|
8461
8503
|
try {
|
|
8462
8504
|
const next = await loadPartner();
|
|
8463
8505
|
setSnapshot(next);
|
|
@@ -8470,10 +8512,10 @@ function PartnerWorkspace({ controller }) {
|
|
|
8470
8512
|
setLoading(false);
|
|
8471
8513
|
}
|
|
8472
8514
|
}, []);
|
|
8473
|
-
(0,
|
|
8515
|
+
(0, import_react40.useEffect)(() => {
|
|
8474
8516
|
void refresh();
|
|
8475
8517
|
}, [refresh]);
|
|
8476
|
-
(0,
|
|
8518
|
+
(0, import_react40.useEffect)(() => controller.subscribe(() => {
|
|
8477
8519
|
const next = controller.selected();
|
|
8478
8520
|
if (next) setSelectedId(next);
|
|
8479
8521
|
const destination = controller.destination();
|
|
@@ -8754,10 +8796,10 @@ function HomePanel({ companion, snapshot, navigate, openSession, startSession, r
|
|
|
8754
8796
|
}
|
|
8755
8797
|
function WeixinPanel({ companion, snapshot, onChanged }) {
|
|
8756
8798
|
const channel = snapshot.channels.find((item) => item.companionId === companion.id);
|
|
8757
|
-
const [login, setLogin] = (0,
|
|
8758
|
-
const [busy, setBusy] = (0,
|
|
8759
|
-
const [error, setError] = (0,
|
|
8760
|
-
(0,
|
|
8799
|
+
const [login, setLogin] = (0, import_react40.useState)();
|
|
8800
|
+
const [busy, setBusy] = (0, import_react40.useState)(false);
|
|
8801
|
+
const [error, setError] = (0, import_react40.useState)();
|
|
8802
|
+
(0, import_react40.useEffect)(() => {
|
|
8761
8803
|
if (!login || login.phase === "confirmed" || login.phase === "expired" || login.phase === "error") return;
|
|
8762
8804
|
const timer = window.setInterval(() => {
|
|
8763
8805
|
void api(`/weixin/login/${login.id}`).then(async (result) => {
|