create-walle 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/bin/create-walle.js +134 -0
  2. package/package.json +18 -0
  3. package/template/.env.example +40 -0
  4. package/template/CLAUDE.md +12 -0
  5. package/template/LICENSE +21 -0
  6. package/template/README.md +167 -0
  7. package/template/bin/setup.js +100 -0
  8. package/template/claude-code-skill.md +60 -0
  9. package/template/claude-task-manager/api-prompts.js +1841 -0
  10. package/template/claude-task-manager/api-reviews.js +275 -0
  11. package/template/claude-task-manager/approval-agent.js +454 -0
  12. package/template/claude-task-manager/bin/restart-ctm.sh +16 -0
  13. package/template/claude-task-manager/db.js +1721 -0
  14. package/template/claude-task-manager/docs/PROMPT-MANAGEMENT-DESIGN.md +631 -0
  15. package/template/claude-task-manager/git-utils.js +214 -0
  16. package/template/claude-task-manager/package-lock.json +1607 -0
  17. package/template/claude-task-manager/package.json +31 -0
  18. package/template/claude-task-manager/prompt-harvest.js +1148 -0
  19. package/template/claude-task-manager/public/css/prompts.css +880 -0
  20. package/template/claude-task-manager/public/css/reviews.css +430 -0
  21. package/template/claude-task-manager/public/css/walle.css +732 -0
  22. package/template/claude-task-manager/public/favicon.ico +0 -0
  23. package/template/claude-task-manager/public/icon.svg +37 -0
  24. package/template/claude-task-manager/public/index.html +8346 -0
  25. package/template/claude-task-manager/public/js/prompts.js +3159 -0
  26. package/template/claude-task-manager/public/js/reviews.js +1292 -0
  27. package/template/claude-task-manager/public/js/walle.js +3081 -0
  28. package/template/claude-task-manager/public/manifest.json +13 -0
  29. package/template/claude-task-manager/public/prompts.html +4353 -0
  30. package/template/claude-task-manager/public/setup.html +216 -0
  31. package/template/claude-task-manager/queue-engine.js +404 -0
  32. package/template/claude-task-manager/server-state.js +5 -0
  33. package/template/claude-task-manager/server.js +2254 -0
  34. package/template/claude-task-manager/session-utils.js +124 -0
  35. package/template/claude-task-manager/start.sh +17 -0
  36. package/template/claude-task-manager/tests/test-ai-search.js +61 -0
  37. package/template/claude-task-manager/tests/test-editor-ux.js +76 -0
  38. package/template/claude-task-manager/tests/test-editor-ux2.js +51 -0
  39. package/template/claude-task-manager/tests/test-features-v2.js +127 -0
  40. package/template/claude-task-manager/tests/test-insights-cached.js +78 -0
  41. package/template/claude-task-manager/tests/test-insights.js +124 -0
  42. package/template/claude-task-manager/tests/test-permissions-v2.js +127 -0
  43. package/template/claude-task-manager/tests/test-permissions.js +122 -0
  44. package/template/claude-task-manager/tests/test-pin.js +51 -0
  45. package/template/claude-task-manager/tests/test-prompts.js +164 -0
  46. package/template/claude-task-manager/tests/test-recent-sessions.js +96 -0
  47. package/template/claude-task-manager/tests/test-review.js +104 -0
  48. package/template/claude-task-manager/tests/test-send-dropdown.js +76 -0
  49. package/template/claude-task-manager/tests/test-send-final.js +30 -0
  50. package/template/claude-task-manager/tests/test-send-fixes.js +76 -0
  51. package/template/claude-task-manager/tests/test-send-integration.js +107 -0
  52. package/template/claude-task-manager/tests/test-send-visual.js +34 -0
  53. package/template/claude-task-manager/tests/test-session-create.js +147 -0
  54. package/template/claude-task-manager/tests/test-sidebar-ux.js +83 -0
  55. package/template/claude-task-manager/tests/test-url-hash.js +68 -0
  56. package/template/claude-task-manager/tests/test-ux-crop.js +34 -0
  57. package/template/claude-task-manager/tests/test-ux-review.js +130 -0
  58. package/template/claude-task-manager/tests/test-zoom-card.js +76 -0
  59. package/template/claude-task-manager/tests/test-zoom.js +92 -0
  60. package/template/claude-task-manager/tests/test-zoom2.js +67 -0
  61. package/template/docs/site/api/README.md +187 -0
  62. package/template/docs/site/guides/claude-code.md +58 -0
  63. package/template/docs/site/guides/configuration.md +96 -0
  64. package/template/docs/site/guides/quickstart.md +158 -0
  65. package/template/docs/site/index.md +14 -0
  66. package/template/docs/site/skills/README.md +135 -0
  67. package/template/wall-e/.dockerignore +11 -0
  68. package/template/wall-e/Dockerfile +25 -0
  69. package/template/wall-e/adapters/adapter-base.js +37 -0
  70. package/template/wall-e/adapters/ctm.js +193 -0
  71. package/template/wall-e/adapters/slack.js +56 -0
  72. package/template/wall-e/agent.js +319 -0
  73. package/template/wall-e/api-walle.js +1073 -0
  74. package/template/wall-e/brain.js +1235 -0
  75. package/template/wall-e/channels/agent-api.js +172 -0
  76. package/template/wall-e/channels/channel-base.js +14 -0
  77. package/template/wall-e/channels/imessage-channel.js +113 -0
  78. package/template/wall-e/channels/slack-channel.js +118 -0
  79. package/template/wall-e/chat.js +778 -0
  80. package/template/wall-e/decision/confidence.js +93 -0
  81. package/template/wall-e/deploy.sh +35 -0
  82. package/template/wall-e/docs/specs/2026-04-01-publish-plan.md +112 -0
  83. package/template/wall-e/docs/specs/SKILL-FORMAT.md +326 -0
  84. package/template/wall-e/extraction/contradiction.js +168 -0
  85. package/template/wall-e/extraction/knowledge-extractor.js +190 -0
  86. package/template/wall-e/fly.toml +24 -0
  87. package/template/wall-e/loops/ingest.js +34 -0
  88. package/template/wall-e/loops/reflect.js +63 -0
  89. package/template/wall-e/loops/tasks.js +487 -0
  90. package/template/wall-e/loops/think.js +125 -0
  91. package/template/wall-e/package-lock.json +533 -0
  92. package/template/wall-e/package.json +18 -0
  93. package/template/wall-e/scripts/ingest-slack-search.js +85 -0
  94. package/template/wall-e/scripts/pull-slack-via-claude.js +98 -0
  95. package/template/wall-e/scripts/slack-backfill.js +295 -0
  96. package/template/wall-e/scripts/slack-channel-history.js +454 -0
  97. package/template/wall-e/server.js +93 -0
  98. package/template/wall-e/skills/_bundled/email-digest/SKILL.md +95 -0
  99. package/template/wall-e/skills/_bundled/email-sync/SKILL.md +65 -0
  100. package/template/wall-e/skills/_bundled/email-sync/mail-reader.jxa +104 -0
  101. package/template/wall-e/skills/_bundled/email-sync/run.js +213 -0
  102. package/template/wall-e/skills/_bundled/google-calendar/SKILL.md +73 -0
  103. package/template/wall-e/skills/_bundled/google-calendar/cal-reader.swift +81 -0
  104. package/template/wall-e/skills/_bundled/google-calendar/run.js +181 -0
  105. package/template/wall-e/skills/_bundled/memory-search/SKILL.md +92 -0
  106. package/template/wall-e/skills/_bundled/morning-briefing/SKILL.md +131 -0
  107. package/template/wall-e/skills/_bundled/morning-briefing/run.js +264 -0
  108. package/template/wall-e/skills/_bundled/slack-backfill/SKILL.md +60 -0
  109. package/template/wall-e/skills/_bundled/slack-sync/SKILL.md +55 -0
  110. package/template/wall-e/skills/claude-code-reader.js +144 -0
  111. package/template/wall-e/skills/mcp-client.js +407 -0
  112. package/template/wall-e/skills/skill-executor.js +163 -0
  113. package/template/wall-e/skills/skill-loader.js +410 -0
  114. package/template/wall-e/skills/skill-planner.js +88 -0
  115. package/template/wall-e/skills/slack-ingest.js +329 -0
  116. package/template/wall-e/skills/slack-pull-live.js +270 -0
  117. package/template/wall-e/skills/tool-executor.js +188 -0
  118. package/template/wall-e/tests/adapter-base.test.js +20 -0
  119. package/template/wall-e/tests/adapter-ctm.test.js +122 -0
  120. package/template/wall-e/tests/adapter-slack.test.js +98 -0
  121. package/template/wall-e/tests/agent-api.test.js +256 -0
  122. package/template/wall-e/tests/api-walle.test.js +222 -0
  123. package/template/wall-e/tests/brain.test.js +602 -0
  124. package/template/wall-e/tests/channels.test.js +104 -0
  125. package/template/wall-e/tests/chat.test.js +103 -0
  126. package/template/wall-e/tests/confidence.test.js +134 -0
  127. package/template/wall-e/tests/contradiction.test.js +217 -0
  128. package/template/wall-e/tests/ingest.test.js +113 -0
  129. package/template/wall-e/tests/mcp-client.test.js +71 -0
  130. package/template/wall-e/tests/reflect.test.js +103 -0
  131. package/template/wall-e/tests/server.test.js +111 -0
  132. package/template/wall-e/tests/skills.test.js +198 -0
  133. package/template/wall-e/tests/slack-ingest.test.js +103 -0
  134. package/template/wall-e/tests/think.test.js +435 -0
  135. package/template/wall-e/tools/local-tools.js +697 -0
  136. package/template/wall-e/tools/slack-mcp.js +290 -0
@@ -0,0 +1,732 @@
1
+ /* WALL-E Panel */
2
+ #walle-panel { display: none; flex-direction: column; height: 100%; overflow: hidden; }
3
+ #walle-panel.active { display: flex; }
4
+
5
+ .walle-header {
6
+ display: flex; align-items: center; gap: 12px; padding: 10px 16px;
7
+ border-bottom: 1px solid var(--border); flex-shrink: 0;
8
+ }
9
+ .walle-header-title { font-size: 15px; font-weight: 700; color: var(--fg); }
10
+
11
+ .walle-subnav { display: flex; gap: 4px; margin-left: auto; }
12
+ .walle-subnav-btn {
13
+ padding: 4px 12px; border-radius: 4px; font-size: 12px; cursor: pointer;
14
+ border: 1px solid transparent; background: transparent; color: var(--fg-muted, #888);
15
+ transition: all 0.15s;
16
+ }
17
+ .walle-subnav-btn:hover { background: rgba(255,255,255,0.06); color: var(--fg); }
18
+ .walle-subnav-btn.active { background: var(--accent); color: #fff; border-color: var(--accent); }
19
+
20
+ .walle-body { flex: 1; overflow-y: auto; padding: 16px; }
21
+
22
+ /* Cards */
23
+ .walle-card {
24
+ background: var(--bg-lighter, #1e1e2e); border: 1px solid var(--border);
25
+ border-radius: 8px; padding: 12px 16px; margin-bottom: 10px;
26
+ }
27
+ .walle-card-title { font-size: 13px; font-weight: 600; color: var(--fg); margin-bottom: 4px; }
28
+ .walle-card-meta { font-size: 11px; color: var(--fg-muted, #888); }
29
+ .walle-card-body { font-size: 12px; color: var(--fg); margin-top: 8px; line-height: 1.5; }
30
+
31
+ /* Tags */
32
+ .walle-tag {
33
+ display: inline-block; padding: 2px 8px; border-radius: 3px; font-size: 10px;
34
+ font-weight: 600; margin-right: 4px;
35
+ }
36
+ .walle-tag.technical { background: #364fc7; color: #dbe4ff; }
37
+ .walle-tag.preference { background: #5c940d; color: #d8f5a2; }
38
+ .walle-tag.relationship { background: #e8590c; color: #ffe8cc; }
39
+ .walle-tag.work { background: #862e9c; color: #f3d9fa; }
40
+ .walle-tag.personal { background: #d6336c; color: #fcc2d7; }
41
+ .walle-tag.world { background: #1098ad; color: #c5f6fa; }
42
+
43
+ /* Stats */
44
+ .walle-stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 12px; margin-bottom: 20px; }
45
+ .walle-stat {
46
+ background: var(--bg-lighter, #1e1e2e); border: 1px solid var(--border);
47
+ border-radius: 8px; padding: 16px; text-align: center;
48
+ }
49
+ .walle-stat-value { font-size: 28px; font-weight: 700; color: var(--accent); }
50
+ .walle-stat-label { font-size: 11px; color: var(--fg-muted, #888); margin-top: 4px; }
51
+
52
+ /* Timeline */
53
+ .walle-timeline-item {
54
+ display: flex; gap: 12px; padding: 8px 0;
55
+ border-bottom: 1px solid rgba(255,255,255,0.05);
56
+ }
57
+ .walle-timeline-time { font-size: 11px; color: var(--fg-muted, #888); min-width: 80px; flex-shrink: 0; }
58
+ .walle-timeline-badge {
59
+ font-size: 9px; font-weight: 700; padding: 2px 6px; border-radius: 3px;
60
+ text-transform: uppercase; min-width: 40px; text-align: center; flex-shrink: 0;
61
+ }
62
+ .walle-timeline-badge.ctm { background: #364fc7; color: #dbe4ff; }
63
+ .walle-timeline-badge.slack { background: #5c940d; color: #d8f5a2; }
64
+ .walle-timeline-badge.outbound { background: #e8590c; color: #ffe8cc; }
65
+ .walle-timeline-content { font-size: 12px; color: var(--fg); flex: 1; overflow: hidden; text-overflow: ellipsis; }
66
+
67
+ /* Questions */
68
+ .walle-question { margin-bottom: 16px; }
69
+ .walle-question-text { font-size: 13px; color: var(--fg); margin-bottom: 8px; }
70
+ .walle-question-context { font-size: 11px; color: var(--fg-muted, #888); margin-bottom: 8px; }
71
+ .walle-question-answer {
72
+ display: flex; gap: 8px; align-items: center;
73
+ }
74
+ .walle-question-input {
75
+ flex: 1; padding: 6px 10px; border-radius: 4px; border: 1px solid var(--border);
76
+ background: var(--bg); color: var(--fg); font-size: 12px;
77
+ }
78
+ .walle-btn {
79
+ padding: 5px 12px; border-radius: 5px; font-size: 11px; cursor: pointer;
80
+ border: 1px solid var(--border); background: var(--bg-lighter, #1e1e2e); color: var(--fg);
81
+ transition: all 0.15s;
82
+ }
83
+ .walle-btn:hover { background: rgba(255,255,255,0.08); }
84
+ .walle-btn.primary { background: var(--accent); color: #fff; border-color: var(--accent); }
85
+
86
+ /* Loading / Empty */
87
+ .walle-loading { text-align: center; padding: 40px; color: var(--fg-muted, #888); font-size: 13px; }
88
+ .walle-empty { text-align: center; padding: 40px; color: var(--fg-muted, #888); font-size: 13px; }
89
+
90
+ /* People */
91
+ .walle-people-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 12px; }
92
+ .walle-trust-bar { height: 4px; border-radius: 2px; background: var(--border); margin-top: 8px; }
93
+ .walle-trust-fill { height: 100%; border-radius: 2px; background: var(--accent); }
94
+
95
+ /* Section headers */
96
+ .walle-section-title { font-size: 13px; font-weight: 700; color: var(--fg); margin: 16px 0 8px; }
97
+
98
+ /* Filters */
99
+ .walle-filters { display: flex; gap: 8px; margin-bottom: 16px; flex-wrap: wrap; }
100
+ .walle-filter-select {
101
+ padding: 4px 8px; border-radius: 4px; border: 1px solid var(--border);
102
+ background: var(--bg); color: var(--fg); font-size: 11px;
103
+ }
104
+ .walle-filter-input {
105
+ padding: 4px 8px; border-radius: 4px; border: 1px solid var(--border);
106
+ background: var(--bg); color: var(--fg); font-size: 11px; min-width: 150px;
107
+ }
108
+
109
+ /* Load more */
110
+ .walle-load-more { text-align: center; padding: 12px; }
111
+
112
+ /* Chat — Claude Code CLI inspired: compact, clear hierarchy */
113
+ .walle-chat-container { display: flex; flex-direction: column; height: 100%; }
114
+ .walle-chat-messages { flex: 1; overflow-y: auto; padding: 0 0 12px; }
115
+
116
+ /* Conversation turn group — user question + assistant response paired together */
117
+ .we-turn-group {
118
+ border-bottom: 1px solid rgba(255,255,255,0.06);
119
+ padding: 6px 0 8px;
120
+ }
121
+ .we-turn-group:last-child { border-bottom: none; }
122
+
123
+ /* User messages — compact */
124
+ .walle-chat-msg.user {
125
+ padding: 4px 0 6px;
126
+ }
127
+ /* Assistant messages — indented with left accent bar, grouped under user question */
128
+ .walle-chat-msg.assistant {
129
+ padding: 4px 0 4px 12px;
130
+ border-left: 2px solid rgba(81, 207, 102, 0.3);
131
+ margin: 4px 0 0;
132
+ }
133
+
134
+ .walle-chat-msg-role {
135
+ font-size: 10px; font-weight: 800; text-transform: uppercase;
136
+ letter-spacing: 1px; margin-bottom: 3px;
137
+ }
138
+ .walle-chat-msg-role.user { color: #5c7cfa; }
139
+ .walle-chat-msg-role.assistant { color: #51cf66; }
140
+
141
+ /* User text — plain, tight */
142
+ .walle-chat-msg-text {
143
+ font-size: 13px; color: #c9d1d9; line-height: 1.5;
144
+ white-space: pre-wrap; word-break: break-word;
145
+ }
146
+
147
+ /* WALL-E markdown responses — tight like Claude Code CLI */
148
+ .walle-chat-msg-text.we-markdown {
149
+ white-space: normal;
150
+ font-size: 13px;
151
+ color: #c9d1d9;
152
+ line-height: 1.5;
153
+ }
154
+ .walle-chat-msg-text.we-markdown strong { color: #e9ecef; font-weight: 600; }
155
+ .walle-chat-msg-text.we-markdown em { color: #da77f2; font-style: italic; }
156
+
157
+ /* Headers — compact hierarchy */
158
+ .we-h2 {
159
+ font-size: 14px; font-weight: 700; color: #e9ecef;
160
+ margin: 10px 0 4px; padding-bottom: 3px;
161
+ border-bottom: 1px solid rgba(255,255,255,0.08);
162
+ }
163
+ .we-h3 {
164
+ font-size: 13px; font-weight: 700; color: #74c0fc;
165
+ margin: 8px 0 2px;
166
+ }
167
+ .we-h4 {
168
+ font-size: 13px; font-weight: 600; color: #a9e34b;
169
+ margin: 6px 0 2px;
170
+ }
171
+
172
+ /* Blockquotes — thin left-border */
173
+ .we-quote {
174
+ border-left: 2px solid #5c7cfa; padding: 2px 10px; margin: 4px 0;
175
+ background: rgba(92, 124, 250, 0.05); border-radius: 0 4px 4px 0;
176
+ color: #adb5bd; font-size: 12px; line-height: 1.4;
177
+ }
178
+
179
+ /* Code blocks — terminal style */
180
+ .we-code-block {
181
+ background: #0d1117; border: 1px solid rgba(255,255,255,0.08);
182
+ border-radius: 6px; padding: 8px 12px; margin: 6px 0;
183
+ overflow-x: auto; font-size: 12px; line-height: 1.45;
184
+ }
185
+ .we-code-block code {
186
+ color: #c9d1d9; font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;
187
+ white-space: pre;
188
+ }
189
+
190
+ /* Inline code */
191
+ .we-inline-code {
192
+ background: rgba(255,255,255,0.06); padding: 1px 5px; border-radius: 3px;
193
+ font-size: 12px; color: #ff922b;
194
+ font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;
195
+ }
196
+
197
+ /* Lists — zero extra spacing, like CLI output */
198
+ .we-ul { margin: 0; padding-left: 0; list-style: none; }
199
+ .we-li {
200
+ position: relative; padding: 0 0 0 16px; font-size: 13px;
201
+ line-height: 1.5; margin: 0;
202
+ }
203
+ .we-li::before {
204
+ content: ''; position: absolute; left: 3px; top: 9px;
205
+ width: 4px; height: 4px; border-radius: 50%;
206
+ background: #5c7cfa;
207
+ }
208
+ /* Numbered lists */
209
+ .we-ol { margin: 0; padding-left: 20px; }
210
+ .we-ol-li { padding: 0; font-size: 13px; line-height: 1.5; margin: 0; }
211
+
212
+ /* Horizontal rule */
213
+ .we-hr { border: none; border-top: 1px solid rgba(255,255,255,0.06); margin: 8px 0; }
214
+
215
+ /* Paragraphs — tight spacing */
216
+ .we-p { margin: 0 0 4px; }
217
+ .we-p:last-child { margin-bottom: 0; }
218
+
219
+ /* Kill any stray <br> gaps inside lists and after headers */
220
+ .we-ul br, .we-ol br { display: none; }
221
+ .we-h2 + br, .we-h3 + br, .we-h4 + br { display: none; }
222
+ .we-markdown br + br { display: none; }
223
+
224
+ /* Links */
225
+ .we-markdown a { color: #74c0fc; text-decoration: none; }
226
+ .we-markdown a:hover { text-decoration: underline; }
227
+
228
+ /* Edit button on user messages — always visible but subtle */
229
+ .we-edit-btn {
230
+ background: none; border: none; color: var(--fg-muted, #555); cursor: pointer;
231
+ font-size: 13px; padding: 2px 6px; opacity: 0.3; transition: opacity 0.15s;
232
+ vertical-align: middle; margin-left: 4px;
233
+ }
234
+ .walle-chat-msg.user:hover .we-edit-btn { opacity: 0.7; }
235
+ .we-edit-btn:hover { opacity: 1 !important; color: var(--accent); }
236
+
237
+ /* Edit inline form */
238
+ .we-edit-row { margin-top: 4px; }
239
+ .we-edit-input {
240
+ width: 100%; padding: 8px 10px; border-radius: 6px;
241
+ border: 1px solid var(--accent); background: var(--bg);
242
+ color: var(--fg); font-size: 13px; resize: vertical;
243
+ min-height: 40px; max-height: 200px; font-family: inherit;
244
+ }
245
+ .we-edit-actions { display: flex; gap: 6px; margin-top: 6px; }
246
+
247
+ /* Attachment preview bar */
248
+ .we-attach-preview {
249
+ display: flex; gap: 8px; padding: 6px 0; flex-wrap: wrap;
250
+ border-top: 1px solid rgba(255,255,255,0.06);
251
+ }
252
+ .we-attach-item {
253
+ position: relative; background: rgba(255,255,255,0.04);
254
+ border-radius: 6px; padding: 4px; border: 1px solid rgba(255,255,255,0.08);
255
+ }
256
+ .we-attach-thumb { height: 48px; border-radius: 4px; display: block; }
257
+ .we-attach-file-name { font-size: 11px; color: var(--fg-muted); padding: 4px 8px; display: block; }
258
+ .we-attach-remove {
259
+ position: absolute; top: -4px; right: -4px; width: 16px; height: 16px;
260
+ border-radius: 50%; background: #e03131; color: #fff; border: none;
261
+ font-size: 10px; cursor: pointer; line-height: 16px; text-align: center; padding: 0;
262
+ }
263
+
264
+ /* Attach button in input row */
265
+ .we-attach-btn {
266
+ display: flex; align-items: center; justify-content: center;
267
+ width: 36px; height: 36px; border-radius: 6px; cursor: pointer;
268
+ font-size: 18px; color: var(--fg-muted, #888); align-self: flex-end;
269
+ transition: background 0.15s;
270
+ }
271
+ .we-attach-btn:hover { background: rgba(255,255,255,0.06); color: var(--fg); }
272
+
273
+ /* Chat images */
274
+ .we-chat-img { max-width: 300px; max-height: 200px; border-radius: 6px; margin-top: 4px; }
275
+ .we-chat-file {
276
+ display: inline-block; padding: 4px 10px; border-radius: 4px;
277
+ background: rgba(255,255,255,0.04); border: 1px solid rgba(255,255,255,0.08);
278
+ font-size: 11px; color: var(--fg-muted); margin-top: 4px;
279
+ }
280
+ .walle-chat-input-row {
281
+ display: flex; gap: 8px; padding-top: 12px;
282
+ border-top: 1px solid var(--border); flex-shrink: 0;
283
+ }
284
+ .walle-chat-input {
285
+ flex: 1; padding: 8px 12px; border-radius: 6px;
286
+ border: 1px solid var(--border); background: var(--bg);
287
+ color: var(--fg); font-size: 13px; resize: none;
288
+ min-height: 40px; max-height: 120px; font-family: inherit;
289
+ }
290
+ .walle-chat-input:focus { outline: none; border-color: var(--accent); }
291
+ .walle-chat-send {
292
+ padding: 8px 16px; border-radius: 6px; border: none;
293
+ background: var(--accent); color: #fff; font-size: 13px;
294
+ cursor: pointer; font-weight: 600; align-self: flex-end;
295
+ }
296
+ .walle-chat-send:hover { opacity: 0.9; }
297
+ .walle-chat-send:disabled { opacity: 0.5; cursor: not-allowed; }
298
+ .walle-chat-typing { font-size: 12px; color: var(--fg-muted, #888); padding: 4px 0; }
299
+
300
+ /* Thinking panel — real-time tool activity during processing */
301
+ .walle-thinking-panel {
302
+ margin: 8px 0 4px;
303
+ padding: 8px 12px;
304
+ background: rgba(59, 130, 246, 0.06);
305
+ border-left: 2px solid rgba(59, 130, 246, 0.4);
306
+ border-radius: 0 4px 4px 0;
307
+ font-size: 12px;
308
+ }
309
+ .walle-thinking-header {
310
+ color: #60a5fa;
311
+ font-weight: 500;
312
+ margin-bottom: 4px;
313
+ }
314
+ .walle-thinking-elapsed { color: #888; font-weight: 400; }
315
+ .walle-thinking-cancel { color: #666; font-weight: 400; font-size: 11px; }
316
+ .walle-thinking-logs { margin-top: 4px; }
317
+ .walle-thinking-log {
318
+ color: #aaa;
319
+ padding: 1px 0;
320
+ line-height: 1.5;
321
+ font-family: 'SF Mono', 'Menlo', 'Monaco', monospace;
322
+ font-size: 11px;
323
+ }
324
+ .walle-thinking-log:last-child { color: #ccc; }
325
+
326
+ /* Task error panel */
327
+ .we-task-error-panel {
328
+ margin-top: 8px;
329
+ background: rgba(224,49,49,0.06);
330
+ border: 1px solid rgba(224,49,49,0.2);
331
+ border-radius: 6px;
332
+ padding: 8px 10px;
333
+ }
334
+ .we-task-error-header {
335
+ display: flex; align-items: center; gap: 8px; font-size: 12px;
336
+ }
337
+ .we-task-error-icon {
338
+ display: inline-flex; align-items: center; justify-content: center;
339
+ width: 18px; height: 18px; border-radius: 50%;
340
+ background: rgba(224,49,49,0.2); color: #e03131;
341
+ font-size: 11px; font-weight: 700; flex-shrink: 0;
342
+ }
343
+ .we-task-error-msg { color: #ff6b6b; flex: 1; }
344
+ .we-task-error-time { color: #666; font-size: 10px; flex-shrink: 0; }
345
+ .we-task-error-details { margin-top: 6px; }
346
+ .we-task-error-details summary {
347
+ font-size: 10px; color: #888; cursor: pointer; user-select: none;
348
+ }
349
+ .we-task-error-details summary:hover { color: #bbb; }
350
+ .we-task-error-pre {
351
+ font-family: 'SF Mono', 'Menlo', 'Monaco', monospace;
352
+ font-size: 11px; line-height: 1.4; color: #c97070;
353
+ background: rgba(0,0,0,0.2); border-radius: 4px;
354
+ padding: 6px 8px; margin-top: 4px; white-space: pre-wrap;
355
+ max-height: 150px; overflow-y: auto; word-break: break-all;
356
+ }
357
+
358
+ /* Task output panel (collapsible) */
359
+ .we-task-output-panel {
360
+ margin-top: 8px;
361
+ border: 1px solid rgba(255,255,255,0.08);
362
+ border-radius: 6px;
363
+ overflow: hidden;
364
+ }
365
+ .we-task-output-header {
366
+ display: flex; align-items: center; gap: 8px;
367
+ padding: 6px 10px; cursor: pointer; user-select: none;
368
+ background: rgba(255,255,255,0.03);
369
+ border-bottom: 1px solid transparent;
370
+ transition: background 0.15s;
371
+ }
372
+ .we-task-output-header:hover { background: rgba(255,255,255,0.05); }
373
+ .we-task-output-label { font-size: 11px; font-weight: 600; color: #60a5fa; }
374
+ .we-task-output-time { font-size: 10px; color: #666; }
375
+ .we-task-output-lines { font-size: 10px; color: #555; margin-left: auto; }
376
+ .we-task-output-toggle::after {
377
+ content: '\25B6'; font-size: 8px; color: #555; margin-left: 4px;
378
+ display: inline-block; transition: transform 0.15s;
379
+ }
380
+ .we-task-output-panel.expanded .we-task-output-toggle::after { transform: rotate(90deg); }
381
+ .we-task-output-summary {
382
+ font-family: 'SF Mono', 'Menlo', 'Monaco', monospace;
383
+ font-size: 11px; line-height: 1.5; color: #9ca3af;
384
+ padding: 6px 10px; white-space: pre-wrap;
385
+ border-top: 1px solid rgba(255,255,255,0.04);
386
+ }
387
+ .we-task-output-full {
388
+ display: none;
389
+ }
390
+ .we-task-output-panel.expanded .we-task-output-full {
391
+ display: block;
392
+ }
393
+ .we-task-output-panel.expanded .we-task-output-summary {
394
+ display: none;
395
+ }
396
+ .we-task-output-panel.expanded .we-task-output-header {
397
+ border-bottom-color: rgba(255,255,255,0.06);
398
+ }
399
+
400
+ /* Copy button in output header */
401
+ .we-task-output-copy {
402
+ background: none; border: 1px solid rgba(255,255,255,0.1);
403
+ color: #666; font-size: 10px; padding: 1px 6px; border-radius: 3px;
404
+ cursor: pointer; margin-left: auto; transition: all 0.15s;
405
+ }
406
+ .we-task-output-copy:hover { color: #aaa; border-color: rgba(255,255,255,0.2); background: rgba(255,255,255,0.05); }
407
+ .we-task-output-lines { margin-left: 0; }
408
+
409
+ /* Markdown rendered output */
410
+ .we-task-output-md {
411
+ padding: 10px 14px;
412
+ overflow-y: auto;
413
+ max-height: 500px;
414
+ }
415
+ .we-task-md {
416
+ font-size: 13px; line-height: 1.6; color: #ccc;
417
+ }
418
+ .we-task-md h1, .we-task-md h2, .we-task-md h3 {
419
+ color: #e2e8f0; margin: 12px 0 6px; font-weight: 600;
420
+ }
421
+ .we-task-md h1 { font-size: 16px; border-bottom: 1px solid rgba(255,255,255,0.08); padding-bottom: 4px; }
422
+ .we-task-md h2 { font-size: 14px; }
423
+ .we-task-md h3 { font-size: 13px; color: #94a3b8; }
424
+ .we-task-md p { margin: 6px 0; }
425
+ .we-task-md ul, .we-task-md ol { margin: 6px 0; padding-left: 20px; }
426
+ .we-task-md li { margin: 3px 0; }
427
+ .we-task-md li::marker { color: #555; }
428
+ .we-task-md code {
429
+ font-family: 'SF Mono', 'Menlo', 'Monaco', monospace;
430
+ font-size: 12px; background: rgba(255,255,255,0.06);
431
+ padding: 1px 5px; border-radius: 3px; color: #e2a8ff;
432
+ }
433
+ .we-task-md pre {
434
+ background: #0d1117; border-radius: 6px; padding: 10px 12px;
435
+ margin: 8px 0; overflow-x: auto; border: 1px solid rgba(255,255,255,0.06);
436
+ }
437
+ .we-task-md pre code {
438
+ background: none; padding: 0; color: #b0bec5; font-size: 11px;
439
+ line-height: 1.5;
440
+ }
441
+ .we-task-md table {
442
+ border-collapse: collapse; width: 100%; margin: 8px 0; font-size: 12px;
443
+ }
444
+ .we-task-md th, .we-task-md td {
445
+ border: 1px solid rgba(255,255,255,0.1); padding: 5px 10px; text-align: left;
446
+ }
447
+ .we-task-md th { background: rgba(255,255,255,0.04); color: #94a3b8; font-weight: 600; font-size: 11px; }
448
+ .we-task-md td { color: #bbb; }
449
+ .we-task-md tr:hover td { background: rgba(255,255,255,0.02); }
450
+ .we-task-md blockquote {
451
+ border-left: 3px solid #3b82f6; margin: 4px 0; padding: 4px 12px;
452
+ color: #94a3b8; background: rgba(59,130,246,0.05); border-radius: 0 4px 4px 0;
453
+ font-size: 12px; line-height: 1.5;
454
+ }
455
+ .we-task-md blockquote p { margin: 2px 0; }
456
+ .we-task-md blockquote strong { color: #60a5fa; }
457
+ .we-task-md blockquote + blockquote { margin-top: 2px; }
458
+ .we-task-md hr { border: none; border-top: 1px solid rgba(255,255,255,0.08); margin: 12px 0; }
459
+ .we-task-md strong { color: #e2e8f0; }
460
+ .we-task-md em { color: #94a3b8; }
461
+ .we-task-md a { color: #60a5fa; text-decoration: none; }
462
+ .we-task-md a:hover { text-decoration: underline; }
463
+ .we-task-md img { max-width: 100%; border-radius: 4px; }
464
+
465
+ /* Markdown in summary (preview) */
466
+ .we-task-output-summary.we-task-md {
467
+ font-family: inherit;
468
+ white-space: normal;
469
+ }
470
+ .we-task-output-summary.we-task-md p { margin: 2px 0; }
471
+ .we-task-output-summary.we-task-md h1,
472
+ .we-task-output-summary.we-task-md h2,
473
+ .we-task-output-summary.we-task-md h3 { font-size: 12px; margin: 4px 0 2px; }
474
+
475
+ /* Execution logs button */
476
+ .we-task-exec-logs { margin-top: 4px; }
477
+ .we-task-logs-btn {
478
+ background: none; border: none; color: #555; font-size: 10px;
479
+ cursor: pointer; padding: 2px 0; text-decoration: underline;
480
+ text-underline-offset: 2px;
481
+ }
482
+ .we-task-logs-btn:hover { color: #888; }
483
+
484
+ /* Task toolbar */
485
+ .we-task-toolbar {
486
+ display: flex; align-items: center; gap: 6px;
487
+ padding: 6px 10px;
488
+ border-bottom: 1px solid rgba(255,255,255,0.06);
489
+ }
490
+ .we-task-toolbar .walle-filter-select { font-size: 11px; padding: 4px 6px; min-width: 80px; }
491
+ .we-task-toolbar .walle-btn { padding: 4px 10px; font-size: 11px; }
492
+
493
+ /* Task summary bar */
494
+ .we-task-summary {
495
+ display: flex; gap: 10px; padding: 4px 12px;
496
+ font-size: 11px; color: #666;
497
+ border-bottom: 1px solid rgba(255,255,255,0.04);
498
+ }
499
+ .we-task-summary-item { cursor: pointer; padding: 2px 6px; border-radius: 3px; user-select: none; }
500
+ .we-task-summary-item:hover { background: rgba(255,255,255,0.06); }
501
+ .we-task-summary-item.active { font-weight: 700; background: rgba(255,255,255,0.08); text-decoration: underline; text-underline-offset: 3px; }
502
+ .we-task-clear-btn {
503
+ cursor: pointer; color: #e03131; font-size: 16px; font-weight: 700;
504
+ padding: 0 4px; border-radius: 3px; line-height: 1;
505
+ }
506
+ .we-task-clear-btn:hover { background: rgba(224,49,49,0.15); }
507
+ .we-task-summary-item.running { color: #228be6; }
508
+ .we-task-summary-item.pending { color: #fab005; }
509
+ .we-task-summary-item.paused { color: #888; }
510
+ .we-task-summary-item.completed { color: #5c940d; }
511
+ .we-task-summary-item.failed { color: #e03131; }
512
+
513
+ /* Task alert banner */
514
+ .we-task-alert {
515
+ display: flex; align-items: center; gap: 8px;
516
+ padding: 8px 12px; margin: 6px 10px;
517
+ background: rgba(224,49,49,0.08);
518
+ border: 1px solid rgba(224,49,49,0.25);
519
+ border-radius: 6px;
520
+ font-size: 12px; color: #fab005;
521
+ }
522
+ .we-task-alert-icon { font-size: 14px; }
523
+ .we-task-alert-text { flex: 1; }
524
+
525
+ /* Task group (collapsible) */
526
+ .we-task-group { margin: 0; }
527
+ .we-task-group-header {
528
+ font-size: 12px; font-weight: 600; padding: 8px 12px;
529
+ cursor: pointer; user-select: none;
530
+ border-bottom: 1px solid rgba(255,255,255,0.04);
531
+ list-style: none;
532
+ }
533
+ .we-task-group-header::-webkit-details-marker { display: none; }
534
+ .we-task-group-header::before {
535
+ content: '\25B6'; font-size: 9px; margin-right: 6px;
536
+ display: inline-block; transition: transform 0.15s;
537
+ }
538
+ .we-task-group[open] > .we-task-group-header::before { transform: rotate(90deg); }
539
+ .we-task-group-header:hover { background: rgba(255,255,255,0.03); }
540
+
541
+ /* Task card */
542
+ .we-task-card {
543
+ background: var(--bg-lighter, #1e1e2e);
544
+ border: 1px solid var(--border, #2a2a3e);
545
+ border-left: 3px solid #888;
546
+ border-radius: 6px;
547
+ padding: 10px 14px;
548
+ margin: 6px 10px;
549
+ }
550
+ .we-task-card-header {
551
+ display: flex; justify-content: space-between; align-items: center;
552
+ margin-bottom: 4px;
553
+ }
554
+ .we-task-card-title { font-size: 13px; font-weight: 600; color: var(--accent, #60a5fa); }
555
+ .we-task-card-status { font-size: 11px; font-weight: 500; text-transform: uppercase; letter-spacing: 0.5px; }
556
+ .we-task-card-desc { font-size: 12px; color: #999; line-height: 1.4; margin-bottom: 4px; }
557
+ .we-task-card-actions { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 6px; }
558
+
559
+ /* Task live logs */
560
+ .we-task-log-panel {
561
+ margin-top: 8px;
562
+ border: 1px solid rgba(59,130,246,0.2);
563
+ border-radius: 4px;
564
+ overflow: hidden;
565
+ }
566
+ .we-task-log-header {
567
+ display: flex; align-items: center; gap: 6px;
568
+ font-size: 11px; color: #60a5fa; padding: 4px 8px;
569
+ background: rgba(59,130,246,0.08);
570
+ border-bottom: 1px solid rgba(59,130,246,0.15);
571
+ }
572
+ .we-task-log-pulse {
573
+ width: 6px; height: 6px; border-radius: 50%;
574
+ background: #60a5fa;
575
+ animation: we-pulse 1.5s ease-in-out infinite;
576
+ }
577
+ @keyframes we-pulse {
578
+ 0%, 100% { opacity: 1; }
579
+ 50% { opacity: 0.3; }
580
+ }
581
+ .we-task-log-content {
582
+ font-family: 'SF Mono', 'Menlo', 'Monaco', monospace;
583
+ font-size: 11px; line-height: 1.5;
584
+ color: #bbb; background: #0d1117;
585
+ margin: 0; padding: 8px; white-space: pre-wrap;
586
+ max-height: 250px; overflow-y: auto;
587
+ }
588
+
589
+ /* Task metadata chips */
590
+ .we-task-meta {
591
+ display: flex; gap: 12px; flex-wrap: wrap;
592
+ font-size: 11px; color: #777; margin: 4px 0;
593
+ }
594
+ .we-task-meta span { white-space: nowrap; }
595
+
596
+ /* Chat search */
597
+ .we-chat-search-bar {
598
+ display: flex;
599
+ align-items: center;
600
+ padding: 4px 8px;
601
+ border-bottom: 1px solid rgba(255,255,255,0.08);
602
+ position: relative;
603
+ }
604
+ .we-chat-search-input {
605
+ flex: 1;
606
+ background: rgba(255,255,255,0.05);
607
+ border: 1px solid rgba(255,255,255,0.1);
608
+ border-radius: 4px;
609
+ color: var(--fg, #e0e0e0);
610
+ padding: 4px 8px;
611
+ font-size: 12px;
612
+ outline: none;
613
+ }
614
+ .we-chat-search-input:focus { border-color: rgba(59,130,246,0.5); }
615
+ .we-chat-search-input::placeholder { color: #666; }
616
+ .we-chat-search-clear {
617
+ background: none; border: none; color: #888; font-size: 16px;
618
+ cursor: pointer; padding: 0 4px; margin-left: 4px;
619
+ }
620
+ .we-chat-search-clear:hover { color: #ccc; }
621
+ .we-search-results { background: rgba(0,0,0,0.15); }
622
+ .we-search-header {
623
+ font-size: 11px; color: #888; padding: 6px 10px;
624
+ border-bottom: 1px solid rgba(255,255,255,0.06);
625
+ }
626
+ .we-search-result {
627
+ padding: 6px 10px;
628
+ border-bottom: 1px solid rgba(255,255,255,0.04);
629
+ }
630
+ .we-search-result:hover { background: rgba(255,255,255,0.03); }
631
+ .we-search-result-meta { font-size: 11px; margin-bottom: 2px; }
632
+ .we-search-result-time { color: #666; font-size: 10px; margin-left: 6px; }
633
+ .we-search-result-text { font-size: 12px; color: #bbb; line-height: 1.4; }
634
+ .we-search-highlight { background: rgba(250, 204, 21, 0.3); color: #fff; border-radius: 2px; padding: 0 1px; }
635
+
636
+ /* Select mode & export */
637
+ .we-select-toggle {
638
+ background: none; border: 1px solid rgba(255,255,255,0.1); color: #888;
639
+ font-size: 14px; cursor: pointer; padding: 2px 6px; border-radius: 4px;
640
+ margin-left: 4px; line-height: 1;
641
+ }
642
+ .we-select-toggle:hover { color: #ccc; border-color: rgba(255,255,255,0.2); }
643
+ .we-select-toggle.active { color: #60a5fa; border-color: rgba(59,130,246,0.5); background: rgba(59,130,246,0.1); }
644
+ .we-export-bar {
645
+ display: flex; align-items: center; gap: 8px;
646
+ padding: 4px 10px; background: rgba(59,130,246,0.08);
647
+ border-bottom: 1px solid rgba(59,130,246,0.2);
648
+ font-size: 12px;
649
+ }
650
+ .we-export-count { color: #60a5fa; font-weight: 500; margin-right: auto; }
651
+ .we-turn-group.we-selected { background: rgba(59,130,246,0.08); }
652
+ .we-turn-checkbox {
653
+ font-size: 16px; color: #60a5fa; cursor: pointer;
654
+ position: absolute; left: 4px; top: 8px;
655
+ }
656
+ .we-turn-group { position: relative; }
657
+ .we-turn-group[onclick] { cursor: pointer; padding-left: 24px; }
658
+ .we-turn-group[onclick]:hover { background: rgba(255,255,255,0.02); }
659
+ .we-turn-group[onclick] .we-turn-checkbox { pointer-events: none; }
660
+
661
+ /* Actions */
662
+ .walle-action-card {
663
+ background: var(--bg-lighter, #1e1e2e); border: 1px solid var(--border);
664
+ border-radius: 8px; padding: 12px 16px; margin-bottom: 10px;
665
+ }
666
+ .walle-action-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; }
667
+ .walle-action-type { font-size: 11px; font-weight: 600; color: var(--accent); }
668
+ .walle-action-confidence { font-size: 11px; color: var(--fg-muted, #888); }
669
+ .walle-action-content { font-size: 12px; color: var(--fg); margin-bottom: 8px; white-space: pre-wrap; }
670
+ .walle-action-target { font-size: 11px; color: var(--fg-muted, #888); margin-bottom: 8px; }
671
+ .walle-action-buttons { display: flex; gap: 8px; align-items: center; }
672
+ .walle-action-reject-input {
673
+ flex: 1; padding: 4px 8px; border-radius: 4px; border: 1px solid var(--border);
674
+ background: var(--bg); color: var(--fg); font-size: 11px;
675
+ }
676
+
677
+ /* Confidence bars */
678
+ .walle-confidence-row { display: flex; align-items: center; gap: 12px; padding: 6px 0; border-bottom: 1px solid rgba(255,255,255,0.05); }
679
+ .walle-confidence-domain { font-size: 12px; color: var(--fg); min-width: 120px; }
680
+ .walle-confidence-tier { font-size: 11px; font-weight: 700; min-width: 50px; }
681
+ .walle-confidence-tier.t1 { color: #888; }
682
+ .walle-confidence-tier.t2 { color: #e8590c; }
683
+ .walle-confidence-tier.t3 { color: #5c940d; }
684
+ .walle-confidence-tier.t4 { color: var(--accent); }
685
+ .walle-confidence-stats { font-size: 10px; color: var(--fg-muted, #888); }
686
+
687
+ /* Briefing Items Table */
688
+ .we-briefing-items { margin-top: 8px; }
689
+ .we-briefing-table {
690
+ width: 100%; border-collapse: collapse; font-size: 12px;
691
+ }
692
+ .we-briefing-table thead th {
693
+ text-align: left; font-size: 10px; font-weight: 600; color: #888;
694
+ text-transform: uppercase; letter-spacing: 0.5px;
695
+ padding: 4px 8px; border-bottom: 1px solid rgba(255,255,255,0.1);
696
+ }
697
+ .we-briefing-row td {
698
+ padding: 6px 8px; border-bottom: 1px solid rgba(255,255,255,0.04);
699
+ vertical-align: middle;
700
+ }
701
+ .we-briefing-row:hover { background: rgba(255,255,255,0.03); }
702
+ .we-briefing-title { color: var(--fg); max-width: 300px; }
703
+ .we-briefing-owner { color: #999; white-space: nowrap; }
704
+ .we-briefing-urgency { font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.3px; }
705
+ .we-briefing-actions { white-space: nowrap; }
706
+
707
+ .we-briefing-stale td { opacity: 0.7; }
708
+ .we-briefing-snoozed td { opacity: 0.5; font-style: italic; }
709
+
710
+ .we-briefing-badge {
711
+ display: inline-block; font-size: 9px; font-weight: 600; padding: 1px 5px;
712
+ border-radius: 3px; vertical-align: middle;
713
+ }
714
+ .we-briefing-badge.stale { background: rgba(250,176,5,0.15); color: #fab005; }
715
+ .we-briefing-badge.snoozed { background: rgba(136,136,136,0.15); color: #888; }
716
+ .we-briefing-note { font-size: 10px; color: #60a5fa; cursor: help; }
717
+
718
+ /* Briefing item action buttons */
719
+ .we-bi-btn {
720
+ background: transparent; border: 1px solid rgba(255,255,255,0.12);
721
+ color: #999; font-size: 10px; padding: 2px 7px; border-radius: 3px;
722
+ cursor: pointer; margin-right: 2px;
723
+ }
724
+ .we-bi-btn:hover { border-color: rgba(255,255,255,0.3); color: #ccc; }
725
+ .we-bi-btn.ask { color: #60a5fa; border-color: rgba(96,165,250,0.3); }
726
+ .we-bi-btn.ask:hover { background: rgba(96,165,250,0.1); color: #93c5fd; }
727
+ .we-bi-btn.done { color: #5c940d; border-color: rgba(92,148,13,0.3); }
728
+ .we-bi-btn.done:hover { background: rgba(92,148,13,0.1); }
729
+ .we-bi-btn.snooze { color: #fab005; border-color: rgba(250,176,5,0.3); }
730
+ .we-bi-btn.snooze:hover { background: rgba(250,176,5,0.1); }
731
+ .we-bi-btn.dismiss { color: #666; border-color: rgba(255,255,255,0.08); }
732
+ .we-bi-btn.dismiss:hover { color: #e03131; border-color: rgba(224,49,49,0.3); }