{"_id":"@accidentally-awesome-labs/spatula","_rev":"2-59846b79514b4f325ae975994956d9b4","name":"@accidentally-awesome-labs/spatula","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@accidentally-awesome-labs/spatula","version":"0.1.0","license":"MIT","_id":"@accidentally-awesome-labs/spatula@0.1.0","maintainers":[{"name":"salarsayyad","email":"salar.sayyad@gmail.com"}],"homepage":"https://github.com/accidentally-awesome-labs/spatula#readme","bugs":{"url":"https://github.com/accidentally-awesome-labs/spatula/issues"},"bin":{"spatula":"dist/index.js"},"dist":{"shasum":"a3a495dfcd57c511d01b36950d4ae517e62fd22f","tarball":"https://registry.npmjs.org/@accidentally-awesome-labs/spatula/-/spatula-0.1.0.tgz","fileCount":7,"integrity":"sha512-YaRu1DHCamxzLhNt4YE58Jy//5lGncjT8sCllRSBOroSXNDEuXnQDqa/jDYLucDy/3N7a097bW3G3PTwdwBxiw==","signatures":[{"sig":"MEUCIQCEfaIo5yTiijyNPv2pWtNQgBfCREtFIkRHEIdVgIt7oQIgCM0TycPhuhjaYS9RjxPYahjGoqRMEPblqpNpl939vBk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@accidentally-awesome-labs%2fspatula@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":542641},"main":"./dist/index.cjs","type":"module","_from":"file:/home/runner/work/_temp/spatula-npm-packs/accidentally-awesome-labs-spatula-0.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsx watch src/index.tsx","lint":"eslint src/","test":"vitest run","build":"tsup --config tsup.config.ts","clean":"rm -rf dist .turbo *.tsbuildinfo","test:ci":"vitest run --exclude='**/cli-binary*' --exclude='**/pipeline-real*'","lint:fix":"eslint src/ --fix","test:all":"vitest run --exclude='**/cli-binary*'","test:tier1":"vitest run tests/unit tests/integration tests/e2e/contracts-and-resilience.test.ts tests/e2e/resource-cleanup.test.ts tests/e2e/workflow.test.ts tests/e2e/tui-rendering.test.ts","test:tier2":"vitest run --exclude='**/cli-binary*' --exclude='**/pipeline-real*'","test:tier3":"tsx scripts/test-tiers.ts --tier=3","test:tier4":"tsx scripts/test-tiers.ts --tier=4","test:tier5":"tsx scripts/test-tiers.ts --tier=5","test:watch":"vitest","test:binary":"vitest run tests/e2e/cli-binary.test.ts","test:tier5a":"tsx scripts/test-tiers.ts --tier=5a","test:tier5b":"tsx scripts/test-tiers.ts --tier=5b"},"_npmUser":{"name":"salarsayyad","email":"salar.sayyad@gmail.com"},"_resolved":"/home/runner/work/_temp/spatula-npm-packs/accidentally-awesome-labs-spatula-0.1.0.tgz","_integrity":"sha512-YaRu1DHCamxzLhNt4YE58Jy//5lGncjT8sCllRSBOroSXNDEuXnQDqa/jDYLucDy/3N7a097bW3G3PTwdwBxiw==","repository":{"url":"git+https://github.com/accidentally-awesome-labs/spatula.git","type":"git","directory":"apps/cli"},"_npmVersion":"12.0.1","description":"Command-line interface and TUI for Spatula — AI-powered intelligent web crawling.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ink":"^5.1.0","zod":"^3.24.0","yaml":"^2.8.3","react":"^18.3.1","yargs":"^17.7.2","zustand":"^5.0.0","playwright":"^1.58.2","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","@accidentally-awesome-labs/spatula-db":"0.1.0","@accidentally-awesome-labs/spatula-core":"0.1.0","@accidentally-awesome-labs/spatula-shared":"0.1.0"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","tsup":"^8.3.0","bullmq":"^5.80.2","vitest":"^3.2.6","ioredis":"^5.10.0","typescript":"^5.7.0","@types/node":"^25.3.5","@types/react":"^18.3.18","@types/yargs":"^17.0.35","ink-testing-library":"^4.0.0","@accidentally-awesome-labs/spatula-api":"0.1.0","@accidentally-awesome-labs/spatula-queue":"0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/spatula_0.1.0_1784125189718_0.551856198402924","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@accidentally-awesome-labs/spatula","version":"0.1.1","description":"Command-line interface and TUI for Spatula — AI-powered intelligent web crawling.","license":"MIT","repository":{"type":"git","url":"git+https://github.com/accidentally-awesome-labs/spatula.git","directory":"apps/cli"},"homepage":"https://github.com/accidentally-awesome-labs/spatula#readme","bugs":{"url":"https://github.com/accidentally-awesome-labs/spatula/issues"},"type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"engines":{"node":">=22"},"publishConfig":{"access":"public","provenance":true},"bin":{"spatula":"dist/index.js"},"dependencies":{"ink":"^5.1.0","ink-spinner":"^5.0.0","ink-text-input":"^6.0.0","playwright":"^1.58.2","react":"^18.3.1","yaml":"^2.8.3","yargs":"^17.7.2","zod":"^3.24.0","zustand":"^5.0.0","@accidentally-awesome-labs/spatula-db":"0.1.1","@accidentally-awesome-labs/spatula-core":"0.1.1","@accidentally-awesome-labs/spatula-shared":"0.1.1"},"devDependencies":{"@types/node":"^25.3.5","@types/react":"^18.3.18","@types/yargs":"^17.0.35","ink-testing-library":"^4.0.0","bullmq":"^5.80.2","ioredis":"^5.10.0","tsup":"^8.3.0","tsx":"^4.19.0","typescript":"^5.7.0","vitest":"^3.2.6","@accidentally-awesome-labs/spatula-queue":"0.1.1","@accidentally-awesome-labs/spatula-api":"0.1.1"},"scripts":{"build":"tsup --config tsup.config.ts","dev":"tsx watch src/index.tsx","lint":"eslint src/","lint:fix":"eslint src/ --fix","test":"vitest run","test:watch":"vitest","test:tier1":"vitest run tests/unit tests/integration tests/e2e/contracts-and-resilience.test.ts tests/e2e/resource-cleanup.test.ts tests/e2e/workflow.test.ts tests/e2e/tui-rendering.test.ts","test:tier2":"vitest run --exclude='**/cli-binary*' --exclude='**/pipeline-real*'","test:tier3":"tsx scripts/test-tiers.ts --tier=3","test:tier4":"tsx scripts/test-tiers.ts --tier=4","test:tier5a":"tsx scripts/test-tiers.ts --tier=5a","test:tier5b":"tsx scripts/test-tiers.ts --tier=5b","test:tier5":"tsx scripts/test-tiers.ts --tier=5","test:all":"vitest run --exclude='**/cli-binary*'","test:binary":"vitest run tests/e2e/cli-binary.test.ts","test:ci":"vitest run --exclude='**/cli-binary*' --exclude='**/pipeline-real*'","clean":"rm -rf dist .turbo *.tsbuildinfo"},"_id":"@accidentally-awesome-labs/spatula@0.1.1","_integrity":"sha512-njFBlEKsHFxlJ/1qbiGVMeSh1ZNuL+pV53IzLKPUdK16Vp7aG9k0bG2s4mwYPerW08nZciJo4Ky3M4ESmLNJXw==","_resolved":"/home/runner/work/_temp/spatula-npm-packs/accidentally-awesome-labs-spatula-0.1.1.tgz","_from":"file:/home/runner/work/_temp/spatula-npm-packs/accidentally-awesome-labs-spatula-0.1.1.tgz","_nodeVersion":"22.23.1","_npmVersion":"12.0.1","dist":{"integrity":"sha512-njFBlEKsHFxlJ/1qbiGVMeSh1ZNuL+pV53IzLKPUdK16Vp7aG9k0bG2s4mwYPerW08nZciJo4Ky3M4ESmLNJXw==","shasum":"17d6f7d2b0783ea6b1f2a5d2d79aad43b44811df","tarball":"https://registry.npmjs.org/@accidentally-awesome-labs/spatula/-/spatula-0.1.1.tgz","fileCount":7,"unpackedSize":552231,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@accidentally-awesome-labs%2fspatula@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCnjiLPMf4halq5r0G99nX2nWL6hwV7XkBD72Bb4bOMpQIgNRYZEVJ9W3HT+PjnBhpTIAtBumvhBicMOtSTryrH0rc="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b0fd4cd5-0bd3-4d78-916f-e0b9dbebf3a0"}},"directories":{},"maintainers":[{"name":"salarsayyad","email":"salar.sayyad@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/spatula_0.1.1_1784144344531_0.2263278317165538"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-15T14:19:49.564Z","modified":"2026-07-15T19:39:04.954Z","0.1.0":"2026-07-15T14:19:49.877Z","0.1.1":"2026-07-15T19:39:04.690Z"},"bugs":{"url":"https://github.com/accidentally-awesome-labs/spatula/issues"},"license":"MIT","homepage":"https://github.com/accidentally-awesome-labs/spatula#readme","repository":{"type":"git","url":"git+https://github.com/accidentally-awesome-labs/spatula.git","directory":"apps/cli"},"description":"Command-line interface and TUI for Spatula — AI-powered intelligent web crawling.","maintainers":[{"name":"salarsayyad","email":"salar.sayyad@gmail.com"}],"readme":"# @accidentally-awesome-labs/spatula\n\nSpatula CLI — AI-powered intelligent web crawling, terminal-first.\n\n```bash\nnpm install -g @accidentally-awesome-labs/spatula --allow-scripts=better-sqlite3\nspatula             # guided setup, safe sample, crawl, and result preview\n```\n\nThe guided flow stores credentials in a user-only config file, asks before the\nPlaywright Chromium download, verifies that the browser launches, estimates\ncost, and stops with actionable remediation rather than silently producing an\nempty dataset.\n\nFor a manual workflow, use `spatula setup`, `spatula init <url>`, and\n`spatula run`. Structured extraction is required by default; use\n`spatula run --crawl-only` to explicitly archive pages without an LLM.\n\n## Stability\n\n`@accidentally-awesome-labs/spatula` is one of three public, semver-stable Spatula packages (alongside `@accidentally-awesome-labs/spatula-client` and `@accidentally-awesome-labs/spatula-core-types`). See [`docs/compat-policy.md`](https://github.com/accidentally-awesome-labs/spatula/blob/main/docs/compat-policy.md) for the full SDK ↔ server ↔ core-types compatibility matrix.\n\nThe full command surface, flag set, and config file shape (`spatula.yaml`) are part of the public contract and follow [`docs/deprecation-policy.md`](https://github.com/accidentally-awesome-labs/spatula/blob/main/docs/deprecation-policy.md) for breaking changes.\n\n## Modes\n\nThe CLI ships four interactive modes, all built on Ink (React-for-terminals):\n\n- **Conversational** — describe your data in plain language; the LLM proposes a job config.\n- **Dashboard** — live status across runs (page budget, LLM cost, quality scores).\n- **Review** — accept/modify schema-evolution actions before they apply.\n- **Explorer** — paginate entities + extracted fields with provenance.\n\n## Publishing\n\n`@accidentally-awesome-labs/spatula` is built via [`tsup`](https://tsup.egoist.dev) producing a dual ESM + CJS output with TypeScript declaration files:\n\n```bash\npnpm --filter @accidentally-awesome-labs/spatula build   # tsup --config tsup.config.ts → dist/\npnpm --filter @accidentally-awesome-labs/spatula pack    # produces an installable .tgz\n```\n\nThe published tarball contents are governed by the `files` allowlist in `package.json` (not `.npmignore`). Provenance attestation (`--provenance`) and trusted publishing via GitHub OIDC are wired in `.github/workflows/release.yml`.\n\n### No postinstall script\n\n`@accidentally-awesome-labs/spatula` deliberately ships **no `postinstall` script**. The install command explicitly allows only the native SQLite dependency's build script. Playwright browsers (needed for the headless crawler) are installed via the explicit `spatula setup` command. This avoids surprising browser downloads during package installation, makes the install reproducible in CI, and lets users opt out of Playwright if they only need Firecrawl-backed crawls.\n\n```bash\nspatula setup                    # asks before downloading Chromium\nspatula setup --install-browser  # install without the browser confirmation\nspatula setup --skip-browser     # configure a Firecrawl-only environment\n```\n\n## Engines\n\n- Node.js ≥ 22 (LTS)\n- macOS, Linux, Windows via WSL — see [`docs/support-matrix.md`](https://github.com/accidentally-awesome-labs/spatula/blob/main/docs/support-matrix.md)\n\n## Compatibility\n\n`@accidentally-awesome-labs/spatula` may speak to any Spatula server within the same major version. Major-version mismatch triggers a clear error at first request via the version probe in `@accidentally-awesome-labs/spatula-client` (see `docs/compat-policy.md`).\n","readmeFilename":"README.md"}