beercan 0.1.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/LICENSE +21 -0
- package/README.md +187 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +546 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +8 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +29 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +49 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +61 -0
- package/dist/config.js.map +1 -0
- package/dist/core/gatekeeper.d.ts +163 -0
- package/dist/core/gatekeeper.d.ts.map +1 -0
- package/dist/core/gatekeeper.js +247 -0
- package/dist/core/gatekeeper.js.map +1 -0
- package/dist/core/job-queue.d.ts +61 -0
- package/dist/core/job-queue.d.ts.map +1 -0
- package/dist/core/job-queue.js +123 -0
- package/dist/core/job-queue.js.map +1 -0
- package/dist/core/logger.d.ts +22 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +65 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/role-templates.d.ts +3 -0
- package/dist/core/role-templates.d.ts.map +1 -0
- package/dist/core/role-templates.js +179 -0
- package/dist/core/role-templates.js.map +1 -0
- package/dist/core/roles.d.ts +94 -0
- package/dist/core/roles.d.ts.map +1 -0
- package/dist/core/roles.js +206 -0
- package/dist/core/roles.js.map +1 -0
- package/dist/core/runner.d.ts +76 -0
- package/dist/core/runner.d.ts.map +1 -0
- package/dist/core/runner.js +307 -0
- package/dist/core/runner.js.map +1 -0
- package/dist/events/daemon.d.ts +9 -0
- package/dist/events/daemon.d.ts.map +1 -0
- package/dist/events/daemon.js +29 -0
- package/dist/events/daemon.js.map +1 -0
- package/dist/events/event-bus.d.ts +35 -0
- package/dist/events/event-bus.d.ts.map +1 -0
- package/dist/events/event-bus.js +41 -0
- package/dist/events/event-bus.js.map +1 -0
- package/dist/events/index.d.ts +41 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +57 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/sources/filesystem-source.d.ts +23 -0
- package/dist/events/sources/filesystem-source.d.ts.map +1 -0
- package/dist/events/sources/filesystem-source.js +95 -0
- package/dist/events/sources/filesystem-source.js.map +1 -0
- package/dist/events/sources/macos-source.d.ts +23 -0
- package/dist/events/sources/macos-source.d.ts.map +1 -0
- package/dist/events/sources/macos-source.js +123 -0
- package/dist/events/sources/macos-source.js.map +1 -0
- package/dist/events/sources/polling-source.d.ts +23 -0
- package/dist/events/sources/polling-source.d.ts.map +1 -0
- package/dist/events/sources/polling-source.js +47 -0
- package/dist/events/sources/polling-source.js.map +1 -0
- package/dist/events/sources/webhook-source.d.ts +23 -0
- package/dist/events/sources/webhook-source.d.ts.map +1 -0
- package/dist/events/sources/webhook-source.js +132 -0
- package/dist/events/sources/webhook-source.js.map +1 -0
- package/dist/events/trigger-manager.d.ts +78 -0
- package/dist/events/trigger-manager.d.ts.map +1 -0
- package/dist/events/trigger-manager.js +130 -0
- package/dist/events/trigger-manager.js.map +1 -0
- package/dist/index.d.ts +123 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +225 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +4 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +3 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/manager.d.ts +99 -0
- package/dist/mcp/manager.d.ts.map +1 -0
- package/dist/mcp/manager.js +143 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/mcp/tool-adapter.d.ts +20 -0
- package/dist/mcp/tool-adapter.d.ts.map +1 -0
- package/dist/mcp/tool-adapter.js +29 -0
- package/dist/mcp/tool-adapter.js.map +1 -0
- package/dist/memory/embeddings.d.ts +28 -0
- package/dist/memory/embeddings.d.ts.map +1 -0
- package/dist/memory/embeddings.js +90 -0
- package/dist/memory/embeddings.js.map +1 -0
- package/dist/memory/hybrid-search.d.ts +31 -0
- package/dist/memory/hybrid-search.d.ts.map +1 -0
- package/dist/memory/hybrid-search.js +114 -0
- package/dist/memory/hybrid-search.js.map +1 -0
- package/dist/memory/index.d.ts +55 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +175 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/knowledge-graph.d.ts +21 -0
- package/dist/memory/knowledge-graph.d.ts.map +1 -0
- package/dist/memory/knowledge-graph.js +118 -0
- package/dist/memory/knowledge-graph.js.map +1 -0
- package/dist/memory/schemas.d.ts +187 -0
- package/dist/memory/schemas.d.ts.map +1 -0
- package/dist/memory/schemas.js +75 -0
- package/dist/memory/schemas.js.map +1 -0
- package/dist/memory/sqlite-vec-store.d.ts +22 -0
- package/dist/memory/sqlite-vec-store.d.ts.map +1 -0
- package/dist/memory/sqlite-vec-store.js +37 -0
- package/dist/memory/sqlite-vec-store.js.map +1 -0
- package/dist/memory/working-memory.d.ts +22 -0
- package/dist/memory/working-memory.d.ts.map +1 -0
- package/dist/memory/working-memory.js +53 -0
- package/dist/memory/working-memory.js.map +1 -0
- package/dist/scheduler/index.d.ts +3 -0
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/index.js +2 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/scheduler/scheduler.d.ts +82 -0
- package/dist/scheduler/scheduler.d.ts.map +1 -0
- package/dist/scheduler/scheduler.js +127 -0
- package/dist/scheduler/scheduler.js.map +1 -0
- package/dist/schemas.d.ts +328 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +77 -0
- package/dist/schemas.js.map +1 -0
- package/dist/storage/database.d.ts +97 -0
- package/dist/storage/database.d.ts.map +1 -0
- package/dist/storage/database.js +685 -0
- package/dist/storage/database.js.map +1 -0
- package/dist/tools/builtin/filesystem.d.ts +11 -0
- package/dist/tools/builtin/filesystem.d.ts.map +1 -0
- package/dist/tools/builtin/filesystem.js +137 -0
- package/dist/tools/builtin/filesystem.js.map +1 -0
- package/dist/tools/builtin/memory.d.ts +13 -0
- package/dist/tools/builtin/memory.d.ts.map +1 -0
- package/dist/tools/builtin/memory.js +299 -0
- package/dist/tools/builtin/memory.js.map +1 -0
- package/dist/tools/builtin/notification.d.ts +5 -0
- package/dist/tools/builtin/notification.d.ts.map +1 -0
- package/dist/tools/builtin/notification.js +36 -0
- package/dist/tools/builtin/notification.js.map +1 -0
- package/dist/tools/builtin/web.d.ts +7 -0
- package/dist/tools/builtin/web.d.ts.map +1 -0
- package/dist/tools/builtin/web.js +191 -0
- package/dist/tools/builtin/web.js.map +1 -0
- package/dist/tools/registry.d.ts +36 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +49 -0
- package/dist/tools/registry.js.map +1 -0
- package/package.json +73 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 BeerCan Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# 🍺 BeerCan
|
|
2
|
+
|
|
3
|
+
Autonomous AI agent system — smarter than you, and it knows it.
|
|
4
|
+
|
|
5
|
+
Sandboxed projects, multi-agent pipelines with dynamic team composition, 4-layer hybrid RAG memory, SQLite-backed job queue, 13 built-in tools, and Cloudflare Browser Rendering for web fetching.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install -g beercan
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Requires Node.js 18+ and an [Anthropic API key](https://console.anthropic.com/).
|
|
14
|
+
|
|
15
|
+
## Quick Start
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# Set up your API key
|
|
19
|
+
echo "ANTHROPIC_API_KEY=sk-ant-..." > .env
|
|
20
|
+
|
|
21
|
+
# Create a project scoped to a directory
|
|
22
|
+
beercan init my-project --work-dir ~/projects/my-project
|
|
23
|
+
|
|
24
|
+
# Run a task (gatekeeper auto-picks the right team)
|
|
25
|
+
beercan run my-project "Create a hello world Express server with TypeScript"
|
|
26
|
+
|
|
27
|
+
# View results
|
|
28
|
+
beercan history my-project
|
|
29
|
+
beercan result <bloop-id>
|
|
30
|
+
beercan status
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## What It Does
|
|
34
|
+
|
|
35
|
+
You describe a goal. BeerCan figures out the rest:
|
|
36
|
+
|
|
37
|
+
1. **Gatekeeper** analyzes the goal and dynamically composes the right team
|
|
38
|
+
2. **Agents** execute the work — coding, writing, research, analysis, whatever
|
|
39
|
+
3. **Reviewers** check quality and can send work back for revision
|
|
40
|
+
4. **Memory** persists knowledge across bloops for future context
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
$ beercan run my-project "Add OAuth2 login with Google provider"
|
|
44
|
+
|
|
45
|
+
▸ gatekeeper (auto)
|
|
46
|
+
Gatekeeper Plan [medium]: Coding task with auth integration...
|
|
47
|
+
Roles: Planner (plan) → Coder (primary) → Reviewer (review) → Tester (validate)
|
|
48
|
+
|
|
49
|
+
▸ Phase: plan (planner)
|
|
50
|
+
[planner] Breaking down into 3 tasks...
|
|
51
|
+
|
|
52
|
+
▸ Phase: primary (coder)
|
|
53
|
+
⚙ read_file src/auth/...
|
|
54
|
+
⚙ write_file src/auth/oauth2.ts
|
|
55
|
+
⚙ exec_command npm run build
|
|
56
|
+
|
|
57
|
+
▸ Phase: review (reviewer)
|
|
58
|
+
✦ APPROVE
|
|
59
|
+
|
|
60
|
+
✓ Bloop completed — 12,847 tokens, 3 iterations
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Teams
|
|
64
|
+
|
|
65
|
+
| Team | Pipeline | Best For |
|
|
66
|
+
|------|----------|----------|
|
|
67
|
+
| `auto` (default) | Gatekeeper picks | Any task |
|
|
68
|
+
| `solo` | One agent | Simple tasks |
|
|
69
|
+
| `code_review` | Coder → Reviewer | Code with quality checks |
|
|
70
|
+
| `managed` | Manager → Coder → Manager | Planned execution |
|
|
71
|
+
| `full_team` | Manager → Coder → Reviewer → Tester | Production code |
|
|
72
|
+
|
|
73
|
+
## 14 Dynamic Roles
|
|
74
|
+
|
|
75
|
+
**5 built-in:** manager, coder, reviewer, tester, solo
|
|
76
|
+
|
|
77
|
+
**9 templates** (gatekeeper picks as needed): writer, researcher, analyst, data_processor, summarizer, planner, editor, devops, architect
|
|
78
|
+
|
|
79
|
+
The gatekeeper can also invent custom roles with LLM-generated prompts for unusual tasks.
|
|
80
|
+
|
|
81
|
+
## 13 Built-in Tools
|
|
82
|
+
|
|
83
|
+
| Category | Tools |
|
|
84
|
+
|----------|-------|
|
|
85
|
+
| Filesystem | `read_file`, `write_file`, `list_directory`, `exec_command` |
|
|
86
|
+
| Web | `web_fetch` (Cloudflare Browser Rendering + native), `http_request` |
|
|
87
|
+
| Notification | `send_notification` (macOS desktop) |
|
|
88
|
+
| Memory | `memory_search`, `memory_store`, `memory_update`, `memory_link`, `memory_query_graph`, `memory_scratch` |
|
|
89
|
+
|
|
90
|
+
Plus any tools from MCP servers you connect.
|
|
91
|
+
|
|
92
|
+
## Memory System
|
|
93
|
+
|
|
94
|
+
4-layer hybrid RAG — all in SQLite:
|
|
95
|
+
|
|
96
|
+
- **FTS5** — BM25 keyword search on all stored memories
|
|
97
|
+
- **sqlite-vec** — 512-dim TF-IDF vector embeddings for semantic search
|
|
98
|
+
- **Knowledge Graph** — entities and relationships with multi-hop BFS traversal
|
|
99
|
+
- **Working Memory** — per-bloop ephemeral scratchpad
|
|
100
|
+
|
|
101
|
+
Search results are merged via Reciprocal Rank Fusion. Agents can store facts, decisions, and insights that persist across bloops.
|
|
102
|
+
|
|
103
|
+
## Job Queue
|
|
104
|
+
|
|
105
|
+
SQLite-backed with concurrency control. Scheduler and event triggers route through the queue automatically.
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
beercan jobs # View queue status
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Daemon Mode
|
|
112
|
+
|
|
113
|
+
Run as an always-on service with cron scheduling and event triggers:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
beercan daemon
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
- Webhook server on port 3939
|
|
120
|
+
- Filesystem watchers
|
|
121
|
+
- Cron-based scheduling
|
|
122
|
+
- Graceful shutdown with job queue drain
|
|
123
|
+
|
|
124
|
+
## CLI Reference
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
beercan init <name> [--work-dir <path>] Create a project
|
|
128
|
+
beercan projects List projects
|
|
129
|
+
beercan status Overview of all projects
|
|
130
|
+
beercan run <project> [team] <goal> Run a bloop
|
|
131
|
+
beercan history <project> [--status <s>] List past bloops
|
|
132
|
+
beercan result <bloop-id> Full bloop details
|
|
133
|
+
beercan jobs [status] Job queue status
|
|
134
|
+
beercan schedule:add <project> "<cron>" <goal>
|
|
135
|
+
beercan schedule:list [project]
|
|
136
|
+
beercan trigger:add <project> <type> <filter> <goal>
|
|
137
|
+
beercan mcp:add <project> <name> <cmd> [args]
|
|
138
|
+
beercan daemon Run scheduler + events
|
|
139
|
+
beercan bootstrap [goal] Self-improvement bloop
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## Programmatic API
|
|
143
|
+
|
|
144
|
+
```typescript
|
|
145
|
+
import { BeerCanEngine } from "beercan";
|
|
146
|
+
|
|
147
|
+
const engine = await new BeerCanEngine().init();
|
|
148
|
+
|
|
149
|
+
// Run a bloop directly
|
|
150
|
+
const bloop = await engine.runBloop({
|
|
151
|
+
projectSlug: "my-project",
|
|
152
|
+
goal: "Refactor the auth module",
|
|
153
|
+
team: "auto",
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
// Query results
|
|
157
|
+
engine.getBloop(bloop.id);
|
|
158
|
+
engine.getProjectBloops("my-project", "completed");
|
|
159
|
+
|
|
160
|
+
// Enqueue for background execution
|
|
161
|
+
engine.enqueueBloop({ projectSlug: "my-project", goal: "Run daily report" });
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Configuration
|
|
165
|
+
|
|
166
|
+
Set in `.env` file:
|
|
167
|
+
|
|
168
|
+
| Variable | Default | Description |
|
|
169
|
+
|----------|---------|-------------|
|
|
170
|
+
| `ANTHROPIC_API_KEY` | (required) | Claude API key |
|
|
171
|
+
| `BEERCAN_DATA_DIR` | `~/.beercan` | Data directory |
|
|
172
|
+
| `BEERCAN_DEFAULT_MODEL` | `claude-sonnet-4-6` | Default agent model |
|
|
173
|
+
| `BEERCAN_HEAVY_MODEL` | `claude-opus-4-6` | Heavy model |
|
|
174
|
+
| `BEERCAN_GATEKEEPER_MODEL` | `claude-haiku-4-5-20251001` | Gatekeeper model |
|
|
175
|
+
| `BEERCAN_MAX_CONCURRENT` | `2` | Max simultaneous bloops |
|
|
176
|
+
| `BEERCAN_BLOOP_TIMEOUT_MS` | `600000` | Per-bloop timeout (10 min) |
|
|
177
|
+
| `CLOUDFLARE_API_TOKEN` | — | For web_fetch (Browser Rendering) |
|
|
178
|
+
| `CLOUDFLARE_ACCOUNT_ID` | — | For web_fetch (Browser Rendering) |
|
|
179
|
+
|
|
180
|
+
## Architecture
|
|
181
|
+
|
|
182
|
+
See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for full details.
|
|
183
|
+
See [docs/TASK_FLOW.md](docs/TASK_FLOW.md) for execution flow.
|
|
184
|
+
|
|
185
|
+
## License
|
|
186
|
+
|
|
187
|
+
MIT
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|