spidersan 0.4.2 → 0.4.3

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/README.md CHANGED
@@ -61,6 +61,13 @@ spidersan ready-check
61
61
  npm install -g spidersan
62
62
  ```
63
63
 
64
+ ### Guided Setup (Optional)
65
+
66
+ ```bash
67
+ spidersan welcome
68
+ spidersan config wizard
69
+ ```
70
+
64
71
  ### Basic Usage
65
72
 
66
73
  ```bash
@@ -85,21 +92,26 @@ spidersan merge-order
85
92
 
86
93
  | Command | Description |
87
94
  |---------|-------------|
88
- | `spidersan list` | List all registered branches and their file ownership |
95
+ | `spidersan init` | Initialize Spidersan in the current project |
89
96
  | `spidersan register --files` | Register a branch with the files being modified |
97
+ | `spidersan list` | List all registered branches and their file ownership |
90
98
  | `spidersan conflicts` | Show file conflicts between your branch and others |
91
99
  | `spidersan merge-order` | Get topologically-sorted optimal merge order |
92
100
  | `spidersan ready-check` | Verify branch is ready to merge (no WIP, no conflicts) |
93
- | `spidersan watch --hub` | Daemon mode: watch files and auto-register with Hub sync |
94
- | `spidersan who-touched <file>` | Show git history + agent activity for specific files |
101
+ | `spidersan depends` | Set/show branch dependencies (Supabase only) |
102
+ | `spidersan stale` | Find stale branches |
103
+ | `spidersan cleanup` | Cleanup stale branches |
95
104
  | `spidersan rescue` | Start rescue mission for abandoned branch cleanup |
96
- | `spidersan scan --all` | Scan and categorize all branches in the repo |
97
- | `spidersan triage` | Categorize branches: MERGE / SALVAGE / ABANDON |
98
- | `spidersan salvage <branch>` | Extract good code from broken branches |
99
- | `spidersan watch` | Daemon mode - watch files and auto-register |
105
+ | `spidersan abandon` | Abandon a branch (mark inactive) |
106
+ | `spidersan merged` | Mark a branch merged |
107
+ | `spidersan sync` | Sync registry (local/Supabase) |
108
+ | `spidersan watch` | Daemon mode: watch files and auto-register |
100
109
  | `spidersan doctor` | Diagnose local state and registry health |
110
+ | `spidersan config` | View/edit configuration + guided wizard |
111
+ | `spidersan auto` | Auto-watch start/stop/status (config-based) |
112
+ | `spidersan welcome` | Onboarding and quick start |
101
113
 
102
- Keep core commands and add a "Coming Soon" or "Ecosystem Plugin" section for advanced commands like `who-touched`, `monitor`, `lock`, etc.
114
+ Advanced commands like `who-touched`, `monitor`, `lock`, `scan`, `triage`, and `salvage` live in the ecosystem plugin.
103
115
 
104
116
  ### Ecosystem Plugin (Optional)
105
117
 
@@ -123,6 +135,9 @@ spidersan watch --agent myagent --hub
123
135
 
124
136
  # Quiet mode (only show conflicts)
125
137
  spidersan watch --agent myagent --hub --quiet
138
+
139
+ # Watch only specific paths
140
+ spidersan watch --paths "src,lib" --root .
126
141
  ```
127
142
 
128
143
  **Features:**
@@ -131,6 +146,16 @@ spidersan watch --agent myagent --hub --quiet
131
146
  - 🔌 Hub integration for team visibility
132
147
  - 🕐 Debounced (1s) to prevent spam
133
148
 
149
+ ### ⚡ Auto Watch (Background)
150
+
151
+ Run a background watcher using paths from your config:
152
+
153
+ ```bash
154
+ spidersan auto start
155
+ spidersan auto status
156
+ spidersan auto stop
157
+ ```
158
+
134
159
  ### 🦺 Rescue Mode
135
160
 
136
161
  Got a repo with 10+ abandoned branches? Let Spidersan clean up the mess:
@@ -1 +1 @@
1
- {"version":3,"file":"spidersan.d.ts","sourceRoot":"","sources":["../../src/bin/spidersan.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAEH,OAAO,eAAe,CAAC;AAgCvB,eAAO,MAAM,WAAW,eAAkB,CAAC"}
1
+ {"version":3,"file":"spidersan.d.ts","sourceRoot":"","sources":["../../src/bin/spidersan.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAEH,OAAO,eAAe,CAAC;AAmCvB,eAAO,MAAM,WAAW,eAAkB,CAAC"}
@@ -7,7 +7,7 @@
7
7
  import 'dotenv/config';
8
8
  import { Command } from 'commander';
9
9
  import { createRequire } from 'module';
10
- import { initCommand, registerCommand, listCommand, conflictsCommand, mergeOrderCommand, readyCheckCommand, dependsCommand, staleCommand, cleanupCommand, rescueCommand, abandonCommand, mergedCommand, syncCommand, watchCommand, doctorCommand, loadEcosystemCommands, getEcosystemStatus, } from '../commands/index.js';
10
+ import { initCommand, registerCommand, listCommand, conflictsCommand, mergeOrderCommand, readyCheckCommand, dependsCommand, staleCommand, cleanupCommand, rescueCommand, abandonCommand, mergedCommand, syncCommand, watchCommand, doctorCommand, configCommand, autoCommand, welcomeCommand, loadEcosystemCommands, getEcosystemStatus, } from '../commands/index.js';
11
11
  import { checkForUpdates } from '../lib/update-check.js';
12
12
  // Read version from package.json dynamically
13
13
  const require = createRequire(import.meta.url);
@@ -67,6 +67,9 @@ program.addCommand(mergedCommand);
67
67
  program.addCommand(syncCommand);
68
68
  program.addCommand(watchCommand);
69
69
  program.addCommand(doctorCommand);
70
+ program.addCommand(configCommand);
71
+ program.addCommand(autoCommand);
72
+ program.addCommand(welcomeCommand);
70
73
  async function main() {
71
74
  const ecosystemCommands = await loadEcosystemCommands();
72
75
  ecosystemCommands.forEach((command) => program.addCommand(command));
@@ -1 +1 @@
1
- {"version":3,"file":"spidersan.js","sourceRoot":"","sources":["../../src/bin/spidersan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spidersan.js","sourceRoot":"","sources":["../../src/bin/spidersan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * spidersan auto
3
+ *
4
+ * Start/stop auto-watch sessions based on config.
5
+ */
6
+ import { Command } from 'commander';
7
+ export declare const autoCommand: Command;
8
+ //# sourceMappingURL=auto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto.d.ts","sourceRoot":"","sources":["../../src/commands/auto.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwEpC,eAAO,MAAM,WAAW,SAC6B,CAAC"}
@@ -0,0 +1,206 @@
1
+ /**
2
+ * spidersan auto
3
+ *
4
+ * Start/stop auto-watch sessions based on config.
5
+ */
6
+ import { Command } from 'commander';
7
+ import { execSync, spawn } from 'child_process';
8
+ import { existsSync, readFileSync, writeFileSync, mkdirSync, rmSync } from 'fs';
9
+ import { join } from 'path';
10
+ import { loadConfig } from '../lib/config.js';
11
+ function getRepoRoot() {
12
+ try {
13
+ return execSync('git rev-parse --show-toplevel', { encoding: 'utf-8' }).trim();
14
+ }
15
+ catch {
16
+ return process.cwd();
17
+ }
18
+ }
19
+ function getStatePath(repoRoot) {
20
+ return join(repoRoot, '.spidersan', 'auto-watch.json');
21
+ }
22
+ function ensureStateDir(repoRoot) {
23
+ const dir = join(repoRoot, '.spidersan');
24
+ if (!existsSync(dir)) {
25
+ mkdirSync(dir, { recursive: true });
26
+ }
27
+ }
28
+ function parsePaths(value) {
29
+ return value.split(',').map((entry) => entry.trim()).filter(Boolean);
30
+ }
31
+ function isProcessRunning(pid) {
32
+ try {
33
+ process.kill(pid, 0);
34
+ return true;
35
+ }
36
+ catch {
37
+ return false;
38
+ }
39
+ }
40
+ function readState(statePath) {
41
+ if (!existsSync(statePath))
42
+ return null;
43
+ try {
44
+ const content = readFileSync(statePath, 'utf-8');
45
+ return JSON.parse(content);
46
+ }
47
+ catch {
48
+ return null;
49
+ }
50
+ }
51
+ function stopProcess(pid) {
52
+ try {
53
+ if (process.platform !== 'win32') {
54
+ process.kill(-pid);
55
+ }
56
+ else {
57
+ process.kill(pid);
58
+ }
59
+ }
60
+ catch {
61
+ // ignore kill errors
62
+ }
63
+ }
64
+ export const autoCommand = new Command('auto')
65
+ .description('Auto-watch shortcuts (start/stop)');
66
+ autoCommand
67
+ .command('start')
68
+ .description('Start auto-watch in the background')
69
+ .option('--paths <paths>', 'Comma-separated list of files or folders to watch')
70
+ .option('--agent <agent>', 'Agent identifier for registration')
71
+ .option('--hub', 'Connect to Hub and emit real-time conflict warnings')
72
+ .option('--hub-sync', 'Post conflicts to Hub chat via REST API')
73
+ .option('--quiet', 'Only log conflicts, not file changes')
74
+ .option('--legacy', 'Legacy mode: use old watcher settings')
75
+ .option('--force', 'Start even if autoWatch is disabled in config')
76
+ .action(async (options) => {
77
+ const repoRoot = getRepoRoot();
78
+ const statePath = getStatePath(repoRoot);
79
+ ensureStateDir(repoRoot);
80
+ const existing = readState(statePath);
81
+ if (existing && isProcessRunning(existing.pid)) {
82
+ console.log('🕷️ Auto-watch is already running.');
83
+ console.log(` PID: ${existing.pid}`);
84
+ console.log(` Paths: ${existing.paths.join(', ')}`);
85
+ return;
86
+ }
87
+ const config = await loadConfig();
88
+ const autoConfig = config.autoWatch;
89
+ const configEnabled = autoConfig.enabled;
90
+ const cliPaths = options.paths ? parsePaths(options.paths) : [];
91
+ if (!configEnabled && cliPaths.length === 0 && !options.force) {
92
+ console.error('❌ Auto-watch is disabled in config.');
93
+ console.error(' Enable it in .spidersanrc or pass --paths / --force.');
94
+ return;
95
+ }
96
+ const paths = cliPaths.length > 0 ? cliPaths : autoConfig.paths;
97
+ if (paths.length === 0) {
98
+ console.error('❌ No auto-watch paths configured.');
99
+ console.error(' Set autoWatch.paths in .spidersanrc or pass --paths.');
100
+ return;
101
+ }
102
+ const configuredAgent = config.agent.name?.trim();
103
+ const agent = (options.agent || process.env.SPIDERSAN_AGENT || configuredAgent || 'unknown').trim();
104
+ const hub = Boolean(options.hub || autoConfig.hub);
105
+ const hubSync = Boolean(options.hubSync || autoConfig.hubSync);
106
+ const quiet = Boolean(options.quiet || autoConfig.quiet);
107
+ const legacy = Boolean(options.legacy || autoConfig.legacy);
108
+ const script = process.argv[1];
109
+ if (!script) {
110
+ console.error('❌ Could not resolve CLI script path.');
111
+ return;
112
+ }
113
+ const args = [
114
+ script,
115
+ 'watch',
116
+ '--root',
117
+ repoRoot,
118
+ '--paths',
119
+ paths.join(','),
120
+ '--agent',
121
+ agent,
122
+ ];
123
+ if (hub)
124
+ args.push('--hub');
125
+ if (hubSync)
126
+ args.push('--hub-sync');
127
+ if (quiet)
128
+ args.push('--quiet');
129
+ if (legacy)
130
+ args.push('--legacy');
131
+ const child = spawn(process.execPath, args, {
132
+ cwd: repoRoot,
133
+ detached: true,
134
+ stdio: 'ignore',
135
+ env: process.env,
136
+ });
137
+ if (!child.pid) {
138
+ console.error('❌ Failed to start auto-watch.');
139
+ return;
140
+ }
141
+ child.unref();
142
+ const state = {
143
+ pid: child.pid,
144
+ startedAt: new Date().toISOString(),
145
+ repoRoot,
146
+ paths,
147
+ agent,
148
+ hub,
149
+ hubSync,
150
+ quiet,
151
+ legacy,
152
+ };
153
+ writeFileSync(statePath, JSON.stringify(state, null, 2));
154
+ console.log('🕷️ Auto-watch started.');
155
+ console.log(` PID: ${child.pid}`);
156
+ console.log(` Paths: ${paths.join(', ')}`);
157
+ console.log(' Stop with: spidersan auto stop');
158
+ });
159
+ autoCommand
160
+ .command('stop')
161
+ .description('Stop the running auto-watch session')
162
+ .action(() => {
163
+ const repoRoot = getRepoRoot();
164
+ const statePath = getStatePath(repoRoot);
165
+ const state = readState(statePath);
166
+ if (!state) {
167
+ console.log('🕷️ No auto-watch session found.');
168
+ return;
169
+ }
170
+ if (isProcessRunning(state.pid)) {
171
+ stopProcess(state.pid);
172
+ console.log(`🕷️ Stopped auto-watch (PID ${state.pid}).`);
173
+ }
174
+ else {
175
+ console.log('🕷️ Auto-watch process not running (stale state).');
176
+ }
177
+ try {
178
+ rmSync(statePath);
179
+ }
180
+ catch {
181
+ // ignore
182
+ }
183
+ });
184
+ autoCommand
185
+ .command('status')
186
+ .description('Show auto-watch status')
187
+ .action(() => {
188
+ const repoRoot = getRepoRoot();
189
+ const statePath = getStatePath(repoRoot);
190
+ const state = readState(statePath);
191
+ if (!state) {
192
+ console.log('🕷️ Auto-watch is not running.');
193
+ return;
194
+ }
195
+ const running = isProcessRunning(state.pid);
196
+ console.log(`🕷️ Auto-watch ${running ? 'running' : 'stopped'}`);
197
+ console.log(` PID: ${state.pid}`);
198
+ console.log(` Paths: ${state.paths.join(', ')}`);
199
+ console.log(` Agent: ${state.agent || 'unknown'}`);
200
+ console.log(` Hub: ${state.hub ? 'enabled' : 'disabled'}`);
201
+ console.log(` Hub Sync: ${state.hubSync ? 'enabled' : 'disabled'}`);
202
+ console.log(` Quiet: ${state.quiet ? 'enabled' : 'disabled'}`);
203
+ console.log(` Legacy: ${state.legacy ? 'enabled' : 'disabled'}`);
204
+ console.log(` Started: ${state.startedAt}`);
205
+ });
206
+ //# sourceMappingURL=auto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto.js","sourceRoot":"","sources":["../../src/commands/auto.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAChF,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAc9C,SAAS,WAAW;IAChB,IAAI,CAAC;QACD,OAAO,QAAQ,CAAC,+BAA+B,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACnF,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;IACzB,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB;IAClC,OAAO,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC7B,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW;IACjC,IAAI,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAC,SAAiB;IAChC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAmB,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC5B,IAAI,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACL,qBAAqB;IACzB,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KACzC,WAAW,CAAC,mCAAmC,CAAC,CAAC;AAEtD,WAAW;KACN,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,iBAAiB,EAAE,mDAAmD,CAAC;KAC9E,MAAM,CAAC,iBAAiB,EAAE,mCAAmC,CAAC;KAC9D,MAAM,CAAC,OAAO,EAAE,qDAAqD,CAAC;KACtE,MAAM,CAAC,YAAY,EAAE,yCAAyC,CAAC;KAC/D,MAAM,CAAC,SAAS,EAAE,sCAAsC,CAAC;KACzD,MAAM,CAAC,UAAU,EAAE,uCAAuC,CAAC;KAC3D,MAAM,CAAC,SAAS,EAAE,+CAA+C,CAAC;KAClE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACtB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACzC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEzB,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,QAAQ,IAAI,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,WAAW,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtD,OAAO;IACX,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC;IACpC,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,CAAC;IACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEhE,IAAI,CAAC,aAAa,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC5D,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACrD,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;QACzE,OAAO;IACX,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;IAChE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACnD,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;QACzE,OAAO;IACX,CAAC;IAED,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;IAClD,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,eAAe,IAAI,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;IAEpG,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IAE5D,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACtD,OAAO;IACX,CAAC;IAED,MAAM,IAAI,GAAG;QACT,MAAM;QACN,OAAO;QACP,QAAQ;QACR,QAAQ;QACR,SAAS;QACT,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QACf,SAAS;QACT,KAAK;KACR,CAAC;IAEF,IAAI,GAAG;QAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,IAAI,OAAO;QAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACrC,IAAI,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAChC,IAAI,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAElC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE;QACxC,GAAG,EAAE,QAAQ;QACb,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,QAAQ;QACf,GAAG,EAAE,OAAO,CAAC,GAAG;KACnB,CAAC,CAAC;IAEH,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC/C,OAAO;IACX,CAAC;IAED,KAAK,CAAC,KAAK,EAAE,CAAC;IAEd,MAAM,KAAK,GAAmB;QAC1B,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,QAAQ;QACR,KAAK;QACL,KAAK;QACL,GAAG;QACH,OAAO;QACP,KAAK;QACL,MAAM;KACT,CAAC;IAEF,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAEzD,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;AACrD,CAAC,CAAC,CAAC;AAEP,WAAW;KACN,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,GAAG,EAAE;IACT,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IAEnC,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAChD,OAAO;IACX,CAAC;IAED,IAAI,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,+BAA+B,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9D,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,CAAC;QACD,MAAM,CAAC,SAAS,CAAC,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACL,SAAS;IACb,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,WAAW;KACN,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,wBAAwB,CAAC;KACrC,MAAM,CAAC,GAAG,EAAE;IACT,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IAEnC,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO;IACX,CAAC;IAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AAClD,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * spidersan config
3
+ *
4
+ * Manage Spidersan configuration (.spidersanrc).
5
+ */
6
+ import { Command } from 'commander';
7
+ export declare const configCommand: Command;
8
+ //# 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;AAmNpC,eAAO,MAAM,aAAa,SAC+B,CAAC"}