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.
- package/CHANGELOG.md +171 -0
- package/README.md +39 -280
- package/dist/bin/command-registry.d.ts +25 -0
- package/dist/bin/command-registry.d.ts.map +1 -0
- package/dist/bin/command-registry.js +29 -0
- package/dist/bin/command-registry.js.map +1 -0
- package/dist/bin/spidersan.d.ts +7 -0
- package/dist/bin/spidersan.d.ts.map +1 -1
- package/dist/bin/spidersan.js +38 -57
- package/dist/bin/spidersan.js.map +1 -1
- package/dist/commands/cleanup.d.ts.map +1 -1
- package/dist/commands/cleanup.js +17 -3
- package/dist/commands/cleanup.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +11 -39
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/conflicts.d.ts +22 -0
- package/dist/commands/conflicts.d.ts.map +1 -1
- package/dist/commands/conflicts.js +459 -256
- package/dist/commands/conflicts.js.map +1 -1
- package/dist/commands/cross-conflicts.d.ts.map +1 -1
- package/dist/commands/cross-conflicts.js +7 -8
- package/dist/commands/cross-conflicts.js.map +1 -1
- package/dist/commands/depends.d.ts +4 -1
- package/dist/commands/depends.d.ts.map +1 -1
- package/dist/commands/depends.js +35 -8
- package/dist/commands/depends.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +25 -7
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/git-watch.d.ts +1 -1
- package/dist/commands/git-watch.js +1 -1
- package/dist/commands/github-sync.d.ts +33 -0
- package/dist/commands/github-sync.d.ts.map +1 -1
- package/dist/commands/github-sync.js +68 -57
- package/dist/commands/github-sync.js.map +1 -1
- package/dist/commands/index.d.ts +2 -13
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +5 -20
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/merge-order.d.ts.map +1 -1
- package/dist/commands/merge-order.js +8 -4
- package/dist/commands/merge-order.js.map +1 -1
- package/dist/commands/merged.d.ts.map +1 -1
- package/dist/commands/merged.js +5 -1
- package/dist/commands/merged.js.map +1 -1
- package/dist/commands/pr-check.d.ts +24 -0
- package/dist/commands/pr-check.d.ts.map +1 -0
- package/dist/commands/pr-check.js +85 -0
- package/dist/commands/pr-check.js.map +1 -0
- package/dist/commands/ready-check.d.ts.map +1 -1
- package/dist/commands/ready-check.js +6 -3
- package/dist/commands/ready-check.js.map +1 -1
- package/dist/commands/register.d.ts +5 -0
- package/dist/commands/register.d.ts.map +1 -1
- package/dist/commands/register.js +14 -1
- package/dist/commands/register.js.map +1 -1
- package/dist/commands/registry-sync.d.ts.map +1 -1
- package/dist/commands/registry-sync.js +12 -46
- package/dist/commands/registry-sync.js.map +1 -1
- package/dist/commands/stale.d.ts.map +1 -1
- package/dist/commands/stale.js +8 -3
- package/dist/commands/stale.js.map +1 -1
- package/dist/commands/sync.d.ts +14 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +49 -31
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/verify-trunk.d.ts +18 -0
- package/dist/commands/verify-trunk.d.ts.map +1 -0
- package/dist/commands/verify-trunk.js +77 -0
- package/dist/commands/verify-trunk.js.map +1 -0
- package/dist/commands/watch.d.ts +0 -1
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +50 -77
- package/dist/commands/watch.js.map +1 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/activity.d.ts.map +1 -1
- package/dist/lib/activity.js +6 -2
- package/dist/lib/activity.js.map +1 -1
- package/dist/lib/ai/context-builder.d.ts.map +1 -1
- package/dist/lib/ai/context-builder.js +19 -6
- package/dist/lib/ai/context-builder.js.map +1 -1
- package/dist/lib/ai/event-handler.d.ts.map +1 -1
- package/dist/lib/ai/event-handler.js +15 -2
- package/dist/lib/ai/event-handler.js.map +1 -1
- package/dist/lib/ai/reasoner.d.ts.map +1 -1
- package/dist/lib/ai/reasoner.js +63 -82
- package/dist/lib/ai/reasoner.js.map +1 -1
- package/dist/lib/ai/setup.d.ts +1 -1
- package/dist/lib/ai/setup.d.ts.map +1 -1
- package/dist/lib/ai/types.d.ts.map +1 -1
- package/dist/lib/ai/types.js +5 -2
- package/dist/lib/ai/types.js.map +1 -1
- package/dist/lib/ast.d.ts +10 -2
- package/dist/lib/ast.d.ts.map +1 -1
- package/dist/lib/ast.js +52 -27
- package/dist/lib/ast.js.map +1 -1
- package/dist/lib/carries.d.ts +22 -0
- package/dist/lib/carries.d.ts.map +1 -0
- package/dist/lib/carries.js +56 -0
- package/dist/lib/carries.js.map +1 -0
- package/dist/lib/colony-subscriber.d.ts +1 -1
- package/dist/lib/colony-subscriber.js +1 -1
- package/dist/lib/config.d.ts +2 -2
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +13 -8
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/conflict-renderer.d.ts.map +1 -1
- package/dist/lib/conflict-renderer.js +17 -34
- package/dist/lib/conflict-renderer.js.map +1 -1
- package/dist/lib/ecosystem-env.d.ts +33 -0
- package/dist/lib/ecosystem-env.d.ts.map +1 -0
- package/dist/lib/ecosystem-env.js +62 -0
- package/dist/lib/ecosystem-env.js.map +1 -0
- package/dist/lib/git-events-subscriber.d.ts +27 -0
- package/dist/lib/git-events-subscriber.d.ts.map +1 -1
- package/dist/lib/git-events-subscriber.js +149 -58
- package/dist/lib/git-events-subscriber.js.map +1 -1
- package/dist/lib/git-merge-analyzer.d.ts +38 -0
- package/dist/lib/git-merge-analyzer.d.ts.map +1 -0
- package/dist/lib/git-merge-analyzer.js +23 -0
- package/dist/lib/git-merge-analyzer.js.map +1 -0
- package/dist/lib/git.d.ts +88 -0
- package/dist/lib/git.d.ts.map +1 -1
- package/dist/lib/git.js +499 -9
- package/dist/lib/git.js.map +1 -1
- package/dist/lib/github.d.ts +69 -1
- package/dist/lib/github.d.ts.map +1 -1
- package/dist/lib/github.js +230 -16
- package/dist/lib/github.js.map +1 -1
- package/dist/lib/graph.d.ts +15 -0
- package/dist/lib/graph.d.ts.map +1 -1
- package/dist/lib/graph.js +31 -0
- package/dist/lib/graph.js.map +1 -1
- package/dist/lib/machine.d.ts +14 -0
- package/dist/lib/machine.d.ts.map +1 -0
- package/dist/lib/machine.js +38 -0
- package/dist/lib/machine.js.map +1 -0
- package/dist/lib/notify.d.ts +68 -0
- package/dist/lib/notify.d.ts.map +1 -0
- package/dist/lib/notify.js +111 -0
- package/dist/lib/notify.js.map +1 -0
- package/dist/lib/outline.d.ts +6 -0
- package/dist/lib/outline.d.ts.map +1 -0
- package/dist/lib/outline.js +60 -0
- package/dist/lib/outline.js.map +1 -0
- package/dist/lib/push-registry.d.ts +22 -0
- package/dist/lib/push-registry.d.ts.map +1 -0
- package/dist/lib/push-registry.js +21 -0
- package/dist/lib/push-registry.js.map +1 -0
- package/dist/lib/reconcile.d.ts +100 -0
- package/dist/lib/reconcile.d.ts.map +1 -0
- package/dist/lib/reconcile.js +121 -0
- package/dist/lib/reconcile.js.map +1 -0
- package/dist/lib/security.d.ts +1 -6
- package/dist/lib/security.d.ts.map +1 -1
- package/dist/lib/security.js +1 -11
- package/dist/lib/security.js.map +1 -1
- package/dist/lib/semantic-analysis.d.ts +31 -0
- package/dist/lib/semantic-analysis.d.ts.map +1 -0
- package/dist/lib/semantic-analysis.js +120 -0
- package/dist/lib/semantic-analysis.js.map +1 -0
- package/dist/lib/supabase-credentials.d.ts +36 -0
- package/dist/lib/supabase-credentials.d.ts.map +1 -0
- package/dist/lib/supabase-credentials.js +43 -0
- package/dist/lib/supabase-credentials.js.map +1 -0
- package/dist/lib/trunk.d.ts +39 -0
- package/dist/lib/trunk.d.ts.map +1 -0
- package/dist/lib/trunk.js +116 -0
- package/dist/lib/trunk.js.map +1 -0
- package/dist/storage/adapter.d.ts +20 -1
- package/dist/storage/adapter.d.ts.map +1 -1
- package/dist/storage/branch-registry-store.d.ts +1 -1
- package/dist/storage/branch-registry-store.d.ts.map +1 -1
- package/dist/storage/factory.d.ts +0 -4
- package/dist/storage/factory.d.ts.map +1 -1
- package/dist/storage/factory.js +2 -26
- package/dist/storage/factory.js.map +1 -1
- package/dist/storage/json-branch-registry-store.d.ts +1 -1
- package/dist/storage/json-branch-registry-store.d.ts.map +1 -1
- package/dist/storage/json-branch-registry-store.js +33 -7
- package/dist/storage/json-branch-registry-store.js.map +1 -1
- package/dist/storage/local.d.ts +1 -1
- package/dist/storage/local.d.ts.map +1 -1
- package/dist/storage/local.js +2 -2
- package/dist/storage/local.js.map +1 -1
- package/dist/storage/memory-branch-registry-store.d.ts +1 -1
- package/dist/storage/memory-branch-registry-store.d.ts.map +1 -1
- package/dist/storage/memory-branch-registry-store.js +4 -1
- package/dist/storage/memory-branch-registry-store.js.map +1 -1
- package/dist/storage/supabase-registry-sync-client-impl.d.ts +1 -7
- package/dist/storage/supabase-registry-sync-client-impl.d.ts.map +1 -1
- package/dist/storage/supabase-registry-sync-client-impl.js +17 -61
- package/dist/storage/supabase-registry-sync-client-impl.js.map +1 -1
- package/dist/storage/supabase-registry-sync-client.d.ts +1 -1
- package/dist/storage/supabase-registry-sync-client.d.ts.map +1 -1
- package/dist/storage/supabase.d.ts +3 -9
- package/dist/storage/supabase.d.ts.map +1 -1
- package/dist/storage/supabase.js +4 -22
- package/dist/storage/supabase.js.map +1 -1
- package/dist/types/cloud.d.ts +1 -0
- package/dist/types/cloud.d.ts.map +1 -1
- package/package.json +88 -90
- package/dist/commands/activate.d.ts +0 -9
- package/dist/commands/activate.d.ts.map +0 -1
- package/dist/commands/activate.js +0 -45
- package/dist/commands/activate.js.map +0 -1
- package/dist/commands/active-windows.d.ts +0 -16
- package/dist/commands/active-windows.d.ts.map +0 -1
- package/dist/commands/active-windows.js +0 -373
- package/dist/commands/active-windows.js.map +0 -1
- package/dist/commands/ai.d.ts +0 -15
- package/dist/commands/ai.d.ts.map +0 -1
- package/dist/commands/ai.js +0 -498
- package/dist/commands/ai.js.map +0 -1
- package/dist/commands/audit-mark.d.ts +0 -12
- package/dist/commands/audit-mark.d.ts.map +0 -1
- package/dist/commands/audit-mark.js +0 -204
- package/dist/commands/audit-mark.js.map +0 -1
- package/dist/commands/auto.d.ts +0 -8
- package/dist/commands/auto.d.ts.map +0 -1
- package/dist/commands/auto.js +0 -207
- package/dist/commands/auto.js.map +0 -1
- package/dist/commands/bot.d.ts +0 -16
- package/dist/commands/bot.d.ts.map +0 -1
- package/dist/commands/bot.js +0 -416
- package/dist/commands/bot.js.map +0 -1
- package/dist/commands/close.d.ts +0 -9
- package/dist/commands/close.d.ts.map +0 -1
- package/dist/commands/close.js +0 -129
- package/dist/commands/close.js.map +0 -1
- package/dist/commands/collab-sync.d.ts +0 -14
- package/dist/commands/collab-sync.d.ts.map +0 -1
- package/dist/commands/collab-sync.js +0 -264
- package/dist/commands/collab-sync.js.map +0 -1
- package/dist/commands/collab.d.ts +0 -6
- package/dist/commands/collab.d.ts.map +0 -1
- package/dist/commands/collab.js +0 -103
- package/dist/commands/collab.js.map +0 -1
- package/dist/commands/completions.d.ts +0 -8
- package/dist/commands/completions.d.ts.map +0 -1
- package/dist/commands/completions.js +0 -83
- package/dist/commands/completions.js.map +0 -1
- package/dist/commands/daily.d.ts +0 -7
- package/dist/commands/daily.d.ts.map +0 -1
- package/dist/commands/daily.js +0 -171
- package/dist/commands/daily.js.map +0 -1
- package/dist/commands/dashboard.d.ts +0 -22
- package/dist/commands/dashboard.d.ts.map +0 -1
- package/dist/commands/dashboard.js +0 -401
- package/dist/commands/dashboard.js.map +0 -1
- package/dist/commands/demo.d.ts +0 -3
- package/dist/commands/demo.d.ts.map +0 -1
- package/dist/commands/demo.js +0 -118
- package/dist/commands/demo.js.map +0 -1
- package/dist/commands/ecosystem-loader.d.ts +0 -14
- package/dist/commands/ecosystem-loader.d.ts.map +0 -1
- package/dist/commands/ecosystem-loader.js +0 -90
- package/dist/commands/ecosystem-loader.js.map +0 -1
- package/dist/commands/fleet-status.d.ts +0 -14
- package/dist/commands/fleet-status.d.ts.map +0 -1
- package/dist/commands/fleet-status.js +0 -127
- package/dist/commands/fleet-status.js.map +0 -1
- package/dist/commands/inbox.d.ts +0 -3
- package/dist/commands/inbox.d.ts.map +0 -1
- package/dist/commands/inbox.js +0 -120
- package/dist/commands/inbox.js.map +0 -1
- package/dist/commands/intent-scan.d.ts +0 -17
- package/dist/commands/intent-scan.d.ts.map +0 -1
- package/dist/commands/intent-scan.js +0 -336
- package/dist/commands/intent-scan.js.map +0 -1
- package/dist/commands/key-import.d.ts +0 -3
- package/dist/commands/key-import.d.ts.map +0 -1
- package/dist/commands/key-import.js +0 -54
- package/dist/commands/key-import.js.map +0 -1
- package/dist/commands/keygen.d.ts +0 -3
- package/dist/commands/keygen.d.ts.map +0 -1
- package/dist/commands/keygen.js +0 -53
- package/dist/commands/keygen.js.map +0 -1
- package/dist/commands/keys.d.ts +0 -3
- package/dist/commands/keys.d.ts.map +0 -1
- package/dist/commands/keys.js +0 -56
- package/dist/commands/keys.js.map +0 -1
- package/dist/commands/lock.d.ts +0 -11
- package/dist/commands/lock.d.ts.map +0 -1
- package/dist/commands/lock.js +0 -257
- package/dist/commands/lock.js.map +0 -1
- package/dist/commands/mcp-health.d.ts +0 -3
- package/dist/commands/mcp-health.d.ts.map +0 -1
- package/dist/commands/mcp-health.js +0 -305
- package/dist/commands/mcp-health.js.map +0 -1
- package/dist/commands/mcp-restart.d.ts +0 -3
- package/dist/commands/mcp-restart.d.ts.map +0 -1
- package/dist/commands/mcp-restart.js +0 -176
- package/dist/commands/mcp-restart.js.map +0 -1
- package/dist/commands/monitor.d.ts +0 -3
- package/dist/commands/monitor.d.ts.map +0 -1
- package/dist/commands/monitor.js +0 -153
- package/dist/commands/monitor.js.map +0 -1
- package/dist/commands/msg-read.d.ts +0 -3
- package/dist/commands/msg-read.d.ts.map +0 -1
- package/dist/commands/msg-read.js +0 -95
- package/dist/commands/msg-read.js.map +0 -1
- package/dist/commands/pulse.d.ts +0 -13
- package/dist/commands/pulse.d.ts.map +0 -1
- package/dist/commands/pulse.js +0 -174
- package/dist/commands/pulse.js.map +0 -1
- package/dist/commands/queen.d.ts +0 -25
- package/dist/commands/queen.d.ts.map +0 -1
- package/dist/commands/queen.js +0 -326
- package/dist/commands/queen.js.map +0 -1
- package/dist/commands/radar.d.ts +0 -3
- package/dist/commands/radar.d.ts.map +0 -1
- package/dist/commands/radar.js +0 -147
- package/dist/commands/radar.js.map +0 -1
- package/dist/commands/rescue.d.ts +0 -11
- package/dist/commands/rescue.d.ts.map +0 -1
- package/dist/commands/rescue.js +0 -147
- package/dist/commands/rescue.js.map +0 -1
- package/dist/commands/semantic.d.ts +0 -3
- package/dist/commands/semantic.d.ts.map +0 -1
- package/dist/commands/semantic.js +0 -62
- package/dist/commands/semantic.js.map +0 -1
- package/dist/commands/send.d.ts +0 -3
- package/dist/commands/send.d.ts.map +0 -1
- package/dist/commands/send.js +0 -121
- package/dist/commands/send.js.map +0 -1
- package/dist/commands/status.d.ts +0 -9
- package/dist/commands/status.d.ts.map +0 -1
- package/dist/commands/status.js +0 -41
- package/dist/commands/status.js.map +0 -1
- package/dist/commands/sync-advisor.d.ts +0 -14
- package/dist/commands/sync-advisor.d.ts.map +0 -1
- package/dist/commands/sync-advisor.js +0 -110
- package/dist/commands/sync-advisor.js.map +0 -1
- package/dist/commands/tension.d.ts +0 -12
- package/dist/commands/tension.d.ts.map +0 -1
- package/dist/commands/tension.js +0 -262
- package/dist/commands/tension.js.map +0 -1
- package/dist/commands/torrent.d.ts +0 -9
- package/dist/commands/torrent.d.ts.map +0 -1
- package/dist/commands/torrent.js +0 -470
- package/dist/commands/torrent.js.map +0 -1
- package/dist/commands/tui.d.ts +0 -8
- package/dist/commands/tui.d.ts.map +0 -1
- package/dist/commands/tui.js +0 -15
- package/dist/commands/tui.js.map +0 -1
- package/dist/commands/wake.d.ts +0 -9
- package/dist/commands/wake.d.ts.map +0 -1
- package/dist/commands/wake.js +0 -188
- package/dist/commands/wake.js.map +0 -1
- package/dist/commands/welcome.d.ts +0 -8
- package/dist/commands/welcome.d.ts.map +0 -1
- package/dist/commands/welcome.js +0 -85
- package/dist/commands/welcome.js.map +0 -1
- package/dist/commands/who-owns.d.ts +0 -3
- package/dist/commands/who-owns.d.ts.map +0 -1
- package/dist/commands/who-owns.js +0 -68
- package/dist/commands/who-owns.js.map +0 -1
- package/dist/commands/who-touched.d.ts +0 -9
- package/dist/commands/who-touched.d.ts.map +0 -1
- package/dist/commands/who-touched.js +0 -198
- package/dist/commands/who-touched.js.map +0 -1
- package/dist/lib/crdt.d.ts +0 -83
- package/dist/lib/crdt.d.ts.map +0 -1
- package/dist/lib/crdt.js +0 -160
- package/dist/lib/crdt.js.map +0 -1
- package/dist/lib/daily-bridge.d.ts +0 -41
- package/dist/lib/daily-bridge.d.ts.map +0 -1
- package/dist/lib/daily-bridge.js +0 -186
- package/dist/lib/daily-bridge.js.map +0 -1
- package/dist/lib/hub.d.ts +0 -31
- package/dist/lib/hub.d.ts.map +0 -1
- package/dist/lib/hub.js +0 -92
- package/dist/lib/hub.js.map +0 -1
- package/dist/lib/license.d.ts +0 -61
- package/dist/lib/license.d.ts.map +0 -1
- package/dist/lib/license.js +0 -171
- package/dist/lib/license.js.map +0 -1
- package/dist/lib/pulse-renderer.d.ts +0 -19
- package/dist/lib/pulse-renderer.d.ts.map +0 -1
- package/dist/lib/pulse-renderer.js +0 -108
- package/dist/lib/pulse-renderer.js.map +0 -1
- package/dist/lib/repo-scanner.d.ts +0 -32
- package/dist/lib/repo-scanner.d.ts.map +0 -1
- package/dist/lib/repo-scanner.js +0 -160
- package/dist/lib/repo-scanner.js.map +0 -1
- package/dist/lib/salvage-analyzer.d.ts +0 -29
- package/dist/lib/salvage-analyzer.d.ts.map +0 -1
- package/dist/lib/salvage-analyzer.js +0 -121
- package/dist/lib/salvage-analyzer.js.map +0 -1
- package/dist/lib/session-logger.d.ts +0 -54
- package/dist/lib/session-logger.d.ts.map +0 -1
- package/dist/lib/session-logger.js +0 -136
- package/dist/lib/session-logger.js.map +0 -1
- package/dist/lib/symbol-extractor.d.ts +0 -41
- package/dist/lib/symbol-extractor.d.ts.map +0 -1
- package/dist/lib/symbol-extractor.js +0 -78
- package/dist/lib/symbol-extractor.js.map +0 -1
- package/dist/storage/git-messages.d.ts +0 -53
- package/dist/storage/git-messages.d.ts.map +0 -1
- package/dist/storage/git-messages.js +0 -376
- package/dist/storage/git-messages.js.map +0 -1
- package/dist/storage/local-messages.d.ts +0 -37
- package/dist/storage/local-messages.d.ts.map +0 -1
- package/dist/storage/local-messages.js +0 -151
- package/dist/storage/local-messages.js.map +0 -1
- package/dist/storage/message-adapter.d.ts +0 -86
- package/dist/storage/message-adapter.d.ts.map +0 -1
- package/dist/storage/message-adapter.js +0 -28
- package/dist/storage/message-adapter.js.map +0 -1
- package/dist/storage/message-factory.d.ts +0 -36
- package/dist/storage/message-factory.d.ts.map +0 -1
- package/dist/storage/message-factory.js +0 -99
- package/dist/storage/message-factory.js.map +0 -1
- package/dist/storage/mycmail-adapter.d.ts +0 -38
- package/dist/storage/mycmail-adapter.d.ts.map +0 -1
- package/dist/storage/mycmail-adapter.js +0 -300
- package/dist/storage/mycmail-adapter.js.map +0 -1
- package/dist/tui/dashboard.d.ts +0 -35
- package/dist/tui/dashboard.d.ts.map +0 -1
- package/dist/tui/dashboard.js +0 -199
- package/dist/tui/dashboard.js.map +0 -1
- package/dist/tui/screen.d.ts +0 -14
- package/dist/tui/screen.d.ts.map +0 -1
- package/dist/tui/screen.js +0 -138
- package/dist/tui/screen.js.map +0 -1
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import { execSync } from 'child_process';
|
|
3
|
-
import * as fs from 'fs';
|
|
4
|
-
import * as path from 'path';
|
|
5
|
-
import * as os from 'os';
|
|
6
|
-
// Config
|
|
7
|
-
const MCP_CONFIG_PATH = path.join(os.homedir(), '.gemini', 'antigravity', 'mcp_config.json');
|
|
8
|
-
/**
|
|
9
|
-
* Read MCP config from Antigravity config file
|
|
10
|
-
*/
|
|
11
|
-
function readMcpConfig() {
|
|
12
|
-
try {
|
|
13
|
-
if (!fs.existsSync(MCP_CONFIG_PATH)) {
|
|
14
|
-
console.log(`⚠️ MCP config not found: ${MCP_CONFIG_PATH}`);
|
|
15
|
-
return null;
|
|
16
|
-
}
|
|
17
|
-
const content = fs.readFileSync(MCP_CONFIG_PATH, 'utf-8');
|
|
18
|
-
return JSON.parse(content);
|
|
19
|
-
}
|
|
20
|
-
catch (err) {
|
|
21
|
-
console.log(`❌ Failed to read MCP config: ${err}`);
|
|
22
|
-
return null;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Validate MCP config JSON syntax and file paths
|
|
27
|
-
*/
|
|
28
|
-
function validateConfig(config) {
|
|
29
|
-
const errors = [];
|
|
30
|
-
for (const [name, serverConfig] of Object.entries(config.mcpServers)) {
|
|
31
|
-
// Check if command exists (for node, check the script path)
|
|
32
|
-
if (serverConfig.command === 'node' && serverConfig.args.length > 0) {
|
|
33
|
-
const scriptPath = serverConfig.args[0];
|
|
34
|
-
if (!fs.existsSync(scriptPath)) {
|
|
35
|
-
errors.push(`${name}: Script not found: ${scriptPath}`);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return { valid: errors.length === 0, errors };
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Kill all MCP processes (excluding self)
|
|
43
|
-
*/
|
|
44
|
-
function killMcpProcesses(dryRun = false) {
|
|
45
|
-
let killed = 0;
|
|
46
|
-
const currentPid = process.pid;
|
|
47
|
-
const parentPid = process.ppid;
|
|
48
|
-
try {
|
|
49
|
-
// Find all MCP-related processes
|
|
50
|
-
const output = execSync('ps aux | grep -E "mcp|MCP" | grep node | grep -v grep', {
|
|
51
|
-
encoding: 'utf-8',
|
|
52
|
-
stdio: ['pipe', 'pipe', 'pipe']
|
|
53
|
-
}).trim();
|
|
54
|
-
if (!output) {
|
|
55
|
-
console.log('📭 No MCP processes found');
|
|
56
|
-
return 0;
|
|
57
|
-
}
|
|
58
|
-
const lines = output.split('\n');
|
|
59
|
-
for (const line of lines) {
|
|
60
|
-
const parts = line.split(/\s+/);
|
|
61
|
-
if (parts.length < 2)
|
|
62
|
-
continue;
|
|
63
|
-
const pid = parseInt(parts[1], 10);
|
|
64
|
-
const command = parts.slice(10).join(' ').substring(0, 60);
|
|
65
|
-
// Skip self and parent to avoid killing the executing process
|
|
66
|
-
if (pid === currentPid || pid === parentPid) {
|
|
67
|
-
if (dryRun) {
|
|
68
|
-
console.log(` Skipping PID ${pid} (self/parent): ${command}...`);
|
|
69
|
-
}
|
|
70
|
-
continue;
|
|
71
|
-
}
|
|
72
|
-
if (dryRun) {
|
|
73
|
-
console.log(` Would kill PID ${pid}: ${command}...`);
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
try {
|
|
77
|
-
execSync(`kill ${pid}`, { stdio: 'ignore' });
|
|
78
|
-
console.log(` Killed PID ${pid}: ${command}...`);
|
|
79
|
-
killed++;
|
|
80
|
-
}
|
|
81
|
-
catch {
|
|
82
|
-
// Process might already be dead
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
catch {
|
|
88
|
-
// No processes found - that's okay
|
|
89
|
-
}
|
|
90
|
-
return killed;
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Restart Antigravity using osascript (macOS only)
|
|
94
|
-
*/
|
|
95
|
-
function restartAntigravity() {
|
|
96
|
-
try {
|
|
97
|
-
console.log('🔄 Restarting Antigravity...');
|
|
98
|
-
execSync('osascript -e \'quit app "Antigravity"\'', { stdio: 'ignore' });
|
|
99
|
-
// Wait a moment for clean shutdown
|
|
100
|
-
execSync('sleep 2');
|
|
101
|
-
// Relaunch
|
|
102
|
-
execSync('open -a Antigravity', { stdio: 'ignore' });
|
|
103
|
-
console.log('✅ Antigravity restarted');
|
|
104
|
-
return true;
|
|
105
|
-
}
|
|
106
|
-
catch (err) {
|
|
107
|
-
console.log(`❌ Failed to restart Antigravity: ${err}`);
|
|
108
|
-
return false;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
export const mcpRestartCommand = new Command('mcp-restart')
|
|
112
|
-
.description('🔄 Kill MCP processes and restart Antigravity to reload connections')
|
|
113
|
-
.option('--validate', 'Validate mcp_config.json before restart')
|
|
114
|
-
.option('--dry-run', 'Show what would be killed without actually killing')
|
|
115
|
-
.option('--force', 'Force restart Antigravity using osascript (macOS only)')
|
|
116
|
-
.option('--kill-only', 'Only kill MCPs, don\'t restart Antigravity')
|
|
117
|
-
.action(async (options) => {
|
|
118
|
-
console.log(`
|
|
119
|
-
🔄 MCP Restart
|
|
120
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
121
|
-
`);
|
|
122
|
-
// Step 1: Read and optionally validate config
|
|
123
|
-
const config = readMcpConfig();
|
|
124
|
-
if (!config) {
|
|
125
|
-
console.log('❌ Cannot proceed without valid config');
|
|
126
|
-
process.exit(1);
|
|
127
|
-
}
|
|
128
|
-
console.log(`📋 Found ${Object.keys(config.mcpServers).length} MCP servers in config`);
|
|
129
|
-
if (options.validate) {
|
|
130
|
-
console.log('\n🔍 Validating config...');
|
|
131
|
-
const { valid, errors } = validateConfig(config);
|
|
132
|
-
if (!valid) {
|
|
133
|
-
console.log('❌ Validation failed:');
|
|
134
|
-
for (const error of errors) {
|
|
135
|
-
console.log(` ${error}`);
|
|
136
|
-
}
|
|
137
|
-
if (!options.dryRun) {
|
|
138
|
-
console.log('\n⚠️ Fix these issues before restarting');
|
|
139
|
-
process.exit(1);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
console.log('✅ Config valid');
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
// Step 2: Kill MCP processes
|
|
147
|
-
console.log(`\n${options.dryRun ? '🔍 Dry run - ' : ''}Killing MCP processes...`);
|
|
148
|
-
const killed = killMcpProcesses(options.dryRun);
|
|
149
|
-
if (!options.dryRun) {
|
|
150
|
-
console.log(`\n🧹 Killed ${killed} MCP process(es)`);
|
|
151
|
-
}
|
|
152
|
-
// Step 3: Restart or instruct
|
|
153
|
-
if (options.killOnly) {
|
|
154
|
-
console.log('\n✅ MCPs killed. Run `spidersan mcp-health --auto-restart` to restart them.');
|
|
155
|
-
}
|
|
156
|
-
else if (options.force) {
|
|
157
|
-
console.log('');
|
|
158
|
-
restartAntigravity();
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
console.log(`
|
|
162
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
163
|
-
|
|
164
|
-
🕷️ MCPs killed. To reconnect:
|
|
165
|
-
|
|
166
|
-
Option 1: Restart Antigravity manually
|
|
167
|
-
|
|
168
|
-
Option 2: Run with --force to auto-restart:
|
|
169
|
-
$ spidersan mcp-restart --force
|
|
170
|
-
|
|
171
|
-
Option 3: Just restart MCPs without Antigravity:
|
|
172
|
-
$ spidersan mcp-health --auto-restart
|
|
173
|
-
`);
|
|
174
|
-
}
|
|
175
|
-
});
|
|
176
|
-
//# sourceMappingURL=mcp-restart.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-restart.js","sourceRoot":"","sources":["../../src/commands/mcp-restart.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"monitor.d.ts","sourceRoot":"","sources":["../../src/commands/monitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,eAAO,MAAM,cAAc,SA6JrB,CAAC"}
|
package/dist/commands/monitor.js
DELETED
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import { io } from 'socket.io-client';
|
|
3
|
-
import { readFileSync, existsSync } from 'fs';
|
|
4
|
-
import { join } from 'path';
|
|
5
|
-
import chokidar from 'chokidar';
|
|
6
|
-
import { SpidersanDashboard } from '../tui/dashboard.js';
|
|
7
|
-
import { getStorage } from '../storage/index.js';
|
|
8
|
-
import { createSwarmState } from '../lib/crdt.js';
|
|
9
|
-
// Config
|
|
10
|
-
const HUB_URL = process.env.HUB_URL || 'https://hub.treebird.uk';
|
|
11
|
-
const AGENT_ID = process.env.SPIDERSAN_AGENT || 'monitor-daemon';
|
|
12
|
-
export const monitorCommand = new Command('monitor')
|
|
13
|
-
.description('🕷️ Real-time Hub Monitor Dashboard')
|
|
14
|
-
.option('--hub <url>', 'Hub URL to connect to', HUB_URL)
|
|
15
|
-
.action(async (options) => {
|
|
16
|
-
const dashboard = new SpidersanDashboard();
|
|
17
|
-
dashboard.render(); // Initial render
|
|
18
|
-
// CRDT State
|
|
19
|
-
const swarmState = createSwarmState(AGENT_ID);
|
|
20
|
-
// Local Persistence
|
|
21
|
-
const SPIDERSAN_DIR = join(process.cwd(), '.spidersan');
|
|
22
|
-
const STATE_FILE = join(SPIDERSAN_DIR, 'crdt.state');
|
|
23
|
-
// Load initial state
|
|
24
|
-
if (existsSync(STATE_FILE)) {
|
|
25
|
-
try {
|
|
26
|
-
const data = readFileSync(STATE_FILE);
|
|
27
|
-
swarmState.applyUpdate(new Uint8Array(data));
|
|
28
|
-
dashboard.addLog('📚 Loaded local state');
|
|
29
|
-
}
|
|
30
|
-
catch (e) {
|
|
31
|
-
dashboard.addLog(`⚠️ Failed to load state: ${e}`);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
// Watch for local changes (from other CLI commands)
|
|
35
|
-
// using chokidar for better cross-platform support
|
|
36
|
-
const watcher = chokidar.watch(STATE_FILE, { persistent: true });
|
|
37
|
-
watcher.on('change', () => {
|
|
38
|
-
try {
|
|
39
|
-
const data = readFileSync(STATE_FILE);
|
|
40
|
-
swarmState.applyUpdate(new Uint8Array(data));
|
|
41
|
-
// dashboard.addLog('🔄 Local state updated'); // verbose
|
|
42
|
-
}
|
|
43
|
-
catch (e) {
|
|
44
|
-
// ignore read errors (race conditions)
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
// Refresh dashboard when CRDT state changes
|
|
48
|
-
swarmState.doc.on('update', () => {
|
|
49
|
-
const locks = swarmState.getAllLocks().map(l => ({
|
|
50
|
-
symbol: l.symbolId,
|
|
51
|
-
agent: l.agentId,
|
|
52
|
-
time: l.timestamp
|
|
53
|
-
}));
|
|
54
|
-
dashboard.updateState({ activeLocks: locks });
|
|
55
|
-
});
|
|
56
|
-
try {
|
|
57
|
-
// 1. Connect to Hub
|
|
58
|
-
dashboard.addLog(`Connecting to Hub: ${options.hub}...`);
|
|
59
|
-
const socket = io(options.hub, {
|
|
60
|
-
reconnection: true,
|
|
61
|
-
timeout: 5000
|
|
62
|
-
});
|
|
63
|
-
const connectedAgents = new Set();
|
|
64
|
-
socket.on('connect', () => {
|
|
65
|
-
dashboard.addLog('✅ Connected to Hub');
|
|
66
|
-
dashboard.updateState({ connectedAgents: Array.from(connectedAgents) });
|
|
67
|
-
socket.emit('subscribe', {
|
|
68
|
-
events: ['file:changed', 'task:updated', 'agent:heartbeat', 'crdt:update', 'crdt:state']
|
|
69
|
-
});
|
|
70
|
-
// Request initial CRDT state
|
|
71
|
-
socket.emit('crdt:request-state');
|
|
72
|
-
});
|
|
73
|
-
socket.on('disconnect', () => {
|
|
74
|
-
dashboard.addLog('❌ Disconnected from Hub');
|
|
75
|
-
connectedAgents.clear();
|
|
76
|
-
dashboard.updateState({ connectedAgents: [] });
|
|
77
|
-
});
|
|
78
|
-
socket.on('connect_error', (err) => {
|
|
79
|
-
dashboard.addLog(`⚠️ Connection error: ${err.message}`);
|
|
80
|
-
});
|
|
81
|
-
// 2. Listen for Events
|
|
82
|
-
// CRDT Sync
|
|
83
|
-
socket.on('crdt:update', (data) => {
|
|
84
|
-
const update = new Uint8Array(Buffer.from(data.update, 'base64'));
|
|
85
|
-
swarmState.applyUpdate(update);
|
|
86
|
-
});
|
|
87
|
-
socket.on('crdt:state', (data) => {
|
|
88
|
-
dashboard.addLog(`📦 Received State (${data.updates.length} chunks)`);
|
|
89
|
-
for (const chunk of data.updates) {
|
|
90
|
-
const update = new Uint8Array(Buffer.from(chunk, 'base64'));
|
|
91
|
-
swarmState.applyUpdate(update);
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
// Heartbeats
|
|
95
|
-
socket.on('agent:heartbeat', (data) => {
|
|
96
|
-
if (!connectedAgents.has(data.agent)) {
|
|
97
|
-
connectedAgents.add(data.agent);
|
|
98
|
-
dashboard.addLog(`👋 Agent joined: ${data.agent}`);
|
|
99
|
-
dashboard.updateState({ connectedAgents: Array.from(connectedAgents) });
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
// File Changes (Conflict Radar)
|
|
103
|
-
const activeFiles = new Map();
|
|
104
|
-
socket.on('file:changed', (data) => {
|
|
105
|
-
if (data.action === 'editing') {
|
|
106
|
-
const agents = activeFiles.get(data.file) || [];
|
|
107
|
-
if (!agents.includes(data.agent)) {
|
|
108
|
-
agents.push(data.agent);
|
|
109
|
-
activeFiles.set(data.file, agents);
|
|
110
|
-
dashboard.addLog(`✏️ ${data.agent} editing ${data.file}`);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
else if (data.action === 'closed' || data.action === 'saved') {
|
|
114
|
-
const agents = activeFiles.get(data.file) || [];
|
|
115
|
-
const newAgents = agents.filter(a => a !== data.agent);
|
|
116
|
-
if (newAgents.length === 0) {
|
|
117
|
-
activeFiles.delete(data.file);
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
activeFiles.set(data.file, newAgents);
|
|
121
|
-
}
|
|
122
|
-
dashboard.addLog(`💾 ${data.agent} ${data.action} ${data.file}`);
|
|
123
|
-
}
|
|
124
|
-
dashboard.updateState({ activeFiles });
|
|
125
|
-
});
|
|
126
|
-
// Task Updates (Formation)
|
|
127
|
-
socket.on('task:updated', (task) => {
|
|
128
|
-
// In a real app we'd merge this into a map, for now just log
|
|
129
|
-
dashboard.addLog(`📋 Task Update: ${task.title} -> ${task.status}`);
|
|
130
|
-
});
|
|
131
|
-
// 3. Local Polling (Backup if Hub is quiet)
|
|
132
|
-
// Just to show some activity in the demo if no other agents are online
|
|
133
|
-
setInterval(() => {
|
|
134
|
-
dashboard.render(); // Keep clock updating
|
|
135
|
-
}, 1000);
|
|
136
|
-
// Access local storage to show local branches as a baseline
|
|
137
|
-
try {
|
|
138
|
-
const storage = await getStorage();
|
|
139
|
-
const branches = await storage.list();
|
|
140
|
-
if (branches.length > 0) {
|
|
141
|
-
dashboard.addLog(`📚 Loaded ${branches.length} local branches`);
|
|
142
|
-
// We could visualize these, but Monitor is mainly for Hub state
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
catch (e) {
|
|
146
|
-
// ignore
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
catch (error) {
|
|
150
|
-
dashboard.addLog(`❌ Fatal error: ${error}`);
|
|
151
|
-
}
|
|
152
|
-
});
|
|
153
|
-
//# sourceMappingURL=monitor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/commands/monitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"msg-read.d.ts","sourceRoot":"","sources":["../../src/commands/msg-read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBpC,eAAO,MAAM,cAAc,SAoFrB,CAAC"}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import { getMessageStorage, parseTierOption } from '../storage/message-factory.js';
|
|
3
|
-
// Security: Input validation
|
|
4
|
-
const VALID_MESSAGE_ID = /^[a-zA-Z0-9][a-zA-Z0-9_-]{0,64}$/;
|
|
5
|
-
function validateMessageId(id) {
|
|
6
|
-
if (!VALID_MESSAGE_ID.test(id)) {
|
|
7
|
-
throw new Error(`Invalid message ID: "${id.slice(0, 20)}..."`);
|
|
8
|
-
}
|
|
9
|
-
return id;
|
|
10
|
-
}
|
|
11
|
-
function formatTimestamp(date) {
|
|
12
|
-
return date.toLocaleString('en-US', {
|
|
13
|
-
weekday: 'short',
|
|
14
|
-
month: 'short',
|
|
15
|
-
day: 'numeric',
|
|
16
|
-
hour: '2-digit',
|
|
17
|
-
minute: '2-digit',
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
export const msgReadCommand = new Command('read')
|
|
21
|
-
.description('Read a specific message (tiered fallback)')
|
|
22
|
-
.argument('<id>', 'Message ID (full or partial)')
|
|
23
|
-
.option('--no-mark-read', 'Don\'t mark the message as read')
|
|
24
|
-
.option('--tier <n>', 'Force specific tier (1, 2, or 3)')
|
|
25
|
-
.option('-v, --verbose', 'Show which tier is being used')
|
|
26
|
-
.option('--json', 'Output as JSON')
|
|
27
|
-
.action(async (id, options) => {
|
|
28
|
-
const agentId = process.env.SPIDERSAN_AGENT || 'cli-agent';
|
|
29
|
-
// Security: Validate message ID
|
|
30
|
-
let messageId;
|
|
31
|
-
try {
|
|
32
|
-
messageId = validateMessageId(id);
|
|
33
|
-
}
|
|
34
|
-
catch (error) {
|
|
35
|
-
console.error(`❌ ${error.message}`);
|
|
36
|
-
process.exit(1);
|
|
37
|
-
}
|
|
38
|
-
// Get message storage adapter
|
|
39
|
-
const forceTier = parseTierOption(options.tier);
|
|
40
|
-
try {
|
|
41
|
-
const storage = await getMessageStorage({
|
|
42
|
-
forceTier,
|
|
43
|
-
agentId,
|
|
44
|
-
verbose: options.verbose,
|
|
45
|
-
});
|
|
46
|
-
// Read message
|
|
47
|
-
const message = await storage.read(messageId);
|
|
48
|
-
if (!message) {
|
|
49
|
-
console.error(`❌ Message not found: ${messageId}`);
|
|
50
|
-
process.exit(1);
|
|
51
|
-
}
|
|
52
|
-
// Mark as read if requested
|
|
53
|
-
if (options.markRead !== false) {
|
|
54
|
-
await storage.markRead(messageId);
|
|
55
|
-
}
|
|
56
|
-
if (options.json) {
|
|
57
|
-
console.log(JSON.stringify({
|
|
58
|
-
tier: storage.getTier(),
|
|
59
|
-
tierName: storage.getTierName(),
|
|
60
|
-
message: {
|
|
61
|
-
...message,
|
|
62
|
-
timestamp: message.timestamp.toISOString(),
|
|
63
|
-
},
|
|
64
|
-
}, null, 2));
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
// Display message
|
|
68
|
-
const tierInfo = options.verbose ? ` (via ${storage.getTierName()})` : '';
|
|
69
|
-
const encryptIcon = message.encrypted ? ' 🔒' : '';
|
|
70
|
-
const typeLabel = message.type !== 'info' ? ` [${message.type.toUpperCase()}]` : '';
|
|
71
|
-
console.log(`\n📧 Message${tierInfo}\n`);
|
|
72
|
-
console.log('─'.repeat(60));
|
|
73
|
-
console.log(`Subject: ${message.subject}${typeLabel}${encryptIcon}`);
|
|
74
|
-
console.log(`From: ${message.from}`);
|
|
75
|
-
console.log(`To: ${message.to}`);
|
|
76
|
-
console.log(`Date: ${formatTimestamp(message.timestamp)}`);
|
|
77
|
-
console.log(`ID: ${message.id}`);
|
|
78
|
-
if (message.branch) {
|
|
79
|
-
console.log(`Branch: ${message.branch}`);
|
|
80
|
-
}
|
|
81
|
-
if (message.files && message.files.length > 0) {
|
|
82
|
-
console.log(`Files: ${message.files.join(', ')}`);
|
|
83
|
-
}
|
|
84
|
-
console.log('─'.repeat(60));
|
|
85
|
-
console.log('');
|
|
86
|
-
console.log(message.body);
|
|
87
|
-
console.log('');
|
|
88
|
-
}
|
|
89
|
-
catch (error) {
|
|
90
|
-
console.error('❌ Failed to read message');
|
|
91
|
-
console.error(error.message || error);
|
|
92
|
-
process.exit(1);
|
|
93
|
-
}
|
|
94
|
-
});
|
|
95
|
-
//# sourceMappingURL=msg-read.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"msg-read.js","sourceRoot":"","sources":["../../src/commands/msg-read.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/pulse.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* spidersan pulse
|
|
3
|
-
*
|
|
4
|
-
* Quick health-check: sync from Colony, then run local conflict detection.
|
|
5
|
-
* Calls syncFromColony() first so that active work_claim signals from other
|
|
6
|
-
* agents are reflected in the registry before conflicts are computed.
|
|
7
|
-
*
|
|
8
|
-
* Offline mode: if Colony is unreachable, prints a warning and continues
|
|
9
|
-
* with existing local registry data — never crashes.
|
|
10
|
-
*/
|
|
11
|
-
import { Command } from 'commander';
|
|
12
|
-
export declare const pulseCommand: Command;
|
|
13
|
-
//# sourceMappingURL=pulse.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pulse.d.ts","sourceRoot":"","sources":["../../src/commands/pulse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,eAAO,MAAM,YAAY,SAwJnB,CAAC"}
|
package/dist/commands/pulse.js
DELETED
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* spidersan pulse
|
|
3
|
-
*
|
|
4
|
-
* Quick health-check: sync from Colony, then run local conflict detection.
|
|
5
|
-
* Calls syncFromColony() first so that active work_claim signals from other
|
|
6
|
-
* agents are reflected in the registry before conflicts are computed.
|
|
7
|
-
*
|
|
8
|
-
* Offline mode: if Colony is unreachable, prints a warning and continues
|
|
9
|
-
* with existing local registry data — never crashes.
|
|
10
|
-
*/
|
|
11
|
-
import { Command } from 'commander';
|
|
12
|
-
import { compilePatterns } from '../lib/regex-utils.js';
|
|
13
|
-
import { getStorage } from '../storage/index.js';
|
|
14
|
-
import { syncFromColony } from '../lib/colony-subscriber.js';
|
|
15
|
-
import { loadConfig } from '../lib/config.js';
|
|
16
|
-
import { classifyTier } from '../lib/conflict-tier.js';
|
|
17
|
-
import { getCurrentBranch } from '../lib/git.js';
|
|
18
|
-
import { createHubClient } from '../lib/hub.js';
|
|
19
|
-
import { renderPulseReport } from '../lib/pulse-renderer.js';
|
|
20
|
-
import { computeDriftResult } from '../lib/remote-drift.js';
|
|
21
|
-
import { isOfflineError } from '../lib/remote-drift.js';
|
|
22
|
-
function resolveCurrentBranch() {
|
|
23
|
-
try {
|
|
24
|
-
return getCurrentBranch();
|
|
25
|
-
}
|
|
26
|
-
catch {
|
|
27
|
-
return 'unknown';
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
export const pulseCommand = new Command('pulse')
|
|
31
|
-
.description('Sync from Colony then show active conflicts (quick health-check)')
|
|
32
|
-
.option('--json', 'Output as JSON')
|
|
33
|
-
.option('--no-sync', 'Skip Colony sync, use local registry only')
|
|
34
|
-
.option('--remote-drift', 'Check if remote has advanced past local HEAD')
|
|
35
|
-
.option('--hub-sync', 'Post drift alert to Hub if registered or unstaged files are in drift zone')
|
|
36
|
-
.option('--strict', 'Exit 1 if any registered or unstaged files are in the drift zone')
|
|
37
|
-
.action(async (options) => {
|
|
38
|
-
const storage = await getStorage();
|
|
39
|
-
if (!await storage.isInitialized()) {
|
|
40
|
-
console.error('❌ Spidersan not initialized. Run: spidersan init');
|
|
41
|
-
process.exit(1);
|
|
42
|
-
}
|
|
43
|
-
const config = await loadConfig();
|
|
44
|
-
const highSeverity = (config.conflicts?.highSeverityPatterns || []).map((p) => new RegExp(p));
|
|
45
|
-
const mediumSeverity = (config.conflicts?.mediumSeverityPatterns || []).map((p) => new RegExp(p));
|
|
46
|
-
const compiledHigh = compilePatterns(highSeverity);
|
|
47
|
-
const compiledMedium = compilePatterns(mediumSeverity);
|
|
48
|
-
// ── Colony sync ───────────────────────────────────────────────────────
|
|
49
|
-
let colonySynced = 0;
|
|
50
|
-
let colonyOffline = true;
|
|
51
|
-
if (options.sync !== false) {
|
|
52
|
-
const result = await syncFromColony();
|
|
53
|
-
colonySynced = result.synced;
|
|
54
|
-
colonyOffline = result.offline;
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
console.log('ℹ Colony sync skipped (--no-sync)');
|
|
58
|
-
}
|
|
59
|
-
// ── Local conflict detection ──────────────────────────────────────────
|
|
60
|
-
const currentBranch = resolveCurrentBranch();
|
|
61
|
-
const allBranches = await storage.list();
|
|
62
|
-
const target = allBranches.find(b => b.name === currentBranch);
|
|
63
|
-
if (!target) {
|
|
64
|
-
if (options.json) {
|
|
65
|
-
const jsonOut = { branch: currentBranch, registered: false, conflicts: [], colonySynced, colonyOffline };
|
|
66
|
-
if (options.remoteDrift) {
|
|
67
|
-
const drift = await computeDriftResult([], { remote: 'origin', branch: currentBranch });
|
|
68
|
-
jsonOut.remoteDrift = 'skipped' in drift ? { skipped: true, reason: drift.reason } : drift;
|
|
69
|
-
}
|
|
70
|
-
console.log(JSON.stringify(jsonOut));
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
const drift = options.remoteDrift
|
|
74
|
-
? await computeDriftResult([], { remote: 'origin', branch: currentBranch })
|
|
75
|
-
: null;
|
|
76
|
-
console.log(renderPulseReport({
|
|
77
|
-
branch: currentBranch,
|
|
78
|
-
registered: false,
|
|
79
|
-
colonySynced,
|
|
80
|
-
colonyOffline,
|
|
81
|
-
conflicts: [],
|
|
82
|
-
drift,
|
|
83
|
-
}));
|
|
84
|
-
}
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
const targetFilesSet = new Set(target.files);
|
|
88
|
-
const conflicts = [];
|
|
89
|
-
for (const branch of allBranches) {
|
|
90
|
-
if (branch.name === currentBranch || branch.status !== 'active')
|
|
91
|
-
continue;
|
|
92
|
-
const overlapping = branch.files.filter(f => targetFilesSet.has(f));
|
|
93
|
-
if (overlapping.length === 0)
|
|
94
|
-
continue;
|
|
95
|
-
// Determine max tier for this conflict group
|
|
96
|
-
let maxTier = 1;
|
|
97
|
-
for (const file of overlapping) {
|
|
98
|
-
const tier = classifyTier(file, {
|
|
99
|
-
extraTier3: compiledHigh,
|
|
100
|
-
extraTier2: compiledMedium,
|
|
101
|
-
});
|
|
102
|
-
if (tier > maxTier)
|
|
103
|
-
maxTier = tier;
|
|
104
|
-
}
|
|
105
|
-
conflicts.push({
|
|
106
|
-
branch: branch.name,
|
|
107
|
-
files: overlapping,
|
|
108
|
-
tier: maxTier,
|
|
109
|
-
agent: branch.agent,
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
conflicts.sort((a, b) => b.tier - a.tier);
|
|
113
|
-
if (options.json) {
|
|
114
|
-
const jsonOutput = {
|
|
115
|
-
branch: currentBranch,
|
|
116
|
-
registered: true,
|
|
117
|
-
conflicts,
|
|
118
|
-
colonySynced,
|
|
119
|
-
colonyOffline,
|
|
120
|
-
};
|
|
121
|
-
if (options.remoteDrift) {
|
|
122
|
-
const drift = await computeDriftResult(target?.files ?? [], { remote: 'origin', branch: currentBranch });
|
|
123
|
-
if ('skipped' in drift) {
|
|
124
|
-
jsonOutput.remoteDrift = { skipped: true, reason: drift.reason };
|
|
125
|
-
}
|
|
126
|
-
else {
|
|
127
|
-
jsonOutput.remoteDrift = drift;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
console.log(JSON.stringify(jsonOutput, null, 2));
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
// ── Human-readable output ─────────────────────────────────────────────
|
|
134
|
-
const drift = options.remoteDrift
|
|
135
|
-
? await computeDriftResult(target.files, { remote: 'origin', branch: currentBranch })
|
|
136
|
-
: null;
|
|
137
|
-
if (drift && !('skipped' in drift) && options.hubSync) {
|
|
138
|
-
const hasRisk = drift.registeredInDrift.length > 0 || drift.unstagedInDrift.length > 0;
|
|
139
|
-
if (hasRisk) {
|
|
140
|
-
const hub = createHubClient();
|
|
141
|
-
const lines = [
|
|
142
|
-
`🕷️⚠️ Remote drift detected on \`${drift.branch}\``,
|
|
143
|
-
` ${drift.remoteAhead} commit(s) ahead | ${drift.registeredInDrift.length} registered file(s) at risk | ${drift.unstagedInDrift.length} rebase-continue blocker(s)`,
|
|
144
|
-
...drift.registeredInDrift.map((entry) => ` ${renderTierIcon(entry.tier)} ${entry.file}${entry.unstaged ? ' [also has unstaged modifications]' : ''}`),
|
|
145
|
-
];
|
|
146
|
-
await hub.postToChat({ agent: 'spidersan', name: 'Spidersan', message: lines.join('\n'), glyph: '🕷️' }).catch((error) => {
|
|
147
|
-
if (!isOfflineError(error))
|
|
148
|
-
console.warn('Hub sync failed:', error);
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
console.log(renderPulseReport({
|
|
153
|
-
branch: currentBranch,
|
|
154
|
-
registered: true,
|
|
155
|
-
colonySynced,
|
|
156
|
-
colonyOffline,
|
|
157
|
-
activeBranches: allBranches.filter((branch) => branch.status === 'active').length,
|
|
158
|
-
conflicts,
|
|
159
|
-
drift,
|
|
160
|
-
}));
|
|
161
|
-
if (drift && !('skipped' in drift) && options.strict && (drift.registeredInDrift.length > 0 || drift.unstagedInDrift.length > 0)) {
|
|
162
|
-
process.exit(1);
|
|
163
|
-
}
|
|
164
|
-
});
|
|
165
|
-
function renderTierIcon(tier) {
|
|
166
|
-
if (tier === 3)
|
|
167
|
-
return '🔴';
|
|
168
|
-
if (tier === 2)
|
|
169
|
-
return '🟠';
|
|
170
|
-
if (tier === 1)
|
|
171
|
-
return '🟡';
|
|
172
|
-
return '⚪';
|
|
173
|
-
}
|
|
174
|
-
//# sourceMappingURL=pulse.js.map
|