@producible/cereworker-core 26.520.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 (90) hide show
  1. package/LICENSE +21 -0
  2. package/dist/abort.d.ts +5 -0
  3. package/dist/abort.d.ts.map +1 -0
  4. package/dist/abort.js +36 -0
  5. package/dist/abort.js.map +1 -0
  6. package/dist/context.d.ts +20 -0
  7. package/dist/context.d.ts.map +1 -0
  8. package/dist/context.js +45 -0
  9. package/dist/context.js.map +1 -0
  10. package/dist/conversation.d.ts +48 -0
  11. package/dist/conversation.d.ts.map +1 -0
  12. package/dist/conversation.js +358 -0
  13. package/dist/conversation.js.map +1 -0
  14. package/dist/discovery.d.ts +32 -0
  15. package/dist/discovery.d.ts.map +1 -0
  16. package/dist/discovery.js +165 -0
  17. package/dist/discovery.js.map +1 -0
  18. package/dist/events.d.ts +222 -0
  19. package/dist/events.d.ts.map +1 -0
  20. package/dist/events.js +25 -0
  21. package/dist/events.js.map +1 -0
  22. package/dist/http-tools.d.ts +8 -0
  23. package/dist/http-tools.d.ts.map +1 -0
  24. package/dist/http-tools.js +137 -0
  25. package/dist/http-tools.js.map +1 -0
  26. package/dist/index.d.ts +34 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +20 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/instance.d.ts +56 -0
  31. package/dist/instance.d.ts.map +1 -0
  32. package/dist/instance.js +136 -0
  33. package/dist/instance.js.map +1 -0
  34. package/dist/legacy-sqlite.d.ts +6 -0
  35. package/dist/legacy-sqlite.d.ts.map +1 -0
  36. package/dist/legacy-sqlite.js +90 -0
  37. package/dist/legacy-sqlite.js.map +1 -0
  38. package/dist/logger.d.ts +15 -0
  39. package/dist/logger.d.ts.map +1 -0
  40. package/dist/logger.js +53 -0
  41. package/dist/logger.js.map +1 -0
  42. package/dist/orchestrator.d.ts +321 -0
  43. package/dist/orchestrator.d.ts.map +1 -0
  44. package/dist/orchestrator.js +2610 -0
  45. package/dist/orchestrator.js.map +1 -0
  46. package/dist/pairing.d.ts +41 -0
  47. package/dist/pairing.d.ts.map +1 -0
  48. package/dist/pairing.js +215 -0
  49. package/dist/pairing.js.map +1 -0
  50. package/dist/plan-store.d.ts +33 -0
  51. package/dist/plan-store.d.ts.map +1 -0
  52. package/dist/plan-store.js +113 -0
  53. package/dist/plan-store.js.map +1 -0
  54. package/dist/proactive.d.ts +64 -0
  55. package/dist/proactive.d.ts.map +1 -0
  56. package/dist/proactive.js +179 -0
  57. package/dist/proactive.js.map +1 -0
  58. package/dist/sub-agent-manager.d.ts +45 -0
  59. package/dist/sub-agent-manager.d.ts.map +1 -0
  60. package/dist/sub-agent-manager.js +509 -0
  61. package/dist/sub-agent-manager.js.map +1 -0
  62. package/dist/sub-agent-tools.d.ts +4 -0
  63. package/dist/sub-agent-tools.d.ts.map +1 -0
  64. package/dist/sub-agent-tools.js +94 -0
  65. package/dist/sub-agent-tools.js.map +1 -0
  66. package/dist/system-prompt.d.ts +34 -0
  67. package/dist/system-prompt.d.ts.map +1 -0
  68. package/dist/system-prompt.js +256 -0
  69. package/dist/system-prompt.js.map +1 -0
  70. package/dist/task-schedule.d.ts +13 -0
  71. package/dist/task-schedule.d.ts.map +1 -0
  72. package/dist/task-schedule.js +201 -0
  73. package/dist/task-schedule.js.map +1 -0
  74. package/dist/task-store.d.ts +22 -0
  75. package/dist/task-store.d.ts.map +1 -0
  76. package/dist/task-store.js +141 -0
  77. package/dist/task-store.js.map +1 -0
  78. package/dist/text-store.d.ts +18 -0
  79. package/dist/text-store.d.ts.map +1 -0
  80. package/dist/text-store.js +212 -0
  81. package/dist/text-store.js.map +1 -0
  82. package/dist/tool-runtime.d.ts +76 -0
  83. package/dist/tool-runtime.d.ts.map +1 -0
  84. package/dist/tool-runtime.js +443 -0
  85. package/dist/tool-runtime.js.map +1 -0
  86. package/dist/types.d.ts +392 -0
  87. package/dist/types.d.ts.map +1 -0
  88. package/dist/types.js +2 -0
  89. package/dist/types.js.map +1 -0
  90. package/package.json +31 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Producible
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,5 @@
1
+ export declare function createAbortError(message: string): Error;
2
+ export declare function isAbortError(error: unknown): boolean;
3
+ export declare function throwIfAborted(abortSignal: AbortSignal | null | undefined, message: string): void;
4
+ export declare function raceWithAbort<T>(promise: Promise<T>, abortSignal: AbortSignal, message: string): Promise<T>;
5
+ //# sourceMappingURL=abort.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abort.d.ts","sourceRoot":"","sources":["../src/abort.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAIvD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEpD;AAED,wBAAgB,cAAc,CAC5B,WAAW,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,EAC3C,OAAO,EAAE,MAAM,GACd,IAAI,CAIN;AAED,wBAAgB,aAAa,CAAC,CAAC,EAC7B,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,CAAC,CAAC,CA4BZ"}
package/dist/abort.js ADDED
@@ -0,0 +1,36 @@
1
+ export function createAbortError(message) {
2
+ const error = new Error(message);
3
+ error.name = 'AbortError';
4
+ return error;
5
+ }
6
+ export function isAbortError(error) {
7
+ return error instanceof Error && error.name === 'AbortError';
8
+ }
9
+ export function throwIfAborted(abortSignal, message) {
10
+ if (abortSignal?.aborted) {
11
+ throw createAbortError(message);
12
+ }
13
+ }
14
+ export function raceWithAbort(promise, abortSignal, message) {
15
+ if (abortSignal.aborted) {
16
+ return Promise.reject(createAbortError(message));
17
+ }
18
+ return new Promise((resolve, reject) => {
19
+ const onAbort = () => {
20
+ cleanup();
21
+ reject(createAbortError(message));
22
+ };
23
+ const cleanup = () => {
24
+ abortSignal.removeEventListener('abort', onAbort);
25
+ };
26
+ abortSignal.addEventListener('abort', onAbort, { once: true });
27
+ promise.then((value) => {
28
+ cleanup();
29
+ resolve(value);
30
+ }, (error) => {
31
+ cleanup();
32
+ reject(error);
33
+ });
34
+ });
35
+ }
36
+ //# sourceMappingURL=abort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abort.js","sourceRoot":"","sources":["../src/abort.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IACjC,KAAK,CAAC,IAAI,GAAG,YAAY,CAAC;IAC1B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,WAA2C,EAC3C,OAAe;IAEf,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC;QACzB,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,OAAmB,EACnB,WAAwB,EACxB,OAAe;IAEf,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxC,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC,CAAC;QAEF,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/D,OAAO,CAAC,IAAI,CACV,CAAC,KAAK,EAAE,EAAE;YACR,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,EACD,CAAC,KAAK,EAAE,EAAE;YACR,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { Message } from './types.js';
2
+ /**
3
+ * Estimate token count using chars/4 heuristic with a 1.2x safety margin.
4
+ * Avoids bringing in a tokenizer dependency for lightweight compaction checks.
5
+ */
6
+ export declare function estimateTokens(text: string): number;
7
+ /**
8
+ * Estimate total tokens across an array of messages.
9
+ */
10
+ export declare function estimateMessageTokens(messages: Message[]): number;
11
+ /**
12
+ * Check if the conversation should be compacted.
13
+ * Returns true when estimated tokens exceed threshold * contextWindow.
14
+ */
15
+ export declare function shouldCompact(messages: Message[], contextWindow: number, threshold?: number): boolean;
16
+ /**
17
+ * Build the compacted message array: a system summary + the most recent messages.
18
+ */
19
+ export declare function buildCompactionMessages(messages: Message[], summary: string, keepRecent: number): Message[];
20
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAI1C;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAQjE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,OAAO,EAAE,EACnB,aAAa,EAAE,MAAM,EACrB,SAAS,SAAM,GACd,OAAO,CAIT;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,EAAE,CAYX"}
@@ -0,0 +1,45 @@
1
+ const SAFETY_MARGIN = 1.2;
2
+ /**
3
+ * Estimate token count using chars/4 heuristic with a 1.2x safety margin.
4
+ * Avoids bringing in a tokenizer dependency for lightweight compaction checks.
5
+ */
6
+ export function estimateTokens(text) {
7
+ return Math.ceil((text.length / 4) * SAFETY_MARGIN);
8
+ }
9
+ /**
10
+ * Estimate total tokens across an array of messages.
11
+ */
12
+ export function estimateMessageTokens(messages) {
13
+ let total = 0;
14
+ for (const msg of messages) {
15
+ total += estimateTokens(msg.content);
16
+ // Account for role/metadata overhead (~4 tokens per message)
17
+ total += 4;
18
+ }
19
+ return total;
20
+ }
21
+ /**
22
+ * Check if the conversation should be compacted.
23
+ * Returns true when estimated tokens exceed threshold * contextWindow.
24
+ */
25
+ export function shouldCompact(messages, contextWindow, threshold = 0.8) {
26
+ if (messages.length <= 1)
27
+ return false;
28
+ const tokens = estimateMessageTokens(messages);
29
+ return tokens > contextWindow * threshold;
30
+ }
31
+ /**
32
+ * Build the compacted message array: a system summary + the most recent messages.
33
+ */
34
+ export function buildCompactionMessages(messages, summary, keepRecent) {
35
+ const recentStart = Math.max(0, messages.length - keepRecent);
36
+ const recentMessages = messages.slice(recentStart);
37
+ const summaryMessage = {
38
+ id: 'compaction-summary',
39
+ role: 'system',
40
+ content: `[Previous conversation summary]\n${summary}`,
41
+ timestamp: recentMessages[0]?.timestamp ?? Date.now(),
42
+ };
43
+ return [summaryMessage, ...recentMessages];
44
+ }
45
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,GAAG,CAAC;AAE1B;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAmB;IACvD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,KAAK,IAAI,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrC,6DAA6D;QAC7D,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,QAAmB,EACnB,aAAqB,EACrB,SAAS,GAAG,GAAG;IAEf,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACvC,MAAM,MAAM,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAC/C,OAAO,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAmB,EACnB,OAAe,EACf,UAAkB;IAElB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;IAC9D,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAEnD,MAAM,cAAc,GAAY;QAC9B,EAAE,EAAE,oBAAoB;QACxB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,oCAAoC,OAAO,EAAE;QACtD,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;KACtD,CAAC;IAEF,OAAO,CAAC,cAAc,EAAE,GAAG,cAAc,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,48 @@
1
+ import type { Conversation, Message, MessageRole, QuerySession, SessionEvent, TurnJournalEntry } from './types.js';
2
+ export interface TurnJournalRetentionPolicy {
3
+ maxDays: number;
4
+ maxFilesPerConversation: number;
5
+ }
6
+ export declare class ConversationStore {
7
+ private readonly inMemory;
8
+ private readonly baseDir;
9
+ private readonly conversationsDir;
10
+ private readonly memoryConversations;
11
+ private readonly memorySessions;
12
+ constructor(dbPath?: string);
13
+ private migrateLegacyDatabase;
14
+ create(): Conversation;
15
+ get(id: string): Conversation | undefined;
16
+ list(): Conversation[];
17
+ appendMessage(conversationId: string, role: MessageRole, content: string, extra?: Partial<Message>): Message;
18
+ getMessages(conversationId: string): Message[];
19
+ appendTurnJournalEntry(conversationId: string, turnId: string, entry: TurnJournalEntry): void;
20
+ getTurnJournal(conversationId: string, turnId: string): TurnJournalEntry[];
21
+ appendSessionEvent(conversationId: string, sessionId: string, event: SessionEvent): void;
22
+ getSessionEvents(conversationId: string, sessionId: string): SessionEvent[];
23
+ saveQuerySession(conversationId: string, session: QuerySession): void;
24
+ getQuerySession(conversationId: string, sessionId: string): QuerySession | undefined;
25
+ pruneTurnJournals(conversationId: string, policy: TurnJournalRetentionPolicy): {
26
+ prunedByAge: number;
27
+ prunedByCount: number;
28
+ remaining: number;
29
+ };
30
+ deleteMessages(conversationId: string, messageIds: string[]): number;
31
+ delete(id: string): boolean;
32
+ getPreview(conversationId: string): string | null;
33
+ close(): void;
34
+ private getConversationDir;
35
+ private getMetaPath;
36
+ private getMessagesPath;
37
+ private getTurnsDir;
38
+ private getTurnJournalPath;
39
+ private getSessionsDir;
40
+ private getSessionLedgerPath;
41
+ private getSessionSnapshotPath;
42
+ private listTurnJournalFiles;
43
+ private readConversationMeta;
44
+ private writeConversationMeta;
45
+ private readConversationMessages;
46
+ private writeConversationMessages;
47
+ }
48
+ //# sourceMappingURL=conversation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../src/conversation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,YAAY,EACZ,OAAO,EACP,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAwBpB,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAQD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAgB;IACjD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAmC;IACvE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgD;gBAEnE,MAAM,CAAC,EAAE,MAAM;IAe3B,OAAO,CAAC,qBAAqB;IAqD7B,MAAM,IAAI,YAAY;IAsBtB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAczC,IAAI,IAAI,YAAY,EAAE;IA0BtB,aAAa,CACX,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,GACvB,OAAO;IA+BV,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,EAAE;IAO9C,sBAAsB,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAY7F,cAAc,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAK1E,kBAAkB,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI;IAYxF,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE;IAK3E,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI;IAoBrE,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAUpF,iBAAiB,CACf,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,0BAA0B,GACjC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAqDpE,cAAc,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM;IAyBpE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAiB3B,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKjD,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,wBAAwB;IAIhC,OAAO,CAAC,yBAAyB;CAIlC"}
@@ -0,0 +1,358 @@
1
+ import { nanoid } from 'nanoid';
2
+ import { existsSync, readdirSync, rmSync, statSync } from 'node:fs';
3
+ import { dirname, join } from 'node:path';
4
+ import { homedir } from 'node:os';
5
+ import { createLogger } from './logger.js';
6
+ import { appendJsonLine, ensureDir, readJsonFile, readJsonLines, resolveStoreBasePath, withTextStoreLock, writeJsonFileAtomic, writeJsonLines, } from './text-store.js';
7
+ import { markLegacySectionMigrated, readLegacySection } from './legacy-sqlite.js';
8
+ const log = createLogger('conversation');
9
+ const DEFAULT_DB_PATH = join(homedir(), '.cereworker', 'conversations.db');
10
+ export class ConversationStore {
11
+ inMemory;
12
+ baseDir;
13
+ conversationsDir;
14
+ memoryConversations = new Map();
15
+ memorySessions = new Map();
16
+ constructor(dbPath) {
17
+ this.inMemory = dbPath === ':memory:';
18
+ this.baseDir = this.inMemory ? null : resolveStoreBasePath(dbPath ?? DEFAULT_DB_PATH);
19
+ this.conversationsDir = this.baseDir ? join(this.baseDir, 'conversations') : null;
20
+ const legacyDbPath = dbPath ?? DEFAULT_DB_PATH;
21
+ if (this.conversationsDir) {
22
+ ensureDir(this.conversationsDir);
23
+ if (!existsSync(legacyDbPath) || !statSync(legacyDbPath).isDirectory()) {
24
+ this.migrateLegacyDatabase(legacyDbPath);
25
+ }
26
+ log.info('Opened conversation store', { path: this.conversationsDir });
27
+ }
28
+ }
29
+ migrateLegacyDatabase(dbPath) {
30
+ if (this.inMemory || !this.conversationsDir)
31
+ return;
32
+ const rows = readLegacySection(dbPath, 'conversations',
33
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
34
+ (db) => {
35
+ const conversations = db
36
+ .prepare('SELECT id, createdAt, updatedAt FROM conversations ORDER BY createdAt ASC')
37
+ .all();
38
+ return conversations.map((conversation) => {
39
+ const messages = db
40
+ .prepare(`SELECT id, role, content, timestamp, toolCalls, toolResult, metadata
41
+ FROM messages WHERE conversationId = ? ORDER BY timestamp, rowid`)
42
+ .all(conversation.id);
43
+ return {
44
+ conversation,
45
+ messages: messages.map((message) => ({
46
+ id: message.id,
47
+ role: message.role,
48
+ content: message.content,
49
+ timestamp: message.timestamp,
50
+ ...(message.toolCalls ? { toolCalls: JSON.parse(message.toolCalls) } : {}),
51
+ ...(message.toolResult ? { toolResult: JSON.parse(message.toolResult) } : {}),
52
+ ...(message.metadata ? { metadata: JSON.parse(message.metadata) } : {}),
53
+ })),
54
+ };
55
+ });
56
+ });
57
+ if (!rows)
58
+ return;
59
+ for (const row of rows) {
60
+ if (existsSync(this.getConversationDir(row.conversation.id)))
61
+ continue;
62
+ this.writeConversationMeta(row.conversation.id, row.conversation);
63
+ this.writeConversationMessages(row.conversation.id, row.messages);
64
+ }
65
+ markLegacySectionMigrated(dbPath, 'conversations');
66
+ }
67
+ create() {
68
+ const now = Date.now();
69
+ const conversation = {
70
+ id: nanoid(),
71
+ messages: [],
72
+ createdAt: now,
73
+ updatedAt: now,
74
+ };
75
+ if (this.inMemory) {
76
+ this.memoryConversations.set(conversation.id, conversation);
77
+ }
78
+ else {
79
+ withTextStoreLock(this.conversationsDir, () => {
80
+ this.writeConversationMeta(conversation.id, conversation);
81
+ this.writeConversationMessages(conversation.id, []);
82
+ });
83
+ }
84
+ log.debug('Created conversation', { id: conversation.id });
85
+ return conversation;
86
+ }
87
+ get(id) {
88
+ if (this.inMemory) {
89
+ const conversation = this.memoryConversations.get(id);
90
+ return conversation ? { ...conversation, messages: [...conversation.messages] } : undefined;
91
+ }
92
+ const meta = this.readConversationMeta(id);
93
+ if (!meta)
94
+ return undefined;
95
+ return {
96
+ ...meta,
97
+ messages: this.readConversationMessages(id),
98
+ };
99
+ }
100
+ list() {
101
+ if (this.inMemory) {
102
+ return Array.from(this.memoryConversations.values())
103
+ .sort((a, b) => b.updatedAt - a.updatedAt)
104
+ .map((conversation) => ({
105
+ id: conversation.id,
106
+ messages: [],
107
+ createdAt: conversation.createdAt,
108
+ updatedAt: conversation.updatedAt,
109
+ }));
110
+ }
111
+ if (!this.conversationsDir || !existsSync(this.conversationsDir))
112
+ return [];
113
+ return readdirSync(this.conversationsDir, { withFileTypes: true })
114
+ .filter((entry) => entry.isDirectory())
115
+ .map((entry) => this.readConversationMeta(entry.name))
116
+ .filter((meta) => meta !== undefined)
117
+ .sort((a, b) => b.updatedAt - a.updatedAt)
118
+ .map((meta) => ({
119
+ id: meta.id,
120
+ messages: [],
121
+ createdAt: meta.createdAt,
122
+ updatedAt: meta.updatedAt,
123
+ }));
124
+ }
125
+ appendMessage(conversationId, role, content, extra) {
126
+ const message = {
127
+ id: nanoid(),
128
+ role,
129
+ content,
130
+ timestamp: Date.now(),
131
+ ...extra,
132
+ };
133
+ if (this.inMemory) {
134
+ const conversation = this.memoryConversations.get(conversationId);
135
+ if (!conversation)
136
+ throw new Error(`Conversation ${conversationId} not found`);
137
+ conversation.messages.push(message);
138
+ conversation.updatedAt = Date.now();
139
+ return message;
140
+ }
141
+ withTextStoreLock(this.getConversationDir(conversationId), () => {
142
+ const meta = this.readConversationMeta(conversationId);
143
+ if (!meta)
144
+ throw new Error(`Conversation ${conversationId} not found`);
145
+ appendJsonLine(this.getMessagesPath(conversationId), message);
146
+ this.writeConversationMeta(conversationId, {
147
+ ...meta,
148
+ updatedAt: Date.now(),
149
+ });
150
+ });
151
+ return message;
152
+ }
153
+ getMessages(conversationId) {
154
+ if (this.inMemory) {
155
+ return [...(this.memoryConversations.get(conversationId)?.messages ?? [])];
156
+ }
157
+ return this.readConversationMessages(conversationId);
158
+ }
159
+ appendTurnJournalEntry(conversationId, turnId, entry) {
160
+ if (this.inMemory)
161
+ return;
162
+ withTextStoreLock(this.getConversationDir(conversationId), () => {
163
+ const meta = this.readConversationMeta(conversationId);
164
+ if (!meta)
165
+ throw new Error(`Conversation ${conversationId} not found`);
166
+ ensureDir(this.getTurnsDir(conversationId));
167
+ appendJsonLine(this.getTurnJournalPath(conversationId, turnId), entry);
168
+ });
169
+ }
170
+ getTurnJournal(conversationId, turnId) {
171
+ if (this.inMemory)
172
+ return [];
173
+ return readJsonLines(this.getTurnJournalPath(conversationId, turnId));
174
+ }
175
+ appendSessionEvent(conversationId, sessionId, event) {
176
+ if (this.inMemory)
177
+ return;
178
+ withTextStoreLock(this.getConversationDir(conversationId), () => {
179
+ const meta = this.readConversationMeta(conversationId);
180
+ if (!meta)
181
+ throw new Error(`Conversation ${conversationId} not found`);
182
+ ensureDir(this.getSessionsDir(conversationId));
183
+ appendJsonLine(this.getSessionLedgerPath(conversationId, sessionId), event);
184
+ });
185
+ }
186
+ getSessionEvents(conversationId, sessionId) {
187
+ if (this.inMemory)
188
+ return [];
189
+ return readJsonLines(this.getSessionLedgerPath(conversationId, sessionId));
190
+ }
191
+ saveQuerySession(conversationId, session) {
192
+ if (this.inMemory) {
193
+ let sessions = this.memorySessions.get(conversationId);
194
+ if (!sessions) {
195
+ sessions = new Map();
196
+ this.memorySessions.set(conversationId, sessions);
197
+ }
198
+ sessions.set(session.id, { ...session });
199
+ return;
200
+ }
201
+ withTextStoreLock(this.getConversationDir(conversationId), () => {
202
+ const meta = this.readConversationMeta(conversationId);
203
+ if (!meta)
204
+ throw new Error(`Conversation ${conversationId} not found`);
205
+ ensureDir(this.getSessionsDir(conversationId));
206
+ writeJsonFileAtomic(this.getSessionSnapshotPath(conversationId, session.id), session);
207
+ });
208
+ }
209
+ getQuerySession(conversationId, sessionId) {
210
+ if (this.inMemory) {
211
+ return this.memorySessions.get(conversationId)?.get(sessionId);
212
+ }
213
+ return readJsonFile(this.getSessionSnapshotPath(conversationId, sessionId), null) ?? undefined;
214
+ }
215
+ pruneTurnJournals(conversationId, policy) {
216
+ if (this.inMemory) {
217
+ return { prunedByAge: 0, prunedByCount: 0, remaining: 0 };
218
+ }
219
+ return withTextStoreLock(this.getConversationDir(conversationId), () => {
220
+ const meta = this.readConversationMeta(conversationId);
221
+ if (!meta)
222
+ return { prunedByAge: 0, prunedByCount: 0, remaining: 0 };
223
+ const files = this.listTurnJournalFiles(conversationId);
224
+ if (files.length === 0) {
225
+ return { prunedByAge: 0, prunedByCount: 0, remaining: 0 };
226
+ }
227
+ let retained = [...files];
228
+ let prunedByAge = 0;
229
+ let prunedByCount = 0;
230
+ if (policy.maxDays > 0) {
231
+ const cutoff = Date.now() - policy.maxDays * 24 * 60 * 60 * 1000;
232
+ const expired = retained.filter((file) => file.mtimeMs < cutoff);
233
+ for (const file of expired) {
234
+ rmSync(file.path, { force: true });
235
+ }
236
+ prunedByAge = expired.length;
237
+ retained = retained.filter((file) => file.mtimeMs >= cutoff);
238
+ }
239
+ if (policy.maxFilesPerConversation > 0 && retained.length > policy.maxFilesPerConversation) {
240
+ const sorted = [...retained].sort((a, b) => b.mtimeMs - a.mtimeMs || a.turnId.localeCompare(b.turnId));
241
+ const keep = new Set(sorted
242
+ .slice(0, policy.maxFilesPerConversation)
243
+ .map((file) => file.path));
244
+ const overflow = retained.filter((file) => !keep.has(file.path));
245
+ for (const file of overflow) {
246
+ rmSync(file.path, { force: true });
247
+ }
248
+ prunedByCount = overflow.length;
249
+ retained = retained.filter((file) => keep.has(file.path));
250
+ }
251
+ return {
252
+ prunedByAge,
253
+ prunedByCount,
254
+ remaining: retained.length,
255
+ };
256
+ });
257
+ }
258
+ deleteMessages(conversationId, messageIds) {
259
+ if (messageIds.length === 0)
260
+ return 0;
261
+ if (this.inMemory) {
262
+ const conversation = this.memoryConversations.get(conversationId);
263
+ if (!conversation)
264
+ return 0;
265
+ const before = conversation.messages.length;
266
+ conversation.messages = conversation.messages.filter((message) => !messageIds.includes(message.id));
267
+ return before - conversation.messages.length;
268
+ }
269
+ return withTextStoreLock(this.getConversationDir(conversationId), () => {
270
+ const messages = this.readConversationMessages(conversationId);
271
+ if (messages.length === 0)
272
+ return 0;
273
+ const filtered = messages.filter((message) => !messageIds.includes(message.id));
274
+ const deleted = messages.length - filtered.length;
275
+ if (deleted > 0) {
276
+ this.writeConversationMessages(conversationId, filtered);
277
+ }
278
+ return deleted;
279
+ });
280
+ }
281
+ delete(id) {
282
+ if (this.inMemory) {
283
+ const deleted = this.memoryConversations.delete(id);
284
+ this.memorySessions.delete(id);
285
+ log.debug('Deleted conversation', { id, deleted });
286
+ return deleted;
287
+ }
288
+ const conversationDir = this.getConversationDir(id);
289
+ return withTextStoreLock(conversationDir, () => {
290
+ if (!existsSync(conversationDir))
291
+ return false;
292
+ rmSync(conversationDir, { recursive: true, force: true });
293
+ log.debug('Deleted conversation', { id, deleted: true });
294
+ return true;
295
+ });
296
+ }
297
+ getPreview(conversationId) {
298
+ const messages = this.getMessages(conversationId);
299
+ return messages.find((message) => message.role === 'user')?.content ?? null;
300
+ }
301
+ close() {
302
+ // No-op for file-backed stores.
303
+ }
304
+ getConversationDir(id) {
305
+ return join(this.conversationsDir ?? dirname(DEFAULT_DB_PATH), id);
306
+ }
307
+ getMetaPath(id) {
308
+ return join(this.getConversationDir(id), 'meta.json');
309
+ }
310
+ getMessagesPath(id) {
311
+ return join(this.getConversationDir(id), 'messages.jsonl');
312
+ }
313
+ getTurnsDir(id) {
314
+ return join(this.getConversationDir(id), 'turns');
315
+ }
316
+ getTurnJournalPath(id, turnId) {
317
+ return join(this.getTurnsDir(id), `${turnId}.jsonl`);
318
+ }
319
+ getSessionsDir(id) {
320
+ return join(this.getConversationDir(id), 'sessions');
321
+ }
322
+ getSessionLedgerPath(id, sessionId) {
323
+ return join(this.getSessionsDir(id), `${sessionId}.jsonl`);
324
+ }
325
+ getSessionSnapshotPath(id, sessionId) {
326
+ return join(this.getSessionsDir(id), `${sessionId}.json`);
327
+ }
328
+ listTurnJournalFiles(id) {
329
+ const turnsDir = this.getTurnsDir(id);
330
+ if (!existsSync(turnsDir))
331
+ return [];
332
+ return readdirSync(turnsDir, { withFileTypes: true })
333
+ .filter((entry) => entry.isFile() && entry.name.endsWith('.jsonl'))
334
+ .map((entry) => {
335
+ const path = join(turnsDir, entry.name);
336
+ return {
337
+ turnId: entry.name.slice(0, -'.jsonl'.length),
338
+ path,
339
+ mtimeMs: statSync(path).mtimeMs,
340
+ };
341
+ });
342
+ }
343
+ readConversationMeta(id) {
344
+ return readJsonFile(this.getMetaPath(id), null) ?? undefined;
345
+ }
346
+ writeConversationMeta(id, meta) {
347
+ ensureDir(this.getConversationDir(id));
348
+ writeJsonFileAtomic(this.getMetaPath(id), meta);
349
+ }
350
+ readConversationMessages(id) {
351
+ return readJsonLines(this.getMessagesPath(id));
352
+ }
353
+ writeConversationMessages(id, messages) {
354
+ ensureDir(this.getConversationDir(id));
355
+ writeJsonLines(this.getMessagesPath(id), messages);
356
+ }
357
+ }
358
+ //# sourceMappingURL=conversation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.js","sourceRoot":"","sources":["../src/conversation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { CerebrumAdapter, TrainingPair } from './orchestrator.js';
2
+ import type { Message } from './types.js';
3
+ export interface DiscoveryResult {
4
+ name: string;
5
+ role: string;
6
+ traits: string[];
7
+ conversation: Message[];
8
+ trainingPairs: TrainingPair[];
9
+ }
10
+ export interface DiscoveryCallbacks {
11
+ /** Display agent's message to the user */
12
+ sendMessage: (content: string) => void;
13
+ /** Get user's text input */
14
+ getUserInput: () => Promise<string>;
15
+ /** Called when discovery is complete */
16
+ onComplete: (result: DiscoveryResult) => void;
17
+ /** Called on each streaming chunk (optional) */
18
+ onChunk?: (chunk: string) => void;
19
+ }
20
+ export declare class DiscoveryEngine {
21
+ private cerebrum;
22
+ private callbacks;
23
+ private messages;
24
+ constructor(cerebrum: CerebrumAdapter, callbacks: DiscoveryCallbacks);
25
+ run(): Promise<DiscoveryResult>;
26
+ private getAgentResponse;
27
+ private parseCompletion;
28
+ private buildResult;
29
+ private extractPartialResult;
30
+ private extractTrainingPairs;
31
+ }
32
+ //# sourceMappingURL=discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAmB,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAwB1C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,OAAO,EAAE,CAAC;IACxB,aAAa,EAAE,YAAY,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,0CAA0C;IAC1C,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,4BAA4B;IAC5B,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,wCAAwC;IACxC,UAAU,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IAC9C,gDAAgD;IAChD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAID,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,QAAQ,CAAiB;gBAErB,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,kBAAkB;IAK9D,GAAG,IAAI,OAAO,CAAC,eAAe,CAAC;YAuDvB,gBAAgB;IAyB9B,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,oBAAoB;IAoB5B,OAAO,CAAC,oBAAoB;CAkB7B"}