botnote 0.1.33 → 0.1.34
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,4 +1,4 @@
|
|
|
1
|
-
import { and, desc, eq, isNull } from "drizzle-orm";
|
|
1
|
+
import { and, asc, desc, eq, inArray, isNull, sql } from "drizzle-orm";
|
|
2
2
|
import { entities } from "../db/schema.js";
|
|
3
3
|
import { getProject } from "./projects.js";
|
|
4
4
|
import { DEFAULT_WORKSPACE_TIMEZONE, getWorkspaceSettings } from "./workspace_settings.js";
|
|
@@ -18,8 +18,11 @@ export async function openingBrief(db, input) {
|
|
|
18
18
|
db
|
|
19
19
|
.select()
|
|
20
20
|
.from(entities)
|
|
21
|
-
.where(and(projectFilter, eq(entities.kind, "task"),
|
|
22
|
-
|
|
21
|
+
.where(and(projectFilter, eq(entities.kind, "task"), inArray(entities.status, ["open", "in_progress"])))
|
|
22
|
+
// in_progress first (that's what a resuming session needs), then by
|
|
23
|
+
// urgency: earliest due date (overdue sorts first naturally), then
|
|
24
|
+
// priority, then recency. Tasks without a due date rank after dated ones.
|
|
25
|
+
.orderBy(sql `CASE WHEN ${entities.status} = 'in_progress' THEN 0 ELSE 1 END`, sql `CASE WHEN ${entities.dueAt} IS NULL THEN 1 ELSE 0 END`, asc(entities.dueAt), sql `CASE ${entities.priority} WHEN 'urgent' THEN 0 WHEN 'high' THEN 1 WHEN 'medium' THEN 2 WHEN 'low' THEN 3 ELSE 4 END`, desc(entities.createdAt))
|
|
23
26
|
.limit(20),
|
|
24
27
|
db
|
|
25
28
|
.select()
|
|
@@ -47,6 +50,11 @@ function refFor(e, projectKey) {
|
|
|
47
50
|
return `${projectKey}-${e.sequenceId}`;
|
|
48
51
|
return `${e.kind}/${e.id.slice(0, 8)}`;
|
|
49
52
|
}
|
|
53
|
+
// Character budgets for pinned-note bodies. Pinned notes are injected into
|
|
54
|
+
// every session start, so an unbounded dump can eat a large slice of the
|
|
55
|
+
// agent's context window. Chars ≈ tokens × 4.
|
|
56
|
+
const PINNED_NOTE_CHAR_BUDGET = 2000;
|
|
57
|
+
const PINNED_TOTAL_CHAR_BUDGET = 8000;
|
|
50
58
|
function titleFor(e) {
|
|
51
59
|
if (e.title && e.title.trim())
|
|
52
60
|
return e.title;
|
|
@@ -77,19 +85,58 @@ export function formatOpeningBrief(brief) {
|
|
|
77
85
|
lines.push(`## Pinned Notes (${brief.pinnedNotes.length})`);
|
|
78
86
|
lines.push("_These are pinned by the user as always-relevant context for this project. Read them before acting._");
|
|
79
87
|
lines.push("");
|
|
88
|
+
let remaining = PINNED_TOTAL_CHAR_BUDGET;
|
|
80
89
|
for (const n of brief.pinnedNotes) {
|
|
90
|
+
const ref = refFor(n, projectKey);
|
|
91
|
+
const body = n.body.trim();
|
|
92
|
+
if (remaining <= 0) {
|
|
93
|
+
lines.push(`### 📌 ${titleFor(n)}`);
|
|
94
|
+
lines.push(`_[body omitted — pinned budget spent; fetch ${ref} to read it]_`);
|
|
95
|
+
lines.push("");
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
81
98
|
lines.push(`### 📌 ${titleFor(n)}`);
|
|
82
|
-
if (
|
|
83
|
-
|
|
99
|
+
if (body) {
|
|
100
|
+
const cap = Math.min(PINNED_NOTE_CHAR_BUDGET, remaining);
|
|
101
|
+
if (body.length > cap) {
|
|
102
|
+
lines.push(body.slice(0, cap));
|
|
103
|
+
lines.push(`_[truncated — fetch ${ref} for the full note]_`);
|
|
104
|
+
remaining -= cap;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
lines.push(body);
|
|
108
|
+
remaining -= body.length;
|
|
109
|
+
}
|
|
84
110
|
}
|
|
85
111
|
lines.push("");
|
|
86
112
|
}
|
|
87
113
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
114
|
+
const inProgress = brief.openTasks.filter((t) => t.status === "in_progress");
|
|
115
|
+
const openOnly = brief.openTasks.filter((t) => t.status !== "in_progress");
|
|
116
|
+
const now = brief.generatedAt.getTime();
|
|
117
|
+
const taskLine = (t) => {
|
|
118
|
+
const parts = [`- [${refFor(t, projectKey)}] ${titleFor(t)}`];
|
|
119
|
+
if (t.dueAt) {
|
|
120
|
+
const day = t.dueAt.toISOString().slice(0, 10);
|
|
121
|
+
parts.push(t.dueAt.getTime() < now ? `(OVERDUE ${day})` : `(due ${day})`);
|
|
92
122
|
}
|
|
123
|
+
if (t.priority && t.priority !== "none")
|
|
124
|
+
parts.push(`!${t.priority}`);
|
|
125
|
+
if (t.tags.length)
|
|
126
|
+
parts.push(`[${t.tags.join(", ")}]`);
|
|
127
|
+
return parts.join(" ");
|
|
128
|
+
};
|
|
129
|
+
if (inProgress.length) {
|
|
130
|
+
lines.push(`## In Progress (${inProgress.length})`);
|
|
131
|
+
lines.push("_Work already started. Check these before picking up anything new._");
|
|
132
|
+
for (const t of inProgress)
|
|
133
|
+
lines.push(taskLine(t));
|
|
134
|
+
lines.push("");
|
|
135
|
+
}
|
|
136
|
+
if (openOnly.length) {
|
|
137
|
+
lines.push(`## Open Tasks (${openOnly.length})`);
|
|
138
|
+
for (const t of openOnly)
|
|
139
|
+
lines.push(taskLine(t));
|
|
93
140
|
lines.push("");
|
|
94
141
|
}
|
|
95
142
|
if (brief.recent.length) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opening_brief.js","sourceRoot":"","sources":["../../src/service/opening_brief.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"opening_brief.js","sourceRoot":"","sources":["../../src/service/opening_brief.ts"],"names":[],"mappings":"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"}
|