poe-code 2.0.3 → 2.0.4
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 +17 -30
- package/dist/cli/command-runner.d.ts +1 -1
- package/dist/cli/commands/configure.d.ts +0 -2
- package/dist/cli/commands/configure.js +99 -34
- package/dist/cli/commands/configure.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +4 -0
- package/dist/cli/commands/doctor.js +73 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/remove.d.ts +1 -0
- package/dist/cli/commands/remove.js +41 -28
- package/dist/cli/commands/remove.js.map +1 -1
- package/dist/cli/commands/shared.d.ts +9 -12
- package/dist/cli/commands/shared.js +26 -24
- package/dist/cli/commands/shared.js.map +1 -1
- package/dist/cli/commands/spawn.d.ts +1 -0
- package/dist/cli/commands/spawn.js +14 -5
- package/dist/cli/commands/spawn.js.map +1 -1
- package/dist/cli/commands/test.d.ts +4 -0
- package/dist/cli/commands/test.js +36 -0
- package/dist/cli/commands/test.js.map +1 -0
- package/dist/cli/constants.d.ts +12 -9
- package/dist/cli/constants.js +15 -9
- package/dist/cli/constants.js.map +1 -1
- package/dist/cli/container.d.ts +3 -3
- package/dist/cli/context.d.ts +4 -13
- package/dist/cli/context.js +19 -149
- package/dist/cli/context.js.map +1 -1
- package/dist/cli/error-logger.js +1 -1
- package/dist/cli/error-logger.js.map +1 -1
- package/dist/cli/errors.d.ts +0 -10
- package/dist/cli/errors.js +0 -12
- package/dist/cli/errors.js.map +1 -1
- package/dist/cli/logger.js +9 -11
- package/dist/cli/logger.js.map +1 -1
- package/dist/cli/options.d.ts +13 -4
- package/dist/cli/options.js +12 -11
- package/dist/cli/options.js.map +1 -1
- package/dist/cli/program.js +5 -2
- package/dist/cli/program.js.map +1 -1
- package/dist/cli/prompts.d.ts +14 -4
- package/dist/cli/prompts.js +12 -24
- package/dist/cli/prompts.js.map +1 -1
- package/dist/cli/service-registry.d.ts +37 -15
- package/dist/cli/service-registry.js.map +1 -1
- package/dist/cli/telemetry.d.ts +1 -1
- package/dist/cli/ui/service-menu.d.ts +2 -2
- package/dist/cli/ui/theme.js +6 -6
- package/dist/cli/ui/theme.js.map +1 -1
- package/dist/providers/claude-code.d.ts +10 -46
- package/dist/providers/claude-code.js +94 -224
- package/dist/providers/claude-code.js.map +1 -1
- package/dist/providers/codex.d.ts +14 -40
- package/dist/providers/codex.js +74 -177
- package/dist/providers/codex.js.map +1 -1
- package/dist/providers/create-provider.d.ts +26 -0
- package/dist/providers/create-provider.js +120 -0
- package/dist/providers/create-provider.js.map +1 -0
- package/dist/providers/index.d.ts +2 -2
- package/dist/providers/index.js +4 -10
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/opencode.d.ts +3 -43
- package/dist/providers/opencode.js +112 -173
- package/dist/providers/opencode.js.map +1 -1
- package/dist/providers/provider-helpers.d.ts +10 -0
- package/dist/providers/provider-helpers.js +62 -0
- package/dist/providers/provider-helpers.js.map +1 -0
- package/dist/providers/versioned-provider.d.ts +3 -0
- package/dist/providers/versioned-provider.js +9 -0
- package/dist/providers/versioned-provider.js.map +1 -0
- package/dist/services/credentials.d.ts +14 -0
- package/dist/services/credentials.js +123 -22
- package/dist/services/credentials.js.map +1 -1
- package/dist/services/model-strategy.d.ts +1 -1
- package/dist/services/model-strategy.js +20 -15
- package/dist/services/model-strategy.js.map +1 -1
- package/dist/services/mutation-events.d.ts +4 -0
- package/dist/services/mutation-events.js +56 -0
- package/dist/services/mutation-events.js.map +1 -0
- package/dist/services/service-install.d.ts +3 -4
- package/dist/services/service-install.js +30 -12
- package/dist/services/service-install.js.map +1 -1
- package/dist/services/service-manifest.d.ts +49 -21
- package/dist/services/service-manifest.js +261 -64
- package/dist/services/service-manifest.js.map +1 -1
- package/dist/tools/label-generator.d.ts +2 -2
- package/dist/tools/label-generator.js +1 -1
- package/dist/tools/label-generator.js.map +1 -1
- package/dist/utils/binary-version.d.ts +6 -0
- package/dist/utils/binary-version.js +35 -0
- package/dist/utils/binary-version.js.map +1 -0
- package/dist/utils/command-checks.d.ts +39 -0
- package/dist/utils/command-checks.js +116 -0
- package/dist/utils/command-checks.js.map +1 -0
- package/package.json +6 -8
- package/dist/providers/roo-code.d.ts +0 -41
- package/dist/providers/roo-code.js +0 -201
- package/dist/providers/roo-code.js.map +0 -1
- package/dist/utils/prerequisites.d.ts +0 -41
- package/dist/utils/prerequisites.js +0 -92
- package/dist/utils/prerequisites.js.map +0 -1
|
@@ -1,92 +1,24 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { createBinaryExistsCheck,
|
|
3
|
-
import { ensureDirectory, jsonMergeMutation, jsonPruneMutation
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
name: "Claude Sonnet 4.5"
|
|
17
|
-
},
|
|
18
|
-
"GPT-5.1-Codex": {
|
|
19
|
-
name: "GPT-5.1-Codex"
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
const OPEN_CODE_CONFIG_SHAPE = {
|
|
26
|
-
provider: {
|
|
27
|
-
poe: true
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
const OPEN_CODE_AUTH_SHAPE = {
|
|
31
|
-
poe: true
|
|
32
|
-
};
|
|
33
|
-
const OPEN_CODE_MANIFEST = {
|
|
34
|
-
id: "opencode",
|
|
35
|
-
summary: "Configure OpenCode CLI to use the Poe API.",
|
|
36
|
-
prerequisites: {
|
|
37
|
-
after: ["opencode-cli-health"]
|
|
38
|
-
},
|
|
39
|
-
configure: [
|
|
40
|
-
ensureDirectory({
|
|
41
|
-
path: ({ options }) => path.dirname(options.configPath),
|
|
42
|
-
label: "Ensure OpenCode config directory"
|
|
43
|
-
}),
|
|
44
|
-
ensureDirectory({
|
|
45
|
-
path: ({ options }) => path.dirname(options.authPath),
|
|
46
|
-
label: "Ensure OpenCode auth directory"
|
|
47
|
-
}),
|
|
48
|
-
jsonMergeMutation({
|
|
49
|
-
target: ({ options }) => options.configPath,
|
|
50
|
-
label: "Merge OpenCode config",
|
|
51
|
-
value: () => OPEN_CODE_CONFIG_TEMPLATE
|
|
52
|
-
}),
|
|
53
|
-
jsonMergeMutation({
|
|
54
|
-
target: ({ options }) => options.authPath,
|
|
55
|
-
label: "Merge OpenCode auth",
|
|
56
|
-
value: ({ options }) => ({
|
|
57
|
-
poe: {
|
|
58
|
-
type: "api",
|
|
59
|
-
key: options.apiKey
|
|
60
|
-
}
|
|
61
|
-
})
|
|
62
|
-
})
|
|
63
|
-
],
|
|
64
|
-
remove: [
|
|
65
|
-
jsonPruneMutation({
|
|
66
|
-
target: ({ options }) => options.configPath,
|
|
67
|
-
label: "Prune OpenCode config",
|
|
68
|
-
shape: () => OPEN_CODE_CONFIG_SHAPE
|
|
69
|
-
}),
|
|
70
|
-
jsonPruneMutation({
|
|
71
|
-
target: ({ options }) => options.authPath,
|
|
72
|
-
label: "Prune OpenCode auth",
|
|
73
|
-
shape: () => OPEN_CODE_AUTH_SHAPE
|
|
74
|
-
}),
|
|
75
|
-
removeFileMutation({
|
|
76
|
-
target: ({ options }) => options.authPath,
|
|
77
|
-
label: "Delete OpenCode auth when empty",
|
|
78
|
-
whenEmpty: true
|
|
79
|
-
})
|
|
80
|
-
]
|
|
81
|
-
};
|
|
82
|
-
const OPEN_CODE_INSTALL_DEFINITION = {
|
|
1
|
+
import { DEFAULT_FRONTIER_MODEL, FRONTIER_MODELS, PROVIDER_NAME } from "../cli/constants.js";
|
|
2
|
+
import { createBinaryExistsCheck, createCommandExpectationCheck } from "../utils/command-checks.js";
|
|
3
|
+
import { ensureDirectory, jsonMergeMutation, jsonPruneMutation } from "../services/service-manifest.js";
|
|
4
|
+
import { createProvider } from "./create-provider.js";
|
|
5
|
+
import { createBinaryVersionResolver } from "./versioned-provider.js";
|
|
6
|
+
function providerModel(model) {
|
|
7
|
+
const value = model ?? DEFAULT_FRONTIER_MODEL;
|
|
8
|
+
const prefix = `${PROVIDER_NAME}/`;
|
|
9
|
+
return value.startsWith(prefix) ? value : `${prefix}${value}`;
|
|
10
|
+
}
|
|
11
|
+
const FRONTIER_MODEL_RECORD = FRONTIER_MODELS.reduce((acc, id) => {
|
|
12
|
+
acc[id] = { name: id };
|
|
13
|
+
return acc;
|
|
14
|
+
}, {});
|
|
15
|
+
export const OPEN_CODE_INSTALL_DEFINITION = {
|
|
83
16
|
id: "opencode",
|
|
84
17
|
summary: "OpenCode CLI",
|
|
85
|
-
check:
|
|
18
|
+
check: createBinaryExistsCheck("opencode", "opencode-cli-binary", "OpenCode CLI binary must exist"),
|
|
86
19
|
steps: [
|
|
87
20
|
{
|
|
88
21
|
id: "install-opencode-cli-npm",
|
|
89
|
-
description: "Install OpenCode CLI via npm",
|
|
90
22
|
command: "npm",
|
|
91
23
|
args: ["install", "-g", "opencode-ai"]
|
|
92
24
|
}
|
|
@@ -94,35 +26,9 @@ const OPEN_CODE_INSTALL_DEFINITION = {
|
|
|
94
26
|
postChecks: [createOpenCodeVersionCheck()],
|
|
95
27
|
successMessage: "Installed OpenCode CLI via npm."
|
|
96
28
|
};
|
|
97
|
-
export async function configureOpenCode(options, runOptions) {
|
|
98
|
-
await runServiceConfigure(OPEN_CODE_MANIFEST, {
|
|
99
|
-
fs: options.fs,
|
|
100
|
-
options
|
|
101
|
-
}, runOptions);
|
|
102
|
-
}
|
|
103
|
-
export async function spawnOpenCode(options) {
|
|
104
|
-
const args = ["run", options.prompt, ...(options.args ?? [])];
|
|
105
|
-
return options.runCommand("opencode", args);
|
|
106
|
-
}
|
|
107
|
-
export async function removeOpenCode(options, runOptions) {
|
|
108
|
-
return runServiceRemove(OPEN_CODE_MANIFEST, {
|
|
109
|
-
fs: options.fs,
|
|
110
|
-
options
|
|
111
|
-
}, runOptions);
|
|
112
|
-
}
|
|
113
|
-
export async function installOpenCode(context) {
|
|
114
|
-
return runServiceInstall(OPEN_CODE_INSTALL_DEFINITION, context);
|
|
115
|
-
}
|
|
116
|
-
export function registerOpenCodePrerequisites(prerequisites) {
|
|
117
|
-
prerequisites.registerAfter(createOpenCodeHealthCheck());
|
|
118
|
-
}
|
|
119
|
-
function createOpenCodeBinaryCheck() {
|
|
120
|
-
return createBinaryExistsCheck("opencode", "opencode-cli-binary", "OpenCode CLI binary must exist");
|
|
121
|
-
}
|
|
122
29
|
function createOpenCodeVersionCheck() {
|
|
123
30
|
return {
|
|
124
31
|
id: "opencode-cli-version",
|
|
125
|
-
description: "OpenCode CLI responds to --version",
|
|
126
32
|
async run({ runCommand }) {
|
|
127
33
|
const result = await runCommand("opencode", ["--version"]);
|
|
128
34
|
if (result.exitCode !== 0) {
|
|
@@ -131,80 +37,113 @@ function createOpenCodeVersionCheck() {
|
|
|
131
37
|
}
|
|
132
38
|
};
|
|
133
39
|
}
|
|
134
|
-
function
|
|
135
|
-
return
|
|
136
|
-
id: "opencode-cli-health",
|
|
137
|
-
description: "OpenCode CLI health check must succeed",
|
|
138
|
-
async run({ runCommand }) {
|
|
139
|
-
const result = await spawnOpenCode({
|
|
140
|
-
prompt: "Output exactly: OPEN_CODE_OK",
|
|
141
|
-
runCommand
|
|
142
|
-
});
|
|
143
|
-
if (result.exitCode !== 0) {
|
|
144
|
-
const detail = formatCommandRunnerResult(result);
|
|
145
|
-
throw new Error([
|
|
146
|
-
`OpenCode CLI health check failed with exit code ${result.exitCode}.`,
|
|
147
|
-
detail
|
|
148
|
-
].join("\n"));
|
|
149
|
-
}
|
|
150
|
-
const output = result.stdout.trim();
|
|
151
|
-
if (output !== "OPEN_CODE_OK") {
|
|
152
|
-
const detail = formatCommandRunnerResult(result);
|
|
153
|
-
throw new Error([
|
|
154
|
-
`OpenCode CLI health check failed: expected "OPEN_CODE_OK" but received "${output}".`,
|
|
155
|
-
detail
|
|
156
|
-
].join("\n"));
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
};
|
|
40
|
+
function getModelArgs(model) {
|
|
41
|
+
return ["--model", providerModel(model)];
|
|
160
42
|
}
|
|
161
|
-
export const
|
|
43
|
+
export const openCodeService = createProvider({
|
|
162
44
|
name: "opencode",
|
|
163
45
|
label: "OpenCode CLI",
|
|
46
|
+
id: "opencode",
|
|
47
|
+
summary: "Configure OpenCode CLI to use the Poe API.",
|
|
164
48
|
branding: {
|
|
165
49
|
colors: {
|
|
166
50
|
dark: "#4A4F55",
|
|
167
51
|
light: "#2F3338"
|
|
168
52
|
}
|
|
169
53
|
},
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
},
|
|
180
|
-
async install(context) {
|
|
181
|
-
await installOpenCode({
|
|
182
|
-
isDryRun: context.logger.context.dryRun,
|
|
183
|
-
runCommand: context.command.runCommand,
|
|
184
|
-
logger: (message) => context.logger.info(message)
|
|
185
|
-
});
|
|
54
|
+
configurePrompts: {
|
|
55
|
+
model: {
|
|
56
|
+
label: "OpenCode model",
|
|
57
|
+
defaultValue: DEFAULT_FRONTIER_MODEL,
|
|
58
|
+
choices: FRONTIER_MODELS.map((id) => ({
|
|
59
|
+
title: id,
|
|
60
|
+
value: id
|
|
61
|
+
}))
|
|
62
|
+
}
|
|
186
63
|
},
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
64
|
+
manifest: {
|
|
65
|
+
"*": {
|
|
66
|
+
configure: [
|
|
67
|
+
ensureDirectory({
|
|
68
|
+
path: "~/.config/opencode"
|
|
69
|
+
}),
|
|
70
|
+
ensureDirectory({
|
|
71
|
+
path: "~/.local/share/opencode"
|
|
72
|
+
}),
|
|
73
|
+
jsonMergeMutation({
|
|
74
|
+
target: "~/.config/opencode/config.json",
|
|
75
|
+
value: ({ options }) => {
|
|
76
|
+
const { model } = (options ?? {});
|
|
77
|
+
return {
|
|
78
|
+
$schema: "https://opencode.ai/config.json",
|
|
79
|
+
model: providerModel(model),
|
|
80
|
+
provider: {
|
|
81
|
+
[PROVIDER_NAME]: {
|
|
82
|
+
npm: "@ai-sdk/openai-compatible",
|
|
83
|
+
name: "poe.com",
|
|
84
|
+
options: {
|
|
85
|
+
baseURL: "https://api.poe.com/v1"
|
|
86
|
+
},
|
|
87
|
+
models: FRONTIER_MODEL_RECORD
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}),
|
|
93
|
+
jsonMergeMutation({
|
|
94
|
+
target: "~/.local/share/opencode/auth.json",
|
|
95
|
+
value: ({ options }) => {
|
|
96
|
+
const { apiKey } = (options ?? {});
|
|
97
|
+
return {
|
|
98
|
+
[PROVIDER_NAME]: {
|
|
99
|
+
type: "api",
|
|
100
|
+
key: apiKey ?? ""
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
})
|
|
105
|
+
],
|
|
106
|
+
remove: [
|
|
107
|
+
jsonPruneMutation({
|
|
108
|
+
target: "~/.config/opencode/config.json",
|
|
109
|
+
shape: () => ({
|
|
110
|
+
provider: {
|
|
111
|
+
[PROVIDER_NAME]: true
|
|
112
|
+
}
|
|
113
|
+
})
|
|
114
|
+
}),
|
|
115
|
+
jsonPruneMutation({
|
|
116
|
+
target: "~/.local/share/opencode/auth.json",
|
|
117
|
+
shape: () => ({
|
|
118
|
+
[PROVIDER_NAME]: true
|
|
119
|
+
})
|
|
120
|
+
})
|
|
121
|
+
]
|
|
122
|
+
}
|
|
194
123
|
},
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
124
|
+
versionResolver: createBinaryVersionResolver("opencode"),
|
|
125
|
+
install: OPEN_CODE_INSTALL_DEFINITION,
|
|
126
|
+
test(context) {
|
|
127
|
+
return context.runCheck(createCommandExpectationCheck({
|
|
128
|
+
id: "opencode-cli-health",
|
|
129
|
+
command: "opencode",
|
|
130
|
+
args: [
|
|
131
|
+
...getModelArgs(DEFAULT_FRONTIER_MODEL),
|
|
132
|
+
"run",
|
|
133
|
+
"Output exactly: OPEN_CODE_OK"
|
|
134
|
+
],
|
|
135
|
+
expectedOutput: "OPEN_CODE_OK"
|
|
136
|
+
}));
|
|
201
137
|
},
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
138
|
+
spawn(context, options) {
|
|
139
|
+
const opts = (options ?? {});
|
|
140
|
+
const args = [
|
|
141
|
+
...getModelArgs(opts.model),
|
|
142
|
+
"run",
|
|
143
|
+
opts.prompt,
|
|
144
|
+
...(opts.args ?? [])
|
|
145
|
+
];
|
|
146
|
+
return context.command.runCommand("opencode", args);
|
|
208
147
|
}
|
|
209
|
-
};
|
|
148
|
+
});
|
|
210
149
|
//# sourceMappingURL=opencode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/providers/opencode.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/providers/opencode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ServiceMutation } from "../services/service-manifest.js";
|
|
2
|
+
type TargetResolver<Options> = string | ((context: {
|
|
3
|
+
options: Options;
|
|
4
|
+
}) => string);
|
|
5
|
+
export declare function makeExecutableMutation<Options>(config: {
|
|
6
|
+
target: TargetResolver<Options>;
|
|
7
|
+
mode?: number;
|
|
8
|
+
}): ServiceMutation<Options>;
|
|
9
|
+
export declare function quoteSinglePath(targetPath: string): string;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
export function makeExecutableMutation(config) {
|
|
3
|
+
const mode = config.mode ?? 0o700;
|
|
4
|
+
const resolver = toResolver(config.target);
|
|
5
|
+
return {
|
|
6
|
+
kind: "transformFile",
|
|
7
|
+
target: resolver,
|
|
8
|
+
label: (context) => `Make file executable ${resolveTargetPath(resolver, context)}`,
|
|
9
|
+
async transform({ content, context }) {
|
|
10
|
+
if (typeof context.fs.chmod === "function" && content != null) {
|
|
11
|
+
const targetPath = resolveTargetPath(resolver, context);
|
|
12
|
+
await context.fs.chmod(targetPath, mode);
|
|
13
|
+
}
|
|
14
|
+
return { content, changed: false };
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export function quoteSinglePath(targetPath) {
|
|
19
|
+
const escaped = targetPath.replace(/'/g, `'\\''`);
|
|
20
|
+
return `'${escaped}'`;
|
|
21
|
+
}
|
|
22
|
+
function toResolver(input) {
|
|
23
|
+
if (typeof input === "function") {
|
|
24
|
+
return input;
|
|
25
|
+
}
|
|
26
|
+
return () => input;
|
|
27
|
+
}
|
|
28
|
+
function resolveTargetPath(resolver, context) {
|
|
29
|
+
const raw = resolver(context);
|
|
30
|
+
if (!raw.startsWith("~")) {
|
|
31
|
+
return raw;
|
|
32
|
+
}
|
|
33
|
+
let targetPath = raw;
|
|
34
|
+
if (targetPath.startsWith("~./")) {
|
|
35
|
+
targetPath = `~/.${targetPath.slice(3)}`;
|
|
36
|
+
}
|
|
37
|
+
const homeDir = context.env?.homeDir ??
|
|
38
|
+
context.options.env?.homeDir ??
|
|
39
|
+
process.env.HOME ??
|
|
40
|
+
process.env.USERPROFILE;
|
|
41
|
+
if (!homeDir) {
|
|
42
|
+
return targetPath;
|
|
43
|
+
}
|
|
44
|
+
let remainder = targetPath.slice(1);
|
|
45
|
+
if (remainder.startsWith("/")) {
|
|
46
|
+
remainder = remainder.slice(1);
|
|
47
|
+
}
|
|
48
|
+
else if (remainder.startsWith("\\")) {
|
|
49
|
+
remainder = remainder.slice(1);
|
|
50
|
+
}
|
|
51
|
+
else if (remainder.startsWith(".")) {
|
|
52
|
+
remainder = remainder.slice(1);
|
|
53
|
+
if (remainder.startsWith("/")) {
|
|
54
|
+
remainder = remainder.slice(1);
|
|
55
|
+
}
|
|
56
|
+
else if (remainder.startsWith("\\")) {
|
|
57
|
+
remainder = remainder.slice(1);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return remainder.length === 0 ? homeDir : path.join(homeDir, remainder);
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=provider-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-helpers.js","sourceRoot":"","sources":["../../src/providers/provider-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { ProviderContext } from "../cli/service-registry.js";
|
|
2
|
+
export type ProviderVersionResolver<TPaths extends Record<string, unknown>> = (context: ProviderContext<TPaths>) => Promise<string | null>;
|
|
3
|
+
export declare function createBinaryVersionResolver(binaryName: string): ProviderVersionResolver<Record<string, string>>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { detectBinaryVersion } from "../utils/binary-version.js";
|
|
2
|
+
export function createBinaryVersionResolver(binaryName) {
|
|
3
|
+
return async (context) => {
|
|
4
|
+
const result = await detectBinaryVersion(context.command.runCommand, binaryName);
|
|
5
|
+
context.logger.verbose(`Detected ${binaryName} version ${result.version} (raw output: ${result.rawOutput})`);
|
|
6
|
+
return result.version;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=versioned-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versioned-provider.js","sourceRoot":"","sources":["../../src/providers/versioned-provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAMjE,MAAM,UAAU,2BAA2B,CACzC,UAAkB;IAElB,OAAO,KAAK,EAAE,OAAO,EAAE,EAAE;QACvB,MAAM,MAAM,GAAG,MAAM,mBAAmB,CACtC,OAAO,CAAC,OAAO,CAAC,UAAU,EAC1B,UAAU,CACX,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,OAAO,CACpB,YAAY,UAAU,YAAY,MAAM,CAAC,OAAO,iBAAiB,MAAM,CAAC,SAAS,GAAG,CACrF,CAAC;QACF,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -6,6 +6,20 @@ export interface CredentialsStoreOptions {
|
|
|
6
6
|
export interface SaveCredentialsOptions extends CredentialsStoreOptions {
|
|
7
7
|
apiKey: string;
|
|
8
8
|
}
|
|
9
|
+
export interface ConfiguredServiceMetadata {
|
|
10
|
+
version: string | null;
|
|
11
|
+
files: string[];
|
|
12
|
+
}
|
|
13
|
+
export interface SaveConfiguredServiceOptions extends CredentialsStoreOptions {
|
|
14
|
+
service: string;
|
|
15
|
+
metadata: ConfiguredServiceMetadata;
|
|
16
|
+
}
|
|
17
|
+
export interface RemoveConfiguredServiceOptions extends CredentialsStoreOptions {
|
|
18
|
+
service: string;
|
|
19
|
+
}
|
|
9
20
|
export declare function saveCredentials(options: SaveCredentialsOptions): Promise<void>;
|
|
10
21
|
export declare function loadCredentials(options: CredentialsStoreOptions): Promise<string | null>;
|
|
11
22
|
export declare function deleteCredentials(options: CredentialsStoreOptions): Promise<boolean>;
|
|
23
|
+
export declare function loadConfiguredServices(options: CredentialsStoreOptions): Promise<Record<string, ConfiguredServiceMetadata>>;
|
|
24
|
+
export declare function saveConfiguredService(options: SaveConfiguredServiceOptions): Promise<void>;
|
|
25
|
+
export declare function removeConfiguredService(options: RemoveConfiguredServiceOptions): Promise<boolean>;
|