@mestreyoda/fabrica 0.2.41 → 0.2.43

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 (3) hide show
  1. package/README.md +23 -0
  2. package/dist/index.js +22 -3
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -148,6 +148,8 @@ At minimum, when DM bootstrap is enabled, set:
148
148
 
149
149
  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
150
 
151
+ 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.
152
+
151
153
  **6. Validate operational readiness**:
152
154
 
153
155
  ```bash
@@ -203,6 +205,27 @@ tail -f ~/.openclaw/workspace/logs/genesis.log
203
205
  openclaw fabrica metrics
204
206
  ```
205
207
 
208
+ This command now includes convergence-oriented telemetry such as:
209
+ - cause counts (for example `qa_missing_required_gates`, `qa_sanitization_failed`)
210
+ - human escalations
211
+ - average dispatch → first PR timing
212
+ - per-stack breakdowns
213
+
214
+ **11. Inspect a live issue/run**:
215
+
216
+ ```bash
217
+ openclaw fabrica doctor issue --project <slug> --issue <id>
218
+ ```
219
+
220
+ Use this when a project is looping or stuck. It shows:
221
+ - current PR / artifact state
222
+ - progress state
223
+ - convergence cause + QA subcause
224
+ - missing QA gates, when applicable
225
+ - recommended next action
226
+
227
+ For deferred, non-blocking ideas after this milestone, see `FUTURE_IMPROVEMENTS.md`.
228
+
206
229
  ## Configuration
207
230
 
208
231
  ### Minimal (gh CLI only)
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.41") {
113909
- return "0.2.41";
113908
+ if ("0.2.43") {
113909
+ return "0.2.43";
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. Re-run `openclaw fabrica setup` after the Telegram forum config is in place");
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.41",
3
+ "version": "0.2.43",
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",