create-walle 0.9.1 → 0.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -41
- package/package.json +1 -1
- package/template/CLAUDE.md +9 -0
- package/template/claude-task-manager/db.js +5 -1
- package/template/claude-task-manager/public/css/walle.css +317 -0
- package/template/claude-task-manager/public/index.html +404 -101
- package/template/claude-task-manager/public/js/walle.js +1256 -86
- package/template/claude-task-manager/server.js +189 -14
- package/template/docs/site/api/README.md +146 -0
- package/template/docs/site/skills/README.md +99 -5
- package/template/package.json +1 -1
- package/template/wall-e/agent.js +54 -0
- package/template/wall-e/api-walle.js +452 -3
- package/template/wall-e/brain.js +45 -1
- package/template/wall-e/channels/telegram-channel.js +96 -0
- package/template/wall-e/chat.js +61 -2
- package/template/wall-e/coding-context.js +252 -0
- package/template/wall-e/coding-orchestrator.js +625 -0
- package/template/wall-e/coding-review.js +189 -0
- package/template/wall-e/core-tasks.js +12 -3
- package/template/wall-e/deploy.sh +4 -4
- package/template/wall-e/fly.toml +2 -2
- package/template/wall-e/package.json +4 -1
- package/template/wall-e/skills/_bundled/coding-agent/SKILL.md +17 -0
- package/template/wall-e/skills/_bundled/coding-agent/run.js +142 -0
- package/template/wall-e/skills/_bundled/email-sync/SKILL.md +12 -7
- package/template/wall-e/skills/_bundled/email-sync/mail-reader.jxa +76 -46
- package/template/wall-e/skills/_bundled/email-sync/run.js +42 -2
- package/template/wall-e/skills/_bundled/glean-team-sync/SKILL.md +57 -0
- package/template/wall-e/skills/_bundled/glean-team-sync/run.js +254 -0
- package/template/wall-e/skills/_bundled/slack-mentions/SKILL.md +1 -1
- package/template/wall-e/skills/_bundled/slack-mentions/run.js +268 -121
- package/template/wall-e/skills/_templates/data-fetcher.md +27 -0
- package/template/wall-e/skills/_templates/manual-action.md +19 -0
- package/template/wall-e/skills/_templates/periodic-checker.md +29 -0
- package/template/wall-e/skills/_templates/script-runner.md +21 -0
- package/template/wall-e/skills/claude-code-reader.js +16 -4
- package/template/wall-e/skills/skill-executor.js +23 -1
- package/template/wall-e/skills/skill-validator.js +73 -0
- package/template/wall-e/tests/brain.test.js +3 -3
- package/template/wall-e/tests/coding-agent-integration.test.js +240 -0
- package/template/wall-e/tests/coding-context.test.js +212 -0
- package/template/wall-e/tests/coding-orchestrator.test.js +303 -0
- package/template/wall-e/tests/coding-review.test.js +141 -0
- package/template/claude-task-manager/package-lock.json +0 -1607
- package/template/claude-task-manager/tests/test-ai-search.js +0 -61
- package/template/claude-task-manager/tests/test-editor-ux.js +0 -76
- package/template/claude-task-manager/tests/test-editor-ux2.js +0 -51
- package/template/claude-task-manager/tests/test-features-v2.js +0 -127
- package/template/claude-task-manager/tests/test-insights-cached.js +0 -78
- package/template/claude-task-manager/tests/test-insights.js +0 -124
- package/template/claude-task-manager/tests/test-permissions-v2.js +0 -127
- package/template/claude-task-manager/tests/test-permissions.js +0 -122
- package/template/claude-task-manager/tests/test-pin.js +0 -51
- package/template/claude-task-manager/tests/test-prompts.js +0 -164
- package/template/claude-task-manager/tests/test-recent-sessions.js +0 -96
- package/template/claude-task-manager/tests/test-review.js +0 -104
- package/template/claude-task-manager/tests/test-send-dropdown.js +0 -76
- package/template/claude-task-manager/tests/test-send-final.js +0 -30
- package/template/claude-task-manager/tests/test-send-fixes.js +0 -76
- package/template/claude-task-manager/tests/test-send-integration.js +0 -107
- package/template/claude-task-manager/tests/test-send-visual.js +0 -34
- package/template/claude-task-manager/tests/test-session-create.js +0 -147
- package/template/claude-task-manager/tests/test-sidebar-ux.js +0 -83
- package/template/claude-task-manager/tests/test-url-hash.js +0 -68
- package/template/claude-task-manager/tests/test-ux-crop.js +0 -34
- package/template/claude-task-manager/tests/test-ux-review.js +0 -130
- package/template/claude-task-manager/tests/test-zoom-card.js +0 -76
- package/template/claude-task-manager/tests/test-zoom.js +0 -92
- package/template/claude-task-manager/tests/test-zoom2.js +0 -67
- package/template/docs/openclaw-vs-walle-comparison.md +0 -103
- package/template/docs/ux-improvement-plan.md +0 -84
- package/template/wall-e/docs/specs/2026-04-01-publish-plan.md +0 -112
- package/template/wall-e/docs/specs/SKILL-FORMAT.md +0 -326
- package/template/wall-e/package-lock.json +0 -533
- package/template/wall-e/skills/_bundled/slack-mentions/.watermark.json +0 -4
package/README.md
CHANGED
|
@@ -1,12 +1,30 @@
|
|
|
1
1
|
# create-walle
|
|
2
2
|
|
|
3
|
-
Set up **CTM + Wall-E** in one command.
|
|
3
|
+
Set up **CTM + Wall-E** in one command — a browser-based Claude Code dashboard paired with a personal AI agent that builds a searchable second brain from your work life.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## What You Get
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
### CTM (Claude Task Manager)
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
A web dashboard for running and managing Claude Code sessions, prompts, and workflows.
|
|
10
|
+
|
|
11
|
+
- **Terminal Multiplexer** — Run multiple Claude Code sessions side by side with live status, persistent scrollback, and AI-generated titles
|
|
12
|
+
- **Prompt Editor** — Save, version, and organize prompts with folders, tags, chains, templates, and AI search
|
|
13
|
+
- **Task Queue** — Queue prompts for sequential execution with auto-advance when Claude finishes, or step through manually
|
|
14
|
+
- **Approval Workflows** — Auto-approve tool-use requests based on learned rules; uncertain cases escalate to you
|
|
15
|
+
- **Code Review** — View git diffs from any project, staged or unstaged, with line-level detail
|
|
16
|
+
- **Session Insights** — Analyze patterns across sessions using Claude
|
|
17
|
+
|
|
18
|
+
### Wall-E (Personal Digital Twin)
|
|
19
|
+
|
|
20
|
+
An always-on AI agent that learns from your Slack, email, calendar, and Claude Code sessions.
|
|
21
|
+
|
|
22
|
+
- **Second Brain** — Automatically ingests your digital life into a searchable memory store with full-text search, knowledge extraction, and pattern detection
|
|
23
|
+
- **Proactive Intelligence** — Surfaces time-sensitive items, suggests actions, and delivers morning briefings and weekly reflections without being asked
|
|
24
|
+
- **Chat with Tools** — Talk to Wall-E in the browser — it can search your memories, look up people, run skills, and call external tools via MCP (Slack, Glean, etc.)
|
|
25
|
+
- **14 Bundled Skills** — Morning briefing, weekly reflection, proactive alerts, Slack mentions, email sync, calendar integration, coding agent, and more
|
|
26
|
+
- **Skill Management GUI** — Search, filter, create, edit, and monitor skills from the browser with rich cards, config forms, execution history, export/import, and pre-flight validation
|
|
27
|
+
- **Multi-Device** — Share your brain across machines via Dropbox or iCloud
|
|
10
28
|
|
|
11
29
|
## Install
|
|
12
30
|
|
|
@@ -34,54 +52,25 @@ npx create-walle -v # Show version
|
|
|
34
52
|
On first launch, the browser setup page guides you through:
|
|
35
53
|
|
|
36
54
|
1. **Owner name** — auto-detected from `git config`
|
|
37
|
-
2. **API key** — enter manually, or click "Auto-detect" to find it from
|
|
38
|
-
- Shell environment (`ANTHROPIC_API_KEY`)
|
|
39
|
-
- Claude Code OAuth token (macOS Keychain)
|
|
40
|
-
- Corporate devbox gateway (`~/.devbox/secrets/claude/auth_headers`)
|
|
55
|
+
2. **API key** — enter manually, or click "Auto-detect" to find it from your shell environment, Claude Code OAuth, or corporate devbox
|
|
41
56
|
3. **Integrations** — connect Slack (OAuth), email and calendar auto-detected on macOS
|
|
42
57
|
|
|
43
|
-
## API Authentication
|
|
44
|
-
|
|
45
|
-
Wall-E supports three ways to connect to Claude:
|
|
46
|
-
|
|
47
|
-
**Direct API key:**
|
|
48
|
-
```env
|
|
49
|
-
ANTHROPIC_API_KEY=sk-ant-...
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
**Portkey / API gateway:**
|
|
53
|
-
```env
|
|
54
|
-
ANTHROPIC_BASE_URL=https://your-gateway.example.com/v1
|
|
55
|
-
ANTHROPIC_AUTH_TOKEN=your-key
|
|
56
|
-
ANTHROPIC_CUSTOM_HEADERS_B64=<base64-encoded headers>
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
**Corporate devbox:** Auto-detected — no config needed if you use `devbox ai -c claude`.
|
|
60
|
-
|
|
61
58
|
## Custom Port
|
|
62
59
|
|
|
63
60
|
```bash
|
|
64
61
|
CTM_PORT=5000 npx create-walle install ./my-agent
|
|
65
62
|
```
|
|
66
63
|
|
|
67
|
-
Wall-E
|
|
64
|
+
Wall-E runs on `CTM_PORT + 1` (e.g., 5001).
|
|
68
65
|
|
|
69
|
-
##
|
|
66
|
+
## Architecture
|
|
70
67
|
|
|
71
|
-
|
|
72
|
-
- Terminal multiplexer — run multiple Claude Code sessions side by side
|
|
73
|
-
- Prompt editor — save, organize, and queue prompts to Claude
|
|
74
|
-
- Task queue — automated prompt execution with auto/manual modes
|
|
75
|
-
- Code review panel — session insights and review workflows
|
|
76
|
-
- Live session status — Running/Waiting/Idle indicators with scroll-up support during active output
|
|
68
|
+
Everything runs locally. CTM serves the dashboard, Wall-E runs as a background agent. Both use SQLite — no external databases, no cloud dependency beyond the Claude API.
|
|
77
69
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
-
|
|
82
|
-
- Brain DB — SQLite with full-text search across Slack, email, calendar
|
|
83
|
-
- Intelligence engine — context-aware compaction, initiative scoring, proactive briefings
|
|
84
|
-
- Multi-device — share data via Dropbox/iCloud, sessions tagged by hostname
|
|
70
|
+
| Component | Default Port | What it does |
|
|
71
|
+
|-----------|-------------|--------------|
|
|
72
|
+
| CTM | 3456 | Dashboard, terminal multiplexer, prompt editor, queue, code review |
|
|
73
|
+
| Wall-E | 3457 | AI agent, brain database, skills engine, chat API |
|
|
85
74
|
|
|
86
75
|
## Links
|
|
87
76
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-walle",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.4",
|
|
4
4
|
"description": "CTM + Wall-E — Claude Task Manager dashboard and your personal digital twin AI agent. Terminal multiplexer, prompt editor, task queue, and an agent that learns from Slack, email & calendar.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"create-walle": "bin/create-walle.js"
|
package/template/CLAUDE.md
CHANGED
|
@@ -23,3 +23,12 @@ When developing CTM or Wall-E code:
|
|
|
23
23
|
3. Start a dev instance: `DEV_CTM_PORT=$port DEV_WALLE_PORT=$((port+1)) bash bin/dev.sh`
|
|
24
24
|
4. Test ONLY against your dev port, never 3456
|
|
25
25
|
5. Only restart primary when the user explicitly asks — and ask for confirmation first
|
|
26
|
+
|
|
27
|
+
## Publishing to npm (create-walle)
|
|
28
|
+
|
|
29
|
+
When publishing with `/publish`:
|
|
30
|
+
1. **Always review and update `create-walle/README.md`** before publishing — this is the npm doc page shown on https://www.npmjs.com/package/create-walle
|
|
31
|
+
2. Check that feature descriptions, skill counts, and capabilities match the current codebase
|
|
32
|
+
3. Bump version in both `create-walle/package.json` AND root `package.json`
|
|
33
|
+
4. Run `bash build.sh` and verify file count
|
|
34
|
+
5. Ask for confirmation before `npm publish`
|
|
@@ -1721,6 +1721,10 @@ function addStartupTask(sessionId, label, cmd, args, cwd) {
|
|
|
1721
1721
|
).run(sessionId, label || '', cmd || '', JSON.stringify(args || []), cwd || '');
|
|
1722
1722
|
}
|
|
1723
1723
|
|
|
1724
|
+
function updateStartupTaskLabel(sessionId, label) {
|
|
1725
|
+
getDb().prepare('UPDATE startup_tasks SET label = ? WHERE session_id = ?').run(label || '', sessionId);
|
|
1726
|
+
}
|
|
1727
|
+
|
|
1724
1728
|
function removeStartupTask(sessionId) {
|
|
1725
1729
|
getDb().prepare('DELETE FROM startup_tasks WHERE session_id = ?').run(sessionId);
|
|
1726
1730
|
}
|
|
@@ -1766,6 +1770,6 @@ module.exports = {
|
|
|
1766
1770
|
replaceInsightRecommendations, listInsightRecommendations,
|
|
1767
1771
|
startAnalysisRun, completeAnalysisRun, getLastAnalysisRun,
|
|
1768
1772
|
getInsightsData,
|
|
1769
|
-
addStartupTask, removeStartupTask, listStartupTasks, clearStartupTasks,
|
|
1773
|
+
addStartupTask, updateStartupTaskLabel, removeStartupTask, listStartupTasks, clearStartupTasks,
|
|
1770
1774
|
DEFAULT_IMAGES_DIR, BACKUP_DIR,
|
|
1771
1775
|
};
|
|
@@ -237,6 +237,22 @@
|
|
|
237
237
|
.walle-chat-msg.user:hover .we-edit-btn { opacity: 0.7; }
|
|
238
238
|
.we-edit-btn:hover { opacity: 1 !important; color: var(--accent); }
|
|
239
239
|
|
|
240
|
+
/* Branch navigation (ChatGPT-style) */
|
|
241
|
+
.we-branch-nav {
|
|
242
|
+
display: inline-flex; align-items: center; gap: 2px;
|
|
243
|
+
margin-left: 8px; vertical-align: middle;
|
|
244
|
+
}
|
|
245
|
+
.we-branch-btn {
|
|
246
|
+
background: none; border: 1px solid var(--border, #444); color: var(--fg);
|
|
247
|
+
font-size: 14px; padding: 0 5px; border-radius: 3px; cursor: pointer;
|
|
248
|
+
line-height: 18px; opacity: 0.7; transition: opacity 0.15s;
|
|
249
|
+
}
|
|
250
|
+
.we-branch-btn:hover { opacity: 1; color: var(--accent); border-color: var(--accent); }
|
|
251
|
+
.we-branch-btn.disabled { opacity: 0.2; cursor: default; pointer-events: none; }
|
|
252
|
+
.we-branch-label {
|
|
253
|
+
font-size: 11px; color: var(--fg-muted, #888); min-width: 20px; text-align: center;
|
|
254
|
+
}
|
|
255
|
+
|
|
240
256
|
/* Edit inline form */
|
|
241
257
|
.we-edit-row { margin-top: 4px; }
|
|
242
258
|
.we-edit-input {
|
|
@@ -877,3 +893,304 @@
|
|
|
877
893
|
.we-bi-btn.snooze:hover { background: rgba(250,176,5,0.1); }
|
|
878
894
|
.we-bi-btn.dismiss { color: #666; border-color: rgba(255,255,255,0.08); }
|
|
879
895
|
.we-bi-btn.dismiss:hover { color: #e03131; border-color: rgba(224,49,49,0.3); }
|
|
896
|
+
|
|
897
|
+
/* ===== Skills Tab — Redesigned (Phase 1) ===== */
|
|
898
|
+
|
|
899
|
+
/* Analytics Summary Bar */
|
|
900
|
+
.we-skills-analytics {
|
|
901
|
+
display: flex; gap: 16px; padding: 10px 16px; margin-bottom: 12px;
|
|
902
|
+
background: var(--bg-lighter, #1e1e2e); border: 1px solid var(--border);
|
|
903
|
+
border-radius: 8px; flex-wrap: wrap;
|
|
904
|
+
}
|
|
905
|
+
.we-skills-analytics-item {
|
|
906
|
+
display: flex; flex-direction: column; align-items: center; min-width: 80px;
|
|
907
|
+
}
|
|
908
|
+
.we-skills-analytics-value { font-size: 20px; font-weight: 700; color: var(--accent); }
|
|
909
|
+
.we-skills-analytics-label { font-size: 10px; color: var(--fg-muted, #888); margin-top: 2px; }
|
|
910
|
+
.we-skills-analytics-item.failing .we-skills-analytics-value { color: #e03131; cursor: pointer; }
|
|
911
|
+
|
|
912
|
+
/* Toolbar: search, filters, sort */
|
|
913
|
+
.we-skills-toolbar {
|
|
914
|
+
display: flex; gap: 8px; margin-bottom: 12px; flex-wrap: wrap; align-items: center;
|
|
915
|
+
}
|
|
916
|
+
.we-skills-search {
|
|
917
|
+
flex: 1; min-width: 160px; padding: 6px 10px; border-radius: 6px;
|
|
918
|
+
border: 1px solid var(--border); background: var(--bg); color: var(--fg);
|
|
919
|
+
font-size: 12px;
|
|
920
|
+
}
|
|
921
|
+
.we-skills-search:focus { outline: none; border-color: var(--accent); }
|
|
922
|
+
.we-skills-search::placeholder { color: #666; }
|
|
923
|
+
|
|
924
|
+
/* Category/status pill filters */
|
|
925
|
+
.we-skills-pills { display: flex; gap: 4px; flex-wrap: wrap; }
|
|
926
|
+
.we-skills-pill {
|
|
927
|
+
padding: 3px 10px; border-radius: 12px; font-size: 11px; cursor: pointer;
|
|
928
|
+
border: 1px solid var(--border); background: transparent; color: var(--fg-muted, #888);
|
|
929
|
+
transition: all 0.15s; white-space: nowrap;
|
|
930
|
+
}
|
|
931
|
+
.we-skills-pill:hover { background: rgba(255,255,255,0.06); color: var(--fg); }
|
|
932
|
+
.we-skills-pill.active { background: var(--accent); color: #fff; border-color: var(--accent); }
|
|
933
|
+
|
|
934
|
+
/* Redesigned skill card */
|
|
935
|
+
.we-skill-card {
|
|
936
|
+
display: flex; background: var(--bg-lighter, #1e1e2e);
|
|
937
|
+
border: 1px solid var(--border); border-radius: 8px;
|
|
938
|
+
margin-bottom: 8px; overflow: hidden; cursor: pointer;
|
|
939
|
+
transition: border-color 0.15s;
|
|
940
|
+
}
|
|
941
|
+
.we-skill-card:hover { border-color: var(--accent); }
|
|
942
|
+
.we-skill-card-stripe {
|
|
943
|
+
width: 4px; flex-shrink: 0;
|
|
944
|
+
}
|
|
945
|
+
.we-skill-card-stripe.healthy { background: #5c940d; }
|
|
946
|
+
.we-skill-card-stripe.failing { background: #e8590c; }
|
|
947
|
+
.we-skill-card-stripe.disabled { background: #555; }
|
|
948
|
+
.we-skill-card-stripe.warning { background: #fab005; }
|
|
949
|
+
|
|
950
|
+
.we-skill-card-body { flex: 1; padding: 10px 14px; min-width: 0; }
|
|
951
|
+
|
|
952
|
+
.we-skill-card-header {
|
|
953
|
+
display: flex; align-items: center; gap: 8px; margin-bottom: 4px; flex-wrap: wrap;
|
|
954
|
+
}
|
|
955
|
+
.we-skill-card-name { font-size: 13px; font-weight: 600; color: var(--fg); }
|
|
956
|
+
.we-skill-card-badge {
|
|
957
|
+
font-size: 9px; font-weight: 600; padding: 1px 6px; border-radius: 3px;
|
|
958
|
+
text-transform: uppercase; letter-spacing: 0.3px;
|
|
959
|
+
}
|
|
960
|
+
.we-skill-card-badge.version { background: rgba(59,130,246,0.15); color: #60a5fa; }
|
|
961
|
+
.we-skill-card-badge.bundled { background: rgba(136,136,136,0.15); color: #888; }
|
|
962
|
+
.we-skill-card-badge.user { background: rgba(92,148,13,0.15); color: #5c940d; }
|
|
963
|
+
.we-skill-card-badge.workspace { background: rgba(130,80,223,0.15); color: #a78bfa; }
|
|
964
|
+
.we-skill-card-badge.registry { background: rgba(232,89,12,0.15); color: #e8590c; }
|
|
965
|
+
.we-skill-card-badge.agent { background: rgba(59,130,246,0.1); color: #60a5fa; }
|
|
966
|
+
.we-skill-card-badge.script { background: rgba(250,176,5,0.1); color: #fab005; }
|
|
967
|
+
|
|
968
|
+
.we-skill-card-tags { display: flex; gap: 4px; flex-wrap: wrap; margin-bottom: 4px; }
|
|
969
|
+
.we-skill-tag {
|
|
970
|
+
display: inline-block; padding: 1px 6px; border-radius: 3px; font-size: 10px;
|
|
971
|
+
font-weight: 500; background: rgba(255,255,255,0.06); color: var(--fg-muted, #888);
|
|
972
|
+
}
|
|
973
|
+
.we-skill-tag.sync { background: rgba(16,152,173,0.15); color: #1098ad; }
|
|
974
|
+
.we-skill-tag.data { background: rgba(54,79,199,0.15); color: #748ffc; }
|
|
975
|
+
.we-skill-tag.communication { background: rgba(92,148,13,0.15); color: #a9e34b; }
|
|
976
|
+
.we-skill-tag.coding { background: rgba(130,80,223,0.15); color: #b197fc; }
|
|
977
|
+
.we-skill-tag.monitoring { background: rgba(232,89,12,0.15); color: #ff922b; }
|
|
978
|
+
.we-skill-tag.automation { background: rgba(250,176,5,0.15); color: #ffd43b; }
|
|
979
|
+
|
|
980
|
+
.we-skill-card-desc {
|
|
981
|
+
font-size: 12px; color: #999; line-height: 1.4; margin-bottom: 4px;
|
|
982
|
+
display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
|
|
983
|
+
overflow: hidden;
|
|
984
|
+
}
|
|
985
|
+
|
|
986
|
+
.we-skill-card-stats {
|
|
987
|
+
display: flex; gap: 12px; align-items: center; font-size: 11px; color: var(--fg-muted, #888);
|
|
988
|
+
}
|
|
989
|
+
.we-skill-rate-bar {
|
|
990
|
+
display: inline-block; width: 40px; height: 4px; border-radius: 2px;
|
|
991
|
+
background: var(--border); overflow: hidden; vertical-align: middle;
|
|
992
|
+
}
|
|
993
|
+
.we-skill-rate-fill { height: 100%; border-radius: 2px; background: #5c940d; }
|
|
994
|
+
.we-skill-rate-fill.low { background: #e03131; }
|
|
995
|
+
.we-skill-rate-fill.mid { background: #fab005; }
|
|
996
|
+
|
|
997
|
+
.we-skill-card-actions {
|
|
998
|
+
display: flex; align-items: center; gap: 6px; padding: 10px 14px;
|
|
999
|
+
flex-shrink: 0;
|
|
1000
|
+
}
|
|
1001
|
+
|
|
1002
|
+
/* Toggle switch */
|
|
1003
|
+
.we-toggle {
|
|
1004
|
+
position: relative; display: inline-block; width: 32px; height: 18px;
|
|
1005
|
+
flex-shrink: 0;
|
|
1006
|
+
}
|
|
1007
|
+
.we-toggle input { opacity: 0; width: 0; height: 0; }
|
|
1008
|
+
.we-toggle-slider {
|
|
1009
|
+
position: absolute; cursor: pointer; top: 0; left: 0; right: 0; bottom: 0;
|
|
1010
|
+
background-color: #444; transition: 0.2s; border-radius: 18px;
|
|
1011
|
+
}
|
|
1012
|
+
.we-toggle-slider::before {
|
|
1013
|
+
position: absolute; content: ""; height: 14px; width: 14px;
|
|
1014
|
+
left: 2px; bottom: 2px; background-color: #ccc;
|
|
1015
|
+
transition: 0.2s; border-radius: 50%;
|
|
1016
|
+
}
|
|
1017
|
+
.we-toggle input:checked + .we-toggle-slider { background-color: #5c940d; }
|
|
1018
|
+
.we-toggle input:checked + .we-toggle-slider::before { transform: translateX(14px); }
|
|
1019
|
+
|
|
1020
|
+
/* Overflow menu */
|
|
1021
|
+
.we-skill-overflow {
|
|
1022
|
+
position: relative; display: inline-block;
|
|
1023
|
+
}
|
|
1024
|
+
.we-skill-overflow-btn {
|
|
1025
|
+
background: none; border: 1px solid rgba(255,255,255,0.1); color: #888;
|
|
1026
|
+
font-size: 14px; padding: 2px 6px; border-radius: 4px; cursor: pointer;
|
|
1027
|
+
line-height: 1;
|
|
1028
|
+
}
|
|
1029
|
+
.we-skill-overflow-btn:hover { color: #ccc; border-color: rgba(255,255,255,0.2); }
|
|
1030
|
+
.we-skill-overflow-menu {
|
|
1031
|
+
display: none; position: absolute; right: 0; top: 100%; margin-top: 4px;
|
|
1032
|
+
background: #1e1e2e; border: 1px solid rgba(255,255,255,0.15);
|
|
1033
|
+
border-radius: 6px; min-width: 150px; padding: 4px 0; z-index: 1000;
|
|
1034
|
+
box-shadow: 0 4px 16px rgba(0,0,0,0.5);
|
|
1035
|
+
}
|
|
1036
|
+
.we-skill-overflow-menu.open { display: block; }
|
|
1037
|
+
.we-skill-overflow-item {
|
|
1038
|
+
padding: 6px 12px; font-size: 12px; color: #ccc; cursor: pointer; white-space: nowrap;
|
|
1039
|
+
}
|
|
1040
|
+
.we-skill-overflow-item:hover { background: rgba(255,255,255,0.08); color: #fff; }
|
|
1041
|
+
.we-skill-overflow-item.danger { color: #e03131; }
|
|
1042
|
+
.we-skill-overflow-item.danger:hover { background: rgba(224,49,49,0.15); }
|
|
1043
|
+
|
|
1044
|
+
/* ===== Skill Detail Panel (Slide-Over) ===== */
|
|
1045
|
+
.we-skill-detail {
|
|
1046
|
+
position: fixed; top: 0; right: -480px; width: 480px; height: 100vh;
|
|
1047
|
+
background: var(--bg, #1a1b26); border-left: 1px solid var(--border);
|
|
1048
|
+
z-index: 900; display: flex; flex-direction: column;
|
|
1049
|
+
transition: right 0.25s ease;
|
|
1050
|
+
box-shadow: -4px 0 20px rgba(0,0,0,0.4);
|
|
1051
|
+
}
|
|
1052
|
+
.we-skill-detail.open { right: 0; }
|
|
1053
|
+
.we-skill-detail-backdrop {
|
|
1054
|
+
display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0;
|
|
1055
|
+
background: rgba(0,0,0,0.4); z-index: 899;
|
|
1056
|
+
}
|
|
1057
|
+
.we-skill-detail-backdrop.open { display: block; }
|
|
1058
|
+
|
|
1059
|
+
.we-skill-detail-header {
|
|
1060
|
+
display: flex; align-items: center; gap: 10px; padding: 14px 16px;
|
|
1061
|
+
border-bottom: 1px solid var(--border); flex-shrink: 0;
|
|
1062
|
+
}
|
|
1063
|
+
.we-skill-detail-close {
|
|
1064
|
+
background: none; border: none; color: #888; font-size: 18px; cursor: pointer;
|
|
1065
|
+
padding: 2px 6px; line-height: 1;
|
|
1066
|
+
}
|
|
1067
|
+
.we-skill-detail-close:hover { color: #ccc; }
|
|
1068
|
+
.we-skill-detail-title { font-size: 15px; font-weight: 700; color: var(--fg); flex: 1; }
|
|
1069
|
+
|
|
1070
|
+
.we-skill-detail-tabs {
|
|
1071
|
+
display: flex; gap: 2px; padding: 0 16px; border-bottom: 1px solid var(--border);
|
|
1072
|
+
flex-shrink: 0;
|
|
1073
|
+
}
|
|
1074
|
+
.we-skill-detail-tab {
|
|
1075
|
+
padding: 8px 12px; font-size: 12px; color: var(--fg-muted, #888); cursor: pointer;
|
|
1076
|
+
border-bottom: 2px solid transparent; background: none; border-top: none;
|
|
1077
|
+
border-left: none; border-right: none; transition: all 0.15s;
|
|
1078
|
+
}
|
|
1079
|
+
.we-skill-detail-tab:hover { color: var(--fg); }
|
|
1080
|
+
.we-skill-detail-tab.active { color: var(--accent); border-bottom-color: var(--accent); font-weight: 600; }
|
|
1081
|
+
|
|
1082
|
+
.we-skill-detail-content {
|
|
1083
|
+
flex: 1; overflow-y: auto; padding: 16px;
|
|
1084
|
+
}
|
|
1085
|
+
|
|
1086
|
+
/* Config form */
|
|
1087
|
+
.we-config-form { display: flex; flex-direction: column; gap: 12px; }
|
|
1088
|
+
.we-config-field { display: flex; flex-direction: column; gap: 4px; }
|
|
1089
|
+
.we-config-label { font-size: 12px; font-weight: 600; color: var(--fg); }
|
|
1090
|
+
.we-config-help { font-size: 11px; color: var(--fg-muted, #888); }
|
|
1091
|
+
.we-config-input {
|
|
1092
|
+
padding: 6px 10px; border-radius: 4px; border: 1px solid var(--border);
|
|
1093
|
+
background: var(--bg); color: var(--fg); font-size: 12px;
|
|
1094
|
+
}
|
|
1095
|
+
.we-config-input:focus { outline: none; border-color: var(--accent); }
|
|
1096
|
+
.we-config-select {
|
|
1097
|
+
padding: 6px 10px; border-radius: 4px; border: 1px solid var(--border);
|
|
1098
|
+
background: var(--bg); color: var(--fg); font-size: 12px;
|
|
1099
|
+
}
|
|
1100
|
+
.we-config-save { margin-top: 8px; align-self: flex-start; }
|
|
1101
|
+
|
|
1102
|
+
/* Execution history table */
|
|
1103
|
+
.we-exec-table { width: 100%; border-collapse: collapse; font-size: 12px; }
|
|
1104
|
+
.we-exec-table th {
|
|
1105
|
+
text-align: left; padding: 6px 8px; color: #666; font-weight: 500;
|
|
1106
|
+
font-size: 10px; text-transform: uppercase; letter-spacing: 0.5px;
|
|
1107
|
+
border-bottom: 1px solid rgba(255,255,255,0.1);
|
|
1108
|
+
}
|
|
1109
|
+
.we-exec-table td {
|
|
1110
|
+
padding: 6px 8px; border-bottom: 1px solid rgba(255,255,255,0.04);
|
|
1111
|
+
color: #bbb;
|
|
1112
|
+
}
|
|
1113
|
+
.we-exec-status { font-size: 10px; font-weight: 600; text-transform: uppercase; }
|
|
1114
|
+
.we-exec-status.success { color: #5c940d; }
|
|
1115
|
+
.we-exec-status.failure { color: #e03131; }
|
|
1116
|
+
|
|
1117
|
+
/* Source viewer */
|
|
1118
|
+
.we-skill-source-view {
|
|
1119
|
+
background: #0d1117; border: 1px solid rgba(255,255,255,0.08);
|
|
1120
|
+
border-radius: 6px; padding: 12px; font-family: 'SF Mono', 'Fira Code', monospace;
|
|
1121
|
+
font-size: 12px; line-height: 1.5; color: #c9d1d9; white-space: pre-wrap;
|
|
1122
|
+
overflow-x: auto; max-height: 500px; overflow-y: auto;
|
|
1123
|
+
}
|
|
1124
|
+
|
|
1125
|
+
/* Requirements validation */
|
|
1126
|
+
.we-req-list { list-style: none; padding: 0; margin: 8px 0; }
|
|
1127
|
+
.we-req-item {
|
|
1128
|
+
display: flex; align-items: center; gap: 8px; padding: 4px 0; font-size: 12px;
|
|
1129
|
+
}
|
|
1130
|
+
.we-req-icon { width: 16px; text-align: center; }
|
|
1131
|
+
.we-req-icon.ok { color: #5c940d; }
|
|
1132
|
+
.we-req-icon.missing { color: #e03131; }
|
|
1133
|
+
.we-req-suggestion { font-size: 11px; color: var(--fg-muted, #888); font-style: italic; }
|
|
1134
|
+
|
|
1135
|
+
/* ===== Skill Editor ===== */
|
|
1136
|
+
.we-skill-editor { display: flex; flex-direction: column; gap: 12px; }
|
|
1137
|
+
.we-skill-editor-row { display: flex; gap: 12px; }
|
|
1138
|
+
.we-skill-editor-row > * { flex: 1; }
|
|
1139
|
+
.we-skill-editor-textarea {
|
|
1140
|
+
width: 100%; min-height: 200px; padding: 10px; border-radius: 6px;
|
|
1141
|
+
border: 1px solid var(--border); background: var(--bg); color: var(--fg);
|
|
1142
|
+
font-family: 'SF Mono', 'Fira Code', monospace; font-size: 12px;
|
|
1143
|
+
line-height: 1.5; resize: vertical;
|
|
1144
|
+
}
|
|
1145
|
+
.we-skill-editor-textarea:focus { outline: none; border-color: var(--accent); }
|
|
1146
|
+
|
|
1147
|
+
/* Template cards */
|
|
1148
|
+
.we-template-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 10px; margin: 12px 0; }
|
|
1149
|
+
.we-template-card {
|
|
1150
|
+
padding: 12px; border-radius: 6px; border: 1px solid var(--border);
|
|
1151
|
+
background: var(--bg-lighter, #1e1e2e); cursor: pointer; transition: border-color 0.15s;
|
|
1152
|
+
}
|
|
1153
|
+
.we-template-card:hover { border-color: var(--accent); }
|
|
1154
|
+
.we-template-name { font-size: 12px; font-weight: 600; color: var(--fg); margin-bottom: 4px; }
|
|
1155
|
+
.we-template-desc { font-size: 11px; color: var(--fg-muted, #888); line-height: 1.4; }
|
|
1156
|
+
|
|
1157
|
+
/* Claude Code Skills — grouped, collapsible, searchable */
|
|
1158
|
+
.we-cc-skills { margin-top: 8px; }
|
|
1159
|
+
.we-cc-skills-header {
|
|
1160
|
+
display: flex; align-items: center; gap: 8px;
|
|
1161
|
+
font-size: 13px; font-weight: 600; color: var(--fg);
|
|
1162
|
+
padding: 10px 14px; cursor: pointer; user-select: none;
|
|
1163
|
+
background: var(--bg-lighter, #1e1e2e); border: 1px solid var(--border);
|
|
1164
|
+
border-radius: 8px;
|
|
1165
|
+
}
|
|
1166
|
+
.we-cc-skills-header:hover { border-color: var(--accent); }
|
|
1167
|
+
.we-cc-skills-toggle { font-size: 10px; color: var(--fg-muted); transition: transform 0.15s; }
|
|
1168
|
+
.we-cc-search {
|
|
1169
|
+
margin-left: auto; padding: 4px 8px; font-size: 11px;
|
|
1170
|
+
background: var(--bg, #14141e); border: 1px solid var(--border);
|
|
1171
|
+
border-radius: 4px; color: var(--fg); width: 160px;
|
|
1172
|
+
}
|
|
1173
|
+
.we-cc-search:focus { outline: none; border-color: var(--accent); }
|
|
1174
|
+
.we-cc-search::placeholder { color: #666; }
|
|
1175
|
+
.we-cc-skills-body { padding: 4px 0; }
|
|
1176
|
+
.we-cc-group { margin: 4px 0; }
|
|
1177
|
+
.we-cc-group-header {
|
|
1178
|
+
display: flex; align-items: center; gap: 6px;
|
|
1179
|
+
font-size: 12px; font-weight: 600; color: var(--fg-muted);
|
|
1180
|
+
padding: 6px 14px; cursor: pointer; user-select: none;
|
|
1181
|
+
}
|
|
1182
|
+
.we-cc-group-header:hover { color: var(--fg); }
|
|
1183
|
+
.we-cc-group-toggle { font-size: 9px; color: var(--fg-muted); }
|
|
1184
|
+
.we-cc-group-count { font-weight: 400; color: var(--fg-muted, #666); font-size: 11px; }
|
|
1185
|
+
.we-cc-group-body {
|
|
1186
|
+
display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
|
|
1187
|
+
gap: 6px; padding: 4px 14px 8px;
|
|
1188
|
+
}
|
|
1189
|
+
.we-cc-skill-card {
|
|
1190
|
+
padding: 8px 10px; border-radius: 6px;
|
|
1191
|
+
border: 1px solid var(--border); background: var(--bg, #14141e);
|
|
1192
|
+
transition: border-color 0.15s;
|
|
1193
|
+
}
|
|
1194
|
+
.we-cc-skill-card:hover { border-color: var(--accent); }
|
|
1195
|
+
.we-cc-skill-name { font-size: 11px; font-weight: 600; color: var(--fg); margin-bottom: 2px; }
|
|
1196
|
+
.we-cc-skill-desc { font-size: 10px; color: var(--fg-muted, #888); line-height: 1.3; overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
|