@indigoai-us/cq 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 (177) hide show
  1. package/dist/__tests__/integration.test.d.ts +8 -0
  2. package/dist/__tests__/integration.test.d.ts.map +1 -0
  3. package/dist/__tests__/integration.test.js +233 -0
  4. package/dist/__tests__/integration.test.js.map +1 -0
  5. package/dist/budget/__tests__/budget.test.d.ts +2 -0
  6. package/dist/budget/__tests__/budget.test.d.ts.map +1 -0
  7. package/dist/budget/__tests__/budget.test.js +238 -0
  8. package/dist/budget/__tests__/budget.test.js.map +1 -0
  9. package/dist/budget/__tests__/token-tracker.test.d.ts +2 -0
  10. package/dist/budget/__tests__/token-tracker.test.d.ts.map +1 -0
  11. package/dist/budget/__tests__/token-tracker.test.js +292 -0
  12. package/dist/budget/__tests__/token-tracker.test.js.map +1 -0
  13. package/dist/budget/index.d.ts +38 -0
  14. package/dist/budget/index.d.ts.map +1 -0
  15. package/dist/budget/index.js +192 -0
  16. package/dist/budget/index.js.map +1 -0
  17. package/dist/budget/token-tracker.d.ts +62 -0
  18. package/dist/budget/token-tracker.d.ts.map +1 -0
  19. package/dist/budget/token-tracker.js +152 -0
  20. package/dist/budget/token-tracker.js.map +1 -0
  21. package/dist/budget/types.d.ts +41 -0
  22. package/dist/budget/types.d.ts.map +1 -0
  23. package/dist/budget/types.js +5 -0
  24. package/dist/budget/types.js.map +1 -0
  25. package/dist/confidence/__tests__/confidence.test.d.ts +2 -0
  26. package/dist/confidence/__tests__/confidence.test.d.ts.map +1 -0
  27. package/dist/confidence/__tests__/confidence.test.js +336 -0
  28. package/dist/confidence/__tests__/confidence.test.js.map +1 -0
  29. package/dist/confidence/erosion.d.ts +33 -0
  30. package/dist/confidence/erosion.d.ts.map +1 -0
  31. package/dist/confidence/erosion.js +42 -0
  32. package/dist/confidence/erosion.js.map +1 -0
  33. package/dist/confidence/index.d.ts +42 -0
  34. package/dist/confidence/index.d.ts.map +1 -0
  35. package/dist/confidence/index.js +168 -0
  36. package/dist/confidence/index.js.map +1 -0
  37. package/dist/confidence/types.d.ts +29 -0
  38. package/dist/confidence/types.d.ts.map +1 -0
  39. package/dist/confidence/types.js +5 -0
  40. package/dist/confidence/types.js.map +1 -0
  41. package/dist/curiosity/__tests__/curiosity.test.d.ts +2 -0
  42. package/dist/curiosity/__tests__/curiosity.test.d.ts.map +1 -0
  43. package/dist/curiosity/__tests__/curiosity.test.js +280 -0
  44. package/dist/curiosity/__tests__/curiosity.test.js.map +1 -0
  45. package/dist/curiosity/dedup.d.ts +29 -0
  46. package/dist/curiosity/dedup.d.ts.map +1 -0
  47. package/dist/curiosity/dedup.js +64 -0
  48. package/dist/curiosity/dedup.js.map +1 -0
  49. package/dist/curiosity/index.d.ts +56 -0
  50. package/dist/curiosity/index.d.ts.map +1 -0
  51. package/dist/curiosity/index.js +163 -0
  52. package/dist/curiosity/index.js.map +1 -0
  53. package/dist/curiosity/types.d.ts +29 -0
  54. package/dist/curiosity/types.d.ts.map +1 -0
  55. package/dist/curiosity/types.js +5 -0
  56. package/dist/curiosity/types.js.map +1 -0
  57. package/dist/index.d.ts +25 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +16 -0
  60. package/dist/index.js.map +1 -0
  61. package/dist/index.test.d.ts +2 -0
  62. package/dist/index.test.d.ts.map +1 -0
  63. package/dist/index.test.js +7 -0
  64. package/dist/index.test.js.map +1 -0
  65. package/dist/init.d.ts +17 -0
  66. package/dist/init.d.ts.map +1 -0
  67. package/dist/init.js +153 -0
  68. package/dist/init.js.map +1 -0
  69. package/dist/knowledge-tree/__tests__/knowledge-tree.test.d.ts +2 -0
  70. package/dist/knowledge-tree/__tests__/knowledge-tree.test.d.ts.map +1 -0
  71. package/dist/knowledge-tree/__tests__/knowledge-tree.test.js +317 -0
  72. package/dist/knowledge-tree/__tests__/knowledge-tree.test.js.map +1 -0
  73. package/dist/knowledge-tree/format.d.ts +17 -0
  74. package/dist/knowledge-tree/format.d.ts.map +1 -0
  75. package/dist/knowledge-tree/format.js +48 -0
  76. package/dist/knowledge-tree/format.js.map +1 -0
  77. package/dist/knowledge-tree/index.d.ts +33 -0
  78. package/dist/knowledge-tree/index.d.ts.map +1 -0
  79. package/dist/knowledge-tree/index.js +182 -0
  80. package/dist/knowledge-tree/index.js.map +1 -0
  81. package/dist/knowledge-tree/types.d.ts +37 -0
  82. package/dist/knowledge-tree/types.d.ts.map +1 -0
  83. package/dist/knowledge-tree/types.js +5 -0
  84. package/dist/knowledge-tree/types.js.map +1 -0
  85. package/dist/metadata/__tests__/metadata.test.d.ts +2 -0
  86. package/dist/metadata/__tests__/metadata.test.d.ts.map +1 -0
  87. package/dist/metadata/__tests__/metadata.test.js +196 -0
  88. package/dist/metadata/__tests__/metadata.test.js.map +1 -0
  89. package/dist/metadata/__tests__/search.test.d.ts +2 -0
  90. package/dist/metadata/__tests__/search.test.d.ts.map +1 -0
  91. package/dist/metadata/__tests__/search.test.js +227 -0
  92. package/dist/metadata/__tests__/search.test.js.map +1 -0
  93. package/dist/metadata/index.d.ts +29 -0
  94. package/dist/metadata/index.d.ts.map +1 -0
  95. package/dist/metadata/index.js +108 -0
  96. package/dist/metadata/index.js.map +1 -0
  97. package/dist/metadata/schema.d.ts +8 -0
  98. package/dist/metadata/schema.d.ts.map +1 -0
  99. package/dist/metadata/schema.js +31 -0
  100. package/dist/metadata/schema.js.map +1 -0
  101. package/dist/metadata/search.d.ts +27 -0
  102. package/dist/metadata/search.d.ts.map +1 -0
  103. package/dist/metadata/search.js +57 -0
  104. package/dist/metadata/search.js.map +1 -0
  105. package/dist/metadata/types.d.ts +17 -0
  106. package/dist/metadata/types.d.ts.map +1 -0
  107. package/dist/metadata/types.js +5 -0
  108. package/dist/metadata/types.js.map +1 -0
  109. package/dist/orchestrator/__tests__/orchestrator.test.d.ts +2 -0
  110. package/dist/orchestrator/__tests__/orchestrator.test.d.ts.map +1 -0
  111. package/dist/orchestrator/__tests__/orchestrator.test.js +354 -0
  112. package/dist/orchestrator/__tests__/orchestrator.test.js.map +1 -0
  113. package/dist/orchestrator/index.d.ts +23 -0
  114. package/dist/orchestrator/index.d.ts.map +1 -0
  115. package/dist/orchestrator/index.js +302 -0
  116. package/dist/orchestrator/index.js.map +1 -0
  117. package/dist/orchestrator/scheduler.d.ts +32 -0
  118. package/dist/orchestrator/scheduler.d.ts.map +1 -0
  119. package/dist/orchestrator/scheduler.js +102 -0
  120. package/dist/orchestrator/scheduler.js.map +1 -0
  121. package/dist/orchestrator/types.d.ts +90 -0
  122. package/dist/orchestrator/types.d.ts.map +1 -0
  123. package/dist/orchestrator/types.js +5 -0
  124. package/dist/orchestrator/types.js.map +1 -0
  125. package/dist/pipeline/__tests__/pipeline.test.d.ts +2 -0
  126. package/dist/pipeline/__tests__/pipeline.test.d.ts.map +1 -0
  127. package/dist/pipeline/__tests__/pipeline.test.js +320 -0
  128. package/dist/pipeline/__tests__/pipeline.test.js.map +1 -0
  129. package/dist/pipeline/index.d.ts +23 -0
  130. package/dist/pipeline/index.d.ts.map +1 -0
  131. package/dist/pipeline/index.js +212 -0
  132. package/dist/pipeline/index.js.map +1 -0
  133. package/dist/pipeline/types.d.ts +41 -0
  134. package/dist/pipeline/types.d.ts.map +1 -0
  135. package/dist/pipeline/types.js +5 -0
  136. package/dist/pipeline/types.js.map +1 -0
  137. package/dist/providers/__tests__/providers.test.d.ts +2 -0
  138. package/dist/providers/__tests__/providers.test.d.ts.map +1 -0
  139. package/dist/providers/__tests__/providers.test.js +195 -0
  140. package/dist/providers/__tests__/providers.test.js.map +1 -0
  141. package/dist/providers/claude-model.d.ts +17 -0
  142. package/dist/providers/claude-model.d.ts.map +1 -0
  143. package/dist/providers/claude-model.js +119 -0
  144. package/dist/providers/claude-model.js.map +1 -0
  145. package/dist/providers/index.d.ts +22 -0
  146. package/dist/providers/index.d.ts.map +1 -0
  147. package/dist/providers/index.js +38 -0
  148. package/dist/providers/index.js.map +1 -0
  149. package/dist/providers/openai-search.d.ts +14 -0
  150. package/dist/providers/openai-search.d.ts.map +1 -0
  151. package/dist/providers/openai-search.js +97 -0
  152. package/dist/providers/openai-search.js.map +1 -0
  153. package/dist/providers/types.d.ts +42 -0
  154. package/dist/providers/types.d.ts.map +1 -0
  155. package/dist/providers/types.js +5 -0
  156. package/dist/providers/types.js.map +1 -0
  157. package/dist/types.d.ts +122 -0
  158. package/dist/types.d.ts.map +1 -0
  159. package/dist/types.js +5 -0
  160. package/dist/types.js.map +1 -0
  161. package/dist/vetter/__tests__/vetter.test.d.ts +2 -0
  162. package/dist/vetter/__tests__/vetter.test.d.ts.map +1 -0
  163. package/dist/vetter/__tests__/vetter.test.js +224 -0
  164. package/dist/vetter/__tests__/vetter.test.js.map +1 -0
  165. package/dist/vetter/index.d.ts +23 -0
  166. package/dist/vetter/index.d.ts.map +1 -0
  167. package/dist/vetter/index.js +177 -0
  168. package/dist/vetter/index.js.map +1 -0
  169. package/dist/vetter/resource-tracker.d.ts +49 -0
  170. package/dist/vetter/resource-tracker.d.ts.map +1 -0
  171. package/dist/vetter/resource-tracker.js +183 -0
  172. package/dist/vetter/resource-tracker.js.map +1 -0
  173. package/dist/vetter/types.d.ts +44 -0
  174. package/dist/vetter/types.d.ts.map +1 -0
  175. package/dist/vetter/types.js +5 -0
  176. package/dist/vetter/types.js.map +1 -0
  177. package/package.json +72 -0
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Deduplication via normalized Levenshtein distance.
3
+ *
4
+ * Two questions are considered duplicates when their normalized similarity
5
+ * exceeds 0.85 (i.e. normalizedLevenshtein(a, b) > 0.85).
6
+ */
7
+ /**
8
+ * Compute the Levenshtein edit distance between two strings.
9
+ *
10
+ * Uses the classic O(m*n) dynamic-programming approach with a single-row
11
+ * optimisation for memory efficiency.
12
+ */
13
+ export declare function levenshtein(a: string, b: string): number;
14
+ /**
15
+ * Normalized Levenshtein similarity: 1 - (distance / max_length).
16
+ *
17
+ * Returns a value in [0, 1] where 1 means identical strings.
18
+ * Returns 1 for two empty strings.
19
+ */
20
+ export declare function normalizedSimilarity(a: string, b: string): number;
21
+ /** Similarity threshold above which two questions are duplicates. */
22
+ export declare const DEDUP_THRESHOLD = 0.85;
23
+ /**
24
+ * Check whether `question` is a duplicate of any string in `existing`.
25
+ *
26
+ * Comparison is case-insensitive and whitespace-normalized.
27
+ */
28
+ export declare function isDuplicate(question: string, existing: string[]): boolean;
29
+ //# sourceMappingURL=dedup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dedup.d.ts","sourceRoot":"","sources":["../../src/curiosity/dedup.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA2BxD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAIjE;AAED,qEAAqE;AACrE,eAAO,MAAM,eAAe,OAAO,CAAC;AAEpC;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAKzE"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Deduplication via normalized Levenshtein distance.
3
+ *
4
+ * Two questions are considered duplicates when their normalized similarity
5
+ * exceeds 0.85 (i.e. normalizedLevenshtein(a, b) > 0.85).
6
+ */
7
+ /**
8
+ * Compute the Levenshtein edit distance between two strings.
9
+ *
10
+ * Uses the classic O(m*n) dynamic-programming approach with a single-row
11
+ * optimisation for memory efficiency.
12
+ */
13
+ export function levenshtein(a, b) {
14
+ const m = a.length;
15
+ const n = b.length;
16
+ if (m === 0)
17
+ return n;
18
+ if (n === 0)
19
+ return m;
20
+ // Previous row of distances (length n+1)
21
+ let prev = new Array(n + 1);
22
+ let curr = new Array(n + 1);
23
+ for (let j = 0; j <= n; j++)
24
+ prev[j] = j;
25
+ for (let i = 1; i <= m; i++) {
26
+ curr[0] = i;
27
+ for (let j = 1; j <= n; j++) {
28
+ const cost = a[i - 1] === b[j - 1] ? 0 : 1;
29
+ curr[j] = Math.min(prev[j] + 1, // deletion
30
+ curr[j - 1] + 1, // insertion
31
+ prev[j - 1] + cost);
32
+ }
33
+ [prev, curr] = [curr, prev];
34
+ }
35
+ return prev[n];
36
+ }
37
+ /**
38
+ * Normalized Levenshtein similarity: 1 - (distance / max_length).
39
+ *
40
+ * Returns a value in [0, 1] where 1 means identical strings.
41
+ * Returns 1 for two empty strings.
42
+ */
43
+ export function normalizedSimilarity(a, b) {
44
+ const maxLen = Math.max(a.length, b.length);
45
+ if (maxLen === 0)
46
+ return 1;
47
+ return 1 - levenshtein(a, b) / maxLen;
48
+ }
49
+ /** Similarity threshold above which two questions are duplicates. */
50
+ export const DEDUP_THRESHOLD = 0.85;
51
+ /**
52
+ * Check whether `question` is a duplicate of any string in `existing`.
53
+ *
54
+ * Comparison is case-insensitive and whitespace-normalized.
55
+ */
56
+ export function isDuplicate(question, existing) {
57
+ const norm = normalize(question);
58
+ return existing.some((e) => normalizedSimilarity(norm, normalize(e)) > DEDUP_THRESHOLD);
59
+ }
60
+ /** Lowercase and collapse whitespace for fair comparison. */
61
+ function normalize(s) {
62
+ return s.toLowerCase().replace(/\s+/g, " ").trim();
63
+ }
64
+ //# sourceMappingURL=dedup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dedup.js","sourceRoot":"","sources":["../../src/curiosity/dedup.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,CAAS,EAAE,CAAS;IAC9C,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IAEnB,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACtB,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEtB,yCAAyC;IACzC,IAAI,IAAI,GAAG,IAAI,KAAK,CAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,IAAI,IAAI,GAAG,IAAI,KAAK,CAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;QAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAChB,IAAI,CAAC,CAAC,CAAE,GAAG,CAAC,EAAQ,WAAW;YAC/B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,CAAC,EAAI,YAAY;YAChC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,GAAG,IAAI,CACpB,CAAC;QACJ,CAAC;QACD,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,IAAI,CAAC,CAAC,CAAE,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,CAAS,EAAE,CAAS;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC;AACxC,CAAC;AAED,qEAAqE;AACrE,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AAEpC;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,QAAgB,EAAE,QAAkB;IAC9D,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IACjC,OAAO,QAAQ,CAAC,IAAI,CAClB,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,CAClE,CAAC;AACJ,CAAC;AAED,6DAA6D;AAC7D,SAAS,SAAS,CAAC,CAAS;IAC1B,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACrD,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Curiosity Queue — priority-based queue for agent-filed questions.
3
+ *
4
+ * Uses the same SQLite database as the metadata store (obtained via getDb()).
5
+ * The curiosity_queue table is created by calling initCuriosityQueue().
6
+ */
7
+ import type Database from "better-sqlite3";
8
+ import type { CuriosityItem, AddCuriosityInput, StatusCounts } from "./types.js";
9
+ export type { CuriosityItem, AddCuriosityInput, CuriositySource, CuriosityStatus, StatusCounts, } from "./types.js";
10
+ export { levenshtein, normalizedSimilarity, isDuplicate, DEDUP_THRESHOLD } from "./dedup.js";
11
+ /**
12
+ * Create the curiosity_queue table in the given database.
13
+ *
14
+ * Call this after initMetadataDb() — pass the db instance returned by getDb().
15
+ */
16
+ export declare function initCuriosityQueue(db?: Database.Database): void;
17
+ /**
18
+ * Add a curiosity item to the queue.
19
+ *
20
+ * Rejects duplicates: if a pending item has normalized Levenshtein similarity
21
+ * > 0.85 with the new question, the insert is skipped and null is returned.
22
+ */
23
+ export declare function addCuriosity(input: AddCuriosityInput): CuriosityItem | null;
24
+ /**
25
+ * Fetch pending items ordered by priority DESC, created_at ASC.
26
+ */
27
+ export declare function fetchPending(limit: number): CuriosityItem[];
28
+ /**
29
+ * Get a single curiosity item by ID.
30
+ */
31
+ export declare function getItem(id: number): CuriosityItem | undefined;
32
+ /**
33
+ * Mark an item as in_progress.
34
+ */
35
+ export declare function markInProgress(id: number): void;
36
+ /**
37
+ * Mark an item as completed.
38
+ */
39
+ export declare function markCompleted(id: number): void;
40
+ /**
41
+ * Mark an item as failed with an error message.
42
+ */
43
+ export declare function markFailed(id: number, error: string): void;
44
+ /**
45
+ * Dismiss a curiosity item.
46
+ */
47
+ export declare function dismiss(id: number): void;
48
+ /**
49
+ * Return the count of items per status.
50
+ */
51
+ export declare function countByStatus(): StatusCounts;
52
+ /**
53
+ * Remove failed items older than the specified number of days.
54
+ */
55
+ export declare function pruneFailed(olderThanDays: number): number;
56
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/curiosity/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAG3C,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EAEjB,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAwB7F;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAG/D;AAoBD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,aAAa,GAAG,IAAI,CA+B3E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE,CAO3D;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAK7D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAK/C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAK9C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAK1D;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAKxC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,YAAY,CAmB5C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CASzD"}
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Curiosity Queue — priority-based queue for agent-filed questions.
3
+ *
4
+ * Uses the same SQLite database as the metadata store (obtained via getDb()).
5
+ * The curiosity_queue table is created by calling initCuriosityQueue().
6
+ */
7
+ import { getDb } from "../metadata/index.js";
8
+ import { isDuplicate } from "./dedup.js";
9
+ export { levenshtein, normalizedSimilarity, isDuplicate, DEDUP_THRESHOLD } from "./dedup.js";
10
+ // ---------------------------------------------------------------------------
11
+ // Schema
12
+ // ---------------------------------------------------------------------------
13
+ const CREATE_CURIOSITY_QUEUE = `
14
+ CREATE TABLE IF NOT EXISTS curiosity_queue (
15
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
16
+ question TEXT NOT NULL,
17
+ context TEXT NOT NULL DEFAULT '',
18
+ source TEXT NOT NULL,
19
+ priority INTEGER NOT NULL DEFAULT 5,
20
+ status TEXT NOT NULL DEFAULT 'pending',
21
+ error TEXT,
22
+ created_at TEXT NOT NULL,
23
+ updated_at TEXT NOT NULL
24
+ );
25
+ `;
26
+ // ---------------------------------------------------------------------------
27
+ // Initialisation
28
+ // ---------------------------------------------------------------------------
29
+ /**
30
+ * Create the curiosity_queue table in the given database.
31
+ *
32
+ * Call this after initMetadataDb() — pass the db instance returned by getDb().
33
+ */
34
+ export function initCuriosityQueue(db) {
35
+ const conn = db ?? requireDb();
36
+ conn.exec(CREATE_CURIOSITY_QUEUE);
37
+ }
38
+ // ---------------------------------------------------------------------------
39
+ // Helpers
40
+ // ---------------------------------------------------------------------------
41
+ function requireDb() {
42
+ const conn = getDb();
43
+ if (!conn)
44
+ throw new Error("Database not initialised — call initMetadataDb first");
45
+ return conn;
46
+ }
47
+ function now() {
48
+ return new Date().toISOString();
49
+ }
50
+ // ---------------------------------------------------------------------------
51
+ // CRUD
52
+ // ---------------------------------------------------------------------------
53
+ /**
54
+ * Add a curiosity item to the queue.
55
+ *
56
+ * Rejects duplicates: if a pending item has normalized Levenshtein similarity
57
+ * > 0.85 with the new question, the insert is skipped and null is returned.
58
+ */
59
+ export function addCuriosity(input) {
60
+ const db = requireDb();
61
+ // Validate priority range
62
+ if (input.priority < 1 || input.priority > 10) {
63
+ throw new Error("Priority must be between 1 and 10");
64
+ }
65
+ // Dedup against pending items
66
+ const pendingQuestions = db
67
+ .prepare("SELECT question FROM curiosity_queue WHERE status = 'pending'")
68
+ .all();
69
+ if (isDuplicate(input.question, pendingQuestions.map((r) => r.question))) {
70
+ return null;
71
+ }
72
+ const ts = now();
73
+ const result = db.prepare(`
74
+ INSERT INTO curiosity_queue (question, context, source, priority, status, created_at, updated_at)
75
+ VALUES (@question, @context, @source, @priority, 'pending', @created_at, @updated_at)
76
+ `).run({
77
+ question: input.question,
78
+ context: input.context,
79
+ source: input.source,
80
+ priority: input.priority,
81
+ created_at: ts,
82
+ updated_at: ts,
83
+ });
84
+ return getItem(Number(result.lastInsertRowid));
85
+ }
86
+ /**
87
+ * Fetch pending items ordered by priority DESC, created_at ASC.
88
+ */
89
+ export function fetchPending(limit) {
90
+ const db = requireDb();
91
+ return db
92
+ .prepare("SELECT * FROM curiosity_queue WHERE status = 'pending' ORDER BY priority DESC, created_at ASC LIMIT ?")
93
+ .all(limit);
94
+ }
95
+ /**
96
+ * Get a single curiosity item by ID.
97
+ */
98
+ export function getItem(id) {
99
+ const db = requireDb();
100
+ return db
101
+ .prepare("SELECT * FROM curiosity_queue WHERE id = ?")
102
+ .get(id);
103
+ }
104
+ /**
105
+ * Mark an item as in_progress.
106
+ */
107
+ export function markInProgress(id) {
108
+ const db = requireDb();
109
+ db.prepare("UPDATE curiosity_queue SET status = 'in_progress', updated_at = ? WHERE id = ?").run(now(), id);
110
+ }
111
+ /**
112
+ * Mark an item as completed.
113
+ */
114
+ export function markCompleted(id) {
115
+ const db = requireDb();
116
+ db.prepare("UPDATE curiosity_queue SET status = 'completed', updated_at = ? WHERE id = ?").run(now(), id);
117
+ }
118
+ /**
119
+ * Mark an item as failed with an error message.
120
+ */
121
+ export function markFailed(id, error) {
122
+ const db = requireDb();
123
+ db.prepare("UPDATE curiosity_queue SET status = 'failed', error = ?, updated_at = ? WHERE id = ?").run(error, now(), id);
124
+ }
125
+ /**
126
+ * Dismiss a curiosity item.
127
+ */
128
+ export function dismiss(id) {
129
+ const db = requireDb();
130
+ db.prepare("UPDATE curiosity_queue SET status = 'dismissed', updated_at = ? WHERE id = ?").run(now(), id);
131
+ }
132
+ /**
133
+ * Return the count of items per status.
134
+ */
135
+ export function countByStatus() {
136
+ const db = requireDb();
137
+ const rows = db
138
+ .prepare("SELECT status, COUNT(*) as count FROM curiosity_queue GROUP BY status")
139
+ .all();
140
+ const counts = {
141
+ pending: 0,
142
+ in_progress: 0,
143
+ completed: 0,
144
+ failed: 0,
145
+ dismissed: 0,
146
+ };
147
+ for (const row of rows) {
148
+ counts[row.status] = row.count;
149
+ }
150
+ return counts;
151
+ }
152
+ /**
153
+ * Remove failed items older than the specified number of days.
154
+ */
155
+ export function pruneFailed(olderThanDays) {
156
+ const db = requireDb();
157
+ const cutoff = new Date(Date.now() - olderThanDays * 86_400_000).toISOString();
158
+ const result = db
159
+ .prepare("DELETE FROM curiosity_queue WHERE status = 'failed' AND created_at < ?")
160
+ .run(cutoff);
161
+ return result.changes;
162
+ }
163
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/curiosity/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Curiosity Queue type definitions.
3
+ */
4
+ /** Valid sources for curiosity items. */
5
+ export type CuriositySource = "observation" | "outcome_gap" | "trend_detection" | "knowledge_gap" | "conversation_insight" | "agent" | "system";
6
+ /** Valid statuses for curiosity items. */
7
+ export type CuriosityStatus = "pending" | "in_progress" | "completed" | "failed" | "dismissed";
8
+ /** A row in the curiosity_queue table. */
9
+ export interface CuriosityItem {
10
+ id: number;
11
+ question: string;
12
+ context: string;
13
+ source: CuriositySource;
14
+ priority: number;
15
+ status: CuriosityStatus;
16
+ error: string | null;
17
+ created_at: string;
18
+ updated_at: string;
19
+ }
20
+ /** Input for adding a new curiosity item. */
21
+ export interface AddCuriosityInput {
22
+ question: string;
23
+ context: string;
24
+ source: CuriositySource;
25
+ priority: number;
26
+ }
27
+ /** Count of items grouped by status. */
28
+ export type StatusCounts = Record<CuriosityStatus, number>;
29
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/curiosity/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,yCAAyC;AACzC,MAAM,MAAM,eAAe,GACvB,aAAa,GACb,aAAa,GACb,iBAAiB,GACjB,eAAe,GACf,sBAAsB,GACtB,OAAO,GACP,QAAQ,CAAC;AAEb,0CAA0C;AAC1C,MAAM,MAAM,eAAe,GACvB,SAAS,GACT,aAAa,GACb,WAAW,GACX,QAAQ,GACR,WAAW,CAAC;AAEhB,0CAA0C;AAC1C,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,6CAA6C;AAC7C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wCAAwC;AACxC,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Curiosity Queue type definitions.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/curiosity/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,25 @@
1
+ export { initCQ } from "./init.js";
2
+ export type { CQConfig, CQInstance } from "./types.js";
3
+ export { initKnowledgeTree, writeEntry, readEntry, listEntries, listCategories, removeEntry, createCategory, generateIndex, generateIndexRecursive, slugify, } from "./knowledge-tree/index.js";
4
+ export type { KnowledgeEntry, WriteEntryInput, CategoryInfo, KnowledgeFrontmatter, } from "./knowledge-tree/index.js";
5
+ export { initMetadataDb, closeDb, getDb, indexEntry, removeFromIndex, getMetadata, getStaleEntries, } from "./metadata/index.js";
6
+ export type { KnowledgeMetadata } from "./metadata/index.js";
7
+ export { search, rebuildIndex } from "./metadata/search.js";
8
+ export type { SearchResult } from "./metadata/search.js";
9
+ export { initCuriosityQueue, addCuriosity, fetchPending, getItem, markInProgress, markCompleted, markFailed, dismiss, countByStatus, pruneFailed, levenshtein, normalizedSimilarity, isDuplicate, DEDUP_THRESHOLD, } from "./curiosity/index.js";
10
+ export type { CuriosityItem, AddCuriosityInput, CuriositySource, CuriosityStatus, StatusCounts, } from "./curiosity/index.js";
11
+ export { setConfidenceConfig, getConfidenceConfig, getConfidence, recordVerification, recordContradiction, getRefreshCandidates, computeConfidence, daysElapsed, applyContradiction, } from "./confidence/index.js";
12
+ export type { ConfidenceConfig, RefreshCandidate, } from "./confidence/index.js";
13
+ export { createSearchProvider, createModelProvider, OpenAISearchProvider, ClaudeModelProvider, } from "./providers/index.js";
14
+ export type { WebSearchResult, SynthesisResult, SearchProvider, ModelProvider, } from "./providers/index.js";
15
+ export { runPipeline } from "./pipeline/index.js";
16
+ export type { PipelineResult, PipelineOptions, PipelineAction, BudgetCheck, } from "./pipeline/index.js";
17
+ export { vetResource, initResourceTracker, trackResourceUsage, isOverRelied, getDomainUsage, getUnderexploredDomains, getResourceUsage, } from "./vetter/index.js";
18
+ export type { VetResult, VetConfig, QualitySignal, VetRecommendation, ResourceUsage, DomainStats, } from "./vetter/index.js";
19
+ export { initBudgetTables, setBudgetConfig, getBudgetConfig, charge, checkBudget, getDailyBudgetStatus, getTotalBudgetStatus, } from "./budget/index.js";
20
+ export type { BudgetConfig, BudgetCheckResult, BudgetStatus, ChargeType, SelectionStrategy, ScoredEntry, } from "./budget/index.js";
21
+ export { TokenTracker, estimateTokens } from "./budget/index.js";
22
+ export { runOrchestrator, initJobLog, getRecentRuns, } from "./orchestrator/index.js";
23
+ export type { OrchestratorOptions, OrchestratorResult, CuriosityPhaseResult, ProactivePhaseResult, RunLogEntry, SchedulerConfig, } from "./orchestrator/index.js";
24
+ export { startScheduler, stopScheduler, isSchedulerRunning, matchesCron, } from "./orchestrator/scheduler.js";
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,16 @@
1
+ // CQ — Curiosity Queue / Knowledge Loop
2
+ // Main entry point
3
+ export { initCQ } from "./init.js";
4
+ export { initKnowledgeTree, writeEntry, readEntry, listEntries, listCategories, removeEntry, createCategory, generateIndex, generateIndexRecursive, slugify, } from "./knowledge-tree/index.js";
5
+ export { initMetadataDb, closeDb, getDb, indexEntry, removeFromIndex, getMetadata, getStaleEntries, } from "./metadata/index.js";
6
+ export { search, rebuildIndex } from "./metadata/search.js";
7
+ export { initCuriosityQueue, addCuriosity, fetchPending, getItem, markInProgress, markCompleted, markFailed, dismiss, countByStatus, pruneFailed, levenshtein, normalizedSimilarity, isDuplicate, DEDUP_THRESHOLD, } from "./curiosity/index.js";
8
+ export { setConfidenceConfig, getConfidenceConfig, getConfidence, recordVerification, recordContradiction, getRefreshCandidates, computeConfidence, daysElapsed, applyContradiction, } from "./confidence/index.js";
9
+ export { createSearchProvider, createModelProvider, OpenAISearchProvider, ClaudeModelProvider, } from "./providers/index.js";
10
+ export { runPipeline } from "./pipeline/index.js";
11
+ export { vetResource, initResourceTracker, trackResourceUsage, isOverRelied, getDomainUsage, getUnderexploredDomains, getResourceUsage, } from "./vetter/index.js";
12
+ export { initBudgetTables, setBudgetConfig, getBudgetConfig, charge, checkBudget, getDailyBudgetStatus, getTotalBudgetStatus, } from "./budget/index.js";
13
+ export { TokenTracker, estimateTokens } from "./budget/index.js";
14
+ export { runOrchestrator, initJobLog, getRecentRuns, } from "./orchestrator/index.js";
15
+ export { startScheduler, stopScheduler, isSchedulerRunning, matchesCron, } from "./orchestrator/scheduler.js";
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,mBAAmB;AAEnB,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGnC,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,SAAS,EACT,WAAW,EACX,cAAc,EACd,WAAW,EACX,cAAc,EACd,aAAa,EACb,sBAAsB,EACtB,OAAO,GACR,MAAM,2BAA2B,CAAC;AASnC,OAAO,EACL,cAAc,EACd,OAAO,EACP,KAAK,EACL,UAAU,EACV,eAAe,EACf,WAAW,EACX,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAG5D,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,cAAc,EACd,aAAa,EACb,UAAU,EACV,OAAO,EACP,aAAa,EACb,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,WAAW,EACX,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAU9B,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAO/B,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAS9B,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AASlD,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAW3B,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,MAAM,EACN,WAAW,EACX,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAW3B,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEjE,OAAO,EACL,eAAe,EACf,UAAU,EACV,aAAa,GACd,MAAM,yBAAyB,CAAC;AAWjC,OAAO,EACL,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,WAAW,GACZ,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import { describe, it, expect } from "vitest";
2
+ describe("cq", () => {
3
+ it("placeholder: package loads", () => {
4
+ expect(true).toBe(true);
5
+ });
6
+ });
7
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9C,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE;IAClB,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/dist/init.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ /**
2
+ * CQ Public API — unified initialisation.
3
+ *
4
+ * initCQ(config) bootstraps the entire CQ system from a single config object
5
+ * and returns a CQInstance with access to all subsystems.
6
+ */
7
+ import type { CQConfig, CQInstance } from "./types.js";
8
+ /**
9
+ * Initialise the entire CQ system from a single configuration object.
10
+ *
11
+ * Opens the SQLite database, creates all required tables, initialises the
12
+ * knowledge tree directory, and optionally starts the scheduler.
13
+ *
14
+ * Call `instance.close()` when done to release all resources.
15
+ */
16
+ export declare function initCQ(config: CQConfig): Promise<CQInstance>;
17
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAuFH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAMvD;;;;;;;GAOG;AACH,wBAAsB,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CA6IlE"}
package/dist/init.js ADDED
@@ -0,0 +1,153 @@
1
+ /**
2
+ * CQ Public API — unified initialisation.
3
+ *
4
+ * initCQ(config) bootstraps the entire CQ system from a single config object
5
+ * and returns a CQInstance with access to all subsystems.
6
+ */
7
+ import { join } from "node:path";
8
+ import { initKnowledgeTree, writeEntry, readEntry, listEntries, listCategories, removeEntry, createCategory, generateIndex, generateIndexRecursive, } from "./knowledge-tree/index.js";
9
+ import { initMetadataDb, closeDb, indexEntry, removeFromIndex, getMetadata, getStaleEntries, } from "./metadata/index.js";
10
+ import { search, rebuildIndex } from "./metadata/search.js";
11
+ import { setConfidenceConfig, getConfidenceConfig, getConfidence, recordVerification, recordContradiction, getRefreshCandidates, } from "./confidence/index.js";
12
+ import { initCuriosityQueue, addCuriosity, fetchPending, getItem, markInProgress, markCompleted, markFailed, dismiss, countByStatus, } from "./curiosity/index.js";
13
+ import { runPipeline } from "./pipeline/index.js";
14
+ import { vetResource, trackResourceUsage, isOverRelied, getDomainUsage, getUnderexploredDomains, getResourceUsage, } from "./vetter/index.js";
15
+ import { initResourceTrackerWithDb } from "./vetter/resource-tracker.js";
16
+ import { initBudgetTables, setBudgetConfig, getBudgetConfig, charge, checkBudget, getDailyBudgetStatus, getTotalBudgetStatus, } from "./budget/index.js";
17
+ import { TokenTracker } from "./budget/token-tracker.js";
18
+ import { runOrchestrator, initJobLog, getRecentRuns, } from "./orchestrator/index.js";
19
+ import { startScheduler, stopScheduler, isSchedulerRunning, } from "./orchestrator/scheduler.js";
20
+ import { createSearchProvider, createModelProvider } from "./providers/index.js";
21
+ // ---------------------------------------------------------------------------
22
+ // initCQ
23
+ // ---------------------------------------------------------------------------
24
+ /**
25
+ * Initialise the entire CQ system from a single configuration object.
26
+ *
27
+ * Opens the SQLite database, creates all required tables, initialises the
28
+ * knowledge tree directory, and optionally starts the scheduler.
29
+ *
30
+ * Call `instance.close()` when done to release all resources.
31
+ */
32
+ export async function initCQ(config) {
33
+ const { dataDir } = config;
34
+ // 1. Initialise knowledge tree directory
35
+ await initKnowledgeTree(dataDir);
36
+ // 2. Open SQLite database (metadata store)
37
+ const dbPath = join(dataDir, "cq.db");
38
+ const db = initMetadataDb(dbPath);
39
+ // 3. Initialise subsystem tables
40
+ initCuriosityQueue(db);
41
+ initBudgetTables();
42
+ initResourceTrackerWithDb(db);
43
+ initJobLog(db);
44
+ // 4. Apply optional configuration
45
+ if (config.confidence) {
46
+ setConfidenceConfig(config.confidence);
47
+ }
48
+ if (config.budget) {
49
+ setBudgetConfig(config.budget);
50
+ }
51
+ // 5. Set up providers
52
+ const searchProvider = config.providers?.search ?? createSearchProvider();
53
+ const modelProvider = config.providers?.model ?? createModelProvider();
54
+ // 6. Create token tracker (default 128k budget)
55
+ const tokenTracker = new TokenTracker(128_000);
56
+ // 7. Optionally start scheduler
57
+ if (config.scheduler) {
58
+ startScheduler({
59
+ cron: config.scheduler.cron,
60
+ orchestratorOptions: {
61
+ db,
62
+ dataDir,
63
+ searchProvider,
64
+ modelProvider,
65
+ },
66
+ onComplete: config.scheduler.onComplete,
67
+ onError: config.scheduler.onError,
68
+ });
69
+ }
70
+ // 8. Build the CQInstance
71
+ const instance = {
72
+ knowledge: {
73
+ initKnowledgeTree,
74
+ writeEntry,
75
+ readEntry,
76
+ listEntries,
77
+ listCategories,
78
+ removeEntry,
79
+ createCategory,
80
+ generateIndex,
81
+ generateIndexRecursive,
82
+ },
83
+ metadata: {
84
+ indexEntry,
85
+ removeFromIndex,
86
+ getMetadata,
87
+ getStaleEntries,
88
+ search,
89
+ rebuildIndex,
90
+ },
91
+ confidence: {
92
+ setConfidenceConfig,
93
+ getConfidenceConfig,
94
+ getConfidence,
95
+ recordVerification,
96
+ recordContradiction,
97
+ getRefreshCandidates,
98
+ },
99
+ curiosity: {
100
+ addCuriosity,
101
+ fetchPending,
102
+ getItem,
103
+ markInProgress,
104
+ markCompleted,
105
+ markFailed,
106
+ dismiss,
107
+ countByStatus,
108
+ },
109
+ pipeline: {
110
+ runPipeline,
111
+ },
112
+ vetter: {
113
+ vetResource,
114
+ trackResourceUsage,
115
+ isOverRelied,
116
+ getDomainUsage,
117
+ getUnderexploredDomains,
118
+ getResourceUsage,
119
+ },
120
+ budget: {
121
+ setBudgetConfig,
122
+ getBudgetConfig,
123
+ charge,
124
+ checkBudget,
125
+ getDailyBudgetStatus,
126
+ getTotalBudgetStatus,
127
+ },
128
+ tokenTracker,
129
+ orchestrator: {
130
+ runOrchestrator,
131
+ getRecentRuns,
132
+ },
133
+ scheduler: {
134
+ startScheduler,
135
+ stopScheduler,
136
+ isSchedulerRunning,
137
+ },
138
+ db,
139
+ dataDir,
140
+ searchProvider,
141
+ modelProvider,
142
+ close() {
143
+ // Stop scheduler if running
144
+ if (isSchedulerRunning()) {
145
+ stopScheduler();
146
+ }
147
+ // Close the SQLite database
148
+ closeDb();
149
+ },
150
+ };
151
+ return instance;
152
+ }
153
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=knowledge-tree.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-tree.test.d.ts","sourceRoot":"","sources":["../../../src/knowledge-tree/__tests__/knowledge-tree.test.ts"],"names":[],"mappings":""}