@harness-mix/cli 0.2.0 → 0.2.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/CHANGELOG.md +17 -0
- package/NOTICE +14 -0
- package/README.md +4 -24
- package/docs/multi-agent-collaboration.md +1 -1
- package/licenses/anthropic-codex-theme-MIT.txt +21 -0
- package/licenses/codex-dream-skin-MIT.txt +21 -0
- package/output/native-build/renderer-extension.js +703 -58
- package/package.json +192 -189
- package/scripts/collaboration-test.cjs +262 -200
- package/scripts/collaboration-ui-smoke.cjs +85 -77
- package/scripts/core-concurrency-test.cjs +23 -1
- package/scripts/e2e-pi-cancel.cjs +99 -0
- package/scripts/native-file-change-test.cjs +42 -2
- package/scripts/native-sidebar-test.cjs +8 -0
- package/scripts/native-vendor-adapters-test.cjs +67 -1
- package/scripts/pets-test.cjs +63 -0
- package/scripts/pi-cancel-race-test.cjs +102 -0
- package/scripts/stuck-turn-test.cjs +73 -0
- package/scripts/workspace-test.cjs +9 -0
- package/src/assets/skins/dream-skin/NOTICE.md +13 -0
- package/src/assets/skins/dream-skin/themes/gothic-void-crusade/hero.webp +0 -0
- package/src/assets/skins/dream-skin/themes/gothic-void-crusade/theme.json +34 -0
- package/src/main/adapters/claude.js +9 -6
- package/src/main/adapters/pi-family.js +41 -8
- package/src/main/harness-adapter/event-normalizer.js +270 -258
- package/src/main/host/collaboration-mcp.cjs +8 -1
- package/src/main/host/collaboration-tools.js +1 -1
- package/src/main/host/collaboration.js +81 -11
- package/src/main/host/runtime.js +1462 -1341
- package/src/main/native/pets.js +79 -2
- package/src/main/native/protocol.js +1164 -1145
- package/src/main/native/thread-list.js +6 -1
- package/src/main/workspace/core-review.js +75 -0
- package/src/main/workspace/diff.js +5 -1
- package/src/main/workspace/file-changes.js +9 -4
- package/src/main/workspace/review-controller.js +115 -102
- package/src/main/workspace/review.js +90 -88
- package/src/native-ui/renderer-extension/dist/contract-audit.js +16637 -0
- package/src/native-ui/renderer-extension/dist/index.js +34853 -0
- package/src/native-ui/renderer-extension/dist/production.js +34263 -0
- package/src/native-ui/renderer-extension/dist/renderer-binding-probe.js +34254 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-binding-probe.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-model-client.d.ts +11 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-model-client.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-pet-switcher.d.ts +73 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-pet-switcher.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-settings-lifecycle.d.ts +1 -0
- package/src/native-ui/renderer-extension/dist/types/renderer-settings-lifecycle.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/renderer-team-cards.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/collaboration-page.d.ts +12 -0
- package/src/native-ui/renderer-extension/dist/types/settings/collaboration-page.d.ts.map +1 -0
- package/src/native-ui/renderer-extension/dist/types/settings/icons.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/icons.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/localization.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/pages.d.ts +5 -3
- package/src/native-ui/renderer-extension/dist/types/settings/pages.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/pet-market.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/pet-market.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/pets-client.d.ts +9 -0
- package/src/native-ui/renderer-extension/dist/types/settings/pets-client.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/skin-runtime.d.ts +1 -1
- package/src/native-ui/renderer-extension/dist/types/settings/skin-runtime.d.ts.map +1 -1
- package/src/native-ui/renderer-extension/dist/types/tsconfig.tsbuildinfo +1 -1
- package/src/native-ui/renderer-extension/src/renderer-binding-probe.ts +3181 -3171
- package/src/native-ui/renderer-extension/src/renderer-model-client.ts +14 -0
- package/src/native-ui/renderer-extension/src/renderer-pet-switcher.ts +308 -0
- package/src/native-ui/renderer-extension/src/renderer-settings-lifecycle.ts +2 -0
- package/src/native-ui/renderer-extension/src/renderer-team-cards.ts +76 -21
- package/src/native-ui/renderer-extension/src/settings/collaboration-page.ts +139 -0
- package/src/native-ui/renderer-extension/src/settings/icons.ts +155 -153
- package/src/native-ui/renderer-extension/src/settings/localization.ts +785 -783
- package/src/native-ui/renderer-extension/src/settings/pages.ts +694 -681
- package/src/native-ui/renderer-extension/src/settings/pet-market.css +110 -1
- package/src/native-ui/renderer-extension/src/settings/pet-market.ts +276 -22
- package/src/native-ui/renderer-extension/src/settings/pets-client.ts +32 -0
- package/src/native-ui/renderer-extension/src/settings/shell.css +2294 -2255
- package/src/native-ui/renderer-extension/src/settings/skin-runtime.ts +51 -1
- package/src/native-ui/renderer-extension/test/renderer-model-client.test.ts +2 -0
- package/src/native-ui/renderer-extension/test/renderer-pet-switcher.test.ts +400 -0
- package/src/native-ui/renderer-extension/test/settings/localization.test.ts +80 -79
- package/src/native-ui/renderer-extension/test/settings/pet-market.test.ts +378 -0
- package/src/native-ui/renderer-extension/test/settings/pets-client.test.ts +83 -0
- package/src/native-ui/renderer-extension/test/settings/shell.test.ts +3 -0
- package/src/native-ui/renderer-extension/test/settings/skin-runtime.test.ts +15 -1
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
RendererSettingsPageDefinition,
|
|
3
|
+
RendererSettingsPageMountContext,
|
|
4
|
+
} from "./core.js";
|
|
5
|
+
import type { RendererSettingsMessages } from "./localization.js";
|
|
6
|
+
|
|
7
|
+
export interface RendererCollaborationPreferences {
|
|
8
|
+
collaboration: boolean;
|
|
9
|
+
agentTeam: boolean;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface RendererCollaborationClient {
|
|
13
|
+
getCollaborationPreferences(): Promise<RendererCollaborationPreferences>;
|
|
14
|
+
saveCollaborationPreferences(
|
|
15
|
+
input: Partial<RendererCollaborationPreferences>,
|
|
16
|
+
): Promise<RendererCollaborationPreferences>;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
interface ToggleSpec {
|
|
20
|
+
readonly key: keyof RendererCollaborationPreferences;
|
|
21
|
+
readonly title: string;
|
|
22
|
+
readonly description: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// 设置 → 协作:多 Agent 协作与 Agent Team 是两个独立开关,默认都开启。
|
|
26
|
+
// 关闭多 Agent 协作会一并停用 Agent Team(团队建立在协作运行时之上),
|
|
27
|
+
// 界面通过禁用联动明确表达这层依赖。
|
|
28
|
+
export function createCollaborationSettingsPage(
|
|
29
|
+
messages: RendererSettingsMessages,
|
|
30
|
+
getClient: () => RendererCollaborationClient | null,
|
|
31
|
+
): RendererSettingsPageDefinition {
|
|
32
|
+
const zh = messages.locale === "zh-CN";
|
|
33
|
+
return Object.freeze({
|
|
34
|
+
id: "collaboration",
|
|
35
|
+
label: messages.pageLabels.collaboration,
|
|
36
|
+
icon: "collaboration",
|
|
37
|
+
mount(context: RendererSettingsPageMountContext) {
|
|
38
|
+
const document = context.content.ownerDocument;
|
|
39
|
+
const heading = document.createElement("div");
|
|
40
|
+
heading.className = "settings-section-label";
|
|
41
|
+
heading.textContent = messages.pageLabels.collaboration;
|
|
42
|
+
|
|
43
|
+
const panel = document.createElement("section");
|
|
44
|
+
panel.className = "settings-about-panel";
|
|
45
|
+
panel.setAttribute("aria-live", "polite");
|
|
46
|
+
|
|
47
|
+
const specs: readonly ToggleSpec[] = [
|
|
48
|
+
{
|
|
49
|
+
key: "collaboration",
|
|
50
|
+
title: zh ? "多 Agent 协作" : "Multi-Agent collaboration",
|
|
51
|
+
description: zh
|
|
52
|
+
? "在输入框输入 # 选择协同 Harness,主任务可将子任务委派给它们并行执行。"
|
|
53
|
+
: "Type # in the composer to pick collaborator Harnesses; the lead task can delegate subtasks to them.",
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
key: "agentTeam",
|
|
57
|
+
title: zh ? "Agent Team" : "Agent Team",
|
|
58
|
+
description: zh
|
|
59
|
+
? "允许主任务创建持久的多成员团队:共享任务图、成员邮箱与 Team Workbench。依赖多 Agent 协作。"
|
|
60
|
+
: "Let the lead create a persistent named team with a shared task graph, member mailboxes and the Team Workbench. Requires Multi-Agent collaboration.",
|
|
61
|
+
},
|
|
62
|
+
];
|
|
63
|
+
|
|
64
|
+
const inputs = new Map<keyof RendererCollaborationPreferences, HTMLInputElement>();
|
|
65
|
+
for (const spec of specs) {
|
|
66
|
+
const row = document.createElement("label");
|
|
67
|
+
row.className = "settings-collab-toggle";
|
|
68
|
+
const text = document.createElement("span");
|
|
69
|
+
const title = document.createElement("strong");
|
|
70
|
+
title.textContent = spec.title;
|
|
71
|
+
const description = document.createElement("small");
|
|
72
|
+
description.textContent = spec.description;
|
|
73
|
+
text.append(title, description);
|
|
74
|
+
const input = document.createElement("input");
|
|
75
|
+
input.type = "checkbox";
|
|
76
|
+
input.checked = true;
|
|
77
|
+
input.disabled = true;
|
|
78
|
+
input.setAttribute("aria-label", spec.title);
|
|
79
|
+
inputs.set(spec.key, input);
|
|
80
|
+
row.append(text, input);
|
|
81
|
+
panel.append(row);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const status = document.createElement("p");
|
|
85
|
+
status.className = "settings-update-summary";
|
|
86
|
+
panel.append(status);
|
|
87
|
+
context.content.append(heading, panel);
|
|
88
|
+
|
|
89
|
+
let current: RendererCollaborationPreferences = { collaboration: true, agentTeam: true };
|
|
90
|
+
const syncInputs = () => {
|
|
91
|
+
for (const [key, input] of inputs) input.checked = current[key];
|
|
92
|
+
// Agent Team 依附于协作运行时:协作关闭时团队开关一并禁用
|
|
93
|
+
const team = inputs.get("agentTeam");
|
|
94
|
+
if (team) team.disabled = !current.collaboration;
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
const client = getClient();
|
|
98
|
+
if (!client) {
|
|
99
|
+
status.textContent = zh ? "当前 Host 不支持协作开关。" : "Collaboration preferences are unavailable on this Host.";
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const saving = new Set<keyof RendererCollaborationPreferences>();
|
|
104
|
+
for (const spec of specs) {
|
|
105
|
+
const input = inputs.get(spec.key)!;
|
|
106
|
+
input.addEventListener("change", () => {
|
|
107
|
+
if (saving.has(spec.key)) return;
|
|
108
|
+
saving.add(spec.key);
|
|
109
|
+
input.disabled = true;
|
|
110
|
+
const patch = { [spec.key]: input.checked };
|
|
111
|
+
void context.runLatest(() => client.saveCollaborationPreferences(patch), {
|
|
112
|
+
success(value) {
|
|
113
|
+
saving.delete(spec.key);
|
|
114
|
+
current = value;
|
|
115
|
+
syncInputs();
|
|
116
|
+
status.textContent = "";
|
|
117
|
+
},
|
|
118
|
+
failure(error) {
|
|
119
|
+
saving.delete(spec.key);
|
|
120
|
+
syncInputs();
|
|
121
|
+
status.textContent = error instanceof Error ? error.message : String(error);
|
|
122
|
+
},
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
void context.runLatest(() => client.getCollaborationPreferences(), {
|
|
128
|
+
success(value) {
|
|
129
|
+
current = value;
|
|
130
|
+
syncInputs();
|
|
131
|
+
},
|
|
132
|
+
failure(error) {
|
|
133
|
+
status.textContent = error instanceof Error ? error.message : String(error);
|
|
134
|
+
},
|
|
135
|
+
});
|
|
136
|
+
return undefined;
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
}
|
|
@@ -1,153 +1,155 @@
|
|
|
1
|
-
import type { IconNode } from "lucide";
|
|
2
|
-
import createElement from "lucide/dist/esm/createElement.mjs";
|
|
3
|
-
import Boxes from "lucide/dist/esm/icons/boxes.mjs";
|
|
4
|
-
import Check from "lucide/dist/esm/icons/circle-check.mjs";
|
|
5
|
-
import ChevronDown from "lucide/dist/esm/icons/chevron-down.mjs";
|
|
6
|
-
import ChevronLeft from "lucide/dist/esm/icons/chevron-left.mjs";
|
|
7
|
-
import ChevronRight from "lucide/dist/esm/icons/chevron-right.mjs";
|
|
8
|
-
import ChevronUp from "lucide/dist/esm/icons/chevron-up.mjs";
|
|
9
|
-
import CircleArrowUp from "lucide/dist/esm/icons/circle-arrow-up.mjs";
|
|
10
|
-
import CircleOff from "lucide/dist/esm/icons/circle-off.mjs";
|
|
11
|
-
import Copy from "lucide/dist/esm/icons/copy.mjs";
|
|
12
|
-
import Download from "lucide/dist/esm/icons/download.mjs";
|
|
13
|
-
import ExternalLink from "lucide/dist/esm/icons/external-link.mjs";
|
|
14
|
-
import FolderInput from "lucide/dist/esm/icons/folder-input.mjs";
|
|
15
|
-
import GripVertical from "lucide/dist/esm/icons/grip-vertical.mjs";
|
|
16
|
-
import Info from "lucide/dist/esm/icons/info.mjs";
|
|
17
|
-
import Languages from "lucide/dist/esm/icons/languages.mjs";
|
|
18
|
-
import Network from "lucide/dist/esm/icons/network.mjs";
|
|
19
|
-
import PlugZap from "lucide/dist/esm/icons/plug-zap.mjs";
|
|
20
|
-
import RefreshCw from "lucide/dist/esm/icons/refresh-cw.mjs";
|
|
21
|
-
import RotateCcw from "lucide/dist/esm/icons/rotate-ccw.mjs";
|
|
22
|
-
import Route from "lucide/dist/esm/icons/route.mjs";
|
|
23
|
-
import Settings from "lucide/dist/esm/icons/settings.mjs";
|
|
24
|
-
import Stethoscope from "lucide/dist/esm/icons/stethoscope.mjs";
|
|
25
|
-
import Star from "lucide/dist/esm/icons/star.mjs";
|
|
26
|
-
import TriangleAlert from "lucide/dist/esm/icons/triangle-alert.mjs";
|
|
27
|
-
import Ticket from "lucide/dist/esm/icons/ticket.mjs";
|
|
28
|
-
import Trash from "lucide/dist/esm/icons/trash-2.mjs";
|
|
29
|
-
import Terminal from "lucide/dist/esm/icons/terminal.mjs";
|
|
30
|
-
import Search from "lucide/dist/esm/icons/search.mjs";
|
|
31
|
-
import CircleHelp from "lucide/dist/esm/icons/circle-question-mark.mjs";
|
|
32
|
-
import X from "lucide/dist/esm/icons/x.mjs";
|
|
33
|
-
import Users from "lucide/dist/esm/icons/users.mjs";
|
|
34
|
-
import Plus from "lucide/dist/esm/icons/plus.mjs";
|
|
35
|
-
import Database from 'lucide/dist/esm/icons/database.mjs';
|
|
36
|
-
import Palette from "lucide/dist/esm/icons/palette.mjs";
|
|
37
|
-
import ShieldCheck from "lucide/dist/esm/icons/shield-check.mjs";
|
|
38
|
-
import PawPrint from "lucide/dist/esm/icons/paw-print.mjs";
|
|
39
|
-
import harnessMixLogoUrl from "../../../../assets/brand-harness-mix.png";
|
|
40
|
-
|
|
41
|
-
export const RENDERER_SETTINGS_ICON_NAMES = [
|
|
42
|
-
"settings",
|
|
43
|
-
"close",
|
|
44
|
-
"star",
|
|
45
|
-
"language",
|
|
46
|
-
"connections",
|
|
47
|
-
"accounts",
|
|
48
|
-
"session-import",
|
|
49
|
-
"add",
|
|
50
|
-
"model-pool",
|
|
51
|
-
"routes",
|
|
52
|
-
"gateway",
|
|
53
|
-
"updates",
|
|
54
|
-
"about",
|
|
55
|
-
"info",
|
|
56
|
-
"external-link",
|
|
57
|
-
"refresh",
|
|
58
|
-
"unavailable",
|
|
59
|
-
"alert",
|
|
60
|
-
"check",
|
|
61
|
-
"diagnose",
|
|
62
|
-
"copy",
|
|
63
|
-
"download",
|
|
64
|
-
"chevron-left",
|
|
65
|
-
"chevron-right",
|
|
66
|
-
"chevron-down",
|
|
67
|
-
"chevron-up",
|
|
68
|
-
"grip-vertical",
|
|
69
|
-
"undo",
|
|
70
|
-
"ticket",
|
|
71
|
-
"trash",
|
|
72
|
-
"terminal",
|
|
73
|
-
"search",
|
|
74
|
-
"help",
|
|
75
|
-
"palette",
|
|
76
|
-
"shield",
|
|
77
|
-
"storage",
|
|
78
|
-
"pets",
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
"chevron-
|
|
108
|
-
"chevron-
|
|
109
|
-
"chevron-
|
|
110
|
-
"
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
const
|
|
142
|
-
icon
|
|
143
|
-
icon
|
|
144
|
-
icon.
|
|
145
|
-
icon.
|
|
146
|
-
icon.
|
|
147
|
-
icon.
|
|
148
|
-
icon.
|
|
149
|
-
icon.
|
|
150
|
-
icon.style.
|
|
151
|
-
icon.
|
|
152
|
-
|
|
153
|
-
|
|
1
|
+
import type { IconNode } from "lucide";
|
|
2
|
+
import createElement from "lucide/dist/esm/createElement.mjs";
|
|
3
|
+
import Boxes from "lucide/dist/esm/icons/boxes.mjs";
|
|
4
|
+
import Check from "lucide/dist/esm/icons/circle-check.mjs";
|
|
5
|
+
import ChevronDown from "lucide/dist/esm/icons/chevron-down.mjs";
|
|
6
|
+
import ChevronLeft from "lucide/dist/esm/icons/chevron-left.mjs";
|
|
7
|
+
import ChevronRight from "lucide/dist/esm/icons/chevron-right.mjs";
|
|
8
|
+
import ChevronUp from "lucide/dist/esm/icons/chevron-up.mjs";
|
|
9
|
+
import CircleArrowUp from "lucide/dist/esm/icons/circle-arrow-up.mjs";
|
|
10
|
+
import CircleOff from "lucide/dist/esm/icons/circle-off.mjs";
|
|
11
|
+
import Copy from "lucide/dist/esm/icons/copy.mjs";
|
|
12
|
+
import Download from "lucide/dist/esm/icons/download.mjs";
|
|
13
|
+
import ExternalLink from "lucide/dist/esm/icons/external-link.mjs";
|
|
14
|
+
import FolderInput from "lucide/dist/esm/icons/folder-input.mjs";
|
|
15
|
+
import GripVertical from "lucide/dist/esm/icons/grip-vertical.mjs";
|
|
16
|
+
import Info from "lucide/dist/esm/icons/info.mjs";
|
|
17
|
+
import Languages from "lucide/dist/esm/icons/languages.mjs";
|
|
18
|
+
import Network from "lucide/dist/esm/icons/network.mjs";
|
|
19
|
+
import PlugZap from "lucide/dist/esm/icons/plug-zap.mjs";
|
|
20
|
+
import RefreshCw from "lucide/dist/esm/icons/refresh-cw.mjs";
|
|
21
|
+
import RotateCcw from "lucide/dist/esm/icons/rotate-ccw.mjs";
|
|
22
|
+
import Route from "lucide/dist/esm/icons/route.mjs";
|
|
23
|
+
import Settings from "lucide/dist/esm/icons/settings.mjs";
|
|
24
|
+
import Stethoscope from "lucide/dist/esm/icons/stethoscope.mjs";
|
|
25
|
+
import Star from "lucide/dist/esm/icons/star.mjs";
|
|
26
|
+
import TriangleAlert from "lucide/dist/esm/icons/triangle-alert.mjs";
|
|
27
|
+
import Ticket from "lucide/dist/esm/icons/ticket.mjs";
|
|
28
|
+
import Trash from "lucide/dist/esm/icons/trash-2.mjs";
|
|
29
|
+
import Terminal from "lucide/dist/esm/icons/terminal.mjs";
|
|
30
|
+
import Search from "lucide/dist/esm/icons/search.mjs";
|
|
31
|
+
import CircleHelp from "lucide/dist/esm/icons/circle-question-mark.mjs";
|
|
32
|
+
import X from "lucide/dist/esm/icons/x.mjs";
|
|
33
|
+
import Users from "lucide/dist/esm/icons/users.mjs";
|
|
34
|
+
import Plus from "lucide/dist/esm/icons/plus.mjs";
|
|
35
|
+
import Database from 'lucide/dist/esm/icons/database.mjs';
|
|
36
|
+
import Palette from "lucide/dist/esm/icons/palette.mjs";
|
|
37
|
+
import ShieldCheck from "lucide/dist/esm/icons/shield-check.mjs";
|
|
38
|
+
import PawPrint from "lucide/dist/esm/icons/paw-print.mjs";
|
|
39
|
+
import harnessMixLogoUrl from "../../../../assets/brand-harness-mix.png";
|
|
40
|
+
|
|
41
|
+
export const RENDERER_SETTINGS_ICON_NAMES = [
|
|
42
|
+
"settings",
|
|
43
|
+
"close",
|
|
44
|
+
"star",
|
|
45
|
+
"language",
|
|
46
|
+
"connections",
|
|
47
|
+
"accounts",
|
|
48
|
+
"session-import",
|
|
49
|
+
"add",
|
|
50
|
+
"model-pool",
|
|
51
|
+
"routes",
|
|
52
|
+
"gateway",
|
|
53
|
+
"updates",
|
|
54
|
+
"about",
|
|
55
|
+
"info",
|
|
56
|
+
"external-link",
|
|
57
|
+
"refresh",
|
|
58
|
+
"unavailable",
|
|
59
|
+
"alert",
|
|
60
|
+
"check",
|
|
61
|
+
"diagnose",
|
|
62
|
+
"copy",
|
|
63
|
+
"download",
|
|
64
|
+
"chevron-left",
|
|
65
|
+
"chevron-right",
|
|
66
|
+
"chevron-down",
|
|
67
|
+
"chevron-up",
|
|
68
|
+
"grip-vertical",
|
|
69
|
+
"undo",
|
|
70
|
+
"ticket",
|
|
71
|
+
"trash",
|
|
72
|
+
"terminal",
|
|
73
|
+
"search",
|
|
74
|
+
"help",
|
|
75
|
+
"palette",
|
|
76
|
+
"shield",
|
|
77
|
+
"storage",
|
|
78
|
+
"pets",
|
|
79
|
+
"collaboration",
|
|
80
|
+
] as const;
|
|
81
|
+
|
|
82
|
+
export type RendererSettingsIconName = (typeof RENDERER_SETTINGS_ICON_NAMES)[number];
|
|
83
|
+
|
|
84
|
+
const iconNodes = {
|
|
85
|
+
settings: Settings,
|
|
86
|
+
close: X,
|
|
87
|
+
star: Star,
|
|
88
|
+
language: Languages,
|
|
89
|
+
connections: PlugZap,
|
|
90
|
+
accounts: Users,
|
|
91
|
+
"session-import": FolderInput,
|
|
92
|
+
add: Plus,
|
|
93
|
+
"model-pool": Boxes,
|
|
94
|
+
routes: Route,
|
|
95
|
+
gateway: Network,
|
|
96
|
+
updates: CircleArrowUp,
|
|
97
|
+
about: Info,
|
|
98
|
+
info: Info,
|
|
99
|
+
"external-link": ExternalLink,
|
|
100
|
+
refresh: RefreshCw,
|
|
101
|
+
unavailable: CircleOff,
|
|
102
|
+
alert: TriangleAlert,
|
|
103
|
+
check: Check,
|
|
104
|
+
diagnose: Stethoscope,
|
|
105
|
+
copy: Copy,
|
|
106
|
+
download: Download,
|
|
107
|
+
"chevron-left": ChevronLeft,
|
|
108
|
+
"chevron-right": ChevronRight,
|
|
109
|
+
"chevron-down": ChevronDown,
|
|
110
|
+
"chevron-up": ChevronUp,
|
|
111
|
+
"grip-vertical": GripVertical,
|
|
112
|
+
undo: RotateCcw,
|
|
113
|
+
ticket: Ticket,
|
|
114
|
+
trash: Trash,
|
|
115
|
+
terminal: Terminal,
|
|
116
|
+
search: Search,
|
|
117
|
+
help: CircleHelp,
|
|
118
|
+
palette: Palette,
|
|
119
|
+
shield: ShieldCheck,
|
|
120
|
+
storage: Database,
|
|
121
|
+
pets: PawPrint,
|
|
122
|
+
collaboration: Users,
|
|
123
|
+
} satisfies Record<RendererSettingsIconName, IconNode>;
|
|
124
|
+
|
|
125
|
+
export function isRendererSettingsIconName(value: string): value is RendererSettingsIconName {
|
|
126
|
+
return (RENDERER_SETTINGS_ICON_NAMES as readonly string[]).includes(value);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export function createRendererSettingsIcon(name: RendererSettingsIconName, size = 18): SVGElement {
|
|
130
|
+
const icon = createElement(iconNodes[name], {
|
|
131
|
+
width: size,
|
|
132
|
+
height: size,
|
|
133
|
+
"aria-hidden": "true",
|
|
134
|
+
focusable: "false",
|
|
135
|
+
});
|
|
136
|
+
icon.classList.add("harnessmix-settings-icon");
|
|
137
|
+
return icon;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export function createRendererSettingsBrandIcon(size = 22, ownerDocument?: Document): HTMLImageElement {
|
|
141
|
+
const doc = ownerDocument ?? (typeof document !== "undefined" ? document : undefined);
|
|
142
|
+
if (!doc) throw new Error("Document is required to create icon element");
|
|
143
|
+
const icon = doc.createElement("img");
|
|
144
|
+
icon.src = harnessMixLogoUrl;
|
|
145
|
+
icon.alt = "";
|
|
146
|
+
icon.width = size;
|
|
147
|
+
icon.height = size;
|
|
148
|
+
icon.draggable = false;
|
|
149
|
+
icon.setAttribute("aria-hidden", "true");
|
|
150
|
+
icon.style.width = `${size}px`;
|
|
151
|
+
icon.style.height = `${size}px`;
|
|
152
|
+
icon.style.objectFit = "contain";
|
|
153
|
+
icon.classList.add("harnessmix-settings-icon");
|
|
154
|
+
return icon;
|
|
155
|
+
}
|