spidersan 0.10.0 → 0.20.2

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 (430) hide show
  1. package/CHANGELOG.md +171 -0
  2. package/README.md +39 -280
  3. package/dist/bin/command-registry.d.ts +25 -0
  4. package/dist/bin/command-registry.d.ts.map +1 -0
  5. package/dist/bin/command-registry.js +29 -0
  6. package/dist/bin/command-registry.js.map +1 -0
  7. package/dist/bin/spidersan.d.ts +7 -0
  8. package/dist/bin/spidersan.d.ts.map +1 -1
  9. package/dist/bin/spidersan.js +38 -57
  10. package/dist/bin/spidersan.js.map +1 -1
  11. package/dist/commands/cleanup.d.ts.map +1 -1
  12. package/dist/commands/cleanup.js +17 -3
  13. package/dist/commands/cleanup.js.map +1 -1
  14. package/dist/commands/config.d.ts.map +1 -1
  15. package/dist/commands/config.js +11 -39
  16. package/dist/commands/config.js.map +1 -1
  17. package/dist/commands/conflicts.d.ts +22 -0
  18. package/dist/commands/conflicts.d.ts.map +1 -1
  19. package/dist/commands/conflicts.js +459 -256
  20. package/dist/commands/conflicts.js.map +1 -1
  21. package/dist/commands/cross-conflicts.d.ts.map +1 -1
  22. package/dist/commands/cross-conflicts.js +7 -8
  23. package/dist/commands/cross-conflicts.js.map +1 -1
  24. package/dist/commands/depends.d.ts +4 -1
  25. package/dist/commands/depends.d.ts.map +1 -1
  26. package/dist/commands/depends.js +35 -8
  27. package/dist/commands/depends.js.map +1 -1
  28. package/dist/commands/doctor.d.ts.map +1 -1
  29. package/dist/commands/doctor.js +25 -7
  30. package/dist/commands/doctor.js.map +1 -1
  31. package/dist/commands/git-watch.d.ts +1 -1
  32. package/dist/commands/git-watch.js +1 -1
  33. package/dist/commands/github-sync.d.ts +33 -0
  34. package/dist/commands/github-sync.d.ts.map +1 -1
  35. package/dist/commands/github-sync.js +68 -57
  36. package/dist/commands/github-sync.js.map +1 -1
  37. package/dist/commands/index.d.ts +2 -13
  38. package/dist/commands/index.d.ts.map +1 -1
  39. package/dist/commands/index.js +5 -20
  40. package/dist/commands/index.js.map +1 -1
  41. package/dist/commands/merge-order.d.ts.map +1 -1
  42. package/dist/commands/merge-order.js +8 -4
  43. package/dist/commands/merge-order.js.map +1 -1
  44. package/dist/commands/merged.d.ts.map +1 -1
  45. package/dist/commands/merged.js +5 -1
  46. package/dist/commands/merged.js.map +1 -1
  47. package/dist/commands/pr-check.d.ts +24 -0
  48. package/dist/commands/pr-check.d.ts.map +1 -0
  49. package/dist/commands/pr-check.js +85 -0
  50. package/dist/commands/pr-check.js.map +1 -0
  51. package/dist/commands/ready-check.d.ts.map +1 -1
  52. package/dist/commands/ready-check.js +6 -3
  53. package/dist/commands/ready-check.js.map +1 -1
  54. package/dist/commands/register.d.ts +5 -0
  55. package/dist/commands/register.d.ts.map +1 -1
  56. package/dist/commands/register.js +14 -1
  57. package/dist/commands/register.js.map +1 -1
  58. package/dist/commands/registry-sync.d.ts.map +1 -1
  59. package/dist/commands/registry-sync.js +12 -46
  60. package/dist/commands/registry-sync.js.map +1 -1
  61. package/dist/commands/stale.d.ts.map +1 -1
  62. package/dist/commands/stale.js +8 -3
  63. package/dist/commands/stale.js.map +1 -1
  64. package/dist/commands/sync.d.ts +14 -1
  65. package/dist/commands/sync.d.ts.map +1 -1
  66. package/dist/commands/sync.js +49 -31
  67. package/dist/commands/sync.js.map +1 -1
  68. package/dist/commands/verify-trunk.d.ts +18 -0
  69. package/dist/commands/verify-trunk.d.ts.map +1 -0
  70. package/dist/commands/verify-trunk.js +77 -0
  71. package/dist/commands/verify-trunk.js.map +1 -0
  72. package/dist/commands/watch.d.ts +0 -1
  73. package/dist/commands/watch.d.ts.map +1 -1
  74. package/dist/commands/watch.js +50 -77
  75. package/dist/commands/watch.js.map +1 -1
  76. package/dist/index.d.ts +0 -3
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +0 -3
  79. package/dist/index.js.map +1 -1
  80. package/dist/lib/activity.d.ts.map +1 -1
  81. package/dist/lib/activity.js +6 -2
  82. package/dist/lib/activity.js.map +1 -1
  83. package/dist/lib/ai/context-builder.d.ts.map +1 -1
  84. package/dist/lib/ai/context-builder.js +19 -6
  85. package/dist/lib/ai/context-builder.js.map +1 -1
  86. package/dist/lib/ai/event-handler.d.ts.map +1 -1
  87. package/dist/lib/ai/event-handler.js +15 -2
  88. package/dist/lib/ai/event-handler.js.map +1 -1
  89. package/dist/lib/ai/reasoner.d.ts.map +1 -1
  90. package/dist/lib/ai/reasoner.js +63 -82
  91. package/dist/lib/ai/reasoner.js.map +1 -1
  92. package/dist/lib/ai/setup.d.ts +1 -1
  93. package/dist/lib/ai/setup.d.ts.map +1 -1
  94. package/dist/lib/ai/types.d.ts.map +1 -1
  95. package/dist/lib/ai/types.js +5 -2
  96. package/dist/lib/ai/types.js.map +1 -1
  97. package/dist/lib/ast.d.ts +10 -2
  98. package/dist/lib/ast.d.ts.map +1 -1
  99. package/dist/lib/ast.js +52 -27
  100. package/dist/lib/ast.js.map +1 -1
  101. package/dist/lib/carries.d.ts +22 -0
  102. package/dist/lib/carries.d.ts.map +1 -0
  103. package/dist/lib/carries.js +56 -0
  104. package/dist/lib/carries.js.map +1 -0
  105. package/dist/lib/colony-subscriber.d.ts +1 -1
  106. package/dist/lib/colony-subscriber.js +1 -1
  107. package/dist/lib/config.d.ts +2 -2
  108. package/dist/lib/config.d.ts.map +1 -1
  109. package/dist/lib/config.js +13 -8
  110. package/dist/lib/config.js.map +1 -1
  111. package/dist/lib/conflict-renderer.d.ts.map +1 -1
  112. package/dist/lib/conflict-renderer.js +17 -34
  113. package/dist/lib/conflict-renderer.js.map +1 -1
  114. package/dist/lib/ecosystem-env.d.ts +33 -0
  115. package/dist/lib/ecosystem-env.d.ts.map +1 -0
  116. package/dist/lib/ecosystem-env.js +62 -0
  117. package/dist/lib/ecosystem-env.js.map +1 -0
  118. package/dist/lib/git-events-subscriber.d.ts +27 -0
  119. package/dist/lib/git-events-subscriber.d.ts.map +1 -1
  120. package/dist/lib/git-events-subscriber.js +149 -58
  121. package/dist/lib/git-events-subscriber.js.map +1 -1
  122. package/dist/lib/git-merge-analyzer.d.ts +38 -0
  123. package/dist/lib/git-merge-analyzer.d.ts.map +1 -0
  124. package/dist/lib/git-merge-analyzer.js +23 -0
  125. package/dist/lib/git-merge-analyzer.js.map +1 -0
  126. package/dist/lib/git.d.ts +88 -0
  127. package/dist/lib/git.d.ts.map +1 -1
  128. package/dist/lib/git.js +499 -9
  129. package/dist/lib/git.js.map +1 -1
  130. package/dist/lib/github.d.ts +69 -1
  131. package/dist/lib/github.d.ts.map +1 -1
  132. package/dist/lib/github.js +230 -16
  133. package/dist/lib/github.js.map +1 -1
  134. package/dist/lib/graph.d.ts +15 -0
  135. package/dist/lib/graph.d.ts.map +1 -1
  136. package/dist/lib/graph.js +31 -0
  137. package/dist/lib/graph.js.map +1 -1
  138. package/dist/lib/machine.d.ts +14 -0
  139. package/dist/lib/machine.d.ts.map +1 -0
  140. package/dist/lib/machine.js +38 -0
  141. package/dist/lib/machine.js.map +1 -0
  142. package/dist/lib/notify.d.ts +68 -0
  143. package/dist/lib/notify.d.ts.map +1 -0
  144. package/dist/lib/notify.js +111 -0
  145. package/dist/lib/notify.js.map +1 -0
  146. package/dist/lib/outline.d.ts +6 -0
  147. package/dist/lib/outline.d.ts.map +1 -0
  148. package/dist/lib/outline.js +60 -0
  149. package/dist/lib/outline.js.map +1 -0
  150. package/dist/lib/push-registry.d.ts +22 -0
  151. package/dist/lib/push-registry.d.ts.map +1 -0
  152. package/dist/lib/push-registry.js +21 -0
  153. package/dist/lib/push-registry.js.map +1 -0
  154. package/dist/lib/reconcile.d.ts +100 -0
  155. package/dist/lib/reconcile.d.ts.map +1 -0
  156. package/dist/lib/reconcile.js +121 -0
  157. package/dist/lib/reconcile.js.map +1 -0
  158. package/dist/lib/security.d.ts +1 -6
  159. package/dist/lib/security.d.ts.map +1 -1
  160. package/dist/lib/security.js +1 -11
  161. package/dist/lib/security.js.map +1 -1
  162. package/dist/lib/semantic-analysis.d.ts +31 -0
  163. package/dist/lib/semantic-analysis.d.ts.map +1 -0
  164. package/dist/lib/semantic-analysis.js +120 -0
  165. package/dist/lib/semantic-analysis.js.map +1 -0
  166. package/dist/lib/supabase-credentials.d.ts +36 -0
  167. package/dist/lib/supabase-credentials.d.ts.map +1 -0
  168. package/dist/lib/supabase-credentials.js +43 -0
  169. package/dist/lib/supabase-credentials.js.map +1 -0
  170. package/dist/lib/trunk.d.ts +39 -0
  171. package/dist/lib/trunk.d.ts.map +1 -0
  172. package/dist/lib/trunk.js +116 -0
  173. package/dist/lib/trunk.js.map +1 -0
  174. package/dist/storage/adapter.d.ts +20 -1
  175. package/dist/storage/adapter.d.ts.map +1 -1
  176. package/dist/storage/branch-registry-store.d.ts +1 -1
  177. package/dist/storage/branch-registry-store.d.ts.map +1 -1
  178. package/dist/storage/factory.d.ts +0 -4
  179. package/dist/storage/factory.d.ts.map +1 -1
  180. package/dist/storage/factory.js +2 -26
  181. package/dist/storage/factory.js.map +1 -1
  182. package/dist/storage/json-branch-registry-store.d.ts +1 -1
  183. package/dist/storage/json-branch-registry-store.d.ts.map +1 -1
  184. package/dist/storage/json-branch-registry-store.js +33 -7
  185. package/dist/storage/json-branch-registry-store.js.map +1 -1
  186. package/dist/storage/local.d.ts +1 -1
  187. package/dist/storage/local.d.ts.map +1 -1
  188. package/dist/storage/local.js +2 -2
  189. package/dist/storage/local.js.map +1 -1
  190. package/dist/storage/memory-branch-registry-store.d.ts +1 -1
  191. package/dist/storage/memory-branch-registry-store.d.ts.map +1 -1
  192. package/dist/storage/memory-branch-registry-store.js +4 -1
  193. package/dist/storage/memory-branch-registry-store.js.map +1 -1
  194. package/dist/storage/supabase-registry-sync-client-impl.d.ts +1 -7
  195. package/dist/storage/supabase-registry-sync-client-impl.d.ts.map +1 -1
  196. package/dist/storage/supabase-registry-sync-client-impl.js +17 -61
  197. package/dist/storage/supabase-registry-sync-client-impl.js.map +1 -1
  198. package/dist/storage/supabase-registry-sync-client.d.ts +1 -1
  199. package/dist/storage/supabase-registry-sync-client.d.ts.map +1 -1
  200. package/dist/storage/supabase.d.ts +3 -9
  201. package/dist/storage/supabase.d.ts.map +1 -1
  202. package/dist/storage/supabase.js +4 -22
  203. package/dist/storage/supabase.js.map +1 -1
  204. package/dist/types/cloud.d.ts +1 -0
  205. package/dist/types/cloud.d.ts.map +1 -1
  206. package/package.json +88 -90
  207. package/dist/commands/activate.d.ts +0 -9
  208. package/dist/commands/activate.d.ts.map +0 -1
  209. package/dist/commands/activate.js +0 -45
  210. package/dist/commands/activate.js.map +0 -1
  211. package/dist/commands/active-windows.d.ts +0 -16
  212. package/dist/commands/active-windows.d.ts.map +0 -1
  213. package/dist/commands/active-windows.js +0 -373
  214. package/dist/commands/active-windows.js.map +0 -1
  215. package/dist/commands/ai.d.ts +0 -15
  216. package/dist/commands/ai.d.ts.map +0 -1
  217. package/dist/commands/ai.js +0 -498
  218. package/dist/commands/ai.js.map +0 -1
  219. package/dist/commands/audit-mark.d.ts +0 -12
  220. package/dist/commands/audit-mark.d.ts.map +0 -1
  221. package/dist/commands/audit-mark.js +0 -204
  222. package/dist/commands/audit-mark.js.map +0 -1
  223. package/dist/commands/auto.d.ts +0 -8
  224. package/dist/commands/auto.d.ts.map +0 -1
  225. package/dist/commands/auto.js +0 -207
  226. package/dist/commands/auto.js.map +0 -1
  227. package/dist/commands/bot.d.ts +0 -16
  228. package/dist/commands/bot.d.ts.map +0 -1
  229. package/dist/commands/bot.js +0 -416
  230. package/dist/commands/bot.js.map +0 -1
  231. package/dist/commands/close.d.ts +0 -9
  232. package/dist/commands/close.d.ts.map +0 -1
  233. package/dist/commands/close.js +0 -129
  234. package/dist/commands/close.js.map +0 -1
  235. package/dist/commands/collab-sync.d.ts +0 -14
  236. package/dist/commands/collab-sync.d.ts.map +0 -1
  237. package/dist/commands/collab-sync.js +0 -264
  238. package/dist/commands/collab-sync.js.map +0 -1
  239. package/dist/commands/collab.d.ts +0 -6
  240. package/dist/commands/collab.d.ts.map +0 -1
  241. package/dist/commands/collab.js +0 -103
  242. package/dist/commands/collab.js.map +0 -1
  243. package/dist/commands/completions.d.ts +0 -8
  244. package/dist/commands/completions.d.ts.map +0 -1
  245. package/dist/commands/completions.js +0 -83
  246. package/dist/commands/completions.js.map +0 -1
  247. package/dist/commands/daily.d.ts +0 -7
  248. package/dist/commands/daily.d.ts.map +0 -1
  249. package/dist/commands/daily.js +0 -171
  250. package/dist/commands/daily.js.map +0 -1
  251. package/dist/commands/dashboard.d.ts +0 -22
  252. package/dist/commands/dashboard.d.ts.map +0 -1
  253. package/dist/commands/dashboard.js +0 -401
  254. package/dist/commands/dashboard.js.map +0 -1
  255. package/dist/commands/demo.d.ts +0 -3
  256. package/dist/commands/demo.d.ts.map +0 -1
  257. package/dist/commands/demo.js +0 -118
  258. package/dist/commands/demo.js.map +0 -1
  259. package/dist/commands/ecosystem-loader.d.ts +0 -14
  260. package/dist/commands/ecosystem-loader.d.ts.map +0 -1
  261. package/dist/commands/ecosystem-loader.js +0 -90
  262. package/dist/commands/ecosystem-loader.js.map +0 -1
  263. package/dist/commands/fleet-status.d.ts +0 -14
  264. package/dist/commands/fleet-status.d.ts.map +0 -1
  265. package/dist/commands/fleet-status.js +0 -127
  266. package/dist/commands/fleet-status.js.map +0 -1
  267. package/dist/commands/inbox.d.ts +0 -3
  268. package/dist/commands/inbox.d.ts.map +0 -1
  269. package/dist/commands/inbox.js +0 -120
  270. package/dist/commands/inbox.js.map +0 -1
  271. package/dist/commands/intent-scan.d.ts +0 -17
  272. package/dist/commands/intent-scan.d.ts.map +0 -1
  273. package/dist/commands/intent-scan.js +0 -336
  274. package/dist/commands/intent-scan.js.map +0 -1
  275. package/dist/commands/key-import.d.ts +0 -3
  276. package/dist/commands/key-import.d.ts.map +0 -1
  277. package/dist/commands/key-import.js +0 -54
  278. package/dist/commands/key-import.js.map +0 -1
  279. package/dist/commands/keygen.d.ts +0 -3
  280. package/dist/commands/keygen.d.ts.map +0 -1
  281. package/dist/commands/keygen.js +0 -53
  282. package/dist/commands/keygen.js.map +0 -1
  283. package/dist/commands/keys.d.ts +0 -3
  284. package/dist/commands/keys.d.ts.map +0 -1
  285. package/dist/commands/keys.js +0 -56
  286. package/dist/commands/keys.js.map +0 -1
  287. package/dist/commands/lock.d.ts +0 -11
  288. package/dist/commands/lock.d.ts.map +0 -1
  289. package/dist/commands/lock.js +0 -257
  290. package/dist/commands/lock.js.map +0 -1
  291. package/dist/commands/mcp-health.d.ts +0 -3
  292. package/dist/commands/mcp-health.d.ts.map +0 -1
  293. package/dist/commands/mcp-health.js +0 -305
  294. package/dist/commands/mcp-health.js.map +0 -1
  295. package/dist/commands/mcp-restart.d.ts +0 -3
  296. package/dist/commands/mcp-restart.d.ts.map +0 -1
  297. package/dist/commands/mcp-restart.js +0 -176
  298. package/dist/commands/mcp-restart.js.map +0 -1
  299. package/dist/commands/monitor.d.ts +0 -3
  300. package/dist/commands/monitor.d.ts.map +0 -1
  301. package/dist/commands/monitor.js +0 -153
  302. package/dist/commands/monitor.js.map +0 -1
  303. package/dist/commands/msg-read.d.ts +0 -3
  304. package/dist/commands/msg-read.d.ts.map +0 -1
  305. package/dist/commands/msg-read.js +0 -95
  306. package/dist/commands/msg-read.js.map +0 -1
  307. package/dist/commands/pulse.d.ts +0 -13
  308. package/dist/commands/pulse.d.ts.map +0 -1
  309. package/dist/commands/pulse.js +0 -174
  310. package/dist/commands/pulse.js.map +0 -1
  311. package/dist/commands/queen.d.ts +0 -25
  312. package/dist/commands/queen.d.ts.map +0 -1
  313. package/dist/commands/queen.js +0 -326
  314. package/dist/commands/queen.js.map +0 -1
  315. package/dist/commands/radar.d.ts +0 -3
  316. package/dist/commands/radar.d.ts.map +0 -1
  317. package/dist/commands/radar.js +0 -147
  318. package/dist/commands/radar.js.map +0 -1
  319. package/dist/commands/rescue.d.ts +0 -11
  320. package/dist/commands/rescue.d.ts.map +0 -1
  321. package/dist/commands/rescue.js +0 -147
  322. package/dist/commands/rescue.js.map +0 -1
  323. package/dist/commands/semantic.d.ts +0 -3
  324. package/dist/commands/semantic.d.ts.map +0 -1
  325. package/dist/commands/semantic.js +0 -62
  326. package/dist/commands/semantic.js.map +0 -1
  327. package/dist/commands/send.d.ts +0 -3
  328. package/dist/commands/send.d.ts.map +0 -1
  329. package/dist/commands/send.js +0 -121
  330. package/dist/commands/send.js.map +0 -1
  331. package/dist/commands/status.d.ts +0 -9
  332. package/dist/commands/status.d.ts.map +0 -1
  333. package/dist/commands/status.js +0 -41
  334. package/dist/commands/status.js.map +0 -1
  335. package/dist/commands/sync-advisor.d.ts +0 -14
  336. package/dist/commands/sync-advisor.d.ts.map +0 -1
  337. package/dist/commands/sync-advisor.js +0 -110
  338. package/dist/commands/sync-advisor.js.map +0 -1
  339. package/dist/commands/tension.d.ts +0 -12
  340. package/dist/commands/tension.d.ts.map +0 -1
  341. package/dist/commands/tension.js +0 -262
  342. package/dist/commands/tension.js.map +0 -1
  343. package/dist/commands/torrent.d.ts +0 -9
  344. package/dist/commands/torrent.d.ts.map +0 -1
  345. package/dist/commands/torrent.js +0 -470
  346. package/dist/commands/torrent.js.map +0 -1
  347. package/dist/commands/tui.d.ts +0 -8
  348. package/dist/commands/tui.d.ts.map +0 -1
  349. package/dist/commands/tui.js +0 -15
  350. package/dist/commands/tui.js.map +0 -1
  351. package/dist/commands/wake.d.ts +0 -9
  352. package/dist/commands/wake.d.ts.map +0 -1
  353. package/dist/commands/wake.js +0 -188
  354. package/dist/commands/wake.js.map +0 -1
  355. package/dist/commands/welcome.d.ts +0 -8
  356. package/dist/commands/welcome.d.ts.map +0 -1
  357. package/dist/commands/welcome.js +0 -85
  358. package/dist/commands/welcome.js.map +0 -1
  359. package/dist/commands/who-owns.d.ts +0 -3
  360. package/dist/commands/who-owns.d.ts.map +0 -1
  361. package/dist/commands/who-owns.js +0 -68
  362. package/dist/commands/who-owns.js.map +0 -1
  363. package/dist/commands/who-touched.d.ts +0 -9
  364. package/dist/commands/who-touched.d.ts.map +0 -1
  365. package/dist/commands/who-touched.js +0 -198
  366. package/dist/commands/who-touched.js.map +0 -1
  367. package/dist/lib/crdt.d.ts +0 -83
  368. package/dist/lib/crdt.d.ts.map +0 -1
  369. package/dist/lib/crdt.js +0 -160
  370. package/dist/lib/crdt.js.map +0 -1
  371. package/dist/lib/daily-bridge.d.ts +0 -41
  372. package/dist/lib/daily-bridge.d.ts.map +0 -1
  373. package/dist/lib/daily-bridge.js +0 -186
  374. package/dist/lib/daily-bridge.js.map +0 -1
  375. package/dist/lib/hub.d.ts +0 -31
  376. package/dist/lib/hub.d.ts.map +0 -1
  377. package/dist/lib/hub.js +0 -92
  378. package/dist/lib/hub.js.map +0 -1
  379. package/dist/lib/license.d.ts +0 -61
  380. package/dist/lib/license.d.ts.map +0 -1
  381. package/dist/lib/license.js +0 -171
  382. package/dist/lib/license.js.map +0 -1
  383. package/dist/lib/pulse-renderer.d.ts +0 -19
  384. package/dist/lib/pulse-renderer.d.ts.map +0 -1
  385. package/dist/lib/pulse-renderer.js +0 -108
  386. package/dist/lib/pulse-renderer.js.map +0 -1
  387. package/dist/lib/repo-scanner.d.ts +0 -32
  388. package/dist/lib/repo-scanner.d.ts.map +0 -1
  389. package/dist/lib/repo-scanner.js +0 -160
  390. package/dist/lib/repo-scanner.js.map +0 -1
  391. package/dist/lib/salvage-analyzer.d.ts +0 -29
  392. package/dist/lib/salvage-analyzer.d.ts.map +0 -1
  393. package/dist/lib/salvage-analyzer.js +0 -121
  394. package/dist/lib/salvage-analyzer.js.map +0 -1
  395. package/dist/lib/session-logger.d.ts +0 -54
  396. package/dist/lib/session-logger.d.ts.map +0 -1
  397. package/dist/lib/session-logger.js +0 -136
  398. package/dist/lib/session-logger.js.map +0 -1
  399. package/dist/lib/symbol-extractor.d.ts +0 -41
  400. package/dist/lib/symbol-extractor.d.ts.map +0 -1
  401. package/dist/lib/symbol-extractor.js +0 -78
  402. package/dist/lib/symbol-extractor.js.map +0 -1
  403. package/dist/storage/git-messages.d.ts +0 -53
  404. package/dist/storage/git-messages.d.ts.map +0 -1
  405. package/dist/storage/git-messages.js +0 -376
  406. package/dist/storage/git-messages.js.map +0 -1
  407. package/dist/storage/local-messages.d.ts +0 -37
  408. package/dist/storage/local-messages.d.ts.map +0 -1
  409. package/dist/storage/local-messages.js +0 -151
  410. package/dist/storage/local-messages.js.map +0 -1
  411. package/dist/storage/message-adapter.d.ts +0 -86
  412. package/dist/storage/message-adapter.d.ts.map +0 -1
  413. package/dist/storage/message-adapter.js +0 -28
  414. package/dist/storage/message-adapter.js.map +0 -1
  415. package/dist/storage/message-factory.d.ts +0 -36
  416. package/dist/storage/message-factory.d.ts.map +0 -1
  417. package/dist/storage/message-factory.js +0 -99
  418. package/dist/storage/message-factory.js.map +0 -1
  419. package/dist/storage/mycmail-adapter.d.ts +0 -38
  420. package/dist/storage/mycmail-adapter.d.ts.map +0 -1
  421. package/dist/storage/mycmail-adapter.js +0 -300
  422. package/dist/storage/mycmail-adapter.js.map +0 -1
  423. package/dist/tui/dashboard.d.ts +0 -35
  424. package/dist/tui/dashboard.d.ts.map +0 -1
  425. package/dist/tui/dashboard.js +0 -199
  426. package/dist/tui/dashboard.js.map +0 -1
  427. package/dist/tui/screen.d.ts +0 -14
  428. package/dist/tui/screen.d.ts.map +0 -1
  429. package/dist/tui/screen.js +0 -138
  430. package/dist/tui/screen.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,8 +0,0 @@
1
- /**
2
- * spidersan welcome
3
- *
4
- * Friendly onboarding and quick start for core CLI.
5
- */
6
- import { Command } from 'commander';
7
- export declare const welcomeCommand: Command;
8
- //# sourceMappingURL=welcome.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"welcome.d.ts","sourceRoot":"","sources":["../../src/commands/welcome.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoFpC,eAAO,MAAM,cAAc,SAIrB,CAAC"}
@@ -1,85 +0,0 @@
1
- /**
2
- * spidersan welcome
3
- *
4
- * Friendly onboarding and quick start for core CLI.
5
- */
6
- import { Command } from 'commander';
7
- import { existsSync } from 'fs';
8
- import { join } from 'path';
9
- const colors = {
10
- reset: '\x1b[0m',
11
- bright: '\x1b[1m',
12
- dim: '\x1b[2m',
13
- yellow: '\x1b[33m',
14
- magenta: '\x1b[35m',
15
- cyan: '\x1b[36m',
16
- green: '\x1b[32m',
17
- };
18
- const c = colors;
19
- function sleep(ms) {
20
- return new Promise(resolve => setTimeout(resolve, ms));
21
- }
22
- async function runWelcome() {
23
- console.log(`
24
- ${c.bright}${c.magenta}🕷️ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}
25
- ${c.bright}${c.magenta} SPIDERSAN WELCOMES YOU TO THE WEB${c.reset}
26
- ${c.bright}${c.magenta}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}
27
- `);
28
- await sleep(500);
29
- console.log(`${c.cyan} You are not alone in this codebase.${c.reset}`);
30
- await sleep(450);
31
- console.log(`${c.cyan} Other agents weave alongside you.${c.reset}`);
32
- await sleep(450);
33
- console.log(`${c.cyan} The web keeps you from colliding.${c.reset}`);
34
- await sleep(700);
35
- const initialized = existsSync(join(process.cwd(), '.spidersan', 'registry.json'));
36
- if (!initialized) {
37
- console.log(`
38
- ${c.yellow}🕸️ FIRST TIME HERE?${c.reset}
39
- ${c.bright}Step 1:${c.reset} Initialize the web in your project
40
- ${c.green}$ spidersan init${c.reset}
41
- `);
42
- }
43
- else {
44
- console.log(`
45
- ${c.green}✓ Web initialized in this project${c.reset}
46
- `);
47
- }
48
- console.log(`${c.cyan}🕸️ QUICK START:${c.reset}
49
-
50
- ${c.bright}Register your branch:${c.reset}
51
- ${c.green}$ spidersan register --files "src/myfile.ts" --agent myname${c.reset}
52
-
53
- ${c.bright}Check for conflicts:${c.reset}
54
- ${c.green}$ spidersan conflicts${c.reset}
55
-
56
- ${c.bright}When done:${c.reset}
57
- ${c.green}$ spidersan merged${c.reset}
58
- `);
59
- await sleep(600);
60
- console.log(`${c.bright}${c.cyan}⚙️ CONFIG SETUP${c.reset}
61
-
62
- ${c.dim}Set your default agent + storage in a guided wizard:${c.reset}
63
- ${c.green}$ spidersan config wizard${c.reset}
64
- `);
65
- await sleep(600);
66
- console.log(`${c.bright}${c.cyan}⚡ AUTO-WATCH${c.reset}
67
-
68
- ${c.dim}Start a background watcher from config paths:${c.reset}
69
- ${c.green}$ spidersan auto start${c.reset}
70
-
71
- ${c.dim}Or run a foreground watcher:${c.reset}
72
- ${c.green}$ spidersan watch --agent myname${c.reset}
73
- `);
74
- await sleep(600);
75
- console.log(`${c.magenta}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}
76
- ${c.bright}${c.magenta} The web sees all. The web protects all.${c.reset}
77
- ${c.bright}${c.magenta}🕷️ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${c.reset}
78
- `);
79
- }
80
- export const welcomeCommand = new Command('welcome')
81
- .description('🕷️ Welcome ritual - start here if you are new')
82
- .action(async () => {
83
- await runWelcome();
84
- });
85
- //# sourceMappingURL=welcome.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"welcome.js","sourceRoot":"","sources":["../../src/commands/welcome.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const whoOwnsCommand: Command;
3
- //# sourceMappingURL=who-owns.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"who-owns.d.ts","sourceRoot":"","sources":["../../src/commands/who-owns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,cAAc,SAsErB,CAAC"}
@@ -1,68 +0,0 @@
1
- import { Command } from 'commander';
2
- import { execa } from 'execa';
3
- import fs from 'fs';
4
- import path from 'path';
5
- export const whoOwnsCommand = new Command('who-owns')
6
- .description('Identify the owner of a file or directory based on git history')
7
- .argument('[path]', 'Path to check', '.')
8
- .option('-l, --limit <number>', 'Number of top contributors to show', '5')
9
- .option('--json', 'Output as JSON')
10
- .action(async (targetPath, options) => {
11
- const absolutePath = path.resolve(process.cwd(), targetPath);
12
- if (!fs.existsSync(absolutePath)) {
13
- console.error(`❌ Path not found: ${targetPath}`);
14
- process.exit(1);
15
- }
16
- const isDirectory = fs.statSync(absolutePath).isDirectory();
17
- const gitCwd = isDirectory ? absolutePath : path.dirname(absolutePath);
18
- try {
19
- // Get last modified by
20
- const { stdout: lastAuthor } = await execa('git', [
21
- 'log', '-1', '--format=%an <%ae> (%cr)', isDirectory ? '.' : path.basename(absolutePath)
22
- ], { cwd: gitCwd });
23
- // Get top contributors
24
- const { stdout: contributors } = await execa('git', [
25
- 'shortlog', '-sn', '--no-merges', '--', isDirectory ? '.' : path.basename(absolutePath)
26
- ], { cwd: gitCwd });
27
- const topContributors = contributors
28
- .split('\n')
29
- .filter(Boolean)
30
- .map(line => {
31
- const [count, ...nameParts] = line.trim().split('\t');
32
- return { count: parseInt(count), name: nameParts.join('\t') };
33
- })
34
- .slice(0, parseInt(options.limit));
35
- if (options.json) {
36
- console.log(JSON.stringify({
37
- path: targetPath,
38
- type: isDirectory ? 'directory' : 'file',
39
- lastModifiedBy: lastAuthor,
40
- topContributors
41
- }, null, 2));
42
- return;
43
- }
44
- console.log(`\n🔍 Ownership Report: ${targetPath}\n`);
45
- console.log(` 📂 Type: ${isDirectory ? 'Directory' : 'File'}`);
46
- console.log(` ✍️ Last Modified: ${lastAuthor || 'Unknown'}\n`);
47
- console.log(` 🏆 Top Contributors:`);
48
- if (topContributors.length === 0) {
49
- console.log(' No git history found.');
50
- }
51
- else {
52
- topContributors.forEach((c, i) => {
53
- const medal = i === 0 ? '🥇' : i === 1 ? '🥈' : i === 2 ? '🥉' : ' ';
54
- console.log(` ${medal} ${c.count.toString().padEnd(5)} ${c.name}`);
55
- });
56
- }
57
- console.log('');
58
- }
59
- catch (error) {
60
- console.error(`❌ Failed to check ownership: ${error.message}`);
61
- // Check if it's a git repo
62
- if (error.message.includes('not a git repository')) {
63
- console.error(' Current directory is not a git repository.');
64
- }
65
- process.exit(1);
66
- }
67
- });
68
- //# sourceMappingURL=who-owns.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"who-owns.js","sourceRoot":"","sources":["../../src/commands/who-owns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;KAChD,WAAW,CAAC,gEAAgE,CAAC;KAC7E,QAAQ,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,CAAC;KACxC,MAAM,CAAC,sBAAsB,EAAE,oCAAoC,EAAE,GAAG,CAAC;KACzE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE;IAClC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;IAE7D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,WAAW,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;IAE5D,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAEvE,IAAI,CAAC;QACD,uBAAuB;QACvB,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE;YAC9C,KAAK,EAAE,IAAI,EAAE,0BAA0B,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;SAC3F,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;QAEpB,uBAAuB;QACvB,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE;YAChD,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;SAC1F,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;QAEpB,MAAM,eAAe,GAAG,YAAY;aAC/B,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,OAAO,CAAC;aACf,GAAG,CAAC,IAAI,CAAC,EAAE;YACR,MAAM,CAAC,KAAK,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACtD,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClE,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAEvC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBACvB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM;gBACxC,cAAc,EAAE,UAAU;gBAC1B,eAAe;aAClB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACb,OAAO;QACX,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,0BAA0B,UAAU,IAAI,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,cAAc,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,wBAAwB,UAAU,IAAI,SAAS,IAAI,CAAC,CAAC;QAEjE,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACJ,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC7B,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;gBACtE,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1E,CAAC,CAAC,CAAC;QACP,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEpB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,gCAAgC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,2BAA2B;QAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;YACjD,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,9 +0,0 @@
1
- /**
2
- * spidersan who-touched <file>
3
- *
4
- * Show git history of who touched a file, enriched with agent info.
5
- * Quick forensics for multi-agent coordination.
6
- */
7
- import { Command } from 'commander';
8
- export declare const whoTouchedCommand: Command;
9
- //# sourceMappingURL=who-touched.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"who-touched.d.ts","sourceRoot":"","sources":["../../src/commands/who-touched.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgJpC,eAAO,MAAM,iBAAiB,SAsFxB,CAAC"}
@@ -1,198 +0,0 @@
1
- /**
2
- * spidersan who-touched <file>
3
- *
4
- * Show git history of who touched a file, enriched with agent info.
5
- * Quick forensics for multi-agent coordination.
6
- */
7
- import { Command } from 'commander';
8
- import { execFileSync } from 'child_process';
9
- import { existsSync } from 'fs';
10
- // Security: Input validation
11
- const VALID_FILE_PATH = /^[a-zA-Z0-9._/-]+$/;
12
- function validateFilePath(path) {
13
- if (!VALID_FILE_PATH.test(path)) {
14
- throw new Error(`Invalid file path: "${path.slice(0, 50)}..."`);
15
- }
16
- return path;
17
- }
18
- /**
19
- * Extract agent ID from commit message or author
20
- * Looks for patterns like:
21
- * - 🕷️ Spidersan: ...
22
- * - [mappersan] ...
23
- * - Author email containing agent name
24
- */
25
- function extractAgentFromCommit(entry) {
26
- const message = entry.subject.toLowerCase();
27
- const author = entry.author.toLowerCase();
28
- const email = entry.email.toLowerCase();
29
- // Known agent patterns in commit messages
30
- const agentPatterns = [
31
- /🕷️\s*(\w+san)/i,
32
- /🕵️\s*(\w+san)/i,
33
- /🗺️\s*(\w+san)/i,
34
- /🌊\s*(\w+san)/i,
35
- /🐦\s*(\w+san)/i,
36
- /🎨\s*(\w+san)/i,
37
- /📣\s*(\w+san)/i,
38
- /📿\s*(\w+san)/i,
39
- /🍄\s*(\w+san)/i,
40
- /🌳\s*(\w+san)/i,
41
- /🥷\s*(\w+san)/i,
42
- /\[(\w+san)\]/i,
43
- /^(\w+san):/i,
44
- ];
45
- for (const pattern of agentPatterns) {
46
- const match = message.match(pattern);
47
- if (match)
48
- return match[1].toLowerCase();
49
- }
50
- // Check author/email for agent names
51
- const knownAgents = [
52
- 'spidersan', 'sherlocksan', 'mappersan', 'watsan', 'birdsan',
53
- 'artisan', 'marksan', 'yosef', 'myceliumail', 'sasusan', 'treesan'
54
- ];
55
- for (const agent of knownAgents) {
56
- if (author.includes(agent) || email.includes(agent)) {
57
- return agent;
58
- }
59
- }
60
- return undefined;
61
- }
62
- function getAgentGlyph(agent) {
63
- const glyphs = {
64
- 'spidersan': '🕷️',
65
- 'sherlocksan': '🕵️',
66
- 'mappersan': '🗺️',
67
- 'watsan': '🌊',
68
- 'birdsan': '🐦',
69
- 'artisan': '🎨',
70
- 'marksan': '📣',
71
- 'yosef': '📿',
72
- 'myceliumail': '🍄',
73
- 'sasusan': '🥷',
74
- 'treesan': '🌳',
75
- 'treebird': '🌳',
76
- };
77
- return glyphs[agent.toLowerCase()] || '👤';
78
- }
79
- function getFileHistory(filePath, limit) {
80
- try {
81
- // Use %x00 as delimiter for safety
82
- const format = '%H%x00%h%x00%an%x00%ae%x00%ai%x00%ar%x00%s';
83
- const output = execFileSync('git', ['log', '-n', `${limit}`, '--follow', `--format=${format}`, '--', filePath], { encoding: 'utf-8', maxBuffer: 1024 * 1024 });
84
- const entries = [];
85
- const lines = output.trim().split('\n').filter(l => l);
86
- for (const line of lines) {
87
- const parts = line.split('\0');
88
- if (parts.length >= 7) {
89
- const entry = {
90
- hash: parts[0],
91
- shortHash: parts[1],
92
- author: parts[2],
93
- email: parts[3],
94
- date: parts[4],
95
- relativeDate: parts[5],
96
- subject: parts[6],
97
- };
98
- entry.agent = extractAgentFromCommit(entry);
99
- entries.push(entry);
100
- }
101
- }
102
- return entries;
103
- }
104
- catch (error) {
105
- throw new Error(`Failed to get git history for "${filePath}"`);
106
- }
107
- }
108
- function parseSinceDate(since) {
109
- try {
110
- const output = execFileSync('date', ['-d', since, '+%s'], { encoding: 'utf-8' }).trim();
111
- return parseInt(output, 10);
112
- }
113
- catch {
114
- // GNU date failed; try BSD date format (macOS)
115
- }
116
- try {
117
- const output = execFileSync('date', ['-j', '-f', '%Y-%m-%d', since, '+%s'], { encoding: 'utf-8' }).trim();
118
- return parseInt(output, 10);
119
- }
120
- catch {
121
- return null;
122
- }
123
- }
124
- export const whoTouchedCommand = new Command('who-touched')
125
- .description('Show who touched a file (git history with agent detection)')
126
- .argument('<file>', 'File path to check history for')
127
- .option('-n, --limit <count>', 'Number of commits to show', '10')
128
- .option('--json', 'Output as JSON')
129
- .option('--agents-only', 'Only show commits from detected agents')
130
- .option('--since <date>', 'Show commits since date (e.g., "2 days ago")')
131
- .action(async (file, options) => {
132
- // Validate input
133
- const safePath = validateFilePath(file);
134
- const limit = parseInt(options.limit, 10) || 10;
135
- // Check if file exists or is tracked
136
- if (!existsSync(safePath)) {
137
- try {
138
- execFileSync('git', ['ls-files', '--error-unmatch', safePath], {
139
- encoding: 'utf-8',
140
- stdio: 'pipe'
141
- });
142
- }
143
- catch {
144
- console.error(`❌ File not found: ${safePath}`);
145
- process.exit(1);
146
- }
147
- }
148
- let entries = getFileHistory(safePath, limit * 2); // Get extra to filter
149
- // Filter by --agents-only
150
- if (options.agentsOnly) {
151
- entries = entries.filter(e => e.agent);
152
- }
153
- // Filter by --since
154
- if (options.since) {
155
- const sinceTimestamp = parseSinceDate(options.since);
156
- if (sinceTimestamp !== null) {
157
- entries = entries.filter(e => {
158
- const commitDate = new Date(e.date).getTime() / 1000;
159
- return commitDate >= sinceTimestamp;
160
- });
161
- }
162
- }
163
- // Limit results
164
- entries = entries.slice(0, limit);
165
- if (entries.length === 0) {
166
- console.log(`🕷️ No history found for "${safePath}"`);
167
- return;
168
- }
169
- if (options.json) {
170
- console.log(JSON.stringify({ file: safePath, history: entries }, null, 2));
171
- return;
172
- }
173
- // Count unique authors/agents
174
- const authors = new Set(entries.map(e => e.author));
175
- const agents = new Set(entries.filter(e => e.agent).map(e => e.agent));
176
- console.log(`
177
- 🕷️ WHO TOUCHED: ${safePath}
178
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
179
- `);
180
- for (const entry of entries) {
181
- const glyph = entry.agent ? getAgentGlyph(entry.agent) : '👤';
182
- const agentTag = entry.agent ? ` (${entry.agent})` : '';
183
- const subject = entry.subject.length > 50
184
- ? entry.subject.slice(0, 47) + '...'
185
- : entry.subject;
186
- console.log(`${glyph} ${entry.shortHash} | ${entry.relativeDate.padEnd(15)} | ${entry.author}${agentTag}`);
187
- console.log(` └─ ${subject}`);
188
- }
189
- console.log(`
190
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
191
- 📊 ${entries.length} commits | ${authors.size} authors | ${agents.size} agents detected
192
- `);
193
- if (agents.size > 0) {
194
- const agentList = Array.from(agents).map(a => `${getAgentGlyph(a)} ${a}`).join(' ');
195
- console.log(`🤖 Agents: ${agentList}`);
196
- }
197
- });
198
- //# sourceMappingURL=who-touched.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"who-touched.js","sourceRoot":"","sources":["../../src/commands/who-touched.ts"],"names":[],"mappings":"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"}