@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.
Files changed (133) hide show
  1. package/bin/codebus.js +2 -0
  2. package/dist/binding-guard.js +97 -0
  3. package/dist/binding-guard.js.map +1 -0
  4. package/dist/client.js +94 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/commands/ack.js +47 -0
  7. package/dist/commands/ack.js.map +1 -0
  8. package/dist/commands/archive.js +21 -0
  9. package/dist/commands/archive.js.map +1 -0
  10. package/dist/commands/as.js +299 -0
  11. package/dist/commands/as.js.map +1 -0
  12. package/dist/commands/ask.js +189 -0
  13. package/dist/commands/ask.js.map +1 -0
  14. package/dist/commands/auth.js +33 -0
  15. package/dist/commands/auth.js.map +1 -0
  16. package/dist/commands/checkin.js +235 -0
  17. package/dist/commands/checkin.js.map +1 -0
  18. package/dist/commands/decision.js +52 -0
  19. package/dist/commands/decision.js.map +1 -0
  20. package/dist/commands/digest.js +117 -0
  21. package/dist/commands/digest.js.map +1 -0
  22. package/dist/commands/doctor.js +106 -0
  23. package/dist/commands/doctor.js.map +1 -0
  24. package/dist/commands/factory.js +191 -0
  25. package/dist/commands/factory.js.map +1 -0
  26. package/dist/commands/github-login.js +205 -0
  27. package/dist/commands/github-login.js.map +1 -0
  28. package/dist/commands/graph.js +88 -0
  29. package/dist/commands/graph.js.map +1 -0
  30. package/dist/commands/health.js +34 -0
  31. package/dist/commands/health.js.map +1 -0
  32. package/dist/commands/inbox.js +83 -0
  33. package/dist/commands/inbox.js.map +1 -0
  34. package/dist/commands/ingest.js +553 -0
  35. package/dist/commands/ingest.js.map +1 -0
  36. package/dist/commands/init.js +97 -0
  37. package/dist/commands/init.js.map +1 -0
  38. package/dist/commands/install.js +520 -0
  39. package/dist/commands/install.js.map +1 -0
  40. package/dist/commands/invite.js +152 -0
  41. package/dist/commands/invite.js.map +1 -0
  42. package/dist/commands/jira.js +237 -0
  43. package/dist/commands/jira.js.map +1 -0
  44. package/dist/commands/join.js +96 -0
  45. package/dist/commands/join.js.map +1 -0
  46. package/dist/commands/links.js +66 -0
  47. package/dist/commands/links.js.map +1 -0
  48. package/dist/commands/login.js +84 -0
  49. package/dist/commands/login.js.map +1 -0
  50. package/dist/commands/morning.js +121 -0
  51. package/dist/commands/morning.js.map +1 -0
  52. package/dist/commands/next.js +66 -0
  53. package/dist/commands/next.js.map +1 -0
  54. package/dist/commands/onboarding.js +109 -0
  55. package/dist/commands/onboarding.js.map +1 -0
  56. package/dist/commands/pack.js +276 -0
  57. package/dist/commands/pack.js.map +1 -0
  58. package/dist/commands/plan-gh.js +425 -0
  59. package/dist/commands/plan-gh.js.map +1 -0
  60. package/dist/commands/plan.js +465 -0
  61. package/dist/commands/plan.js.map +1 -0
  62. package/dist/commands/pr.js +88 -0
  63. package/dist/commands/pr.js.map +1 -0
  64. package/dist/commands/question.js +142 -0
  65. package/dist/commands/question.js.map +1 -0
  66. package/dist/commands/read.js +84 -0
  67. package/dist/commands/read.js.map +1 -0
  68. package/dist/commands/refs.js +357 -0
  69. package/dist/commands/refs.js.map +1 -0
  70. package/dist/commands/reply.js +38 -0
  71. package/dist/commands/reply.js.map +1 -0
  72. package/dist/commands/repo.js +1198 -0
  73. package/dist/commands/repo.js.map +1 -0
  74. package/dist/commands/report.js +41 -0
  75. package/dist/commands/report.js.map +1 -0
  76. package/dist/commands/resolve-refs.js +21 -0
  77. package/dist/commands/resolve-refs.js.map +1 -0
  78. package/dist/commands/resolve.js +93 -0
  79. package/dist/commands/resolve.js.map +1 -0
  80. package/dist/commands/send.js +168 -0
  81. package/dist/commands/send.js.map +1 -0
  82. package/dist/commands/sent.js +22 -0
  83. package/dist/commands/sent.js.map +1 -0
  84. package/dist/commands/session.js +426 -0
  85. package/dist/commands/session.js.map +1 -0
  86. package/dist/commands/statusline.js +43 -0
  87. package/dist/commands/statusline.js.map +1 -0
  88. package/dist/commands/task.js +140 -0
  89. package/dist/commands/task.js.map +1 -0
  90. package/dist/commands/tick.js +233 -0
  91. package/dist/commands/tick.js.map +1 -0
  92. package/dist/commands/upgrade.js +76 -0
  93. package/dist/commands/upgrade.js.map +1 -0
  94. package/dist/commands/watch.js +169 -0
  95. package/dist/commands/watch.js.map +1 -0
  96. package/dist/commands/whoami.js +27 -0
  97. package/dist/commands/whoami.js.map +1 -0
  98. package/dist/config.js +103 -0
  99. package/dist/config.js.map +1 -0
  100. package/dist/directives.js +102 -0
  101. package/dist/directives.js.map +1 -0
  102. package/dist/errors.js +110 -0
  103. package/dist/errors.js.map +1 -0
  104. package/dist/git-hooks.js +116 -0
  105. package/dist/git-hooks.js.map +1 -0
  106. package/dist/graph-bootstrap.js +95 -0
  107. package/dist/graph-bootstrap.js.map +1 -0
  108. package/dist/graph-remote.js +889 -0
  109. package/dist/graph-remote.js.map +1 -0
  110. package/dist/graph.js +335 -0
  111. package/dist/graph.js.map +1 -0
  112. package/dist/index.js +154 -0
  113. package/dist/index.js.map +1 -0
  114. package/dist/kit/graph-publish.mjs +400 -0
  115. package/dist/mail-latency.js +120 -0
  116. package/dist/mail-latency.js.map +1 -0
  117. package/dist/mcp-registry.js +859 -0
  118. package/dist/mcp-registry.js.map +1 -0
  119. package/dist/mcp.js +193 -0
  120. package/dist/mcp.js.map +1 -0
  121. package/dist/output.js +12 -0
  122. package/dist/output.js.map +1 -0
  123. package/dist/positioning.js +21 -0
  124. package/dist/positioning.js.map +1 -0
  125. package/dist/rolestore.js +89 -0
  126. package/dist/rolestore.js.map +1 -0
  127. package/dist/session.js +49 -0
  128. package/dist/session.js.map +1 -0
  129. package/dist/sessionstore.js +736 -0
  130. package/dist/sessionstore.js.map +1 -0
  131. package/dist/version-check.js +97 -0
  132. package/dist/version-check.js.map +1 -0
  133. 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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"}