jfl 0.1.0 → 0.2.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 (262) hide show
  1. package/README.md +443 -145
  2. package/clawdbot-plugin/clawdbot.plugin.json +20 -0
  3. package/clawdbot-plugin/index.js +555 -0
  4. package/clawdbot-plugin/index.ts +582 -0
  5. package/clawdbot-skill/SKILL.md +33 -336
  6. package/clawdbot-skill/index.ts +491 -321
  7. package/clawdbot-skill/skill.json +4 -13
  8. package/dist/commands/clawdbot.d.ts +11 -0
  9. package/dist/commands/clawdbot.d.ts.map +1 -0
  10. package/dist/commands/clawdbot.js +215 -0
  11. package/dist/commands/clawdbot.js.map +1 -0
  12. package/dist/commands/context-hub.d.ts +5 -0
  13. package/dist/commands/context-hub.d.ts.map +1 -1
  14. package/dist/commands/context-hub.js +394 -28
  15. package/dist/commands/context-hub.js.map +1 -1
  16. package/dist/commands/gtm-process-update.d.ts +10 -0
  17. package/dist/commands/gtm-process-update.d.ts.map +1 -0
  18. package/dist/commands/gtm-process-update.js +101 -0
  19. package/dist/commands/gtm-process-update.js.map +1 -0
  20. package/dist/commands/init.d.ts.map +1 -1
  21. package/dist/commands/init.js +278 -4
  22. package/dist/commands/init.js.map +1 -1
  23. package/dist/commands/login.d.ts.map +1 -1
  24. package/dist/commands/login.js +32 -33
  25. package/dist/commands/login.js.map +1 -1
  26. package/dist/commands/memory.d.ts +38 -0
  27. package/dist/commands/memory.d.ts.map +1 -0
  28. package/dist/commands/memory.js +229 -0
  29. package/dist/commands/memory.js.map +1 -0
  30. package/dist/commands/migrate-services.d.ts +8 -0
  31. package/dist/commands/migrate-services.d.ts.map +1 -0
  32. package/dist/commands/migrate-services.js +182 -0
  33. package/dist/commands/migrate-services.js.map +1 -0
  34. package/dist/commands/onboard.d.ts +24 -0
  35. package/dist/commands/onboard.d.ts.map +1 -0
  36. package/dist/commands/onboard.js +663 -0
  37. package/dist/commands/onboard.js.map +1 -0
  38. package/dist/commands/openclaw.d.ts +56 -0
  39. package/dist/commands/openclaw.d.ts.map +1 -0
  40. package/dist/commands/openclaw.js +700 -0
  41. package/dist/commands/openclaw.js.map +1 -0
  42. package/dist/commands/orchestrate.d.ts +14 -0
  43. package/dist/commands/orchestrate.d.ts.map +1 -0
  44. package/dist/commands/orchestrate.js +270 -0
  45. package/dist/commands/orchestrate.js.map +1 -0
  46. package/dist/commands/profile.d.ts +46 -0
  47. package/dist/commands/profile.d.ts.map +1 -0
  48. package/dist/commands/profile.js +498 -0
  49. package/dist/commands/profile.js.map +1 -0
  50. package/dist/commands/repair.d.ts.map +1 -1
  51. package/dist/commands/repair.js +37 -0
  52. package/dist/commands/repair.js.map +1 -1
  53. package/dist/commands/service-agent.d.ts +16 -0
  54. package/dist/commands/service-agent.d.ts.map +1 -0
  55. package/dist/commands/service-agent.js +375 -0
  56. package/dist/commands/service-agent.js.map +1 -0
  57. package/dist/commands/service-manager.d.ts +12 -0
  58. package/dist/commands/service-manager.d.ts.map +1 -0
  59. package/dist/commands/service-manager.js +967 -0
  60. package/dist/commands/service-manager.js.map +1 -0
  61. package/dist/commands/service-validate.d.ts +12 -0
  62. package/dist/commands/service-validate.d.ts.map +1 -0
  63. package/dist/commands/service-validate.js +611 -0
  64. package/dist/commands/service-validate.js.map +1 -0
  65. package/dist/commands/services-create.d.ts +15 -0
  66. package/dist/commands/services-create.d.ts.map +1 -0
  67. package/dist/commands/services-create.js +1452 -0
  68. package/dist/commands/services-create.js.map +1 -0
  69. package/dist/commands/services-scan.d.ts +13 -0
  70. package/dist/commands/services-scan.d.ts.map +1 -0
  71. package/dist/commands/services-scan.js +251 -0
  72. package/dist/commands/services-scan.js.map +1 -0
  73. package/dist/commands/services-sync-agents.d.ts +23 -0
  74. package/dist/commands/services-sync-agents.d.ts.map +1 -0
  75. package/dist/commands/services-sync-agents.js +207 -0
  76. package/dist/commands/services-sync-agents.js.map +1 -0
  77. package/dist/commands/services.d.ts +19 -0
  78. package/dist/commands/services.d.ts.map +1 -0
  79. package/dist/commands/services.js +742 -0
  80. package/dist/commands/services.js.map +1 -0
  81. package/dist/commands/session.d.ts +5 -1
  82. package/dist/commands/session.d.ts.map +1 -1
  83. package/dist/commands/session.js +68 -586
  84. package/dist/commands/session.js.map +1 -1
  85. package/dist/commands/status.d.ts.map +1 -1
  86. package/dist/commands/status.js +17 -0
  87. package/dist/commands/status.js.map +1 -1
  88. package/dist/commands/update.d.ts.map +1 -1
  89. package/dist/commands/update.js +75 -21
  90. package/dist/commands/update.js.map +1 -1
  91. package/dist/commands/validate-settings.d.ts +37 -0
  92. package/dist/commands/validate-settings.d.ts.map +1 -0
  93. package/dist/commands/validate-settings.js +197 -0
  94. package/dist/commands/validate-settings.js.map +1 -0
  95. package/dist/commands/voice.d.ts +0 -1
  96. package/dist/commands/voice.d.ts.map +1 -1
  97. package/dist/commands/voice.js +16 -15
  98. package/dist/commands/voice.js.map +1 -1
  99. package/dist/index.js +395 -141
  100. package/dist/index.js.map +1 -1
  101. package/dist/lib/agent-generator.d.ts +26 -0
  102. package/dist/lib/agent-generator.d.ts.map +1 -0
  103. package/dist/lib/agent-generator.js +331 -0
  104. package/dist/lib/agent-generator.js.map +1 -0
  105. package/dist/lib/memory-db.d.ts +102 -0
  106. package/dist/lib/memory-db.d.ts.map +1 -0
  107. package/dist/lib/memory-db.js +313 -0
  108. package/dist/lib/memory-db.js.map +1 -0
  109. package/dist/lib/memory-indexer.d.ts +47 -0
  110. package/dist/lib/memory-indexer.d.ts.map +1 -0
  111. package/dist/lib/memory-indexer.js +215 -0
  112. package/dist/lib/memory-indexer.js.map +1 -0
  113. package/dist/lib/memory-search.d.ts +41 -0
  114. package/dist/lib/memory-search.d.ts.map +1 -0
  115. package/dist/lib/memory-search.js +246 -0
  116. package/dist/lib/memory-search.js.map +1 -0
  117. package/dist/lib/openclaw-registry.d.ts +48 -0
  118. package/dist/lib/openclaw-registry.d.ts.map +1 -0
  119. package/dist/lib/openclaw-registry.js +181 -0
  120. package/dist/lib/openclaw-registry.js.map +1 -0
  121. package/dist/lib/openclaw-sdk.d.ts +107 -0
  122. package/dist/lib/openclaw-sdk.d.ts.map +1 -0
  123. package/dist/lib/openclaw-sdk.js +208 -0
  124. package/dist/lib/openclaw-sdk.js.map +1 -0
  125. package/dist/lib/peer-agent-generator.d.ts +44 -0
  126. package/dist/lib/peer-agent-generator.d.ts.map +1 -0
  127. package/dist/lib/peer-agent-generator.js +286 -0
  128. package/dist/lib/peer-agent-generator.js.map +1 -0
  129. package/dist/lib/service-dependencies.d.ts +44 -0
  130. package/dist/lib/service-dependencies.d.ts.map +1 -0
  131. package/dist/lib/service-dependencies.js +314 -0
  132. package/dist/lib/service-dependencies.js.map +1 -0
  133. package/dist/lib/service-detector.d.ts +61 -0
  134. package/dist/lib/service-detector.d.ts.map +1 -0
  135. package/dist/lib/service-detector.js +521 -0
  136. package/dist/lib/service-detector.js.map +1 -0
  137. package/dist/lib/service-gtm.d.ts +157 -0
  138. package/dist/lib/service-gtm.d.ts.map +1 -0
  139. package/dist/lib/service-gtm.js +786 -0
  140. package/dist/lib/service-gtm.js.map +1 -0
  141. package/dist/lib/service-mcp-base.d.ts +103 -0
  142. package/dist/lib/service-mcp-base.d.ts.map +1 -0
  143. package/dist/lib/service-mcp-base.js +263 -0
  144. package/dist/lib/service-mcp-base.js.map +1 -0
  145. package/dist/lib/service-utils.d.ts +103 -0
  146. package/dist/lib/service-utils.d.ts.map +1 -0
  147. package/dist/lib/service-utils.js +368 -0
  148. package/dist/lib/service-utils.js.map +1 -0
  149. package/dist/lib/skill-generator.d.ts +21 -0
  150. package/dist/lib/skill-generator.d.ts.map +1 -0
  151. package/dist/lib/skill-generator.js +253 -0
  152. package/dist/lib/skill-generator.js.map +1 -0
  153. package/dist/lib/stratus-client.d.ts +100 -0
  154. package/dist/lib/stratus-client.d.ts.map +1 -0
  155. package/dist/lib/stratus-client.js +255 -0
  156. package/dist/lib/stratus-client.js.map +1 -0
  157. package/dist/mcp/context-hub-mcp.js +135 -53
  158. package/dist/mcp/context-hub-mcp.js.map +1 -1
  159. package/dist/mcp/service-mcp-server.d.ts +12 -0
  160. package/dist/mcp/service-mcp-server.d.ts.map +1 -0
  161. package/dist/mcp/service-mcp-server.js +434 -0
  162. package/dist/mcp/service-mcp-server.js.map +1 -0
  163. package/dist/mcp/service-peer-mcp.d.ts +36 -0
  164. package/dist/mcp/service-peer-mcp.d.ts.map +1 -0
  165. package/dist/mcp/service-peer-mcp.js +220 -0
  166. package/dist/mcp/service-peer-mcp.js.map +1 -0
  167. package/dist/mcp/service-registry-mcp.d.ts +13 -0
  168. package/dist/mcp/service-registry-mcp.d.ts.map +1 -0
  169. package/dist/mcp/service-registry-mcp.js +330 -0
  170. package/dist/mcp/service-registry-mcp.js.map +1 -0
  171. package/dist/ui/banner.js +1 -1
  172. package/dist/ui/banner.js.map +1 -1
  173. package/dist/ui/context-hub-logs.d.ts +10 -0
  174. package/dist/ui/context-hub-logs.d.ts.map +1 -0
  175. package/dist/ui/context-hub-logs.js +175 -0
  176. package/dist/ui/context-hub-logs.js.map +1 -0
  177. package/dist/ui/service-dashboard.d.ts +11 -0
  178. package/dist/ui/service-dashboard.d.ts.map +1 -0
  179. package/dist/ui/service-dashboard.js +357 -0
  180. package/dist/ui/service-dashboard.js.map +1 -0
  181. package/dist/ui/services-manager.d.ts +11 -0
  182. package/dist/ui/services-manager.d.ts.map +1 -0
  183. package/dist/ui/services-manager.js +507 -0
  184. package/dist/ui/services-manager.js.map +1 -0
  185. package/dist/utils/auth-guard.d.ts.map +1 -1
  186. package/dist/utils/auth-guard.js +8 -9
  187. package/dist/utils/auth-guard.js.map +1 -1
  188. package/dist/utils/claude-md-generator.d.ts +10 -0
  189. package/dist/utils/claude-md-generator.d.ts.map +1 -0
  190. package/dist/utils/claude-md-generator.js +215 -0
  191. package/dist/utils/claude-md-generator.js.map +1 -0
  192. package/dist/utils/ensure-context-hub.d.ts +20 -0
  193. package/dist/utils/ensure-context-hub.d.ts.map +1 -0
  194. package/dist/utils/ensure-context-hub.js +65 -0
  195. package/dist/utils/ensure-context-hub.js.map +1 -0
  196. package/dist/utils/ensure-project.d.ts.map +1 -1
  197. package/dist/utils/ensure-project.js +3 -4
  198. package/dist/utils/ensure-project.js.map +1 -1
  199. package/dist/utils/jfl-config.d.ts +19 -0
  200. package/dist/utils/jfl-config.d.ts.map +1 -0
  201. package/dist/utils/jfl-config.js +112 -0
  202. package/dist/utils/jfl-config.js.map +1 -0
  203. package/dist/utils/jfl-migration.d.ts +29 -0
  204. package/dist/utils/jfl-migration.d.ts.map +1 -0
  205. package/dist/utils/jfl-migration.js +142 -0
  206. package/dist/utils/jfl-migration.js.map +1 -0
  207. package/dist/utils/jfl-paths.d.ts +55 -0
  208. package/dist/utils/jfl-paths.d.ts.map +1 -0
  209. package/dist/utils/jfl-paths.js +120 -0
  210. package/dist/utils/jfl-paths.js.map +1 -0
  211. package/dist/utils/settings-validator.d.ts +73 -0
  212. package/dist/utils/settings-validator.d.ts.map +1 -0
  213. package/dist/utils/settings-validator.js +222 -0
  214. package/dist/utils/settings-validator.js.map +1 -0
  215. package/package.json +19 -3
  216. package/scripts/commit-gtm.sh +56 -0
  217. package/scripts/commit-product.sh +68 -0
  218. package/scripts/context-query.sh +45 -0
  219. package/scripts/session/auto-commit.sh +297 -0
  220. package/scripts/session/jfl-doctor.sh +707 -0
  221. package/scripts/session/session-cleanup.sh +268 -0
  222. package/scripts/session/session-end.sh +198 -0
  223. package/scripts/session/session-init.sh +350 -0
  224. package/scripts/session/session-init.sh.backup +292 -0
  225. package/scripts/session/session-sync.sh +167 -0
  226. package/scripts/session/test-context-preservation.sh +160 -0
  227. package/scripts/session/test-critical-infrastructure.sh +293 -0
  228. package/scripts/session/test-experience-level.sh +336 -0
  229. package/scripts/session/test-session-cleanup.sh +268 -0
  230. package/scripts/session/test-session-sync.sh +320 -0
  231. package/scripts/voice-start.sh +36 -8
  232. package/scripts/where-am-i.sh +78 -0
  233. package/template/.claude/service-settings.json +32 -0
  234. package/template/.claude/settings.json +14 -1
  235. package/template/.claude/skills/end/SKILL.md +1780 -0
  236. package/template/.jfl/config.json +2 -1
  237. package/template/CLAUDE.md +1039 -134
  238. package/template/CLAUDE.md.bak +1187 -0
  239. package/template/scripts/commit-gtm.sh +56 -0
  240. package/template/scripts/commit-product.sh +68 -0
  241. package/template/scripts/migrate-to-branch-sessions.sh +201 -0
  242. package/template/scripts/session/auto-commit.sh +58 -6
  243. package/template/scripts/session/jfl-doctor.sh +137 -17
  244. package/template/scripts/session/session-cleanup.sh +268 -0
  245. package/template/scripts/session/session-end.sh +4 -0
  246. package/template/scripts/session/session-init.sh +253 -66
  247. package/template/scripts/session/test-critical-infrastructure.sh +293 -0
  248. package/template/scripts/session/test-experience-level.sh +336 -0
  249. package/template/scripts/session/test-session-cleanup.sh +268 -0
  250. package/template/scripts/session/test-session-sync.sh +320 -0
  251. package/template/scripts/where-am-i.sh +78 -0
  252. package/template/templates/service-agent/.claude/settings.json +32 -0
  253. package/template/templates/service-agent/CLAUDE.md +334 -0
  254. package/template/templates/service-agent/knowledge/ARCHITECTURE.md +115 -0
  255. package/template/templates/service-agent/knowledge/DEPLOYMENT.md +199 -0
  256. package/template/templates/service-agent/knowledge/RUNBOOK.md +412 -0
  257. package/template/templates/service-agent/knowledge/SERVICE_SPEC.md +77 -0
  258. package/dist/commands/session-mgmt.d.ts +0 -33
  259. package/dist/commands/session-mgmt.d.ts.map +0 -1
  260. package/dist/commands/session-mgmt.js +0 -404
  261. package/dist/commands/session-mgmt.js.map +0 -1
  262. package/template/scripts/session/auto-merge.sh +0 -325
@@ -0,0 +1,246 @@
1
+ /**
2
+ * Memory Search Module
3
+ *
4
+ * Hybrid search combining TF-IDF (fast, always available) and
5
+ * embeddings (semantic, optional). Provides relevance scoring
6
+ * and result ranking.
7
+ *
8
+ * @purpose Fast and semantic search across indexed memories
9
+ */
10
+ import OpenAI from 'openai';
11
+ import { getAllMemories, deserializeEmbedding } from './memory-db.js';
12
+ /**
13
+ * Tokenize text for TF-IDF
14
+ * Reused from Context Hub implementation
15
+ */
16
+ function tokenize(text) {
17
+ return text
18
+ .toLowerCase()
19
+ .replace(/[^a-z0-9\s]/g, ' ')
20
+ .split(/\s+/)
21
+ .filter(token => token.length > 2);
22
+ }
23
+ /**
24
+ * Compute TF-IDF scores for text
25
+ */
26
+ export function computeTFIDF(text, allTexts) {
27
+ const tokens = tokenize(text);
28
+ const tokenCounts = {};
29
+ // Term frequency
30
+ tokens.forEach(token => {
31
+ tokenCounts[token] = (tokenCounts[token] || 0) + 1;
32
+ });
33
+ const totalTokens = tokens.length;
34
+ const tf = {};
35
+ Object.keys(tokenCounts).forEach(token => {
36
+ tf[token] = tokenCounts[token] / totalTokens;
37
+ });
38
+ // Inverse document frequency
39
+ const idf = {};
40
+ const totalDocs = allTexts.length;
41
+ Object.keys(tf).forEach(token => {
42
+ const docsWithToken = allTexts.filter(doc => tokenize(doc).includes(token)).length;
43
+ idf[token] = Math.log(totalDocs / (docsWithToken + 1));
44
+ });
45
+ // TF-IDF
46
+ const tfidf = {};
47
+ Object.keys(tf).forEach(token => {
48
+ tfidf[token] = tf[token] * idf[token];
49
+ });
50
+ return tfidf;
51
+ }
52
+ /**
53
+ * Search memories using TF-IDF
54
+ */
55
+ async function searchMemoriesTFIDF(query, memories, limit) {
56
+ const queryTokens = tokenize(query);
57
+ const scored = [];
58
+ for (const memory of memories) {
59
+ if (!memory.tf_idf_tokens)
60
+ continue;
61
+ const tfIdfTokens = JSON.parse(memory.tf_idf_tokens);
62
+ let score = 0;
63
+ for (const token of queryTokens) {
64
+ score += tfIdfTokens[token] || 0;
65
+ }
66
+ // Boost recent entries (1.3x if within 7 days)
67
+ const daysSinceCreated = daysBetween(memory.created_at, new Date().toISOString());
68
+ if (daysSinceCreated < 7) {
69
+ score *= 1.3;
70
+ }
71
+ // Boost by type
72
+ if (memory.type === 'decision')
73
+ score *= 1.4;
74
+ if (memory.type === 'feature')
75
+ score *= 1.2;
76
+ if (score > 0) {
77
+ scored.push({
78
+ memory,
79
+ score,
80
+ relevance: score > 0.7 ? 'high' : score > 0.4 ? 'medium' : 'low'
81
+ });
82
+ }
83
+ }
84
+ // Sort by score descending
85
+ scored.sort((a, b) => b.score - a.score);
86
+ return scored.slice(0, limit);
87
+ }
88
+ /**
89
+ * Compute embedding for text using OpenAI
90
+ */
91
+ async function computeEmbedding(text) {
92
+ const apiKey = process.env.OPENAI_API_KEY;
93
+ if (!apiKey) {
94
+ return null;
95
+ }
96
+ try {
97
+ const openai = new OpenAI({ apiKey });
98
+ const response = await openai.embeddings.create({
99
+ model: 'text-embedding-3-small',
100
+ input: text,
101
+ encoding_format: 'float'
102
+ });
103
+ return {
104
+ embedding: new Float32Array(response.data[0].embedding),
105
+ model: 'text-embedding-3-small'
106
+ };
107
+ }
108
+ catch (error) {
109
+ console.error('Failed to compute embedding:', error);
110
+ return null;
111
+ }
112
+ }
113
+ /**
114
+ * Cosine similarity between two vectors
115
+ */
116
+ function cosineSimilarity(a, b) {
117
+ if (a.length !== b.length) {
118
+ throw new Error('Vectors must have same length');
119
+ }
120
+ let dotProduct = 0;
121
+ let normA = 0;
122
+ let normB = 0;
123
+ for (let i = 0; i < a.length; i++) {
124
+ dotProduct += a[i] * b[i];
125
+ normA += a[i] * a[i];
126
+ normB += b[i] * b[i];
127
+ }
128
+ return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
129
+ }
130
+ /**
131
+ * Search memories using embeddings
132
+ */
133
+ async function searchMemoriesEmbedding(query, memories, limit) {
134
+ // Compute query embedding
135
+ const queryEmbedding = await computeEmbedding(query);
136
+ if (!queryEmbedding) {
137
+ return [];
138
+ }
139
+ const scored = [];
140
+ for (const memory of memories) {
141
+ if (!memory.embedding)
142
+ continue;
143
+ const memoryEmbedding = deserializeEmbedding(memory.embedding);
144
+ const similarity = cosineSimilarity(queryEmbedding.embedding, memoryEmbedding);
145
+ if (similarity > 0.5) {
146
+ scored.push({
147
+ memory,
148
+ score: similarity,
149
+ relevance: similarity > 0.8 ? 'high' : similarity > 0.65 ? 'medium' : 'low'
150
+ });
151
+ }
152
+ }
153
+ scored.sort((a, b) => b.score - a.score);
154
+ return scored.slice(0, limit * 2); // Get more for merging
155
+ }
156
+ /**
157
+ * Normalize scores to 0-1 range
158
+ */
159
+ function normalizeScores(results) {
160
+ if (results.length === 0)
161
+ return [];
162
+ const maxScore = Math.max(...results.map(r => r.score));
163
+ const minScore = Math.min(...results.map(r => r.score));
164
+ const range = maxScore - minScore;
165
+ if (range === 0)
166
+ return results;
167
+ return results.map(r => ({
168
+ ...r,
169
+ score: (r.score - minScore) / range
170
+ }));
171
+ }
172
+ /**
173
+ * Hybrid search combining TF-IDF and embeddings
174
+ */
175
+ async function searchMemoriesHybrid(query, memories, limit) {
176
+ // Run both searches in parallel
177
+ const [tfIdfResults, embeddingResults] = await Promise.all([
178
+ searchMemoriesTFIDF(query, memories, limit * 2),
179
+ searchMemoriesEmbedding(query, memories, limit * 2).catch(() => [])
180
+ ]);
181
+ // Normalize scores
182
+ const tfIdfNormalized = normalizeScores(tfIdfResults);
183
+ const embeddingNormalized = normalizeScores(embeddingResults);
184
+ // Merge with weights (TF-IDF: 0.4, Embedding: 0.6)
185
+ const mergedScores = new Map();
186
+ for (const result of tfIdfNormalized) {
187
+ const memId = result.memory.id;
188
+ mergedScores.set(memId, (mergedScores.get(memId) || 0) + result.score * 0.4);
189
+ }
190
+ for (const result of embeddingNormalized) {
191
+ const memId = result.memory.id;
192
+ mergedScores.set(memId, (mergedScores.get(memId) || 0) + result.score * 0.6);
193
+ }
194
+ // Create final results
195
+ const memoryMap = new Map();
196
+ tfIdfResults.forEach(r => memoryMap.set(r.memory.id, r.memory));
197
+ embeddingResults.forEach(r => memoryMap.set(r.memory.id, r.memory));
198
+ const finalResults = Array.from(mergedScores.entries())
199
+ .map(([id, score]) => ({
200
+ memory: memoryMap.get(id),
201
+ score,
202
+ relevance: score > 0.7 ? 'high' : score > 0.4 ? 'medium' : 'low'
203
+ }))
204
+ .sort((a, b) => b.score - a.score)
205
+ .slice(0, limit);
206
+ return finalResults;
207
+ }
208
+ /**
209
+ * Main search function
210
+ */
211
+ export async function searchMemories(query, options = {}) {
212
+ const { maxItems = 10, type, since, method = 'hybrid' } = options;
213
+ // Get all memories
214
+ let memories = await getAllMemories();
215
+ // Apply filters
216
+ if (type && type !== 'all') {
217
+ memories = memories.filter(m => m.type === type);
218
+ }
219
+ if (since) {
220
+ memories = memories.filter(m => m.created_at >= since);
221
+ }
222
+ // Search based on method
223
+ if (method === 'tfidf') {
224
+ return searchMemoriesTFIDF(query, memories, maxItems);
225
+ }
226
+ else if (method === 'embedding') {
227
+ return searchMemoriesEmbedding(query, memories, maxItems);
228
+ }
229
+ else {
230
+ return searchMemoriesHybrid(query, memories, maxItems);
231
+ }
232
+ }
233
+ /**
234
+ * Calculate days between two dates
235
+ */
236
+ function daysBetween(date1, date2) {
237
+ const d1 = new Date(date1);
238
+ const d2 = new Date(date2);
239
+ const diff = Math.abs(d2.getTime() - d1.getTime());
240
+ return Math.floor(diff / (1000 * 60 * 60 * 24));
241
+ }
242
+ /**
243
+ * Export compute embedding for use in indexer
244
+ */
245
+ export { computeEmbedding };
246
+ //# sourceMappingURL=memory-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-search.js","sourceRoot":"","sources":["../../src/lib/memory-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * OpenClaw Agent Registry
3
+ *
4
+ * Manages the multi-GTM agent registry at ~/.config/jfl/openclaw-agents.json.
5
+ * Tracks which agents are registered, their GTM workspaces, and active sessions.
6
+ *
7
+ * @purpose Multi-GTM agent registry management for OpenClaw protocol
8
+ * @spec specs/OPENCLAW_SPEC.md#5-multi-gtm-agent-registry
9
+ */
10
+ export interface GtmRegistration {
11
+ id: string;
12
+ name: string;
13
+ path: string;
14
+ default: boolean;
15
+ registered_at: string;
16
+ }
17
+ export interface AgentSession {
18
+ branch: string;
19
+ started_at: string;
20
+ worktree: string | null;
21
+ }
22
+ export interface AgentEntry {
23
+ id: string;
24
+ runtime: string;
25
+ manifest_path: string | null;
26
+ registered_gtms: GtmRegistration[];
27
+ active_gtm: string | null;
28
+ session: AgentSession | null;
29
+ }
30
+ export interface AgentRegistry {
31
+ version: string;
32
+ agents: Record<string, AgentEntry>;
33
+ }
34
+ export declare function getAgent(agentId: string): AgentEntry | null;
35
+ export declare function listAgents(): AgentEntry[];
36
+ export declare function ensureAgent(agentId: string, runtime?: string): AgentEntry;
37
+ export declare function setManifestPath(agentId: string, manifestPath: string): void;
38
+ export declare function registerGtm(agentId: string, gtmPath: string, gtmName: string, setDefault?: boolean): GtmRegistration;
39
+ export declare function getActiveGtm(agentId: string): GtmRegistration | null;
40
+ export declare function switchGtm(agentId: string, gtmId: string): GtmRegistration;
41
+ export declare function listGtms(agentId: string): GtmRegistration[];
42
+ export declare function removeGtm(agentId: string, gtmId: string): boolean;
43
+ export declare function updateSession(agentId: string, session: AgentSession | null): void;
44
+ export declare function getActiveSession(agentId: string): AgentSession | null;
45
+ export declare function clearSession(agentId: string): void;
46
+ export declare function removeAgent(agentId: string): boolean;
47
+ export declare function getRegistryPath(): string;
48
+ //# sourceMappingURL=openclaw-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw-registry.d.ts","sourceRoot":"","sources":["../../src/lib/openclaw-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAYH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,eAAe,EAAE,eAAe,EAAE,CAAA;IAClC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,OAAO,EAAE,YAAY,GAAG,IAAI,CAAA;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;CACnC;AA8BD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAG3D;AAED,wBAAgB,UAAU,IAAI,UAAU,EAAE,CAGzC;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAiB,GAAG,UAAU,CAgBnF;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAM3E;AAMD,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,OAAe,GAC1B,eAAe,CA2CjB;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAKpE;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,eAAe,CAezE;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,EAAE,CAI3D;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAgBjE;AAMD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,GAAG,IAAI,GAC3B,IAAI,CASN;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAGrE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAMD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAMpD;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
@@ -0,0 +1,181 @@
1
+ /**
2
+ * OpenClaw Agent Registry
3
+ *
4
+ * Manages the multi-GTM agent registry at ~/.config/jfl/openclaw-agents.json.
5
+ * Tracks which agents are registered, their GTM workspaces, and active sessions.
6
+ *
7
+ * @purpose Multi-GTM agent registry management for OpenClaw protocol
8
+ * @spec specs/OPENCLAW_SPEC.md#5-multi-gtm-agent-registry
9
+ */
10
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
11
+ import { join, dirname, basename } from "path";
12
+ import { JFL_PATHS } from "../utils/jfl-paths.js";
13
+ const REGISTRY_FILE = join(JFL_PATHS.config, "openclaw-agents.json");
14
+ // ============================================================================
15
+ // Registry I/O
16
+ // ============================================================================
17
+ function loadRegistry() {
18
+ if (!existsSync(REGISTRY_FILE)) {
19
+ return { version: "1.0", agents: {} };
20
+ }
21
+ try {
22
+ return JSON.parse(readFileSync(REGISTRY_FILE, "utf-8"));
23
+ }
24
+ catch {
25
+ return { version: "1.0", agents: {} };
26
+ }
27
+ }
28
+ function saveRegistry(registry) {
29
+ const dir = dirname(REGISTRY_FILE);
30
+ if (!existsSync(dir)) {
31
+ mkdirSync(dir, { recursive: true });
32
+ }
33
+ writeFileSync(REGISTRY_FILE, JSON.stringify(registry, null, 2) + "\n");
34
+ }
35
+ // ============================================================================
36
+ // Agent Operations
37
+ // ============================================================================
38
+ export function getAgent(agentId) {
39
+ const registry = loadRegistry();
40
+ return registry.agents[agentId] || null;
41
+ }
42
+ export function listAgents() {
43
+ const registry = loadRegistry();
44
+ return Object.values(registry.agents);
45
+ }
46
+ export function ensureAgent(agentId, runtime = "custom") {
47
+ const registry = loadRegistry();
48
+ if (!registry.agents[agentId]) {
49
+ registry.agents[agentId] = {
50
+ id: agentId,
51
+ runtime,
52
+ manifest_path: null,
53
+ registered_gtms: [],
54
+ active_gtm: null,
55
+ session: null,
56
+ };
57
+ saveRegistry(registry);
58
+ }
59
+ return registry.agents[agentId];
60
+ }
61
+ export function setManifestPath(agentId, manifestPath) {
62
+ const registry = loadRegistry();
63
+ if (registry.agents[agentId]) {
64
+ registry.agents[agentId].manifest_path = manifestPath;
65
+ saveRegistry(registry);
66
+ }
67
+ }
68
+ // ============================================================================
69
+ // GTM Operations
70
+ // ============================================================================
71
+ export function registerGtm(agentId, gtmPath, gtmName, setDefault = false) {
72
+ const registry = loadRegistry();
73
+ const agent = registry.agents[agentId];
74
+ if (!agent) {
75
+ throw new Error(`Agent "${agentId}" not found in registry. Call ensureAgent() first.`);
76
+ }
77
+ const gtmId = basename(gtmPath).toLowerCase().replace(/[^a-z0-9-]/g, "-");
78
+ // Check if already registered
79
+ const existing = agent.registered_gtms.find((g) => g.path === gtmPath);
80
+ if (existing) {
81
+ if (setDefault) {
82
+ agent.registered_gtms.forEach((g) => (g.default = false));
83
+ existing.default = true;
84
+ }
85
+ saveRegistry(registry);
86
+ return existing;
87
+ }
88
+ // If first GTM or explicit default, mark as default
89
+ const isDefault = setDefault || agent.registered_gtms.length === 0;
90
+ if (isDefault) {
91
+ agent.registered_gtms.forEach((g) => (g.default = false));
92
+ }
93
+ const registration = {
94
+ id: gtmId,
95
+ name: gtmName,
96
+ path: gtmPath,
97
+ default: isDefault,
98
+ registered_at: new Date().toISOString(),
99
+ };
100
+ agent.registered_gtms.push(registration);
101
+ if (isDefault) {
102
+ agent.active_gtm = gtmId;
103
+ }
104
+ saveRegistry(registry);
105
+ return registration;
106
+ }
107
+ export function getActiveGtm(agentId) {
108
+ const agent = getAgent(agentId);
109
+ if (!agent || !agent.active_gtm)
110
+ return null;
111
+ return agent.registered_gtms.find((g) => g.id === agent.active_gtm) || null;
112
+ }
113
+ export function switchGtm(agentId, gtmId) {
114
+ const registry = loadRegistry();
115
+ const agent = registry.agents[agentId];
116
+ if (!agent) {
117
+ throw new Error(`Agent "${agentId}" not found in registry`);
118
+ }
119
+ const gtm = agent.registered_gtms.find((g) => g.id === gtmId);
120
+ if (!gtm) {
121
+ throw new Error(`GTM "${gtmId}" not registered for agent "${agentId}"`);
122
+ }
123
+ agent.active_gtm = gtmId;
124
+ saveRegistry(registry);
125
+ return gtm;
126
+ }
127
+ export function listGtms(agentId) {
128
+ const agent = getAgent(agentId);
129
+ if (!agent)
130
+ return [];
131
+ return agent.registered_gtms;
132
+ }
133
+ export function removeGtm(agentId, gtmId) {
134
+ const registry = loadRegistry();
135
+ const agent = registry.agents[agentId];
136
+ if (!agent)
137
+ return false;
138
+ const idx = agent.registered_gtms.findIndex((g) => g.id === gtmId);
139
+ if (idx === -1)
140
+ return false;
141
+ agent.registered_gtms.splice(idx, 1);
142
+ if (agent.active_gtm === gtmId) {
143
+ agent.active_gtm = agent.registered_gtms[0]?.id || null;
144
+ }
145
+ saveRegistry(registry);
146
+ return true;
147
+ }
148
+ // ============================================================================
149
+ // Session Operations
150
+ // ============================================================================
151
+ export function updateSession(agentId, session) {
152
+ const registry = loadRegistry();
153
+ const agent = registry.agents[agentId];
154
+ if (!agent) {
155
+ throw new Error(`Agent "${agentId}" not found in registry`);
156
+ }
157
+ agent.session = session;
158
+ saveRegistry(registry);
159
+ }
160
+ export function getActiveSession(agentId) {
161
+ const agent = getAgent(agentId);
162
+ return agent?.session || null;
163
+ }
164
+ export function clearSession(agentId) {
165
+ updateSession(agentId, null);
166
+ }
167
+ // ============================================================================
168
+ // Utility
169
+ // ============================================================================
170
+ export function removeAgent(agentId) {
171
+ const registry = loadRegistry();
172
+ if (!registry.agents[agentId])
173
+ return false;
174
+ delete registry.agents[agentId];
175
+ saveRegistry(registry);
176
+ return true;
177
+ }
178
+ export function getRegistryPath() {
179
+ return REGISTRY_FILE;
180
+ }
181
+ //# sourceMappingURL=openclaw-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw-registry.js","sourceRoot":"","sources":["../../src/lib/openclaw-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AACvE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAEjD,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAA;AAkCpE,+EAA+E;AAC/E,eAAe;AACf,+EAA+E;AAE/E,SAAS,YAAY;IACnB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;IACvC,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAA;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;IACvC,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,QAAuB;IAC3C,MAAM,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;IAClC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACrC,CAAC;IACD,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;AACxE,CAAC;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAA;IAC/B,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAA;IAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,UAAkB,QAAQ;IACrE,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAA;IAE/B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG;YACzB,EAAE,EAAE,OAAO;YACX,OAAO;YACP,aAAa,EAAE,IAAI;YACnB,eAAe,EAAE,EAAE;YACnB,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,IAAI;SACd,CAAA;QACD,YAAY,CAAC,QAAQ,CAAC,CAAA;IACxB,CAAC;IAED,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,YAAoB;IACnE,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAA;IAC/B,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,GAAG,YAAY,CAAA;QACrD,YAAY,CAAC,QAAQ,CAAC,CAAA;IACxB,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,MAAM,UAAU,WAAW,CACzB,OAAe,EACf,OAAe,EACf,OAAe,EACf,aAAsB,KAAK;IAE3B,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAA;IAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACtC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,UAAU,OAAO,oDAAoD,CAAC,CAAA;IACxF,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAA;IAEzE,8BAA8B;IAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAA;IACtE,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAA;YACzD,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAA;QACzB,CAAC;QACD,YAAY,CAAC,QAAQ,CAAC,CAAA;QACtB,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,oDAAoD;IACpD,MAAM,SAAS,GAAG,UAAU,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,CAAA;IAElE,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAA;IAC3D,CAAC;IAED,MAAM,YAAY,GAAoB;QACpC,EAAE,EAAE,KAAK;QACT,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,SAAS;QAClB,aAAa,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACxC,CAAA;IAED,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAExC,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,CAAC,UAAU,GAAG,KAAK,CAAA;IAC1B,CAAC;IAED,YAAY,CAAC,QAAQ,CAAC,CAAA;IACtB,OAAO,YAAY,CAAA;AACrB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC/B,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU;QAAE,OAAO,IAAI,CAAA;IAE5C,OAAO,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,UAAU,CAAC,IAAI,IAAI,CAAA;AAC7E,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,KAAa;IACtD,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAA;IAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACtC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,UAAU,OAAO,yBAAyB,CAAC,CAAA;IAC7D,CAAC;IAED,MAAM,GAAG,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAA;IAC7D,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,+BAA+B,OAAO,GAAG,CAAC,CAAA;IACzE,CAAC;IAED,KAAK,CAAC,UAAU,GAAG,KAAK,CAAA;IACxB,YAAY,CAAC,QAAQ,CAAC,CAAA;IACtB,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC/B,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAA;IACrB,OAAO,KAAK,CAAC,eAAe,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,KAAa;IACtD,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAA;IAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACtC,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAA;IAExB,MAAM,GAAG,GAAG,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAA;IAClE,IAAI,GAAG,KAAK,CAAC,CAAC;QAAE,OAAO,KAAK,CAAA;IAE5B,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IAEpC,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;QAC/B,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,CAAA;IACzD,CAAC;IAED,YAAY,CAAC,QAAQ,CAAC,CAAA;IACtB,OAAO,IAAI,CAAA;AACb,CAAC;AAED,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E,MAAM,UAAU,aAAa,CAC3B,OAAe,EACf,OAA4B;IAE5B,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAA;IAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACtC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,UAAU,OAAO,yBAAyB,CAAC,CAAA;IAC7D,CAAC;IAED,KAAK,CAAC,OAAO,GAAG,OAAO,CAAA;IACvB,YAAY,CAAC,QAAQ,CAAC,CAAA;AACxB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC/B,OAAO,KAAK,EAAE,OAAO,IAAI,IAAI,CAAA;AAC/B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;AAC9B,CAAC;AAED,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAA;IAC/B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAA;IAC3C,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAC/B,YAAY,CAAC,QAAQ,CAAC,CAAA;IACtB,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,aAAa,CAAA;AACtB,CAAC"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * OpenClaw TypeScript SDK
3
+ *
4
+ * Thin wrapper around Context Hub HTTP API and direct file I/O.
5
+ * For Node.js agent runtimes (Clawdbot, custom) that prefer imports over shell-outs.
6
+ *
7
+ * Primary path: HTTP to Context Hub (fast, no process spawn).
8
+ * Fallback: Shell out to `jfl openclaw` commands.
9
+ *
10
+ * @purpose Runtime-agnostic SDK for OpenClaw agent protocol
11
+ * @spec specs/OPENCLAW_SPEC.md
12
+ */
13
+ export interface OpenClawConfig {
14
+ agentId: string;
15
+ hubUrl?: string;
16
+ gtmPath?: string;
17
+ }
18
+ export interface SessionInfo {
19
+ session_id: string;
20
+ branch: string;
21
+ gtm_path: string;
22
+ gtm_name: string;
23
+ context_hub: {
24
+ url: string;
25
+ healthy: boolean;
26
+ };
27
+ auto_commit: {
28
+ running: boolean;
29
+ interval: number;
30
+ };
31
+ }
32
+ export interface HealthStatus {
33
+ healthy: boolean;
34
+ context_hub: boolean;
35
+ uncommitted_changes: boolean;
36
+ last_commit: string | null;
37
+ session_duration_seconds: number;
38
+ }
39
+ export interface ContextItem {
40
+ source: string;
41
+ type: string;
42
+ title: string;
43
+ content: string;
44
+ path?: string;
45
+ relevance?: number;
46
+ }
47
+ export interface MemoryResult {
48
+ id: string;
49
+ title: string;
50
+ summary: string;
51
+ type: string;
52
+ ts: string;
53
+ relevance: string;
54
+ score: number;
55
+ }
56
+ export interface JournalEntry {
57
+ v: number;
58
+ ts: string;
59
+ session: string;
60
+ type: "feature" | "fix" | "decision" | "milestone" | "spec" | "discovery";
61
+ status?: "complete" | "incomplete" | "blocked";
62
+ title: string;
63
+ summary: string;
64
+ detail?: string;
65
+ files?: string[];
66
+ decision?: string;
67
+ incomplete?: string[];
68
+ next?: string;
69
+ learned?: string[];
70
+ }
71
+ export interface GtmInfo {
72
+ id: string;
73
+ name: string;
74
+ path: string;
75
+ default: boolean;
76
+ registered_at: string;
77
+ }
78
+ export interface ServiceInfo {
79
+ name: string;
80
+ path: string;
81
+ type: string;
82
+ status: string;
83
+ }
84
+ export declare class OpenClawClient {
85
+ private agentId;
86
+ private hubUrl;
87
+ private gtmPath;
88
+ private http;
89
+ private sessionId;
90
+ constructor(config: OpenClawConfig);
91
+ sessionStart(gtmPath?: string): Promise<SessionInfo>;
92
+ sessionEnd(sync?: boolean): Promise<void>;
93
+ heartbeat(): Promise<HealthStatus>;
94
+ getContext(query?: string, taskType?: string): Promise<ContextItem[]>;
95
+ searchMemory(query: string, type?: string): Promise<MemoryResult[]>;
96
+ writeJournal(entry: Partial<JournalEntry>): Promise<void>;
97
+ listGtms(): Promise<GtmInfo[]>;
98
+ switchGtm(gtmId: string): Promise<void>;
99
+ createGtm(name: string, path?: string): Promise<string>;
100
+ tagService(name: string, message: string): Promise<void>;
101
+ listServices(): Promise<ServiceInfo[]>;
102
+ private cli;
103
+ private getAuthHeaders;
104
+ private resolveGtmPath;
105
+ private getCurrentSessionBranch;
106
+ }
107
+ //# sourceMappingURL=openclaw-sdk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw-sdk.d.ts","sourceRoot":"","sources":["../../src/lib/openclaw-sdk.ts"],"names":[],"mappings":"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"}