@chrysb/alphaclaw 0.9.27 → 0.9.28

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 CHANGED
@@ -18,11 +18,13 @@
18
18
  <p align="center"><em>First deploy to first message in under five minutes.</em></p>
19
19
 
20
20
  <p align="center">
21
+ <a href="https://render.com/templates/alphaclaw"><img height="40" src="https://render.com/images/deploy-to-render-button.svg" alt="Deploy to Render" /></a>
21
22
  <a href="https://railway.com/deploy/openclaw-fast-start?referralCode=jcFhp_&utm_medium=integration&utm_source=template&utm_campaign=generic"><img height="40" src="https://railway.com/button.svg" alt="Deploy on Railway" /></a>
22
- <a href="https://render.com/deploy?repo=https://github.com/chrysb/openclaw-render-template"><img height="40" src="https://render.com/images/deploy-to-render-button.svg" alt="Deploy to Render" /></a>
23
23
  <a href="https://updates.alphaclaw.md/desktop/prod/alphaclaw-mac-latest.dmg"><img height="40" src="https://img.shields.io/badge/Download%20for%20macOS-000000?style=for-the-badge&logo=apple&logoColor=white" alt="Download for macOS" /></a>
24
24
  </p>
25
25
 
26
+ <p align="center"><strong>Render sponsors AlphaClaw.</strong> Redeem $50 in Render credits with code <code>RENDER-ALPHACLAW</code>.</p>
27
+
26
28
  > **Platform:** AlphaClaw currently targets Docker/Linux deployments. macOS local development is not yet supported.
27
29
 
28
30
  ## Features
@@ -45,7 +47,7 @@
45
47
 
46
48
  ## Why AlphaClaw
47
49
 
48
- - **Zero to production in one deploy:** Railway/Render templates ship a complete stack — no manual gateway setup.
50
+ - **Zero to production in one deploy:** Render/Railway templates ship a complete stack — no manual gateway setup.
49
51
  - **Self-healing:** Watchdog detects crashes, enters repair mode, relaunches the gateway, and notifies you.
50
52
  - **Everything in the browser:** No SSH, no config files to hand-edit, no CLI required after first deploy.
51
53
  - **Stays out of the way:** AlphaClaw manages infrastructure; OpenClaw handles the AI.
@@ -56,10 +58,15 @@ AlphaClaw simply wraps OpenClaw, it's not a dependency. Remove AlphaClaw and you
56
58
 
57
59
  ## Quick Start
58
60
 
59
- ### Deploy (recommended)
61
+ ### Deploy on Render (recommended)
62
+
63
+ [![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/templates/alphaclaw)
64
+
65
+ Render sponsors AlphaClaw. Use code **`RENDER-ALPHACLAW`** to redeem **$50 in Render credits**. The deployment is maintained in Render's [official AlphaClaw template repository](https://github.com/render-examples/openclaw-render-template).
66
+
67
+ ### Other deployment options
60
68
 
61
69
  [![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/openclaw-fast-start?referralCode=jcFhp_&utm_medium=integration&utm_source=template&utm_campaign=generic)
62
- [![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/deploy?repo=https://github.com/chrysb/openclaw-render-template)
63
70
 
64
71
  Set `SETUP_PASSWORD` at deploy time and visit your deployment URL. The welcome wizard handles the rest.
65
72
 
package/bin/alphaclaw.js CHANGED
@@ -99,6 +99,7 @@ Usage: alphaclaw <command> [options]
99
99
  Commands:
100
100
  start Start the AlphaClaw server (Setup UI + gateway manager)
101
101
  git-sync Commit and push /data/.openclaw safely using GITHUB_TOKEN
102
+ doctor finding complete Mark a queued Doctor finding fixed after verification
102
103
  telegram topic add Add/update Telegram topic mapping by thread ID
103
104
  version Print version
104
105
 
@@ -121,6 +122,11 @@ telegram topic add options:
121
122
  --agent <id> Optional agent ID for per-topic routing
122
123
  --group <id> Optional group ID override (auto-resolves when one group exists)
123
124
 
125
+ doctor finding complete options:
126
+ --id <id> Doctor finding ID
127
+ --run <run-id> Queued fix run ID
128
+ --token <token> One-time completion token
129
+
124
130
  Examples:
125
131
  alphaclaw git-sync --message "sync workspace"
126
132
  alphaclaw git-sync --message "update config" --file "workspace/app/config.json"
@@ -394,6 +400,59 @@ if (command === "git-sync") {
394
400
  process.exit(runGitSync());
395
401
  }
396
402
 
403
+ const runDoctorFindingComplete = () => {
404
+ const cardId = Number.parseInt(
405
+ String(flagValue(commandArgs, "--id") || ""),
406
+ 10,
407
+ );
408
+ const runId = String(flagValue(commandArgs, "--run") || "").trim();
409
+ const token = String(flagValue(commandArgs, "--token") || "").trim();
410
+ if (!Number.isInteger(cardId) || cardId <= 0 || !runId || !token) {
411
+ console.error(
412
+ "[alphaclaw] doctor finding complete requires --id, --run, and --token",
413
+ );
414
+ return 1;
415
+ }
416
+
417
+ const {
418
+ closeDoctorDb,
419
+ completeDoctorCardFix,
420
+ initDoctorDb,
421
+ } = require("../lib/server/db/doctor");
422
+ const {
423
+ hashDoctorFixToken,
424
+ } = require("../lib/server/doctor/fix-completion");
425
+ try {
426
+ initDoctorDb({ rootDir, markInterruptedRuns: false });
427
+ const card = completeDoctorCardFix({
428
+ id: cardId,
429
+ runId,
430
+ tokenHash: hashDoctorFixToken(token),
431
+ });
432
+ if (!card) {
433
+ console.error("[alphaclaw] Doctor fix completion was not accepted");
434
+ return 1;
435
+ }
436
+ console.log(`[alphaclaw] Doctor finding ${cardId} marked fixed`);
437
+ return 0;
438
+ } catch (error) {
439
+ console.error(
440
+ `[alphaclaw] Doctor fix completion failed: ${error.message || "Unknown error"}`,
441
+ );
442
+ return 1;
443
+ } finally {
444
+ closeDoctorDb();
445
+ }
446
+ };
447
+
448
+ if (
449
+ command === "doctor" &&
450
+ commandScope === "finding" &&
451
+ commandAction === "complete"
452
+ ) {
453
+ process.exit(runDoctorFindingComplete());
454
+ }
455
+
397
456
  const runTelegramTopicAdd = () => {
398
457
  const topicName = String(flagValue(commandArgs, "--name") || "").trim();
399
458
  const threadId = String(flagValue(commandArgs, "--thread") || "").trim();