@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,465 @@
1
+ /**
2
+ * Admin Commands - System health and maintenance operations
3
+ *
4
+ * Provides commands for:
5
+ * - doctor: Check system health and diagnose issues
6
+ * - migrate: Run database migrations
7
+ */
8
+ import { existsSync } from 'node:fs';
9
+ import { join } from 'node:path';
10
+ import { success, failure, ExitCode } from '../types.js';
11
+ import { createStorage } from '@stoneforge/storage';
12
+ import { initializeSchema, getSchemaVersion, isSchemaUpToDate, getPendingMigrations, validateSchema, CURRENT_SCHEMA_VERSION, MIGRATIONS, } from '@stoneforge/storage';
13
+ import { resolveDatabasePath, STONEFORGE_DIR, DEFAULT_DB_NAME } from '../db.js';
14
+ async function doctorHandler(_args, options) {
15
+ const diagnostics = [];
16
+ // 1. Check workspace exists
17
+ const stoneforgeDir = join(process.cwd(), STONEFORGE_DIR);
18
+ const workspaceExists = existsSync(stoneforgeDir);
19
+ if (!workspaceExists && !options.db) {
20
+ diagnostics.push({
21
+ name: 'workspace',
22
+ status: 'error',
23
+ message: 'No .stoneforge directory found',
24
+ details: { path: stoneforgeDir },
25
+ });
26
+ return buildDoctorResult(diagnostics, options);
27
+ }
28
+ diagnostics.push({
29
+ name: 'workspace',
30
+ status: 'ok',
31
+ message: options.db ? `Using custom database path: ${options.db}` : `Workspace found at ${stoneforgeDir}`,
32
+ });
33
+ // 2. Check database file exists
34
+ const dbPath = resolveDatabasePath(options);
35
+ if (!dbPath) {
36
+ diagnostics.push({
37
+ name: 'database',
38
+ status: 'error',
39
+ message: 'Database file not found',
40
+ details: { expectedPath: join(stoneforgeDir, DEFAULT_DB_NAME) },
41
+ });
42
+ return buildDoctorResult(diagnostics, options);
43
+ }
44
+ diagnostics.push({
45
+ name: 'database',
46
+ status: 'ok',
47
+ message: `Database found at ${dbPath}`,
48
+ });
49
+ // 3. Check database can be opened
50
+ let backend;
51
+ try {
52
+ // Use create: true to allow opening existing databases without error
53
+ // This doesn't create a new database, just allows opening existing ones
54
+ backend = createStorage({ path: dbPath, create: true });
55
+ diagnostics.push({
56
+ name: 'connection',
57
+ status: 'ok',
58
+ message: 'Database connection successful',
59
+ });
60
+ }
61
+ catch (err) {
62
+ const message = err instanceof Error ? err.message : String(err);
63
+ diagnostics.push({
64
+ name: 'connection',
65
+ status: 'error',
66
+ message: `Failed to open database: ${message}`,
67
+ });
68
+ return buildDoctorResult(diagnostics, options);
69
+ }
70
+ // 4. Check schema version
71
+ const schemaVersion = getSchemaVersion(backend);
72
+ const schemaUpToDate = isSchemaUpToDate(backend);
73
+ if (schemaVersion === 0) {
74
+ diagnostics.push({
75
+ name: 'schema_version',
76
+ status: 'error',
77
+ message: 'Database schema not initialized',
78
+ details: { currentVersion: 0, expectedVersion: CURRENT_SCHEMA_VERSION },
79
+ });
80
+ }
81
+ else if (!schemaUpToDate) {
82
+ const pendingMigrations = getPendingMigrations(backend);
83
+ diagnostics.push({
84
+ name: 'schema_version',
85
+ status: 'warning',
86
+ message: `Schema version ${schemaVersion} is behind (current: ${CURRENT_SCHEMA_VERSION})`,
87
+ details: {
88
+ currentVersion: schemaVersion,
89
+ expectedVersion: CURRENT_SCHEMA_VERSION,
90
+ pendingMigrations: pendingMigrations.map((m) => ({
91
+ version: m.version,
92
+ description: m.description,
93
+ })),
94
+ },
95
+ });
96
+ }
97
+ else {
98
+ diagnostics.push({
99
+ name: 'schema_version',
100
+ status: 'ok',
101
+ message: `Schema is at version ${schemaVersion} (up to date)`,
102
+ });
103
+ }
104
+ // 5. Validate schema tables
105
+ const schemaValidation = validateSchema(backend);
106
+ if (!schemaValidation.valid) {
107
+ diagnostics.push({
108
+ name: 'schema_tables',
109
+ status: 'error',
110
+ message: `Missing tables: ${schemaValidation.missingTables.join(', ')}`,
111
+ details: {
112
+ missingTables: schemaValidation.missingTables,
113
+ extraTables: schemaValidation.extraTables,
114
+ },
115
+ });
116
+ }
117
+ else {
118
+ diagnostics.push({
119
+ name: 'schema_tables',
120
+ status: 'ok',
121
+ message: 'All expected tables present',
122
+ details: schemaValidation.extraTables.length > 0
123
+ ? { extraTables: schemaValidation.extraTables }
124
+ : undefined,
125
+ });
126
+ }
127
+ // 6. Check database integrity
128
+ try {
129
+ const integrityResult = backend.query('PRAGMA integrity_check');
130
+ if (integrityResult.length === 1 && integrityResult[0].integrity_check === 'ok') {
131
+ diagnostics.push({
132
+ name: 'integrity',
133
+ status: 'ok',
134
+ message: 'Database integrity check passed',
135
+ });
136
+ }
137
+ else {
138
+ diagnostics.push({
139
+ name: 'integrity',
140
+ status: 'error',
141
+ message: 'Database integrity check failed',
142
+ details: { issues: integrityResult.map((r) => r.integrity_check) },
143
+ });
144
+ }
145
+ }
146
+ catch (err) {
147
+ const message = err instanceof Error ? err.message : String(err);
148
+ diagnostics.push({
149
+ name: 'integrity',
150
+ status: 'error',
151
+ message: `Integrity check failed: ${message}`,
152
+ });
153
+ }
154
+ // 7. Check foreign key integrity
155
+ try {
156
+ const fkResult = backend.query('PRAGMA foreign_key_check');
157
+ if (fkResult.length === 0) {
158
+ diagnostics.push({
159
+ name: 'foreign_keys',
160
+ status: 'ok',
161
+ message: 'Foreign key constraints satisfied',
162
+ });
163
+ }
164
+ else {
165
+ diagnostics.push({
166
+ name: 'foreign_keys',
167
+ status: 'warning',
168
+ message: `${fkResult.length} foreign key violations found`,
169
+ details: {
170
+ violations: fkResult.slice(0, 10).map((r) => ({
171
+ table: r.table,
172
+ rowid: r.rowid,
173
+ parent: r.parent,
174
+ })),
175
+ totalViolations: fkResult.length,
176
+ },
177
+ });
178
+ }
179
+ }
180
+ catch (err) {
181
+ const message = err instanceof Error ? err.message : String(err);
182
+ diagnostics.push({
183
+ name: 'foreign_keys',
184
+ status: 'warning',
185
+ message: `Foreign key check failed: ${message}`,
186
+ });
187
+ }
188
+ // 8. Check blocked cache consistency
189
+ try {
190
+ // Check 1: Orphaned entries - cache entries referencing elements that don't exist
191
+ const orphanedCache = backend.query(`
192
+ SELECT COUNT(*) as count
193
+ FROM blocked_cache bc
194
+ LEFT JOIN elements e ON bc.element_id = e.id
195
+ WHERE e.id IS NULL
196
+ `);
197
+ // Check 2: Tasks with status='blocked' but no blocked_cache entry
198
+ // These are tasks that have blocked status but the cache doesn't know about them
199
+ const tasksWithBlockedStatusMissingCache = backend.query(`
200
+ SELECT COUNT(*) as count
201
+ FROM elements e
202
+ WHERE e.deleted_at IS NULL
203
+ AND e.type = 'task'
204
+ AND json_extract(e.data, '$.status') = 'blocked'
205
+ AND e.id NOT IN (SELECT element_id FROM blocked_cache)
206
+ `);
207
+ // Check 3: Get total counts for diagnostics
208
+ const blockedCacheCount = backend.query('SELECT COUNT(*) as count FROM blocked_cache');
209
+ const blockedStatusCount = backend.query(`
210
+ SELECT COUNT(*) as count
211
+ FROM elements e
212
+ WHERE e.deleted_at IS NULL
213
+ AND e.type = 'task'
214
+ AND json_extract(e.data, '$.status') = 'blocked'
215
+ `);
216
+ const orphanCount = orphanedCache[0].count;
217
+ const missingCacheCount = tasksWithBlockedStatusMissingCache[0].count;
218
+ const cacheEntries = blockedCacheCount[0].count;
219
+ const tasksWithBlockedStatus = blockedStatusCount[0].count;
220
+ if (orphanCount === 0 && missingCacheCount === 0) {
221
+ diagnostics.push({
222
+ name: 'blocked_cache',
223
+ status: 'ok',
224
+ message: 'Blocked cache is consistent',
225
+ details: options.verbose ? { cacheEntries, tasksWithBlockedStatus } : undefined,
226
+ });
227
+ }
228
+ else {
229
+ const issues = [];
230
+ const details = { cacheEntries, tasksWithBlockedStatus };
231
+ if (orphanCount > 0) {
232
+ issues.push(`${orphanCount} orphaned cache entries`);
233
+ details.orphanedCount = orphanCount;
234
+ }
235
+ if (missingCacheCount > 0) {
236
+ issues.push(`${missingCacheCount} blocked tasks missing from cache`);
237
+ details.missingCacheCount = missingCacheCount;
238
+ }
239
+ diagnostics.push({
240
+ name: 'blocked_cache',
241
+ status: 'warning',
242
+ message: `Blocked cache inconsistent: ${issues.join(', ')}. Cache may need rebuild.`,
243
+ details,
244
+ });
245
+ }
246
+ }
247
+ catch (err) {
248
+ const message = err instanceof Error ? err.message : String(err);
249
+ diagnostics.push({
250
+ name: 'blocked_cache',
251
+ status: 'warning',
252
+ message: `Blocked cache check failed: ${message}`,
253
+ });
254
+ }
255
+ // 9. Check database statistics
256
+ try {
257
+ const stats = backend.getStats();
258
+ diagnostics.push({
259
+ name: 'storage',
260
+ status: 'ok',
261
+ message: `Database size: ${formatBytes(stats.fileSize)}`,
262
+ details: { fileSize: stats.fileSize },
263
+ });
264
+ }
265
+ catch (err) {
266
+ const message = err instanceof Error ? err.message : String(err);
267
+ diagnostics.push({
268
+ name: 'storage',
269
+ status: 'warning',
270
+ message: `Could not get storage stats: ${message}`,
271
+ });
272
+ }
273
+ return buildDoctorResult(diagnostics, options);
274
+ }
275
+ /**
276
+ * Format bytes to human-readable size
277
+ */
278
+ function formatBytes(bytes) {
279
+ if (bytes === 0)
280
+ return '0 B';
281
+ const k = 1024;
282
+ const sizes = ['B', 'KB', 'MB', 'GB'];
283
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
284
+ return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i]}`;
285
+ }
286
+ /**
287
+ * Build the doctor result from diagnostics
288
+ */
289
+ function buildDoctorResult(diagnostics, options) {
290
+ const summary = {
291
+ ok: diagnostics.filter((d) => d.status === 'ok').length,
292
+ warning: diagnostics.filter((d) => d.status === 'warning').length,
293
+ error: diagnostics.filter((d) => d.status === 'error').length,
294
+ };
295
+ const healthy = summary.error === 0;
296
+ const result = {
297
+ healthy,
298
+ diagnostics,
299
+ summary,
300
+ };
301
+ // Build human-readable output
302
+ const lines = [];
303
+ lines.push('System Health Check');
304
+ lines.push('');
305
+ for (const diag of diagnostics) {
306
+ const statusIcon = diag.status === 'ok' ? '[OK]' : diag.status === 'warning' ? '[WARN]' : '[ERROR]';
307
+ lines.push(`${statusIcon} ${diag.name}: ${diag.message}`);
308
+ if (options.verbose && diag.details) {
309
+ for (const [key, value] of Object.entries(diag.details)) {
310
+ const valueStr = typeof value === 'object' ? JSON.stringify(value) : String(value);
311
+ lines.push(` ${key}: ${valueStr}`);
312
+ }
313
+ }
314
+ }
315
+ lines.push('');
316
+ lines.push(`Summary: ${summary.ok} ok, ${summary.warning} warnings, ${summary.error} errors`);
317
+ if (healthy) {
318
+ lines.push('');
319
+ lines.push('System is healthy.');
320
+ }
321
+ else {
322
+ lines.push('');
323
+ lines.push('Issues detected. Run "sf migrate" to fix schema issues.');
324
+ }
325
+ return {
326
+ exitCode: healthy ? ExitCode.SUCCESS : ExitCode.GENERAL_ERROR,
327
+ data: result,
328
+ message: lines.join('\n'),
329
+ };
330
+ }
331
+ async function migrateHandler(_args, options) {
332
+ // Check if database path can be resolved
333
+ const dbPath = resolveDatabasePath(options, false);
334
+ if (!dbPath) {
335
+ return failure('No database found. Run "sf init" to initialize a workspace, or specify --db path', ExitCode.GENERAL_ERROR);
336
+ }
337
+ // For dry-run, we need the database to exist
338
+ if (options.dryRun && !existsSync(dbPath)) {
339
+ return failure('No database found. Run "sf init" to initialize a workspace, or specify --db path', ExitCode.GENERAL_ERROR);
340
+ }
341
+ // Open database
342
+ let backend;
343
+ try {
344
+ backend = createStorage({ path: dbPath, create: true });
345
+ }
346
+ catch (err) {
347
+ const message = err instanceof Error ? err.message : String(err);
348
+ return failure(`Failed to open database: ${message}`, ExitCode.GENERAL_ERROR);
349
+ }
350
+ const previousVersion = getSchemaVersion(backend);
351
+ const pendingMigrations = getPendingMigrations(backend);
352
+ if (pendingMigrations.length === 0) {
353
+ return success({
354
+ previousVersion,
355
+ currentVersion: previousVersion,
356
+ migrationsApplied: [],
357
+ }, `Database is already at version ${previousVersion} (up to date)`);
358
+ }
359
+ // Dry run: just show what would be done
360
+ if (options.dryRun) {
361
+ const lines = [];
362
+ lines.push('Migrations to apply (dry run):');
363
+ lines.push('');
364
+ for (const migration of pendingMigrations) {
365
+ lines.push(` v${migration.version}: ${migration.description}`);
366
+ }
367
+ lines.push('');
368
+ lines.push(`Run "sf migrate" without --dry-run to apply these migrations.`);
369
+ return success({
370
+ previousVersion,
371
+ currentVersion: previousVersion,
372
+ pendingMigrations: pendingMigrations.map((m) => ({
373
+ version: m.version,
374
+ description: m.description,
375
+ })),
376
+ }, lines.join('\n'));
377
+ }
378
+ // Apply migrations
379
+ try {
380
+ const result = initializeSchema(backend);
381
+ const currentVersion = getSchemaVersion(backend);
382
+ const migrationsApplied = result.applied.map((version) => {
383
+ const migration = MIGRATIONS.find((m) => m.version === version);
384
+ return {
385
+ version,
386
+ description: migration?.description ?? 'Unknown migration',
387
+ };
388
+ });
389
+ const lines = [];
390
+ lines.push('Migration complete');
391
+ lines.push('');
392
+ lines.push(`Previous version: ${previousVersion}`);
393
+ lines.push(`Current version: ${currentVersion}`);
394
+ lines.push('');
395
+ if (migrationsApplied.length > 0) {
396
+ lines.push('Migrations applied:');
397
+ for (const m of migrationsApplied) {
398
+ lines.push(` v${m.version}: ${m.description}`);
399
+ }
400
+ }
401
+ return success({
402
+ previousVersion,
403
+ currentVersion,
404
+ migrationsApplied,
405
+ }, lines.join('\n'));
406
+ }
407
+ catch (err) {
408
+ const message = err instanceof Error ? err.message : String(err);
409
+ return failure(`Migration failed: ${message}`, ExitCode.GENERAL_ERROR);
410
+ }
411
+ }
412
+ // ============================================================================
413
+ // Command Definitions
414
+ // ============================================================================
415
+ export const doctorCommand = {
416
+ name: 'doctor',
417
+ description: 'Check system health and diagnose issues',
418
+ usage: 'sf doctor',
419
+ help: `Check system health and diagnose issues.
420
+
421
+ Performs the following checks:
422
+ - Workspace exists (.stoneforge directory)
423
+ - Database file exists and can be opened
424
+ - Schema version is current
425
+ - All expected tables are present
426
+ - Database integrity check (PRAGMA integrity_check)
427
+ - Foreign key constraint validation
428
+ - Blocked cache consistency
429
+ - Storage statistics
430
+
431
+ Use --verbose to see detailed diagnostic information.
432
+
433
+ Examples:
434
+ sf doctor Run all diagnostics
435
+ sf doctor --verbose Show detailed information
436
+ sf doctor --json Output as JSON`,
437
+ handler: doctorHandler,
438
+ };
439
+ export const migrateCommand = {
440
+ name: 'migrate',
441
+ description: 'Run database migrations',
442
+ usage: 'sf migrate [--dry-run]',
443
+ help: `Run database migrations to update the schema.
444
+
445
+ Migrations are run automatically when needed, but this command can be used to:
446
+ - Check what migrations would be applied (--dry-run)
447
+ - Manually trigger migration
448
+ - Verify migration status
449
+
450
+ Options:
451
+ --dry-run Show what migrations would be applied without running them
452
+
453
+ Examples:
454
+ sf migrate Run pending migrations
455
+ sf migrate --dry-run Preview migrations without applying`,
456
+ options: [
457
+ {
458
+ name: 'dry-run',
459
+ description: 'Show what would be done without making changes',
460
+ hasValue: false,
461
+ },
462
+ ],
463
+ handler: migrateHandler,
464
+ };
465
+ //# sourceMappingURL=admin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.js","sourceRoot":"","sources":["../../../src/cli/commands/admin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Alias Command - Show and manage command aliases
3
+ *
4
+ * Displays available command aliases.
5
+ */
6
+ import type { Command } from '../types.js';
7
+ export declare const aliasCommand: Command;
8
+ //# sourceMappingURL=alias.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alias.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/alias.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAiB,MAAM,aAAa,CAAC;AA2D1D,eAAO,MAAM,YAAY,EAAE,OAsB1B,CAAC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Alias Command - Show and manage command aliases
3
+ *
4
+ * Displays available command aliases.
5
+ */
6
+ import { success } from '../types.js';
7
+ import { getOutputMode, getFormatter } from '../formatter.js';
8
+ import { getAllAliases } from '../runner.js';
9
+ // ============================================================================
10
+ // Handler
11
+ // ============================================================================
12
+ function aliasHandler(_args, options) {
13
+ const aliasMap = getAllAliases();
14
+ const mode = getOutputMode(options);
15
+ if (mode === 'json') {
16
+ const aliases = {};
17
+ for (const [alias, target] of aliasMap) {
18
+ aliases[alias] = target;
19
+ }
20
+ return success(aliases);
21
+ }
22
+ if (aliasMap.size === 0) {
23
+ return success(null, 'No aliases defined');
24
+ }
25
+ if (mode === 'quiet') {
26
+ const lines = [];
27
+ for (const [alias, target] of aliasMap) {
28
+ lines.push(`${alias}=${target}`);
29
+ }
30
+ return success(lines.join('\n'));
31
+ }
32
+ // Human-readable output
33
+ const formatter = getFormatter(mode);
34
+ const headers = ['ALIAS', 'COMMAND'];
35
+ const rows = [];
36
+ // Sort aliases alphabetically
37
+ const sortedAliases = Array.from(aliasMap.entries()).sort((a, b) => a[0].localeCompare(b[0]));
38
+ for (const [alias, target] of sortedAliases) {
39
+ rows.push([alias, target]);
40
+ }
41
+ const table = formatter.table(headers, rows);
42
+ return success(null, `Command Aliases:\n\n${table}`);
43
+ }
44
+ // ============================================================================
45
+ // Command Definition
46
+ // ============================================================================
47
+ export const aliasCommand = {
48
+ name: 'alias',
49
+ description: 'Show command aliases',
50
+ usage: 'sf alias',
51
+ help: `Display all available command aliases.
52
+
53
+ Aliases provide shorter or more intuitive names for existing commands.
54
+
55
+ Examples:
56
+ sf alias # Show all aliases
57
+ sf alias --json # Output as JSON
58
+
59
+ Built-in aliases:
60
+ add, new -> create
61
+ rm, remove -> delete
62
+ ls -> list
63
+ s, get -> show
64
+ todo, tasks -> ready
65
+ done, complete -> close
66
+ st -> status`,
67
+ options: [],
68
+ handler: aliasHandler,
69
+ };
70
+ //# sourceMappingURL=alias.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alias.js","sourceRoot":"","sources":["../../../src/cli/commands/alias.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,SAAS,YAAY,CACnB,KAAe,EACf,OAAsB;IAEtB,MAAM,QAAQ,GAAG,aAAa,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IAEpC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;QAC1B,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,MAAM,EAAE,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,wBAAwB;IACxB,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACrC,MAAM,IAAI,GAAe,EAAE,CAAC;IAE5B,8BAA8B;IAC9B,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACjE,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACzB,CAAC;IAEF,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7C,OAAO,OAAO,CAAC,IAAI,EAAE,uBAAuB,KAAK,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E,MAAM,CAAC,MAAM,YAAY,GAAY;IACnC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,sBAAsB;IACnC,KAAK,EAAE,UAAU;IACjB,IAAI,EAAE;;;;;;;;;;;;;;;yBAeiB;IACvB,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,YAAY;CACtB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Channel Commands - Collection command interface for channels
3
+ *
4
+ * Provides CLI commands for channel operations:
5
+ * - channel create: Create a new channel
6
+ * - channel join: Join a channel
7
+ * - channel leave: Leave a channel
8
+ * - channel list: List channels
9
+ * - channel members: List channel members
10
+ */
11
+ import type { Command } from '../types.js';
12
+ export declare const channelCommand: Command;
13
+ //# sourceMappingURL=channel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/channel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAA+C,MAAM,aAAa,CAAC;AA0wBxF,eAAO,MAAM,cAAc,EAAE,OAyD5B,CAAC"}