create-walle 0.9.3 → 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.
Files changed (75) hide show
  1. package/README.md +2 -1
  2. package/package.json +1 -1
  3. package/template/claude-task-manager/db.js +5 -1
  4. package/template/claude-task-manager/public/css/walle.css +317 -0
  5. package/template/claude-task-manager/public/index.html +404 -101
  6. package/template/claude-task-manager/public/js/walle.js +1256 -86
  7. package/template/claude-task-manager/server.js +189 -14
  8. package/template/docs/site/api/README.md +146 -0
  9. package/template/docs/site/skills/README.md +99 -5
  10. package/template/package.json +1 -1
  11. package/template/wall-e/agent.js +54 -0
  12. package/template/wall-e/api-walle.js +452 -3
  13. package/template/wall-e/brain.js +45 -1
  14. package/template/wall-e/channels/telegram-channel.js +96 -0
  15. package/template/wall-e/chat.js +61 -2
  16. package/template/wall-e/coding-context.js +252 -0
  17. package/template/wall-e/coding-orchestrator.js +625 -0
  18. package/template/wall-e/coding-review.js +189 -0
  19. package/template/wall-e/core-tasks.js +12 -3
  20. package/template/wall-e/deploy.sh +4 -4
  21. package/template/wall-e/fly.toml +2 -2
  22. package/template/wall-e/package.json +4 -1
  23. package/template/wall-e/skills/_bundled/coding-agent/SKILL.md +17 -0
  24. package/template/wall-e/skills/_bundled/coding-agent/run.js +142 -0
  25. package/template/wall-e/skills/_bundled/email-sync/SKILL.md +12 -7
  26. package/template/wall-e/skills/_bundled/email-sync/mail-reader.jxa +76 -46
  27. package/template/wall-e/skills/_bundled/email-sync/run.js +42 -2
  28. package/template/wall-e/skills/_bundled/glean-team-sync/SKILL.md +57 -0
  29. package/template/wall-e/skills/_bundled/glean-team-sync/run.js +254 -0
  30. package/template/wall-e/skills/_bundled/slack-mentions/SKILL.md +1 -1
  31. package/template/wall-e/skills/_bundled/slack-mentions/run.js +268 -121
  32. package/template/wall-e/skills/_templates/data-fetcher.md +27 -0
  33. package/template/wall-e/skills/_templates/manual-action.md +19 -0
  34. package/template/wall-e/skills/_templates/periodic-checker.md +29 -0
  35. package/template/wall-e/skills/_templates/script-runner.md +21 -0
  36. package/template/wall-e/skills/claude-code-reader.js +16 -4
  37. package/template/wall-e/skills/skill-executor.js +23 -1
  38. package/template/wall-e/skills/skill-validator.js +73 -0
  39. package/template/wall-e/tests/brain.test.js +3 -3
  40. package/template/wall-e/tests/coding-agent-integration.test.js +240 -0
  41. package/template/wall-e/tests/coding-context.test.js +212 -0
  42. package/template/wall-e/tests/coding-orchestrator.test.js +303 -0
  43. package/template/wall-e/tests/coding-review.test.js +141 -0
  44. package/template/claude-task-manager/package-lock.json +0 -1607
  45. package/template/claude-task-manager/tests/test-ai-search.js +0 -61
  46. package/template/claude-task-manager/tests/test-editor-ux.js +0 -76
  47. package/template/claude-task-manager/tests/test-editor-ux2.js +0 -51
  48. package/template/claude-task-manager/tests/test-features-v2.js +0 -127
  49. package/template/claude-task-manager/tests/test-insights-cached.js +0 -78
  50. package/template/claude-task-manager/tests/test-insights.js +0 -124
  51. package/template/claude-task-manager/tests/test-permissions-v2.js +0 -127
  52. package/template/claude-task-manager/tests/test-permissions.js +0 -122
  53. package/template/claude-task-manager/tests/test-pin.js +0 -51
  54. package/template/claude-task-manager/tests/test-prompts.js +0 -164
  55. package/template/claude-task-manager/tests/test-recent-sessions.js +0 -96
  56. package/template/claude-task-manager/tests/test-review.js +0 -104
  57. package/template/claude-task-manager/tests/test-send-dropdown.js +0 -76
  58. package/template/claude-task-manager/tests/test-send-final.js +0 -30
  59. package/template/claude-task-manager/tests/test-send-fixes.js +0 -76
  60. package/template/claude-task-manager/tests/test-send-integration.js +0 -107
  61. package/template/claude-task-manager/tests/test-send-visual.js +0 -34
  62. package/template/claude-task-manager/tests/test-session-create.js +0 -147
  63. package/template/claude-task-manager/tests/test-sidebar-ux.js +0 -83
  64. package/template/claude-task-manager/tests/test-url-hash.js +0 -68
  65. package/template/claude-task-manager/tests/test-ux-crop.js +0 -34
  66. package/template/claude-task-manager/tests/test-ux-review.js +0 -130
  67. package/template/claude-task-manager/tests/test-zoom-card.js +0 -76
  68. package/template/claude-task-manager/tests/test-zoom.js +0 -92
  69. package/template/claude-task-manager/tests/test-zoom2.js +0 -67
  70. package/template/docs/openclaw-vs-walle-comparison.md +0 -103
  71. package/template/docs/ux-improvement-plan.md +0 -84
  72. package/template/wall-e/docs/specs/2026-04-01-publish-plan.md +0 -112
  73. package/template/wall-e/docs/specs/SKILL-FORMAT.md +0 -326
  74. package/template/wall-e/package-lock.json +0 -533
  75. package/template/wall-e/skills/_bundled/slack-mentions/.watermark.json +0 -4
package/README.md CHANGED
@@ -22,7 +22,8 @@ An always-on AI agent that learns from your Slack, email, calendar, and Claude C
22
22
  - **Second Brain** — Automatically ingests your digital life into a searchable memory store with full-text search, knowledge extraction, and pattern detection
23
23
  - **Proactive Intelligence** — Surfaces time-sensitive items, suggests actions, and delivers morning briefings and weekly reflections without being asked
24
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
- - **12 Bundled Skills** — Morning briefing, weekly reflection, proactive alerts, Slack mentions, email sync, calendar integration, and more
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
26
27
  - **Multi-Device** — Share your brain across machines via Dropbox or iCloud
27
28
 
28
29
  ## Install
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-walle",
3
- "version": "0.9.3",
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"
@@ -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; }