spidersan 0.9.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 (467) hide show
  1. package/CHANGELOG.md +187 -0
  2. package/README.md +39 -280
  3. package/package.json +9 -13
  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 -398
  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 -581
  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 -268
  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 -245
  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 -156
  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 -3
  245. package/dist/commands/watch.d.ts.map +0 -1
  246. package/dist/commands/watch.js +0 -428
  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/regex-utils.d.ts +0 -6
  365. package/dist/lib/regex-utils.d.ts.map +0 -1
  366. package/dist/lib/regex-utils.js +0 -24
  367. package/dist/lib/regex-utils.js.map +0 -1
  368. package/dist/lib/remote-drift.d.ts +0 -60
  369. package/dist/lib/remote-drift.d.ts.map +0 -1
  370. package/dist/lib/remote-drift.js +0 -225
  371. package/dist/lib/remote-drift.js.map +0 -1
  372. package/dist/lib/repo-scanner.d.ts +0 -32
  373. package/dist/lib/repo-scanner.d.ts.map +0 -1
  374. package/dist/lib/repo-scanner.js +0 -160
  375. package/dist/lib/repo-scanner.js.map +0 -1
  376. package/dist/lib/salvage-analyzer.d.ts +0 -29
  377. package/dist/lib/salvage-analyzer.d.ts.map +0 -1
  378. package/dist/lib/salvage-analyzer.js +0 -121
  379. package/dist/lib/salvage-analyzer.js.map +0 -1
  380. package/dist/lib/security.d.ts +0 -77
  381. package/dist/lib/security.d.ts.map +0 -1
  382. package/dist/lib/security.js +0 -190
  383. package/dist/lib/security.js.map +0 -1
  384. package/dist/lib/session-logger.d.ts +0 -54
  385. package/dist/lib/session-logger.d.ts.map +0 -1
  386. package/dist/lib/session-logger.js +0 -136
  387. package/dist/lib/session-logger.js.map +0 -1
  388. package/dist/lib/symbol-extractor.d.ts +0 -41
  389. package/dist/lib/symbol-extractor.d.ts.map +0 -1
  390. package/dist/lib/symbol-extractor.js +0 -78
  391. package/dist/lib/symbol-extractor.js.map +0 -1
  392. package/dist/lib/update-check.d.ts +0 -11
  393. package/dist/lib/update-check.d.ts.map +0 -1
  394. package/dist/lib/update-check.js +0 -113
  395. package/dist/lib/update-check.js.map +0 -1
  396. package/dist/storage/adapter.d.ts +0 -62
  397. package/dist/storage/adapter.d.ts.map +0 -1
  398. package/dist/storage/adapter.js +0 -8
  399. package/dist/storage/adapter.js.map +0 -1
  400. package/dist/storage/branch-registry-store.d.ts +0 -13
  401. package/dist/storage/branch-registry-store.d.ts.map +0 -1
  402. package/dist/storage/branch-registry-store.js +0 -2
  403. package/dist/storage/branch-registry-store.js.map +0 -1
  404. package/dist/storage/factory.d.ts +0 -10
  405. package/dist/storage/factory.d.ts.map +0 -1
  406. package/dist/storage/factory.js +0 -38
  407. package/dist/storage/factory.js.map +0 -1
  408. package/dist/storage/git-messages.d.ts +0 -53
  409. package/dist/storage/git-messages.d.ts.map +0 -1
  410. package/dist/storage/git-messages.js +0 -376
  411. package/dist/storage/git-messages.js.map +0 -1
  412. package/dist/storage/index.d.ts +0 -10
  413. package/dist/storage/index.d.ts.map +0 -1
  414. package/dist/storage/index.js +0 -11
  415. package/dist/storage/index.js.map +0 -1
  416. package/dist/storage/json-branch-registry-store.d.ts +0 -19
  417. package/dist/storage/json-branch-registry-store.d.ts.map +0 -1
  418. package/dist/storage/json-branch-registry-store.js +0 -112
  419. package/dist/storage/json-branch-registry-store.js.map +0 -1
  420. package/dist/storage/local-messages.d.ts +0 -37
  421. package/dist/storage/local-messages.d.ts.map +0 -1
  422. package/dist/storage/local-messages.js +0 -151
  423. package/dist/storage/local-messages.js.map +0 -1
  424. package/dist/storage/local.d.ts +0 -20
  425. package/dist/storage/local.d.ts.map +0 -1
  426. package/dist/storage/local.js +0 -40
  427. package/dist/storage/local.js.map +0 -1
  428. package/dist/storage/memory-branch-registry-store.d.ts +0 -16
  429. package/dist/storage/memory-branch-registry-store.d.ts.map +0 -1
  430. package/dist/storage/memory-branch-registry-store.js +0 -65
  431. package/dist/storage/memory-branch-registry-store.js.map +0 -1
  432. package/dist/storage/message-adapter.d.ts +0 -86
  433. package/dist/storage/message-adapter.d.ts.map +0 -1
  434. package/dist/storage/message-adapter.js +0 -28
  435. package/dist/storage/message-adapter.js.map +0 -1
  436. package/dist/storage/message-factory.d.ts +0 -36
  437. package/dist/storage/message-factory.d.ts.map +0 -1
  438. package/dist/storage/message-factory.js +0 -99
  439. package/dist/storage/message-factory.js.map +0 -1
  440. package/dist/storage/mycmail-adapter.d.ts +0 -38
  441. package/dist/storage/mycmail-adapter.d.ts.map +0 -1
  442. package/dist/storage/mycmail-adapter.js +0 -300
  443. package/dist/storage/mycmail-adapter.js.map +0 -1
  444. package/dist/storage/supabase-registry-sync-client-impl.d.ts +0 -46
  445. package/dist/storage/supabase-registry-sync-client-impl.d.ts.map +0 -1
  446. package/dist/storage/supabase-registry-sync-client-impl.js +0 -322
  447. package/dist/storage/supabase-registry-sync-client-impl.js.map +0 -1
  448. package/dist/storage/supabase-registry-sync-client.d.ts +0 -9
  449. package/dist/storage/supabase-registry-sync-client.d.ts.map +0 -1
  450. package/dist/storage/supabase-registry-sync-client.js +0 -2
  451. package/dist/storage/supabase-registry-sync-client.js.map +0 -1
  452. package/dist/storage/supabase.d.ts +0 -34
  453. package/dist/storage/supabase.d.ts.map +0 -1
  454. package/dist/storage/supabase.js +0 -74
  455. package/dist/storage/supabase.js.map +0 -1
  456. package/dist/tui/dashboard.d.ts +0 -35
  457. package/dist/tui/dashboard.d.ts.map +0 -1
  458. package/dist/tui/dashboard.js +0 -199
  459. package/dist/tui/dashboard.js.map +0 -1
  460. package/dist/tui/screen.d.ts +0 -14
  461. package/dist/tui/screen.d.ts.map +0 -1
  462. package/dist/tui/screen.js +0 -138
  463. package/dist/tui/screen.js.map +0 -1
  464. package/dist/types/cloud.d.ts +0 -101
  465. package/dist/types/cloud.d.ts.map +0 -1
  466. package/dist/types/cloud.js +0 -13
  467. package/dist/types/cloud.js.map +0 -1
@@ -1,188 +0,0 @@
1
- /**
2
- * spidersan wake
3
- *
4
- * Start a session with branch context.
5
- * "Weaving into the Web" - the spider feels its threads.
6
- */
7
- import { Command } from 'commander';
8
- import { execSync } from 'child_process';
9
- import { execa } from 'execa';
10
- import { getStorage } from '../storage/index.js';
11
- function getCurrentBranch() {
12
- try {
13
- return execSync('git rev-parse --abbrev-ref HEAD', { encoding: 'utf-8' }).trim();
14
- }
15
- catch {
16
- return null;
17
- }
18
- }
19
- function getGitBranches() {
20
- try {
21
- const output = execSync('git branch --format="%(refname:short)"', { encoding: 'utf-8' });
22
- return output.trim().split('\n').filter(Boolean);
23
- }
24
- catch {
25
- return [];
26
- }
27
- }
28
- function hasMycmail() {
29
- try {
30
- execSync('which mycmail', { stdio: 'ignore' });
31
- return true;
32
- }
33
- catch {
34
- return false;
35
- }
36
- }
37
- async function getInboxCount() {
38
- try {
39
- const result = await execa('mycmail', ['inbox', '--count'], {
40
- timeout: 10000, // 10 second timeout
41
- reject: false,
42
- });
43
- const match = result.stdout?.match(/(\d+)/);
44
- return match ? parseInt(match[1], 10) : 0;
45
- }
46
- catch {
47
- return 0;
48
- }
49
- }
50
- export const wakeCommand = new Command('wake')
51
- .description('Start a session - weave into the web, feel the threads')
52
- .option('--json', 'Output as JSON')
53
- .option('-q, --quiet', 'Minimal output')
54
- .option('--skip-mail', 'Skip mycmail integration')
55
- .action(async (options) => {
56
- const storage = await getStorage();
57
- const currentBranch = getCurrentBranch();
58
- const result = {
59
- synced: 0,
60
- branches: [],
61
- conflicts: [],
62
- inboxCount: 0,
63
- mycmailCalled: false,
64
- };
65
- // Step 1: Sync registry with git (remove orphaned branches)
66
- if (await storage.isInitialized()) {
67
- const gitBranches = new Set(getGitBranches());
68
- const registeredBranches = await storage.list();
69
- for (const branch of registeredBranches) {
70
- if (!gitBranches.has(branch.name) && branch.status === 'active') {
71
- await storage.unregister(branch.name);
72
- result.synced++;
73
- }
74
- }
75
- // Get current branches after sync
76
- const branches = await storage.list();
77
- result.branches = branches
78
- .filter(b => b.status === 'active')
79
- .map(b => ({ name: b.name, files: b.files, status: b.status, agent: b.agent }));
80
- // Step 2: Check conflicts for current branch
81
- if (currentBranch) {
82
- const target = await storage.get(currentBranch);
83
- if (target) {
84
- for (const branch of branches) {
85
- if (branch.name === currentBranch || branch.status !== 'active')
86
- continue;
87
- const overlappingFiles = branch.files.filter(f => target.files.includes(f));
88
- if (overlappingFiles.length > 0) {
89
- result.conflicts.push({ branch: branch.name, files: overlappingFiles, agent: branch.agent });
90
- }
91
- }
92
- }
93
- }
94
- }
95
- // Step 3: Call mycmail wake (with timeout protection!)
96
- if (!options.skipMail && hasMycmail()) {
97
- try {
98
- await execa('mycmail', ['wake', '--quiet'], {
99
- timeout: 30000, // 30 second timeout - prevents hanging!
100
- reject: false, // Don't throw on non-zero exit
101
- });
102
- result.mycmailCalled = true;
103
- result.inboxCount = await getInboxCount();
104
- }
105
- catch {
106
- // Ignore mycmail errors - but we won't hang!
107
- }
108
- }
109
- // JSON output
110
- if (options.json) {
111
- console.log(JSON.stringify(result, null, 2));
112
- return;
113
- }
114
- // Quiet output
115
- if (options.quiet) {
116
- console.log(`🕷️ Wake: ${result.branches.length} threads, ${result.conflicts.length} tensions`);
117
- return;
118
- }
119
- // ═══════════════════════════════════════════════════════════
120
- // CEREMONIAL OUTPUT: "Weaving into the Web"
121
- // ═══════════════════════════════════════════════════════════
122
- console.log('');
123
- console.log('🕷️ Spidersan Awakens...');
124
- console.log('');
125
- console.log(' ╭─────────────────────────────────────╮');
126
- console.log(' │ Feeling the threads... │');
127
- console.log(' ╰─────────────────────────────────────╯');
128
- console.log('');
129
- // Web status
130
- const agentCount = new Set(result.branches.map(b => b.agent).filter(Boolean)).size;
131
- console.log(' 📡 Web Status:');
132
- console.log(` • ${result.branches.length} thread${result.branches.length !== 1 ? 's' : ''} active`);
133
- if (agentCount > 0) {
134
- console.log(` • ${agentCount} agent${agentCount !== 1 ? 's' : ''} weaving`);
135
- }
136
- if (result.synced > 0) {
137
- console.log(` • ${result.synced} broken thread${result.synced !== 1 ? 's' : ''} cleared`);
138
- }
139
- // Tensions (conflicts)
140
- if (result.conflicts.length > 0) {
141
- console.log('');
142
- console.log(` ⚠️ Tension${result.conflicts.length !== 1 ? 's' : ''} detected:`);
143
- for (const conflict of result.conflicts) {
144
- const agentInfo = conflict.agent ? ` (${conflict.agent})` : '';
145
- console.log(` └─ ${conflict.files[0]}${agentInfo}`);
146
- if (conflict.files.length > 1) {
147
- console.log(` +${conflict.files.length - 1} more file${conflict.files.length > 2 ? 's' : ''}`);
148
- }
149
- }
150
- }
151
- // Active threads
152
- if (result.branches.length > 0) {
153
- console.log('');
154
- console.log(' 🕸️ Active Threads:');
155
- for (const branch of result.branches.slice(0, 4)) {
156
- const isCurrent = branch.name === currentBranch ? ' ← you' : '';
157
- const agentInfo = branch.agent && branch.name !== currentBranch ? ` (${branch.agent})` : '';
158
- console.log(` • ${branch.name}${agentInfo}${isCurrent}`);
159
- }
160
- if (result.branches.length > 4) {
161
- console.log(` • ...and ${result.branches.length - 4} more`);
162
- }
163
- }
164
- // Messages
165
- if (result.mycmailCalled) {
166
- console.log('');
167
- if (result.inboxCount > 0) {
168
- console.log(` 📬 ${result.inboxCount} message${result.inboxCount !== 1 ? 's' : ''} waiting`);
169
- }
170
- else {
171
- console.log(' 📭 No new messages');
172
- }
173
- }
174
- // Closing
175
- console.log('');
176
- if (result.conflicts.length === 0) {
177
- console.log(' ╭─────────────────────────────────────╮');
178
- console.log(' │ The web is calm. Ready to hunt. 🎯 │');
179
- console.log(' ╰─────────────────────────────────────╯');
180
- }
181
- else {
182
- console.log(' ╭─────────────────────────────────────╮');
183
- console.log(' │ Tensions on the web. Tread softly. │');
184
- console.log(' ╰─────────────────────────────────────╯');
185
- }
186
- console.log('');
187
- });
188
- //# sourceMappingURL=wake.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wake.js","sourceRoot":"","sources":["../../src/commands/wake.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const watchCommand: Command;
3
- //# sourceMappingURL=watch.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmDpC,eAAO,MAAM,YAAY,SAwOnB,CAAC"}
@@ -1,428 +0,0 @@
1
- import { Command } from 'commander';
2
- import { execFileSync, spawnSync } from 'child_process';
3
- import { getStorage } from '../storage/index.js';
4
- import * as chokidar from 'chokidar';
5
- import * as path from 'path';
6
- import { homedir } from 'os';
7
- import { io } from 'socket.io-client';
8
- import { loadConfig } from '../lib/config.js';
9
- import { syncFromColony } from '../lib/colony-subscriber.js';
10
- import { getCurrentBranch } from '../lib/git.js';
11
- import { createHubClient } from '../lib/hub.js';
12
- const DEBOUNCE_MS = 1000; // Debounce file changes
13
- const hub = createHubClient();
14
- function getRepoRoot() {
15
- try {
16
- return execFileSync('git', ['rev-parse', '--show-toplevel'], { encoding: 'utf-8' }).trim();
17
- }
18
- catch {
19
- return process.cwd();
20
- }
21
- }
22
- function parsePaths(value) {
23
- return value.split(',').map((entry) => entry.trim()).filter(Boolean);
24
- }
25
- function formatConflictChatMessage(branch, conflicts) {
26
- const conflictDetails = conflicts
27
- .map(c => `• **${c.branch}**: ${c.files.join(', ')}`)
28
- .join('\n');
29
- return `🕷️⚠️ **CONFLICT DETECTED** on branch \`${branch}\`\n\n${conflictDetails}`;
30
- }
31
- export const watchCommand = new Command('watch')
32
- .description('🕷️ Watch files and auto-register changes (daemon mode)')
33
- .argument('[directory]', 'Directory to watch (default: current repo)')
34
- .option('-d, --dir <directory>', 'Directory to watch (alias for positional arg)')
35
- .option('--paths <paths>', 'Comma-separated list of files or folders to watch')
36
- .option('--root <root>', 'Project root for relative paths (default: git root)')
37
- .option('-a, --agent <agent>', 'Agent identifier for registration')
38
- .option('--hub', 'Connect to Hub and emit real-time conflict warnings')
39
- .option('--hub-sync', 'Post conflicts to Hub chat via REST API')
40
- .option('-q, --quiet', 'Only log conflicts, not file changes')
41
- .option('--legacy', 'Legacy mode: use old watcher settings (more file descriptors)')
42
- .action(async (directory, options) => {
43
- const storage = await getStorage();
44
- const config = await loadConfig();
45
- if (!await storage.isInitialized()) {
46
- console.error('❌ Spidersan not initialized. Run: spidersan init');
47
- process.exit(1);
48
- }
49
- const branch = getCurrentBranch();
50
- const repoRoot = options.root || getRepoRoot();
51
- const watchTargets = options.paths
52
- ? parsePaths(options.paths).map((entry) => path.isAbsolute(entry) ? entry : path.join(repoRoot, entry))
53
- : [directory || options.dir || repoRoot];
54
- const configuredAgent = config.agent.name?.trim();
55
- const agent = options.agent || process.env.SPIDERSAN_AGENT || configuredAgent || 'unknown';
56
- const watchLabel = watchTargets.length === 1 ? watchTargets[0] : `${watchTargets.length} paths`;
57
- console.log(`
58
- 🕷️ SPIDERSAN WATCH MODE
59
- ━━━━━━━━━━━━━━━━━━━━━━━
60
- Branch: ${branch}
61
- Agent: ${agent}
62
- Root: ${repoRoot}
63
- Watching: ${watchLabel}
64
- Hub: ${options.hub ? hub.url : 'disabled'}
65
- Hub Sync: ${options.hubSync ? 'enabled (posts to chat)' : 'disabled'}
66
- ━━━━━━━━━━━━━━━━━━━━━━━
67
- Press Ctrl+C to stop.
68
- `);
69
- // Hub socket connection (optional)
70
- let hubSocket = null;
71
- if (options.hub) {
72
- try {
73
- hubSocket = io(hub.url, {
74
- reconnection: true,
75
- reconnectionAttempts: 5,
76
- timeout: 5000
77
- });
78
- hubSocket.on('connect', () => {
79
- console.log('🔌 Connected to Hub');
80
- });
81
- hubSocket.on('disconnect', () => {
82
- console.log('🔌 Disconnected from Hub');
83
- });
84
- hubSocket.on('connect_error', (err) => {
85
- if (!options.quiet) {
86
- console.log(`⚠️ Hub connection failed: ${err.message}`);
87
- }
88
- });
89
- }
90
- catch {
91
- console.log('⚠️ Could not connect to Hub');
92
- }
93
- }
94
- // Track recently changed files for debouncing
95
- const pendingFiles = new Set();
96
- let debounceTimer = null;
97
- // Process accumulated file changes
98
- async function processChanges() {
99
- if (pendingFiles.size === 0)
100
- return;
101
- const files = Array.from(pendingFiles);
102
- pendingFiles.clear();
103
- // Register files
104
- const existing = await storage.get(branch);
105
- const allFiles = existing
106
- ? [...new Set([...existing.files, ...files])]
107
- : files;
108
- if (existing) {
109
- await storage.update(branch, { files: allFiles, agent });
110
- }
111
- else {
112
- await storage.register({
113
- name: branch,
114
- files: allFiles,
115
- status: 'active',
116
- agent,
117
- });
118
- }
119
- if (!options.quiet) {
120
- console.log(`📝 Registered: ${files.join(', ')}`);
121
- }
122
- // Check for conflicts
123
- const allBranches = await storage.list();
124
- const conflicts = [];
125
- // Performance Optimization: Convert changed files to Set for O(1) lookup
126
- const filesSet = new Set(files);
127
- for (const otherBranch of allBranches) {
128
- if (otherBranch.name === branch || otherBranch.status !== 'active')
129
- continue;
130
- const overlapping = otherBranch.files.filter(f => filesSet.has(f));
131
- if (overlapping.length > 0) {
132
- conflicts.push({ branch: otherBranch.name, files: overlapping });
133
- }
134
- }
135
- if (conflicts.length > 0) {
136
- console.log(`\n⚠️ CONFLICT DETECTED!`);
137
- conflicts.forEach(c => {
138
- console.log(` 🔴 ${c.branch}: ${c.files.join(', ')}`);
139
- });
140
- console.log('');
141
- // Emit to Hub via socket if connected
142
- if (hubSocket?.connected) {
143
- hubSocket.emit('conflicts:warning', {
144
- branch,
145
- agent,
146
- files,
147
- conflicts,
148
- timestamp: new Date().toISOString()
149
- });
150
- }
151
- // Post to Hub chat if --hub-sync enabled
152
- if (options.hubSync) {
153
- await hub.postToChat({
154
- agent: 'spidersan',
155
- name: 'Spidersan',
156
- message: formatConflictChatMessage(branch, conflicts),
157
- glyph: '🕷️',
158
- });
159
- console.log('📤 Posted conflict to Hub chat');
160
- }
161
- }
162
- }
163
- // Build extended ignore patterns for smart mode
164
- const smartIgnores = [
165
- '**/.next/**', '**/build/**', '**/out/**', '**/coverage/**',
166
- '**/.cache/**', '**/__pycache__/**', '**/target/**',
167
- '**/vendor/**', '**/bower_components/**', '**/.pnpm/**',
168
- '**/.idea/**', '**/.vscode/**', '**/*.swp', '**/*.swo',
169
- '**/.DS_Store', '**/Thumbs.db',
170
- '**/package-lock.json', '**/yarn.lock', '**/pnpm-lock.yaml',
171
- '**/*.png', '**/*.jpg', '**/*.jpeg', '**/*.gif', '**/*.ico',
172
- '**/*.woff', '**/*.woff2', '**/*.ttf', '**/*.pdf',
173
- ];
174
- if (options.legacy) {
175
- console.log('⚠️ Legacy mode: Using old watcher settings (more file descriptors)');
176
- }
177
- // Start watching
178
- // SECURITY FIX: Always limit depth to prevent EMFILE errors (Sherlocksan 2026-01-02)
179
- const watcher = chokidar.watch(watchTargets, {
180
- ignored: !options.legacy ? [
181
- ...smartIgnores,
182
- /(^|[/\\])\../, // dotfiles
183
- '**/node_modules/**',
184
- '**/dist/**',
185
- '**/*.log',
186
- '**/.git/**', // ALWAYS ignore .git
187
- ] : [
188
- /(^|[/\\])\../, // dotfiles (ALWAYS ignore)
189
- '**/node_modules/**',
190
- '**/dist/**',
191
- '**/*.log',
192
- '**/.git/**', // ALWAYS ignore .git
193
- ],
194
- persistent: true,
195
- ignoreInitial: true,
196
- awaitWriteFinish: {
197
- stabilityThreshold: 500,
198
- pollInterval: 100
199
- },
200
- // ALWAYS limit depth to prevent EMFILE (default: 5, legacy: 10)
201
- depth: !options.legacy ? 5 : 10,
202
- // Smart mode (default): use polling to reduce file descriptor usage
203
- ...(!options.legacy && {
204
- usePolling: true,
205
- interval: 1000, // Check every 1 second
206
- binaryInterval: 3000,
207
- })
208
- });
209
- watcher.on('change', (filePath) => {
210
- const relativePath = path.relative(repoRoot, filePath);
211
- pendingFiles.add(relativePath);
212
- // Debounce: wait for more changes before processing
213
- if (debounceTimer)
214
- clearTimeout(debounceTimer);
215
- debounceTimer = setTimeout(processChanges, DEBOUNCE_MS);
216
- });
217
- watcher.on('add', (filePath) => {
218
- const relativePath = path.relative(repoRoot, filePath);
219
- pendingFiles.add(relativePath);
220
- if (debounceTimer)
221
- clearTimeout(debounceTimer);
222
- debounceTimer = setTimeout(processChanges, DEBOUNCE_MS);
223
- });
224
- watcher.on('error', (err) => {
225
- const errorMsg = err instanceof Error ? err.message : String(err);
226
- console.error(`❌ Watcher error: ${errorMsg}`);
227
- });
228
- // Handle graceful shutdown
229
- process.on('SIGINT', () => {
230
- console.log('\n🕷️ Watch mode stopped.');
231
- watcher.close();
232
- hubSocket?.disconnect();
233
- process.exit(0);
234
- });
235
- process.on('SIGTERM', () => {
236
- watcher.close();
237
- hubSocket?.disconnect();
238
- process.exit(0);
239
- });
240
- });
241
- // ── Mode 1: Treetop Observer ──────────────────────────────────────────────────
242
- /**
243
- * Default ecosystem repos to watch. Override with --repos flag or
244
- * SPIDERSAN_REPOS env var (colon-separated paths).
245
- */
246
- function getDefaultTreetopRepos() {
247
- if (process.env.SPIDERSAN_REPOS) {
248
- return process.env.SPIDERSAN_REPOS.split(':').map((r) => r.trim()).filter(Boolean);
249
- }
250
- const homeDir = process.env.HOME || homedir();
251
- return [
252
- `${homeDir}/Dev/Envoak`,
253
- `${homeDir}/Dev/treebird-internal`,
254
- `${homeDir}/Dev/spidersan`,
255
- `${homeDir}/Dev/Toak`,
256
- `${homeDir}/Dev/flockview`,
257
- `${homeDir}/Dev/mappersan`,
258
- ];
259
- }
260
- const DEFAULT_TREETOP_REPOS = getDefaultTreetopRepos();
261
- /**
262
- * Run one full observer tick: SYNC → SCAN → TEND → SURFACE.
263
- * Returns tier counts and idle status for adaptive sleep calculation.
264
- */
265
- async function runObserverTick(repos, dryRun, broadcastedConflicts) {
266
- let totalTier3 = 0;
267
- let totalTier2 = 0;
268
- let totalBranches = 0;
269
- const tier3Alerts = [];
270
- // ── STEP 1: SYNC ──────────────────────────────────────────────────────────
271
- // Pull colony gradient into local registry per repo.
272
- for (const repo of repos) {
273
- try {
274
- process.chdir(repo);
275
- await syncFromColony();
276
- }
277
- catch {
278
- // Repo not initialized or colony unreachable — continue
279
- }
280
- }
281
- // ── STEP 2: SCAN ─────────────────────────────────────────────────────────
282
- // Detect conflicts in each repo. spawnSync captures output even on exit 1.
283
- for (const repo of repos) {
284
- try {
285
- const result = spawnSync('spidersan', ['conflicts', '--json'], {
286
- cwd: repo,
287
- encoding: 'utf-8',
288
- timeout: 15000,
289
- });
290
- if (result.stdout) {
291
- const data = JSON.parse(result.stdout);
292
- const summary = data.summary ?? { tier3: 0, tier2: 0, tier1: 0 };
293
- totalTier3 += summary.tier3 ?? 0;
294
- totalTier2 += summary.tier2 ?? 0;
295
- // Count active branches via conflicts (each conflict references another branch)
296
- const otherBranches = new Set(data.conflicts?.map((c) => c.branch).filter(Boolean) ?? []);
297
- totalBranches += otherBranches.size;
298
- if ((summary.tier3 ?? 0) > 0) {
299
- const files = data.conflicts
300
- .filter((c) => c.tier === 3)
301
- .flatMap((c) => c.files ?? [])
302
- .slice(0, 3);
303
- tier3Alerts.push({ repo, files });
304
- }
305
- }
306
- }
307
- catch {
308
- // Repo not initialized or spidersan unavailable — skip
309
- }
310
- }
311
- // ── STEP 3: TEND ─────────────────────────────────────────────────────────
312
- // Colony GC (non-critical — always continue on failure).
313
- try {
314
- spawnSync('envoak', ['colony', 'gc'], { encoding: 'utf-8', timeout: 10000 });
315
- }
316
- catch {
317
- /* ignore */
318
- }
319
- // Stale check per repo (informational — no --auto-cleanup yet).
320
- for (const repo of repos) {
321
- try {
322
- spawnSync('spidersan', ['stale'], {
323
- cwd: repo,
324
- encoding: 'utf-8',
325
- timeout: 10000,
326
- });
327
- }
328
- catch {
329
- /* ignore */
330
- }
331
- }
332
- // ── STEP 4: SURFACE ───────────────────────────────────────────────────────
333
- // Broadcast TIER 3 alerts (deduplicated). Clear resolved conflicts.
334
- const currentKeys = new Set(tier3Alerts.map((a) => `${a.repo}:${a.files.join(',')}`));
335
- for (const alert of tier3Alerts) {
336
- const key = `${alert.repo}:${alert.files.join(',')}`;
337
- if (!broadcastedConflicts.has(key)) {
338
- broadcastedConflicts.add(key);
339
- const repoName = path.basename(alert.repo);
340
- const filesStr = alert.files.length > 0 ? alert.files.join(', ') : 'multiple files';
341
- const message = `ssan TIER 3: conflict in ${repoName} — ${filesStr}. Halt writes on affected files.`;
342
- if (dryRun) {
343
- console.log(`[DRY-RUN] Would broadcast TIER 3 alert: ${message}`);
344
- }
345
- else {
346
- const r = spawnSync('envoak', ['colony', 'broadcast', '--type', 'alert', '--message', message], { encoding: 'utf-8', timeout: 10000 });
347
- if (r.status === 0) {
348
- console.log(`[TIER 3] Broadcast: ${message}`);
349
- }
350
- else {
351
- console.error(`[TIER 3] Broadcast failed: ${r.stderr ?? r.stdout}`);
352
- }
353
- }
354
- }
355
- }
356
- // Evict resolved conflicts from dedup set
357
- for (const key of broadcastedConflicts) {
358
- if (!currentKeys.has(key)) {
359
- broadcastedConflicts.delete(key);
360
- }
361
- }
362
- const allIdle = totalTier3 === 0 && totalTier2 === 0 && totalBranches === 0;
363
- // Emit treetop heartbeat (skipped in dry-run)
364
- const summary = `Watching ${repos.length} repos, ${totalBranches} active branches. ` +
365
- `T3:${totalTier3} T2:${totalTier2}. GC run. Stale checked.`;
366
- console.log(`[TICK] ${new Date().toISOString()} — ${summary}`);
367
- if (!dryRun) {
368
- spawnSync('envoak', ['colony', 'signal', '--status', 'idle', '--task', 'treetop watch', '--summary', summary], { encoding: 'utf-8', timeout: 10000 });
369
- }
370
- return { tier3: totalTier3, tier2: totalTier2, repoCount: repos.length, branchCount: totalBranches, allIdle };
371
- }
372
- function resolveRepos(reposOption) {
373
- if (reposOption) {
374
- return reposOption.split(',').map((r) => r.trim()).filter(Boolean);
375
- }
376
- const envRepos = process.env['SPIDERSAN_REPOS'];
377
- if (envRepos) {
378
- return envRepos.split(':').map((r) => r.trim()).filter(Boolean);
379
- }
380
- return DEFAULT_TREETOP_REPOS;
381
- }
382
- function adaptiveInterval(result, baseMs) {
383
- if (result.tier3 > 0)
384
- return 15_000; // Stay alert
385
- if (result.tier2 > 0)
386
- return 30_000; // Watch closely
387
- if (result.allIdle)
388
- return 300_000; // Colony quiet — back off
389
- return baseMs;
390
- }
391
- const watchTreetopCommand = new Command('treetop')
392
- .description('Mode 1: treetop observer — periodic multi-repo conflict scan + colony gradient sync')
393
- .option('--interval <seconds>', 'Base tick interval in seconds (default: 120)', '120')
394
- .option('--repos <paths>', 'Comma-separated repo paths (overrides ecosystem defaults)')
395
- .option('--dry-run', 'Run one tick and exit — no sleep, no colony writes')
396
- .action(async (options) => {
397
- const repos = resolveRepos(options.repos);
398
- const baseMs = parseInt(options.interval, 10) * 1000;
399
- const dryRun = options.dryRun ?? false;
400
- console.log(`
401
- 🕷️ SPIDERSAN TREETOP OBSERVER (Mode 1)
402
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
403
- Repos: ${repos.length} (${repos.map((r) => path.basename(r)).join(', ')})
404
- Interval: ${options.interval}s base (adaptive)
405
- Dry-run: ${dryRun}
406
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
407
- ${dryRun ? 'Running one tick then exiting.' : 'Press Ctrl+C to stop.'}
408
- `);
409
- const broadcastedConflicts = new Set();
410
- if (dryRun) {
411
- await runObserverTick(repos, true, broadcastedConflicts);
412
- console.log('[DRY-RUN] Tick complete. Exiting.');
413
- return;
414
- }
415
- // Graceful shutdown
416
- let running = true;
417
- process.on('SIGINT', () => { running = false; console.log('\n🕷️ Treetop observer stopped.'); process.exit(0); });
418
- process.on('SIGTERM', () => { running = false; process.exit(0); });
419
- while (running) {
420
- const result = await runObserverTick(repos, false, broadcastedConflicts);
421
- const nextMs = adaptiveInterval(result, baseMs);
422
- console.log(`[SLEEP] Next tick in ${nextMs / 1000}s`);
423
- await new Promise((resolve) => setTimeout(resolve, nextMs));
424
- }
425
- });
426
- // Attach Mode 1 as a subcommand of watch
427
- watchCommand.addCommand(watchTreetopCommand);
428
- //# sourceMappingURL=watch.js.map