@bragi-gmbh/codebus 1.2.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.
- package/bin/codebus.js +2 -0
- package/dist/binding-guard.js +97 -0
- package/dist/binding-guard.js.map +1 -0
- package/dist/client.js +94 -0
- package/dist/client.js.map +1 -0
- package/dist/commands/ack.js +47 -0
- package/dist/commands/ack.js.map +1 -0
- package/dist/commands/archive.js +21 -0
- package/dist/commands/archive.js.map +1 -0
- package/dist/commands/as.js +299 -0
- package/dist/commands/as.js.map +1 -0
- package/dist/commands/ask.js +189 -0
- package/dist/commands/ask.js.map +1 -0
- package/dist/commands/auth.js +33 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/checkin.js +235 -0
- package/dist/commands/checkin.js.map +1 -0
- package/dist/commands/decision.js +52 -0
- package/dist/commands/decision.js.map +1 -0
- package/dist/commands/digest.js +117 -0
- package/dist/commands/digest.js.map +1 -0
- package/dist/commands/doctor.js +106 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/factory.js +191 -0
- package/dist/commands/factory.js.map +1 -0
- package/dist/commands/github-login.js +205 -0
- package/dist/commands/github-login.js.map +1 -0
- package/dist/commands/graph.js +88 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/health.js +34 -0
- package/dist/commands/health.js.map +1 -0
- package/dist/commands/inbox.js +83 -0
- package/dist/commands/inbox.js.map +1 -0
- package/dist/commands/ingest.js +553 -0
- package/dist/commands/ingest.js.map +1 -0
- package/dist/commands/init.js +97 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/install.js +520 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/invite.js +152 -0
- package/dist/commands/invite.js.map +1 -0
- package/dist/commands/jira.js +237 -0
- package/dist/commands/jira.js.map +1 -0
- package/dist/commands/join.js +96 -0
- package/dist/commands/join.js.map +1 -0
- package/dist/commands/links.js +66 -0
- package/dist/commands/links.js.map +1 -0
- package/dist/commands/login.js +84 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/morning.js +121 -0
- package/dist/commands/morning.js.map +1 -0
- package/dist/commands/next.js +66 -0
- package/dist/commands/next.js.map +1 -0
- package/dist/commands/onboarding.js +109 -0
- package/dist/commands/onboarding.js.map +1 -0
- package/dist/commands/pack.js +276 -0
- package/dist/commands/pack.js.map +1 -0
- package/dist/commands/plan-gh.js +425 -0
- package/dist/commands/plan-gh.js.map +1 -0
- package/dist/commands/plan.js +465 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/pr.js +88 -0
- package/dist/commands/pr.js.map +1 -0
- package/dist/commands/question.js +142 -0
- package/dist/commands/question.js.map +1 -0
- package/dist/commands/read.js +84 -0
- package/dist/commands/read.js.map +1 -0
- package/dist/commands/refs.js +357 -0
- package/dist/commands/refs.js.map +1 -0
- package/dist/commands/reply.js +38 -0
- package/dist/commands/reply.js.map +1 -0
- package/dist/commands/repo.js +1198 -0
- package/dist/commands/repo.js.map +1 -0
- package/dist/commands/report.js +41 -0
- package/dist/commands/report.js.map +1 -0
- package/dist/commands/resolve-refs.js +21 -0
- package/dist/commands/resolve-refs.js.map +1 -0
- package/dist/commands/resolve.js +93 -0
- package/dist/commands/resolve.js.map +1 -0
- package/dist/commands/send.js +168 -0
- package/dist/commands/send.js.map +1 -0
- package/dist/commands/sent.js +22 -0
- package/dist/commands/sent.js.map +1 -0
- package/dist/commands/session.js +426 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/statusline.js +43 -0
- package/dist/commands/statusline.js.map +1 -0
- package/dist/commands/task.js +140 -0
- package/dist/commands/task.js.map +1 -0
- package/dist/commands/tick.js +233 -0
- package/dist/commands/tick.js.map +1 -0
- package/dist/commands/upgrade.js +76 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/commands/watch.js +169 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/commands/whoami.js +27 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/config.js +103 -0
- package/dist/config.js.map +1 -0
- package/dist/directives.js +102 -0
- package/dist/directives.js.map +1 -0
- package/dist/errors.js +110 -0
- package/dist/errors.js.map +1 -0
- package/dist/git-hooks.js +116 -0
- package/dist/git-hooks.js.map +1 -0
- package/dist/graph-bootstrap.js +95 -0
- package/dist/graph-bootstrap.js.map +1 -0
- package/dist/graph-remote.js +889 -0
- package/dist/graph-remote.js.map +1 -0
- package/dist/graph.js +335 -0
- package/dist/graph.js.map +1 -0
- package/dist/index.js +154 -0
- package/dist/index.js.map +1 -0
- package/dist/kit/graph-publish.mjs +400 -0
- package/dist/mail-latency.js +120 -0
- package/dist/mail-latency.js.map +1 -0
- package/dist/mcp-registry.js +859 -0
- package/dist/mcp-registry.js.map +1 -0
- package/dist/mcp.js +193 -0
- package/dist/mcp.js.map +1 -0
- package/dist/output.js +12 -0
- package/dist/output.js.map +1 -0
- package/dist/positioning.js +21 -0
- package/dist/positioning.js.map +1 -0
- package/dist/rolestore.js +89 -0
- package/dist/rolestore.js.map +1 -0
- package/dist/session.js +49 -0
- package/dist/session.js.map +1 -0
- package/dist/sessionstore.js +736 -0
- package/dist/sessionstore.js.map +1 -0
- package/dist/version-check.js +97 -0
- package/dist/version-check.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
import { resolveConfig } from "../config.js";
|
|
2
|
+
import { makeCtx, workspaceId } from "../client.js";
|
|
3
|
+
import { CodebusError } from "../errors.js";
|
|
4
|
+
import { scoreMatch } from "../graph.js";
|
|
5
|
+
// ── Core logic ─────────────────────────────────────────────────────────────
|
|
6
|
+
/**
|
|
7
|
+
* Compile a cited, budget-trimmed context pack from decisions + questions + tasks.
|
|
8
|
+
*
|
|
9
|
+
* Rules:
|
|
10
|
+
* - Accepted decisions only (status='accepted'); open questions; locked tasks.
|
|
11
|
+
* - Ranked by keyword relevance to the query/task title using scoreMatch.
|
|
12
|
+
* - When a task id is provided, graph adjacency (bus_connections) expands the
|
|
13
|
+
* seed set: items mentioned in the task's graph neighbourhood score higher.
|
|
14
|
+
* - Superseded decisions: when two accepted decisions share the same slug,
|
|
15
|
+
* the older one is superseded by the newer. Superseded decisions are excluded
|
|
16
|
+
* by default but included as "re-litigation" warnings when adjacent.
|
|
17
|
+
* - Budget-trims with 15% headroom; appends [truncated] marker.
|
|
18
|
+
* - Every output line carries a CB-… citation.
|
|
19
|
+
*/
|
|
20
|
+
export async function compilePackCore(ctx, opts) {
|
|
21
|
+
const budget = opts.budget ?? 800;
|
|
22
|
+
const ws = await workspaceId(ctx);
|
|
23
|
+
const queryTerms = (opts.query ?? "").toLowerCase().split(/\s+/).filter(Boolean);
|
|
24
|
+
// ── 1. Load candidate items ──────────────────────────────────────────────
|
|
25
|
+
// Accepted decisions
|
|
26
|
+
const { data: decisionsRaw, error: decErr } = await ctx.supabase
|
|
27
|
+
.from("decisions")
|
|
28
|
+
.select("id, display_id, slug, title, body, status, created_at")
|
|
29
|
+
.eq("workspace_id", ws)
|
|
30
|
+
.eq("status", "accepted")
|
|
31
|
+
.order("created_at", { ascending: true });
|
|
32
|
+
if (decErr)
|
|
33
|
+
throw new CodebusError(decErr.message);
|
|
34
|
+
const decisions = decisionsRaw ?? [];
|
|
35
|
+
// Open questions
|
|
36
|
+
const { data: questionsRaw, error: qErr } = await ctx.supabase
|
|
37
|
+
.from("questions")
|
|
38
|
+
.select("id, display_id, title, body, status")
|
|
39
|
+
.eq("workspace_id", ws)
|
|
40
|
+
.eq("status", "open");
|
|
41
|
+
if (qErr)
|
|
42
|
+
throw new CodebusError(qErr.message);
|
|
43
|
+
const questions = questionsRaw ?? [];
|
|
44
|
+
// "Locked" constraints: blocked tasks are constraints others need to know about.
|
|
45
|
+
// task_status enum: todo|in_progress|blocked|review|done|cancelled (no "locked" value).
|
|
46
|
+
const { data: tasksRaw, error: taskErr } = await ctx.supabase
|
|
47
|
+
.from("tasks")
|
|
48
|
+
.select("id, display_id, title, body, status")
|
|
49
|
+
.eq("workspace_id", ws)
|
|
50
|
+
.eq("status", "blocked");
|
|
51
|
+
if (taskErr)
|
|
52
|
+
throw new CodebusError(taskErr.message);
|
|
53
|
+
const tasks = tasksRaw ?? [];
|
|
54
|
+
// ── 2. Detect superseded decisions (same-slug, newer accepted wins) ──────
|
|
55
|
+
// Group decisions by slug; the one with the highest created_at is canonical.
|
|
56
|
+
const slugGroups = new Map();
|
|
57
|
+
for (const d of decisions) {
|
|
58
|
+
const key = d.slug ?? d.display_id;
|
|
59
|
+
if (!slugGroups.has(key))
|
|
60
|
+
slugGroups.set(key, []);
|
|
61
|
+
slugGroups.get(key).push(d);
|
|
62
|
+
}
|
|
63
|
+
// Map: older decision id → newer (canonical) decision display_id
|
|
64
|
+
const supersededBy = new Map();
|
|
65
|
+
for (const [, group] of slugGroups) {
|
|
66
|
+
if (group.length < 2)
|
|
67
|
+
continue;
|
|
68
|
+
// Sort ascending by created_at — last is canonical
|
|
69
|
+
const sorted = [...group].sort((a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime());
|
|
70
|
+
const canonical = sorted[sorted.length - 1];
|
|
71
|
+
for (const older of sorted.slice(0, -1)) {
|
|
72
|
+
supersededBy.set(older.id, canonical.display_id);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// ── 3. Graph adjacency (bus_connections) for task-scoped pack ────────────
|
|
76
|
+
const adjacentIds = new Set();
|
|
77
|
+
let taskTitle = "";
|
|
78
|
+
if (opts.taskId) {
|
|
79
|
+
// Resolve display id or uuid
|
|
80
|
+
let taskUuid = opts.taskId;
|
|
81
|
+
if (/^CB-TASK-/i.test(opts.taskId)) {
|
|
82
|
+
const { data: t } = await ctx.supabase
|
|
83
|
+
.from("tasks")
|
|
84
|
+
.select("id, title")
|
|
85
|
+
.eq("workspace_id", ws)
|
|
86
|
+
.eq("display_id", opts.taskId.toUpperCase())
|
|
87
|
+
.single();
|
|
88
|
+
if (!t)
|
|
89
|
+
throw new CodebusError(`task not found: ${opts.taskId}`);
|
|
90
|
+
taskUuid = t.id;
|
|
91
|
+
taskTitle = t.title ?? "";
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
const { data: t } = await ctx.supabase
|
|
95
|
+
.from("tasks")
|
|
96
|
+
.select("title")
|
|
97
|
+
.eq("id", opts.taskId)
|
|
98
|
+
.single();
|
|
99
|
+
taskTitle = t?.title ?? "";
|
|
100
|
+
}
|
|
101
|
+
// Fetch graph neighbours (depth 2)
|
|
102
|
+
const { data: edges } = await ctx.supabase.rpc("bus_connections", {
|
|
103
|
+
p_kind: "task",
|
|
104
|
+
p_id: taskUuid,
|
|
105
|
+
p_depth: 2,
|
|
106
|
+
});
|
|
107
|
+
for (const e of edges ?? []) {
|
|
108
|
+
if (e.src_display)
|
|
109
|
+
adjacentIds.add(e.src_display);
|
|
110
|
+
if (e.dst_display)
|
|
111
|
+
adjacentIds.add(e.dst_display);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// ── 4. Build scored item list ─────────────────────────────────────────────
|
|
115
|
+
// Merge query terms with task title terms for relevance
|
|
116
|
+
const effectiveTerms = [
|
|
117
|
+
...queryTerms,
|
|
118
|
+
...taskTitle.toLowerCase().split(/\s+/).filter(Boolean),
|
|
119
|
+
].filter((t, i, a) => a.indexOf(t) === i);
|
|
120
|
+
const scored = [];
|
|
121
|
+
// Score decisions
|
|
122
|
+
for (const d of decisions) {
|
|
123
|
+
const isSuperseded = supersededBy.has(d.id);
|
|
124
|
+
const text = `${d.title} ${d.body ?? ""} ${d.slug ?? ""}`.toLowerCase();
|
|
125
|
+
const termScore = effectiveTerms.length > 0 ? scoreMatch(text, effectiveTerms) : 0;
|
|
126
|
+
const isAdjacent = adjacentIds.has(d.display_id);
|
|
127
|
+
// Superseded decisions: only include when adjacent
|
|
128
|
+
if (isSuperseded && !isAdjacent)
|
|
129
|
+
continue;
|
|
130
|
+
const item = {
|
|
131
|
+
kind: "decision",
|
|
132
|
+
display_id: d.display_id,
|
|
133
|
+
title: d.title,
|
|
134
|
+
body: d.body,
|
|
135
|
+
status: d.status,
|
|
136
|
+
slug: d.slug,
|
|
137
|
+
};
|
|
138
|
+
if (isSuperseded) {
|
|
139
|
+
item.superseded_by = supersededBy.get(d.id);
|
|
140
|
+
}
|
|
141
|
+
scored.push({
|
|
142
|
+
item,
|
|
143
|
+
score: termScore + (isAdjacent ? 500 : 0),
|
|
144
|
+
isAdjacent,
|
|
145
|
+
isSuperseded,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
// Score questions
|
|
149
|
+
for (const q of questions) {
|
|
150
|
+
const text = `${q.title} ${q.body ?? ""}`.toLowerCase();
|
|
151
|
+
const termScore = effectiveTerms.length > 0 ? scoreMatch(text, effectiveTerms) : 0;
|
|
152
|
+
const isAdjacent = adjacentIds.has(q.display_id);
|
|
153
|
+
scored.push({
|
|
154
|
+
item: { kind: "question", display_id: q.display_id, title: q.title, body: q.body, status: q.status },
|
|
155
|
+
score: termScore + (isAdjacent ? 500 : 0),
|
|
156
|
+
isAdjacent,
|
|
157
|
+
isSuperseded: false,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
// Score locked tasks
|
|
161
|
+
for (const t of tasks) {
|
|
162
|
+
const text = `${t.title} ${t.body ?? ""}`.toLowerCase();
|
|
163
|
+
const termScore = effectiveTerms.length > 0 ? scoreMatch(text, effectiveTerms) : 0;
|
|
164
|
+
const isAdjacent = adjacentIds.has(t.display_id);
|
|
165
|
+
scored.push({
|
|
166
|
+
item: { kind: "task", display_id: t.display_id, title: t.title, body: t.body, status: t.status },
|
|
167
|
+
score: termScore + (isAdjacent ? 500 : 0),
|
|
168
|
+
isAdjacent,
|
|
169
|
+
isSuperseded: false,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
// Sort: adjacent first, then by relevance score desc, then display_id asc
|
|
173
|
+
scored.sort((a, b) => {
|
|
174
|
+
if (a.isAdjacent !== b.isAdjacent)
|
|
175
|
+
return a.isAdjacent ? -1 : 1;
|
|
176
|
+
if (b.score !== a.score)
|
|
177
|
+
return b.score - a.score;
|
|
178
|
+
return a.item.display_id.localeCompare(b.item.display_id);
|
|
179
|
+
});
|
|
180
|
+
// ── 5. Build output lines with citations and budget trimming ──────────────
|
|
181
|
+
const headroom = 0.85; // 15% headroom per ask.ts convention
|
|
182
|
+
const lines = [];
|
|
183
|
+
let tokens = 0;
|
|
184
|
+
let truncated = false;
|
|
185
|
+
const sectionHeader = (s) => {
|
|
186
|
+
const headerTokens = Math.ceil(s.split(/\s+/).length);
|
|
187
|
+
if (tokens + headerTokens < budget * headroom) {
|
|
188
|
+
lines.push(s);
|
|
189
|
+
tokens += headerTokens;
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
// Separate into sections
|
|
193
|
+
const acceptedDecisions = scored.filter((s) => s.item.kind === "decision" && !s.isSuperseded);
|
|
194
|
+
const supersededDecisions = scored.filter((s) => s.item.kind === "decision" && s.isSuperseded);
|
|
195
|
+
const openQuestions = scored.filter((s) => s.item.kind === "question");
|
|
196
|
+
const lockedTasks = scored.filter((s) => s.item.kind === "task");
|
|
197
|
+
const addLine = (line) => {
|
|
198
|
+
const lt = Math.ceil(line.split(/\s+/).length);
|
|
199
|
+
if (tokens + lt >= budget * headroom) {
|
|
200
|
+
truncated = true;
|
|
201
|
+
return false;
|
|
202
|
+
}
|
|
203
|
+
lines.push(line);
|
|
204
|
+
tokens += lt;
|
|
205
|
+
return true;
|
|
206
|
+
};
|
|
207
|
+
if (acceptedDecisions.length > 0) {
|
|
208
|
+
sectionHeader("## Accepted Decisions:");
|
|
209
|
+
for (const { item } of acceptedDecisions) {
|
|
210
|
+
const line = `- [${item.display_id}] ${item.title}`;
|
|
211
|
+
if (!addLine(line))
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
if (!truncated && supersededDecisions.length > 0) {
|
|
216
|
+
sectionHeader("\n## Re-litigation Warnings:");
|
|
217
|
+
for (const { item } of supersededDecisions) {
|
|
218
|
+
const line = `- re-litigation: ${item.display_id} superseded by ${item.superseded_by} — ${item.title}`;
|
|
219
|
+
if (!addLine(line))
|
|
220
|
+
break;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
if (!truncated && openQuestions.length > 0) {
|
|
224
|
+
sectionHeader("\n## Open Questions:");
|
|
225
|
+
for (const { item } of openQuestions) {
|
|
226
|
+
const line = `- [${item.display_id}] ${item.title}`;
|
|
227
|
+
if (!addLine(line))
|
|
228
|
+
break;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
if (!truncated && lockedTasks.length > 0) {
|
|
232
|
+
sectionHeader("\n## Locked Constraints:");
|
|
233
|
+
for (const { item } of lockedTasks) {
|
|
234
|
+
const line = `- [${item.display_id}] ${item.title}`;
|
|
235
|
+
if (!addLine(line))
|
|
236
|
+
break;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
if (truncated) {
|
|
240
|
+
lines.push(`\n[…truncated at ~${budget} tokens]`);
|
|
241
|
+
}
|
|
242
|
+
const pack = lines.join("\n");
|
|
243
|
+
const allItems = scored.map((s) => s.item);
|
|
244
|
+
return {
|
|
245
|
+
items: allItems,
|
|
246
|
+
pack,
|
|
247
|
+
truncated,
|
|
248
|
+
totalItems: allItems.length,
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
// ── CLI wiring ─────────────────────────────────────────────────────────────
|
|
252
|
+
async function packCmd(o) {
|
|
253
|
+
const ctx = await makeCtx(resolveConfig(o));
|
|
254
|
+
const budget = o.budget ? parseInt(o.budget, 10) : 800;
|
|
255
|
+
const result = await compilePackCore(ctx, {
|
|
256
|
+
query: o.query,
|
|
257
|
+
taskId: o.task,
|
|
258
|
+
budget,
|
|
259
|
+
});
|
|
260
|
+
if (o.json) {
|
|
261
|
+
console.log(JSON.stringify(result, null, 2));
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
console.log(result.pack);
|
|
265
|
+
if (result.truncated) {
|
|
266
|
+
// Already included in pack string, nothing extra to print
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
export function registerPack(program, g) {
|
|
270
|
+
g(program.command("pack"))
|
|
271
|
+
.option("--query <text>", "natural language query to focus the pack")
|
|
272
|
+
.option("--task <id>", "CB-TASK-… id; uses graph adjacency to focus items")
|
|
273
|
+
.option("--budget <tokens>", "max output tokens (default 800)")
|
|
274
|
+
.action(packCmd);
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=pack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pack.js","sourceRoot":"","sources":["../../src/commands/pack.ts"],"names":[],"mappings":"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"}
|