{"_id":"@bosun-sh/sounder","_rev":"2-bb85cdc537d98ab04acf5564c0bb6b67","name":"@bosun-sh/sounder","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@bosun-sh/sounder","version":"0.1.0","license":"MIT","_id":"@bosun-sh/sounder@0.1.0","maintainers":[{"name":"ggofri","email":"ignaciojulianramirez@gmail.com"}],"dist":{"shasum":"fd0267aef60565afe31fe304b50169796ddaf63e","tarball":"https://registry.npmjs.org/@bosun-sh/sounder/-/sounder-0.1.0.tgz","fileCount":36,"integrity":"sha512-i8mdtRTMa/ZLZAPgHH/yz/pte7PjYFlkvLh2LTdmG5VcGJclK+/6iyU/mV/7K1YeS5kMkDmMahX/v54k5sXI2w==","signatures":[{"sig":"MEUCIHFZ2EgiYfp/mc8oHgm3AtszdHmaxUqISxOEzqZ/uoIeAiEA722hyafzXb4HL53gRo+eiEr4mT/xzzUPRmTUOWbyaJk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8732253},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.3.9"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"},"./ohtools":{"types":"./dist/ohtools.d.ts","import":"./dist/ohtools.js"}},"private":false,"scripts":{"test":"bun test","build":"bun run clean && bun run build:js && bun run build:dts","check":"biome check .","clean":"rm -rf dist","ci:lint":"bun run check && bun run typecheck","ci:test":"bun test","prepack":"bun run build","prepare":"husky","build:js":"bun build ./src/index.ts ./src/ohtools.ts ./src/cli.ts ./src/mcp.ts --outdir ./dist --target bun --format esm","ci:build":"bun run build && node scripts/npm-pack-dry-run.mjs","test:e2e":"bun test test/e2e.test.ts","validate":"bun run typecheck && bun run test:integration && bun run test:e2e && bun run smoke:ohtools && bun run pack:check && bun run smoke:packed","build:dts":"bun run scripts/build-dts.ts","test:unit":"bun test test/domain.test.ts test/storage.test.ts test/registry.test.ts","typecheck":"bun run scripts/typecheck.ts","ci:prepush":"bun run ci:premerge","pack:check":"bun run scripts/pack-check.ts","ci:premerge":"bun run ci:lint && bun run ci:test && bun run ci:build","publish:npm":"npm publish --access public","validate:ci":"bun run ci:premerge","ci:precommit":"bun run ci:lint && bun run test:unit","ohtools:docs":"bun run scripts/ohtools-docs.ts","ohtools:list":"bun run scripts/ohtools-list.ts","smoke:packed":"bun run scripts/smoke-packed.ts","ohtools:graph":"bun run scripts/ohtools-graph.ts","release:check":"bun run ci:premerge","smoke:ohtools":"bun run ohtools:list && bun run ohtools:docs && bun run ohtools:graph","prepublishOnly":"bun run ci:premerge","release:dry-run":"bun run ci:premerge","test:integration":"bun test test/domain.test.ts test/storage.test.ts test/registry.test.ts"},"_npmUser":{"name":"ggofri","email":"ignaciojulianramirez@gmail.com"},"_npmVersion":"11.12.1","description":"Local-first Sounder Ohtools app for deterministic task and model estimation.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"effect":"^3.21.2","@bosun-sh/ohtools":"^0.1.0","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^9.0.0","@types/bun":"^1.3.3","typescript":"^5.7.2","@biomejs/biome":"latest"},"_npmOperationalInternal":{"tmp":"tmp/sounder_0.1.0_1780530732801_0.7509213317224996","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@bosun-sh/sounder","version":"0.2.0","description":"Local-first Sounder Ohtools app for deterministic task and model estimation.","type":"module","license":"Apache-2.0","author":{"name":"bosun.sh"},"repository":{"type":"git","url":"git+https://github.com/bosun-sh/sounder.git"},"bugs":{"url":"https://github.com/bosun-sh/sounder/issues"},"homepage":"https://github.com/bosun-sh/sounder#readme","keywords":["sounder","estimation","tasks","mcp","ai","agents","bun","typescript"],"private":false,"engines":{"bun":">=1.3.9"},"publishConfig":{"access":"public"},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./ohtools":{"types":"./dist/ohtools.d.ts","import":"./dist/ohtools.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"},"./mcp":{"types":"./dist/mcp.d.ts","import":"./dist/mcp.js"}},"scripts":{"clean":"rm -rf dist","build:js":"bun build ./src/index.ts ./src/ohtools.ts ./src/cli.ts ./src/mcp.ts --outdir ./dist --target bun --format esm","build:dts":"bun run scripts/build-dts.ts","build":"bun run clean && bun run build:js && bun run build:dts","prepack":"bun run build","test":"bun test","test:unit":"bun test test/domain.test.ts test/storage.test.ts test/registry.test.ts","test:integration":"bun test test/domain.test.ts test/storage.test.ts test/registry.test.ts","test:e2e":"bun test test/e2e.test.ts","typecheck":"bun run scripts/typecheck.ts","check":"biome check .","ohtools:list":"bun run scripts/ohtools-list.ts","ohtools:docs":"bun run scripts/ohtools-docs.ts","ohtools:graph":"bun run scripts/ohtools-graph.ts","smoke:ohtools":"bun run ohtools:list && bun run ohtools:docs && bun run ohtools:graph","pack:check":"bun run scripts/pack-check.ts","smoke:packed":"bun run scripts/smoke-packed.ts","ci:lint":"bun run check && bun run typecheck","ci:build":"bun run build && node scripts/npm-pack-dry-run.mjs","ci:test":"bun test","ci:precommit":"bun run ci:lint && bun run test:unit","ci:premerge":"bun run ci:lint && bun run ci:test && bun run ci:build","ci:prepush":"bun run ci:premerge","validate":"bun run typecheck && bun run test:integration && bun run test:e2e && bun run smoke:ohtools && bun run pack:check && bun run smoke:packed","validate:ci":"bun run ci:premerge","release:check":"bun run ci:premerge","release:dry-run":"bun run ci:premerge","prepublishOnly":"bun run ci:premerge","prepare":"husky","publish:npm":"npm publish --access public"},"dependencies":{"@bosun-sh/ohtools":"^0.2.0","@modelcontextprotocol/sdk":"^1.29.0","effect":"^3.21.2"},"devDependencies":{"@biomejs/biome":"^2.4.16","@types/bun":"^1.3.3","husky":"^9.0.0","typescript":"^5.7.2"},"gitHead":"c980fb69b61677246f2f34c59fa674770b1064d7","_id":"@bosun-sh/sounder@0.2.0","_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-uhNgBAJAP7g1ta5KFPeruiQ/XvopADKf6fksOhkXwGGL5V94716istx1acs2tn6N5P1nLFqv9Jb7cakCpus6hQ==","shasum":"906c442d151f99bd1db22dc6a8a3c8932eab1757","tarball":"https://registry.npmjs.org/@bosun-sh/sounder/-/sounder-0.2.0.tgz","fileCount":36,"unpackedSize":8741253,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCCekMRn7ISzDHra9INFyFQWBf3HzRUy/m7hqrgbk9cPQIgD8T5HvqCS9upy0fjlIrujpovnoUF2j5wavE/aR7J7+I="}]},"_npmUser":{"name":"ggofri","email":"ignaciojulianramirez@gmail.com"},"directories":{},"maintainers":[{"name":"ggofri","email":"ignaciojulianramirez@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sounder_0.2.0_1782690144980_0.22282197652318447"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-03T23:52:12.643Z","modified":"2026-06-28T23:42:25.307Z","0.1.0":"2026-06-03T23:52:12.985Z","0.2.0":"2026-06-28T23:42:25.168Z"},"license":"Apache-2.0","description":"Local-first Sounder Ohtools app for deterministic task and model estimation.","maintainers":[{"name":"ggofri","email":"ignaciojulianramirez@gmail.com"}],"readme":"# @bosun-sh/sounder\n\n[![CI](https://github.com/bosun-sh/sounder/actions/workflows/ci.yml/badge.svg)](https://github.com/bosun-sh/sounder/actions/workflows/ci.yml)\n[![npm version](https://img.shields.io/npm/v/@bosun-sh/sounder.svg)](https://www.npmjs.com/package/@bosun-sh/sounder)\n[![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-blue.svg)](https://github.com/bosun-sh/sounder/blob/main/LICENSE)\n\nLocal-first library and MCP server for deterministic task and model estimation, scoped feedback learning, inventory-driven model recommendations, and subagent recommendations.\n\n> **Note:** sounder is a library + MCP server — it has no CLI `bin` entrypoint by design. Consume it as a library or mount it as an MCP server in your agent host.\n\n## Installation\n\n```bash\nbun add @bosun-sh/sounder\n```\n\n## Quickstart\n\n### Library usage\n\n```typescript\nimport { createSounderApp, sounderPlugin, sounderToolIds } from \"@bosun-sh/sounder\";\n\n// Create a fully-wired Sounder app (SQLite-backed, local-first)\nconst app = await createSounderApp();\n\n// Estimate a task by Fibonacci bucket\nconst result = await app.run(\"sounder.estimate.task\", {\n  description: \"Implement OAuth login flow\",\n});\n\n// Record feedback after a task completes\nawait app.run(\"sounder.feedback.task\", {\n  toolId: \"sounder.estimate.task\",\n  outcome: \"completed\",\n  actual: 5,\n});\n\n// Recommend a model for a given task\nconst recommendation = await app.run(\"sounder.recommend.model\", {\n  description: \"Summarize a long legal document\",\n  tier: \"mid\",\n});\n```\n\n### MCP server usage\n\nMount sounder as an MCP tool server in your agent host:\n\n```typescript\nimport { createSounderMcpApp } from \"@bosun-sh/sounder/mcp\";\n\nconst mcpApp = await createSounderMcpApp();\n// Pass mcpApp to your MCP host / stdio transport\n```\n\n### Ohtools default app\n\n```typescript\nimport sounder from \"@bosun-sh/sounder/ohtools\";\n\n// Pre-built default app instance — zero config required\nconst result = await sounder.run(\"sounder.inventory.list\", {});\n```\n\n## Features\n\n### Tools\n\n| Tool ID | Description |\n|---|---|\n| `sounder.estimate.task` | Estimate task effort using Fibonacci bucketing and learned weights |\n| `sounder.estimate.model` | Estimate token/cost for a model invocation |\n| `sounder.feedback.task` | Record task outcome to improve future estimates |\n| `sounder.feedback.model` | Record model outcome feedback |\n| `sounder.recommend.model` | Recommend the best model for a task given tier and inventory |\n| `sounder.recommend.subagent` | Recommend subagents for a composite task |\n| `sounder.history.list` | Query estimation history |\n| `sounder.inventory.list` | List available models in inventory |\n| `sounder.inventory.upsert` | Add or update a model in the inventory |\n\n### Exports\n\n| Import path | What it provides |\n|---|---|\n| `@bosun-sh/sounder` | `createSounderApp`, `createSounderCliApp`, `createSounderMcpApp`, `sounderPlugin`, `sounderToolIds`, schemas, types |\n| `@bosun-sh/sounder/ohtools` | Default pre-built app instance |\n| `@bosun-sh/sounder/mcp` | `createSounderMcpApp` for MCP server mounting |\n| `@bosun-sh/sounder/cli` | `createSounderCliApp` for CLI adapter |\n\n### Plugin integration\n\nUse the plugin directly with your own Ohtools host:\n\n```typescript\nimport { sounderPlugin, sounderToolIds } from \"@bosun-sh/sounder\";\n\n// Register the sounder plugin into your own ohtools host\nmyOhtoolsHost.register(sounderPlugin);\n```\n\n## Development\n\n```bash\ngit clone https://github.com/bosun-sh/sounder.git\ncd sounder\nbun install\n\nbun test               # full test suite\nbun run ci:lint        # lint + typecheck\nbun run ci:build       # build + pack dry-run\nbun run ci:premerge    # full gate — must be green before PR\n```\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for local setup, commit conventions, and pull request process.\n\n## License\n\nApache-2.0 — see [LICENSE](LICENSE).\n","readmeFilename":"README.md","homepage":"https://github.com/bosun-sh/sounder#readme","keywords":["sounder","estimation","tasks","mcp","ai","agents","bun","typescript"],"repository":{"type":"git","url":"git+https://github.com/bosun-sh/sounder.git"},"author":{"name":"bosun.sh"},"bugs":{"url":"https://github.com/bosun-sh/sounder/issues"}}