gnosys 5.4.3 → 5.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.
Files changed (70) hide show
  1. package/README.md +52 -8
  2. package/dist/cli.js +246 -27
  3. package/dist/cli.js.map +1 -1
  4. package/dist/lib/audioExtract.d.ts +1 -1
  5. package/dist/lib/audioExtract.js +6 -6
  6. package/dist/lib/audioExtract.js.map +1 -1
  7. package/dist/lib/chat/choose.d.ts +75 -0
  8. package/dist/lib/chat/choose.d.ts.map +1 -0
  9. package/dist/lib/chat/choose.js +146 -0
  10. package/dist/lib/chat/choose.js.map +1 -0
  11. package/dist/lib/chat/commands.d.ts +96 -0
  12. package/dist/lib/chat/commands.d.ts.map +1 -0
  13. package/dist/lib/chat/commands.js +367 -0
  14. package/dist/lib/chat/commands.js.map +1 -0
  15. package/dist/lib/chat/focus.d.ts +70 -0
  16. package/dist/lib/chat/focus.d.ts.map +1 -0
  17. package/dist/lib/chat/focus.js +120 -0
  18. package/dist/lib/chat/focus.js.map +1 -0
  19. package/dist/lib/chat/index.d.ts +32 -0
  20. package/dist/lib/chat/index.d.ts.map +1 -0
  21. package/dist/lib/chat/index.js +151 -0
  22. package/dist/lib/chat/index.js.map +1 -0
  23. package/dist/lib/chat/intent.d.ts +100 -0
  24. package/dist/lib/chat/intent.d.ts.map +1 -0
  25. package/dist/lib/chat/intent.js +192 -0
  26. package/dist/lib/chat/intent.js.map +1 -0
  27. package/dist/lib/chat/llmTurn.d.ts +37 -0
  28. package/dist/lib/chat/llmTurn.d.ts.map +1 -0
  29. package/dist/lib/chat/llmTurn.js +61 -0
  30. package/dist/lib/chat/llmTurn.js.map +1 -0
  31. package/dist/lib/chat/recall.d.ts +58 -0
  32. package/dist/lib/chat/recall.d.ts.map +1 -0
  33. package/dist/lib/chat/recall.js +109 -0
  34. package/dist/lib/chat/recall.js.map +1 -0
  35. package/dist/lib/chat/render.d.ts +30 -0
  36. package/dist/lib/chat/render.d.ts.map +1 -0
  37. package/dist/lib/chat/render.js +737 -0
  38. package/dist/lib/chat/render.js.map +1 -0
  39. package/dist/lib/chat/session.d.ts +121 -0
  40. package/dist/lib/chat/session.d.ts.map +1 -0
  41. package/dist/lib/chat/session.js +148 -0
  42. package/dist/lib/chat/session.js.map +1 -0
  43. package/dist/lib/chat/types.d.ts +42 -0
  44. package/dist/lib/chat/types.d.ts.map +1 -0
  45. package/dist/lib/chat/types.js +6 -0
  46. package/dist/lib/chat/types.js.map +1 -0
  47. package/dist/lib/chat/write.d.ts +66 -0
  48. package/dist/lib/chat/write.d.ts.map +1 -0
  49. package/dist/lib/chat/write.js +203 -0
  50. package/dist/lib/chat/write.js.map +1 -0
  51. package/dist/lib/config.d.ts.map +1 -1
  52. package/dist/lib/config.js +6 -2
  53. package/dist/lib/config.js.map +1 -1
  54. package/dist/lib/db.d.ts +3 -1
  55. package/dist/lib/db.d.ts.map +1 -1
  56. package/dist/lib/db.js +18 -2
  57. package/dist/lib/db.js.map +1 -1
  58. package/dist/lib/embeddings.d.ts +1 -1
  59. package/dist/lib/embeddings.d.ts.map +1 -1
  60. package/dist/lib/embeddings.js +9 -4
  61. package/dist/lib/embeddings.js.map +1 -1
  62. package/dist/lib/exportProject.d.ts +51 -0
  63. package/dist/lib/exportProject.d.ts.map +1 -0
  64. package/dist/lib/exportProject.js +72 -0
  65. package/dist/lib/exportProject.js.map +1 -0
  66. package/dist/lib/importProject.d.ts +35 -0
  67. package/dist/lib/importProject.d.ts.map +1 -0
  68. package/dist/lib/importProject.js +135 -0
  69. package/dist/lib/importProject.js.map +1 -0
  70. package/package.json +8 -2
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Chat-side memory recall.
3
+ *
4
+ * Wraps the existing federated search to produce a set of memories suitable
5
+ * for injection into the LLM system prompt. Always includes pinned memories
6
+ * regardless of search relevance.
7
+ */
8
+ import { federatedSearch } from "../federated.js";
9
+ const MAX_QUERY_LEN = 200;
10
+ /** Build a search query from the current user input + a few recent turns for context. */
11
+ export function buildRecallQuery(userInput, buffer) {
12
+ const tail = buffer
13
+ .filter((t) => t.role === "user" || t.role === "assistant")
14
+ .slice(-2)
15
+ .map((t) => t.text)
16
+ .join(" ");
17
+ const combined = `${userInput} ${tail}`.trim().slice(0, MAX_QUERY_LEN);
18
+ return combined;
19
+ }
20
+ /**
21
+ * Run recall for one chat turn. Returns pinned memories first (always),
22
+ * then top federated matches respecting scope and threshold.
23
+ */
24
+ export function runRecall(db, opts) {
25
+ const limit = opts.limit ?? 5;
26
+ const memories = [];
27
+ const seen = new Set();
28
+ // 1. Pinned memories — always included (ranked first)
29
+ for (const id of opts.pinnedIds) {
30
+ const mem = db.getMemory(id);
31
+ if (!mem)
32
+ continue;
33
+ seen.add(id);
34
+ memories.push({
35
+ id: mem.id,
36
+ title: mem.title,
37
+ content: mem.content,
38
+ category: mem.category,
39
+ scope: mem.scope,
40
+ confidence: mem.confidence,
41
+ pinned: true,
42
+ score: 0,
43
+ });
44
+ }
45
+ // 2. Federated search — but exclude pinned IDs and apply scope filter
46
+ const scopeFilter = opts.scope === "federated" ? undefined : [opts.scope];
47
+ const results = federatedSearch(db, opts.query, {
48
+ limit: Math.max(limit * 2, 20), // over-fetch so threshold can drop some
49
+ projectId: opts.projectId,
50
+ scopeFilter: scopeFilter,
51
+ });
52
+ let considered = results.length + opts.pinnedIds.length;
53
+ for (const r of results) {
54
+ if (memories.length - opts.pinnedIds.length >= limit)
55
+ break;
56
+ if (seen.has(r.id))
57
+ continue;
58
+ const mem = db.getMemory(r.id);
59
+ if (!mem)
60
+ continue;
61
+ if (mem.confidence < opts.threshold)
62
+ continue;
63
+ seen.add(r.id);
64
+ memories.push({
65
+ id: mem.id,
66
+ title: mem.title,
67
+ content: mem.content,
68
+ category: mem.category,
69
+ scope: mem.scope,
70
+ confidence: mem.confidence,
71
+ pinned: false,
72
+ score: r.score,
73
+ });
74
+ }
75
+ return {
76
+ memories,
77
+ query: opts.query,
78
+ considered,
79
+ };
80
+ }
81
+ /**
82
+ * Render recalled memories as a system-prompt block. Pinned memories are
83
+ * marked so the model knows the user has explicitly anchored them.
84
+ */
85
+ export function formatRecallForPrompt(memories) {
86
+ if (memories.length === 0)
87
+ return "";
88
+ const blocks = memories.map((m) => {
89
+ const pinTag = m.pinned ? ` pinned="true"` : "";
90
+ return `<memory id="${m.id}" category="${m.category}" confidence="${m.confidence}"${pinTag}>\n# ${m.title}\n${m.content}\n</memory>`;
91
+ });
92
+ return [
93
+ "RELEVANT MEMORY (you have persistent memory via Gnosys; cite ids when you use them):",
94
+ ...blocks,
95
+ ].join("\n\n");
96
+ }
97
+ /** Reinforce a memory: bump modified date so it's surfaced as recent. */
98
+ export function reinforceMemory(db, memoryId) {
99
+ const mem = db.getMemory(memoryId);
100
+ if (!mem)
101
+ return false;
102
+ db.updateMemory(memoryId, {
103
+ modified: new Date().toISOString(),
104
+ reinforcement_count: (mem.reinforcement_count ?? 0) + 1,
105
+ last_reinforced: new Date().toISOString(),
106
+ });
107
+ return true;
108
+ }
109
+ //# sourceMappingURL=recall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recall.js","sourceRoot":"","sources":["../../../src/lib/chat/recall.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Chat TUI — ink-based React components.
3
+ *
4
+ * Layout:
5
+ * ┌────────────────────────────────────────┐
6
+ * │ Header: project | provider/model | tokens │
7
+ * ├────────────────────────────────────────┤
8
+ * │ Conversation │
9
+ * │ user / assistant turns scroll │
10
+ * │ system messages in dim text │
11
+ * ├────────────────────────────────────────┤
12
+ * │ Status: idle | thinking… | error │
13
+ * ├────────────────────────────────────────┤
14
+ * │ > input prompt │
15
+ * └────────────────────────────────────────┘
16
+ */
17
+ import React from "react";
18
+ import { ChatHeaderInfo, Turn } from "./types.js";
19
+ import { GnosysConfig } from "../config.js";
20
+ export interface ChatAppProps {
21
+ initialHeader: ChatHeaderInfo;
22
+ initialBuffer: Turn[];
23
+ config: GnosysConfig;
24
+ /** Project ID for recall scoping (null when no project context). */
25
+ projectId: string | null;
26
+ /** Called on exit so the parent CLI process can clean up. */
27
+ onExit?: () => void;
28
+ }
29
+ export declare const ChatApp: React.FC<ChatAppProps>;
30
+ //# sourceMappingURL=render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/lib/chat/render.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAsC,MAAM,OAAO,CAAC;AAK3D,OAAO,EAAE,cAAc,EAAc,IAAI,EAAE,MAAM,YAAY,CAAC;AAyB9D,OAAO,EAAE,YAAY,EAAmB,MAAM,cAAc,CAAC;AAG7D,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,cAAc,CAAC;IAC9B,aAAa,EAAE,IAAI,EAAE,CAAC;IACtB,MAAM,EAAE,YAAY,CAAC;IACrB,oEAAoE;IACpE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CA2rB1C,CAAC"}