spidersan 0.6.0 → 0.9.0
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 +42 -52
- package/README.md +238 -3
- package/dist/bin/spidersan.d.ts.map +1 -1
- package/dist/bin/spidersan.js +13 -1
- package/dist/bin/spidersan.js.map +1 -1
- package/dist/commands/abandon.d.ts.map +1 -1
- package/dist/commands/abandon.js +1 -9
- package/dist/commands/abandon.js.map +1 -1
- package/dist/commands/ai.d.ts +15 -0
- package/dist/commands/ai.d.ts.map +1 -0
- package/dist/commands/ai.js +498 -0
- package/dist/commands/ai.js.map +1 -0
- package/dist/commands/auto.d.ts.map +1 -1
- package/dist/commands/auto.js +2 -1
- package/dist/commands/auto.js.map +1 -1
- package/dist/commands/bot.d.ts +16 -0
- package/dist/commands/bot.d.ts.map +1 -0
- package/dist/commands/bot.js +398 -0
- package/dist/commands/bot.js.map +1 -0
- package/dist/commands/conflicts.d.ts.map +1 -1
- package/dist/commands/conflicts.js +260 -277
- package/dist/commands/conflicts.js.map +1 -1
- 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.map +1 -1
- package/dist/commands/cross-conflicts.js +1 -41
- package/dist/commands/cross-conflicts.js.map +1 -1
- package/dist/commands/depends.d.ts.map +1 -1
- package/dist/commands/depends.js +1 -9
- package/dist/commands/depends.js.map +1 -1
- package/dist/commands/fleet-status.d.ts +14 -0
- package/dist/commands/fleet-status.d.ts.map +1 -0
- package/dist/commands/fleet-status.js +127 -0
- package/dist/commands/fleet-status.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/index.d.ts +5 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +7 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/merge-order.d.ts.map +1 -1
- package/dist/commands/merge-order.js +18 -67
- package/dist/commands/merge-order.js.map +1 -1
- package/dist/commands/merged.d.ts.map +1 -1
- package/dist/commands/merged.js +1 -9
- package/dist/commands/merged.js.map +1 -1
- package/dist/commands/pulse.d.ts.map +1 -1
- package/dist/commands/pulse.js +134 -63
- package/dist/commands/pulse.js.map +1 -1
- package/dist/commands/queen.d.ts.map +1 -1
- package/dist/commands/queen.js +11 -7
- package/dist/commands/queen.js.map +1 -1
- package/dist/commands/ready-check.d.ts +2 -1
- package/dist/commands/ready-check.d.ts.map +1 -1
- package/dist/commands/ready-check.js +6 -30
- package/dist/commands/ready-check.js.map +1 -1
- package/dist/commands/register.d.ts.map +1 -1
- package/dist/commands/register.js +7 -29
- package/dist/commands/register.js.map +1 -1
- package/dist/commands/torrent.d.ts.map +1 -1
- package/dist/commands/torrent.js +29 -18
- package/dist/commands/torrent.js.map +1 -1
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +13 -34
- package/dist/commands/watch.js.map +1 -1
- 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 +216 -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 +98 -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 +246 -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 +39 -0
- package/dist/lib/ai/types.js.map +1 -0
- package/dist/lib/colony-subscriber.d.ts +15 -12
- package/dist/lib/colony-subscriber.d.ts.map +1 -1
- package/dist/lib/colony-subscriber.js +146 -65
- package/dist/lib/colony-subscriber.js.map +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +18 -4
- package/dist/lib/config.js.map +1 -1
- 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 +162 -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.js +1 -1
- package/dist/lib/crypto.js.map +1 -1
- package/dist/lib/git-events-subscriber.d.ts +59 -0
- package/dist/lib/git-events-subscriber.d.ts.map +1 -0
- package/dist/lib/git-events-subscriber.js +779 -0
- package/dist/lib/git-events-subscriber.js.map +1 -0
- package/dist/lib/git.d.ts +15 -0
- package/dist/lib/git.d.ts.map +1 -0
- package/dist/lib/git.js +180 -0
- package/dist/lib/git.js.map +1 -0
- package/dist/lib/github.d.ts.map +1 -1
- package/dist/lib/github.js +14 -9
- package/dist/lib/github.js.map +1 -1
- package/dist/lib/graph.d.ts +23 -0
- package/dist/lib/graph.d.ts.map +1 -0
- package/dist/lib/graph.js +134 -0
- package/dist/lib/graph.js.map +1 -0
- package/dist/lib/hub.d.ts +31 -0
- package/dist/lib/hub.d.ts.map +1 -0
- package/dist/lib/hub.js +92 -0
- package/dist/lib/hub.js.map +1 -0
- package/dist/lib/remote-drift.d.ts +60 -0
- package/dist/lib/remote-drift.d.ts.map +1 -0
- package/dist/lib/remote-drift.js +225 -0
- package/dist/lib/remote-drift.js.map +1 -0
- package/dist/lib/salvage-analyzer.d.ts.map +1 -1
- package/dist/lib/salvage-analyzer.js +2 -3
- package/dist/lib/salvage-analyzer.js.map +1 -1
- package/dist/lib/security.d.ts +11 -0
- package/dist/lib/security.d.ts.map +1 -1
- package/dist/lib/security.js +24 -1
- package/dist/lib/security.js.map +1 -1
- package/dist/lib/session-logger.d.ts +54 -0
- package/dist/lib/session-logger.d.ts.map +1 -0
- package/dist/lib/session-logger.js +136 -0
- package/dist/lib/session-logger.js.map +1 -0
- package/dist/storage/adapter.d.ts +4 -0
- package/dist/storage/adapter.d.ts.map +1 -1
- 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 +4 -0
- package/dist/storage/factory.d.ts.map +1 -1
- package/dist/storage/factory.js +25 -9
- package/dist/storage/factory.js.map +1 -1
- package/dist/storage/git-messages.d.ts +53 -0
- package/dist/storage/git-messages.d.ts.map +1 -0
- package/dist/storage/git-messages.js +376 -0
- package/dist/storage/git-messages.js.map +1 -0
- package/dist/storage/index.d.ts +5 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +5 -0
- package/dist/storage/index.js.map +1 -1
- 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 +112 -0
- package/dist/storage/json-branch-registry-store.js.map +1 -0
- package/dist/storage/local-messages.d.ts +37 -0
- package/dist/storage/local-messages.d.ts.map +1 -0
- package/dist/storage/local-messages.js +151 -0
- package/dist/storage/local-messages.js.map +1 -0
- package/dist/storage/local.d.ts +2 -6
- package/dist/storage/local.d.ts.map +1 -1
- package/dist/storage/local.js +13 -76
- package/dist/storage/local.js.map +1 -1
- 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 +65 -0
- package/dist/storage/memory-branch-registry-store.js.map +1 -0
- package/dist/storage/message-adapter.d.ts +86 -0
- package/dist/storage/message-adapter.d.ts.map +1 -0
- package/dist/storage/message-adapter.js +28 -0
- package/dist/storage/message-adapter.js.map +1 -0
- package/dist/storage/message-factory.d.ts +36 -0
- package/dist/storage/message-factory.d.ts.map +1 -0
- package/dist/storage/message-factory.js +99 -0
- package/dist/storage/message-factory.js.map +1 -0
- package/dist/storage/mycmail-adapter.d.ts +38 -0
- package/dist/storage/mycmail-adapter.d.ts.map +1 -0
- package/dist/storage/mycmail-adapter.js +300 -0
- package/dist/storage/mycmail-adapter.js.map +1 -0
- package/dist/storage/supabase-registry-sync-client-impl.d.ts +46 -0
- package/dist/storage/supabase-registry-sync-client-impl.d.ts.map +1 -0
- package/dist/storage/supabase-registry-sync-client-impl.js +322 -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 +8 -46
- package/dist/storage/supabase.d.ts.map +1 -1
- package/dist/storage/supabase.js +30 -342
- package/dist/storage/supabase.js.map +1 -1
- package/dist/tui/screen.d.ts.map +1 -1
- package/dist/tui/screen.js +5 -3
- package/dist/tui/screen.js.map +1 -1
- package/package.json +92 -90
|
@@ -0,0 +1,498 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spidersan ask / advise / explain / ai-setup — AI-powered gitops reasoning
|
|
3
|
+
*
|
|
4
|
+
* Thin CLI wrappers over reason() from the AI core.
|
|
5
|
+
* Builds context, sends to LLM (Gemma 4 default), streams response.
|
|
6
|
+
*/
|
|
7
|
+
import { createInterface } from 'node:readline';
|
|
8
|
+
import { Command } from 'commander';
|
|
9
|
+
import chalk from 'chalk';
|
|
10
|
+
import { buildContext, reason, ping } from '../lib/ai/index.js';
|
|
11
|
+
import { probeLocalServers, probeHostedTier, loadAiConfig, saveAiConfig, classifyUrl, appendByomAudit, } from '../lib/ai/setup.js';
|
|
12
|
+
import { HOSTED_API_BASE_URL } from '../lib/ai/types.js';
|
|
13
|
+
import { logSession, promptOutcome } from '../lib/session-logger.js';
|
|
14
|
+
function printResult(result) {
|
|
15
|
+
console.log('');
|
|
16
|
+
if (result.confidenceScore < 0.7) {
|
|
17
|
+
console.log(chalk.yellow(`⚠ Low confidence (${(result.confidenceScore * 100).toFixed(0)}%) — review manually before acting`));
|
|
18
|
+
console.log('');
|
|
19
|
+
}
|
|
20
|
+
console.log(result.advice);
|
|
21
|
+
console.log('');
|
|
22
|
+
if (result.unknownCommands.length > 0) {
|
|
23
|
+
// Sanitize before display: model output may contain ANSI escapes or control chars.
|
|
24
|
+
// eslint-disable-next-line no-control-regex
|
|
25
|
+
const sanitize = (s) => s.replace(/\x1b\[[0-9;]*[a-zA-Z]/g, '').replace(/[^\x20-\x7e]/g, '?').slice(0, 120);
|
|
26
|
+
const safeCommands = result.unknownCommands.map(sanitize).join(', ');
|
|
27
|
+
console.log(chalk.yellow(`⚠ unrecognized command(s) — may be hallucinated: ${safeCommands}`));
|
|
28
|
+
console.log('');
|
|
29
|
+
}
|
|
30
|
+
console.log(chalk.dim(`── ${result.provider}/${result.mode} · ${result.tokensUsed} tokens · confidence: ${result.confidence} (${(result.confidenceScore * 100).toFixed(0)}%) ──`));
|
|
31
|
+
}
|
|
32
|
+
// ─── spidersan ask ──────────────────────────────────────────
|
|
33
|
+
export const askCommand = new Command('ask')
|
|
34
|
+
.description('Ask spidersan a gitops question with full context')
|
|
35
|
+
.argument('<question...>', 'Your question')
|
|
36
|
+
.option('--provider <provider>', 'LLM provider (lmstudio, copilot, ollama, hosted)')
|
|
37
|
+
.option('--verbose', 'Include activity log in context')
|
|
38
|
+
.action(async (questionParts, options) => {
|
|
39
|
+
const question = questionParts.join(' ');
|
|
40
|
+
console.log(chalk.dim('🕷️ Gathering context...'));
|
|
41
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
42
|
+
try {
|
|
43
|
+
const ctx = await buildContext({
|
|
44
|
+
includeActivity: options.verbose ?? true,
|
|
45
|
+
verbose: options.verbose,
|
|
46
|
+
});
|
|
47
|
+
if (!options.provider)
|
|
48
|
+
await maybeShowHostedNotice(rl);
|
|
49
|
+
console.log(chalk.dim('🧠 Reasoning...'));
|
|
50
|
+
const result = await reason({ mode: 'ask', question, context: ctx, verbose: options.verbose }, options.provider ? { provider: options.provider } : undefined);
|
|
51
|
+
printResult(result);
|
|
52
|
+
const session_id = logSession('ask', ctx, result, { question });
|
|
53
|
+
await promptOutcome(session_id, rl);
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
console.error(`❌ ${err.message}`);
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
rl.close();
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
// ─── spidersan advise ───────────────────────────────────────
|
|
64
|
+
export const adviseCommand = new Command('advise')
|
|
65
|
+
.description('Get proactive gitops recommendations based on current state')
|
|
66
|
+
.option('--provider <provider>', 'LLM provider (lmstudio, copilot, ollama, hosted)')
|
|
67
|
+
.option('--verbose', 'Include activity log in context')
|
|
68
|
+
.action(async (options) => {
|
|
69
|
+
console.log(chalk.dim('🕷️ Gathering context...'));
|
|
70
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
71
|
+
try {
|
|
72
|
+
const ctx = await buildContext({
|
|
73
|
+
includeActivity: true,
|
|
74
|
+
verbose: options.verbose,
|
|
75
|
+
});
|
|
76
|
+
if (!options.provider)
|
|
77
|
+
await maybeShowHostedNotice(rl);
|
|
78
|
+
console.log(chalk.dim('🧠 Analyzing...'));
|
|
79
|
+
const result = await reason({ mode: 'advise', context: ctx, verbose: options.verbose }, options.provider ? { provider: options.provider } : undefined);
|
|
80
|
+
printResult(result);
|
|
81
|
+
const session_id = logSession('advise', ctx, result);
|
|
82
|
+
await promptOutcome(session_id, rl);
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
console.error(`❌ ${err.message}`);
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
finally {
|
|
89
|
+
rl.close();
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
// ─── spidersan explain ──────────────────────────────────────
|
|
93
|
+
export const explainCommand = new Command('explain')
|
|
94
|
+
.description('Explain a branch\'s purpose, owner, status, and conflicts')
|
|
95
|
+
.argument('<branch>', 'Branch name to explain')
|
|
96
|
+
.option('--provider <provider>', 'LLM provider (lmstudio, copilot, ollama, hosted)')
|
|
97
|
+
.action(async (branch, options) => {
|
|
98
|
+
console.log(chalk.dim(`🕷️ Investigating ${branch}...`));
|
|
99
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
100
|
+
try {
|
|
101
|
+
const ctx = await buildContext({ includeActivity: true });
|
|
102
|
+
console.log(chalk.dim('🧠 Analyzing...'));
|
|
103
|
+
const result = await reason({ mode: 'explain', branch, context: ctx }, options.provider ? { provider: options.provider } : undefined);
|
|
104
|
+
printResult(result);
|
|
105
|
+
const session_id = logSession('explain', ctx, result, { branch });
|
|
106
|
+
await promptOutcome(session_id, rl);
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
console.error(`❌ ${err.message}`);
|
|
110
|
+
process.exit(1);
|
|
111
|
+
}
|
|
112
|
+
finally {
|
|
113
|
+
rl.close();
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
// ─── spidersan ai-ping ─────────────────────────────────────
|
|
117
|
+
export const aiPingCommand = new Command('ai-ping')
|
|
118
|
+
.description('Check LLM provider connectivity and latency')
|
|
119
|
+
.option('--provider <provider>', 'Test specific provider (lmstudio, copilot, ollama, hosted)')
|
|
120
|
+
.action(async (options) => {
|
|
121
|
+
console.log(chalk.dim('🕷️ Pinging LLM...'));
|
|
122
|
+
const result = await ping(options.provider ? { provider: options.provider } : undefined);
|
|
123
|
+
if (result.ok) {
|
|
124
|
+
console.log(chalk.green(`✅ ${result.provider}/${result.model} — ${result.latencyMs}ms`));
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
console.log(chalk.red(`❌ ${result.provider}/${result.model} — ${result.error}`));
|
|
128
|
+
process.exit(1);
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
// ─── Hosted first-use notice ─────────────────────────────────
|
|
132
|
+
// Shown once when spidersan auto-routes to hosted tier (no --provider flag).
|
|
133
|
+
// Not a consent gate — just a transparency notice. Marks consentGiven so it
|
|
134
|
+
// doesn't repeat. Users who explicitly pass --provider hosted skip this.
|
|
135
|
+
async function maybeShowHostedNotice(rl) {
|
|
136
|
+
const config = await loadAiConfig();
|
|
137
|
+
if (!config || config.consentGiven)
|
|
138
|
+
return;
|
|
139
|
+
if (config.tier !== 'free' && config.tier !== 'contributor')
|
|
140
|
+
return;
|
|
141
|
+
console.log('');
|
|
142
|
+
console.log(chalk.dim('─────────────────────────────────────────────────'));
|
|
143
|
+
console.log(` ${chalk.bold('spidersan hosted API')} — first request`);
|
|
144
|
+
console.log(chalk.dim('─────────────────────────────────────────────────'));
|
|
145
|
+
console.log('');
|
|
146
|
+
console.log(' Local model unavailable. Routing to hosted tier.');
|
|
147
|
+
console.log(` Endpoint: ${HOSTED_API_BASE_URL.replace('/v1', '')}`);
|
|
148
|
+
console.log(' Tier: ' + config.tier + (config.tier === 'free' ? ' (50 req/day)' : ' (unlimited)'));
|
|
149
|
+
console.log('');
|
|
150
|
+
console.log(' Your git context (branch names, file counts,');
|
|
151
|
+
console.log(' conflict tiers) is sent to this endpoint.');
|
|
152
|
+
console.log(' No code content or commit messages are sent.');
|
|
153
|
+
console.log('');
|
|
154
|
+
if (process.stdin.isTTY) {
|
|
155
|
+
await new Promise((resolve) => rl.question(' Continue? [Y/n] ', (ans) => {
|
|
156
|
+
if (ans.trim().toLowerCase() === 'n') {
|
|
157
|
+
console.log(chalk.yellow(' Aborted. Run `spidersan ai-setup` to change tier.'));
|
|
158
|
+
process.exit(0);
|
|
159
|
+
}
|
|
160
|
+
resolve();
|
|
161
|
+
}));
|
|
162
|
+
}
|
|
163
|
+
await saveAiConfig({ ...config, consentGiven: true });
|
|
164
|
+
console.log('');
|
|
165
|
+
}
|
|
166
|
+
// ─── Helpers ────────────────────────────────────────────────
|
|
167
|
+
function prompt(rl, question) {
|
|
168
|
+
return new Promise((resolve) => rl.question(question, resolve));
|
|
169
|
+
}
|
|
170
|
+
async function confirmExternalByom(rl, url) {
|
|
171
|
+
console.log('');
|
|
172
|
+
console.log(chalk.yellow('⚠ SPIDERSAN_LLM_URL points to an external server:'));
|
|
173
|
+
console.log(chalk.yellow(` ${url}`));
|
|
174
|
+
console.log('');
|
|
175
|
+
console.log(' spidersan ask sends your git context to this server:');
|
|
176
|
+
console.log(' branch names, diff stats, registry state, commit structure.');
|
|
177
|
+
console.log('');
|
|
178
|
+
// Non-interactive stdin: default to N (safe)
|
|
179
|
+
if (!process.stdin.isTTY) {
|
|
180
|
+
console.log(' (Non-interactive session — defaulting to N)');
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
const answer = await prompt(rl, ' Continue? [y/N] ');
|
|
184
|
+
return answer.trim().toLowerCase() === 'y';
|
|
185
|
+
}
|
|
186
|
+
async function runConsentWizard(rl) {
|
|
187
|
+
console.log('');
|
|
188
|
+
console.log(chalk.dim('─────────────────────────────────────────────────────'));
|
|
189
|
+
console.log(' spidersan model · first hosted API call');
|
|
190
|
+
console.log(chalk.dim('─────────────────────────────────────────────────────'));
|
|
191
|
+
console.log('');
|
|
192
|
+
console.log(' The hosted model is free. You can help improve it.');
|
|
193
|
+
console.log('');
|
|
194
|
+
console.log(' If you enable the Contributor tier, each session');
|
|
195
|
+
console.log(' you run sends us this structural metadata:');
|
|
196
|
+
console.log('');
|
|
197
|
+
console.log(' · Branch count + approximate file counts (±15%)');
|
|
198
|
+
console.log(' · Branch relationships (topology, normalized)');
|
|
199
|
+
console.log(' · Timing buckets (e.g. "branch open 3–14 days")');
|
|
200
|
+
console.log('');
|
|
201
|
+
console.log(' We never collect: file names, paths, code content,');
|
|
202
|
+
console.log(' commit messages, or author information.');
|
|
203
|
+
console.log('');
|
|
204
|
+
console.log(' You can preview exactly what would be sent:');
|
|
205
|
+
console.log(' spidersan ai preview');
|
|
206
|
+
console.log('');
|
|
207
|
+
console.log(' Choose your tier:');
|
|
208
|
+
console.log('');
|
|
209
|
+
console.log(' [C] Contributor — unlimited API calls, share metadata');
|
|
210
|
+
console.log(' [F] Free — 50 calls/day, no sharing');
|
|
211
|
+
console.log(' [B] BYOM — use your own model, skip this');
|
|
212
|
+
console.log('');
|
|
213
|
+
const answer = await prompt(rl, ' Choice [F]: ');
|
|
214
|
+
const ch = answer.trim().toUpperCase() || 'F';
|
|
215
|
+
if (ch === 'C')
|
|
216
|
+
return 'contributor';
|
|
217
|
+
if (ch === 'B')
|
|
218
|
+
return 'byom';
|
|
219
|
+
return 'free';
|
|
220
|
+
}
|
|
221
|
+
// ─── spidersan ai setup ──────────────────────────────────────
|
|
222
|
+
export const aiSetupCommand = new Command('ai-setup')
|
|
223
|
+
.description('Set up spidersan AI — choose local model, hosted API, or BYOM')
|
|
224
|
+
.option('--byom <url>', 'Directly configure a custom LLM URL (skips menu)')
|
|
225
|
+
.option('--tier <tier>', 'Set tier directly: free | contributor | byom | local')
|
|
226
|
+
.option('--yes', 'Skip external URL confirmation (scripted use)')
|
|
227
|
+
.action(async (options) => {
|
|
228
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
229
|
+
try {
|
|
230
|
+
// Fast path: --byom or --tier flags
|
|
231
|
+
if (options.byom ?? options.tier) {
|
|
232
|
+
const existing = await loadAiConfig() ?? {};
|
|
233
|
+
let tier = options.tier ?? existing.tier ?? 'free';
|
|
234
|
+
let byomUrl;
|
|
235
|
+
if (options.byom) {
|
|
236
|
+
byomUrl = options.byom;
|
|
237
|
+
tier = 'byom';
|
|
238
|
+
const urlClass = classifyUrl(byomUrl);
|
|
239
|
+
if (urlClass === 'external' && !options.yes) {
|
|
240
|
+
const confirmed = await confirmExternalByom(rl, byomUrl);
|
|
241
|
+
if (!confirmed) {
|
|
242
|
+
console.log(chalk.yellow('Aborted — BYOM URL not saved.'));
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
await appendByomAudit('byom_config', byomUrl, urlClass === 'external' ? 'explicit' : 'implicit');
|
|
247
|
+
}
|
|
248
|
+
await saveAiConfig({ ...existing, tier, byomUrl, updatedAt: new Date().toISOString() });
|
|
249
|
+
console.log(chalk.green(`✅ Saved: tier=${tier}${byomUrl ? ` url=${byomUrl}` : ''}`));
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
// Interactive setup wizard
|
|
253
|
+
console.log('');
|
|
254
|
+
console.log(chalk.bold('🕷️ spidersan AI setup'));
|
|
255
|
+
console.log('');
|
|
256
|
+
console.log(chalk.dim('Detecting local LLM servers...'));
|
|
257
|
+
const probeResults = await probeLocalServers();
|
|
258
|
+
const localServers = probeResults.filter((r) => r.responding);
|
|
259
|
+
// Build menu
|
|
260
|
+
const menuItems = [];
|
|
261
|
+
if (localServers.length > 0) {
|
|
262
|
+
const s = localServers[0];
|
|
263
|
+
const modelHint = s.models?.[0] ? ` · ${s.models[0]}` : '';
|
|
264
|
+
menuItems.push({
|
|
265
|
+
label: `Local model (${s.label} at localhost:${s.port}${modelHint}) — already detected`,
|
|
266
|
+
tier: 'local',
|
|
267
|
+
byomUrl: s.url,
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
menuItems.push({
|
|
272
|
+
label: `Set up a local LLM server — see docs.spidersan.dev/local-setup`,
|
|
273
|
+
tier: 'local',
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
menuItems.push({ label: 'Hosted API — free tier, 50 calls/day (requires API key from spidersan.dev)', tier: 'free' });
|
|
277
|
+
menuItems.push({ label: 'Hosted API — Contributor tier (unlimited, share anonymized sessions)', tier: 'contributor' });
|
|
278
|
+
menuItems.push({ label: 'Custom URL (BYOM)', tier: 'byom' });
|
|
279
|
+
if (localServers.length > 0) {
|
|
280
|
+
localServers.forEach((s) => {
|
|
281
|
+
console.log(chalk.green(` ✓ Found: ${s.label} at localhost:${s.port}`));
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
console.log(chalk.dim(' No local servers detected'));
|
|
286
|
+
}
|
|
287
|
+
console.log('');
|
|
288
|
+
console.log('How would you like to use spidersan ask?');
|
|
289
|
+
console.log('');
|
|
290
|
+
menuItems.forEach((item, i) => {
|
|
291
|
+
console.log(` [${i + 1}] ${item.label}`);
|
|
292
|
+
});
|
|
293
|
+
console.log('');
|
|
294
|
+
const defaultChoice = '1';
|
|
295
|
+
const raw = await prompt(rl, `Choice [${defaultChoice}]: `);
|
|
296
|
+
const choice = parseInt(raw.trim() || defaultChoice, 10);
|
|
297
|
+
if (isNaN(choice) || choice < 1 || choice > menuItems.length) {
|
|
298
|
+
console.log(chalk.red('Invalid choice.'));
|
|
299
|
+
rl.close();
|
|
300
|
+
process.exit(1);
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
const selected = menuItems[choice - 1];
|
|
304
|
+
const finalConfig = {
|
|
305
|
+
tier: selected.tier,
|
|
306
|
+
byomUrl: selected.byomUrl,
|
|
307
|
+
consentGiven: false,
|
|
308
|
+
};
|
|
309
|
+
// BYOM: collect and validate URL
|
|
310
|
+
if (selected.tier === 'byom') {
|
|
311
|
+
const rawUrl = await prompt(rl, ' Custom LLM URL: ');
|
|
312
|
+
const trimmedUrl = rawUrl.trim();
|
|
313
|
+
if (!trimmedUrl) {
|
|
314
|
+
console.log(chalk.red('No URL provided.'));
|
|
315
|
+
process.exitCode = 1;
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
const urlClass = classifyUrl(trimmedUrl);
|
|
319
|
+
if (urlClass === 'external' && !options.yes) {
|
|
320
|
+
const confirmed = await confirmExternalByom(rl, trimmedUrl);
|
|
321
|
+
if (!confirmed) {
|
|
322
|
+
console.log(chalk.yellow('Aborted — BYOM URL not saved.'));
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
finalConfig.byomConfirmed = true;
|
|
326
|
+
}
|
|
327
|
+
finalConfig.byomUrl = trimmedUrl;
|
|
328
|
+
await appendByomAudit('byom_config', trimmedUrl, urlClass === 'external' ? 'explicit' : 'implicit');
|
|
329
|
+
}
|
|
330
|
+
// Local: save probed URL; show it works immediately
|
|
331
|
+
if (selected.tier === 'local' && selected.byomUrl) {
|
|
332
|
+
await appendByomAudit('local_probe', selected.byomUrl, 'implicit');
|
|
333
|
+
}
|
|
334
|
+
// Contributor tier: show what's shared
|
|
335
|
+
if (selected.tier === 'contributor') {
|
|
336
|
+
const tier = await runConsentWizard(rl);
|
|
337
|
+
if (tier === 'byom') {
|
|
338
|
+
// user bailed to BYOM during consent — redirect
|
|
339
|
+
console.log(chalk.dim(' Switching to BYOM setup. Run: spidersan ai-setup --byom <url>'));
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
finalConfig.tier = tier ?? 'free';
|
|
343
|
+
finalConfig.consentGiven = true;
|
|
344
|
+
}
|
|
345
|
+
// Hosted free or contributor: collect and validate API key
|
|
346
|
+
if (finalConfig.tier === 'free' || finalConfig.tier === 'contributor') {
|
|
347
|
+
const existing = await loadAiConfig();
|
|
348
|
+
const existingKey = existing?.apiKey ?? process.env['SPIDERSAN_API_KEY'];
|
|
349
|
+
if (existingKey) {
|
|
350
|
+
console.log(chalk.dim(' API key already configured — validating...'));
|
|
351
|
+
const probe = await probeHostedTier(existingKey);
|
|
352
|
+
if (probe.responding) {
|
|
353
|
+
console.log(chalk.green(' ✓ Hosted API reachable'));
|
|
354
|
+
const modelHint = probe.models?.[0] ? ` (${probe.models[0]})` : '';
|
|
355
|
+
console.log(chalk.dim(` ${probe.url}${modelHint}`));
|
|
356
|
+
finalConfig.apiKey = existingKey;
|
|
357
|
+
}
|
|
358
|
+
else {
|
|
359
|
+
console.log(chalk.yellow(' ⚠ Existing API key validation failed — enter a new key or press Enter to skip'));
|
|
360
|
+
const rawKey = await prompt(rl, ' API key (from spidersan.dev/keys): ');
|
|
361
|
+
const trimmedKey = rawKey.trim();
|
|
362
|
+
if (trimmedKey) {
|
|
363
|
+
finalConfig.apiKey = trimmedKey;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
else {
|
|
368
|
+
console.log('');
|
|
369
|
+
console.log(' Get a free API key at: https://spidersan.dev/keys');
|
|
370
|
+
console.log('');
|
|
371
|
+
const rawKey = await prompt(rl, ' API key (press Enter to skip for now): ');
|
|
372
|
+
const trimmedKey = rawKey.trim();
|
|
373
|
+
if (trimmedKey) {
|
|
374
|
+
console.log(chalk.dim(' Validating...'));
|
|
375
|
+
const probe = await probeHostedTier(trimmedKey);
|
|
376
|
+
if (probe.responding) {
|
|
377
|
+
const modelHint = probe.models?.[0] ? ` · model: ${probe.models[0]}` : '';
|
|
378
|
+
console.log(chalk.green(` ✓ Hosted API reachable${modelHint}`));
|
|
379
|
+
finalConfig.apiKey = trimmedKey;
|
|
380
|
+
}
|
|
381
|
+
else {
|
|
382
|
+
console.log(chalk.yellow(' ⚠ Could not validate key (API unreachable or key invalid) — saved anyway'));
|
|
383
|
+
finalConfig.apiKey = trimmedKey;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
console.log(chalk.dim(' Skipped — you can add it later with: spidersan ai-setup --tier free'));
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
finalConfig.consentGiven = finalConfig.tier === 'contributor' ? true : false;
|
|
391
|
+
}
|
|
392
|
+
// Hosted free: show consent wizard first time (override consentGiven set above)
|
|
393
|
+
if (selected.tier === 'free') {
|
|
394
|
+
finalConfig.consentGiven = false; // will prompt on first `ask` invocation
|
|
395
|
+
}
|
|
396
|
+
await saveAiConfig(finalConfig);
|
|
397
|
+
console.log('');
|
|
398
|
+
console.log(chalk.green('✅ Configuration saved to ~/.spidersan/config.json'));
|
|
399
|
+
console.log('');
|
|
400
|
+
if (finalConfig.tier === 'local' && finalConfig.byomUrl) {
|
|
401
|
+
console.log(` Using: ${finalConfig.byomUrl}`);
|
|
402
|
+
console.log(` Try it: ${chalk.bold('spidersan ask "what branches are ready to merge?"')}`);
|
|
403
|
+
}
|
|
404
|
+
else if (finalConfig.tier === 'contributor') {
|
|
405
|
+
console.log(' Tier: Contributor (unlimited API calls)');
|
|
406
|
+
console.log(' Preview what you share: spidersan ai preview');
|
|
407
|
+
console.log(` Try it: ${chalk.bold('spidersan ask "what branches are ready to merge?"')}`);
|
|
408
|
+
}
|
|
409
|
+
else if (finalConfig.tier === 'free') {
|
|
410
|
+
console.log(' Tier: Free (50 calls/day)');
|
|
411
|
+
console.log(' Upgrade anytime: spidersan ai-setup --tier contributor');
|
|
412
|
+
console.log(` Try it: ${chalk.bold('spidersan ask "what branches are ready to merge?"')}`);
|
|
413
|
+
}
|
|
414
|
+
else if (finalConfig.tier === 'byom') {
|
|
415
|
+
console.log(` Using: ${finalConfig.byomUrl}`);
|
|
416
|
+
console.log(` Try it: ${chalk.bold('spidersan ask "what branches are ready to merge?"')}`);
|
|
417
|
+
}
|
|
418
|
+
console.log('');
|
|
419
|
+
}
|
|
420
|
+
finally {
|
|
421
|
+
rl.close();
|
|
422
|
+
}
|
|
423
|
+
});
|
|
424
|
+
// ─── spidersan ai telemetry ──────────────────────────────────
|
|
425
|
+
export const aiTelemetryCommand = new Command('ai-telemetry')
|
|
426
|
+
.description('View or change your spidersan AI tier (free/contributor/byom/local)')
|
|
427
|
+
.argument('[setting]', 'on | off | contributor | free | byom | local | status')
|
|
428
|
+
.action(async (setting) => {
|
|
429
|
+
const config = await loadAiConfig();
|
|
430
|
+
if (!setting || setting === 'status') {
|
|
431
|
+
if (!config) {
|
|
432
|
+
console.log(chalk.dim('No AI config found. Run: spidersan ai-setup'));
|
|
433
|
+
return;
|
|
434
|
+
}
|
|
435
|
+
console.log('');
|
|
436
|
+
console.log(` Tier: ${chalk.bold(config.tier)}`);
|
|
437
|
+
if (config.byomUrl)
|
|
438
|
+
console.log(` BYOM: ${config.byomUrl}`);
|
|
439
|
+
if (config.updatedAt)
|
|
440
|
+
console.log(` Updated: ${config.updatedAt}`);
|
|
441
|
+
console.log('');
|
|
442
|
+
return;
|
|
443
|
+
}
|
|
444
|
+
const existing = config ?? {};
|
|
445
|
+
let newTier;
|
|
446
|
+
if (setting === 'on' || setting === 'contributor')
|
|
447
|
+
newTier = 'contributor';
|
|
448
|
+
else if (setting === 'off' || setting === 'free')
|
|
449
|
+
newTier = 'free';
|
|
450
|
+
else if (setting === 'byom')
|
|
451
|
+
newTier = 'byom';
|
|
452
|
+
else if (setting === 'local')
|
|
453
|
+
newTier = 'local';
|
|
454
|
+
else {
|
|
455
|
+
console.log(chalk.red(`Unknown setting: ${setting}. Use: on | off | contributor | free | byom | local`));
|
|
456
|
+
process.exit(1);
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
await saveAiConfig({ ...existing, tier: newTier });
|
|
460
|
+
console.log(chalk.green(`✅ Tier set to: ${newTier}`));
|
|
461
|
+
});
|
|
462
|
+
// ─── spidersan check-opt-out ─────────────────────────────────
|
|
463
|
+
// Used by archaeology pipeline to check repo opt-out status before mining
|
|
464
|
+
export const checkOptOutCommand = new Command('check-opt-out')
|
|
465
|
+
.description('Check if a repository is in the archaeology opt-out registry')
|
|
466
|
+
.argument('<repo>', 'Repository URL or owner/name (e.g. github.com/owner/repo)')
|
|
467
|
+
.option('--registry <url>', 'Registry URL', 'https://spidersan.dev/archaeology-opt-out')
|
|
468
|
+
.option('--json', 'Output JSON')
|
|
469
|
+
.action(async (repo, options) => {
|
|
470
|
+
const query = repo.startsWith('http') ? repo : `https://github.com/${repo}`;
|
|
471
|
+
const url = `${options.registry}?repo=${encodeURIComponent(query)}`;
|
|
472
|
+
try {
|
|
473
|
+
const controller = new AbortController();
|
|
474
|
+
const timer = setTimeout(() => controller.abort(), 5000);
|
|
475
|
+
const res = await fetch(url, { signal: controller.signal });
|
|
476
|
+
clearTimeout(timer);
|
|
477
|
+
if (!res.ok)
|
|
478
|
+
throw new Error(`Registry returned ${res.status}`);
|
|
479
|
+
const data = await res.json();
|
|
480
|
+
if (options.json) {
|
|
481
|
+
console.log(JSON.stringify(data));
|
|
482
|
+
return;
|
|
483
|
+
}
|
|
484
|
+
if (data.opted_out) {
|
|
485
|
+
console.log(chalk.yellow(`⚠ ${repo} is opted out (since ${data.added_at ?? 'unknown'})`));
|
|
486
|
+
process.exitCode = 1; // non-zero so pipeline scripts can detect
|
|
487
|
+
}
|
|
488
|
+
else {
|
|
489
|
+
console.log(chalk.green(`✓ ${repo} is not opted out — clear for archaeology`));
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
catch (err) {
|
|
493
|
+
console.error(chalk.red(`❌ Registry check failed: ${err.message}`));
|
|
494
|
+
console.error(chalk.dim(' Defaulting to: NOT opted out (registry unreachable)'));
|
|
495
|
+
// Fail open — registry being down should not block archaeology
|
|
496
|
+
}
|
|
497
|
+
});
|
|
498
|
+
//# sourceMappingURL=ai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/commands/ai.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAEhE,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAErE,SAAS,WAAW,CAAC,MAAuB;IAC1C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,IAAI,MAAM,CAAC,eAAe,GAAG,GAAG,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,eAAe,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC;QAC/H,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,mFAAmF;QACnF,4CAA4C;QAC5C,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACpH,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,qDAAqD,YAAY,EAAE,CAAC,CAAC,CAAC;QAC/F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,UAAU,yBAAyB,MAAM,CAAC,UAAU,KAAK,CAAC,MAAM,CAAC,eAAe,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACrL,CAAC;AAED,+DAA+D;AAE/D,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KACzC,WAAW,CAAC,mDAAmD,CAAC;KAChE,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;KAC1C,MAAM,CAAC,uBAAuB,EAAE,kDAAkD,CAAC;KACnF,MAAM,CAAC,WAAW,EAAE,iCAAiC,CAAC;KACtD,MAAM,CAAC,KAAK,EAAE,aAAuB,EAAE,OAAiD,EAAE,EAAE;IAC3F,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAEpD,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC;YAC7B,eAAe,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;YACxC,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,QAAQ;YAAE,MAAM,qBAAqB,CAAC,EAAE,CAAC,CAAC;QAEvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,MAAM,CACzB,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,EACjE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAuB,EAAE,CAAC,CAAC,CAAC,SAAS,CAC7E,CAAC;QAEF,WAAW,CAAC,MAAM,CAAC,CAAC;QACpB,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChE,MAAM,aAAa,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,+DAA+D;AAE/D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,6DAA6D,CAAC;KAC1E,MAAM,CAAC,uBAAuB,EAAE,kDAAkD,CAAC;KACnF,MAAM,CAAC,WAAW,EAAE,iCAAiC,CAAC;KACtD,MAAM,CAAC,KAAK,EAAE,OAAiD,EAAE,EAAE;IAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAEpD,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC;YAC7B,eAAe,EAAE,IAAI;YACrB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,QAAQ;YAAE,MAAM,qBAAqB,CAAC,EAAE,CAAC,CAAC;QAEvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,MAAM,CACzB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,EAC1D,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAuB,EAAE,CAAC,CAAC,CAAC,SAAS,CAC7E,CAAC;QAEF,WAAW,CAAC,MAAM,CAAC,CAAC;QACpB,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QACrD,MAAM,aAAa,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,+DAA+D;AAE/D,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;KACjD,WAAW,CAAC,2DAA2D,CAAC;KACxE,QAAQ,CAAC,UAAU,EAAE,wBAAwB,CAAC;KAC9C,MAAM,CAAC,uBAAuB,EAAE,kDAAkD,CAAC;KACnF,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,OAA8B,EAAE,EAAE;IAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,MAAM,KAAK,CAAC,CAAC,CAAC;IAE1D,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,MAAM,CACzB,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,EACzC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAuB,EAAE,CAAC,CAAC,CAAC,SAAS,CAC7E,CAAC;QAEF,WAAW,CAAC,MAAM,CAAC,CAAC;QACpB,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAClE,MAAM,aAAa,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,8DAA8D;AAE9D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;KAChD,WAAW,CAAC,6CAA6C,CAAC;KAC1D,MAAM,CAAC,uBAAuB,EAAE,4DAA4D,CAAC;KAC7F,MAAM,CAAC,KAAK,EAAE,OAA8B,EAAE,EAAE;IAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAE9C,MAAM,MAAM,GAAG,MAAM,IAAI,CACvB,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAuB,EAAE,CAAC,CAAC,CAAC,SAAS,CAC7E,CAAC;IAEF,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK,MAAM,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;IAC3F,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,gEAAgE;AAChE,6EAA6E;AAC7E,4EAA4E;AAC5E,yEAAyE;AAEzE,KAAK,UAAU,qBAAqB,CAAC,EAAsC;IACzE,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;IACpC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,YAAY;QAAE,OAAO;IAC3C,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa;QAAE,OAAO;IAEpE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,eAAe,mBAAmB,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;IACxG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,GAAG,EAAE,EAAE;YAC7E,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;gBACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,qDAAqD,CAAC,CAAC,CAAC;gBACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC,CAAC;IACN,CAAC;IAED,MAAM,YAAY,CAAC,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,+DAA+D;AAE/D,SAAS,MAAM,CAAC,EAAsC,EAAE,QAAgB;IACtE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,EAAsC,EAAE,GAAW;IACpF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,oDAAoD,CAAC,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,6CAA6C;IAC7C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;QAC9D,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,EAAE,EAAE,qBAAqB,CAAC,CAAC;IACvD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC;AAC7C,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,EAAsC;IACpE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAClD,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC;IAC9C,IAAI,EAAE,KAAK,GAAG;QAAE,OAAO,aAAa,CAAC;IACrC,IAAI,EAAE,KAAK,GAAG;QAAE,OAAO,MAAM,CAAC;IAC9B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,gEAAgE;AAEhE,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;KAClD,WAAW,CAAC,+DAA+D,CAAC;KAC5E,MAAM,CAAC,cAAc,EAAE,kDAAkD,CAAC;KAC1E,MAAM,CAAC,eAAe,EAAE,sDAAsD,CAAC;KAC/E,MAAM,CAAC,OAAO,EAAE,+CAA+C,CAAC;KAChE,MAAM,CAAC,KAAK,EAAE,OAAwD,EAAE,EAAE;IACzE,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE7E,IAAI,CAAC;QACH,oCAAoC;QACpC,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,IAAI,EAA4B,CAAC;YACtE,IAAI,IAAI,GAAI,OAAO,CAAC,IAA2B,IAAI,QAAQ,CAAC,IAAI,IAAI,MAAM,CAAC;YAC3E,IAAI,OAA2B,CAAC;YAEhC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;gBACvB,IAAI,GAAG,MAAM,CAAC;gBACd,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;gBACtC,IAAI,QAAQ,KAAK,UAAU,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;oBAC5C,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;oBACzD,IAAI,CAAC,SAAS,EAAE,CAAC;wBACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC,CAAC;wBAC3D,OAAO;oBACT,CAAC;gBACH,CAAC;gBACD,MAAM,eAAe,CAAC,aAAa,EAAE,OAAO,EAAE,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YACnG,CAAC;YAED,MAAM,YAAY,CAAC,EAAE,GAAG,QAAyB,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YACzG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACrF,OAAO;QACT,CAAC;QAED,2BAA2B;QAC3B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAEzD,MAAM,YAAY,GAAG,MAAM,iBAAiB,EAAE,CAAC;QAC/C,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAE9D,aAAa;QACb,MAAM,SAAS,GAA6D,EAAE,CAAC;QAE/E,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,SAAS,CAAC,IAAI,CAAC;gBACb,KAAK,EAAE,gBAAgB,CAAC,CAAC,KAAK,iBAAiB,CAAC,CAAC,IAAI,GAAG,SAAS,sBAAsB;gBACvF,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,CAAC,CAAC,GAAG;aACf,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,IAAI,CAAC;gBACb,KAAK,EAAE,gEAAgE;gBACvE,IAAI,EAAE,OAAO;aACd,CAAC,CAAC;QACL,CAAC;QAED,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,4EAA4E,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACtH,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,sEAAsE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;QACvH,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAE7D,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,KAAK,iBAAiB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC3E,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACxD,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YAC5B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,MAAM,aAAa,GAAG,GAAG,CAAC;QAC1B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,EAAE,WAAW,aAAa,KAAK,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,aAAa,EAAE,EAAE,CAAC,CAAC;QAEzD,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC1C,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;QACxC,MAAM,WAAW,GAAkB;YACjC,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,YAAY,EAAE,KAAK;SACpB,CAAC;QAEF,iCAAiC;QACjC,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,EAAE,EAAE,oBAAoB,CAAC,CAAC;YACtD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBAC3C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;YACzC,IAAI,QAAQ,KAAK,UAAU,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;gBAC5C,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;gBAC5D,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC,CAAC;oBAC3D,OAAO;gBACT,CAAC;gBACD,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC;YACnC,CAAC;YACD,WAAW,CAAC,OAAO,GAAG,UAAU,CAAC;YACjC,MAAM,eAAe,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACtG,CAAC;QAED,oDAAoD;QACpD,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YAClD,MAAM,eAAe,CAAC,aAAa,EAAE,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACrE,CAAC;QAED,uCAAuC;QACvC,IAAI,QAAQ,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,EAAE,CAAC,CAAC;YACxC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpB,gDAAgD;gBAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC,CAAC;gBAC1F,OAAO;YACT,CAAC;YACD,WAAW,CAAC,IAAI,GAAG,IAAI,IAAI,MAAM,CAAC;YAClC,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC;QAClC,CAAC;QAED,2DAA2D;QAC3D,IAAI,WAAW,CAAC,IAAI,KAAK,MAAM,IAAI,WAAW,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACtE,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;YACtC,MAAM,WAAW,GAAG,QAAQ,EAAE,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;YAEzE,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAC;gBACvE,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;gBACjD,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;oBACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;oBACrD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,GAAG,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC;oBACvD,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC;gBACnC,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kFAAkF,CAAC,CAAC,CAAC;oBAC9G,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,EAAE,EAAE,uCAAuC,CAAC,CAAC;oBACzE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;oBACjC,IAAI,UAAU,EAAE,CAAC;wBACf,WAAW,CAAC,MAAM,GAAG,UAAU,CAAC;oBAClC,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;gBACnE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,EAAE,EAAE,2CAA2C,CAAC,CAAC;gBAC7E,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjC,IAAI,UAAU,EAAE,CAAC;oBACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;oBAC1C,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;oBAChD,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;wBACrB,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC1E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC,CAAC;wBACjE,WAAW,CAAC,MAAM,GAAG,UAAU,CAAC;oBAClC,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,6EAA6E,CAAC,CAAC,CAAC;wBACzG,WAAW,CAAC,MAAM,GAAG,UAAU,CAAC;oBAClC,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC,CAAC;gBAClG,CAAC;YACH,CAAC;YACD,WAAW,CAAC,YAAY,GAAG,WAAW,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QAC/E,CAAC;QAED,gFAAgF;QAChF,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC7B,WAAW,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,wCAAwC;QAC5E,CAAC;QAED,MAAM,YAAY,CAAC,WAAW,CAAC,CAAC;QAEhC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,IAAI,WAAW,CAAC,IAAI,KAAK,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,aAAa,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,EAAE,CAAC,CAAC;QAC/F,CAAC;aAAM,IAAI,WAAW,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,EAAE,CAAC,CAAC;QAC/F,CAAC;aAAM,IAAI,WAAW,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,EAAE,CAAC,CAAC;QAC/F,CAAC;aAAM,IAAI,WAAW,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,aAAa,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,EAAE,CAAC,CAAC;QAC/F,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,gEAAgE;AAEhE,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,OAAO,CAAC,cAAc,CAAC;KAC1D,WAAW,CAAC,qEAAqE,CAAC;KAClF,QAAQ,CAAC,WAAW,EAAE,uDAAuD,CAAC;KAC9E,MAAM,CAAC,KAAK,EAAE,OAA2B,EAAE,EAAE;IAC5C,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;IAEpC,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC,CAAC;YACtE,OAAO;QACT,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrD,IAAI,MAAM,CAAC,OAAO;YAAE,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAChE,IAAI,MAAM,CAAC,SAAS;YAAE,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,IAAI,EAA4B,CAAC;IACxD,IAAI,OAAe,CAAC;IAEpB,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,aAAa;QAAE,OAAO,GAAG,aAAa,CAAC;SACtE,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,MAAM;QAAE,OAAO,GAAG,MAAM,CAAC;SAC9D,IAAI,OAAO,KAAK,MAAM;QAAE,OAAO,GAAG,MAAM,CAAC;SACzC,IAAI,OAAO,KAAK,OAAO;QAAE,OAAO,GAAG,OAAO,CAAC;SAC3C,CAAC;QACJ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,OAAO,qDAAqD,CAAC,CAAC,CAAC;QACzG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IAED,MAAM,YAAY,CAAC,EAAE,GAAG,QAAyB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,OAAO,EAAE,CAAC,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC;AAGL,gEAAgE;AAChE,0EAA0E;AAE1E,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,OAAO,CAAC,eAAe,CAAC;KAC3D,WAAW,CAAC,8DAA8D,CAAC;KAC3E,QAAQ,CAAC,QAAQ,EAAE,2DAA2D,CAAC;KAC/E,MAAM,CAAC,kBAAkB,EAAE,cAAc,EAAE,2CAA2C,CAAC;KACvF,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;KAC/B,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAA6C,EAAE,EAAE;IAC5E,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,sBAAsB,IAAI,EAAE,CAAC;IAC5E,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,QAAQ,SAAS,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;IAEpE,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;QACzD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,YAAY,CAAC,KAAK,CAAC,CAAC;QAEpB,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAmE,CAAC;QAE/F,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,wBAAwB,IAAI,CAAC,QAAQ,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;YAC3F,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,0CAA0C;QAClE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,2CAA2C,CAAC,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA6B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC/E,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC,CAAC;QACnF,+DAA+D;IACjE,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -1 +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;
|
|
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;AAyEpC,eAAO,MAAM,WAAW,SAC6B,CAAC"}
|
package/dist/commands/auto.js
CHANGED
|
@@ -8,6 +8,7 @@ import { execFileSync, spawn } from 'child_process';
|
|
|
8
8
|
import { existsSync, readFileSync, writeFileSync, mkdirSync, rmSync } from 'fs';
|
|
9
9
|
import { join } from 'path';
|
|
10
10
|
import { loadConfig } from '../lib/config.js';
|
|
11
|
+
import { getCLIPath } from '../lib/security.js';
|
|
11
12
|
function getRepoRoot() {
|
|
12
13
|
try {
|
|
13
14
|
return execFileSync('git', ['rev-parse', '--show-toplevel'], { encoding: 'utf-8' }).trim();
|
|
@@ -105,7 +106,7 @@ autoCommand
|
|
|
105
106
|
const hubSync = Boolean(options.hubSync || autoConfig.hubSync);
|
|
106
107
|
const quiet = Boolean(options.quiet || autoConfig.quiet);
|
|
107
108
|
const legacy = Boolean(options.legacy || autoConfig.legacy);
|
|
108
|
-
const script =
|
|
109
|
+
const script = getCLIPath();
|
|
109
110
|
if (!script) {
|
|
110
111
|
console.error('❌ Could not resolve CLI script path.');
|
|
111
112
|
process.exit(1);
|
|
@@ -1 +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,YAAY,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACpD,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;
|
|
1
|
+
{"version":3,"file":"auto.js","sourceRoot":"","sources":["../../src/commands/auto.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spidersan bot — Message-driven git operations daemon via smalltoak.
|
|
3
|
+
*
|
|
4
|
+
* Polls smalltoak for /commands, executes git actions, replies with results.
|
|
5
|
+
* Requires envoak vault injection (GIT_BOT_ENABLED=true).
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* envoak vault inject --key ... -- spidersan bot
|
|
9
|
+
* spidersan bot --once
|
|
10
|
+
* spidersan bot add <name> --path <path> --branch <branch> --push <files>
|
|
11
|
+
* spidersan bot remove <name>
|
|
12
|
+
* spidersan bot repos
|
|
13
|
+
*/
|
|
14
|
+
import { Command } from 'commander';
|
|
15
|
+
export declare const botCommand: Command;
|
|
16
|
+
//# sourceMappingURL=bot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../../src/commands/bot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgQpC,eAAO,MAAM,UAAU,SA4GnB,CAAC"}
|