@dtoolkit/dcontext 0.1.0 → 0.1.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 (2) hide show
  1. package/dist/index.js +30 -6
  2. package/package.json +5 -5
package/dist/index.js CHANGED
@@ -173,6 +173,26 @@ async function updateStats(fn) {
173
173
  await ensureDataDir();
174
174
  await atomicWriteFile(join(DATA_DIR, "stats.json"), JSON.stringify(stats, null, 2) + "\n");
175
175
  }
176
+ async function loadSessionOffset(sessionId) {
177
+ try {
178
+ const raw = await readFile(join(DATA_DIR, "sessions.json"), "utf-8");
179
+ const sessions = JSON.parse(raw);
180
+ return sessions[sessionId] ?? 0;
181
+ } catch {
182
+ return 0;
183
+ }
184
+ }
185
+ async function saveSessionOffset(sessionId, offset) {
186
+ await ensureDataDir();
187
+ let sessions = {};
188
+ try {
189
+ const raw = await readFile(join(DATA_DIR, "sessions.json"), "utf-8");
190
+ sessions = JSON.parse(raw);
191
+ } catch {
192
+ }
193
+ sessions[sessionId] = offset;
194
+ await atomicWriteFile(join(DATA_DIR, "sessions.json"), JSON.stringify(sessions, null, 2) + "\n");
195
+ }
176
196
  async function logError(message) {
177
197
  try {
178
198
  await ensureDataDir();
@@ -244,24 +264,28 @@ async function extractAndSave(sessionId, target, cwd, config) {
244
264
  }
245
265
  const filtered = entries.filter((e) => e.content.length >= 50);
246
266
  if (filtered.length === 0) return null;
247
- const messages = filtered.map((e) => ({ role: e.role, content: e.content }));
267
+ const savedOffset = await loadSessionOffset(sessionId);
268
+ const newMessages = filtered.slice(savedOffset).map((e) => ({ role: e.role, content: e.content }));
269
+ if (newMessages.length === 0) return null;
248
270
  try {
249
271
  const client = new DBrainClient2(config.dbrain.url, config.dbrain.token);
250
- const conv = await client.startConversation(`dcontext-${target.name}`);
251
- await client.sendMessages(conv.id, messages);
272
+ await client.startConversation(`dcontext-${target.name}`, sessionId);
273
+ await client.sendMessages(sessionId, newMessages);
252
274
  } catch (err) {
253
275
  await logError(`Failed to save to dbrain: ${err.message}`);
276
+ return null;
254
277
  }
278
+ await saveSessionOffset(sessionId, filtered.length);
255
279
  await updateStats((stats) => {
256
280
  stats.extractions.total++;
257
281
  stats.extractions.lastAt = (/* @__PURE__ */ new Date()).toISOString();
258
- stats.extractions.messagesSaved += messages.length;
282
+ stats.extractions.messagesSaved += newMessages.length;
259
283
  if (!stats.byTarget[target.name]) {
260
284
  stats.byTarget[target.name] = { briefings: 0, extractions: 0 };
261
285
  }
262
286
  stats.byTarget[target.name].extractions++;
263
287
  });
264
- return `Session log saved to dbrain (${messages.length} messages from ${target.name})`;
288
+ return `Session log saved to dbrain (${newMessages.length} new messages from ${target.name})`;
265
289
  }
266
290
 
267
291
  // src/commands/targets.ts
@@ -798,7 +822,7 @@ var description = `${pc6.green(banner)}
798
822
 
799
823
  ${pc6.green("dbrain hooks for AI coding CLIs")}
800
824
  ${pc6.dim("Part of the dtoolkit suite")}`;
801
- program.name("dcontext").description(description).version("0.1.0");
825
+ program.name("dcontext").description(description).version("0.1.1");
802
826
  var guarded = (cmd) => {
803
827
  cmd.hook("preAction", async () => {
804
828
  await requireInit();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dtoolkit/dcontext",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "dbrain hooks for AI coding CLIs",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -40,12 +40,12 @@
40
40
  "@clack/prompts": "^1.3.0",
41
41
  "commander": "^13.0.0",
42
42
  "picocolors": "^1.1.0",
43
- "@dtoolkit/adapter-gemini": "1.3.0",
44
43
  "@dtoolkit/adapter-claude": "1.3.0",
45
- "@dtoolkit/core": "0.4.0",
46
- "@dtoolkit/sdk": "0.3.1",
44
+ "@dtoolkit/adapter-codex": "1.3.0",
47
45
  "@dtoolkit/adapter-opencode": "1.3.0",
48
- "@dtoolkit/adapter-codex": "1.3.0"
46
+ "@dtoolkit/sdk": "0.3.1",
47
+ "@dtoolkit/adapter-gemini": "1.3.0",
48
+ "@dtoolkit/core": "0.4.0"
49
49
  },
50
50
  "devDependencies": {
51
51
  "@types/node": "^22.0.0",