@cccarv82/freya 1.0.53 → 1.0.55

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.
@@ -25,6 +25,12 @@ Do not invent status updates.
25
25
  * **Keywords:** "Tarefa", "Task", "To-Do", "Fazer", "Agenda", "Delegado".
26
26
  * **Target File:** `data/tasks/task-log.json`.
27
27
  * **Action:** Read file directly.
28
+ * **If Daily Log Query:**
29
+ * **Keywords:** "log diário", "diário", "daily log", "anotações", "o que anotei", "ontem", "hoje", "semana passada".
30
+ * **Target Folder:** `logs/daily/`.
31
+ * **If date provided:** Read `logs/daily/YYYY-MM-DD.md`.
32
+ * **If date is relative (hoje/ontem):** Resolve to an exact date and read the matching file.
33
+ * **If no specific date or file missing:** Route to **Search** across `logs/daily/` (or ask the user to refine the date). If Search is unavailable, say you have no records for that date and offer to list available log dates.
28
34
  * **If Project Query:**
29
35
  * Proceed to Project Lookup (Glob search).
30
36
  * **Strategy:** Search recursively in `data/Clients`.
@@ -46,7 +52,13 @@ Do not invent status updates.
46
52
  * **Context:** "Aqui estão suas tarefas pendentes [{Category}]:"
47
53
  * **List:** Bullet points.
48
54
  * Format: `* [ID-Short] {Description} ({Priority})`
49
- * **Empty:** "Você não tem tarefas pendentes nesta categoria."
55
+ * **Empty:** "Você não tem tarefas pendentes nesta categoria."
56
+
57
+ * **Daily Log Logic:**
58
+ * Read the Markdown file from `logs/daily/YYYY-MM-DD.md`.
59
+ * Return a concise excerpt (first few meaningful lines or bullet points).
60
+ * If the file is empty, say: "Log registrado sem detalhes para essa data."
61
+ * If the file does not exist: "Não encontrei log diário para esta data."
50
62
 
51
63
  * **Project Logic:**
52
64
  * If matches found: Read the `status.json` file(s).
package/README.md CHANGED
@@ -8,7 +8,7 @@ F.R.E.Y.A. é um sistema de agentes de IA projetado para organizar seu trabalho,
8
8
 
9
9
  * **Ingestão Universal:** Registre updates, blockers e notas mentais em linguagem natural.
10
10
  * **Gestão de Tarefas:** Crie, liste e conclua tarefas ("Lembre-me de fazer X", "Minhas tarefas", "Terminei X").
11
- * **Oráculo:** Pergunte sobre o status de qualquer projeto ("Como está o projeto X?").
11
+ * **Oráculo:** Pergunte sobre o status de qualquer projeto ("Como está o projeto X?") e recupere logs diários ("O que anotei ontem?").
12
12
  * **Career Coach:** Gere "Brag Sheets" automáticas para suas avaliações de desempenho.
13
13
  * **Relatórios Automatizados:** Gere resumos semanais, dailies, relatório de Scrum Master e relatórios executivos.
14
14
  * **Blockers & Riscos:** Gere um relatório rápido de blockers priorizados por severidade.
package/cli/web-ui.css CHANGED
@@ -28,16 +28,18 @@
28
28
  }
29
29
 
30
30
  [data-theme="dark"] {
31
- --bg: #0b111c;
32
- --paper: rgba(17, 24, 39, .92);
33
- --paper2: rgba(17, 24, 39, .78);
34
- --line: rgba(148, 163, 184, .16);
35
- --line2: rgba(148, 163, 184, .26);
31
+ --bg: #0f1113;
32
+ --paper: rgba(20, 22, 25, .98);
33
+ --paper2: rgba(27, 30, 34, .92);
34
+ --line: rgba(255, 255, 255, .08);
35
+ --line2: rgba(255, 255, 255, .18);
36
36
  --text: #e5e7eb;
37
- --muted: rgba(229, 231, 235, .78);
38
- --faint: rgba(229, 231, 235, .56);
39
- --chip: rgba(37, 99, 235, .16);
40
- --chip2: rgba(249, 115, 22, .18);
37
+ --muted: rgba(229, 231, 235, .72);
38
+ --faint: rgba(229, 231, 235, .50);
39
+ --chip: rgba(45, 212, 191, .15);
40
+ --chip2: rgba(56, 189, 248, .18);
41
+ --accent: #2dd4bf;
42
+ --primary: #22d3ee;
41
43
  }
42
44
 
43
45
  * { box-sizing: border-box; }
@@ -62,13 +64,14 @@
62
64
  body {
63
65
  margin: 0;
64
66
  font-family: var(--sans);
65
- background:
66
- radial-gradient(900px 400px at 12% 0%, rgba(249,115,22,.12), transparent 60%),
67
- radial-gradient(900px 450px at 90% 8%, rgba(37,99,235,.14), transparent 60%),
68
- var(--bg);
67
+ background: var(--bg);
69
68
  color: var(--text);
70
69
  }
71
70
 
71
+ [data-theme="dark"] body {
72
+ background: radial-gradient(800px 360px at 65% 10%, rgba(45,212,191,.10), transparent 55%), var(--bg);
73
+ }
74
+
72
75
  .app { padding: 18px; }
73
76
 
74
77
  .frame {
@@ -78,45 +81,68 @@ body {
78
81
  overflow: hidden;
79
82
  box-shadow: var(--shadow);
80
83
  border: 1px solid var(--line);
81
- background: rgba(255, 250, 242, .35);
84
+ background: var(--paper2);
82
85
  }
83
86
 
84
87
  .shell {
85
88
  display: grid;
86
- grid-template-columns: 290px minmax(520px, 1fr) 380px;
89
+ grid-template-columns: 72px minmax(520px, 1fr) 360px;
87
90
  height: calc(100vh - 36px);
88
91
  min-height: 0;
89
92
  }
90
93
 
91
94
  @media (max-width: 1200px) {
92
- .shell { grid-template-columns: 280px 1fr; }
95
+ .shell { grid-template-columns: 72px 1fr; }
93
96
  .chatPane { display: none; }
94
97
  }
95
98
 
96
99
  @media (max-width: 860px) {
97
100
  .shell { grid-template-columns: 1fr; }
98
- .sidebar { border-right: none; border-bottom: 1px solid var(--line); }
101
+ .rail { display: none; }
99
102
  }
100
103
 
101
- /* LEFT */
102
- .sidebar {
103
- overflow: auto;
104
- min-height: 0;
105
- background: linear-gradient(180deg, rgba(255,250,242,.85), rgba(255,250,242,.60));
104
+ /* LEFT RAIL */
105
+ .rail {
106
+ background: var(--paper);
106
107
  border-right: 1px solid var(--line);
107
- padding: 14px;
108
+ display: flex;
109
+ flex-direction: column;
110
+ align-items: center;
111
+ padding: 16px 10px;
112
+ gap: 14px;
108
113
  }
109
114
 
110
- [data-theme="dark"] .sidebar {
111
- background: linear-gradient(180deg, rgba(17,24,39,.92), rgba(17,24,39,.68));
115
+ .railTop { display: flex; align-items: center; justify-content: center; width: 100%; }
116
+ .railLogo {
117
+ width: 38px;
118
+ height: 38px;
119
+ border-radius: 14px;
120
+ background: rgba(45, 212, 191, .18);
121
+ color: var(--text);
122
+ display: grid;
123
+ place-items: center;
124
+ font-weight: 700;
125
+ font-size: 14px;
126
+ border: 1px solid var(--line2);
112
127
  }
113
128
 
114
- .sideHeader {
115
- display: flex;
116
- align-items: center;
117
- justify-content: space-between;
118
- padding: 6px 6px 12px;
129
+ .railNav { display: flex; flex-direction: column; gap: 10px; width: 100%; align-items: center; }
130
+ .railBtn {
131
+ width: 38px;
132
+ height: 38px;
133
+ border-radius: 12px;
134
+ border: 1px solid var(--line);
135
+ background: rgba(255,255,255,.04);
136
+ color: var(--muted);
137
+ display: grid;
138
+ place-items: center;
139
+ font-size: 12px;
140
+ cursor: pointer;
119
141
  }
142
+ .railBtn.active { border-color: rgba(45,212,191,.5); color: var(--text); box-shadow: 0 0 0 1px rgba(45,212,191,.35); }
143
+ .railBtn:hover { border-color: var(--line2); }
144
+ .railBottom { margin-top: auto; padding-bottom: 6px; }
145
+ .railToggle { width: 44px; height: 44px; font-size: 11px; }
120
146
 
121
147
  .sideHeader .logo {
122
148
  font-weight: 900;
@@ -158,62 +184,102 @@ body {
158
184
  width: 100%;
159
185
  text-align: left;
160
186
  border: 1px solid var(--line);
161
- border-radius: 14px;
162
- background: var(--paper2);
187
+ border-radius: 12px;
188
+ background: rgba(0,0,0,.18);
163
189
  padding: 10px 12px;
164
190
  cursor: pointer;
165
191
  display: flex;
166
192
  align-items: center;
167
193
  gap: 10px;
168
- font-weight: 800;
194
+ font-weight: 700;
169
195
  color: var(--muted);
170
196
  }
171
197
  .miniCard:hover { border-color: var(--line2); box-shadow: var(--shadow2); }
172
198
 
173
199
  .miniIcon {
174
- width: 26px;
175
- height: 26px;
176
- border-radius: 10px;
200
+ width: 24px;
201
+ height: 24px;
202
+ border-radius: 8px;
177
203
  display: grid;
178
204
  place-items: center;
179
- background: var(--chip);
205
+ background: rgba(45,212,191,.18);
180
206
  border: 1px solid var(--line);
181
207
  color: var(--primary);
182
- font-weight: 900;
208
+ font-weight: 800;
183
209
  }
184
- .miniIcon.warn { background: var(--chip2); color: var(--accent); }
210
+ .miniIcon.warn { background: rgba(56,189,248,.18); color: var(--accent); }
185
211
 
186
212
  /* CENTER */
187
213
  .center {
188
- background: rgba(255, 250, 242, .58);
214
+ background: transparent;
189
215
  display: flex;
190
216
  flex-direction: column;
191
217
  min-height: 0;
218
+ padding: 8px 0 18px;
192
219
  }
193
- [data-theme="dark"] .center { background: rgba(10, 14, 26, .55); }
194
220
 
195
221
  .topbar {
196
222
  display: flex;
197
223
  justify-content: space-between;
198
224
  align-items: center;
199
- padding: 14px 16px;
200
- border-bottom: 1px solid var(--line);
201
- background: linear-gradient(90deg, rgba(255,250,242,.75), rgba(255,250,242,.45));
225
+ padding: 16px 20px 10px;
226
+ background: transparent;
202
227
  }
203
228
 
204
- [data-theme="dark"] .topbar { background: linear-gradient(90deg, rgba(17,24,39,.88), rgba(17,24,39,.55)); }
205
-
206
- .brand { display: flex; align-items: center; gap: 10px; font-weight: 900; font-size: 12px; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); }
207
- .spark { width: 10px; height: 10px; border-radius: 4px; background: linear-gradient(135deg, var(--accent), var(--primary)); box-shadow: 0 0 0 6px rgba(249,115,22,.10); }
208
- .actions { display: flex; align-items: center; gap: 10px; }
209
- .chip { font-family: var(--mono); font-size: 12px; padding: 7px 10px; border-radius: 999px; border: 1px solid var(--line); background: rgba(255,250,242,.65); color: var(--faint); }
210
- [data-theme="dark"] .chip { background: rgba(0,0,0,.20); }
211
- .toggle { border: 1px solid var(--line); border-radius: 999px; background: var(--paper2); padding: 7px 10px; cursor: pointer; color: var(--muted); font-weight: 800; font-size: 12px; }
229
+ .brandLine { display: flex; align-items: center; gap: 12px; }
230
+ .brandStack { display: flex; flex-direction: column; gap: 2px; }
231
+ .brand { font-weight: 700; font-size: 13px; letter-spacing: .14em; text-transform: uppercase; color: var(--muted); }
232
+ .brandSub { font-size: 12px; color: var(--faint); }
233
+ .spark { width: 10px; height: 10px; border-radius: 4px; background: linear-gradient(135deg, var(--accent), var(--primary)); box-shadow: 0 0 0 6px rgba(45,212,191,.10); }
234
+ .topActions { display: flex; align-items: center; gap: 10px; }
235
+ .chip { font-family: var(--mono); font-size: 12px; padding: 7px 10px; border-radius: 999px; border: 1px solid var(--line); background: rgba(0,0,0,.22); color: var(--faint); }
212
236
 
213
237
  .centerBody {
214
- padding: 16px;
238
+ padding: 16px 20px 20px;
215
239
  overflow: auto;
216
240
  min-height: 0;
241
+ display: flex;
242
+ flex-direction: column;
243
+ gap: 18px;
244
+ }
245
+
246
+ .promptShell { display: flex; justify-content: center; }
247
+ .promptBar {
248
+ width: min(720px, 100%);
249
+ background: var(--paper);
250
+ border: 1px solid var(--line);
251
+ border-radius: 16px;
252
+ padding: 14px;
253
+ display: flex;
254
+ flex-direction: column;
255
+ gap: 10px;
256
+ box-shadow: var(--shadow2);
257
+ }
258
+ .promptMeta { display: flex; justify-content: space-between; align-items: center; }
259
+ .promptTitle { font-size: 11px; text-transform: uppercase; letter-spacing: .2em; color: var(--faint); }
260
+ .promptActions { display: flex; gap: 10px; flex-wrap: wrap; }
261
+ .promptToggles { display: flex; gap: 14px; flex-wrap: wrap; }
262
+
263
+ .utilityGrid {
264
+ display: grid;
265
+ grid-template-columns: repeat(2, minmax(0, 1fr));
266
+ gap: 14px;
267
+ }
268
+
269
+ .utilityCard {
270
+ background: var(--paper);
271
+ border: 1px solid var(--line);
272
+ border-radius: 16px;
273
+ padding: 14px;
274
+ box-shadow: var(--shadow2);
275
+ }
276
+
277
+ .utilityHead {
278
+ font-size: 12px;
279
+ text-transform: uppercase;
280
+ letter-spacing: .18em;
281
+ color: var(--muted);
282
+ margin-bottom: 10px;
217
283
  }
218
284
  .centerHead { display: flex; justify-content: space-between; align-items: flex-end; gap: 18px; margin-bottom: 14px; }
219
285
  .statusLine { display:flex; align-items:center; justify-content:flex-end; gap: 12px; }
@@ -257,21 +323,21 @@ h1 { margin: 0; font-size: 22px; letter-spacing: -.02em; }
257
323
 
258
324
  /* FORMS */
259
325
  label { display: block; font-size: 12px; color: var(--muted); margin-bottom: 6px; }
260
- input { width: 100%; padding: 11px 12px; border-radius: 12px; border: 1px solid var(--line); background: rgba(255,255,255,.72); color: var(--text); outline: none; }
261
- [data-theme="dark"] input { background: rgba(0,0,0,.16); }
262
- input:focus { box-shadow: var(--ring); border-color: rgba(37,99,235,.35); }
326
+ input { width: 100%; padding: 11px 12px; border-radius: 12px; border: 1px solid var(--line); background: rgba(0,0,0,.22); color: var(--text); outline: none; }
327
+ [data-theme="dark"] input { background: rgba(0,0,0,.22); }
328
+ input:focus { box-shadow: var(--ring); border-color: rgba(45,212,191,.35); }
263
329
  textarea {
264
330
  width: 100%;
265
331
  padding: 10px 12px;
266
332
  border-radius: 12px;
267
333
  border: 1px solid var(--line);
268
- background: rgba(255,255,255,.72);
334
+ background: rgba(0,0,0,.22);
269
335
  color: var(--text);
270
336
  outline: none;
271
337
  resize: vertical;
272
338
  }
273
- [data-theme="dark"] textarea { background: rgba(0,0,0,.16); }
274
- textarea:focus { box-shadow: var(--ring); border-color: rgba(37,99,235,.35); }
339
+ [data-theme="dark"] textarea { background: rgba(0,0,0,.22); }
340
+ textarea:focus { box-shadow: var(--ring); border-color: rgba(45,212,191,.35); }
275
341
 
276
342
  .row { display: grid; grid-template-columns: 1fr auto; gap: 10px; align-items: center; }
277
343
  .stack { display: flex; gap: 10px; flex-wrap: wrap; }
@@ -282,16 +348,16 @@ textarea:focus { box-shadow: var(--ring); border-color: rgba(37,99,235,.35); }
282
348
  .btn {
283
349
  border: 1px solid var(--line);
284
350
  border-radius: 12px;
285
- background: var(--paper2);
351
+ background: rgba(0,0,0,.20);
286
352
  padding: 10px 12px;
287
353
  cursor: pointer;
288
- font-weight: 900;
354
+ font-weight: 700;
289
355
  color: var(--muted);
290
356
  }
291
357
 
292
358
  .btn:hover { border-color: var(--line2); box-shadow: var(--shadow2); }
293
359
  .btn.small { padding: 7px 10px; border-radius: 10px; font-size: 12px; }
294
- .btn.primary { background: rgba(37,99,235,.12); border-color: rgba(37,99,235,.34); color: rgba(37,99,235,.95); }
360
+ .btn.primary { background: rgba(45,212,191,.18); border-color: rgba(45,212,191,.45); color: rgba(45,212,191,.95); }
295
361
  .sideBtn { width: 100%; text-align: left; margin-top: 8px; }
296
362
 
297
363
  .k {
@@ -329,18 +395,15 @@ textarea:focus { box-shadow: var(--ring); border-color: rgba(37,99,235,.35); }
329
395
  /* RIGHT: CHAT */
330
396
  .chatPane {
331
397
  border-left: 1px solid var(--line);
332
- background: linear-gradient(180deg, rgba(255,250,242,.82), rgba(255,250,242,.60));
398
+ background: var(--paper);
333
399
  display: grid;
334
- grid-template-rows: auto 1fr auto;
400
+ grid-template-rows: auto 1fr;
335
401
  overflow: hidden;
336
402
  min-height: 0;
337
403
  }
338
- [data-theme="dark"] .chatPane {
339
- background: linear-gradient(180deg, rgba(17,24,39,.92), rgba(17,24,39,.68));
340
- }
341
404
 
342
- .chatHead { padding: 14px; border-bottom: 1px solid var(--line); }
343
- .chatTitle { font-weight: 950; letter-spacing: -.01em; }
405
+ .chatHead { padding: 18px 16px; border-bottom: 1px solid var(--line); }
406
+ .chatTitle { font-weight: 800; letter-spacing: -.01em; }
344
407
  .chatSub { margin-top: 2px; font-size: 12px; color: var(--faint); }
345
408
 
346
409
  .chatThread {
@@ -389,12 +452,7 @@ textarea:focus { box-shadow: var(--ring); border-color: rgba(37,99,235,.35); }
389
452
  }
390
453
  [data-theme="dark"] .bubble.assistant { background: rgba(0,0,0,.18); }
391
454
 
392
- .chatComposer {
393
- padding: 12px 14px 14px;
394
- border-top: 1px solid var(--line);
395
- background: rgba(255,250,242,.55);
396
- }
397
- [data-theme="dark"] .chatComposer { background: rgba(0,0,0,.12); }
455
+ .chatComposer { display: none; }
398
456
 
399
457
  .composerActions { display: flex; gap: 10px; margin-top: 10px; flex-wrap: wrap; }
400
458
  .composerToggles { margin-top: 10px; display: grid; gap: 6px; }
package/cli/web-ui.js CHANGED
@@ -26,7 +26,7 @@
26
26
  }
27
27
 
28
28
  function toggleTheme() {
29
- const t = localStorage.getItem('freya.theme') || 'light';
29
+ const t = localStorage.getItem('freya.theme') || 'dark';
30
30
  applyTheme(t === 'dark' ? 'light' : 'dark');
31
31
  }
32
32
 
@@ -988,7 +988,7 @@
988
988
  }
989
989
 
990
990
  // init
991
- applyTheme(localStorage.getItem('freya.theme') || 'light');
991
+ applyTheme(localStorage.getItem('freya.theme') || 'dark');
992
992
  $('chipPort').textContent = location.host;
993
993
  loadLocal();
994
994