daily-focus 1.1.1-dev.3 → 1.2.0-dev.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +34 -20
- package/SETUP.md +93 -20
- package/dist/{audit-B5GKGH2P.js → audit-7ZCLKF46.js} +6 -5
- package/dist/{chunk-YWHADSKR.js → chunk-64XB7UDN.js} +1 -1
- package/dist/{chunk-NWYOCDUU.js → chunk-J7ZYVUG6.js} +4 -6
- package/dist/chunk-ODJGQCM3.js +1003 -0
- package/dist/{chunk-C6FXWHGT.js → chunk-RZNQJ6UG.js} +123 -282
- package/dist/{chunk-AUBJ2IDQ.js → chunk-Z4SFMMRQ.js} +2 -2
- package/dist/cli.js +9 -8
- package/dist/{demo-AMK3Y4JZ.js → demo-BYLLMKSQ.js} +135 -32
- package/dist/{init-YGOPPELJ.js → init-EMZDG2I7.js} +1 -9
- package/dist/{seed-57RJGU4Y.js → seed-JU4LQ33D.js} +3 -3
- package/dist/{server-5HCA62YY.js → server-WQYUOKB3.js} +416 -384
- package/dist/{service-63U4WBUH.js → service-PUJ3YDH5.js} +1 -1
- package/package.json +2 -2
- package/prompts/README.md +2 -3
- package/prompts/assistant.md +14 -3
- package/prompts/morning-brief-personal.md +1 -25
- package/prompts/morning-brief-work.md +8 -33
- package/public/app.js +440 -441
- package/public/style.css +192 -181
- package/dist/chunk-GFCWPYEI.js +0 -456
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "daily-focus",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0-dev.10",
|
|
4
4
|
"description": "An interactive dashboard of what you should focus on today at work",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"dashboard",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
},
|
|
41
41
|
"daily-focus": {
|
|
42
42
|
"appInterface": 1,
|
|
43
|
-
"appSource": "
|
|
43
|
+
"appSource": "288797ddc9f77355cc5ec176f1f21452d49fd3ae"
|
|
44
44
|
},
|
|
45
45
|
"scripts": {
|
|
46
46
|
"start": "node src/server.ts",
|
package/prompts/README.md
CHANGED
|
@@ -37,7 +37,6 @@ alongside `items.schema.json`, so a run only ever names a path inside the store:
|
|
|
37
37
|
settings.json the dashboard writes: what you set on its settings page
|
|
38
38
|
items.json the agent writes it
|
|
39
39
|
actions.jsonl the dashboard appends
|
|
40
|
-
sessions.jsonl the dashboard appends
|
|
41
40
|
agent.jsonl the dashboard appends: every run, its report, and the questions asked of it
|
|
42
41
|
archive/ the dashboard writes
|
|
43
42
|
prs.json the dashboard writes: its last fetch of the user's open pull requests
|
|
@@ -93,8 +92,8 @@ works inside the store. Coding agents can read the implementation and tests, so
|
|
|
93
92
|
| `~/.daily-focus/sources.md` | Which calendars, account and recurring documents are yours. Not in this repo, for the same reason: it's the half of the brief that names real things. |
|
|
94
93
|
|
|
95
94
|
When code changes what the briefing agent must produce or understand, update the
|
|
96
|
-
prompt too. The tests check field names, required fields
|
|
97
|
-
|
|
95
|
+
prompt too. The tests check field names, required fields and enum values. Review
|
|
96
|
+
changes to judgement rules directly.
|
|
98
97
|
|
|
99
98
|
## Why the personal specifics live outside the repo
|
|
100
99
|
|
package/prompts/assistant.md
CHANGED
|
@@ -42,7 +42,13 @@ status comment on a ticket, a message. The user posts it, not you.
|
|
|
42
42
|
## How to answer
|
|
43
43
|
|
|
44
44
|
Lead with the answer. If the question was "is this review right", the first line says
|
|
45
|
-
whether it is. Then the evidence, as short as it can be.
|
|
45
|
+
whether it is. Then the evidence, as short as it can be.
|
|
46
|
+
|
|
47
|
+
Make the first line the verdict, on a line of its own, in under fifteen words: "Two
|
|
48
|
+
of Alice's three comments are right; the cap is a judgment call." or "Flaky, not
|
|
49
|
+
yours: the Safari job timed out on a step this change doesn't touch." The dashboard
|
|
50
|
+
may ask you a quick action on its own, before the user has looked, and shows that
|
|
51
|
+
line alone on the item's row. The rest is read only by someone who opens the panel. Use Markdown: short
|
|
46
52
|
paragraphs, a list where there are parallel points, a code block for anything meant
|
|
47
53
|
to be pasted. No headings; the panel is narrow.
|
|
48
54
|
|
|
@@ -51,7 +57,12 @@ thread the Gmail tool did not find — say so plainly at the top, and answer as
|
|
|
51
57
|
the rest allows. A confident answer built on half the material is worse than a
|
|
52
58
|
shorter one that says what it is missing.
|
|
53
59
|
|
|
54
|
-
|
|
60
|
+
End with one line for each thing you created, in exactly this form, so the panel
|
|
61
|
+
can offer it as a button:
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
Created: [Gmail draft](https://mail.google.com/mail/u/0/#drafts?compose=…)
|
|
65
|
+
```
|
|
55
66
|
|
|
56
67
|
## Stay in this chat
|
|
57
68
|
|
|
@@ -59,4 +70,4 @@ This conversation is the whole record of what you did. Do not leave notes on the
|
|
|
59
70
|
item, do not write to the dashboard's files, and do not try to mark the item done,
|
|
60
71
|
snoozed or handled: the user does that from the dashboard once they have read your
|
|
61
72
|
reply. If you created or changed something — a draft, most often — say so in the
|
|
62
|
-
reply, with its
|
|
73
|
+
reply, end with its `Created:` line, and stop there.
|
|
@@ -16,8 +16,6 @@ not for you.
|
|
|
16
16
|
- `focus.md` — **you only ever read this.** The standing personal objective, written
|
|
17
17
|
by hand. It decides what "important" means. It may be missing or have a blank
|
|
18
18
|
`objective`; both are normal.
|
|
19
|
-
- `sessions.jsonl` — **you only ever read this.** One line per focus session: what
|
|
20
|
-
they actually spent time on, as opposed to what they finished.
|
|
21
19
|
- `sources.md` — **you only ever read this.** The personal specifics this prompt
|
|
22
20
|
deliberately doesn't carry: who the user is, which calendars to query, which email
|
|
23
21
|
account, which reminder lists, how to reach Messages and e-Boks, which GitHub login
|
|
@@ -73,6 +71,7 @@ by `id` and take the **last** entry for each id:
|
|
|
73
71
|
| `snooze` | Not today | Leave it out until `until` (a `YYYY-MM-DD`) has arrived. If `until` is absent, use your judgement about when it's worth resurfacing. |
|
|
74
72
|
| `reopen` | They undid a previous action | Treat as though nothing had been recorded — it is live again. |
|
|
75
73
|
| `note` | Free text for you; **does not** change status | Read it. It usually explains *why*, and often tells you something the sources can't. |
|
|
74
|
+
| `nudge` | The user asked a pull request's reviewers for a review, somewhere you can't see (Slack, in person); **does not** change status | Treat the review as asked for at `at`. Don't suggest asking again until a day after it. |
|
|
76
75
|
|
|
77
76
|
**This is the most important instruction in this prompt.** A `done` in the log
|
|
78
77
|
outranks everything you can observe upstream. If the log says the user handled an
|
|
@@ -81,29 +80,6 @@ unread, even if the sender is still sending reminders. They may have replied by
|
|
|
81
80
|
phone, in person, or in another channel. Absence of upstream evidence is not evidence
|
|
82
81
|
of inaction. Never re-derive a completed item from source state.
|
|
83
82
|
|
|
84
|
-
**Read `sessions.jsonl`.** It records what the user worked on, which `actions.jsonl`
|
|
85
|
-
cannot tell you. Use it:
|
|
86
|
-
|
|
87
|
-
- Time spent on something unfinished is progress. Don't re-raise it tomorrow in
|
|
88
|
-
identical words as though the day never happened; acknowledge it in `detail`.
|
|
89
|
-
- The same item across several days with no completion means stuck. Say so plainly,
|
|
90
|
-
and consider whether the item is too big or the real blocker is elsewhere.
|
|
91
|
-
- An item the user has never once started, while finishing things around it, is being
|
|
92
|
-
avoided. Name it gently, once — not every day.
|
|
93
|
-
|
|
94
|
-
`actualMinutes` is real elapsed time rather than the plan, and `endedBy` says how far
|
|
95
|
-
to trust it:
|
|
96
|
-
|
|
97
|
-
| `endedBy` | How it ended | What the number is worth |
|
|
98
|
-
|---|---|---|
|
|
99
|
-
| `user` | They pressed Stop. | Exact. |
|
|
100
|
-
| `away` | The machine sat untouched, so the dashboard closed the session back at the last keypress. | Honest to within a minute. The break is already excluded — don't subtract for it twice. |
|
|
101
|
-
| `limit` | It outran a two-hour ceiling on a machine that couldn't say whether anyone was there. | An upper bound, not a measurement. **Never cite it as a long focused stretch.** |
|
|
102
|
-
|
|
103
|
-
A session that ended `away` was interrupted, not abandoned. `endedBy` is absent on
|
|
104
|
-
sessions recorded before it was tracked — treat those as `user`, but don't lean on the
|
|
105
|
-
duration.
|
|
106
|
-
|
|
107
83
|
**Read the previous `items.json`** and keep each surviving item's `firstSeen`. If an
|
|
108
84
|
item you are raising today also appeared yesterday under the same `id`, carry its
|
|
109
85
|
original `firstSeen` across verbatim. Only assign `firstSeen` = today to genuinely
|
|
@@ -15,8 +15,6 @@ not for you.
|
|
|
15
15
|
- `focus.md` — **you only ever read this.** The standing objective, written by hand.
|
|
16
16
|
It decides what "important" means. It may be missing or have a blank `objective`;
|
|
17
17
|
both are normal.
|
|
18
|
-
- `sessions.jsonl` — **you only ever read this.** One line per focus session: what
|
|
19
|
-
they actually spent time on, as opposed to what they finished.
|
|
20
18
|
- `sources.md` — **you only ever read this.** The personal specifics this prompt
|
|
21
19
|
deliberately doesn't carry: who the user is, which calendars to query, which
|
|
22
20
|
accounts to judge review requests and authorship against, which recurring documents
|
|
@@ -36,11 +34,13 @@ knows how long it has been since the objective moved.
|
|
|
36
34
|
- `tickets.json` — **you only ever read this.** The dashboard's own cache of the Jira
|
|
37
35
|
tickets whose status doesn't match their pull requests, refreshed while the
|
|
38
36
|
dashboard is in use. Facts only: each entry's `workflowStatus`, its
|
|
39
|
-
`statusCategory`, and whether
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
37
|
+
`statusCategory`, and whether it has any pull request (`hasAnyPr`) and any still
|
|
38
|
+
open (`hasOpenPr`). Those come from Jira, or from GitHub where Jira hasn't caught
|
|
39
|
+
up yet (`fromGitHub`, with the pull requests in `pulls`), so trust them over
|
|
40
|
+
Jira's own development panel. The dashboard shows this list on a tab of its own
|
|
41
|
+
and the user fixes the statuses there, **so do not copy it into the brief** — see
|
|
42
|
+
the Jira section of step 2. Use it if it helps, never write it, and never treat
|
|
43
|
+
its absence as meaning anything.
|
|
44
44
|
|
|
45
45
|
Work through the five steps below in order. Do not start gathering before step 1 is
|
|
46
46
|
done — what you find in step 1 changes what counts as worth raising.
|
|
@@ -84,6 +84,7 @@ by `id` and take the **last** entry for each id:
|
|
|
84
84
|
| `snooze` | Not today | Leave it out until `until` (a `YYYY-MM-DD`) has arrived. If `until` is absent, use your judgement about when it's worth resurfacing. |
|
|
85
85
|
| `reopen` | They undid a previous action | Treat as though nothing had been recorded — it is live again. |
|
|
86
86
|
| `note` | Free text for you; **does not** change status | Read it. It usually explains *why*, and often tells you something the sources can't. |
|
|
87
|
+
| `nudge` | The user asked a pull request's reviewers for a review, somewhere you can't see (Slack, in person); **does not** change status | Treat the review as asked for at `at`. Don't suggest asking again until a day after it. |
|
|
87
88
|
|
|
88
89
|
**This is the most important instruction in this prompt.** A `done` in the log
|
|
89
90
|
outranks everything you can observe upstream. If the log says the user handled a Gmail
|
|
@@ -92,32 +93,6 @@ unread, even if Workday is still sending reminders about it. They may have repli
|
|
|
92
93
|
phone, in person, or in another channel. Absence of upstream evidence is not evidence
|
|
93
94
|
of inaction. Never re-derive a completed item from source state.
|
|
94
95
|
|
|
95
|
-
**Read `sessions.jsonl`.** It records what the user worked on, which `actions.jsonl`
|
|
96
|
-
cannot tell you — a hard blocker can absorb days with nothing to mark done. Use it:
|
|
97
|
-
|
|
98
|
-
- Time spent on something unfinished is progress. Don't re-raise it tomorrow in
|
|
99
|
-
identical words as though the day never happened; acknowledge it in `detail`.
|
|
100
|
-
- The same item across several days with no completion means stuck. Say so plainly,
|
|
101
|
-
and consider whether the item is too big or the real blocker is elsewhere.
|
|
102
|
-
- No sessions against the objective for days running is the loudest thing in the
|
|
103
|
-
store. Lead with it.
|
|
104
|
-
- An item the user has never once started, while finishing things around it, is being
|
|
105
|
-
avoided. Name it gently, once — not every day.
|
|
106
|
-
|
|
107
|
-
`actualMinutes` is real elapsed time rather than the plan, and `endedBy` says how far
|
|
108
|
-
to trust it:
|
|
109
|
-
|
|
110
|
-
| `endedBy` | How it ended | What the number is worth |
|
|
111
|
-
|---|---|---|
|
|
112
|
-
| `user` | They pressed Stop. | Exact. |
|
|
113
|
-
| `away` | The machine sat untouched, so the dashboard closed the session back at the last keypress. | Honest to within a minute. The break is already excluded — don't subtract for it twice. |
|
|
114
|
-
| `limit` | It outran a two-hour ceiling on a machine that couldn't say whether anyone was there. | An upper bound, not a measurement. **Never cite it as a long focused stretch.** |
|
|
115
|
-
|
|
116
|
-
A session that ended `away` was interrupted, not abandoned: they left the desk, they
|
|
117
|
-
didn't give up on the item. Don't read it as a false start. `endedBy` is absent on
|
|
118
|
-
sessions recorded before it was tracked — treat those as `user`, but don't lean on the
|
|
119
|
-
duration.
|
|
120
|
-
|
|
121
96
|
**Read the previous `items.json`** and keep each surviving item's `firstSeen`. If an
|
|
122
97
|
item you are raising today also appeared yesterday under the same `id`, carry its
|
|
123
98
|
original `firstSeen` across verbatim. Only assign `firstSeen` = today to genuinely
|