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.
Files changed (151) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +187 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +546 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/client.d.ts +8 -0
  8. package/dist/client.d.ts.map +1 -0
  9. package/dist/client.js +29 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/config.d.ts +49 -0
  12. package/dist/config.d.ts.map +1 -0
  13. package/dist/config.js +61 -0
  14. package/dist/config.js.map +1 -0
  15. package/dist/core/gatekeeper.d.ts +163 -0
  16. package/dist/core/gatekeeper.d.ts.map +1 -0
  17. package/dist/core/gatekeeper.js +247 -0
  18. package/dist/core/gatekeeper.js.map +1 -0
  19. package/dist/core/job-queue.d.ts +61 -0
  20. package/dist/core/job-queue.d.ts.map +1 -0
  21. package/dist/core/job-queue.js +123 -0
  22. package/dist/core/job-queue.js.map +1 -0
  23. package/dist/core/logger.d.ts +22 -0
  24. package/dist/core/logger.d.ts.map +1 -0
  25. package/dist/core/logger.js +65 -0
  26. package/dist/core/logger.js.map +1 -0
  27. package/dist/core/role-templates.d.ts +3 -0
  28. package/dist/core/role-templates.d.ts.map +1 -0
  29. package/dist/core/role-templates.js +179 -0
  30. package/dist/core/role-templates.js.map +1 -0
  31. package/dist/core/roles.d.ts +94 -0
  32. package/dist/core/roles.d.ts.map +1 -0
  33. package/dist/core/roles.js +206 -0
  34. package/dist/core/roles.js.map +1 -0
  35. package/dist/core/runner.d.ts +76 -0
  36. package/dist/core/runner.d.ts.map +1 -0
  37. package/dist/core/runner.js +307 -0
  38. package/dist/core/runner.js.map +1 -0
  39. package/dist/events/daemon.d.ts +9 -0
  40. package/dist/events/daemon.d.ts.map +1 -0
  41. package/dist/events/daemon.js +29 -0
  42. package/dist/events/daemon.js.map +1 -0
  43. package/dist/events/event-bus.d.ts +35 -0
  44. package/dist/events/event-bus.d.ts.map +1 -0
  45. package/dist/events/event-bus.js +41 -0
  46. package/dist/events/event-bus.js.map +1 -0
  47. package/dist/events/index.d.ts +41 -0
  48. package/dist/events/index.d.ts.map +1 -0
  49. package/dist/events/index.js +57 -0
  50. package/dist/events/index.js.map +1 -0
  51. package/dist/events/sources/filesystem-source.d.ts +23 -0
  52. package/dist/events/sources/filesystem-source.d.ts.map +1 -0
  53. package/dist/events/sources/filesystem-source.js +95 -0
  54. package/dist/events/sources/filesystem-source.js.map +1 -0
  55. package/dist/events/sources/macos-source.d.ts +23 -0
  56. package/dist/events/sources/macos-source.d.ts.map +1 -0
  57. package/dist/events/sources/macos-source.js +123 -0
  58. package/dist/events/sources/macos-source.js.map +1 -0
  59. package/dist/events/sources/polling-source.d.ts +23 -0
  60. package/dist/events/sources/polling-source.d.ts.map +1 -0
  61. package/dist/events/sources/polling-source.js +47 -0
  62. package/dist/events/sources/polling-source.js.map +1 -0
  63. package/dist/events/sources/webhook-source.d.ts +23 -0
  64. package/dist/events/sources/webhook-source.d.ts.map +1 -0
  65. package/dist/events/sources/webhook-source.js +132 -0
  66. package/dist/events/sources/webhook-source.js.map +1 -0
  67. package/dist/events/trigger-manager.d.ts +78 -0
  68. package/dist/events/trigger-manager.d.ts.map +1 -0
  69. package/dist/events/trigger-manager.js +130 -0
  70. package/dist/events/trigger-manager.js.map +1 -0
  71. package/dist/index.d.ts +123 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +225 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/mcp/index.d.ts +4 -0
  76. package/dist/mcp/index.d.ts.map +1 -0
  77. package/dist/mcp/index.js +3 -0
  78. package/dist/mcp/index.js.map +1 -0
  79. package/dist/mcp/manager.d.ts +99 -0
  80. package/dist/mcp/manager.d.ts.map +1 -0
  81. package/dist/mcp/manager.js +143 -0
  82. package/dist/mcp/manager.js.map +1 -0
  83. package/dist/mcp/tool-adapter.d.ts +20 -0
  84. package/dist/mcp/tool-adapter.d.ts.map +1 -0
  85. package/dist/mcp/tool-adapter.js +29 -0
  86. package/dist/mcp/tool-adapter.js.map +1 -0
  87. package/dist/memory/embeddings.d.ts +28 -0
  88. package/dist/memory/embeddings.d.ts.map +1 -0
  89. package/dist/memory/embeddings.js +90 -0
  90. package/dist/memory/embeddings.js.map +1 -0
  91. package/dist/memory/hybrid-search.d.ts +31 -0
  92. package/dist/memory/hybrid-search.d.ts.map +1 -0
  93. package/dist/memory/hybrid-search.js +114 -0
  94. package/dist/memory/hybrid-search.js.map +1 -0
  95. package/dist/memory/index.d.ts +55 -0
  96. package/dist/memory/index.d.ts.map +1 -0
  97. package/dist/memory/index.js +175 -0
  98. package/dist/memory/index.js.map +1 -0
  99. package/dist/memory/knowledge-graph.d.ts +21 -0
  100. package/dist/memory/knowledge-graph.d.ts.map +1 -0
  101. package/dist/memory/knowledge-graph.js +118 -0
  102. package/dist/memory/knowledge-graph.js.map +1 -0
  103. package/dist/memory/schemas.d.ts +187 -0
  104. package/dist/memory/schemas.d.ts.map +1 -0
  105. package/dist/memory/schemas.js +75 -0
  106. package/dist/memory/schemas.js.map +1 -0
  107. package/dist/memory/sqlite-vec-store.d.ts +22 -0
  108. package/dist/memory/sqlite-vec-store.d.ts.map +1 -0
  109. package/dist/memory/sqlite-vec-store.js +37 -0
  110. package/dist/memory/sqlite-vec-store.js.map +1 -0
  111. package/dist/memory/working-memory.d.ts +22 -0
  112. package/dist/memory/working-memory.d.ts.map +1 -0
  113. package/dist/memory/working-memory.js +53 -0
  114. package/dist/memory/working-memory.js.map +1 -0
  115. package/dist/scheduler/index.d.ts +3 -0
  116. package/dist/scheduler/index.d.ts.map +1 -0
  117. package/dist/scheduler/index.js +2 -0
  118. package/dist/scheduler/index.js.map +1 -0
  119. package/dist/scheduler/scheduler.d.ts +82 -0
  120. package/dist/scheduler/scheduler.d.ts.map +1 -0
  121. package/dist/scheduler/scheduler.js +127 -0
  122. package/dist/scheduler/scheduler.js.map +1 -0
  123. package/dist/schemas.d.ts +328 -0
  124. package/dist/schemas.d.ts.map +1 -0
  125. package/dist/schemas.js +77 -0
  126. package/dist/schemas.js.map +1 -0
  127. package/dist/storage/database.d.ts +97 -0
  128. package/dist/storage/database.d.ts.map +1 -0
  129. package/dist/storage/database.js +685 -0
  130. package/dist/storage/database.js.map +1 -0
  131. package/dist/tools/builtin/filesystem.d.ts +11 -0
  132. package/dist/tools/builtin/filesystem.d.ts.map +1 -0
  133. package/dist/tools/builtin/filesystem.js +137 -0
  134. package/dist/tools/builtin/filesystem.js.map +1 -0
  135. package/dist/tools/builtin/memory.d.ts +13 -0
  136. package/dist/tools/builtin/memory.d.ts.map +1 -0
  137. package/dist/tools/builtin/memory.js +299 -0
  138. package/dist/tools/builtin/memory.js.map +1 -0
  139. package/dist/tools/builtin/notification.d.ts +5 -0
  140. package/dist/tools/builtin/notification.d.ts.map +1 -0
  141. package/dist/tools/builtin/notification.js +36 -0
  142. package/dist/tools/builtin/notification.js.map +1 -0
  143. package/dist/tools/builtin/web.d.ts +7 -0
  144. package/dist/tools/builtin/web.d.ts.map +1 -0
  145. package/dist/tools/builtin/web.js +191 -0
  146. package/dist/tools/builtin/web.js.map +1 -0
  147. package/dist/tools/registry.d.ts +36 -0
  148. package/dist/tools/registry.d.ts.map +1 -0
  149. package/dist/tools/registry.js +49 -0
  150. package/dist/tools/registry.js.map +1 -0
  151. 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,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}