agent-recall-core 3.3.28 → 3.4.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 (97) hide show
  1. package/README.md +1014 -206
  2. package/dist/digest/store.d.ts.map +1 -1
  3. package/dist/digest/store.js +9 -2
  4. package/dist/digest/store.js.map +1 -1
  5. package/dist/helpers/normalize.d.ts.map +1 -1
  6. package/dist/helpers/normalize.js +2 -0
  7. package/dist/helpers/normalize.js.map +1 -1
  8. package/dist/index.d.ts +12 -0
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +15 -0
  11. package/dist/index.js.map +1 -1
  12. package/dist/palace/awareness.d.ts +7 -3
  13. package/dist/palace/awareness.d.ts.map +1 -1
  14. package/dist/palace/awareness.js +21 -11
  15. package/dist/palace/awareness.js.map +1 -1
  16. package/dist/palace/insights-index.d.ts.map +1 -1
  17. package/dist/palace/insights-index.js +31 -0
  18. package/dist/palace/insights-index.js.map +1 -1
  19. package/dist/palace/rooms.d.ts +1 -1
  20. package/dist/palace/rooms.d.ts.map +1 -1
  21. package/dist/palace/rooms.js +30 -5
  22. package/dist/palace/rooms.js.map +1 -1
  23. package/dist/supabase/client.d.ts +9 -0
  24. package/dist/supabase/client.d.ts.map +1 -0
  25. package/dist/supabase/client.js +22 -0
  26. package/dist/supabase/client.js.map +1 -0
  27. package/dist/supabase/config.d.ts +10 -0
  28. package/dist/supabase/config.d.ts.map +1 -0
  29. package/dist/supabase/config.js +45 -0
  30. package/dist/supabase/config.js.map +1 -0
  31. package/dist/supabase/embedding.d.ts +25 -0
  32. package/dist/supabase/embedding.d.ts.map +1 -0
  33. package/dist/supabase/embedding.js +76 -0
  34. package/dist/supabase/embedding.js.map +1 -0
  35. package/dist/supabase/recall-backend.d.ts +21 -0
  36. package/dist/supabase/recall-backend.d.ts.map +1 -0
  37. package/dist/supabase/recall-backend.js +128 -0
  38. package/dist/supabase/recall-backend.js.map +1 -0
  39. package/dist/supabase/sync.d.ts +22 -0
  40. package/dist/supabase/sync.d.ts.map +1 -0
  41. package/dist/supabase/sync.js +180 -0
  42. package/dist/supabase/sync.js.map +1 -0
  43. package/dist/tools-logic/awareness-update.d.ts +1 -0
  44. package/dist/tools-logic/awareness-update.d.ts.map +1 -1
  45. package/dist/tools-logic/awareness-update.js +1 -0
  46. package/dist/tools-logic/awareness-update.js.map +1 -1
  47. package/dist/tools-logic/bootstrap.d.ts +64 -0
  48. package/dist/tools-logic/bootstrap.d.ts.map +1 -0
  49. package/dist/tools-logic/bootstrap.js +752 -0
  50. package/dist/tools-logic/bootstrap.js.map +1 -0
  51. package/dist/tools-logic/insight-promotion.d.ts +19 -0
  52. package/dist/tools-logic/insight-promotion.d.ts.map +1 -0
  53. package/dist/tools-logic/insight-promotion.js +61 -0
  54. package/dist/tools-logic/insight-promotion.js.map +1 -0
  55. package/dist/tools-logic/journal-cold-start.d.ts +6 -0
  56. package/dist/tools-logic/journal-cold-start.d.ts.map +1 -1
  57. package/dist/tools-logic/journal-cold-start.js +38 -7
  58. package/dist/tools-logic/journal-cold-start.js.map +1 -1
  59. package/dist/tools-logic/journal-read.d.ts.map +1 -1
  60. package/dist/tools-logic/journal-read.js +24 -3
  61. package/dist/tools-logic/journal-read.js.map +1 -1
  62. package/dist/tools-logic/journal-search.d.ts +2 -0
  63. package/dist/tools-logic/journal-search.d.ts.map +1 -1
  64. package/dist/tools-logic/journal-search.js +7 -1
  65. package/dist/tools-logic/journal-search.js.map +1 -1
  66. package/dist/tools-logic/journal-write.d.ts +5 -0
  67. package/dist/tools-logic/journal-write.d.ts.map +1 -1
  68. package/dist/tools-logic/journal-write.js +47 -1
  69. package/dist/tools-logic/journal-write.js.map +1 -1
  70. package/dist/tools-logic/palace-lint.js +3 -3
  71. package/dist/tools-logic/palace-lint.js.map +1 -1
  72. package/dist/tools-logic/palace-search.d.ts.map +1 -1
  73. package/dist/tools-logic/palace-search.js +3 -0
  74. package/dist/tools-logic/palace-search.js.map +1 -1
  75. package/dist/tools-logic/palace-write.d.ts.map +1 -1
  76. package/dist/tools-logic/palace-write.js +19 -6
  77. package/dist/tools-logic/palace-write.js.map +1 -1
  78. package/dist/tools-logic/recall-backend.d.ts +29 -0
  79. package/dist/tools-logic/recall-backend.d.ts.map +1 -0
  80. package/dist/tools-logic/recall-backend.js +58 -0
  81. package/dist/tools-logic/recall-backend.js.map +1 -0
  82. package/dist/tools-logic/session-end.d.ts.map +1 -1
  83. package/dist/tools-logic/session-end.js +8 -1
  84. package/dist/tools-logic/session-end.js.map +1 -1
  85. package/dist/tools-logic/session-start.d.ts +1 -0
  86. package/dist/tools-logic/session-start.d.ts.map +1 -1
  87. package/dist/tools-logic/session-start.js +57 -3
  88. package/dist/tools-logic/session-start.js.map +1 -1
  89. package/dist/tools-logic/smart-recall.d.ts +10 -0
  90. package/dist/tools-logic/smart-recall.d.ts.map +1 -1
  91. package/dist/tools-logic/smart-recall.js +56 -32
  92. package/dist/tools-logic/smart-recall.js.map +1 -1
  93. package/dist/types.d.ts +1 -1
  94. package/dist/types.d.ts.map +1 -1
  95. package/dist/types.js +1 -1
  96. package/dist/types.js.map +1 -1
  97. package/package.json +6 -4
@@ -0,0 +1,180 @@
1
+ // packages/core/src/supabase/sync.ts
2
+ import * as crypto from "node:crypto";
3
+ import * as fs from "node:fs";
4
+ import * as os from "node:os";
5
+ import * as path from "node:path";
6
+ import { getSupabaseClient } from "./client.js";
7
+ import { readSupabaseConfig } from "./config.js";
8
+ import { createEmbeddingProvider } from "./embedding.js";
9
+ // ---------------------------------------------------------------------------
10
+ // Utilities (exported for testing)
11
+ // ---------------------------------------------------------------------------
12
+ export function contentHash(content) {
13
+ return crypto.createHash("sha256").update(content, "utf-8").digest("hex");
14
+ }
15
+ export function parseMemoryFile(content) {
16
+ let body = content;
17
+ let metadata = {};
18
+ // Extract YAML frontmatter
19
+ if (content.startsWith("---")) {
20
+ const endIdx = content.indexOf("---", 3);
21
+ if (endIdx > 0) {
22
+ const fm = content.slice(3, endIdx).trim();
23
+ body = content.slice(endIdx + 3).trim();
24
+ for (const line of fm.split("\n")) {
25
+ const match = line.match(/^(\w+):\s*(.+)/);
26
+ if (match) {
27
+ const val = match[2].trim();
28
+ if (val.startsWith("[")) {
29
+ try {
30
+ metadata[match[1]] = JSON.parse(val);
31
+ }
32
+ catch {
33
+ metadata[match[1]] = val;
34
+ }
35
+ }
36
+ else {
37
+ metadata[match[1]] = val;
38
+ }
39
+ }
40
+ }
41
+ }
42
+ }
43
+ const titleMatch = body.match(/^#\s+(.+)/m);
44
+ const title = titleMatch ? titleMatch[1].trim() : body.slice(0, 80).trim();
45
+ const tags = Array.isArray(metadata.tags) ? metadata.tags : [];
46
+ return { title, body, tags, metadata };
47
+ }
48
+ export function deriveSlug(filePath) {
49
+ const parts = filePath.split(path.sep);
50
+ const fileName = path.basename(filePath, ".md");
51
+ const journalIdx = parts.indexOf("journal");
52
+ const palaceIdx = parts.indexOf("rooms");
53
+ if (journalIdx >= 0)
54
+ return `journal--${fileName}`;
55
+ if (palaceIdx >= 0) {
56
+ const room = parts[palaceIdx + 1] ?? "unknown";
57
+ return `palace--${room}--${fileName}`;
58
+ }
59
+ return `other--${fileName}`;
60
+ }
61
+ // ---------------------------------------------------------------------------
62
+ // Error logging
63
+ // ---------------------------------------------------------------------------
64
+ export function logSyncError(message) {
65
+ const logPath = path.join(os.homedir(), ".agent-recall", "sync-errors.log");
66
+ const timestamp = new Date().toISOString();
67
+ const line = `${timestamp} ${message}\n`;
68
+ fs.mkdirSync(path.dirname(logPath), { recursive: true });
69
+ fs.appendFileSync(logPath, line, "utf-8");
70
+ // Cap at 500 lines
71
+ const content = fs.readFileSync(logPath, "utf-8");
72
+ const lines = content.split("\n").filter(Boolean);
73
+ if (lines.length > 500) {
74
+ const trimmed = lines.slice(-500).join("\n") + "\n";
75
+ const tmpPath = logPath + ".tmp";
76
+ fs.writeFileSync(tmpPath, trimmed, "utf-8");
77
+ fs.renameSync(tmpPath, logPath);
78
+ }
79
+ }
80
+ // ---------------------------------------------------------------------------
81
+ // Sync (fire-and-forget)
82
+ // ---------------------------------------------------------------------------
83
+ let _embeddingProvider = null;
84
+ function getEmbeddingProvider() {
85
+ if (_embeddingProvider)
86
+ return _embeddingProvider;
87
+ const config = readSupabaseConfig();
88
+ if (!config?.embedding_api_key)
89
+ return null;
90
+ _embeddingProvider = createEmbeddingProvider(config.embedding_provider, config.embedding_api_key);
91
+ return _embeddingProvider;
92
+ }
93
+ export function syncToSupabase(filePath, content, project, store, room) {
94
+ setImmediate(() => {
95
+ void doSync(filePath, content, project, store, room);
96
+ });
97
+ }
98
+ async function doSync(filePath, content, project, store, room) {
99
+ try {
100
+ const client = getSupabaseClient();
101
+ if (!client)
102
+ return;
103
+ const hash = contentHash(content);
104
+ const { data: existing } = await client
105
+ .from("ar_sync_state")
106
+ .select("file_hash")
107
+ .eq("file_path", filePath)
108
+ .single();
109
+ if (existing?.file_hash === hash)
110
+ return;
111
+ const parsed = parseMemoryFile(content);
112
+ const slug = deriveSlug(filePath);
113
+ const { data: entry, error: upsertErr } = await client
114
+ .from("ar_entries")
115
+ .upsert({
116
+ project,
117
+ store,
118
+ room: room ?? null,
119
+ slug,
120
+ title: parsed.title,
121
+ body: parsed.body,
122
+ tags: parsed.tags,
123
+ metadata: parsed.metadata,
124
+ file_path: filePath,
125
+ file_hash: hash,
126
+ updated_at: new Date().toISOString(),
127
+ }, { onConflict: "project,store,slug" })
128
+ .select("id")
129
+ .single();
130
+ if (upsertErr || !entry)
131
+ return;
132
+ const provider = getEmbeddingProvider();
133
+ if (provider) {
134
+ const textForEmbedding = (parsed.title + " " + parsed.body).slice(0, 8000);
135
+ const embedding = await provider.embed(textForEmbedding);
136
+ await client
137
+ .from("ar_entries")
138
+ .update({ embedding })
139
+ .eq("id", entry.id);
140
+ }
141
+ await client.from("ar_sync_state").upsert({
142
+ file_path: filePath,
143
+ file_hash: hash,
144
+ entry_id: entry.id,
145
+ status: provider ? "embedded" : "synced",
146
+ synced_at: new Date().toISOString(),
147
+ });
148
+ }
149
+ catch (err) {
150
+ logSyncError(`doSync failed for ${filePath}: ${err instanceof Error ? err.message : String(err)}`);
151
+ }
152
+ }
153
+ export async function backfill(project, files) {
154
+ const client = getSupabaseClient();
155
+ if (!client)
156
+ return { synced: 0, skipped: 0, failed: 0 };
157
+ let synced = 0, skipped = 0, failed = 0;
158
+ for (const file of files) {
159
+ try {
160
+ const hash = contentHash(file.content);
161
+ const { data: existing } = await client
162
+ .from("ar_sync_state")
163
+ .select("file_hash")
164
+ .eq("file_path", file.path)
165
+ .single();
166
+ if (existing?.file_hash === hash) {
167
+ skipped++;
168
+ continue;
169
+ }
170
+ await doSync(file.path, file.content, project, file.store, file.room);
171
+ synced++;
172
+ }
173
+ catch (err) {
174
+ logSyncError(`backfill failed for ${file.path}: ${err instanceof Error ? err.message : String(err)}`);
175
+ failed++;
176
+ }
177
+ }
178
+ return { synced, skipped, failed };
179
+ }
180
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/supabase/sync.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ export interface AwarenessUpdateInput {
4
4
  evidence: string;
5
5
  applies_when: string[];
6
6
  source: string;
7
+ source_project?: string;
7
8
  severity?: "critical" | "important" | "minor";
8
9
  }>;
9
10
  project?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"awareness-update.d.ts","sourceRoot":"","sources":["../../src/tools-logic/awareness-update.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,KAAK,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,OAAO,CAAC;KAC/C,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,0BAA0B,EAAE,MAAM,CAAC;IACnC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA0DjG"}
1
+ {"version":3,"file":"awareness-update.d.ts","sourceRoot":"","sources":["../../src/tools-logic/awareness-update.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,KAAK,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC;QACf,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,OAAO,CAAC;KAC/C,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,0BAA0B,EAAE,MAAM,CAAC;IACnC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA2DjG"}
@@ -15,6 +15,7 @@ export async function awarenessUpdate(input) {
15
15
  evidence: insight.evidence,
16
16
  appliesWhen: insight.applies_when,
17
17
  source: insight.source,
18
+ source_project: insight.source_project ?? input.project ?? "_global",
18
19
  });
19
20
  // Rejected by quality gate — record reason, skip indexing
20
21
  if ("accepted" in result) {
@@ -1 +1 @@
1
- {"version":3,"file":"awareness-update.js","sourceRoot":"","sources":["../../src/tools-logic/awareness-update.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,UAAU,EACV,sBAAsB,EACtB,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAuBhE,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAA2B;IAC/D,IAAI,KAAK,GAAG,kBAAkB,EAAE,CAAC;IACjC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,IAAI,gBAAgB,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnB,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAClC,CAAC;IAED,MAAM,OAAO,GAA6C,EAAE,CAAC;IAC7D,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,WAAW,EAAE,OAAO,CAAC,YAAY;YACjC,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QACH,0DAA0D;QAC1D,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC5E,SAAS;QACX,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAE9D,iBAAiB,CAAC;YAChB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;YACrD,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,WAAW;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,wEAAwE;IACxE,KAAK,GAAG,kBAAkB,EAAG,CAAC;IAE9B,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACrB,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IACtC,CAAC;IAED,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC7C,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC3B,eAAe,CAAC,KAAK,CAAC,CAAC;IAEvB,MAAM,SAAS,GAAG,sBAAsB,EAAE,CAAC;IAE3C,OAAO;QACL,OAAO,EAAE,IAAI;QACb,kBAAkB,EAAE,OAAO;QAC3B,0BAA0B,EAAE,SAAS,CAAC,MAAM;QAC5C,cAAc,EAAE,kBAAkB,EAAE,EAAE,WAAW,CAAC,MAAM,IAAI,CAAC;KAC9D,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"awareness-update.js","sourceRoot":"","sources":["../../src/tools-logic/awareness-update.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,UAAU,EACV,sBAAsB,EACtB,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAwBhE,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAA2B;IAC/D,IAAI,KAAK,GAAG,kBAAkB,EAAE,CAAC;IACjC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,IAAI,gBAAgB,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnB,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAClC,CAAC;IAED,MAAM,OAAO,GAA6C,EAAE,CAAC;IAC7D,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,WAAW,EAAE,OAAO,CAAC,YAAY;YACjC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC,OAAO,IAAI,SAAS;SACrE,CAAC,CAAC;QACH,0DAA0D;QAC1D,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC5E,SAAS;QACX,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAE9D,iBAAiB,CAAC;YAChB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;YACrD,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,WAAW;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,wEAAwE;IACxE,KAAK,GAAG,kBAAkB,EAAG,CAAC;IAE9B,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACrB,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IACtC,CAAC;IAED,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC7C,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC3B,eAAe,CAAC,KAAK,CAAC,CAAC;IAEvB,MAAM,SAAS,GAAG,sBAAsB,EAAE,CAAC;IAE3C,OAAO;QACL,OAAO,EAAE,IAAI;QACb,kBAAkB,EAAE,OAAO;QAC3B,0BAA0B,EAAE,SAAS,CAAC,MAAM;QAC5C,cAAc,EAAE,kBAAkB,EAAE,EAAE,WAAW,CAAC,MAAM,IAAI,CAAC;KAC9D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Bootstrap — Layered Scan + Selective Import Architecture
3
+ *
4
+ * bootstrapScan() — discovers everything available on the machine (read-only)
5
+ * bootstrapImport() — imports selected items into ~/.agent-recall/
6
+ *
7
+ * This gives the orchestrator/CLI/MCP full control over what gets imported.
8
+ */
9
+ export interface DiscoveredProject {
10
+ slug: string;
11
+ name: string;
12
+ path: string;
13
+ sources: Array<{
14
+ type: "git" | "claude-memory" | "claudemd" | "package-json";
15
+ path: string;
16
+ detail: string;
17
+ }>;
18
+ description?: string;
19
+ language?: string;
20
+ last_activity?: string;
21
+ already_in_ar: boolean;
22
+ importable_items: ImportableItem[];
23
+ }
24
+ export interface ImportableItem {
25
+ id: string;
26
+ type: "identity" | "memory" | "architecture" | "trajectory";
27
+ source_path: string;
28
+ size_bytes: number;
29
+ preview: string;
30
+ }
31
+ export interface BootstrapScanResult {
32
+ projects: DiscoveredProject[];
33
+ global_items: ImportableItem[];
34
+ stats: {
35
+ total_projects: number;
36
+ total_importable_items: number;
37
+ total_already_in_ar: number;
38
+ scan_duration_ms: number;
39
+ };
40
+ }
41
+ export interface ImportSelection {
42
+ project_slugs?: string[];
43
+ item_types?: string[];
44
+ skip_items?: string[];
45
+ include_global?: boolean;
46
+ }
47
+ export interface ImportResult {
48
+ projects_created: number;
49
+ items_imported: number;
50
+ items_skipped: number;
51
+ errors: Array<{
52
+ project: string;
53
+ item: string;
54
+ error: string;
55
+ }>;
56
+ duration_ms: number;
57
+ }
58
+ export declare function bootstrapScan(options?: {
59
+ scan_dirs?: string[];
60
+ source_dirs?: string[];
61
+ max_depth?: number;
62
+ }): Promise<BootstrapScanResult>;
63
+ export declare function bootstrapImport(scan: BootstrapScanResult, selection?: ImportSelection): Promise<ImportResult>;
64
+ //# sourceMappingURL=bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/tools-logic/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAsBH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,KAAK,GAAG,eAAe,GAAG,UAAU,GAAG,cAAc,CAAC;QAC5D,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,cAAc,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,GAAG,QAAQ,GAAG,cAAc,GAAG,YAAY,CAAC;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,KAAK,EAAE;QACL,cAAc,EAAE,MAAM,CAAC;QACvB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,mBAAmB,EAAE,MAAM,CAAC;QAC5B,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,WAAW,EAAE,MAAM,CAAC;CACrB;AAgPD,wBAAsB,aAAa,CAAC,OAAO,CAAC,EAAE;IAC5C,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA4P/B;AAMD,wBAAsB,eAAe,CACnC,IAAI,EAAE,mBAAmB,EACzB,SAAS,CAAC,EAAE,eAAe,GAC1B,OAAO,CAAC,YAAY,CAAC,CA8PvB"}