@voidwire/lore 0.5.5 → 0.6.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/cli.ts CHANGED
@@ -35,6 +35,7 @@ import {
35
35
  captureKnowledge,
36
36
  captureNote,
37
37
  captureTeaching,
38
+ captureObservation,
38
39
  semanticSearch,
39
40
  formatBriefSearch,
40
41
  hasEmbeddings,
@@ -48,6 +49,9 @@ import {
48
49
  type NoteInput,
49
50
  type TeachingInput,
50
51
  type KnowledgeCaptureType,
52
+ type ObservationInput,
53
+ type ObservationSubtype,
54
+ type ObservationConfidence,
51
55
  } from "./index";
52
56
 
53
57
  // ============================================================================
@@ -521,14 +525,14 @@ Examples:
521
525
  function handleCaptureTask(args: string[]): void {
522
526
  const parsed = parseArgs(args);
523
527
 
524
- const required = ["project", "name", "problem", "solution"];
528
+ const required = ["topic", "name", "problem", "solution"];
525
529
  const missing = required.filter((f) => !parsed.has(f));
526
530
  if (missing.length > 0) {
527
531
  fail(`Missing required fields: ${missing.join(", ")}`);
528
532
  }
529
533
 
530
534
  const input: TaskInput = {
531
- project: parsed.get("project")!,
535
+ topic: parsed.get("topic")!,
532
536
  name: parsed.get("name")!,
533
537
  problem: parsed.get("problem")!,
534
538
  solution: parsed.get("solution")!,
@@ -536,7 +540,7 @@ function handleCaptureTask(args: string[]): void {
536
540
  discoveries: parseList(parsed.get("discoveries")),
537
541
  deviations: parsed.get("deviations"),
538
542
  pattern: parsed.get("pattern"),
539
- keywords: parseList(parsed.get("keywords")),
543
+ tags: parseList(parsed.get("tags")),
540
544
  tech: parseList(parsed.get("tech")),
541
545
  difficulty: parsed.get("difficulty"),
542
546
  };
@@ -556,16 +560,16 @@ function handleCaptureTask(args: string[]): void {
556
560
  function handleCaptureKnowledge(args: string[]): void {
557
561
  const parsed = parseArgs(args);
558
562
 
559
- const required = ["context", "text", "type"];
563
+ const required = ["topic", "text", "subtype"];
560
564
  const missing = required.filter((f) => !parsed.has(f));
561
565
  if (missing.length > 0) {
562
566
  fail(`Missing required fields: ${missing.join(", ")}`);
563
567
  }
564
568
 
565
569
  const input: KnowledgeInput = {
566
- context: parsed.get("context")!,
567
- text: parsed.get("text")!,
568
- type: parsed.get("type")! as KnowledgeCaptureType,
570
+ topic: parsed.get("topic")!,
571
+ content: parsed.get("text")!,
572
+ subtype: parsed.get("subtype")! as KnowledgeCaptureType,
569
573
  };
570
574
 
571
575
  const result = captureKnowledge(input);
@@ -588,9 +592,9 @@ function handleCaptureNote(args: string[]): void {
588
592
  }
589
593
 
590
594
  const input: NoteInput = {
591
- text: parsed.get("text")!,
595
+ content: parsed.get("text")!,
592
596
  tags: parseList(parsed.get("tags")),
593
- context: parsed.get("context"),
597
+ topic: parsed.get("topic"),
594
598
  };
595
599
 
596
600
  const result = captureNote(input);
@@ -608,16 +612,16 @@ function handleCaptureNote(args: string[]): void {
608
612
  function handleCaptureTeaching(args: string[]): void {
609
613
  const parsed = parseArgs(args);
610
614
 
611
- const required = ["domain", "confidence", "text"];
615
+ const required = ["topic", "confidence", "text"];
612
616
  const missing = required.filter((f) => !parsed.has(f));
613
617
  if (missing.length > 0) {
614
618
  fail(`Missing required fields: ${missing.join(", ")}`);
615
619
  }
616
620
 
617
621
  const input: TeachingInput = {
618
- domain: parsed.get("domain")!,
622
+ topic: parsed.get("topic")!,
619
623
  confidence: parsed.get("confidence")!,
620
- text: parsed.get("text")!,
624
+ content: parsed.get("text")!,
621
625
  source: parsed.get("source"),
622
626
  };
623
627
 
@@ -633,13 +637,44 @@ function handleCaptureTeaching(args: string[]): void {
633
637
  }
634
638
  }
635
639
 
640
+ function handleCaptureObservation(args: string[]): void {
641
+ const parsed = parseArgs(args);
642
+
643
+ const required = ["topic", "subtype", "confidence", "text"];
644
+ const missing = required.filter((f) => !parsed.has(f));
645
+ if (missing.length > 0) {
646
+ fail(`Missing required fields: ${missing.join(", ")}`);
647
+ }
648
+
649
+ const input: ObservationInput = {
650
+ topic: parsed.get("topic")!,
651
+ content: parsed.get("text")!,
652
+ subtype: parsed.get("subtype")! as ObservationSubtype,
653
+ confidence: parsed.get("confidence")! as ObservationConfidence,
654
+ source: parsed.get("source"),
655
+ };
656
+
657
+ const result = captureObservation(input);
658
+ output(result);
659
+
660
+ if (result.success) {
661
+ console.error("✅ Observation logged");
662
+ process.exit(0);
663
+ } else {
664
+ console.error(`❌ ${result.error}`);
665
+ process.exit(2);
666
+ }
667
+ }
668
+
636
669
  function handleCapture(args: string[]): void {
637
670
  if (hasFlag(args, "help")) {
638
671
  showCaptureHelp();
639
672
  }
640
673
 
641
674
  if (args.length === 0) {
642
- fail("Missing capture type. Use: task, knowledge, or note");
675
+ fail(
676
+ "Missing capture type. Use: task, knowledge, note, teaching, or observation",
677
+ );
643
678
  }
644
679
 
645
680
  const captureType = args[0];
@@ -658,9 +693,12 @@ function handleCapture(args: string[]): void {
658
693
  case "teaching":
659
694
  handleCaptureTeaching(captureArgs);
660
695
  break;
696
+ case "observation":
697
+ handleCaptureObservation(captureArgs);
698
+ break;
661
699
  default:
662
700
  fail(
663
- `Unknown capture type: ${captureType}. Use: task, knowledge, note, or teaching`,
701
+ `Unknown capture type: ${captureType}. Use: task, knowledge, note, teaching, or observation`,
664
702
  );
665
703
  }
666
704
  }
@@ -708,34 +746,42 @@ List Options:
708
746
 
709
747
  Capture Types:
710
748
  task Log task completion
711
- --project Project name (required)
749
+ --topic Project/topic name (required)
712
750
  --name Task name (required)
713
751
  --problem Problem solved (required)
714
752
  --solution Solution pattern (required)
715
753
 
716
754
  knowledge Log insight
717
- --context Context/project name (required)
755
+ --topic Topic/context name (required)
718
756
  --text Insight text (required)
719
- --type Type: decision, learning, gotcha, preference (required)
757
+ --subtype Type: decision, learning, gotcha, preference (required)
720
758
 
721
759
  note Quick note
722
760
  --text Note content (required)
723
761
  --tags Comma-separated tags
724
- --context Optional context
762
+ --topic Optional topic/context
725
763
 
726
764
  teaching Log teaching/learning
727
- --domain Subject area (required)
765
+ --topic Subject area (required)
728
766
  --confidence Certainty level (required)
729
767
  --text Teaching content (required)
730
768
  --source Optional source identifier
731
769
 
770
+ observation Log model observation
771
+ --topic Observation topic (required)
772
+ --subtype Type: term, style, pattern, preference, context (required)
773
+ --confidence Level: inferred, stated, verified (required)
774
+ --text Observation content (required)
775
+ --source Optional source identifier
776
+
732
777
  Examples:
733
778
  lore search "authentication"
734
779
  lore search blogs "typescript patterns"
735
780
  lore sources
736
781
  lore list development
737
782
  lore list commits --limit 10 --format human
738
- lore capture knowledge --context=lore --text="Unified CLI works" --type=learning
783
+ lore capture knowledge --topic=lore --text="Unified CLI works" --subtype=learning
784
+ lore capture observation --topic=vocabulary --subtype=term --confidence=stated --text="Uses unified schema"
739
785
  `);
740
786
  process.exit(0);
741
787
  }
@@ -947,12 +993,13 @@ Usage:
947
993
  lore capture knowledge Log insight/learning
948
994
  lore capture note Quick note
949
995
  lore capture teaching Log teaching moment
996
+ lore capture observation Log model observation
950
997
 
951
998
  Capture Types:
952
999
 
953
1000
  task - Log completed development task
954
1001
  Required:
955
- --project Project name
1002
+ --topic Project/topic name
956
1003
  --name Task name
957
1004
  --problem Problem solved
958
1005
  --solution Solution pattern
@@ -961,36 +1008,46 @@ Capture Types:
961
1008
  --discoveries Comma-separated discoveries
962
1009
  --deviations Deviation from plan
963
1010
  --pattern Pattern name
964
- --keywords Comma-separated keywords
1011
+ --tags Comma-separated tags
965
1012
  --tech Comma-separated technologies
966
1013
  --difficulty Difficulty level
967
1014
 
968
1015
  knowledge - Log insight or learning
969
1016
  Required:
970
- --context Context/project name
1017
+ --topic Topic/context name
971
1018
  --text Insight text
972
- --type Type: decision, learning, gotcha, preference
1019
+ --subtype Type: decision, learning, gotcha, preference, project, conversation, knowledge
973
1020
 
974
1021
  note - Quick note capture
975
1022
  Required:
976
1023
  --text Note content
977
1024
  Optional:
978
1025
  --tags Comma-separated tags
979
- --context Optional context
1026
+ --topic Optional topic/context
980
1027
 
981
1028
  teaching - Log teaching or learning moment
982
1029
  Required:
983
- --domain Subject area (e.g., typescript, architecture)
1030
+ --topic Subject area (e.g., typescript, architecture)
984
1031
  --confidence Certainty level (e.g., high, medium, low)
985
1032
  --text Teaching content
986
1033
  Optional:
987
1034
  --source Source identifier (defaults to "manual")
988
1035
 
1036
+ observation - Log model observation about user patterns
1037
+ Required:
1038
+ --topic Observation topic
1039
+ --subtype Type: term, style, pattern, preference, context
1040
+ --confidence Level: inferred, stated, verified
1041
+ --text Observation content
1042
+ Optional:
1043
+ --source Source identifier (defaults to "auto")
1044
+
989
1045
  Examples:
990
- lore capture task --project=lore --name="Add help" --problem="No subcommand help" --solution="Added per-command help functions"
991
- lore capture knowledge --context=lore --text="Unified CLI works" --type=learning
1046
+ lore capture task --topic=lore --name="Add help" --problem="No subcommand help" --solution="Added per-command help functions"
1047
+ lore capture knowledge --topic=lore --text="Unified CLI works" --subtype=learning
992
1048
  lore capture note --text="Remember to update docs" --tags=docs,todo
993
- lore capture teaching --domain=patterns --confidence=high --text="Prefer composition over inheritance"
1049
+ lore capture teaching --topic=patterns --confidence=high --text="Prefer composition over inheritance"
1050
+ lore capture observation --topic=vocabulary --subtype=term --confidence=stated --text="Uses 'unified schema'"
994
1051
  `);
995
1052
  process.exit(0);
996
1053
  }
package/index.ts CHANGED
@@ -68,6 +68,7 @@ export {
68
68
  captureTeaching,
69
69
  captureInsight,
70
70
  captureLearning,
71
+ captureObservation,
71
72
  type CaptureResult,
72
73
  type KnowledgeInput,
73
74
  type KnowledgeCaptureType,
@@ -77,6 +78,9 @@ export {
77
78
  type InsightInput,
78
79
  type InsightType,
79
80
  type LearningInput,
81
+ type ObservationInput,
82
+ type ObservationSubtype,
83
+ type ObservationConfidence,
80
84
  type CaptureEvent,
81
85
  } from "./lib/capture";
82
86
 
package/lib/capture.ts CHANGED
@@ -25,13 +25,13 @@ export type KnowledgeCaptureType =
25
25
  | "knowledge";
26
26
 
27
27
  export interface KnowledgeInput {
28
- context: string;
29
- text: string;
30
- type: KnowledgeCaptureType;
28
+ topic: string;
29
+ content: string;
30
+ subtype: KnowledgeCaptureType;
31
31
  }
32
32
 
33
33
  export interface TaskInput {
34
- project: string;
34
+ topic: string;
35
35
  name: string;
36
36
  problem: string;
37
37
  solution: string;
@@ -39,21 +39,21 @@ export interface TaskInput {
39
39
  discoveries?: string[];
40
40
  deviations?: string;
41
41
  pattern?: string;
42
- keywords?: string[];
42
+ tags?: string[];
43
43
  tech?: string[];
44
44
  difficulty?: string;
45
45
  }
46
46
 
47
47
  export interface NoteInput {
48
- text: string;
48
+ content: string;
49
49
  tags?: string[];
50
- context?: string;
50
+ topic?: string;
51
51
  }
52
52
 
53
53
  export interface TeachingInput {
54
- domain: string;
54
+ topic: string;
55
55
  confidence: string;
56
- text: string;
56
+ content: string;
57
57
  source?: string;
58
58
  }
59
59
 
@@ -67,35 +67,52 @@ export type InsightType =
67
67
 
68
68
  export interface InsightInput {
69
69
  session_id: string;
70
- project: string;
71
- insight_type: InsightType;
72
- text: string;
70
+ topic: string;
71
+ subtype: InsightType;
72
+ content: string;
73
73
  source: "auto";
74
74
  }
75
75
 
76
76
  export interface LearningInput {
77
77
  topic: string; // "spanish", "guitar", "kubernetes" - the learning topic
78
78
  persona: string; // "marcus", "elena", etc.
79
- progress: string; // "Covered verb conjugations, struggles with subjunctive"
79
+ content: string; // "Covered verb conjugations, struggles with subjunctive"
80
80
  session_summary?: string; // Longer form session notes
81
81
  }
82
82
 
83
+ export type ObservationSubtype =
84
+ | "term"
85
+ | "style"
86
+ | "pattern"
87
+ | "preference"
88
+ | "context";
89
+
90
+ export type ObservationConfidence = "inferred" | "stated" | "verified";
91
+
92
+ export interface ObservationInput {
93
+ topic: string;
94
+ content: string;
95
+ subtype: ObservationSubtype;
96
+ confidence: ObservationConfidence;
97
+ source?: string;
98
+ }
99
+
83
100
  interface TaskEvent {
84
101
  event: "captured";
85
102
  type: "task";
86
103
  timestamp: string;
87
104
  data: {
88
- project: string;
89
- task_name: string;
90
- problem_solved: string;
91
- solution_pattern: string;
92
- code_snippet?: string;
105
+ topic: string;
106
+ name: string;
107
+ problem: string;
108
+ solution: string;
109
+ code?: string;
93
110
  discoveries?: string[];
94
111
  deviations?: string;
95
- reusable_pattern?: string;
96
- keywords?: string[];
97
- tech_used?: string[];
98
- difficulty_notes?: string;
112
+ pattern?: string;
113
+ tags?: string[];
114
+ tech?: string[];
115
+ difficulty?: string;
99
116
  };
100
117
  }
101
118
 
@@ -104,9 +121,9 @@ interface KnowledgeEvent {
104
121
  type: "knowledge";
105
122
  timestamp: string;
106
123
  data: {
107
- context: string;
108
- capture: string;
109
- type: KnowledgeCaptureType;
124
+ topic: string;
125
+ content: string;
126
+ subtype: KnowledgeCaptureType;
110
127
  };
111
128
  }
112
129
 
@@ -117,7 +134,7 @@ interface NoteEvent {
117
134
  data: {
118
135
  content: string;
119
136
  tags?: string[];
120
- context?: string;
137
+ topic?: string;
121
138
  };
122
139
  }
123
140
 
@@ -126,9 +143,9 @@ interface TeachingEvent {
126
143
  type: "teaching";
127
144
  timestamp: string;
128
145
  data: {
129
- domain: string;
146
+ topic: string;
130
147
  confidence: string;
131
- text: string;
148
+ content: string;
132
149
  source: string;
133
150
  };
134
151
  }
@@ -139,9 +156,9 @@ interface InsightEvent {
139
156
  timestamp: string;
140
157
  data: {
141
158
  session_id: string;
142
- project: string;
143
- insight_type: InsightType;
144
- text: string;
159
+ topic: string;
160
+ subtype: InsightType;
161
+ content: string;
145
162
  source: "auto";
146
163
  };
147
164
  }
@@ -153,18 +170,32 @@ interface LearningEvent {
153
170
  data: {
154
171
  topic: string; // Learning topic (spanish, guitar, etc.)
155
172
  persona: string;
156
- progress: string;
173
+ content: string;
157
174
  session_summary?: string;
158
175
  };
159
176
  }
160
177
 
178
+ interface ObservationEvent {
179
+ event: "captured";
180
+ type: "observation";
181
+ timestamp: string;
182
+ data: {
183
+ topic: string;
184
+ content: string;
185
+ subtype: ObservationSubtype;
186
+ confidence: ObservationConfidence;
187
+ source: string;
188
+ };
189
+ }
190
+
161
191
  type CaptureEvent =
162
192
  | TaskEvent
163
193
  | KnowledgeEvent
164
194
  | NoteEvent
165
195
  | TeachingEvent
166
196
  | InsightEvent
167
- | LearningEvent;
197
+ | LearningEvent
198
+ | ObservationEvent;
168
199
 
169
200
  function getLogPath(): string {
170
201
  const dataHome =
@@ -217,10 +248,10 @@ const VALID_KNOWLEDGE_TYPES: KnowledgeCaptureType[] = [
217
248
  * Capture a knowledge insight
218
249
  */
219
250
  export function captureKnowledge(input: KnowledgeInput): CaptureResult {
220
- if (!VALID_KNOWLEDGE_TYPES.includes(input.type)) {
251
+ if (!VALID_KNOWLEDGE_TYPES.includes(input.subtype)) {
221
252
  return {
222
253
  success: false,
223
- error: `Invalid type: ${input.type}. Must be one of: ${VALID_KNOWLEDGE_TYPES.join(", ")}`,
254
+ error: `Invalid subtype: ${input.subtype}. Must be one of: ${VALID_KNOWLEDGE_TYPES.join(", ")}`,
224
255
  };
225
256
  }
226
257
 
@@ -229,9 +260,9 @@ export function captureKnowledge(input: KnowledgeInput): CaptureResult {
229
260
  type: "knowledge",
230
261
  timestamp: "",
231
262
  data: {
232
- context: input.context,
233
- capture: input.text,
234
- type: input.type,
263
+ topic: input.topic,
264
+ content: input.content,
265
+ subtype: input.subtype,
235
266
  },
236
267
  };
237
268
 
@@ -247,17 +278,17 @@ export function captureTask(input: TaskInput): CaptureResult {
247
278
  type: "task",
248
279
  timestamp: "",
249
280
  data: {
250
- project: input.project,
251
- task_name: input.name,
252
- problem_solved: input.problem,
253
- solution_pattern: input.solution,
254
- code_snippet: input.code,
281
+ topic: input.topic,
282
+ name: input.name,
283
+ problem: input.problem,
284
+ solution: input.solution,
285
+ code: input.code,
255
286
  discoveries: input.discoveries,
256
287
  deviations: input.deviations,
257
- reusable_pattern: input.pattern,
258
- keywords: input.keywords,
259
- tech_used: input.tech,
260
- difficulty_notes: input.difficulty,
288
+ pattern: input.pattern,
289
+ tags: input.tags,
290
+ tech: input.tech,
291
+ difficulty: input.difficulty,
261
292
  },
262
293
  };
263
294
 
@@ -273,9 +304,9 @@ export function captureNote(input: NoteInput): CaptureResult {
273
304
  type: "note",
274
305
  timestamp: "",
275
306
  data: {
276
- content: input.text,
307
+ content: input.content,
277
308
  tags: input.tags,
278
- context: input.context,
309
+ topic: input.topic,
279
310
  },
280
311
  };
281
312
 
@@ -291,9 +322,9 @@ export function captureTeaching(input: TeachingInput): CaptureResult {
291
322
  type: "teaching",
292
323
  timestamp: "",
293
324
  data: {
294
- domain: input.domain,
325
+ topic: input.topic,
295
326
  confidence: input.confidence,
296
- text: input.text,
327
+ content: input.content,
297
328
  source: input.source || "manual",
298
329
  },
299
330
  };
@@ -314,10 +345,10 @@ const VALID_INSIGHT_TYPES: InsightType[] = [
314
345
  * Capture an auto-extracted insight from llm-summarize
315
346
  */
316
347
  export function captureInsight(input: InsightInput): CaptureResult {
317
- if (!VALID_INSIGHT_TYPES.includes(input.insight_type)) {
348
+ if (!VALID_INSIGHT_TYPES.includes(input.subtype)) {
318
349
  return {
319
350
  success: false,
320
- error: `Invalid insight_type: ${input.insight_type}. Must be one of: ${VALID_INSIGHT_TYPES.join(", ")}`,
351
+ error: `Invalid subtype: ${input.subtype}. Must be one of: ${VALID_INSIGHT_TYPES.join(", ")}`,
321
352
  };
322
353
  }
323
354
 
@@ -327,9 +358,9 @@ export function captureInsight(input: InsightInput): CaptureResult {
327
358
  timestamp: "",
328
359
  data: {
329
360
  session_id: input.session_id,
330
- project: input.project,
331
- insight_type: input.insight_type,
332
- text: input.text,
361
+ topic: input.topic,
362
+ subtype: input.subtype,
363
+ content: input.content,
333
364
  source: input.source,
334
365
  },
335
366
  };
@@ -341,10 +372,10 @@ export function captureInsight(input: InsightInput): CaptureResult {
341
372
  * Capture a learning session progress
342
373
  */
343
374
  export function captureLearning(input: LearningInput): CaptureResult {
344
- if (!input.topic || !input.persona || !input.progress) {
375
+ if (!input.topic || !input.persona || !input.content) {
345
376
  return {
346
377
  success: false,
347
- error: "Missing required fields: topic, persona, progress",
378
+ error: "Missing required fields: topic, persona, content",
348
379
  };
349
380
  }
350
381
 
@@ -355,7 +386,7 @@ export function captureLearning(input: LearningInput): CaptureResult {
355
386
  data: {
356
387
  topic: input.topic,
357
388
  persona: input.persona,
358
- progress: input.progress,
389
+ content: input.content,
359
390
  session_summary: input.session_summary,
360
391
  },
361
392
  };
@@ -363,4 +394,52 @@ export function captureLearning(input: LearningInput): CaptureResult {
363
394
  return writeEvent(event);
364
395
  }
365
396
 
397
+ const VALID_OBSERVATION_SUBTYPES: ObservationSubtype[] = [
398
+ "term",
399
+ "style",
400
+ "pattern",
401
+ "preference",
402
+ "context",
403
+ ];
404
+
405
+ const VALID_OBSERVATION_CONFIDENCE: ObservationConfidence[] = [
406
+ "inferred",
407
+ "stated",
408
+ "verified",
409
+ ];
410
+
411
+ /**
412
+ * Capture a model observation about user patterns
413
+ */
414
+ export function captureObservation(input: ObservationInput): CaptureResult {
415
+ if (!VALID_OBSERVATION_SUBTYPES.includes(input.subtype)) {
416
+ return {
417
+ success: false,
418
+ error: `Invalid subtype: ${input.subtype}. Must be one of: ${VALID_OBSERVATION_SUBTYPES.join(", ")}`,
419
+ };
420
+ }
421
+
422
+ if (!VALID_OBSERVATION_CONFIDENCE.includes(input.confidence)) {
423
+ return {
424
+ success: false,
425
+ error: `Invalid confidence: ${input.confidence}. Must be one of: ${VALID_OBSERVATION_CONFIDENCE.join(", ")}`,
426
+ };
427
+ }
428
+
429
+ const event: ObservationEvent = {
430
+ event: "captured",
431
+ type: "observation",
432
+ timestamp: "",
433
+ data: {
434
+ topic: input.topic,
435
+ content: input.content,
436
+ subtype: input.subtype,
437
+ confidence: input.confidence,
438
+ source: input.source || "auto",
439
+ },
440
+ };
441
+
442
+ return writeEvent(event);
443
+ }
444
+
366
445
  export type { CaptureEvent };
package/lib/list.ts CHANGED
@@ -29,7 +29,8 @@ export type Source =
29
29
  | "teachings"
30
30
  | "sessions"
31
31
  | "insights"
32
- | "learnings";
32
+ | "learnings"
33
+ | "observations";
33
34
 
34
35
  export const SOURCES: Source[] = [
35
36
  "development",
@@ -51,6 +52,7 @@ export const SOURCES: Source[] = [
51
52
  "sessions",
52
53
  "insights",
53
54
  "learnings",
55
+ "observations",
54
56
  ];
55
57
 
56
58
  // Sources that query the 'personal' source with type filter
@@ -73,6 +75,7 @@ const PROJECT_FIELD: Record<string, string> = {
73
75
  captures: "topic",
74
76
  teachings: "topic",
75
77
  learnings: "topic",
78
+ observations: "topic",
76
79
  };
77
80
 
78
81
  export interface ListOptions {
package/lib/projects.ts CHANGED
@@ -18,6 +18,7 @@ const PROJECT_FIELD: Record<string, string> = {
18
18
  captures: "topic",
19
19
  teachings: "topic",
20
20
  learnings: "topic",
21
+ observations: "topic",
21
22
  };
22
23
 
23
24
  function getDatabasePath(): string {
package/lib/semantic.ts CHANGED
@@ -47,6 +47,7 @@ const PROJECT_FIELD: Record<string, string> = {
47
47
  captures: "topic",
48
48
  teachings: "topic",
49
49
  learnings: "topic",
50
+ observations: "topic",
50
51
  };
51
52
 
52
53
  const MODEL_NAME = "nomic-ai/nomic-embed-text-v1.5";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voidwire/lore",
3
- "version": "0.5.5",
3
+ "version": "0.6.0",
4
4
  "description": "Unified knowledge CLI - Search, list, and capture your indexed knowledge",
5
5
  "type": "module",
6
6
  "main": "./index.ts",