@tt-a1i/hive 1.4.3 → 1.4.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.
Files changed (54) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.en.md +5 -4
  3. package/README.md +1 -1
  4. package/dist/src/cli/hive-update.d.ts +29 -0
  5. package/dist/src/cli/hive-update.js +54 -15
  6. package/dist/src/cli/hive.d.ts +32 -0
  7. package/dist/src/cli/hive.js +72 -17
  8. package/dist/src/cli/team.js +17 -5
  9. package/dist/src/server/agent-command-resolver.d.ts +10 -1
  10. package/dist/src/server/agent-command-resolver.js +48 -4
  11. package/dist/src/server/agent-launch-resolver.js +9 -3
  12. package/dist/src/server/agent-manager-support.d.ts +28 -0
  13. package/dist/src/server/agent-manager-support.js +58 -4
  14. package/dist/src/server/agent-run-bootstrap.d.ts +17 -1
  15. package/dist/src/server/agent-run-bootstrap.js +30 -2
  16. package/dist/src/server/agent-startup-instructions.js +1 -1
  17. package/dist/src/server/app.d.ts +1 -0
  18. package/dist/src/server/app.js +12 -2
  19. package/dist/src/server/fs-browse.d.ts +14 -1
  20. package/dist/src/server/fs-browse.js +48 -5
  21. package/dist/src/server/fs-pick-folder.js +54 -11
  22. package/dist/src/server/hive-team-guidance.js +5 -4
  23. package/dist/src/server/open-target-commands.js +30 -4
  24. package/dist/src/server/post-start-input-writer.js +6 -3
  25. package/dist/src/server/routes-team.js +10 -1
  26. package/dist/src/server/runtime-store.d.ts +3 -1
  27. package/dist/src/server/session-capture-claude.d.ts +23 -0
  28. package/dist/src/server/session-capture-claude.js +24 -1
  29. package/dist/src/server/session-capture-opencode.d.ts +18 -0
  30. package/dist/src/server/session-capture-opencode.js +27 -2
  31. package/dist/src/server/startup-command-parser.d.ts +15 -0
  32. package/dist/src/server/startup-command-parser.js +33 -2
  33. package/dist/src/server/tasks-file-watcher.d.ts +26 -0
  34. package/dist/src/server/tasks-file-watcher.js +29 -3
  35. package/dist/src/server/team-operations.d.ts +5 -1
  36. package/dist/src/server/team-operations.js +44 -3
  37. package/dist/src/server/terminal-input-profile.js +2 -8
  38. package/dist/src/server/terminal-ws-server.js +26 -8
  39. package/package.json +2 -2
  40. package/web/dist/assets/{AddWorkerDialog-DmkDOdp6.js → AddWorkerDialog-DeZhTQLi.js} +2 -2
  41. package/web/dist/assets/AddWorkspaceDialog-DDpXNEKf.js +1 -0
  42. package/web/dist/assets/{FirstRunWizard-SAd1wsH4.js → FirstRunWizard-B5wLcat5.js} +1 -1
  43. package/web/dist/assets/{MarketplaceDrawer-B_8aG2uT.js → MarketplaceDrawer-BC0eBOEW.js} +1 -1
  44. package/web/dist/assets/{WorkerModal-CQmjiPme.js → WorkerModal-BwMHq-Bi.js} +1 -1
  45. package/web/dist/assets/WorkspaceTaskDrawer-CxvT4nqs.js +1 -0
  46. package/web/dist/assets/{WorkspaceTerminalPanels-BReWh1YL.js → WorkspaceTerminalPanels-CvibsPSd.js} +1 -1
  47. package/web/dist/assets/index-Ddb7bDN5.js +75 -0
  48. package/web/dist/assets/path-join-S7qkXQtP.js +1 -0
  49. package/web/dist/index.html +1 -1
  50. package/web/dist/sw.js +1 -1
  51. package/web/dist/assets/AddWorkspaceDialog-BsVnH3Xe.js +0 -1
  52. package/web/dist/assets/WorkspaceTaskDrawer-B0DmCWcV.js +0 -1
  53. package/web/dist/assets/chevron-right-CtLjVEl7.js +0 -1
  54. package/web/dist/assets/index-Cn8X3get.js +0 -76
@@ -1,3 +1,29 @@
1
+ import { type ChokidarOptions } from 'chokidar';
2
+ /**
3
+ * Watcher configuration. The atomic-save option matters on Windows: VS
4
+ * Code, Cursor, Notepad++, and the editor inside Hive itself all save
5
+ * by writing a temp file and renaming it over the target. On
6
+ * ReadDirectoryChangesW (Windows' native fs-event backend) that rename
7
+ * invalidates the file-handle the chokidar watcher held for the
8
+ * single-file path, and subsequent edits would emit no events at all.
9
+ *
10
+ * `atomic: 100` tells chokidar to correlate an unlink+add pair within
11
+ * a 100ms window as a single `change` event — collapsing the rename
12
+ * into one logical "the file was modified" notification and rebinding
13
+ * the underlying watch handle. Without it the tasks panel goes deaf
14
+ * to changes the user makes outside the app after the first save.
15
+ *
16
+ * We intentionally do NOT set `awaitWriteFinish` here. It would help
17
+ * even more on Windows (waits for the file size to stabilise before
18
+ * emitting), but it also throttles every emission by `stabilityThreshold`
19
+ * — clashing with continuous-write workflows (a worker streaming
20
+ * updates into tasks.md every 100ms would never see an emit). The
21
+ * `atomic` option alone covers atomic-save; if a future workspace
22
+ * needs stronger settling behaviour we can promote it then.
23
+ *
24
+ * Exported so the configuration is testable in isolation.
25
+ */
26
+ export declare const TASKS_WATCHER_OPTIONS: ChokidarOptions;
1
27
  export interface TasksFileWatcher {
2
28
  close: () => Promise<void>;
3
29
  start: (workspaceId: string, workspacePath: string) => Promise<void>;
@@ -3,6 +3,34 @@ import { readFile } from 'node:fs/promises';
3
3
  import chokidar from 'chokidar';
4
4
  import { ensureProtocolFile, ensureTasksFile, getTasksFilePath } from './tasks-file.js';
5
5
  const DEBOUNCE_MS = 100;
6
+ /**
7
+ * Watcher configuration. The atomic-save option matters on Windows: VS
8
+ * Code, Cursor, Notepad++, and the editor inside Hive itself all save
9
+ * by writing a temp file and renaming it over the target. On
10
+ * ReadDirectoryChangesW (Windows' native fs-event backend) that rename
11
+ * invalidates the file-handle the chokidar watcher held for the
12
+ * single-file path, and subsequent edits would emit no events at all.
13
+ *
14
+ * `atomic: 100` tells chokidar to correlate an unlink+add pair within
15
+ * a 100ms window as a single `change` event — collapsing the rename
16
+ * into one logical "the file was modified" notification and rebinding
17
+ * the underlying watch handle. Without it the tasks panel goes deaf
18
+ * to changes the user makes outside the app after the first save.
19
+ *
20
+ * We intentionally do NOT set `awaitWriteFinish` here. It would help
21
+ * even more on Windows (waits for the file size to stabilise before
22
+ * emitting), but it also throttles every emission by `stabilityThreshold`
23
+ * — clashing with continuous-write workflows (a worker streaming
24
+ * updates into tasks.md every 100ms would never see an emit). The
25
+ * `atomic` option alone covers atomic-save; if a future workspace
26
+ * needs stronger settling behaviour we can promote it then.
27
+ *
28
+ * Exported so the configuration is testable in isolation.
29
+ */
30
+ export const TASKS_WATCHER_OPTIONS = {
31
+ atomic: 100,
32
+ ignoreInitial: true,
33
+ };
6
34
  export const createTasksFileWatcher = ({ onTasksUpdated, }) => {
7
35
  const watchers = new Map();
8
36
  const timers = new Map();
@@ -39,9 +67,7 @@ export const createTasksFileWatcher = ({ onTasksUpdated, }) => {
39
67
  await stop(workspaceId);
40
68
  ensureTasksFile(workspacePath);
41
69
  ensureProtocolFile(workspacePath);
42
- const watcher = chokidar.watch(getTasksFilePath(workspacePath), {
43
- ignoreInitial: true,
44
- });
70
+ const watcher = chokidar.watch(getTasksFilePath(workspacePath), TASKS_WATCHER_OPTIONS);
45
71
  const scheduleEmit = () => {
46
72
  clearTimer(workspaceId);
47
73
  timers.set(workspaceId, setTimeout(() => {
@@ -1,7 +1,9 @@
1
+ import type { TeamListItem } from '../shared/types.js';
1
2
  import type { AgentRuntime } from './agent-runtime.js';
2
3
  import type { DispatchRecord } from './dispatch-ledger-store.js';
3
4
  import type { MessageLogHandle, MessageLogRecord } from './message-log-store.js';
4
5
  import type { WorkspaceStore } from './workspace-store.js';
6
+ export declare const formatUnknownWorkerError: (workerName: string, roster: readonly TeamListItem[]) => string;
5
7
  export interface TeamOperationsInput {
6
8
  agentRuntime: AgentRuntime;
7
9
  createDispatch: (input: {
@@ -62,7 +64,9 @@ export declare const createTeamOperations: ({ agentRuntime, createDispatch, dele
62
64
  forwarded: boolean;
63
65
  };
64
66
  dispatchTask: (workspaceId: string, workerId: string, text: string, input?: DispatchTaskInput) => Promise<DispatchRecord>;
65
- dispatchTaskByWorkerName(workspaceId: string, workerName: string, text: string, input?: DispatchTaskInput): Promise<DispatchRecord>;
67
+ dispatchTaskByWorkerName(workspaceId: string, workerName: string, text: string, input?: DispatchTaskInput): Promise<DispatchRecord & {
68
+ restartedWorker: boolean;
69
+ }>;
66
70
  recordUserInput(workspaceId: string, orchestratorId: string, text: string): void;
67
71
  statusTask(workspaceId: string, workerId: string, input?: StatusTaskInput): {
68
72
  dispatch: null;
@@ -1,5 +1,27 @@
1
1
  import { ConflictError, PtyInactiveError } from './http-errors.js';
2
2
  import { createReportMessage, createSendMessage, createStatusMessage, createUserInputMessage, } from './runtime-message-builders.js';
3
+ /* Roster snapshot embedded in the 409 the orchestrator sees when it
4
+ dispatches to a missing name. Format prioritizes the orchestrator's
5
+ parsing path: bullet-per-member with role + live status + pending
6
+ count, plus an explicit retry hint that names both fix-up paths
7
+ (direct send to a listed name, or re-`team list` if it doubts the
8
+ snapshot). Keeping role/status/pending inline saves a follow-up
9
+ `team list` round-trip — the orchestrator can re-pick in the same
10
+ turn. */
11
+ export const formatUnknownWorkerError = (workerName, roster) => {
12
+ if (roster.length === 0) {
13
+ return [
14
+ `Unknown worker "${workerName}": this workspace currently has no workers.`,
15
+ 'Ask the user to add a worker in the Hive UI (Add Worker), then run `team list` and retry.',
16
+ ].join('\n');
17
+ }
18
+ const lines = roster.map((entry) => ` - ${entry.name} (${entry.role}, ${entry.status}, ${entry.pendingTaskCount} pending)`);
19
+ return [
20
+ `Unknown worker "${workerName}" in this workspace. Current members:`,
21
+ ...lines,
22
+ 'Retry with `team send "<one of the names above>" "<task>"`, or run `team list` to refresh the roster.',
23
+ ].join('\n');
24
+ };
3
25
  const reportForwardErrorMessage = (error) => error instanceof Error ? error.message : String(error);
4
26
  export const createTeamOperations = ({ agentRuntime, createDispatch, deleteDispatch, deleteMessage, findOpenDispatch, findOpenDispatchById, insertMessage, markDispatchCancelled, markDispatchReportedByWorker, markDispatchSubmitted, workspaceStore, }) => {
5
27
  const ensureWorkerRun = async (workspaceId, workerId, hivePort) => {
@@ -82,9 +104,28 @@ export const createTeamOperations = ({ agentRuntime, createDispatch, deleteDispa
82
104
  return { dispatch, forwardError, forwarded };
83
105
  },
84
106
  dispatchTask,
85
- dispatchTaskByWorkerName(workspaceId, workerName, text, input = {}) {
86
- const worker = workspaceStore.getWorkerByName(workspaceId, workerName);
87
- return dispatchTask(workspaceId, worker.id, text, input);
107
+ async dispatchTaskByWorkerName(workspaceId, workerName, text, input = {}) {
108
+ /* Build the roster once so a missing-name path can surface it without
109
+ a second store call. We deliberately don't go through
110
+ `getWorkerByName` because its underlying record helper throws a
111
+ bare Error — that bubbles as HTTP 500 and looks like a server bug
112
+ to the orchestrator, instead of the self-healing 409 we want. */
113
+ const roster = workspaceStore.listWorkers(workspaceId);
114
+ const worker = roster.find((entry) => entry.name === workerName);
115
+ if (!worker) {
116
+ throw new ConflictError(formatUnknownWorkerError(workerName, roster));
117
+ }
118
+ /* Capture the active-run state *before* dispatchTask runs, because
119
+ dispatchTask calls ensureWorkerRun on authenticated team-send calls
120
+ and may silently auto-start a stopped worker. Surfacing
121
+ `restartedWorker=true` to the orchestrator turns that silent state
122
+ change into a transparent one. Internal calls without `fromAgentId`
123
+ only queue work and do not wake a PTY, so they must not report a
124
+ restart. */
125
+ const restartedWorker = input.fromAgentId !== undefined &&
126
+ !agentRuntime.getActiveRunByAgentId(workspaceId, worker.id);
127
+ const dispatch = await dispatchTask(workspaceId, worker.id, text, input);
128
+ return Object.assign(dispatch, { restartedWorker });
88
129
  },
89
130
  recordUserInput(workspaceId, orchestratorId, text) {
90
131
  workspaceStore.getAgent(workspaceId, orchestratorId);
@@ -1,15 +1,9 @@
1
- import { basename } from 'node:path';
2
- const normalizeExecutable = (value) => {
3
- if (!value)
4
- return null;
5
- const normalized = basename(value).toLowerCase();
6
- return normalized.replace(/\.(cmd|exe)$/u, '');
7
- };
1
+ import { normalizeExecutableToken } from './startup-command-parser.js';
8
2
  export const resolveTerminalInputProfile = (config) => {
9
3
  if (!config)
10
4
  return 'default';
11
5
  if (config.commandPresetId === 'opencode')
12
6
  return 'opencode';
13
- const executable = normalizeExecutable(config.interactiveCommand) ?? normalizeExecutable(config.command);
7
+ const executable = normalizeExecutableToken(config.interactiveCommand) ?? normalizeExecutableToken(config.command);
14
8
  return executable === 'opencode' ? 'opencode' : 'default';
15
9
  };
@@ -43,6 +43,26 @@ export const createTerminalWebSocketServer = (server, store, tasksFileService) =
43
43
  const token = readCookie(cookieHeader, 'hive_ui_token');
44
44
  return store.validateUiToken(token);
45
45
  };
46
+ let closed = false;
47
+ const closeAll = () => {
48
+ if (closed)
49
+ return;
50
+ closed = true;
51
+ // Order matters: dispose the publisher first so no new frames are
52
+ // queued onto sockets that are about to be torn down. Then forcibly
53
+ // terminate any open WS clients (terminate() skips the close
54
+ // handshake, which is what we need — a polite ws.close() would wait
55
+ // on the remote side and re-introduce the hang we're fixing).
56
+ disposeTasksListener();
57
+ for (const ws of ioWss.clients)
58
+ ws.terminate();
59
+ for (const ws of controlWss.clients)
60
+ ws.terminate();
61
+ tasksWss.close();
62
+ ioWss.close();
63
+ controlWss.close();
64
+ hub.close();
65
+ };
46
66
  server.on('upgrade', (request, socket, head) => {
47
67
  const url = new URL(request.url ?? '/', 'http://127.0.0.1');
48
68
  const pathname = url.pathname;
@@ -78,12 +98,10 @@ export const createTerminalWebSocketServer = (server, store, tasksFileService) =
78
98
  hub.attachControl(match.runId, clientId, ws, getInitialSize(url));
79
99
  });
80
100
  });
81
- server.on('close', () => {
82
- disposeTasksListener();
83
- hub.close();
84
- ioWss.close();
85
- controlWss.close();
86
- tasksWss.close();
87
- });
88
- return { close: () => hub.close() };
101
+ // Kept as an idempotent fallback for callers that drive
102
+ // `app.server.close()` directly (e.g. unit tests in tests/server/*)
103
+ // and never see the runHiveCommand close path. closeAll() is guarded
104
+ // by `closed` so calling both is a no-op.
105
+ server.on('close', closeAll);
106
+ return { close: closeAll };
89
107
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tt-a1i/hive",
3
- "version": "1.4.3",
3
+ "version": "1.4.4",
4
4
  "description": "Browser-native hive-mind for CLI coding agents — Claude Code, Codex, Gemini, and OpenCode collaborate as real PTY processes via a team protocol.",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@10.30.3",
@@ -64,7 +64,7 @@
64
64
  "release:dry": "pnpm check && pnpm build && pnpm test && pnpm pack:check && pnpm pack:smoke",
65
65
  "sync:marketplace": "node scripts/sync-marketplace.mjs",
66
66
  "test": "vitest run",
67
- "test:windows": "vitest run tests/unit/agent-command-resolver.test.ts tests/unit/session-capture-multi-cli.test.ts tests/unit/claude-session-support.test.ts tests/unit/worker-name-generator.test.ts tests/unit/open-target-commands.test.ts tests/unit/sw-template-substitution.test.ts tests/unit/build-sw-plugin.test.ts tests/server/fs-pick-folder.test.ts tests/server/fs-browse.test.ts tests/server/schema-version.test.ts tests/server/runtime-rehydration.test.ts tests/server/open-workspace-route.test.ts tests/server/static-pwa.test.ts tests/web/workspace-picker.test.tsx tests/web/confirm-dialog.test.tsx tests/web/toast.test.tsx tests/web/open-workspace-button.test.tsx tests/web/register-service-worker.test.ts tests/web/use-shortcut-action.test.ts tests/web/update-available-toast.test.tsx tests/web/runtime-offline-page.test.tsx tests/web/use-terminal-panel-height.test.ts tests/web/use-terminal-panel-tabs.test.ts tests/web/terminal-tabs.test.tsx tests/web/terminal-bottom-panel.test.tsx --no-file-parallelism --maxWorkers=1 --testTimeout=60000 --hookTimeout=60000",
67
+ "test:windows": "vitest run tests/unit/agent-command-resolver.test.ts tests/unit/agent-launch-resolver.test.ts tests/unit/format-port-in-use.test.ts tests/unit/opencode-db-path.test.ts tests/unit/post-start-input-writer.test.ts tests/unit/session-capture-multi-cli.test.ts tests/unit/startup-command-parser.test.ts tests/unit/claude-session-support.test.ts tests/unit/taskkill-process-tree.test.ts tests/unit/team-cmd-shim.test.ts tests/unit/terminal-input-profile.test.ts tests/unit/worker-name-generator.test.ts tests/unit/open-target-commands.test.ts tests/unit/sw-template-substitution.test.ts tests/unit/build-sw-plugin.test.ts tests/server/fs-pick-folder.test.ts tests/server/fs-browse.test.ts tests/server/schema-version.test.ts tests/server/runtime-rehydration.test.ts tests/server/open-workspace-route.test.ts tests/server/static-pwa.test.ts tests/web/is-standalone.test.ts tests/web/path-join.test.ts tests/web/workspace-picker.test.tsx tests/web/confirm-dialog.test.tsx tests/web/toast.test.tsx tests/web/open-workspace-button.test.tsx tests/web/register-service-worker.test.ts tests/web/use-shortcut-action.test.ts tests/web/update-available-toast.test.tsx tests/web/runtime-offline-page.test.tsx tests/web/use-terminal-panel-height.test.ts tests/web/use-terminal-panel-tabs.test.ts tests/web/terminal-tabs.test.tsx tests/web/terminal-bottom-panel.test.tsx --no-file-parallelism --maxWorkers=1 --testTimeout=60000 --hookTimeout=60000",
68
68
  "test:watch": "vitest"
69
69
  },
70
70
  "dependencies": {
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/MarketplaceDrawer-B_8aG2uT.js","assets/index-Cn8X3get.js","assets/index-BEsTmfrO.css"])))=>i.map(i=>d[i]);
2
- import{c as W,j as e,u as j,r as c,e as z,i as M,m as X,z as Y,A as Z,B as R,F as ee,G as te,a as ae,P as re,O as se,C as ne,b as le,D as oe,d as ie,_ as de}from"./index-Cn8X3get.js";const ce=[["path",{d:"M12 7v6",key:"lw1j43"}],["path",{d:"M15 10H9",key:"o6yqo3"}],["path",{d:"M17 3a2 2 0 0 1 2 2v15a1 1 0 0 1-1.496.868l-4.512-2.578a2 2 0 0 0-1.984 0l-4.512 2.578A1 1 0 0 1 5 20V5a2 2 0 0 1 2-2z",key:"oz39mx"}]],ue=W("bookmark-plus",ce);const xe=[["rect",{width:"12",height:"12",x:"2",y:"10",rx:"2",ry:"2",key:"6agr2n"}],["path",{d:"m17.92 14 3.5-3.5a2.24 2.24 0 0 0 0-3l-5-4.92a2.24 2.24 0 0 0-3 0L10 6",key:"1o487t"}],["path",{d:"M6 18h.01",key:"uhywen"}],["path",{d:"M10 14h.01",key:"ssrbsk"}],["path",{d:"M15 6h.01",key:"cblpky"}],["path",{d:"M18 9h.01",key:"2061c0"}]],me=W("dices",xe);const pe=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],he=W("search",pe);const fe=[["path",{d:"m7 11 2-2-2-2",key:"1lz0vl"}],["path",{d:"M11 13h4",key:"1p7l4v"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}]],be=W("square-terminal",fe);const ge=[["path",{d:"M15 21v-5a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v5",key:"slp6dd"}],["path",{d:"M17.774 10.31a1.12 1.12 0 0 0-1.549 0 2.5 2.5 0 0 1-3.451 0 1.12 1.12 0 0 0-1.548 0 2.5 2.5 0 0 1-3.452 0 1.12 1.12 0 0 0-1.549 0 2.5 2.5 0 0 1-3.77-3.248l2.889-4.184A2 2 0 0 1 7 2h10a2 2 0 0 1 1.653.873l2.895 4.192a2.5 2.5 0 0 1-3.774 3.244",key:"o0xfot"}],["path",{d:"M4 10.95V19a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8.05",key:"wn3emo"}]],ke=W("store",ge),ve=[{value:"coder"},{value:"reviewer"},{value:"tester"},{value:"custom",dashed:!0}],F=t=>`role.${t}`,C=({children:t})=>e.jsx("span",{className:"text-sm font-medium text-sec",children:t}),je=({active:t,spec:a,onSelect:l})=>{const{t:n}=j();return e.jsxs("button",{type:"button",onClick:l,"aria-pressed":t,"data-testid":`role-card-${a.value}`,className:`selectable-card${a.dashed?" selectable-card--dashed":""} flex items-center gap-3 px-3 py-2`,children:[e.jsx(R,{role:a.value,size:20}),e.jsx("span",{className:"flex-1 text-left text-base font-medium text-pri",children:n(F(a.value))}),t?e.jsx(M,{size:14,className:"shrink-0 text-accent","aria-hidden":!0}):null]})},ye=({onRoleChange:t,workerRole:a})=>{const{t:l}=j();return e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(C,{children:l("addWorker.role")}),e.jsx("div",{className:"grid grid-cols-2 gap-2",children:ve.map(n=>e.jsx(je,{active:a===n.value,spec:n,onSelect:()=>t(n.value)},n.value))})]})},Ne=({customTemplates:t,disabledReason:a,onDeleteTemplate:l,onSelect:n,selectedTemplateId:i})=>{const{t:o}=j(),[f,x]=c.useState(!1),[m,u]=c.useState(""),[b,k]=c.useState(null),y=c.useRef(null),g=c.useMemo(()=>t.find(r=>r.id===i)??null,[t,i]),v=c.useMemo(()=>{const r=m.trim().toLowerCase();return r?t.filter(s=>s.name.toLowerCase().includes(r)||s.description.toLowerCase().includes(r)):t},[t,m]);return c.useEffect(()=>{if(!f)return;const r=h=>{h.key==="Escape"&&x(!1)},s=h=>{const w=y.current;w&&!w.contains(h.target)&&x(!1)};return document.addEventListener("keydown",r),document.addEventListener("pointerdown",s),()=>{document.removeEventListener("keydown",r),document.removeEventListener("pointerdown",s)}},[f]),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(C,{children:o("addWorker.template")}),e.jsxs("div",{ref:y,className:"relative",children:[e.jsxs("button",{type:"button","aria-haspopup":"listbox","aria-expanded":f,"data-testid":"role-template-picker-trigger",onClick:()=>x(r=>!r),className:"flex w-full items-center justify-between gap-2 rounded border px-3 py-2 text-left text-sm transition-colors hover:bg-3",style:{borderColor:"var(--border)",background:"var(--bg-1)"},children:[e.jsx("span",{className:"min-w-0 flex-1 truncate text-pri",children:g?g.name:o("addWorker.templatePickPlaceholder")}),e.jsx(z,{size:14,className:"shrink-0 text-ter","aria-hidden":!0})]}),f?e.jsxs("div",{role:"listbox","aria-label":o("addWorker.template"),"data-testid":"role-template-picker-menu",className:"elev-2 absolute left-0 right-0 top-full z-30 mt-1 flex max-h-72 flex-col overflow-hidden rounded border",style:{background:"var(--bg-elevated)",borderColor:"var(--border-bright)"},children:[e.jsxs("div",{className:"flex items-center gap-2 border-b px-2 py-1.5",style:{borderColor:"var(--border)"},children:[e.jsx(he,{size:14,className:"text-ter","aria-hidden":!0}),e.jsx("input",{value:m,onChange:r=>u(r.currentTarget.value),placeholder:o("addWorker.templateSearchPlaceholder"),"data-testid":"role-template-search-input",className:"w-full bg-transparent text-sm text-pri outline-none placeholder:text-ter",spellCheck:!1})]}),e.jsx("div",{className:"flex-1 overflow-y-auto py-1",children:t.length===0?e.jsx("div",{"data-testid":"role-template-empty-state",className:"px-3 py-3 text-center text-sm text-ter",children:o("addWorker.templateEmpty")}):v.length===0?e.jsx("div",{className:"px-3 py-3 text-center text-sm text-ter",children:o("addWorker.templateNoMatch")}):v.map(r=>{const s=r.id===i;return e.jsxs("div",{className:"relative",children:[e.jsxs("button",{type:"button",role:"option","aria-selected":s,"data-testid":`role-template-option-${r.id}`,onClick:()=>{n(r.id),x(!1),u("")},className:"flex w-full items-center gap-2 px-3 py-1.5 pr-9 text-left text-sm text-pri hover:bg-3",style:s?{background:"var(--bg-3)"}:void 0,children:[e.jsx("span",{className:"min-w-0 flex-1 truncate",children:r.name}),s?e.jsx(M,{size:14,className:"shrink-0 text-accent","aria-hidden":!0}):null]}),e.jsx("button",{type:"button","aria-label":o("addWorker.templateDeleteAria",{name:r.name}),"data-testid":`role-template-delete-${r.id}`,disabled:!!a,title:a??void 0,onClick:h=>{h.preventDefault(),h.stopPropagation(),!a&&k(r)},className:"absolute right-1 top-1/2 flex h-6 w-6 -translate-y-1/2 items-center justify-center rounded text-ter transition-colors hover:bg-3 hover:text-pri",children:e.jsx(X,{size:14,"aria-hidden":!0})})]},r.id)})}),i!==null?e.jsx("button",{type:"button","data-testid":"role-template-clear",onClick:()=>{n(null),x(!1),u("")},className:"border-t px-3 py-1.5 text-left text-sm text-ter transition-colors hover:bg-3 hover:text-pri",style:{borderColor:"var(--border)"},children:o("addWorker.templateClear")}):null]}):null]}),e.jsx(Y,{open:b!==null,onOpenChange:r=>{r||k(null)},title:o("addWorker.templateDeleteTitle"),description:b?o("addWorker.templateDeleteConfirm",{name:b.name}):"",confirmLabel:o("addWorker.templateDeleteConfirmLabel"),confirmKind:"danger",onConfirm:()=>{if(!b||a)return;const r=b.id;k(null),l(r)}})]})},Ce=({canSaveAsTemplate:t,modified:a,onChange:l,onReset:n,onSaveAsTemplate:i,roleDescription:o,templateBusy:f,workerRole:x,writeDisabledReason:m})=>{const{t:u}=j(),[b,k]=c.useState(!1),[y,g]=c.useState(!1),[v,r]=c.useState("");return c.useEffect(()=>{(x==="custom"||a)&&k(!0)},[a,x]),c.useEffect(()=>{t||(g(!1),r(""))},[t]),e.jsxs("details",{open:b,onToggle:s=>k(s.currentTarget.open),className:"group flex flex-col gap-2",children:[e.jsxs("summary",{className:"flex cursor-pointer select-none items-center justify-between gap-2 list-none",children:[e.jsxs("span",{className:"flex items-center gap-1.5",children:[e.jsx(z,{size:12,"aria-hidden":!0,className:"-rotate-90 text-ter transition-transform duration-150 group-open:rotate-0"}),e.jsx(C,{children:u("addWorker.roleInstructions")}),a?e.jsxs("span",{className:"text-sm text-ter",children:["· ",u("addWorker.modifiedFrom",{role:u(F(x))})]}):null]}),e.jsxs("div",{className:"flex items-center gap-1",children:[t&&!y?e.jsxs("button",{type:"button","data-testid":"role-template-save",disabled:!!m,title:m??void 0,onClick:s=>{s.preventDefault(),s.stopPropagation(),g(!0)},className:"flex items-center gap-1 rounded px-2 py-0.5 text-xs font-medium transition-colors hover:opacity-80 disabled:cursor-not-allowed disabled:opacity-50",style:{color:"var(--accent)",background:"color-mix(in oklab, var(--accent) 14%, transparent)"},children:[e.jsx(ue,{size:12,"aria-hidden":!0}),u("addWorker.saveAsTemplate")]}):null,a?e.jsxs("button",{type:"button",className:"flex items-center gap-1 rounded px-1.5 py-0.5 text-xs text-ter transition-colors hover:bg-3 hover:text-sec",onClick:s=>{s.preventDefault(),s.stopPropagation(),n()},children:[e.jsx(Z,{size:12,"aria-hidden":!0}),u("addWorker.reset")]}):null]})]}),e.jsx("textarea",{"aria-label":"Role instructions",id:"add-worker-role-instructions",value:o,rows:5,onChange:s=>l(s.currentTarget.value),placeholder:x==="custom"?u("addWorker.customPlaceholder"):void 0,title:u("addWorker.roleInstructionsTitle"),className:"input mono resize-y text-sm",style:{minHeight:150},"data-testid":"role-instructions-textarea"}),t&&y?e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{autoFocus:!0,value:v,onChange:s=>r(s.currentTarget.value),placeholder:u("addWorker.templateNamePlaceholder"),"data-testid":"role-template-save-name",className:"input flex-1 text-sm"}),e.jsx("button",{type:"button",disabled:f||!v.trim()||!!m,title:m??void 0,"data-testid":"role-template-save-confirm",onClick:async()=>{if(m)return;const s=v.trim();if(s)try{await i(s),g(!1),r("")}catch{}},className:"icon-btn icon-btn--primary text-xs",children:u("addWorker.templateSaveConfirm")}),e.jsx("button",{type:"button","data-testid":"role-template-save-cancel",onClick:()=>{g(!1),r("")},className:"icon-btn text-xs",children:u("common.cancel")})]}):null]})},D=({active:t,command:a,displayName:l,logoPresetId:n,notFound:i=!1,testId:o,onSelect:f})=>{const{t:x}=j(),m=e.jsx("span",{className:"inline-flex h-5 w-5 shrink-0 items-center justify-center rounded border border-border bg-surface-1 text-ter","data-testid":`${o}-generic-icon`,"aria-hidden":!0,children:e.jsx(be,{size:13})});return e.jsxs("button",{type:"button",onClick:f,"aria-pressed":t,"data-testid":o,className:"selectable-card flex items-center justify-between gap-3 px-3 py-2",children:[e.jsxs("span",{className:"flex min-w-0 items-center gap-3",children:[e.jsx(ee,{commandPresetId:n,fallback:m,size:22}),e.jsxs("span",{className:"flex min-w-0 flex-col items-start gap-0.5",children:[e.jsx("span",{className:"truncate text-base font-medium text-pri",children:l}),e.jsxs("span",{className:"mono truncate text-xs text-ter",children:[a,i?` · ${x("addWorker.agentNotFound")}`:""]})]})]}),t?e.jsx(M,{size:14,className:"shrink-0 text-accent","aria-hidden":!0}):null]})},We=({active:t,preset:a,onSelect:l})=>e.jsx(D,{active:t,command:a.command,displayName:a.displayName,logoPresetId:a.id,notFound:a.available===!1,testId:`agent-radio-${a.id}`,onSelect:l}),we=({commandPresetId:t,commandPresets:a,onPresetChange:l})=>e.jsx(Se,{commandPresetId:t,commandPresets:a,onPresetChange:l}),Se=({commandPresetId:t,commandPresets:a,onPresetChange:l})=>{const{t:n}=j();return e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(C,{children:n("addWorker.agentCli")}),a.length===0?e.jsx("div",{className:"text-sm text-ter",children:n("addWorker.loadingPresets")}):e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[a.map(i=>e.jsx(We,{active:t===i.id,preset:i,onSelect:()=>l(i.id)},i.id)),e.jsx(D,{active:t==="",command:n("addWorker.genericCommand"),displayName:n("addWorker.genericAgent"),testId:"agent-radio-generic",onSelect:()=>l("")})]})]})},ze=({onChange:t,value:a})=>{const{t:l}=j(),n=a.trim();return e.jsxs("details",{className:"group flex flex-col gap-2",children:[e.jsx("summary",{className:"flex cursor-pointer select-none items-center justify-between gap-2 list-none",children:e.jsxs("span",{className:"flex min-w-0 items-center gap-1.5",children:[e.jsx(z,{size:12,"aria-hidden":!0,className:"-rotate-90 shrink-0 text-ter transition-transform duration-150 group-open:rotate-0"}),e.jsx(C,{children:l("addWorker.startupCommand")}),n?e.jsxs("span",{className:"truncate text-sm text-ter",children:["· ",l("addWorker.startupOverrides")]}):null]})}),e.jsxs("div",{className:"flex flex-col gap-2 rounded border bg-2 p-3",style:{borderColor:"var(--border)"},children:[e.jsx("input",{"aria-label":"Startup command",value:a,onChange:i=>t(i.currentTarget.value),placeholder:"qwen --model qwen3-coder",className:"input mono text-sm",spellCheck:!1}),e.jsx("p",{className:"text-sm leading-5 text-ter",children:l("addWorker.startupHelp",{example:"claude --resume <session-id>"})})]})]})},Me=c.lazy(()=>de(()=>import("./MarketplaceDrawer-B_8aG2uT.js"),__vite__mapDeps([0,1,2])).then(t=>({default:t.MarketplaceDrawer}))),_e=({commandPresets:t,commandPresetId:a,creating:l=!1,customTemplates:n,onApplyMarketplaceImport:i,onClose:o,onDeleteTemplate:f,onNameChange:x,onPresetChange:m,onRandomName:u,onRoleDescriptionChange:b,onRoleDescriptionReset:k,onRoleChange:y,onSaveAsTemplate:g,onStartupCommandChange:v,onSubmit:r,onTemplateChange:s,roleDescription:h,roleDescriptionDefault:w,selectedTemplateId:_,startupCommand:P,templateBusy:I,workerName:A,workerRole:S,writeDisabledReason:N})=>{const{t:d}=j(),L=te(),[B,O]=c.useState(!1),[q,H]=c.useState(!1),K=c.useMemo(()=>new Set(n.map(p=>p.name)),[n]),V=p=>{i(p),L.show({kind:"success",message:d("marketplace.imported",{name:p.name})})},G=p=>{p||o()},Q=h!==w,E=t.find(p=>p.id===a),$=P.trim(),J=()=>N||(A.trim()?!a&&!$?d("addWorker.pickCliOrStartup"):E?.available===!1&&!$?d("addWorker.unavailable",{name:E.displayName}):h.trim()?null:d("addWorker.emptyInstructions"):d("addWorker.enterName")),U=p=>{const T=J();if(T){p.preventDefault(),L.show({kind:"warning",message:T});return}r(p)};return e.jsxs(ae,{open:!0,onOpenChange:G,children:[e.jsxs(re,{children:[e.jsx(se,{"data-testid":"add-worker-overlay",className:"app-overlay fixed inset-0 z-40"}),e.jsx("div",{className:"pointer-events-none fixed inset-0 z-50 grid place-items-center p-4",children:e.jsx(ne,{"data-testid":"add-worker-content",className:"dialog-scale-pop elev-2 pointer-events-auto flex max-h-[calc(100vh-32px)] w-[560px] max-w-full flex-col rounded-lg border",style:{background:"var(--bg-elevated)",borderColor:"var(--border-bright)"},children:e.jsxs("form",{onSubmit:U,"aria-label":d("addWorker.title"),className:"flex flex-col",children:[e.jsxs("div",{className:"flex shrink-0 flex-col gap-0.5 border-b px-5 py-4",style:{borderColor:"var(--border)"},children:[e.jsx(le,{className:"text-lg font-semibold text-pri",children:d("addWorker.title")}),e.jsx(oe,{className:"text-sm text-ter",children:d("addWorker.description",{command:"team send"})})]}),e.jsxs("div",{className:"flex flex-col gap-4 overflow-y-auto px-5 py-4",children:[e.jsxs("label",{className:"flex flex-col gap-2",children:[e.jsxs("div",{className:"flex items-baseline justify-between gap-2",children:[e.jsx(C,{children:d("addWorker.name")}),e.jsx(ie,{label:d("addWorker.randomTooltip"),children:e.jsxs("button",{type:"button","aria-label":d("addWorker.randomAria"),className:"flex cursor-pointer items-center gap-1 rounded px-1.5 py-0.5 text-xs text-ter transition-colors hover:bg-3 hover:text-sec",onClick:u,"data-testid":"random-worker-name",children:[e.jsx(me,{size:12,"aria-hidden":!0}),d("addWorker.random")]})})]}),e.jsx("input",{autoFocus:!0,value:A,onChange:p=>x(p.target.value),placeholder:d("addWorker.namePlaceholder"),className:"input"})]}),e.jsx(ye,{workerRole:S,onRoleChange:y}),e.jsxs("button",{type:"button",onClick:()=>{H(!0),O(!0)},"data-testid":"open-marketplace",className:"marketplace-browse-btn flex cursor-pointer items-center gap-2 self-start rounded-md border px-3 py-1.5 text-xs text-sec outline-none transition-colors focus-visible:ring-2",style:{background:"var(--bg-0)",borderColor:"var(--border-bright)","--tw-ring-color":"color-mix(in oklab, var(--accent) 45%, transparent)"},children:[e.jsx(ke,{size:14,"aria-hidden":!0}),d("marketplace.openFromAddWorker")]}),S==="custom"?e.jsx(Ne,{customTemplates:n,disabledReason:N,onDeleteTemplate:f,onSelect:s,selectedTemplateId:_}):null,e.jsx(Ce,{canSaveAsTemplate:S==="custom"&&!_&&h.trim().length>0,modified:Q,onChange:b,onReset:k,onSaveAsTemplate:g,roleDescription:h,templateBusy:I,workerRole:S,writeDisabledReason:N}),e.jsx(we,{commandPresetId:a,commandPresets:t,onPresetChange:m}),e.jsx(ze,{value:P,onChange:v})]}),e.jsxs("div",{className:"flex shrink-0 items-center justify-end gap-2 border-t px-5 py-3",style:{borderColor:"var(--border)",background:"var(--bg-2)"},children:[e.jsx("button",{type:"button",onClick:o,className:"icon-btn","data-testid":"add-worker-cancel",children:d("addWorker.cancel")}),e.jsx("button",{type:"submit",disabled:l||!!N,title:N??void 0,className:"icon-btn icon-btn--primary","data-testid":"add-worker-submit",children:d(l?"addWorker.creating":"addWorker.create")})]})]})})})]}),q?e.jsx(c.Suspense,{fallback:null,children:e.jsx(Me,{open:B,onClose:()=>O(!1),onImport:V,importedNames:K})}):null]})},Ae=Object.freeze(Object.defineProperty({__proto__:null,AddWorkerDialog:_e},Symbol.toStringTag,{value:"Module"}));export{Ae as A,he as S};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/MarketplaceDrawer-BC0eBOEW.js","assets/index-Ddb7bDN5.js","assets/index-BEsTmfrO.css"])))=>i.map(i=>d[i]);
2
+ import{c as W,j as e,u as j,r as c,e as z,i as M,m as X,z as Y,A as Z,B as R,F as ee,G as te,a as ae,P as re,O as se,C as ne,b as le,D as oe,d as ie,_ as de}from"./index-Ddb7bDN5.js";const ce=[["path",{d:"M12 7v6",key:"lw1j43"}],["path",{d:"M15 10H9",key:"o6yqo3"}],["path",{d:"M17 3a2 2 0 0 1 2 2v15a1 1 0 0 1-1.496.868l-4.512-2.578a2 2 0 0 0-1.984 0l-4.512 2.578A1 1 0 0 1 5 20V5a2 2 0 0 1 2-2z",key:"oz39mx"}]],ue=W("bookmark-plus",ce);const xe=[["rect",{width:"12",height:"12",x:"2",y:"10",rx:"2",ry:"2",key:"6agr2n"}],["path",{d:"m17.92 14 3.5-3.5a2.24 2.24 0 0 0 0-3l-5-4.92a2.24 2.24 0 0 0-3 0L10 6",key:"1o487t"}],["path",{d:"M6 18h.01",key:"uhywen"}],["path",{d:"M10 14h.01",key:"ssrbsk"}],["path",{d:"M15 6h.01",key:"cblpky"}],["path",{d:"M18 9h.01",key:"2061c0"}]],me=W("dices",xe);const pe=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],he=W("search",pe);const fe=[["path",{d:"m7 11 2-2-2-2",key:"1lz0vl"}],["path",{d:"M11 13h4",key:"1p7l4v"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}]],be=W("square-terminal",fe);const ge=[["path",{d:"M15 21v-5a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v5",key:"slp6dd"}],["path",{d:"M17.774 10.31a1.12 1.12 0 0 0-1.549 0 2.5 2.5 0 0 1-3.451 0 1.12 1.12 0 0 0-1.548 0 2.5 2.5 0 0 1-3.452 0 1.12 1.12 0 0 0-1.549 0 2.5 2.5 0 0 1-3.77-3.248l2.889-4.184A2 2 0 0 1 7 2h10a2 2 0 0 1 1.653.873l2.895 4.192a2.5 2.5 0 0 1-3.774 3.244",key:"o0xfot"}],["path",{d:"M4 10.95V19a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8.05",key:"wn3emo"}]],ke=W("store",ge),ve=[{value:"coder"},{value:"reviewer"},{value:"tester"},{value:"custom",dashed:!0}],F=t=>`role.${t}`,C=({children:t})=>e.jsx("span",{className:"text-sm font-medium text-sec",children:t}),je=({active:t,spec:a,onSelect:l})=>{const{t:n}=j();return e.jsxs("button",{type:"button",onClick:l,"aria-pressed":t,"data-testid":`role-card-${a.value}`,className:`selectable-card${a.dashed?" selectable-card--dashed":""} flex items-center gap-3 px-3 py-2`,children:[e.jsx(R,{role:a.value,size:20}),e.jsx("span",{className:"flex-1 text-left text-base font-medium text-pri",children:n(F(a.value))}),t?e.jsx(M,{size:14,className:"shrink-0 text-accent","aria-hidden":!0}):null]})},ye=({onRoleChange:t,workerRole:a})=>{const{t:l}=j();return e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(C,{children:l("addWorker.role")}),e.jsx("div",{className:"grid grid-cols-2 gap-2",children:ve.map(n=>e.jsx(je,{active:a===n.value,spec:n,onSelect:()=>t(n.value)},n.value))})]})},Ne=({customTemplates:t,disabledReason:a,onDeleteTemplate:l,onSelect:n,selectedTemplateId:i})=>{const{t:o}=j(),[f,x]=c.useState(!1),[m,u]=c.useState(""),[b,k]=c.useState(null),y=c.useRef(null),g=c.useMemo(()=>t.find(r=>r.id===i)??null,[t,i]),v=c.useMemo(()=>{const r=m.trim().toLowerCase();return r?t.filter(s=>s.name.toLowerCase().includes(r)||s.description.toLowerCase().includes(r)):t},[t,m]);return c.useEffect(()=>{if(!f)return;const r=h=>{h.key==="Escape"&&x(!1)},s=h=>{const w=y.current;w&&!w.contains(h.target)&&x(!1)};return document.addEventListener("keydown",r),document.addEventListener("pointerdown",s),()=>{document.removeEventListener("keydown",r),document.removeEventListener("pointerdown",s)}},[f]),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(C,{children:o("addWorker.template")}),e.jsxs("div",{ref:y,className:"relative",children:[e.jsxs("button",{type:"button","aria-haspopup":"listbox","aria-expanded":f,"data-testid":"role-template-picker-trigger",onClick:()=>x(r=>!r),className:"flex w-full items-center justify-between gap-2 rounded border px-3 py-2 text-left text-sm transition-colors hover:bg-3",style:{borderColor:"var(--border)",background:"var(--bg-1)"},children:[e.jsx("span",{className:"min-w-0 flex-1 truncate text-pri",children:g?g.name:o("addWorker.templatePickPlaceholder")}),e.jsx(z,{size:14,className:"shrink-0 text-ter","aria-hidden":!0})]}),f?e.jsxs("div",{role:"listbox","aria-label":o("addWorker.template"),"data-testid":"role-template-picker-menu",className:"elev-2 absolute left-0 right-0 top-full z-30 mt-1 flex max-h-72 flex-col overflow-hidden rounded border",style:{background:"var(--bg-elevated)",borderColor:"var(--border-bright)"},children:[e.jsxs("div",{className:"flex items-center gap-2 border-b px-2 py-1.5",style:{borderColor:"var(--border)"},children:[e.jsx(he,{size:14,className:"text-ter","aria-hidden":!0}),e.jsx("input",{value:m,onChange:r=>u(r.currentTarget.value),placeholder:o("addWorker.templateSearchPlaceholder"),"data-testid":"role-template-search-input",className:"w-full bg-transparent text-sm text-pri outline-none placeholder:text-ter",spellCheck:!1})]}),e.jsx("div",{className:"flex-1 overflow-y-auto py-1",children:t.length===0?e.jsx("div",{"data-testid":"role-template-empty-state",className:"px-3 py-3 text-center text-sm text-ter",children:o("addWorker.templateEmpty")}):v.length===0?e.jsx("div",{className:"px-3 py-3 text-center text-sm text-ter",children:o("addWorker.templateNoMatch")}):v.map(r=>{const s=r.id===i;return e.jsxs("div",{className:"relative",children:[e.jsxs("button",{type:"button",role:"option","aria-selected":s,"data-testid":`role-template-option-${r.id}`,onClick:()=>{n(r.id),x(!1),u("")},className:"flex w-full items-center gap-2 px-3 py-1.5 pr-9 text-left text-sm text-pri hover:bg-3",style:s?{background:"var(--bg-3)"}:void 0,children:[e.jsx("span",{className:"min-w-0 flex-1 truncate",children:r.name}),s?e.jsx(M,{size:14,className:"shrink-0 text-accent","aria-hidden":!0}):null]}),e.jsx("button",{type:"button","aria-label":o("addWorker.templateDeleteAria",{name:r.name}),"data-testid":`role-template-delete-${r.id}`,disabled:!!a,title:a??void 0,onClick:h=>{h.preventDefault(),h.stopPropagation(),!a&&k(r)},className:"absolute right-1 top-1/2 flex h-6 w-6 -translate-y-1/2 items-center justify-center rounded text-ter transition-colors hover:bg-3 hover:text-pri",children:e.jsx(X,{size:14,"aria-hidden":!0})})]},r.id)})}),i!==null?e.jsx("button",{type:"button","data-testid":"role-template-clear",onClick:()=>{n(null),x(!1),u("")},className:"border-t px-3 py-1.5 text-left text-sm text-ter transition-colors hover:bg-3 hover:text-pri",style:{borderColor:"var(--border)"},children:o("addWorker.templateClear")}):null]}):null]}),e.jsx(Y,{open:b!==null,onOpenChange:r=>{r||k(null)},title:o("addWorker.templateDeleteTitle"),description:b?o("addWorker.templateDeleteConfirm",{name:b.name}):"",confirmLabel:o("addWorker.templateDeleteConfirmLabel"),confirmKind:"danger",onConfirm:()=>{if(!b||a)return;const r=b.id;k(null),l(r)}})]})},Ce=({canSaveAsTemplate:t,modified:a,onChange:l,onReset:n,onSaveAsTemplate:i,roleDescription:o,templateBusy:f,workerRole:x,writeDisabledReason:m})=>{const{t:u}=j(),[b,k]=c.useState(!1),[y,g]=c.useState(!1),[v,r]=c.useState("");return c.useEffect(()=>{(x==="custom"||a)&&k(!0)},[a,x]),c.useEffect(()=>{t||(g(!1),r(""))},[t]),e.jsxs("details",{open:b,onToggle:s=>k(s.currentTarget.open),className:"group flex flex-col gap-2",children:[e.jsxs("summary",{className:"flex cursor-pointer select-none items-center justify-between gap-2 list-none",children:[e.jsxs("span",{className:"flex items-center gap-1.5",children:[e.jsx(z,{size:12,"aria-hidden":!0,className:"-rotate-90 text-ter transition-transform duration-150 group-open:rotate-0"}),e.jsx(C,{children:u("addWorker.roleInstructions")}),a?e.jsxs("span",{className:"text-sm text-ter",children:["· ",u("addWorker.modifiedFrom",{role:u(F(x))})]}):null]}),e.jsxs("div",{className:"flex items-center gap-1",children:[t&&!y?e.jsxs("button",{type:"button","data-testid":"role-template-save",disabled:!!m,title:m??void 0,onClick:s=>{s.preventDefault(),s.stopPropagation(),g(!0)},className:"flex items-center gap-1 rounded px-2 py-0.5 text-xs font-medium transition-colors hover:opacity-80 disabled:cursor-not-allowed disabled:opacity-50",style:{color:"var(--accent)",background:"color-mix(in oklab, var(--accent) 14%, transparent)"},children:[e.jsx(ue,{size:12,"aria-hidden":!0}),u("addWorker.saveAsTemplate")]}):null,a?e.jsxs("button",{type:"button",className:"flex items-center gap-1 rounded px-1.5 py-0.5 text-xs text-ter transition-colors hover:bg-3 hover:text-sec",onClick:s=>{s.preventDefault(),s.stopPropagation(),n()},children:[e.jsx(Z,{size:12,"aria-hidden":!0}),u("addWorker.reset")]}):null]})]}),e.jsx("textarea",{"aria-label":"Role instructions",id:"add-worker-role-instructions",value:o,rows:5,onChange:s=>l(s.currentTarget.value),placeholder:x==="custom"?u("addWorker.customPlaceholder"):void 0,title:u("addWorker.roleInstructionsTitle"),className:"input mono resize-y text-sm",style:{minHeight:150},"data-testid":"role-instructions-textarea"}),t&&y?e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{autoFocus:!0,value:v,onChange:s=>r(s.currentTarget.value),placeholder:u("addWorker.templateNamePlaceholder"),"data-testid":"role-template-save-name",className:"input flex-1 text-sm"}),e.jsx("button",{type:"button",disabled:f||!v.trim()||!!m,title:m??void 0,"data-testid":"role-template-save-confirm",onClick:async()=>{if(m)return;const s=v.trim();if(s)try{await i(s),g(!1),r("")}catch{}},className:"icon-btn icon-btn--primary text-xs",children:u("addWorker.templateSaveConfirm")}),e.jsx("button",{type:"button","data-testid":"role-template-save-cancel",onClick:()=>{g(!1),r("")},className:"icon-btn text-xs",children:u("common.cancel")})]}):null]})},D=({active:t,command:a,displayName:l,logoPresetId:n,notFound:i=!1,testId:o,onSelect:f})=>{const{t:x}=j(),m=e.jsx("span",{className:"inline-flex h-5 w-5 shrink-0 items-center justify-center rounded border border-border bg-surface-1 text-ter","data-testid":`${o}-generic-icon`,"aria-hidden":!0,children:e.jsx(be,{size:13})});return e.jsxs("button",{type:"button",onClick:f,"aria-pressed":t,"data-testid":o,className:"selectable-card flex items-center justify-between gap-3 px-3 py-2",children:[e.jsxs("span",{className:"flex min-w-0 items-center gap-3",children:[e.jsx(ee,{commandPresetId:n,fallback:m,size:22}),e.jsxs("span",{className:"flex min-w-0 flex-col items-start gap-0.5",children:[e.jsx("span",{className:"truncate text-base font-medium text-pri",children:l}),e.jsxs("span",{className:"mono truncate text-xs text-ter",children:[a,i?` · ${x("addWorker.agentNotFound")}`:""]})]})]}),t?e.jsx(M,{size:14,className:"shrink-0 text-accent","aria-hidden":!0}):null]})},We=({active:t,preset:a,onSelect:l})=>e.jsx(D,{active:t,command:a.command,displayName:a.displayName,logoPresetId:a.id,notFound:a.available===!1,testId:`agent-radio-${a.id}`,onSelect:l}),we=({commandPresetId:t,commandPresets:a,onPresetChange:l})=>e.jsx(Se,{commandPresetId:t,commandPresets:a,onPresetChange:l}),Se=({commandPresetId:t,commandPresets:a,onPresetChange:l})=>{const{t:n}=j();return e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx(C,{children:n("addWorker.agentCli")}),a.length===0?e.jsx("div",{className:"text-sm text-ter",children:n("addWorker.loadingPresets")}):e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[a.map(i=>e.jsx(We,{active:t===i.id,preset:i,onSelect:()=>l(i.id)},i.id)),e.jsx(D,{active:t==="",command:n("addWorker.genericCommand"),displayName:n("addWorker.genericAgent"),testId:"agent-radio-generic",onSelect:()=>l("")})]})]})},ze=({onChange:t,value:a})=>{const{t:l}=j(),n=a.trim();return e.jsxs("details",{className:"group flex flex-col gap-2",children:[e.jsx("summary",{className:"flex cursor-pointer select-none items-center justify-between gap-2 list-none",children:e.jsxs("span",{className:"flex min-w-0 items-center gap-1.5",children:[e.jsx(z,{size:12,"aria-hidden":!0,className:"-rotate-90 shrink-0 text-ter transition-transform duration-150 group-open:rotate-0"}),e.jsx(C,{children:l("addWorker.startupCommand")}),n?e.jsxs("span",{className:"truncate text-sm text-ter",children:["· ",l("addWorker.startupOverrides")]}):null]})}),e.jsxs("div",{className:"flex flex-col gap-2 rounded border bg-2 p-3",style:{borderColor:"var(--border)"},children:[e.jsx("input",{"aria-label":"Startup command",value:a,onChange:i=>t(i.currentTarget.value),placeholder:"qwen --model qwen3-coder",className:"input mono text-sm",spellCheck:!1}),e.jsx("p",{className:"text-sm leading-5 text-ter",children:l("addWorker.startupHelp",{example:"claude --resume <session-id>"})})]})]})},Me=c.lazy(()=>de(()=>import("./MarketplaceDrawer-BC0eBOEW.js"),__vite__mapDeps([0,1,2])).then(t=>({default:t.MarketplaceDrawer}))),_e=({commandPresets:t,commandPresetId:a,creating:l=!1,customTemplates:n,onApplyMarketplaceImport:i,onClose:o,onDeleteTemplate:f,onNameChange:x,onPresetChange:m,onRandomName:u,onRoleDescriptionChange:b,onRoleDescriptionReset:k,onRoleChange:y,onSaveAsTemplate:g,onStartupCommandChange:v,onSubmit:r,onTemplateChange:s,roleDescription:h,roleDescriptionDefault:w,selectedTemplateId:_,startupCommand:P,templateBusy:I,workerName:A,workerRole:S,writeDisabledReason:N})=>{const{t:d}=j(),L=te(),[B,O]=c.useState(!1),[q,H]=c.useState(!1),K=c.useMemo(()=>new Set(n.map(p=>p.name)),[n]),V=p=>{i(p),L.show({kind:"success",message:d("marketplace.imported",{name:p.name})})},G=p=>{p||o()},Q=h!==w,E=t.find(p=>p.id===a),$=P.trim(),J=()=>N||(A.trim()?!a&&!$?d("addWorker.pickCliOrStartup"):E?.available===!1&&!$?d("addWorker.unavailable",{name:E.displayName}):h.trim()?null:d("addWorker.emptyInstructions"):d("addWorker.enterName")),U=p=>{const T=J();if(T){p.preventDefault(),L.show({kind:"warning",message:T});return}r(p)};return e.jsxs(ae,{open:!0,onOpenChange:G,children:[e.jsxs(re,{children:[e.jsx(se,{"data-testid":"add-worker-overlay",className:"app-overlay fixed inset-0 z-40"}),e.jsx("div",{className:"pointer-events-none fixed inset-0 z-50 grid place-items-center p-4",children:e.jsx(ne,{"data-testid":"add-worker-content",className:"dialog-scale-pop elev-2 pointer-events-auto flex max-h-[calc(100vh-32px)] w-[560px] max-w-full flex-col rounded-lg border",style:{background:"var(--bg-elevated)",borderColor:"var(--border-bright)"},children:e.jsxs("form",{onSubmit:U,"aria-label":d("addWorker.title"),className:"flex flex-col",children:[e.jsxs("div",{className:"flex shrink-0 flex-col gap-0.5 border-b px-5 py-4",style:{borderColor:"var(--border)"},children:[e.jsx(le,{className:"text-lg font-semibold text-pri",children:d("addWorker.title")}),e.jsx(oe,{className:"text-sm text-ter",children:d("addWorker.description",{command:"team send"})})]}),e.jsxs("div",{className:"flex flex-col gap-4 overflow-y-auto px-5 py-4",children:[e.jsxs("label",{className:"flex flex-col gap-2",children:[e.jsxs("div",{className:"flex items-baseline justify-between gap-2",children:[e.jsx(C,{children:d("addWorker.name")}),e.jsx(ie,{label:d("addWorker.randomTooltip"),children:e.jsxs("button",{type:"button","aria-label":d("addWorker.randomAria"),className:"flex cursor-pointer items-center gap-1 rounded px-1.5 py-0.5 text-xs text-ter transition-colors hover:bg-3 hover:text-sec",onClick:u,"data-testid":"random-worker-name",children:[e.jsx(me,{size:12,"aria-hidden":!0}),d("addWorker.random")]})})]}),e.jsx("input",{autoFocus:!0,value:A,onChange:p=>x(p.target.value),placeholder:d("addWorker.namePlaceholder"),className:"input"})]}),e.jsx(ye,{workerRole:S,onRoleChange:y}),e.jsxs("button",{type:"button",onClick:()=>{H(!0),O(!0)},"data-testid":"open-marketplace",className:"marketplace-browse-btn flex cursor-pointer items-center gap-2 self-start rounded-md border px-3 py-1.5 text-xs text-sec outline-none transition-colors focus-visible:ring-2",style:{background:"var(--bg-0)",borderColor:"var(--border-bright)","--tw-ring-color":"color-mix(in oklab, var(--accent) 45%, transparent)"},children:[e.jsx(ke,{size:14,"aria-hidden":!0}),d("marketplace.openFromAddWorker")]}),S==="custom"?e.jsx(Ne,{customTemplates:n,disabledReason:N,onDeleteTemplate:f,onSelect:s,selectedTemplateId:_}):null,e.jsx(Ce,{canSaveAsTemplate:S==="custom"&&!_&&h.trim().length>0,modified:Q,onChange:b,onReset:k,onSaveAsTemplate:g,roleDescription:h,templateBusy:I,workerRole:S,writeDisabledReason:N}),e.jsx(we,{commandPresetId:a,commandPresets:t,onPresetChange:m}),e.jsx(ze,{value:P,onChange:v})]}),e.jsxs("div",{className:"flex shrink-0 items-center justify-end gap-2 border-t px-5 py-3",style:{borderColor:"var(--border)",background:"var(--bg-2)"},children:[e.jsx("button",{type:"button",onClick:o,className:"icon-btn","data-testid":"add-worker-cancel",children:d("addWorker.cancel")}),e.jsx("button",{type:"submit",disabled:l||!!N,title:N??void 0,className:"icon-btn icon-btn--primary","data-testid":"add-worker-submit",children:d(l?"addWorker.creating":"addWorker.create")})]})]})})})]}),q?e.jsx(c.Suspense,{fallback:null,children:e.jsx(Me,{open:B,onClose:()=>O(!1),onImport:V,importedNames:K})}):null]})},Ae=Object.freeze(Object.defineProperty({__proto__:null,AddWorkerDialog:_e},Symbol.toStringTag,{value:"Module"}));export{Ae as A,he as S};
@@ -0,0 +1 @@
1
+ import{c as V,u as D,r as c,j as e,o as se,e as $,i as Z,a as T,P as I,O as q,C as U,b as W,D as K,q as ae,s as re,t as ne,X as ce,v as le,w as oe,T as ie}from"./index-Ddb7bDN5.js";import{C as L,d as de}from"./path-join-S7qkXQtP.js";const pe=[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]],xe=V("arrow-up",pe);const ue=[["path",{d:"M10.7 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v4.1",key:"1bw5m7"}],["path",{d:"m21 21-1.9-1.9",key:"1g2n9r"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}]],me=V("folder-search",ue);const he=[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]],X=V("folder",he);const fe=[["path",{d:"M15 6a9 9 0 0 0-9 9V3",key:"1cii5b"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}]],Q=V("git-branch",fe),ee=({error:t,onChange:o,presets:x,value:a})=>{const{t:i}=D(),[d,n]=c.useState(!1),s=c.useRef(null),p=x.find(l=>l.id===a),r=a==="",k=p?[p.command,...p.args].join(" ").trim():i(r?"workspace.preset.genericPreview":"workspace.preset.loading"),g=p?.displayName??(r?i("workspace.preset.generic"):"Claude Code (CC)"),j=x.length===0&&!r;return c.useEffect(()=>{if(!d)return;const l=f=>{s.current?.contains(f.target)||n(!1)},m=f=>{f.key==="Escape"&&n(!1)};return document.addEventListener("mousedown",l),document.addEventListener("keydown",m),()=>{document.removeEventListener("mousedown",l),document.removeEventListener("keydown",m)}},[d]),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-xs font-medium uppercase tracking-wider text-ter",children:i("workspace.preset.label")}),e.jsxs("div",{ref:s,className:"cli-select group relative",children:[e.jsx(se,{size:14,"aria-hidden":!0,className:"cli-select__leading"}),e.jsx("button",{type:"button","aria-haspopup":"listbox","aria-expanded":d,"aria-disabled":j||void 0,className:"cli-select__field cli-select__field--button text-left","data-testid":"workspace-command-preset","data-value":a,disabled:j,onClick:()=>n(l=>!l),children:g}),e.jsx($,{size:14,"aria-hidden":!0,className:"cli-select__trailing"}),d&&x.length>0?e.jsxs("div",{role:"listbox","aria-label":i("workspace.preset.optionsAria"),className:"cli-select__menu","data-testid":"workspace-command-preset-menu",children:[x.map(l=>{const m=l.id===a,f=l.available===!1;return e.jsxs("button",{type:"button",role:"option","aria-selected":m,"data-testid":`workspace-command-preset-option-${l.id}`,className:"cli-select__option",onClick:()=>{o(l.id),n(!1)},children:[e.jsx(Z,{size:12,"aria-hidden":!0,className:"cli-select__check",style:{opacity:m?1:0}}),e.jsxs("span",{children:[l.displayName,f?i("workspace.preset.notFoundSuffix"):""]})]},l.id)}),e.jsxs("button",{type:"button",role:"option","aria-selected":r,"data-testid":"workspace-command-preset-option-generic",className:"cli-select__option",onClick:()=>{o(""),n(!1)},children:[e.jsx(Z,{size:12,"aria-hidden":!0,className:"cli-select__check",style:{opacity:r?1:0}}),e.jsx("span",{children:i("workspace.preset.generic")})]})]}):null]}),e.jsxs("div",{className:"mono flex items-center gap-1.5 truncate text-xs text-ter",title:k,children:[e.jsx("span",{className:"text-sec",children:"$"}),e.jsx("span",{className:"truncate",children:k})]}),t?e.jsx("span",{className:"text-xs",style:{color:"var(--status-red)"},children:t}):null]})},G=t=>t.split(/[\\/]/).filter(Boolean).pop()??"",M=({children:t})=>e.jsx("span",{className:"text-xs font-medium uppercase tracking-wider text-ter",children:t}),be=({probe:t,pasteFallbackDefault:o=!1,commandPresetError:x,commandPresetId:a,commandPresets:i,onCancel:d,onCommandPresetChange:n,onCreate:s,onOpenServerBrowse:p})=>{const{t:r}=D(),k=t?.path??"",g=t?.suggested_name??G(k),[j,l]=c.useState(g),[m,f]=c.useState(""),[C,P]=c.useState(o),[w,E]=c.useState(!1),[_,h]=c.useState("");c.useEffect(()=>{l(t?.suggested_name??G(t?.path??""))},[t?.path,t?.suggested_name]);const y=m.trim(),u=C&&y.length>0?y:t?.path??"",N=_.trim(),S=i.find(v=>v.id===a),R=i.length===0&&!x,A=!a&&N.length===0,F=S?.available===!1&&N.length===0,B=A?r("workspace.preset.genericRequiresStartup"):F?r("workspace.preset.notInstalled",{name:S.displayName}):null,O=j.trim().length>0&&u.length>0&&!R&&!A&&!F,H=()=>{O&&s({commandPresetId:a||null,name:j.trim(),path:u,...N?{startupCommand:N}:{}})};return e.jsx(T,{open:!0,onOpenChange:v=>!v&&d(),children:e.jsxs(I,{children:[e.jsx(q,{"data-testid":"confirm-workspace-overlay",className:"app-overlay fixed inset-0 z-40"}),e.jsx("div",{className:"pointer-events-none fixed inset-0 z-50 grid place-items-center p-4",children:e.jsxs(U,{"data-testid":"confirm-workspace-dialog",className:"dialog-scale-pop elev-2 pointer-events-auto flex w-[480px] max-w-full flex-col rounded-lg border",style:{background:"var(--bg-elevated)",borderColor:"var(--border-bright)"},children:[e.jsxs("div",{className:"flex items-center gap-3 border-b px-5 py-4",style:{borderColor:"var(--border)"},children:[e.jsx("div",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded",style:{background:"color-mix(in oklab, var(--accent) 12%, transparent)",color:"var(--accent)"},children:e.jsx(X,{size:18,"aria-hidden":!0})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx(W,{className:"text-lg font-semibold text-pri",children:r("workspace.confirm.title")}),e.jsx(K,{className:"text-xs text-ter",children:r("workspace.confirm.description")})]})]}),e.jsxs("div",{className:"flex flex-col gap-4 px-5 py-4",children:[e.jsxs("label",{className:"flex flex-col gap-2",children:[e.jsx(M,{children:r("workspace.field.path")}),e.jsx("input",{readOnly:!0,value:t?.path??"",placeholder:r("workspace.field.pathEmptyPlaceholder"),className:"input input--readonly mono","data-testid":"confirm-workspace-path"})]}),t?.is_git_repository?e.jsxs("div",{className:"flex items-center gap-2 text-xs","data-testid":"confirm-workspace-git-badge",children:[e.jsxs("span",{className:"inline-flex items-center gap-1.5 rounded px-2 py-0.5 font-medium",style:{background:"color-mix(in oklab, var(--status-blue) 12%, transparent)",color:"var(--status-blue)",border:"1px solid color-mix(in oklab, var(--status-blue) 30%, transparent)"},children:[e.jsx(Q,{size:12,"aria-hidden":!0}),t.current_branch??r("workspace.git.detached")]}),e.jsx("span",{className:"text-ter",children:r("workspace.git.detected")})]}):t?.ok?e.jsx("span",{className:"text-xs text-ter",children:r("workspace.git.none")}):null,e.jsxs("label",{className:"flex flex-col gap-2",children:[e.jsx(M,{children:r("workspace.field.name")}),e.jsx("input",{value:j,onChange:v=>l(v.target.value),placeholder:G(t?.path??"")||r("workspace.field.nameDefaultPlaceholder"),className:"input","data-testid":"confirm-workspace-name"})]}),e.jsx(ee,{error:x??B,onChange:n,presets:i,value:a}),e.jsxs("button",{type:"button",onClick:()=>E(v=>!v),className:"flex items-center gap-1.5 self-start text-xs uppercase tracking-wider text-ter hover:text-sec","data-testid":"confirm-workspace-startup-toggle",children:[w?e.jsx($,{size:12,"aria-hidden":!0}):e.jsx(L,{size:12,"aria-hidden":!0}),r("workspace.advanced.startup")]}),w?e.jsxs("label",{className:"flex flex-col gap-2",children:[e.jsx(M,{children:r("workspace.field.startup")}),e.jsx("input",{type:"text",value:_,onChange:v=>h(v.target.value),placeholder:r("workspace.field.startupPlaceholder"),className:"input mono","data-testid":"confirm-workspace-startup-command"}),e.jsx("span",{className:"text-xs text-ter",children:r("workspace.startup.hint")})]}):null,e.jsxs("button",{type:"button",onClick:()=>P(v=>!v),className:"flex items-center gap-1.5 self-start text-xs uppercase tracking-wider text-ter hover:text-sec","data-testid":"confirm-workspace-paste-toggle",children:[C?e.jsx($,{size:12,"aria-hidden":!0}):e.jsx(L,{size:12,"aria-hidden":!0}),r("workspace.advanced.pastePath")]}),C?e.jsxs("label",{className:"flex flex-col gap-2",children:[e.jsx(M,{children:r("workspace.field.absolutePath")}),e.jsx("input",{type:"text",value:m,onChange:v=>f(v.target.value),placeholder:r("workspace.field.absolutePathPlaceholder"),className:"input mono","data-testid":"confirm-workspace-paste-path"})]}):null,e.jsxs("button",{type:"button",onClick:p,className:"flex items-center gap-1.5 self-start text-xs uppercase tracking-wider text-ter hover:text-sec","data-testid":"confirm-workspace-browse-toggle",children:[e.jsx(L,{size:12,"aria-hidden":!0}),r("workspace.advanced.browse")]})]}),e.jsxs("div",{className:"flex items-center justify-end gap-2 border-t px-5 py-3",style:{borderColor:"var(--border)"},children:[e.jsx("button",{type:"button",onClick:d,className:"icon-btn",children:r("common.cancel")}),e.jsx("button",{type:"button",onClick:H,disabled:!O,"data-testid":"confirm-workspace-create",className:"icon-btn icon-btn--primary",children:r("workspace.confirm.create")})]})]})})]})})},ge=({entries:t,error:o,loading:x,onNavigate:a,onSelect:i,selected:d})=>{const{t:n}=D();return e.jsx("div",{className:"scroll-y min-h-[200px] flex-1 border-t border-b",style:{borderColor:"var(--border)"},"data-testid":"fs-entry-list",children:x?e.jsx("p",{className:"p-4 text-center text-xs text-ter",children:n("common.loading")}):o?e.jsx("p",{className:"p-4 text-center text-xs",style:{color:"var(--status-red)"},"data-testid":"fs-browse-error",children:o}):t.length===0?e.jsx("p",{className:"p-4 text-center text-xs text-ter",children:n("workspace.browse.empty")}):e.jsx("ul",{children:t.map(s=>{const p=d===s.path;return e.jsxs("li",{className:"flex items-center gap-0",children:[e.jsxs("button",{type:"button","data-testid":`fs-entry-${s.name}`,onClick:()=>i(s.path),onDoubleClick:()=>a(s.path),className:"flex flex-1 items-center gap-2 px-3 py-2 text-left text-xs hover:bg-3",style:p?{background:"var(--bg-3)",color:"var(--text-primary)"}:{color:"var(--text-primary)"},children:[e.jsx("span",{"aria-hidden":!0,className:"inline-flex items-center text-sec",children:s.is_git_repository?e.jsx(Q,{size:14}):e.jsx(X,{size:14})}),e.jsx("span",{className:"mono flex-1 truncate",children:s.name}),s.is_git_repository?e.jsx("span",{className:"text-xs uppercase tracking-wider",style:{color:"var(--accent)"},children:n("workspace.browse.gitBadge")}):null]}),e.jsx("button",{type:"button","data-testid":`fs-entry-open-${s.name}`,onClick:()=>a(s.path),"aria-label":n("workspace.browse.openAria",{name:s.name}),className:"px-3 py-2 text-xs text-ter hover:text-pri",children:"→"})]},s.path)})})})},ke=({probe:t,suggestedName:o,onSuggestedNameChange:x})=>{const{t:a}=D(),i=!!t&&t.ok&&t.is_dir;return e.jsxs("div",{className:"flex flex-col gap-2 rounded border p-3 text-xs",style:{background:"var(--bg-1)",borderColor:"var(--border)"},"data-testid":"fs-selection-preview",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-ter uppercase tracking-wider text-xs",children:a("workspace.browse.selected")}),t?.is_git_repository?e.jsx("span",{className:"role-badge role-badge--coder","data-testid":"fs-preview-git-badge",children:a("workspace.git.short",{branch:t.current_branch??a("workspace.git.detached")})}):i?e.jsx("span",{className:"text-ter text-xs",children:a("workspace.git.noneShort")}):null]}),e.jsx("span",{className:"mono truncate text-pri","data-testid":"fs-preview-path",children:t?.path??"—"}),e.jsxs("label",{className:"mt-1 flex flex-col gap-1 text-ter",children:[e.jsx("span",{className:"text-xs uppercase tracking-wider",children:a("workspace.field.name")}),e.jsx("input",{type:"text",value:o,onChange:d=>x(d.target.value),disabled:!i,className:"mono rounded border px-2 py-1 text-sm text-pri disabled:opacity-50",style:{background:"var(--bg-0)",borderColor:"var(--border)"},"data-testid":"fs-preview-name-input"})]})]})},ve=t=>{const x=t.replace(/[\\/]+$/,"").split(/[\\/]/).filter(Boolean),a=x[x.length-1];return a?`~ (${a})`:t},je=(t,o)=>{if(!o||!t)return[];const x=[{label:ve(o),path:o}];if(t===o)return x;const a=o.replace(/[\\/]+$/,""),i=t.startsWith(a)?t.slice(a.length).replace(/^[\\/]+/,""):"";if(!i)return x;const d=de(a),n=i.split(/[\\/]/).filter(Boolean);let s=a;for(const p of n)s=`${s}${d}${p}`,x.push({label:p,path:s});return x},J={current_path:"",entries:[],error:null,ok:!1,parent_path:null,root_path:""},we=t=>{const[o,x]=c.useState(J),[a,i]=c.useState(!1),[d,n]=c.useState(null),[s,p]=c.useState(null),r=c.useRef(0),k=c.useRef(0),g=c.useCallback(async l=>{const m=++r.current;i(!0);try{const f=await ae(l);if(r.current!==m)return;x(f),f.ok&&n(f.current_path)}catch{}finally{r.current===m&&i(!1)}},[]);c.useEffect(()=>{if(!t){r.current++,k.current++,x(J),n(null),p(null);return}g("")},[t,g]),c.useEffect(()=>{if(!d){p(null);return}const l=++k.current;re(d).then(m=>{k.current===l&&p(m)}).catch(m=>{console.debug("[hive] discarded:fsBrowser.probe (likely stale token)",m)})},[d]);const j=c.useCallback(l=>{n(l)},[]);return{browse:o,loading:a,navigate:g,probe:s,selectEntry:j,selected:d}},ye=({commandPresetError:t,commandPresetId:o,commandPresets:x,onClose:a,onCommandPresetChange:i,onCreate:d,open:n})=>{const{t:s}=D(),{browse:p,loading:r,navigate:k,probe:g,selectEntry:j,selected:l}=we(n),[m,f]=c.useState(""),[C,P]=c.useState(!1),[w,E]=c.useState(""),[_,h]=c.useState(!1),[y,u]=c.useState("");if(c.useEffect(()=>{n||(f(""),P(!1),E(""),h(!1),u(""))},[n]),c.useEffect(()=>{g?.suggested_name&&f(g.suggested_name)},[g?.suggested_name]),!n)return null;const N=je(p.current_path,p.root_path),S=x.find(b=>b.id===o),R=y.trim(),A=x.length===0&&!t,F=!o&&R.length===0,B=S?.available===!1&&R.length===0,O=F?s("workspace.preset.genericRequiresStartup"):B?s("workspace.preset.notInstalled",{name:S.displayName}):null,H=m.trim().length>0&&(g?.is_dir===!0||C&&w.trim().length>0)&&!A&&!F&&!B,v=()=>{const b=C&&w.trim().length>0?w.trim():g?.path??"";b&&d({commandPresetId:o||null,name:m.trim(),path:b,...R?{startupCommand:R}:{}})};return e.jsx(T,{open:!0,onOpenChange:b=>!b&&a(),children:e.jsxs(I,{children:[e.jsx(q,{"data-testid":"server-browse-overlay",className:"app-overlay fixed inset-0 z-40"}),e.jsx("div",{className:"pointer-events-none fixed inset-0 z-50 grid place-items-center p-4",children:e.jsxs(U,{"data-testid":"add-workspace-dialog",className:"dialog-scale-pop elev-2 pointer-events-auto flex w-[760px] max-w-[calc(100vw-32px)] flex-col rounded-lg border",style:{height:"min(600px, calc(100vh - 64px))",background:"var(--bg-elevated)",borderColor:"var(--border-bright)"},children:[e.jsxs("div",{className:"flex shrink-0 items-center gap-3 border-b px-5 py-4",style:{borderColor:"var(--border)"},children:[e.jsx("div",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded",style:{background:"color-mix(in oklab, var(--accent) 12%, transparent)",color:"var(--accent)"},children:e.jsx(X,{size:18,"aria-hidden":!0})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx(W,{className:"text-lg font-semibold text-pri",children:s("workspace.browse.title")}),e.jsx(K,{className:"mono truncate text-xs text-ter","data-testid":"fs-root-path",children:p.root_path?s("workspace.browse.root",{path:p.root_path}):s("workspace.browse.rootLoading")})]}),e.jsx(ne,{asChild:!0,children:e.jsx("button",{type:"button","aria-label":s("common.closeDialog"),className:"flex h-7 w-7 items-center justify-center rounded text-sec hover:bg-3 hover:text-pri",children:e.jsx(ce,{size:14,"aria-hidden":!0})})})]}),e.jsxs("nav",{className:"flex shrink-0 items-center gap-1 border-b px-4 py-2 text-xs",style:{borderColor:"var(--border)"},"aria-label":s("workspace.browse.breadcrumb"),"data-testid":"fs-breadcrumb",children:[e.jsxs("button",{type:"button",onClick:()=>p.parent_path?k(p.parent_path):null,disabled:!p.parent_path,"aria-label":s("workspace.browse.parentAria"),className:"flex items-center gap-1 rounded px-2 py-0.5 text-sec hover:bg-3 hover:text-pri disabled:opacity-40",children:[e.jsx(xe,{size:12,"aria-hidden":!0})," ",s("workspace.browse.up")]}),e.jsx("div",{className:"mx-2 h-4 w-px",style:{background:"var(--border)"}}),N.map((b,Y)=>{const te=Y===N.length-1;return e.jsxs("span",{className:"flex items-center gap-0.5",children:[Y>0?e.jsx("span",{className:"text-ter",children:"/"}):null,te?e.jsx("span",{className:"px-1 py-0.5 font-medium text-pri",children:b.label}):e.jsx("button",{type:"button",onClick:()=>k(b.path),className:"rounded px-1 py-0.5 text-sec hover:bg-3 hover:text-pri",children:b.label})]},b.path)})]}),e.jsxs("div",{className:"flex min-h-0 flex-1",children:[e.jsx("div",{className:"flex min-h-0 flex-1 flex-col",children:e.jsx(ge,{entries:p.entries,error:p.ok?null:p.error,loading:r,onNavigate:k,onSelect:j,selected:l})}),e.jsxs("div",{className:"flex w-[280px] shrink-0 flex-col gap-3 border-l p-4",style:{borderColor:"var(--border)"},children:[e.jsx(ke,{onSuggestedNameChange:f,probe:g,suggestedName:m}),e.jsx(ee,{error:t??O,onChange:i,presets:x,value:o}),e.jsxs("button",{type:"button",onClick:()=>h(b=>!b),className:"flex items-center gap-1.5 text-left text-xs uppercase tracking-wider text-ter hover:text-sec",children:[_?e.jsx($,{size:12,"aria-hidden":!0}):e.jsx(L,{size:12,"aria-hidden":!0}),s("workspace.advanced.startup")]}),_?e.jsxs("label",{className:"flex flex-col gap-2 text-xs uppercase tracking-wider text-ter",children:[s("workspace.field.startup"),e.jsx("input",{type:"text",value:y,onChange:b=>u(b.target.value),placeholder:s("workspace.field.startupPlaceholder"),className:"input mono","data-testid":"fs-startup-command"}),e.jsx("span",{className:"text-xs normal-case tracking-normal text-ter",children:s("workspace.startup.hintShort")})]}):null,e.jsxs("button",{type:"button",onClick:()=>P(b=>!b),className:"flex items-center gap-1.5 text-left text-xs uppercase tracking-wider text-ter hover:text-sec",children:[C?e.jsx($,{size:12,"aria-hidden":!0}):e.jsx(L,{size:12,"aria-hidden":!0}),s("workspace.advanced.pastePath")]}),C?e.jsxs("label",{className:"flex flex-col gap-2 text-xs uppercase tracking-wider text-ter",children:[s("workspace.field.absolutePath"),e.jsx("input",{type:"text",value:w,onChange:b=>E(b.target.value),placeholder:s("workspace.field.absolutePathPlaceholder"),className:"input mono","data-testid":"fs-manual-path"})]}):null]})]}),e.jsxs("div",{className:"flex shrink-0 items-center justify-end gap-2 border-t px-5 py-3",style:{borderColor:"var(--border)"},children:[e.jsx("button",{type:"button",onClick:a,className:"icon-btn",children:s("common.cancel")}),e.jsx("button",{type:"button",onClick:v,disabled:!H,"data-testid":"add-workspace-create",className:"icon-btn icon-btn--primary",children:s("workspace.confirm.create")})]})]})})]})})},z="claude",Ne=t=>t.some(o=>o.id===z&&o.available)?z:t.find(o=>o.available)?.id??t[0]?.id??z,Se=({trigger:t,onClose:o,onCreate:x})=>{const{t:a}=D(),i=c.useRef(a);c.useEffect(()=>{i.current=a},[a]);const[d,n]=c.useState({kind:"idle"}),[s,p]=c.useState([]),[r,k]=c.useState(z),[g,j]=c.useState(null),l=c.useRef({error:null,id:z,presets:[]}),m=c.useRef(o);c.useEffect(()=>{m.current=o},[o]),c.useEffect(()=>{if(t===0)return;let h=!1;j(null);const y=le().then(u=>{if(h)return;const N=u.some(S=>S.id===l.current.id&&S.available)?l.current.id:Ne(u);l.current={error:null,id:N,presets:u},p(u),k(N)}).catch(()=>{if(h)return;const u=i.current("workspace.preset.loadFailed");l.current={error:u,id:z,presets:[]},p([]),k(z),j(u)});return n({kind:"picking"}),oe().then(async u=>{if(await y,!h){if(u.canceled){if(u.error){n({kind:"error",message:u.error});return}n({kind:"idle"}),m.current();return}if(!u.supported){n({kind:"confirm",probe:null,pasteDefault:!0});return}if(!u.probe?.ok||!u.probe.is_dir){n({kind:"error",message:u.error??i.current("workspace.error.outsideSandbox")});return}n({kind:"confirm",probe:u.probe,pasteDefault:!1})}}).catch(u=>{if(h)return;const N=u instanceof Error?u.message:i.current("workspace.error.pickerFailed");n({kind:"error",message:N})}),()=>{h=!0}},[t]);const f=()=>{n({kind:"idle"}),o()},C=h=>{Promise.resolve(x(h)).then(()=>n({kind:"idle"})).catch(y=>{const u=y instanceof Error?y.message:a("workspace.error.createFailed");n({kind:"error",title:a("workspace.error.createTitle"),message:u})})},P=h=>{l.current={...l.current,id:h},k(h)},w=s.length>0||g?s:l.current.presets,E=r===""?"":w.length>0&&!w.some(h=>h.id===r&&h.available)?l.current.id:r,_=g??l.current.error;if(d.kind==="idle")return null;if(d.kind==="picking"){const h=()=>n({kind:"idle"});return e.jsx(T,{open:!0,onOpenChange:y=>!y&&h(),children:e.jsxs(I,{children:[e.jsx(q,{className:"app-overlay fixed inset-0 z-40"}),e.jsxs(U,{"data-testid":"add-workspace-picking","aria-describedby":void 0,className:"fixed inset-0 z-50 flex items-center justify-center p-4",children:[e.jsx(W,{className:"sr-only",children:a("workspace.picking.title")}),e.jsxs("div",{"data-testid":"add-workspace-picking-panel",className:"dialog-scale-pop elev-2 flex items-center gap-3 rounded-lg border px-5 py-4",style:{background:"var(--bg-elevated)",borderColor:"var(--border-bright)"},children:[e.jsx(me,{size:18,"aria-hidden":!0,className:"animate-pulse",style:{color:"var(--accent)"}}),e.jsx("span",{className:"text-sm text-pri",children:a("workspace.picking.message")})]})]})]})})}return d.kind==="error"?e.jsx(T,{open:!0,onOpenChange:h=>!h&&f(),children:e.jsxs(I,{children:[e.jsx(q,{className:"app-overlay fixed inset-0 z-40"}),e.jsx("div",{className:"pointer-events-none fixed inset-0 z-50 grid place-items-center p-4",children:e.jsxs(U,{"data-testid":"add-workspace-error",className:"dialog-scale-pop elev-2 pointer-events-auto w-[440px] max-w-[calc(100vw-32px)] rounded-lg border p-5",style:{background:"var(--bg-elevated)",borderColor:"var(--border-bright)"},children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded",style:{background:"color-mix(in oklab, var(--status-red) 14%, transparent)",color:"var(--status-red)"},children:e.jsx(ie,{size:18,"aria-hidden":!0})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx(W,{className:"text-lg font-semibold text-pri",children:d.title??a("workspace.error.pickerFailed")}),e.jsx(K,{className:"mt-1.5 break-words text-sm text-ter",children:d.message})]})]}),e.jsxs("div",{className:"mt-5 flex justify-end gap-2",children:[e.jsx("button",{type:"button",onClick:f,className:"icon-btn",children:a("common.close")}),e.jsx("button",{type:"button",onClick:()=>n({kind:"confirm",probe:null,pasteDefault:!0}),className:"icon-btn icon-btn--primary",children:a("workspace.error.pastePathInstead")})]})]})})]})}):d.kind==="browse"?e.jsx(ye,{commandPresetError:_,commandPresetId:E,commandPresets:w,onClose:f,onCommandPresetChange:P,onCreate:C,open:!0}):e.jsx(be,{commandPresetError:_,commandPresetId:E,commandPresets:w,pasteFallbackDefault:d.pasteDefault,probe:d.probe,onCancel:f,onCommandPresetChange:P,onCreate:C,onOpenServerBrowse:()=>n({kind:"browse"})})};export{Se as AddWorkspaceDialog};
@@ -1 +1 @@
1
- import{c as f,u as h,r as j,j as e,a as b,P as N,O as v,C as y,D as g,b as c}from"./index-Cn8X3get.js";const R=[["path",{d:"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z",key:"yt0hxn"}]],k=f("hexagon",R),w=({open:o,onClose:r,onAddWorkspace:x,onTryDemo:d})=>{const{t:s}=h(),[n,l]=j.useState(0),u=t=>{t||(l(0),r())},i=(t=!0)=>{l(0),r(t)},a=n===2;return e.jsx(b,{open:o,onOpenChange:u,children:e.jsxs(N,{children:[e.jsx(v,{className:"app-overlay fixed inset-0 z-40"}),e.jsx("div",{className:"pointer-events-none fixed inset-0 z-50 grid place-items-center p-4",children:e.jsxs(y,{"aria-label":s("firstRun.title"),className:"dialog-scale-pop elev-2 pointer-events-auto w-[480px] max-w-[calc(100vw-32px)] rounded-lg border p-6",style:{background:"var(--bg-elevated)",borderColor:"var(--border-bright)"},children:[e.jsx(g,{className:"sr-only",children:s("firstRun.step",{current:n+1,total:3})}),e.jsxs("div",{className:"min-h-[200px]",children:[n===0&&e.jsxs("div",{className:"flex flex-col items-center gap-4 py-4 text-center",children:[e.jsx("div",{"aria-hidden":!0,className:"flex h-14 w-14 items-center justify-center rounded-lg",style:{background:"color-mix(in oklab, var(--accent) 15%, transparent)",color:"var(--accent)",border:"1px solid color-mix(in oklab, var(--accent) 30%, transparent)"},children:e.jsx(k,{size:32})}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{className:"text-xl font-semibold text-pri",children:s("firstRun.title")}),e.jsx("p",{className:"text-sm text-sec",children:s("firstRun.desc")}),e.jsx("p",{className:"text-xs text-ter",children:s("firstRun.subtitle")})]})]}),n>0&&e.jsx(c,{className:"sr-only",children:s("firstRun.title")}),n===1&&e.jsxs("div",{className:"flex flex-col gap-4 py-2",children:[e.jsx("h2",{className:"text-lg font-semibold text-pri",children:s("firstRun.howItWorks")}),e.jsx("ol",{className:"flex flex-col gap-3",children:[{n:1,title:s("firstRun.slide1Title"),desc:s("firstRun.slide1Desc")},{n:2,title:s("firstRun.slide2Title"),desc:s("firstRun.slide2Desc")},{n:3,title:s("firstRun.slide3Title"),desc:s("firstRun.slide3Desc")}].map(({n:t,title:m,desc:p})=>e.jsxs("li",{className:"flex items-start gap-3",children:[e.jsx("span",{className:"flex h-6 w-6 shrink-0 items-center justify-center rounded-full text-xs font-medium",style:{background:"var(--bg-elevated)",border:"1px solid var(--border-bright)",color:"var(--accent)"},children:t}),e.jsxs("div",{children:[e.jsx("div",{className:"text-sm font-medium text-pri",children:m}),e.jsx("div",{className:"text-xs text-sec",children:p})]})]},t))})]}),n===2&&e.jsxs("div",{className:"flex flex-col gap-3 py-2",children:[e.jsx("h2",{className:"text-lg font-semibold text-pri",children:s("firstRun.getStarted")}),e.jsx("p",{className:"text-sm text-sec",children:s("firstRun.optionDesc")}),e.jsxs("div",{className:"mt-2 flex flex-col gap-2",children:[e.jsx("button",{type:"button",onClick:()=>{x(),i(!1)},className:"icon-btn icon-btn--primary w-full justify-center",children:s("firstRun.addWorkspace")}),e.jsx("button",{type:"button",onClick:()=>{d(),i(!0)},className:"icon-btn w-full justify-center",children:s("firstRun.tryDemo")}),e.jsx("button",{type:"button",onClick:()=>i(),className:"text-xs text-sec underline hover:text-pri mt-1",children:s("firstRun.skipForNow")})]})]})]}),e.jsxs("div",{className:"mt-5 flex items-center justify-between",children:[e.jsx("span",{className:"text-xs text-ter",children:s("firstRun.step",{current:n+1,total:3})}),e.jsxs("div",{className:"flex items-center gap-2",children:[n>0&&!a&&e.jsx("button",{type:"button",onClick:()=>l(t=>t-1),className:"icon-btn",children:s("firstRun.back")}),!a&&e.jsx("button",{type:"button",onClick:()=>l(t=>t+1),className:"icon-btn icon-btn--primary",children:s("firstRun.next")}),e.jsx("button",{type:"button",onClick:()=>i(),className:"text-xs text-ter underline hover:text-sec",children:s("firstRun.skip")})]})]})]})})]})})};export{w as FirstRunWizard};
1
+ import{c as f,u as h,r as j,j as e,a as b,P as N,O as v,C as y,D as g,b as c}from"./index-Ddb7bDN5.js";const R=[["path",{d:"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z",key:"yt0hxn"}]],k=f("hexagon",R),w=({open:o,onClose:r,onAddWorkspace:x,onTryDemo:d})=>{const{t:s}=h(),[n,l]=j.useState(0),u=t=>{t||(l(0),r())},i=(t=!0)=>{l(0),r(t)},a=n===2;return e.jsx(b,{open:o,onOpenChange:u,children:e.jsxs(N,{children:[e.jsx(v,{className:"app-overlay fixed inset-0 z-40"}),e.jsx("div",{className:"pointer-events-none fixed inset-0 z-50 grid place-items-center p-4",children:e.jsxs(y,{"aria-label":s("firstRun.title"),className:"dialog-scale-pop elev-2 pointer-events-auto w-[480px] max-w-[calc(100vw-32px)] rounded-lg border p-6",style:{background:"var(--bg-elevated)",borderColor:"var(--border-bright)"},children:[e.jsx(g,{className:"sr-only",children:s("firstRun.step",{current:n+1,total:3})}),e.jsxs("div",{className:"min-h-[200px]",children:[n===0&&e.jsxs("div",{className:"flex flex-col items-center gap-4 py-4 text-center",children:[e.jsx("div",{"aria-hidden":!0,className:"flex h-14 w-14 items-center justify-center rounded-lg",style:{background:"color-mix(in oklab, var(--accent) 15%, transparent)",color:"var(--accent)",border:"1px solid color-mix(in oklab, var(--accent) 30%, transparent)"},children:e.jsx(k,{size:32})}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(c,{className:"text-xl font-semibold text-pri",children:s("firstRun.title")}),e.jsx("p",{className:"text-sm text-sec",children:s("firstRun.desc")}),e.jsx("p",{className:"text-xs text-ter",children:s("firstRun.subtitle")})]})]}),n>0&&e.jsx(c,{className:"sr-only",children:s("firstRun.title")}),n===1&&e.jsxs("div",{className:"flex flex-col gap-4 py-2",children:[e.jsx("h2",{className:"text-lg font-semibold text-pri",children:s("firstRun.howItWorks")}),e.jsx("ol",{className:"flex flex-col gap-3",children:[{n:1,title:s("firstRun.slide1Title"),desc:s("firstRun.slide1Desc")},{n:2,title:s("firstRun.slide2Title"),desc:s("firstRun.slide2Desc")},{n:3,title:s("firstRun.slide3Title"),desc:s("firstRun.slide3Desc")}].map(({n:t,title:m,desc:p})=>e.jsxs("li",{className:"flex items-start gap-3",children:[e.jsx("span",{className:"flex h-6 w-6 shrink-0 items-center justify-center rounded-full text-xs font-medium",style:{background:"var(--bg-elevated)",border:"1px solid var(--border-bright)",color:"var(--accent)"},children:t}),e.jsxs("div",{children:[e.jsx("div",{className:"text-sm font-medium text-pri",children:m}),e.jsx("div",{className:"text-xs text-sec",children:p})]})]},t))})]}),n===2&&e.jsxs("div",{className:"flex flex-col gap-3 py-2",children:[e.jsx("h2",{className:"text-lg font-semibold text-pri",children:s("firstRun.getStarted")}),e.jsx("p",{className:"text-sm text-sec",children:s("firstRun.optionDesc")}),e.jsxs("div",{className:"mt-2 flex flex-col gap-2",children:[e.jsx("button",{type:"button",onClick:()=>{x(),i(!1)},className:"icon-btn icon-btn--primary w-full justify-center",children:s("firstRun.addWorkspace")}),e.jsx("button",{type:"button",onClick:()=>{d(),i(!0)},className:"icon-btn w-full justify-center",children:s("firstRun.tryDemo")}),e.jsx("button",{type:"button",onClick:()=>i(),className:"text-xs text-sec underline hover:text-pri mt-1",children:s("firstRun.skipForNow")})]})]})]}),e.jsxs("div",{className:"mt-5 flex items-center justify-between",children:[e.jsx("span",{className:"text-xs text-ter",children:s("firstRun.step",{current:n+1,total:3})}),e.jsxs("div",{className:"flex items-center gap-2",children:[n>0&&!a&&e.jsx("button",{type:"button",onClick:()=>l(t=>t-1),className:"icon-btn",children:s("firstRun.back")}),!a&&e.jsx("button",{type:"button",onClick:()=>l(t=>t+1),className:"icon-btn icon-btn--primary",children:s("firstRun.next")}),e.jsx("button",{type:"button",onClick:()=>i(),className:"text-xs text-ter underline hover:text-sec",children:s("firstRun.skip")})]})]})]})})]})})};export{w as FirstRunWizard};
@@ -1,4 +1,4 @@
1
- import{c as Pn,r as R,u as st,j as m,K as lr,L as or,a as cr,P as ur,O as pr,C as hr,b as fr,D as dr,t as mr,X as gr}from"./index-Cn8X3get.js";import{S as kr}from"./AddWorkerDialog-DmkDOdp6.js";const xr=[["path",{d:"M17 3a2 2 0 0 1 2 2v15a1 1 0 0 1-1.496.868l-4.512-2.578a2 2 0 0 0-1.984 0l-4.512 2.578A1 1 0 0 1 5 20V5a2 2 0 0 1 2-2z",key:"oz39mx"}]],br=Pn("bookmark",xr);const Tr=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]],wr=Pn("external-link",Tr),yr={academic:{en:"Academic",zh:"学术"},design:{en:"Design",zh:"设计"},engineering:{en:"Engineering",zh:"工程"},finance:{en:"Finance",zh:"金融"},"game-development":{en:"Game Development",zh:"游戏开发"},hr:{en:"HR",zh:"人力资源"},integrations:{en:"System Integrations",zh:"系统集成"},legal:{en:"Legal",zh:"法务"},marketing:{en:"Marketing",zh:"营销"},misc:{en:"Misc",zh:"其他"},"paid-media":{en:"Paid Ads",zh:"广告投放"},product:{en:"Product",zh:"产品"},"project-management":{en:"Project Management",zh:"项目管理"},sales:{en:"Sales",zh:"销售"},"spatial-computing":{en:"Spatial Computing",zh:"空间计算"},specialized:{en:"Industry Verticals",zh:"行业角色"},"supply-chain":{en:"Supply Chain",zh:"供应链"},support:{en:"Support",zh:"客户支持"},testing:{en:"Testing",zh:"测试"}},Ar=t=>t.replace(/-/g," ").replace(/\b\w/g,e=>e.toUpperCase()),Sr=(t,e)=>{const n=yr[t];return n?n[e]:Ar(t)},_r=["engineering","testing","product","design","project-management","integrations","specialized","marketing","paid-media","sales","finance","legal","hr","supply-chain","support","academic","game-development","spatial-computing","misc"],Er=(t,e)=>{if(e!=="zh")return t;const n=new Map(_r.map((s,r)=>[s,r]));return[...t].sort((s,r)=>{const i=n.get(s)??Number.POSITIVE_INFINITY,l=n.get(r)??Number.POSITIVE_INFINITY;return i!==l?i-l:s.localeCompare(r)})},Rr=t=>t?"color-mix(in oklab, var(--accent) 14%, var(--bg-2))":"var(--bg-2)",Nr=t=>t?"var(--accent)":"var(--border-bright)",Cr=({agent:t,selected:e,imported:n,onSelect:s})=>{const{t:r}=st(),i=R.useCallback(()=>s(t.path),[t.path,s]),l=t.vibe?.trim()?t.vibe:t.description,o=r("marketplace.importedBadge"),p=t.displayName??t.name,c=t.nameOverflows?p:void 0;return m.jsxs("button",{type:"button",onClick:i,"data-testid":"marketplace-agent-card","data-agent-path":t.path,"data-imported":n?"true":void 0,"data-selected":e?"true":void 0,className:"marketplace-card flex w-full cursor-pointer flex-col gap-1.5 rounded-md border px-3 py-2.5 text-left outline-none transition-[background,border-color,transform] duration-100 ease-out focus-visible:ring-2 focus-visible:ring-offset-0 active:translate-y-px",style:{background:Rr(e),borderColor:Nr(e),"--tw-ring-color":"color-mix(in oklab, var(--accent) 55%, transparent)"},children:[m.jsxs("div",{className:"flex items-center justify-between gap-2",children:[m.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[t.emoji?m.jsx("span",{className:"text-base leading-none",children:t.emoji}):null,m.jsx("span",{className:"truncate text-sm font-semibold text-pri",title:c,children:p})]}),n?m.jsx("span",{role:"img","aria-label":o,title:o,"data-testid":"marketplace-agent-imported",className:"flex shrink-0 items-center gap-0.5 rounded-full px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wider",style:{background:e?"var(--accent)":"color-mix(in oklab, var(--accent) 28%, transparent)",color:e?"#ffffff":"color-mix(in oklab, var(--accent) 60%, white)"},children:m.jsx(br,{size:10,"aria-hidden":!0})}):null]}),m.jsx("p",{className:"line-clamp-1 text-xs leading-snug text-sec",children:l})]})},Ir=R.memo(Cr);function fn(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,s=Array(e);n<e;n++)s[n]=t[n];return s}function Or(t){if(Array.isArray(t))return t}function Lr(t,e){var n=t==null?null:typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(n!=null){var s,r,i,l,o=[],p=!0,c=!1;try{if(i=(n=n.call(t)).next,e!==0)for(;!(p=(s=i.call(n)).done)&&(o.push(s.value),o.length!==e);p=!0);}catch(f){c=!0,r=f}finally{try{if(!p&&n.return!=null&&(l=n.return(),Object(l)!==l))return}finally{if(c)throw r}}return o}}function Dr(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
1
+ import{c as Pn,r as R,u as st,j as m,K as lr,L as or,a as cr,P as ur,O as pr,C as hr,b as fr,D as dr,t as mr,X as gr}from"./index-Ddb7bDN5.js";import{S as kr}from"./AddWorkerDialog-DeZhTQLi.js";const xr=[["path",{d:"M17 3a2 2 0 0 1 2 2v15a1 1 0 0 1-1.496.868l-4.512-2.578a2 2 0 0 0-1.984 0l-4.512 2.578A1 1 0 0 1 5 20V5a2 2 0 0 1 2-2z",key:"oz39mx"}]],br=Pn("bookmark",xr);const Tr=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]],wr=Pn("external-link",Tr),yr={academic:{en:"Academic",zh:"学术"},design:{en:"Design",zh:"设计"},engineering:{en:"Engineering",zh:"工程"},finance:{en:"Finance",zh:"金融"},"game-development":{en:"Game Development",zh:"游戏开发"},hr:{en:"HR",zh:"人力资源"},integrations:{en:"System Integrations",zh:"系统集成"},legal:{en:"Legal",zh:"法务"},marketing:{en:"Marketing",zh:"营销"},misc:{en:"Misc",zh:"其他"},"paid-media":{en:"Paid Ads",zh:"广告投放"},product:{en:"Product",zh:"产品"},"project-management":{en:"Project Management",zh:"项目管理"},sales:{en:"Sales",zh:"销售"},"spatial-computing":{en:"Spatial Computing",zh:"空间计算"},specialized:{en:"Industry Verticals",zh:"行业角色"},"supply-chain":{en:"Supply Chain",zh:"供应链"},support:{en:"Support",zh:"客户支持"},testing:{en:"Testing",zh:"测试"}},Ar=t=>t.replace(/-/g," ").replace(/\b\w/g,e=>e.toUpperCase()),Sr=(t,e)=>{const n=yr[t];return n?n[e]:Ar(t)},_r=["engineering","testing","product","design","project-management","integrations","specialized","marketing","paid-media","sales","finance","legal","hr","supply-chain","support","academic","game-development","spatial-computing","misc"],Er=(t,e)=>{if(e!=="zh")return t;const n=new Map(_r.map((s,r)=>[s,r]));return[...t].sort((s,r)=>{const i=n.get(s)??Number.POSITIVE_INFINITY,l=n.get(r)??Number.POSITIVE_INFINITY;return i!==l?i-l:s.localeCompare(r)})},Rr=t=>t?"color-mix(in oklab, var(--accent) 14%, var(--bg-2))":"var(--bg-2)",Nr=t=>t?"var(--accent)":"var(--border-bright)",Cr=({agent:t,selected:e,imported:n,onSelect:s})=>{const{t:r}=st(),i=R.useCallback(()=>s(t.path),[t.path,s]),l=t.vibe?.trim()?t.vibe:t.description,o=r("marketplace.importedBadge"),p=t.displayName??t.name,c=t.nameOverflows?p:void 0;return m.jsxs("button",{type:"button",onClick:i,"data-testid":"marketplace-agent-card","data-agent-path":t.path,"data-imported":n?"true":void 0,"data-selected":e?"true":void 0,className:"marketplace-card flex w-full cursor-pointer flex-col gap-1.5 rounded-md border px-3 py-2.5 text-left outline-none transition-[background,border-color,transform] duration-100 ease-out focus-visible:ring-2 focus-visible:ring-offset-0 active:translate-y-px",style:{background:Rr(e),borderColor:Nr(e),"--tw-ring-color":"color-mix(in oklab, var(--accent) 55%, transparent)"},children:[m.jsxs("div",{className:"flex items-center justify-between gap-2",children:[m.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[t.emoji?m.jsx("span",{className:"text-base leading-none",children:t.emoji}):null,m.jsx("span",{className:"truncate text-sm font-semibold text-pri",title:c,children:p})]}),n?m.jsx("span",{role:"img","aria-label":o,title:o,"data-testid":"marketplace-agent-imported",className:"flex shrink-0 items-center gap-0.5 rounded-full px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wider",style:{background:e?"var(--accent)":"color-mix(in oklab, var(--accent) 28%, transparent)",color:e?"#ffffff":"color-mix(in oklab, var(--accent) 60%, white)"},children:m.jsx(br,{size:10,"aria-hidden":!0})}):null]}),m.jsx("p",{className:"line-clamp-1 text-xs leading-snug text-sec",children:l})]})},Ir=R.memo(Cr);function fn(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,s=Array(e);n<e;n++)s[n]=t[n];return s}function Or(t){if(Array.isArray(t))return t}function Lr(t,e){var n=t==null?null:typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(n!=null){var s,r,i,l,o=[],p=!0,c=!1;try{if(i=(n=n.call(t)).next,e!==0)for(;!(p=(s=i.call(n)).done)&&(o.push(s.value),o.length!==e);p=!0);}catch(f){c=!0,r=f}finally{try{if(!p&&n.return!=null&&(l=n.return(),Object(l)!==l))return}finally{if(c)throw r}}return o}}function Dr(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
2
2
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function vr(t,e){return Or(t)||Lr(t,e)||Mr(t,e)||Dr()}function Mr(t,e){if(t){if(typeof t=="string")return fn(t,e);var n={}.toString.call(t).slice(8,-1);return n==="Object"&&t.constructor&&(n=t.constructor.name),n==="Map"||n==="Set"?Array.from(t):n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?fn(t,e):void 0}}const zn=Object.entries,dn=Object.setPrototypeOf,Pr=Object.isFrozen,zr=Object.getPrototypeOf,$r=Object.getOwnPropertyDescriptor;let G=Object.freeze,Y=Object.seal,Ce=Object.create,$n=typeof Reflect<"u"&&Reflect,Rt=$n.apply,Nt=$n.construct;G||(G=function(e){return e});Y||(Y=function(e){return e});Rt||(Rt=function(e,n){for(var s=arguments.length,r=new Array(s>2?s-2:0),i=2;i<s;i++)r[i-2]=arguments[i];return e.apply(n,r)});Nt||(Nt=function(e){for(var n=arguments.length,s=new Array(n>1?n-1:0),r=1;r<n;r++)s[r-1]=arguments[r];return new e(...s)});const Se=D(Array.prototype.forEach),jr=D(Array.prototype.lastIndexOf),mn=D(Array.prototype.pop),_e=D(Array.prototype.push),Fr=D(Array.prototype.splice),H=Array.isArray,$e=D(String.prototype.toLowerCase),yt=D(String.prototype.toString),gn=D(String.prototype.match),Ee=D(String.prototype.replace),kn=D(String.prototype.indexOf),Br=D(String.prototype.trim),Ur=D(Number.prototype.toString),Hr=D(Boolean.prototype.toString),xn=typeof BigInt>"u"?null:D(BigInt.prototype.toString),bn=typeof Symbol>"u"?null:D(Symbol.prototype.toString),N=D(Object.prototype.hasOwnProperty),Pe=D(Object.prototype.toString),B=D(RegExp.prototype.test),Qe=Gr(TypeError);function D(t){return function(e){e instanceof RegExp&&(e.lastIndex=0);for(var n=arguments.length,s=new Array(n>1?n-1:0),r=1;r<n;r++)s[r-1]=arguments[r];return Rt(t,e,s)}}function Gr(t){return function(){for(var e=arguments.length,n=new Array(e),s=0;s<e;s++)n[s]=arguments[s];return Nt(t,n)}}function k(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:$e;if(dn&&dn(t,null),!H(e))return t;let s=e.length;for(;s--;){let r=e[s];if(typeof r=="string"){const i=n(r);i!==r&&(Pr(e)||(e[s]=i),r=i)}t[r]=!0}return t}function Wr(t){for(let e=0;e<t.length;e++)N(t,e)||(t[e]=null);return t}function q(t){const e=Ce(null);for(const s of zn(t)){var n=vr(s,2);const r=n[0],i=n[1];N(t,r)&&(H(i)?e[r]=Wr(i):i&&typeof i=="object"&&i.constructor===Object?e[r]=q(i):e[r]=i)}return e}function qr(t){switch(typeof t){case"string":return t;case"number":return Ur(t);case"boolean":return Hr(t);case"bigint":return xn?xn(t):"0";case"symbol":return bn?bn(t):"Symbol()";case"undefined":return Pe(t);case"function":case"object":{if(t===null)return Pe(t);const e=t,n=he(e,"toString");if(typeof n=="function"){const s=n(e);return typeof s=="string"?s:Pe(s)}return Pe(t)}default:return Pe(t)}}function he(t,e){for(;t!==null;){const s=$r(t,e);if(s){if(s.get)return D(s.get);if(typeof s.value=="function")return D(s.value)}t=zr(t)}function n(){return null}return n}function Yr(t){try{return B(t,""),!0}catch{return!1}}const Tn=G(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","search","section","select","shadow","slot","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),At=G(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","enterkeyhint","exportparts","filter","font","g","glyph","glyphref","hkern","image","inputmode","line","lineargradient","marker","mask","metadata","mpath","part","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),St=G(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),Zr=G(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),_t=G(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),Xr=G(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),wn=G(["#text"]),yn=G(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","command","commandfor","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","exportparts","face","for","headers","height","hidden","high","href","hreflang","id","inert","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","part","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","slot","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns"]),Et=G(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","mask-type","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),An=G(["accent","accentunder","align","bevelled","close","columnalign","columnlines","columnspacing","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lquote","lspace","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),Ke=G(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),Vr=Y(/{{[\w\W]*|^[\w\W]*}}/g),Qr=Y(/<%[\w\W]*|^[\w\W]*%>/g),Kr=Y(/\${[\w\W]*/g),Jr=Y(/^data-[\-\w.\u00B7-\uFFFF]+$/),es=Y(/^aria-[\-\w]+$/),Sn=Y(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),ts=Y(/^(?:\w+script|data):/i),ns=Y(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),rs=Y(/^html$/i),ss=Y(/^[a-z][.\w]*(-[.\w]+)+$/i),Re={element:1,text:3,progressingInstruction:7,comment:8,document:9},is=function(){return typeof window>"u"?null:window},as=function(e,n){if(typeof e!="object"||typeof e.createPolicy!="function")return null;let s=null;const r="data-tt-policy-suffix";n&&n.hasAttribute(r)&&(s=n.getAttribute(r));const i="dompurify"+(s?"#"+s:"");try{return e.createPolicy(i,{createHTML(l){return l},createScriptURL(l){return l}})}catch{return console.warn("TrustedTypes policy "+i+" could not be created."),null}},_n=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function jn(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:is();const e=g=>jn(g);if(e.version="3.4.5",e.removed=[],!t||!t.document||t.document.nodeType!==Re.document||!t.Element)return e.isSupported=!1,e;let n=t.document;const s=n,r=s.currentScript,i=t.DocumentFragment,l=t.HTMLTemplateElement,o=t.Node,p=t.Element,c=t.NodeFilter,f=t.NamedNodeMap,d=f===void 0?t.NamedNodeMap||t.MozNamedAttrMap:f,x=t.HTMLFormElement,_=t.DOMParser,y=t.trustedTypes,C=p.prototype,ge=he(C,"cloneNode"),ke=he(C,"remove"),S=he(C,"nextSibling"),xe=he(C,"childNodes"),ee=he(C,"parentNode"),re=o&&o.prototype?he(o.prototype,"nodeType"):null;if(typeof l=="function"){const g=n.createElement("template");g.content&&g.content.ownerDocument&&(n=g.content.ownerDocument)}let E,oe="";const ce=n,Oe=ce.implementation,Be=ce.createNodeIterator,lt=ce.createDocumentFragment,T=ce.getElementsByTagName,z=s.importNode;let M=_n();e.isSupported=typeof zn=="function"&&typeof ee=="function"&&Oe&&Oe.createHTMLDocument!==void 0;const be=Vr,Ue=Qr,He=Kr,Vn=Jr,Qn=es,Kn=ts,Bt=ns,Jn=ss;let Ut=Sn,$=null;const Ht=k({},[...Tn,...At,...St,..._t,...wn]);let F=null;const Gt=k({},[...yn,...Et,...An,...Ke]);let I=Object.seal(Ce(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Le=null,Ge=null;const se=Object.seal(Ce(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let Wt=!0,ot=!0,qt=!1,Yt=!0,ie=!1,De=!0,ue=!1,ct=!1,ut=!1,Te=!1,We=!1,qe=!1,Zt=!0,Xt=!1;const Vt="user-content-";let pt=!0,ve=!1,we={},Q=null;const ht=k({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Qt=null;const Kt=k({},["audio","video","img","source","image","track"]);let ft=null;const Jt=k({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Ye="http://www.w3.org/1998/Math/MathML",Ze="http://www.w3.org/2000/svg",K="http://www.w3.org/1999/xhtml";let ye=K,dt=!1,mt=null;const er=k({},[Ye,Ze,K],yt);let gt=k({},["mi","mo","mn","ms","mtext"]),kt=k({},["annotation-xml"]);const tr=k({},["title","style","font","a","script"]);let Me=null;const nr=["application/xhtml+xml","text/html"],rr="text/html";let P=null,Ae=null;const sr=n.createElement("form"),en=function(a){return a instanceof RegExp||a instanceof Function},xt=function(){let a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(Ae&&Ae===a)return;(!a||typeof a!="object")&&(a={}),a=q(a),Me=nr.indexOf(a.PARSER_MEDIA_TYPE)===-1?rr:a.PARSER_MEDIA_TYPE,P=Me==="application/xhtml+xml"?yt:$e,$=N(a,"ALLOWED_TAGS")&&H(a.ALLOWED_TAGS)?k({},a.ALLOWED_TAGS,P):Ht,F=N(a,"ALLOWED_ATTR")&&H(a.ALLOWED_ATTR)?k({},a.ALLOWED_ATTR,P):Gt,mt=N(a,"ALLOWED_NAMESPACES")&&H(a.ALLOWED_NAMESPACES)?k({},a.ALLOWED_NAMESPACES,yt):er,ft=N(a,"ADD_URI_SAFE_ATTR")&&H(a.ADD_URI_SAFE_ATTR)?k(q(Jt),a.ADD_URI_SAFE_ATTR,P):Jt,Qt=N(a,"ADD_DATA_URI_TAGS")&&H(a.ADD_DATA_URI_TAGS)?k(q(Kt),a.ADD_DATA_URI_TAGS,P):Kt,Q=N(a,"FORBID_CONTENTS")&&H(a.FORBID_CONTENTS)?k({},a.FORBID_CONTENTS,P):ht,Le=N(a,"FORBID_TAGS")&&H(a.FORBID_TAGS)?k({},a.FORBID_TAGS,P):q({}),Ge=N(a,"FORBID_ATTR")&&H(a.FORBID_ATTR)?k({},a.FORBID_ATTR,P):q({}),we=N(a,"USE_PROFILES")?a.USE_PROFILES&&typeof a.USE_PROFILES=="object"?q(a.USE_PROFILES):a.USE_PROFILES:!1,Wt=a.ALLOW_ARIA_ATTR!==!1,ot=a.ALLOW_DATA_ATTR!==!1,qt=a.ALLOW_UNKNOWN_PROTOCOLS||!1,Yt=a.ALLOW_SELF_CLOSE_IN_ATTR!==!1,ie=a.SAFE_FOR_TEMPLATES||!1,De=a.SAFE_FOR_XML!==!1,ue=a.WHOLE_DOCUMENT||!1,Te=a.RETURN_DOM||!1,We=a.RETURN_DOM_FRAGMENT||!1,qe=a.RETURN_TRUSTED_TYPE||!1,ut=a.FORCE_BODY||!1,Zt=a.SANITIZE_DOM!==!1,Xt=a.SANITIZE_NAMED_PROPS||!1,pt=a.KEEP_CONTENT!==!1,ve=a.IN_PLACE||!1,Ut=Yr(a.ALLOWED_URI_REGEXP)?a.ALLOWED_URI_REGEXP:Sn,ye=typeof a.NAMESPACE=="string"?a.NAMESPACE:K,gt=N(a,"MATHML_TEXT_INTEGRATION_POINTS")&&a.MATHML_TEXT_INTEGRATION_POINTS&&typeof a.MATHML_TEXT_INTEGRATION_POINTS=="object"?q(a.MATHML_TEXT_INTEGRATION_POINTS):k({},["mi","mo","mn","ms","mtext"]),kt=N(a,"HTML_INTEGRATION_POINTS")&&a.HTML_INTEGRATION_POINTS&&typeof a.HTML_INTEGRATION_POINTS=="object"?q(a.HTML_INTEGRATION_POINTS):k({},["annotation-xml"]);const u=N(a,"CUSTOM_ELEMENT_HANDLING")&&a.CUSTOM_ELEMENT_HANDLING&&typeof a.CUSTOM_ELEMENT_HANDLING=="object"?q(a.CUSTOM_ELEMENT_HANDLING):Ce(null);if(I=Ce(null),N(u,"tagNameCheck")&&en(u.tagNameCheck)&&(I.tagNameCheck=u.tagNameCheck),N(u,"attributeNameCheck")&&en(u.attributeNameCheck)&&(I.attributeNameCheck=u.attributeNameCheck),N(u,"allowCustomizedBuiltInElements")&&typeof u.allowCustomizedBuiltInElements=="boolean"&&(I.allowCustomizedBuiltInElements=u.allowCustomizedBuiltInElements),ie&&(ot=!1),We&&(Te=!0),we&&($=k({},wn),F=Ce(null),we.html===!0&&(k($,Tn),k(F,yn)),we.svg===!0&&(k($,At),k(F,Et),k(F,Ke)),we.svgFilters===!0&&(k($,St),k(F,Et),k(F,Ke)),we.mathMl===!0&&(k($,_t),k(F,An),k(F,Ke))),se.tagCheck=null,se.attributeCheck=null,N(a,"ADD_TAGS")&&(typeof a.ADD_TAGS=="function"?se.tagCheck=a.ADD_TAGS:H(a.ADD_TAGS)&&($===Ht&&($=q($)),k($,a.ADD_TAGS,P))),N(a,"ADD_ATTR")&&(typeof a.ADD_ATTR=="function"?se.attributeCheck=a.ADD_ATTR:H(a.ADD_ATTR)&&(F===Gt&&(F=q(F)),k(F,a.ADD_ATTR,P))),N(a,"ADD_URI_SAFE_ATTR")&&H(a.ADD_URI_SAFE_ATTR)&&k(ft,a.ADD_URI_SAFE_ATTR,P),N(a,"FORBID_CONTENTS")&&H(a.FORBID_CONTENTS)&&(Q===ht&&(Q=q(Q)),k(Q,a.FORBID_CONTENTS,P)),N(a,"ADD_FORBID_CONTENTS")&&H(a.ADD_FORBID_CONTENTS)&&(Q===ht&&(Q=q(Q)),k(Q,a.ADD_FORBID_CONTENTS,P)),pt&&($["#text"]=!0),ue&&k($,["html","head","body"]),$.table&&(k($,["tbody"]),delete Le.tbody),a.TRUSTED_TYPES_POLICY){if(typeof a.TRUSTED_TYPES_POLICY.createHTML!="function")throw Qe('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof a.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Qe('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');E=a.TRUSTED_TYPES_POLICY,oe=E.createHTML("")}else E===void 0&&(E=as(y,r)),E!==null&&typeof oe=="string"&&(oe=E.createHTML(""));G&&G(a),Ae=a},tn=k({},[...At,...St,...Zr]),nn=k({},[..._t,...Xr]),ir=function(a){let u=ee(a);(!u||!u.tagName)&&(u={namespaceURI:ye,tagName:"template"});const h=$e(a.tagName),b=$e(u.tagName);return mt[a.namespaceURI]?a.namespaceURI===Ze?u.namespaceURI===K?h==="svg":u.namespaceURI===Ye?h==="svg"&&(b==="annotation-xml"||gt[b]):!!tn[h]:a.namespaceURI===Ye?u.namespaceURI===K?h==="math":u.namespaceURI===Ze?h==="math"&&kt[b]:!!nn[h]:a.namespaceURI===K?u.namespaceURI===Ze&&!kt[b]||u.namespaceURI===Ye&&!gt[b]?!1:!nn[h]&&(tr[h]||!tn[h]):!!(Me==="application/xhtml+xml"&&mt[a.namespaceURI]):!1},Z=function(a){_e(e.removed,{element:a});try{ee(a).removeChild(a)}catch{ke(a)}},pe=function(a,u){try{_e(e.removed,{attribute:u.getAttributeNode(a),from:u})}catch{_e(e.removed,{attribute:null,from:u})}if(u.removeAttribute(a),a==="is")if(Te||We)try{Z(u)}catch{}else try{u.setAttribute(a,"")}catch{}},rn=function(a){let u=null,h=null;if(ut)a="<remove></remove>"+a;else{const L=gn(a,/^[\r\n\t ]+/);h=L&&L[0]}Me==="application/xhtml+xml"&&ye===K&&(a='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+a+"</body></html>");const b=E?E.createHTML(a):a;if(ye===K)try{u=new _().parseFromString(b,Me)}catch{}if(!u||!u.documentElement){u=Oe.createDocument(ye,"template",null);try{u.documentElement.innerHTML=dt?oe:b}catch{}}const O=u.body||u.documentElement;return a&&h&&O.insertBefore(n.createTextNode(h),O.childNodes[0]||null),ye===K?T.call(u,ue?"html":"body")[0]:ue?u.documentElement:O},sn=function(a){return Be.call(a.ownerDocument||a,a,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT|c.SHOW_PROCESSING_INSTRUCTION|c.SHOW_CDATA_SECTION,null)},an=function(a){a.normalize();const u=Be.call(a.ownerDocument||a,a,c.SHOW_TEXT|c.SHOW_COMMENT|c.SHOW_CDATA_SECTION|c.SHOW_PROCESSING_INSTRUCTION,null);let h=u.nextNode();for(;h;){let b=h.data;Se([be,Ue,He],O=>{b=Ee(b,O," ")}),h.data=b,h=u.nextNode()}},bt=function(a){return a instanceof x&&(typeof a.nodeName!="string"||typeof a.textContent!="string"||typeof a.removeChild!="function"||!(a.attributes instanceof d)||typeof a.removeAttribute!="function"||typeof a.setAttribute!="function"||typeof a.namespaceURI!="string"||typeof a.insertBefore!="function"||typeof a.hasChildNodes!="function")},Xe=function(a){if(!re||typeof a!="object"||a===null)return!1;try{return typeof re(a)=="number"}catch{return!1}};function te(g,a,u){Se(g,h=>{h.call(e,a,u,Ae)})}const ln=function(a){let u=null;if(te(M.beforeSanitizeElements,a,null),bt(a))return Z(a),!0;const h=P(a.nodeName);if(te(M.uponSanitizeElement,a,{tagName:h,allowedTags:$}),De&&a.hasChildNodes()&&!Xe(a.firstElementChild)&&B(/<[/\w!]/g,a.innerHTML)&&B(/<[/\w!]/g,a.textContent)||De&&a.namespaceURI===K&&h==="style"&&Xe(a.firstElementChild)||a.nodeType===Re.progressingInstruction||De&&a.nodeType===Re.comment&&B(/<[/\w]/g,a.data))return Z(a),!0;if(Le[h]||!(se.tagCheck instanceof Function&&se.tagCheck(h))&&!$[h]){if(!Le[h]&&cn(h)&&(I.tagNameCheck instanceof RegExp&&B(I.tagNameCheck,h)||I.tagNameCheck instanceof Function&&I.tagNameCheck(h)))return!1;if(pt&&!Q[h]){const b=ee(a)||a.parentNode,O=xe(a)||a.childNodes;if(O&&b){const L=O.length;for(let W=L-1;W>=0;--W){const ae=ge(O[W],!0);b.insertBefore(ae,S(a))}}}return Z(a),!0}return a instanceof p&&!ir(a)||(h==="noscript"||h==="noembed"||h==="noframes")&&B(/<\/no(script|embed|frames)/i,a.innerHTML)?(Z(a),!0):(ie&&a.nodeType===Re.text&&(u=a.textContent,Se([be,Ue,He],b=>{u=Ee(u,b," ")}),a.textContent!==u&&(_e(e.removed,{element:a.cloneNode()}),a.textContent=u)),te(M.afterSanitizeElements,a,null),!1)},on=function(a,u,h){if(Ge[u]||Zt&&(u==="id"||u==="name")&&(h in n||h in sr))return!1;const b=F[u]||se.attributeCheck instanceof Function&&se.attributeCheck(u,a);if(!(ot&&!Ge[u]&&B(Vn,u))){if(!(Wt&&B(Qn,u))){if(!b||Ge[u]){if(!(cn(a)&&(I.tagNameCheck instanceof RegExp&&B(I.tagNameCheck,a)||I.tagNameCheck instanceof Function&&I.tagNameCheck(a))&&(I.attributeNameCheck instanceof RegExp&&B(I.attributeNameCheck,u)||I.attributeNameCheck instanceof Function&&I.attributeNameCheck(u,a))||u==="is"&&I.allowCustomizedBuiltInElements&&(I.tagNameCheck instanceof RegExp&&B(I.tagNameCheck,h)||I.tagNameCheck instanceof Function&&I.tagNameCheck(h))))return!1}else if(!ft[u]){if(!B(Ut,Ee(h,Bt,""))){if(!((u==="src"||u==="xlink:href"||u==="href")&&a!=="script"&&kn(h,"data:")===0&&Qt[a])){if(!(qt&&!B(Kn,Ee(h,Bt,"")))){if(h)return!1}}}}}}return!0},ar=k({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),cn=function(a){return!ar[$e(a)]&&B(Jn,a)},un=function(a){te(M.beforeSanitizeAttributes,a,null);const u=a.attributes;if(!u||bt(a))return;const h={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:F,forceKeepAttr:void 0};let b=u.length;for(;b--;){const O=u[b],L=O.name,W=O.namespaceURI,ae=O.value,ne=P(L),wt=ae;let j=L==="value"?wt:Br(wt);if(h.attrName=ne,h.attrValue=j,h.keepAttr=!0,h.forceKeepAttr=void 0,te(M.uponSanitizeAttribute,a,h),j=h.attrValue,Xt&&(ne==="id"||ne==="name")&&kn(j,Vt)!==0&&(pe(L,a),j=Vt+j),De&&B(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,j)){pe(L,a);continue}if(ne==="attributename"&&gn(j,"href")){pe(L,a);continue}if(h.forceKeepAttr)continue;if(!h.keepAttr){pe(L,a);continue}if(!Yt&&B(/\/>/i,j)){pe(L,a);continue}ie&&Se([be,Ue,He],hn=>{j=Ee(j,hn," ")});const pn=P(a.nodeName);if(!on(pn,ne,j)){pe(L,a);continue}if(E&&typeof y=="object"&&typeof y.getAttributeType=="function"&&!W)switch(y.getAttributeType(pn,ne)){case"TrustedHTML":{j=E.createHTML(j);break}case"TrustedScriptURL":{j=E.createScriptURL(j);break}}if(j!==wt)try{W?a.setAttributeNS(W,L,j):a.setAttribute(L,j),bt(a)?Z(a):mn(e.removed)}catch{pe(L,a)}}te(M.afterSanitizeAttributes,a,null)},Tt=function(a){let u=null;const h=sn(a);for(te(M.beforeSanitizeShadowDOM,a,null);u=h.nextNode();)te(M.uponSanitizeShadowNode,u,null),ln(u),un(u),u.content instanceof i&&Tt(u.content);te(M.afterSanitizeShadowDOM,a,null)},Ve=function(a){if(a.nodeType===Re.element&&a.shadowRoot instanceof i){const b=a.shadowRoot;Ve(b),Tt(b)}const u=a.childNodes;if(!u)return;const h=[];Se(u,b=>{_e(h,b)});for(const b of h)Ve(b)};return e.sanitize=function(g){let a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},u=null,h=null,b=null,O=null;if(dt=!g,dt&&(g="<!-->"),typeof g!="string"&&!Xe(g)&&(g=qr(g),typeof g!="string"))throw Qe("dirty is not a string, aborting");if(!e.isSupported)return g;if(ct||xt(a),e.removed=[],typeof g=="string"&&(ve=!1),ve){const ae=g.nodeName;if(typeof ae=="string"){const ne=P(ae);if(!$[ne]||Le[ne])throw Qe("root node is forbidden and cannot be sanitized in-place")}Ve(g)}else if(Xe(g))u=rn("<!---->"),h=u.ownerDocument.importNode(g,!0),h.nodeType===Re.element&&h.nodeName==="BODY"||h.nodeName==="HTML"?u=h:u.appendChild(h),Ve(h);else{if(!Te&&!ie&&!ue&&g.indexOf("<")===-1)return E&&qe?E.createHTML(g):g;if(u=rn(g),!u)return Te?null:qe?oe:""}u&&ut&&Z(u.firstChild);const L=sn(ve?g:u);for(;b=L.nextNode();)ln(b),un(b),b.content instanceof i&&Tt(b.content);if(ve)return ie&&an(g),g;if(Te){if(ie&&an(u),We)for(O=lt.call(u.ownerDocument);u.firstChild;)O.appendChild(u.firstChild);else O=u;return(F.shadowroot||F.shadowrootmode)&&(O=z.call(s,O,!0)),O}let W=ue?u.outerHTML:u.innerHTML;return ue&&$["!doctype"]&&u.ownerDocument&&u.ownerDocument.doctype&&u.ownerDocument.doctype.name&&B(rs,u.ownerDocument.doctype.name)&&(W="<!DOCTYPE "+u.ownerDocument.doctype.name+`>
3
3
  `+W),ie&&Se([be,Ue,He],ae=>{W=Ee(W,ae," ")}),E&&qe?E.createHTML(W):W},e.setConfig=function(){let g=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};xt(g),ct=!0},e.clearConfig=function(){Ae=null,ct=!1},e.isValidAttribute=function(g,a,u){Ae||xt({});const h=P(g),b=P(a);return on(h,b,u)},e.addHook=function(g,a){typeof a=="function"&&_e(M[g],a)},e.removeHook=function(g,a){if(a!==void 0){const u=jr(M[g],a);return u===-1?void 0:Fr(M[g],u,1)[0]}return mn(M[g])},e.removeHooks=function(g){M[g]=[]},e.removeAllHooks=function(){M=_n()},e}var v=jn(),ls=v;v.sanitize.bind(v);v.isSupported;v.addHook.bind(v);v.removeHook.bind(v);v.removeHooks.bind(v);v.removeAllHooks.bind(v);v.setConfig.bind(v);v.clearConfig.bind(v);v.isValidAttribute.bind(v);v.version;v.removed;function Lt(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var me=Lt();function Fn(t){me=t}var fe={exec:()=>null};function Ne(t){let e=[];return n=>{let s=Math.max(0,Math.min(3,n-1)),r=e[s];return r||(r=t(s),e[s]=r),r}}function w(t,e=""){let n=typeof t=="string"?t:t.source,s={replace:(r,i)=>{let l=typeof i=="string"?i:i.source;return l=l.replace(U.caret,"$1"),n=n.replace(r,l),s},getRegex:()=>new RegExp(n,e)};return s}var os=((t="")=>{try{return!!new RegExp("(?<=1)(?<!1)"+t)}catch{return!1}})(),U={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:t=>new RegExp(`^( {0,3}${t})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:Ne(t=>new RegExp(`^ {0,${t}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`)),hrRegex:Ne(t=>new RegExp(`^ {0,${t}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`)),fencesBeginRegex:Ne(t=>new RegExp(`^ {0,${t}}(?:\`\`\`|~~~)`)),headingBeginRegex:Ne(t=>new RegExp(`^ {0,${t}}#`)),htmlBeginRegex:Ne(t=>new RegExp(`^ {0,${t}}<(?:[a-z].*>|!--)`,"i")),blockquoteBeginRegex:Ne(t=>new RegExp(`^ {0,${t}}>`))},cs=/^(?:[ \t]*(?:\n|$))+/,us=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,ps=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,Fe=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,hs=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,Dt=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,Bn=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,Un=w(Bn).replace(/bull/g,Dt).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),fs=w(Bn).replace(/bull/g,Dt).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),vt=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,ds=/^[^\n]+/,Mt=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,ms=w(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",Mt).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),gs=w(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,Dt).getRegex(),it="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",Pt=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,ks=w("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",Pt).replace("tag",it).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Hn=w(vt).replace("hr",Fe).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",it).getRegex(),xs=w(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",Hn).getRegex(),zt={blockquote:xs,code:us,def:ms,fences:ps,heading:hs,hr:Fe,html:ks,lheading:Un,list:gs,newline:cs,paragraph:Hn,table:fe,text:ds},En=w("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",Fe).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",it).getRegex(),bs={...zt,lheading:fs,table:En,paragraph:w(vt).replace("hr",Fe).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",En).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",it).getRegex()},Ts={...zt,html:w(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",Pt).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:fe,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:w(vt).replace("hr",Fe).replace("heading",` *#{1,6} *[^
4
4
  ]`).replace("lheading",Un).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},ws=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,ys=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,Gn=/^( {2,}|\\)\n(?!\s*$)/,As=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,Ie=/[\p{P}\p{S}]/u,at=/[\s\p{P}\p{S}]/u,$t=/[^\s\p{P}\p{S}]/u,Ss=w(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,at).getRegex(),Wn=/(?!~)[\p{P}\p{S}]/u,_s=/(?!~)[\s\p{P}\p{S}]/u,Es=/(?:[^\s\p{P}\p{S}]|~)/u,Rs=w(/link|precode-code|html/,"g").replace("link",/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",os?"(?<!`)()":"(^^|[^`])").replace("code",/(?<b>`+)[^`]+\k<b>(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),qn=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,Ns=w(qn,"u").replace(/punct/g,Ie).getRegex(),Cs=w(qn,"u").replace(/punct/g,Wn).getRegex(),Yn="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",Is=w(Yn,"gu").replace(/notPunctSpace/g,$t).replace(/punctSpace/g,at).replace(/punct/g,Ie).getRegex(),Os=w(Yn,"gu").replace(/notPunctSpace/g,Es).replace(/punctSpace/g,_s).replace(/punct/g,Wn).getRegex(),Ls=w("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,$t).replace(/punctSpace/g,at).replace(/punct/g,Ie).getRegex(),Ds=w(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,Ie).getRegex(),vs="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",Ms=w(vs,"gu").replace(/notPunctSpace/g,$t).replace(/punctSpace/g,at).replace(/punct/g,Ie).getRegex(),Ps=w(/\\(punct)/,"gu").replace(/punct/g,Ie).getRegex(),zs=w(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),$s=w(Pt).replace("(?:-->|$)","-->").getRegex(),js=w("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment",$s).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),tt=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,Fs=w(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label",tt).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Zn=w(/^!?\[(label)\]\[(ref)\]/).replace("label",tt).replace("ref",Mt).getRegex(),Xn=w(/^!?\[(ref)\](?:\[\])?/).replace("ref",Mt).getRegex(),Bs=w("reflink|nolink(?!\\()","g").replace("reflink",Zn).replace("nolink",Xn).getRegex(),Rn=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,jt={_backpedal:fe,anyPunctuation:Ps,autolink:zs,blockSkip:Rs,br:Gn,code:ys,del:fe,delLDelim:fe,delRDelim:fe,emStrongLDelim:Ns,emStrongRDelimAst:Is,emStrongRDelimUnd:Ls,escape:ws,link:Fs,nolink:Xn,punctuation:Ss,reflink:Zn,reflinkSearch:Bs,tag:js,text:As,url:fe},Us={...jt,link:w(/^!?\[(label)\]\((.*?)\)/).replace("label",tt).getRegex(),reflink:w(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",tt).getRegex()},Ct={...jt,emStrongRDelimAst:Os,emStrongLDelim:Cs,delLDelim:Ds,delRDelim:Ms,url:w(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",Rn).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:w(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol",Rn).getRegex()},Hs={...Ct,br:w(Gn).replace("{2,}","*").getRegex(),text:w(Ct.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},Je={normal:zt,gfm:bs,pedantic:Ts},ze={normal:jt,gfm:Ct,breaks:Hs,pedantic:Us},Gs={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},Nn=t=>Gs[t];function J(t,e){if(e){if(U.escapeTest.test(t))return t.replace(U.escapeReplace,Nn)}else if(U.escapeTestNoEncode.test(t))return t.replace(U.escapeReplaceNoEncode,Nn);return t}function Cn(t){try{t=encodeURI(t).replace(U.percentDecode,"%")}catch{return null}return t}function In(t,e){let n=t.replace(U.findPipe,(i,l,o)=>{let p=!1,c=l;for(;--c>=0&&o[c]==="\\";)p=!p;return p?"|":" |"}),s=n.split(U.splitPipe),r=0;if(s[0].trim()||s.shift(),s.length>0&&!s.at(-1)?.trim()&&s.pop(),e)if(s.length>e)s.splice(e);else for(;s.length<e;)s.push("");for(;r<s.length;r++)s[r]=s[r].trim().replace(U.slashPipe,"|");return s}function le(t,e,n){let s=t.length;if(s===0)return"";let r=0;for(;r<s&&t.charAt(s-r-1)===e;)r++;return t.slice(0,s-r)}function On(t){let e=t.split(`