braindump 0.5.0 → 1.0.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 (60) hide show
  1. package/README.md +73 -22
  2. package/dist/adapters/claude-code/adapter.d.ts.map +1 -1
  3. package/dist/adapters/claude-code/adapter.js +30 -3
  4. package/dist/adapters/claude-code/adapter.js.map +1 -1
  5. package/dist/adapters/codex/adapter.d.ts +1 -0
  6. package/dist/adapters/codex/adapter.d.ts.map +1 -1
  7. package/dist/adapters/codex/adapter.js +27 -0
  8. package/dist/adapters/codex/adapter.js.map +1 -1
  9. package/dist/adapters/copilot/adapter.d.ts +29 -0
  10. package/dist/adapters/copilot/adapter.d.ts.map +1 -0
  11. package/dist/adapters/copilot/adapter.js +501 -0
  12. package/dist/adapters/copilot/adapter.js.map +1 -0
  13. package/dist/adapters/cursor/adapter.d.ts.map +1 -1
  14. package/dist/adapters/cursor/adapter.js +17 -7
  15. package/dist/adapters/cursor/adapter.js.map +1 -1
  16. package/dist/adapters/droid/adapter.d.ts +27 -0
  17. package/dist/adapters/droid/adapter.d.ts.map +1 -0
  18. package/dist/adapters/droid/adapter.js +507 -0
  19. package/dist/adapters/droid/adapter.js.map +1 -0
  20. package/dist/adapters/gemini/adapter.d.ts +29 -0
  21. package/dist/adapters/gemini/adapter.d.ts.map +1 -0
  22. package/dist/adapters/gemini/adapter.js +456 -0
  23. package/dist/adapters/gemini/adapter.js.map +1 -0
  24. package/dist/adapters/index.d.ts.map +1 -1
  25. package/dist/adapters/index.js +8 -0
  26. package/dist/adapters/index.js.map +1 -1
  27. package/dist/adapters/opencode/adapter.d.ts +32 -0
  28. package/dist/adapters/opencode/adapter.d.ts.map +1 -0
  29. package/dist/adapters/opencode/adapter.js +643 -0
  30. package/dist/adapters/opencode/adapter.js.map +1 -0
  31. package/dist/cli/index.js +213 -42
  32. package/dist/cli/index.js.map +1 -1
  33. package/dist/core/compression.d.ts.map +1 -1
  34. package/dist/core/compression.js +12 -0
  35. package/dist/core/compression.js.map +1 -1
  36. package/dist/core/launcher.d.ts +20 -0
  37. package/dist/core/launcher.d.ts.map +1 -0
  38. package/dist/core/launcher.js +87 -0
  39. package/dist/core/launcher.js.map +1 -0
  40. package/dist/core/prompt-builder.d.ts.map +1 -1
  41. package/dist/core/prompt-builder.js +15 -0
  42. package/dist/core/prompt-builder.js.map +1 -1
  43. package/dist/core/registry.d.ts.map +1 -1
  44. package/dist/core/registry.js +48 -0
  45. package/dist/core/registry.js.map +1 -1
  46. package/dist/core/session-cache.d.ts +17 -0
  47. package/dist/core/session-cache.d.ts.map +1 -0
  48. package/dist/core/session-cache.js +59 -0
  49. package/dist/core/session-cache.js.map +1 -0
  50. package/dist/core/tool-summarizer.d.ts +40 -0
  51. package/dist/core/tool-summarizer.d.ts.map +1 -0
  52. package/dist/core/tool-summarizer.js +73 -0
  53. package/dist/core/tool-summarizer.js.map +1 -0
  54. package/dist/core/validation.d.ts +21 -2
  55. package/dist/core/validation.d.ts.map +1 -1
  56. package/dist/core/validation.js +6 -1
  57. package/dist/core/validation.js.map +1 -1
  58. package/dist/types/index.d.ts +7 -1
  59. package/dist/types/index.d.ts.map +1 -1
  60. package/package.json +7 -1
@@ -0,0 +1,87 @@
1
+ import { execSync, spawn } from "node:child_process";
2
+ import { writeFileSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ /**
5
+ * Launch commands for each target tool.
6
+ */
7
+ const LAUNCH_COMMANDS = {
8
+ "claude-code": { cmd: "claude", promptMode: "positional" },
9
+ codex: { cmd: "codex", promptMode: "positional" },
10
+ cursor: { cmd: "cursor", promptMode: "none" },
11
+ copilot: { cmd: "copilot", promptMode: "flag", flag: "-i" },
12
+ gemini: { cmd: "gemini", promptMode: "positional" },
13
+ opencode: { cmd: "opencode", promptMode: "flag", flag: "--prompt" },
14
+ droid: { cmd: "droid", promptMode: "subcommand" },
15
+ };
16
+ const REFERENCE_THRESHOLD = 50_000; // 50KB — auto-switch to reference mode
17
+ /**
18
+ * Check if a tool is installed on this system.
19
+ */
20
+ export function isToolInstalled(tool) {
21
+ try {
22
+ execSync(`which ${tool} 2>/dev/null || where ${tool} 2>nul`, {
23
+ stdio: "ignore",
24
+ });
25
+ return true;
26
+ }
27
+ catch {
28
+ return false;
29
+ }
30
+ }
31
+ /**
32
+ * Get a list of installed agent tools (excluding a given source).
33
+ */
34
+ export function getInstalledTools(exclude) {
35
+ const results = [];
36
+ for (const [id, config] of Object.entries(LAUNCH_COMMANDS)) {
37
+ if (id === exclude)
38
+ continue;
39
+ if (isToolInstalled(config.cmd)) {
40
+ results.push({ id: id, cmd: config.cmd });
41
+ }
42
+ }
43
+ return results;
44
+ }
45
+ /**
46
+ * Launch a target tool with the handoff prompt.
47
+ */
48
+ export function launchTool(agentId, prompt, options = {}) {
49
+ const config = LAUNCH_COMMANDS[agentId];
50
+ if (!config) {
51
+ throw new Error(`Unknown target agent: ${agentId}`);
52
+ }
53
+ const useReference = options.reference || prompt.length > REFERENCE_THRESHOLD;
54
+ let effectivePrompt;
55
+ if (useReference) {
56
+ const refPath = join(options.projectPath || process.cwd(), ".braindump-handoff.md");
57
+ writeFileSync(refPath, prompt);
58
+ effectivePrompt = `Read the file at ${refPath} and follow the instructions inside. It contains a session handoff from a previous AI coding agent — continue the work described there.`;
59
+ }
60
+ else {
61
+ effectivePrompt = prompt;
62
+ }
63
+ const args = [];
64
+ switch (config.promptMode) {
65
+ case "positional":
66
+ args.push(effectivePrompt);
67
+ break;
68
+ case "flag":
69
+ args.push(config.flag, effectivePrompt);
70
+ break;
71
+ case "subcommand":
72
+ args.push("exec", effectivePrompt);
73
+ break;
74
+ case "none":
75
+ // cursor just opens the project
76
+ if (options.projectPath) {
77
+ args.push(options.projectPath);
78
+ }
79
+ break;
80
+ }
81
+ spawn(config.cmd, args, {
82
+ stdio: "inherit",
83
+ cwd: options.projectPath || process.cwd(),
84
+ detached: false,
85
+ });
86
+ }
87
+ //# sourceMappingURL=launcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launcher.js","sourceRoot":"","sources":["../../src/core/launcher.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/core/prompt-builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAiBrF;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,iBAAiB,EAC7B,WAAW,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,MAAM,GAC3C,MAAM,CA+ER"}
1
+ {"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/core/prompt-builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAiBrF;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,iBAAiB,EAC7B,WAAW,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,MAAM,GAC3C,MAAM,CA8FR"}
@@ -74,6 +74,21 @@ export function buildResumePrompt(session, compressed, targetAgent) {
74
74
  ``,
75
75
  compressed.content,
76
76
  ``,
77
+ ...(session.toolActivity && session.toolActivity.length > 0
78
+ ? [
79
+ `---`,
80
+ ``,
81
+ `## Tool Activity`,
82
+ ``,
83
+ ...session.toolActivity.map((t) => {
84
+ const samplesStr = t.samples.length > 0
85
+ ? t.samples.map((s) => `\`${s}\``).join(" . ")
86
+ : "";
87
+ return `- **${t.name}** (x${t.count})${samplesStr ? ": " + samplesStr : ""}`;
88
+ }),
89
+ ``,
90
+ ]
91
+ : []),
77
92
  `---`,
78
93
  ``,
79
94
  `## Resume Now`,
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../src/core/prompt-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../src/core/prompt-builder.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,CAqCrD,CAAC;AAEF;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,OAAO,GAAG,WAAW,GAAG,MAAM,GACrC,MAAM,CAKR"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,CAqFrD,CAAC;AAEF;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,OAAO,GAAG,WAAW,GAAG,MAAM,GACrC,MAAM,CAKR"}
@@ -38,6 +38,54 @@ export const AGENT_REGISTRY = {
38
38
  usableTokens: 120_000,
39
39
  memoryFiles: ["AGENTS.md", "~/.codex/AGENTS.md"],
40
40
  },
41
+ copilot: {
42
+ id: "copilot",
43
+ name: "GitHub Copilot CLI",
44
+ storagePaths: {
45
+ linux: "~/.copilot/session-state/",
46
+ darwin: "~/.copilot/session-state/",
47
+ win32: "~/.copilot/session-state/",
48
+ },
49
+ contextWindow: 128_000,
50
+ usableTokens: 76_000,
51
+ memoryFiles: [],
52
+ },
53
+ gemini: {
54
+ id: "gemini",
55
+ name: "Gemini CLI",
56
+ storagePaths: {
57
+ linux: "~/.gemini/tmp/",
58
+ darwin: "~/.gemini/tmp/",
59
+ win32: "~/.gemini/tmp/",
60
+ },
61
+ contextWindow: 1_000_000,
62
+ usableTokens: 500_000,
63
+ memoryFiles: [],
64
+ },
65
+ opencode: {
66
+ id: "opencode",
67
+ name: "OpenCode",
68
+ storagePaths: {
69
+ linux: "~/.local/share/opencode/",
70
+ darwin: "~/.local/share/opencode/",
71
+ win32: "~/.local/share/opencode/",
72
+ },
73
+ contextWindow: 200_000,
74
+ usableTokens: 120_000,
75
+ memoryFiles: [],
76
+ },
77
+ droid: {
78
+ id: "droid",
79
+ name: "Factory Droid",
80
+ storagePaths: {
81
+ linux: "~/.factory/sessions/",
82
+ darwin: "~/.factory/sessions/",
83
+ win32: "~/.factory/sessions/",
84
+ },
85
+ contextWindow: 200_000,
86
+ usableTokens: 120_000,
87
+ memoryFiles: [],
88
+ },
41
89
  };
42
90
  /**
43
91
  * Get the usable token budget for a given target.
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAA+B;IACxD,aAAa,EAAE;QACb,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,aAAa;QACnB,YAAY,EAAE;YACZ,KAAK,EAAE,qBAAqB;YAC5B,MAAM,EAAE,qBAAqB;YAC7B,KAAK,EAAE,qBAAqB;SAC7B;QACD,aAAa,EAAE,OAAO;QACtB,YAAY,EAAE,OAAO;QACrB,WAAW,EAAE,CAAC,WAAW,EAAE,mBAAmB,CAAC;KAChD;IACD,MAAM,EAAE;QACN,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE;YACZ,KAAK,EAAE,yCAAyC;YAChD,MAAM,EAAE,6DAA6D;YACrE,KAAK,EAAE,yCAAyC;SACjD;QACD,aAAa,EAAE,MAAM;QACrB,YAAY,EAAE,MAAM;QACpB,WAAW,EAAE,CAAC,cAAc,EAAE,gBAAgB,CAAC;KAChD;IACD,KAAK,EAAE;QACL,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,WAAW;QACjB,YAAY,EAAE;YACZ,KAAK,EAAE,oBAAoB;YAC3B,MAAM,EAAE,oBAAoB;YAC5B,KAAK,EAAE,oBAAoB;SAC5B;QACD,aAAa,EAAE,OAAO;QACtB,YAAY,EAAE,OAAO;QACrB,WAAW,EAAE,CAAC,WAAW,EAAE,oBAAoB,CAAC;KACjD;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAsC;IAEtC,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC,CAAC,yBAAyB;IAC1C,CAAC;IACD,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC;AAC7C,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAA+B;IACxD,aAAa,EAAE;QACb,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,aAAa;QACnB,YAAY,EAAE;YACZ,KAAK,EAAE,qBAAqB;YAC5B,MAAM,EAAE,qBAAqB;YAC7B,KAAK,EAAE,qBAAqB;SAC7B;QACD,aAAa,EAAE,OAAO;QACtB,YAAY,EAAE,OAAO;QACrB,WAAW,EAAE,CAAC,WAAW,EAAE,mBAAmB,CAAC;KAChD;IACD,MAAM,EAAE;QACN,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE;YACZ,KAAK,EAAE,yCAAyC;YAChD,MAAM,EAAE,6DAA6D;YACrE,KAAK,EAAE,yCAAyC;SACjD;QACD,aAAa,EAAE,MAAM;QACrB,YAAY,EAAE,MAAM;QACpB,WAAW,EAAE,CAAC,cAAc,EAAE,gBAAgB,CAAC;KAChD;IACD,KAAK,EAAE;QACL,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,WAAW;QACjB,YAAY,EAAE;YACZ,KAAK,EAAE,oBAAoB;YAC3B,MAAM,EAAE,oBAAoB;YAC5B,KAAK,EAAE,oBAAoB;SAC5B;QACD,aAAa,EAAE,OAAO;QACtB,YAAY,EAAE,OAAO;QACrB,WAAW,EAAE,CAAC,WAAW,EAAE,oBAAoB,CAAC;KACjD;IACD,OAAO,EAAE;QACP,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,oBAAoB;QAC1B,YAAY,EAAE;YACZ,KAAK,EAAE,2BAA2B;YAClC,MAAM,EAAE,2BAA2B;YACnC,KAAK,EAAE,2BAA2B;SACnC;QACD,aAAa,EAAE,OAAO;QACtB,YAAY,EAAE,MAAM;QACpB,WAAW,EAAE,EAAE;KAChB;IACD,MAAM,EAAE;QACN,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,YAAY;QAClB,YAAY,EAAE;YACZ,KAAK,EAAE,gBAAgB;YACvB,MAAM,EAAE,gBAAgB;YACxB,KAAK,EAAE,gBAAgB;SACxB;QACD,aAAa,EAAE,SAAS;QACxB,YAAY,EAAE,OAAO;QACrB,WAAW,EAAE,EAAE;KAChB;IACD,QAAQ,EAAE;QACR,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,UAAU;QAChB,YAAY,EAAE;YACZ,KAAK,EAAE,0BAA0B;YACjC,MAAM,EAAE,0BAA0B;YAClC,KAAK,EAAE,0BAA0B;SAClC;QACD,aAAa,EAAE,OAAO;QACtB,YAAY,EAAE,OAAO;QACrB,WAAW,EAAE,EAAE;KAChB;IACD,KAAK,EAAE;QACL,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,eAAe;QACrB,YAAY,EAAE;YACZ,KAAK,EAAE,sBAAsB;YAC7B,MAAM,EAAE,sBAAsB;YAC9B,KAAK,EAAE,sBAAsB;SAC9B;QACD,aAAa,EAAE,OAAO;QACtB,YAAY,EAAE,OAAO;QACrB,WAAW,EAAE,EAAE;KAChB;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAsC;IAEtC,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC,CAAC,yBAAyB;IAC1C,CAAC;IACD,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { AgentId, SessionInfo } from "../types/index.js";
2
+ export interface CachedSessionEntry extends SessionInfo {
3
+ agentId: AgentId;
4
+ }
5
+ /**
6
+ * Get the cached session index. Returns null if stale or missing.
7
+ */
8
+ export declare function getCachedIndex(): CachedSessionEntry[] | null;
9
+ /**
10
+ * Write the session index cache.
11
+ */
12
+ export declare function writeCachedIndex(entries: CachedSessionEntry[]): void;
13
+ /**
14
+ * Invalidate (delete) the cache.
15
+ */
16
+ export declare function invalidateCache(): void;
17
+ //# sourceMappingURL=session-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-cache.d.ts","sourceRoot":"","sources":["../../src/core/session-cache.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAM9D,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,kBAAkB,EAAE,GAAG,IAAI,CA0B5D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAIpE;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAQtC"}
@@ -0,0 +1,59 @@
1
+ import { existsSync, mkdirSync, readFileSync, statSync, unlinkSync, writeFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { homedir } from "node:os";
4
+ const CACHE_DIR = join(homedir(), ".braindump");
5
+ const CACHE_FILE = join(CACHE_DIR, "sessions.jsonl");
6
+ const TTL_MS = 5 * 60 * 1000; // 5 minutes
7
+ /**
8
+ * Get the cached session index. Returns null if stale or missing.
9
+ */
10
+ export function getCachedIndex() {
11
+ if (!existsSync(CACHE_FILE)) {
12
+ return null;
13
+ }
14
+ try {
15
+ const stat = statSync(CACHE_FILE);
16
+ if (Date.now() - stat.mtimeMs > TTL_MS) {
17
+ return null; // stale
18
+ }
19
+ const content = readFileSync(CACHE_FILE, "utf-8");
20
+ const entries = [];
21
+ for (const line of content.split("\n")) {
22
+ const trimmed = line.trim();
23
+ if (!trimmed)
24
+ continue;
25
+ try {
26
+ entries.push(JSON.parse(trimmed));
27
+ }
28
+ catch {
29
+ // skip malformed lines
30
+ }
31
+ }
32
+ return entries;
33
+ }
34
+ catch {
35
+ return null;
36
+ }
37
+ }
38
+ /**
39
+ * Write the session index cache.
40
+ */
41
+ export function writeCachedIndex(entries) {
42
+ mkdirSync(CACHE_DIR, { recursive: true });
43
+ const content = entries.map((e) => JSON.stringify(e)).join("\n") + "\n";
44
+ writeFileSync(CACHE_FILE, content);
45
+ }
46
+ /**
47
+ * Invalidate (delete) the cache.
48
+ */
49
+ export function invalidateCache() {
50
+ try {
51
+ if (existsSync(CACHE_FILE)) {
52
+ unlinkSync(CACHE_FILE);
53
+ }
54
+ }
55
+ catch {
56
+ // ignore
57
+ }
58
+ }
59
+ //# sourceMappingURL=session-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-cache.js","sourceRoot":"","sources":["../../src/core/session-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnG,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AAChD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;AACrD,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;AAM1C;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC,CAAC,QAAQ;QACvB,CAAC;QAED,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,OAAO,GAAyB,EAAE,CAAC;QACzC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,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,CAAuB,CAAC,CAAC;YAC1D,CAAC;YAAC,MAAM,CAAC;gBACP,uBAAuB;YACzB,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAA6B;IAC5D,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,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,UAAU,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,UAAU,CAAC,UAAU,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;AACH,CAAC"}
@@ -0,0 +1,40 @@
1
+ import type { ToolActivitySummary } from "../types/index.js";
2
+ /**
3
+ * Collects tool invocations during session parsing and produces
4
+ * aggregated ToolActivitySummary entries.
5
+ *
6
+ * Usage:
7
+ * const collector = new SummaryCollector();
8
+ * collector.record("Bash", "npm test -> exit 0");
9
+ * collector.record("Edit", "edit src/auth.ts (+5 -2)");
10
+ * session.toolActivity = collector.getSummaries();
11
+ */
12
+ export declare class SummaryCollector {
13
+ private counts;
14
+ private samples;
15
+ private static readonly MAX_SAMPLES;
16
+ /**
17
+ * Record a tool invocation.
18
+ * @param category Normalized tool category (e.g. "Bash", "Edit", "Read")
19
+ * @param oneLiner Short description of what was done
20
+ */
21
+ record(category: string, oneLiner: string): void;
22
+ /**
23
+ * Return aggregated summaries sorted by count descending.
24
+ */
25
+ getSummaries(): ToolActivitySummary[];
26
+ }
27
+ /** Format a shell command summary. */
28
+ export declare function shellSummary(command: string, exitCode?: number): string;
29
+ /** Format a file edit summary. */
30
+ export declare function fileSummary(filePath: string, action: "edit" | "create" | "read" | "delete", stats?: {
31
+ added?: number;
32
+ removed?: number;
33
+ }): string;
34
+ /** Format a grep/search summary. */
35
+ export declare function grepSummary(pattern: string, path?: string): string;
36
+ /** Format a glob/find summary. */
37
+ export declare function globSummary(pattern: string): string;
38
+ /** Format an MCP tool summary. */
39
+ export declare function mcpSummary(toolName: string, args?: string): string;
40
+ //# sourceMappingURL=tool-summarizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-summarizer.d.ts","sourceRoot":"","sources":["../../src/core/tool-summarizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7D;;;;;;;;;GASG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAK;IAExC;;;;OAIG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAShD;;OAEG;IACH,YAAY,IAAI,mBAAmB,EAAE;CAYtC;AAID,sCAAsC;AACtC,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAGvE;AAED,kCAAkC;AAClC,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,EAC7C,KAAK,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,MAAM,CAOR;AAED,oCAAoC;AACpC,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAGlE;AAED,kCAAkC;AAClC,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,kCAAkC;AAClC,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAGlE"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Collects tool invocations during session parsing and produces
3
+ * aggregated ToolActivitySummary entries.
4
+ *
5
+ * Usage:
6
+ * const collector = new SummaryCollector();
7
+ * collector.record("Bash", "npm test -> exit 0");
8
+ * collector.record("Edit", "edit src/auth.ts (+5 -2)");
9
+ * session.toolActivity = collector.getSummaries();
10
+ */
11
+ export class SummaryCollector {
12
+ counts = new Map();
13
+ samples = new Map();
14
+ static MAX_SAMPLES = 3;
15
+ /**
16
+ * Record a tool invocation.
17
+ * @param category Normalized tool category (e.g. "Bash", "Edit", "Read")
18
+ * @param oneLiner Short description of what was done
19
+ */
20
+ record(category, oneLiner) {
21
+ this.counts.set(category, (this.counts.get(category) ?? 0) + 1);
22
+ const existing = this.samples.get(category) ?? [];
23
+ if (existing.length < SummaryCollector.MAX_SAMPLES) {
24
+ existing.push(oneLiner);
25
+ this.samples.set(category, existing);
26
+ }
27
+ }
28
+ /**
29
+ * Return aggregated summaries sorted by count descending.
30
+ */
31
+ getSummaries() {
32
+ const results = [];
33
+ for (const [name, count] of this.counts) {
34
+ results.push({
35
+ name,
36
+ count,
37
+ samples: this.samples.get(name) ?? [],
38
+ });
39
+ }
40
+ results.sort((a, b) => b.count - a.count);
41
+ return results;
42
+ }
43
+ }
44
+ // --- Helper formatters for common tool patterns ---
45
+ /** Format a shell command summary. */
46
+ export function shellSummary(command, exitCode) {
47
+ const cmd = command.length > 60 ? command.slice(0, 57) + "..." : command;
48
+ return exitCode != null ? `$ ${cmd} -> exit ${exitCode}` : `$ ${cmd}`;
49
+ }
50
+ /** Format a file edit summary. */
51
+ export function fileSummary(filePath, action, stats) {
52
+ const name = filePath.split("/").pop() ?? filePath;
53
+ const shortPath = filePath.length > 40 ? "..." + filePath.slice(-37) : filePath;
54
+ if (stats?.added != null || stats?.removed != null) {
55
+ return `${action} ${shortPath} (+${stats.added ?? 0} -${stats.removed ?? 0})`;
56
+ }
57
+ return `${action} ${shortPath}`;
58
+ }
59
+ /** Format a grep/search summary. */
60
+ export function grepSummary(pattern, path) {
61
+ const p = pattern.length > 30 ? pattern.slice(0, 27) + "..." : pattern;
62
+ return path ? `grep "${p}" ${path}` : `grep "${p}"`;
63
+ }
64
+ /** Format a glob/find summary. */
65
+ export function globSummary(pattern) {
66
+ return `glob ${pattern}`;
67
+ }
68
+ /** Format an MCP tool summary. */
69
+ export function mcpSummary(toolName, args) {
70
+ const short = toolName.replace(/^mcp__/, "").replace(/___/g, ":");
71
+ return args ? `${short}(${args})` : short;
72
+ }
73
+ //# sourceMappingURL=tool-summarizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-summarizer.js","sourceRoot":"","sources":["../../src/core/tool-summarizer.ts"],"names":[],"mappings":"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"}
@@ -43,6 +43,10 @@ export declare const CapturedSessionSchema: z.ZodObject<{
43
43
  "claude-code": "claude-code";
44
44
  cursor: "cursor";
45
45
  codex: "codex";
46
+ copilot: "copilot";
47
+ gemini: "gemini";
48
+ opencode: "opencode";
49
+ droid: "droid";
46
50
  }>;
47
51
  capturedAt: z.ZodString;
48
52
  sessionId: z.ZodString;
@@ -92,13 +96,18 @@ export declare const CapturedSessionSchema: z.ZodObject<{
92
96
  inProgress: z.ZodOptional<z.ZodString>;
93
97
  blockers: z.ZodArray<z.ZodString>;
94
98
  }, z.core.$strip>;
99
+ toolActivity: z.ZodOptional<z.ZodArray<z.ZodObject<{
100
+ name: z.ZodString;
101
+ count: z.ZodNumber;
102
+ samples: z.ZodArray<z.ZodString>;
103
+ }, z.core.$strip>>>;
95
104
  }, z.core.$strip>;
96
105
  /**
97
106
  * Validate a CapturedSession object. Throws ZodError if invalid.
98
107
  */
99
108
  export declare function validateSession(data: unknown): {
100
109
  version: "1.0";
101
- source: "claude-code" | "cursor" | "codex";
110
+ source: "claude-code" | "cursor" | "codex" | "copilot" | "gemini" | "opencode" | "droid";
102
111
  capturedAt: string;
103
112
  sessionId: string;
104
113
  project: {
@@ -138,13 +147,18 @@ export declare function validateSession(data: unknown): {
138
147
  inProgress?: string | undefined;
139
148
  };
140
149
  sessionStartedAt?: string | undefined;
150
+ toolActivity?: {
151
+ name: string;
152
+ count: number;
153
+ samples: string[];
154
+ }[] | undefined;
141
155
  };
142
156
  /**
143
157
  * Safe validation - returns { success, data, error } without throwing.
144
158
  */
145
159
  export declare function safeValidateSession(data: unknown): z.ZodSafeParseResult<{
146
160
  version: "1.0";
147
- source: "claude-code" | "cursor" | "codex";
161
+ source: "claude-code" | "cursor" | "codex" | "copilot" | "gemini" | "opencode" | "droid";
148
162
  capturedAt: string;
149
163
  sessionId: string;
150
164
  project: {
@@ -184,5 +198,10 @@ export declare function safeValidateSession(data: unknown): z.ZodSafeParseResult
184
198
  inProgress?: string | undefined;
185
199
  };
186
200
  sessionStartedAt?: string | undefined;
201
+ toolActivity?: {
202
+ name: string;
203
+ count: number;
204
+ samples: string[];
205
+ }[] | undefined;
187
206
  }>;
188
207
  //# sourceMappingURL=validation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,yBAAyB;;;;;;;;;;;iBAMpC,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;iBAK3B,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;iBAM1B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;iBAQ/B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiBhC,CAAC;AAEH;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAE5C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAEhD"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,yBAAyB;;;;;;;;;;;iBAMpC,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;iBAK3B,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;iBAM1B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;iBAQ/B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsBhC,CAAC;AAEH;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAE5C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAEhD"}
@@ -30,7 +30,7 @@ export const ProjectContextSchema = z.object({
30
30
  });
31
31
  export const CapturedSessionSchema = z.object({
32
32
  version: z.literal("1.0"),
33
- source: z.enum(["claude-code", "cursor", "codex"]),
33
+ source: z.enum(["claude-code", "cursor", "codex", "copilot", "gemini", "opencode", "droid"]),
34
34
  capturedAt: z.string(),
35
35
  sessionId: z.string(),
36
36
  sessionStartedAt: z.string().optional(),
@@ -45,6 +45,11 @@ export const CapturedSessionSchema = z.object({
45
45
  decisions: z.array(z.string()),
46
46
  blockers: z.array(z.string()),
47
47
  task: TaskStateSchema,
48
+ toolActivity: z.array(z.object({
49
+ name: z.string(),
50
+ count: z.number(),
51
+ samples: z.array(z.string()),
52
+ })).optional(),
48
53
  });
49
54
  /**
50
55
  * Validate a CapturedSession object. Throws ZodError if invalid.
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,12 @@ export interface CapturedSession {
10
10
  decisions: string[];
11
11
  blockers: string[];
12
12
  task: TaskState;
13
+ toolActivity?: ToolActivitySummary[];
14
+ }
15
+ export interface ToolActivitySummary {
16
+ name: string;
17
+ count: number;
18
+ samples: string[];
13
19
  }
14
20
  export interface ProjectContext {
15
21
  path: string;
@@ -46,7 +52,7 @@ export interface TaskState {
46
52
  inProgress?: string;
47
53
  blockers: string[];
48
54
  }
49
- export type AgentId = "claude-code" | "cursor" | "codex";
55
+ export type AgentId = "claude-code" | "cursor" | "codex" | "copilot" | "gemini" | "opencode" | "droid";
50
56
  export interface SessionInfo {
51
57
  id: string;
52
58
  startedAt?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "braindump",
3
- "version": "0.5.0",
3
+ "version": "1.0.0",
4
4
  "description": "A CLI tool that captures your AI coding agent session and generates a portable resume prompt so you can seamlessly continue in a different agent.",
5
5
  "type": "module",
6
6
  "main": "dist/cli/index.js",
@@ -23,6 +23,10 @@
23
23
  "claude",
24
24
  "cursor",
25
25
  "codex",
26
+ "copilot",
27
+ "gemini",
28
+ "opencode",
29
+ "droid",
26
30
  "cli",
27
31
  "context",
28
32
  "session",
@@ -51,6 +55,7 @@
51
55
  "node": ">=18"
52
56
  },
53
57
  "dependencies": {
58
+ "@clack/prompts": "^1.0.1",
54
59
  "better-sqlite3": "^11.0.0",
55
60
  "boxen": "^8.0.1",
56
61
  "chalk": "^5.3.0",
@@ -58,6 +63,7 @@
58
63
  "commander": "^12.0.0",
59
64
  "glob": "^11.0.0",
60
65
  "ora": "^8.0.0",
66
+ "yaml": "^2.8.2",
61
67
  "zod": "^4.3.6"
62
68
  },
63
69
  "devDependencies": {