signalwire-agents 0.1.13__py3-none-any.whl → 1.0.17.dev4__py3-none-any.whl

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 (143) hide show
  1. signalwire_agents/__init__.py +99 -15
  2. signalwire_agents/agent_server.py +248 -60
  3. signalwire_agents/agents/bedrock.py +296 -0
  4. signalwire_agents/cli/__init__.py +9 -0
  5. signalwire_agents/cli/build_search.py +951 -41
  6. signalwire_agents/cli/config.py +80 -0
  7. signalwire_agents/cli/core/__init__.py +10 -0
  8. signalwire_agents/cli/core/agent_loader.py +470 -0
  9. signalwire_agents/cli/core/argparse_helpers.py +179 -0
  10. signalwire_agents/cli/core/dynamic_config.py +71 -0
  11. signalwire_agents/cli/core/service_loader.py +303 -0
  12. signalwire_agents/cli/dokku.py +2320 -0
  13. signalwire_agents/cli/execution/__init__.py +10 -0
  14. signalwire_agents/cli/execution/datamap_exec.py +446 -0
  15. signalwire_agents/cli/execution/webhook_exec.py +134 -0
  16. signalwire_agents/cli/init_project.py +2636 -0
  17. signalwire_agents/cli/output/__init__.py +10 -0
  18. signalwire_agents/cli/output/output_formatter.py +255 -0
  19. signalwire_agents/cli/output/swml_dump.py +186 -0
  20. signalwire_agents/cli/simulation/__init__.py +10 -0
  21. signalwire_agents/cli/simulation/data_generation.py +374 -0
  22. signalwire_agents/cli/simulation/data_overrides.py +200 -0
  23. signalwire_agents/cli/simulation/mock_env.py +282 -0
  24. signalwire_agents/cli/swaig_test_wrapper.py +52 -0
  25. signalwire_agents/cli/test_swaig.py +566 -2366
  26. signalwire_agents/cli/types.py +81 -0
  27. signalwire_agents/core/__init__.py +2 -2
  28. signalwire_agents/core/agent/__init__.py +12 -0
  29. signalwire_agents/core/agent/config/__init__.py +12 -0
  30. signalwire_agents/core/agent/deployment/__init__.py +9 -0
  31. signalwire_agents/core/agent/deployment/handlers/__init__.py +9 -0
  32. signalwire_agents/core/agent/prompt/__init__.py +14 -0
  33. signalwire_agents/core/agent/prompt/manager.py +306 -0
  34. signalwire_agents/core/agent/routing/__init__.py +9 -0
  35. signalwire_agents/core/agent/security/__init__.py +9 -0
  36. signalwire_agents/core/agent/swml/__init__.py +9 -0
  37. signalwire_agents/core/agent/tools/__init__.py +15 -0
  38. signalwire_agents/core/agent/tools/decorator.py +97 -0
  39. signalwire_agents/core/agent/tools/registry.py +210 -0
  40. signalwire_agents/core/agent_base.py +845 -2916
  41. signalwire_agents/core/auth_handler.py +233 -0
  42. signalwire_agents/core/config_loader.py +259 -0
  43. signalwire_agents/core/contexts.py +418 -0
  44. signalwire_agents/core/data_map.py +3 -15
  45. signalwire_agents/core/function_result.py +116 -44
  46. signalwire_agents/core/logging_config.py +162 -18
  47. signalwire_agents/core/mixins/__init__.py +28 -0
  48. signalwire_agents/core/mixins/ai_config_mixin.py +442 -0
  49. signalwire_agents/core/mixins/auth_mixin.py +280 -0
  50. signalwire_agents/core/mixins/prompt_mixin.py +358 -0
  51. signalwire_agents/core/mixins/serverless_mixin.py +460 -0
  52. signalwire_agents/core/mixins/skill_mixin.py +55 -0
  53. signalwire_agents/core/mixins/state_mixin.py +153 -0
  54. signalwire_agents/core/mixins/tool_mixin.py +230 -0
  55. signalwire_agents/core/mixins/web_mixin.py +1142 -0
  56. signalwire_agents/core/security_config.py +333 -0
  57. signalwire_agents/core/skill_base.py +84 -1
  58. signalwire_agents/core/skill_manager.py +62 -20
  59. signalwire_agents/core/swaig_function.py +18 -5
  60. signalwire_agents/core/swml_builder.py +207 -11
  61. signalwire_agents/core/swml_handler.py +27 -21
  62. signalwire_agents/core/swml_renderer.py +123 -312
  63. signalwire_agents/core/swml_service.py +171 -203
  64. signalwire_agents/mcp_gateway/__init__.py +29 -0
  65. signalwire_agents/mcp_gateway/gateway_service.py +564 -0
  66. signalwire_agents/mcp_gateway/mcp_manager.py +513 -0
  67. signalwire_agents/mcp_gateway/session_manager.py +218 -0
  68. signalwire_agents/prefabs/concierge.py +0 -3
  69. signalwire_agents/prefabs/faq_bot.py +0 -3
  70. signalwire_agents/prefabs/info_gatherer.py +0 -3
  71. signalwire_agents/prefabs/receptionist.py +0 -3
  72. signalwire_agents/prefabs/survey.py +0 -3
  73. signalwire_agents/schema.json +9218 -5489
  74. signalwire_agents/search/__init__.py +7 -1
  75. signalwire_agents/search/document_processor.py +490 -31
  76. signalwire_agents/search/index_builder.py +307 -37
  77. signalwire_agents/search/migration.py +418 -0
  78. signalwire_agents/search/models.py +30 -0
  79. signalwire_agents/search/pgvector_backend.py +748 -0
  80. signalwire_agents/search/query_processor.py +162 -31
  81. signalwire_agents/search/search_engine.py +916 -35
  82. signalwire_agents/search/search_service.py +376 -53
  83. signalwire_agents/skills/README.md +452 -0
  84. signalwire_agents/skills/__init__.py +14 -2
  85. signalwire_agents/skills/api_ninjas_trivia/README.md +215 -0
  86. signalwire_agents/skills/api_ninjas_trivia/__init__.py +12 -0
  87. signalwire_agents/skills/api_ninjas_trivia/skill.py +237 -0
  88. signalwire_agents/skills/datasphere/README.md +210 -0
  89. signalwire_agents/skills/datasphere/skill.py +84 -3
  90. signalwire_agents/skills/datasphere_serverless/README.md +258 -0
  91. signalwire_agents/skills/datasphere_serverless/__init__.py +9 -0
  92. signalwire_agents/skills/datasphere_serverless/skill.py +82 -1
  93. signalwire_agents/skills/datetime/README.md +132 -0
  94. signalwire_agents/skills/datetime/__init__.py +9 -0
  95. signalwire_agents/skills/datetime/skill.py +20 -7
  96. signalwire_agents/skills/joke/README.md +149 -0
  97. signalwire_agents/skills/joke/__init__.py +9 -0
  98. signalwire_agents/skills/joke/skill.py +21 -0
  99. signalwire_agents/skills/math/README.md +161 -0
  100. signalwire_agents/skills/math/__init__.py +9 -0
  101. signalwire_agents/skills/math/skill.py +18 -4
  102. signalwire_agents/skills/mcp_gateway/README.md +230 -0
  103. signalwire_agents/skills/mcp_gateway/__init__.py +10 -0
  104. signalwire_agents/skills/mcp_gateway/skill.py +421 -0
  105. signalwire_agents/skills/native_vector_search/README.md +210 -0
  106. signalwire_agents/skills/native_vector_search/__init__.py +9 -0
  107. signalwire_agents/skills/native_vector_search/skill.py +569 -101
  108. signalwire_agents/skills/play_background_file/README.md +218 -0
  109. signalwire_agents/skills/play_background_file/__init__.py +12 -0
  110. signalwire_agents/skills/play_background_file/skill.py +242 -0
  111. signalwire_agents/skills/registry.py +395 -40
  112. signalwire_agents/skills/spider/README.md +236 -0
  113. signalwire_agents/skills/spider/__init__.py +13 -0
  114. signalwire_agents/skills/spider/skill.py +598 -0
  115. signalwire_agents/skills/swml_transfer/README.md +395 -0
  116. signalwire_agents/skills/swml_transfer/__init__.py +10 -0
  117. signalwire_agents/skills/swml_transfer/skill.py +359 -0
  118. signalwire_agents/skills/weather_api/README.md +178 -0
  119. signalwire_agents/skills/weather_api/__init__.py +12 -0
  120. signalwire_agents/skills/weather_api/skill.py +191 -0
  121. signalwire_agents/skills/web_search/README.md +163 -0
  122. signalwire_agents/skills/web_search/__init__.py +9 -0
  123. signalwire_agents/skills/web_search/skill.py +586 -112
  124. signalwire_agents/skills/wikipedia_search/README.md +228 -0
  125. signalwire_agents/{core/state → skills/wikipedia_search}/__init__.py +5 -4
  126. signalwire_agents/skills/{wikipedia → wikipedia_search}/skill.py +33 -3
  127. signalwire_agents/web/__init__.py +17 -0
  128. signalwire_agents/web/web_service.py +559 -0
  129. signalwire_agents-1.0.17.dev4.data/data/share/man/man1/sw-agent-init.1 +400 -0
  130. signalwire_agents-1.0.17.dev4.data/data/share/man/man1/sw-search.1 +483 -0
  131. signalwire_agents-1.0.17.dev4.data/data/share/man/man1/swaig-test.1 +308 -0
  132. {signalwire_agents-0.1.13.dist-info → signalwire_agents-1.0.17.dev4.dist-info}/METADATA +347 -215
  133. signalwire_agents-1.0.17.dev4.dist-info/RECORD +147 -0
  134. signalwire_agents-1.0.17.dev4.dist-info/entry_points.txt +6 -0
  135. signalwire_agents/core/state/file_state_manager.py +0 -219
  136. signalwire_agents/core/state/state_manager.py +0 -101
  137. signalwire_agents/skills/wikipedia/__init__.py +0 -9
  138. signalwire_agents-0.1.13.data/data/schema.json +0 -5611
  139. signalwire_agents-0.1.13.dist-info/RECORD +0 -67
  140. signalwire_agents-0.1.13.dist-info/entry_points.txt +0 -3
  141. {signalwire_agents-0.1.13.dist-info → signalwire_agents-1.0.17.dev4.dist-info}/WHEEL +0 -0
  142. {signalwire_agents-0.1.13.dist-info → signalwire_agents-1.0.17.dev4.dist-info}/licenses/LICENSE +0 -0
  143. {signalwire_agents-0.1.13.dist-info → signalwire_agents-1.0.17.dev4.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,483 @@
1
+ .\" Man page for sw-search
2
+ .\" Copyright (c) 2025 SignalWire
3
+ .\" Licensed under the MIT License
4
+ .TH SW-SEARCH 1 "November 2025" "SignalWire Agents SDK 1.0.6" "SignalWire Commands"
5
+ .SH NAME
6
+ sw-search \- build and query semantic search indexes for SignalWire AI agents
7
+ .SH SYNOPSIS
8
+ .B sw-search
9
+ .I sources
10
+ .RI [ sources... ]
11
+ .RI [ options ]
12
+ .br
13
+ .B sw-search
14
+ .B search
15
+ .I index_file
16
+ .I query
17
+ .RI [ options ]
18
+ .br
19
+ .B sw-search
20
+ .B validate
21
+ .I index_file
22
+ .br
23
+ .B sw-search
24
+ .B remote
25
+ .I host
26
+ .I query
27
+ .RI [ options ]
28
+ .br
29
+ .B sw-search
30
+ .B migrate
31
+ .I index_file
32
+ .RI [ options ]
33
+ .SH DESCRIPTION
34
+ .B sw-search
35
+ is a command-line tool for building semantic search indexes from documents
36
+ and querying them. It creates
37
+ .I .swsearch
38
+ files that can be used by SignalWire AI agents to provide knowledge-based
39
+ responses through the native_vector_search skill.
40
+ .PP
41
+ The tool supports multiple document formats (Markdown, text, PDF, Word, etc.),
42
+ various chunking strategies, and multiple storage backends including SQLite
43
+ and PostgreSQL with pgvector.
44
+ .SH COMMANDS
45
+ .TP
46
+ .BI "sw-search " "sources..."
47
+ Build a search index from the specified source files or directories.
48
+ This is the default command when no subcommand is specified.
49
+ .TP
50
+ .BI "sw-search search " "index_file query"
51
+ Search within an existing index file for the given query.
52
+ .TP
53
+ .BI "sw-search validate " "index_file"
54
+ Validate the structure and integrity of an existing index file.
55
+ .TP
56
+ .BI "sw-search remote " "host query"
57
+ Search via a remote search API server.
58
+ .TP
59
+ .BI "sw-search migrate " "index_file"
60
+ Migrate an index between storage backends.
61
+ .SH BUILD OPTIONS
62
+ .SS "Output Options"
63
+ .TP
64
+ .BI \-\-output " FILE"
65
+ Output file name for the search index (default: sources.swsearch).
66
+ For pgvector backend, this is the collection name.
67
+ .TP
68
+ .BI \-\-output\-dir " DIR"
69
+ Output directory for results. When used with \-\-output\-format json,
70
+ creates one file per source file.
71
+ .TP
72
+ .BI \-\-output\-format " FORMAT"
73
+ Output format:
74
+ .B index
75
+ (create search index) or
76
+ .B json
77
+ (export chunks as JSON for review).
78
+ Default is index.
79
+ .SS "Backend Options"
80
+ .TP
81
+ .BI \-\-backend " BACKEND"
82
+ Storage backend to use:
83
+ .B sqlite
84
+ (default) or
85
+ .BR pgvector .
86
+ .TP
87
+ .BI \-\-connection\-string " STRING"
88
+ PostgreSQL connection string for pgvector backend.
89
+ Format: postgresql://user:pass@host:port/database
90
+ .TP
91
+ .B \-\-overwrite
92
+ Overwrite existing collection (pgvector backend only).
93
+ .SS "Chunking Strategies"
94
+ .TP
95
+ .BI \-\-chunking\-strategy " STRATEGY"
96
+ Strategy for splitting documents into chunks. Available strategies:
97
+ .RS
98
+ .IP \(bu 2
99
+ .B sentence
100
+ \- Split by sentences, grouping up to N sentences per chunk (default)
101
+ .IP \(bu 2
102
+ .B sliding
103
+ \- Sliding window with configurable size and overlap
104
+ .IP \(bu 2
105
+ .B paragraph
106
+ \- Split on paragraph boundaries
107
+ .IP \(bu 2
108
+ .B page
109
+ \- Split on page boundaries (good for PDFs)
110
+ .IP \(bu 2
111
+ .B semantic
112
+ \- Group semantically similar sentences
113
+ .IP \(bu 2
114
+ .B topic
115
+ \- Group by topic changes
116
+ .IP \(bu 2
117
+ .B qa
118
+ \- Optimized for question-answering use cases
119
+ .IP \(bu 2
120
+ .B json
121
+ \- Read pre-chunked content from JSON files
122
+ .IP \(bu 2
123
+ .B markdown
124
+ \- Markdown-aware chunking that preserves headers and detects code blocks
125
+ .RE
126
+ .TP
127
+ .BI \-\-max\-sentences\-per\-chunk " N"
128
+ Maximum sentences per chunk for sentence strategy (default: 5).
129
+ .TP
130
+ .BI \-\-chunk\-size " N"
131
+ Chunk size in words for sliding window strategy (default: 50).
132
+ .TP
133
+ .BI \-\-overlap\-size " N"
134
+ Overlap size in words for sliding window strategy (default: 10).
135
+ .TP
136
+ .BI \-\-split\-newlines " N"
137
+ Split on N or more consecutive newlines (for sentence strategy).
138
+ .TP
139
+ .BI \-\-semantic\-threshold " FLOAT"
140
+ Similarity threshold for semantic chunking (default: 0.5).
141
+ .TP
142
+ .BI \-\-topic\-threshold " FLOAT"
143
+ Similarity threshold for topic chunking (default: 0.3).
144
+ .SS "Source Options"
145
+ .TP
146
+ .BI \-\-file\-types " TYPES"
147
+ Comma-separated file extensions to include when processing directories
148
+ (default: md,txt,rst).
149
+ .TP
150
+ .BI \-\-exclude " PATTERNS"
151
+ Comma-separated glob patterns to exclude.
152
+ Example: "**/test/**,**/__pycache__/**"
153
+ .TP
154
+ .BI \-\-languages " CODES"
155
+ Comma-separated language codes (default: en).
156
+ .SS "Model Options"
157
+ .TP
158
+ .BI \-\-model " MODEL"
159
+ Sentence transformer model name or alias. Aliases:
160
+ .RS
161
+ .IP \(bu 2
162
+ .B mini
163
+ \- sentence-transformers/all-MiniLM-L6-v2 (fastest, 384 dims)
164
+ .IP \(bu 2
165
+ .B base
166
+ \- sentence-transformers/all-mpnet-base-v2 (balanced, 768 dims)
167
+ .IP \(bu 2
168
+ .B large
169
+ \- Same as base (best quality)
170
+ .RE
171
+ .PP
172
+ Or specify full model name from Hugging Face.
173
+ .TP
174
+ .BI \-\-index\-nlp\-backend " BACKEND"
175
+ NLP backend for document processing:
176
+ .B nltk
177
+ (fast, default) or
178
+ .B spacy
179
+ (better quality, slower).
180
+ .SS "Metadata Options"
181
+ .TP
182
+ .BI \-\-tags " TAGS"
183
+ Comma-separated tags to add to all chunks.
184
+ .TP
185
+ .B \-\-verbose
186
+ Enable verbose output showing processing details.
187
+ .TP
188
+ .B \-\-validate
189
+ Validate the created index after building.
190
+ .SH SEARCH OPTIONS
191
+ .TP
192
+ .BI \-\-count " N"
193
+ Number of results to return (default: 5).
194
+ .TP
195
+ .BI \-\-tags " TAGS"
196
+ Filter results by tags.
197
+ .TP
198
+ .B \-\-json
199
+ Output results as JSON.
200
+ .TP
201
+ .B \-\-verbose
202
+ Show detailed result information including scores.
203
+ .SH REMOTE OPTIONS
204
+ .TP
205
+ .BI \-\-index\-name " NAME"
206
+ Index name on the remote server.
207
+ .TP
208
+ .BI \-\-count " N"
209
+ Number of results to return.
210
+ .TP
211
+ .B \-\-verbose
212
+ Show detailed results.
213
+ .SH MIGRATE OPTIONS
214
+ .TP
215
+ .B \-\-info
216
+ Show information about the index without migrating.
217
+ .TP
218
+ .B \-\-to\-pgvector
219
+ Migrate to PostgreSQL pgvector backend.
220
+ .TP
221
+ .BI \-\-connection\-string " STRING"
222
+ PostgreSQL connection string for migration target.
223
+ .TP
224
+ .BI \-\-collection\-name " NAME"
225
+ Collection name for pgvector migration.
226
+ .SH EXAMPLES
227
+ .SS Building Indexes
228
+ Basic usage with a directory:
229
+ .PP
230
+ .RS
231
+ .nf
232
+ sw-search ./docs
233
+ .fi
234
+ .RE
235
+ .PP
236
+ Multiple sources with file type filter:
237
+ .PP
238
+ .RS
239
+ .nf
240
+ sw-search ./docs ./examples README.md --file-types md,txt,py
241
+ .fi
242
+ .RE
243
+ .PP
244
+ Custom output file:
245
+ .PP
246
+ .RS
247
+ .nf
248
+ sw-search ./docs --output knowledge.swsearch
249
+ .fi
250
+ .RE
251
+ .SS Chunking Strategies
252
+ Sentence-based chunking with custom parameters:
253
+ .PP
254
+ .RS
255
+ .nf
256
+ sw-search ./docs \\
257
+ --chunking-strategy sentence \\
258
+ --max-sentences-per-chunk 10
259
+ .fi
260
+ .RE
261
+ .PP
262
+ Sliding window chunking:
263
+ .PP
264
+ .RS
265
+ .nf
266
+ sw-search ./docs \\
267
+ --chunking-strategy sliding \\
268
+ --chunk-size 100 \\
269
+ --overlap-size 20
270
+ .fi
271
+ .RE
272
+ .PP
273
+ Markdown-aware chunking (best for documentation with code):
274
+ .PP
275
+ .RS
276
+ .nf
277
+ sw-search ./docs \\
278
+ --chunking-strategy markdown \\
279
+ --file-types md
280
+ .fi
281
+ .RE
282
+ .PP
283
+ Semantic chunking (groups similar content):
284
+ .PP
285
+ .RS
286
+ .nf
287
+ sw-search ./docs \\
288
+ --chunking-strategy semantic \\
289
+ --semantic-threshold 0.6
290
+ .fi
291
+ .RE
292
+ .SS Model Selection
293
+ Using different embedding models:
294
+ .PP
295
+ .RS
296
+ .nf
297
+ sw-search ./docs --model mini # Fastest, good for most cases
298
+ sw-search ./docs --model base # Better quality, slower
299
+ sw-search ./docs --model sentence-transformers/all-mpnet-base-v2
300
+ .fi
301
+ .RE
302
+ .SS PostgreSQL pgvector Backend
303
+ Build directly to PostgreSQL:
304
+ .PP
305
+ .RS
306
+ .nf
307
+ sw-search ./docs \\
308
+ --backend pgvector \\
309
+ --connection-string "postgresql://user:pass@localhost:5432/db" \\
310
+ --output docs_collection
311
+ .fi
312
+ .RE
313
+ .PP
314
+ Overwrite existing collection:
315
+ .PP
316
+ .RS
317
+ .nf
318
+ sw-search ./docs \\
319
+ --backend pgvector \\
320
+ --connection-string "postgresql://user:pass@localhost:5432/db" \\
321
+ --output docs_collection \\
322
+ --overwrite
323
+ .fi
324
+ .RE
325
+ .SS Searching
326
+ Search within an index:
327
+ .PP
328
+ .RS
329
+ .nf
330
+ sw-search search ./docs.swsearch "how to create an agent"
331
+ sw-search search ./docs.swsearch "API reference" --count 3 --verbose
332
+ sw-search search ./docs.swsearch "configuration" --tags documentation --json
333
+ .fi
334
+ .RE
335
+ .PP
336
+ Search in pgvector collection:
337
+ .PP
338
+ .RS
339
+ .nf
340
+ sw-search search docs_collection "how to create an agent" \\
341
+ --backend pgvector \\
342
+ --connection-string "postgresql://user:pass@localhost/db"
343
+ .fi
344
+ .RE
345
+ .SS Remote Search
346
+ Search via remote API:
347
+ .PP
348
+ .RS
349
+ .nf
350
+ sw-search remote http://localhost:8001 "how to create an agent" \\
351
+ --index-name docs
352
+ .fi
353
+ .RE
354
+ .SS Exporting and Importing Chunks
355
+ Export chunks to JSON for review:
356
+ .PP
357
+ .RS
358
+ .nf
359
+ sw-search ./docs \\
360
+ --output-format json \\
361
+ --output all_chunks.json
362
+ .fi
363
+ .RE
364
+ .PP
365
+ Export one JSON file per source:
366
+ .PP
367
+ .RS
368
+ .nf
369
+ sw-search ./docs \\
370
+ --output-format json \\
371
+ --output-dir ./chunks/
372
+ .fi
373
+ .RE
374
+ .PP
375
+ Build index from exported JSON:
376
+ .PP
377
+ .RS
378
+ .nf
379
+ sw-search ./chunks/ \\
380
+ --chunking-strategy json \\
381
+ --file-types json \\
382
+ --output final.swsearch
383
+ .fi
384
+ .RE
385
+ .SS Migration
386
+ Show index information:
387
+ .PP
388
+ .RS
389
+ .nf
390
+ sw-search migrate --info ./docs.swsearch
391
+ .fi
392
+ .RE
393
+ .PP
394
+ Migrate to pgvector:
395
+ .PP
396
+ .RS
397
+ .nf
398
+ sw-search migrate ./docs.swsearch --to-pgvector \\
399
+ --connection-string "postgresql://user:pass@localhost/db" \\
400
+ --collection-name docs_collection
401
+ .fi
402
+ .RE
403
+ .SH FILE FORMATS
404
+ .SS .swsearch Files
405
+ SQLite-based search index files containing:
406
+ .IP \(bu 2
407
+ Document chunks with text content
408
+ .IP \(bu 2
409
+ Embedding vectors for semantic search
410
+ .IP \(bu 2
411
+ Metadata (source file, tags, headers)
412
+ .IP \(bu 2
413
+ Index configuration and model information
414
+ .SS Supported Input Formats
415
+ .IP \(bu 2
416
+ .B Markdown
417
+ (.md) \- Full support including code block detection
418
+ .IP \(bu 2
419
+ .B Text
420
+ (.txt) \- Plain text files
421
+ .IP \(bu 2
422
+ .B reStructuredText
423
+ (.rst) \- Documentation format
424
+ .IP \(bu 2
425
+ .B PDF
426
+ (.pdf) \- Requires pdfplumber (install with [search-full])
427
+ .IP \(bu 2
428
+ .B Word
429
+ (.docx) \- Requires python-docx (install with [search-full])
430
+ .IP \(bu 2
431
+ .B Excel
432
+ (.xlsx) \- Requires openpyxl (install with [search-full])
433
+ .IP \(bu 2
434
+ .B PowerPoint
435
+ (.pptx) \- Requires python-pptx (install with [search-full])
436
+ .IP \(bu 2
437
+ .B RTF
438
+ (.rtf) \- Requires striprtf (install with [search-full])
439
+ .IP \(bu 2
440
+ .B JSON
441
+ (.json) \- Pre-chunked content
442
+ .SH INSTALLATION
443
+ The search functionality requires optional dependencies:
444
+ .PP
445
+ .RS
446
+ .nf
447
+ # Query-only (search existing indexes)
448
+ pip install signalwire-agents[search-queryonly]
449
+
450
+ # Full search (build and query)
451
+ pip install signalwire-agents[search]
452
+
453
+ # With document processing (PDF, Word, etc.)
454
+ pip install signalwire-agents[search-full]
455
+
456
+ # With pgvector support
457
+ pip install signalwire-agents[pgvector]
458
+
459
+ # Everything
460
+ pip install signalwire-agents[search-all]
461
+ .fi
462
+ .RE
463
+ .SH EXIT STATUS
464
+ .TP
465
+ .B 0
466
+ Successful execution.
467
+ .TP
468
+ .B 1
469
+ An error occurred. Check stderr for details.
470
+ .SH ENVIRONMENT
471
+ .TP
472
+ .B SIGNALWIRE_LOG_MODE
473
+ Controls logging verbosity. Set to "off" to suppress logs.
474
+ .SH SEE ALSO
475
+ .BR swaig-test (1),
476
+ .BR sw-agent-init (1)
477
+ .PP
478
+ SignalWire AI Agents SDK documentation:
479
+ .I https://github.com/signalwire/signalwire-agents
480
+ .SH AUTHORS
481
+ SignalWire Team <info@signalwire.com>
482
+ .SH COPYRIGHT
483
+ Copyright (c) 2025 SignalWire. Licensed under the MIT License.