@kilospark/nairo 0.0.1

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 (69) hide show
  1. package/dist/api.d.ts +16 -0
  2. package/dist/api.d.ts.map +1 -0
  3. package/dist/api.js +102 -0
  4. package/dist/api.js.map +1 -0
  5. package/dist/auth-browser.d.ts +5 -0
  6. package/dist/auth-browser.d.ts.map +1 -0
  7. package/dist/auth-browser.js +217 -0
  8. package/dist/auth-browser.js.map +1 -0
  9. package/dist/commands/bootstrap.d.ts +5 -0
  10. package/dist/commands/bootstrap.d.ts.map +1 -0
  11. package/dist/commands/bootstrap.js +363 -0
  12. package/dist/commands/bootstrap.js.map +1 -0
  13. package/dist/commands/delete.d.ts +4 -0
  14. package/dist/commands/delete.d.ts.map +1 -0
  15. package/dist/commands/delete.js +64 -0
  16. package/dist/commands/delete.js.map +1 -0
  17. package/dist/commands/export.d.ts +4 -0
  18. package/dist/commands/export.d.ts.map +1 -0
  19. package/dist/commands/export.js +25 -0
  20. package/dist/commands/export.js.map +1 -0
  21. package/dist/commands/hook.d.ts +4 -0
  22. package/dist/commands/hook.d.ts.map +1 -0
  23. package/dist/commands/hook.js +242 -0
  24. package/dist/commands/hook.js.map +1 -0
  25. package/dist/commands/import.d.ts +2 -0
  26. package/dist/commands/import.d.ts.map +1 -0
  27. package/dist/commands/import.js +210 -0
  28. package/dist/commands/import.js.map +1 -0
  29. package/dist/commands/install.d.ts +9 -0
  30. package/dist/commands/install.d.ts.map +1 -0
  31. package/dist/commands/install.js +282 -0
  32. package/dist/commands/install.js.map +1 -0
  33. package/dist/commands/list.d.ts +5 -0
  34. package/dist/commands/list.d.ts.map +1 -0
  35. package/dist/commands/list.js +90 -0
  36. package/dist/commands/list.js.map +1 -0
  37. package/dist/commands/login.d.ts +2 -0
  38. package/dist/commands/login.d.ts.map +1 -0
  39. package/dist/commands/login.js +24 -0
  40. package/dist/commands/login.js.map +1 -0
  41. package/dist/commands/search.d.ts +4 -0
  42. package/dist/commands/search.d.ts.map +1 -0
  43. package/dist/commands/search.js +42 -0
  44. package/dist/commands/search.js.map +1 -0
  45. package/dist/commands/signup.d.ts +2 -0
  46. package/dist/commands/signup.d.ts.map +1 -0
  47. package/dist/commands/signup.js +6 -0
  48. package/dist/commands/signup.js.map +1 -0
  49. package/dist/config.d.ts +10 -0
  50. package/dist/config.d.ts.map +1 -0
  51. package/dist/config.js +35 -0
  52. package/dist/config.js.map +1 -0
  53. package/dist/index.d.ts +3 -0
  54. package/dist/index.d.ts.map +1 -0
  55. package/dist/index.js +93 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/prompt.d.ts +10 -0
  58. package/dist/prompt.d.ts.map +1 -0
  59. package/dist/prompt.js +37 -0
  60. package/dist/prompt.js.map +1 -0
  61. package/dist/tools/configure.d.ts +9 -0
  62. package/dist/tools/configure.d.ts.map +1 -0
  63. package/dist/tools/configure.js +326 -0
  64. package/dist/tools/configure.js.map +1 -0
  65. package/dist/tools/detect.d.ts +7 -0
  66. package/dist/tools/detect.d.ts.map +1 -0
  67. package/dist/tools/detect.js +125 -0
  68. package/dist/tools/detect.js.map +1 -0
  69. package/package.json +24 -0
@@ -0,0 +1,242 @@
1
+ import { loadConfig } from "../config.js";
2
+ import { apiClient } from "../api.js";
3
+ import { execSync } from "node:child_process";
4
+ // ---------------------------------------------------------------------------
5
+ // Cooldown — prevent duplicate observations for rapid edits to same file
6
+ // ---------------------------------------------------------------------------
7
+ const COOLDOWN_MS = 30_000; // 30 seconds
8
+ const lastObserved = new Map();
9
+ function shouldSkipCooldown(filePath) {
10
+ if (!filePath)
11
+ return false;
12
+ const now = Date.now();
13
+ const last = lastObserved.get(filePath);
14
+ if (last && now - last < COOLDOWN_MS)
15
+ return true;
16
+ lastObserved.set(filePath, now);
17
+ return false;
18
+ }
19
+ // ---------------------------------------------------------------------------
20
+ // stdin reader
21
+ // ---------------------------------------------------------------------------
22
+ async function readStdin() {
23
+ const chunks = [];
24
+ for await (const chunk of process.stdin) {
25
+ chunks.push(chunk);
26
+ }
27
+ return Buffer.concat(chunks).toString("utf-8");
28
+ }
29
+ // ---------------------------------------------------------------------------
30
+ // Summary builders per tool type
31
+ // ---------------------------------------------------------------------------
32
+ function buildSummary(toolName, toolInput) {
33
+ switch (toolName) {
34
+ case "Bash": {
35
+ const cmd = String(toolInput.command ?? "").slice(0, 200);
36
+ return `ran: ${cmd}`;
37
+ }
38
+ case "Edit": {
39
+ const file = String(toolInput.file_path ?? "unknown");
40
+ return `edited ${file}`;
41
+ }
42
+ case "Write": {
43
+ const file = String(toolInput.file_path ?? "unknown");
44
+ const len = String(toolInput.content ?? "").length;
45
+ return `wrote ${file} (${len} chars)`;
46
+ }
47
+ case "Read": {
48
+ const file = String(toolInput.file_path ?? "unknown");
49
+ return `read ${file}`;
50
+ }
51
+ default: {
52
+ return `${toolName}: ${JSON.stringify(toolInput).slice(0, 200)}`;
53
+ }
54
+ }
55
+ }
56
+ function normalizeOrigin(value) {
57
+ if (!value)
58
+ return undefined;
59
+ const normalized = value.trim().toLowerCase();
60
+ if (!normalized)
61
+ return undefined;
62
+ if (normalized.includes("codex"))
63
+ return "codex";
64
+ if (normalized.includes("claude"))
65
+ return "claude-code";
66
+ if (normalized.includes("cursor"))
67
+ return "cursor";
68
+ if (normalized.includes("copilot"))
69
+ return "copilot";
70
+ if (normalized.includes("windsurf"))
71
+ return "windsurf";
72
+ return normalized;
73
+ }
74
+ function inferOriginFromEnv() {
75
+ if (process.env.NAIRO_ORIGIN) {
76
+ return normalizeOrigin(process.env.NAIRO_ORIGIN);
77
+ }
78
+ if (process.env.CODEX_THREAD_ID || process.env.CODEX_CI) {
79
+ return "codex";
80
+ }
81
+ if (process.env.CLAUDECODE || process.env.CLAUDE_CODE) {
82
+ return "claude-code";
83
+ }
84
+ if (process.env.CURSOR_TRACE_ID || process.env.CURSOR_WORKSPACE_ID) {
85
+ return "cursor";
86
+ }
87
+ const fromProcessTree = inferOriginFromProcessTree();
88
+ if (fromProcessTree) {
89
+ return fromProcessTree;
90
+ }
91
+ return undefined;
92
+ }
93
+ function getCommandForPid(pid) {
94
+ try {
95
+ const out = execSync(`ps -o command= -p ${pid}`, {
96
+ encoding: "utf-8",
97
+ stdio: ["ignore", "pipe", "ignore"],
98
+ }).trim();
99
+ return out || null;
100
+ }
101
+ catch {
102
+ return null;
103
+ }
104
+ }
105
+ function getParentPid(pid) {
106
+ try {
107
+ const out = execSync(`ps -o ppid= -p ${pid}`, {
108
+ encoding: "utf-8",
109
+ stdio: ["ignore", "pipe", "ignore"],
110
+ }).trim();
111
+ const parent = Number.parseInt(out, 10);
112
+ return Number.isFinite(parent) && parent > 1 ? parent : null;
113
+ }
114
+ catch {
115
+ return null;
116
+ }
117
+ }
118
+ function inferOriginFromProcessTree() {
119
+ let pid = process.ppid;
120
+ let depth = 0;
121
+ while (pid && depth < 4) {
122
+ const command = getCommandForPid(pid)?.toLowerCase() || "";
123
+ if (command.includes("codex"))
124
+ return "codex";
125
+ if (command.includes("claude"))
126
+ return "claude-code";
127
+ if (command.includes("cursor"))
128
+ return "cursor";
129
+ if (command.includes("copilot"))
130
+ return "copilot";
131
+ if (command.includes("windsurf"))
132
+ return "windsurf";
133
+ pid = getParentPid(pid);
134
+ depth += 1;
135
+ }
136
+ return undefined;
137
+ }
138
+ function resolveOrigin(payloadSource) {
139
+ const payloadOrigin = normalizeOrigin(payloadSource);
140
+ const inferred = inferOriginFromEnv();
141
+ // Codex runtime markers are a stronger signal than ambiguous payload labels.
142
+ if (inferred === "codex") {
143
+ return "codex";
144
+ }
145
+ return payloadOrigin ?? inferred;
146
+ }
147
+ // ---------------------------------------------------------------------------
148
+ // post-tool-use
149
+ // ---------------------------------------------------------------------------
150
+ export async function hookPostToolUse() {
151
+ try {
152
+ const config = loadConfig();
153
+ if (!config?.apiKey)
154
+ return;
155
+ const raw = await readStdin();
156
+ const data = JSON.parse(raw);
157
+ if (!data.session_id || !data.tool_name)
158
+ return;
159
+ // Apply cooldown for file-based tools to prevent duplicate observations
160
+ const filePath = data.tool_input?.file_path;
161
+ if (shouldSkipCooldown(filePath))
162
+ return;
163
+ const summary = buildSummary(data.tool_name, data.tool_input ?? {});
164
+ const origin = resolveOrigin(data.source);
165
+ await apiClient("/api/observations", {
166
+ method: "POST",
167
+ body: {
168
+ sessionId: data.session_id,
169
+ toolName: data.tool_name,
170
+ summary,
171
+ cwd: data.cwd,
172
+ origin,
173
+ },
174
+ }).catch(() => { });
175
+ }
176
+ catch {
177
+ // Silent failure — hooks must not block
178
+ }
179
+ }
180
+ // ---------------------------------------------------------------------------
181
+ // session-start
182
+ // ---------------------------------------------------------------------------
183
+ export async function hookSessionStart() {
184
+ try {
185
+ const config = loadConfig();
186
+ if (!config?.apiKey) {
187
+ // Output empty JSON so Claude Code doesn't error
188
+ process.stdout.write("{}");
189
+ return;
190
+ }
191
+ const raw = await readStdin();
192
+ const data = JSON.parse(raw);
193
+ const cwd = data.cwd ?? process.cwd();
194
+ const params = new URLSearchParams();
195
+ if (cwd)
196
+ params.set("cwd", cwd);
197
+ const pack = await apiClient(`/api/context-pack?${params.toString()}`).catch(() => null);
198
+ if (pack?.text) {
199
+ const output = {
200
+ hookSpecificOutput: {
201
+ hookEventName: "SessionStart",
202
+ additionalContext: pack.text,
203
+ },
204
+ };
205
+ process.stdout.write(JSON.stringify(output));
206
+ }
207
+ else {
208
+ process.stdout.write("{}");
209
+ }
210
+ }
211
+ catch {
212
+ // On any error, output empty JSON
213
+ process.stdout.write("{}");
214
+ }
215
+ }
216
+ // ---------------------------------------------------------------------------
217
+ // session-end
218
+ // ---------------------------------------------------------------------------
219
+ export async function hookSessionEnd() {
220
+ try {
221
+ const config = loadConfig();
222
+ if (!config?.apiKey)
223
+ return;
224
+ const raw = await readStdin();
225
+ const data = JSON.parse(raw);
226
+ if (!data.session_id)
227
+ return;
228
+ const origin = resolveOrigin(data.source);
229
+ await apiClient("/api/observations/extract", {
230
+ method: "POST",
231
+ body: {
232
+ sessionId: data.session_id,
233
+ cwd: data.cwd,
234
+ origin,
235
+ },
236
+ }).catch(() => { });
237
+ }
238
+ catch {
239
+ // Silent failure
240
+ }
241
+ }
242
+ //# sourceMappingURL=hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/commands/hook.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function importCommand(): Promise<void>;
2
+ //# sourceMappingURL=import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":"AAyHA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAyInD"}
@@ -0,0 +1,210 @@
1
+ import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
2
+ import { basename, extname, join, relative } from "node:path";
3
+ import { gzipSync } from "node:zlib";
4
+ import { apiClient } from "../api.js";
5
+ import { prompt } from "../prompt.js";
6
+ const MAX_FILE_SIZE = 2 * 1024 * 1024; // 2 MB per file
7
+ const MAX_TOTAL_SIZE = 20 * 1024 * 1024; // 20 MB total uncompressed
8
+ function parseSelection(input, max) {
9
+ const picked = new Set();
10
+ for (const chunk of input.split(",")) {
11
+ const value = Number.parseInt(chunk.trim(), 10);
12
+ if (!Number.isNaN(value) && value >= 1 && value <= max) {
13
+ picked.add(value - 1);
14
+ }
15
+ }
16
+ return [...picked].sort((a, b) => a - b);
17
+ }
18
+ function scanFiles(spec) {
19
+ const files = [];
20
+ if (!existsSync(spec.rootPath)) {
21
+ return { label: spec.label, rootPath: spec.rootPath, files };
22
+ }
23
+ const walk = (currentPath, depth) => {
24
+ if (depth > spec.maxDepth)
25
+ return;
26
+ let entries;
27
+ try {
28
+ entries = readdirSync(currentPath, { withFileTypes: true });
29
+ }
30
+ catch {
31
+ return;
32
+ }
33
+ for (const entry of entries) {
34
+ if (entry.name === ".DS_Store")
35
+ continue;
36
+ const fullPath = join(currentPath, entry.name);
37
+ if (entry.isDirectory()) {
38
+ walk(fullPath, depth + 1);
39
+ continue;
40
+ }
41
+ if (!entry.isFile())
42
+ continue;
43
+ if (!spec.includeFile(fullPath))
44
+ continue;
45
+ files.push(fullPath);
46
+ }
47
+ };
48
+ walk(spec.rootPath, 0);
49
+ return { label: spec.label, rootPath: spec.rootPath, files };
50
+ }
51
+ function detectConversationSources(home) {
52
+ const specs = [
53
+ {
54
+ label: "Claude",
55
+ rootPath: join(home, ".claude", "projects"),
56
+ maxDepth: 4,
57
+ includeFile: (fullPath) => extname(fullPath) === ".jsonl",
58
+ },
59
+ {
60
+ label: "Cursor",
61
+ rootPath: join(home, ".cursor", "chats"),
62
+ maxDepth: 6,
63
+ includeFile: (fullPath) => basename(fullPath) === "store.db",
64
+ },
65
+ {
66
+ label: "Gemini",
67
+ rootPath: join(home, ".gemini", "antigravity", "conversations"),
68
+ maxDepth: 2,
69
+ includeFile: (fullPath) => extname(fullPath) === ".pb",
70
+ },
71
+ {
72
+ label: "Opencode",
73
+ rootPath: join(home, ".local", "share", "opencode", "storage", "message"),
74
+ maxDepth: 6,
75
+ includeFile: (fullPath) => extname(fullPath) === ".json",
76
+ },
77
+ {
78
+ label: "Codex",
79
+ rootPath: join(home, ".codex", "sessions"),
80
+ maxDepth: 6,
81
+ includeFile: (fullPath) => extname(fullPath) === ".jsonl",
82
+ },
83
+ ];
84
+ return specs
85
+ .map((spec) => scanFiles(spec))
86
+ .filter((source) => source.files.length > 0);
87
+ }
88
+ export async function importCommand() {
89
+ const home = process.env.HOME || "";
90
+ if (!home) {
91
+ console.error("Cannot resolve HOME directory.");
92
+ process.exit(1);
93
+ }
94
+ console.log("Nairo Import\n");
95
+ const sources = detectConversationSources(home);
96
+ if (sources.length === 0) {
97
+ console.log("No conversation files found in supported local stores.");
98
+ return;
99
+ }
100
+ // --- Source selection UX ---
101
+ console.log("Detected local sources:");
102
+ for (const [index, src] of sources.entries()) {
103
+ console.log(` [${index + 1}] ${src.label} — ${src.rootPath} (${src.files.length} files)`);
104
+ }
105
+ const mode = await prompt("\nImport (a)ll detected sources, (s)elect specific ones, or s(k)ip? [a/s/k]: ");
106
+ const normalized = mode.trim().toLowerCase();
107
+ let selected = sources;
108
+ if (normalized === "k" || normalized === "skip" || normalized === "") {
109
+ console.log("Skipped import.");
110
+ return;
111
+ }
112
+ if (normalized === "s") {
113
+ const picked = await prompt("Enter source numbers (comma-separated, e.g. 1,3): ");
114
+ const indexes = parseSelection(picked, sources.length);
115
+ if (indexes.length === 0) {
116
+ console.log("No valid source selection. Skipped import.");
117
+ return;
118
+ }
119
+ selected = indexes.map((i) => sources[i]);
120
+ }
121
+ else if (normalized !== "a") {
122
+ console.log("Invalid choice. Skipped import.");
123
+ return;
124
+ }
125
+ // --- Read raw files ---
126
+ const manifestSources = [];
127
+ const fileContents = {};
128
+ let totalSize = 0;
129
+ let totalFileCount = 0;
130
+ let skippedCount = 0;
131
+ for (const src of selected) {
132
+ const manifestFiles = [];
133
+ for (const fullPath of src.files) {
134
+ // Skip files > 2MB
135
+ try {
136
+ const stat = statSync(fullPath);
137
+ if (stat.size > MAX_FILE_SIZE) {
138
+ skippedCount++;
139
+ continue;
140
+ }
141
+ }
142
+ catch {
143
+ skippedCount++;
144
+ continue;
145
+ }
146
+ // Read file content
147
+ let content;
148
+ try {
149
+ const buffer = readFileSync(fullPath);
150
+ content = buffer.toString("utf-8");
151
+ }
152
+ catch {
153
+ skippedCount++;
154
+ continue;
155
+ }
156
+ // Cap total uncompressed size at 20MB
157
+ if (totalSize + content.length > MAX_TOTAL_SIZE) {
158
+ skippedCount++;
159
+ continue;
160
+ }
161
+ const relativePath = relative(src.rootPath, fullPath);
162
+ const archivePath = `${src.label.toLowerCase()}/${relativePath}`;
163
+ manifestFiles.push({ archivePath, originalPath: fullPath });
164
+ fileContents[archivePath] = content;
165
+ totalSize += content.length;
166
+ totalFileCount++;
167
+ }
168
+ if (manifestFiles.length > 0) {
169
+ manifestSources.push({
170
+ label: src.label,
171
+ rootPath: src.rootPath,
172
+ files: manifestFiles,
173
+ });
174
+ }
175
+ }
176
+ if (totalFileCount === 0) {
177
+ console.log("No files to import (all files were skipped due to size limits).");
178
+ return;
179
+ }
180
+ // --- Build gzip archive ---
181
+ const payload = JSON.stringify({
182
+ manifest: { sources: manifestSources },
183
+ files: fileContents,
184
+ });
185
+ const compressed = gzipSync(Buffer.from(payload, "utf-8"));
186
+ // --- Upload ---
187
+ console.log(`\nUploading ${totalFileCount} files from ${manifestSources.map((s) => s.label).join(", ")}...`);
188
+ if (skippedCount > 0) {
189
+ console.log(`(${skippedCount} files skipped due to size limits)`);
190
+ }
191
+ try {
192
+ await apiClient("/api/import-memories", {
193
+ method: "POST",
194
+ headers: {
195
+ "Content-Type": "application/gzip",
196
+ "X-Nairo-Project": basename(process.cwd()),
197
+ },
198
+ body: compressed,
199
+ });
200
+ }
201
+ catch (err) {
202
+ const message = err instanceof Error ? err.message : String(err);
203
+ console.error(`Upload failed: ${message}`);
204
+ process.exit(1);
205
+ }
206
+ // --- Print result ---
207
+ console.log(`\nImported ${totalFileCount} files from: ${manifestSources.map((s) => s.label).join(", ")}`);
208
+ console.log("Memories will appear in your dashboard shortly.");
209
+ }
210
+ //# sourceMappingURL=import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ interface InstallOptions {
2
+ apiUrl?: string;
3
+ apiKey?: string;
4
+ browserAuth?: boolean;
5
+ dryRun?: boolean;
6
+ }
7
+ export declare function installCommand(options?: InstallOptions): Promise<void>;
8
+ export {};
9
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAWA,UAAU,cAAc;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAsFD,wBAAsB,cAAc,CAClC,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CA0Nf"}