hackwriter 0.0.9 ā 0.0.10
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAOA,wBAAsB,YAAY,CAAC,eAAe,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAuHzE"}
|
package/dist/commands/setup.js
CHANGED
|
@@ -1,41 +1,38 @@
|
|
|
1
|
-
import { password } from '@inquirer/prompts';
|
|
1
|
+
import { password, select } from '@inquirer/prompts';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
3
|
import { ConfigurationLoader } from '../config/ConfigurationLoader.js';
|
|
4
4
|
import { discoverProviders, discoverModels } from '../config/ProviderDiscovery.js';
|
|
5
|
+
import { DEFAULT_MAX_STEPS_PER_RUN, DEFAULT_MAX_RETRIES_PER_STEP } from '../config/constants.js';
|
|
5
6
|
export async function setupCommand(isAutoTriggered = false) {
|
|
6
7
|
console.log(chalk.bold.cyan('\nš§ HackWriter Setup\n'));
|
|
7
8
|
// 1. Show what's already discovered
|
|
8
9
|
const providers = discoverProviders();
|
|
9
10
|
const models = await discoverModels(providers);
|
|
10
11
|
const modelCount = Object.keys(models).length;
|
|
11
|
-
|
|
12
|
+
const hasAnthropicKey = !!providers.anthropic?.apiKey;
|
|
13
|
+
const hasOpenAIKey = !!providers.openai?.apiKey;
|
|
12
14
|
const hasOllamaModels = Object.values(models).some(m => m.provider === 'ollama');
|
|
13
|
-
if (
|
|
15
|
+
if (hasAnthropicKey || hasOpenAIKey || hasOllamaModels) {
|
|
14
16
|
console.log(chalk.green('Environment Detection:'));
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
if (hasAnthropicKey) {
|
|
18
|
+
console.log(chalk.green(' ā ANTHROPIC_API_KEY found'));
|
|
19
|
+
}
|
|
20
|
+
if (hasOpenAIKey) {
|
|
21
|
+
console.log(chalk.green(' ā OPENAI_API_KEY found'));
|
|
22
|
+
}
|
|
23
|
+
if (hasOllamaModels) {
|
|
24
|
+
console.log(chalk.green(' ā Ollama detected'));
|
|
22
25
|
}
|
|
23
26
|
if (modelCount > 0) {
|
|
24
27
|
console.log(chalk.green(` ā ${modelCount} model(s) available\n`));
|
|
25
28
|
}
|
|
26
29
|
}
|
|
27
30
|
else {
|
|
28
|
-
console.log(chalk.yellow('No providers detected in environment'));
|
|
29
|
-
console.log(chalk.gray('\nTo get started, set one of these environment variables:\n'));
|
|
30
|
-
console.log(chalk.cyan(' export ANTHROPIC_API_KEY=sk-ant-...'));
|
|
31
|
-
console.log(chalk.cyan(' export OPENAI_API_KEY=sk-...'));
|
|
32
|
-
console.log(chalk.gray('\nOr install Ollama locally:'));
|
|
33
|
-
console.log(chalk.cyan(' https://ollama.ai\n'));
|
|
31
|
+
console.log(chalk.yellow('No providers detected in environment\n'));
|
|
34
32
|
}
|
|
35
33
|
// 2. HackMD token (only if not in env)
|
|
36
34
|
let hackmdToken = process.env.HACKMD_API_TOKEN;
|
|
37
35
|
if (!hackmdToken) {
|
|
38
|
-
console.log(chalk.yellow('Configuration needed:\n'));
|
|
39
36
|
hackmdToken = await password({
|
|
40
37
|
message: 'Enter HackMD API token',
|
|
41
38
|
mask: '*',
|
|
@@ -49,37 +46,67 @@ export async function setupCommand(isAutoTriggered = false) {
|
|
|
49
46
|
console.log(chalk.green('Configuration:'));
|
|
50
47
|
console.log(chalk.green(' ā HACKMD_API_TOKEN found\n'));
|
|
51
48
|
}
|
|
52
|
-
// 3.
|
|
49
|
+
// 3. If no models available, prompt user to add LLM provider
|
|
50
|
+
let llmApiKey;
|
|
51
|
+
let llmProvider;
|
|
53
52
|
if (Object.keys(models).length === 0) {
|
|
54
|
-
console.log(chalk.
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
53
|
+
console.log(chalk.yellow('ā ļø No LLM providers configured\n'));
|
|
54
|
+
const providerChoice = await select({
|
|
55
|
+
message: 'Select an LLM provider to configure:',
|
|
56
|
+
choices: [
|
|
57
|
+
{ name: 'Anthropic (Claude)', value: 'anthropic' },
|
|
58
|
+
{ name: 'OpenAI (GPT)', value: 'openai' },
|
|
59
|
+
{ name: 'Skip (I will use Ollama locally)', value: 'skip' },
|
|
60
|
+
],
|
|
61
|
+
});
|
|
62
|
+
if (providerChoice === 'skip') {
|
|
63
|
+
console.log(chalk.yellow('\nā ļø Skipping LLM configuration'));
|
|
64
|
+
console.log(chalk.gray('To use HackWriter, you need to either:'));
|
|
65
|
+
console.log(chalk.cyan(' 1. Install and run Ollama: https://ollama.ai'));
|
|
66
|
+
console.log(chalk.cyan(' 2. Set ANTHROPIC_API_KEY or OPENAI_API_KEY environment variable'));
|
|
67
|
+
console.log(chalk.cyan(' 3. Run "hackwriter setup" again to configure\n'));
|
|
68
|
+
process.exit(0);
|
|
69
|
+
}
|
|
70
|
+
llmProvider = providerChoice;
|
|
71
|
+
const providerName = llmProvider === 'anthropic' ? 'Anthropic' : 'OpenAI';
|
|
72
|
+
llmApiKey = await password({
|
|
73
|
+
message: `Enter ${providerName} API key`,
|
|
74
|
+
mask: '*',
|
|
75
|
+
});
|
|
76
|
+
if (!llmApiKey) {
|
|
77
|
+
console.log(chalk.red(`\nā ${providerName} API key is required`));
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
console.log(chalk.green(`\nā ${providerName} API key configured`));
|
|
61
81
|
}
|
|
62
|
-
// 4. Save
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
apiToken: hackmdToken,
|
|
68
|
-
},
|
|
82
|
+
// 4. Save configuration
|
|
83
|
+
const configToSave = {
|
|
84
|
+
services: {
|
|
85
|
+
hackmd: {
|
|
86
|
+
apiToken: hackmdToken,
|
|
69
87
|
},
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
88
|
+
},
|
|
89
|
+
loopControl: {
|
|
90
|
+
maxStepsPerRun: DEFAULT_MAX_STEPS_PER_RUN,
|
|
91
|
+
maxRetriesPerStep: DEFAULT_MAX_RETRIES_PER_STEP,
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
// Add LLM provider if configured
|
|
95
|
+
if (llmProvider && llmApiKey) {
|
|
96
|
+
configToSave.providers = {
|
|
97
|
+
[llmProvider]: {
|
|
98
|
+
type: llmProvider,
|
|
99
|
+
apiKey: llmApiKey,
|
|
73
100
|
},
|
|
74
101
|
};
|
|
75
|
-
await ConfigurationLoader.save(config);
|
|
76
|
-
console.log(chalk.green('ā
Configuration saved!\n'));
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
console.log(chalk.green('ā
All set! (using environment variables)\n'));
|
|
80
102
|
}
|
|
103
|
+
await ConfigurationLoader.save(configToSave);
|
|
104
|
+
console.log(chalk.green('\nā
Configuration saved!\n'));
|
|
81
105
|
if (isAutoTriggered) {
|
|
82
|
-
console.log(chalk.cyan('š Starting
|
|
106
|
+
console.log(chalk.cyan('š Starting HackWriter...\n'));
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
console.log(chalk.gray('Run "hackwriter" to start the agent\n'));
|
|
83
110
|
}
|
|
84
111
|
}
|
|
85
112
|
//# sourceMappingURL=setup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
|