spidersan 0.10.0 → 0.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (479) hide show
  1. package/CHANGELOG.md +163 -0
  2. package/README.md +39 -280
  3. package/package.json +88 -90
  4. package/dist/bin/spidersan.d.ts +0 -9
  5. package/dist/bin/spidersan.d.ts.map +0 -1
  6. package/dist/bin/spidersan.js +0 -117
  7. package/dist/bin/spidersan.js.map +0 -1
  8. package/dist/commands/abandon.d.ts +0 -8
  9. package/dist/commands/abandon.d.ts.map +0 -1
  10. package/dist/commands/abandon.js +0 -43
  11. package/dist/commands/abandon.js.map +0 -1
  12. package/dist/commands/activate.d.ts +0 -9
  13. package/dist/commands/activate.d.ts.map +0 -1
  14. package/dist/commands/activate.js +0 -45
  15. package/dist/commands/activate.js.map +0 -1
  16. package/dist/commands/active-windows.d.ts +0 -16
  17. package/dist/commands/active-windows.d.ts.map +0 -1
  18. package/dist/commands/active-windows.js +0 -373
  19. package/dist/commands/active-windows.js.map +0 -1
  20. package/dist/commands/ai.d.ts +0 -15
  21. package/dist/commands/ai.d.ts.map +0 -1
  22. package/dist/commands/ai.js +0 -498
  23. package/dist/commands/ai.js.map +0 -1
  24. package/dist/commands/audit-mark.d.ts +0 -12
  25. package/dist/commands/audit-mark.d.ts.map +0 -1
  26. package/dist/commands/audit-mark.js +0 -204
  27. package/dist/commands/audit-mark.js.map +0 -1
  28. package/dist/commands/auto.d.ts +0 -8
  29. package/dist/commands/auto.d.ts.map +0 -1
  30. package/dist/commands/auto.js +0 -207
  31. package/dist/commands/auto.js.map +0 -1
  32. package/dist/commands/bot.d.ts +0 -16
  33. package/dist/commands/bot.d.ts.map +0 -1
  34. package/dist/commands/bot.js +0 -416
  35. package/dist/commands/bot.js.map +0 -1
  36. package/dist/commands/cleanup.d.ts +0 -8
  37. package/dist/commands/cleanup.d.ts.map +0 -1
  38. package/dist/commands/cleanup.js +0 -36
  39. package/dist/commands/cleanup.js.map +0 -1
  40. package/dist/commands/close.d.ts +0 -9
  41. package/dist/commands/close.d.ts.map +0 -1
  42. package/dist/commands/close.js +0 -129
  43. package/dist/commands/close.js.map +0 -1
  44. package/dist/commands/collab-sync.d.ts +0 -14
  45. package/dist/commands/collab-sync.d.ts.map +0 -1
  46. package/dist/commands/collab-sync.js +0 -264
  47. package/dist/commands/collab-sync.js.map +0 -1
  48. package/dist/commands/collab.d.ts +0 -6
  49. package/dist/commands/collab.d.ts.map +0 -1
  50. package/dist/commands/collab.js +0 -103
  51. package/dist/commands/collab.js.map +0 -1
  52. package/dist/commands/completions.d.ts +0 -8
  53. package/dist/commands/completions.d.ts.map +0 -1
  54. package/dist/commands/completions.js +0 -83
  55. package/dist/commands/completions.js.map +0 -1
  56. package/dist/commands/config.d.ts +0 -15
  57. package/dist/commands/config.d.ts.map +0 -1
  58. package/dist/commands/config.js +0 -337
  59. package/dist/commands/config.js.map +0 -1
  60. package/dist/commands/conflicts.d.ts +0 -12
  61. package/dist/commands/conflicts.d.ts.map +0 -1
  62. package/dist/commands/conflicts.js +0 -570
  63. package/dist/commands/conflicts.js.map +0 -1
  64. package/dist/commands/context.d.ts +0 -8
  65. package/dist/commands/context.d.ts.map +0 -1
  66. package/dist/commands/context.js +0 -104
  67. package/dist/commands/context.js.map +0 -1
  68. package/dist/commands/cross-conflicts.d.ts +0 -17
  69. package/dist/commands/cross-conflicts.d.ts.map +0 -1
  70. package/dist/commands/cross-conflicts.js +0 -274
  71. package/dist/commands/cross-conflicts.js.map +0 -1
  72. package/dist/commands/daily.d.ts +0 -7
  73. package/dist/commands/daily.d.ts.map +0 -1
  74. package/dist/commands/daily.js +0 -171
  75. package/dist/commands/daily.js.map +0 -1
  76. package/dist/commands/dashboard.d.ts +0 -22
  77. package/dist/commands/dashboard.d.ts.map +0 -1
  78. package/dist/commands/dashboard.js +0 -401
  79. package/dist/commands/dashboard.js.map +0 -1
  80. package/dist/commands/demo.d.ts +0 -3
  81. package/dist/commands/demo.d.ts.map +0 -1
  82. package/dist/commands/demo.js +0 -118
  83. package/dist/commands/demo.js.map +0 -1
  84. package/dist/commands/depends.d.ts +0 -8
  85. package/dist/commands/depends.d.ts.map +0 -1
  86. package/dist/commands/depends.js +0 -36
  87. package/dist/commands/depends.js.map +0 -1
  88. package/dist/commands/doctor.d.ts +0 -30
  89. package/dist/commands/doctor.d.ts.map +0 -1
  90. package/dist/commands/doctor.js +0 -540
  91. package/dist/commands/doctor.js.map +0 -1
  92. package/dist/commands/ecosystem-loader.d.ts +0 -14
  93. package/dist/commands/ecosystem-loader.d.ts.map +0 -1
  94. package/dist/commands/ecosystem-loader.js +0 -90
  95. package/dist/commands/ecosystem-loader.js.map +0 -1
  96. package/dist/commands/fleet-status.d.ts +0 -14
  97. package/dist/commands/fleet-status.d.ts.map +0 -1
  98. package/dist/commands/fleet-status.js +0 -127
  99. package/dist/commands/fleet-status.js.map +0 -1
  100. package/dist/commands/git-watch.d.ts +0 -24
  101. package/dist/commands/git-watch.d.ts.map +0 -1
  102. package/dist/commands/git-watch.js +0 -84
  103. package/dist/commands/git-watch.js.map +0 -1
  104. package/dist/commands/github-sync.d.ts +0 -9
  105. package/dist/commands/github-sync.d.ts.map +0 -1
  106. package/dist/commands/github-sync.js +0 -180
  107. package/dist/commands/github-sync.js.map +0 -1
  108. package/dist/commands/inbox.d.ts +0 -3
  109. package/dist/commands/inbox.d.ts.map +0 -1
  110. package/dist/commands/inbox.js +0 -120
  111. package/dist/commands/inbox.js.map +0 -1
  112. package/dist/commands/index.d.ts +0 -36
  113. package/dist/commands/index.d.ts.map +0 -1
  114. package/dist/commands/index.js +0 -44
  115. package/dist/commands/index.js.map +0 -1
  116. package/dist/commands/init.d.ts +0 -8
  117. package/dist/commands/init.d.ts.map +0 -1
  118. package/dist/commands/init.js +0 -23
  119. package/dist/commands/init.js.map +0 -1
  120. package/dist/commands/intent-scan.d.ts +0 -17
  121. package/dist/commands/intent-scan.d.ts.map +0 -1
  122. package/dist/commands/intent-scan.js +0 -336
  123. package/dist/commands/intent-scan.js.map +0 -1
  124. package/dist/commands/key-import.d.ts +0 -3
  125. package/dist/commands/key-import.d.ts.map +0 -1
  126. package/dist/commands/key-import.js +0 -54
  127. package/dist/commands/key-import.js.map +0 -1
  128. package/dist/commands/keygen.d.ts +0 -3
  129. package/dist/commands/keygen.d.ts.map +0 -1
  130. package/dist/commands/keygen.js +0 -53
  131. package/dist/commands/keygen.js.map +0 -1
  132. package/dist/commands/keys.d.ts +0 -3
  133. package/dist/commands/keys.d.ts.map +0 -1
  134. package/dist/commands/keys.js +0 -56
  135. package/dist/commands/keys.js.map +0 -1
  136. package/dist/commands/list.d.ts +0 -3
  137. package/dist/commands/list.d.ts.map +0 -1
  138. package/dist/commands/list.js +0 -45
  139. package/dist/commands/list.js.map +0 -1
  140. package/dist/commands/lock.d.ts +0 -11
  141. package/dist/commands/lock.d.ts.map +0 -1
  142. package/dist/commands/lock.js +0 -257
  143. package/dist/commands/lock.js.map +0 -1
  144. package/dist/commands/log.d.ts +0 -7
  145. package/dist/commands/log.d.ts.map +0 -1
  146. package/dist/commands/log.js +0 -110
  147. package/dist/commands/log.js.map +0 -1
  148. package/dist/commands/mcp-health.d.ts +0 -3
  149. package/dist/commands/mcp-health.d.ts.map +0 -1
  150. package/dist/commands/mcp-health.js +0 -305
  151. package/dist/commands/mcp-health.js.map +0 -1
  152. package/dist/commands/mcp-restart.d.ts +0 -3
  153. package/dist/commands/mcp-restart.d.ts.map +0 -1
  154. package/dist/commands/mcp-restart.js +0 -176
  155. package/dist/commands/mcp-restart.js.map +0 -1
  156. package/dist/commands/merge-order.d.ts +0 -9
  157. package/dist/commands/merge-order.d.ts.map +0 -1
  158. package/dist/commands/merge-order.js +0 -96
  159. package/dist/commands/merge-order.js.map +0 -1
  160. package/dist/commands/merged.d.ts +0 -8
  161. package/dist/commands/merged.d.ts.map +0 -1
  162. package/dist/commands/merged.js +0 -33
  163. package/dist/commands/merged.js.map +0 -1
  164. package/dist/commands/monitor.d.ts +0 -3
  165. package/dist/commands/monitor.d.ts.map +0 -1
  166. package/dist/commands/monitor.js +0 -153
  167. package/dist/commands/monitor.js.map +0 -1
  168. package/dist/commands/msg-read.d.ts +0 -3
  169. package/dist/commands/msg-read.d.ts.map +0 -1
  170. package/dist/commands/msg-read.js +0 -95
  171. package/dist/commands/msg-read.js.map +0 -1
  172. package/dist/commands/pulse.d.ts +0 -13
  173. package/dist/commands/pulse.d.ts.map +0 -1
  174. package/dist/commands/pulse.js +0 -174
  175. package/dist/commands/pulse.js.map +0 -1
  176. package/dist/commands/queen.d.ts +0 -25
  177. package/dist/commands/queen.d.ts.map +0 -1
  178. package/dist/commands/queen.js +0 -326
  179. package/dist/commands/queen.js.map +0 -1
  180. package/dist/commands/radar.d.ts +0 -3
  181. package/dist/commands/radar.d.ts.map +0 -1
  182. package/dist/commands/radar.js +0 -147
  183. package/dist/commands/radar.js.map +0 -1
  184. package/dist/commands/ready-check.d.ts +0 -11
  185. package/dist/commands/ready-check.d.ts.map +0 -1
  186. package/dist/commands/ready-check.js +0 -147
  187. package/dist/commands/ready-check.js.map +0 -1
  188. package/dist/commands/rebase-helper.d.ts +0 -3
  189. package/dist/commands/rebase-helper.d.ts.map +0 -1
  190. package/dist/commands/rebase-helper.js +0 -52
  191. package/dist/commands/rebase-helper.js.map +0 -1
  192. package/dist/commands/register.d.ts +0 -5
  193. package/dist/commands/register.d.ts.map +0 -1
  194. package/dist/commands/register.js +0 -163
  195. package/dist/commands/register.js.map +0 -1
  196. package/dist/commands/registry-sync.d.ts +0 -9
  197. package/dist/commands/registry-sync.d.ts.map +0 -1
  198. package/dist/commands/registry-sync.js +0 -163
  199. package/dist/commands/registry-sync.js.map +0 -1
  200. package/dist/commands/rescue.d.ts +0 -11
  201. package/dist/commands/rescue.d.ts.map +0 -1
  202. package/dist/commands/rescue.js +0 -147
  203. package/dist/commands/rescue.js.map +0 -1
  204. package/dist/commands/semantic.d.ts +0 -3
  205. package/dist/commands/semantic.d.ts.map +0 -1
  206. package/dist/commands/semantic.js +0 -62
  207. package/dist/commands/semantic.js.map +0 -1
  208. package/dist/commands/send.d.ts +0 -3
  209. package/dist/commands/send.d.ts.map +0 -1
  210. package/dist/commands/send.js +0 -121
  211. package/dist/commands/send.js.map +0 -1
  212. package/dist/commands/stale.d.ts +0 -17
  213. package/dist/commands/stale.d.ts.map +0 -1
  214. package/dist/commands/stale.js +0 -131
  215. package/dist/commands/stale.js.map +0 -1
  216. package/dist/commands/status.d.ts +0 -9
  217. package/dist/commands/status.d.ts.map +0 -1
  218. package/dist/commands/status.js +0 -41
  219. package/dist/commands/status.js.map +0 -1
  220. package/dist/commands/sync-advisor.d.ts +0 -14
  221. package/dist/commands/sync-advisor.d.ts.map +0 -1
  222. package/dist/commands/sync-advisor.js +0 -110
  223. package/dist/commands/sync-advisor.js.map +0 -1
  224. package/dist/commands/sync.d.ts +0 -8
  225. package/dist/commands/sync.d.ts.map +0 -1
  226. package/dist/commands/sync.js +0 -60
  227. package/dist/commands/sync.js.map +0 -1
  228. package/dist/commands/tension.d.ts +0 -12
  229. package/dist/commands/tension.d.ts.map +0 -1
  230. package/dist/commands/tension.js +0 -262
  231. package/dist/commands/tension.js.map +0 -1
  232. package/dist/commands/torrent.d.ts +0 -9
  233. package/dist/commands/torrent.d.ts.map +0 -1
  234. package/dist/commands/torrent.js +0 -470
  235. package/dist/commands/torrent.js.map +0 -1
  236. package/dist/commands/tui.d.ts +0 -8
  237. package/dist/commands/tui.d.ts.map +0 -1
  238. package/dist/commands/tui.js +0 -15
  239. package/dist/commands/tui.js.map +0 -1
  240. package/dist/commands/wake.d.ts +0 -9
  241. package/dist/commands/wake.d.ts.map +0 -1
  242. package/dist/commands/wake.js +0 -188
  243. package/dist/commands/wake.js.map +0 -1
  244. package/dist/commands/watch.d.ts +0 -9
  245. package/dist/commands/watch.d.ts.map +0 -1
  246. package/dist/commands/watch.js +0 -536
  247. package/dist/commands/watch.js.map +0 -1
  248. package/dist/commands/welcome.d.ts +0 -8
  249. package/dist/commands/welcome.d.ts.map +0 -1
  250. package/dist/commands/welcome.js +0 -85
  251. package/dist/commands/welcome.js.map +0 -1
  252. package/dist/commands/who-owns.d.ts +0 -3
  253. package/dist/commands/who-owns.d.ts.map +0 -1
  254. package/dist/commands/who-owns.js +0 -68
  255. package/dist/commands/who-owns.js.map +0 -1
  256. package/dist/commands/who-touched.d.ts +0 -9
  257. package/dist/commands/who-touched.d.ts.map +0 -1
  258. package/dist/commands/who-touched.js +0 -198
  259. package/dist/commands/who-touched.js.map +0 -1
  260. package/dist/index.d.ts +0 -11
  261. package/dist/index.d.ts.map +0 -1
  262. package/dist/index.js +0 -11
  263. package/dist/index.js.map +0 -1
  264. package/dist/lib/activity.d.ts +0 -53
  265. package/dist/lib/activity.d.ts.map +0 -1
  266. package/dist/lib/activity.js +0 -267
  267. package/dist/lib/activity.js.map +0 -1
  268. package/dist/lib/agent-errors.d.ts +0 -41
  269. package/dist/lib/agent-errors.d.ts.map +0 -1
  270. package/dist/lib/agent-errors.js +0 -145
  271. package/dist/lib/agent-errors.js.map +0 -1
  272. package/dist/lib/ai/context-builder.d.ts +0 -16
  273. package/dist/lib/ai/context-builder.d.ts.map +0 -1
  274. package/dist/lib/ai/context-builder.js +0 -216
  275. package/dist/lib/ai/context-builder.js.map +0 -1
  276. package/dist/lib/ai/event-handler.d.ts +0 -21
  277. package/dist/lib/ai/event-handler.d.ts.map +0 -1
  278. package/dist/lib/ai/event-handler.js +0 -98
  279. package/dist/lib/ai/event-handler.js.map +0 -1
  280. package/dist/lib/ai/index.d.ts +0 -13
  281. package/dist/lib/ai/index.d.ts.map +0 -1
  282. package/dist/lib/ai/index.js +0 -11
  283. package/dist/lib/ai/index.js.map +0 -1
  284. package/dist/lib/ai/llm-client.d.ts +0 -37
  285. package/dist/lib/ai/llm-client.d.ts.map +0 -1
  286. package/dist/lib/ai/llm-client.js +0 -225
  287. package/dist/lib/ai/llm-client.js.map +0 -1
  288. package/dist/lib/ai/reasoner.d.ts +0 -11
  289. package/dist/lib/ai/reasoner.d.ts.map +0 -1
  290. package/dist/lib/ai/reasoner.js +0 -246
  291. package/dist/lib/ai/reasoner.js.map +0 -1
  292. package/dist/lib/ai/setup.d.ts +0 -40
  293. package/dist/lib/ai/setup.d.ts.map +0 -1
  294. package/dist/lib/ai/setup.js +0 -154
  295. package/dist/lib/ai/setup.js.map +0 -1
  296. package/dist/lib/ai/types.d.ts +0 -135
  297. package/dist/lib/ai/types.d.ts.map +0 -1
  298. package/dist/lib/ai/types.js +0 -39
  299. package/dist/lib/ai/types.js.map +0 -1
  300. package/dist/lib/ast.d.ts +0 -36
  301. package/dist/lib/ast.d.ts.map +0 -1
  302. package/dist/lib/ast.js +0 -135
  303. package/dist/lib/ast.js.map +0 -1
  304. package/dist/lib/colony-subscriber.d.ts +0 -56
  305. package/dist/lib/colony-subscriber.d.ts.map +0 -1
  306. package/dist/lib/colony-subscriber.js +0 -265
  307. package/dist/lib/colony-subscriber.js.map +0 -1
  308. package/dist/lib/config.d.ts +0 -62
  309. package/dist/lib/config.d.ts.map +0 -1
  310. package/dist/lib/config.js +0 -230
  311. package/dist/lib/config.js.map +0 -1
  312. package/dist/lib/conflict-analyzer.d.ts +0 -33
  313. package/dist/lib/conflict-analyzer.d.ts.map +0 -1
  314. package/dist/lib/conflict-analyzer.js +0 -114
  315. package/dist/lib/conflict-analyzer.js.map +0 -1
  316. package/dist/lib/conflict-renderer.d.ts +0 -7
  317. package/dist/lib/conflict-renderer.d.ts.map +0 -1
  318. package/dist/lib/conflict-renderer.js +0 -162
  319. package/dist/lib/conflict-renderer.js.map +0 -1
  320. package/dist/lib/conflict-tier.d.ts +0 -20
  321. package/dist/lib/conflict-tier.d.ts.map +0 -1
  322. package/dist/lib/conflict-tier.js +0 -49
  323. package/dist/lib/conflict-tier.js.map +0 -1
  324. package/dist/lib/crdt.d.ts +0 -83
  325. package/dist/lib/crdt.d.ts.map +0 -1
  326. package/dist/lib/crdt.js +0 -160
  327. package/dist/lib/crdt.js.map +0 -1
  328. package/dist/lib/crypto.d.ts +0 -71
  329. package/dist/lib/crypto.d.ts.map +0 -1
  330. package/dist/lib/crypto.js +0 -176
  331. package/dist/lib/crypto.js.map +0 -1
  332. package/dist/lib/daily-bridge.d.ts +0 -41
  333. package/dist/lib/daily-bridge.d.ts.map +0 -1
  334. package/dist/lib/daily-bridge.js +0 -186
  335. package/dist/lib/daily-bridge.js.map +0 -1
  336. package/dist/lib/errors.d.ts +0 -35
  337. package/dist/lib/errors.d.ts.map +0 -1
  338. package/dist/lib/errors.js +0 -71
  339. package/dist/lib/errors.js.map +0 -1
  340. package/dist/lib/git-events-subscriber.d.ts +0 -59
  341. package/dist/lib/git-events-subscriber.d.ts.map +0 -1
  342. package/dist/lib/git-events-subscriber.js +0 -779
  343. package/dist/lib/git-events-subscriber.js.map +0 -1
  344. package/dist/lib/git.d.ts +0 -15
  345. package/dist/lib/git.d.ts.map +0 -1
  346. package/dist/lib/git.js +0 -180
  347. package/dist/lib/git.js.map +0 -1
  348. package/dist/lib/github.d.ts +0 -83
  349. package/dist/lib/github.d.ts.map +0 -1
  350. package/dist/lib/github.js +0 -211
  351. package/dist/lib/github.js.map +0 -1
  352. package/dist/lib/graph.d.ts +0 -23
  353. package/dist/lib/graph.d.ts.map +0 -1
  354. package/dist/lib/graph.js +0 -134
  355. package/dist/lib/graph.js.map +0 -1
  356. package/dist/lib/hub.d.ts +0 -31
  357. package/dist/lib/hub.d.ts.map +0 -1
  358. package/dist/lib/hub.js +0 -92
  359. package/dist/lib/hub.js.map +0 -1
  360. package/dist/lib/license.d.ts +0 -61
  361. package/dist/lib/license.d.ts.map +0 -1
  362. package/dist/lib/license.js +0 -171
  363. package/dist/lib/license.js.map +0 -1
  364. package/dist/lib/pulse-renderer.d.ts +0 -19
  365. package/dist/lib/pulse-renderer.d.ts.map +0 -1
  366. package/dist/lib/pulse-renderer.js +0 -108
  367. package/dist/lib/pulse-renderer.js.map +0 -1
  368. package/dist/lib/regex-utils.d.ts +0 -6
  369. package/dist/lib/regex-utils.d.ts.map +0 -1
  370. package/dist/lib/regex-utils.js +0 -24
  371. package/dist/lib/regex-utils.js.map +0 -1
  372. package/dist/lib/register-renderer.d.ts +0 -10
  373. package/dist/lib/register-renderer.d.ts.map +0 -1
  374. package/dist/lib/register-renderer.js +0 -19
  375. package/dist/lib/register-renderer.js.map +0 -1
  376. package/dist/lib/remote-drift.d.ts +0 -61
  377. package/dist/lib/remote-drift.d.ts.map +0 -1
  378. package/dist/lib/remote-drift.js +0 -227
  379. package/dist/lib/remote-drift.js.map +0 -1
  380. package/dist/lib/repo-scanner.d.ts +0 -32
  381. package/dist/lib/repo-scanner.d.ts.map +0 -1
  382. package/dist/lib/repo-scanner.js +0 -160
  383. package/dist/lib/repo-scanner.js.map +0 -1
  384. package/dist/lib/salvage-analyzer.d.ts +0 -29
  385. package/dist/lib/salvage-analyzer.d.ts.map +0 -1
  386. package/dist/lib/salvage-analyzer.js +0 -121
  387. package/dist/lib/salvage-analyzer.js.map +0 -1
  388. package/dist/lib/security.d.ts +0 -77
  389. package/dist/lib/security.d.ts.map +0 -1
  390. package/dist/lib/security.js +0 -190
  391. package/dist/lib/security.js.map +0 -1
  392. package/dist/lib/session-logger.d.ts +0 -54
  393. package/dist/lib/session-logger.d.ts.map +0 -1
  394. package/dist/lib/session-logger.js +0 -136
  395. package/dist/lib/session-logger.js.map +0 -1
  396. package/dist/lib/symbol-extractor.d.ts +0 -41
  397. package/dist/lib/symbol-extractor.d.ts.map +0 -1
  398. package/dist/lib/symbol-extractor.js +0 -78
  399. package/dist/lib/symbol-extractor.js.map +0 -1
  400. package/dist/lib/update-check.d.ts +0 -11
  401. package/dist/lib/update-check.d.ts.map +0 -1
  402. package/dist/lib/update-check.js +0 -113
  403. package/dist/lib/update-check.js.map +0 -1
  404. package/dist/lib/watch-renderer.d.ts +0 -13
  405. package/dist/lib/watch-renderer.d.ts.map +0 -1
  406. package/dist/lib/watch-renderer.js +0 -35
  407. package/dist/lib/watch-renderer.js.map +0 -1
  408. package/dist/storage/adapter.d.ts +0 -62
  409. package/dist/storage/adapter.d.ts.map +0 -1
  410. package/dist/storage/adapter.js +0 -8
  411. package/dist/storage/adapter.js.map +0 -1
  412. package/dist/storage/branch-registry-store.d.ts +0 -13
  413. package/dist/storage/branch-registry-store.d.ts.map +0 -1
  414. package/dist/storage/branch-registry-store.js +0 -2
  415. package/dist/storage/branch-registry-store.js.map +0 -1
  416. package/dist/storage/factory.d.ts +0 -10
  417. package/dist/storage/factory.d.ts.map +0 -1
  418. package/dist/storage/factory.js +0 -38
  419. package/dist/storage/factory.js.map +0 -1
  420. package/dist/storage/git-messages.d.ts +0 -53
  421. package/dist/storage/git-messages.d.ts.map +0 -1
  422. package/dist/storage/git-messages.js +0 -376
  423. package/dist/storage/git-messages.js.map +0 -1
  424. package/dist/storage/index.d.ts +0 -10
  425. package/dist/storage/index.d.ts.map +0 -1
  426. package/dist/storage/index.js +0 -11
  427. package/dist/storage/index.js.map +0 -1
  428. package/dist/storage/json-branch-registry-store.d.ts +0 -19
  429. package/dist/storage/json-branch-registry-store.d.ts.map +0 -1
  430. package/dist/storage/json-branch-registry-store.js +0 -112
  431. package/dist/storage/json-branch-registry-store.js.map +0 -1
  432. package/dist/storage/local-messages.d.ts +0 -37
  433. package/dist/storage/local-messages.d.ts.map +0 -1
  434. package/dist/storage/local-messages.js +0 -151
  435. package/dist/storage/local-messages.js.map +0 -1
  436. package/dist/storage/local.d.ts +0 -20
  437. package/dist/storage/local.d.ts.map +0 -1
  438. package/dist/storage/local.js +0 -40
  439. package/dist/storage/local.js.map +0 -1
  440. package/dist/storage/memory-branch-registry-store.d.ts +0 -16
  441. package/dist/storage/memory-branch-registry-store.d.ts.map +0 -1
  442. package/dist/storage/memory-branch-registry-store.js +0 -65
  443. package/dist/storage/memory-branch-registry-store.js.map +0 -1
  444. package/dist/storage/message-adapter.d.ts +0 -86
  445. package/dist/storage/message-adapter.d.ts.map +0 -1
  446. package/dist/storage/message-adapter.js +0 -28
  447. package/dist/storage/message-adapter.js.map +0 -1
  448. package/dist/storage/message-factory.d.ts +0 -36
  449. package/dist/storage/message-factory.d.ts.map +0 -1
  450. package/dist/storage/message-factory.js +0 -99
  451. package/dist/storage/message-factory.js.map +0 -1
  452. package/dist/storage/mycmail-adapter.d.ts +0 -38
  453. package/dist/storage/mycmail-adapter.d.ts.map +0 -1
  454. package/dist/storage/mycmail-adapter.js +0 -300
  455. package/dist/storage/mycmail-adapter.js.map +0 -1
  456. package/dist/storage/supabase-registry-sync-client-impl.d.ts +0 -46
  457. package/dist/storage/supabase-registry-sync-client-impl.d.ts.map +0 -1
  458. package/dist/storage/supabase-registry-sync-client-impl.js +0 -322
  459. package/dist/storage/supabase-registry-sync-client-impl.js.map +0 -1
  460. package/dist/storage/supabase-registry-sync-client.d.ts +0 -9
  461. package/dist/storage/supabase-registry-sync-client.d.ts.map +0 -1
  462. package/dist/storage/supabase-registry-sync-client.js +0 -2
  463. package/dist/storage/supabase-registry-sync-client.js.map +0 -1
  464. package/dist/storage/supabase.d.ts +0 -34
  465. package/dist/storage/supabase.d.ts.map +0 -1
  466. package/dist/storage/supabase.js +0 -74
  467. package/dist/storage/supabase.js.map +0 -1
  468. package/dist/tui/dashboard.d.ts +0 -35
  469. package/dist/tui/dashboard.d.ts.map +0 -1
  470. package/dist/tui/dashboard.js +0 -199
  471. package/dist/tui/dashboard.js.map +0 -1
  472. package/dist/tui/screen.d.ts +0 -14
  473. package/dist/tui/screen.d.ts.map +0 -1
  474. package/dist/tui/screen.js +0 -138
  475. package/dist/tui/screen.js.map +0 -1
  476. package/dist/types/cloud.d.ts +0 -101
  477. package/dist/types/cloud.d.ts.map +0 -1
  478. package/dist/types/cloud.js +0 -13
  479. package/dist/types/cloud.js.map +0 -1
@@ -1,96 +0,0 @@
1
- /**
2
- * spidersan merge-order
3
- *
4
- * Get optimal merge order based on dependencies and conflicts.
5
- * Supports --blocking-count to prioritize tasks that block others (rarest-first).
6
- */
7
- import { Command } from 'commander';
8
- import { getStorage } from '../storage/index.js';
9
- import { buildConflictGraph, calculateBlockingCounts, topologicalSort } from '../lib/graph.js';
10
- export const mergeOrderCommand = new Command('merge-order')
11
- .description('Get optimal merge order for all branches')
12
- .option('--json', 'Output as JSON')
13
- .option('--blocking-count', 'Show how many branches each task blocks (rarest-first priority)')
14
- .action(async (options) => {
15
- const storage = await getStorage();
16
- if (!await storage.isInitialized()) {
17
- console.error('❌ Spidersan not initialized. Run: spidersan init');
18
- process.exit(1);
19
- }
20
- const branches = await storage.list();
21
- if (branches.length === 0) {
22
- console.log('🕷️ No branches registered.');
23
- return;
24
- }
25
- const branchNames = branches.map(branch => branch.name);
26
- const branchByName = new Map(branches.map(branch => [branch.name, branch]));
27
- // Build conflict graph
28
- const conflictGraph = buildConflictGraph(branches);
29
- // Calculate blocking counts (how many branches are blocked by each branch)
30
- const blockingCounts = options.blockingCount
31
- ? calculateBlockingCounts(branchNames, conflictGraph)
32
- : undefined;
33
- // Topological sort with conflict awareness (optionally prioritize by blocking count)
34
- const order = topologicalSort(branchNames, conflictGraph, blockingCounts);
35
- if (options.json) {
36
- const result = order.map(name => ({
37
- name,
38
- blocksCount: blockingCounts?.get(name) || 0,
39
- conflicts: conflictGraph.get(name) || []
40
- }));
41
- console.log(JSON.stringify({ order: result }, null, 2));
42
- return;
43
- }
44
- if (options.blockingCount) {
45
- console.log('🕷️ Merge Order (Rarest-First Priority)\n');
46
- console.log('━'.repeat(40) + '\n');
47
- }
48
- else {
49
- console.log('🕷️ Recommended Merge Order:\n');
50
- }
51
- order.forEach((branchName, i) => {
52
- const branch = branchByName.get(branchName);
53
- if (!branch) {
54
- return;
55
- }
56
- const conflicts = conflictGraph.get(branch.name) || [];
57
- const blocksCount = blockingCounts?.get(branch.name) || 0;
58
- // Status indicator
59
- let status = '✅';
60
- let priorityTag = '';
61
- if (options.blockingCount && blocksCount > 0) {
62
- status = blocksCount >= 3 ? '🔴' : blocksCount >= 1 ? '🟠' : '✅';
63
- priorityTag = blocksCount >= 3
64
- ? ' ⚡ CRITICAL'
65
- : blocksCount >= 1
66
- ? ` (blocks ${blocksCount})`
67
- : '';
68
- }
69
- else if (conflicts.length > 0) {
70
- status = '⚠️';
71
- }
72
- console.log(` ${i + 1}. ${status} ${branch.name}${priorityTag}`);
73
- if (conflicts.length > 0 && !options.blockingCount) {
74
- console.log(` └─ After merging, rebase: ${conflicts.join(', ')}`);
75
- }
76
- else if (options.blockingCount && blocksCount > 0) {
77
- // Show which branches this one blocks
78
- const blockedBranches = getBlockedBranches(branch.name, conflictGraph);
79
- if (blockedBranches.length > 0) {
80
- console.log(` └─ Blocks: ${blockedBranches.join(', ')}`);
81
- }
82
- }
83
- });
84
- if (options.blockingCount) {
85
- console.log('\n' + '━'.repeat(40));
86
- console.log('💡 Merge high-priority (🔴) branches first to unblock others.');
87
- }
88
- });
89
- /**
90
- * Get list of branch names that are blocked by a given branch.
91
- */
92
- function getBlockedBranches(branchName, conflictGraph) {
93
- // Return the branches that this branch conflicts with
94
- return conflictGraph.get(branchName) || [];
95
- }
96
- //# sourceMappingURL=merge-order.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-order.js","sourceRoot":"","sources":["../../src/commands/merge-order.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * spidersan merged
3
- *
4
- * Mark a branch as merged.
5
- */
6
- import { Command } from 'commander';
7
- export declare const mergedCommand: Command;
8
- //# sourceMappingURL=merged.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merged.d.ts","sourceRoot":"","sources":["../../src/commands/merged.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,aAAa,SA2BpB,CAAC"}
@@ -1,33 +0,0 @@
1
- /**
2
- * spidersan merged
3
- *
4
- * Mark a branch as merged.
5
- */
6
- import { Command } from 'commander';
7
- import { getStorage } from '../storage/index.js';
8
- import { logActivity } from '../lib/activity.js';
9
- import { getCurrentBranch } from '../lib/git.js';
10
- export const mergedCommand = new Command('merged')
11
- .description('Mark a branch as merged')
12
- .argument('[branch]', 'Branch that was merged (default: current)')
13
- .option('--pr <number>', 'PR number for tracking')
14
- .action(async (branchArg, options) => {
15
- const storage = await getStorage();
16
- if (!await storage.isInitialized()) {
17
- console.error('❌ Spidersan not initialized. Run: spidersan init');
18
- process.exit(1);
19
- }
20
- const branchName = branchArg || getCurrentBranch();
21
- const branch = await storage.get(branchName);
22
- if (!branch) {
23
- console.error(`❌ Branch "${branchName}" not found in registry.`);
24
- process.exit(1);
25
- }
26
- await storage.update(branchName, { status: 'completed' });
27
- logActivity({ event: 'merge', branch: branchName, agent: branch.agent ?? undefined, details: { pr_number: options.pr } });
28
- console.log(`🕷️ Marked as merged: ${branchName}`);
29
- if (options.pr) {
30
- console.log(` PR: #${options.pr}`);
31
- }
32
- });
33
- //# sourceMappingURL=merged.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merged.js","sourceRoot":"","sources":["../../src/commands/merged.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC7C,WAAW,CAAC,yBAAyB,CAAC;KACtC,QAAQ,CAAC,UAAU,EAAE,2CAA2C,CAAC;KACjE,MAAM,CAAC,eAAe,EAAE,wBAAwB,CAAC;KACjD,MAAM,CAAC,KAAK,EAAE,SAA6B,EAAE,OAAO,EAAE,EAAE;IACrD,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;IAEnC,IAAI,CAAC,MAAM,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,UAAU,GAAG,SAAS,IAAI,gBAAgB,EAAE,CAAC;IACnD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAE7C,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,aAAa,UAAU,0BAA0B,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IAC1D,WAAW,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,SAAS,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAE1H,OAAO,CAAC,GAAG,CAAC,yBAAyB,UAAU,EAAE,CAAC,CAAC;IACnD,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IACzC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const monitorCommand: Command;
3
- //# sourceMappingURL=monitor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"monitor.d.ts","sourceRoot":"","sources":["../../src/commands/monitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,eAAO,MAAM,cAAc,SA6JrB,CAAC"}
@@ -1,153 +0,0 @@
1
- import { Command } from 'commander';
2
- import { io } from 'socket.io-client';
3
- import { readFileSync, existsSync } from 'fs';
4
- import { join } from 'path';
5
- import chokidar from 'chokidar';
6
- import { SpidersanDashboard } from '../tui/dashboard.js';
7
- import { getStorage } from '../storage/index.js';
8
- import { createSwarmState } from '../lib/crdt.js';
9
- // Config
10
- const HUB_URL = process.env.HUB_URL || 'https://hub.treebird.uk';
11
- const AGENT_ID = process.env.SPIDERSAN_AGENT || 'monitor-daemon';
12
- export const monitorCommand = new Command('monitor')
13
- .description('🕷️ Real-time Hub Monitor Dashboard')
14
- .option('--hub <url>', 'Hub URL to connect to', HUB_URL)
15
- .action(async (options) => {
16
- const dashboard = new SpidersanDashboard();
17
- dashboard.render(); // Initial render
18
- // CRDT State
19
- const swarmState = createSwarmState(AGENT_ID);
20
- // Local Persistence
21
- const SPIDERSAN_DIR = join(process.cwd(), '.spidersan');
22
- const STATE_FILE = join(SPIDERSAN_DIR, 'crdt.state');
23
- // Load initial state
24
- if (existsSync(STATE_FILE)) {
25
- try {
26
- const data = readFileSync(STATE_FILE);
27
- swarmState.applyUpdate(new Uint8Array(data));
28
- dashboard.addLog('📚 Loaded local state');
29
- }
30
- catch (e) {
31
- dashboard.addLog(`⚠️ Failed to load state: ${e}`);
32
- }
33
- }
34
- // Watch for local changes (from other CLI commands)
35
- // using chokidar for better cross-platform support
36
- const watcher = chokidar.watch(STATE_FILE, { persistent: true });
37
- watcher.on('change', () => {
38
- try {
39
- const data = readFileSync(STATE_FILE);
40
- swarmState.applyUpdate(new Uint8Array(data));
41
- // dashboard.addLog('🔄 Local state updated'); // verbose
42
- }
43
- catch (e) {
44
- // ignore read errors (race conditions)
45
- }
46
- });
47
- // Refresh dashboard when CRDT state changes
48
- swarmState.doc.on('update', () => {
49
- const locks = swarmState.getAllLocks().map(l => ({
50
- symbol: l.symbolId,
51
- agent: l.agentId,
52
- time: l.timestamp
53
- }));
54
- dashboard.updateState({ activeLocks: locks });
55
- });
56
- try {
57
- // 1. Connect to Hub
58
- dashboard.addLog(`Connecting to Hub: ${options.hub}...`);
59
- const socket = io(options.hub, {
60
- reconnection: true,
61
- timeout: 5000
62
- });
63
- const connectedAgents = new Set();
64
- socket.on('connect', () => {
65
- dashboard.addLog('✅ Connected to Hub');
66
- dashboard.updateState({ connectedAgents: Array.from(connectedAgents) });
67
- socket.emit('subscribe', {
68
- events: ['file:changed', 'task:updated', 'agent:heartbeat', 'crdt:update', 'crdt:state']
69
- });
70
- // Request initial CRDT state
71
- socket.emit('crdt:request-state');
72
- });
73
- socket.on('disconnect', () => {
74
- dashboard.addLog('❌ Disconnected from Hub');
75
- connectedAgents.clear();
76
- dashboard.updateState({ connectedAgents: [] });
77
- });
78
- socket.on('connect_error', (err) => {
79
- dashboard.addLog(`⚠️ Connection error: ${err.message}`);
80
- });
81
- // 2. Listen for Events
82
- // CRDT Sync
83
- socket.on('crdt:update', (data) => {
84
- const update = new Uint8Array(Buffer.from(data.update, 'base64'));
85
- swarmState.applyUpdate(update);
86
- });
87
- socket.on('crdt:state', (data) => {
88
- dashboard.addLog(`📦 Received State (${data.updates.length} chunks)`);
89
- for (const chunk of data.updates) {
90
- const update = new Uint8Array(Buffer.from(chunk, 'base64'));
91
- swarmState.applyUpdate(update);
92
- }
93
- });
94
- // Heartbeats
95
- socket.on('agent:heartbeat', (data) => {
96
- if (!connectedAgents.has(data.agent)) {
97
- connectedAgents.add(data.agent);
98
- dashboard.addLog(`👋 Agent joined: ${data.agent}`);
99
- dashboard.updateState({ connectedAgents: Array.from(connectedAgents) });
100
- }
101
- });
102
- // File Changes (Conflict Radar)
103
- const activeFiles = new Map();
104
- socket.on('file:changed', (data) => {
105
- if (data.action === 'editing') {
106
- const agents = activeFiles.get(data.file) || [];
107
- if (!agents.includes(data.agent)) {
108
- agents.push(data.agent);
109
- activeFiles.set(data.file, agents);
110
- dashboard.addLog(`✏️ ${data.agent} editing ${data.file}`);
111
- }
112
- }
113
- else if (data.action === 'closed' || data.action === 'saved') {
114
- const agents = activeFiles.get(data.file) || [];
115
- const newAgents = agents.filter(a => a !== data.agent);
116
- if (newAgents.length === 0) {
117
- activeFiles.delete(data.file);
118
- }
119
- else {
120
- activeFiles.set(data.file, newAgents);
121
- }
122
- dashboard.addLog(`💾 ${data.agent} ${data.action} ${data.file}`);
123
- }
124
- dashboard.updateState({ activeFiles });
125
- });
126
- // Task Updates (Formation)
127
- socket.on('task:updated', (task) => {
128
- // In a real app we'd merge this into a map, for now just log
129
- dashboard.addLog(`📋 Task Update: ${task.title} -> ${task.status}`);
130
- });
131
- // 3. Local Polling (Backup if Hub is quiet)
132
- // Just to show some activity in the demo if no other agents are online
133
- setInterval(() => {
134
- dashboard.render(); // Keep clock updating
135
- }, 1000);
136
- // Access local storage to show local branches as a baseline
137
- try {
138
- const storage = await getStorage();
139
- const branches = await storage.list();
140
- if (branches.length > 0) {
141
- dashboard.addLog(`📚 Loaded ${branches.length} local branches`);
142
- // We could visualize these, but Monitor is mainly for Hub state
143
- }
144
- }
145
- catch (e) {
146
- // ignore
147
- }
148
- }
149
- catch (error) {
150
- dashboard.addLog(`❌ Fatal error: ${error}`);
151
- }
152
- });
153
- //# sourceMappingURL=monitor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/commands/monitor.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const msgReadCommand: Command;
3
- //# sourceMappingURL=msg-read.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"msg-read.d.ts","sourceRoot":"","sources":["../../src/commands/msg-read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBpC,eAAO,MAAM,cAAc,SAoFrB,CAAC"}
@@ -1,95 +0,0 @@
1
- import { Command } from 'commander';
2
- import { getMessageStorage, parseTierOption } from '../storage/message-factory.js';
3
- // Security: Input validation
4
- const VALID_MESSAGE_ID = /^[a-zA-Z0-9][a-zA-Z0-9_-]{0,64}$/;
5
- function validateMessageId(id) {
6
- if (!VALID_MESSAGE_ID.test(id)) {
7
- throw new Error(`Invalid message ID: "${id.slice(0, 20)}..."`);
8
- }
9
- return id;
10
- }
11
- function formatTimestamp(date) {
12
- return date.toLocaleString('en-US', {
13
- weekday: 'short',
14
- month: 'short',
15
- day: 'numeric',
16
- hour: '2-digit',
17
- minute: '2-digit',
18
- });
19
- }
20
- export const msgReadCommand = new Command('read')
21
- .description('Read a specific message (tiered fallback)')
22
- .argument('<id>', 'Message ID (full or partial)')
23
- .option('--no-mark-read', 'Don\'t mark the message as read')
24
- .option('--tier <n>', 'Force specific tier (1, 2, or 3)')
25
- .option('-v, --verbose', 'Show which tier is being used')
26
- .option('--json', 'Output as JSON')
27
- .action(async (id, options) => {
28
- const agentId = process.env.SPIDERSAN_AGENT || 'cli-agent';
29
- // Security: Validate message ID
30
- let messageId;
31
- try {
32
- messageId = validateMessageId(id);
33
- }
34
- catch (error) {
35
- console.error(`❌ ${error.message}`);
36
- process.exit(1);
37
- }
38
- // Get message storage adapter
39
- const forceTier = parseTierOption(options.tier);
40
- try {
41
- const storage = await getMessageStorage({
42
- forceTier,
43
- agentId,
44
- verbose: options.verbose,
45
- });
46
- // Read message
47
- const message = await storage.read(messageId);
48
- if (!message) {
49
- console.error(`❌ Message not found: ${messageId}`);
50
- process.exit(1);
51
- }
52
- // Mark as read if requested
53
- if (options.markRead !== false) {
54
- await storage.markRead(messageId);
55
- }
56
- if (options.json) {
57
- console.log(JSON.stringify({
58
- tier: storage.getTier(),
59
- tierName: storage.getTierName(),
60
- message: {
61
- ...message,
62
- timestamp: message.timestamp.toISOString(),
63
- },
64
- }, null, 2));
65
- return;
66
- }
67
- // Display message
68
- const tierInfo = options.verbose ? ` (via ${storage.getTierName()})` : '';
69
- const encryptIcon = message.encrypted ? ' 🔒' : '';
70
- const typeLabel = message.type !== 'info' ? ` [${message.type.toUpperCase()}]` : '';
71
- console.log(`\n📧 Message${tierInfo}\n`);
72
- console.log('─'.repeat(60));
73
- console.log(`Subject: ${message.subject}${typeLabel}${encryptIcon}`);
74
- console.log(`From: ${message.from}`);
75
- console.log(`To: ${message.to}`);
76
- console.log(`Date: ${formatTimestamp(message.timestamp)}`);
77
- console.log(`ID: ${message.id}`);
78
- if (message.branch) {
79
- console.log(`Branch: ${message.branch}`);
80
- }
81
- if (message.files && message.files.length > 0) {
82
- console.log(`Files: ${message.files.join(', ')}`);
83
- }
84
- console.log('─'.repeat(60));
85
- console.log('');
86
- console.log(message.body);
87
- console.log('');
88
- }
89
- catch (error) {
90
- console.error('❌ Failed to read message');
91
- console.error(error.message || error);
92
- process.exit(1);
93
- }
94
- });
95
- //# sourceMappingURL=msg-read.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"msg-read.js","sourceRoot":"","sources":["../../src/commands/msg-read.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- /**
2
- * spidersan pulse
3
- *
4
- * Quick health-check: sync from Colony, then run local conflict detection.
5
- * Calls syncFromColony() first so that active work_claim signals from other
6
- * agents are reflected in the registry before conflicts are computed.
7
- *
8
- * Offline mode: if Colony is unreachable, prints a warning and continues
9
- * with existing local registry data — never crashes.
10
- */
11
- import { Command } from 'commander';
12
- export declare const pulseCommand: Command;
13
- //# sourceMappingURL=pulse.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pulse.d.ts","sourceRoot":"","sources":["../../src/commands/pulse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,eAAO,MAAM,YAAY,SAwJnB,CAAC"}
@@ -1,174 +0,0 @@
1
- /**
2
- * spidersan pulse
3
- *
4
- * Quick health-check: sync from Colony, then run local conflict detection.
5
- * Calls syncFromColony() first so that active work_claim signals from other
6
- * agents are reflected in the registry before conflicts are computed.
7
- *
8
- * Offline mode: if Colony is unreachable, prints a warning and continues
9
- * with existing local registry data — never crashes.
10
- */
11
- import { Command } from 'commander';
12
- import { compilePatterns } from '../lib/regex-utils.js';
13
- import { getStorage } from '../storage/index.js';
14
- import { syncFromColony } from '../lib/colony-subscriber.js';
15
- import { loadConfig } from '../lib/config.js';
16
- import { classifyTier } from '../lib/conflict-tier.js';
17
- import { getCurrentBranch } from '../lib/git.js';
18
- import { createHubClient } from '../lib/hub.js';
19
- import { renderPulseReport } from '../lib/pulse-renderer.js';
20
- import { computeDriftResult } from '../lib/remote-drift.js';
21
- import { isOfflineError } from '../lib/remote-drift.js';
22
- function resolveCurrentBranch() {
23
- try {
24
- return getCurrentBranch();
25
- }
26
- catch {
27
- return 'unknown';
28
- }
29
- }
30
- export const pulseCommand = new Command('pulse')
31
- .description('Sync from Colony then show active conflicts (quick health-check)')
32
- .option('--json', 'Output as JSON')
33
- .option('--no-sync', 'Skip Colony sync, use local registry only')
34
- .option('--remote-drift', 'Check if remote has advanced past local HEAD')
35
- .option('--hub-sync', 'Post drift alert to Hub if registered or unstaged files are in drift zone')
36
- .option('--strict', 'Exit 1 if any registered or unstaged files are in the drift zone')
37
- .action(async (options) => {
38
- const storage = await getStorage();
39
- if (!await storage.isInitialized()) {
40
- console.error('❌ Spidersan not initialized. Run: spidersan init');
41
- process.exit(1);
42
- }
43
- const config = await loadConfig();
44
- const highSeverity = (config.conflicts?.highSeverityPatterns || []).map((p) => new RegExp(p));
45
- const mediumSeverity = (config.conflicts?.mediumSeverityPatterns || []).map((p) => new RegExp(p));
46
- const compiledHigh = compilePatterns(highSeverity);
47
- const compiledMedium = compilePatterns(mediumSeverity);
48
- // ── Colony sync ───────────────────────────────────────────────────────
49
- let colonySynced = 0;
50
- let colonyOffline = true;
51
- if (options.sync !== false) {
52
- const result = await syncFromColony();
53
- colonySynced = result.synced;
54
- colonyOffline = result.offline;
55
- }
56
- else {
57
- console.log('ℹ Colony sync skipped (--no-sync)');
58
- }
59
- // ── Local conflict detection ──────────────────────────────────────────
60
- const currentBranch = resolveCurrentBranch();
61
- const allBranches = await storage.list();
62
- const target = allBranches.find(b => b.name === currentBranch);
63
- if (!target) {
64
- if (options.json) {
65
- const jsonOut = { branch: currentBranch, registered: false, conflicts: [], colonySynced, colonyOffline };
66
- if (options.remoteDrift) {
67
- const drift = await computeDriftResult([], { remote: 'origin', branch: currentBranch });
68
- jsonOut.remoteDrift = 'skipped' in drift ? { skipped: true, reason: drift.reason } : drift;
69
- }
70
- console.log(JSON.stringify(jsonOut));
71
- }
72
- else {
73
- const drift = options.remoteDrift
74
- ? await computeDriftResult([], { remote: 'origin', branch: currentBranch })
75
- : null;
76
- console.log(renderPulseReport({
77
- branch: currentBranch,
78
- registered: false,
79
- colonySynced,
80
- colonyOffline,
81
- conflicts: [],
82
- drift,
83
- }));
84
- }
85
- return;
86
- }
87
- const targetFilesSet = new Set(target.files);
88
- const conflicts = [];
89
- for (const branch of allBranches) {
90
- if (branch.name === currentBranch || branch.status !== 'active')
91
- continue;
92
- const overlapping = branch.files.filter(f => targetFilesSet.has(f));
93
- if (overlapping.length === 0)
94
- continue;
95
- // Determine max tier for this conflict group
96
- let maxTier = 1;
97
- for (const file of overlapping) {
98
- const tier = classifyTier(file, {
99
- extraTier3: compiledHigh,
100
- extraTier2: compiledMedium,
101
- });
102
- if (tier > maxTier)
103
- maxTier = tier;
104
- }
105
- conflicts.push({
106
- branch: branch.name,
107
- files: overlapping,
108
- tier: maxTier,
109
- agent: branch.agent,
110
- });
111
- }
112
- conflicts.sort((a, b) => b.tier - a.tier);
113
- if (options.json) {
114
- const jsonOutput = {
115
- branch: currentBranch,
116
- registered: true,
117
- conflicts,
118
- colonySynced,
119
- colonyOffline,
120
- };
121
- if (options.remoteDrift) {
122
- const drift = await computeDriftResult(target?.files ?? [], { remote: 'origin', branch: currentBranch });
123
- if ('skipped' in drift) {
124
- jsonOutput.remoteDrift = { skipped: true, reason: drift.reason };
125
- }
126
- else {
127
- jsonOutput.remoteDrift = drift;
128
- }
129
- }
130
- console.log(JSON.stringify(jsonOutput, null, 2));
131
- return;
132
- }
133
- // ── Human-readable output ─────────────────────────────────────────────
134
- const drift = options.remoteDrift
135
- ? await computeDriftResult(target.files, { remote: 'origin', branch: currentBranch })
136
- : null;
137
- if (drift && !('skipped' in drift) && options.hubSync) {
138
- const hasRisk = drift.registeredInDrift.length > 0 || drift.unstagedInDrift.length > 0;
139
- if (hasRisk) {
140
- const hub = createHubClient();
141
- const lines = [
142
- `🕷️⚠️ Remote drift detected on \`${drift.branch}\``,
143
- ` ${drift.remoteAhead} commit(s) ahead | ${drift.registeredInDrift.length} registered file(s) at risk | ${drift.unstagedInDrift.length} rebase-continue blocker(s)`,
144
- ...drift.registeredInDrift.map((entry) => ` ${renderTierIcon(entry.tier)} ${entry.file}${entry.unstaged ? ' [also has unstaged modifications]' : ''}`),
145
- ];
146
- await hub.postToChat({ agent: 'spidersan', name: 'Spidersan', message: lines.join('\n'), glyph: '🕷️' }).catch((error) => {
147
- if (!isOfflineError(error))
148
- console.warn('Hub sync failed:', error);
149
- });
150
- }
151
- }
152
- console.log(renderPulseReport({
153
- branch: currentBranch,
154
- registered: true,
155
- colonySynced,
156
- colonyOffline,
157
- activeBranches: allBranches.filter((branch) => branch.status === 'active').length,
158
- conflicts,
159
- drift,
160
- }));
161
- if (drift && !('skipped' in drift) && options.strict && (drift.registeredInDrift.length > 0 || drift.unstagedInDrift.length > 0)) {
162
- process.exit(1);
163
- }
164
- });
165
- function renderTierIcon(tier) {
166
- if (tier === 3)
167
- return '🔴';
168
- if (tier === 2)
169
- return '🟠';
170
- if (tier === 1)
171
- return '🟡';
172
- return '⚪';
173
- }
174
- //# sourceMappingURL=pulse.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pulse.js","sourceRoot":"","sources":["../../src/commands/pulse.ts"],"names":[],"mappings":"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"}