@loicngr/kobo 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/mcp-server/kobo-tasks-handlers.js +147 -0
- package/dist/mcp-server/kobo-tasks-server.js +236 -29
- package/dist/server/index.js +4 -1
- package/dist/server/routes/images.js +57 -0
- package/dist/server/routes/workspaces.js +53 -5
- package/dist/server/services/agent-manager.js +14 -2
- package/dist/server/services/image-service.js +73 -0
- package/dist/server/services/settings-service.js +55 -9
- package/dist/server/services/workspace-service.js +6 -0
- package/dist/server/utils/git-ops.js +29 -0
- package/package.json +3 -1
- package/src/client/dist/spa/assets/ActivityFeed-CPfYmybV.js +60 -0
- package/src/client/dist/spa/assets/ActivityFeed-DBljh9rq.css +1 -0
- package/src/client/dist/spa/assets/CreatePage-C_c3Gr0F.js +2 -0
- package/src/client/dist/spa/assets/MainLayout-BMxEROm4.css +1 -0
- package/src/client/dist/spa/assets/MainLayout-QtbVbbnd.js +1 -0
- package/src/client/dist/spa/assets/QBadge-CNojh9Rl.js +1 -0
- package/src/client/dist/spa/assets/QDialog-DgR7t6Vf.js +1 -0
- package/src/client/dist/spa/assets/QExpansionItem-VVjlYOIT.js +1 -0
- package/src/client/dist/spa/assets/QPage-DX4g-Dpe.js +1 -0
- package/src/client/dist/spa/assets/{QSpinnerDots-DcaNq8uL.js → QSpinnerDots-DeCf9Lr-.js} +1 -1
- package/src/client/dist/spa/assets/QTooltip-DKYJ8kVW.js +1 -0
- package/src/client/dist/spa/assets/SettingsPage-DjWKsLC-.js +1 -0
- package/src/client/dist/spa/assets/SettingsPage-Yv31Z9aG.css +1 -0
- package/src/client/dist/spa/assets/WorkspacePage-DkM58caD.css +1 -0
- package/src/client/dist/spa/assets/WorkspacePage-EAh91w9s.js +2 -0
- package/src/client/dist/spa/assets/_plugin-vue_export-helper-C6NdfBK4.js +1 -0
- package/src/client/dist/spa/assets/index-C4WDJfjD.js +5 -0
- package/src/client/dist/spa/assets/{nodes-DeIen-kp.js → nodes-irfhA8FK.js} +1 -1
- package/src/client/dist/spa/assets/use-checkbox-BS9cbwg_.js +1 -0
- package/src/client/dist/spa/assets/use-quasar-CH0pSHUf.js +1 -0
- package/src/client/dist/spa/index.html +2 -2
- package/src/mcp-server/README.md +179 -0
- package/src/mcp-server/kobo-tasks-handlers.ts +238 -0
- package/src/mcp-server/kobo-tasks-server.ts +263 -29
- package/src/client/dist/spa/assets/ActivityFeed-B2jpghoY.js +0 -60
- package/src/client/dist/spa/assets/ActivityFeed-DBNn62g_.css +0 -1
- package/src/client/dist/spa/assets/CreatePage-BdmfCbtE.js +0 -2
- package/src/client/dist/spa/assets/MainLayout-CHyXeNrm.js +0 -1
- package/src/client/dist/spa/assets/MainLayout-D0OU6djX.css +0 -1
- package/src/client/dist/spa/assets/QBadge-Cb92Ia8-.js +0 -1
- package/src/client/dist/spa/assets/QDialog-4OVnJT5b.js +0 -1
- package/src/client/dist/spa/assets/QExpansionItem-B7zh077K.js +0 -1
- package/src/client/dist/spa/assets/QPage-DKJI735G.js +0 -1
- package/src/client/dist/spa/assets/QTabPanels-BAa7ivXp.js +0 -1
- package/src/client/dist/spa/assets/QTooltip-637ruGFc.js +0 -1
- package/src/client/dist/spa/assets/SettingsPage-B9VYIQs-.css +0 -1
- package/src/client/dist/spa/assets/SettingsPage-BEDCuLGe.js +0 -1
- package/src/client/dist/spa/assets/WorkspacePage-C6D1voGm.js +0 -2
- package/src/client/dist/spa/assets/WorkspacePage-HtatyhXN.css +0 -1
- package/src/client/dist/spa/assets/_plugin-vue_export-helper-CHpmshS7.js +0 -1
- package/src/client/dist/spa/assets/index-BZyTYZ0E.js +0 -5
- package/src/client/dist/spa/assets/use-quasar-Dq-Vjx_2.js +0 -1
|
@@ -4,11 +4,17 @@ import path from 'node:path';
|
|
|
4
4
|
import readline from 'node:readline';
|
|
5
5
|
import { nanoid } from 'nanoid';
|
|
6
6
|
import { getDb } from '../db/index.js';
|
|
7
|
-
import { ensureKoboHome, getCompiledMcpServerPath, getDbPath, getMcpServerSourcePath, getSkillsPath, } from '../utils/paths.js';
|
|
7
|
+
import { ensureKoboHome, getCompiledMcpServerPath, getDbPath, getMcpServerSourcePath, getSettingsPath, getSkillsPath, } from '../utils/paths.js';
|
|
8
8
|
import { registerProcess, unregisterProcess } from '../utils/process-tracker.js';
|
|
9
9
|
import { emit } from './websocket-service.js';
|
|
10
10
|
import { getWorkspace as getWs, listTasks, updateWorkspaceStatus } from './workspace-service.js';
|
|
11
11
|
// ── State ──────────────────────────────────────────────────────────────────────
|
|
12
|
+
/** Actual bound port of the running backend — set at startup via setBackendPort() */
|
|
13
|
+
let backendPort = process.env.PORT ? parseInt(process.env.PORT, 10) : 3000;
|
|
14
|
+
/** Called from index.ts once the HTTP server is listening so MCP children can reach it. */
|
|
15
|
+
export function setBackendPort(port) {
|
|
16
|
+
backendPort = port;
|
|
17
|
+
}
|
|
12
18
|
/** workspaceId -> agent instance */
|
|
13
19
|
const agents = new Map();
|
|
14
20
|
/** workspaceId -> last Claude session ID (for --resume) */
|
|
@@ -37,6 +43,7 @@ export function startAgent(workspaceId, workingDir, prompt, model, resume = fals
|
|
|
37
43
|
}
|
|
38
44
|
const db = getDb();
|
|
39
45
|
let agentSessionId;
|
|
46
|
+
let resumedClaudeSessionId;
|
|
40
47
|
// Build CLI args
|
|
41
48
|
const args = ['--dangerously-skip-permissions', '--output-format', 'stream-json', '--verbose'];
|
|
42
49
|
if (model && model !== 'auto') {
|
|
@@ -48,6 +55,7 @@ export function startAgent(workspaceId, workingDir, prompt, model, resume = fals
|
|
|
48
55
|
.get(workspaceId);
|
|
49
56
|
const claudeSessionId = sessionIds.get(workspaceId) ?? lastSession?.claude_session_id;
|
|
50
57
|
if (claudeSessionId) {
|
|
58
|
+
resumedClaudeSessionId = claudeSessionId;
|
|
51
59
|
args.push('--resume', claudeSessionId, '-p', prompt);
|
|
52
60
|
// Always reuse existing session — find by claude_session_id if lastSession didn't match
|
|
53
61
|
const existingId = lastSession?.id ??
|
|
@@ -86,7 +94,8 @@ export function startAgent(workspaceId, workingDir, prompt, model, resume = fals
|
|
|
86
94
|
env: {
|
|
87
95
|
KOBO_WORKSPACE_ID: workspaceId,
|
|
88
96
|
KOBO_DB_PATH: getDbPath(),
|
|
89
|
-
|
|
97
|
+
KOBO_SETTINGS_PATH: getSettingsPath(),
|
|
98
|
+
KOBO_BACKEND_URL: `http://127.0.0.1:${backendPort}`,
|
|
90
99
|
},
|
|
91
100
|
},
|
|
92
101
|
},
|
|
@@ -117,6 +126,7 @@ export function startAgent(workspaceId, workingDir, prompt, model, resume = fals
|
|
|
117
126
|
rl,
|
|
118
127
|
status: 'running',
|
|
119
128
|
agentSessionId,
|
|
129
|
+
claudeSessionId: resumedClaudeSessionId,
|
|
120
130
|
};
|
|
121
131
|
// ── stdout line-by-line (NDJSON) ──
|
|
122
132
|
rl.on('line', (line) => {
|
|
@@ -287,6 +297,8 @@ export function startAgent(workspaceId, workingDir, prompt, model, resume = fals
|
|
|
287
297
|
});
|
|
288
298
|
// Store in agents map
|
|
289
299
|
agents.set(workspaceId, agent);
|
|
300
|
+
// Notify frontend that agent is now running
|
|
301
|
+
emit(workspaceId, 'agent:status', { status: 'executing' }, agent.claudeSessionId);
|
|
290
302
|
return agent;
|
|
291
303
|
}
|
|
292
304
|
// ── Stop agent ─────────────────────────────────────────────────────────────────
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// src/server/services/image-service.ts
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { nanoid } from 'nanoid';
|
|
5
|
+
const ALLOWED_EXTENSIONS = new Set(['png', 'jpg', 'jpeg', 'gif', 'webp']);
|
|
6
|
+
const IMAGES_DIR = '.ai/images';
|
|
7
|
+
const INDEX_FILE = 'index.json';
|
|
8
|
+
// Per-worktree lock to serialize index.json writes
|
|
9
|
+
const locks = new Map();
|
|
10
|
+
function withLock(worktreePath, fn) {
|
|
11
|
+
const prev = locks.get(worktreePath) ?? Promise.resolve();
|
|
12
|
+
// The second argument to .then() means: even if the previous operation in the
|
|
13
|
+
// queue rejected, still run fn — one failure must not block the whole queue.
|
|
14
|
+
const next = prev.then(fn, fn);
|
|
15
|
+
locks.set(worktreePath, next.then(() => { }, () => { }));
|
|
16
|
+
return next;
|
|
17
|
+
}
|
|
18
|
+
function readIndex(imagesDir) {
|
|
19
|
+
const indexPath = path.join(imagesDir, INDEX_FILE);
|
|
20
|
+
if (!fs.existsSync(indexPath))
|
|
21
|
+
return [];
|
|
22
|
+
try {
|
|
23
|
+
return JSON.parse(fs.readFileSync(indexPath, 'utf-8'));
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
console.error(`[image-service] Failed to parse ${indexPath}, treating as empty index:`, err);
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function writeIndex(imagesDir, entries) {
|
|
31
|
+
fs.writeFileSync(path.join(imagesDir, INDEX_FILE), JSON.stringify(entries, null, 2));
|
|
32
|
+
}
|
|
33
|
+
export async function saveImage(worktreePath, fileBuffer, originalName) {
|
|
34
|
+
const ext = path.extname(originalName).toLowerCase().replace('.', '');
|
|
35
|
+
if (!ext) {
|
|
36
|
+
throw new Error(`File has no extension. Allowed: ${[...ALLOWED_EXTENSIONS].join(', ')}`);
|
|
37
|
+
}
|
|
38
|
+
if (!ALLOWED_EXTENSIONS.has(ext)) {
|
|
39
|
+
throw new Error(`Unsupported image extension: '${ext}'. Allowed: ${[...ALLOWED_EXTENSIONS].join(', ')}`);
|
|
40
|
+
}
|
|
41
|
+
const uid = nanoid(10);
|
|
42
|
+
const imagesDir = path.join(worktreePath, IMAGES_DIR);
|
|
43
|
+
// mkdirSync is idempotent — safe to call outside the lock
|
|
44
|
+
fs.mkdirSync(imagesDir, { recursive: true });
|
|
45
|
+
const filename = `${uid}.${ext}`;
|
|
46
|
+
await withLock(worktreePath, () => {
|
|
47
|
+
// Write the image file inside the lock so both the file write and index
|
|
48
|
+
// update happen atomically — avoids orphan files on crash between the two.
|
|
49
|
+
fs.writeFileSync(path.join(imagesDir, filename), fileBuffer);
|
|
50
|
+
const entries = readIndex(imagesDir);
|
|
51
|
+
entries.push({ uid, originalName, createdAt: new Date().toISOString() });
|
|
52
|
+
writeIndex(imagesDir, entries);
|
|
53
|
+
});
|
|
54
|
+
return { uid, relativePath: `${IMAGES_DIR}/${filename}` };
|
|
55
|
+
}
|
|
56
|
+
export async function deleteImage(worktreePath, uid) {
|
|
57
|
+
const imagesDir = path.join(worktreePath, IMAGES_DIR);
|
|
58
|
+
await withLock(worktreePath, () => {
|
|
59
|
+
const entries = readIndex(imagesDir);
|
|
60
|
+
const idx = entries.findIndex((e) => e.uid === uid);
|
|
61
|
+
if (idx === -1) {
|
|
62
|
+
throw new Error(`Image '${uid}' not found in index`);
|
|
63
|
+
}
|
|
64
|
+
// Find the file on disk (we need the extension)
|
|
65
|
+
const files = fs.existsSync(imagesDir) ? fs.readdirSync(imagesDir) : [];
|
|
66
|
+
const imageFile = files.find((f) => f.startsWith(`${uid}.`));
|
|
67
|
+
if (imageFile) {
|
|
68
|
+
fs.unlinkSync(path.join(imagesDir, imageFile));
|
|
69
|
+
}
|
|
70
|
+
entries.splice(idx, 1);
|
|
71
|
+
writeIndex(imagesDir, entries);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
@@ -51,6 +51,12 @@ Please:
|
|
|
51
51
|
2. Verify that all acceptance criteria are checked
|
|
52
52
|
3. Post a comment on the PR summarizing what was done and any follow-up items
|
|
53
53
|
`;
|
|
54
|
+
/**
|
|
55
|
+
* Bump when adding/removing/renaming fields in Settings that require a migration.
|
|
56
|
+
* Each bump must come with a corresponding entry in `runSettingsMigrations()`.
|
|
57
|
+
* Append-only — never renumber shipped versions.
|
|
58
|
+
*/
|
|
59
|
+
export const SETTINGS_SCHEMA_VERSION = 1;
|
|
54
60
|
let settingsFilePath = getSettingsPath();
|
|
55
61
|
/** Override the settings file path (used by tests). */
|
|
56
62
|
export function _setSettingsPath(p) {
|
|
@@ -58,6 +64,7 @@ export function _setSettingsPath(p) {
|
|
|
58
64
|
}
|
|
59
65
|
function defaultSettings() {
|
|
60
66
|
return {
|
|
67
|
+
schemaVersion: SETTINGS_SCHEMA_VERSION,
|
|
61
68
|
global: {
|
|
62
69
|
defaultModel: 'auto',
|
|
63
70
|
prPromptTemplate: DEFAULT_PR_PROMPT_TEMPLATE,
|
|
@@ -83,6 +90,38 @@ function defaultProjectSettings(projectPath) {
|
|
|
83
90
|
function pickKnownKeys(data, allowedKeys) {
|
|
84
91
|
return Object.fromEntries(Object.entries(data).filter(([key]) => allowedKeys.includes(key)));
|
|
85
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Apply migrations sequentially to bring an older settings object up to
|
|
95
|
+
* SETTINGS_SCHEMA_VERSION. Each migration is append-only — never edit or
|
|
96
|
+
* reorder shipped migrations. The returned object carries the bumped
|
|
97
|
+
* schemaVersion; callers should persist it back to disk.
|
|
98
|
+
*/
|
|
99
|
+
export function runSettingsMigrations(raw) {
|
|
100
|
+
// Ensure a baseline shape so we can safely read .global and .projects
|
|
101
|
+
const current = raw;
|
|
102
|
+
if (!current.global || typeof current.global !== 'object') {
|
|
103
|
+
current.global = {};
|
|
104
|
+
}
|
|
105
|
+
if (!Array.isArray(current.projects)) {
|
|
106
|
+
current.projects = [];
|
|
107
|
+
}
|
|
108
|
+
// Detect legacy (pre-versioned) settings as v0
|
|
109
|
+
let version = typeof current.schemaVersion === 'number' ? current.schemaVersion : 0;
|
|
110
|
+
// ── v0 → v1: ensure gitConventions field exists on global and every project
|
|
111
|
+
if (version < 1) {
|
|
112
|
+
if (typeof current.global.gitConventions !== 'string') {
|
|
113
|
+
current.global.gitConventions = '';
|
|
114
|
+
}
|
|
115
|
+
for (const p of current.projects) {
|
|
116
|
+
if (typeof p.gitConventions !== 'string')
|
|
117
|
+
p.gitConventions = '';
|
|
118
|
+
}
|
|
119
|
+
version = 1;
|
|
120
|
+
}
|
|
121
|
+
// Future migrations go here — increment SETTINGS_SCHEMA_VERSION in lockstep.
|
|
122
|
+
current.schemaVersion = version;
|
|
123
|
+
return current;
|
|
124
|
+
}
|
|
86
125
|
function readSettings() {
|
|
87
126
|
if (!fs.existsSync(settingsFilePath)) {
|
|
88
127
|
const defaults = defaultSettings();
|
|
@@ -90,21 +129,28 @@ function readSettings() {
|
|
|
90
129
|
return defaults;
|
|
91
130
|
}
|
|
92
131
|
const raw = fs.readFileSync(settingsFilePath, 'utf-8');
|
|
93
|
-
|
|
94
|
-
|
|
132
|
+
let parsed;
|
|
133
|
+
try {
|
|
134
|
+
parsed = JSON.parse(raw);
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
95
137
|
const defaults = defaultSettings();
|
|
96
138
|
writeSettings(defaults);
|
|
97
139
|
return defaults;
|
|
98
140
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
141
|
+
if (!parsed || typeof parsed !== 'object') {
|
|
142
|
+
const defaults = defaultSettings();
|
|
143
|
+
writeSettings(defaults);
|
|
144
|
+
return defaults;
|
|
102
145
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
146
|
+
const originalVersion = parsed.schemaVersion;
|
|
147
|
+
const migrated = runSettingsMigrations(parsed);
|
|
148
|
+
// If migrations bumped the version, persist the upgraded settings so the
|
|
149
|
+
// next process doesn't re-run them on every load.
|
|
150
|
+
if (migrated.schemaVersion !== originalVersion) {
|
|
151
|
+
writeSettings(migrated);
|
|
106
152
|
}
|
|
107
|
-
return
|
|
153
|
+
return migrated;
|
|
108
154
|
}
|
|
109
155
|
function writeSettings(settings) {
|
|
110
156
|
const tmpPath = `${settingsFilePath}.tmp`;
|
|
@@ -90,6 +90,12 @@ export function updateWorkspaceName(id, name) {
|
|
|
90
90
|
db.prepare('UPDATE workspaces SET name = ?, updated_at = ? WHERE id = ?').run(name, now, id);
|
|
91
91
|
return getWorkspace(id);
|
|
92
92
|
}
|
|
93
|
+
export function updateWorkspaceModel(id, model) {
|
|
94
|
+
const db = getDb();
|
|
95
|
+
const now = new Date().toISOString();
|
|
96
|
+
db.prepare('UPDATE workspaces SET model = ?, updated_at = ? WHERE id = ?').run(model, now, id);
|
|
97
|
+
return getWorkspace(id);
|
|
98
|
+
}
|
|
93
99
|
export function updateDevServerStatus(id, status) {
|
|
94
100
|
const db = getDb();
|
|
95
101
|
db.prepare('UPDATE workspaces SET dev_server_status = ? WHERE id = ?').run(status, id);
|
|
@@ -99,6 +99,24 @@ export function pushBranch(repoPath, branchName, remote = 'origin') {
|
|
|
99
99
|
throw new Error(`Failed to push branch '${branchName}' to '${remote}': ${message}`);
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
|
+
export function getCommitCount(repoPath, base, head) {
|
|
103
|
+
try {
|
|
104
|
+
const output = git(repoPath, ['rev-list', '--count', `${base}..${head}`]);
|
|
105
|
+
return parseInt(output, 10) || 0;
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return 0;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
export function getStructuredDiffStatsBetween(repoPath, base, head) {
|
|
112
|
+
try {
|
|
113
|
+
const output = git(repoPath, ['diff', '--shortstat', `${base}...${head}`]);
|
|
114
|
+
return parseDiffShortstat(output);
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
return { filesChanged: 0, insertions: 0, deletions: 0 };
|
|
118
|
+
}
|
|
119
|
+
}
|
|
102
120
|
export function getCommitsBetween(repoPath, base, head) {
|
|
103
121
|
try {
|
|
104
122
|
return git(repoPath, ['log', `${base}..${head}`, '--pretty=format:- %s (%h)', '--no-merges']);
|
|
@@ -107,6 +125,17 @@ export function getCommitsBetween(repoPath, base, head) {
|
|
|
107
125
|
return '';
|
|
108
126
|
}
|
|
109
127
|
}
|
|
128
|
+
export function getPrUrl(repoPath, branchName) {
|
|
129
|
+
try {
|
|
130
|
+
return (execFileSync('gh', ['pr', 'view', branchName, '--json', 'url', '--jq', '.url'], {
|
|
131
|
+
cwd: repoPath,
|
|
132
|
+
encoding: 'utf-8',
|
|
133
|
+
}).trim() || null);
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
110
139
|
export function getDiffStatsBetween(repoPath, base, head) {
|
|
111
140
|
try {
|
|
112
141
|
return git(repoPath, ['diff', '--shortstat', `${base}...${head}`]);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loicngr/kobo",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Kōbō — multi-workspace agent manager for Claude Code. Orchestrates isolated git worktrees with dev servers, Notion integration, and MCP tools.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "GPL-3.0-or-later",
|
|
@@ -56,6 +56,8 @@
|
|
|
56
56
|
"start": "node dist/server/index.js",
|
|
57
57
|
"test": "vitest run --config vitest.config.ts --root .",
|
|
58
58
|
"test:watch": "vitest --config vitest.config.ts --root .",
|
|
59
|
+
"test:client": "cd src/client && npm test",
|
|
60
|
+
"test:all": "npm test && npm run test:client",
|
|
59
61
|
"lint": "biome check .",
|
|
60
62
|
"lint:fix": "biome check --write .",
|
|
61
63
|
"format": "biome format --write .",
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import{At as e,Ct as t,Gt as n,It as r,Jt as i,Kt as a,Lt as o,Mt as s,Pt as c,Vt as l,dt as u,ft as d,gt as f,ht as p,kt as m,mt as h,ot as g,pt as _,r as ee,ut as te,vt as v,y}from"./nodes-irfhA8FK.js";import{i as ne,o as re,s as b}from"./index-C4WDJfjD.js";import{t as ie}from"./QSpinnerDots-DeCf9Lr-.js";import{A as ae,t as x}from"./_plugin-vue_export-helper-C6NdfBK4.js";import{t as oe}from"./QTooltip-DKYJ8kVW.js";var{entries:se,setPrototypeOf:S,isFrozen:ce,getPrototypeOf:le,getOwnPropertyDescriptor:ue}=Object,{freeze:C,seal:w,create:de}=Object,{apply:fe,construct:pe}=typeof Reflect<`u`&&Reflect;C||=function(e){return e},w||=function(e){return e},fe||=function(e,t){var n=[...arguments].slice(2);return e.apply(t,n)},pe||=function(e){return new e(...[...arguments].slice(1))};var T=A(Array.prototype.forEach),me=A(Array.prototype.lastIndexOf),E=A(Array.prototype.pop),he=A(Array.prototype.push),ge=A(Array.prototype.splice),_e=A(String.prototype.toLowerCase),ve=A(String.prototype.toString),D=A(String.prototype.match),ye=A(String.prototype.replace),be=A(String.prototype.indexOf),xe=A(String.prototype.trim),O=A(Object.prototype.hasOwnProperty),k=A(RegExp.prototype.test),Se=j(TypeError);function A(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);var n=[...arguments].slice(1);return fe(e,t,n)}}function j(e){return function(){return pe(e,[...arguments])}}function M(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:_e;S&&S(e,null);let r=t.length;for(;r--;){let i=t[r];if(typeof i==`string`){let e=n(i);e!==i&&(ce(t)||(t[r]=e),i=e)}e[i]=!0}return e}function Ce(e){for(let t=0;t<e.length;t++)O(e,t)||(e[t]=null);return e}function N(e){let t=de(null);for(let[n,r]of se(e))O(e,n)&&(Array.isArray(r)?t[n]=Ce(r):r&&typeof r==`object`&&r.constructor===Object?t[n]=N(r):t[n]=r);return t}function P(e,t){for(;e!==null;){let n=ue(e,t);if(n){if(n.get)return A(n.get);if(typeof n.value==`function`)return A(n.value)}e=le(e)}function n(){return null}return n}var we=C(`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`.split(`.`)),Te=C(`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`.split(`.`)),Ee=C([`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`]),De=C([`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`]),Oe=C(`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`.split(`.`)),ke=C([`maction`,`maligngroup`,`malignmark`,`mlongdiv`,`mscarries`,`mscarry`,`msgroup`,`mstack`,`msline`,`msrow`,`semantics`,`annotation`,`annotation-xml`,`mprescripts`,`none`]),Ae=C([`#text`]),je=C(`accept.action.align.alt.autocapitalize.autocomplete.autopictureinpicture.autoplay.background.bgcolor.border.capture.cellpadding.cellspacing.checked.cite.class.clear.color.cols.colspan.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.slot`.split(`.`)),Me=C(`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`.split(`.`)),Ne=C(`accent.accentunder.align.bevelled.close.columnsalign.columnlines.columnspan.denomalign.depth.dir.display.displaystyle.encoding.fence.frame.height.href.id.largeop.length.linethickness.lspace.lquote.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`.split(`.`)),Pe=C([`xlink:href`,`xml:id`,`xlink:title`,`xml:space`,`xmlns:xlink`]),F=w(/\{\{[\w\W]*|[\w\W]*\}\}/gm),Fe=w(/<%[\w\W]*|[\w\W]*%>/gm),I=w(/\$\{[\w\W]*/gm),Ie=w(/^data-[\-\w.\u00B7-\uFFFF]+$/),Le=w(/^aria-[\-\w]+$/),Re=w(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),L=w(/^(?:\w+script|data):/i),ze=w(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Be=w(/^html$/i),Ve=w(/^[a-z][.\w]*(-[.\w]+)+$/i),He=Object.freeze({__proto__:null,ARIA_ATTR:Le,ATTR_WHITESPACE:ze,CUSTOM_ELEMENT:Ve,DATA_ATTR:Ie,DOCTYPE_NAME:Be,ERB_EXPR:Fe,IS_ALLOWED_URI:Re,IS_SCRIPT_OR_DATA:L,MUSTACHE_EXPR:F,TMPLIT_EXPR:I}),Ue={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},We=function(){return typeof window>`u`?null:window},Ge=function(e,t){if(typeof e!=`object`||typeof e.createPolicy!=`function`)return null;let n=null,r=`data-tt-policy-suffix`;t&&t.hasAttribute(r)&&(n=t.getAttribute(r));let i=`dompurify`+(n?`#`+n:``);try{return e.createPolicy(i,{createHTML(e){return e},createScriptURL(e){return e}})}catch{return console.warn(`TrustedTypes policy `+i+` could not be created.`),null}},Ke=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function qe(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:We(),t=e=>qe(e);if(t.version=`3.3.3`,t.removed=[],!e||!e.document||e.document.nodeType!==Ue.document||!e.Element)return t.isSupported=!1,t;let{document:n}=e,r=n,i=r.currentScript,{DocumentFragment:a,HTMLTemplateElement:o,Node:s,Element:c,NodeFilter:l,NamedNodeMap:u=e.NamedNodeMap||e.MozNamedAttrMap,HTMLFormElement:d,DOMParser:f,trustedTypes:p}=e,m=c.prototype,h=P(m,`cloneNode`),g=P(m,`remove`),_=P(m,`nextSibling`),ee=P(m,`childNodes`),te=P(m,`parentNode`);if(typeof o==`function`){let e=n.createElement(`template`);e.content&&e.content.ownerDocument&&(n=e.content.ownerDocument)}let v,y=``,{implementation:ne,createNodeIterator:re,createDocumentFragment:b,getElementsByTagName:ie}=n,{importNode:ae}=r,x=Ke();t.isSupported=typeof se==`function`&&typeof te==`function`&&ne&&ne.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:oe,ERB_EXPR:S,TMPLIT_EXPR:ce,DATA_ATTR:le,ARIA_ATTR:ue,IS_SCRIPT_OR_DATA:w,ATTR_WHITESPACE:fe,CUSTOM_ELEMENT:pe}=He,{IS_ALLOWED_URI:A}=He,j=null,Ce=M({},[...we,...Te,...Ee,...Oe,...Ae]),F=null,Fe=M({},[...je,...Me,...Ne,...Pe]),I=Object.seal(de(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}})),Ie=null,Le=null,L=Object.seal(de(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),ze=!0,Ve=!0,Je=!1,Ye=!0,R=!1,z=!0,B=!1,V=!1,H=!1,Xe=!1,U=!1,Ze=!1,Qe=!0,$e=!1,et=!0,tt=!1,W={},G=null,nt=M({},[`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`]),rt=null,it=M({},[`audio`,`video`,`img`,`source`,`image`,`track`]),at=null,ot=M({},[`alt`,`class`,`for`,`id`,`label`,`name`,`pattern`,`placeholder`,`role`,`summary`,`title`,`value`,`style`,`xmlns`]),st=`http://www.w3.org/1998/Math/MathML`,ct=`http://www.w3.org/2000/svg`,K=`http://www.w3.org/1999/xhtml`,q=K,lt=!1,ut=null,dt=M({},[st,ct,K],ve),ft=M({},[`mi`,`mo`,`mn`,`ms`,`mtext`]),pt=M({},[`annotation-xml`]),mt=M({},[`title`,`style`,`font`,`a`,`script`]),ht=null,gt=[`application/xhtml+xml`,`text/html`],J=null,_t=null,vt=n.createElement(`form`),yt=function(e){return e instanceof RegExp||e instanceof Function},bt=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(_t&&_t===e)){if((!e||typeof e!=`object`)&&(e={}),e=N(e),ht=gt.indexOf(e.PARSER_MEDIA_TYPE)===-1?`text/html`:e.PARSER_MEDIA_TYPE,J=ht===`application/xhtml+xml`?ve:_e,j=O(e,`ALLOWED_TAGS`)?M({},e.ALLOWED_TAGS,J):Ce,F=O(e,`ALLOWED_ATTR`)?M({},e.ALLOWED_ATTR,J):Fe,ut=O(e,`ALLOWED_NAMESPACES`)?M({},e.ALLOWED_NAMESPACES,ve):dt,at=O(e,`ADD_URI_SAFE_ATTR`)?M(N(ot),e.ADD_URI_SAFE_ATTR,J):ot,rt=O(e,`ADD_DATA_URI_TAGS`)?M(N(it),e.ADD_DATA_URI_TAGS,J):it,G=O(e,`FORBID_CONTENTS`)?M({},e.FORBID_CONTENTS,J):nt,Ie=O(e,`FORBID_TAGS`)?M({},e.FORBID_TAGS,J):N({}),Le=O(e,`FORBID_ATTR`)?M({},e.FORBID_ATTR,J):N({}),W=O(e,`USE_PROFILES`)?e.USE_PROFILES:!1,ze=e.ALLOW_ARIA_ATTR!==!1,Ve=e.ALLOW_DATA_ATTR!==!1,Je=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Ye=e.ALLOW_SELF_CLOSE_IN_ATTR!==!1,R=e.SAFE_FOR_TEMPLATES||!1,z=e.SAFE_FOR_XML!==!1,B=e.WHOLE_DOCUMENT||!1,Xe=e.RETURN_DOM||!1,U=e.RETURN_DOM_FRAGMENT||!1,Ze=e.RETURN_TRUSTED_TYPE||!1,H=e.FORCE_BODY||!1,Qe=e.SANITIZE_DOM!==!1,$e=e.SANITIZE_NAMED_PROPS||!1,et=e.KEEP_CONTENT!==!1,tt=e.IN_PLACE||!1,A=e.ALLOWED_URI_REGEXP||Re,q=e.NAMESPACE||K,ft=e.MATHML_TEXT_INTEGRATION_POINTS||ft,pt=e.HTML_INTEGRATION_POINTS||pt,I=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&yt(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(I.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&yt(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(I.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements==`boolean`&&(I.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),R&&(Ve=!1),U&&(Xe=!0),W&&(j=M({},Ae),F=de(null),W.html===!0&&(M(j,we),M(F,je)),W.svg===!0&&(M(j,Te),M(F,Me),M(F,Pe)),W.svgFilters===!0&&(M(j,Ee),M(F,Me),M(F,Pe)),W.mathMl===!0&&(M(j,Oe),M(F,Ne),M(F,Pe))),O(e,`ADD_TAGS`)||(L.tagCheck=null),O(e,`ADD_ATTR`)||(L.attributeCheck=null),e.ADD_TAGS&&(typeof e.ADD_TAGS==`function`?L.tagCheck=e.ADD_TAGS:(j===Ce&&(j=N(j)),M(j,e.ADD_TAGS,J))),e.ADD_ATTR&&(typeof e.ADD_ATTR==`function`?L.attributeCheck=e.ADD_ATTR:(F===Fe&&(F=N(F)),M(F,e.ADD_ATTR,J))),e.ADD_URI_SAFE_ATTR&&M(at,e.ADD_URI_SAFE_ATTR,J),e.FORBID_CONTENTS&&(G===nt&&(G=N(G)),M(G,e.FORBID_CONTENTS,J)),e.ADD_FORBID_CONTENTS&&(G===nt&&(G=N(G)),M(G,e.ADD_FORBID_CONTENTS,J)),et&&(j[`#text`]=!0),B&&M(j,[`html`,`head`,`body`]),j.table&&(M(j,[`tbody`]),delete Ie.tbody),e.TRUSTED_TYPES_POLICY){if(typeof e.TRUSTED_TYPES_POLICY.createHTML!=`function`)throw Se(`TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.`);if(typeof e.TRUSTED_TYPES_POLICY.createScriptURL!=`function`)throw Se(`TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.`);v=e.TRUSTED_TYPES_POLICY,y=v.createHTML(``)}else v===void 0&&(v=Ge(p,i)),v!==null&&typeof y==`string`&&(y=v.createHTML(``));C&&C(e),_t=e}},xt=M({},[...Te,...Ee,...De]),St=M({},[...Oe,...ke]),Ct=function(e){let t=te(e);(!t||!t.tagName)&&(t={namespaceURI:q,tagName:`template`});let n=_e(e.tagName),r=_e(t.tagName);return ut[e.namespaceURI]?e.namespaceURI===ct?t.namespaceURI===K?n===`svg`:t.namespaceURI===st?n===`svg`&&(r===`annotation-xml`||ft[r]):!!xt[n]:e.namespaceURI===st?t.namespaceURI===K?n===`math`:t.namespaceURI===ct?n===`math`&&pt[r]:!!St[n]:e.namespaceURI===K?t.namespaceURI===ct&&!pt[r]||t.namespaceURI===st&&!ft[r]?!1:!St[n]&&(mt[n]||!xt[n]):!!(ht===`application/xhtml+xml`&&ut[e.namespaceURI]):!1},wt=function(e){he(t.removed,{element:e});try{te(e).removeChild(e)}catch{g(e)}},Tt=function(e,n){try{he(t.removed,{attribute:n.getAttributeNode(e),from:n})}catch{he(t.removed,{attribute:null,from:n})}if(n.removeAttribute(e),e===`is`)if(Xe||U)try{wt(n)}catch{}else try{n.setAttribute(e,``)}catch{}},Et=function(e){let t=null,r=null;if(H)e=`<remove></remove>`+e;else{let t=D(e,/^[\r\n\t ]+/);r=t&&t[0]}ht===`application/xhtml+xml`&&q===K&&(e=`<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>`+e+`</body></html>`);let i=v?v.createHTML(e):e;if(q===K)try{t=new f().parseFromString(i,ht)}catch{}if(!t||!t.documentElement){t=ne.createDocument(q,`template`,null);try{t.documentElement.innerHTML=lt?y:i}catch{}}let a=t.body||t.documentElement;return e&&r&&a.insertBefore(n.createTextNode(r),a.childNodes[0]||null),q===K?ie.call(t,B?`html`:`body`)[0]:B?t.documentElement:a},Dt=function(e){return re.call(e.ownerDocument||e,e,l.SHOW_ELEMENT|l.SHOW_COMMENT|l.SHOW_TEXT|l.SHOW_PROCESSING_INSTRUCTION|l.SHOW_CDATA_SECTION,null)},Ot=function(e){return e instanceof d&&(typeof e.nodeName!=`string`||typeof e.textContent!=`string`||typeof e.removeChild!=`function`||!(e.attributes instanceof u)||typeof e.removeAttribute!=`function`||typeof e.setAttribute!=`function`||typeof e.namespaceURI!=`string`||typeof e.insertBefore!=`function`||typeof e.hasChildNodes!=`function`)},kt=function(e){return typeof s==`function`&&e instanceof s};function Y(e,n,r){T(e,e=>{e.call(t,n,r,_t)})}let At=function(e){let n=null;if(Y(x.beforeSanitizeElements,e,null),Ot(e))return wt(e),!0;let r=J(e.nodeName);if(Y(x.uponSanitizeElement,e,{tagName:r,allowedTags:j}),z&&e.hasChildNodes()&&!kt(e.firstElementChild)&&k(/<[/\w!]/g,e.innerHTML)&&k(/<[/\w!]/g,e.textContent)||e.nodeType===Ue.progressingInstruction||z&&e.nodeType===Ue.comment&&k(/<[/\w]/g,e.data))return wt(e),!0;if(!(L.tagCheck instanceof Function&&L.tagCheck(r))&&(!j[r]||Ie[r])){if(!Ie[r]&&Mt(r)&&(I.tagNameCheck instanceof RegExp&&k(I.tagNameCheck,r)||I.tagNameCheck instanceof Function&&I.tagNameCheck(r)))return!1;if(et&&!G[r]){let t=te(e)||e.parentNode,n=ee(e)||e.childNodes;if(n&&t){let r=n.length;for(let i=r-1;i>=0;--i){let r=h(n[i],!0);r.__removalCount=(e.__removalCount||0)+1,t.insertBefore(r,_(e))}}}return wt(e),!0}return e instanceof c&&!Ct(e)||(r===`noscript`||r===`noembed`||r===`noframes`)&&k(/<\/no(script|embed|frames)/i,e.innerHTML)?(wt(e),!0):(R&&e.nodeType===Ue.text&&(n=e.textContent,T([oe,S,ce],e=>{n=ye(n,e,` `)}),e.textContent!==n&&(he(t.removed,{element:e.cloneNode()}),e.textContent=n)),Y(x.afterSanitizeElements,e,null),!1)},jt=function(e,t,r){if(Le[t]||Qe&&(t===`id`||t===`name`)&&(r in n||r in vt))return!1;if(!(Ve&&!Le[t]&&k(le,t))&&!(ze&&k(ue,t))&&!(L.attributeCheck instanceof Function&&L.attributeCheck(t,e))){if(!F[t]||Le[t]){if(!(Mt(e)&&(I.tagNameCheck instanceof RegExp&&k(I.tagNameCheck,e)||I.tagNameCheck instanceof Function&&I.tagNameCheck(e))&&(I.attributeNameCheck instanceof RegExp&&k(I.attributeNameCheck,t)||I.attributeNameCheck instanceof Function&&I.attributeNameCheck(t,e))||t===`is`&&I.allowCustomizedBuiltInElements&&(I.tagNameCheck instanceof RegExp&&k(I.tagNameCheck,r)||I.tagNameCheck instanceof Function&&I.tagNameCheck(r))))return!1}else if(!at[t]&&!k(A,ye(r,fe,``))&&!((t===`src`||t===`xlink:href`||t===`href`)&&e!==`script`&&be(r,`data:`)===0&&rt[e])&&!(Je&&!k(w,ye(r,fe,``)))&&r)return!1}return!0},Mt=function(e){return e!==`annotation-xml`&&D(e,pe)},Nt=function(e){Y(x.beforeSanitizeAttributes,e,null);let{attributes:n}=e;if(!n||Ot(e))return;let r={attrName:``,attrValue:``,keepAttr:!0,allowedAttributes:F,forceKeepAttr:void 0},i=n.length;for(;i--;){let{name:a,namespaceURI:o,value:s}=n[i],c=J(a),l=s,u=a===`value`?l:xe(l);if(r.attrName=c,r.attrValue=u,r.keepAttr=!0,r.forceKeepAttr=void 0,Y(x.uponSanitizeAttribute,e,r),u=r.attrValue,$e&&(c===`id`||c===`name`)&&(Tt(a,e),u=`user-content-`+u),z&&k(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,u)){Tt(a,e);continue}if(c===`attributename`&&D(u,`href`)){Tt(a,e);continue}if(r.forceKeepAttr)continue;if(!r.keepAttr){Tt(a,e);continue}if(!Ye&&k(/\/>/i,u)){Tt(a,e);continue}R&&T([oe,S,ce],e=>{u=ye(u,e,` `)});let d=J(e.nodeName);if(!jt(d,c,u)){Tt(a,e);continue}if(v&&typeof p==`object`&&typeof p.getAttributeType==`function`&&!o)switch(p.getAttributeType(d,c)){case`TrustedHTML`:u=v.createHTML(u);break;case`TrustedScriptURL`:u=v.createScriptURL(u);break}if(u!==l)try{o?e.setAttributeNS(o,a,u):e.setAttribute(a,u),Ot(e)?wt(e):E(t.removed)}catch{Tt(a,e)}}Y(x.afterSanitizeAttributes,e,null)},Pt=function e(t){let n=null,r=Dt(t);for(Y(x.beforeSanitizeShadowDOM,t,null);n=r.nextNode();)Y(x.uponSanitizeShadowNode,n,null),At(n),Nt(n),n.content instanceof a&&e(n.content);Y(x.afterSanitizeShadowDOM,t,null)};return t.sanitize=function(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=null,o=null,c=null,l=null;if(lt=!e,lt&&(e=`<!-->`),typeof e!=`string`&&!kt(e))if(typeof e.toString==`function`){if(e=e.toString(),typeof e!=`string`)throw Se(`dirty is not a string, aborting`)}else throw Se(`toString is not a function`);if(!t.isSupported)return e;if(V||bt(n),t.removed=[],typeof e==`string`&&(tt=!1),tt){if(e.nodeName){let t=J(e.nodeName);if(!j[t]||Ie[t])throw Se(`root node is forbidden and cannot be sanitized in-place`)}}else if(e instanceof s)i=Et(`<!---->`),o=i.ownerDocument.importNode(e,!0),o.nodeType===Ue.element&&o.nodeName===`BODY`||o.nodeName===`HTML`?i=o:i.appendChild(o);else{if(!Xe&&!R&&!B&&e.indexOf(`<`)===-1)return v&&Ze?v.createHTML(e):e;if(i=Et(e),!i)return Xe?null:Ze?y:``}i&&H&&wt(i.firstChild);let u=Dt(tt?e:i);for(;c=u.nextNode();)At(c),Nt(c),c.content instanceof a&&Pt(c.content);if(tt)return e;if(Xe){if(U)for(l=b.call(i.ownerDocument);i.firstChild;)l.appendChild(i.firstChild);else l=i;return(F.shadowroot||F.shadowrootmode)&&(l=ae.call(r,l,!0)),l}let d=B?i.outerHTML:i.innerHTML;return B&&j[`!doctype`]&&i.ownerDocument&&i.ownerDocument.doctype&&i.ownerDocument.doctype.name&&k(Be,i.ownerDocument.doctype.name)&&(d=`<!DOCTYPE `+i.ownerDocument.doctype.name+`>
|
|
2
|
+
`+d),R&&T([oe,S,ce],e=>{d=ye(d,e,` `)}),v&&Ze?v.createHTML(d):d},t.setConfig=function(){bt(arguments.length>0&&arguments[0]!==void 0?arguments[0]:{}),V=!0},t.clearConfig=function(){_t=null,V=!1},t.isValidAttribute=function(e,t,n){return _t||bt({}),jt(J(e),J(t),n)},t.addHook=function(e,t){typeof t==`function`&&he(x[e],t)},t.removeHook=function(e,t){if(t!==void 0){let n=me(x[e],t);return n===-1?void 0:ge(x[e],n,1)[0]}return E(x[e])},t.removeHooks=function(e){x[e]=[]},t.removeAllHooks=function(){x=Ke()},t}var Je=qe(),Ye;function R(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var z=R();function B(e){z=e}var V={exec:()=>null};function H(e,t=``){let n=typeof e==`string`?e:e.source,r={replace:(e,t)=>{let i=typeof t==`string`?t:t.source;return i=i.replace(U.caret,`$1`),n=n.replace(e,i),r},getRegex:()=>new RegExp(n,t)};return r}var Xe=(()=>{try{return!0}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:e=>RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:e=>RegExp(`^ {0,${Math.min(3,e-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:e=>RegExp(`^ {0,${Math.min(3,e-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:e=>RegExp(`^ {0,${Math.min(3,e-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:e=>RegExp(`^ {0,${Math.min(3,e-1)}}#`),htmlBeginRegex:e=>RegExp(`^ {0,${Math.min(3,e-1)}}<(?:[a-z].*>|!--)`,`i`),blockquoteBeginRegex:e=>RegExp(`^ {0,${Math.min(3,e-1)}}>`)},Ze=/^(?:[ \t]*(?:\n|$))+/,Qe=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,$e=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,et=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,tt=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,W=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,G=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,nt=H(G).replace(/bull/g,W).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(),rt=H(G).replace(/bull/g,W).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(),it=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,at=/^[^\n]+/,ot=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,st=H(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace(`label`,ot).replace(`title`,/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),ct=H(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,W).getRegex(),K=`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`,q=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,lt=H(`^ {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`,q).replace(`tag`,K).replace(`attribute`,/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),ut=H(it).replace(`hr`,et).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`,K).getRegex(),dt={blockquote:H(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace(`paragraph`,ut).getRegex(),code:Qe,def:st,fences:$e,heading:tt,hr:et,html:lt,lheading:nt,list:ct,newline:Ze,paragraph:ut,table:V,text:at},ft=H(`^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)`).replace(`hr`,et).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`,K).getRegex(),pt={...dt,lheading:rt,table:ft,paragraph:H(it).replace(`hr`,et).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`table`,ft).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`,K).getRegex()},mt={...dt,html:H(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace(`comment`,q).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:V,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:H(it).replace(`hr`,et).replace(`heading`,` *#{1,6} *[^
|
|
3
|
+
]`).replace(`lheading`,nt).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`|fences`,``).replace(`|list`,``).replace(`|html`,``).replace(`|tag`,``).getRegex()},ht=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,gt=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,J=/^( {2,}|\\)\n(?!\s*$)/,_t=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,vt=/[\p{P}\p{S}]/u,yt=/[\s\p{P}\p{S}]/u,bt=/[^\s\p{P}\p{S}]/u,xt=H(/^((?![*_])punctSpace)/,`u`).replace(/punctSpace/g,yt).getRegex(),St=/(?!~)[\p{P}\p{S}]/u,Ct=/(?!~)[\s\p{P}\p{S}]/u,wt=/(?:[^\s\p{P}\p{S}]|~)/u,Tt=H(/link|precode-code|html/,`g`).replace(`link`,/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace(`precode-`,Xe?"(?<!`)()":"(^^|[^`])").replace(`code`,/(?<b>`+)[^`]+\k<b>(?!`)/).replace(`html`,/<(?! )[^<>]*?>/).getRegex(),Et=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,Dt=H(Et,`u`).replace(/punct/g,vt).getRegex(),Ot=H(Et,`u`).replace(/punct/g,St).getRegex(),kt=`^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)`,Y=H(kt,`gu`).replace(/notPunctSpace/g,bt).replace(/punctSpace/g,yt).replace(/punct/g,vt).getRegex(),At=H(kt,`gu`).replace(/notPunctSpace/g,wt).replace(/punctSpace/g,Ct).replace(/punct/g,St).getRegex(),jt=H(`^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)`,`gu`).replace(/notPunctSpace/g,bt).replace(/punctSpace/g,yt).replace(/punct/g,vt).getRegex(),Mt=H(/^~~?(?:((?!~)punct)|[^\s~])/,`u`).replace(/punct/g,vt).getRegex(),Nt=H(`^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)`,`gu`).replace(/notPunctSpace/g,bt).replace(/punctSpace/g,yt).replace(/punct/g,vt).getRegex(),Pt=H(/\\(punct)/,`gu`).replace(/punct/g,vt).getRegex(),Ft=H(/^<(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(),It=H(q).replace(`(?:-->|$)`,`-->`).getRegex(),Lt=H(`^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`,It).replace(`attribute`,/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Rt=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,zt=H(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace(`label`,Rt).replace(`href`,/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace(`title`,/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Bt=H(/^!?\[(label)\]\[(ref)\]/).replace(`label`,Rt).replace(`ref`,ot).getRegex(),Vt=H(/^!?\[(ref)\](?:\[\])?/).replace(`ref`,ot).getRegex(),Ht=H(`reflink|nolink(?!\\()`,`g`).replace(`reflink`,Bt).replace(`nolink`,Vt).getRegex(),Ut=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,Wt={_backpedal:V,anyPunctuation:Pt,autolink:Ft,blockSkip:Tt,br:J,code:gt,del:V,delLDelim:V,delRDelim:V,emStrongLDelim:Dt,emStrongRDelimAst:Y,emStrongRDelimUnd:jt,escape:ht,link:zt,nolink:Vt,punctuation:xt,reflink:Bt,reflinkSearch:Ht,tag:Lt,text:_t,url:V},Gt={...Wt,link:H(/^!?\[(label)\]\((.*?)\)/).replace(`label`,Rt).getRegex(),reflink:H(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace(`label`,Rt).getRegex()},Kt={...Wt,emStrongRDelimAst:At,emStrongLDelim:Ot,delLDelim:Mt,delRDelim:Nt,url:H(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace(`protocol`,Ut).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:H(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace(`protocol`,Ut).getRegex()},qt={...Kt,br:H(J).replace(`{2,}`,`*`).getRegex(),text:H(Kt.text).replace(`\\b_`,`\\b_| {2,}\\n`).replace(/\{2,\}/g,`*`).getRegex()},Jt={normal:dt,gfm:pt,pedantic:mt},Yt={normal:Wt,gfm:Kt,breaks:qt,pedantic:Gt},Xt={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`},Zt=e=>Xt[e];function X(e,t){if(t){if(U.escapeTest.test(e))return e.replace(U.escapeReplace,Zt)}else if(U.escapeTestNoEncode.test(e))return e.replace(U.escapeReplaceNoEncode,Zt);return e}function Qt(e){try{e=encodeURI(e).replace(U.percentDecode,`%`)}catch{return null}return e}function $t(e,t){let n=e.replace(U.findPipe,(e,t,n)=>{let r=!1,i=t;for(;--i>=0&&n[i]===`\\`;)r=!r;return r?`|`:` |`}).split(U.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),t)if(n.length>t)n.splice(t);else for(;n.length<t;)n.push(``);for(;r<n.length;r++)n[r]=n[r].trim().replace(U.slashPipe,`|`);return n}function en(e,t,n){let r=e.length;if(r===0)return``;let i=0;for(;i<r;){let a=e.charAt(r-i-1);if(a===t&&!n)i++;else if(a!==t&&n)i++;else break}return e.slice(0,r-i)}function tn(e,t){if(e.indexOf(t[1])===-1)return-1;let n=0;for(let r=0;r<e.length;r++)if(e[r]===`\\`)r++;else if(e[r]===t[0])n++;else if(e[r]===t[1]&&(n--,n<0))return r;return n>0?-2:-1}function nn(e,t=0){let n=t,r=``;for(let t of e)if(t===` `){let e=4-n%4;r+=` `.repeat(e),n+=e}else r+=t,n++;return r}function rn(e,t,n,r,i){let a=t.href,o=t.title||null,s=e[1].replace(i.other.outputLinkReplace,`$1`);r.state.inLink=!0;let c={type:e[0].charAt(0)===`!`?`image`:`link`,raw:n,href:a,title:o,text:s,tokens:r.inlineTokens(s)};return r.state.inLink=!1,c}function an(e,t,n){let r=e.match(n.other.indentCodeCompensation);if(r===null)return t;let i=r[1];return t.split(`
|
|
4
|
+
`).map(e=>{let t=e.match(n.other.beginningSpace);if(t===null)return e;let[r]=t;return r.length>=i.length?e.slice(i.length):e}).join(`
|
|
5
|
+
`)}var on=class{constructor(e){b(this,`options`,void 0),b(this,`rules`,void 0),b(this,`lexer`,void 0),this.options=e||z}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:`space`,raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let e=t[0].replace(this.rules.other.codeRemoveIndent,``);return{type:`code`,raw:t[0],codeBlockStyle:`indented`,text:this.options.pedantic?e:en(e,`
|
|
6
|
+
`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let e=t[0],n=an(e,t[3]||``,this.rules);return{type:`code`,raw:e,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,`$1`):t[2],text:n}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(this.rules.other.endingHash.test(e)){let t=en(e,`#`);(this.options.pedantic||!t||this.rules.other.endingSpaceChar.test(t))&&(e=t.trim())}return{type:`heading`,raw:t[0],depth:t[1].length,text:e,tokens:this.lexer.inline(e)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:`hr`,raw:en(t[0],`
|
|
7
|
+
`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let e=en(t[0],`
|
|
8
|
+
`).split(`
|
|
9
|
+
`),n=``,r=``,i=[];for(;e.length>0;){let t=!1,a=[],o;for(o=0;o<e.length;o++)if(this.rules.other.blockquoteStart.test(e[o]))a.push(e[o]),t=!0;else if(!t)a.push(e[o]);else break;e=e.slice(o);let s=a.join(`
|
|
10
|
+
`),c=s.replace(this.rules.other.blockquoteSetextReplace,`
|
|
11
|
+
$1`).replace(this.rules.other.blockquoteSetextReplace2,``);n=n?`${n}
|
|
12
|
+
${s}`:s,r=r?`${r}
|
|
13
|
+
${c}`:c;let l=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(c,i,!0),this.lexer.state.top=l,e.length===0)break;let u=i.at(-1);if(u?.type===`code`)break;if(u?.type===`blockquote`){let t=u,a=t.raw+`
|
|
14
|
+
`+e.join(`
|
|
15
|
+
`),o=this.blockquote(a);i[i.length-1]=o,n=n.substring(0,n.length-t.raw.length)+o.raw,r=r.substring(0,r.length-t.text.length)+o.text;break}else if(u?.type===`list`){let t=u,a=t.raw+`
|
|
16
|
+
`+e.join(`
|
|
17
|
+
`),o=this.list(a);i[i.length-1]=o,n=n.substring(0,n.length-u.raw.length)+o.raw,r=r.substring(0,r.length-t.raw.length)+o.raw,e=a.substring(i.at(-1).raw.length).split(`
|
|
18
|
+
`);continue}}return{type:`blockquote`,raw:n,tokens:i,text:r}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),r=n.length>1,i={type:`list`,raw:``,ordered:r,start:r?+n.slice(0,-1):``,loose:!1,items:[]};n=r?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=r?n:`[*+-]`);let a=this.rules.other.listItemRegex(n),o=!1;for(;e;){let n=!1,r=``,s=``;if(!(t=a.exec(e))||this.rules.block.hr.test(e))break;r=t[0],e=e.substring(r.length);let c=nn(t[2].split(`
|
|
19
|
+
`,1)[0],t[1].length),l=e.split(`
|
|
20
|
+
`,1)[0],u=!c.trim(),d=0;if(this.options.pedantic?(d=2,s=c.trimStart()):u?d=t[1].length+1:(d=c.search(this.rules.other.nonSpaceChar),d=d>4?1:d,s=c.slice(d),d+=t[1].length),u&&this.rules.other.blankLine.test(l)&&(r+=l+`
|
|
21
|
+
`,e=e.substring(l.length+1),n=!0),!n){let t=this.rules.other.nextBulletRegex(d),n=this.rules.other.hrRegex(d),i=this.rules.other.fencesBeginRegex(d),a=this.rules.other.headingBeginRegex(d),o=this.rules.other.htmlBeginRegex(d),f=this.rules.other.blockquoteBeginRegex(d);for(;e;){let p=e.split(`
|
|
22
|
+
`,1)[0],m;if(l=p,this.options.pedantic?(l=l.replace(this.rules.other.listReplaceNesting,` `),m=l):m=l.replace(this.rules.other.tabCharGlobal,` `),i.test(l)||a.test(l)||o.test(l)||f.test(l)||t.test(l)||n.test(l))break;if(m.search(this.rules.other.nonSpaceChar)>=d||!l.trim())s+=`
|
|
23
|
+
`+m.slice(d);else{if(u||c.replace(this.rules.other.tabCharGlobal,` `).search(this.rules.other.nonSpaceChar)>=4||i.test(c)||a.test(c)||n.test(c))break;s+=`
|
|
24
|
+
`+l}u=!l.trim(),r+=p+`
|
|
25
|
+
`,e=e.substring(p.length+1),c=m.slice(d)}}i.loose||(o?i.loose=!0:this.rules.other.doubleBlankLine.test(r)&&(o=!0)),i.items.push({type:`list_item`,raw:r,task:!!this.options.gfm&&this.rules.other.listIsTask.test(s),loose:!1,text:s,tokens:[]}),i.raw+=r}let s=i.items.at(-1);if(s)s.raw=s.raw.trimEnd(),s.text=s.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let e of i.items){if(this.lexer.state.top=!1,e.tokens=this.lexer.blockTokens(e.text,[]),e.task){if(e.text=e.text.replace(this.rules.other.listReplaceTask,``),e.tokens[0]?.type===`text`||e.tokens[0]?.type===`paragraph`){e.tokens[0].raw=e.tokens[0].raw.replace(this.rules.other.listReplaceTask,``),e.tokens[0].text=e.tokens[0].text.replace(this.rules.other.listReplaceTask,``);for(let e=this.lexer.inlineQueue.length-1;e>=0;e--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[e].src)){this.lexer.inlineQueue[e].src=this.lexer.inlineQueue[e].src.replace(this.rules.other.listReplaceTask,``);break}}let t=this.rules.other.listTaskCheckbox.exec(e.raw);if(t){let n={type:`checkbox`,raw:t[0]+` `,checked:t[0]!==`[ ]`};e.checked=n.checked,i.loose?e.tokens[0]&&[`paragraph`,`text`].includes(e.tokens[0].type)&&`tokens`in e.tokens[0]&&e.tokens[0].tokens?(e.tokens[0].raw=n.raw+e.tokens[0].raw,e.tokens[0].text=n.raw+e.tokens[0].text,e.tokens[0].tokens.unshift(n)):e.tokens.unshift({type:`paragraph`,raw:n.raw,text:n.raw,tokens:[n]}):e.tokens.unshift(n)}}if(!i.loose){let t=e.tokens.filter(e=>e.type===`space`);i.loose=t.length>0&&t.some(e=>this.rules.other.anyLine.test(e.raw))}}if(i.loose)for(let e of i.items){e.loose=!0;for(let t of e.tokens)t.type===`text`&&(t.type=`paragraph`)}return i}}html(e){let t=this.rules.block.html.exec(e);if(t)return{type:`html`,block:!0,raw:t[0],pre:t[1]===`pre`||t[1]===`script`||t[1]===`style`,text:t[0]}}def(e){let t=this.rules.block.def.exec(e);if(t){let e=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal,` `),n=t[2]?t[2].replace(this.rules.other.hrefBrackets,`$1`).replace(this.rules.inline.anyPunctuation,`$1`):``,r=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,`$1`):t[3];return{type:`def`,tag:e,raw:t[0],href:n,title:r}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=$t(t[1]),r=t[2].replace(this.rules.other.tableAlignChars,``).split(`|`),i=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,``).split(`
|
|
26
|
+
`):[],a={type:`table`,raw:t[0],header:[],align:[],rows:[]};if(n.length===r.length){for(let e of r)this.rules.other.tableAlignRight.test(e)?a.align.push(`right`):this.rules.other.tableAlignCenter.test(e)?a.align.push(`center`):this.rules.other.tableAlignLeft.test(e)?a.align.push(`left`):a.align.push(null);for(let e=0;e<n.length;e++)a.header.push({text:n[e],tokens:this.lexer.inline(n[e]),header:!0,align:a.align[e]});for(let e of i)a.rows.push($t(e,a.header.length).map((e,t)=>({text:e,tokens:this.lexer.inline(e),header:!1,align:a.align[t]})));return a}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t){let e=t[1].trim();return{type:`heading`,raw:t[0],depth:t[2].charAt(0)===`=`?1:2,text:e,tokens:this.lexer.inline(e)}}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let e=t[1].charAt(t[1].length-1)===`
|
|
27
|
+
`?t[1].slice(0,-1):t[1];return{type:`paragraph`,raw:t[0],text:e,tokens:this.lexer.inline(e)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:`text`,raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:`escape`,raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:`html`,raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let e=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(e)){if(!this.rules.other.endAngleBracket.test(e))return;let t=en(e.slice(0,-1),`\\`);if((e.length-t.length)%2==0)return}else{let e=tn(t[2],`()`);if(e===-2)return;if(e>-1){let n=(t[0].indexOf(`!`)===0?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=``}}let n=t[2],r=``;if(this.options.pedantic){let e=this.rules.other.pedanticHrefTitle.exec(n);e&&(n=e[1],r=e[3])}else r=t[3]?t[3].slice(1,-1):``;return n=n.trim(),this.rules.other.startAngleBracket.test(n)&&(n=this.options.pedantic&&!this.rules.other.endAngleBracket.test(e)?n.slice(1):n.slice(1,-1)),rn(t,{href:n&&n.replace(this.rules.inline.anyPunctuation,`$1`),title:r&&r.replace(this.rules.inline.anyPunctuation,`$1`)},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let e=t[(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal,` `).toLowerCase()];if(!e){let e=n[0].charAt(0);return{type:`text`,raw:e,text:e}}return rn(n,e,n[0],this.lexer,this.rules)}}emStrong(e,t,n=``){let r=this.rules.inline.emStrongLDelim.exec(e);if(!(!r||!r[1]&&!r[2]&&!r[3]&&!r[4]||r[4]&&n.match(this.rules.other.unicodeAlphaNumeric))&&(!(r[1]||r[3])||!n||this.rules.inline.punctuation.exec(n))){let n=[...r[0]].length-1,i,a,o=n,s=0,c=r[0][0]===`*`?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+n);(r=c.exec(t))!==null;){if(i=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!i)continue;if(a=[...i].length,r[3]||r[4]){o+=a;continue}else if((r[5]||r[6])&&n%3&&!((n+a)%3)){s+=a;continue}if(o-=a,o>0)continue;a=Math.min(a,a+o+s);let t=[...r[0]][0].length,c=e.slice(0,n+r.index+t+a);if(Math.min(n,a)%2){let e=c.slice(1,-1);return{type:`em`,raw:c,text:e,tokens:this.lexer.inlineTokens(e)}}let l=c.slice(2,-2);return{type:`strong`,raw:c,text:l,tokens:this.lexer.inlineTokens(l)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(this.rules.other.newLineCharGlobal,` `),n=this.rules.other.nonSpaceChar.test(e),r=this.rules.other.startingSpaceChar.test(e)&&this.rules.other.endingSpaceChar.test(e);return n&&r&&(e=e.substring(1,e.length-1)),{type:`codespan`,raw:t[0],text:e}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:`br`,raw:t[0]}}del(e,t,n=``){let r=this.rules.inline.delLDelim.exec(e);if(r&&(!r[1]||!n||this.rules.inline.punctuation.exec(n))){let n=[...r[0]].length-1,i,a,o=n,s=this.rules.inline.delRDelim;for(s.lastIndex=0,t=t.slice(-1*e.length+n);(r=s.exec(t))!==null;){if(i=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!i||(a=[...i].length,a!==n))continue;if(r[3]||r[4]){o+=a;continue}if(o-=a,o>0)continue;a=Math.min(a,a+o);let t=[...r[0]][0].length,s=e.slice(0,n+r.index+t+a),c=s.slice(n,-n);return{type:`del`,raw:s,text:c,tokens:this.lexer.inlineTokens(c)}}}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let e,n;return t[2]===`@`?(e=t[1],n=`mailto:`+e):(e=t[1],n=e),{type:`link`,raw:t[0],text:e,href:n,tokens:[{type:`text`,raw:e,text:e}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let e,n;if(t[2]===`@`)e=t[0],n=`mailto:`+e;else{let r;do r=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??``;while(r!==t[0]);e=t[0],n=t[1]===`www.`?`http://`+t[0]:t[0]}return{type:`link`,raw:t[0],text:e,href:n,tokens:[{type:`text`,raw:e,text:e}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let e=this.lexer.state.inRawBlock;return{type:`text`,raw:t[0],text:t[0],escaped:e}}}},Z=class e{constructor(e){b(this,`tokens`,void 0),b(this,`options`,void 0),b(this,`state`,void 0),b(this,`inlineQueue`,void 0),b(this,`tokenizer`,void 0),this.tokens=[],this.tokens.links=Object.create(null),this.options=e||z,this.options.tokenizer=this.options.tokenizer||new on,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let t={other:U,block:Jt.normal,inline:Yt.normal};this.options.pedantic?(t.block=Jt.pedantic,t.inline=Yt.pedantic):this.options.gfm&&(t.block=Jt.gfm,this.options.breaks?t.inline=Yt.breaks:t.inline=Yt.gfm),this.tokenizer.rules=t}static get rules(){return{block:Jt,inline:Yt}}static lex(t,n){return new e(n).lex(t)}static lexInline(t,n){return new e(n).inlineTokens(t)}lex(e){e=e.replace(U.carriageReturn,`
|
|
28
|
+
`),this.blockTokens(e,this.tokens);for(let e=0;e<this.inlineQueue.length;e++){let t=this.inlineQueue[e];this.inlineTokens(t.src,t.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){for(this.tokenizer.lexer=this,this.options.pedantic&&(e=e.replace(U.tabCharGlobal,` `).replace(U.spaceLine,``));e;){let r;if(this.options.extensions?.block?.some(n=>(r=n.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let n=t.at(-1);r.raw.length===1&&n!==void 0?n.raw+=`
|
|
29
|
+
`:t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let n=t.at(-1);n?.type===`paragraph`||n?.type===`text`?(n.raw+=(n.raw.endsWith(`
|
|
30
|
+
`)?``:`
|
|
31
|
+
`)+r.raw,n.text+=`
|
|
32
|
+
`+r.text,this.inlineQueue.at(-1).src=n.text):t.push(r);continue}if(r=this.tokenizer.fences(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.heading(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.hr(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.blockquote(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.list(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.html(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.def(e)){e=e.substring(r.raw.length);let n=t.at(-1);n?.type===`paragraph`||n?.type===`text`?(n.raw+=(n.raw.endsWith(`
|
|
33
|
+
`)?``:`
|
|
34
|
+
`)+r.raw,n.text+=`
|
|
35
|
+
`+r.raw,this.inlineQueue.at(-1).src=n.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title},t.push(r));continue}if(r=this.tokenizer.table(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.lheading(e)){e=e.substring(r.raw.length),t.push(r);continue}let i=e;if(this.options.extensions?.startBlock){let t=1/0,n=e.slice(1),r;this.options.extensions.startBlock.forEach(e=>{r=e.call({lexer:this},n),typeof r==`number`&&r>=0&&(t=Math.min(t,r))}),t<1/0&&t>=0&&(i=e.substring(0,t+1))}if(this.state.top&&(r=this.tokenizer.paragraph(i))){let a=t.at(-1);n&&a?.type===`paragraph`?(a.raw+=(a.raw.endsWith(`
|
|
36
|
+
`)?``:`
|
|
37
|
+
`)+r.raw,a.text+=`
|
|
38
|
+
`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=a.text):t.push(r),n=i.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length);let n=t.at(-1);n?.type===`text`?(n.raw+=(n.raw.endsWith(`
|
|
39
|
+
`)?``:`
|
|
40
|
+
`)+r.raw,n.text+=`
|
|
41
|
+
`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=n.text):t.push(r);continue}if(e){let t=`Infinite loop on byte: `+e.charCodeAt(0);if(this.options.silent){console.error(t);break}else throw Error(t)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){this.tokenizer.lexer=this;let n=e,r=null;if(this.tokens.links){let e=Object.keys(this.tokens.links);if(e.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(n))!==null;)e.includes(r[0].slice(r[0].lastIndexOf(`[`)+1,-1))&&(n=n.slice(0,r.index)+`[`+`a`.repeat(r[0].length-2)+`]`+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(n))!==null;)n=n.slice(0,r.index)+`++`+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let i;for(;(r=this.tokenizer.rules.inline.blockSkip.exec(n))!==null;)i=r[2]?r[2].length:0,n=n.slice(0,r.index+i)+`[`+`a`.repeat(r[0].length-i-2)+`]`+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let a=!1,o=``;for(;e;){a||(o=``),a=!1;let r;if(this.options.extensions?.inline?.some(n=>(r=n.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.escape(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.tag(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.link(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(r.raw.length);let n=t.at(-1);r.type===`text`&&n?.type===`text`?(n.raw+=r.raw,n.text+=r.text):t.push(r);continue}if(r=this.tokenizer.emStrong(e,n,o)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.codespan(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.br(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.del(e,n,o)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.autolink(e)){e=e.substring(r.raw.length),t.push(r);continue}if(!this.state.inLink&&(r=this.tokenizer.url(e))){e=e.substring(r.raw.length),t.push(r);continue}let i=e;if(this.options.extensions?.startInline){let t=1/0,n=e.slice(1),r;this.options.extensions.startInline.forEach(e=>{r=e.call({lexer:this},n),typeof r==`number`&&r>=0&&(t=Math.min(t,r))}),t<1/0&&t>=0&&(i=e.substring(0,t+1))}if(r=this.tokenizer.inlineText(i)){e=e.substring(r.raw.length),r.raw.slice(-1)!==`_`&&(o=r.raw.slice(-1)),a=!0;let n=t.at(-1);n?.type===`text`?(n.raw+=r.raw,n.text+=r.text):t.push(r);continue}if(e){let t=`Infinite loop on byte: `+e.charCodeAt(0);if(this.options.silent){console.error(t);break}else throw Error(t)}}return t}},sn=class{constructor(e){b(this,`options`,void 0),b(this,`parser`,void 0),this.options=e||z}space(e){return``}code({text:e,lang:t,escaped:n}){let r=(t||``).match(U.notSpaceStart)?.[0],i=e.replace(U.endingNewline,``)+`
|
|
42
|
+
`;return r?`<pre><code class="language-`+X(r)+`">`+(n?i:X(i,!0))+`</code></pre>
|
|
43
|
+
`:`<pre><code>`+(n?i:X(i,!0))+`</code></pre>
|
|
44
|
+
`}blockquote({tokens:e}){return`<blockquote>
|
|
45
|
+
${this.parser.parse(e)}</blockquote>
|
|
46
|
+
`}html({text:e}){return e}def(e){return``}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>
|
|
47
|
+
`}hr(e){return`<hr>
|
|
48
|
+
`}list(e){let t=e.ordered,n=e.start,r=``;for(let t=0;t<e.items.length;t++){let n=e.items[t];r+=this.listitem(n)}let i=t?`ol`:`ul`,a=t&&n!==1?` start="`+n+`"`:``;return`<`+i+a+`>
|
|
49
|
+
`+r+`</`+i+`>
|
|
50
|
+
`}listitem(e){return`<li>${this.parser.parse(e.tokens)}</li>
|
|
51
|
+
`}checkbox({checked:e}){return`<input `+(e?`checked="" `:``)+`disabled="" type="checkbox"> `}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>
|
|
52
|
+
`}table(e){let t=``,n=``;for(let t=0;t<e.header.length;t++)n+=this.tablecell(e.header[t]);t+=this.tablerow({text:n});let r=``;for(let t=0;t<e.rows.length;t++){let i=e.rows[t];n=``;for(let e=0;e<i.length;e++)n+=this.tablecell(i[e]);r+=this.tablerow({text:n})}return r&&=`<tbody>${r}</tbody>`,`<table>
|
|
53
|
+
<thead>
|
|
54
|
+
`+t+`</thead>
|
|
55
|
+
`+r+`</table>
|
|
56
|
+
`}tablerow({text:e}){return`<tr>
|
|
57
|
+
${e}</tr>
|
|
58
|
+
`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?`th`:`td`;return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+`</${n}>
|
|
59
|
+
`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${X(e,!0)}</code>`}br(e){return`<br>`}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=Qt(e);if(i===null)return r;e=i;let a=`<a href="`+e+`"`;return t&&(a+=` title="`+X(t)+`"`),a+=`>`+r+`</a>`,a}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=Qt(e);if(i===null)return X(n);e=i;let a=`<img src="${e}" alt="${X(n)}"`;return t&&(a+=` title="${X(t)}"`),a+=`>`,a}text(e){return`tokens`in e&&e.tokens?this.parser.parseInline(e.tokens):`escaped`in e&&e.escaped?e.text:X(e.text)}},cn=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return``+e}image({text:e}){return``+e}br(){return``}checkbox({raw:e}){return e}},Q=class e{constructor(e){b(this,`options`,void 0),b(this,`renderer`,void 0),b(this,`textRenderer`,void 0),this.options=e||z,this.options.renderer=this.options.renderer||new sn,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new cn}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e){this.renderer.parser=this;let t=``;for(let n=0;n<e.length;n++){let r=e[n];if(this.options.extensions?.renderers?.[r.type]){let e=r,n=this.options.extensions.renderers[e.type].call({parser:this},e);if(n!==!1||![`space`,`hr`,`heading`,`code`,`table`,`blockquote`,`list`,`html`,`def`,`paragraph`,`text`].includes(e.type)){t+=n||``;continue}}let i=r;switch(i.type){case`space`:t+=this.renderer.space(i);break;case`hr`:t+=this.renderer.hr(i);break;case`heading`:t+=this.renderer.heading(i);break;case`code`:t+=this.renderer.code(i);break;case`table`:t+=this.renderer.table(i);break;case`blockquote`:t+=this.renderer.blockquote(i);break;case`list`:t+=this.renderer.list(i);break;case`checkbox`:t+=this.renderer.checkbox(i);break;case`html`:t+=this.renderer.html(i);break;case`def`:t+=this.renderer.def(i);break;case`paragraph`:t+=this.renderer.paragraph(i);break;case`text`:t+=this.renderer.text(i);break;default:{let e=`Token with "`+i.type+`" type was not found.`;if(this.options.silent)return console.error(e),``;throw Error(e)}}}return t}parseInline(e,t=this.renderer){this.renderer.parser=this;let n=``;for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let e=this.options.extensions.renderers[i.type].call({parser:this},i);if(e!==!1||![`escape`,`html`,`link`,`image`,`strong`,`em`,`codespan`,`br`,`del`,`text`].includes(i.type)){n+=e||``;continue}}let a=i;switch(a.type){case`escape`:n+=t.text(a);break;case`html`:n+=t.html(a);break;case`link`:n+=t.link(a);break;case`image`:n+=t.image(a);break;case`checkbox`:n+=t.checkbox(a);break;case`strong`:n+=t.strong(a);break;case`em`:n+=t.em(a);break;case`codespan`:n+=t.codespan(a);break;case`br`:n+=t.br(a);break;case`del`:n+=t.del(a);break;case`text`:n+=t.text(a);break;default:{let e=`Token with "`+a.type+`" type was not found.`;if(this.options.silent)return console.error(e),``;throw Error(e)}}}return n}},ln=(Ye=class{constructor(e){b(this,`options`,void 0),b(this,`block`,void 0),this.options=e||z}preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(e=this.block){return e?Z.lex:Z.lexInline}provideParser(e=this.block){return e?Q.parse:Q.parseInline}},b(Ye,`passThroughHooks`,new Set([`preprocess`,`postprocess`,`processAllTokens`,`emStrongMask`])),b(Ye,`passThroughHooksRespectAsync`,new Set([`preprocess`,`postprocess`,`processAllTokens`])),Ye),un=new class{constructor(...e){b(this,`defaults`,R()),b(this,`options`,this.setOptions),b(this,`parse`,this.parseMarkdown(!0)),b(this,`parseInline`,this.parseMarkdown(!1)),b(this,`Parser`,Q),b(this,`Renderer`,sn),b(this,`TextRenderer`,cn),b(this,`Lexer`,Z),b(this,`Tokenizer`,on),b(this,`Hooks`,ln),this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case`table`:{let e=r;for(let r of e.header)n=n.concat(this.walkTokens(r.tokens,t));for(let r of e.rows)for(let e of r)n=n.concat(this.walkTokens(e.tokens,t));break}case`list`:{let e=r;n=n.concat(this.walkTokens(e.items,t));break}default:{let e=r;this.defaults.extensions?.childTokens?.[e.type]?this.defaults.extensions.childTokens[e.type].forEach(r=>{let i=e[r].flat(1/0);n=n.concat(this.walkTokens(i,t))}):e.tokens&&(n=n.concat(this.walkTokens(e.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(e=>{let n={...e};if(n.async=this.defaults.async||n.async||!1,e.extensions&&(e.extensions.forEach(e=>{if(!e.name)throw Error(`extension name required`);if(`renderer`in e){let n=t.renderers[e.name];n?t.renderers[e.name]=function(...t){let r=e.renderer.apply(this,t);return r===!1&&(r=n.apply(this,t)),r}:t.renderers[e.name]=e.renderer}if(`tokenizer`in e){if(!e.level||e.level!==`block`&&e.level!==`inline`)throw Error(`extension level must be 'block' or 'inline'`);let n=t[e.level];n?n.unshift(e.tokenizer):t[e.level]=[e.tokenizer],e.start&&(e.level===`block`?t.startBlock?t.startBlock.push(e.start):t.startBlock=[e.start]:e.level===`inline`&&(t.startInline?t.startInline.push(e.start):t.startInline=[e.start]))}`childTokens`in e&&e.childTokens&&(t.childTokens[e.name]=e.childTokens)}),n.extensions=t),e.renderer){let t=this.defaults.renderer||new sn(this.defaults);for(let n in e.renderer){if(!(n in t))throw Error(`renderer '${n}' does not exist`);if([`options`,`parser`].includes(n))continue;let r=n,i=e.renderer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n||``}}n.renderer=t}if(e.tokenizer){let t=this.defaults.tokenizer||new on(this.defaults);for(let n in e.tokenizer){if(!(n in t))throw Error(`tokenizer '${n}' does not exist`);if([`options`,`rules`,`lexer`].includes(n))continue;let r=n,i=e.tokenizer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.tokenizer=t}if(e.hooks){let t=this.defaults.hooks||new ln;for(let n in e.hooks){if(!(n in t))throw Error(`hook '${n}' does not exist`);if([`options`,`block`].includes(n))continue;let r=n,i=e.hooks[r],a=t[r];ln.passThroughHooks.has(n)?t[r]=e=>{if(this.defaults.async&&ln.passThroughHooksRespectAsync.has(n))return(async()=>{let n=await i.call(t,e);return a.call(t,n)})();let r=i.call(t,e);return a.call(t,r)}:t[r]=(...e)=>{if(this.defaults.async)return(async()=>{let n=await i.apply(t,e);return n===!1&&(n=await a.apply(t,e)),n})();let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.hooks=t}if(e.walkTokens){let t=this.defaults.walkTokens,r=e.walkTokens;n.walkTokens=function(e){let n=[];return n.push(r.call(this,e)),t&&(n=n.concat(t.call(this,e))),n}}this.defaults={...this.defaults,...n}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return Z.lex(e,t??this.defaults)}parser(e,t){return Q.parse(e,t??this.defaults)}parseMarkdown(e){return(t,n)=>{let r={...n},i={...this.defaults,...r},a=this.onError(!!i.silent,!!i.async);if(this.defaults.async===!0&&r.async===!1)return a(Error(`marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.`));if(typeof t>`u`||t===null)return a(Error(`marked(): input parameter is undefined or null`));if(typeof t!=`string`)return a(Error(`marked(): input parameter is of type `+Object.prototype.toString.call(t)+`, string expected`));if(i.hooks&&(i.hooks.options=i,i.hooks.block=e),i.async)return(async()=>{let n=i.hooks?await i.hooks.preprocess(t):t,r=await(i.hooks?await i.hooks.provideLexer(e):e?Z.lex:Z.lexInline)(n,i),a=i.hooks?await i.hooks.processAllTokens(r):r;i.walkTokens&&await Promise.all(this.walkTokens(a,i.walkTokens));let o=await(i.hooks?await i.hooks.provideParser(e):e?Q.parse:Q.parseInline)(a,i);return i.hooks?await i.hooks.postprocess(o):o})().catch(a);try{i.hooks&&(t=i.hooks.preprocess(t));let n=(i.hooks?i.hooks.provideLexer(e):e?Z.lex:Z.lexInline)(t,i);i.hooks&&(n=i.hooks.processAllTokens(n)),i.walkTokens&&this.walkTokens(n,i.walkTokens);let r=(i.hooks?i.hooks.provideParser(e):e?Q.parse:Q.parseInline)(n,i);return i.hooks&&(r=i.hooks.postprocess(r)),r}catch(e){return a(e)}}}onError(e,t){return n=>{if(n.message+=`
|
|
60
|
+
Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error occurred:</p><pre>`+X(n.message+``,!0)+`</pre>`;return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}};function $(e,t){return un.parse(e,t)}$.options=$.setOptions=function(e){return un.setOptions(e),$.defaults=un.defaults,B($.defaults),$},$.getDefaults=R,$.defaults=z,$.use=function(...e){return un.use(...e),$.defaults=un.defaults,B($.defaults),$},$.walkTokens=function(e,t){return un.walkTokens(e,t)},$.parseInline=un.parseInline,$.Parser=Q,$.parser=Q.parse,$.Renderer=sn,$.TextRenderer=cn,$.Lexer=Z,$.lexer=Z.lex,$.Tokenizer=on,$.Hooks=ln,$.parse=$,$.options,$.setOptions,$.use,$.walkTokens,$.parseInline,Q.parse,Z.lex;var dn={key:0,class:`af-empty column items-center justify-center text-center q-pa-xl`},fn={key:1,class:`row justify-center q-my-sm`},pn=[`data-item-id`],mn={class:`af-tool row items-center q-gutter-xs`},hn={class:`af-time`},gn={key:0,class:`text-grey-4 q-mb-xs`},_n={class:`af-ask-options-list q-mb-sm`},vn={class:`text-weight-bold text-grey-3`},yn={key:0},bn={key:1,class:`af-ask-buttons q-gutter-xs`},xn=[`onClick`],Sn={class:`af-tool-label text-grey-7`},Cn={key:0,class:`af-tool-desc text-grey-8`},wn={class:`af-time`},Tn={key:0,class:`af-tool-args q-mt-xs rounded-borders`},En={class:`af-args-pre`},Dn={class:`af-text-header row items-center q-mb-xs`},On={class:`af-time`},kn=[`innerHTML`],An={key:0,class:`af-options q-mt-sm q-gutter-xs`},jn=[`onClick`],Mn={class:`af-system-content text-caption text-amber-6`},Nn={class:`af-time`},Pn={key:0,class:`af-system-details q-mt-xs rounded-borders`},Fn={class:`af-args-pre`},In={key:4,class:`row items-center`},Ln={class:`af-error-content text-red-5`},Rn={class:`af-time`},zn={key:5,class:`row items-center`},Bn={class:`af-raw-content text-grey-7`},Vn={class:`af-time`},Hn=50,Un=50,Wn=x(v({__name:`ActivityFeed`,setup(v){function b(e){let t=$.parse(e,{async:!1,breaks:!0,gfm:!0});return Je.sanitize(t)}let x=re(),se=ne(),S=l(null),ce=l(!1),le=l(new Set);function ue(e){let t=[...e.matchAll(/^-\s*\*\*([A-Z])\s*[—–-]\s*(.+?)\*\*/gm)];if(t.length>=2){let n=e.indexOf(t[0][0]);return{textBefore:e.substring(0,n).trim(),options:t.map(e=>({key:e[1],label:`${e[1]} — ${e[2]}`}))}}let n=[...e.matchAll(/^\d+\.\s*\*\*(.+?)\*\*\s*[—–-]\s*(.+)/gm)];if(n.length>=2){let t=e.indexOf(n[0][0]);return{textBefore:e.substring(0,t).trim(),options:n.map((e,t)=>({key:String(t+1),label:`${e[1]} — ${e[2]}`}))}}return null}let C=new Map;function w(e,t){return C.has(e)||C.set(e,ue(t)),C.get(e)}function de(e){let t=x.selectedWorkspaceId;t&&se.sendChatMessage(t,e)}let fe=te(()=>{let e=x.activityFeed;for(let t=e.length-1;t>=0;t--)if(e[t].type===`text`)return e[t].id;return null}),pe=te(()=>{let e=x.activityFeed;for(let t=e.length-1;t>=0;t--){let n=e[t];if(n.meta?.sender===`user`)return null;if(n.type===`tool_use`&&n.content===`AskUserQuestion`)return n.id}return null}),T=l(-1);function me(){let e=x.activityFeed,n=e.map((e,t)=>({item:e,idx:t})).filter(({item:e})=>e.meta?.sender===`user`);if(n.length===0)return;T.value<=0?T.value=n.length-1:T.value--;let r=n[T.value].idx,i=n[T.value].item.id,a=e.length-r;a>E.value&&(E.value=Math.min(a+10,e.length)),t(()=>{let e=S.value?.querySelector(`[data-item-id="${i}"]`);e&&e.scrollIntoView({behavior:`smooth`,block:`center`})})}r(()=>x.selectedWorkspaceId,()=>{T.value=-1});let E=l(Hn);r(()=>x.selectedWorkspaceId,()=>{E.value=Hn});let he=te(()=>{let e=x.activityFeed;return e.length<=E.value?e:e.slice(-E.value)}),ge=l(!1);function _e(){let e=S.value;if(e&&(ge.value=!(e.scrollHeight-e.scrollTop-e.clientHeight<50),e.scrollTop<200&&!ce.value)){let n=x.activityFeed.length;if(E.value<n){ce.value=!0;let r=e.scrollHeight;E.value=Math.min(E.value+Un,n),t(()=>{S.value&&(S.value.scrollTop+=S.value.scrollHeight-r),ce.value=!1})}}}function ve(){if(ge.value)return;let e=S.value;e&&(e.scrollTop=e.scrollHeight)}r(()=>x.activityFeed.length,()=>{t(ve)}),m(()=>{S.value?.addEventListener(`scroll`,_e),t(ve)}),e(()=>{S.value?.removeEventListener(`scroll`,_e)});function D(e){return new Date(e).toLocaleTimeString(`en-US`,{hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}function ye(e){let t=e.toLowerCase();return t.includes(`read`)||t.includes(`grep`)||t.includes(`glob`)?`search`:t.includes(`write`)||t.includes(`edit`)?`edit`:t.includes(`bash`)||t.includes(`terminal`)?`terminal`:t.includes(`agent`)||t.includes(`task`)?`smart_toy`:`build`}function be(e){switch(e.type){case`text`:return e.meta?.sender===`system-prompt`?`af-item--prompt`:e.meta?.sender===`user`?`af-item--user`:`af-item--text`;case`system`:return`af-item--system`;case`error`:return`af-item--error`;case`tool_use`:return`af-item--tool`;case`raw`:return`af-item--raw`;default:return``}}function xe(e){switch(e.meta?.sender){case`system-prompt`:return`Initial Prompt`;case`user`:return`You`;default:return`Agent`}}function O(e){switch(e.meta?.sender){case`system-prompt`:return`text-indigo-4`;case`user`:return`text-green-4`;default:return`text-blue-4`}}function k(e){if(!e.meta)return``;let t=e.meta.input;return t&&typeof t.description==`string`?t.description:``}function Se(e){if(e.type!==`tool_use`||e.content!==`AskUserQuestion`)return null;let t=e.meta?.input;return!t?.questions||!Array.isArray(t.questions)?null:t.questions.filter(e=>Array.isArray(e.options)&&e.options.length>0).map(e=>({question:e.question??``,options:e.options.map(e=>({label:e.label??``,description:e.description??``}))}))}function A(e){let t=x.selectedWorkspaceId;t&&se.sendChatMessage(t,e)}function j(e){if(!e.meta)return!1;let t=e.meta;return t.input!==void 0&&t.input!==null}function M(e){le.value.has(e)?le.value.delete(e):le.value.add(e)}function Ce(e){return le.value.has(e)}function N(e){if(!e.meta)return``;let t=e.meta;if(!t.input)return``;try{return JSON.stringify(t.input,null,2)}catch{return String(t.input)}}function P(e){return e.type!==`system`||!e.meta?!1:Object.keys(e.meta).length>0}function we(e){if(!e.meta)return``;try{return JSON.stringify(e.meta,null,2)}catch{return``}}return(e,t)=>(s(),h(`div`,{ref_key:`feedContainer`,ref:S,class:`activity-feed q-pa-sm`},[n(x).activityFeed.length===0?(s(),h(`div`,dn,[f(y,{name:`forum`,size:`48px`,color:`grey-8`}),t[0]||=u(`div`,{class:`text-grey-6 q-mt-md text-body2`},`No activity yet`,-1),t[1]||=u(`div`,{class:`text-grey-8 text-caption q-mt-xs`},` Start a workspace to see agent output here `,-1)])):_(``,!0),ce.value?(s(),h(`div`,fn,[f(ie,{size:`24px`,color:`grey-6`})])):_(``,!0),(s(!0),h(g,null,c(he.value,e=>(s(),h(`div`,{key:e.id,"data-item-id":e.id,class:a([`af-item text-caption rounded-borders`,be(e)])},[e.type===`tool_use`&&Se(e)?(s(),h(g,{key:0},[u(`div`,mn,[f(y,{name:`help_outline`,size:`14px`,color:`indigo-4`}),t[2]||=u(`span`,{class:`af-tool-label text-indigo-4`},`Question`,-1),f(ae),u(`span`,hn,i(D(e.timestamp)),1)]),(s(!0),h(g,null,c(Se(e),(t,n)=>(s(),h(`div`,{key:n,class:`q-mt-sm`},[t.question?(s(),h(`div`,gn,i(t.question),1)):_(``,!0),u(`div`,_n,[(s(!0),h(g,null,c(t.options,(e,t)=>(s(),h(`div`,{key:t,class:`af-ask-option-item text-caption text-grey-5`},[u(`span`,vn,i(t+1)+`. `+i(e.label),1),e.description?(s(),h(`span`,yn,` — `+i(e.description),1)):_(``,!0)]))),128))]),e.id===pe.value?(s(),h(`div`,bn,[(s(!0),h(g,null,c(t.options,(e,t)=>(s(),d(ee,{key:e.label,"no-caps":``,outline:``,dense:``,color:`indigo-4`,class:`af-option-btn`,onClick:n=>A(`${t+1}. ${e.label}`)},{default:o(()=>[p(i(e.label),1)]),_:2},1032,[`onClick`]))),128))])):_(``,!0)]))),128))],64)):e.type===`tool_use`?(s(),h(g,{key:1},[u(`div`,{class:a([`af-tool row items-center q-gutter-xs`,{"cursor-pointer":j(e)}]),onClick:t=>j(e)&&M(e.id)},[f(y,{name:ye(e.content),size:`14px`,color:`grey-6`},null,8,[`name`]),u(`span`,Sn,i(e.content),1),k(e)?(s(),h(`span`,Cn,`— `+i(k(e)),1)):_(``,!0),j(e)?(s(),d(y,{key:1,name:Ce(e.id)?`expand_less`:`expand_more`,size:`14px`,color:`grey-7`},null,8,[`name`])):_(``,!0),f(ae),u(`span`,wn,i(D(e.timestamp)),1)],10,xn),Ce(e.id)?(s(),h(`div`,Tn,[u(`pre`,En,i(N(e)),1)])):_(``,!0)],64)):e.type===`text`?(s(),h(g,{key:2},[u(`div`,Dn,[u(`span`,{class:a([`text-caption text-weight-bold`,O(e)])},i(xe(e)),3),e.meta?.pending?(s(),d(ie,{key:0,size:`14px`,color:`grey-5`,class:`q-ml-sm`})):_(``,!0),f(ae),u(`span`,On,i(D(e.timestamp)),1)]),u(`div`,{class:`af-text-content af-markdown`,innerHTML:b(e.content)},null,8,kn),w(e.id,e.content)&&e.id===fe.value?(s(),h(`div`,An,[(s(!0),h(g,null,c(w(e.id,e.content).options,e=>(s(),d(ee,{key:e.key,"no-caps":``,outline:``,dense:``,color:`indigo-4`,class:`af-option-btn`,onClick:t=>de(`${e.key}. ${e.label}`)},{default:o(()=>[p(i(e.label),1)]),_:2},1032,[`onClick`]))),128))])):_(``,!0)],64)):e.type===`system`?(s(),h(g,{key:3},[u(`div`,{class:a([`row items-center`,{"cursor-pointer":P(e)}]),onClick:t=>P(e)&&M(e.id)},[f(y,{name:`info`,size:`14px`,color:`amber-6`,class:`q-mr-xs`}),u(`span`,Mn,i(e.content),1),P(e)?(s(),d(y,{key:0,name:Ce(e.id)?`expand_less`:`expand_more`,size:`14px`,color:`amber-8`,class:`q-ml-xs`},null,8,[`name`])):_(``,!0),f(ae),u(`span`,Nn,i(D(e.timestamp)),1)],10,jn),Ce(e.id)&&P(e)?(s(),h(`div`,Pn,[u(`pre`,Fn,i(we(e)),1)])):_(``,!0)],64)):e.type===`error`?(s(),h(`div`,In,[f(y,{name:`error`,size:`14px`,color:`red-5`,class:`q-mr-xs`}),u(`span`,Ln,i(e.content),1),f(ae),u(`span`,Rn,i(D(e.timestamp)),1)])):(s(),h(`div`,zn,[u(`span`,Bn,i(e.content),1),f(ae),u(`span`,Vn,i(D(e.timestamp)),1)]))],10,pn))),128)),n(x).activityFeed.some(e=>e.meta?.sender===`user`)?(s(),d(ee,{key:2,round:``,dense:``,size:`sm`,icon:`person_search`,color:`indigo-8`,class:`scroll-to-user-btn`,onClick:me},{default:o(()=>[f(oe,null,{default:o(()=>[...t[3]||=[p(`Go to previous message`,-1)]]),_:1})]),_:1})):_(``,!0)],512))}}),[[`__scopeId`,`data-v-8181e3e3`]]);export{Wn as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.activity-feed[data-v-8181e3e3]{flex-direction:column;gap:4px;display:flex;position:relative;overflow:hidden auto}.af-item[data-v-8181e3e3]{word-break:break-word;overflow-wrap:break-word;flex-shrink:0;padding:6px 10px;overflow-x:hidden}.af-time[data-v-8181e3e3]{color:#555;flex-shrink:0;font-size:10px}.af-tool-label[data-v-8181e3e3]{font-family:Roboto Mono,monospace;font-size:11px}.af-tool-desc[data-v-8181e3e3]{text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.af-ask-option-item[data-v-8181e3e3]{padding:2px 0}.af-tool-args[data-v-8181e3e3]{background-color:#ffffff0a;padding:6px 8px;overflow-x:auto}.af-args-pre[data-v-8181e3e3]{color:#888;white-space:pre-wrap;word-break:break-word;margin:0;font-family:Roboto Mono,monospace;font-size:10px}.af-item--text[data-v-8181e3e3]{background-color:#1a2a3a;border-left:3px solid #3b82f6}.af-item--user[data-v-8181e3e3]{background-color:#1a2a1a;border-left:3px solid #22c55e}.af-item--prompt[data-v-8181e3e3]{background-color:#1a1a2e;border-left:3px solid #6c63ff}.af-text-content[data-v-8181e3e3]{color:#d0d0d0;word-break:break-word;line-height:1.5}.af-markdown[data-v-8181e3e3] p{margin:0 0 8px}.af-markdown[data-v-8181e3e3] p:last-child{margin-bottom:0}.af-markdown[data-v-8181e3e3] h1,.af-markdown[data-v-8181e3e3] h2,.af-markdown[data-v-8181e3e3] h3{color:#e0e0e0;margin:12px 0 6px}.af-markdown[data-v-8181e3e3] h1{font-size:16px}.af-markdown[data-v-8181e3e3] h2{font-size:14px}.af-markdown[data-v-8181e3e3] h3{font-size:13px}.af-markdown[data-v-8181e3e3] ul,.af-markdown[data-v-8181e3e3] ol{margin:4px 0;padding-left:20px}.af-markdown[data-v-8181e3e3] li{margin:2px 0}.af-markdown[data-v-8181e3e3] code{background-color:#ffffff14;border-radius:3px;padding:1px 4px;font-family:Roboto Mono,monospace;font-size:11px}.af-markdown[data-v-8181e3e3] pre{background-color:#0000004d;border-radius:4px;margin:6px 0;padding:8px;overflow-x:auto}.af-markdown[data-v-8181e3e3] pre code{background:0 0;padding:0}.af-markdown[data-v-8181e3e3] strong{color:#fff}.af-markdown[data-v-8181e3e3] a{color:#6c63ff}.af-markdown[data-v-8181e3e3] blockquote{color:#aaa;border-left:3px solid #6c63ff;margin:6px 0;padding:4px 12px}.af-markdown[data-v-8181e3e3] table{border-collapse:collapse;margin:6px 0;font-size:11px}.af-markdown[data-v-8181e3e3] table th,.af-markdown[data-v-8181e3e3] table td{border:1px solid #2a2a4a;padding:4px 8px}.af-markdown[data-v-8181e3e3] table th{background-color:#ffffff0d}.af-item--system[data-v-8181e3e3]{background-color:#2a2a1a;border-left:3px solid #f59e0b}.af-system-details[data-v-8181e3e3]{background-color:#ffffff0a;padding:6px 8px;overflow-x:auto}.af-system-content[data-v-8181e3e3]{white-space:pre-wrap}.af-item--error[data-v-8181e3e3]{background-color:#2a1a1a;border-left:3px solid #ef4444}.af-item--raw[data-v-8181e3e3]{white-space:pre-wrap;font-family:Roboto Mono,monospace}.scroll-to-user-btn[data-v-8181e3e3]{opacity:.7;align-self:flex-end;margin-right:8px;transition:opacity .15s;position:sticky;bottom:8px}.scroll-to-user-btn[data-v-8181e3e3]:hover{opacity:1}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{D as e,Gt as t,It as n,Jt as r,Lt as i,Mt as a,Pt as o,St as ee,Vt as s,at as c,dt as l,et as te,ft as u,gt as d,ht as f,it as p,kt as ne,mt as m,ot as h,pt as g,r as _,ut as v,vt as re,y}from"./nodes-irfhA8FK.js";import{i as ie,o as ae,r as oe}from"./index-C4WDJfjD.js";import{A as b,t as x}from"./_plugin-vue_export-helper-C6NdfBK4.js";import{_ as S,o as C}from"./QDialog-DgR7t6Vf.js";import{t as se}from"./use-quasar-CH0pSHUf.js";import{a as w,i as T,n as E,r as D,t as ce}from"./QPage-DX4g-Dpe.js";import{t as le}from"./QExpansionItem-VVjlYOIT.js";var ue={class:`create-inner`},de={class:`create-card rounded-borders`},fe={class:`card-top-bar row items-center q-px-md q-py-xs`},pe={class:`model-badge cursor-default row items-center q-gutter-xs`},me={key:0,class:`notion-url-wrap`},he={key:0,class:`notion-error text-caption q-px-md q-pb-xs text-red-5`},ge={key:1,class:`notion-valid text-caption q-px-md q-pb-xs text-green-4`},_e={class:`card-name-wrap`},ve={class:`card-textarea-wrap`},ye={class:`q-pa-sm manual-section-body`},be={class:`row items-center q-gutter-sm q-mb-sm`},xe={class:`col text-caption text-grey-4`},Se={class:`q-pa-sm manual-section-body`},Ce={class:`row items-center q-gutter-sm q-mb-sm`},we={class:`col text-caption text-grey-4`},Te={class:`card-bottom-bar row items-center wrap q-px-sm q-py-xs q-gutter-xs`},Ee={class:`bottom-select-label row items-center no-wrap`},De={class:`bottom-select-label row items-center no-wrap`},Oe={class:`bottom-select-label row items-center no-wrap`},ke={class:`create-hint text-center text-body2 q-mt-md text-grey-8`},O=x(re({__name:`CreatePage`,setup(re){let x=oe(),O=se(),k=ae(),A=e(),j=s([]),M=s(``),N=s(``),P=s(``),F=s(!1),I=s(`auto`),L=s(``),R=s(null),z=s([]),B=s(!1),V=s(!1),H=[{label:`Auto`,value:`auto`,description:`Claude picks the optimal model`},{label:`Opus 4.6`,value:`claude-opus-4-6`,description:`Most powerful`},{label:`Sonnet 4.6`,value:`claude-sonnet-4-6`,description:`Balanced`},{label:`Haiku 4.5`,value:`claude-haiku-4-5-20251001`,description:`Fastest`}],U=v(()=>P.value.trim().startsWith(`https://www.notion.so/`)),W=s([]),G=s([]),K=s(``),q=s(``),J=v(()=>!F.value||!U.value);function Y(){let e=K.value.trim();e&&(W.value.push(e),K.value=``)}function Ae(e){W.value.splice(e,1)}function X(){let e=q.value.trim();e&&(G.value.push(e),q.value=``)}function je(e){G.value.splice(e,1)}function Me(){F.value=!F.value,F.value||(P.value=``)}async function Ne(e){if(!e.trim()){z.value=[],R.value=null;return}B.value=!0;try{let t=await fetch(`/api/git/branches?path=${encodeURIComponent(e.trim())}`);if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.json();z.value=n.local??n.branches??[],z.value.length>0&&!R.value&&(R.value=z.value[0]??null)}catch{z.value=[],R.value=null}finally{B.value=!1}}function Pe(e){let t=A.getProjectByPath(e);t&&(t.defaultSourceBranch&&(R.value=t.defaultSourceBranch),t.defaultModel?I.value=t.defaultModel:A.global.defaultModel&&(I.value=A.global.defaultModel))}let Z=null;n(L,e=>{Z&&clearTimeout(Z),Z=setTimeout(()=>{R.value=null,Ne(e),Pe(e)},500)});function Fe(e,t){t(()=>{j.value=A.projectPaths.filter(t=>t.toLowerCase().includes(e.toLowerCase()))})}ne(()=>{A.fetchSettings()});function Ie(e){return e.toLowerCase().replace(/[^a-z0-9\s-]/g,``).trim().replace(/\s+/g,`-`).replace(/-+/g,`-`).substring(0,50)}function Q(){return M.value.trim()?M.value.trim().substring(0,80):!F.value&&N.value.trim()&&(N.value.trim().split(`
|
|
2
|
+
`)[0]??``).substring(0,80)||`workspace`}function Le(e){let t=(e.split(`/`).pop()??``).split(`-`);return t.length>1&&/^[0-9a-f]{12,}$/i.test(t[t.length-1])&&t.pop(),t.join(`-`).toLowerCase().substring(0,50)||`task-${Date.now()}`}function Re(){return F.value&&!U.value?`Please paste a valid Notion URL (https://www.notion.so/...).`:!F.value&&!N.value.trim()?`Please describe the task.`:!F.value&&(!Q()||Q()===`workspace`)&&!M.value.trim()&&!N.value.trim()?`Please provide a workspace name.`:L.value.trim()?R.value?null:`Please select a branch.`:`Please enter the project path.`}async function $(){let e=Re();if(e){O.notify({type:`negative`,message:e,position:`top`});return}V.value=!0;try{let e=Q(),t;t=e===`workspace`?F.value&&U.value?Le(P.value.trim()):`task-${Date.now()}`:Ie(e);let n=`feature/${t}`,r={name:e,projectPath:L.value.trim(),sourceBranch:R.value,workingBranch:n,model:I.value,...F.value&&U.value?{notionUrl:P.value.trim()}:{},...J.value&&W.value.length>0?{tasks:W.value}:{},...J.value&&G.value.length>0?{acceptanceCriteria:G.value}:{}},i=await k.createWorkspace(r);ie().subscribe(i.id),k.selectWorkspace(i.id),x.push({name:`workspace`,params:{id:i.id}})}catch{O.notify({type:`negative`,message:`Error creating workspace.`,position:`top`})}finally{V.value=!1}}return(e,n)=>(a(),u(ce,{class:`create-page flex flex-center column`},{default:i(()=>[l(`div`,ue,[n[12]||=l(`div`,{class:`create-title text-center text-weight-bold q-mb-lg text-grey-3`},` What would you like to work on? `,-1),l(`div`,de,[l(`div`,fe,[l(`span`,pe,[d(y,{name:`auto_awesome`,size:`14px`,color:`indigo-4`}),n[9]||=l(`span`,{class:`text-indigo-3 text-weight-medium text-caption`},`Claude Code`,-1)]),d(b),d(_,{flat:``,dense:``,"no-caps":``,size:`sm`,color:F.value?`green-4`:`grey-5`,class:`notion-toggle-btn text-caption rounded-borders`,onClick:Me},{default:i(()=>[d(y,{name:`description`,size:`14px`,class:`q-mr-xs`}),f(` `+r(F.value?`Notion enabled`:`Import from Notion`),1)]),_:1},8,[`color`])]),d(S,{color:`grey-9`}),d(te,{name:`slide`},{default:i(()=>[F.value?(a(),m(`div`,me,[d(C,{modelValue:P.value,"onUpdate:modelValue":n[0]||=e=>P.value=e,borderless:``,dense:``,placeholder:`https://www.notion.so/workspace/Page-title-abc123...`,class:`notion-url-input`,"input-class":`notion-url-input-inner`},{prepend:i(()=>[d(y,{name:`link`,size:`16px`,color:U.value?`green-4`:`grey-6`},null,8,[`color`])]),_:1},8,[`modelValue`]),P.value.trim()&&!U.value?(a(),m(`div`,he,` URL must start with https://www.notion.so/ `)):g(``,!0),U.value?(a(),m(`div`,ge,` Subtasks and acceptance criteria will be extracted automatically. `)):g(``,!0)])):g(``,!0)]),_:1}),F.value?(a(),u(S,{key:0,color:`grey-9`})):g(``,!0),l(`div`,_e,[d(C,{modelValue:M.value,"onUpdate:modelValue":n[1]||=e=>M.value=e,borderless:``,dense:``,placeholder:F.value&&U.value?`Workspace name (defaults to Notion page title)`:`Workspace name...`,class:`name-input`,"input-class":`name-input-inner`},null,8,[`modelValue`,`placeholder`])]),d(S,{color:`grey-9`}),l(`div`,ve,[d(C,{modelValue:N.value,"onUpdate:modelValue":n[2]||=e=>N.value=e,type:`textarea`,borderless:``,autogrow:``,rows:3,placeholder:F.value?`Additional instructions (optional)...`:`Describe the task...`,class:`create-textarea`,"input-class":`create-textarea-input`,onKeydown:[p(c($,[`ctrl`]),[`enter`]),p(c($,[`meta`]),[`enter`])]},null,8,[`modelValue`,`placeholder`,`onKeydown`])]),d(S,{color:`grey-9`}),J.value?(a(),m(h,{key:1},[n[10]||=l(`div`,{class:`manual-hint q-px-md q-py-sm text-caption text-grey-6`},` No Notion ticket? Add your tasks and acceptance criteria manually — they'll be sent to the Claude agent as context. `,-1),d(le,{dark:``,dense:``,label:`Tasks (${W.value.length})`,"header-class":`text-grey-4 manual-expansion-header`,class:`manual-expansion q-mx-sm`},{default:i(()=>[l(`div`,ye,[l(`div`,be,[d(C,{modelValue:K.value,"onUpdate:modelValue":n[3]||=e=>K.value=e,dark:``,dense:``,borderless:``,placeholder:`Add a task...`,class:`col manual-input`,"input-class":`manual-input-inner`,onKeydown:p(c(Y,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`]),d(_,{flat:``,dense:``,round:``,icon:`add`,color:`indigo-4`,disable:!K.value.trim(),onClick:Y},null,8,[`disable`])]),(a(!0),m(h,null,o(W.value,(e,t)=>(a(),m(`div`,{key:`task-${t}`,class:`row items-center q-py-xs manual-item`},[l(`span`,xe,r(e),1),d(_,{flat:``,dense:``,round:``,icon:`close`,size:`xs`,color:`grey-6`,onClick:e=>Ae(t)},null,8,[`onClick`])]))),128))])]),_:1},8,[`label`]),d(le,{dark:``,dense:``,label:`Acceptance Criteria (${G.value.length})`,"header-class":`text-grey-4 manual-expansion-header`,class:`manual-expansion q-mx-sm q-mb-sm`},{default:i(()=>[l(`div`,Se,[l(`div`,Ce,[d(C,{modelValue:q.value,"onUpdate:modelValue":n[4]||=e=>q.value=e,dark:``,dense:``,borderless:``,placeholder:`Add a criterion...`,class:`col manual-input`,"input-class":`manual-input-inner`,onKeydown:p(c(X,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`]),d(_,{flat:``,dense:``,round:``,icon:`add`,color:`indigo-4`,disable:!q.value.trim(),onClick:X},null,8,[`disable`])]),(a(!0),m(h,null,o(G.value,(e,t)=>(a(),m(`div`,{key:`crit-${t}`,class:`row items-center q-py-xs manual-item`},[l(`span`,we,r(e),1),d(_,{flat:``,dense:``,round:``,icon:`close`,size:`xs`,color:`grey-6`,onClick:e=>je(t)},null,8,[`onClick`])]))),128))])]),_:1},8,[`label`]),d(S,{color:`grey-9`})],64)):g(``,!0),l(`div`,Te,[d(E,{modelValue:I.value,"onUpdate:modelValue":n[5]||=e=>I.value=e,options:H,dense:``,borderless:``,class:`bottom-select rounded-borders model-select`,"hide-dropdown-icon":``,"emit-value":``,"map-options":``,"option-value":`value`,"option-label":`label`},{selected:i(()=>[l(`span`,Ee,[f(r(H.find(e=>e.value===I.value)?.label??I.value)+` `,1),d(y,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),option:i(({opt:e,itemProps:t})=>[d(w,ee(t,{class:`model-option`}),{default:i(()=>[d(T,null,{default:i(()=>[d(D,{class:`text-white`},{default:i(()=>[f(r(e.label),1)]),_:2},1024),d(D,{caption:``,class:`text-grey-5`},{default:i(()=>[f(r(e.description),1)]),_:2},1024)]),_:2},1024)]),_:2},1040)]),_:1},8,[`modelValue`]),d(b),d(E,{modelValue:L.value,"onUpdate:modelValue":n[6]||=e=>L.value=e,options:j.value,dense:``,borderless:``,"use-input":``,"hide-selected":``,"fill-input":``,"input-debounce":`0`,"new-value-mode":`add`,class:`bottom-select rounded-borders repo-select`,"hide-dropdown-icon":``,behavior:t(A).projectPaths.length>0?`menu`:`dialog`,onFilter:Fe,onInputValue:n[7]||=e=>{L.value=e}},{prepend:i(()=>[d(y,{name:`attach_file`,size:`12px`,color:`grey-5`})]),selected:i(()=>[l(`span`,De,r(L.value||`/path/to/project`),1)]),"no-option":i(()=>[d(w,null,{default:i(()=>[d(T,{class:`text-grey-6 text-caption`},{default:i(()=>[...n[11]||=[f(` Enter the project path `,-1)]]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`behavior`]),d(E,{modelValue:R.value,"onUpdate:modelValue":n[8]||=e=>R.value=e,options:z.value,dense:``,borderless:``,class:`bottom-select rounded-borders branch-select`,"hide-dropdown-icon":``,loading:B.value,disable:!L.value.trim()||B.value},{selected:i(()=>[l(`span`,Oe,[d(y,{name:`call_split`,size:`12px`,color:`grey-5`,class:`q-mr-xs`}),f(` `+r(R.value??`Branch`)+` `,1),d(y,{name:`expand_more`,size:`12px`,color:`grey-5`})])]),"no-option":i(()=>[d(w,null,{default:i(()=>[d(T,{class:`text-grey-6 text-caption`},{default:i(()=>[f(r(L.value.trim()?`No branches found`:`Enter a project path`),1)]),_:1})]),_:1})]),_:1},8,[`modelValue`,`options`,`loading`,`disable`]),d(_,{label:`Create`,"no-caps":``,unelevated:``,class:`create-btn text-weight-bold rounded-borders`,loading:V.value,onClick:$},null,8,[`loading`])])]),l(`div`,ke,r(F.value?`Subtasks and acceptance criteria will be extracted from the Notion page.`:`Click "Import from Notion" to automatically extract subtasks from a ticket.`),1)])]),_:1}))}}),[[`__scopeId`,`data-v-7d9d29f5`]]);export{O as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.acceptance-item[data-v-b9e5e638]{padding:2px 0}.acceptance-item[data-v-b9e5e638]:hover{background-color:#ffffff08}.acceptance-item:hover .criterion-delete-btn[data-v-b9e5e638]{opacity:1}.criterion-delete-btn[data-v-b9e5e638]{opacity:0;transition:opacity .15s}.acceptance-title[data-v-b9e5e638]{word-break:break-word;cursor:text;line-height:1.4}.text-strike[data-v-b9e5e638]{opacity:.7;text-decoration:line-through}.criterion-input[data-v-b9e5e638] .q-field__control{height:22px;min-height:22px;padding:0}.criterion-input[data-v-b9e5e638] input{color:#e0e0e0;font-size:12px}.criterion-input[data-v-b9e5e638] input::placeholder{color:#555}.criterion-add-row[data-v-b9e5e638]{padding:2px 0}.log-content[data-v-c1509b16]{max-height:60vh;overflow-y:auto}.log-text[data-v-c1509b16]{color:#ccc;white-space:pre-wrap;word-break:break-all;background:#0d0d1a;margin:0;font-family:JetBrains Mono,Fira Code,monospace;font-size:11px}.dd-panel[data-v-8c173889]{min-height:48px}.git-btn[data-v-5a52aa16]{padding:2px 10px;font-size:11px}.notion-link[data-v-5f29da43]{text-decoration:none;display:inline-flex}.notion-link[data-v-5f29da43]:hover{text-decoration:underline}.task-item[data-v-5f29da43]{padding:2px 0}.task-item[data-v-5f29da43]:hover{background-color:#ffffff08}.task-item:hover .task-delete-btn[data-v-5f29da43]{opacity:1}.task-delete-btn[data-v-5f29da43]{opacity:0;transition:opacity .15s}.task-title[data-v-5f29da43]{word-break:break-word;cursor:text;line-height:1.4}.text-strike[data-v-5f29da43]{opacity:.7;text-decoration:line-through}.task-input[data-v-5f29da43] .q-field__control{height:22px;min-height:22px;padding:0}.task-input[data-v-5f29da43] input{color:#e0e0e0;font-size:12px}.task-input[data-v-5f29da43] input::placeholder{color:#555}.task-add-row[data-v-5f29da43]{padding:2px 0}.subagents-panel[data-v-b76be59d]{overflow-y:auto}.subagent-item[data-v-b76be59d]{background:#1e1e3a;border:1px solid #2a2a4a}.workspace-list[data-v-9d4c8886]{background-color:#16162a;overflow-x:hidden}.wl-search[data-v-9d4c8886]{background-color:#224;padding:0 8px}.wl-search[data-v-9d4c8886] .q-field__control{height:32px}.wl-search[data-v-9d4c8886] input{color:#ccc;font-size:12px}.wl-group-header[data-v-9d4c8886]:hover{background-color:#ffffff08}.wl-item[data-v-9d4c8886]{background-color:#224;transition:background-color .15s;position:relative}.wl-item[data-v-9d4c8886]:hover{background-color:#2a2a4a}.wl-item--selected[data-v-9d4c8886]{background-color:#2a2a4a;outline:1px solid #6c63ff66}.wl-item-action[data-v-9d4c8886]{opacity:0;transition:opacity .15s;position:absolute;top:50%;transform:translateY(-50%)}.wl-item-delete[data-v-9d4c8886]{right:4px}.wl-item-archive[data-v-9d4c8886],.wl-item-unarchive[data-v-9d4c8886]{right:28px}.wl-item:hover .wl-item-action[data-v-9d4c8886]{opacity:1}.wl-item--archived[data-v-9d4c8886]{opacity:.6;background-color:#1a1a30}.wl-item--archived[data-v-9d4c8886]:hover{opacity:.85}.wl-item--archived.wl-item--selected[data-v-9d4c8886]{opacity:1}.dd-dot[data-v-9d4c8886]{border-radius:50%;flex-shrink:0;width:6px;height:6px}.dd-dot--running[data-v-9d4c8886]{background-color:#22c55e;box-shadow:0 0 4px #22c55e80}.left-sidebar[data-v-513173db],.right-sidebar[data-v-513173db]{background-color:#16162a!important;border-color:#2a2a4a!important;overflow-x:hidden!important}[data-v-513173db] .q-drawer__content{overflow-x:hidden!important}.drawer-content[data-v-513173db]{overflow-y:auto}.drawer-header[data-v-513173db]{min-height:48px}.letter-spacing-wide[data-v-513173db]{letter-spacing:.05em}.right-tabs[data-v-513173db]{background-color:#16162a;flex-shrink:0}.right-tab-panels[data-v-513173db]{overflow-y:auto;background:0 0!important}[data-v-513173db] .q-tab-panel{padding:0}.main-content[data-v-513173db]{background-color:#1a1a2e}.resize-handle[data-v-513173db]{cursor:col-resize;z-index:10;width:4px;height:100%;transition:background-color .15s;position:absolute;top:0;right:-2px}.resize-handle[data-v-513173db]:hover,.resize-handle[data-v-513173db]:active{background-color:#6c63ff80}
|