noterai 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +368 -0
- package/bin/noter.js +218 -0
- package/bin/noter.js.map +1 -0
- package/package.json +73 -0
- package/packages/client/dist/assets/geist-mono-latin-400-normal-CoULgQGM.woff +0 -0
- package/packages/client/dist/assets/geist-mono-latin-400-normal-LC9RFr9I.woff2 +0 -0
- package/packages/client/dist/assets/index-CBiNAMaA.js +264 -0
- package/packages/client/dist/assets/index-u7i5Fle2.css +1 -0
- package/packages/client/dist/assets/space-grotesk-latin-500-normal-CNSSEhBt.woff +0 -0
- package/packages/client/dist/assets/space-grotesk-latin-500-normal-lFbtlQH6.woff2 +0 -0
- package/packages/client/dist/assets/space-grotesk-latin-600-normal-BflQw4A9.woff +0 -0
- package/packages/client/dist/assets/space-grotesk-latin-600-normal-DjKNqYRj.woff2 +0 -0
- package/packages/client/dist/assets/vendor-react-DHeZC_T5.js +17 -0
- package/packages/client/dist/index.html +14 -0
- package/packages/server/dist/adapters/claudeAdapter.d.ts +34 -0
- package/packages/server/dist/adapters/claudeAdapter.d.ts.map +1 -0
- package/packages/server/dist/adapters/claudeAdapter.js +281 -0
- package/packages/server/dist/adapters/claudeAdapter.js.map +1 -0
- package/packages/server/dist/adapters/codexAdapter.d.ts +39 -0
- package/packages/server/dist/adapters/codexAdapter.d.ts.map +1 -0
- package/packages/server/dist/adapters/codexAdapter.js +347 -0
- package/packages/server/dist/adapters/codexAdapter.js.map +1 -0
- package/packages/server/dist/adapters/droidAdapter.d.ts +34 -0
- package/packages/server/dist/adapters/droidAdapter.d.ts.map +1 -0
- package/packages/server/dist/adapters/droidAdapter.js +109 -0
- package/packages/server/dist/adapters/droidAdapter.js.map +1 -0
- package/packages/server/dist/adapters/genericAdapter.d.ts +50 -0
- package/packages/server/dist/adapters/genericAdapter.d.ts.map +1 -0
- package/packages/server/dist/adapters/genericAdapter.js +203 -0
- package/packages/server/dist/adapters/genericAdapter.js.map +1 -0
- package/packages/server/dist/adapters/index.d.ts +7 -0
- package/packages/server/dist/adapters/index.d.ts.map +1 -0
- package/packages/server/dist/adapters/index.js +7 -0
- package/packages/server/dist/adapters/index.js.map +1 -0
- package/packages/server/dist/adapters/opencodeAdapter.d.ts +28 -0
- package/packages/server/dist/adapters/opencodeAdapter.d.ts.map +1 -0
- package/packages/server/dist/adapters/opencodeAdapter.js +265 -0
- package/packages/server/dist/adapters/opencodeAdapter.js.map +1 -0
- package/packages/server/dist/adapters/opencodeSessionManager.d.ts +13 -0
- package/packages/server/dist/adapters/opencodeSessionManager.d.ts.map +1 -0
- package/packages/server/dist/adapters/opencodeSessionManager.js +230 -0
- package/packages/server/dist/adapters/opencodeSessionManager.js.map +1 -0
- package/packages/server/dist/adapters/pathUtils.d.ts +54 -0
- package/packages/server/dist/adapters/pathUtils.d.ts.map +1 -0
- package/packages/server/dist/adapters/pathUtils.js +86 -0
- package/packages/server/dist/adapters/pathUtils.js.map +1 -0
- package/packages/server/dist/adapters/piAdapter.d.ts +34 -0
- package/packages/server/dist/adapters/piAdapter.d.ts.map +1 -0
- package/packages/server/dist/adapters/piAdapter.js +307 -0
- package/packages/server/dist/adapters/piAdapter.js.map +1 -0
- package/packages/server/dist/autoDetect.d.ts +15 -0
- package/packages/server/dist/autoDetect.d.ts.map +1 -0
- package/packages/server/dist/autoDetect.js +102 -0
- package/packages/server/dist/autoDetect.js.map +1 -0
- package/packages/server/dist/config.d.ts +29 -0
- package/packages/server/dist/config.d.ts.map +1 -0
- package/packages/server/dist/config.js +96 -0
- package/packages/server/dist/config.js.map +1 -0
- package/packages/server/dist/eventStore.d.ts +14 -0
- package/packages/server/dist/eventStore.d.ts.map +1 -0
- package/packages/server/dist/eventStore.js +35 -0
- package/packages/server/dist/eventStore.js.map +1 -0
- package/packages/server/dist/hookWatcher.d.ts +24 -0
- package/packages/server/dist/hookWatcher.d.ts.map +1 -0
- package/packages/server/dist/hookWatcher.js +152 -0
- package/packages/server/dist/hookWatcher.js.map +1 -0
- package/packages/server/dist/index.d.ts +58 -0
- package/packages/server/dist/index.d.ts.map +1 -0
- package/packages/server/dist/index.js +527 -0
- package/packages/server/dist/index.js.map +1 -0
- package/packages/server/dist/llm/jsonExtractor.d.ts +39 -0
- package/packages/server/dist/llm/jsonExtractor.d.ts.map +1 -0
- package/packages/server/dist/llm/jsonExtractor.js +83 -0
- package/packages/server/dist/llm/jsonExtractor.js.map +1 -0
- package/packages/server/dist/llm/ollamaCache.d.ts +19 -0
- package/packages/server/dist/llm/ollamaCache.d.ts.map +1 -0
- package/packages/server/dist/llm/ollamaCache.js +31 -0
- package/packages/server/dist/llm/ollamaCache.js.map +1 -0
- package/packages/server/dist/llm/ollamaClient.d.ts +29 -0
- package/packages/server/dist/llm/ollamaClient.d.ts.map +1 -0
- package/packages/server/dist/llm/ollamaClient.js +117 -0
- package/packages/server/dist/llm/ollamaClient.js.map +1 -0
- package/packages/server/dist/llm/ollamaQueue.d.ts +7 -0
- package/packages/server/dist/llm/ollamaQueue.d.ts.map +1 -0
- package/packages/server/dist/llm/ollamaQueue.js +28 -0
- package/packages/server/dist/llm/ollamaQueue.js.map +1 -0
- package/packages/server/dist/llm/promptBuilder.d.ts +8 -0
- package/packages/server/dist/llm/promptBuilder.d.ts.map +1 -0
- package/packages/server/dist/llm/promptBuilder.js +85 -0
- package/packages/server/dist/llm/promptBuilder.js.map +1 -0
- package/packages/server/dist/llm/promptSections.d.ts +64 -0
- package/packages/server/dist/llm/promptSections.d.ts.map +1 -0
- package/packages/server/dist/llm/promptSections.js +128 -0
- package/packages/server/dist/llm/promptSections.js.map +1 -0
- package/packages/server/dist/llm/providerModels.d.ts +14 -0
- package/packages/server/dist/llm/providerModels.d.ts.map +1 -0
- package/packages/server/dist/llm/providerModels.js +67 -0
- package/packages/server/dist/llm/providerModels.js.map +1 -0
- package/packages/server/dist/llm/suggester.d.ts +12 -0
- package/packages/server/dist/llm/suggester.d.ts.map +1 -0
- package/packages/server/dist/llm/suggester.js +263 -0
- package/packages/server/dist/llm/suggester.js.map +1 -0
- package/packages/server/dist/llm/summarizer.d.ts +53 -0
- package/packages/server/dist/llm/summarizer.d.ts.map +1 -0
- package/packages/server/dist/llm/summarizer.js +174 -0
- package/packages/server/dist/llm/summarizer.js.map +1 -0
- package/packages/server/dist/persistence.d.ts +42 -0
- package/packages/server/dist/persistence.d.ts.map +1 -0
- package/packages/server/dist/persistence.js +103 -0
- package/packages/server/dist/persistence.js.map +1 -0
- package/packages/server/dist/repoContext.d.ts +60 -0
- package/packages/server/dist/repoContext.d.ts.map +1 -0
- package/packages/server/dist/repoContext.js +197 -0
- package/packages/server/dist/repoContext.js.map +1 -0
- package/packages/server/dist/routes/blueprint.d.ts +7 -0
- package/packages/server/dist/routes/blueprint.d.ts.map +1 -0
- package/packages/server/dist/routes/blueprint.js +529 -0
- package/packages/server/dist/routes/blueprint.js.map +1 -0
- package/packages/server/dist/routes/config.d.ts +17 -0
- package/packages/server/dist/routes/config.d.ts.map +1 -0
- package/packages/server/dist/routes/config.js +282 -0
- package/packages/server/dist/routes/config.js.map +1 -0
- package/packages/server/dist/routes/lmstudio.d.ts +4 -0
- package/packages/server/dist/routes/lmstudio.d.ts.map +1 -0
- package/packages/server/dist/routes/lmstudio.js +67 -0
- package/packages/server/dist/routes/lmstudio.js.map +1 -0
- package/packages/server/dist/routes/notes.d.ts +5 -0
- package/packages/server/dist/routes/notes.d.ts.map +1 -0
- package/packages/server/dist/routes/notes.js +60 -0
- package/packages/server/dist/routes/notes.js.map +1 -0
- package/packages/server/dist/routes/ollama.d.ts +4 -0
- package/packages/server/dist/routes/ollama.d.ts.map +1 -0
- package/packages/server/dist/routes/ollama.js +207 -0
- package/packages/server/dist/routes/ollama.js.map +1 -0
- package/packages/server/dist/routes/prompt.d.ts +4 -0
- package/packages/server/dist/routes/prompt.d.ts.map +1 -0
- package/packages/server/dist/routes/prompt.js +75 -0
- package/packages/server/dist/routes/prompt.js.map +1 -0
- package/packages/server/dist/routes/refineNotes.d.ts +4 -0
- package/packages/server/dist/routes/refineNotes.d.ts.map +1 -0
- package/packages/server/dist/routes/refineNotes.js +87 -0
- package/packages/server/dist/routes/refineNotes.js.map +1 -0
- package/packages/server/dist/routes/repoContext.d.ts +3 -0
- package/packages/server/dist/routes/repoContext.d.ts.map +1 -0
- package/packages/server/dist/routes/repoContext.js +15 -0
- package/packages/server/dist/routes/repoContext.js.map +1 -0
- package/packages/server/dist/routes/sessions.d.ts +15 -0
- package/packages/server/dist/routes/sessions.d.ts.map +1 -0
- package/packages/server/dist/routes/sessions.js +420 -0
- package/packages/server/dist/routes/sessions.js.map +1 -0
- package/packages/server/dist/routes/summarize.d.ts +6 -0
- package/packages/server/dist/routes/summarize.d.ts.map +1 -0
- package/packages/server/dist/routes/summarize.js +85 -0
- package/packages/server/dist/routes/summarize.js.map +1 -0
- package/packages/server/dist/server.d.ts +2 -0
- package/packages/server/dist/server.d.ts.map +1 -0
- package/packages/server/dist/server.js +6 -0
- package/packages/server/dist/server.js.map +1 -0
- package/packages/server/dist/sessionManager.d.ts +41 -0
- package/packages/server/dist/sessionManager.d.ts.map +1 -0
- package/packages/server/dist/sessionManager.js +493 -0
- package/packages/server/dist/sessionManager.js.map +1 -0
- package/packages/server/dist/sessionScanner.d.ts +22 -0
- package/packages/server/dist/sessionScanner.d.ts.map +1 -0
- package/packages/server/dist/sessionScanner.js +165 -0
- package/packages/server/dist/sessionScanner.js.map +1 -0
- package/packages/server/dist/sessionTitle.d.ts +17 -0
- package/packages/server/dist/sessionTitle.d.ts.map +1 -0
- package/packages/server/dist/sessionTitle.js +321 -0
- package/packages/server/dist/sessionTitle.js.map +1 -0
- package/packages/server/dist/stateManager.d.ts +38 -0
- package/packages/server/dist/stateManager.d.ts.map +1 -0
- package/packages/server/dist/stateManager.js +83 -0
- package/packages/server/dist/stateManager.js.map +1 -0
- package/packages/server/dist/wsServer.d.ts +27 -0
- package/packages/server/dist/wsServer.d.ts.map +1 -0
- package/packages/server/dist/wsServer.js +144 -0
- package/packages/server/dist/wsServer.js.map +1 -0
- package/packages/shared/dist/index.d.ts +3 -0
- package/packages/shared/dist/index.d.ts.map +1 -0
- package/packages/shared/dist/index.js +3 -0
- package/packages/shared/dist/index.js.map +1 -0
- package/packages/shared/dist/llm/mambaDetect.d.ts +84 -0
- package/packages/shared/dist/llm/mambaDetect.d.ts.map +1 -0
- package/packages/shared/dist/llm/mambaDetect.js +205 -0
- package/packages/shared/dist/llm/mambaDetect.js.map +1 -0
- package/packages/shared/dist/types.d.ts +184 -0
- package/packages/shared/dist/types.d.ts.map +1 -0
- package/packages/shared/dist/types.js +2 -0
- package/packages/shared/dist/types.js.map +1 -0
- package/scripts/postbuild.js +70 -0
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { homedir } from 'os';
|
|
2
|
+
import { join, win32 as pathWin32 } from 'path';
|
|
3
|
+
import Database from 'better-sqlite3';
|
|
4
|
+
import { normalizeOpenCodeEvent } from './opencodeAdapter.js';
|
|
5
|
+
import { stateManager } from '../stateManager.js';
|
|
6
|
+
export function resolveOpenCodeDbPath() {
|
|
7
|
+
const home = homedir();
|
|
8
|
+
if (process.platform === 'win32') {
|
|
9
|
+
const appData = process.env.APPDATA || pathWin32.join(home, 'AppData', 'Roaming');
|
|
10
|
+
return pathWin32.join(appData, 'opencode', 'opencode.db');
|
|
11
|
+
}
|
|
12
|
+
// macOS and Linux
|
|
13
|
+
return join(home, '.local', 'share', 'opencode', 'opencode.db');
|
|
14
|
+
}
|
|
15
|
+
function parseMessageData(data) {
|
|
16
|
+
try {
|
|
17
|
+
return JSON.parse(data);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return {};
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function parsePartData(data) {
|
|
24
|
+
try {
|
|
25
|
+
return JSON.parse(data);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return {};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function reconstructAgentEvents(messages, parts) {
|
|
32
|
+
const events = [];
|
|
33
|
+
const partsByMessageId = new Map();
|
|
34
|
+
for (const part of parts) {
|
|
35
|
+
const list = partsByMessageId.get(part.message_id) ?? [];
|
|
36
|
+
list.push(part);
|
|
37
|
+
partsByMessageId.set(part.message_id, list);
|
|
38
|
+
}
|
|
39
|
+
for (const msg of messages) {
|
|
40
|
+
const msgData = parseMessageData(msg.data);
|
|
41
|
+
const msgEvent = {
|
|
42
|
+
type: 'message.updated',
|
|
43
|
+
properties: {
|
|
44
|
+
info: {
|
|
45
|
+
id: msg.id,
|
|
46
|
+
sessionID: msg.session_id,
|
|
47
|
+
role: msgData.role,
|
|
48
|
+
time: { created: msg.time_created },
|
|
49
|
+
parentID: '',
|
|
50
|
+
modelID: msgData.model?.modelID ?? '',
|
|
51
|
+
providerID: msgData.model?.providerID ?? '',
|
|
52
|
+
mode: 'default',
|
|
53
|
+
path: { cwd: '', root: '' },
|
|
54
|
+
cost: 0,
|
|
55
|
+
tokens: { input: 0, output: 0, reasoning: 0, cache: { read: 0, write: 0 } },
|
|
56
|
+
...msgData,
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
const normalizedMsg = normalizeOpenCodeEvent(msgEvent);
|
|
61
|
+
if (normalizedMsg) {
|
|
62
|
+
events.push(normalizedMsg);
|
|
63
|
+
}
|
|
64
|
+
const msgParts = partsByMessageId.get(msg.id) ?? [];
|
|
65
|
+
for (const part of msgParts) {
|
|
66
|
+
const partData = parsePartData(part.data);
|
|
67
|
+
const partEvent = {
|
|
68
|
+
type: 'message.part.updated',
|
|
69
|
+
properties: {
|
|
70
|
+
part: {
|
|
71
|
+
id: part.id,
|
|
72
|
+
sessionID: part.session_id,
|
|
73
|
+
messageID: part.message_id,
|
|
74
|
+
...partData,
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
const normalizedPart = normalizeOpenCodeEvent(partEvent);
|
|
79
|
+
if (normalizedPart) {
|
|
80
|
+
events.push(normalizedPart);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return events;
|
|
85
|
+
}
|
|
86
|
+
export function createOpenCodeSessionManager(deps) {
|
|
87
|
+
const { eventStore, ws, summarizer, dbPath } = deps;
|
|
88
|
+
const resolvedDbPath = dbPath ?? resolveOpenCodeDbPath();
|
|
89
|
+
let db = null;
|
|
90
|
+
let started = false;
|
|
91
|
+
let activeSessionId;
|
|
92
|
+
function ensureDb() {
|
|
93
|
+
if (db)
|
|
94
|
+
return db;
|
|
95
|
+
try {
|
|
96
|
+
db = new Database(resolvedDbPath, { readonly: true });
|
|
97
|
+
console.error(`OpenCode: reading sessions from ${resolvedDbPath}`);
|
|
98
|
+
return db;
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
console.error(`[OpenCodeSessionManager] Failed to open DB at ${resolvedDbPath}:`, err);
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function closeDb() {
|
|
106
|
+
if (db) {
|
|
107
|
+
try {
|
|
108
|
+
db.close();
|
|
109
|
+
}
|
|
110
|
+
catch { /* ignore */ }
|
|
111
|
+
db = null;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
start: async () => {
|
|
116
|
+
started = true;
|
|
117
|
+
ensureDb();
|
|
118
|
+
},
|
|
119
|
+
stop: async () => {
|
|
120
|
+
started = false;
|
|
121
|
+
closeDb();
|
|
122
|
+
console.error('[OpenCodeSessionManager] Stopped');
|
|
123
|
+
},
|
|
124
|
+
isRunning: () => started,
|
|
125
|
+
getSessions: () => {
|
|
126
|
+
const database = ensureDb();
|
|
127
|
+
if (!database)
|
|
128
|
+
return [];
|
|
129
|
+
try {
|
|
130
|
+
const rows = database.prepare(`SELECT id, title, time_created, time_updated
|
|
131
|
+
FROM session
|
|
132
|
+
ORDER BY time_updated DESC`).all();
|
|
133
|
+
const sessions = [];
|
|
134
|
+
for (const row of rows) {
|
|
135
|
+
const msgCount = database.prepare(`SELECT COUNT(*) as count FROM message WHERE session_id = ?`).get(row.id);
|
|
136
|
+
// SQLite stores Unix seconds; convert to milliseconds for consistency
|
|
137
|
+
const startedAt = row.time_created < 1_000_000_000_000 ? row.time_created * 1000 : row.time_created;
|
|
138
|
+
const lastEventAt = row.time_updated < 1_000_000_000_000 ? row.time_updated * 1000 : row.time_updated;
|
|
139
|
+
sessions.push({
|
|
140
|
+
id: row.id,
|
|
141
|
+
path: resolvedDbPath,
|
|
142
|
+
title: row.title,
|
|
143
|
+
startedAt,
|
|
144
|
+
lastEventAt,
|
|
145
|
+
eventCount: msgCount?.count ?? 0,
|
|
146
|
+
active: activeSessionId === row.id,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
return sessions;
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
console.error('[OpenCodeSessionManager] getSessions error:', err);
|
|
153
|
+
return [];
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
getActiveSession: () => {
|
|
157
|
+
if (!activeSessionId)
|
|
158
|
+
return undefined;
|
|
159
|
+
const database = ensureDb();
|
|
160
|
+
if (!database)
|
|
161
|
+
return undefined;
|
|
162
|
+
try {
|
|
163
|
+
const row = database.prepare(`SELECT id, title, time_created, time_updated FROM session WHERE id = ?`).get(activeSessionId);
|
|
164
|
+
if (!row)
|
|
165
|
+
return undefined;
|
|
166
|
+
const msgCount = database.prepare(`SELECT COUNT(*) as count FROM message WHERE session_id = ?`).get(activeSessionId);
|
|
167
|
+
const startedAt = row.time_created < 1_000_000_000_000 ? row.time_created * 1000 : row.time_created;
|
|
168
|
+
const lastEventAt = row.time_updated < 1_000_000_000_000 ? row.time_updated * 1000 : row.time_updated;
|
|
169
|
+
return {
|
|
170
|
+
id: row.id,
|
|
171
|
+
path: resolvedDbPath,
|
|
172
|
+
title: row.title,
|
|
173
|
+
startedAt,
|
|
174
|
+
lastEventAt,
|
|
175
|
+
eventCount: msgCount?.count ?? 0,
|
|
176
|
+
active: true,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
return undefined;
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
selectSession: async (id) => {
|
|
184
|
+
const database = ensureDb();
|
|
185
|
+
if (!database)
|
|
186
|
+
return false;
|
|
187
|
+
try {
|
|
188
|
+
const sessionRow = database.prepare(`SELECT id FROM session WHERE id = ?`).get(id);
|
|
189
|
+
if (!sessionRow)
|
|
190
|
+
return false;
|
|
191
|
+
// Query messages and parts for this session
|
|
192
|
+
const messages = database.prepare(`SELECT id, session_id, time_created, data
|
|
193
|
+
FROM message
|
|
194
|
+
WHERE session_id = ?
|
|
195
|
+
ORDER BY time_created ASC`).all(id);
|
|
196
|
+
const messageIds = messages.map((m) => m.id);
|
|
197
|
+
let parts = [];
|
|
198
|
+
if (messageIds.length > 0) {
|
|
199
|
+
const placeholders = messageIds.map(() => '?').join(',');
|
|
200
|
+
parts = database.prepare(`SELECT id, message_id, session_id, data
|
|
201
|
+
FROM part
|
|
202
|
+
WHERE message_id IN (${placeholders})
|
|
203
|
+
ORDER BY time_created ASC`).all(...messageIds);
|
|
204
|
+
}
|
|
205
|
+
// Reconstruct AgentEvents
|
|
206
|
+
const events = reconstructAgentEvents(messages, parts);
|
|
207
|
+
// Clear global store and replay — only push to store;
|
|
208
|
+
// single sync broadcast at the end avoids duplicate events on the wire
|
|
209
|
+
eventStore.clear();
|
|
210
|
+
for (const event of events) {
|
|
211
|
+
eventStore.push(event);
|
|
212
|
+
summarizer.handleEvent(event);
|
|
213
|
+
}
|
|
214
|
+
activeSessionId = id;
|
|
215
|
+
// Single broadcast with all replayed events
|
|
216
|
+
ws.broadcast({
|
|
217
|
+
type: 'sync',
|
|
218
|
+
payload: { ...stateManager.getState(), events: eventStore.getAll() },
|
|
219
|
+
});
|
|
220
|
+
console.error(`[OpenCodeSessionManager] Switched to session: ${id}`);
|
|
221
|
+
return true;
|
|
222
|
+
}
|
|
223
|
+
catch (err) {
|
|
224
|
+
console.error('[OpenCodeSessionManager] selectSession error:', err);
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
},
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=opencodeSessionManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencodeSessionManager.js","sourceRoot":"","sources":["../../src/adapters/opencodeSessionManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-platform path resolution utilities for Noter adapters.
|
|
3
|
+
*
|
|
4
|
+
* All adapters must use these helpers instead of raw path strings to ensure
|
|
5
|
+
* correct behaviour on macOS, Linux, and Windows.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Parse an ISO timestamp string, returning Date.now() on failure.
|
|
9
|
+
*/
|
|
10
|
+
export declare function parseTimestamp(ts: string): number;
|
|
11
|
+
/**
|
|
12
|
+
* Patterns that indicate placeholder/template text from LLM output.
|
|
13
|
+
* Shared by suggester and promptBuilder for consistent validation.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Resolve a path relative to the user's home directory.
|
|
17
|
+
*
|
|
18
|
+
* On Windows, `os.homedir()` normally returns the value of `USERPROFILE`.
|
|
19
|
+
* If `os.homedir()` returns an unexpected result (e.g. empty string), we
|
|
20
|
+
* fall back to `process.env.USERPROFILE` or `process.env.HOME`.
|
|
21
|
+
*/
|
|
22
|
+
export declare function resolveHomePath(...segments: string[]): string;
|
|
23
|
+
/**
|
|
24
|
+
* Get the user's home directory with Windows-specific fallback.
|
|
25
|
+
*
|
|
26
|
+
* Priority:
|
|
27
|
+
* 1. `os.homedir()`
|
|
28
|
+
* 2. `process.env.USERPROFILE` (Windows)
|
|
29
|
+
* 3. `process.env.HOME` (Unix fallback)
|
|
30
|
+
* 4. Current working directory (last resort)
|
|
31
|
+
*/
|
|
32
|
+
export declare function getHomeDir(): string;
|
|
33
|
+
/**
|
|
34
|
+
* Recursively collect files matching a pattern from a directory.
|
|
35
|
+
* Shared by sessionScanner and sessionManager to avoid duplication.
|
|
36
|
+
*/
|
|
37
|
+
export declare function collectFiles(dir: string, pattern: (name: string) => boolean, recursive: boolean, out: string[]): void;
|
|
38
|
+
/**
|
|
39
|
+
* Poll for a directory to exist, with exponential backoff.
|
|
40
|
+
*
|
|
41
|
+
* Used by file-based adapters so they can start before their target
|
|
42
|
+
* directory has been created by the external harness.
|
|
43
|
+
*
|
|
44
|
+
* @param dirPath Directory to wait for
|
|
45
|
+
* @param opts maxRetries (default 30), baseDelayMs (default 1000), maxDelayMs (default 30000)
|
|
46
|
+
* @returns Resolves when directory exists, or rejects after max retries
|
|
47
|
+
*/
|
|
48
|
+
export interface WaitForDirOptions {
|
|
49
|
+
maxRetries?: number;
|
|
50
|
+
baseDelayMs?: number;
|
|
51
|
+
maxDelayMs?: number;
|
|
52
|
+
}
|
|
53
|
+
export declare function waitForDir(dirPath: string, opts?: WaitForDirOptions): Promise<void>;
|
|
54
|
+
//# sourceMappingURL=pathUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pathUtils.d.ts","sourceRoot":"","sources":["../../src/adapters/pathUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED;;;GAGG;AACH;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAG7D;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAMnC;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,EAClC,SAAS,EAAE,OAAO,EAClB,GAAG,EAAE,MAAM,EAAE,GACZ,IAAI,CAeN;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAmBf"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-platform path resolution utilities for Noter adapters.
|
|
3
|
+
*
|
|
4
|
+
* All adapters must use these helpers instead of raw path strings to ensure
|
|
5
|
+
* correct behaviour on macOS, Linux, and Windows.
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync, readdirSync } from 'fs';
|
|
8
|
+
import { homedir } from 'os';
|
|
9
|
+
import { join } from 'path';
|
|
10
|
+
/**
|
|
11
|
+
* Parse an ISO timestamp string, returning Date.now() on failure.
|
|
12
|
+
*/
|
|
13
|
+
export function parseTimestamp(ts) {
|
|
14
|
+
const d = new Date(ts);
|
|
15
|
+
return isNaN(d.getTime()) ? Date.now() : d.getTime();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Patterns that indicate placeholder/template text from LLM output.
|
|
19
|
+
* Shared by suggester and promptBuilder for consistent validation.
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* Resolve a path relative to the user's home directory.
|
|
23
|
+
*
|
|
24
|
+
* On Windows, `os.homedir()` normally returns the value of `USERPROFILE`.
|
|
25
|
+
* If `os.homedir()` returns an unexpected result (e.g. empty string), we
|
|
26
|
+
* fall back to `process.env.USERPROFILE` or `process.env.HOME`.
|
|
27
|
+
*/
|
|
28
|
+
export function resolveHomePath(...segments) {
|
|
29
|
+
const home = getHomeDir();
|
|
30
|
+
return join(home, ...segments);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Get the user's home directory with Windows-specific fallback.
|
|
34
|
+
*
|
|
35
|
+
* Priority:
|
|
36
|
+
* 1. `os.homedir()`
|
|
37
|
+
* 2. `process.env.USERPROFILE` (Windows)
|
|
38
|
+
* 3. `process.env.HOME` (Unix fallback)
|
|
39
|
+
* 4. Current working directory (last resort)
|
|
40
|
+
*/
|
|
41
|
+
export function getHomeDir() {
|
|
42
|
+
let home = homedir();
|
|
43
|
+
if (!home || home === '/') {
|
|
44
|
+
home = process.env.USERPROFILE || process.env.HOME || process.cwd();
|
|
45
|
+
}
|
|
46
|
+
return home;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Recursively collect files matching a pattern from a directory.
|
|
50
|
+
* Shared by sessionScanner and sessionManager to avoid duplication.
|
|
51
|
+
*/
|
|
52
|
+
export function collectFiles(dir, pattern, recursive, out) {
|
|
53
|
+
if (!existsSync(dir))
|
|
54
|
+
return;
|
|
55
|
+
try {
|
|
56
|
+
const entries = readdirSync(dir, { withFileTypes: true });
|
|
57
|
+
for (const entry of entries) {
|
|
58
|
+
const path = join(dir, entry.name);
|
|
59
|
+
if (entry.isDirectory() && recursive) {
|
|
60
|
+
collectFiles(path, pattern, recursive, out);
|
|
61
|
+
}
|
|
62
|
+
else if (entry.isFile() && pattern(entry.name)) {
|
|
63
|
+
out.push(path);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// ignore permission errors
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
export async function waitForDir(dirPath, opts = {}) {
|
|
72
|
+
const { existsSync } = await import('fs');
|
|
73
|
+
const { maxRetries = 30, baseDelayMs = 1000, maxDelayMs = 30000 } = opts;
|
|
74
|
+
if (existsSync(dirPath)) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
78
|
+
const delay = Math.min(maxDelayMs, baseDelayMs * Math.pow(2, attempt - 1));
|
|
79
|
+
await new Promise((r) => setTimeout(r, delay));
|
|
80
|
+
if (existsSync(dirPath)) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
throw new Error(`Directory did not appear after ${maxRetries} retries: ${dirPath}`);
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=pathUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pathUtils.js","sourceRoot":"","sources":["../../src/adapters/pathUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pi (pi.dev) adapter — watches Pi native session JSONL files and ingests
|
|
3
|
+
* events into the Noter pipeline automatically (no extension or MCP needed).
|
|
4
|
+
*
|
|
5
|
+
* Pi writes sessions to ~/.pi/agent/sessions/<workspace-dir>/<timestamp>_<uuid>.jsonl
|
|
6
|
+
* Each line is a JSON object with fields like:
|
|
7
|
+
* - {"type":"session",...}
|
|
8
|
+
* - {"type":"message","message":{"role":"user","content":[{"type":"text","text":"..."}]}}
|
|
9
|
+
* - {"type":"message","message":{"role":"assistant","content":[{"type":"text","text":"..."},{"type":"toolCall","name":"bash","arguments":{...}}]}}
|
|
10
|
+
* - {"type":"message","message":{"role":"toolResult","toolName":"bash","content":[...],"isError":false}}
|
|
11
|
+
*
|
|
12
|
+
* This adapter watches the sessions directory, discovers new session files,
|
|
13
|
+
* tails them for new lines, and pushes normalized AgentEvents through the
|
|
14
|
+
* eventStore → summarizer → WS broadcast pipeline.
|
|
15
|
+
*/
|
|
16
|
+
import type { AppConfig } from '../config.js';
|
|
17
|
+
import type { EventStore } from '../eventStore.js';
|
|
18
|
+
import type { WsServerManager } from '../wsServer.js';
|
|
19
|
+
import type { Summarizer } from '../llm/summarizer.js';
|
|
20
|
+
export interface PiAdapter {
|
|
21
|
+
start: () => Promise<void>;
|
|
22
|
+
stop: () => Promise<void>;
|
|
23
|
+
isRunning: () => boolean;
|
|
24
|
+
}
|
|
25
|
+
export interface PiAdapterDeps {
|
|
26
|
+
config: AppConfig;
|
|
27
|
+
eventStore: EventStore;
|
|
28
|
+
ws: WsServerManager;
|
|
29
|
+
summarizer: Summarizer;
|
|
30
|
+
sessionDir?: string;
|
|
31
|
+
watchFile?: string;
|
|
32
|
+
}
|
|
33
|
+
export declare function createPiAdapter(deps: PiAdapterDeps): PiAdapter;
|
|
34
|
+
//# sourceMappingURL=piAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"piAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/piAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAMvD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,SAAS,EAAE,MAAM,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,SAAS,CAAC;IAClB,UAAU,EAAE,UAAU,CAAC;IACvB,EAAE,EAAE,eAAe,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAuID,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,CA6L9D"}
|