pm-orchestrator-runner 1.0.9 → 1.0.11
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/dist/cli/index.js +67 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/config/global-config.d.ts +3 -2
- package/dist/config/global-config.d.ts.map +1 -1
- package/dist/config/global-config.js +16 -2
- package/dist/config/global-config.js.map +1 -1
- package/dist/keys/api-key-onboarding.d.ts +33 -0
- package/dist/keys/api-key-onboarding.d.ts.map +1 -0
- package/dist/keys/api-key-onboarding.js +271 -0
- package/dist/keys/api-key-onboarding.js.map +1 -0
- package/dist/keys/index.d.ts +9 -0
- package/dist/keys/index.d.ts.map +1 -0
- package/dist/keys/index.js +20 -0
- package/dist/keys/index.js.map +1 -0
- package/dist/keys/key-input.d.ts +35 -0
- package/dist/keys/key-input.d.ts.map +1 -0
- package/dist/keys/key-input.js +151 -0
- package/dist/keys/key-input.js.map +1 -0
- package/dist/keys/key-validator.d.ts +35 -0
- package/dist/keys/key-validator.d.ts.map +1 -0
- package/dist/keys/key-validator.js +138 -0
- package/dist/keys/key-validator.js.map +1 -0
- package/dist/models/repl/model-registry.d.ts +18 -0
- package/dist/models/repl/model-registry.d.ts.map +1 -1
- package/dist/models/repl/model-registry.js +23 -2
- package/dist/models/repl/model-registry.js.map +1 -1
- package/dist/repl/repl-interface.d.ts +16 -1
- package/dist/repl/repl-interface.d.ts.map +1 -1
- package/dist/repl/repl-interface.js +177 -25
- package/dist/repl/repl-interface.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Key Input - Interactive hidden input for API keys
|
|
4
|
+
*
|
|
5
|
+
* Provides secure input collection for API keys:
|
|
6
|
+
* - Hidden input (characters not echoed)
|
|
7
|
+
* - Double-entry confirmation
|
|
8
|
+
* - SECURITY: Keys are NEVER logged
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
27
|
+
var ownKeys = function(o) {
|
|
28
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
29
|
+
var ar = [];
|
|
30
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
return ownKeys(o);
|
|
34
|
+
};
|
|
35
|
+
return function (mod) {
|
|
36
|
+
if (mod && mod.__esModule) return mod;
|
|
37
|
+
var result = {};
|
|
38
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
39
|
+
__setModuleDefault(result, mod);
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
42
|
+
})();
|
|
43
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
exports.readHiddenInput = readHiddenInput;
|
|
45
|
+
exports.promptForApiKey = promptForApiKey;
|
|
46
|
+
const readline = __importStar(require("readline"));
|
|
47
|
+
const stream_1 = require("stream");
|
|
48
|
+
/**
|
|
49
|
+
* Muted output stream that suppresses all writes
|
|
50
|
+
* Used for hidden password input
|
|
51
|
+
*/
|
|
52
|
+
class MutedStream extends stream_1.Writable {
|
|
53
|
+
isMuted = false;
|
|
54
|
+
mute() {
|
|
55
|
+
this.isMuted = true;
|
|
56
|
+
}
|
|
57
|
+
unmute() {
|
|
58
|
+
this.isMuted = false;
|
|
59
|
+
}
|
|
60
|
+
_write(chunk, _encoding, callback) {
|
|
61
|
+
if (!this.isMuted) {
|
|
62
|
+
process.stdout.write(chunk);
|
|
63
|
+
}
|
|
64
|
+
callback();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Read a single line with hidden input (password-style)
|
|
69
|
+
* Characters are not echoed to the terminal
|
|
70
|
+
*/
|
|
71
|
+
async function readHiddenInput(prompt) {
|
|
72
|
+
return new Promise((resolve) => {
|
|
73
|
+
const mutedOutput = new MutedStream();
|
|
74
|
+
const rl = readline.createInterface({
|
|
75
|
+
input: process.stdin,
|
|
76
|
+
output: mutedOutput,
|
|
77
|
+
terminal: true,
|
|
78
|
+
});
|
|
79
|
+
// Write the prompt, then mute for input
|
|
80
|
+
process.stdout.write(prompt);
|
|
81
|
+
mutedOutput.mute();
|
|
82
|
+
rl.question('', (answer) => {
|
|
83
|
+
mutedOutput.unmute();
|
|
84
|
+
process.stdout.write('\n'); // Add newline after hidden input
|
|
85
|
+
rl.close();
|
|
86
|
+
resolve(answer);
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Interactively prompt for an API key with double-entry confirmation
|
|
92
|
+
*
|
|
93
|
+
* Flow:
|
|
94
|
+
* 1. Prompt for API key (hidden input)
|
|
95
|
+
* 2. Prompt to confirm (hidden input)
|
|
96
|
+
* 3. Check if entries match
|
|
97
|
+
* 4. Return key if matched, error if not
|
|
98
|
+
*
|
|
99
|
+
* SECURITY: The key is returned only in the result object, never logged
|
|
100
|
+
*/
|
|
101
|
+
async function promptForApiKey(provider) {
|
|
102
|
+
console.log('');
|
|
103
|
+
console.log(`Setting up ${provider} API key...`);
|
|
104
|
+
console.log('(Input will be hidden for security)');
|
|
105
|
+
console.log('');
|
|
106
|
+
try {
|
|
107
|
+
// First entry
|
|
108
|
+
const key1 = await readHiddenInput(`Enter ${provider} API key: `);
|
|
109
|
+
// Check for empty input
|
|
110
|
+
if (!key1 || key1.trim().length === 0) {
|
|
111
|
+
return {
|
|
112
|
+
success: false,
|
|
113
|
+
error: 'Empty input. API key setup cancelled.',
|
|
114
|
+
cancelled: true,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
// Check for minimum length
|
|
118
|
+
if (key1.length < 10) {
|
|
119
|
+
return {
|
|
120
|
+
success: false,
|
|
121
|
+
error: 'API key too short (minimum 10 characters).',
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
// Second entry (confirmation)
|
|
125
|
+
const key2 = await readHiddenInput(`Confirm ${provider} API key: `);
|
|
126
|
+
// Check if entries match
|
|
127
|
+
if (key1 !== key2) {
|
|
128
|
+
console.log('');
|
|
129
|
+
console.log('Error: API keys do not match.');
|
|
130
|
+
console.log('Please try again with /keys set ' + provider);
|
|
131
|
+
return {
|
|
132
|
+
success: false,
|
|
133
|
+
error: 'API keys do not match.',
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
console.log('');
|
|
137
|
+
console.log('Keys match. Validating with ' + provider + ' API...');
|
|
138
|
+
return {
|
|
139
|
+
success: true,
|
|
140
|
+
key: key1,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
145
|
+
return {
|
|
146
|
+
success: false,
|
|
147
|
+
error: 'Failed to read input: ' + message,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=key-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-input.js","sourceRoot":"","sources":["../../src/keys/key-input.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Key Validator
|
|
3
|
+
*
|
|
4
|
+
* Validates API keys for OpenAI and Anthropic providers
|
|
5
|
+
* by making lightweight API calls to verify authentication.
|
|
6
|
+
*
|
|
7
|
+
* SECURITY: Keys are NEVER logged. Validation results contain
|
|
8
|
+
* only boolean status and error messages, never the key itself.
|
|
9
|
+
*/
|
|
10
|
+
export interface KeyValidationResult {
|
|
11
|
+
valid: boolean;
|
|
12
|
+
provider: 'openai' | 'anthropic';
|
|
13
|
+
error?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Validate an OpenAI API key by calling the models list endpoint.
|
|
17
|
+
* This is a lightweight, read-only endpoint that requires auth.
|
|
18
|
+
*/
|
|
19
|
+
export declare function validateOpenAIKey(key: string): Promise<KeyValidationResult>;
|
|
20
|
+
/**
|
|
21
|
+
* Validate an Anthropic API key by calling the messages endpoint
|
|
22
|
+
* with an invalid request. A 400 error means the key is valid
|
|
23
|
+
* (auth passed, but request was invalid). A 401 means invalid key.
|
|
24
|
+
*/
|
|
25
|
+
export declare function validateAnthropicKey(key: string): Promise<KeyValidationResult>;
|
|
26
|
+
/**
|
|
27
|
+
* Validate an API key for any supported provider.
|
|
28
|
+
*/
|
|
29
|
+
export declare function validateApiKey(provider: string, key: string): Promise<KeyValidationResult>;
|
|
30
|
+
/**
|
|
31
|
+
* Check if the key format looks valid (basic sanity check).
|
|
32
|
+
* Does NOT validate against the API.
|
|
33
|
+
*/
|
|
34
|
+
export declare function isKeyFormatValid(provider: string, key: string): boolean;
|
|
35
|
+
//# sourceMappingURL=key-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-validator.d.ts","sourceRoot":"","sources":["../../src/keys/key-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,QAAQ,GAAG,WAAW,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAoCjF;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA+CpF;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,mBAAmB,CAAC,CAe9B;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAiBvE"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* API Key Validator
|
|
4
|
+
*
|
|
5
|
+
* Validates API keys for OpenAI and Anthropic providers
|
|
6
|
+
* by making lightweight API calls to verify authentication.
|
|
7
|
+
*
|
|
8
|
+
* SECURITY: Keys are NEVER logged. Validation results contain
|
|
9
|
+
* only boolean status and error messages, never the key itself.
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.validateOpenAIKey = validateOpenAIKey;
|
|
13
|
+
exports.validateAnthropicKey = validateAnthropicKey;
|
|
14
|
+
exports.validateApiKey = validateApiKey;
|
|
15
|
+
exports.isKeyFormatValid = isKeyFormatValid;
|
|
16
|
+
/**
|
|
17
|
+
* Validate an OpenAI API key by calling the models list endpoint.
|
|
18
|
+
* This is a lightweight, read-only endpoint that requires auth.
|
|
19
|
+
*/
|
|
20
|
+
async function validateOpenAIKey(key) {
|
|
21
|
+
const provider = 'openai';
|
|
22
|
+
if (!key || key.length < 10) {
|
|
23
|
+
return { valid: false, provider, error: 'Key too short' };
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
const response = await fetch('https://api.openai.com/v1/models', {
|
|
27
|
+
method: 'GET',
|
|
28
|
+
headers: {
|
|
29
|
+
Authorization: `Bearer ${key}`,
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
if (response.status === 200) {
|
|
33
|
+
return { valid: true, provider };
|
|
34
|
+
}
|
|
35
|
+
if (response.status === 401) {
|
|
36
|
+
return { valid: false, provider, error: 'Invalid API key' };
|
|
37
|
+
}
|
|
38
|
+
if (response.status === 429) {
|
|
39
|
+
return { valid: false, provider, error: 'Rate limited - please try again' };
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
valid: false,
|
|
43
|
+
provider,
|
|
44
|
+
error: `Unexpected response: ${response.status}`,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
const message = error instanceof Error ? error.message : 'Network error';
|
|
49
|
+
return { valid: false, provider, error: message };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Validate an Anthropic API key by calling the messages endpoint
|
|
54
|
+
* with an invalid request. A 400 error means the key is valid
|
|
55
|
+
* (auth passed, but request was invalid). A 401 means invalid key.
|
|
56
|
+
*/
|
|
57
|
+
async function validateAnthropicKey(key) {
|
|
58
|
+
const provider = 'anthropic';
|
|
59
|
+
if (!key || key.length < 10) {
|
|
60
|
+
return { valid: false, provider, error: 'Key too short' };
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
// Send an intentionally minimal/invalid request to check auth
|
|
64
|
+
// A 400 error means auth passed, 401 means invalid key
|
|
65
|
+
const response = await fetch('https://api.anthropic.com/v1/messages', {
|
|
66
|
+
method: 'POST',
|
|
67
|
+
headers: {
|
|
68
|
+
'x-api-key': key,
|
|
69
|
+
'anthropic-version': '2023-06-01',
|
|
70
|
+
'content-type': 'application/json',
|
|
71
|
+
},
|
|
72
|
+
body: JSON.stringify({
|
|
73
|
+
model: 'claude-3-haiku-20240307',
|
|
74
|
+
max_tokens: 1,
|
|
75
|
+
messages: [],
|
|
76
|
+
}),
|
|
77
|
+
});
|
|
78
|
+
// 400 = auth OK, invalid request (expected)
|
|
79
|
+
// 200 = auth OK, request succeeded (unexpected but valid)
|
|
80
|
+
if (response.status === 400 || response.status === 200) {
|
|
81
|
+
return { valid: true, provider };
|
|
82
|
+
}
|
|
83
|
+
if (response.status === 401) {
|
|
84
|
+
return { valid: false, provider, error: 'Invalid API key' };
|
|
85
|
+
}
|
|
86
|
+
if (response.status === 429) {
|
|
87
|
+
return { valid: false, provider, error: 'Rate limited - please try again' };
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
valid: false,
|
|
91
|
+
provider,
|
|
92
|
+
error: `Unexpected response: ${response.status}`,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
const message = error instanceof Error ? error.message : 'Network error';
|
|
97
|
+
return { valid: false, provider, error: message };
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Validate an API key for any supported provider.
|
|
102
|
+
*/
|
|
103
|
+
async function validateApiKey(provider, key) {
|
|
104
|
+
const normalizedProvider = provider.toLowerCase();
|
|
105
|
+
switch (normalizedProvider) {
|
|
106
|
+
case 'openai':
|
|
107
|
+
return validateOpenAIKey(key);
|
|
108
|
+
case 'anthropic':
|
|
109
|
+
return validateAnthropicKey(key);
|
|
110
|
+
default:
|
|
111
|
+
return {
|
|
112
|
+
valid: false,
|
|
113
|
+
provider: 'openai', // fallback for type
|
|
114
|
+
error: `Unknown provider: ${provider}`,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Check if the key format looks valid (basic sanity check).
|
|
120
|
+
* Does NOT validate against the API.
|
|
121
|
+
*/
|
|
122
|
+
function isKeyFormatValid(provider, key) {
|
|
123
|
+
if (!key || key.length < 10) {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
const normalizedProvider = provider.toLowerCase();
|
|
127
|
+
switch (normalizedProvider) {
|
|
128
|
+
case 'openai':
|
|
129
|
+
// OpenAI keys typically start with 'sk-'
|
|
130
|
+
return key.startsWith('sk-');
|
|
131
|
+
case 'anthropic':
|
|
132
|
+
// Anthropic keys typically start with 'sk-ant-'
|
|
133
|
+
return key.startsWith('sk-ant-');
|
|
134
|
+
default:
|
|
135
|
+
return key.length >= 10;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=key-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-validator.js","sourceRoot":"","sources":["../../src/keys/key-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,11 @@
|
|
|
5
5
|
* - OpenAI models with pricing
|
|
6
6
|
* - Anthropic models with pricing
|
|
7
7
|
* - claude-code does not have explicit models (delegated)
|
|
8
|
+
*
|
|
9
|
+
* Provider Recommendations:
|
|
10
|
+
* - openai: RECOMMENDED - API key based, direct control
|
|
11
|
+
* - anthropic: API key based, direct control
|
|
12
|
+
* - claude-code: NOT recommended by default, requires explicit opt-in (--provider claude-code)
|
|
8
13
|
*/
|
|
9
14
|
import { Provider } from './repl-state';
|
|
10
15
|
/**
|
|
@@ -26,10 +31,16 @@ export interface ProviderInfo {
|
|
|
26
31
|
description: string;
|
|
27
32
|
requiresApiKey: boolean;
|
|
28
33
|
envVariable: string | null;
|
|
34
|
+
/** If true, this provider requires explicit --provider flag to use */
|
|
35
|
+
requiresExplicitOptIn?: boolean;
|
|
29
36
|
}
|
|
30
37
|
/**
|
|
31
38
|
* Provider registry
|
|
32
39
|
* Per spec 12_LLM_PROVIDER_AND_MODELS.md Section 1.1
|
|
40
|
+
*
|
|
41
|
+
* IMPORTANT: claude-code is NOT the default.
|
|
42
|
+
* Default is api-key mode (openai/anthropic).
|
|
43
|
+
* claude-code requires explicit --provider claude-code.
|
|
33
44
|
*/
|
|
34
45
|
export declare const PROVIDER_REGISTRY: Record<Provider, ProviderInfo>;
|
|
35
46
|
/**
|
|
@@ -70,4 +81,11 @@ export declare function getAllProviders(): ProviderInfo[];
|
|
|
70
81
|
* @returns true if model exists
|
|
71
82
|
*/
|
|
72
83
|
export declare function isValidModelForProvider(provider: Provider, modelId: string): boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Check if a provider requires explicit opt-in
|
|
86
|
+
*
|
|
87
|
+
* @param provider - Provider identifier
|
|
88
|
+
* @returns true if provider requires explicit opt-in
|
|
89
|
+
*/
|
|
90
|
+
export declare function requiresExplicitOptIn(provider: Provider): boolean;
|
|
73
91
|
//# sourceMappingURL=model-registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-registry.d.ts","sourceRoot":"","sources":["../../../src/models/repl/model-registry.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"model-registry.d.ts","sourceRoot":"","sources":["../../../src/models/repl/model-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,QAAQ,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,sEAAsE;IACtE,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,QAAQ,EAAE,YAAY,CAuB5D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,EASpC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,EAQvC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAAE,CAWpE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,GAAG,SAAS,CAE5E;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,YAAY,EAAE,CAEhD;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAGpF;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAGjE"}
|
|
@@ -6,6 +6,11 @@
|
|
|
6
6
|
* - OpenAI models with pricing
|
|
7
7
|
* - Anthropic models with pricing
|
|
8
8
|
* - claude-code does not have explicit models (delegated)
|
|
9
|
+
*
|
|
10
|
+
* Provider Recommendations:
|
|
11
|
+
* - openai: RECOMMENDED - API key based, direct control
|
|
12
|
+
* - anthropic: API key based, direct control
|
|
13
|
+
* - claude-code: NOT recommended by default, requires explicit opt-in (--provider claude-code)
|
|
9
14
|
*/
|
|
10
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
16
|
exports.ANTHROPIC_MODELS = exports.OPENAI_MODELS = exports.PROVIDER_REGISTRY = void 0;
|
|
@@ -13,22 +18,28 @@ exports.getModelsForProvider = getModelsForProvider;
|
|
|
13
18
|
exports.getProviderInfo = getProviderInfo;
|
|
14
19
|
exports.getAllProviders = getAllProviders;
|
|
15
20
|
exports.isValidModelForProvider = isValidModelForProvider;
|
|
21
|
+
exports.requiresExplicitOptIn = requiresExplicitOptIn;
|
|
16
22
|
/**
|
|
17
23
|
* Provider registry
|
|
18
24
|
* Per spec 12_LLM_PROVIDER_AND_MODELS.md Section 1.1
|
|
25
|
+
*
|
|
26
|
+
* IMPORTANT: claude-code is NOT the default.
|
|
27
|
+
* Default is api-key mode (openai/anthropic).
|
|
28
|
+
* claude-code requires explicit --provider claude-code.
|
|
19
29
|
*/
|
|
20
30
|
exports.PROVIDER_REGISTRY = {
|
|
21
31
|
'claude-code': {
|
|
22
32
|
id: 'claude-code',
|
|
23
33
|
displayName: 'Claude Code',
|
|
24
|
-
description: 'Claude Code
|
|
34
|
+
description: 'Claude Code CLI - requires explicit --provider claude-code opt-in',
|
|
25
35
|
requiresApiKey: false,
|
|
26
36
|
envVariable: null,
|
|
37
|
+
requiresExplicitOptIn: true,
|
|
27
38
|
},
|
|
28
39
|
'openai': {
|
|
29
40
|
id: 'openai',
|
|
30
41
|
displayName: 'OpenAI',
|
|
31
|
-
description: 'OpenAI API direct',
|
|
42
|
+
description: 'OpenAI API direct - recommended',
|
|
32
43
|
requiresApiKey: true,
|
|
33
44
|
envVariable: 'OPENAI_API_KEY',
|
|
34
45
|
},
|
|
@@ -113,4 +124,14 @@ function isValidModelForProvider(provider, modelId) {
|
|
|
113
124
|
const models = getModelsForProvider(provider);
|
|
114
125
|
return models.some(m => m.id === modelId);
|
|
115
126
|
}
|
|
127
|
+
/**
|
|
128
|
+
* Check if a provider requires explicit opt-in
|
|
129
|
+
*
|
|
130
|
+
* @param provider - Provider identifier
|
|
131
|
+
* @returns true if provider requires explicit opt-in
|
|
132
|
+
*/
|
|
133
|
+
function requiresExplicitOptIn(provider) {
|
|
134
|
+
const info = exports.PROVIDER_REGISTRY[provider];
|
|
135
|
+
return info?.requiresExplicitOptIn ?? false;
|
|
136
|
+
}
|
|
116
137
|
//# sourceMappingURL=model-registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-registry.js","sourceRoot":"","sources":["../../../src/models/repl/model-registry.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"model-registry.js","sourceRoot":"","sources":["../../../src/models/repl/model-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -186,6 +186,7 @@ export declare class REPLInterface extends EventEmitter {
|
|
|
186
186
|
private session;
|
|
187
187
|
private running;
|
|
188
188
|
private initOnlyMode;
|
|
189
|
+
private keySetupMode;
|
|
189
190
|
private inputQueue;
|
|
190
191
|
private isProcessingInput;
|
|
191
192
|
private multiLineBuffer;
|
|
@@ -256,10 +257,24 @@ export declare class REPLInterface extends EventEmitter {
|
|
|
256
257
|
*/
|
|
257
258
|
private checkClaudeCodeAuth;
|
|
258
259
|
/**
|
|
259
|
-
* Check API key status and
|
|
260
|
+
* Check API key status and enter key-setup mode if not configured
|
|
260
261
|
* API keys are stored in global config file (~/.pm-orchestrator-runner/config.json)
|
|
262
|
+
*
|
|
263
|
+
* Key Setup Mode (fail-closed + interactive onboarding):
|
|
264
|
+
* - No API key = enter key-setup mode
|
|
265
|
+
* - Only /help, /keys, /provider, /exit are available
|
|
266
|
+
* - User must set a valid API key to proceed
|
|
261
267
|
*/
|
|
262
268
|
private checkApiKeyStatus;
|
|
269
|
+
/**
|
|
270
|
+
* Exit key-setup mode after a valid API key is configured
|
|
271
|
+
* This re-enables all commands
|
|
272
|
+
*/
|
|
273
|
+
private exitKeySetupMode;
|
|
274
|
+
/**
|
|
275
|
+
* Check if in key-setup mode
|
|
276
|
+
*/
|
|
277
|
+
isInKeySetupMode(): boolean;
|
|
263
278
|
/**
|
|
264
279
|
* Start the REPL
|
|
265
280
|
* Per spec 10_REPL_UX.md L45: validate project structure on startup
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repl-interface.d.ts","sourceRoot":"","sources":["../../src/repl/repl-interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAMH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAE,kBAAkB,EAAoB,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"repl-interface.d.ts","sourceRoot":"","sources":["../../src/repl/repl-interface.ts"],"names":[],"mappings":"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"}
|