spidersan 0.20.1 → 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 +8 -0
- 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 +16 -0
- package/dist/bin/spidersan.d.ts.map +1 -0
- package/dist/bin/spidersan.js +98 -0
- package/dist/bin/spidersan.js.map +1 -0
- package/dist/commands/abandon.d.ts +8 -0
- package/dist/commands/abandon.d.ts.map +1 -0
- package/dist/commands/abandon.js +43 -0
- package/dist/commands/abandon.js.map +1 -0
- package/dist/commands/cleanup.d.ts +8 -0
- package/dist/commands/cleanup.d.ts.map +1 -0
- package/dist/commands/cleanup.js +50 -0
- package/dist/commands/cleanup.js.map +1 -0
- package/dist/commands/config.d.ts +15 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +309 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/conflicts.d.ts +34 -0
- package/dist/commands/conflicts.d.ts.map +1 -0
- package/dist/commands/conflicts.js +773 -0
- package/dist/commands/conflicts.js.map +1 -0
- package/dist/commands/context.d.ts +8 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +104 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/cross-conflicts.d.ts +17 -0
- package/dist/commands/cross-conflicts.d.ts.map +1 -0
- package/dist/commands/cross-conflicts.js +273 -0
- package/dist/commands/cross-conflicts.js.map +1 -0
- package/dist/commands/depends.d.ts +11 -0
- package/dist/commands/depends.d.ts.map +1 -0
- package/dist/commands/depends.js +63 -0
- package/dist/commands/depends.js.map +1 -0
- package/dist/commands/doctor.d.ts +30 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +558 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/git-watch.d.ts +24 -0
- package/dist/commands/git-watch.d.ts.map +1 -0
- package/dist/commands/git-watch.js +84 -0
- package/dist/commands/git-watch.js.map +1 -0
- package/dist/commands/github-sync.d.ts +42 -0
- package/dist/commands/github-sync.d.ts.map +1 -0
- package/dist/commands/github-sync.js +191 -0
- package/dist/commands/github-sync.js.map +1 -0
- package/dist/commands/index.d.ts +25 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +29 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +23 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +45 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/log.d.ts +7 -0
- package/dist/commands/log.d.ts.map +1 -0
- package/dist/commands/log.js +110 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/merge-order.d.ts +9 -0
- package/dist/commands/merge-order.d.ts.map +1 -0
- package/dist/commands/merge-order.js +100 -0
- package/dist/commands/merge-order.js.map +1 -0
- package/dist/commands/merged.d.ts +8 -0
- package/dist/commands/merged.d.ts.map +1 -0
- package/dist/commands/merged.js +37 -0
- package/dist/commands/merged.js.map +1 -0
- 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 +11 -0
- package/dist/commands/ready-check.d.ts.map +1 -0
- package/dist/commands/ready-check.js +150 -0
- package/dist/commands/ready-check.js.map +1 -0
- package/dist/commands/rebase-helper.d.ts +3 -0
- package/dist/commands/rebase-helper.d.ts.map +1 -0
- package/dist/commands/rebase-helper.js +52 -0
- package/dist/commands/rebase-helper.js.map +1 -0
- package/dist/commands/register.d.ts +10 -0
- package/dist/commands/register.d.ts.map +1 -0
- package/dist/commands/register.js +176 -0
- package/dist/commands/register.js.map +1 -0
- package/dist/commands/registry-sync.d.ts +9 -0
- package/dist/commands/registry-sync.d.ts.map +1 -0
- package/dist/commands/registry-sync.js +129 -0
- package/dist/commands/registry-sync.js.map +1 -0
- package/dist/commands/stale.d.ts +17 -0
- package/dist/commands/stale.d.ts.map +1 -0
- package/dist/commands/stale.js +136 -0
- package/dist/commands/stale.js.map +1 -0
- package/dist/commands/sync.d.ts +21 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +78 -0
- package/dist/commands/sync.js.map +1 -0
- 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 +8 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +509 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/activity.d.ts +53 -0
- package/dist/lib/activity.d.ts.map +1 -0
- package/dist/lib/activity.js +271 -0
- package/dist/lib/activity.js.map +1 -0
- package/dist/lib/agent-errors.d.ts +41 -0
- package/dist/lib/agent-errors.d.ts.map +1 -0
- package/dist/lib/agent-errors.js +145 -0
- package/dist/lib/agent-errors.js.map +1 -0
- package/dist/lib/ai/context-builder.d.ts +16 -0
- package/dist/lib/ai/context-builder.d.ts.map +1 -0
- package/dist/lib/ai/context-builder.js +229 -0
- package/dist/lib/ai/context-builder.js.map +1 -0
- package/dist/lib/ai/event-handler.d.ts +21 -0
- package/dist/lib/ai/event-handler.d.ts.map +1 -0
- package/dist/lib/ai/event-handler.js +111 -0
- package/dist/lib/ai/event-handler.js.map +1 -0
- package/dist/lib/ai/index.d.ts +13 -0
- package/dist/lib/ai/index.d.ts.map +1 -0
- package/dist/lib/ai/index.js +11 -0
- package/dist/lib/ai/index.js.map +1 -0
- package/dist/lib/ai/llm-client.d.ts +37 -0
- package/dist/lib/ai/llm-client.d.ts.map +1 -0
- package/dist/lib/ai/llm-client.js +225 -0
- package/dist/lib/ai/llm-client.js.map +1 -0
- package/dist/lib/ai/reasoner.d.ts +11 -0
- package/dist/lib/ai/reasoner.d.ts.map +1 -0
- package/dist/lib/ai/reasoner.js +227 -0
- package/dist/lib/ai/reasoner.js.map +1 -0
- package/dist/lib/ai/setup.d.ts +40 -0
- package/dist/lib/ai/setup.d.ts.map +1 -0
- package/dist/lib/ai/setup.js +154 -0
- package/dist/lib/ai/setup.js.map +1 -0
- package/dist/lib/ai/types.d.ts +135 -0
- package/dist/lib/ai/types.d.ts.map +1 -0
- package/dist/lib/ai/types.js +42 -0
- package/dist/lib/ai/types.js.map +1 -0
- package/dist/lib/ast.d.ts +44 -0
- package/dist/lib/ast.d.ts.map +1 -0
- package/dist/lib/ast.js +160 -0
- package/dist/lib/ast.js.map +1 -0
- 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 +56 -0
- package/dist/lib/colony-subscriber.d.ts.map +1 -0
- package/dist/lib/colony-subscriber.js +265 -0
- package/dist/lib/colony-subscriber.js.map +1 -0
- package/dist/lib/config.d.ts +62 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +235 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/conflict-analyzer.d.ts +33 -0
- package/dist/lib/conflict-analyzer.d.ts.map +1 -0
- package/dist/lib/conflict-analyzer.js +114 -0
- package/dist/lib/conflict-analyzer.js.map +1 -0
- package/dist/lib/conflict-renderer.d.ts +7 -0
- package/dist/lib/conflict-renderer.d.ts.map +1 -0
- package/dist/lib/conflict-renderer.js +145 -0
- package/dist/lib/conflict-renderer.js.map +1 -0
- package/dist/lib/conflict-tier.d.ts +20 -0
- package/dist/lib/conflict-tier.d.ts.map +1 -0
- package/dist/lib/conflict-tier.js +49 -0
- package/dist/lib/conflict-tier.js.map +1 -0
- package/dist/lib/crypto.d.ts +71 -0
- package/dist/lib/crypto.d.ts.map +1 -0
- package/dist/lib/crypto.js +176 -0
- package/dist/lib/crypto.js.map +1 -0
- 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/errors.d.ts +35 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +71 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/git-events-subscriber.d.ts +86 -0
- package/dist/lib/git-events-subscriber.d.ts.map +1 -0
- package/dist/lib/git-events-subscriber.js +870 -0
- package/dist/lib/git-events-subscriber.js.map +1 -0
- 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 +103 -0
- package/dist/lib/git.d.ts.map +1 -0
- package/dist/lib/git.js +670 -0
- package/dist/lib/git.js.map +1 -0
- package/dist/lib/github.d.ts +151 -0
- package/dist/lib/github.d.ts.map +1 -0
- package/dist/lib/github.js +425 -0
- package/dist/lib/github.js.map +1 -0
- package/dist/lib/graph.d.ts +38 -0
- package/dist/lib/graph.d.ts.map +1 -0
- package/dist/lib/graph.js +165 -0
- package/dist/lib/graph.js.map +1 -0
- 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/regex-utils.d.ts +6 -0
- package/dist/lib/regex-utils.d.ts.map +1 -0
- package/dist/lib/regex-utils.js +24 -0
- package/dist/lib/regex-utils.js.map +1 -0
- package/dist/lib/register-renderer.d.ts +10 -0
- package/dist/lib/register-renderer.d.ts.map +1 -0
- package/dist/lib/register-renderer.js +19 -0
- package/dist/lib/register-renderer.js.map +1 -0
- package/dist/lib/remote-drift.d.ts +61 -0
- package/dist/lib/remote-drift.d.ts.map +1 -0
- package/dist/lib/remote-drift.js +227 -0
- package/dist/lib/remote-drift.js.map +1 -0
- package/dist/lib/security.d.ts +72 -0
- package/dist/lib/security.d.ts.map +1 -0
- package/dist/lib/security.js +180 -0
- package/dist/lib/security.js.map +1 -0
- 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/lib/update-check.d.ts +11 -0
- package/dist/lib/update-check.d.ts.map +1 -0
- package/dist/lib/update-check.js +113 -0
- package/dist/lib/update-check.js.map +1 -0
- package/dist/lib/watch-renderer.d.ts +13 -0
- package/dist/lib/watch-renderer.d.ts.map +1 -0
- package/dist/lib/watch-renderer.js +35 -0
- package/dist/lib/watch-renderer.js.map +1 -0
- package/dist/storage/adapter.d.ts +81 -0
- package/dist/storage/adapter.d.ts.map +1 -0
- package/dist/storage/adapter.js +8 -0
- package/dist/storage/adapter.js.map +1 -0
- package/dist/storage/branch-registry-store.d.ts +13 -0
- package/dist/storage/branch-registry-store.d.ts.map +1 -0
- package/dist/storage/branch-registry-store.js +2 -0
- package/dist/storage/branch-registry-store.js.map +1 -0
- package/dist/storage/factory.d.ts +6 -0
- package/dist/storage/factory.d.ts.map +1 -0
- package/dist/storage/factory.js +14 -0
- package/dist/storage/factory.js.map +1 -0
- package/dist/storage/index.d.ts +10 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +11 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/json-branch-registry-store.d.ts +19 -0
- package/dist/storage/json-branch-registry-store.d.ts.map +1 -0
- package/dist/storage/json-branch-registry-store.js +138 -0
- package/dist/storage/json-branch-registry-store.js.map +1 -0
- package/dist/storage/local.d.ts +20 -0
- package/dist/storage/local.d.ts.map +1 -0
- package/dist/storage/local.js +40 -0
- package/dist/storage/local.js.map +1 -0
- package/dist/storage/memory-branch-registry-store.d.ts +16 -0
- package/dist/storage/memory-branch-registry-store.d.ts.map +1 -0
- package/dist/storage/memory-branch-registry-store.js +68 -0
- package/dist/storage/memory-branch-registry-store.js.map +1 -0
- package/dist/storage/supabase-registry-sync-client-impl.d.ts +40 -0
- package/dist/storage/supabase-registry-sync-client-impl.d.ts.map +1 -0
- package/dist/storage/supabase-registry-sync-client-impl.js +278 -0
- package/dist/storage/supabase-registry-sync-client-impl.js.map +1 -0
- package/dist/storage/supabase-registry-sync-client.d.ts +9 -0
- package/dist/storage/supabase-registry-sync-client.d.ts.map +1 -0
- package/dist/storage/supabase-registry-sync-client.js +2 -0
- package/dist/storage/supabase-registry-sync-client.js.map +1 -0
- package/dist/storage/supabase.d.ts +28 -0
- package/dist/storage/supabase.d.ts.map +1 -0
- package/dist/storage/supabase.js +56 -0
- package/dist/storage/supabase.js.map +1 -0
- package/dist/types/cloud.d.ts +102 -0
- package/dist/types/cloud.d.ts.map +1 -0
- package/dist/types/cloud.js +13 -0
- package/dist/types/cloud.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.20.2] - 2026-10-28
|
|
11
|
+
|
|
12
|
+
Same code as 0.20.1. **0.20.1 on npm is broken and deprecated.** It was published by hand
|
|
13
|
+
from a machine whose `~/.npmrc` sets `ignore-scripts=true`, which also skips `prepublishOnly`,
|
|
14
|
+
so the build never ran and the tarball held 5 files and no `dist/`, so there's no CLI. Publish by
|
|
15
|
+
hand only after an explicit `npm run build`, and check that `npm pack --dry-run` lists
|
|
16
|
+
`dist/bin/spidersan.js` before uploading.
|
|
17
|
+
|
|
10
18
|
## [0.20.1] - 2026-10-28
|
|
11
19
|
|
|
12
20
|
### Fixed
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lazy command registry for the spidersan CLI.
|
|
3
|
+
*
|
|
4
|
+
* Each entry carries the CLI name, the help-listing description, and a loader
|
|
5
|
+
* that imports just that command's module and registers it onto `program`.
|
|
6
|
+
* Most commands export a ready-built `Command`; the exception is the
|
|
7
|
+
* attach-style `log` (which mutates program).
|
|
8
|
+
*
|
|
9
|
+
* `description` is duplicated here so the CLI's cold path (help / unknown
|
|
10
|
+
* command) can render the full command listing from lightweight stubs WITHOUT
|
|
11
|
+
* importing every command module. It must stay in sync with each command's real
|
|
12
|
+
* `.description()` — `tests/bin-command-registry.test.ts` fails if it drifts.
|
|
13
|
+
*
|
|
14
|
+
* Array order is the help-listing order.
|
|
15
|
+
*/
|
|
16
|
+
import type { Command } from 'commander';
|
|
17
|
+
export interface CommandEntry {
|
|
18
|
+
name: string;
|
|
19
|
+
description: string;
|
|
20
|
+
load: (program: Command) => Promise<unknown>;
|
|
21
|
+
}
|
|
22
|
+
export declare const COMMANDS: CommandEntry[];
|
|
23
|
+
/** name → loader, for O(1) hot-path dispatch. */
|
|
24
|
+
export declare const LOADER_BY_NAME: Map<string, (program: Command) => Promise<unknown>>;
|
|
25
|
+
//# sourceMappingURL=command-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-registry.d.ts","sourceRoot":"","sources":["../../src/bin/command-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAChD;AAED,eAAO,MAAM,QAAQ,EAAE,YAAY,EAyBlC,CAAC;AAEF,iDAAiD;AACjD,eAAO,MAAM,cAAc,wBA/BP,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CA+B0B,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export const COMMANDS = [
|
|
2
|
+
{ name: 'init', description: 'Initialize Spidersan in the current project', load: async (p) => p.addCommand((await import('../commands/init.js')).initCommand) },
|
|
3
|
+
{ name: 'register', description: 'Register the current branch with files being modified', load: async (p) => p.addCommand((await import('../commands/register.js')).registerCommand) },
|
|
4
|
+
{ name: 'list', description: 'List all registered branches', load: async (p) => p.addCommand((await import('../commands/list.js')).listCommand) },
|
|
5
|
+
{ name: 'conflicts', description: 'Detect file conflicts between branches (with tiered blocking)', load: async (p) => p.addCommand((await import('../commands/conflicts.js')).conflictsCommand) },
|
|
6
|
+
{ name: 'merge-order', description: 'Get optimal merge order for all branches', load: async (p) => p.addCommand((await import('../commands/merge-order.js')).mergeOrderCommand) },
|
|
7
|
+
{ name: 'ready-check', description: 'Verify branch is ready to merge', load: async (p) => p.addCommand((await import('../commands/ready-check.js')).readyCheckCommand) },
|
|
8
|
+
{ name: 'depends', description: 'Set or show dependencies for a branch (deps merge first)', load: async (p) => p.addCommand((await import('../commands/depends.js')).dependsCommand) },
|
|
9
|
+
{ name: 'stale', description: 'Show stale branches (not updated recently)', load: async (p) => p.addCommand((await import('../commands/stale.js')).staleCommand) },
|
|
10
|
+
{ name: 'cleanup', description: 'Remove stale branches from registry', load: async (p) => p.addCommand((await import('../commands/cleanup.js')).cleanupCommand) },
|
|
11
|
+
{ name: 'abandon', description: 'Mark a branch as abandoned', load: async (p) => p.addCommand((await import('../commands/abandon.js')).abandonCommand) },
|
|
12
|
+
{ name: 'merged', description: 'Mark a branch as merged', load: async (p) => p.addCommand((await import('../commands/merged.js')).mergedCommand) },
|
|
13
|
+
{ name: 'sync', description: 'Sync registry with actual git branches', load: async (p) => p.addCommand((await import('../commands/sync.js')).syncCommand) },
|
|
14
|
+
{ name: 'watch', description: '🕷️ Watch files and auto-register changes (daemon mode)', load: async (p) => p.addCommand((await import('../commands/watch.js')).watchCommand) },
|
|
15
|
+
{ name: 'doctor', description: 'Diagnose common Spidersan issues', load: async (p) => p.addCommand((await import('../commands/doctor.js')).doctorCommand) },
|
|
16
|
+
{ name: 'config', description: 'View and edit Spidersan configuration', load: async (p) => p.addCommand((await import('../commands/config.js')).configCommand) },
|
|
17
|
+
{ name: 'registry-sync', description: 'Sync local registry to/from Supabase (cross-machine awareness)', load: async (p) => p.addCommand((await import('../commands/registry-sync.js')).registrySyncCommand) },
|
|
18
|
+
{ name: 'cross-conflicts', description: 'Detect file conflicts across machines (via Supabase)', load: async (p) => p.addCommand((await import('../commands/cross-conflicts.js')).crossConflictsCommand) },
|
|
19
|
+
{ name: 'git-watch', description: 'Subscribe to git-change notifications from GitHub webhooks', load: async (p) => p.addCommand((await import('../commands/git-watch.js')).gitWatchCommand) },
|
|
20
|
+
{ name: 'github-sync', description: 'Fetch branch/PR/CI status from GitHub for configured repos', load: async (p) => p.addCommand((await import('../commands/github-sync.js')).githubSyncCommand) },
|
|
21
|
+
{ name: 'pr-check', description: 'Check a PR\'s merge readiness (stacked base, red/behind state)', load: async (p) => p.addCommand((await import('../commands/pr-check.js')).prCheckCommand) },
|
|
22
|
+
{ name: 'verify-trunk', description: 'Detect registry trunk-poison (main/master must claim no files)', load: async (p) => p.addCommand((await import('../commands/verify-trunk.js')).verifyTrunkCommand) },
|
|
23
|
+
{ name: 'rebase-helper', description: 'Detect and help resolve local git rebase states (non-interactive guidance)', load: async (p) => p.addCommand((await import('../commands/rebase-helper.js')).rebaseHelperCommand) },
|
|
24
|
+
{ name: 'log', description: 'Show branch operation history', load: async (p) => { (await import('../commands/log.js')).logCommand(p); } },
|
|
25
|
+
{ name: 'context', description: 'Show aggregated repository context (registry, conflicts, git, colony)', load: async (p) => p.addCommand((await import('../commands/context.js')).contextCommand) },
|
|
26
|
+
];
|
|
27
|
+
/** name → loader, for O(1) hot-path dispatch. */
|
|
28
|
+
export const LOADER_BY_NAME = new Map(COMMANDS.map(c => [c.name, c.load]));
|
|
29
|
+
//# sourceMappingURL=command-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-registry.js","sourceRoot":"","sources":["../../src/bin/command-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Spidersan CLI Entry Point
|
|
4
|
+
*
|
|
5
|
+
* Branch coordination for AI coding agents.
|
|
6
|
+
*
|
|
7
|
+
* Startup performance: commands are lazy-loaded. Importing from
|
|
8
|
+
* `../commands/index.js` would pull in all ~24 command modules (and their heavy
|
|
9
|
+
* transitive deps — chokidar, tree-sitter)
|
|
10
|
+
* just to print `--version`. Instead we register only the invoked command's
|
|
11
|
+
* module on the hot path, and fall back to loading everything only for help /
|
|
12
|
+
* unknown commands.
|
|
13
|
+
*/
|
|
14
|
+
import 'dotenv/config';
|
|
15
|
+
export declare const isDebugMode: () => boolean;
|
|
16
|
+
//# sourceMappingURL=spidersan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spidersan.d.ts","sourceRoot":"","sources":["../../src/bin/spidersan.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG;AAEH,OAAO,eAAe,CAAC;AAavB,eAAO,MAAM,WAAW,eAAkB,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Spidersan CLI Entry Point
|
|
4
|
+
*
|
|
5
|
+
* Branch coordination for AI coding agents.
|
|
6
|
+
*
|
|
7
|
+
* Startup performance: commands are lazy-loaded. Importing from
|
|
8
|
+
* `../commands/index.js` would pull in all ~24 command modules (and their heavy
|
|
9
|
+
* transitive deps — chokidar, tree-sitter)
|
|
10
|
+
* just to print `--version`. Instead we register only the invoked command's
|
|
11
|
+
* module on the hot path, and fall back to loading everything only for help /
|
|
12
|
+
* unknown commands.
|
|
13
|
+
*/
|
|
14
|
+
import 'dotenv/config';
|
|
15
|
+
import { Command } from 'commander';
|
|
16
|
+
import { createRequire } from 'module';
|
|
17
|
+
import { COMMANDS, LOADER_BY_NAME } from './command-registry.js';
|
|
18
|
+
// Read version from package.json dynamically
|
|
19
|
+
const require = createRequire(import.meta.url);
|
|
20
|
+
const pkg = require('../../package.json');
|
|
21
|
+
const program = new Command();
|
|
22
|
+
// Global debug mode flag
|
|
23
|
+
let debugMode = false;
|
|
24
|
+
export const isDebugMode = () => debugMode;
|
|
25
|
+
// Global error handler for debug mode
|
|
26
|
+
process.on('uncaughtException', (error) => {
|
|
27
|
+
if (debugMode) {
|
|
28
|
+
console.error('\n🔴 UNCAUGHT EXCEPTION:');
|
|
29
|
+
console.error(error.stack || error.message);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
console.error(`❌ ${error.message}`);
|
|
33
|
+
console.error(' Run with --debug for full stack trace');
|
|
34
|
+
}
|
|
35
|
+
process.exit(1);
|
|
36
|
+
});
|
|
37
|
+
process.on('unhandledRejection', (reason) => {
|
|
38
|
+
if (debugMode) {
|
|
39
|
+
console.error('\n🔴 UNHANDLED REJECTION:');
|
|
40
|
+
console.error(reason);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
console.error(`❌ Unhandled error: ${reason}`);
|
|
44
|
+
console.error(' Run with --debug for full stack trace');
|
|
45
|
+
}
|
|
46
|
+
process.exit(1);
|
|
47
|
+
});
|
|
48
|
+
program
|
|
49
|
+
.name('spidersan')
|
|
50
|
+
.description('🕷️ Branch coordination for AI coding agents')
|
|
51
|
+
.version(pkg.version)
|
|
52
|
+
.option('-D, --debug', 'Enable verbose debug output with stack traces')
|
|
53
|
+
.hook('preAction', (thisCommand) => {
|
|
54
|
+
const opts = thisCommand.opts();
|
|
55
|
+
if (opts.debug) {
|
|
56
|
+
debugMode = true;
|
|
57
|
+
console.log('🐛 Debug mode enabled\n');
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
/** First non-option token in argv — the invoked top-level command, if any. */
|
|
61
|
+
function firstCommandToken(argv) {
|
|
62
|
+
for (const a of argv) {
|
|
63
|
+
if (a === '--')
|
|
64
|
+
break;
|
|
65
|
+
if (!a.startsWith('-'))
|
|
66
|
+
return a;
|
|
67
|
+
}
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
async function main() {
|
|
71
|
+
const args = process.argv.slice(2);
|
|
72
|
+
const cmd = firstCommandToken(args);
|
|
73
|
+
// Fast path for --version: no command modules needed at all.
|
|
74
|
+
if (!cmd && (args.includes('--version') || args.includes('-V'))) {
|
|
75
|
+
program.parse();
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (cmd && LOADER_BY_NAME.has(cmd)) {
|
|
79
|
+
// Hot path: a known command — load only that module.
|
|
80
|
+
await LOADER_BY_NAME.get(cmd)(program);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
// Cold path: help / no command / unknown command.
|
|
84
|
+
// Register lightweight stubs (name + description) so commander can render
|
|
85
|
+
// the full command listing WITHOUT importing every module; a core command
|
|
86
|
+
// is never *executed* here (it would have taken the hot path above), so
|
|
87
|
+
// the stubs need no options or action.
|
|
88
|
+
for (const entry of COMMANDS) {
|
|
89
|
+
program.command(entry.name).description(entry.description);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Check for updates (non-blocking)
|
|
93
|
+
const { checkForUpdates } = await import('../lib/update-check.js');
|
|
94
|
+
checkForUpdates().catch(() => { });
|
|
95
|
+
program.parse();
|
|
96
|
+
}
|
|
97
|
+
void main();
|
|
98
|
+
//# sourceMappingURL=spidersan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spidersan.js","sourceRoot":"","sources":["../../src/bin/spidersan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abandon.d.ts","sourceRoot":"","sources":["../../src/commands/abandon.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,cAAc,SAqCrB,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spidersan abandon
|
|
3
|
+
*
|
|
4
|
+
* Mark a branch as abandoned.
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import { getStorage } from '../storage/index.js';
|
|
8
|
+
import { logActivity } from '../lib/activity.js';
|
|
9
|
+
import { getCurrentBranch } from '../lib/git.js';
|
|
10
|
+
export const abandonCommand = new Command('abandon')
|
|
11
|
+
.description('Mark a branch as abandoned')
|
|
12
|
+
.argument('[branch]', 'Branch to abandon (default: current)')
|
|
13
|
+
.option('-f, --force', 'Skip confirmation')
|
|
14
|
+
.option('--dry-run', 'Show what would be abandoned without doing it')
|
|
15
|
+
.action(async (branchArg, options) => {
|
|
16
|
+
const storage = await getStorage();
|
|
17
|
+
if (!await storage.isInitialized()) {
|
|
18
|
+
console.error('❌ Spidersan not initialized. Run: spidersan init');
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
const branchName = branchArg || getCurrentBranch();
|
|
22
|
+
// Check if branch exists
|
|
23
|
+
const branch = await storage.get(branchName);
|
|
24
|
+
if (!branch) {
|
|
25
|
+
console.error(`❌ Branch "${branchName}" not found in registry.`);
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
if (options.dryRun) {
|
|
29
|
+
console.log(`🕷️ Would abandon: ${branchName}`);
|
|
30
|
+
console.log(` Files: ${branch.files.join(', ') || 'none'}`);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const success = await storage.unregister(branchName);
|
|
34
|
+
if (success) {
|
|
35
|
+
logActivity({ event: 'abandon', branch: branchName, details: {} });
|
|
36
|
+
console.log(`🕷️ Abandoned: ${branchName}`);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
console.error(`❌ Failed to abandon "${branchName}".`);
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
//# sourceMappingURL=abandon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abandon.js","sourceRoot":"","sources":["../../src/commands/abandon.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;KAC/C,WAAW,CAAC,4BAA4B,CAAC;KACzC,QAAQ,CAAC,UAAU,EAAE,sCAAsC,CAAC;KAC5D,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC;KAC1C,MAAM,CAAC,WAAW,EAAE,+CAA+C,CAAC;KACpE,MAAM,CAAC,KAAK,EAAE,SAA6B,EAAE,OAAO,EAAE,EAAE;IACrD,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;IAEnC,IAAI,CAAC,MAAM,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,UAAU,GAAG,SAAS,IAAI,gBAAgB,EAAE,CAAC;IAEnD,yBAAyB;IACzB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,aAAa,UAAU,0BAA0B,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;QAC9D,OAAO;IACX,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAErD,IAAI,OAAO,EAAE,CAAC;QACV,WAAW,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,kBAAkB,UAAU,EAAE,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,KAAK,CAAC,wBAAwB,UAAU,IAAI,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../src/commands/cleanup.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,eAAO,MAAM,cAAc,SA6CrB,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spidersan cleanup
|
|
3
|
+
*
|
|
4
|
+
* Remove stale branches from the registry.
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import { getStorage } from '../storage/index.js';
|
|
8
|
+
export const cleanupCommand = new Command('cleanup')
|
|
9
|
+
.description('Remove stale branches from registry')
|
|
10
|
+
.option('--days <n>', 'Days threshold', '7')
|
|
11
|
+
.option('--dry-run', 'Show what would be removed without removing')
|
|
12
|
+
.option('--force', 'Also remove branches still marked active')
|
|
13
|
+
.action(async (options) => {
|
|
14
|
+
const storage = await getStorage();
|
|
15
|
+
if (!await storage.isInitialized()) {
|
|
16
|
+
console.error('❌ Spidersan not initialized. Run: spidersan init');
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
const days = parseInt(options.days, 10);
|
|
20
|
+
if (!Number.isFinite(days) || days < 0) {
|
|
21
|
+
console.error(`❌ Invalid --days value: ${options.days}`);
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
const threshold = new Date();
|
|
25
|
+
threshold.setDate(threshold.getDate() - days);
|
|
26
|
+
const branches = await storage.list();
|
|
27
|
+
const old = branches.filter(b => new Date(b.registeredAt) < threshold);
|
|
28
|
+
// registeredAt is never refreshed, so an old ACTIVE registration usually
|
|
29
|
+
// means in-flight work, not abandonment — deleting it silently blinds
|
|
30
|
+
// conflict detection for every other agent. Skip unless --force.
|
|
31
|
+
const stale = options.force ? old : old.filter(b => b.status !== 'active');
|
|
32
|
+
const skipped = old.length - stale.length;
|
|
33
|
+
if (stale.length === 0) {
|
|
34
|
+
console.log(`🕷️ No stale branches to clean up.${skipped > 0 ? ` (${skipped} active skipped — use --force to include)` : ''}`);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (options.dryRun) {
|
|
38
|
+
console.log(`🕷️ Would remove ${stale.length} stale branch(es):\n`);
|
|
39
|
+
stale.forEach(b => console.log(` - ${b.name}`));
|
|
40
|
+
if (skipped > 0)
|
|
41
|
+
console.log(`\n (${skipped} active branch(es) skipped — use --force to include)`);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const removedNames = await storage.cleanup(threshold, !!options.force);
|
|
45
|
+
removedNames.forEach(name => console.log(` 🗑️ Removed: ${name}`));
|
|
46
|
+
if (skipped > 0)
|
|
47
|
+
console.log(` (${skipped} active branch(es) skipped — use --force to include)`);
|
|
48
|
+
console.log(`\n🕷️ Cleaned up ${removedNames.length} branch(es).`);
|
|
49
|
+
});
|
|
50
|
+
//# sourceMappingURL=cleanup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../src/commands/cleanup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spidersan config
|
|
3
|
+
*
|
|
4
|
+
* Manage Spidersan configuration (.spidersanrc).
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
declare function setNestedValue(obj: Record<string, unknown>, path: string, value: unknown): void;
|
|
8
|
+
declare function getNestedValue(obj: unknown, path: string): unknown;
|
|
9
|
+
export declare const configCommand: Command;
|
|
10
|
+
export declare const _testable: {
|
|
11
|
+
setNestedValue: typeof setNestedValue;
|
|
12
|
+
getNestedValue: typeof getNestedValue;
|
|
13
|
+
};
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkEpC,iBAAS,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAmBxF;AAED,iBAAS,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAW3D;AAgGD,eAAO,MAAM,aAAa,SAC+B,CAAC;AAG1D,eAAO,MAAM,SAAS;;;CAGrB,CAAC"}
|