@geminilight/mindos 0.6.37 → 0.6.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -2
- package/README_zh.md +14 -2
- package/_standalone/.mindos-build-version +1 -1
- package/_standalone/.next/BUILD_ID +1 -1
- package/_standalone/.next/app-path-routes-manifest.json +16 -16
- package/_standalone/.next/build-manifest.json +2 -2
- package/_standalone/.next/cache/.previewinfo +1 -1
- package/_standalone/.next/cache/.rscinfo +1 -1
- package/_standalone/.next/cache/config.json +3 -3
- package/_standalone/.next/prerender-manifest.json +3 -3
- package/_standalone/.next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/_global-error.html +2 -2
- package/_standalone/.next/server/app/_global-error.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/_standalone/.next/server/app/_not-found/page.js +1 -1
- package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page.js +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/agents/page.js +1 -1
- package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/ask/route.js +29 -29
- package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/changes/page.js +1 -1
- package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page.js +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/echo/page.js +1 -1
- package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/explore/page.js +1 -1
- package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/help/page.js +1 -1
- package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/login/page.js +1 -1
- package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/page.js +1 -1
- package/_standalone/.next/server/app/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/setup/page.js +1 -1
- package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/trash/page.js +3 -3
- package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/view/[...path]/page.js +2 -2
- package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app-paths-manifest.json +16 -16
- package/_standalone/.next/server/chunks/{912.js → 1473.js} +2 -2
- package/_standalone/.next/server/chunks/4931.js +12 -12
- package/_standalone/.next/server/next-font-manifest.js +1 -1
- package/_standalone/.next/server/next-font-manifest.json +1 -1
- package/_standalone/.next/server/pages/500.html +2 -2
- package/_standalone/.next/server/server-reference-manifest.js +1 -1
- package/_standalone/.next/server/server-reference-manifest.json +1 -1
- package/_standalone/.next/static/chunks/{1263-79beb8734dee7bbd.js → 1263-6df1734e4273adb1.js} +2 -2
- package/_standalone/.next/static/chunks/app/{layout-00844243aa76e1b6.js → layout-d91cdbe2ecf135e1.js} +54 -54
- package/_standalone/.next/static/chunks/app/{page-99cc295c70b85882.js → page-718fdf170428b43c.js} +2 -2
- package/_standalone/.next/static/chunks/app/trash/page-89b1430cc8a16f18.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/page-6e3dc47699a01de1.js +12 -0
- package/_standalone/.next/trace +53 -53
- package/_standalone/components/ask/AskContent.tsx +6 -6
- package/_standalone/components/settings/UpdateTab.tsx +371 -107
- package/_standalone/data/skills/mindos/SKILL.md +24 -9
- package/_standalone/data/skills/mindos-zh/SKILL.md +24 -9
- package/_standalone/lib/i18n/modules/settings.ts +32 -0
- package/app/app/api/ask/route.ts +12 -2
- package/app/components/ask/AskContent.tsx +6 -6
- package/app/components/settings/UpdateTab.tsx +371 -107
- package/app/data/skills/mindos/SKILL.md +24 -9
- package/app/data/skills/mindos-zh/SKILL.md +24 -9
- package/app/lib/i18n/modules/settings.ts +32 -0
- package/bin/cli.js +2 -2
- package/bin/lib/startup.js +1 -1
- package/package.json +1 -1
- package/scripts/build-runtime-archive.sh +113 -0
- package/skills/mindos/SKILL.md +24 -9
- package/skills/mindos/references/write-supplement.md +46 -4
- package/skills/mindos-zh/SKILL.md +24 -9
- package/skills/mindos-zh/references/write-supplement.md +47 -5
- package/_standalone/.next/static/chunks/app/trash/page-83afad27eeceb4b3.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/page-725df5864296687f.js +0 -12
- /package/_standalone/.next/static/{krusEkNclII1OrOrikHPD → ushZ_NJ8rE3rG5hZfaYOX}/_buildManifest.js +0 -0
- /package/_standalone/.next/static/{krusEkNclII1OrOrikHPD → ushZ_NJ8rE3rG5hZfaYOX}/_ssgManifest.js +0 -0
|
@@ -271,6 +271,22 @@ export const settingsEn = {
|
|
|
271
271
|
desktopReady: 'Update downloaded. Restart to apply.',
|
|
272
272
|
desktopRestart: 'Restart Now',
|
|
273
273
|
desktopHint: 'Updates are delivered through the Desktop app auto-updater.',
|
|
274
|
+
// Core Hot Update (Desktop only)
|
|
275
|
+
coreTitle: 'MindOS Core',
|
|
276
|
+
coreUpToDate: 'Core is up to date',
|
|
277
|
+
coreAvailable: (size: string) => `Update available (${size})`,
|
|
278
|
+
coreDownloading: 'Downloading...',
|
|
279
|
+
coreCancel: 'Cancel',
|
|
280
|
+
coreReady: 'Ready — restart services to apply',
|
|
281
|
+
coreRestartServices: 'Restart Services',
|
|
282
|
+
coreApplying: 'Applying update...',
|
|
283
|
+
coreApplied: 'Updated! Reloading...',
|
|
284
|
+
coreError: 'Core update failed.',
|
|
285
|
+
coreRetry: 'Retry',
|
|
286
|
+
coreDesktopTooOld: (version: string) => `v${version} requires a newer Desktop version.`,
|
|
287
|
+
coreDesktopTooOldHint: 'Please update MindOS Desktop first.',
|
|
288
|
+
coreHint: 'Core updates only restart services — no app restart needed.',
|
|
289
|
+
shellTitle: 'MindOS Desktop',
|
|
274
290
|
},
|
|
275
291
|
uninstall: {
|
|
276
292
|
title: 'Uninstall MindOS',
|
|
@@ -569,6 +585,22 @@ export const settingsZh = {
|
|
|
569
585
|
desktopReady: '更新已下载,重启后生效。',
|
|
570
586
|
desktopRestart: '立即重启',
|
|
571
587
|
desktopHint: '更新通过桌面端自动更新推送。',
|
|
588
|
+
// Core Hot Update
|
|
589
|
+
coreTitle: 'MindOS Core',
|
|
590
|
+
coreUpToDate: 'Core 已是最新',
|
|
591
|
+
coreAvailable: (size: string) => `有新版本可用(${size})`,
|
|
592
|
+
coreDownloading: '下载中...',
|
|
593
|
+
coreCancel: '取消',
|
|
594
|
+
coreReady: '已就绪 — 重启服务即可生效',
|
|
595
|
+
coreRestartServices: '重启服务',
|
|
596
|
+
coreApplying: '正在应用更新...',
|
|
597
|
+
coreApplied: '更新成功!正在刷新...',
|
|
598
|
+
coreError: 'Core 更新失败。',
|
|
599
|
+
coreRetry: '重试',
|
|
600
|
+
coreDesktopTooOld: (version: string) => `v${version} 需要更新版本的 Desktop。`,
|
|
601
|
+
coreDesktopTooOldHint: '请先更新 MindOS Desktop。',
|
|
602
|
+
coreHint: 'Core 更新只需重启服务,无需重启应用。',
|
|
603
|
+
shellTitle: 'MindOS Desktop',
|
|
572
604
|
},
|
|
573
605
|
uninstall: {
|
|
574
606
|
title: '卸载 MindOS',
|
package/bin/cli.js
CHANGED
|
@@ -435,7 +435,7 @@ const commands = {
|
|
|
435
435
|
execFileSync(process.execPath, [standaloneServer], {
|
|
436
436
|
cwd: resolve(ROOT, '_standalone'),
|
|
437
437
|
stdio: 'inherit',
|
|
438
|
-
env: { ...process.env, NODE_ENV: 'production', HOSTNAME: '
|
|
438
|
+
env: { ...process.env, NODE_ENV: 'production', HOSTNAME: process.env.MINDOS_WEB_HOST || '0.0.0.0', PORT: webPort },
|
|
439
439
|
});
|
|
440
440
|
} catch (err) {
|
|
441
441
|
process.exit(err.status || 1);
|
|
@@ -444,7 +444,7 @@ const commands = {
|
|
|
444
444
|
run(
|
|
445
445
|
`${NEXT_BIN} start -p ${webPort} ${extra}`,
|
|
446
446
|
resolve(ROOT, 'app'),
|
|
447
|
-
{ HOSTNAME: '
|
|
447
|
+
{ HOSTNAME: process.env.MINDOS_WEB_HOST || '0.0.0.0' }
|
|
448
448
|
);
|
|
449
449
|
}
|
|
450
450
|
},
|
package/bin/lib/startup.js
CHANGED
|
@@ -46,7 +46,7 @@ export async function printStartupInfo(webPort, mcpPort) {
|
|
|
46
46
|
console.log(`\n ${dim('Quick connect:')} ${cyan('mindos mcp install claude-code -g -y')}`);
|
|
47
47
|
console.log(` ${dim('Full config:')} ${cyan('mindos token')}`);
|
|
48
48
|
|
|
49
|
-
if (localIP) console.log(dim(`\n 💡
|
|
49
|
+
if (localIP) console.log(dim(`\n 💡 LAN access: http://${localIP}:${webPort} (MCP: http://${localIP}:${mcpPort}/mcp)`));
|
|
50
50
|
|
|
51
51
|
// Sync status
|
|
52
52
|
const mindRoot = config.mindRoot;
|
package/package.json
CHANGED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Build a minimal MindOS runtime archive for Desktop Core Hot Update.
|
|
3
|
+
# Output: /tmp/mindos-runtime-{VERSION}.tar.gz (pre-built, ~32MB)
|
|
4
|
+
#
|
|
5
|
+
# Directory structure matches what ProcessManager + analyzeMindOsLayout expect:
|
|
6
|
+
# app/.next/standalone/server.js
|
|
7
|
+
# app/.next/standalone/node_modules/
|
|
8
|
+
# app/.next/standalone/.next/server/
|
|
9
|
+
# app/.next/standalone/.next/static/
|
|
10
|
+
# app/.next/standalone/public/
|
|
11
|
+
# app/.next/static/ (isBundledRuntimeIntact checks this)
|
|
12
|
+
# app/public/
|
|
13
|
+
# mcp/dist/index.cjs
|
|
14
|
+
# package.json
|
|
15
|
+
# bin/ templates/ skills/
|
|
16
|
+
set -euo pipefail
|
|
17
|
+
|
|
18
|
+
VERSION=$(node -p "require('./package.json').version")
|
|
19
|
+
WORK="/tmp/mindos-runtime-build-$$"
|
|
20
|
+
ARCHIVE="/tmp/mindos-runtime-${VERSION}.tar.gz"
|
|
21
|
+
rm -rf "$WORK"
|
|
22
|
+
|
|
23
|
+
echo "📦 Building MindOS runtime v${VERSION}..."
|
|
24
|
+
|
|
25
|
+
# ── Web server (standalone Next.js) ──
|
|
26
|
+
echo " Copying standalone..."
|
|
27
|
+
mkdir -p "$WORK/app/.next"
|
|
28
|
+
# Copy the entire standalone tree (server.js + node_modules + .next/server + .next/static + public)
|
|
29
|
+
cp -r app/.next/standalone "$WORK/app/.next/standalone"
|
|
30
|
+
# Remove dev artifacts that sneak into standalone
|
|
31
|
+
rm -rf "$WORK/app/.next/standalone/.next/cache" \
|
|
32
|
+
"$WORK/app/.next/standalone/.next/dev" \
|
|
33
|
+
"$WORK/app/.next/standalone/.next/diagnostics" \
|
|
34
|
+
"$WORK/app/.next/standalone/.next/types" \
|
|
35
|
+
"$WORK/app/.next/standalone/__tests__" \
|
|
36
|
+
"$WORK/app/.next/standalone/.next/lock"
|
|
37
|
+
# Copy static assets at top level (isBundledRuntimeIntact checks app/.next/static/)
|
|
38
|
+
cp -r app/.next/static "$WORK/app/.next/static"
|
|
39
|
+
# Copy public assets
|
|
40
|
+
mkdir -p "$WORK/app"
|
|
41
|
+
cp -r app/public "$WORK/app/public"
|
|
42
|
+
|
|
43
|
+
# ── MCP server ──
|
|
44
|
+
echo " Copying MCP..."
|
|
45
|
+
mkdir -p "$WORK/mcp/dist"
|
|
46
|
+
cp mcp/dist/index.cjs "$WORK/mcp/dist/"
|
|
47
|
+
[ -f mcp/package.json ] && cp mcp/package.json "$WORK/mcp/"
|
|
48
|
+
|
|
49
|
+
# ── Metadata + auxiliary files ──
|
|
50
|
+
echo " Copying metadata..."
|
|
51
|
+
cp package.json "$WORK/"
|
|
52
|
+
[ -d bin ] && cp -r bin "$WORK/"
|
|
53
|
+
[ -d templates ] && cp -r templates "$WORK/"
|
|
54
|
+
[ -d skills ] && cp -r skills "$WORK/"
|
|
55
|
+
|
|
56
|
+
# ── Package (flat, no outer directory) ──
|
|
57
|
+
echo " Creating archive..."
|
|
58
|
+
tar czf "$ARCHIVE" -C "$WORK" .
|
|
59
|
+
|
|
60
|
+
# ── Self-validation ──
|
|
61
|
+
echo " Validating..."
|
|
62
|
+
VERIFY="/tmp/mindos-runtime-verify-$$"
|
|
63
|
+
rm -rf "$VERIFY" && mkdir -p "$VERIFY"
|
|
64
|
+
tar xzf "$ARCHIVE" -C "$VERIFY"
|
|
65
|
+
|
|
66
|
+
ERRORS=0
|
|
67
|
+
for f in \
|
|
68
|
+
"app/.next/standalone/server.js" \
|
|
69
|
+
"app/.next/standalone/node_modules" \
|
|
70
|
+
"app/.next/standalone/.next/server" \
|
|
71
|
+
"app/.next/static" \
|
|
72
|
+
"mcp/dist/index.cjs" \
|
|
73
|
+
"package.json"; do
|
|
74
|
+
if [ ! -e "$VERIFY/$f" ]; then
|
|
75
|
+
echo " ❌ MISSING: $f"
|
|
76
|
+
ERRORS=$((ERRORS + 1))
|
|
77
|
+
fi
|
|
78
|
+
done
|
|
79
|
+
|
|
80
|
+
# Verify version in package.json matches
|
|
81
|
+
PKG_VER=$(node -p "require('$VERIFY/package.json').version" 2>/dev/null || echo "")
|
|
82
|
+
if [ "$PKG_VER" != "$VERSION" ]; then
|
|
83
|
+
echo " ❌ Version mismatch: package.json=$PKG_VER, expected=$VERSION"
|
|
84
|
+
ERRORS=$((ERRORS + 1))
|
|
85
|
+
fi
|
|
86
|
+
|
|
87
|
+
rm -rf "$VERIFY" "$WORK"
|
|
88
|
+
|
|
89
|
+
if [ "$ERRORS" -gt 0 ]; then
|
|
90
|
+
echo "❌ Validation failed with $ERRORS error(s)"
|
|
91
|
+
exit 1
|
|
92
|
+
fi
|
|
93
|
+
|
|
94
|
+
# ── Output info ──
|
|
95
|
+
if command -v sha256sum >/dev/null 2>&1; then
|
|
96
|
+
SHA256=$(sha256sum "$ARCHIVE" | cut -d' ' -f1)
|
|
97
|
+
else
|
|
98
|
+
SHA256=$(shasum -a 256 "$ARCHIVE" | cut -d' ' -f1)
|
|
99
|
+
fi
|
|
100
|
+
|
|
101
|
+
if command -v numfmt >/dev/null 2>&1; then
|
|
102
|
+
SIZE_HUMAN=$(stat -c%s "$ARCHIVE" | numfmt --to=iec)
|
|
103
|
+
SIZE_BYTES=$(stat -c%s "$ARCHIVE")
|
|
104
|
+
elif command -v stat >/dev/null 2>&1; then
|
|
105
|
+
SIZE_BYTES=$(stat -f%z "$ARCHIVE" 2>/dev/null || stat -c%s "$ARCHIVE" 2>/dev/null)
|
|
106
|
+
SIZE_HUMAN="${SIZE_BYTES} bytes"
|
|
107
|
+
fi
|
|
108
|
+
|
|
109
|
+
echo ""
|
|
110
|
+
echo "✅ mindos-runtime-${VERSION}.tar.gz"
|
|
111
|
+
echo " Size: ${SIZE_HUMAN} (${SIZE_BYTES} bytes)"
|
|
112
|
+
echo " SHA256: ${SHA256}"
|
|
113
|
+
echo " Path: ${ARCHIVE}"
|
package/skills/mindos/SKILL.md
CHANGED
|
@@ -7,11 +7,15 @@ description: >
|
|
|
7
7
|
Use when the task targets files inside the user's MindOS KB (mindRoot).
|
|
8
8
|
NOT for editing app source, project docs, or paths outside the KB.
|
|
9
9
|
Core concepts: Space, Instruction (INSTRUCTION.md), Skill (SKILL.md); notes can embody both.
|
|
10
|
+
Trigger when user asks to: save or record a note, search their knowledge base, update or edit
|
|
11
|
+
a file, organize notes, run a workflow or SOP, capture decisions from a session, append rows
|
|
12
|
+
to a table or CSV, hand off context to another agent — or says "帮我记下来" / "搜一下我的笔记" /
|
|
13
|
+
"更新知识库" / "整理文件" / "执行工作流".
|
|
10
14
|
---
|
|
11
15
|
|
|
12
16
|
# MindOS Skill
|
|
13
17
|
|
|
14
|
-
<!-- version: 1.3.
|
|
18
|
+
<!-- version: 1.3.2 -->
|
|
15
19
|
|
|
16
20
|
**Before every task, internalize these 5 rules:**
|
|
17
21
|
|
|
@@ -83,8 +87,7 @@ User request
|
|
|
83
87
|
└─ ASK for clarification. Propose 2-3 specific options based on KB state. Do NOT start editing.
|
|
84
88
|
```
|
|
85
89
|
|
|
86
|
-
**For any write/SOP/structural path above →
|
|
87
|
-
It covers: startup protocol, write tool selection, and step-by-step execution details for each path.
|
|
90
|
+
**For any write/SOP/structural path above → the write supplement is already loaded in context (see `## Write & Workflow Supplement` section below or in the next context block).**
|
|
88
91
|
|
|
89
92
|
---
|
|
90
93
|
|
|
@@ -97,7 +100,7 @@ It covers: startup protocol, write tool selection, and step-by-step execution de
|
|
|
97
100
|
| Find files | `mindos_search_notes` (2-4 parallel keyword variants) | Single-keyword search |
|
|
98
101
|
| Read content | `mindos_read_file` or `mindos_read_lines` (for large files) | Reading entire large file when you need 10 lines |
|
|
99
102
|
|
|
100
|
-
Write, structural, and history tools →
|
|
103
|
+
Write, structural, and history tools → see Write & Workflow Supplement (loaded below or in next context block).
|
|
101
104
|
|
|
102
105
|
### Fallbacks
|
|
103
106
|
|
|
@@ -112,15 +115,27 @@ Write, structural, and history tools → [references/write-supplement.md](./refe
|
|
|
112
115
|
|---------|------|-----------|
|
|
113
116
|
| **Read-only Q&A** | Lookup / summarize / quote | Tree reasoning → search → read → answer with citations → state gaps |
|
|
114
117
|
|
|
115
|
-
For write, SOP, structural, and handoff patterns →
|
|
118
|
+
For write, SOP, structural, and handoff patterns → see Write & Workflow Supplement (loaded below or in next context block).
|
|
116
119
|
|
|
117
120
|
---
|
|
118
121
|
|
|
119
|
-
##
|
|
122
|
+
## Judgment heuristics
|
|
120
123
|
|
|
121
|
-
|
|
122
|
-
-
|
|
123
|
-
-
|
|
124
|
+
**Save intent — read vs. write boundary**
|
|
125
|
+
- "帮我记下来" / "记录一下" / "保存这个" = write
|
|
126
|
+
- "搜一下有没有关于 X 的笔记" / "总结上周的工作" = read-only
|
|
127
|
+
- Ambiguous boundary ("整理一下这些内容") → ask first: display only, or write back to KB?
|
|
128
|
+
|
|
129
|
+
**File location uncertainty**
|
|
130
|
+
- 扫目录树 5 秒内定不下来 → don't invent a new directory; use the nearest semantically-fit existing one and inform the user
|
|
131
|
+
- User says "just put it somewhere" → place in inbox or top-level general directory, propose classification after (triggers Structure classification hook)
|
|
132
|
+
|
|
133
|
+
**Scope creep signals**
|
|
134
|
+
- Single input routes to >5 files → pause, confirm scope; users rarely intend bulk rewrites
|
|
135
|
+
- "Update all of these" + content spans multiple topics → split into batches, confirm each, don't execute all at once
|
|
136
|
+
|
|
137
|
+
**Citation discipline**
|
|
138
|
+
- KB-cited facts must include the file path so the user can verify
|
|
124
139
|
|
|
125
140
|
---
|
|
126
141
|
|
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
# MindOS Write & Workflow Supplement
|
|
2
2
|
|
|
3
|
-
<!--
|
|
4
|
-
<!--
|
|
3
|
+
<!-- Always injected alongside SKILL.md by route.ts for every request. -->
|
|
4
|
+
<!-- For read-only lookups, Q&A, and summarization this context is also available. -->
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## NEVER do (write-path specific)
|
|
9
|
+
|
|
10
|
+
- **NEVER use `mindos_write_file` as your first move.** Writing without reading first means replacing content you haven't seen. Even when you "know" the file's content, read it — your assumption may be stale.
|
|
11
|
+
- **NEVER create a Mind Space with `mindos_create_file`.** That only creates a plain directory — no README, no INSTRUCTION scaffolding. A Space missing its governance files is broken from birth. Use `mindos_create_space`.
|
|
12
|
+
- **NEVER write immediately after bootstrap.** Bootstrap gives you the top-level structure; it does NOT tell you whether a local `INSTRUCTION.md` near your target overrides the root rules. Read local governance before touching anything.
|
|
13
|
+
- **NEVER execute multi-file writes without first showing the routing table.** Even when destinations seem obvious — the user's mental model diverges from yours more often than intuition suggests. Show the table, wait for confirmation.
|
|
14
|
+
- **NEVER use `mindos_append_to_file` on structured files.** Blind appending ignores section order. If the file has headings, required fields, or schema constraints, use `insert_after_heading` or `update_section` to land content in the right place.
|
|
5
15
|
|
|
6
16
|
---
|
|
7
17
|
|
|
@@ -29,7 +39,11 @@
|
|
|
29
39
|
Run this before executing any write path:
|
|
30
40
|
|
|
31
41
|
1. **Bootstrap** — `mindos_bootstrap` (preferred) or manually read root `INSTRUCTION.md` + `README.md`.
|
|
32
|
-
2. **Discover structure**
|
|
42
|
+
2. **Discover structure**
|
|
43
|
+
- Only need top-level zones? → `mindos_list_spaces` (lighter; includes README blurbs)
|
|
44
|
+
- Need a specific file path? → confirm zone with `mindos_list_spaces`, then `mindos_list_files` inside that zone
|
|
45
|
+
- Know keywords? → fire 2-4 parallel `mindos_search_notes` covering CN/EN variants and abbreviations
|
|
46
|
+
- **Never assume top-level directory names** — the user's KB may use Chinese, pinyin, or unconventional hierarchy
|
|
33
47
|
3. **Load local governance** — Read `README.md` / `INSTRUCTION.md` near the target path. Local conventions override global assumptions.
|
|
34
48
|
4. **Match existing SOP** — If the task is procedural: scan tree for a procedure-holding directory (names like `Workflows/`, `SOPs/`, `流程/` are hints — don't assume). Search by keywords + `<!-- keywords: -->` metadata. If found, read and follow. If execution diverges, propose updating the SOP after.
|
|
35
49
|
5. **Pre-write checks** — Confirm: target path exists or should be created; location is under a subdirectory (not root); current content is read; edit scope is minimal; backlink impact assessed for path changes.
|
|
@@ -68,10 +82,38 @@ Confirm scope (which session? which topics?) → extract: decisions made, ration
|
|
|
68
82
|
|
|
69
83
|
### SOP execution
|
|
70
84
|
Read the full SOP before starting (never skim) → execute step by step, checking off as you go → if a step is stale or diverges from current KB state, note it → after completion, propose a targeted SOP update for any diverged steps.
|
|
71
|
-
**Creating a new SOP** → first read [sop-template.md](./sop-template.md) for required structure.
|
|
85
|
+
**Creating a new SOP** → first read [references/sop-template.md](./references/sop-template.md) for required structure.
|
|
72
86
|
|
|
73
87
|
### Structural changes
|
|
74
88
|
`get_backlinks` on the path being changed → present impact report (N files will need updates) → wait for confirmation → execute rename/move/delete → update every backlink → sync affected `README.md` files.
|
|
75
89
|
|
|
76
90
|
### Handoff / cross-agent continuation
|
|
77
91
|
Read the handoff document or last agent's progress notes → identify: current state, decisions already made, open items → continue from that state without re-running discovery already done → write progress back to the same handoff doc when done.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Post-task hooks
|
|
96
|
+
|
|
97
|
+
After **write tasks** (not simple single-file edits or read-only), scan this table. If a condition matches, make a one-line proposal. At most 1 proposal; pick highest priority. Check `user-skill-rules.md` suppression section first. Skip all if user asked for quiet mode.
|
|
98
|
+
|
|
99
|
+
| Hook | Priority | Condition |
|
|
100
|
+
|------|----------|-----------|
|
|
101
|
+
| Experience capture | high | Debugging, troubleshooting, or took multiple rounds |
|
|
102
|
+
| Consistency sync | high | Edited file A which has backlinks (check `get_backlinks`) |
|
|
103
|
+
| SOP drift | medium | Followed an SOP but execution diverged from its steps |
|
|
104
|
+
| Linked update | medium | Changed a CSV/TODO status and related docs exist |
|
|
105
|
+
| Structure classification | medium | Created a file in a temporary location or inbox |
|
|
106
|
+
| Pattern extraction | low | 3+ structurally similar operations this session |
|
|
107
|
+
| Conversation retrospective | low | Session >10 turns with decisions or trade-offs |
|
|
108
|
+
|
|
109
|
+
If a hook triggers → read [references/post-task-hooks.md](./references/post-task-hooks.md) for the propose format and any user-defined hooks. If nothing matches, end quietly — do not read the file.
|
|
110
|
+
|
|
111
|
+
## Preference capture
|
|
112
|
+
|
|
113
|
+
When the user expresses a standing preference ("don't do X", "always put Y in Z"), read [references/preference-capture.md](./references/preference-capture.md) and follow the confirm-then-write flow to `user-skill-rules.md`.
|
|
114
|
+
**Do NOT read** preference-capture unless the user actually expressed a preference to persist.
|
|
115
|
+
|
|
116
|
+
## SOP authoring
|
|
117
|
+
|
|
118
|
+
When creating or rewriting a workflow SOP, **MANDATORY — read [references/sop-template.md](./references/sop-template.md)** for required structure (prerequisites, steps with branches, exit conditions, pitfall log).
|
|
119
|
+
**Do NOT read** sop-template for SOP execution (only for SOP creation/editing).
|
|
@@ -6,11 +6,15 @@ description: >
|
|
|
6
6
|
update notes, search knowledge base, organize, SOP, retrospective, CSV, handoff, route notes, distill experience.
|
|
7
7
|
仅 mindRoot 知识库内任务。不用于:改代码仓库/项目文档/KB 外路径。
|
|
8
8
|
核心概念:空间、指令(INSTRUCTION.md)、技能(SKILL.md);笔记可承载指令与技能。
|
|
9
|
+
当用户说"帮我记下来"、"搜一下我的笔记"、"更新知识库"、"整理文件"、"执行工作流"、
|
|
10
|
+
"记录这次会议的决策"、"追加到表格"、"交接给下一个 Agent" 时触发。
|
|
11
|
+
也适用于:save/record a note, search KB, update/edit files, run SOP, capture decisions,
|
|
12
|
+
append CSV rows, cross-agent handoff — 所有 mindRoot 知识库内的读写操作。
|
|
9
13
|
---
|
|
10
14
|
|
|
11
15
|
# MindOS Skill
|
|
12
16
|
|
|
13
|
-
<!-- version: 1.3.
|
|
17
|
+
<!-- version: 1.3.2 -->
|
|
14
18
|
|
|
15
19
|
**每次任务前,内化这 5 条规则:**
|
|
16
20
|
|
|
@@ -82,8 +86,7 @@ description: >
|
|
|
82
86
|
└─ 先问清楚。基于 KB 状态提出 2-3 个具体选项。不要开始编辑。
|
|
83
87
|
```
|
|
84
88
|
|
|
85
|
-
**以上任何写入 / SOP / 结构路径 →
|
|
86
|
-
包含:启动协议、写工具选型、各路径详细执行步骤。
|
|
89
|
+
**以上任何写入 / SOP / 结构路径 → 写入补充已加载到上下文(见下方或下一个上下文块中的 `## 写入与工作流补充` 章节)。**
|
|
87
90
|
|
|
88
91
|
---
|
|
89
92
|
|
|
@@ -96,7 +99,7 @@ description: >
|
|
|
96
99
|
| 找文件 | `mindos_search_notes`(2-4 条并行关键词变体)| 单关键词搜索 |
|
|
97
100
|
| 读内容 | `mindos_read_file` 或 `mindos_read_lines`(大文件) | 只需 10 行却读整文件 |
|
|
98
101
|
|
|
99
|
-
写入、结构变更、历史工具 →
|
|
102
|
+
写入、结构变更、历史工具 → 见写入与工作流补充(已加载到下方或下一个上下文块)。
|
|
100
103
|
|
|
101
104
|
### 回退
|
|
102
105
|
|
|
@@ -111,15 +114,27 @@ description: >
|
|
|
111
114
|
|------|----------|----------|
|
|
112
115
|
| **只读问答** | 查找 / 总结 / 引用 | 目录树推断 → 搜索 → 读取 → 标注来源 → 明确说信息缺口 |
|
|
113
116
|
|
|
114
|
-
写入模式详细执行步骤 →
|
|
117
|
+
写入模式详细执行步骤 → 见写入与工作流补充(已加载到下方或下一个上下文块)。
|
|
115
118
|
|
|
116
119
|
---
|
|
117
120
|
|
|
118
|
-
##
|
|
121
|
+
## 判断启发式规则
|
|
119
122
|
|
|
120
|
-
|
|
121
|
-
-
|
|
122
|
-
-
|
|
123
|
+
**保存意图 — 读写边界识别**
|
|
124
|
+
- "帮我记下来" / "记录一下" / "保存这个" = 写入
|
|
125
|
+
- "搜一下有没有关于 X 的笔记" / "总结上周的工作" = 只读
|
|
126
|
+
- 模糊边界("整理一下这些内容")→ 先问:是读取展示,还是写回 KB?
|
|
127
|
+
|
|
128
|
+
**文件位置不确定时**
|
|
129
|
+
- 扫目录树 5 秒内定不下来 → 不要自创新目录;放语义最近的已有目录,告知用户
|
|
130
|
+
- 用户说"随便放个地方" → 放 inbox 或最顶层通用目录,任务后提议归类(触发 Structure classification hook)
|
|
131
|
+
|
|
132
|
+
**范围蔓延信号**
|
|
133
|
+
- 单条输入导致路由表 > 5 个文件 → 暂停,先确认范围;用户鲜少意图批量重写
|
|
134
|
+
- "把这些都更新一下" + 内容跨越多个主题 → 拆成批次确认,不一次性执行
|
|
135
|
+
|
|
136
|
+
**引用纪律**
|
|
137
|
+
- KB 中引用的事实必须附带文件路径,便于用户核查
|
|
123
138
|
|
|
124
139
|
---
|
|
125
140
|
|
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
# MindOS 写入与工作流补充
|
|
2
2
|
|
|
3
|
-
<!--
|
|
4
|
-
<!--
|
|
3
|
+
<!-- 随 SKILL.md 一起由 route.ts 注入到每次请求的上下文中。 -->
|
|
4
|
+
<!-- 只读查阅、问答、总结时此上下文同样可用。 -->
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 绝对不要(写路径专属)
|
|
9
|
+
|
|
10
|
+
- **绝不把 `mindos_write_file` 当第一步。** 没读过当前内容就覆写 = 在黑暗中操作。哪怕你"应该知道"文件里有什么,也先读——你的假设可能已过时。
|
|
11
|
+
- **绝不用 `mindos_create_file` 创建心智空间。** 这只会建一个普通目录,缺少 README + INSTRUCTION 脚手架。缺少治理文件的空间从诞生起就是残缺的。必须用 `mindos_create_space`。
|
|
12
|
+
- **绝不 bootstrap 后直接写入。** Bootstrap 告诉你顶层结构,不代表目标路径附近的局部 `INSTRUCTION.md` 没有覆盖全局规则。写入前必须读目标路径附近的治理文件。
|
|
13
|
+
- **绝不在没有展示路由表的情况下执行多文件写入。** 即使目标看起来显而易见——用户的心智模型和你的判断不一致的概率远高于你的直觉。展示路由表,等确认。
|
|
14
|
+
- **绝不把 `mindos_append_to_file` 用于有结构要求的文件。** 盲目追加会忽略章节顺序。如果文件有标题层级、必填字段或 schema 约束,用 `insert_after_heading` 或 `update_section` 把内容落在正确位置。
|
|
5
15
|
|
|
6
16
|
---
|
|
7
17
|
|
|
@@ -9,7 +19,7 @@
|
|
|
9
19
|
|
|
10
20
|
| 意图 | 推荐工具 | 避免 |
|
|
11
21
|
|------|----------|------|
|
|
12
|
-
| 小范围文字修改 | `mindos_update_section` / `
|
|
22
|
+
| 小范围文字修改 | `mindos_update_section` / `mindos_update_lines` / `mindos_insert_after_heading` | 小修改用 `mindos_write_file` |
|
|
13
23
|
| 追加到末尾 | `mindos_append_to_file` | 为了加一行重写整文件 |
|
|
14
24
|
| 整文件替换 | `mindos_write_file` | 用它做章节级编辑 |
|
|
15
25
|
| 新建文件 | `mindos_create_file` | 自动创建父目录,但不会生成空间脚手架文件 |
|
|
@@ -29,7 +39,11 @@
|
|
|
29
39
|
所有写入任务执行前运行:
|
|
30
40
|
|
|
31
41
|
1. **Bootstrap** — `mindos_bootstrap`(首选),或手动读根 `INSTRUCTION.md` + `README.md`。
|
|
32
|
-
2. **发现结构**
|
|
42
|
+
2. **发现结构**
|
|
43
|
+
- 只需确认顶层分区 → `mindos_list_spaces`(更轻量,含 README 摘要)
|
|
44
|
+
- 需要找具体文件路径 → 先用 `mindos_list_spaces` 确认目标分区,再在该分区下 `mindos_list_files`
|
|
45
|
+
- 已知关键词 → 并行 2-4 条 `mindos_search_notes`,覆盖中英文和缩写变体
|
|
46
|
+
- **绝不假设顶层目录名**——用户可能用中文、拼音或自定义层级
|
|
33
47
|
3. **加载局部治理** — 读取目标路径附近的 `README.md` / `INSTRUCTION.md`。局部约定覆盖全局假设。
|
|
34
48
|
4. **匹配已有 SOP** — 任务偏流程时:从树中识别存放流程的目录(`Workflows/`、`SOPs/`、`流程/` 等仅为常见名,不假设一定存在)。用关键词 + `<!-- keywords: -->` 元数据搜索。找到则读取并执行;偏差则任务后提议更新。
|
|
35
49
|
5. **写前检查** — 确认:路径存在或应创建;位置在子目录下(非根);现有内容已读;修改范围最小;路径变更的反链影响已评估。
|
|
@@ -68,10 +82,38 @@
|
|
|
68
82
|
|
|
69
83
|
### SOP 执行
|
|
70
84
|
开始前完整读 SOP(不要略读)→ 逐步执行,完成一步确认一步 → 遇到过时或与当前 KB 状态不符的步骤,记录下来 → 完成后,针对偏差步骤提议定向 SOP 更新。
|
|
71
|
-
**创建新 SOP** → 先读 [sop-template.md](./sop-template.md) 了解必需结构。
|
|
85
|
+
**创建新 SOP** → 先读 [references/sop-template.md](./references/sop-template.md) 了解必需结构。
|
|
72
86
|
|
|
73
87
|
### 结构变更
|
|
74
88
|
对要变更的路径执行 `get_backlinks` → 展示影响报告(N 个文件需要更新)→ 等确认 → 执行重命名/移动/删除 → 更新每一条反链 → 同步受影响的 `README.md`。
|
|
75
89
|
|
|
76
90
|
### 交接 / 跨 Agent 接力
|
|
77
91
|
读交接文档或上一个 Agent 的进度记录 → 识别:当前状态、已做决策、待处理事项 → 从该状态直接接续,不重复已完成的探索 → 完成后将进度回写到同一份交接文档。
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## 任务后 Hooks
|
|
96
|
+
|
|
97
|
+
**写入任务**完成后(简单单文件修改或只读查阅跳过),扫描下表。命中则发起一句话提议,最多 1 条,选优先级最高项。先查 `user-skill-rules.md` 的抑制区;用户要求安静模式时全部跳过。
|
|
98
|
+
|
|
99
|
+
| Hook | 优先级 | 触发条件 |
|
|
100
|
+
|------|--------|---------|
|
|
101
|
+
| 经验沉淀 | 高 | 调试、排错、踩坑,或多轮才解决 |
|
|
102
|
+
| 一致性同步 | 高 | 编辑了有反链的文件(查 `get_backlinks`) |
|
|
103
|
+
| SOP 偏差 | 中 | 按 SOP 执行但实际步骤与文档不符 |
|
|
104
|
+
| 联动更新 | 中 | 改了 CSV/TODO 状态且存在关联文档 |
|
|
105
|
+
| 结构归类 | 中 | 在临时目录或收件箱新建了文件 |
|
|
106
|
+
| 模式提炼 | 低 | 本会话 3+ 次结构相似操作 |
|
|
107
|
+
| 对话复盘 | 低 | 会话 >10 轮且涉及决策或权衡 |
|
|
108
|
+
|
|
109
|
+
有 hook 命中 → 读 [references/post-task-hooks.md](./references/post-task-hooks.md) 获取提议措辞和用户自定义 hooks。都不命中则安静结束,不读此文件。
|
|
110
|
+
|
|
111
|
+
## 偏好捕获
|
|
112
|
+
|
|
113
|
+
用户表达要长期记住的偏好(「以后不要…」「这个该放在…」)时,读 [references/preference-capture.md](./references/preference-capture.md) 并按确认后写入流程存入 `user-skill-rules.md`。
|
|
114
|
+
**不要读** preference-capture 除非用户真的表达了要持久化的偏好。
|
|
115
|
+
|
|
116
|
+
## SOP 编写
|
|
117
|
+
|
|
118
|
+
创建或改写工作流 SOP 时,**必须 — 读 [references/sop-template.md](./references/sop-template.md)**(前置条件、分支步骤、退出条件、踩坑记录)。
|
|
119
|
+
**不要读** sop-template 用于 SOP 执行(仅用于 SOP 创建/编辑)。
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1227],{4235:(e,t,r)=>{"use strict";r.d(t,{B1:()=>i,X8:()=>l,dV:()=>d,oR:()=>u});let s=[],a=[],o=0;function n(){for(let e of a)e()}function i(e){return a=[...a,e],()=>{a=a.filter(t=>t!==e)}}function d(){return s}function l(e){s=s.filter(t=>t.id!==e),n()}function c(e){let t=`toast-${++o}`,r={id:t,message:e.message,type:e.type??"info",duration:e.duration??2e3,action:e.action};s=[...s,r].slice(-3),n(),r.duration>0&&setTimeout(()=>l(t),r.duration)}function u(e,t){c({message:e,...t})}u.success=(e,t)=>c({message:e,type:"success",duration:t}),u.undo=(e,t,r)=>c({message:e,type:"info",duration:r?.duration??5e3,action:{label:r?.label??"Undo",onClick:t}}),u.error=(e,t)=>c({message:e,type:"error",duration:t}),u.copy=(e="Copied")=>c({message:e,type:"success",duration:1500})},6296:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});let s=(0,r(90425).A)("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]])},9199:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});let s=(0,r(90425).A)("rotate-ccw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]])},9339:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var s={callServer:function(){return o.callServer},createServerReference:function(){return i.createServerReference},findSourceMapURL:function(){return n.findSourceMapURL}};for(var a in s)Object.defineProperty(t,a,{enumerable:!0,get:s[a]});let o=r(77304),n=r(4060),i=r(77197)},33078:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});let s=(0,r(90425).A)("table",[["path",{d:"M12 3v18",key:"108xh3"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}],["path",{d:"M3 15h18",key:"5xshup"}]])},33210:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});let s=(0,r(90425).A)("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]])},38798:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});let s=(0,r(90425).A)("folder",[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]])},39498:(e,t,r)=>{"use strict";r.d(t,{BK:()=>y,DO:()=>c,KF:()=>d,Mv:()=>m,TM:()=>v,ZC:()=>g,lx:()=>p,md:()=>l,pp:()=>x,rA:()=>u});var s=r(95155),a=r(33210),o=r(6296),n=r(51914),i=r(12115);function d({active:e,label:t,onClick:r}){return(0,s.jsx)("button",{type:"button",onClick:r,"aria-pressed":e,className:`relative px-2.5 min-h-[28px] rounded text-xs cursor-pointer transition-all duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring ${e?"bg-[var(--amber-dim)] text-[var(--amber-text)] font-medium shadow-[0_1px_2px_rgba(200,135,58,0.08)]":"text-muted-foreground hover:text-foreground hover:bg-muted/60"}`,children:t})}function l({tone:e,label:t,count:r}){return(0,s.jsxs)("span",{className:"inline-flex items-center gap-1.5 text-muted-foreground",children:[(0,s.jsx)("span",{className:`w-2 h-2 rounded-full ${"ok"===e?"bg-[var(--success)]":"warn"===e?"bg-[var(--amber)]":"bg-muted-foreground/60"}`,"aria-hidden":"true"}),(0,s.jsx)("span",{className:"text-xs",children:t}),(0,s.jsx)("span",{className:`tabular-nums font-medium ${"ok"===e?"text-foreground":"warn"===e?"text-[var(--amber)]":"text-muted-foreground"}`,children:r})]})}function c({value:e,onChange:t,placeholder:r,ariaLabel:o,icon:n}){return(0,s.jsxs)("label",{className:"relative block group/search",children:[(0,s.jsx)(n,{size:14,className:"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground/60 group-focus-within/search:text-[var(--amber)] pointer-events-none transition-colors duration-150"}),(0,s.jsx)("input",{value:e,onChange:e=>t(e.target.value),placeholder:r,"aria-label":o,className:"w-full h-9 rounded-lg border border-border bg-background pl-9 pr-8 text-sm text-foreground placeholder:text-muted-foreground/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--amber)]/30 focus-visible:border-[var(--amber)]/40 transition-all duration-150"}),e.length>0&&(0,s.jsx)("button",{type:"button",onClick:()=>t(""),"aria-label":"Clear search",className:"absolute right-2.5 top-1/2 -translate-y-1/2 p-0.5 rounded-full text-muted-foreground hover:text-foreground hover:bg-muted cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring transition-colors duration-150",children:(0,s.jsx)(a.A,{size:13})})]})}function u({onClick:e,disabled:t,busy:r,label:a,busyLabel:n,variant:i="default"}){return(0,s.jsxs)("button",{type:"button",onClick:e,disabled:t,"aria-busy":r,className:`inline-flex items-center justify-center gap-1.5 text-2xs min-h-[28px] px-2.5 rounded-md cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50 disabled:cursor-not-allowed transition-colors duration-150 ${{default:"border border-border hover:bg-muted",primary:"bg-[var(--amber)] text-background hover:bg-[var(--amber)]/90"}[i]}`,children:[r&&(0,s.jsx)(o.A,{size:12,className:"animate-spin","aria-hidden":"true"}),r?n??a:a]})}function m({message:e}){return e?(0,s.jsx)("span",{role:"status","aria-live":"polite",className:"text-2xs text-muted-foreground animate-in fade-in duration-200",children:e}):null}function x({message:e,icon:t,className:r}){return(0,s.jsxs)("div",{className:`rounded-xl border border-dashed border-border/60 bg-gradient-to-b from-card/80 to-card/40 p-10 text-center ${r??""}`,children:[t&&(0,s.jsx)("div",{className:"w-10 h-10 rounded-full bg-muted/50 flex items-center justify-center mx-auto mb-3 text-muted-foreground/40",children:t}),(0,s.jsx)("p",{className:"text-sm text-muted-foreground/70 leading-relaxed max-w-xs mx-auto",children:e})]})}let b=[["bg-rose-100/70 dark:bg-rose-900/30","border-rose-300/50 dark:border-rose-700/40","text-rose-600/80 dark:text-rose-400/80"],["bg-violet-100/70 dark:bg-violet-900/30","border-violet-300/50 dark:border-violet-700/40","text-violet-600/80 dark:text-violet-400/80"],["bg-emerald-100/70 dark:bg-emerald-900/30","border-emerald-300/50 dark:border-emerald-700/40","text-emerald-600/80 dark:text-emerald-400/80"],["bg-sky-100/70 dark:bg-sky-900/30","border-sky-300/50 dark:border-sky-700/40","text-sky-600/80 dark:text-sky-400/80"],["bg-amber-100/70 dark:bg-amber-900/30","border-amber-300/50 dark:border-amber-700/40","text-amber-700/80 dark:text-amber-400/80"],["bg-teal-100/70 dark:bg-teal-900/30","border-teal-300/50 dark:border-teal-700/40","text-teal-600/80 dark:text-teal-400/80"],["bg-pink-100/70 dark:bg-pink-900/30","border-pink-300/50 dark:border-pink-700/40","text-pink-600/80 dark:text-pink-400/80"],["bg-indigo-100/70 dark:bg-indigo-900/30","border-indigo-300/50 dark:border-indigo-700/40","text-indigo-600/80 dark:text-indigo-400/80"],["bg-lime-100/70 dark:bg-lime-900/30","border-lime-300/50 dark:border-lime-700/40","text-lime-700/80 dark:text-lime-400/80"],["bg-fuchsia-100/70 dark:bg-fuchsia-900/30","border-fuchsia-300/50 dark:border-fuchsia-700/40","text-fuchsia-600/80 dark:text-fuchsia-400/80"],["bg-cyan-100/70 dark:bg-cyan-900/30","border-cyan-300/50 dark:border-cyan-700/40","text-cyan-600/80 dark:text-cyan-400/80"],["bg-orange-100/70 dark:bg-orange-900/30","border-orange-300/50 dark:border-orange-700/40","text-orange-600/80 dark:text-orange-400/80"]];function f(e){let t=0;for(let r=0;r<e.length;r++)t=31*t+e.charCodeAt(r)|0;return Math.abs(t)}function h(e){let t=e.split(/[\s\-_]+/).filter(Boolean);return t.length>=2?(t[0][0]+t[1][0]).toUpperCase():e.slice(0,2).toUpperCase()}function p({name:e,status:t,size:r="md",onRemove:o,href:n}){let[i,d,l]=b[f(e)%b.length],c="connected"===t?"bg-[var(--success)]":"detected"===t?"bg-[var(--amber)]":"bg-muted-foreground";return(0,s.jsxs)("div",{className:"relative group/avatar",title:e,children:[(0,s.jsx)("div",{className:`${"sm"===r?"w-7 h-7 text-[10px]":"w-9 h-9 text-xs"} ${i} ${d} ${l} border rounded-full flex items-center justify-center font-semibold select-none`,children:h(e)}),t&&(0,s.jsx)("span",{className:`absolute -bottom-0.5 -right-0.5 w-2.5 h-2.5 rounded-full border-2 border-card ${c}`,"aria-hidden":"true"}),o&&(0,s.jsx)("button",{type:"button",onClick:e=>{e.preventDefault(),e.stopPropagation(),o()},className:"absolute -top-1 -right-1 w-4 h-4 rounded-full bg-destructive text-white flex items-center justify-center opacity-0 scale-75 group-hover/avatar:opacity-100 group-hover/avatar:scale-100 transition-all duration-150 cursor-pointer focus-visible:opacity-100 focus-visible:scale-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring","aria-label":`Remove ${e}`,children:(0,s.jsx)(a.A,{size:9})})]})}function g({onClick:e,label:t,size:r="md"}){return(0,s.jsx)("button",{type:"button",onClick:e,title:t,"aria-label":t,className:`${"sm"===r?"w-7 h-7":"w-9 h-9"} rounded-full border-2 border-dashed border-border flex items-center justify-center text-muted-foreground hover:text-foreground hover:border-foreground/30 hover:bg-muted cursor-pointer transition-all duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,children:(0,s.jsx)(n.A,{size:14})})}function v({open:e,title:t,message:r,confirmLabel:a,cancelLabel:o,onConfirm:n,onCancel:d,variant:l="destructive"}){let c=(0,i.useRef)(null);return((0,i.useEffect)(()=>{e&&c.current?.focus()},[e]),(0,i.useEffect)(()=>{if(e)return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t);function t(e){"Escape"===e.key&&d()}},[e,d]),e)?(0,s.jsxs)("div",{className:"fixed inset-0 z-50 flex items-center justify-center",role:"alertdialog","aria-modal":"true","aria-label":t,children:[(0,s.jsx)("div",{className:"absolute inset-0 overlay-backdrop",onClick:d,"aria-hidden":"true"}),(0,s.jsxs)("div",{className:"relative bg-card border border-border rounded-lg shadow-xl p-5 max-w-sm w-full mx-4 animate-in fade-in zoom-in-95 duration-200",children:[(0,s.jsx)("h3",{className:"text-sm font-medium text-foreground mb-1.5",children:t}),(0,s.jsx)("p",{className:"text-sm text-muted-foreground mb-4 leading-relaxed",children:r}),(0,s.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,s.jsx)("button",{ref:c,type:"button",onClick:d,className:"px-3 min-h-[32px] text-sm rounded-md border border-border hover:bg-muted cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring transition-colors duration-150",children:o}),(0,s.jsx)("button",{type:"button",onClick:n,className:`px-3 min-h-[32px] text-sm rounded-md cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring transition-colors duration-150 ${"destructive"===l?"bg-destructive text-destructive-foreground hover:bg-destructive/90":"bg-[var(--amber)] text-background hover:bg-[var(--amber)]/90"}`,children:a})]})]})]}):null}function y({open:e,agents:t,emptyLabel:r,onSelect:a,onClose:o}){let n=(0,i.useRef)(null);return((0,i.useEffect)(()=>{if(e)return document.addEventListener("mousedown",t),()=>document.removeEventListener("mousedown",t);function t(e){n.current&&!n.current.contains(e.target)&&o()}},[e,o]),(0,i.useEffect)(()=>{if(e)return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t);function t(e){"Escape"===e.key&&o()}},[e,o]),e)?(0,s.jsx)("div",{ref:n,className:"absolute right-0 top-full mt-1 z-30 w-56 rounded-lg border border-border bg-card shadow-lg animate-in fade-in slide-in-from-top-1 duration-150",children:0===t.length?(0,s.jsx)("p",{className:"px-3 py-2.5 text-xs text-muted-foreground",children:r}):(0,s.jsx)("div",{className:"py-1 max-h-48 overflow-y-auto",children:t.map(e=>(0,s.jsxs)("button",{type:"button",onClick:()=>a(e.key),className:"w-full text-left px-3 py-2 text-xs text-foreground hover:bg-muted cursor-pointer flex items-center gap-2 transition-colors duration-100",children:[(()=>{let[t,r,a]=b[f(e.name)%b.length];return(0,s.jsx)("div",{className:`w-6 h-6 rounded-full border ${t} ${r} ${a} flex items-center justify-center text-[9px] font-semibold shrink-0`,children:h(e.name)})})(),e.name]},e.key))})}):null}},41585:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});let s=(0,r(90425).A)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]])},48216:(e,t,r)=>{"use strict";r.d(t,{default:()=>k});var s=r(95155),a=r(12115),o=r(68459),n=r(38798),i=r(33078),d=r(48368),l=r(41585),c=r(6296),u=r(9199),m=r(33210),x=r(73321),b=r(61263),f=r(9339);let h=(0,f.createServerReference)("60aaa5e19f023dbad020d2477f347335b9913708f6",f.callServer,void 0,f.findSourceMapURL,"restoreFromTrashAction"),p=(0,f.createServerReference)("404a84926866c386bd7e368071f918d926f47f546e",f.callServer,void 0,f.findSourceMapURL,"permanentlyDeleteAction"),g=(0,f.createServerReference)("00d4b54b47d213c21c415c3736275c7315cedf872b",f.callServer,void 0,f.findSourceMapURL,"emptyTrashAction");var v=r(39498),y=r(4235);function k({initialItems:e}){let{t}=(0,b.Y)(),r=(0,x.useRouter)(),[f,k]=(0,a.useState)(e),[j,N]=(0,a.useTransition)(),[w,A]=(0,a.useState)(!1),[C,M]=(0,a.useState)(null),[R,z]=(0,a.useState)(null),[$,S]=(0,a.useState)(null),L=(0,a.useCallback)(async e=>{S(e.id);try{let s=await h(e.id,"restore");s.success?(k(t=>t.filter(t=>t.id!==e.id)),y.oR.success(t.trash.restored),r.refresh()):s.conflict?z(e):y.oR.error(s.error??"Failed to restore")}finally{S(null)}},[t,r]),E=(0,a.useCallback)(async e=>{if(!R)return;let s=await h(R.id,e);s.success?(k(e=>e.filter(e=>e.id!==R.id)),y.oR.success(t.trash.restored),z(null),r.refresh()):y.oR.error(s.error??"Failed to restore")},[R,t,r]),P=(0,a.useCallback)(async()=>{if(!C)return;let e=await p(C.id);e.success?(k(e=>e.filter(e=>e.id!==C.id)),y.oR.success(t.trash.deleted)):y.oR.error(e.error??"Failed to delete"),M(null)},[C,t]),T=(0,a.useCallback)(async()=>{N(async()=>{let e=await g();e.success?(k([]),y.oR.success(t.trash.emptied(e.count??0))):y.oR.error(e.error??"Failed to empty trash"),A(!1)})},[t]);return(0,s.jsxs)("div",{className:"min-h-screen",children:[(0,s.jsx)("div",{className:"px-4 md:px-6 pt-6 md:pt-8",children:(0,s.jsx)("div",{className:"content-width xl:mr-[220px] rounded-xl border border-border bg-card px-4 py-3 md:px-5 md:py-4",children:(0,s.jsxs)("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-foreground font-display",children:[(0,s.jsx)(o.A,{size:15}),t.trash.title]}),(0,s.jsx)("p",{className:"mt-1 text-xs text-muted-foreground",children:t.trash.subtitle}),f.length>0&&(0,s.jsx)("div",{className:"mt-2 text-xs text-muted-foreground",children:t.trash.itemCount(f.length)})]}),f.length>0&&(0,s.jsx)("button",{type:"button",onClick:()=>A(!0),disabled:j,className:"px-2.5 py-1.5 rounded-md text-xs font-medium bg-error/10 text-error hover:bg-error/20 transition-colors disabled:opacity-50",children:t.trash.emptyTrash})]})})}),(0,s.jsx)("div",{className:"px-4 md:px-6 py-4 md:py-6",children:(0,s.jsx)("div",{className:"content-width xl:mr-[220px]",children:0===f.length?(0,s.jsxs)("div",{className:"rounded-xl border border-dashed border-border bg-card p-12 text-center",children:[(0,s.jsx)(o.A,{size:32,className:"mx-auto text-muted-foreground/30 mb-3"}),(0,s.jsx)("p",{className:"text-sm text-muted-foreground font-display",children:t.trash.empty}),(0,s.jsx)("p",{className:"text-xs text-muted-foreground/60 mt-1",children:t.trash.emptySubtext})]}):(0,s.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3",children:f.map(e=>{let r=Math.max(0,Math.ceil((new Date(e.expiresAt).getTime()-Date.now())/864e5)),a=r<=3;return(0,s.jsxs)("div",{className:"rounded-xl border border-border bg-card p-4 flex flex-col gap-3 hover:border-border/80 transition-colors",children:[(0,s.jsxs)("div",{className:"flex items-start gap-3 min-w-0",children:[(0,s.jsx)("div",{className:"w-9 h-9 rounded-lg bg-muted/50 flex items-center justify-center shrink-0",children:e.isDirectory?(0,s.jsx)(n.A,{size:16,className:"text-muted-foreground"}):e.fileName.endsWith(".csv")?(0,s.jsx)(i.A,{size:16,className:"text-success"}):(0,s.jsx)(d.A,{size:16,className:"text-muted-foreground"})}),(0,s.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,s.jsx)("p",{className:"text-sm font-medium text-foreground truncate",title:e.fileName,children:e.fileName}),(0,s.jsxs)("p",{className:"text-xs text-muted-foreground truncate mt-0.5",title:e.originalPath,children:[t.trash.from,": ",e.originalPath.split("/").slice(0,-1).join("/")||"/"]})]})]}),(0,s.jsxs)("div",{className:"flex items-center justify-between",children:[(0,s.jsxs)("div",{className:"flex flex-col gap-0.5",children:[(0,s.jsx)("span",{className:"text-2xs text-muted-foreground",children:t.trash.deletedAgo(function(e,t){let r=Math.floor((Date.now()-new Date(e).getTime())/6e4);if(r<1)return t.justNow??"just now";if(r<60)return t.minutesAgo?.(r)??`${r}m ago`;let s=Math.floor(r/60);if(s<24)return t.hoursAgo?.(s)??`${s}h ago`;let a=Math.floor(s/24);return t.daysAgo?.(a)??`${a}d ago`}(e.deletedAt,t.trash))}),(0,s.jsxs)("span",{className:`text-2xs ${a?"text-error":"text-muted-foreground/60"}`,children:[a&&(0,s.jsx)(l.A,{size:9,className:"inline mr-0.5"}),t.trash.expiresIn(r)]})]}),(0,s.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,s.jsxs)("button",{type:"button",onClick:()=>L(e),disabled:$===e.id,className:"inline-flex items-center gap-1 px-2 py-1 rounded-md text-xs font-medium bg-success/10 text-success hover:bg-success/20 transition-colors disabled:opacity-50",children:[$===e.id?(0,s.jsx)(c.A,{size:11,className:"animate-spin"}):(0,s.jsx)(u.A,{size:11}),t.trash.restore]}),(0,s.jsx)("button",{type:"button",onClick:()=>M(e),className:"p-1 rounded-md text-muted-foreground hover:text-error hover:bg-error/10 transition-colors",title:t.trash.deletePermanently,children:(0,s.jsx)(m.A,{size:13})})]})]})]},e.id)})})})}),(0,s.jsx)(v.TM,{open:w,title:t.trash.emptyTrash,message:t.trash.emptyTrashConfirm,confirmLabel:t.trash.emptyTrash,cancelLabel:t.trash.cancel??"Cancel",onConfirm:()=>void T(),onCancel:()=>A(!1),variant:"destructive"}),(0,s.jsx)(v.TM,{open:!!C,title:t.trash.deletePermanently,message:C?t.trash.deletePermanentlyConfirm(C.fileName):"",confirmLabel:t.trash.deletePermanently,cancelLabel:t.trash.cancel??"Cancel",onConfirm:()=>void P(),onCancel:()=>M(null),variant:"destructive"}),R&&(0,s.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/40 backdrop-blur-sm",children:(0,s.jsxs)("div",{className:"bg-card border border-border rounded-xl shadow-xl max-w-sm w-full mx-4 p-5",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 mb-3",children:[(0,s.jsx)(l.A,{size:16,className:"text-[var(--amber)]"}),(0,s.jsx)("h3",{className:"text-sm font-semibold font-display",children:t.trash.restoreConflict})]}),(0,s.jsxs)("p",{className:"text-xs text-muted-foreground mb-4",children:['"',R.fileName,'" — ',R.originalPath]}),(0,s.jsxs)("div",{className:"flex items-center gap-2 justify-end",children:[(0,s.jsx)("button",{type:"button",onClick:()=>z(null),className:"px-3 py-1.5 rounded-md text-xs font-medium text-muted-foreground hover:text-foreground hover:bg-muted transition-colors",children:t.trash.cancel??"Cancel"}),(0,s.jsx)("button",{type:"button",onClick:()=>void E("copy"),className:"px-3 py-1.5 rounded-md text-xs font-medium bg-muted text-foreground hover:bg-muted/80 transition-colors",children:t.trash.saveAsCopy}),(0,s.jsx)("button",{type:"button",onClick:()=>void E("overwrite"),className:"px-3 py-1.5 rounded-md text-xs font-medium bg-[var(--amber-dim)] text-[var(--amber-text)] hover:opacity-80 transition-colors",children:t.trash.overwrite})]})]})})]})}},48368:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});let s=(0,r(90425).A)("file-text",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]])},51914:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});let s=(0,r(90425).A)("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]])},54839:(e,t,r)=>{Promise.resolve().then(r.bind(r,48216))},68459:(e,t,r)=>{"use strict";r.d(t,{A:()=>s});let s=(0,r(90425).A)("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]])},73321:(e,t,r)=>{"use strict";var s=r(74645);r.o(s,"usePathname")&&r.d(t,{usePathname:function(){return s.usePathname}}),r.o(s,"useRouter")&&r.d(t,{useRouter:function(){return s.useRouter}}),r.o(s,"useSearchParams")&&r.d(t,{useSearchParams:function(){return s.useSearchParams}})},90425:(e,t,r)=>{"use strict";r.d(t,{A:()=>d});var s=r(12115);let a=(...e)=>e.filter((e,t,r)=>!!e&&""!==e.trim()&&r.indexOf(e)===t).join(" ").trim(),o=e=>{let t=e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,r)=>r?r.toUpperCase():t.toLowerCase());return t.charAt(0).toUpperCase()+t.slice(1)};var n={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let i=(0,s.forwardRef)(({color:e="currentColor",size:t=24,strokeWidth:r=2,absoluteStrokeWidth:o,className:i="",children:d,iconNode:l,...c},u)=>(0,s.createElement)("svg",{ref:u,...n,width:t,height:t,stroke:e,strokeWidth:o?24*Number(r)/Number(t):r,className:a("lucide",i),...!d&&!(e=>{for(let t in e)if(t.startsWith("aria-")||"role"===t||"title"===t)return!0;return!1})(c)&&{"aria-hidden":"true"},...c},[...l.map(([e,t])=>(0,s.createElement)(e,t)),...Array.isArray(d)?d:[d]])),d=(e,t)=>{let r=(0,s.forwardRef)(({className:r,...n},d)=>(0,s.createElement)(i,{ref:d,iconNode:t,className:a(`lucide-${o(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,`lucide-${e}`,r),...n}));return r.displayName=o(e),r}}},e=>{e.O(0,[1263,8441,3794,7358],()=>e(e.s=54839)),_N_E=e.O()}]);
|