@ninjaxtools/slopdex 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/README.md CHANGED
@@ -1,172 +1,257 @@
1
1
  # slopdex
2
2
 
3
- Slopdex indexes named functions in TypeScript and JavaScript repositories. It uses embeddings to search code by meaning, find similar implementations, and measure whether related functions are stored near each other.
3
+ Search functions by meaning, find duplicate-code candidates, and locate related functions spread across a codebase. Supports Python, JavaScript/JSX, TypeScript/TSX, Rust, Go, Java, and C in the same repository.
4
4
 
5
- Supported file types are `.ts`, `.tsx`, `.mts`, `.cts`, `.js`, `.jsx`, `.mjs`, and `.cjs`.
5
+ ## Start here
6
6
 
7
- ## Requirements
8
-
9
- - Node.js 24 or later
10
- - An OpenAI or Jina AI API key
11
-
12
- ## Install
7
+ Requires **Node.js 24+** and an embedding-provider API key. Install, set your key, and run commands from the repository you want to analyze (or pass `--root /path/to/repo`):
13
8
 
14
9
  ```bash
15
10
  npm install -g @ninjaxtools/slopdex
11
+ export OPENAI_API_KEY="your-api-key"
12
+ slopdex search "validate an authenticated session" --format summary --limit 10
16
13
  ```
17
14
 
18
- ## Getting Started
15
+ The first command creates the index automatically. Later commands refresh it before searching. Add `.slopdex/` to your repository's `.gitignore`.
19
16
 
20
- Set your OpenAI API key:
17
+ ### Find code by purpose
21
18
 
22
19
  ```bash
23
- export OPENAI_API_KEY="your-api-key"
20
+ slopdex search "keep the repository index synchronized" --format summary --limit 10
24
21
  ```
25
22
 
26
- Run a semantic search from the repository you want to analyze:
23
+ Describe the behavior you need. Results show similarity, file paths, and qualified function names. To search generated descriptions of each function's role instead:
27
24
 
28
25
  ```bash
29
- slopdex search "validate an authenticated session" --format summary --limit 10
26
+ slopdex use-summaries
27
+ slopdex search-summary "keep the repository index synchronized" --format summary --limit 10
30
28
  ```
31
29
 
32
- ## Analysis Examples
33
-
34
- ### Duplicate Analysis
30
+ `use-summaries` enables persistent, automatic summary updates. It requires `OPENAI_API_KEY` even when Jina supplies embeddings, and adds generation costs. See [summaries and scoring](#summaries-and-scoring).
35
31
 
36
- Compare functions in different files and include functions that span at least four lines:
32
+ ### Find duplicate-code candidates
37
33
 
38
34
  ```bash
39
- slopdex cross-search \
40
- --cross-file-only \
41
- --min-lines 4 \
42
- --threshold 0.9 \
43
- --limit 5
35
+ slopdex cross-search --cross-file-only --min-lines 4 --threshold 0.9 --limit 5
44
36
  ```
45
37
 
46
- The default output groups related functions into clusters:
38
+ Compare functions across files, exclude short wrappers, and group strong matches into clusters. `--limit 5` selects up to five neighbors **per source function**, not five clusters. Review the source before consolidating a match.
47
39
 
48
- ```text
49
- Cluster 1 (3 functions, similarity 0.9124-0.9568)
50
- src/auth/session.ts:18:1 :: validateSession
51
- src/http/middleware.ts:42:1 :: authenticate
52
- src/users/user-service.ts:27:3 :: UserService.authenticate
40
+ ### Review changed code or one module
41
+
42
+ ```bash
43
+ slopdex cross-search --uncommitted --cross-file-only --min-lines 4 --threshold 0.9
44
+ slopdex cross-search --changed-since origin/main --format summary --threshold 0.9
45
+ slopdex cross-search --source-path src/services -e '^UserService\.' --format summary --threshold 0.9
53
46
  ```
54
47
 
55
- A cluster contains functions connected by similarity matches. The similarity range covers the observed links in the cluster. Connected functions may be linked through another function, so review the source before deciding that code is duplicated.
48
+ These select source functions while keeping the full eligible index available for matches. The same source filters work with `cohesion`. Combine filters to require all of them to match.
49
+
50
+ ### Find related code stored far apart
56
51
 
57
- ### Cohesion Analysis
52
+ ```bash
53
+ slopdex cohesion --threshold 0.8 --neighbors 20 --limit 50 --format summary
54
+ ```
58
55
 
59
- Find related functions that are separated across files and directories:
56
+ Ranks semantically related pairs by their physical separation. Use it to review module boundaries; it is not a pass/fail architecture check.
57
+
58
+ ### Compare repositories
60
59
 
61
60
  ```bash
62
- slopdex cohesion \
63
- --threshold 0.8 \
64
- --neighbors 20 \
65
- --limit 50 \
66
- --format summary
61
+ slopdex cross-search \
62
+ --target-root /path/to/other/repo \
63
+ --target-index /path/to/other/repo/.slopdex/index.sqlite \
64
+ --threshold 0.9 --format summary
67
65
  ```
68
66
 
69
- ```text
70
- Cohesion: 184 functions analyzed, 37 semantic edges
71
- same file 35.1% same folder 29.7% remote 35.2% mean distance 1.84
67
+ Both indexes refresh automatically and must use identical embedding profiles. The target is refreshed with the source command's embedding provider; target configuration supplies file-selection and summary settings. Use `--target-config` for a non-default target config.
72
68
 
73
- 1. gap 0.6053 similarity 0.9400 distance 4 reciprocal
74
- src/auth/session.ts:18:1 :: validateSession
75
- packages/http/middleware.ts:42:1 :: authenticate
69
+ ### Inspect index health
70
+
71
+ ```bash
72
+ slopdex status
73
+ slopdex index-errors --format summary
74
+ slopdex --version
76
75
  ```
77
76
 
78
- The summary divides semantic relationships into the same file, the same folder, and different folders. Mean distance increases when related functions are stored farther apart. The gap score combines semantic similarity with path distance and ranks pairs for review. `reciprocal` means both functions are among each other's nearest semantic matches.
77
+ `status` refreshes the index and reports coverage, profiles, checkpoint, and error counts. `index-errors` reads saved failures without refreshing or requiring credentials. `--version` prints the built package version.
79
78
 
80
- Cohesion does not have a universal pass threshold. Compare results only when the embedding profile, threshold, neighbor count, and source scope are the same.
79
+ ## Commands
81
80
 
82
- ## Limit Analysis Scope
81
+ Usage: `slopdex <command> [arguments] [options]`.
83
82
 
84
- Restrict source functions to a file or directory:
83
+ | Command | Purpose | Output |
84
+ | --- | --- | --- |
85
+ | `search <query>` | Search function code by meaning. Quote multiword queries. | JSON array; optional `summary` |
86
+ | `use-summaries` | Generate missing purpose summaries and enable automatic updates. Repeating with unchanged inputs reuses existing summaries. | JSON statistics |
87
+ | `search-summary <query>` | Search purpose summaries after enabling them. | JSON array; optional `summary` including summary text |
88
+ | `cross-search` | Find neighbors for each selected function in this or another index. | `clusters` by default; optional `summary` or JSONL |
89
+ | `cohesion` | Analyze semantic relationships versus file/folder separation. | JSON report; optional `summary` |
90
+ | `status` | Refresh and show index metadata, counts, and profiles. | JSON object |
91
+ | `index-errors` | Read saved file/function indexing failures. | JSON array; optional `summary` |
92
+ | `update-git` | Explicitly refresh a Git snapshot, with current working-tree changes when targeting HEAD. | JSON update statistics |
93
+ | `update-files <path...>` | After automatic refresh, explicitly reparse selected working-tree files. Paths are repository-relative or absolute within the root. | JSON update statistics |
94
+ | `delete-files <path...>` | After automatic refresh, remove paths from the index; source files are not deleted. A later refresh can restore eligible files. | JSON update statistics |
95
+
96
+ Manual maintenance examples:
85
97
 
86
98
  ```bash
87
- slopdex cross-search --source-path src/services --format summary
88
- slopdex cohesion --source-path src/services --format summary
99
+ slopdex update-git
100
+ slopdex update-files src/service.ts src/model.ts
101
+ slopdex delete-files src/removed.ts
102
+ slopdex update-git --target HEAD --rebuild-on-divergence
103
+ slopdex update-git --force-reindex
89
104
  ```
90
105
 
91
- Analyze functions added, changed, or moved since a commit:
106
+ ## Command-line arguments
107
+
108
+ Options are command-specific where indicated. Boolean flags default to off.
109
+
110
+ ### Location, providers, and diagnostics
111
+
112
+ | Argument | Meaning / default |
113
+ | --- | --- |
114
+ | `--root <path>` | Repository root; current directory by default. |
115
+ | `--config <path>` | Config file; `<root>/.slopdex/config.json` by default. |
116
+ | `--index <path>` | Index file; `<root>/.slopdex/index.sqlite` by default. Overrides `indexPath` in config. |
117
+ | `--provider <openai\|jina>` | Embedding provider; `openai` by default. |
118
+ | `--model <name>` | Embedding model; `text-embedding-3-large` for OpenAI, `jina-embeddings-v4` for Jina. |
119
+ | `--dimensions <number>` | Positive embedding dimension count; OpenAI `3072`, Jina `1024`. Must be supported by the model. |
120
+ | `--summary-model <name>` | OpenAI summary model; `gpt-5.6-sol` initially, then the persisted model unless overridden. |
121
+ | `--ignore-errors` | Silence warnings about saved indexing errors; records remain available. |
122
+ | `-h`, `--help` | Show CLI usage without refreshing. |
123
+ | `--version` | Print the package version and exit. |
124
+
125
+ Explicit relative config and index paths resolve from the current directory, not `--root`. CLI settings override config settings.
126
+
127
+ ### Search and analysis
128
+
129
+ | Argument | Applies to | Meaning / default |
130
+ | --- | --- | --- |
131
+ | `--limit <number>` | Both query searches, cross-search, cohesion | Positive integer. Query matches: `10`; cross-search neighbors per source: `5`; cohesion reported pairs and file rows: `50`. |
132
+ | `--threshold <number\|min-max>` | Both query searches, cross-search, cohesion | Minimum similarity, or range with inclusive minimum and exclusive maximum. Default `-1` for query/cross-search, `0.8` for cohesion. Cohesion minimum must be at least `-1` and below `1`. |
133
+ | `--format <json\|summary\|clusters>` | Both query searches, cross-search, cohesion, index-errors | Output format; see the commands table. `clusters` is only for cross-search. |
134
+ | `-e <regex>`, `--regexp <regex>` | Both query searches, cross-search, cohesion | Case-sensitive JavaScript regex over qualified names. Query searches: filters results before limiting. Analysis: filters sources only. |
135
+ | `--regex <regex>` | Cross-search, cohesion | Filter **both** source and candidate qualified names. |
136
+ | `--min-lines <number>` | Cross-search, cohesion | Minimum source and candidate callable length; positive integer, default `2`. Use `1` to include one-line wrappers. |
137
+ | `--source-path <path>` | Cross-search, cohesion | Select sources in a file or recursive directory, relative to the repository root (or absolute within it). |
138
+ | `--changed-since <commit>` | Cross-search, cohesion | Select added, modified, or moved functions relative to an ancestor of the indexed Git checkpoint, including working-tree changes. Requires Git. |
139
+ | `--uncommitted` | Cross-search, cohesion | Select functions indexed from working-tree files: staged, unstaged, or untracked changes in Git; all working-tree functions without Git. |
140
+ | `--cross-file-only` | Cross-search | Exclude matches from the same physical file. |
141
+ | `--include-symmetric-duplicates` | Cross-search | Allow both directions of same-index matches; otherwise each unordered pair is emitted once. |
142
+ | `--neighbors <number>` | Cohesion | Neighbors considered per source; positive integer, default `20`. Changes the analysis graph. |
143
+ | `--include-source` | Cohesion JSON | Include callable bodies; omitted by default. |
144
+ | `--target-root <path>` | Cross-search | Second repository root; requires `--target-index`. |
145
+ | `--target-index <path>` | Cross-search | Second index file; requires `--target-root`. |
146
+ | `--target-config <path>` | Cross-search | Target config; defaults to `<target-root>/.slopdex/config.json`. Requires both target options. |
147
+
148
+ Source restrictions intersect: with both Git filters, a function must have changed since the commit **and** belong to an uncommitted file. `-e`, `--source-path`, and Git filters do not restrict candidates; `--regex` and `--min-lines` do.
149
+
150
+ Review adjacent similarity bands without repeating boundary matches:
92
151
 
93
152
  ```bash
94
- slopdex cross-search --changed-since origin/main --format summary
95
- slopdex cohesion --changed-since origin/main --format summary
153
+ slopdex cross-search --cross-file-only --min-lines 4 --threshold 0.9 --limit 5
154
+ slopdex cross-search --cross-file-only --min-lines 4 --threshold 0.85-0.9 --limit 5
96
155
  ```
97
156
 
98
- Analyze functions in files with uncommitted changes:
157
+ ### Refresh and recovery
99
158
 
100
- ```bash
101
- slopdex cross-search --uncommitted --format summary
102
- slopdex cohesion --uncommitted --format summary
103
- ```
159
+ | Argument | Meaning |
160
+ | --- | --- |
161
+ | `--target <ref>` | Git snapshot for `update-git`; default `HEAD`. Non-HEAD targets exclude working-tree changes. Later commands normally refresh back to HEAD. |
162
+ | `--rebuild-on-divergence` | Allow reconciliation when the saved checkpoint is not an ancestor of the target, such as after a rebase or branch switch. |
163
+ | `--force-reindex` | Recreate an **incompatible** index (repository, provider, model, dimensions, strategy, or schema mismatch). A compatible index still follows normal refresh behavior. |
164
+ | `--no-reindex` | With Git, still reconcile the committed snapshot but skip working-tree overlays. Without Git, reuse a non-empty index; missing/empty indexes are still populated. Not a general offline switch. |
165
+
166
+ ## Reading results
104
167
 
105
- These options restrict the source functions. Slopdex still compares them with the full index.
168
+ ### Similarity and duplicate clusters
106
169
 
107
- ## Output And Filters
170
+ Similarity is a model-dependent score, not a probability of duplication. Higher scores mean greater semantic resemblance. Query summaries show `score path :: qualifiedName`; cross-search summaries group those lines beneath each source. Functions without matches are omitted from cross-search output.
171
+
172
+ ```text
173
+ Cluster 1 (3 functions, similarity 0.9124-0.9568)
174
+ src/auth/session.ts:18:1 :: validateSession
175
+ src/http/middleware.ts:42:1 :: authenticate
176
+ src/users/user-service.ts:27:3 :: UserService.authenticate
177
+ ```
108
178
 
109
- `search` supports `json` and `summary` output. `cross-search` supports `json`, `summary`, and `clusters` output. Use `--format` to select one.
179
+ - A cluster groups functions connected by matches. Its range covers observed links; not every pair necessarily matches directly.
180
+ - Clusters sort by member count, then name. Cluster number is not severity.
181
+ - Locations identify where to inspect behavior, callers, and architectural roles. Wrappers, adapters, tests, and separate interface implementations can legitimately resemble one another.
110
182
 
111
- Use `--threshold` with a minimum similarity or a range:
183
+ ### Cohesion
112
184
 
113
- ```bash
114
- slopdex search "validate session" --threshold 0.8 --format summary
115
- slopdex cross-search --threshold 0.85-0.9 --format summary
185
+ ```text
186
+ Cohesion: 184 functions analyzed, 37 semantic edges
187
+ same file 35.1% same folder 29.7% remote 35.2% mean distance 1.84
188
+
189
+ 1. gap 0.6053 similarity 0.9400 distance 4 reciprocal
190
+ src/auth/session.ts:18:1 :: validateSession
191
+ packages/http/middleware.ts:42:1 :: authenticate
116
192
  ```
117
193
 
118
- For a range, the lower bound is included and the upper bound is excluded. Similarity values depend on the embedding model, so use them to rank results from the same index profile.
194
+ | Field | Interpretation |
195
+ | --- | --- |
196
+ | Functions analyzed / semantic edges | Selected-source coverage / unique qualifying neighbor pairs, before report limiting. Not quality scores. |
197
+ | Same file / same folder / remote | Shares of weighted semantic affinity. Higher remote affinity means more related code crosses folder boundaries. |
198
+ | Mean distance | Weighted physical separation: `0` for the same file, `1` for different files in one folder, larger across folders. |
199
+ | Gap / rank | A `0–1` review score combining similarity above the threshold and separation; higher gap ranks first. Same-file pairs have zero gap. |
200
+ | Reciprocal | Both functions selected each other as neighbors. JSON `null` means the other endpoint was not evaluated under source filtering. |
201
+ | `sourceTestPair` | A source/test relationship inferred from paths; separation may be intentional. |
202
+ | `externalAffinityRatio` | In JSON file reports, the share of observed affinity outside that file's folder. |
119
203
 
120
- Run `slopdex --help` for all commands and options.
204
+ The example suggests reviewing separated authentication responsibilities. It does not establish that they belong in one module. There is no universal cohesion pass threshold. Filtered reports describe selected sources, not the entire repository. Summary metrics cover all qualifying edges; reported pairs/files are limited, and groups are built from reported pairs.
121
205
 
122
- ## Indexing And Data
206
+ For automation, query searches and diagnostics return JSON arrays; cross-search returns **JSONL**, one row per matched source; cohesion returns one JSON object containing `repository`, `parameters`, `summary`, `pairs`, `files`, and `groups`. Results go to stdout; notices and warnings go to stderr.
123
207
 
124
- Before each analysis command, Slopdex updates its index from the current Git commit and the staged, unstaged, and untracked files in the working tree. The index is created at `.slopdex/index.sqlite` by default.
208
+ ## System behavior
125
209
 
126
- Add `.slopdex/` to the repository's `.gitignore` so the local index is not committed.
210
+ ### Freshness and cost
127
211
 
128
- Slopdex sends extracted function source to the configured embedding provider. The function metadata and embeddings are stored in the local SQLite index.
212
+ - Indexing, search, analysis, `use-summaries`, and `status` automatically refresh. With Git, results normally reflect HEAD plus staged, unstaged, and untracked working-tree contents. `gitCheckpoint` records the committed base, not the overlay.
213
+ - Without Git, commands warn and scan the working tree. `--no-reindex` has the limited behavior described above.
214
+ - `index-errors`, help, and version do not refresh. Other commands require the configured embedding key, even when cached data supplies the analysis.
215
+ - Function source and search queries go to the embedding provider. Source metadata, vectors, diagnostics, and enabled summaries stay in the local index. Summary generation also sends repository name, path, callable source, and surrounding file context to OpenAI; summary text goes to the embedding provider.
216
+ - Unchanged embedding and summary inputs reuse cached results. Initial indexing and enabling summaries can make many API calls. Source filters reduce analysis work, not the preceding index refresh.
129
217
 
130
- Whole-repository cohesion analysis compares neighbors for every selected function. Use `--source-path`, `--changed-since`, or `--uncommitted` to reduce the scope in large repositories.
218
+ ### Summaries and scoring
131
219
 
132
- ## Library
220
+ Summaries are optional and disabled initially. `use-summaries` persists the selected summary model and keeps summaries current on later updates, including file-context and path changes. Use `slopdex use-summaries --summary-model <model-id>` to change it. `status` exposes `summariesEnabled`, `summaryCount`, and `summaryProfile`.
133
221
 
134
- The package also exports the index and analysis APIs:
222
+ `search` always searches code; `search-summary` always searches purpose summaries. When all callables have enabled summaries, cross-search and cohesion automatically use **50% code similarity + 50% summary similarity**. Cross-repository analysis needs complete summaries on both sides; otherwise the entire analysis uses code-only scores. Thresholds and neighbor limits apply to the selected score.
135
223
 
136
- ```ts
137
- import {
138
- OpenAIEmbeddingProvider,
139
- openCodeIndex,
140
- } from "@ninjaxtools/slopdex";
224
+ Text output labels combined scores. JSON exposes `codeSimilarity`, `summarySimilarity`, and scoring mode/weights (`scoring` for cross-search, `parameters` for cohesion). Compare runs only with matching scoring mode, weights, embedding and summary-generator profiles, threshold, neighbor count, and source/candidate filters.
141
225
 
142
- const index = openCodeIndex({
143
- rootDir: "/path/to/repository",
144
- provider: new OpenAIEmbeddingProvider(),
145
- });
226
+ ### Coverage and exclusions
146
227
 
147
- await index.updateFromGit();
228
+ | Language | File extensions |
229
+ | --- | --- |
230
+ | Python | `.py`, `.pyw` |
231
+ | JavaScript / JSX | `.js`, `.mjs`, `.cjs`, `.jsx` |
232
+ | TypeScript / TSX | `.ts`, `.mts`, `.cts`, `.tsx` |
233
+ | Rust | `.rs` |
234
+ | Go | `.go` |
235
+ | Java | `.java` |
236
+ | C | `.c`, `.h` |
148
237
 
149
- const results = await index.similaritySearch({
150
- query: "validate an authenticated session",
151
- limit: 10,
152
- });
238
+ Indexes named functions, methods, constructors, and supported variable-bound closures with bodies, including nested callables. Anonymous callbacks and bodyless declarations are omitted. No language server or project compiler setup is needed. Macro expansion and runtime behavior are not analyzed; `.h` files are treated as C.
153
239
 
154
- index.close();
155
- ```
240
+ Root and nested `.gitignore` rules apply even to tracked files and without Git. Working-tree refreshes use current rules; committed-only snapshots use the target commit's rules. Refresh removes newly excluded files and discovers newly eligible ones. Explicit `update-files` rejects ignored files.
156
241
 
157
- Exports also include `crossSearch`, `analyzeCohesion`, `JinaEmbeddingProvider`, and standalone functions for index updates and searches.
242
+ Built-in exclusions: `.git`, `.slopdex`, `node_modules`, `dist`, `build`, `coverage`, `vendor`, `generated`, `.venv`, `venv`, `__pycache__`, `.tox`, `.mypy_cache`, `.pytest_cache`, and `target`. Config `include`/`exclude` globs narrow coverage; they cannot override built-in exclusions. Ignore exceptions cannot re-include files beneath an excluded parent directory. Files over 1 MiB are skipped unless `maxFileSize` is raised.
158
243
 
159
- ## Development
244
+ ### Failures and recovery
160
245
 
161
- ```bash
162
- npm run check
163
- ```
246
+ Parse, extraction, read, and file-size failures are saved while healthy callables remain searchable. Inspect them with `slopdex index-errors --format summary`. JSON includes paths, locations, recoverable names, messages, available source, and snapshot provenance. `status` reports `indexingErrorCount` and `failedFileCount`; `functionCount` counts searchable callables.
164
247
 
165
- ## Configuration
248
+ Saved failures trigger stderr warnings, including on cached runs, help, and cross-search targets. `--ignore-errors` silences warnings without clearing records. Updates retry failed files; successful indexing, deletion, or exclusion clears their diagnostics. Version output bypasses diagnostics.
166
249
 
167
- Configuration is optional. Without `.slopdex/config.json`, Slopdex uses OpenAI's `text-embedding-3-large` model with 3072 dimensions and the built-in source exclusions.
250
+ Use the recovery flag named in the error: `--rebuild-on-divergence` for Git history changes, `--force-reindex` for incompatible indexes. For provider/authentication failures, fix the reported configuration. For source-change-during-indexing errors, rerun after edits settle. Exit status is `0` on success, `2` for argument/domain errors, and `1` for other failures (or invocation without a command).
251
+
252
+ ## Configuration
168
253
 
169
- Create `.slopdex/config.json` to change these settings:
254
+ Optional file: `<root>/.slopdex/config.json`. Example using Jina (requires `JINA_API_KEY`):
170
255
 
171
256
  ```json
172
257
  {
@@ -177,4 +262,19 @@ Create `.slopdex/config.json` to change these settings:
177
262
  }
178
263
  ```
179
264
 
180
- Use `OPENAI_API_KEY` for OpenAI and `JINA_API_KEY` for Jina AI. The provider, model, dimensions, and embedding strategy define the index profile. Rebuild the index with `--force-reindex` after changing the profile.
265
+ | Property | Purpose / default |
266
+ | --- | --- |
267
+ | `provider`, `model`, `dimensions` | Embedding settings; defaults are listed in the CLI table. |
268
+ | `summaryModel` | Summary model; initially `gpt-5.6-sol`. |
269
+ | `indexPath` | Index location; `<root>/.slopdex/index.sqlite`. |
270
+ | `include` | Repository-relative glob array; empty/unset includes all supported eligible files. |
271
+ | `exclude` | Additional repository-relative exclusion globs. |
272
+ | `maxFileSize` | Maximum source-file size in bytes; positive integer, default `1048576`. |
273
+ | `embeddingBatchSize` | Embedding inputs per batch; positive integer, default `32`. |
274
+
275
+ Keep keys in the environment (`OPENAI_API_KEY`, `JINA_API_KEY`). Changing the embedding profile requires rebuilding with `--force-reindex`.
276
+
277
+ ## Agent and developer documentation
278
+
279
+ - [Agent skill](.agents/skills/slopdex/SKILL.md): task-oriented CLI guidance for coding agents.
280
+ - [Implementation and library API](docs/implementation.md): internals, programmatic usage, build, and development checks.