@stoneforge/quarry 0.1.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 (330) hide show
  1. package/LICENSE +13 -0
  2. package/README.md +160 -0
  3. package/dist/api/index.d.ts +8 -0
  4. package/dist/api/index.d.ts.map +1 -0
  5. package/dist/api/index.js +8 -0
  6. package/dist/api/index.js.map +1 -0
  7. package/dist/api/quarry-api.d.ts +268 -0
  8. package/dist/api/quarry-api.d.ts.map +1 -0
  9. package/dist/api/quarry-api.js +3905 -0
  10. package/dist/api/quarry-api.js.map +1 -0
  11. package/dist/api/types.d.ts +1359 -0
  12. package/dist/api/types.d.ts.map +1 -0
  13. package/dist/api/types.js +204 -0
  14. package/dist/api/types.js.map +1 -0
  15. package/dist/bin/sf.d.ts +3 -0
  16. package/dist/bin/sf.d.ts.map +1 -0
  17. package/dist/bin/sf.js +9 -0
  18. package/dist/bin/sf.js.map +1 -0
  19. package/dist/cli/commands/admin.d.ts +11 -0
  20. package/dist/cli/commands/admin.d.ts.map +1 -0
  21. package/dist/cli/commands/admin.js +465 -0
  22. package/dist/cli/commands/admin.js.map +1 -0
  23. package/dist/cli/commands/alias.d.ts +8 -0
  24. package/dist/cli/commands/alias.d.ts.map +1 -0
  25. package/dist/cli/commands/alias.js +70 -0
  26. package/dist/cli/commands/alias.js.map +1 -0
  27. package/dist/cli/commands/channel.d.ts +13 -0
  28. package/dist/cli/commands/channel.d.ts.map +1 -0
  29. package/dist/cli/commands/channel.js +680 -0
  30. package/dist/cli/commands/channel.js.map +1 -0
  31. package/dist/cli/commands/completion.d.ts +8 -0
  32. package/dist/cli/commands/completion.d.ts.map +1 -0
  33. package/dist/cli/commands/completion.js +87 -0
  34. package/dist/cli/commands/completion.js.map +1 -0
  35. package/dist/cli/commands/config.d.ts +12 -0
  36. package/dist/cli/commands/config.d.ts.map +1 -0
  37. package/dist/cli/commands/config.js +242 -0
  38. package/dist/cli/commands/config.js.map +1 -0
  39. package/dist/cli/commands/crud.d.ts +64 -0
  40. package/dist/cli/commands/crud.d.ts.map +1 -0
  41. package/dist/cli/commands/crud.js +805 -0
  42. package/dist/cli/commands/crud.js.map +1 -0
  43. package/dist/cli/commands/dep.d.ts +16 -0
  44. package/dist/cli/commands/dep.d.ts.map +1 -0
  45. package/dist/cli/commands/dep.js +499 -0
  46. package/dist/cli/commands/dep.js.map +1 -0
  47. package/dist/cli/commands/document.d.ts +12 -0
  48. package/dist/cli/commands/document.d.ts.map +1 -0
  49. package/dist/cli/commands/document.js +1039 -0
  50. package/dist/cli/commands/document.js.map +1 -0
  51. package/dist/cli/commands/embeddings.d.ts +12 -0
  52. package/dist/cli/commands/embeddings.d.ts.map +1 -0
  53. package/dist/cli/commands/embeddings.js +273 -0
  54. package/dist/cli/commands/embeddings.js.map +1 -0
  55. package/dist/cli/commands/entity.d.ts +16 -0
  56. package/dist/cli/commands/entity.d.ts.map +1 -0
  57. package/dist/cli/commands/entity.js +522 -0
  58. package/dist/cli/commands/entity.js.map +1 -0
  59. package/dist/cli/commands/gc.d.ts +10 -0
  60. package/dist/cli/commands/gc.d.ts.map +1 -0
  61. package/dist/cli/commands/gc.js +257 -0
  62. package/dist/cli/commands/gc.js.map +1 -0
  63. package/dist/cli/commands/help.d.ts +11 -0
  64. package/dist/cli/commands/help.d.ts.map +1 -0
  65. package/dist/cli/commands/help.js +169 -0
  66. package/dist/cli/commands/help.js.map +1 -0
  67. package/dist/cli/commands/history.d.ts +9 -0
  68. package/dist/cli/commands/history.d.ts.map +1 -0
  69. package/dist/cli/commands/history.js +160 -0
  70. package/dist/cli/commands/history.js.map +1 -0
  71. package/dist/cli/commands/identity.d.ts +18 -0
  72. package/dist/cli/commands/identity.d.ts.map +1 -0
  73. package/dist/cli/commands/identity.js +698 -0
  74. package/dist/cli/commands/identity.js.map +1 -0
  75. package/dist/cli/commands/inbox.d.ts +20 -0
  76. package/dist/cli/commands/inbox.d.ts.map +1 -0
  77. package/dist/cli/commands/inbox.js +493 -0
  78. package/dist/cli/commands/inbox.js.map +1 -0
  79. package/dist/cli/commands/init.d.ts +20 -0
  80. package/dist/cli/commands/init.d.ts.map +1 -0
  81. package/dist/cli/commands/init.js +144 -0
  82. package/dist/cli/commands/init.js.map +1 -0
  83. package/dist/cli/commands/install.d.ts +9 -0
  84. package/dist/cli/commands/install.d.ts.map +1 -0
  85. package/dist/cli/commands/install.js +200 -0
  86. package/dist/cli/commands/install.js.map +1 -0
  87. package/dist/cli/commands/library.d.ts +12 -0
  88. package/dist/cli/commands/library.d.ts.map +1 -0
  89. package/dist/cli/commands/library.js +665 -0
  90. package/dist/cli/commands/library.js.map +1 -0
  91. package/dist/cli/commands/message.d.ts +11 -0
  92. package/dist/cli/commands/message.d.ts.map +1 -0
  93. package/dist/cli/commands/message.js +608 -0
  94. package/dist/cli/commands/message.js.map +1 -0
  95. package/dist/cli/commands/plan.d.ts +17 -0
  96. package/dist/cli/commands/plan.d.ts.map +1 -0
  97. package/dist/cli/commands/plan.js +698 -0
  98. package/dist/cli/commands/plan.js.map +1 -0
  99. package/dist/cli/commands/playbook.d.ts +12 -0
  100. package/dist/cli/commands/playbook.d.ts.map +1 -0
  101. package/dist/cli/commands/playbook.js +730 -0
  102. package/dist/cli/commands/playbook.js.map +1 -0
  103. package/dist/cli/commands/reset.d.ts +12 -0
  104. package/dist/cli/commands/reset.d.ts.map +1 -0
  105. package/dist/cli/commands/reset.js +306 -0
  106. package/dist/cli/commands/reset.js.map +1 -0
  107. package/dist/cli/commands/serve.d.ts +11 -0
  108. package/dist/cli/commands/serve.d.ts.map +1 -0
  109. package/dist/cli/commands/serve.js +106 -0
  110. package/dist/cli/commands/serve.js.map +1 -0
  111. package/dist/cli/commands/stats.d.ts +8 -0
  112. package/dist/cli/commands/stats.d.ts.map +1 -0
  113. package/dist/cli/commands/stats.js +82 -0
  114. package/dist/cli/commands/stats.js.map +1 -0
  115. package/dist/cli/commands/sync.d.ts +14 -0
  116. package/dist/cli/commands/sync.d.ts.map +1 -0
  117. package/dist/cli/commands/sync.js +370 -0
  118. package/dist/cli/commands/sync.js.map +1 -0
  119. package/dist/cli/commands/task.d.ts +25 -0
  120. package/dist/cli/commands/task.d.ts.map +1 -0
  121. package/dist/cli/commands/task.js +1153 -0
  122. package/dist/cli/commands/task.js.map +1 -0
  123. package/dist/cli/commands/team.d.ts +13 -0
  124. package/dist/cli/commands/team.d.ts.map +1 -0
  125. package/dist/cli/commands/team.js +471 -0
  126. package/dist/cli/commands/team.js.map +1 -0
  127. package/dist/cli/commands/workflow.d.ts +16 -0
  128. package/dist/cli/commands/workflow.d.ts.map +1 -0
  129. package/dist/cli/commands/workflow.js +753 -0
  130. package/dist/cli/commands/workflow.js.map +1 -0
  131. package/dist/cli/completion.d.ts +28 -0
  132. package/dist/cli/completion.d.ts.map +1 -0
  133. package/dist/cli/completion.js +295 -0
  134. package/dist/cli/completion.js.map +1 -0
  135. package/dist/cli/db.d.ts +38 -0
  136. package/dist/cli/db.d.ts.map +1 -0
  137. package/dist/cli/db.js +90 -0
  138. package/dist/cli/db.js.map +1 -0
  139. package/dist/cli/formatter.d.ts +87 -0
  140. package/dist/cli/formatter.d.ts.map +1 -0
  141. package/dist/cli/formatter.js +464 -0
  142. package/dist/cli/formatter.js.map +1 -0
  143. package/dist/cli/index.d.ts +33 -0
  144. package/dist/cli/index.d.ts.map +1 -0
  145. package/dist/cli/index.js +38 -0
  146. package/dist/cli/index.js.map +1 -0
  147. package/dist/cli/parser.d.ts +45 -0
  148. package/dist/cli/parser.d.ts.map +1 -0
  149. package/dist/cli/parser.js +256 -0
  150. package/dist/cli/parser.js.map +1 -0
  151. package/dist/cli/plugin-loader.d.ts +39 -0
  152. package/dist/cli/plugin-loader.d.ts.map +1 -0
  153. package/dist/cli/plugin-loader.js +165 -0
  154. package/dist/cli/plugin-loader.js.map +1 -0
  155. package/dist/cli/plugin-registry.d.ts +50 -0
  156. package/dist/cli/plugin-registry.d.ts.map +1 -0
  157. package/dist/cli/plugin-registry.js +206 -0
  158. package/dist/cli/plugin-registry.js.map +1 -0
  159. package/dist/cli/plugin-types.d.ts +106 -0
  160. package/dist/cli/plugin-types.d.ts.map +1 -0
  161. package/dist/cli/plugin-types.js +103 -0
  162. package/dist/cli/plugin-types.js.map +1 -0
  163. package/dist/cli/runner.d.ts +35 -0
  164. package/dist/cli/runner.d.ts.map +1 -0
  165. package/dist/cli/runner.js +340 -0
  166. package/dist/cli/runner.js.map +1 -0
  167. package/dist/cli/suggest.d.ts +15 -0
  168. package/dist/cli/suggest.d.ts.map +1 -0
  169. package/dist/cli/suggest.js +49 -0
  170. package/dist/cli/suggest.js.map +1 -0
  171. package/dist/cli/types.d.ts +138 -0
  172. package/dist/cli/types.d.ts.map +1 -0
  173. package/dist/cli/types.js +63 -0
  174. package/dist/cli/types.js.map +1 -0
  175. package/dist/config/config.d.ts +86 -0
  176. package/dist/config/config.d.ts.map +1 -0
  177. package/dist/config/config.js +348 -0
  178. package/dist/config/config.js.map +1 -0
  179. package/dist/config/defaults.d.ts +66 -0
  180. package/dist/config/defaults.d.ts.map +1 -0
  181. package/dist/config/defaults.js +114 -0
  182. package/dist/config/defaults.js.map +1 -0
  183. package/dist/config/duration.d.ts +75 -0
  184. package/dist/config/duration.d.ts.map +1 -0
  185. package/dist/config/duration.js +190 -0
  186. package/dist/config/duration.js.map +1 -0
  187. package/dist/config/env.d.ts +67 -0
  188. package/dist/config/env.d.ts.map +1 -0
  189. package/dist/config/env.js +207 -0
  190. package/dist/config/env.js.map +1 -0
  191. package/dist/config/file.d.ts +97 -0
  192. package/dist/config/file.d.ts.map +1 -0
  193. package/dist/config/file.js +365 -0
  194. package/dist/config/file.js.map +1 -0
  195. package/dist/config/index.d.ts +35 -0
  196. package/dist/config/index.d.ts.map +1 -0
  197. package/dist/config/index.js +41 -0
  198. package/dist/config/index.js.map +1 -0
  199. package/dist/config/merge.d.ts +53 -0
  200. package/dist/config/merge.d.ts.map +1 -0
  201. package/dist/config/merge.js +226 -0
  202. package/dist/config/merge.js.map +1 -0
  203. package/dist/config/types.d.ts +257 -0
  204. package/dist/config/types.d.ts.map +1 -0
  205. package/dist/config/types.js +72 -0
  206. package/dist/config/types.js.map +1 -0
  207. package/dist/config/validation.d.ts +55 -0
  208. package/dist/config/validation.d.ts.map +1 -0
  209. package/dist/config/validation.js +251 -0
  210. package/dist/config/validation.js.map +1 -0
  211. package/dist/http/index.d.ts +8 -0
  212. package/dist/http/index.d.ts.map +1 -0
  213. package/dist/http/index.js +12 -0
  214. package/dist/http/index.js.map +1 -0
  215. package/dist/http/sync-handlers.d.ts +162 -0
  216. package/dist/http/sync-handlers.d.ts.map +1 -0
  217. package/dist/http/sync-handlers.js +271 -0
  218. package/dist/http/sync-handlers.js.map +1 -0
  219. package/dist/index.d.ts +25 -0
  220. package/dist/index.d.ts.map +1 -0
  221. package/dist/index.js +69 -0
  222. package/dist/index.js.map +1 -0
  223. package/dist/server/index.d.ts +34 -0
  224. package/dist/server/index.d.ts.map +1 -0
  225. package/dist/server/index.js +3329 -0
  226. package/dist/server/index.js.map +1 -0
  227. package/dist/server/static.d.ts +18 -0
  228. package/dist/server/static.d.ts.map +1 -0
  229. package/dist/server/static.js +71 -0
  230. package/dist/server/static.js.map +1 -0
  231. package/dist/server/ws/broadcaster.d.ts +8 -0
  232. package/dist/server/ws/broadcaster.d.ts.map +1 -0
  233. package/dist/server/ws/broadcaster.js +7 -0
  234. package/dist/server/ws/broadcaster.js.map +1 -0
  235. package/dist/server/ws/handler.d.ts +55 -0
  236. package/dist/server/ws/handler.d.ts.map +1 -0
  237. package/dist/server/ws/handler.js +160 -0
  238. package/dist/server/ws/handler.js.map +1 -0
  239. package/dist/services/blocked-cache.d.ts +297 -0
  240. package/dist/services/blocked-cache.d.ts.map +1 -0
  241. package/dist/services/blocked-cache.js +755 -0
  242. package/dist/services/blocked-cache.js.map +1 -0
  243. package/dist/services/dependency.d.ts +205 -0
  244. package/dist/services/dependency.d.ts.map +1 -0
  245. package/dist/services/dependency.js +566 -0
  246. package/dist/services/dependency.js.map +1 -0
  247. package/dist/services/embeddings/fusion.d.ts +33 -0
  248. package/dist/services/embeddings/fusion.d.ts.map +1 -0
  249. package/dist/services/embeddings/fusion.js +34 -0
  250. package/dist/services/embeddings/fusion.js.map +1 -0
  251. package/dist/services/embeddings/index.d.ts +12 -0
  252. package/dist/services/embeddings/index.d.ts.map +1 -0
  253. package/dist/services/embeddings/index.js +10 -0
  254. package/dist/services/embeddings/index.js.map +1 -0
  255. package/dist/services/embeddings/local-provider.d.ts +31 -0
  256. package/dist/services/embeddings/local-provider.d.ts.map +1 -0
  257. package/dist/services/embeddings/local-provider.js +80 -0
  258. package/dist/services/embeddings/local-provider.js.map +1 -0
  259. package/dist/services/embeddings/service.d.ts +76 -0
  260. package/dist/services/embeddings/service.d.ts.map +1 -0
  261. package/dist/services/embeddings/service.js +153 -0
  262. package/dist/services/embeddings/service.js.map +1 -0
  263. package/dist/services/embeddings/types.d.ts +70 -0
  264. package/dist/services/embeddings/types.d.ts.map +1 -0
  265. package/dist/services/embeddings/types.js +8 -0
  266. package/dist/services/embeddings/types.js.map +1 -0
  267. package/dist/services/id-length-cache.d.ts +156 -0
  268. package/dist/services/id-length-cache.d.ts.map +1 -0
  269. package/dist/services/id-length-cache.js +197 -0
  270. package/dist/services/id-length-cache.js.map +1 -0
  271. package/dist/services/inbox.d.ts +147 -0
  272. package/dist/services/inbox.d.ts.map +1 -0
  273. package/dist/services/inbox.js +428 -0
  274. package/dist/services/inbox.js.map +1 -0
  275. package/dist/services/index.d.ts +10 -0
  276. package/dist/services/index.d.ts.map +1 -0
  277. package/dist/services/index.js +10 -0
  278. package/dist/services/index.js.map +1 -0
  279. package/dist/services/priority-service.d.ts +145 -0
  280. package/dist/services/priority-service.d.ts.map +1 -0
  281. package/dist/services/priority-service.js +272 -0
  282. package/dist/services/priority-service.js.map +1 -0
  283. package/dist/services/search-utils.d.ts +47 -0
  284. package/dist/services/search-utils.d.ts.map +1 -0
  285. package/dist/services/search-utils.js +83 -0
  286. package/dist/services/search-utils.js.map +1 -0
  287. package/dist/sync/hash.d.ts +48 -0
  288. package/dist/sync/hash.d.ts.map +1 -0
  289. package/dist/sync/hash.js +136 -0
  290. package/dist/sync/hash.js.map +1 -0
  291. package/dist/sync/index.d.ts +11 -0
  292. package/dist/sync/index.d.ts.map +1 -0
  293. package/dist/sync/index.js +16 -0
  294. package/dist/sync/index.js.map +1 -0
  295. package/dist/sync/merge.d.ts +80 -0
  296. package/dist/sync/merge.d.ts.map +1 -0
  297. package/dist/sync/merge.js +310 -0
  298. package/dist/sync/merge.js.map +1 -0
  299. package/dist/sync/serialization.d.ts +132 -0
  300. package/dist/sync/serialization.d.ts.map +1 -0
  301. package/dist/sync/serialization.js +306 -0
  302. package/dist/sync/serialization.js.map +1 -0
  303. package/dist/sync/service.d.ts +102 -0
  304. package/dist/sync/service.d.ts.map +1 -0
  305. package/dist/sync/service.js +493 -0
  306. package/dist/sync/service.js.map +1 -0
  307. package/dist/sync/types.d.ts +275 -0
  308. package/dist/sync/types.d.ts.map +1 -0
  309. package/dist/sync/types.js +76 -0
  310. package/dist/sync/types.js.map +1 -0
  311. package/dist/systems/identity.d.ts +479 -0
  312. package/dist/systems/identity.d.ts.map +1 -0
  313. package/dist/systems/identity.js +817 -0
  314. package/dist/systems/identity.js.map +1 -0
  315. package/dist/systems/index.d.ts +8 -0
  316. package/dist/systems/index.d.ts.map +1 -0
  317. package/dist/systems/index.js +29 -0
  318. package/dist/systems/index.js.map +1 -0
  319. package/package.json +121 -0
  320. package/web/assets/charts-vendor-D1YcbGux.js +55 -0
  321. package/web/assets/dnd-vendor-DmxE-_ZH.js +5 -0
  322. package/web/assets/editor-vendor-BxraAWts.js +279 -0
  323. package/web/assets/index-B77vv208.js +341 -0
  324. package/web/assets/index-CF_XnVLh.css +1 -0
  325. package/web/assets/router-vendor-BCKpRBrB.js +41 -0
  326. package/web/assets/ui-vendor-DUahGnbT.js +45 -0
  327. package/web/assets/utils-vendor-CfYKiENT.js +813 -0
  328. package/web/favicon.ico +0 -0
  329. package/web/index.html +23 -0
  330. package/web/logo.png +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"library.js","sourceRoot":"","sources":["../../../src/cli/commands/library.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Message Commands - Message sending and threading CLI interface
3
+ *
4
+ * Provides CLI commands for message operations:
5
+ * - msg send: Send a message to a channel
6
+ * - msg thread: View thread replies
7
+ * - msg list: List messages in a channel
8
+ */
9
+ import type { Command } from '../types.js';
10
+ export declare const messageCommand: Command;
11
+ //# sourceMappingURL=message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/message.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,OAAO,EAA+C,MAAM,aAAa,CAAC;AAgsBxF,eAAO,MAAM,cAAc,EAAE,OA8C5B,CAAC"}
@@ -0,0 +1,608 @@
1
+ /**
2
+ * Message Commands - Message sending and threading CLI interface
3
+ *
4
+ * Provides CLI commands for message operations:
5
+ * - msg send: Send a message to a channel
6
+ * - msg thread: View thread replies
7
+ * - msg list: List messages in a channel
8
+ */
9
+ import { existsSync, readFileSync } from 'node:fs';
10
+ import { resolve } from 'node:path';
11
+ import { success, failure, ExitCode } from '../types.js';
12
+ import { getFormatter, getOutputMode } from '../formatter.js';
13
+ import { createMessage, filterByChannel, getThreadMessages, sortByCreatedAt, isRootMessage, } from '@stoneforge/core';
14
+ import { createDocument, ContentType, DocumentCategory, } from '@stoneforge/core';
15
+ import { isMember, isDirectChannel, findDirectChannel, createDirectChannel, } from '@stoneforge/core';
16
+ import { suggestCommands } from '../suggest.js';
17
+ import { resolveActor, createAPI } from '../db.js';
18
+ const msgSendOptions = [
19
+ {
20
+ name: 'channel',
21
+ short: 'c',
22
+ description: 'Channel ID to send to (required unless --to or --reply-to is used)',
23
+ hasValue: true,
24
+ },
25
+ {
26
+ name: 'to',
27
+ short: 'T',
28
+ description: 'Entity ID to send DM to (finds or creates DM channel)',
29
+ hasValue: true,
30
+ },
31
+ {
32
+ name: 'replyTo',
33
+ short: 'r',
34
+ description: 'Message ID to reply to (auto-sets channel, thread, and swaps sender/recipient in DM)',
35
+ hasValue: true,
36
+ },
37
+ {
38
+ name: 'content',
39
+ short: 'm',
40
+ description: 'Message content (text)',
41
+ hasValue: true,
42
+ },
43
+ {
44
+ name: 'file',
45
+ description: 'Read content from file',
46
+ hasValue: true,
47
+ },
48
+ {
49
+ name: 'thread',
50
+ short: 't',
51
+ description: 'Reply to message (thread ID)',
52
+ hasValue: true,
53
+ },
54
+ {
55
+ name: 'attachment',
56
+ short: 'a',
57
+ description: 'Attach document ID (can be repeated)',
58
+ hasValue: true,
59
+ array: true,
60
+ },
61
+ {
62
+ name: 'tag',
63
+ description: 'Add tag (can be repeated)',
64
+ hasValue: true,
65
+ array: true,
66
+ },
67
+ ];
68
+ async function msgSendHandler(_args, options) {
69
+ // Must specify either --content or --file
70
+ if (!options.content && !options.file) {
71
+ return failure('Either --content or --file is required', ExitCode.INVALID_ARGUMENTS);
72
+ }
73
+ if (options.content && options.file) {
74
+ return failure('Cannot specify both --content and --file', ExitCode.INVALID_ARGUMENTS);
75
+ }
76
+ // Must have one of: --channel, --to, or --reply-to
77
+ if (!options.channel && !options.to && !options.replyTo) {
78
+ return failure('One of --channel, --to, or --reply-to is required', ExitCode.INVALID_ARGUMENTS);
79
+ }
80
+ const { api, error } = createAPI(options, true);
81
+ if (error) {
82
+ return failure(error, ExitCode.GENERAL_ERROR);
83
+ }
84
+ try {
85
+ let actor = resolveActor(options);
86
+ let channelId = options.channel;
87
+ let threadId = options.thread ? options.thread : null;
88
+ // Handle --reply-to: auto-set channel, thread, and swap sender/recipient in DM
89
+ if (options.replyTo) {
90
+ const replyToMessage = await api.get(options.replyTo);
91
+ if (!replyToMessage) {
92
+ return failure(`Reply-to message not found: ${options.replyTo}`, ExitCode.NOT_FOUND);
93
+ }
94
+ if (replyToMessage.type !== 'message') {
95
+ return failure(`Element ${options.replyTo} is not a message (type: ${replyToMessage.type})`, ExitCode.VALIDATION);
96
+ }
97
+ // Set channel from replied-to message
98
+ channelId = replyToMessage.channelId;
99
+ // Set thread: use replied-to message's thread, or if not in a thread, use the message itself
100
+ threadId = replyToMessage.threadId ?? replyToMessage.id;
101
+ // If in a DM channel and --from/--actor not explicitly set, swap sender/recipient
102
+ if (!options.actor) {
103
+ const replyChannel = await api.get(channelId);
104
+ if (replyChannel && isDirectChannel(replyChannel)) {
105
+ // Get the other party in the DM channel
106
+ const otherParty = replyChannel.members.find((m) => m !== replyToMessage.sender);
107
+ if (otherParty) {
108
+ actor = otherParty;
109
+ }
110
+ }
111
+ }
112
+ }
113
+ // Handle --to: find or create DM channel between actor and target
114
+ if (options.to) {
115
+ const toEntity = options.to;
116
+ // Validate target entity exists
117
+ const targetEntity = await api.get(toEntity);
118
+ if (!targetEntity) {
119
+ return failure(`Target entity not found: ${toEntity}`, ExitCode.NOT_FOUND);
120
+ }
121
+ if (targetEntity.type !== 'entity') {
122
+ return failure(`Element ${toEntity} is not an entity (type: ${targetEntity.type})`, ExitCode.VALIDATION);
123
+ }
124
+ // Find existing DM channel
125
+ const allChannels = await api.list({ type: 'channel' });
126
+ let dmChannel = findDirectChannel(allChannels, actor, toEntity);
127
+ // Create DM channel if not found
128
+ if (!dmChannel) {
129
+ // Look up entity names for channel naming
130
+ const actorEntity = await api.get(actor);
131
+ const actorName = actorEntity?.name;
132
+ const targetName = targetEntity.name;
133
+ const newDmChannel = await createDirectChannel({
134
+ entityA: actor,
135
+ entityB: toEntity,
136
+ createdBy: actor,
137
+ ...(actorName && { entityAName: actorName }),
138
+ ...(targetName && { entityBName: targetName }),
139
+ });
140
+ dmChannel = await api.create(newDmChannel);
141
+ }
142
+ channelId = dmChannel.id;
143
+ }
144
+ if (!channelId) {
145
+ return failure('Could not determine channel', ExitCode.GENERAL_ERROR);
146
+ }
147
+ // Validate channel exists and sender is a member
148
+ const channel = await api.get(channelId);
149
+ if (!channel) {
150
+ return failure(`Channel not found: ${channelId}`, ExitCode.NOT_FOUND);
151
+ }
152
+ if (channel.type !== 'channel') {
153
+ return failure(`Element ${channelId} is not a channel (type: ${channel.type})`, ExitCode.VALIDATION);
154
+ }
155
+ if (!isMember(channel, actor)) {
156
+ return failure(`You are not a member of channel ${channelId}`, ExitCode.PERMISSION);
157
+ }
158
+ // Get content
159
+ let content;
160
+ if (options.content) {
161
+ content = options.content;
162
+ }
163
+ else {
164
+ const filePath = resolve(options.file);
165
+ if (!existsSync(filePath)) {
166
+ return failure(`File not found: ${filePath}`, ExitCode.NOT_FOUND);
167
+ }
168
+ content = readFileSync(filePath, 'utf-8');
169
+ }
170
+ // Create content document (immutable, categorized as message content)
171
+ const contentDoc = await createDocument({
172
+ content,
173
+ contentType: ContentType.TEXT,
174
+ createdBy: actor,
175
+ category: DocumentCategory.MESSAGE_CONTENT,
176
+ immutable: true,
177
+ });
178
+ const createdContentDoc = await api.create(contentDoc);
179
+ // Validate thread parent if specified (and not already set by --reply-to)
180
+ if (options.thread && !options.replyTo) {
181
+ const threadParent = await api.get(options.thread);
182
+ if (!threadParent) {
183
+ return failure(`Thread parent message not found: ${options.thread}`, ExitCode.NOT_FOUND);
184
+ }
185
+ if (threadParent.type !== 'message') {
186
+ return failure(`Element ${options.thread} is not a message (type: ${threadParent.type})`, ExitCode.VALIDATION);
187
+ }
188
+ if (threadParent.channelId !== channelId) {
189
+ return failure(`Thread parent message is in a different channel`, ExitCode.VALIDATION);
190
+ }
191
+ threadId = options.thread;
192
+ }
193
+ // Handle attachments
194
+ let attachments;
195
+ if (options.attachment) {
196
+ const attachmentIds = Array.isArray(options.attachment)
197
+ ? options.attachment
198
+ : [options.attachment];
199
+ attachments = [];
200
+ for (const attachmentId of attachmentIds) {
201
+ const attachmentDoc = await api.get(attachmentId);
202
+ if (!attachmentDoc) {
203
+ return failure(`Attachment document not found: ${attachmentId}`, ExitCode.NOT_FOUND);
204
+ }
205
+ if (attachmentDoc.type !== 'document') {
206
+ return failure(`Attachment ${attachmentId} is not a document (type: ${attachmentDoc.type})`, ExitCode.VALIDATION);
207
+ }
208
+ attachments.push(attachmentId);
209
+ }
210
+ }
211
+ // Handle tags
212
+ let tags;
213
+ if (options.tag) {
214
+ tags = Array.isArray(options.tag) ? options.tag : [options.tag];
215
+ }
216
+ // Create the message
217
+ const message = await createMessage({
218
+ channelId,
219
+ sender: actor,
220
+ contentRef: createdContentDoc.id,
221
+ attachments,
222
+ threadId,
223
+ tags,
224
+ });
225
+ const createdMessage = await api.create(message);
226
+ const mode = getOutputMode(options);
227
+ if (mode === 'quiet') {
228
+ return success(createdMessage.id);
229
+ }
230
+ const replyInfo = threadId ? ` (reply to ${threadId})` : '';
231
+ return success(createdMessage, `Sent message ${createdMessage.id} to ${channelId}${replyInfo}`);
232
+ }
233
+ catch (err) {
234
+ const message = err instanceof Error ? err.message : String(err);
235
+ return failure(`Failed to send message: ${message}`, ExitCode.GENERAL_ERROR);
236
+ }
237
+ }
238
+ const msgSendCommand = {
239
+ name: 'send',
240
+ description: 'Send a message to a channel or entity',
241
+ usage: 'sf message send (--channel <id> | --to <entity> | --reply-to <msg>) --content <text> | --file <path> [options]',
242
+ help: `Send a message to a channel, entity (DM), or as a reply.
243
+
244
+ Options:
245
+ -c, --channel <id> Channel to send to
246
+ -T, --to <entity> Entity to send DM to (finds or creates DM channel)
247
+ -r, --reply-to <msg> Message ID to reply to (auto-sets channel, thread, swaps sender/recipient in DM)
248
+ -m, --content <text> Message content
249
+ --file <path> Read content from file
250
+ -t, --thread <id> Reply to message (creates thread)
251
+ -a, --attachment <id> Attach document (can be repeated)
252
+ --tag <tag> Add tag (can be repeated)
253
+
254
+ When using --to, a DM channel is found or created between you and the target entity.
255
+ When using --reply-to in a DM channel, sender/recipient are automatically swapped.
256
+
257
+ Examples:
258
+ sf message send --channel el-abc123 --content "Hello!"
259
+ sf message send --to el-user456 -m "Direct message"
260
+ sf message send --reply-to el-msg789 -m "Reply to your message"
261
+ sf --from agent-1 msg send --to agent-2 -m "Message from agent-1"
262
+ sf message send -c el-abc123 --file message.txt
263
+ sf message send -c el-abc123 -m "Reply" --thread el-msg456`,
264
+ options: msgSendOptions,
265
+ handler: msgSendHandler,
266
+ };
267
+ const msgThreadOptions = [
268
+ {
269
+ name: 'limit',
270
+ short: 'l',
271
+ description: 'Maximum number of messages to show',
272
+ hasValue: true,
273
+ },
274
+ ];
275
+ async function msgThreadHandler(args, options) {
276
+ const [messageId] = args;
277
+ if (!messageId) {
278
+ return failure('Usage: sf message thread <message-id>\nExample: sf message thread el-msg123', ExitCode.INVALID_ARGUMENTS);
279
+ }
280
+ const { api, error } = createAPI(options);
281
+ if (error) {
282
+ return failure(error, ExitCode.GENERAL_ERROR);
283
+ }
284
+ try {
285
+ // Get the root message
286
+ const rootMessage = await api.get(messageId, { hydrate: { content: true } });
287
+ if (!rootMessage) {
288
+ return failure(`Message not found: ${messageId}`, ExitCode.NOT_FOUND);
289
+ }
290
+ if (rootMessage.type !== 'message') {
291
+ return failure(`Element ${messageId} is not a message (type: ${rootMessage.type})`, ExitCode.VALIDATION);
292
+ }
293
+ // Get all messages in the channel
294
+ const allMessages = await api.list({ type: 'message' });
295
+ const channelMessages = filterByChannel(allMessages, rootMessage.channelId);
296
+ // Get thread messages (root + replies)
297
+ const threadMessages = getThreadMessages(channelMessages, messageId);
298
+ // Apply limit
299
+ let messages = threadMessages;
300
+ if (options.limit) {
301
+ const limit = parseInt(options.limit, 10);
302
+ if (isNaN(limit) || limit < 1) {
303
+ return failure('Limit must be a positive number', ExitCode.VALIDATION);
304
+ }
305
+ messages = threadMessages.slice(0, limit);
306
+ }
307
+ // Hydrate content for display
308
+ const hydratedMessages = [];
309
+ for (const msg of messages) {
310
+ const hydrated = await api.get(msg.id, { hydrate: { content: true } });
311
+ if (hydrated) {
312
+ hydratedMessages.push(hydrated);
313
+ }
314
+ }
315
+ const mode = getOutputMode(options);
316
+ const formatter = getFormatter(mode);
317
+ if (mode === 'json') {
318
+ return success(hydratedMessages);
319
+ }
320
+ if (mode === 'quiet') {
321
+ return success(hydratedMessages.map((m) => m.id).join('\n'));
322
+ }
323
+ if (hydratedMessages.length === 0) {
324
+ return success(null, 'No messages in thread');
325
+ }
326
+ // Build table
327
+ const headers = ['ID', 'SENDER', 'CONTENT', 'CREATED'];
328
+ const rows = hydratedMessages.map((m) => {
329
+ const contentPreview = (m.content ?? '').substring(0, 40);
330
+ const truncated = contentPreview.length < (m.content?.length ?? 0) ? '...' : '';
331
+ return [
332
+ m.id,
333
+ m.sender,
334
+ contentPreview + truncated,
335
+ m.createdAt.split('T')[0],
336
+ ];
337
+ });
338
+ const table = formatter.table(headers, rows);
339
+ const threadInfo = isRootMessage(rootMessage)
340
+ ? 'Root message with'
341
+ : 'Reply to ' + rootMessage.threadId + ' with';
342
+ const summary = `\n${threadInfo} ${hydratedMessages.length - 1} replies`;
343
+ return success(hydratedMessages, table + summary);
344
+ }
345
+ catch (err) {
346
+ const message = err instanceof Error ? err.message : String(err);
347
+ return failure(`Failed to get thread: ${message}`, ExitCode.GENERAL_ERROR);
348
+ }
349
+ }
350
+ const msgThreadCommand = {
351
+ name: 'thread',
352
+ description: 'View thread messages',
353
+ usage: 'sf message thread <message-id> [options]',
354
+ help: `View a message thread (root message and all replies).
355
+
356
+ Arguments:
357
+ message-id Message identifier (root or any reply)
358
+
359
+ Options:
360
+ -l, --limit <n> Maximum messages to show
361
+
362
+ Examples:
363
+ sf message thread el-msg123
364
+ sf message thread el-msg123 --limit 10`,
365
+ options: msgThreadOptions,
366
+ handler: msgThreadHandler,
367
+ };
368
+ const msgListOptions = [
369
+ {
370
+ name: 'channel',
371
+ short: 'c',
372
+ description: 'Channel ID to list messages from (required)',
373
+ hasValue: true,
374
+ required: true,
375
+ },
376
+ {
377
+ name: 'sender',
378
+ short: 's',
379
+ description: 'Filter by sender entity ID',
380
+ hasValue: true,
381
+ },
382
+ {
383
+ name: 'limit',
384
+ short: 'l',
385
+ description: 'Maximum number of messages',
386
+ hasValue: true,
387
+ },
388
+ {
389
+ name: 'rootOnly',
390
+ short: 'r',
391
+ description: 'Show only root messages (no replies)',
392
+ hasValue: false,
393
+ },
394
+ ];
395
+ async function msgListHandler(_args, options) {
396
+ if (!options.channel) {
397
+ return failure('--channel is required', ExitCode.INVALID_ARGUMENTS);
398
+ }
399
+ const { api, error } = createAPI(options);
400
+ if (error) {
401
+ return failure(error, ExitCode.GENERAL_ERROR);
402
+ }
403
+ try {
404
+ const channelId = options.channel;
405
+ // Validate channel exists
406
+ const channel = await api.get(channelId);
407
+ if (!channel) {
408
+ return failure(`Channel not found: ${channelId}`, ExitCode.NOT_FOUND);
409
+ }
410
+ if (channel.type !== 'channel') {
411
+ return failure(`Element ${channelId} is not a channel (type: ${channel.type})`, ExitCode.VALIDATION);
412
+ }
413
+ // Get all messages
414
+ const allMessages = await api.list({ type: 'message' });
415
+ // Filter by channel
416
+ let messages = filterByChannel(allMessages, channelId);
417
+ // Filter by sender if specified
418
+ if (options.sender) {
419
+ messages = messages.filter((m) => m.sender === options.sender);
420
+ }
421
+ // Filter root-only if specified
422
+ if (options.rootOnly) {
423
+ messages = messages.filter(isRootMessage);
424
+ }
425
+ // Sort by creation time
426
+ messages = sortByCreatedAt(messages);
427
+ // Apply limit
428
+ if (options.limit) {
429
+ const limit = parseInt(options.limit, 10);
430
+ if (isNaN(limit) || limit < 1) {
431
+ return failure('Limit must be a positive number', ExitCode.VALIDATION);
432
+ }
433
+ messages = messages.slice(0, limit);
434
+ }
435
+ // Hydrate content for display
436
+ const hydratedMessages = [];
437
+ for (const msg of messages) {
438
+ const hydrated = await api.get(msg.id, { hydrate: { content: true } });
439
+ if (hydrated) {
440
+ hydratedMessages.push(hydrated);
441
+ }
442
+ }
443
+ const mode = getOutputMode(options);
444
+ const formatter = getFormatter(mode);
445
+ if (mode === 'json') {
446
+ return success(hydratedMessages);
447
+ }
448
+ if (mode === 'quiet') {
449
+ return success(hydratedMessages.map((m) => m.id).join('\n'));
450
+ }
451
+ if (hydratedMessages.length === 0) {
452
+ return success(null, 'No messages found');
453
+ }
454
+ // Build table
455
+ const headers = ['ID', 'SENDER', 'THREAD', 'CONTENT', 'CREATED'];
456
+ const rows = hydratedMessages.map((m) => {
457
+ const contentPreview = (m.content ?? '').substring(0, 35);
458
+ const truncated = contentPreview.length < (m.content?.length ?? 0) ? '...' : '';
459
+ return [
460
+ m.id,
461
+ m.sender,
462
+ m.threadId ? `→${m.threadId.substring(0, 8)}` : '-',
463
+ contentPreview + truncated,
464
+ m.createdAt.split('T')[0],
465
+ ];
466
+ });
467
+ const table = formatter.table(headers, rows);
468
+ const summary = `\n${hydratedMessages.length} message(s) in channel ${channelId}`;
469
+ return success(hydratedMessages, table + summary);
470
+ }
471
+ catch (err) {
472
+ const message = err instanceof Error ? err.message : String(err);
473
+ return failure(`Failed to list messages: ${message}`, ExitCode.GENERAL_ERROR);
474
+ }
475
+ }
476
+ const msgListCommand = {
477
+ name: 'list',
478
+ description: 'List messages in a channel',
479
+ usage: 'sf message list --channel <id> [options]',
480
+ help: `List messages in a channel.
481
+
482
+ Options:
483
+ -c, --channel <id> Channel to list messages from (required)
484
+ -s, --sender <id> Filter by sender entity
485
+ -l, --limit <n> Maximum messages to show
486
+ -r, --rootOnly Show only root messages (no replies)
487
+
488
+ Examples:
489
+ sf message list --channel el-abc123
490
+ sf message list -c el-abc123 --sender el-user456
491
+ sf message list -c el-abc123 --rootOnly --limit 20`,
492
+ options: msgListOptions,
493
+ handler: msgListHandler,
494
+ };
495
+ const msgReplyOptions = [
496
+ {
497
+ name: 'content',
498
+ short: 'm',
499
+ description: 'Message content (text)',
500
+ hasValue: true,
501
+ },
502
+ {
503
+ name: 'file',
504
+ description: 'Read content from file',
505
+ hasValue: true,
506
+ },
507
+ {
508
+ name: 'attachment',
509
+ short: 'a',
510
+ description: 'Attach document ID (can be repeated)',
511
+ hasValue: true,
512
+ array: true,
513
+ },
514
+ {
515
+ name: 'tag',
516
+ description: 'Add tag (can be repeated)',
517
+ hasValue: true,
518
+ array: true,
519
+ },
520
+ ];
521
+ async function msgReplyHandler(args, options) {
522
+ const [messageId] = args;
523
+ if (!messageId) {
524
+ return failure('Usage: sf message reply <message-id> --content <text> | --file <path>\nExample: sf message reply el-msg123 --content "Thanks!"', ExitCode.INVALID_ARGUMENTS);
525
+ }
526
+ // Delegate to send handler with --reply-to set
527
+ return msgSendHandler([], {
528
+ ...options,
529
+ replyTo: messageId,
530
+ });
531
+ }
532
+ const msgReplyCommand = {
533
+ name: 'reply',
534
+ description: 'Reply to a message (shorthand for send --reply-to)',
535
+ usage: 'sf message reply <message-id> --content <text> | --file <path> [options]',
536
+ help: `Reply to a message.
537
+
538
+ This is a shorthand for "sf message send --reply-to <message-id>".
539
+ It automatically sets the channel and thread from the replied-to message.
540
+ In DM channels, sender/recipient are automatically swapped unless --from is specified.
541
+
542
+ Arguments:
543
+ message-id Message to reply to
544
+
545
+ Options:
546
+ -m, --content <text> Message content
547
+ --file <path> Read content from file
548
+ -a, --attachment <id> Attach document (can be repeated)
549
+ --tag <tag> Add tag (can be repeated)
550
+
551
+ Use --from (or --actor) to override the sender:
552
+ sf --from agent-1 msg reply el-msg123 -m "Reply as agent-1"
553
+
554
+ Examples:
555
+ sf message reply el-msg123 --content "Thanks for the update!"
556
+ sf message reply el-msg123 --file response.txt
557
+ sf --from bot msg reply el-msg123 -m "Automated response"`,
558
+ options: msgReplyOptions,
559
+ handler: msgReplyHandler,
560
+ };
561
+ // ============================================================================
562
+ // Message Root Command
563
+ // ============================================================================
564
+ export const messageCommand = {
565
+ name: 'message',
566
+ description: 'Send and manage messages',
567
+ usage: 'sf message <subcommand> [options]',
568
+ help: `Send and manage messages in channels.
569
+
570
+ Messages are immutable - once sent, they cannot be edited or deleted.
571
+ This ensures a reliable audit trail of all communication.
572
+
573
+ Subcommands:
574
+ send Send a message to a channel, entity, or as a reply
575
+ reply Reply to a message (shorthand for send --reply-to)
576
+ list List messages in a channel
577
+ thread View a message thread
578
+
579
+ Examples:
580
+ sf message send --channel el-abc123 --content "Hello!"
581
+ sf message send --to el-user456 -m "Direct message"
582
+ sf message reply el-msg789 -m "Reply to your message"
583
+ sf message list --channel el-abc123
584
+ sf message thread el-msg456`,
585
+ subcommands: {
586
+ send: msgSendCommand,
587
+ reply: msgReplyCommand,
588
+ list: msgListCommand,
589
+ thread: msgThreadCommand,
590
+ // Aliases (hidden from --help via dedup in getCommandHelp)
591
+ ls: msgListCommand,
592
+ },
593
+ handler: async (args, _options) => {
594
+ if (args.length === 0) {
595
+ return failure(`Usage: sf message <subcommand>. Use 'sf message --help' for available subcommands.`, ExitCode.INVALID_ARGUMENTS);
596
+ }
597
+ // Show "did you mean?" for unknown subcommands
598
+ const subNames = Object.keys(messageCommand.subcommands);
599
+ const suggestions = suggestCommands(args[0], subNames);
600
+ let msg = `Unknown subcommand: ${args[0]}`;
601
+ if (suggestions.length > 0) {
602
+ msg += `\n\nDid you mean?\n${suggestions.map(s => ` ${s}`).join('\n')}`;
603
+ }
604
+ msg += '\n\nRun "sf message --help" to see available subcommands.';
605
+ return failure(msg, ExitCode.INVALID_ARGUMENTS);
606
+ },
607
+ };
608
+ //# sourceMappingURL=message.js.map