buildpartner 0.3.3 → 0.3.5

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 (58) hide show
  1. package/dist/bin/cli.js +6 -0
  2. package/dist/bin/cli.js.map +1 -1
  3. package/dist/src/api-client.d.ts +13 -9
  4. package/dist/src/api-client.js +14 -31
  5. package/dist/src/api-client.js.map +1 -1
  6. package/dist/src/commands/log-session.d.ts +3 -6
  7. package/dist/src/commands/log-session.js +10 -149
  8. package/dist/src/commands/log-session.js.map +1 -1
  9. package/dist/src/commands/reset.d.ts +1 -0
  10. package/dist/src/commands/reset.js +130 -0
  11. package/dist/src/commands/reset.js.map +1 -0
  12. package/dist/src/commands/setup.js +83 -398
  13. package/dist/src/commands/setup.js.map +1 -1
  14. package/dist/src/commands/sync.d.ts +6 -0
  15. package/dist/src/commands/sync.js +32 -0
  16. package/dist/src/commands/sync.js.map +1 -0
  17. package/dist/src/mcp/catch-up.d.ts +6 -0
  18. package/dist/src/mcp/catch-up.js +28 -0
  19. package/dist/src/mcp/catch-up.js.map +1 -0
  20. package/dist/src/mcp/server.d.ts +13 -0
  21. package/dist/src/mcp/server.js +71 -81
  22. package/dist/src/mcp/server.js.map +1 -1
  23. package/dist/src/mcp/subscription-gate.d.ts +2 -2
  24. package/dist/src/mcp/subscription-gate.js +4 -9
  25. package/dist/src/mcp/subscription-gate.js.map +1 -1
  26. package/dist/src/mcp/tools/get-profile.js +7 -70
  27. package/dist/src/mcp/tools/get-profile.js.map +1 -1
  28. package/dist/src/mcp/tools/get-stats.d.ts +8 -34
  29. package/dist/src/mcp/tools/get-stats.js +7 -97
  30. package/dist/src/mcp/tools/get-stats.js.map +1 -1
  31. package/dist/src/mcp/tools/get-suggestions.js +10 -121
  32. package/dist/src/mcp/tools/get-suggestions.js.map +1 -1
  33. package/dist/src/mcp/tools/log-highlight.d.ts +2 -10
  34. package/dist/src/mcp/tools/log-highlight.js +5 -19
  35. package/dist/src/mcp/tools/log-highlight.js.map +1 -1
  36. package/dist/src/mcp/tools/quest.d.ts +3 -77
  37. package/dist/src/mcp/tools/quest.js +6 -70
  38. package/dist/src/mcp/tools/quest.js.map +1 -1
  39. package/dist/src/readers/extract-signals.d.ts +23 -0
  40. package/dist/src/readers/extract-signals.js +50 -0
  41. package/dist/src/readers/extract-signals.js.map +1 -0
  42. package/dist/src/readers/session-reader.d.ts +0 -14
  43. package/dist/src/readers/session-reader.js +3 -122
  44. package/dist/src/readers/session-reader.js.map +1 -1
  45. package/dist/src/readers/session-sync.d.ts +24 -0
  46. package/dist/src/readers/session-sync.js +113 -0
  47. package/dist/src/readers/session-sync.js.map +1 -0
  48. package/dist/src/store/local-store.d.ts +12 -60
  49. package/dist/src/store/local-store.js +16 -113
  50. package/dist/src/store/local-store.js.map +1 -1
  51. package/dist/src/store/quest-store.d.ts +5 -68
  52. package/dist/src/store/quest-store.js +9 -277
  53. package/dist/src/store/quest-store.js.map +1 -1
  54. package/dist/src/store/status-store.d.ts +5 -68
  55. package/dist/src/store/status-store.js +8 -281
  56. package/dist/src/store/status-store.js.map +1 -1
  57. package/package.json +1 -1
  58. package/skills/bp-open-dashboard/SKILL.md +1 -1
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Extracts classification signals from a parsed session.
3
+ * This is pure data extraction - no scoring or classification.
4
+ * The server handles all classification logic.
5
+ */
6
+ export function extractSignals(parsed) {
7
+ const toolCounts = {};
8
+ const writeEditPaths = [];
9
+ const bashCommands = [];
10
+ const mcpServers = new Set();
11
+ const skills = [];
12
+ for (const tc of parsed.toolCalls) {
13
+ toolCounts[tc.name] = (toolCounts[tc.name] || 0) + 1;
14
+ if ((tc.name === "Write" || tc.name === "Edit") && tc.input.file_path) {
15
+ writeEditPaths.push(tc.input.file_path);
16
+ }
17
+ if (tc.name === "Bash" && tc.input.command) {
18
+ bashCommands.push(tc.input.command);
19
+ }
20
+ if (tc.name.startsWith("mcp__")) {
21
+ mcpServers.add(tc.name.split("__")[1] || "");
22
+ }
23
+ if (tc.name === "Skill" && tc.input.skill) {
24
+ skills.push(tc.input.skill);
25
+ }
26
+ }
27
+ let durationMinutes = 0;
28
+ if (parsed.startTime && parsed.endTime) {
29
+ durationMinutes = Math.round((new Date(parsed.endTime).getTime() - new Date(parsed.startTime).getTime()) / 60000);
30
+ }
31
+ const estimatedTokens = parsed.toolCalls.length * 1500 + parsed.userPromptCount * 2000;
32
+ const projectName = parsed.projectPath.split("/").filter(Boolean).pop() || "";
33
+ return {
34
+ timestamp: parsed.startTime || new Date().toISOString(),
35
+ end_time: parsed.endTime,
36
+ project_name: projectName,
37
+ user_prompt_count: parsed.userPromptCount,
38
+ duration_minutes: durationMinutes,
39
+ estimated_tokens: estimatedTokens,
40
+ summary: parsed.summary || "",
41
+ permission_mode: parsed.permissionMode,
42
+ tool_counts: toolCounts,
43
+ files_touched: parsed.filesTouched,
44
+ write_edit_paths: writeEditPaths,
45
+ bash_commands: bashCommands,
46
+ mcp_servers_used: [...mcpServers],
47
+ skills_invoked: skills,
48
+ };
49
+ }
50
+ //# sourceMappingURL=extract-signals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-signals.js","sourceRoot":"","sources":["../../../src/readers/extract-signals.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAqBH,MAAM,UAAU,cAAc,CAAC,MAAqB;IAClD,MAAM,UAAU,GAA2B,EAAE,CAAC;IAC9C,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QAClC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAErD,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACtE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,SAAmB,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YAC3C,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,OAAiB,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAe,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACvC,eAAe,GAAG,IAAI,CAAC,KAAK,CAC1B,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK,CACpF,CAAC;IACJ,CAAC;IAED,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC;IACvF,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IAE9E,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACvD,QAAQ,EAAE,MAAM,CAAC,OAAO;QACxB,YAAY,EAAE,WAAW;QACzB,iBAAiB,EAAE,MAAM,CAAC,eAAe;QACzC,gBAAgB,EAAE,eAAe;QACjC,gBAAgB,EAAE,eAAe;QACjC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;QAC7B,eAAe,EAAE,MAAM,CAAC,cAAc;QACtC,WAAW,EAAE,UAAU;QACvB,aAAa,EAAE,MAAM,CAAC,YAAY;QAClC,gBAAgB,EAAE,cAAc;QAChC,aAAa,EAAE,YAAY;QAC3B,gBAAgB,EAAE,CAAC,GAAG,UAAU,CAAC;QACjC,cAAc,EAAE,MAAM;KACvB,CAAC;AACJ,CAAC"}
@@ -73,17 +73,3 @@ export declare function parseSession(filePath: string): ParsedSession | null;
73
73
  * Parse all sessions across all projects.
74
74
  */
75
75
  export declare function parseAllSessions(): ParsedSession[];
76
- /** Workspace and tooling data extracted from a session. */
77
- export interface SessionTooling {
78
- mcpServersUsed: string[];
79
- mcpToolCounts: Record<string, number>;
80
- skillsInvoked: string[];
81
- toolCounts: Record<string, number>;
82
- appsDetected: string[];
83
- editorsDetected: string[];
84
- techStack: string[];
85
- }
86
- /**
87
- * Extract MCP servers, skills, tool counts, and workspace apps from a parsed session.
88
- */
89
- export declare function extractTooling(session: ParsedSession): SessionTooling;
@@ -181,130 +181,11 @@ function extractFilePathsFromCommand(command, filesSet) {
181
181
  const pathRegex = /\/[\w./-]+\.\w+/g;
182
182
  const matches = command.match(pathRegex);
183
183
  if (matches) {
184
- for (const m of matches) {
185
- if (!m.includes("node_modules") && !m.startsWith("/dev/") && !m.startsWith("/tmp/")) {
186
- filesSet.add(m);
184
+ for (const filePath of matches) {
185
+ if (!filePath.includes("node_modules") && !filePath.startsWith("/dev/") && !filePath.startsWith("/tmp/")) {
186
+ filesSet.add(filePath);
187
187
  }
188
188
  }
189
189
  }
190
190
  }
191
- const MCP_SERVER_LABELS = {
192
- "claude_ai_Notion": "Notion", "notion": "Notion",
193
- "claude_ai_Canva": "Canva", "canva": "Canva",
194
- "supabase-prod": "Supabase", "supabase-dev": "Supabase", "supabase": "Supabase",
195
- "posthog": "PostHog",
196
- "excalidraw": "Excalidraw",
197
- "gemini": "Google Gemini",
198
- "slack": "Slack",
199
- "linear": "Linear",
200
- "github": "GitHub",
201
- };
202
- /**
203
- * Extract MCP servers, skills, tool counts, and workspace apps from a parsed session.
204
- */
205
- export function extractTooling(session) {
206
- const mcpServers = new Set();
207
- const mcpToolCounts = {};
208
- const skills = [];
209
- const toolCounts = {};
210
- const apps = new Set();
211
- const editors = new Set();
212
- const tech = new Set();
213
- for (const tc of session.toolCalls) {
214
- // Tool counts
215
- toolCounts[tc.name] = (toolCounts[tc.name] || 0) + 1;
216
- // MCP detection
217
- if (tc.name.startsWith("mcp__")) {
218
- const parts = tc.name.split("__");
219
- const server = parts[1] || "";
220
- const tool = parts.slice(2).join("__");
221
- mcpServers.add(server);
222
- if (tool)
223
- mcpToolCounts[tool] = (mcpToolCounts[tool] || 0) + 1;
224
- // Map to app labels
225
- const label = MCP_SERVER_LABELS[server];
226
- if (label)
227
- apps.add(label);
228
- }
229
- // Skill detection
230
- if (tc.name === "Skill") {
231
- const skillName = tc.input?.skill || "";
232
- if (skillName)
233
- skills.push(skillName);
234
- }
235
- // Bash command analysis
236
- if (tc.name === "Bash") {
237
- const cmd = tc.input?.command || "";
238
- // Editor detection
239
- if (cmd.includes("cursor ") || cmd.includes("cursor."))
240
- editors.add("Cursor");
241
- if (cmd.match(/\bcode\b/) && (cmd.includes("code .") || cmd.includes("code -")))
242
- editors.add("VS Code");
243
- if (cmd.match(/\bvim\b|\bnvim\b/))
244
- editors.add("Vim/Neovim");
245
- // App detection
246
- if (cmd.includes("open -a")) {
247
- const match = cmd.match(/open -a ["']?([^"'\s]+)/);
248
- if (match)
249
- apps.add(match[1]);
250
- }
251
- if (cmd.includes("docker"))
252
- apps.add("Docker");
253
- if (cmd.includes("vercel"))
254
- apps.add("Vercel");
255
- if (cmd.includes("netlify"))
256
- apps.add("Netlify");
257
- if (cmd.includes("gh "))
258
- apps.add("GitHub CLI");
259
- if (cmd.includes("supabase "))
260
- apps.add("Supabase CLI");
261
- if (cmd.includes("firebase"))
262
- apps.add("Firebase");
263
- if (cmd.includes("obsidian"))
264
- apps.add("Obsidian");
265
- // Tech stack
266
- if (cmd.match(/\bnpm\b|\bnpx\b|\bpnpm\b|\byarn\b|\bbun\b/))
267
- tech.add("Node.js");
268
- if (cmd.match(/\bpython\b|\bpip\b/))
269
- tech.add("Python");
270
- if (cmd.match(/\bgo\b/) && cmd.includes("go "))
271
- tech.add("Go");
272
- if (cmd.match(/\bcargo\b|\brustc\b/))
273
- tech.add("Rust");
274
- if (cmd.includes("next "))
275
- tech.add("Next.js");
276
- if (cmd.includes("vite"))
277
- tech.add("Vite");
278
- if (cmd.includes("tailwind"))
279
- tech.add("Tailwind");
280
- if (cmd.includes("prisma"))
281
- tech.add("Prisma");
282
- if (cmd.match(/\bjest\b|\bvitest\b/))
283
- tech.add("Testing");
284
- }
285
- // File path analysis for editors/apps
286
- if (tc.name === "Read" || tc.name === "Edit" || tc.name === "Write") {
287
- const fp = tc.input?.file_path || "";
288
- if (fp.includes(".obsidian/"))
289
- apps.add("Obsidian");
290
- if (fp.includes(".vscode/"))
291
- editors.add("VS Code");
292
- if (fp.includes(".cursor/"))
293
- editors.add("Cursor");
294
- if (fp.includes(".github/workflows"))
295
- apps.add("GitHub Actions");
296
- if (fp.includes("Dockerfile") || fp.includes("docker-compose"))
297
- apps.add("Docker");
298
- }
299
- }
300
- return {
301
- mcpServersUsed: [...mcpServers],
302
- mcpToolCounts,
303
- skillsInvoked: skills,
304
- toolCounts,
305
- appsDetected: [...apps],
306
- editorsDetected: [...editors],
307
- techStack: [...tech],
308
- };
309
- }
310
191
  //# sourceMappingURL=session-reader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-reader.js","sourceRoot":"","sources":["../../../src/readers/session-reader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-reader.js","sourceRoot":"","sources":["../../../src/readers/session-reader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Shared session scanning and syncing utilities.
3
+ * Used by setup (backfill), catch-up (missed sessions), and log-session (hook).
4
+ */
5
+ import { type SessionSignals } from "./extract-signals.js";
6
+ /**
7
+ * Scan all session files and extract signals.
8
+ */
9
+ export declare function scanAllSessions(): SessionSignals[];
10
+ /**
11
+ * Scan session files modified after a cutoff timestamp.
12
+ */
13
+ export declare function scanRecentSessions(cutoffMs: number): SessionSignals[];
14
+ /**
15
+ * Find and extract signals from the most recently modified session file.
16
+ */
17
+ export declare function scanMostRecentSession(): SessionSignals | null;
18
+ /**
19
+ * Sync sessions to the server in batches. Server deduplicates.
20
+ */
21
+ export declare function syncToServer(sessions: SessionSignals[], token: string): Promise<{
22
+ synced: number;
23
+ failed: boolean;
24
+ }>;
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Shared session scanning and syncing utilities.
3
+ * Used by setup (backfill), catch-up (missed sessions), and log-session (hook).
4
+ */
5
+ import { readdirSync, statSync } from "fs";
6
+ import { join } from "path";
7
+ import { homedir } from "os";
8
+ import { parseSession, parseAllSessions } from "./session-reader.js";
9
+ import { extractSignals } from "./extract-signals.js";
10
+ import { API_BASE } from "../api-client.js";
11
+ const PROJECTS_DIR = join(homedir(), ".claude", "projects");
12
+ const BATCH_SIZE = 25;
13
+ const SYNC_TIMEOUT_MS = 30000;
14
+ /**
15
+ * Scan all session files and extract signals.
16
+ */
17
+ export function scanAllSessions() {
18
+ return parseAllSessions().map(s => extractSignals(s));
19
+ }
20
+ /**
21
+ * Scan session files modified after a cutoff timestamp.
22
+ */
23
+ export function scanRecentSessions(cutoffMs) {
24
+ const results = [];
25
+ try {
26
+ for (const projectDir of readdirSync(PROJECTS_DIR)) {
27
+ const fullDir = join(PROJECTS_DIR, projectDir);
28
+ if (!statSync(fullDir).isDirectory())
29
+ continue;
30
+ for (const file of readdirSync(fullDir)) {
31
+ if (!file.endsWith(".jsonl"))
32
+ continue;
33
+ const fullPath = join(fullDir, file);
34
+ if (statSync(fullPath).mtimeMs < cutoffMs)
35
+ continue;
36
+ const parsed = parseSession(fullPath);
37
+ if (!parsed || parsed.userPromptCount === 0)
38
+ continue;
39
+ results.push(extractSignals(parsed));
40
+ }
41
+ }
42
+ }
43
+ catch {
44
+ // Can't read projects dir
45
+ }
46
+ return results;
47
+ }
48
+ /**
49
+ * Find and extract signals from the most recently modified session file.
50
+ */
51
+ export function scanMostRecentSession() {
52
+ let newest = null;
53
+ try {
54
+ for (const projectDir of readdirSync(PROJECTS_DIR)) {
55
+ const fullDir = join(PROJECTS_DIR, projectDir);
56
+ if (!statSync(fullDir).isDirectory())
57
+ continue;
58
+ for (const file of readdirSync(fullDir)) {
59
+ if (!file.endsWith(".jsonl"))
60
+ continue;
61
+ const fullPath = join(fullDir, file);
62
+ const mtime = statSync(fullPath).mtimeMs;
63
+ if (!newest || mtime > newest.mtime) {
64
+ newest = { path: fullPath, mtime };
65
+ }
66
+ }
67
+ }
68
+ }
69
+ catch {
70
+ return null;
71
+ }
72
+ if (!newest)
73
+ return null;
74
+ // Only process if modified in the last 5 minutes
75
+ if (Date.now() - newest.mtime > 5 * 60 * 1000)
76
+ return null;
77
+ const parsed = parseSession(newest.path);
78
+ if (!parsed || parsed.userPromptCount === 0)
79
+ return null;
80
+ return extractSignals(parsed);
81
+ }
82
+ /**
83
+ * Sync sessions to the server in batches. Server deduplicates.
84
+ */
85
+ export async function syncToServer(sessions, token) {
86
+ let synced = 0;
87
+ let failed = false;
88
+ for (let i = 0; i < sessions.length; i += BATCH_SIZE) {
89
+ const batch = sessions.slice(i, i + BATCH_SIZE);
90
+ try {
91
+ const res = await fetch(`${API_BASE}/api/buildpartner/sync`, {
92
+ method: "POST",
93
+ headers: {
94
+ "Authorization": `Bearer ${token}`,
95
+ "Content-Type": "application/json",
96
+ },
97
+ body: JSON.stringify({ sessions: batch }),
98
+ signal: AbortSignal.timeout(SYNC_TIMEOUT_MS),
99
+ });
100
+ if (res.ok) {
101
+ synced += batch.length;
102
+ }
103
+ else {
104
+ failed = true;
105
+ }
106
+ }
107
+ catch {
108
+ failed = true;
109
+ }
110
+ }
111
+ return { synced, failed };
112
+ }
113
+ //# sourceMappingURL=session-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-sync.js","sourceRoot":"","sources":["../../../src/readers/session-sync.ts"],"names":[],"mappings":"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"}
@@ -1,72 +1,24 @@
1
- import type { ActivityType } from "../classifiers/activity-classifier.js";
1
+ /**
2
+ * Local configuration store.
3
+ * Manages auth credentials (~/.buildpartner/auth.json) and error logging.
4
+ * This is the ONLY local state BuildPartner keeps. Everything else lives on the server.
5
+ */
2
6
  export interface AuthData {
3
7
  email: string;
4
8
  username: string;
5
9
  token: string;
6
10
  profile_url: string;
7
11
  created_at: string;
12
+ /** Timestamp of the last successful session sync to the server */
13
+ last_session_sync?: string;
8
14
  }
9
- export interface ProfileData {
10
- path: string;
11
- path_scores: Record<string, number>;
12
- streak_current: number;
13
- streak_best: number;
14
- total_sessions: number;
15
- total_tokens: number;
16
- active_since: string;
17
- last_session: string;
18
- workspace?: WorkspaceData;
19
- onboarding?: {
20
- use_case: string;
21
- experience: string;
22
- goal: string;
23
- };
24
- }
25
- export interface WorkspaceData {
26
- mcp_servers: Record<string, number>;
27
- skills: Record<string, number>;
28
- apps: Record<string, number>;
29
- editors: Record<string, number>;
30
- tech_stack: Record<string, number>;
31
- }
32
- export interface SessionEntry {
33
- id: string;
34
- timestamp: string;
35
- project: string;
36
- activity_type: ActivityType;
37
- tokens: number;
38
- duration_minutes: number;
39
- prompts: number;
40
- files_touched: string[];
41
- summary: string;
42
- mcp_servers_used: string[];
43
- mcp_tool_counts: Record<string, number>;
44
- skills_invoked: string[];
45
- tool_counts: Record<string, number>;
46
- }
47
- export interface HighlightEntry {
48
- id: string;
49
- session_id: string;
50
- title: string;
51
- description: string;
52
- activity_type: ActivityType;
53
- tech_stack: string[];
54
- created_at: string;
55
- }
15
+ /** Ensure ~/.buildpartner/ directory exists */
56
16
  export declare function ensureDir(): void;
17
+ /** Get the path to ~/.buildpartner/ */
57
18
  export declare function getBuildPartnerDir(): string;
19
+ /** Read the user's auth credentials. Returns null if not set up yet. */
58
20
  export declare function readAuth(): AuthData | null;
21
+ /** Save auth credentials to disk. */
59
22
  export declare function writeAuth(auth: AuthData): void;
60
- export declare function readProfile(): ProfileData | null;
61
- export declare function writeProfile(profile: ProfileData): void;
62
- export declare function updateProfile(updates: Partial<ProfileData>): ProfileData;
63
- export declare function readSessions(): SessionEntry[];
64
- export declare function appendSession(entry: Omit<SessionEntry, "id">): SessionEntry;
65
- export declare function writeSessions(entries: SessionEntry[]): void;
66
- /**
67
- * Check if a session has already been logged (by timestamp + project combo).
68
- */
69
- export declare function isSessionLogged(timestamp: string, project: string): boolean;
70
- export declare function readHighlights(): HighlightEntry[];
71
- export declare function appendHighlight(entry: Omit<HighlightEntry, "id" | "created_at">): HighlightEntry;
23
+ /** Append an error to the local error log for diagnostics. */
72
24
  export declare function logError(error: unknown): void;
@@ -1,145 +1,48 @@
1
+ /**
2
+ * Local configuration store.
3
+ * Manages auth credentials (~/.buildpartner/auth.json) and error logging.
4
+ * This is the ONLY local state BuildPartner keeps. Everything else lives on the server.
5
+ */
1
6
  import { readFileSync, writeFileSync, appendFileSync, mkdirSync, existsSync } from "fs";
2
7
  import { join } from "path";
3
8
  import { homedir } from "os";
4
- import { v4 as uuidv4 } from "uuid";
5
9
  const BUILDPARTNER_DIR = join(homedir(), ".buildpartner");
6
- const AUTH_PATH = join(BUILDPARTNER_DIR, "auth.json");
7
- const PROFILE_PATH = join(BUILDPARTNER_DIR, "profile.json");
8
- const SESSIONS_PATH = join(BUILDPARTNER_DIR, "sessions.jsonl");
9
- const HIGHLIGHTS_PATH = join(BUILDPARTNER_DIR, "highlights.jsonl");
10
- const ERRORS_PATH = join(BUILDPARTNER_DIR, "errors.log");
11
- // --- Directory ---
10
+ const AUTH_FILE = join(BUILDPARTNER_DIR, "auth.json");
11
+ const ERROR_LOG = join(BUILDPARTNER_DIR, "errors.log");
12
+ /** Ensure ~/.buildpartner/ directory exists */
12
13
  export function ensureDir() {
13
14
  if (!existsSync(BUILDPARTNER_DIR)) {
14
15
  mkdirSync(BUILDPARTNER_DIR, { recursive: true });
15
16
  }
16
17
  }
18
+ /** Get the path to ~/.buildpartner/ */
17
19
  export function getBuildPartnerDir() {
18
20
  return BUILDPARTNER_DIR;
19
21
  }
20
- // --- Auth ---
22
+ /** Read the user's auth credentials. Returns null if not set up yet. */
21
23
  export function readAuth() {
22
24
  try {
23
- return JSON.parse(readFileSync(AUTH_PATH, "utf-8"));
25
+ return JSON.parse(readFileSync(AUTH_FILE, "utf-8"));
24
26
  }
25
27
  catch {
26
28
  return null;
27
29
  }
28
30
  }
31
+ /** Save auth credentials to disk. */
29
32
  export function writeAuth(auth) {
30
33
  ensureDir();
31
- writeFileSync(AUTH_PATH, JSON.stringify(auth, null, 2) + "\n");
32
- }
33
- // --- Profile ---
34
- export function readProfile() {
35
- try {
36
- return JSON.parse(readFileSync(PROFILE_PATH, "utf-8"));
37
- }
38
- catch {
39
- return null;
40
- }
41
- }
42
- export function writeProfile(profile) {
43
- ensureDir();
44
- writeFileSync(PROFILE_PATH, JSON.stringify(profile, null, 2) + "\n");
45
- }
46
- export function updateProfile(updates) {
47
- const current = readProfile() || {
48
- path: "unknown",
49
- path_scores: {},
50
- streak_current: 0,
51
- streak_best: 0,
52
- total_sessions: 0,
53
- total_tokens: 0,
54
- active_since: new Date().toISOString(),
55
- last_session: new Date().toISOString(),
56
- };
57
- const updated = { ...current, ...updates };
58
- writeProfile(updated);
59
- return updated;
60
- }
61
- // --- Sessions ---
62
- export function readSessions() {
63
- try {
64
- const raw = readFileSync(SESSIONS_PATH, "utf-8");
65
- const entries = [];
66
- for (const line of raw.split("\n")) {
67
- const trimmed = line.trim();
68
- if (!trimmed)
69
- continue;
70
- try {
71
- entries.push(JSON.parse(trimmed));
72
- }
73
- catch {
74
- // skip
75
- }
76
- }
77
- return entries;
78
- }
79
- catch {
80
- return [];
81
- }
82
- }
83
- export function appendSession(entry) {
84
- ensureDir();
85
- const full = { id: uuidv4(), ...entry };
86
- appendFileSync(SESSIONS_PATH, JSON.stringify(full) + "\n");
87
- return full;
88
- }
89
- export function writeSessions(entries) {
90
- ensureDir();
91
- const content = entries.map((e) => JSON.stringify(e)).join("\n") + "\n";
92
- writeFileSync(SESSIONS_PATH, content);
93
- }
94
- /**
95
- * Check if a session has already been logged (by timestamp + project combo).
96
- */
97
- export function isSessionLogged(timestamp, project) {
98
- const sessions = readSessions();
99
- return sessions.some((s) => s.timestamp === timestamp && s.project === project);
100
- }
101
- // --- Highlights ---
102
- export function readHighlights() {
103
- try {
104
- const raw = readFileSync(HIGHLIGHTS_PATH, "utf-8");
105
- const entries = [];
106
- for (const line of raw.split("\n")) {
107
- const trimmed = line.trim();
108
- if (!trimmed)
109
- continue;
110
- try {
111
- entries.push(JSON.parse(trimmed));
112
- }
113
- catch {
114
- // skip
115
- }
116
- }
117
- return entries;
118
- }
119
- catch {
120
- return [];
121
- }
122
- }
123
- export function appendHighlight(entry) {
124
- ensureDir();
125
- const full = {
126
- id: uuidv4(),
127
- created_at: new Date().toISOString(),
128
- ...entry,
129
- };
130
- appendFileSync(HIGHLIGHTS_PATH, JSON.stringify(full) + "\n");
131
- return full;
34
+ writeFileSync(AUTH_FILE, JSON.stringify(auth, null, 2) + "\n");
132
35
  }
133
- // --- Error logging ---
36
+ /** Append an error to the local error log for diagnostics. */
134
37
  export function logError(error) {
135
38
  try {
136
39
  ensureDir();
137
40
  const timestamp = new Date().toISOString();
138
41
  const message = error instanceof Error ? error.stack || error.message : String(error);
139
- appendFileSync(ERRORS_PATH, `[${timestamp}] ${message}\n`);
42
+ appendFileSync(ERROR_LOG, `[${timestamp}] ${message}\n`);
140
43
  }
141
44
  catch {
142
- // Silently fail — we can't even log errors
45
+ // If we can't even log errors, silently fail
143
46
  }
144
47
  }
145
48
  //# sourceMappingURL=local-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"local-store.js","sourceRoot":"","sources":["../../../src/store/local-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACxF,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAGpC,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,eAAe,CAAC,CAAC;AAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;AACtD,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;AAC5D,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;AAC/D,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;AACnE,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;AA2DzD,oBAAoB;AAEpB,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAClC,SAAS,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,eAAe;AAEf,MAAM,UAAU,QAAQ;IACtB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAa,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,SAAS,EAAE,CAAC;IACZ,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACjE,CAAC;AAED,kBAAkB;AAElB,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAgB,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAoB;IAC/C,SAAS,EAAE,CAAC;IACZ,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAA6B;IACzD,MAAM,OAAO,GAAG,WAAW,EAAE,IAAI;QAC/B,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,EAAE;QACf,cAAc,EAAE,CAAC;QACjB,WAAW,EAAE,CAAC;QACd,cAAc,EAAE,CAAC;QACjB,YAAY,EAAE,CAAC;QACf,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACtC,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACvC,CAAC;IACF,MAAM,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;IAC3C,YAAY,CAAC,OAAO,CAAC,CAAC;IACtB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,mBAAmB;AAEnB,MAAM,UAAU,YAAY;IAC1B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO;gBAAE,SAAS;YACvB,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAiB,CAAC,CAAC;YACpD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO;YACT,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAA+B;IAC3D,SAAS,EAAE,CAAC;IACZ,MAAM,IAAI,GAAiB,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC;IACtD,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAuB;IACnD,SAAS,EAAE,CAAC;IACZ,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACxE,aAAa,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE,OAAe;IAChE,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;AAClF,CAAC;AAED,qBAAqB;AAErB,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,OAAO,GAAqB,EAAE,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO;gBAAE,SAAS;YACvB,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAmB,CAAC,CAAC;YACtD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO;YACT,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAgD;IAC9E,SAAS,EAAE,CAAC;IACZ,MAAM,IAAI,GAAmB;QAC3B,EAAE,EAAE,MAAM,EAAE;QACZ,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACpC,GAAG,KAAK;KACT,CAAC;IACF,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,wBAAwB;AAExB,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,IAAI,CAAC;QACH,SAAS,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtF,cAAc,CAAC,WAAW,EAAE,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,2CAA2C;IAC7C,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"local-store.js","sourceRoot":"","sources":["../../../src/store/local-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACxF,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAE7B,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,eAAe,CAAC,CAAC;AAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;AACtD,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;AAYvD,+CAA+C;AAC/C,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAClC,SAAS,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,kBAAkB;IAChC,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,QAAQ;IACtB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAa,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,qCAAqC;AACrC,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,SAAS,EAAE,CAAC;IACZ,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACjE,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,IAAI,CAAC;QACH,SAAS,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtF,cAAc,CAAC,SAAS,EAAE,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,6CAA6C;IAC/C,CAAC;AACH,CAAC"}