@mestreyoda/fabrica 0.2.42 → 0.2.44
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/README.md +41 -3
- package/dist/index.js +22 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -53,14 +53,31 @@ The heartbeat ticks every 60 seconds. On each tick, Fabrica alternates between a
|
|
|
53
53
|
|
|
54
54
|
## Requirements
|
|
55
55
|
|
|
56
|
-
- [OpenClaw](https://openclaw.dev) runtime >= 2026.3.13
|
|
56
|
+
- [OpenClaw](https://openclaw.dev) runtime >= 2026.3.13
|
|
57
|
+
- OpenClaw gateway operational on the local machine (default port 18789)
|
|
57
58
|
- Git (for repository operations and local development)
|
|
58
|
-
- Node.js 20+
|
|
59
|
-
- `gh` CLI authenticated to GitHub (required for issue and
|
|
59
|
+
- Node.js 20+ with npm/npx available
|
|
60
|
+
- `gh` CLI authenticated to GitHub (required for repo, issue, PR, and comment operations)
|
|
60
61
|
- A GitHub organization or personal account where repositories will be created
|
|
61
62
|
- For Python stacks, Fabrica provisions `uv` and project-local environments itself without `sudo`
|
|
62
63
|
- (Optional) Telegram bot token and group chat IDs for DM bootstrap and notifications
|
|
63
64
|
|
|
65
|
+
### Host prerequisites vs project provisioning
|
|
66
|
+
|
|
67
|
+
Fabrica provisions a lot inside each project runtime, but it is not a universal host bootstrapper.
|
|
68
|
+
|
|
69
|
+
What should already exist on the machine:
|
|
70
|
+
- OpenClaw installed and working
|
|
71
|
+
- Node/npm usable
|
|
72
|
+
- Git usable
|
|
73
|
+
- `gh auth` completed with permissions to create repositories, issues, PRs, and comments
|
|
74
|
+
|
|
75
|
+
What Fabrica provisions at project/runtime level:
|
|
76
|
+
- Python `uv` bootstrapping when needed
|
|
77
|
+
- project-local `.venv` for Python stacks
|
|
78
|
+
- project scaffolding and QA contract files
|
|
79
|
+
- stack-specific environment preparation before developer/tester pickup
|
|
80
|
+
|
|
64
81
|
## Installation
|
|
65
82
|
|
|
66
83
|
### Via npm (recommended)
|
|
@@ -106,6 +123,7 @@ gh auth status || gh auth login
|
|
|
106
123
|
```
|
|
107
124
|
|
|
108
125
|
Fabrica uses authenticated `gh` CLI for GitHub operations in the default setup.
|
|
126
|
+
Make sure the authenticated identity can create repositories, issues, PRs, and comments in the target account or organization.
|
|
109
127
|
|
|
110
128
|
**2. Install Fabrica**:
|
|
111
129
|
|
|
@@ -148,6 +166,15 @@ At minimum, when DM bootstrap is enabled, set:
|
|
|
148
166
|
|
|
149
167
|
If `projectsForumChatId` is missing while DM bootstrap is enabled, Fabrica can accept the DM but will fail when it needs to create the project topic.
|
|
150
168
|
|
|
169
|
+
Tip: if you export `FABRICA_PROJECTS_CHANNEL_ID` before running `openclaw fabrica setup`, Fabrica now copies that value into `plugins.entries.fabrica.config.telegram.projectsForumChatId` automatically during setup.
|
|
170
|
+
|
|
171
|
+
Example:
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
export FABRICA_PROJECTS_CHANNEL_ID="<YOUR_PROJECTS_FORUM_CHAT_ID>"
|
|
175
|
+
openclaw fabrica setup --workspace /path/to/workspace --new-agent fabrica
|
|
176
|
+
```
|
|
177
|
+
|
|
151
178
|
**6. Validate operational readiness**:
|
|
152
179
|
|
|
153
180
|
```bash
|
|
@@ -337,6 +364,17 @@ worker start, worker completion, review queueing, reviewer reject/approve, and
|
|
|
337
364
|
operational recovery events, with cycle-aware dedupe so late deliveries from an
|
|
338
365
|
older dispatch do not masquerade as current work.
|
|
339
366
|
|
|
367
|
+
## Minimal path without Telegram
|
|
368
|
+
|
|
369
|
+
Telegram is the recommended human-facing flow, but it is not required to use Fabrica.
|
|
370
|
+
|
|
371
|
+
If you want a minimal path without Telegram:
|
|
372
|
+
1. authenticate `gh`
|
|
373
|
+
2. install the plugin
|
|
374
|
+
3. run `openclaw fabrica doctor workspace --workspace /path/to/workspace`
|
|
375
|
+
4. run `openclaw fabrica setup --workspace /path/to/workspace --new-agent fabrica`
|
|
376
|
+
5. use the programmatic genesis path below to trigger the pipeline
|
|
377
|
+
|
|
340
378
|
## Programmatic genesis
|
|
341
379
|
|
|
342
380
|
In addition to Telegram DM bootstrap, the full pipeline can be triggered from a CLI script — no Telegram or running agent session required:
|
package/dist/index.js
CHANGED
|
@@ -113905,8 +113905,8 @@ import fsSync from "node:fs";
|
|
|
113905
113905
|
import path5 from "node:path";
|
|
113906
113906
|
import { fileURLToPath as fileURLToPath3 } from "node:url";
|
|
113907
113907
|
function getCurrentVersion() {
|
|
113908
|
-
if ("0.2.
|
|
113909
|
-
return "0.2.
|
|
113908
|
+
if ("0.2.44") {
|
|
113909
|
+
return "0.2.44";
|
|
113910
113910
|
}
|
|
113911
113911
|
try {
|
|
113912
113912
|
const pkgPath = path5.join(THIS_DIR, "..", "..", "package.json");
|
|
@@ -147275,6 +147275,7 @@ async function writePluginConfig(runtime, agentId, projectExecution) {
|
|
|
147275
147275
|
ensurePluginAllowed(config2);
|
|
147276
147276
|
ensureInternalHooks(config2);
|
|
147277
147277
|
ensureHeartbeatDefaults(config2);
|
|
147278
|
+
ensureTelegramDefaults(config2);
|
|
147278
147279
|
configureSubagentCleanup(config2);
|
|
147279
147280
|
ensureTelegramLinkPreviewDisabled(config2);
|
|
147280
147281
|
if (agentId) {
|
|
@@ -147326,6 +147327,23 @@ function ensureHeartbeatDefaults(config2) {
|
|
|
147326
147327
|
fabrica.work_heartbeat = { ...HEARTBEAT_DEFAULTS };
|
|
147327
147328
|
}
|
|
147328
147329
|
}
|
|
147330
|
+
function ensureTelegramDefaults(config2) {
|
|
147331
|
+
const fabrica = config2.plugins.entries.fabrica.config;
|
|
147332
|
+
if (!fabrica.telegram) fabrica.telegram = {};
|
|
147333
|
+
const telegram = fabrica.telegram;
|
|
147334
|
+
if (telegram.bootstrapDmEnabled === void 0) {
|
|
147335
|
+
telegram.bootstrapDmEnabled = true;
|
|
147336
|
+
}
|
|
147337
|
+
if (telegram.projectsForumChatId === void 0 && process.env.FABRICA_PROJECTS_CHANNEL_ID) {
|
|
147338
|
+
telegram.projectsForumChatId = process.env.FABRICA_PROJECTS_CHANNEL_ID;
|
|
147339
|
+
}
|
|
147340
|
+
if (telegram.projectsForumAccountId === void 0 && process.env.FABRICA_PROJECTS_CHANNEL_ACCOUNT_ID) {
|
|
147341
|
+
telegram.projectsForumAccountId = process.env.FABRICA_PROJECTS_CHANNEL_ACCOUNT_ID;
|
|
147342
|
+
}
|
|
147343
|
+
if (telegram.opsChatId === void 0 && process.env.TELEGRAM_CHAT_ID) {
|
|
147344
|
+
telegram.opsChatId = process.env.TELEGRAM_CHAT_ID;
|
|
147345
|
+
}
|
|
147346
|
+
}
|
|
147329
147347
|
function ensureTelegramLinkPreviewDisabled(config2) {
|
|
147330
147348
|
const channels = config2.channels;
|
|
147331
147349
|
if (!channels) return;
|
|
@@ -150062,7 +150080,8 @@ function registerCli(program, ctx) {
|
|
|
150062
150080
|
} else {
|
|
150063
150081
|
console.log(" 1. Run `openclaw fabrica doctor workspace --workspace <path>` to confirm workspace readiness");
|
|
150064
150082
|
console.log(" 2. If you want the official Telegram DM \u2192 topic flow, set plugins.entries.fabrica.config.telegram.projectsForumChatId");
|
|
150065
|
-
console.log(" 3.
|
|
150083
|
+
console.log(" 3. You can also export FABRICA_PROJECTS_CHANNEL_ID before running setup to prefill that value automatically");
|
|
150084
|
+
console.log(" 4. Re-run `openclaw fabrica setup` after the Telegram forum config is in place");
|
|
150066
150085
|
}
|
|
150067
150086
|
});
|
|
150068
150087
|
const doctor = fabrica.command("doctor").description("Diagnose workspace integrity and optionally auto-fix issues");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mestreyoda/fabrica",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.44",
|
|
4
4
|
"description": "Autonomous software engineering pipeline for OpenClaw. Turns ideas into deployed code via intake, dispatch, review, test, and merge.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|