diff --git a/README.md b/README.md
index 9269771..7c7bb18 100644
--- a/README.md
+++ b/README.md
@@ -20,7 +20,7 @@ If running directly with Node.js, install dependencies and make sure `firefox` a
```bash
npm install
-node index.js exec https://example.com --js='return document.title'
+node src/index.js exec https://example.com --js='return document.title'
```
## Glimpse CLI
@@ -253,16 +253,16 @@ node test/smoke.js snapshot js
Useful local commands:
```bash
-node index.js snapshot 'data:text/html,
HelloHello
'
-node index.js exec 'data:text/html,Hello' --js='return document.title'
-node index.js screenshot 'data:text/html,Hello' --output=/tmp/page.png
-node index.js reader 'https://example.com/article'
+node src/index.js snapshot 'data:text/html,HelloHello
'
+node src/index.js exec 'data:text/html,Hello' --js='return document.title'
+node src/index.js screenshot 'data:text/html,Hello' --output=/tmp/page.png
+node src/index.js reader 'https://example.com/article'
```
## Project Structure
-- `index.js` - `glimpse` CLI with subcommands, including Firefox Reader View extraction and provider-backed search
-- `driver.js` - Firefox WebDriver creation and geckodriver resolution
-- `kagi.js` - reusable Kagi search provider implementation
+- `src/index.js` - `glimpse` CLI with subcommands, including Firefox Reader View extraction and provider-backed search
+- `src/driver.js` - Firefox WebDriver creation and geckodriver resolution
+- `src/providers/kagi.js` - reusable Kagi search provider implementation
- `flake.nix` - Nix dev shell, package, wrappers, and apps
- `KAGI.md` - Kagi-specific notes
diff --git a/flake.nix b/flake.nix
index 4206703..2f36fd0 100644
--- a/flake.nix
+++ b/flake.nix
@@ -42,7 +42,7 @@
version = "1.0.0";
src = source;
- npmDepsHash = "sha256-jtwQb8TDdvzyeMBN/ubUQWRtBIJuO/QDtKW9ep19N6Q=";
+ npmDepsHash = "sha256-IWzSvrGgkoR6gg7P1m/mwakGOOKmm2OFtBirKgE09Ds=";
dontNpmBuild = true;
nativeBuildInputs = [ pkgs.makeWrapper ];
diff --git a/package-lock.json b/package-lock.json
index 2113407..1e75ee0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,7 +14,7 @@
"turndown": "^7.2.4"
},
"bin": {
- "glimpse": "index.js"
+ "glimpse": "src/index.js"
}
},
"node_modules/@bazel/runfiles": {
diff --git a/package.json b/package.json
index f272030..be7077e 100644
--- a/package.json
+++ b/package.json
@@ -3,13 +3,13 @@
"version": "1.0.0",
"description": "",
"type": "module",
- "main": "index.js",
+ "main": "src/index.js",
"bin": {
- "glimpse": "./index.js"
+ "glimpse": "./src/index.js"
},
"scripts": {
"lint": "oxlint --ignore-pattern node_modules --ignore-pattern .direnv .",
- "start": "node index.js",
+ "start": "node src/index.js",
"test": "node test/smoke.js",
"test:smoke": "node test/smoke.js",
"test:list": "node test/smoke.js --list",
diff --git a/driver.js b/src/driver.js
similarity index 100%
rename from driver.js
rename to src/driver.js
diff --git a/index.js b/src/index.js
similarity index 99%
rename from index.js
rename to src/index.js
index 33463a0..c21a59d 100755
--- a/index.js
+++ b/src/index.js
@@ -1,7 +1,7 @@
#!/usr/bin/env node
import { createDriver } from "./driver.js";
-import { searchKagi } from "./kagi.js";
+import { searchKagi } from "./providers/kagi.js";
import { readFileSync, writeFileSync } from "node:fs";
import TurndownService from "turndown";
diff --git a/kagi.js b/src/providers/kagi.js
similarity index 97%
rename from kagi.js
rename to src/providers/kagi.js
index 3962c78..26c50b8 100644
--- a/kagi.js
+++ b/src/providers/kagi.js
@@ -1,4 +1,4 @@
-import { createDriver } from "./driver.js";
+import { createDriver } from "../driver.js";
export class SearchProviderError extends Error {
constructor(code, message) {
diff --git a/test/smoke.js b/test/smoke.js
index fc41f35..c462480 100755
--- a/test/smoke.js
+++ b/test/smoke.js
@@ -6,7 +6,7 @@ import { join } from "node:path";
import { spawnSync } from "node:child_process";
import assert from "node:assert/strict";
-const cliPath = new URL("../index.js", import.meta.url).pathname;
+const cliPath = new URL("../src/index.js", import.meta.url).pathname;
const tempDir = mkdtempSync(join(tmpdir(), "glimpse-smoke-"));
const filters = process.argv.slice(2).filter((arg) => arg !== "--list");
const shouldList = process.argv.includes("--list");