{"_id":"@cagataycali/strands-tools","name":"@cagataycali/strands-tools","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@cagataycali/strands-tools","version":"0.1.0","description":"TypeScript/browser tools + React hooks for Strands Agents. Ship agent UIs fast — manage_messages, manage_tools, mesh, dom, github, and 25+ more, plus useAgent / useAgents hooks.","type":"module","license":"MIT","author":{"name":"Çağatay Çalı","email":"cagatay.cali@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/cagataycali/strands-tools-typescript.git"},"homepage":"https://github.com/cagataycali/strands-tools-typescript","bugs":{"url":"https://github.com/cagataycali/strands-tools-typescript/issues"},"keywords":["strands-agents","ai","agent","tools","browser","react","hooks","llm","anthropic","openai","bedrock","typescript"],"sideEffects":false,"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"},"./tools":{"types":"./dist/tools/index.d.ts","import":"./dist/tools/index.js","require":"./dist/tools/index.cjs"},"./hooks":{"types":"./dist/hooks/index.d.ts","import":"./dist/hooks/index.js","require":"./dist/hooks/index.cjs"},"./lib":{"types":"./dist/lib/index.d.ts","import":"./dist/lib/index.js","require":"./dist/lib/index.cjs"},"./providers":{"types":"./dist/providers/index.d.ts","import":"./dist/providers/index.js","require":"./dist/providers/index.cjs"},"./types":{"types":"./dist/types/index.d.ts","import":"./dist/types/index.js","require":"./dist/types/index.cjs"},"./tools/*":{"types":"./dist/tools/*.d.ts","import":"./dist/tools/*.js","require":"./dist/tools/*.cjs"},"./hooks/*":{"types":"./dist/hooks/*.d.ts","import":"./dist/hooks/*.js","require":"./dist/hooks/*.cjs"}},"scripts":{"build":"tsup","build:watch":"tsup --watch","typecheck":"tsc --noEmit","clean":"rm -rf dist","prepack":"npm run build"},"peerDependencies":{"@strands-agents/sdk":">=1.0.0","zod":">=4.0.0"},"peerDependenciesMeta":{"react":{"optional":true},"graphology":{"optional":true},"graphology-communities-louvain":{"optional":true},"graphology-shortest-path":{"optional":true},"graphology-traversal":{"optional":true},"idb-keyval":{"optional":true},"@webcontainer/api":{"optional":true},"@huggingface/transformers":{"optional":true}},"optionalDependencies":{"@huggingface/transformers":">=4.0.0","@webcontainer/api":">=1.5.0","graphology":">=0.25.0","graphology-communities-louvain":">=2.0.0","graphology-shortest-path":">=2.0.0","graphology-traversal":">=0.3.0","idb-keyval":">=6.2.0","react":">=18.0.0"},"devDependencies":{"@strands-agents/sdk":"^1.1.0","@types/node":"^22.0.0","@types/react":"^18.3.0","@webcontainer/api":"^1.6.0","@webgpu/types":"^0.1.69","graphology":"^0.26.0","graphology-communities-louvain":"^2.0.2","graphology-shortest-path":"^2.1.0","graphology-traversal":"^0.3.1","idb-keyval":"^6.2.2","react":"^18.3.0","tsup":"^8.3.0","typescript":"^5.6.0","zod":"^4.1.0"},"publishConfig":{"access":"public"},"_id":"@cagataycali/strands-tools@0.1.0","gitHead":"f51fb792e4d9c16d7ad1d8365016df236ae63cc8","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-sj7UPJH3sxWMHAAqTLKPLYo6zb/NltGuy94KU5LhQ4sSGdymspQT6DlmdzFXHtgzO4cMVcF5h1Z9hdjUsJKHqw==","shasum":"efb468e23dcbb55c0c46bd607ac6a1e4f609bae2","tarball":"https://registry.npmjs.org/@cagataycali/strands-tools/-/strands-tools-0.1.0.tgz","fileCount":695,"unpackedSize":9376086,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIC8oJCCqBY33Wecrr6IKRXKhuO/+M2j7H2JmXestwUQbAiAJfE0zlMwueI0wHtTXpm0vzPiqepVOhK+htGfZ/7IF0g=="}]},"_npmUser":{"name":"cagataycali","email":"cagataycali@icloud.com"},"directories":{},"maintainers":[{"name":"cagataycali","email":"cagataycali@icloud.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/strands-tools_0.1.0_1778448229351_0.6357895023484479"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-10T21:23:49.238Z","0.1.0":"2026-05-10T21:23:49.610Z","modified":"2026-05-10T21:23:49.824Z"},"maintainers":[{"name":"cagataycali","email":"cagataycali@icloud.com"}],"description":"TypeScript/browser tools + React hooks for Strands Agents. Ship agent UIs fast — manage_messages, manage_tools, mesh, dom, github, and 25+ more, plus useAgent / useAgents hooks.","homepage":"https://github.com/cagataycali/strands-tools-typescript","keywords":["strands-agents","ai","agent","tools","browser","react","hooks","llm","anthropic","openai","bedrock","typescript"],"repository":{"type":"git","url":"git+https://github.com/cagataycali/strands-tools-typescript.git"},"author":{"name":"Çağatay Çalı","email":"cagatay.cali@gmail.com"},"bugs":{"url":"https://github.com/cagataycali/strands-tools-typescript/issues"},"license":"MIT","readme":"# @cagataycali/strands-tools\n\n**TypeScript/browser tools + React hooks for [Strands Agents](https://github.com/strands-agents/strands-sdk-ts).** Ship agent UIs fast.\n\nThe TS/browser counterpart of my [strands-agents/tools](https://github.com/strands-agents/tools) Python package: 30+ drop-in tools and a full `useAgent` / `useAgents` hook set so you can build agent-powered chat UIs in minutes instead of weeks.\n\n## Install\n\n```bash\nnpm install @cagataycali/strands-tools @strands-agents/sdk zod\n# for React hooks:\nnpm install react idb-keyval\n```\n\n## What you get\n\n### 🧰 30+ tools\n\n**Agent self-management**\n- `manage_messages` — trim/compact/drop/stats your own context window\n- `manage_tools` — enable/disable/list/disable_group tools at runtime\n- `self-modify` — agent can `create_tool`, `update_self_prompt`, `add_context`\n\n**Coordination**\n- `mesh` — BroadcastChannel cross-tab agent coordination (invoke/broadcast/ring)\n- `multi-agent` — spawn/kill/invoke/broadcast to sibling agents in-tab\n- `npm` — load ANY npm package via esm.sh from the browser, fallback to WebContainer for Node-only packages\n\n**Browser-native superpowers**\n- `dom` — query/mutate/observe the agent's own page\n- `webcontainer` — full Node.js runtime in the browser (npm install, dev servers)\n- `webgpu` — WGSL compute shaders + image kernels + benchmark\n- `network-intercept` — log/block/mock/delay/modify fetch + XHR + WebSocket\n- `offscreen-canvas` — render graphics off the main thread (charts, badges, sprite sheets)\n- `file-system` — real local disk (File System Access API)\n- `virtual-cursor` — visible agent-controlled cursor overlay for demos\n\n**Media & ML**\n- `transformers-js` — on-device ML (Whisper, SpeechT5, Moondream, DINOv3, MiniLM, Florence-2, 1200+ models)\n- `vision` — screenshot + camera + image analysis\n- `streaming-media` — camera/mic/screen → Transformers.js with UI overlay\n- `audio` — speech synthesis + recognition\n- `openai-image` — DALL-E / gpt-image-1\n- `qr` — generate + scan QR codes\n\n**Persistence & knowledge**\n- `memory` — IndexedDB key-value memory\n- `knowledge-graph` — graphology-backed entity/relation graph with BFS, Dijkstra, Louvain communities\n- `gallery` — save/recall rendered UI panels\n\n**Research**\n- `github` — GraphQL v4 against the GitHub API (repos, issues, PRs, search, everything)\n- `time-tools` — word count, timestamps, search-replace, UI config\n\n**System**\n- `scheduler` — recurring + one-time tasks, persisted to IDB, rehydrates on boot\n- `notification` — native Notification API\n- `geolocation` — browser geolocation\n- `telegram` — Telegram bot messaging\n- `clipboard` — read/write clipboard\n- `panel` — open/close UI panels declaratively\n- `core` — `render_ui`, `javascript_eval`, `storage_*`, `fetch_url`\n\n### 🪝 React hooks\n\n- **`useAgent`** — the core: one Agent instance, IDB persistence per thread, streaming, cancellation, auto self-heal on context overflow, message mgmt, event-bus integration, metrics, regenerate\n- **`useAgents`** — multi-agent registry for spawning sibling agents in the same tab\n- `useMesh` — reactive peer list + ring context via BroadcastChannel\n- `useEventBus` — subscribe to the unified event stream (task/scheduler/telegram/webhook/tool/ambient/mesh/error)\n- `useThreads` — multi-conversation persistence with rename/pin/delete\n- `useUserActivity` — typing/mouse/scroll/idle/battery/network/orientation/visibility tracking for dynamic context\n- `useBookmarks` — persistent message bookmarks\n- `useAmbient` — autonomous idle-time agent loop with `[AMBIENT_DONE]` signal\n- `useTaskListener` — listen for scheduled task fires\n- `useVoiceCommand` — continuous SpeechRecognition with trigger phrases\n- `useKeyboardShortcuts` — declarative keybind registration\n- `useTheme` — dark/light with `data-theme` sync\n- `useSettings` — localStorage + cross-tab sync\n- `useWebRTC` — peer-to-peer data channels with heartbeat + backoff reconnect\n\n### 📚 Helper libraries (`/lib`)\n\n- `buildSystemPrompt` — dynamic, context-rich system prompts with tool hints\n- `toDisplayMessages` / `serializeMessages` — SDK ↔ UI message conversion\n- `estimateTotalTokens` / `shouldSummarize` — rolling-summary heuristics\n- `mesh` / `MeshImpl` — cross-tab coordination singleton\n- `turn-log` — 200-turn continuous memory ring buffer\n- `event-bus` — unified agent activity stream with sessionStorage persistence\n- `cost-estimator` — USD + context window per provider+model\n- `webrtc-mesh` — RTCPeerConnection-based peer mesh with signaling via BC\n- `agent-registry` — in-memory multi-agent registry\n\n### 🔌 Model providers (`/providers`)\n\nLazy-loaded factory for: Anthropic, OpenAI, Google Gemini, AWS Bedrock, Vercel AI SDK (with 20+ providers).\n\n## Usage\n\n### Minimum viable chat UI\n\n```tsx\nimport { useAgent } from '@cagataycali/strands-tools/hooks'\nimport { GITHUB_TOOLS, MEMORY_TOOLS } from '@cagataycali/strands-tools/tools'\n\nfunction Chat({ settings }) {\n  const agent = useAgent(settings, 'my-thread', [\n    ...GITHUB_TOOLS,\n    ...MEMORY_TOOLS,\n  ])\n\n  return (\n    <div>\n      {agent.getMessages().map((m, i) => <div key={i}>{m.role}: {m.content}</div>)}\n      <input onKeyDown={e => {\n        if (e.key === 'Enter') {\n          agent.send(e.currentTarget.value)\n          e.currentTarget.value = ''\n        }\n      }} />\n    </div>\n  )\n}\n```\n\n### Everything at once\n\n```tsx\nimport { useAgent, useAgents, useMesh, useThreads } from '@cagataycali/strands-tools/hooks'\nimport { buildTools, TOOL_GROUPS } from '@cagataycali/strands-tools/tools'\n\nconst tools = buildTools(settings) // respects settings.enableTools etc.\nconst agent = useAgent(settings, threads.storageKey, tools)\nconst siblings = useAgents(settings)\nconst { peers, ring } = useMesh()\n```\n\n### Granular imports (tree-shaking friendly)\n\n```ts\nimport { githubSearchReposTool, githubGetRepoTool } from '@cagataycali/strands-tools/tools/github'\nimport { useAgent } from '@cagataycali/strands-tools/hooks/useAgent'\nimport { buildSystemPrompt } from '@cagataycali/strands-tools/lib/system-prompt'\n```\n\n## Philosophy\n\n- **Two paths, unified.** Some tools run browser-native (lodash, date-fns, zod). Some need Node (sharp, sqlite3, express). The `npm` tool auto-routes.\n- **Agent self-management is first-class.** `manage_messages`, `manage_tools`, and `self-modify` let the agent prune its own context, load capabilities at runtime, and evolve its system prompt.\n- **Multi-agent by design.** `useAgents` + `mesh` + `multi-agent` tools = one tab can host many coordinating agents, each with its own history.\n- **Tree-shake aggressively.** Every tool and hook is a leaf import. Use only what you need.\n- **Browser-native.** No backend required. Runs on GitHub Pages, Vercel, anywhere that serves static files.\n\n## Architecture\n\n`useAgent` owns the SDK's `Agent` instance. The SDK's `agent.messages` IS the conversation state — no duplicate React state to keep in sync. `agent.stream()` handles everything: user msg append, model call, tool execution, assistant msg append, cancellation via `AbortSignal`.\n\nPer-thread persistence to IndexedDB (`careless-thread-{id}`). Auto-heals context overflow by dropping older half (preserving `toolUse ↔ toolResult` pairs) and retrying once. Proactive warn when >80% of context window via `shouldSummarize`.\n\n## Compatibility\n\n- **Modern browsers only** (Chrome/Edge 113+, Safari 18+, Firefox with `dom.webgpu.enabled`)\n- **React 18+** for hooks\n- **Strands Agents SDK 1.x**\n- **Zod 4.x**\n\n## Status\n\n🚧 **v0.1.0 scaffold** — extracted from the [careless](https://careless.my) codebase. Stable API but will churn as the external surface solidifies. Pin exact versions until 1.0.\n\n## License\n\nMIT © Çağatay Çalı\n","readmeFilename":"README.md","_rev":"1-d11e24659ce903823a4e3681e012c86c"}