hackwriter 0.0.4 → 0.0.6
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 +150 -29
- package/dist/cli.js +10 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +69 -119
- package/dist/commands/setup.js.map +1 -1
- package/dist/config/AnthropicDiscovery.d.ts +6 -0
- package/dist/config/AnthropicDiscovery.d.ts.map +1 -0
- package/dist/config/AnthropicDiscovery.js +52 -0
- package/dist/config/AnthropicDiscovery.js.map +1 -0
- package/dist/config/ConfigurationLoader.d.ts +0 -1
- package/dist/config/ConfigurationLoader.d.ts.map +1 -1
- package/dist/config/ConfigurationLoader.js +51 -26
- package/dist/config/ConfigurationLoader.js.map +1 -1
- package/dist/config/OllamaDiscovery.d.ts +6 -0
- package/dist/config/OllamaDiscovery.d.ts.map +1 -0
- package/dist/config/OllamaDiscovery.js +31 -0
- package/dist/config/OllamaDiscovery.js.map +1 -0
- package/dist/config/OpenAIDiscovery.d.ts +6 -0
- package/dist/config/OpenAIDiscovery.d.ts.map +1 -0
- package/dist/config/OpenAIDiscovery.js +74 -0
- package/dist/config/OpenAIDiscovery.js.map +1 -0
- package/dist/config/ProviderDiscovery.d.ts +5 -0
- package/dist/config/ProviderDiscovery.d.ts.map +1 -0
- package/dist/config/ProviderDiscovery.js +94 -0
- package/dist/config/ProviderDiscovery.js.map +1 -0
- package/dist/config/ProviderRegistry.d.ts +16 -0
- package/dist/config/ProviderRegistry.d.ts.map +1 -0
- package/dist/config/ProviderRegistry.js +56 -0
- package/dist/config/ProviderRegistry.js.map +1 -0
- package/dist/ui/shell/CommandRegistry.d.ts +5 -3
- package/dist/ui/shell/CommandRegistry.d.ts.map +1 -1
- package/dist/ui/shell/CommandRegistry.js +103 -24
- package/dist/ui/shell/CommandRegistry.js.map +1 -1
- package/dist/ui/shell/InteractiveShell.d.ts +18 -2
- package/dist/ui/shell/InteractiveShell.d.ts.map +1 -1
- package/dist/ui/shell/InteractiveShell.js +47 -24
- package/dist/ui/shell/InteractiveShell.js.map +1 -1
- package/package.json +12 -13
package/README.md
CHANGED
|
@@ -1,55 +1,176 @@
|
|
|
1
1
|
# HackWriter
|
|
2
2
|
|
|
3
|
-
Writing
|
|
3
|
+
**Writing Agent for HackMD** - Zero-config, multi-provider LLM support
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Quick Start
|
|
6
6
|
|
|
7
|
-
```
|
|
7
|
+
```bash
|
|
8
8
|
npx hackwriter
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
If you don't have API keys configured, the setup wizard will guide you through it.
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
**That's it!** No config files needed.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
16
|
|
|
17
|
-
##
|
|
17
|
+
## Installation
|
|
18
|
+
|
|
19
|
+
**One-time use**:
|
|
20
|
+
```bash
|
|
21
|
+
npx hackwriter
|
|
22
|
+
```
|
|
18
23
|
|
|
19
|
-
|
|
24
|
+
**Global install**:
|
|
25
|
+
```bash
|
|
26
|
+
npm i -g hackwriter
|
|
20
27
|
|
|
21
|
-
```sh
|
|
22
28
|
hackwriter
|
|
23
29
|
```
|
|
24
30
|
|
|
25
|
-
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Features
|
|
34
|
+
|
|
35
|
+
✅ **Zero-Config** - detected existing environment variables
|
|
36
|
+
✅ **Multi-Provider** - Anthropic, OpenAI, Ollama (auto-detected)
|
|
37
|
+
✅ **Model Switching** - Switch models on-the-fly with `/model`
|
|
38
|
+
✅ **Session Persistence** - Resume your work anytime
|
|
39
|
+
✅ **Smart Approvals** - Confirms destructive actions
|
|
26
40
|
|
|
41
|
+
**HackMD Operations**:
|
|
42
|
+
- List, read, create, update, delete notes
|
|
43
|
+
- Personal & team notes support
|
|
44
|
+
- Search and export notes
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Configuration
|
|
49
|
+
|
|
50
|
+
### Automatic Setup
|
|
51
|
+
|
|
52
|
+
Run `hackwriter` and follow the setup wizard. It will ask for:
|
|
53
|
+
- LLM provider (Anthropic, OpenAI, or Ollama) API key (if needed)
|
|
27
54
|
- HackMD API token
|
|
28
|
-
|
|
55
|
+
|
|
56
|
+
### Manual Setup (Optional)
|
|
57
|
+
|
|
58
|
+
**Environment Variables** - Skip setup wizard by setting these:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
export ANTHROPIC_API_KEY=sk-ant-xxx # or OPENAI_API_KEY
|
|
62
|
+
export HACKMD_API_TOKEN=your-token
|
|
63
|
+
hackwriter # Starts immediately!
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
| Variable | Description |
|
|
67
|
+
|----------|-------------|
|
|
68
|
+
| `ANTHROPIC_API_KEY` | Anthropic API key (optional) |
|
|
69
|
+
| `OPENAI_API_KEY` | OpenAI API key (optional) |
|
|
70
|
+
| `HACKMD_API_TOKEN` | HackMD API token (required) |
|
|
71
|
+
|
|
72
|
+
**Config File** - Override defaults with `~/.hackwriter/config.json`:
|
|
73
|
+
|
|
74
|
+
```json
|
|
75
|
+
{
|
|
76
|
+
"defaultModel": "anthropic-claude-3-5-sonnet-latest",
|
|
77
|
+
"models": {
|
|
78
|
+
"fast": {
|
|
79
|
+
"provider": "anthropic",
|
|
80
|
+
"model": "claude-3-5-haiku-latest",
|
|
81
|
+
"maxContextSize": 200000
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
---
|
|
29
88
|
|
|
30
89
|
## Usage
|
|
31
90
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
hackwriter
|
|
36
|
-
hackwriter --
|
|
37
|
-
hackwriter --debug
|
|
91
|
+
### Interactive Shell
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
hackwriter # Start interactive mode
|
|
95
|
+
hackwriter --continue # Resume last session
|
|
96
|
+
hackwriter --debug # Enable debug logging
|
|
97
|
+
hackwriter -m gpt-4o # Use specific model
|
|
38
98
|
```
|
|
39
99
|
|
|
40
|
-
|
|
100
|
+
### Shell Commands
|
|
41
101
|
|
|
42
|
-
|
|
102
|
+
```bash
|
|
103
|
+
/help # Show available commands
|
|
104
|
+
/model # List/switch models
|
|
105
|
+
/model openai-gpt-4o # Switch to GPT-4o
|
|
106
|
+
/status # Show current status
|
|
107
|
+
/exit # Exit (or /quit, /q)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Single Command
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
hackwriter -c "list my notes"
|
|
114
|
+
hackwriter -c "create a note titled 'Meeting Notes'"
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Auto-Approve Mode
|
|
43
118
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
119
|
+
```bash
|
|
120
|
+
hackwriter --yolo # Skip all confirmations
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
48
124
|
|
|
49
|
-
##
|
|
125
|
+
## Supported Providers
|
|
50
126
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
pnpm run test
|
|
127
|
+
### Anthropic
|
|
128
|
+
```bash
|
|
129
|
+
export ANTHROPIC_API_KEY=sk-ant-xxx
|
|
55
130
|
```
|
|
131
|
+
Models: Claude 3.5 Haiku, Sonnet, Opus 4
|
|
132
|
+
|
|
133
|
+
### OpenAI
|
|
134
|
+
```bash
|
|
135
|
+
export OPENAI_API_KEY=sk-xxx
|
|
136
|
+
```
|
|
137
|
+
Models: GPT-4o, GPT-4o-mini, o1
|
|
138
|
+
|
|
139
|
+
### Ollama (Local)
|
|
140
|
+
```bash
|
|
141
|
+
# Ollama auto-detected if running
|
|
142
|
+
ollama serve
|
|
143
|
+
```
|
|
144
|
+
All local models automatically discovered
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## Advanced
|
|
149
|
+
|
|
150
|
+
### Custom Ollama Models
|
|
151
|
+
|
|
152
|
+
```json
|
|
153
|
+
{
|
|
154
|
+
"models": {
|
|
155
|
+
"llama": {
|
|
156
|
+
"provider": "ollama",
|
|
157
|
+
"model": "llama3.1:70b",
|
|
158
|
+
"maxContextSize": 128000
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
"providers": {
|
|
162
|
+
"ollama": {
|
|
163
|
+
"type": "ollama",
|
|
164
|
+
"baseUrl": "http://localhost:11434/api"
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Model Management
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
/model # Show all available models
|
|
174
|
+
/model anthropic-* # List Anthropic models
|
|
175
|
+
/model ollama-llama3.1 # Switch to specific model
|
|
176
|
+
```
|
package/dist/cli.js
CHANGED
|
@@ -49,8 +49,10 @@ async function runAgent(options) {
|
|
|
49
49
|
}
|
|
50
50
|
const config = await ConfigurationLoader.load();
|
|
51
51
|
Logger.debug("CLI", `Config loaded: ${config.defaultModel || "no default"}, ${Object.keys(config.models).length} model(s)`);
|
|
52
|
+
// Check if we have discovered providers from environment
|
|
53
|
+
const hasDiscoveredProviders = Object.keys(config.providers).some((name) => config.providers[name].apiKey);
|
|
52
54
|
const needsSetup = !config.services.hackmd?.apiToken ||
|
|
53
|
-
(!config.defaultModel && !options.model);
|
|
55
|
+
(!config.defaultModel && !options.model && !hasDiscoveredProviders);
|
|
54
56
|
if (needsSetup) {
|
|
55
57
|
console.log(chalk.yellow("⚙️ Configuration needed. Starting setup wizard...\n"));
|
|
56
58
|
await setupCommand(true);
|
|
@@ -108,8 +110,13 @@ async function runAgent(options) {
|
|
|
108
110
|
await context.loadFromDisk();
|
|
109
111
|
// Create executor
|
|
110
112
|
const executor = new AgentExecutor(agent, context, languageModel, config.loopControl);
|
|
111
|
-
|
|
112
|
-
|
|
113
|
+
const shell = new InteractiveShell(executor, {
|
|
114
|
+
currentModelName: options.model ?? config.defaultModel,
|
|
115
|
+
config,
|
|
116
|
+
context,
|
|
117
|
+
toolRegistry,
|
|
118
|
+
systemPrompt: agent.systemPrompt,
|
|
119
|
+
});
|
|
113
120
|
await shell.start(options.command);
|
|
114
121
|
}
|
|
115
122
|
function buildSystemPrompt(workDir) {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"AAMA,wBAAsB,YAAY,CAAC,eAAe,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAoFzE"}
|
package/dist/commands/setup.js
CHANGED
|
@@ -1,134 +1,84 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import chalk from
|
|
3
|
-
import { ConfigurationLoader } from
|
|
1
|
+
import { password } from '@inquirer/prompts';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { ConfigurationLoader } from '../config/ConfigurationLoader.js';
|
|
4
|
+
import { discoverProviders, discoverModels } from '../config/ProviderDiscovery.js';
|
|
4
5
|
export async function setupCommand(isAutoTriggered = false) {
|
|
5
|
-
console.log(chalk.bold.cyan(
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
6
|
+
console.log(chalk.bold.cyan('\n🔧 HackWriter Setup\n'));
|
|
7
|
+
// 1. Show what's already discovered
|
|
8
|
+
const providers = discoverProviders();
|
|
9
|
+
const models = await discoverModels(providers);
|
|
10
|
+
if (Object.keys(providers).length > 0) {
|
|
11
|
+
console.log(chalk.green('Environment Detection:'));
|
|
12
|
+
for (const [name, provider] of Object.entries(providers)) {
|
|
13
|
+
if (provider.apiKey) {
|
|
14
|
+
console.log(chalk.green(` ✓ ${name.toUpperCase()}_API_KEY found`));
|
|
15
|
+
}
|
|
16
|
+
else if (name === 'ollama') {
|
|
17
|
+
console.log(chalk.green(' ✓ Ollama detected'));
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
const modelCount = Object.keys(models).length;
|
|
21
|
+
if (modelCount > 0) {
|
|
22
|
+
console.log(chalk.green(` ✓ ${modelCount} model(s) available\n`));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
console.log(chalk.yellow('No providers detected in environment'));
|
|
27
|
+
console.log(chalk.gray('\nTo get started, set one of these environment variables:\n'));
|
|
28
|
+
console.log(chalk.cyan(' export ANTHROPIC_API_KEY=sk-ant-...'));
|
|
29
|
+
console.log(chalk.cyan(' export OPENAI_API_KEY=sk-...'));
|
|
30
|
+
console.log(chalk.gray('\nOr install Ollama locally:'));
|
|
31
|
+
console.log(chalk.cyan(' https://ollama.ai\n'));
|
|
32
|
+
}
|
|
33
|
+
// 2. HackMD token (only if not in env)
|
|
34
|
+
let hackmdToken = process.env.HACKMD_API_TOKEN;
|
|
35
|
+
if (!hackmdToken) {
|
|
36
|
+
console.log(chalk.yellow('Configuration needed:\n'));
|
|
37
|
+
hackmdToken = await password({
|
|
38
|
+
message: 'Enter HackMD API token',
|
|
39
|
+
mask: '*',
|
|
29
40
|
});
|
|
30
|
-
if (!
|
|
31
|
-
console.log(chalk.red(
|
|
41
|
+
if (!hackmdToken) {
|
|
42
|
+
console.log(chalk.red('\n❌ HackMD token is required'));
|
|
32
43
|
process.exit(1);
|
|
33
44
|
}
|
|
34
45
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
: providerType === "openai"
|
|
39
|
-
? "gpt-4.1-mini"
|
|
40
|
-
: "phi3";
|
|
41
|
-
const model = await input({
|
|
42
|
-
message: "Enter model name",
|
|
43
|
-
default: modelDefault,
|
|
44
|
-
});
|
|
45
|
-
// Max context size
|
|
46
|
-
const contextDefault = providerType === "anthropic"
|
|
47
|
-
? 200000
|
|
48
|
-
: providerType === "openai"
|
|
49
|
-
? 128000
|
|
50
|
-
: 128000;
|
|
51
|
-
const maxContextSizeStr = await input({
|
|
52
|
-
message: "Maximum context size (tokens)",
|
|
53
|
-
default: String(contextDefault),
|
|
54
|
-
});
|
|
55
|
-
const parsedContextSize = Number.parseInt(maxContextSizeStr, 10);
|
|
56
|
-
const maxContextSize = Number.isFinite(parsedContextSize)
|
|
57
|
-
? parsedContextSize
|
|
58
|
-
: contextDefault;
|
|
59
|
-
const baseUrlDefault = providerType === "ollama" ? "http://localhost:11434/api" : "";
|
|
60
|
-
const baseUrl = await input({
|
|
61
|
-
message: providerType === "ollama"
|
|
62
|
-
? "Ollama API URL"
|
|
63
|
-
: "Custom base URL (optional)",
|
|
64
|
-
default: baseUrlDefault,
|
|
65
|
-
});
|
|
66
|
-
let organizationId;
|
|
67
|
-
let projectId;
|
|
68
|
-
if (providerType === "openai") {
|
|
69
|
-
organizationId =
|
|
70
|
-
(await input({
|
|
71
|
-
message: "OpenAI organization ID (optional)",
|
|
72
|
-
default: "",
|
|
73
|
-
})).trim() || undefined;
|
|
74
|
-
projectId =
|
|
75
|
-
(await input({
|
|
76
|
-
message: "OpenAI project ID (optional)",
|
|
77
|
-
default: "",
|
|
78
|
-
})).trim() || undefined;
|
|
46
|
+
else {
|
|
47
|
+
console.log(chalk.green('Configuration:'));
|
|
48
|
+
console.log(chalk.green(' ✓ HACKMD_API_TOKEN found\n'));
|
|
79
49
|
}
|
|
80
|
-
//
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
console.log(chalk.
|
|
50
|
+
// 3. Check if we have any models available
|
|
51
|
+
if (Object.keys(models).length === 0) {
|
|
52
|
+
console.log(chalk.red('\n❌ No LLM providers available!\n'));
|
|
53
|
+
console.log(chalk.yellow('Please set one of these environment variables:\n'));
|
|
54
|
+
console.log(chalk.cyan(' export ANTHROPIC_API_KEY=sk-ant-...'));
|
|
55
|
+
console.log(chalk.cyan(' export OPENAI_API_KEY=sk-...'));
|
|
56
|
+
console.log(chalk.gray('\nOr install and run Ollama:'));
|
|
57
|
+
console.log(chalk.cyan(' https://ollama.ai\n'));
|
|
87
58
|
process.exit(1);
|
|
88
59
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
defaultModel: "default",
|
|
98
|
-
models: {
|
|
99
|
-
default: {
|
|
100
|
-
provider: answers.provider,
|
|
101
|
-
model: answers.model,
|
|
102
|
-
maxContextSize: answers.maxContextSize,
|
|
103
|
-
},
|
|
104
|
-
},
|
|
105
|
-
providers: {
|
|
106
|
-
[answers.provider]: {
|
|
107
|
-
type: providerType,
|
|
108
|
-
apiKey: answers.llmApiKey,
|
|
109
|
-
baseUrl: baseUrl.trim() || undefined,
|
|
110
|
-
organizationId,
|
|
111
|
-
projectId,
|
|
60
|
+
// 4. Save (only if needed)
|
|
61
|
+
if (!process.env.HACKMD_API_TOKEN) {
|
|
62
|
+
const config = {
|
|
63
|
+
services: {
|
|
64
|
+
hackmd: {
|
|
65
|
+
baseUrl: 'https://api.hackmd.io/v1',
|
|
66
|
+
apiToken: hackmdToken,
|
|
67
|
+
},
|
|
112
68
|
},
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
baseUrl: "https://api.hackmd.io/v1",
|
|
117
|
-
apiToken: answers.hackmdToken,
|
|
69
|
+
loopControl: {
|
|
70
|
+
maxStepsPerRun: 100,
|
|
71
|
+
maxRetriesPerStep: 3,
|
|
118
72
|
},
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
maxRetriesPerStep: 3,
|
|
123
|
-
},
|
|
124
|
-
};
|
|
125
|
-
await ConfigurationLoader.save(config);
|
|
126
|
-
console.log(chalk.green("\n✅ Configuration saved!"));
|
|
127
|
-
if (isAutoTriggered) {
|
|
128
|
-
console.log(chalk.cyan("\n🚀 Starting HackMD Agent...\n"));
|
|
73
|
+
};
|
|
74
|
+
await ConfigurationLoader.save(config);
|
|
75
|
+
console.log(chalk.green('✅ Configuration saved!\n'));
|
|
129
76
|
}
|
|
130
77
|
else {
|
|
131
|
-
console.log(chalk.
|
|
78
|
+
console.log(chalk.green('✅ All set! (using environment variables)\n'));
|
|
79
|
+
}
|
|
80
|
+
if (isAutoTriggered) {
|
|
81
|
+
console.log(chalk.cyan('🚀 Starting HackMD Agent...\n'));
|
|
132
82
|
}
|
|
133
83
|
}
|
|
134
84
|
//# sourceMappingURL=setup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnthropicDiscovery.d.ts","sourceRoot":"","sources":["../../src/config/AnthropicDiscovery.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAgB7D;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAmCxF"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Logger } from '../utils/Logger.js';
|
|
2
|
+
/**
|
|
3
|
+
* Discover Anthropic models by calling the API
|
|
4
|
+
*/
|
|
5
|
+
export async function discoverAnthropicModels(apiKey) {
|
|
6
|
+
try {
|
|
7
|
+
const response = await fetch('https://api.anthropic.com/v1/models', {
|
|
8
|
+
headers: {
|
|
9
|
+
'x-api-key': apiKey,
|
|
10
|
+
'anthropic-version': '2023-06-01',
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
if (!response.ok) {
|
|
14
|
+
Logger.debug('AnthropicDiscovery', `API request failed: ${response.status}`);
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
const data = await response.json();
|
|
18
|
+
const models = [];
|
|
19
|
+
for (const model of data.data) {
|
|
20
|
+
// Only include chat models (not embeddings, etc.)
|
|
21
|
+
if (model.type === 'model') {
|
|
22
|
+
models.push({
|
|
23
|
+
id: model.id,
|
|
24
|
+
name: model.display_name || model.id,
|
|
25
|
+
contextWindow: getContextWindow(model.id),
|
|
26
|
+
});
|
|
27
|
+
Logger.debug('AnthropicDiscovery', `Discovered model: ${model.id}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return models;
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
Logger.debug('AnthropicDiscovery', `Failed to discover models: ${String(error)}`);
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get context window size based on model ID
|
|
39
|
+
*/
|
|
40
|
+
function getContextWindow(modelId) {
|
|
41
|
+
// Claude 3.5 models
|
|
42
|
+
if (modelId.includes('claude-3-5')) {
|
|
43
|
+
return 200000;
|
|
44
|
+
}
|
|
45
|
+
// Claude 3 Opus
|
|
46
|
+
if (modelId.includes('opus')) {
|
|
47
|
+
return 200000;
|
|
48
|
+
}
|
|
49
|
+
// Default
|
|
50
|
+
return 200000;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=AnthropicDiscovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnthropicDiscovery.js","sourceRoot":"","sources":["../../src/config/AnthropicDiscovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAiB5C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,MAAc;IAC1D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,qCAAqC,EAAE;YAClE,OAAO,EAAE;gBACP,WAAW,EAAE,MAAM;gBACnB,mBAAmB,EAAE,YAAY;aAClC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,uBAAuB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7E,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA6B,CAAC;QAC9D,MAAM,MAAM,GAAsB,EAAE,CAAC;QAErC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC9B,kDAAkD;YAClD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC;oBACV,EAAE,EAAE,KAAK,CAAC,EAAE;oBACZ,IAAI,EAAE,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,EAAE;oBACpC,aAAa,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;iBAC1C,CAAC,CAAC;gBAEH,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,qBAAqB,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,8BAA8B,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClF,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,OAAe;IACvC,oBAAoB;IACpB,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,gBAAgB;IAChB,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,UAAU;IACV,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigurationLoader.d.ts","sourceRoot":"","sources":["../../src/config/ConfigurationLoader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"ConfigurationLoader.d.ts","sourceRoot":"","sources":["../../src/config/ConfigurationLoader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMxD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAC,UAAU,CAIvB;WAEW,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC;WAwF9B,IAAI,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CAiCxD"}
|