botmux 3.12.0 → 3.12.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.
- package/dist/.runtime-build-id +1 -1
- package/dist/adapters/backend/riff-backend.d.ts +18 -0
- package/dist/adapters/backend/riff-backend.d.ts.map +1 -1
- package/dist/adapters/backend/riff-backend.js +143 -0
- package/dist/adapters/backend/riff-backend.js.map +1 -1
- package/dist/adapters/cli/kimi.d.ts.map +1 -1
- package/dist/adapters/cli/kimi.js +22 -8
- package/dist/adapters/cli/kimi.js.map +1 -1
- package/dist/adapters/cli/pi.d.ts.map +1 -1
- package/dist/adapters/cli/pi.js +3 -1
- package/dist/adapters/cli/pi.js.map +1 -1
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +4 -1
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +65 -27
- package/dist/cli.js.map +1 -1
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +16 -2
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/dashboard-ipc-server.js +1 -1
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/dashboard-rows.d.ts +17 -1
- package/dist/core/dashboard-rows.d.ts.map +1 -1
- package/dist/core/dashboard-rows.js +13 -1
- package/dist/core/dashboard-rows.js.map +1 -1
- package/dist/core/maintenance.d.ts.map +1 -1
- package/dist/core/maintenance.js +5 -0
- package/dist/core/maintenance.js.map +1 -1
- package/dist/core/skills/cli-admin-command.d.ts.map +1 -1
- package/dist/core/skills/cli-admin-command.js +142 -3
- package/dist/core/skills/cli-admin-command.js.map +1 -1
- package/dist/core/skills/frontmatter.d.ts.map +1 -1
- package/dist/core/skills/frontmatter.js +44 -7
- package/dist/core/skills/frontmatter.js.map +1 -1
- package/dist/core/skills/im-command.d.ts +6 -0
- package/dist/core/skills/im-command.d.ts.map +1 -1
- package/dist/core/skills/im-command.js +34 -7
- package/dist/core/skills/im-command.js.map +1 -1
- package/dist/core/skills/install-command.d.ts +4 -0
- package/dist/core/skills/install-command.d.ts.map +1 -0
- package/dist/core/skills/install-command.js +89 -0
- package/dist/core/skills/install-command.js.map +1 -0
- package/dist/core/skills/package.d.ts.map +1 -1
- package/dist/core/skills/package.js +10 -3
- package/dist/core/skills/package.js.map +1 -1
- package/dist/core/skills/policy.d.ts +5 -1
- package/dist/core/skills/policy.d.ts.map +1 -1
- package/dist/core/skills/policy.js +66 -3
- package/dist/core/skills/policy.js.map +1 -1
- package/dist/core/skills/references.d.ts +9 -1
- package/dist/core/skills/references.d.ts.map +1 -1
- package/dist/core/skills/references.js +35 -2
- package/dist/core/skills/references.js.map +1 -1
- package/dist/core/skills/registry-paths.d.ts +1 -0
- package/dist/core/skills/registry-paths.d.ts.map +1 -1
- package/dist/core/skills/registry-paths.js +3 -0
- package/dist/core/skills/registry-paths.js.map +1 -1
- package/dist/core/skills/session-resolver.d.ts +2 -1
- package/dist/core/skills/session-resolver.d.ts.map +1 -1
- package/dist/core/skills/session-resolver.js +1 -0
- package/dist/core/skills/session-resolver.js.map +1 -1
- package/dist/core/skills/session-runtime.d.ts.map +1 -1
- package/dist/core/skills/session-runtime.js +2 -0
- package/dist/core/skills/session-runtime.js.map +1 -1
- package/dist/core/skills/sources.d.ts +23 -0
- package/dist/core/skills/sources.d.ts.map +1 -1
- package/dist/core/skills/sources.js +128 -12
- package/dist/core/skills/sources.js.map +1 -1
- package/dist/core/skills/types.d.ts +22 -1
- package/dist/core/skills/types.d.ts.map +1 -1
- package/dist/core/types.d.ts +2 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +52 -1
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/dashboard/bot-onboarding.d.ts.map +1 -1
- package/dist/dashboard/bot-onboarding.js +2 -114
- package/dist/dashboard/bot-onboarding.js.map +1 -1
- package/dist/dashboard/connector-api.d.ts.map +1 -1
- package/dist/dashboard/connector-api.js +66 -6
- package/dist/dashboard/connector-api.js.map +1 -1
- package/dist/dashboard/public-redact.d.ts.map +1 -1
- package/dist/dashboard/public-redact.js +3 -0
- package/dist/dashboard/public-redact.js.map +1 -1
- package/dist/dashboard/skill-install-request.js +10 -11
- package/dist/dashboard/skill-install-request.js.map +1 -1
- package/dist/dashboard/skill-pack-response.d.ts +15 -0
- package/dist/dashboard/skill-pack-response.d.ts.map +1 -0
- package/dist/dashboard/skill-pack-response.js +32 -0
- package/dist/dashboard/skill-pack-response.js.map +1 -0
- package/dist/dashboard/web/connectors-page.d.ts +69 -0
- package/dist/dashboard/web/connectors-page.d.ts.map +1 -1
- package/dist/dashboard/web/connectors-page.js +47 -7
- package/dist/dashboard/web/connectors-page.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +301 -26
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/preferences.d.ts +4 -2
- package/dist/dashboard/web/preferences.d.ts.map +1 -1
- package/dist/dashboard/web/preferences.js +14 -6
- package/dist/dashboard/web/preferences.js.map +1 -1
- package/dist/dashboard/web/sessions-page.d.ts.map +1 -1
- package/dist/dashboard/web/sessions-page.js +99 -3
- package/dist/dashboard/web/sessions-page.js.map +1 -1
- package/dist/dashboard/web/sessions.d.ts +3 -1
- package/dist/dashboard/web/sessions.d.ts.map +1 -1
- package/dist/dashboard/web/sessions.js +13 -6
- package/dist/dashboard/web/sessions.js.map +1 -1
- package/dist/dashboard/web/skills/bot-assignments-tab.d.ts +27 -0
- package/dist/dashboard/web/skills/bot-assignments-tab.d.ts.map +1 -0
- package/dist/dashboard/web/skills/bot-assignments-tab.js +257 -0
- package/dist/dashboard/web/skills/bot-assignments-tab.js.map +1 -0
- package/dist/dashboard/web/skills/delivery-settings-tab.d.ts +25 -0
- package/dist/dashboard/web/skills/delivery-settings-tab.d.ts.map +1 -0
- package/dist/dashboard/web/skills/delivery-settings-tab.js +20 -0
- package/dist/dashboard/web/skills/delivery-settings-tab.js.map +1 -0
- package/dist/dashboard/web/skills/shared.d.ts +86 -0
- package/dist/dashboard/web/skills/shared.d.ts.map +1 -0
- package/dist/dashboard/web/skills/shared.js +178 -0
- package/dist/dashboard/web/skills/shared.js.map +1 -0
- package/dist/dashboard/web/skills/skill-library-tab.d.ts +75 -0
- package/dist/dashboard/web/skills/skill-library-tab.d.ts.map +1 -0
- package/dist/dashboard/web/skills/skill-library-tab.js +108 -0
- package/dist/dashboard/web/skills/skill-library-tab.js.map +1 -0
- package/dist/dashboard/web/skills/skill-packs-tab.d.ts +21 -0
- package/dist/dashboard/web/skills/skill-packs-tab.d.ts.map +1 -0
- package/dist/dashboard/web/skills/skill-packs-tab.js +185 -0
- package/dist/dashboard/web/skills/skill-packs-tab.js.map +1 -0
- package/dist/dashboard/web/skills/types.d.ts +95 -0
- package/dist/dashboard/web/skills/types.d.ts.map +1 -0
- package/dist/dashboard/web/skills/types.js +2 -0
- package/dist/dashboard/web/skills/types.js.map +1 -0
- package/dist/dashboard/web/skills/use-skills-data.d.ts +31 -0
- package/dist/dashboard/web/skills/use-skills-data.d.ts.map +1 -0
- package/dist/dashboard/web/skills/use-skills-data.js +86 -0
- package/dist/dashboard/web/skills/use-skills-data.js.map +1 -0
- package/dist/dashboard/web/skills-page.d.ts +34 -31
- package/dist/dashboard/web/skills-page.d.ts.map +1 -1
- package/dist/dashboard/web/skills-page.js +321 -176
- package/dist/dashboard/web/skills-page.js.map +1 -1
- package/dist/dashboard/webhook-routes.d.ts +18 -0
- package/dist/dashboard/webhook-routes.d.ts.map +1 -1
- package/dist/dashboard/webhook-routes.js +35 -1
- package/dist/dashboard/webhook-routes.js.map +1 -1
- package/dist/dashboard-web/app.js +1 -1
- package/dist/dashboard-web/chunks/{bot-defaults-page-USC6EZXP.js → bot-defaults-page-HL655CNR.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-KOPISPHN.js → chunk-5PAYQ3KT.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-RXRJB5SO.js → chunk-5ZL7NLR5.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-A7VC4BXR.js → chunk-BFUTTYVK.js} +1 -1
- package/dist/dashboard-web/chunks/chunk-ELL53D62.js +55 -0
- package/dist/dashboard-web/chunks/connectors-page-3QQACF23.js +1 -0
- package/dist/dashboard-web/chunks/{groups-page-C6NSDTIN.js → groups-page-SDZMJ7UV.js} +1 -1
- package/dist/dashboard-web/chunks/{insights-page-UTOVYLLY.js → insights-page-ZZ3JEJ6L.js} +1 -1
- package/dist/dashboard-web/chunks/{monitor-room-UKTJYTA2.js → monitor-room-ROJ5GZ4N.js} +1 -1
- package/dist/dashboard-web/chunks/{monitoring-page-Q3CEZIVX.js → monitoring-page-IATV7KJF.js} +1 -1
- package/dist/dashboard-web/chunks/{office-page-GYCZOOVJ.js → office-page-TYO5OIIT.js} +1 -1
- package/dist/dashboard-web/chunks/{overview-page-W2VBJ6OH.js → overview-page-VJUULZF2.js} +1 -1
- package/dist/dashboard-web/chunks/{roles-page-U4SHER4K.js → roles-page-7RJJKZGK.js} +1 -1
- package/dist/dashboard-web/chunks/{schedules-page-TNPW3N3Q.js → schedules-page-JTEJ5IXW.js} +1 -1
- package/dist/dashboard-web/chunks/sessions-page-KD7HDT3U.js +8 -0
- package/dist/dashboard-web/chunks/{settings-page-VKW5ZK5K.js → settings-page-7CTTFBRS.js} +1 -1
- package/dist/dashboard-web/chunks/skills-page-57NZECJ3.js +4 -0
- package/dist/dashboard-web/chunks/{team-federation-page-OMFGGBT2.js → team-federation-page-6YYIMJG3.js} +1 -1
- package/dist/dashboard-web/chunks/{v3-page-PLXWK4KO.js → v3-page-ZGKBSBK3.js} +1 -1
- package/dist/dashboard-web/chunks/{whiteboards-page-NJQOEO2P.js → whiteboards-page-AACJF6DB.js} +1 -1
- package/dist/dashboard-web/style.css +1623 -160
- package/dist/dashboard.js +200 -16
- package/dist/dashboard.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +2 -0
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +2 -0
- package/dist/i18n/zh.js.map +1 -1
- package/dist/index-daemon.js +6 -1
- package/dist/index-daemon.js.map +1 -1
- package/dist/services/connector-store.d.ts +14 -1
- package/dist/services/connector-store.d.ts.map +1 -1
- package/dist/services/connector-store.js.map +1 -1
- package/dist/services/connector-topic-template.d.ts +7 -0
- package/dist/services/connector-topic-template.d.ts.map +1 -0
- package/dist/services/connector-topic-template.js +210 -0
- package/dist/services/connector-topic-template.js.map +1 -0
- package/dist/services/project-scanner.d.ts +33 -0
- package/dist/services/project-scanner.d.ts.map +1 -1
- package/dist/services/project-scanner.js +40 -1
- package/dist/services/project-scanner.js.map +1 -1
- package/dist/services/skill-pack-store.d.ts +50 -0
- package/dist/services/skill-pack-store.d.ts.map +1 -0
- package/dist/services/skill-pack-store.js +270 -0
- package/dist/services/skill-pack-store.js.map +1 -0
- package/dist/services/skill-registry-store.d.ts +8 -0
- package/dist/services/skill-registry-store.d.ts.map +1 -1
- package/dist/services/skill-registry-store.js +100 -68
- package/dist/services/skill-registry-store.js.map +1 -1
- package/dist/services/todo-state.d.ts +74 -0
- package/dist/services/todo-state.d.ts.map +1 -0
- package/dist/services/todo-state.js +351 -0
- package/dist/services/todo-state.js.map +1 -0
- package/dist/setup/agent-preset.d.ts.map +1 -1
- package/dist/setup/agent-preset.js +2 -0
- package/dist/setup/agent-preset.js.map +1 -1
- package/dist/setup/owner-identity.d.ts +47 -0
- package/dist/setup/owner-identity.d.ts.map +1 -0
- package/dist/setup/owner-identity.js +196 -0
- package/dist/setup/owner-identity.js.map +1 -0
- package/dist/setup/register-app.d.ts +4 -3
- package/dist/setup/register-app.d.ts.map +1 -1
- package/dist/setup/register-app.js.map +1 -1
- package/dist/setup/setup-args.d.ts +1 -1
- package/dist/setup/setup-args.d.ts.map +1 -1
- package/dist/setup/setup-args.js +7 -3
- package/dist/setup/setup-args.js.map +1 -1
- package/dist/types.d.ts +11 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/child-env.d.ts +25 -0
- package/dist/utils/child-env.d.ts.map +1 -1
- package/dist/utils/child-env.js +47 -0
- package/dist/utils/child-env.js.map +1 -1
- package/dist/worker.js +55 -16
- package/dist/worker.js.map +1 -1
- package/dist/workflows/definition.d.ts +44 -44
- package/package.json +1 -1
- package/dist/dashboard-web/chunks/chunk-M6BHWQFO.js +0 -51
- package/dist/dashboard-web/chunks/connectors-page-4Z76HWRH.js +0 -1
- package/dist/dashboard-web/chunks/sessions-page-YWWDDV57.js +0 -6
- package/dist/dashboard-web/chunks/skills-page-ZCEDFGZZ.js +0 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions-page.d.ts","sourceRoot":"","sources":["../../../src/dashboard/web/sessions-page.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA0B/B,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA2FrE,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"sessions-page.d.ts","sourceRoot":"","sources":["../../../src/dashboard/web/sessions-page.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA0B/B,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA2FrE,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AA4d9E,wBAAgB,cAAc,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;CAAE,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAyErI;AAw3BD,KAAK,oBAAoB,GAAG;IAC1B,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC;IAC5B,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IAC1C,MAAM,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IAClC,SAAS,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,SAAS,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjE,MAAM,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC/E,OAAO,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAChE,CAAC;AASF,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA2E9E;AAmkED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,YAAY,CAElE"}
|
|
@@ -46,6 +46,102 @@ function StatusBadge(props) {
|
|
|
46
46
|
const raw = String(props.status ?? 'unknown');
|
|
47
47
|
return _jsx("span", { className: `status status-${cssToken(raw)}`, children: sessionStatusText(raw) });
|
|
48
48
|
}
|
|
49
|
+
/** 任务态徽标:机器可能空闲,但 transcript 里还有未完成的 TODO。挂在卡片上让人
|
|
50
|
+
* 一眼看出「为什么这张卡在待办列」——运行态(空闲)与任务态(未完成 TODO)正交,
|
|
51
|
+
* 单看运行态徽标解释不了列归属。openTodos 缺失或已全部完成时不渲染。 */
|
|
52
|
+
function TodoBadge(props) {
|
|
53
|
+
const todos = props.row?.openTodos;
|
|
54
|
+
// 两种打开态:hover=悬浮预览(移开即关);pinned=点击固定(不自动消失,可选中复制)。
|
|
55
|
+
const [pos, setPos] = useState(null);
|
|
56
|
+
const [pinned, setPinned] = useState(false);
|
|
57
|
+
const [copied, setCopied] = useState(false);
|
|
58
|
+
const anchorRef = useRef(null);
|
|
59
|
+
const popRef = useRef(null);
|
|
60
|
+
// 固定态下:点浮层与徽标之外关闭;Esc 关闭。
|
|
61
|
+
useEffect(() => {
|
|
62
|
+
if (!pinned)
|
|
63
|
+
return;
|
|
64
|
+
const onDown = (e) => {
|
|
65
|
+
const tgt = e.target;
|
|
66
|
+
if (popRef.current?.contains(tgt) || anchorRef.current?.contains(tgt))
|
|
67
|
+
return;
|
|
68
|
+
setPinned(false);
|
|
69
|
+
setPos(null);
|
|
70
|
+
};
|
|
71
|
+
const onKey = (e) => {
|
|
72
|
+
if (e.key === 'Escape') {
|
|
73
|
+
setPinned(false);
|
|
74
|
+
setPos(null);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
document.addEventListener('mousedown', onDown, true);
|
|
78
|
+
document.addEventListener('keydown', onKey, true);
|
|
79
|
+
return () => {
|
|
80
|
+
document.removeEventListener('mousedown', onDown, true);
|
|
81
|
+
document.removeEventListener('keydown', onKey, true);
|
|
82
|
+
};
|
|
83
|
+
}, [pinned]);
|
|
84
|
+
if (!todos || typeof todos.remaining !== 'number' || todos.remaining <= 0)
|
|
85
|
+
return null;
|
|
86
|
+
const total = Number(todos.total ?? 0);
|
|
87
|
+
const done = Number(todos.done ?? 0);
|
|
88
|
+
const label = t('sessions.board.todoBadge', { done, total });
|
|
89
|
+
const title = t('sessions.board.todoBadgeTitle', { remaining: todos.remaining, total, done });
|
|
90
|
+
const items = Array.isArray(todos.items) ? todos.items : [];
|
|
91
|
+
const glyph = (s) => (s === 'completed' ? '✓' : s === 'in_progress' ? '▶' : '○');
|
|
92
|
+
// 卡片/列都是 overflow:hidden,纯 CSS 绝对定位浮层会被裁。改用 fixed + 打开时按
|
|
93
|
+
// 徽标位置定位,再 portal 到 body 逃出裁剪。
|
|
94
|
+
const locate = (el) => {
|
|
95
|
+
const r = el.getBoundingClientRect();
|
|
96
|
+
setPos({ x: r.left, y: r.bottom + 6 });
|
|
97
|
+
};
|
|
98
|
+
// 复制用纯文本清单:每行「[状态] 文字」,含顶部摘要,方便贴到别处。
|
|
99
|
+
const plainText = () => {
|
|
100
|
+
const mark = (s) => (s === 'completed' ? '[x]' : s === 'in_progress' ? '[>]' : '[ ]');
|
|
101
|
+
const lines = items.map((it, i) => `${mark(it.status)} ${it.text || `#${i + 1}`}`);
|
|
102
|
+
return `${title}\n${lines.join('\n')}`;
|
|
103
|
+
};
|
|
104
|
+
const doCopy = async () => {
|
|
105
|
+
const text = plainText();
|
|
106
|
+
try {
|
|
107
|
+
if (navigator.clipboard?.writeText)
|
|
108
|
+
await navigator.clipboard.writeText(text);
|
|
109
|
+
else {
|
|
110
|
+
const ta = document.createElement('textarea');
|
|
111
|
+
ta.value = text;
|
|
112
|
+
ta.style.position = 'fixed';
|
|
113
|
+
ta.style.opacity = '0';
|
|
114
|
+
document.body.appendChild(ta);
|
|
115
|
+
ta.select();
|
|
116
|
+
document.execCommand('copy');
|
|
117
|
+
document.body.removeChild(ta);
|
|
118
|
+
}
|
|
119
|
+
setCopied(true);
|
|
120
|
+
window.setTimeout(() => setCopied(false), 1500);
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
// 复制失败静默:用户仍可手动选中浮层文字。
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
const showPop = pinned || pos;
|
|
127
|
+
return (_jsxs("span", { ref: anchorRef, className: `session-todo-badge${todos.hasInProgress ? ' active' : ''}${pinned ? ' pinned' : ''}`, tabIndex: 0, onMouseEnter: e => { if (!pinned)
|
|
128
|
+
locate(e.currentTarget); }, onFocus: e => { if (!pinned)
|
|
129
|
+
locate(e.currentTarget); }, onMouseLeave: () => { if (!pinned)
|
|
130
|
+
setPos(null); }, onBlur: () => { if (!pinned)
|
|
131
|
+
setPos(null); }, onClick: e => {
|
|
132
|
+
e.stopPropagation();
|
|
133
|
+
if (pinned) {
|
|
134
|
+
setPinned(false);
|
|
135
|
+
setPos(null);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
locate(e.currentTarget);
|
|
139
|
+
setPinned(true);
|
|
140
|
+
}
|
|
141
|
+
}, children: [todos.hasInProgress ? _jsx("span", { className: "session-todo-dot", "aria-hidden": "true" }) : null, label, showPop && items.length
|
|
142
|
+
? createPortal(_jsxs("div", { ref: popRef, className: `session-todo-pop${pinned ? ' pinned' : ''}`, role: pinned ? 'dialog' : 'tooltip', style: { left: `${pos?.x ?? 0}px`, top: `${pos?.y ?? 0}px` }, onMouseDown: e => e.stopPropagation(), children: [_jsxs("div", { className: "session-todo-pop-head", children: [_jsx("span", { className: "session-todo-pop-title", children: title }), pinned ? (_jsx("button", { type: "button", className: "session-todo-pop-copy", onClick: e => { e.stopPropagation(); void doCopy(); }, children: copied ? t('sessions.board.todoCopied') : t('sessions.board.todoCopy') })) : (_jsx("span", { className: "session-todo-pop-hint", children: t('sessions.board.todoClickHint') }))] }), _jsx("div", { className: "session-todo-pop-list", children: items.map((it, i) => (_jsxs("div", { className: `session-todo-pop-item st-${cssToken(it.status)}`, children: [_jsx("span", { className: "session-todo-pop-glyph", "aria-hidden": "true", children: glyph(it.status) }), _jsx("span", { className: "session-todo-pop-text", children: it.text || `#${i + 1}` })] }, i))) })] }), document.body)
|
|
143
|
+
: null] }));
|
|
144
|
+
}
|
|
49
145
|
function LockChip(props) {
|
|
50
146
|
if (!props.row.locked)
|
|
51
147
|
return null;
|
|
@@ -418,7 +514,7 @@ function SessionsTable(props) {
|
|
|
418
514
|
case 'cliId':
|
|
419
515
|
return _jsx("td", { "data-label": labels.cliId, children: _jsx("span", { className: `badge cli-${cssToken(row.cliId)}`, title: row.runtimeId && row.runtimeId !== row.cliId ? `${row.cliId} / ${row.runtimeId}` : undefined, children: sessionCliDisplayName(row) }) });
|
|
420
516
|
case 'status':
|
|
421
|
-
return _jsxs("td", { "data-label": labels.status, children: [_jsx(StatusBadge, { status: row.status }), _jsx(LockChip, { row: row })] });
|
|
517
|
+
return _jsxs("td", { "data-label": labels.status, children: [_jsx(StatusBadge, { status: row.status }), _jsx(TodoBadge, { row: row }), _jsx(LockChip, { row: row })] });
|
|
422
518
|
case 'chat':
|
|
423
519
|
return _jsx("td", { className: "session-location-cell", "data-label": labels.chat, title: sessionLocationTitle(row), children: sessionLocationText(row) });
|
|
424
520
|
case 'tokenIn':
|
|
@@ -600,7 +696,7 @@ function BoardCard(props) {
|
|
|
600
696
|
return;
|
|
601
697
|
props.onToggleSelect(row);
|
|
602
698
|
};
|
|
603
|
-
return (_jsxs("article", { className: `session-card${props.selected ? ' selected' : ''}${row.locked ? ' locked' : ''}`, "data-id": row.sessionId, "aria-pressed": props.selected, onClick: onCardClick, children: [_jsxs("div", { className: "session-card-top", children: [_jsx("span", { dangerouslySetInnerHTML: rawHtml(botAvatarHtml({ name: botName, larkAppId: row.larkAppId, size: 'sm' })) }), _jsxs("div", { className: "session-card-title", children: [_jsx("strong", { title: String(row.title ?? title), children: String(title).slice(0, 72) }), _jsxs("span", { children: [botName, " \u00B7 ", chatTitle ?? sessionCliDisplayName(row)] })] }), _jsxs("span", { className: "session-card-status-group", children: [_jsx(StatusBadge, { status: row.status }), _jsx(LockChip, { row: row })] })] }), repo !== '-' || row.adopt || signal ? (_jsxs("div", { className: "session-card-meta", children: [repo !== '-' ? _jsx("span", { title: row.workingDir ?? '', children: repo }) : null, row.adopt ? _jsx("span", { className: "badge", children: "adopt" }) : null, signal ? _jsx("span", { className: "session-signal", title: signal, children: signal }) : null] })) : null, _jsx(SessionExchangePreview, { exchange: exchange }), _jsx("div", { className: "session-card-time", children: _jsx("span", { children: row.agentAttention?.at
|
|
699
|
+
return (_jsxs("article", { className: `session-card${props.selected ? ' selected' : ''}${row.locked ? ' locked' : ''}`, "data-id": row.sessionId, "aria-pressed": props.selected, onClick: onCardClick, children: [_jsxs("div", { className: "session-card-top", children: [_jsx("span", { dangerouslySetInnerHTML: rawHtml(botAvatarHtml({ name: botName, larkAppId: row.larkAppId, size: 'sm' })) }), _jsxs("div", { className: "session-card-title", children: [_jsx("strong", { title: String(row.title ?? title), children: String(title).slice(0, 72) }), _jsxs("span", { children: [botName, " \u00B7 ", chatTitle ?? sessionCliDisplayName(row)] })] }), _jsxs("span", { className: "session-card-status-group", children: [_jsx(StatusBadge, { status: row.status }), _jsx(TodoBadge, { row: row }), _jsx(LockChip, { row: row })] })] }), repo !== '-' || row.adopt || signal ? (_jsxs("div", { className: "session-card-meta", children: [repo !== '-' ? _jsx("span", { title: row.workingDir ?? '', children: repo }) : null, row.adopt ? _jsx("span", { className: "badge", children: "adopt" }) : null, signal ? _jsx("span", { className: "session-signal", title: signal, children: signal }) : null] })) : null, _jsx(SessionExchangePreview, { exchange: exchange }), _jsx("div", { className: "session-card-time", children: _jsx("span", { children: row.agentAttention?.at
|
|
604
700
|
? `${t('sessions.board.waiting')} ${relTime(attentionWaitSince(row))}`
|
|
605
701
|
: `${t('sessions.last')}: ${relTime(row.lastMessageAt)}` }) }), _jsxs("div", { className: "session-card-actions", children: [_jsx(ChatScopeLink, { row: row }), !row.feishuChatLink || row.scope !== 'chat' ? (_jsx(LocateIconButton, { row: row, onLocate: props.onLocate })) : null, _jsx(IconActionButton, { action: "details", icon: ICON.details, label: t('sessions.details'), onClick: () => props.onOpen(row) }), canRestartSession(row) ? (_jsx(IconActionButton, { action: "restart", icon: ICON.restart, label: t('sessions.restart'), onClick: button => props.onRestart(row, button) })) : null, _jsx(TerminalControls, { row: row, url: term }), row.status !== 'closed' ? (_jsxs(_Fragment, { children: [_jsx(IconActionButton, { action: "lock", icon: row.locked ? ICON.unlock : ICON.lock, label: lockActionLabel(row), kind: row.locked ? 'locked' : '', onClick: button => props.onLock(row, !row.locked, button) }), _jsx(IconActionButton, { action: "close", icon: ICON.close, label: t('sessions.close'), kind: "danger", onClick: button => props.onClose(row, button) })] })) : null] })] }));
|
|
606
702
|
}
|
|
@@ -823,7 +919,7 @@ function Drawer(props) {
|
|
|
823
919
|
const row = props.row;
|
|
824
920
|
const terminal = row ? terminalHref(row) : null;
|
|
825
921
|
return (_jsx("dialog", { id: "drawer", ref: dialogRef, onClose: props.onClose, onClick: event => { if (event.target === event.currentTarget)
|
|
826
|
-
props.onClose(); }, children: row ? (_jsxs("article", { children: [_jsxs("header", { children: [_jsxs("div", { className: "drawer-title-row", children: [_jsx("h3", { children: stripMentionPrefix(row.title) || row.sessionId }), _jsx(IconActionButton, { id: "drawer-close", className: "card-act drawer-close-btn", icon: ICON.close, label: t('sessions.dismiss'), onClick: props.onClose })] }), _jsxs("span", { className: "drawer-status-line", children: [_jsx(StatusBadge, { status: row.status }), _jsx(LockChip, { row: row })] }), _jsxs("p", { children: [_jsx("code", { children: row.sessionId }), " ", _jsx(CopyButton, { value: row.sessionId })] })] }), _jsxs("p", { children: [_jsxs("b", { children: [t('sessions.bot'), ":"] }), " ", botDisplayName(row), " \u00B7 ", _jsxs("b", { children: [t('sessions.cli'), ":"] }), " ", sessionCliDisplayName(row)] }), _jsxs("p", { children: [_jsxs("b", { children: [t('sessions.location'), ":"] }), " ", sessionLocationText(row)] }), _jsxs("p", { children: [_jsx("b", { children: "chatId:" }), " ", _jsx("code", { children: row.chatId ?? '' }), " ", _jsx(CopyButton, { value: row.chatId ?? '' })] }), _jsxs("p", { children: [_jsx("b", { children: "rootMessageId:" }), " ", _jsx("code", { children: row.rootMessageId ?? '' }), " ", _jsx(CopyButton, { value: row.rootMessageId ?? '' })] }), row.threadId ? _jsxs("p", { children: [_jsx("b", { children: "threadId:" }), " ", _jsx("code", { children: row.threadId })] }) : null, _jsxs("p", { children: [_jsxs("b", { children: [t('sessions.workingDir'), ":"] }), " ", row.workingDir ?? '-'] }), _jsxs("div", { className: "actions", children: [_jsx(ChatScopeLink, { row: row }), !row.feishuChatLink || row.scope !== 'chat' ? _jsx(LocateButton, { row: row, locateSession: props.locateSession }) : null, _jsx("button", { id: "history-drawer-btn", type: "button", onClick: () => props.openHistory(row), children: t('sessions.history.title') }), _jsx(TerminalControls, { row: row, url: terminal }), shouldOpenWritableTerminal() && row.status !== 'closed' ? (_jsx("button", { id: "copy-cmd-btn", type: "button", "data-tip": t('sessions.copyCommandHint'), onClick: event => void copySpawnCommand(row, event.currentTarget), children: t('sessions.copyCommand') })) : null, canRestartSession(row) ? (_jsx("button", { id: "restart-btn", type: "button", onClick: async (event) => { if (await props.restartSession(row, event.currentTarget))
|
|
922
|
+
props.onClose(); }, children: row ? (_jsxs("article", { children: [_jsxs("header", { children: [_jsxs("div", { className: "drawer-title-row", children: [_jsx("h3", { children: stripMentionPrefix(row.title) || row.sessionId }), _jsx(IconActionButton, { id: "drawer-close", className: "card-act drawer-close-btn", icon: ICON.close, label: t('sessions.dismiss'), onClick: props.onClose })] }), _jsxs("span", { className: "drawer-status-line", children: [_jsx(StatusBadge, { status: row.status }), _jsx(TodoBadge, { row: row }), _jsx(LockChip, { row: row })] }), _jsxs("p", { children: [_jsx("code", { children: row.sessionId }), " ", _jsx(CopyButton, { value: row.sessionId })] })] }), _jsxs("p", { children: [_jsxs("b", { children: [t('sessions.bot'), ":"] }), " ", botDisplayName(row), " \u00B7 ", _jsxs("b", { children: [t('sessions.cli'), ":"] }), " ", sessionCliDisplayName(row)] }), _jsxs("p", { children: [_jsxs("b", { children: [t('sessions.location'), ":"] }), " ", sessionLocationText(row)] }), _jsxs("p", { children: [_jsx("b", { children: "chatId:" }), " ", _jsx("code", { children: row.chatId ?? '' }), " ", _jsx(CopyButton, { value: row.chatId ?? '' })] }), _jsxs("p", { children: [_jsx("b", { children: "rootMessageId:" }), " ", _jsx("code", { children: row.rootMessageId ?? '' }), " ", _jsx(CopyButton, { value: row.rootMessageId ?? '' })] }), row.threadId ? _jsxs("p", { children: [_jsx("b", { children: "threadId:" }), " ", _jsx("code", { children: row.threadId })] }) : null, _jsxs("p", { children: [_jsxs("b", { children: [t('sessions.workingDir'), ":"] }), " ", row.workingDir ?? '-'] }), _jsxs("div", { className: "actions", children: [_jsx(ChatScopeLink, { row: row }), !row.feishuChatLink || row.scope !== 'chat' ? _jsx(LocateButton, { row: row, locateSession: props.locateSession }) : null, _jsx("button", { id: "history-drawer-btn", type: "button", onClick: () => props.openHistory(row), children: t('sessions.history.title') }), _jsx(TerminalControls, { row: row, url: terminal }), shouldOpenWritableTerminal() && row.status !== 'closed' ? (_jsx("button", { id: "copy-cmd-btn", type: "button", "data-tip": t('sessions.copyCommandHint'), onClick: event => void copySpawnCommand(row, event.currentTarget), children: t('sessions.copyCommand') })) : null, canRestartSession(row) ? (_jsx("button", { id: "restart-btn", type: "button", onClick: async (event) => { if (await props.restartSession(row, event.currentTarget))
|
|
827
923
|
props.onClose(); }, children: t('sessions.restart') })) : null, _jsx("button", { id: "lock-btn", type: "button", onClick: event => void props.setSessionLocked(row, !row.locked, event.currentTarget), children: lockActionLabel(row) }), row.queued && row.status !== 'closed' ? (_jsx("button", { id: "start-btn", type: "button", className: "primary", onClick: async (event) => { if (await props.startSession(row, event.currentTarget))
|
|
828
924
|
props.onClose(); }, children: t('sessions.create.start') })) : null, row.status === 'closed' ? (_jsx("button", { id: "resume-btn", type: "button", className: "primary", onClick: async (event) => { if (await props.resumeSession(row, event.currentTarget))
|
|
829
925
|
props.onClose(); }, children: t('sessions.resume') })) : null, row.status !== 'closed' ? (_jsx("button", { id: "close-btn", type: "button", className: "contrast", onClick: async (event) => { if (await props.closeSession(row, event.currentTarget))
|