daily-focus 1.2.0-dev.10 → 1.2.0-dev.12

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.
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  loadConfig
3
- } from "./chunk-J7ZYVUG6.js";
3
+ } from "./chunk-DPMHC72S.js";
4
4
  import {
5
5
  IN_NPX_CACHE,
6
6
  PACKAGED,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "daily-focus",
3
- "version": "1.2.0-dev.10",
3
+ "version": "1.2.0-dev.12",
4
4
  "description": "An interactive dashboard of what you should focus on today at work",
5
5
  "keywords": [
6
6
  "dashboard",
package/prompts/README.md CHANGED
@@ -5,12 +5,13 @@
5
5
  | [`morning-brief-work.md`](./morning-brief-work.md) | The prompt for the work briefing agent, run once every workday morning. |
6
6
  | [`morning-brief-personal.md`](./morning-brief-personal.md) | The prompt for the personal briefing agent: email, family calendars, Apple Reminders, Apple Messages, e-Boks and the user's own GitHub projects. |
7
7
  | [`assistant.md`](./assistant.md) | The instructions for the on-demand assistant, which the server runs headless when the user presses Ask on a row. One file for both profiles. Linked into the store as `assistant.md`. |
8
+ | [`onboarding.md`](./onboarding.md) | The instructions for the setup screen's CLI sessions, one per question, which propose the answer a new user most likely wants. Not linked into the store: the server reads it from the running copy and inlines it, as it does the assistant's. |
8
9
 
9
- All three are **nothing but prompt** — each is read verbatim by its agent, so anything
10
+ All four are **nothing but prompt** — each is read verbatim by its agent, so anything
10
11
  else in there is either noise the agent has to skip or, worse, an instruction it
11
12
  might try to act on. Notes about the prompts belong in this file instead.
12
13
 
13
- The assistant's file differs from the other two in one way: the server does read it.
14
+ The assistant's file differs from the briefing prompts in one way: the server does read it.
14
15
  It is the server that starts the assistant, so it is the server that inlines these
15
16
  instructions ahead of the row and the request on the first turn of a session. The
16
17
  quick actions the panel offers are sentences in `src/assistant.ts`, not in the
@@ -32,14 +33,16 @@ alongside `items.schema.json`, so a run only ever names a path inside the store:
32
33
  ~/.daily-focus/
33
34
  prompt.md → prompts/morning-brief-work.md (symlink, made by the dashboard at start)
34
35
  items.schema.json → schema/items.schema.json (symlink, made by the dashboard at start)
35
- focus.md you write it, in the dashboard or by hand
36
- sources.md you write it, in the dashboard or by hand
36
+ focus.md you write it, on the setup screen, in the dashboard or by hand
37
+ sources.md you write it, on the setup screen, in the dashboard or by hand
37
38
  settings.json the dashboard writes: what you set on its settings page
39
+ agent-settings.json the dashboard writes before every run: the settings the agent reads
38
40
  items.json the agent writes it
39
41
  actions.jsonl the dashboard appends
40
42
  agent.jsonl the dashboard appends: every run, its report, and the questions asked of it
41
43
  archive/ the dashboard writes
42
44
  prs.json the dashboard writes: its last fetch of the user's open pull requests
45
+ onboarding.json the dashboard writes: the setup screen's answers, and what was proposed for them
43
46
  ```
44
47
 
45
48
  That boundary is the point, and it is worth being strict about. A prompt that reaches
@@ -69,6 +72,12 @@ it. Nothing else is handed over: no extra instructions, no checkout, no copy of
69
72
  prompt. Everything that evolves lives in the prompt, in git, where a change to it is
70
73
  reviewable, and the wrapper should never need editing.
71
74
 
75
+ A setting that changes how the agent gathers, such as searching deleted mail, reaches
76
+ it the same way everything else does: through the store. Before each run the dashboard
77
+ writes `agent-settings.json` with the values it is running with, whether they were
78
+ saved on the settings page or set in `.env`, and both prompts say what each key means.
79
+ The wrapper stays the same whatever the settings are.
80
+
72
81
  Which days it runs is `DAILY_FOCUS_AGENT_DAYS` — cron-numbered, so `1-5` is Mon–Fri
73
82
  and `0-4` is the Sun–Thu week — and Mon–Fri when unset. The same schedule drives the
74
83
  staleness banner, which turns red once the brief is more than 24 *working* hours old,
@@ -24,6 +24,10 @@ not for you.
24
24
  gather and how to judge it; that file says *who* and *where*.
25
25
  - `items.schema.json` — **you only ever read this.** The machine-readable shape of
26
26
  `items.json`. Validate against it in step 5 if you can.
27
+ - `agent-settings.json` — **you only ever read this.** The choices the user made on
28
+ the dashboard's settings page about how you gather, rewritten by the dashboard
29
+ before every run. Each key is explained where it applies below; a missing file or
30
+ key means that key's default.
27
31
  - `prs.json` — **you only ever read this.** The dashboard's own cache of the pull
28
32
  requests the user has open, refreshed while the dashboard is in use. Facts only —
29
33
  reviews, checks, who last acted — with no judgement attached; use it if it helps,
@@ -148,6 +152,12 @@ and anything filters moved out of the inbox, included. Mail the user filed is no
148
152
  mail they finished with. **Do not limit the search to unread mail**: the things that
149
153
  rot are the ones the user opened, meant to deal with, and didn't.
150
154
 
155
+ Mail the user deleted is mail they finished with, so leave Trash out unless
156
+ `searchTrash` in `agent-settings.json` is `true` (default `false`). A search with no
157
+ `in:` operator already covers archived mail and skips Trash and Spam; when the
158
+ setting is off, don't widen it with `in:anywhere` or a trash option. When it is on,
159
+ search Trash as well, and still never Spam.
160
+
151
161
  **On a first run, search the last 90 days.** The point of that run is to find what
152
162
  fell through the cracks: a reply the user owes, a bill, a form, a booking to confirm,
153
163
  a promise they made in a thread. Afterwards, use the normal window from step 1.
@@ -22,6 +22,10 @@ not for you.
22
22
  how to judge it; that file says *who* and *where*.
23
23
  - `items.schema.json` — **you only ever read this.** The machine-readable shape of
24
24
  `items.json`. Validate against it in step 5 if you can.
25
+ - `agent-settings.json` — **you only ever read this.** The choices the user made on
26
+ the dashboard's settings page about how you gather, rewritten by the dashboard
27
+ before every run. Each key is explained where it applies below; a missing file or
28
+ key means that key's default.
25
29
 
26
30
  There is also an `archive/` directory of dated past briefs. The dashboard maintains
27
31
  it; you never write to it. Read it if you want history — it is how the dashboard
@@ -167,6 +171,12 @@ the user's filters moved out of the inbox, included. Mail they filed is not mail
167
171
  finished with, and a label records how they sorted something, not whether they dealt
168
172
  with it.
169
173
 
174
+ Mail the user deleted is mail they finished with, so leave Trash out unless
175
+ `searchTrash` in `agent-settings.json` is `true` (default `false`). A search with no
176
+ `in:` operator already covers archived mail and skips Trash and Spam; when the
177
+ setting is off, don't widen it with `in:anywhere` or a trash option. When it is on,
178
+ search Trash as well, and still never Spam.
179
+
170
180
  Prioritise direct requests, deadlines, decisions, travel and logistics,
171
181
  finance/legal/security, and anyone plausibly waiting on a reply. **Do not limit
172
182
  continuity-sensitive searches to unread mail** — the things that rot are usually the
@@ -0,0 +1,41 @@
1
+ # Setting up Daily Focus
2
+
3
+ You are helping someone set up Daily Focus, a dashboard that has a coding-agent CLI
4
+ write them a short brief each morning: what needs to get done today, from their
5
+ mail, calendar, pull requests, tickets and documents.
6
+
7
+ They are on the setup screen now. It asks them one question at a time, and each
8
+ question comes with the answer they most likely want already ticked, so most of
9
+ the time all they do is confirm. Your job in this session is that one question,
10
+ named below: find out enough to propose the answer, and say why in a sentence.
11
+
12
+ ## How to work
13
+
14
+ - **Only read.** Never send, post, create, edit, move or delete anything,
15
+ anywhere: no mail, no drafts, no calendar changes, no comments, no files.
16
+ - **Be quick.** Someone is waiting on this. A few well-chosen lookups, then
17
+ answer. If something would take long to find out, make the likely guess and
18
+ say it is a guess.
19
+ - **Nobody can answer you mid-turn.** Never ask a question; the screen does the
20
+ asking. If a tool or account isn't reachable, work with what is and say what
21
+ you couldn't check.
22
+ - **Guess well.** A question for the *work* profile wants work accounts,
23
+ calendars and projects; for *personal*, everything else. Lean towards what the
24
+ morning brief needs and away from noise.
25
+ - **Say why in one or two short sentences**, under 40 words, in the first
26
+ person and plain text, no Markdown: "These are on your northwind.dev account,
27
+ where most of this week's meetings are." Cite what you saw, never invent it.
28
+ Say what you guessed, but not every lookup that failed. Never quote private
29
+ content such as mail subjects or meeting titles; counts and account names are
30
+ fine.
31
+ - **Answer with the JSON the schema asks for**, and nothing else. Use an empty
32
+ string, not null, for anything unknown.
33
+ - **Your why describes the answer you give, and nothing more.** The screen
34
+ shows the two side by side. Never say you included something the answer
35
+ doesn't hold; if the user asks for something it has no place for, say so.
36
+
37
+ ## When the user writes back
38
+
39
+ They may tell you what to change ("also the on-call rota", "that's my old
40
+ address"). Do what they ask, check what you need to, and answer with the whole
41
+ proposal again, in the same JSON.