skrypt-ai 0.4.2 → 0.6.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.
Files changed (159) hide show
  1. package/dist/auth/index.d.ts +13 -3
  2. package/dist/auth/index.js +101 -9
  3. package/dist/auth/keychain.d.ts +5 -0
  4. package/dist/auth/keychain.js +82 -0
  5. package/dist/auth/notices.d.ts +3 -0
  6. package/dist/auth/notices.js +42 -0
  7. package/dist/autofix/index.d.ts +0 -4
  8. package/dist/autofix/index.js +10 -24
  9. package/dist/capture/browser.d.ts +11 -0
  10. package/dist/capture/browser.js +173 -0
  11. package/dist/capture/diff.d.ts +23 -0
  12. package/dist/capture/diff.js +52 -0
  13. package/dist/capture/index.d.ts +23 -0
  14. package/dist/capture/index.js +210 -0
  15. package/dist/capture/naming.d.ts +17 -0
  16. package/dist/capture/naming.js +45 -0
  17. package/dist/capture/parser.d.ts +15 -0
  18. package/dist/capture/parser.js +80 -0
  19. package/dist/capture/types.d.ts +57 -0
  20. package/dist/capture/types.js +1 -0
  21. package/dist/cli.js +20 -3
  22. package/dist/commands/autofix.js +136 -120
  23. package/dist/commands/cron.js +58 -47
  24. package/dist/commands/deploy.js +123 -102
  25. package/dist/commands/generate.js +125 -7
  26. package/dist/commands/heal.d.ts +10 -0
  27. package/dist/commands/heal.js +201 -0
  28. package/dist/commands/i18n.js +146 -111
  29. package/dist/commands/import.d.ts +2 -0
  30. package/dist/commands/import.js +157 -0
  31. package/dist/commands/init.js +19 -7
  32. package/dist/commands/lint.js +50 -44
  33. package/dist/commands/llms-txt.js +59 -49
  34. package/dist/commands/login.js +63 -34
  35. package/dist/commands/mcp.js +6 -0
  36. package/dist/commands/monitor.js +13 -8
  37. package/dist/commands/qa.d.ts +2 -0
  38. package/dist/commands/qa.js +43 -0
  39. package/dist/commands/review-pr.js +108 -92
  40. package/dist/commands/sdk.js +128 -122
  41. package/dist/commands/security.d.ts +2 -0
  42. package/dist/commands/security.js +109 -0
  43. package/dist/commands/test.js +91 -92
  44. package/dist/commands/version.js +104 -75
  45. package/dist/commands/watch.js +130 -114
  46. package/dist/config/types.js +2 -2
  47. package/dist/context-hub/index.d.ts +23 -0
  48. package/dist/context-hub/index.js +179 -0
  49. package/dist/context-hub/mappings.d.ts +8 -0
  50. package/dist/context-hub/mappings.js +55 -0
  51. package/dist/context-hub/types.d.ts +33 -0
  52. package/dist/context-hub/types.js +1 -0
  53. package/dist/generator/generator.js +39 -6
  54. package/dist/generator/types.d.ts +7 -0
  55. package/dist/generator/writer.d.ts +3 -1
  56. package/dist/generator/writer.js +36 -7
  57. package/dist/importers/confluence.d.ts +5 -0
  58. package/dist/importers/confluence.js +137 -0
  59. package/dist/importers/detect.d.ts +20 -0
  60. package/dist/importers/detect.js +121 -0
  61. package/dist/importers/docusaurus.d.ts +5 -0
  62. package/dist/importers/docusaurus.js +279 -0
  63. package/dist/importers/gitbook.d.ts +5 -0
  64. package/dist/importers/gitbook.js +189 -0
  65. package/dist/importers/github.d.ts +8 -0
  66. package/dist/importers/github.js +99 -0
  67. package/dist/importers/index.d.ts +15 -0
  68. package/dist/importers/index.js +30 -0
  69. package/dist/importers/markdown.d.ts +6 -0
  70. package/dist/importers/markdown.js +105 -0
  71. package/dist/importers/mintlify.d.ts +5 -0
  72. package/dist/importers/mintlify.js +172 -0
  73. package/dist/importers/notion.d.ts +5 -0
  74. package/dist/importers/notion.js +174 -0
  75. package/dist/importers/readme.d.ts +5 -0
  76. package/dist/importers/readme.js +184 -0
  77. package/dist/importers/transform.d.ts +90 -0
  78. package/dist/importers/transform.js +457 -0
  79. package/dist/importers/types.d.ts +37 -0
  80. package/dist/importers/types.js +1 -0
  81. package/dist/llm/anthropic-client.d.ts +1 -0
  82. package/dist/llm/anthropic-client.js +3 -1
  83. package/dist/llm/index.d.ts +6 -4
  84. package/dist/llm/index.js +76 -261
  85. package/dist/llm/openai-client.d.ts +1 -0
  86. package/dist/llm/openai-client.js +7 -2
  87. package/dist/plugins/index.js +7 -0
  88. package/dist/qa/checks.d.ts +10 -0
  89. package/dist/qa/checks.js +492 -0
  90. package/dist/qa/fixes.d.ts +30 -0
  91. package/dist/qa/fixes.js +277 -0
  92. package/dist/qa/index.d.ts +29 -0
  93. package/dist/qa/index.js +187 -0
  94. package/dist/qa/types.d.ts +24 -0
  95. package/dist/qa/types.js +1 -0
  96. package/dist/scanner/csharp.d.ts +23 -0
  97. package/dist/scanner/csharp.js +421 -0
  98. package/dist/scanner/index.js +53 -26
  99. package/dist/scanner/java.d.ts +39 -0
  100. package/dist/scanner/java.js +318 -0
  101. package/dist/scanner/kotlin.d.ts +23 -0
  102. package/dist/scanner/kotlin.js +389 -0
  103. package/dist/scanner/php.d.ts +57 -0
  104. package/dist/scanner/php.js +351 -0
  105. package/dist/scanner/python.js +17 -0
  106. package/dist/scanner/ruby.d.ts +36 -0
  107. package/dist/scanner/ruby.js +431 -0
  108. package/dist/scanner/swift.d.ts +25 -0
  109. package/dist/scanner/swift.js +392 -0
  110. package/dist/scanner/types.d.ts +1 -1
  111. package/dist/template/content/docs/_navigation.json +46 -0
  112. package/dist/template/content/docs/_sidebars.json +684 -0
  113. package/dist/template/content/docs/core.md +4544 -0
  114. package/dist/template/content/docs/index.mdx +89 -0
  115. package/dist/template/content/docs/integrations.md +1158 -0
  116. package/dist/template/content/docs/llms-full.md +403 -0
  117. package/dist/template/content/docs/llms.txt +4588 -0
  118. package/dist/template/content/docs/other.md +10379 -0
  119. package/dist/template/content/docs/tools.md +746 -0
  120. package/dist/template/content/docs/types.md +531 -0
  121. package/dist/template/docs.json +13 -11
  122. package/dist/template/mdx-components.tsx +27 -2
  123. package/dist/template/package.json +6 -0
  124. package/dist/template/public/search-index.json +1 -1
  125. package/dist/template/scripts/build-search-index.mjs +149 -13
  126. package/dist/template/src/app/api/chat/route.ts +83 -128
  127. package/dist/template/src/app/docs/[...slug]/page.tsx +75 -20
  128. package/dist/template/src/app/docs/llms-full.md +151 -4
  129. package/dist/template/src/app/docs/llms.txt +2464 -847
  130. package/dist/template/src/app/docs/page.mdx +48 -38
  131. package/dist/template/src/app/layout.tsx +3 -1
  132. package/dist/template/src/app/page.tsx +22 -8
  133. package/dist/template/src/components/ai-chat.tsx +73 -64
  134. package/dist/template/src/components/breadcrumbs.tsx +21 -23
  135. package/dist/template/src/components/copy-button.tsx +13 -9
  136. package/dist/template/src/components/copy-page-button.tsx +54 -0
  137. package/dist/template/src/components/docs-layout.tsx +37 -25
  138. package/dist/template/src/components/header.tsx +51 -10
  139. package/dist/template/src/components/mdx/card.tsx +17 -3
  140. package/dist/template/src/components/mdx/code-block.tsx +13 -9
  141. package/dist/template/src/components/mdx/code-group.tsx +13 -8
  142. package/dist/template/src/components/mdx/heading.tsx +15 -2
  143. package/dist/template/src/components/mdx/highlighted-code.tsx +13 -8
  144. package/dist/template/src/components/mdx/index.tsx +2 -0
  145. package/dist/template/src/components/mdx/mermaid.tsx +110 -0
  146. package/dist/template/src/components/mdx/screenshot.tsx +150 -0
  147. package/dist/template/src/components/scroll-to-hash.tsx +48 -0
  148. package/dist/template/src/components/sidebar.tsx +12 -18
  149. package/dist/template/src/components/table-of-contents.tsx +9 -0
  150. package/dist/template/src/lib/highlight.ts +3 -88
  151. package/dist/template/src/lib/navigation.ts +159 -0
  152. package/dist/template/src/lib/search-types.ts +4 -1
  153. package/dist/template/src/lib/search.ts +30 -7
  154. package/dist/template/src/styles/globals.css +17 -6
  155. package/dist/utils/files.d.ts +9 -1
  156. package/dist/utils/files.js +59 -10
  157. package/dist/utils/validation.d.ts +0 -3
  158. package/dist/utils/validation.js +0 -26
  159. package/package.json +5 -1
@@ -0,0 +1,403 @@
1
+ # Skrypt API
2
+
3
+ > API documentation for Skrypt
4
+
5
+ ## getAuthConfig
6
+ function getAuthConfig(): AuthConfig
7
+
8
+ ## getAuthConfigAsync
9
+ async function getAuthConfigAsync(): Promise<AuthConfig>
10
+
11
+ ## saveAuthConfig
12
+ async function saveAuthConfig(config: AuthConfig): Promise<void>
13
+
14
+ ## clearAuth
15
+ async function clearAuth(): Promise<void>
16
+
17
+ ## getKeyStorageMethod
18
+ async function getKeyStorageMethod(): Promise<'keychain' | 'file' | 'env' | 'none'>
19
+
20
+ ## checkPlan
21
+ async function checkPlan(apiKey: string): Promise<PlanCheckResponse>
22
+
23
+ ## requirePro
24
+ async function requirePro(commandName: string): Promise<boolean>
25
+
26
+ ## keychainAvailable
27
+ async function keychainAvailable(): Promise<boolean>
28
+
29
+ ## keychainStore
30
+ async function keychainStore(key: string): Promise<boolean>
31
+
32
+ ## keychainRetrieve
33
+ async function keychainRetrieve(): Promise<string | null>
34
+
35
+ ## keychainDelete
36
+ async function keychainDelete(): Promise<boolean>
37
+
38
+ ## getKeychainPlatformName
39
+ function getKeychainPlatformName(): string
40
+
41
+ ## hasSeenNotice
42
+ function hasSeenNotice(id: string): boolean
43
+
44
+ ## markNoticeSeen
45
+ function markNoticeSeen(id: string): void
46
+
47
+ ## showSecurityNotice
48
+ function showSecurityNotice(): void
49
+
50
+ ## autoFixExample
51
+ async function autoFixExample(example: CodeExample, client: LLMClient, options: AutoFixOptions = {}): Promise<FixResult>
52
+
53
+ ## autoFixBatch
54
+ async function autoFixBatch(examples: CodeExample[], client: LLMClient, options: AutoFixOptions = {}): Promise<Map<number, FixResult>>
55
+
56
+ ## createTypeScriptValidator
57
+ function createTypeScriptValidator(): (code: string) => Promise<ValidationResult>
58
+
59
+ ## createPythonValidator
60
+ function createPythonValidator(): (code: string) => Promise<ValidationResult>
61
+
62
+ ## findConfigFile
63
+ function findConfigFile(dir: string): string | null
64
+
65
+ ## loadConfig
66
+ function loadConfig(configPath?: string): Config
67
+
68
+ ## validateConfig
69
+ function validateConfig(config: Config): string[]
70
+
71
+ ## checkApiKey
72
+ function checkApiKey(provider: LLMProvider): { ok: boolean; envKey: string | null }
73
+
74
+ ## generateForElement
75
+ async function generateForElement(element: APIElement, client: LLMClient, options: GenerationOptions, onProgress?: (progress: GenerationProgress) => void): Promise<GeneratedDoc>
76
+
77
+ ## generateForElements
78
+ async function generateForElements(elements: APIElement[], client: LLMClient, options: GenerationOptions): Promise<GeneratedDoc[]>
79
+
80
+ ## formatAsMarkdown
81
+ function formatAsMarkdown(docs: GeneratedDoc[], title: string): string
82
+
83
+ ## organizeByTopic
84
+ function organizeByTopic(docs: GeneratedDoc[], config: TopicConfig = DEFAULT_TOPIC_CONFIG): Topic[]
85
+
86
+ ## detectCrossReferences
87
+ function detectCrossReferences(docs: GeneratedDoc[]): CrossReference[]
88
+
89
+ ## getCrossRefsForElement
90
+ function getCrossRefsForElement(elementName: string, allRefs: CrossReference[]): CrossReference[]
91
+
92
+ ## buildNavigation
93
+ function buildNavigation(topics: Topic[]): NavigationItem[]
94
+
95
+ ## generateSidebarConfig
96
+ function generateSidebarConfig(topics: Topic[]): object
97
+
98
+ ## mergeTopicConfig
99
+ function mergeTopicConfig(userConfig: Partial<TopicConfig>, defaults: TopicConfig = DEFAULT_TOPIC_CONFIG): TopicConfig
100
+
101
+ ## writeLlmsTxt
102
+ async function writeLlmsTxt(docs: GeneratedDoc[], outputDir: string, options: { projectName?: string; description?: string } = {}): Promise<void>
103
+
104
+ ## writeDocsToDirectory
105
+ async function writeDocsToDirectory(results: FileGenerationResult[], outputDir: string, sourceDir: string): Promise<{ filesWritten: number; totalDocs: number }>
106
+
107
+ ## groupDocsByFile
108
+ function groupDocsByFile(docs: GeneratedDoc[]): FileGenerationResult[]
109
+
110
+ ## writeDocsByTopic
111
+ async function writeDocsByTopic(docs: GeneratedDoc[], outputDir: string): Promise<{ filesWritten: number; totalDocs: number; topics: Topic[] }>
112
+
113
+ ## postPRComment
114
+ async function postPRComment(config: PRCommentConfig, issues: DocumentationIssue[]): Promise<CommentResult>
115
+
116
+ ## postInlineComments
117
+ async function postInlineComments(config: PRCommentConfig, issues: DocumentationIssue[]): Promise<CommentResult[]>
118
+
119
+ ## analyzePRForDocs
120
+ async function analyzePRForDocs(config: PRCommentConfig, _options: { checkExamples?: boolean } = {}): Promise<DocumentationIssue[]>
121
+
122
+ ## importConfluence
123
+ function importConfluence(dir: string, name?: string): ImportResult
124
+
125
+ ## detectFormat
126
+ function detectFormat(dir: string): ImportFormat
127
+
128
+ ## isGitHubUrl
129
+ function isGitHubUrl(input: string): boolean
130
+
131
+ ## parseGitHubUrl
132
+ function parseGitHubUrl(url: string): { owner: string; repo: string; path: string; ref: string }
133
+
134
+ ## importDocusaurus
135
+ function importDocusaurus(dir: string, name?: string): ImportResult
136
+
137
+ ## importGitBook
138
+ function importGitBook(dir: string, name?: string): ImportResult
139
+
140
+ ## importFromGitHub
141
+ async function importFromGitHub(owner: string, repo: string, path: string, ref: string, options?: { format?: ImportFormat; name?: string }): Promise<ImportResult>
142
+
143
+ ## runImport
144
+ function runImport(dir: string, format: ImportFormat, name?: string): ImportResult
145
+
146
+ ## importMarkdown
147
+ function importMarkdown(dir: string, name?: string): ImportResult
148
+
149
+ ## importMintlify
150
+ function importMintlify(dir: string, name?: string): ImportResult
151
+
152
+ ## importNotion
153
+ function importNotion(dir: string, name?: string): ImportResult
154
+
155
+ ## importReadme
156
+ function importReadme(dir: string, name?: string): ImportResult
157
+
158
+ ## transformMintlifyCallouts
159
+ function transformMintlifyCallouts(content: string): string
160
+
161
+ ## transformDocusaurusAdmonitions
162
+ function transformDocusaurusAdmonitions(content: string): string
163
+
164
+ ## transformGitBookHints
165
+ function transformGitBookHints(content: string): string
166
+
167
+ ## transformReadmeCallouts
168
+ function transformReadmeCallouts(content: string): string
169
+
170
+ ## transformNotionCallouts
171
+ function transformNotionCallouts(content: string): string
172
+
173
+ ## transformConfluenceCallouts
174
+ function transformConfluenceCallouts(content: string): string
175
+
176
+ ## transformMintlifyTabs
177
+ function transformMintlifyTabs(content: string): string
178
+
179
+ ## transformDocusaurusTabs
180
+ function transformDocusaurusTabs(content: string): string
181
+
182
+ ## transformGitBookTabs
183
+ function transformGitBookTabs(content: string): string
184
+
185
+ ## transformReadmeCodeBlocks
186
+ function transformReadmeCodeBlocks(content: string): string
187
+
188
+ ## transformGitBookSteps
189
+ function transformGitBookSteps(content: string): string
190
+
191
+ ## transformGitBookExpandable
192
+ function transformGitBookExpandable(content: string): string
193
+
194
+ ## transformGitBookContentRef
195
+ function transformGitBookContentRef(content: string): string
196
+
197
+ ## transformGitBookEmbed
198
+ function transformGitBookEmbed(content: string): string
199
+
200
+ ## transformNotionToggles
201
+ function transformNotionToggles(content: string): string
202
+
203
+ ## transformConfluenceHtml
204
+ function transformConfluenceHtml(content: string): string
205
+
206
+ ## stripDocusaurusImports
207
+ function stripDocusaurusImports(content: string): string
208
+
209
+ ## normalizeFrontmatter
210
+ function normalizeFrontmatter(content: string, defaults?: FrontmatterDefaults): string
211
+
212
+ ## rewriteImagePaths
213
+ function rewriteImagePaths(content: string, mapping: Map<string, string>): string
214
+
215
+ ## stripNotionUUIDs
216
+ function stripNotionUUIDs(filename: string): string
217
+
218
+ ## getSortWeight
219
+ function getSortWeight(content: string): number
220
+
221
+ ## AnthropicClient
222
+ class AnthropicClient implements LLMClient
223
+
224
+ ## constructor
225
+ constructor(config: LLMClientConfig)
226
+
227
+ ## isConfigured
228
+ isConfigured(): boolean
229
+
230
+ ## complete
231
+ async complete(request: CompletionRequest): Promise<CompletionResponse>
232
+
233
+ ## createLLMClient
234
+ function createLLMClient(config: {
235
+ provider: LLMProvider
236
+ model: string
237
+ baseUrl?: string
238
+ timeout?: number
239
+ maxRetries?: number
240
+ }): LLMClient
241
+
242
+ ## generateDocumentation
243
+ async function generateDocumentation(client: LLMClient, element: ElementContext, options?: { multiLanguage?: boolean }): Promise<GeneratedDocResult>
244
+
245
+ ## fixCodeSample
246
+ async function fixCodeSample(client: LLMClient, code: string, error: string, context: string, iteration: number = 1): Promise<string>
247
+
248
+ ## OpenAICompatibleClient
249
+ class OpenAICompatibleClient implements LLMClient
250
+
251
+ ## constructor
252
+ constructor(config: LLMClientConfig)
253
+
254
+ ## isConfigured
255
+ isConfigured(): boolean
256
+
257
+ ## complete
258
+ async complete(request: CompletionRequest): Promise<CompletionResponse>
259
+
260
+ ## PluginManager
261
+ class PluginManager
262
+
263
+ ## constructor
264
+ constructor(sourcePath: string, outputPath: string, config: Record<string, unknown> = {})
265
+
266
+ ## loadPlugins
267
+ async loadPlugins(configPath?: string): Promise<void>
268
+
269
+ ## register
270
+ register(plugin: SkryptPlugin): void
271
+
272
+ ## runHook
273
+ async runHook<T>(hook: keyof SkryptPlugin, ...args: unknown[]): Promise<T | undefined>
274
+
275
+ ## onInit
276
+ async onInit(): Promise<void>
277
+
278
+ ## onBeforeScan
279
+ async onBeforeScan(): Promise<void>
280
+
281
+ ## onAfterScan
282
+ async onAfterScan<T>(elements: T[]): Promise<T[]>
283
+
284
+ ## onBeforeGenerate
285
+ async onBeforeGenerate<T>(elements: T[]): Promise<T[]>
286
+
287
+ ## onAfterGenerate
288
+ async onAfterGenerate<T>(docs: T[]): Promise<T[]>
289
+
290
+ ## onBeforeWrite
291
+ async onBeforeWrite<T>(docs: T[]): Promise<T[]>
292
+
293
+ ## onAfterWrite
294
+ async onAfterWrite(): Promise<void>
295
+
296
+ ## transformContent
297
+ async transformContent(content: string, filePath: string): Promise<string>
298
+
299
+ ## definePlugin
300
+ function definePlugin(plugin: SkryptPlugin): SkryptPlugin
301
+
302
+ ## classifyElement
303
+ function classifyElement(element: APIElement): ContentClassification
304
+
305
+ ## classifyElements
306
+ function classifyElements(elements: APIElement[]): Map<ContentType, APIElement[]>
307
+
308
+ ## getRecommendedStructure
309
+ function getRecommendedStructure(elements: APIElement[]): {
310
+ sections: { name: string; type: ContentType; elements: APIElement[] }[]
311
+ stats: { api: number; guide: number; tutorial: number; overview: number }
312
+ }
313
+
314
+ ## getPromptForContentType
315
+ function getPromptForContentType(type: ContentType): string
316
+
317
+ ## GoScanner
318
+ class GoScanner implements Scanner
319
+
320
+ ## canHandle
321
+ canHandle(filePath: string): boolean
322
+
323
+ ## scanFile
324
+ async scanFile(filePath: string): Promise<ScanResult>
325
+
326
+ ## scanDirectory
327
+ async function scanDirectory(dir: string, options: ScanOptions = {}): Promise<ScanAllResult>
328
+
329
+ ## scanFile
330
+ async function scanFile(filePath: string): Promise<ScanResult>
331
+
332
+ ## PythonScanner
333
+ class PythonScanner implements Scanner
334
+
335
+ ## canHandle
336
+ canHandle(filePath: string): boolean
337
+
338
+ ## scanFile
339
+ async scanFile(filePath: string): Promise<ScanResult>
340
+
341
+ ## get_docstring
342
+ def get_docstring(node: ast.AST) -> str | None
343
+
344
+ ## get_type_annotation
345
+ def get_type_annotation(annotation: ast.AST | None) -> str | None
346
+
347
+ ## get_default_value
348
+ def get_default_value(default: ast.AST | None) -> str | None
349
+
350
+ ## extract_parameters
351
+ def extract_parameters(args: ast.arguments) -> list[dict[str, Any]]
352
+
353
+ ## build_signature
354
+ def build_signature(name: str, args: ast.arguments, returns: ast.AST | None, is_async: bool) -> str
355
+
356
+ ## extract_function
357
+ def extract_function(node: ast.FunctionDef | ast.AsyncFunctionDef, file_path: str, parent_class: str | None) -> dict[str, Any]
358
+
359
+ ## extract_class
360
+ def extract_class(node: ast.ClassDef, file_path: str) -> list[dict[str, Any]]
361
+
362
+ ## scan_file
363
+ def scan_file(file_path: str) -> dict[str, Any]
364
+
365
+ ## RustScanner
366
+ class RustScanner implements Scanner
367
+
368
+ ## canHandle
369
+ canHandle(filePath: string): boolean
370
+
371
+ ## scanFile
372
+ async scanFile(filePath: string): Promise<ScanResult>
373
+
374
+ ## TypeScriptScanner
375
+ class TypeScriptScanner implements Scanner
376
+
377
+ ## canHandle
378
+ canHandle(filePath: string): boolean
379
+
380
+ ## scanFile
381
+ async scanFile(filePath: string): Promise<ScanResult>
382
+
383
+ ## findMdxFiles
384
+ function findMdxFiles(dir: string): string[]
385
+
386
+ ## slugify
387
+ function slugify(str: string): string
388
+
389
+ ## parseFrontmatter
390
+ function parseFrontmatter(content: string): { data: Record<string, unknown>; content: string }
391
+
392
+ ## validatePath
393
+ function validatePath(input: string, mustExist = true): string
394
+
395
+ ## validateUrl
396
+ function validateUrl(input: string): string
397
+
398
+ ## validateSlug
399
+ function validateSlug(input: string): string
400
+
401
+ ## sanitizeForShell
402
+ function sanitizeForShell(input: string): string
403
+