clawmoney 0.17.12 → 0.17.14
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.
|
@@ -3,19 +3,32 @@ import chalk from "chalk";
|
|
|
3
3
|
import { apiPost } from "../utils/api.js";
|
|
4
4
|
import { loadConfig } from "../utils/config.js";
|
|
5
5
|
import { setupCommand } from "./setup.js";
|
|
6
|
+
// Routing kept in sync with bnbot-api app/core/market_skill_routing.py.
|
|
7
|
+
// Data analyses, code generation, and code reviews are escrow because the
|
|
8
|
+
// caller usually wants to inspect the deliverable before releasing funds.
|
|
9
|
+
//
|
|
10
|
+
// Backend SkillCategory enum has more entries than this wizard shows. We
|
|
11
|
+
// intentionally HIDE the following because they offer no differentiated
|
|
12
|
+
// value in an agent marketplace today:
|
|
13
|
+
// - search/web — every provider can hit Tavily/Brave/SerpAPI direct
|
|
14
|
+
// at the same prices; nothing to arbitrage
|
|
15
|
+
// - transformation/translate — modern LLMs translate inline, no need to
|
|
16
|
+
// outsource the call
|
|
17
|
+
// - transformation/stt — whisper.cpp is free and local; whisper API
|
|
18
|
+
// is $0.006/min, almost no margin
|
|
19
|
+
//
|
|
20
|
+
// Those backend enum values are still valid — high-end providers who really
|
|
21
|
+
// want to list them can use `clawmoney market register --category <value>`.
|
|
6
22
|
const CATEGORIES = [
|
|
7
23
|
{ value: "generation/image", routing: "instant", timeoutS: 120, suggestedPrice: 0.02, priceRange: [0.01, 0.50], defaultName: "gen-image", placeholderDesc: "Generate a 1024x1024 image from a text prompt" },
|
|
8
24
|
{ value: "generation/video", routing: "instant", timeoutS: 300, suggestedPrice: 0.10, priceRange: [0.05, 1.00], defaultName: "gen-video", placeholderDesc: "Generate a short AI video clip from a text prompt" },
|
|
9
|
-
{ value: "generation/video_long", routing: "escrow", timeoutS: null, suggestedPrice: 5.00, priceRange: [1.00, 50.00], defaultName: "gen-video-long", placeholderDesc: "Generate long-form narrated video (escrow)" },
|
|
10
25
|
{ value: "generation/text", routing: "instant", timeoutS: 120, suggestedPrice: 0.01, priceRange: [0.005, 0.20], defaultName: "gen-text", placeholderDesc: "Generate text from a prompt" },
|
|
11
26
|
{ value: "generation/audio", routing: "instant", timeoutS: 180, suggestedPrice: 0.05, priceRange: [0.02, 0.50], defaultName: "gen-audio", placeholderDesc: "Generate music or sound effects from a prompt" },
|
|
12
|
-
{ value: "transformation/translate", routing: "instant", timeoutS: 60, suggestedPrice: 0.01, priceRange: [0.005, 0.10], defaultName: "translate", placeholderDesc: "Translate text between languages" },
|
|
13
27
|
{ value: "transformation/tts", routing: "instant", timeoutS: 120, suggestedPrice: 0.02, priceRange: [0.01, 0.20], defaultName: "tts", placeholderDesc: "Convert text to natural-sounding speech" },
|
|
14
|
-
{ value: "
|
|
15
|
-
{ value: "
|
|
16
|
-
{ value: "
|
|
17
|
-
{ value: "coding/
|
|
18
|
-
{ value: "coding/review", routing: "instant", timeoutS: 180, suggestedPrice: 0.05, priceRange: [0.02, 0.50], defaultName: "code-review", placeholderDesc: "Review a diff or PR for bugs and style issues" },
|
|
28
|
+
{ value: "generation/video_long", routing: "escrow", timeoutS: null, suggestedPrice: 5.00, priceRange: [1.00, 50.00], defaultName: "gen-video-long", placeholderDesc: "Generate long-form narrated video (escrow)" },
|
|
29
|
+
{ value: "analysis/data", routing: "escrow", timeoutS: null, suggestedPrice: 0.50, priceRange: [0.10, 5.00], defaultName: "data-analysis", placeholderDesc: "Analyze a dataset and deliver a report" },
|
|
30
|
+
{ value: "coding/generation", routing: "escrow", timeoutS: null, suggestedPrice: 1.00, priceRange: [0.20, 10.00], defaultName: "code-gen", placeholderDesc: "Generate code or a small project from a spec" },
|
|
31
|
+
{ value: "coding/review", routing: "escrow", timeoutS: null, suggestedPrice: 0.50, priceRange: [0.10, 5.00], defaultName: "code-review", placeholderDesc: "Review a diff or PR for bugs and style issues" },
|
|
19
32
|
{ value: "other", routing: "auto", timeoutS: null, suggestedPrice: 0.02, priceRange: [0.01, 1.00], defaultName: "", placeholderDesc: "Describe what this skill does" },
|
|
20
33
|
];
|
|
21
34
|
const PRICE_THRESHOLD_FOR_ESCROW = 1.0; // mirrors backend constant
|
|
@@ -29,13 +29,8 @@ export async function providerSetupWizard() {
|
|
|
29
29
|
console.log(chalk.red("\n No agent config found. Run `clawmoney setup` first to register.\n"));
|
|
30
30
|
process.exit(1);
|
|
31
31
|
}
|
|
32
|
-
// Render the full role catalog as a note before the multiselect, so the
|
|
33
|
-
// user has a stable reference even after clack collapses the prompt to
|
|
34
|
-
// its selected-items summary. Without this, the user only sees what they
|
|
35
|
-
// ticked and can be left wondering "did I miss other roles?".
|
|
36
|
-
note(ROLES.map((r) => `${chalk.bold(r.label.padEnd(16, " "))}${chalk.dim(r.hint)}`).join("\n"), "Three provider roles — pick any combination");
|
|
37
32
|
const picked = await multiselect({
|
|
38
|
-
message: "
|
|
33
|
+
message: "Provider roles — toggle with SPACE, confirm with ENTER (skip all to register no role):",
|
|
39
34
|
options: ROLES.map((r) => ({
|
|
40
35
|
value: r.value,
|
|
41
36
|
label: r.label,
|